Sha256: c8db3b77817cb04374acdd6754393063082fa4a88465f9200e0ee32e013ec09f
Contents?: true
Size: 1.24 KB
Versions: 3
Compression:
Stored size: 1.24 KB
Contents
# A rule to limit a promotion based on products in the order. # Can require all or any of the products to be present. # Valid products either come from assigned product group or are assingned directly to the rule. class Promotion::Rules::Product < PromotionRule belongs_to :product_group has_and_belongs_to_many :products, :class_name => '::Product', :join_table => 'products_promotion_rules', :foreign_key => 'promotion_rule_id' MATCH_POLICIES = %w(any all) preference :match_policy, :string, :default => MATCH_POLICIES.first # scope/association that is used to test eligibility def eligible_products product_group ? product_group.products : products end def eligible?(order) return true if eligible_products.empty? order_products = order.line_items.map{|li| li.variant.product} if preferred_match_policy == 'all' eligible_products.all? {|p| order_products.include?(p) } else order_products.any? {|p| eligible_products.include?(p) } end end def products_source=(source) if source.to_s == 'manual' self.product_group_id = nil end end def product_ids_string product_ids.join(',') end def product_ids_string=(s) self.product_ids = s.to_s.split(',').map(&:strip) end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
spree_promo-0.30.2 | app/models/promotion/rules/product.rb |
spree_promo-0.30.1 | app/models/promotion/rules/product.rb |
spree_promo-0.30.0 | app/models/promotion/rules/product.rb |