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.27 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.26 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.45 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.25 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.23 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.44 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.22 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.43 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.21 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.42 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.20 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.41 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.19 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.40 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.18 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.39 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.17 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.38 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.5.16 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb
workarea-core-3.4.37 app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb