Sha256: 64376c2ab3d1230d2960bd0eb43d3a9d10326988bf73152d3a3844ca602ab46d

Contents?: true

Size: 1.22 KB

Versions: 23

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

namespace :solidus do
  desc "Split Promotions with 'any' match policy"
  task split_promotions_with_any_match_policy: :environment do
    Spree::Promotion.where(match_policy: :any).includes(:promotion_rules).all.each do |promotion|
      if promotion.promotion_rules.length <= 1
        promotion.update!(match_policy: :all)
      elsif promotion.active?
        promotion.rules.map do |rule|
          new_promotion = promotion.dup
          new_promotion.promotion_rules = [rule]
          new_promotion.match_policy = "all"
          new_promotion.promotion_actions = promotion.actions.map do |action|
            new_action = action.dup
            if action.respond_to?(:calculator)
              new_action.calculator = action.calculator.dup
            end
            new_action.promotion = new_promotion
            new_action.save!
            new_action
          end
          new_promotion.expires_at = promotion.expires_at
          new_promotion.starts_at = Time.current
          new_promotion.save!
        end
        promotion.update!(expires_at: Time.current)
      end
    end

    Spree::Order.where(completed_at: nil).each { |order| Spree::PromotionHandler::Cart.new(order).activate }
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
solidus_core-3.4.6 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.5 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.4 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.3.4 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.9 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.8 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.3.3 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.3 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.2 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.7 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.3.2 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.1 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.4.0 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.3.1 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.6 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.3.0 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.5 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.4 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.3 lib/tasks/solidus/split_promotions_with_any_match_policy.rake
solidus_core-3.2.2 lib/tasks/solidus/split_promotions_with_any_match_policy.rake