Sha256: dbca3473b75ec6e69959de303d379b04db797bb8d8745cd2e26dffa76e73c89f

Contents?: true

Size: 1.83 KB

Versions: 157

Compression:

Stored size: 1.83 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 draft?
        Price.price_statuses[price_status] == Price.price_statuses[:draft]
      end

      def approved?
        Price.price_statuses[price_status] == Price.price_statuses[:approved]
      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 approve
        if Price.price_statuses[price_status] == Price.price_statuses[:approved]
          raise(StandardError, "Price status is already in approved state.")
        end

        self.price_status = Price.price_statuses[:approved]
        save!
        self
      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

157 entries across 157 versions & 1 rubygems

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