Module: Workarea::Pricing

Defined in:
app/models/workarea/pricing.rb,
app/models/workarea/pricing/sku.rb,
app/models/workarea/pricing/price.rb,
app/models/workarea/pricing/request.rb,
app/models/workarea/pricing/discount.rb,
app/models/workarea/pricing/override.rb,
app/models/workarea/pricing/cache_key.rb,
app/models/workarea/pricing/calculator.rb,
app/models/workarea/pricing/collection.rb,
app/models/workarea/pricing/tax_applier.rb,
app/models/workarea/pricing/order_totals.rb,
app/models/workarea/pricing/discount/order.rb,
app/models/workarea/pricing/shipping_totals.rb,
app/models/workarea/pricing/tax_application.rb,
app/models/workarea/pricing/discount/product.rb,
app/models/workarea/pricing/item_tax_applier.rb,
app/models/workarea/pricing/discount/category.rb,
app/models/workarea/pricing/discount/shipping.rb,
app/models/workarea/pricing/price_distributor.rb,
app/models/workarea/pricing/discount/code_list.rb,
app/models/workarea/pricing/discount/free_gift.rb,
app/models/workarea/pricing/discount/collection.rb,
app/models/workarea/pricing/discount/redemption.rb,
app/models/workarea/pricing/discount/order_total.rb,
app/models/workarea/pricing/discount/reconcile_total.rb,
app/models/workarea/pricing/unsupported_segmentation.rb,
app/models/workarea/pricing/calculators/tax_calculator.rb,
app/models/workarea/pricing/discount/amount_calculator.rb,
app/models/workarea/pricing/discount/application_group.rb,
app/models/workarea/pricing/discount/buy_some_get_some.rb,
app/models/workarea/pricing/discount/product_attribute.rb,
app/models/workarea/pricing/calculators/item_calculator.rb,
app/models/workarea/pricing/discount/flat_or_percent_off.rb,
app/models/workarea/pricing/discount/conditions/user_tags.rb,
app/models/workarea/pricing/discount/generated_promo_code.rb,
app/models/workarea/pricing/discount/quantity_fixed_price.rb,
app/models/workarea/pricing/calculators/discount_calculator.rb,
app/models/workarea/pricing/discount/conditions/order_total.rb,
app/models/workarea/pricing/discount/conditions/promo_codes.rb,
app/models/workarea/pricing/calculators/overrides_calculator.rb,
app/models/workarea/pricing/discount/conditions/item_quantity.rb,
app/models/workarea/pricing/calculators/customizations_calculator.rb,
app/models/workarea/pricing/discount/product_attribute/item_qualifier.rb,
app/models/workarea/pricing/discount/quantity_fixed_price/item_shares.rb,
app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb,
app/models/workarea/pricing/discount/buy_some_get_some/product_application.rb,
app/models/workarea/pricing/discount/buy_some_get_some/order_items_by_product.rb,
app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb

Defined Under Namespace

Modules: Calculator, Calculators, TaxApplication, UnsupportedSegmentation Classes: CacheKey, Collection, Discount, ItemTaxApplier, OrderTotals, Override, Price, PriceDistributor, Request, ShippingTotals, Sku, TaxApplier

Class Method Summary collapse

Class Method Details

.find_shipping_discounts(order, shipping) ⇒ Array<PriceAdjustment>

Find the price adjustments for shipping discounts that would apply to a given order.

Used in Checkout::ShippingOptions to determine the prices post-discounting for available shipping methods.

Parameters:

Returns:



30
31
32
33
34
# File 'app/models/workarea/pricing.rb', line 30

def self.find_shipping_discounts(order, shipping)
  request = Request.new(order, shipping)
  request.run
  request.shippings.first.price_adjustments.adjusting('shipping').discounts
end

.perform(order, shippings = nil) ⇒ self

Build price adjustments and set order total prices. Does nothing if the order isn’t valid.

Parameters:

Returns:

  • (self)


9
10
11
12
13
14
15
16
17
18
# File 'app/models/workarea/pricing.rb', line 9

def self.perform(order, shippings = nil)
  shippings = Array(shippings)
  return self unless order.save && shippings.all?(&:save)

  request = Request.new(order, shippings)
  request.run
  request.save!

  self
end

.valid_promo_code?(promo_code, email = nil) ⇒ Boolean

Find whether a promo code is valid to apply

Parameters:

Returns:

  • (Boolean)

    whether it is valid



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/models/workarea/pricing.rb', line 41

def self.valid_promo_code?(promo_code, email = nil)
  discounts = Discount
                .where(:promo_codes.in => [promo_code.downcase])
                .to_a

  return true if discounts.any? do |discount|
    discount.active? &&
      (email.blank? ||
       !discount.single_use? ||
       !discount.has_been_redeemed?(email))
  end

  Discount::GeneratedPromoCode.valid_code?(promo_code)
end