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.97 app/models/comee/core/price.rb
comee_core-0.1.96 app/models/comee/core/price.rb
comee_core-0.1.95 app/models/comee/core/price.rb
comee_core-0.1.94 app/models/comee/core/price.rb
comee_core-0.1.93 app/models/comee/core/price.rb
comee_core-0.1.92 app/models/comee/core/price.rb
comee_core-0.1.91 app/models/comee/core/price.rb
comee_core-0.1.90 app/models/comee/core/price.rb
comee_core-0.1.89 app/models/comee/core/price.rb
comee_core-0.1.88 app/models/comee/core/price.rb
comee_core-0.1.87 app/models/comee/core/price.rb
comee_core-0.1.86 app/models/comee/core/price.rb
comee_core-0.1.85 app/models/comee/core/price.rb
comee_core-0.1.84 app/models/comee/core/price.rb
comee_core-0.1.83 app/models/comee/core/price.rb
comee_core-0.1.82 app/models/comee/core/price.rb
comee_core-0.1.81 app/models/comee/core/price.rb
comee_core-0.1.80 app/models/comee/core/price.rb
comee_core-0.1.79 app/models/comee/core/price.rb
comee_core-0.1.78 app/models/comee/core/price.rb