Sha256: 273496a3206a14f75cd28da33b42616853037c02f97bd666baaeee0d20134e0f

Contents?: true

Size: 1.69 KB

Versions: 157

Compression:

Stored size: 1.69 KB

Contents

module Comee
  module Core
    class ClientPrice < Price
      enum :margin_type, {increase: 0, discount: 1}
      belongs_to :client
      belongs_to :previous_price, class_name: "Comee::Core::ClientPrice", optional: true
      belongs_to :next_price, class_name: "Comee::Core::ClientPrice", optional: true
      belongs_to :product_lookup, optional: true

      validates :price, :margin_type, presence: true
      validates :price, numericality: {greater_than: 0}
      validates :margin, presence: true, numericality: {greater_than_or_equal_to: 0, less_than_or_equal_to: 100}
      validates :product_id, uniqueness: {scope: %i[client_id previous_price_id next_price_id status]}
      validate :validate_product_lookup

      def validate_product_lookup
        return unless product_lookup && product && client

        if product_lookup.itemable_id != client_id ||
           product_lookup.itemable_type != "Comee::Core::Client" ||
           product_lookup.product_id != product_id
          errors.add(:product_lookup, "contains wrong client or product.")
        end
      end

      def margin_increase?
        ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:increase]
      end

      def margin_discount?
        ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:discount]
      end

      def self.ransackable_attributes(_auth_object = nil)
        %w[
          id
          valid_from
          valid_to
          price
          status
          product_id
          client_id
          previous_price_id
          next_price_id
        ]
      end

      def self.ransackable_associations(_auth_object = nil)
        %w[product client product_lookup]
      end
    end
  end
end

Version data entries

157 entries across 157 versions & 1 rubygems

Version Path
comee_core-0.3.62 app/models/comee/core/client_price.rb
comee_core-0.3.61 app/models/comee/core/client_price.rb
comee_core-0.3.60 app/models/comee/core/client_price.rb
comee_core-0.3.59 app/models/comee/core/client_price.rb
comee_core-0.3.58 app/models/comee/core/client_price.rb
comee_core-0.3.57 app/models/comee/core/client_price.rb
comee_core-0.3.56 app/models/comee/core/client_price.rb
comee_core-0.3.55 app/models/comee/core/client_price.rb
comee_core-0.3.54 app/models/comee/core/client_price.rb
comee_core-0.3.53 app/models/comee/core/client_price.rb
comee_core-0.3.51 app/models/comee/core/client_price.rb
comee_core-0.3.50 app/models/comee/core/client_price.rb
comee_core-0.3.49 app/models/comee/core/client_price.rb
comee_core-0.3.48 app/models/comee/core/client_price.rb
comee_core-0.3.47 app/models/comee/core/client_price.rb
comee_core-0.3.46 app/models/comee/core/client_price.rb
comee_core-0.3.45 app/models/comee/core/client_price.rb
comee_core-0.3.44 app/models/comee/core/client_price.rb
comee_core-0.3.43 app/models/comee/core/client_price.rb
comee_core-0.3.42 app/models/comee/core/client_price.rb