Sha256: 601234d5d9882a9e4e16772d205459e31b4a04629e049edbe2d68b80202f8eec

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 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}
      enum :price_status, {draft: 0, approved: 1}

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

      belongs_to :product
      belongs_to :unit

      validates :price_status, :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

2 entries across 2 versions & 1 rubygems

Version Path
comee_core-0.1.99 app/models/comee/core/price.rb
comee_core-0.1.98 app/models/comee/core/price.rb