Class: Spree::Adjustment
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Spree::Adjustment
- Defined in:
- app/models/spree/adjustment.rb
Instance Method Summary collapse
- #closed? ⇒ Boolean
- #currency ⇒ Object
- #display_amount ⇒ Object
- #promotion? ⇒ Boolean
-
#update!(target = nil) ⇒ Object
Recalculate amount given a target e.g.
Instance Method Details
#closed? ⇒ Boolean
58 59 60 |
# File 'app/models/spree/adjustment.rb', line 58 def closed? state == "closed" end |
#currency ⇒ Object
91 92 93 |
# File 'app/models/spree/adjustment.rb', line 91 def currency adjustable ? adjustable.currency : Spree::Config[:currency] end |
#display_amount ⇒ Object
95 96 97 |
# File 'app/models/spree/adjustment.rb', line 95 def display_amount Spree::Money.new(amount, { currency: currency }) end |
#promotion? ⇒ Boolean
62 63 64 |
# File 'app/models/spree/adjustment.rb', line 62 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.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'app/models/spree/adjustment.rb', line 76 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 |