Class: Calculator::RelatedProductDiscount
- Inherits:
-
Spree::Calculator
- Object
- Spree::Calculator
- Calculator::RelatedProductDiscount
- Defined in:
- app/models/spree/calculator/related_product_discount.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.description ⇒ Object
3 4 5 |
# File 'app/models/spree/calculator/related_product_discount.rb', line 3 def self.description Spree.t(:related_product_discount) end |
Instance Method Details
#compute(object) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/models/spree/calculator/related_product_discount.rb', line 7 def compute(object) if object.is_a?(Array) return if object.empty? order = object.first.order else order = object end return unless eligible?(order) total = order.line_items.inject(0) do |sum, line_item| relations = Spree::Relation.where(*discount_query(line_item)) discount_applies_to = relations.map { |rel| rel..master } order.line_items.each do |li| next li unless discount_applies_to.include? li.variant discount = relations.detect { |rel| rel..master == li.variant }.discount_amount sum += if li.quantity < line_item.quantity (discount * li.quantity) else (discount * line_item.quantity) end end sum end total end |
#discount_query(line_item) ⇒ Object
42 43 44 45 46 47 48 |
# File 'app/models/spree/calculator/related_product_discount.rb', line 42 def discount_query(line_item) [ 'discount_amount <> 0.0 AND relatable_type = ? AND relatable_id = ?', 'Spree::Product', line_item.variant.product.id ] end |