Class: SolidusPromotions::PromotionCode

Inherits:
Spree::Base
  • Object
show all
Defined in:
app/models/solidus_promotions/promotion_code.rb,
app/models/solidus_promotions/promotion_code/batch_builder.rb

Defined Under Namespace

Classes: BatchBuilder

Instance Method Summary collapse

Instance Method Details

#promotion_not_apply_automaticallyObject



46
47
48
# File 'app/models/solidus_promotions/promotion_code.rb', line 46

def promotion_not_apply_automatically
  errors.add(:base, :disallowed_with_apply_automatically) if promotion.apply_automatically
end

#usage_count(excluded_orders: []) ⇒ Integer

Number of times the code has been used overall

Parameters:

  • excluded_orders (Array<Spree::Order>) (defaults to: [])

    Orders to exclude from usage count

Returns:

  • (Integer)

    usage count



31
32
33
34
35
36
37
38
39
40
# File 'app/models/solidus_promotions/promotion_code.rb', line 31

def usage_count(excluded_orders: [])
  promotion
    .discounted_orders
    .complete
    .where.not(spree_orders: { state: :canceled })
    .joins(:solidus_order_promotions)
    .where(SolidusPromotions::OrderPromotion.table_name => { promotion_code_id: id })
    .where.not(id: excluded_orders.map(&:id))
    .count
end

#usage_limitObject



42
43
44
# File 'app/models/solidus_promotions/promotion_code.rb', line 42

def usage_limit
  promotion.per_code_usage_limit
end

#usage_limit_exceeded?(excluded_orders: []) ⇒ Boolean

Whether the promotion code has exceeded its usage restrictions

Parameters:

  • excluded_orders (Array<Spree::Order>) (defaults to: [])

    Orders to exclude from usage limit

Returns:

  • (Boolean)

    true or false



21
22
23
24
25
# File 'app/models/solidus_promotions/promotion_code.rb', line 21

def usage_limit_exceeded?(excluded_orders: [])
  return unless usage_limit

  usage_count(excluded_orders: excluded_orders) >= usage_limit
end