Class: Spree::Adjustment

Inherits:
Base
  • Object
show all
Defined in:
app/models/spree/adjustment.rb

Instance Method Summary collapse

Methods inherited from Base

page

Methods included from Preferences::Preferable

#clear_preferences, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference

Instance Method Details

#closed?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'app/models/spree/adjustment.rb', line 59

def closed?
  state == "closed"
end

#currencyObject



63
64
65
# File 'app/models/spree/adjustment.rb', line 63

def currency
  adjustable ? adjustable.currency : Spree::Config[:currency]
end

#display_amountObject



67
68
69
# File 'app/models/spree/adjustment.rb', line 67

def display_amount
  Spree::Money.new(amount, { currency: currency })
end

#promotion?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'app/models/spree/adjustment.rb', line 71

def promotion?
  source.class < Spree::PromotionAction
end

#update!(target = nil) ⇒ Object

Recalculate amount given a target e.g. Order, Shipment, LineItem

Passing a target here would always be recommended as it would avoid hitting the database again and would ensure you’re compute values over the specific object amount passed here.

Noop if the adjustment is locked.

If the adjustment has no source, do not attempt to re-calculate the amount. Chances are likely that this was a manually created adjustment in the admin backend.



85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/spree/adjustment.rb', line 85

def update!(target = nil)
  return amount if closed?
  if source.present?
    amount = source.compute_amount(target || adjustable)
    self.update_columns(
      amount: amount,
      updated_at: Time.now,
    )
    if promotion?
      self.update_column(:eligible, source.promotion.eligible?(adjustable))
    end
  end
  amount
end