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.
-
#remove_from(order) ⇒ void
Removes any adjustments generated by this action from the order.
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 included from Spree::ParanoiaDeprecations
#paranoia_delete, #paranoia_destroy
Methods inherited from Base
display_includes, #initialize_preference_defaults, page, preference
Methods included from Spree::Preferences::Preferable
#admin_form_preference_names, #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
40 41 42 43 44 45 46 47 48 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 40 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(0) amount = amount.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.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 23 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: I18n.t('spree.adjustment_labels.order', promotion: Spree::Promotion.model_name.human, promotion_name: promotion.name) ) true end |
#remove_from(order) ⇒ void
This method returns an undefined value.
Removes any adjustments generated by this action from the order.
53 54 55 56 57 58 59 |
# File 'app/models/spree/promotion/actions/create_adjustment.rb', line 53 def remove_from(order) order.adjustments.each do |adjustment| if adjustment.source == self order.adjustments.destroy(adjustment) end end end |