Sha256: a7aff38632290cfecdc3e4ab2abd3704fa1415e40a9764f5f24098b6202d8cb1
Contents?: true
Size: 1.36 KB
Versions: 3
Compression:
Stored size: 1.36 KB
Contents
require_dependency 'spree/calculator' module Spree class Calculator::PerItem < Calculator preference :amount, :decimal, :default => 0 attr_accessible :preferred_amount def self.description I18n.t(:flat_rate_per_item) end def compute(object=nil) return 0 if object.nil? self.preferred_amount * object.line_items.reduce(0) do |sum, value| if !matching_products || matching_products.include?(value.product) value_to_add = value.quantity else value_to_add = 0 end sum + value_to_add end end # Returns all products that match this calculator, but only if the calculator # is attached to a promotion. If attached to a ShippingMethod, nil is returned. def matching_products # Regression check for #1596 # Calculator::PerItem can be used in two cases. # The first is in a typical promotion, providing a discount per item of a particular item # The second is a ShippingMethod, where it applies to an entire order # # Shipping methods do not have promotions attached, but promotions do # Therefore we must check for promotions if self.calculable.respond_to?(:promotion) self.calculable.promotion.rules.map do |rule| rule.respond_to?(:products) ? rule.products : [] end.flatten end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
spree_core-1.2.5 | app/models/spree/calculator/per_item.rb |
spree_core-1.2.4 | app/models/spree/calculator/per_item.rb |
spree_core-1.2.3 | app/models/spree/calculator/per_item.rb |