diff options
author | Nicolò€ Rebughini <nicolo.rebughini@gmail.com> | 2020-11-16 14:43:58 +0100 |
---|---|---|
committer | Nicolò€ Rebughini <nicolo.rebughini@gmail.com> | 2020-11-16 17:29:06 +0100 |
commit | 2043e4777eba02bc48692d6d45c78c8c99d3dd5c (patch) | |
tree | e477a3e11a3665167d7e9c951bf3631e6e12765b /lib | |
parent | 6180dacde705b8cfb30229c0653df80202c58159 (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.rb | 7 | ||||
-rw-r--r-- | lib/solidus_subscriptions/configuration.rb | 2 | ||||
-rw-r--r-- | lib/solidus_subscriptions/processor.rb | 6 |
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 |