Sha256: 1bb0afd4ebc55f9cb70ab13b8006dc1112a73b3994a9f076565f195881d5aceb

Contents?: true

Size: 1.28 KB

Versions: 67

Compression:

Stored size: 1.28 KB

Contents

module Comee
  module Core
    class Price < ApplicationRecord
      self.abstract_class = true
      before_save :compute_status

      enum :status, {past: 0, current: 1, future: 2}

      scope :current, -> { where(status: Price.statuses[:current]) }
      scope :future, -> { where(status: Price.statuses[:future]) }

      belongs_to :product
      belongs_to :unit

      validates :valid_from, :valid_to, presence: true
      validate :validate_price_validity_dates

      def validate_price_validity_dates
        return unless valid_from && valid_to

        period = Period.new(valid_from, valid_to)
        errors.add(:base, "Price validity date range is not correct.") unless period.valid?
      end

      def compute_status
        period = Period.new(valid_from, valid_to)
        if period.past?
          self.status = Price.statuses[:past]
        elsif period.current?
          self.status = Price.statuses[:current]
        elsif period.future?
          self.status = Price.statuses[:future]
        end
      end

      def past?
        Price.statuses[status] == Price.statuses[:past]
      end

      def current?
        Price.statuses[status] == Price.statuses[:current]
      end

      def future?
        Price.statuses[status] == Price.statuses[:future]
      end
    end
  end
end

Version data entries

67 entries across 67 versions & 1 rubygems

Version Path
comee_core-0.1.57 app/models/comee/core/price.rb
comee_core-0.1.56 app/models/comee/core/price.rb
comee_core-0.1.55 app/models/comee/core/price.rb
comee_core-0.1.54 app/models/comee/core/price.rb
comee_core-0.1.53 app/models/comee/core/price.rb
comee_core-0.1.52 app/models/comee/core/price.rb
comee_core-0.1.51 app/models/comee/core/price.rb
comee_core-0.1.50 app/models/comee/core/price.rb
comee_core-0.1.49 app/models/comee/core/price.rb
comee_core-0.1.48 app/models/comee/core/price.rb
comee_core-0.1.47 app/models/comee/core/price.rb
comee_core-0.1.46 app/models/comee/core/price.rb
comee_core-0.1.45 app/models/comee/core/price.rb
comee_core-0.1.45.pre3 app/models/comee/core/price.rb
comee_core-0.1.45.pre2 app/models/comee/core/price.rb
comee_core-0.1.45.pre app/models/comee/core/price.rb
comee_core-0.1.44 app/models/comee/core/price.rb
comee_core-0.1.43 app/models/comee/core/price.rb
comee_core-0.1.42 app/models/comee/core/price.rb
comee_core-0.1.41 app/models/comee/core/price.rb