Sha256: 30f8f817dcb0c209b2fbdcc8b422c73c716fc8a901b81dd163e22c567bfd0a0b

Contents?: true

Size: 1.45 KB

Versions: 62

Compression:

Stored size: 1.45 KB

Contents

module Workarea
  module Pricing
    class Discount
      # Responsible for calcuating a how many applicaitons a given
      # set of items should recieve a {QuantityFixedPrice}.
      # Limits at max application is set.
      #
      class QuantityFixedPrice::ApplicationCalculator
        delegate :product_ids, :category_ids, :max_applications, :quantity,
          to: :@discount

        def initialize(discount, items)
          @discount = discount
          @items = items
        end

        # The number of applications these items can recieve.
        #
        # @return [Integer]
        #
        def applications
          if max_applications.present? &&
               potential_applications > max_applications
            max_applications
          else
            potential_applications
          end
        end

        private

        def potential_applications
          @potential_applications ||=
            begin
              result = 0
              current_quantity = 0

              @items.each do |item|
                next unless item.matches_products?(product_ids) || item.matches_categories?(category_ids)

                item.quantity.times do
                  current_quantity += 1

                  if current_quantity == quantity
                    result += 1
                    current_quantity = 0
                  end
                end
              end

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