Skip to content

Commit b040a9c

Browse files
Enable/Disable store credit at checkout step
1 parent a7ac7d8 commit b040a9c

4 files changed

Lines changed: 40 additions & 3 deletions

File tree

core/app/models/spree/order.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,6 @@ def add_store_credit_payments
676676

677677
remaining_total = outstanding_balance - authorized_total
678678

679-
matching_store_credits = user.store_credits.where(currency: currency)
680-
681679
if matching_store_credits.any?
682680
payment_method = Spree::PaymentMethod::StoreCredit.first
683681

@@ -824,6 +822,20 @@ def validate_payments_attributes(attributes)
824822

825823
private
826824

825+
def matching_store_credits
826+
@matching_store_credits ||= if use_store_credits?
827+
user.store_credits.where(currency: currency)
828+
else
829+
[]
830+
end
831+
end
832+
833+
def use_store_credits?
834+
return Spree::Config[:default_use_store_credits] if use_store_credits.nil?
835+
836+
super
837+
end
838+
827839
def process_payments_before_complete
828840
return if !payment_required?
829841

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddUseStoreCreditsToSpreeOrders < ActiveRecord::Migration[5.2]
2+
def change
3+
add_column :spree_orders, :use_store_credits, :boolean, default: nil
4+
end
5+
end

core/lib/spree/app_configuration.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ class AppConfiguration < Preferences::Configuration
5656
# @return [Boolean] When false, customers must create an account to complete an order (default: +true+)
5757
preference :allow_guest_checkout, :boolean, default: true
5858

59+
# @!attribute [rw] default_use_store_credits
60+
# @return [Boolean] When true, user store credits will applied for default (default: +true+)
61+
preference :default_use_store_credits, :boolean, default: true
62+
5963
# @!attribute [rw] guest_token_cookie_options
6064
# @return [Hash] Add additional guest_token cookie options here (ie. domain or path)
6165
preference :guest_token_cookie_options, :hash, default: {}

core/spec/models/spree/order_spec.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,10 +1297,26 @@ def generate
12971297
end
12981298

12991299
context "there is a credit card payment" do
1300+
subject(:add_store_credit_payments!) { order.add_store_credit_payments }
1301+
1302+
let!(:cc_payment) { create(:payment, order: order) }
1303+
13001304
it "invalidates the credit card payment" do
1301-
cc_payment = create(:payment, order: order)
13021305
expect { subject }.to change { cc_payment.reload.state }.to 'invalid'
13031306
end
1307+
1308+
context "when the order doesn't use store credits" do
1309+
let(:order) do
1310+
create(:order_with_totals,
1311+
use_store_credits: false,
1312+
user: store_credit.user,
1313+
line_items_price: order_total).tap(&:recalculate)
1314+
end
1315+
1316+
it "doesn't invalidates the credit card payment" do
1317+
expect { add_store_credit_payments! }.not_to(change { cc_payment.reload.state })
1318+
end
1319+
end
13041320
end
13051321
end
13061322

0 commit comments

Comments
 (0)