Sha256: 091e6436418b9513583c3450873d0250e89bcd9de56699e58c7f401dfdbbe418

Contents?: true

Size: 1.79 KB

Versions: 15

Compression:

Stored size: 1.79 KB

Contents

module Ecom
  module Core
    class CrewContract < ApplicationRecord
      include AASM

      belongs_to :crew
      belongs_to :crew_type

      validates :status, :contract_no, :from, :to, :place_of_work, :probation_period,
                :contract_type, :wage, :wage_in_words, :crew_type_id, :crew_type, presence: true
      validates :contract_no, uniqueness: true
      validate :validate_date_range

      validates :wage, presence: true, numericality: { greater_than: 0 }

      validates_uniqueness_of :crew_id,
                              if: -> { status == 'in_effect' },
                              message: 'There can only be one contract' \
                               ' with status `In effect` for a given crew at a time'

      def validate_date_range
        return unless from && to

        errors.add(:to, 'cannot be before from date.') if from >= to
      end

      aasm column: 'status' do
        state :draft, initial: true
        state :submitted_for_approval
        state :approved
        state :rejected
        state :in_effect
        state :void

        event :submit_for_approval do
          transitions from: :draft, to: :submitted_for_approval, guard: -> { status == 'draft' }
        end

        event :approve do
          transitions from: :submitted_for_approval, to: :approved, guard: -> { status == 'submitted_for_approval' }
        end

        event :reject do
          transitions from: :submitted_for_approval, to: :rejected, guard: -> { status == 'submitted_for_approval' }
        end

        event :commence do
          transitions from: :approved, to: :in_effect, guard: -> { status == 'approved' }
        end

        event :terminate do
          transitions from: :in_effect, to: :void, guard: -> { status == 'in_effect' }
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

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