Sha256: ad09ae73a9a3168e8792ec50878dd4a35c971f1d7187fe8e89a57ff8e0595378

Contents?: true

Size: 1.73 KB

Versions: 16

Compression:

Stored size: 1.73 KB

Contents

module Ecom
  module Core
    class ResourceRequisitionItem < ApplicationRecord
      PENDING = 'Pending'.freeze
      APPROVED = 'Approved'.freeze
      REJECTED = 'Rejected'.freeze

      STATUSES = [PENDING, APPROVED, REJECTED].freeze

      belongs_to :resource_requisition
      belongs_to :resource_type
      belongs_to :requested_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'
      belongs_to :awaiting_quantity_measurement_unit, class_name: 'Ecom::Core::MeasurementUnit'

      validates :due_date, presence: true

      validates :requested_quantity, presence: true, numericality: { greater_than: 0 }
      validates :awaiting_quantity, presence: true, numericality: { greater_than: 0 }

      validates :status, presence: true, inclusion: STATUSES

      validate :quantity_validator

      def quantity_validator
        if requested_quantity.nil? || awaiting_quantity.nil? ||
           requested_quantity_measurement_unit_id.nil? ||
           awaiting_quantity_measurement_unit_id.nil?
          return
        end

        requested_quantity_measurement_unit =
          Ecom::Core::MeasurementUnit.find_by(id: requested_quantity_measurement_unit_id)
        awaiting_quantity_measurement_unit =
          Ecom::Core::MeasurementUnit.find_by(id: awaiting_quantity_measurement_unit_id)

        requested_quantity_in_si_unit = requested_quantity / requested_quantity_measurement_unit.conversion_factor
        awaiting_quantity_in_si_unit = awaiting_quantity / awaiting_quantity_measurement_unit.conversion_factor

        return unless awaiting_quantity_in_si_unit > requested_quantity_in_si_unit

        errors.add(:awaiting_quantity, 'awaiting quantity can not be greater than requested quantity')
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
ecom_core-1.3.14 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.13 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.12 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.11 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.10 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.9 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.8 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.7 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.6 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.5 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.4 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.3 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.2 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.1 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.3.0 app/models/ecom/core/resource_requisition_item.rb
ecom_core-1.2.36 app/models/ecom/core/resource_requisition_item.rb