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