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