Sha256: 40a4ccf7832ada7ee69ebf5f5731a5ec7e9836d6b41bd84f2adf20866cdc2980

Contents?: true

Size: 1.05 KB

Versions: 5

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

require_dependency "spree/calculator"

# This is a calculator for line item adjustment benefits. It accepts a line item
# and calculates its weighted adjustment amount based on the value of the
# preferred amount and the price of the other line items. More expensive line
# items will receive a greater share of the preferred amount.
module SolidusPromotions
  module Calculators
    class DistributedAmount < Spree::Calculator
      include PromotionCalculator

      preference :amount, :decimal, default: 0
      preference :currency, :string, default: -> { Spree::Config[:currency] }

      def compute_line_item(line_item)
        return 0 unless line_item
        return 0 unless preferred_currency.casecmp(line_item.currency).zero?

        distributable_line_items = calculable.applicable_line_items(line_item.order)
        return 0 unless line_item.in?(distributable_line_items)

        DistributedAmountsHandler.new(
          distributable_line_items,
          preferred_amount
        ).amount(line_item)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
solidus_promotions-4.5.1 app/models/solidus_promotions/calculators/distributed_amount.rb
solidus_promotions-4.5.0 app/models/solidus_promotions/calculators/distributed_amount.rb
solidus_promotions-4.4.2 app/models/solidus_promotions/calculators/distributed_amount.rb
solidus_promotions-4.4.1 app/models/solidus_promotions/calculators/distributed_amount.rb
solidus_promotions-4.4.0 app/models/solidus_promotions/calculators/distributed_amount.rb