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