Class: Spree::Promotion::Actions::CreateAdjustment Private
- 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
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Instance Method Summary collapse
-
#compute_amount(calculable) ⇒ Object
private
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total.
-
#perform(options = {}) ⇒ Object
private
Creates the adjustment related to a promotion for the order passed through options hash.
-
#remove_from(order) ⇒ void
private
Removes any adjustments generated by this action from the order.
Methods included from AdjustmentSource
#deals_with_adjustments_for_deleted_source
Methods included from CalculatedAdjustments
#calculator_type, #calculator_type=
Methods inherited from Base
display_includes, #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
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Ensure a negative amount which does not exceed the sum of the order’s item_total and ship_total
37 38 39 40 41 42 43 44 45 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 37 def compute_amount(calculable) amount = calculator.compute(calculable) if !amount.is_a?(BigDecimal) Spree::Deprecation.warn "#{calculator.class.name}#compute returned #{amount.inspect}, it should return a BigDecimal" end amount ||= BigDecimal.new(0) amount = amount.abs [(calculable.item_total + calculable.ship_total), amount].min * -1 end |
#perform(options = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
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 |
# 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) order.adjustments.create!( amount: amount, order: order, source: self, promotion_code: [:promotion_code], label: Spree.t('adjustment_labels.order', promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) ) true end |
#remove_from(order) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Removes any adjustments generated by this action from the order.
50 51 52 53 54 55 56 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 50 def remove_from(order) order.adjustments.each do |adjustment| if adjustment.source == self order.adjustments.destroy(adjustment) end end end |