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.15 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.36 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.14 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.35 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.13 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.34 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.12 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.33 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.11 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.10 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.32 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.9 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.31 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.8 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.30 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.7 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.29 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.6 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.4.28 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb
workarea-core-3.5.5 app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb