Class: SolidusPromotions::LoadPromotions

Inherits:
Object
  • Object
show all
Defined in:
app/models/solidus_promotions/load_promotions.rb

Direct Known Subclasses

OrderAdjuster::LoadPromotions

Instance Method Summary collapse

Constructor Details

#initialize(order:, dry_run_promotion: nil) ⇒ LoadPromotions

Returns a new instance of LoadPromotions.



5
6
7
8
# File 'app/models/solidus_promotions/load_promotions.rb', line 5

def initialize(order:, dry_run_promotion: nil)
  @order = order
  @dry_run_promotion = dry_run_promotion
end

Instance Method Details

#callObject



10
11
12
13
14
15
16
17
18
19
20
# File 'app/models/solidus_promotions/load_promotions.rb', line 10

def call
  promos = connected_order_promotions | sale_promotions
  promos << dry_run_promotion if dry_run_promotion
  promos.flat_map(&:benefits).group_by(&:preload_relations).each do |benefit_preload_relations, benefits|
    preload(records: benefits, associations: benefit_preload_relations)
    benefits.flat_map(&:conditions).group_by(&:preload_relations).each do |condition_preload_relations, conditions|
      preload(records: conditions, associations: condition_preload_relations)
    end
  end
  promos.reject { |promotion| promotion.usage_limit_exceeded?(excluded_orders: [order]) }
end