Class: Spree::Checkout::AddStoreCredit

Inherits:
Object
  • Object
show all
Includes:
ServiceModule::Base
Defined in:
app/services/spree/checkout/add_store_credit.rb

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:, amount: nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'app/services/spree/checkout/add_store_credit.rb', line 6

def call(order:, amount: nil)
  @order = order
  return failed unless @order

  remaining_total = amount ? [amount, @order.outstanding_balance].min : @order.outstanding_balance

  return failure(nil, Spree.t(:error_user_does_not_have_any_store_credits)) unless @order.user&.store_credits&.any?

  ApplicationRecord.transaction do
    @order.payments.store_credits.where(state: :checkout).map(&:invalidate!)

    apply_store_credits(remaining_total)
  end

  @order.reload.payments.store_credits.valid.any? ? success(@order) : failure(@order)
end