Sha256: 64d2a7104f350df1699239587d75793fa376cc9139894a2965472328d520f081
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
# frozen_string_literal: true module SolidusFriendlyPromotions module Conditions # A condition to apply a promotion only to line items with or without a chosen product class LineItemProduct < Condition include LineItemLevelCondition MATCH_POLICIES = %w[include exclude].freeze has_many :condition_products, dependent: :destroy, foreign_key: :condition_id, class_name: "SolidusFriendlyPromotions::ConditionProduct" has_many :products, class_name: "Spree::Product", through: :condition_products preference :match_policy, :string, default: MATCH_POLICIES.first def eligible?(line_item, _options = {}) order_includes_product = product_ids.include?(line_item.variant.product_id) success = inverse? ? !order_includes_product : order_includes_product unless success message_code = inverse? ? :has_excluded_product : :no_applicable_products eligibility_errors.add( :base, eligibility_error_message(message_code), error_code: message_code ) end success end def product_ids_string product_ids.join(",") end def product_ids_string=(product_ids) self.product_ids = product_ids.to_s.split(",").map(&:strip) end private def inverse? preferred_match_policy == "exclude" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
solidus_friendly_promotions-1.9.0 | app/models/solidus_friendly_promotions/conditions/line_item_product.rb |