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
Direct Known Subclasses
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.
- #perform(payload = {}) ⇒ Object
-
#remove_from(order) ⇒ void
Removes any adjustments generated by this action from the order’s line items.
Methods included from AdjustmentSource
#deals_with_adjustments_for_deleted_source, #remove_adjustments_from_incomplete_orders
Methods included from CalculatedAdjustments
#calculator_type, #calculator_type=
Methods inherited from Spree::PromotionAction
Methods inherited from Base
display_includes, page, preference, #preferences
Methods included from Core::Permalinks
#generate_permalink, #save_permalink
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
32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 32 def compute_amount(adjustable) order = adjustable.is_a?(Order) ? adjustable : adjustable.order return 0 unless promotion.line_item_actionable?(order, adjustable) promotion_amount = calculator.compute(adjustable) if !promotion_amount.is_a?(BigDecimal) Spree::Deprecation.warn "#{calculator.class.name}#compute returned #{promotion_amount.inspect}, it should return a BigDecimal" end promotion_amount ||= BigDecimal(0) promotion_amount = promotion_amount.abs [adjustable.amount, promotion_amount].min * -1 end |
#perform(payload = {}) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 18 def perform(payload = {}) order = payload[:order] promotion = payload[:promotion] promotion_code = payload[:promotion_code] results = line_items_to_adjust(promotion, order).map do |line_item| create_adjustment(line_item, order, promotion_code) end results.any? end |
#remove_from(order) ⇒ void
This method returns an undefined value.
Removes any adjustments generated by this action from the order’s
line items.
48 49 50 51 52 53 54 55 56 |
# File 'app/models/spree/promotion/actions/create_item_adjustments.rb', line 48 def remove_from(order) order.line_items.each do |line_item| line_item.adjustments.each do |adjustment| if adjustment.source == self line_item.adjustments.destroy(adjustment) end end end end |