Class: SolidusFriendlyPromotions::PromotionCode

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

Defined Under Namespace

Classes: BatchBuilder

Instance Method Summary collapse

Instance Method Details

#promotion_not_apply_automaticallyObject



47
48
49
# File 'app/models/solidus_friendly_promotions/promotion_code.rb', line 47

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



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

def usage_count(excluded_orders: [])
  promotion
    .discounted_orders
    .complete
    .where.not(spree_orders: {state: :canceled})
    .joins(:friendly_order_promotions)
    .where(friendly_order_promotions: {promotion_code_id: id})
    .where.not(id: excluded_orders.map(&:id))
    .count
end

#usage_limitObject



43
44
45
# File 'app/models/solidus_friendly_promotions/promotion_code.rb', line 43

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



22
23
24
25
26
# File 'app/models/solidus_friendly_promotions/promotion_code.rb', line 22

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

  usage_count(excluded_orders: excluded_orders) >= usage_limit
end