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.4.27 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.4 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.26 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.3 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.25 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.2 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.24 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.1 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.23 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.22 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.0 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.21 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.0.beta.1 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.20 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.19 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.18 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.17 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.16 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.15 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.14 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb