Class: Spree::Promotion::Actions::CreateItemAdjustments
- Inherits:
-
Spree::PromotionAction
- Object
- ActiveRecord::Base
- Base
- Spree::PromotionAction
- Spree::Promotion::Actions::CreateItemAdjustments
- Includes:
- AdjustmentSource, CalculatedAdjustments
- Defined in:
- app/models/spree/promotion/actions/create_item_adjustments.rb
Instance Method Summary collapse
-
#compute_amount(adjustable) ⇒ Object
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total.
- #create_adjustment(adjustable, order) ⇒ Object
- #perform(payload = {}) ⇒ Object
Methods inherited from Base
Methods included from Spree::Preferences::Preferable
#clear_preferences, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#compute_amount(adjustable) ⇒ Object
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total
42 43 44 45 46 47 48 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 42 def compute_amount(adjustable) order = adjustable.is_a?(Order) ? adjustable : adjustable.order return 0 unless promotion.line_item_actionable?(order, adjustable) promotion_amount = self.calculator.compute(adjustable).to_f.abs [adjustable.amount, promotion_amount].min * -1 end |
#create_adjustment(adjustable, order) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 28 def create_adjustment(adjustable, order) amount = self.compute_amount(adjustable) return if amount == 0 self.adjustments.create!( amount: amount, adjustable: adjustable, order: order, label: "#{Spree.t(:promotion)} (#{promotion.name})", ) true end |
#perform(payload = {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 15 def perform(payload = {}) order = payload[:order] promotion = payload[:promotion] result = false line_items_to_adjust(promotion, order).each do |line_item| current_result = self.create_adjustment(line_item, order) result ||= current_result end return result end |