Sha256: 3b5a93bfd0670e5f58b02c9ea5458136fd1d55c9cee0a0e2c0d6e05c6f9705a1

Contents?: true

Size: 1.28 KB

Versions: 62

Compression:

Stored size: 1.28 KB

Contents

module Workarea
  module Pricing
    class Discount
      module FlatOrPercentOff
        extend ActiveSupport::Concern
        AMOUNT_TYPES = %i(percent flat)

        included do
          # @!attribute amount_type
          #   @return [Symbol] how to treat the amount field, one of {AMOUNT_TYPES}
          #
          field :amount_type, type: Symbol, default: AMOUNT_TYPES.first

          # @!attribute amount
          #   @return [Float] the amount of the discount
          #
          field :amount, type: Float

          validates :amount_type, presence: true, inclusion: AMOUNT_TYPES
          validates :amount,
            presence: true,
            numericality: { greater_than: 0, allow_blank: true },
            unless: :percent?

          validates :amount,
            numericality: {
              greater_than: 0,
              less_than_or_equal_to: 100,
              allow_blank: true
            },
            if: :percent?

          delegate :percent?, to: :amount_calculator
        end

        # The calculator used to calculate how much this discount should
        # apply to the order.
        #
        # @return [AmountCalculator]
        #
        def amount_calculator
          @amount_calculator ||= AmountCalculator.new(self)
        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/flat_or_percent_off.rb
workarea-core-3.4.36 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.14 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.35 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.13 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.34 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.12 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.33 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.11 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.10 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.32 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.9 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.31 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.8 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.30 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.7 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.29 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.6 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.4.28 app/models/workarea/pricing/discount/flat_or_percent_off.rb
workarea-core-3.5.5 app/models/workarea/pricing/discount/flat_or_percent_off.rb