Class: Spree::Promotion::Actions::CreateAdjustment
- Inherits:
-
Spree::PromotionAction
- Object
- ActiveRecord::Base
- Base
- Spree::PromotionAction
- Spree::Promotion::Actions::CreateAdjustment
- Includes:
- AdjustmentSource, CalculatedAdjustments
- Defined in:
- app/models/spree/promotion/actions/create_adjustment.rb
Instance Method Summary collapse
-
#compute_amount(calculable) ⇒ Object
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total.
-
#perform(options = {}) ⇒ Object
Creates the adjustment related to a promotion for the order passed through options hash.
Methods inherited from Base
#initialize_preference_defaults, page, preference
Methods included from Spree::Preferences::Preferable
#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#compute_amount(calculable) ⇒ Object
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total
39 40 41 42 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 39 def compute_amount(calculable) amount = self.calculator.compute(calculable).to_f.abs [(calculable.item_total + calculable.ship_total), amount].min * -1 end |
#perform(options = {}) ⇒ Object
Creates the adjustment related to a promotion for the order passed through options hash
Returns true if an adjustment is applied to an order, false if the promotion has already been applied.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 20 def perform( = {}) order = [:order] return if promotion_credit_exists?(order) amount = compute_amount(order) return if amount == 0 Spree::Adjustment.create!( amount: amount, order: order, adjustable: order, source: self, promotion_code: [:promotion_code], label: "#{Spree.t(:promotion)} (#{promotion.name})" ) true end |