Class: Ecom::Core::CrewContractTransactionService

Inherits:
Object
  • Object
show all
Defined in:
app/services/ecom/core/crew_contract_transaction_service.rb

Instance Method Summary collapse

Instance Method Details

#activate_contract(crew_contract) ⇒ Object



46
47
48
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 46

def activate_contract(crew_contract)
  crew_contract.update(status: :in_effect)
end

#create_new_id_card(crew, valid_until) ⇒ Object

invalidate other Id cards and creates a new ID card

Raises:

  • (StandardError)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 67

def create_new_id_card(crew, valid_until)
  issued_on = Time.now

  previous_id_card = Ecom::Core::CrewIdCard.where(crew_id: crew.id).last

  previous_id_card&.update(status: 'Invalid')

  new_id_card = Ecom::Core::CrewIdCard.new(
    crew_id: crew.id,
    issued_on: issued_on,
    valid_until: valid_until,
    status: 'Valid'
  )
  raise StandardError, new_id_card.errors.messages unless new_id_card.save
end

#deactivate_contract(crew_contract) ⇒ Object



50
51
52
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 50

def deactivate_contract(crew_contract)
  crew_contract.update(status: :void)
end

#execute(transaction_type, crew_contract) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 4

def execute(transaction_type, crew_contract)
  Ecom::Core::CrewContractTransaction.transaction do
    case transaction_type
    when Ecom::Core::CrewContractTransaction::TXN_UPDATE_CREW_TYPE

      create_new_id_card(crew_contract.crew, crew_contract.to)
      # update crew type
      crew = crew_contract.crew
      crew.update(crew_type_id: crew_contract.crew_type_id)

    when Ecom::Core::CrewContractTransaction::TXN_UPDATE_PLACE_OF_WORK

      create_new_id_card(crew_contract.crew, crew_contract.to)

    when Ecom::Core::CrewContractTransaction::TXN_UPDATE_WAGE

      crew = crew_contract.crew
      # update wage
      crew.update(wage: crew_contract.wage, wage_in_words: crew_contract.wage_in_words)

    when Ecom::Core::CrewContractTransaction::TXN_UPDATE_VALIDITY

      # make crew active
      create_new_id_card(crew_contract.crew, crew_contract.to)
      make_crew_active(crew_contract.crew)
      activate_contract(crew_contract)

    when Ecom::Core::CrewContractTransaction::TXN_TERMINATE_CONTRACT

      # make crew inactive
      make_crew_inactive(crew_contract.crew)

      # make ID card invalid
      invalidate_id_card(crew_contract.crew)

      # make the contract void
      deactivate_contract(crew_contract)

    end
  end
end

#invalidate_id_card(crew) ⇒ Object



83
84
85
86
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 83

def invalidate_id_card(crew)
  current_id_card = Ecom::Core::CrewIdCard.where(crew_id: crew.id).last
  current_id_card.update(status: 'Invalid')
end

#make_crew_active(crew) ⇒ Object



54
55
56
57
58
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 54

def make_crew_active(crew)
  return if crew.active

  crew.update(active: true)
end

#make_crew_inactive(crew) ⇒ Object



60
61
62
63
64
# File 'app/services/ecom/core/crew_contract_transaction_service.rb', line 60

def make_crew_inactive(crew)
  return unless crew.active

  crew.update(active: false)
end