summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNicolò€ Rebughini <nicolo.rebughini@gmail.com>2020-11-16 14:43:58 +0100
committerNicolò€ Rebughini <nicolo.rebughini@gmail.com>2020-11-16 17:29:06 +0100
commit2043e4777eba02bc48692d6d45c78c8c99d3dd5c (patch)
treee477a3e11a3665167d7e9c951bf3631e6e12765b /lib
parent6180dacde705b8cfb30229c0653df80202c58159 (diff)
Add config to ignore past unfulfilled installments
This implements a configuration to ignore past unfulfilled installments for subscriptions upon installments creations. Since failed installments (e.g. because of an expired credit card) are retried indefinitely, they can overlap and also be retried after another subscription cycle began. In this particular case, a customer who fixes their payment method after a new cycle, would be charged for double (or X times as much based on how long it passed) and sent double the quantity of the same product. Because in some cases this is not desirable, this adds a switch to skip any failed past installment when a new installment gets created under the same subscription.
Diffstat (limited to 'lib')
-rw-r--r--lib/generators/solidus_subscriptions/install/templates/initializer.rb7
-rw-r--r--lib/solidus_subscriptions/configuration.rb2
-rw-r--r--lib/solidus_subscriptions/processor.rb6
3 files changed, 14 insertions, 1 deletions
diff --git a/lib/generators/solidus_subscriptions/install/templates/initializer.rb b/lib/generators/solidus_subscriptions/install/templates/initializer.rb
index 150f439..a346412 100644
--- a/lib/generators/solidus_subscriptions/install/templates/initializer.rb
+++ b/lib/generators/solidus_subscriptions/install/templates/initializer.rb
@@ -82,4 +82,11 @@ SolidusSubscriptions.configure do |config|
# Your Churn Buster API key.
# config.churn_buster_api_key = 'YOUR_CHURN_BUSTER_API_KEY'
+
+ # =================================== Clear past installments ====================================
+ #
+ # This setting prevents the overlap of old failed installments (e.g. for an expired credit card)
+ # with new subscription cycles by clearing any past failed installment when a new one is created
+
+ # config.clear_past_installments = true
end
diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb
index 9cf1408..13254be 100644
--- a/lib/solidus_subscriptions/configuration.rb
+++ b/lib/solidus_subscriptions/configuration.rb
@@ -4,7 +4,7 @@ module SolidusSubscriptions
class Configuration
attr_accessor(
:maximum_total_skips, :maximum_reprocessing_attempts, :churn_buster_account_id,
- :churn_buster_api_key,
+ :churn_buster_api_key, :clear_past_installments,
)
attr_writer(
diff --git a/lib/solidus_subscriptions/processor.rb b/lib/solidus_subscriptions/processor.rb
index 817d957..4946b5a 100644
--- a/lib/solidus_subscriptions/processor.rb
+++ b/lib/solidus_subscriptions/processor.rb
@@ -98,6 +98,12 @@ module SolidusSubscriptions
sub.advance_actionable_date
sub.cancel! if sub.pending_cancellation?
sub.deactivate! if sub.can_be_deactivated?
+ if SolidusSubscriptions.configuration.clear_past_installments
+ sub.installments.unfulfilled.each do |installment|
+ installment.actionable_date = nil
+ installment.save!
+ end
+ end
sub.installments.create!
end
end