Sha256: eaf5edb3e0c81d635dddb86a42cbc5df9967fee731a29a850d9f4c19d6a0c8f8

Contents?: true

Size: 1.73 KB

Versions: 62

Compression:

Stored size: 1.73 KB

Contents

module Workarea
  module Pricing
    class Discount
      # This class is responsible for apply the discount
      # results to a particular {Order::Item}.
      #
      class BuySomeGetSome::ItemApplication
        attr_reader :apply_quantity

        def initialize(discount, item, apply_quantity)
          @discount = discount
          @item = item
          @apply_quantity = apply_quantity
        end

        # The item total before this discount is applied.
        #
        # @return [Money]
        #
        def current_total
          @item.price_adjustments.adjusting('item').sum
        end

        # The portion of the total quantity that should be charged
        # a standard price without discount applied.
        #
        # @return [Integer]
        #
        def standard_quantity
          @item.quantity - @apply_quantity
        end

        # The total price of the number of units that get charged
        # the pre-buy-some-get-some-discount price.
        #
        # @return [Money]
        #
        def standard_units_total
          @item.current_unit_price * standard_quantity
        end

        # The total price of the portion of units that get the
        # discount applied.
        #
        # @return [Money]
        #
        def discounted_units_total
          @item.current_unit_price * @apply_quantity * @discount.percent
        end

        # The total value of this discount on this item,
        # calculated as the total pre-discount and the total
        # of standard units and the discounted units.
        #
        # @return [Money]
        #
        def value
          @value ||= current_total -
            standard_units_total -
            discounted_units_total
        end
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.5.15 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.36 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.14 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.35 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.13 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.34 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.12 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.33 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.11 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.10 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.32 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.9 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.31 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.8 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.30 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.7 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.29 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.6 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.28 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.5 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb