Class: StackOneMigration::EmployeesMapper

Inherits:
Object
  • Object
show all
Defined in:
lib/stackone_migration/mappers/employees_mapper.rb

Class Method Summary collapse

Class Method Details

.employment_status_enum_hashObject



39
40
41
42
43
44
45
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 39

def self.employment_status_enum_hash
  {
    :active => 'ACTIVE',
    :pending => 'PENDING',
    :terminated => 'INACTIVE',
  }
end

.employment_type_enum_hashObject



47
48
49
50
51
52
53
54
55
56
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 47

def self.employment_type_enum_hash
  {
    :full_time => 'FULL_TIME',
    :part_time => 'PART_TIME',
    :contractor => 'CONTRACTOR',
    :intern => 'INTERN',
    :freelance => 'FREELANCE',
    :terminated => 'MERGE_NONSTANDARD_VALUE',
  }
end

.ethnicity_enum_hashObject



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 26

def self.ethnicity_enum_hash
  {
    :white => 'WHITE',
    :black_or_african_american => 'BLACK_OR_AFRICAN_AMERICAN',
    :asian => 'ASIAN_OR_INDIAN_SUBCONTINENT',
    :hispanic_or_latino => 'HISPANIC_OR_LATINO',
    :american_indian_or_alaska_native => 'AMERICAN_INDIAN_OR_ALASKA_NATIVE',
    :native_hawaiian_or_pacific_islander => 'NATIVE_HAWAIIAN_OR_OTHER_PACIFIC_ISLANDER',
    :two_or_more_races => 'TWO_OR_MORE_RACES',
    :not_disclosed => 'PREFER_NOT_TO_DISCLOSE',
  }
end

.gender_enum_hashObject



5
6
7
8
9
10
11
12
13
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 5

def self.gender_enum_hash
  {
    :male => 'MALE',
    :female => 'FEMALE',
    :non_binary => 'NON-BINARY',
    :other => 'OTHER',
    :not_disclosed => 'PREFER_NOT_TO_DISCLOSE',
  }
end

.json_str_to_hash(hash_string) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 120

def self.json_str_to_hash(hash_string)
  begin
    return nil if hash_string.nil?

    new_str = hash_string
      .gsub(/:(\w+)/, '"\1"')
      .gsub('=>', ':')
      .gsub('nil', 'null')

    hash = JSON.parse(new_str)

    hash.transform_keys(&:to_sym)
  rescue JSON::ParserError => e
    puts "Error parsing JSON string: #{e.message}"

    hash_string
  end
end

.location_type_enum_hashObject



84
85
86
87
88
89
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 84

def self.location_type_enum_hash
  {
    :home => 'HOME',
    :work => 'WORK',
  }
end

.map_employments(employments) ⇒ Object



153
154
155
156
157
158
159
160
161
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 153

def self.map_employments(employments)
  if employments.nil? 
    mapped_results = []
  else 
    mapped_results = employments.map do |employment|
      map_to_employment_model(employment)
    end
  end
end

.map_single_employee_to_list_model(employee) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 163

def self.map_single_employee_to_list_model(employee)
  mapped_employee = map_to_employee_model(employee)

  mapped_results = mapped_employee.nil? ? [] : [mapped_employee]

  MergeHRISClient::PaginatedEmployeeList.new(
    :_next => nil,
    :results => mapped_results,
    :previous => nil
  )  
end

.map_to_employee_model(employee) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 91

def self.map_to_employee_model(employee)
  return nil if employee.nil?

  MergeHRISClient::Employee.new(
    :id => employee.id,
    :remote_id => employee.id,
    :first_name => employee.first_name,
    :last_name => employee.last_name,
    :display_full_name => employee.display_name,
    :avatar => employee.avatar_url,
    :personal_email => employee.personal_email,
    :work_email => employee.work_email,
    :mobile_phone_number => employee.personal_phone_number,
    :gender => MergeHRISClient::GenderEnum.build_from_hash(gender_enum_hash[employee.gender&.to_sym]),
    :date_of_birth => employee.date_of_birth,
    :start_date => employee.start_date,
    :manager => employee.manager_id,
    :ethnicity => MergeHRISClient::EthnicityEnum.build_from_hash(ethnicity_enum_hash[employee.ethnicity&.to_sym]),
    :marital_status => MergeHRISClient::MaritalStatusEnum.build_from_hash(marital_status_enum_hash[employee.marital_status&.to_sym]),
    :hire_date => employee.hire_date,
    :employment_status => MergeHRISClient::EmploymentStatusEnum.build_from_hash(employment_status_enum_hash[employee.employment_status&.to_sym]),
    :termination_date => employee.termination_date,
    :company => json_str_to_hash(employee.company),
    :home_location => json_str_to_hash(employee.home_location),
    :work_location => json_str_to_hash(employee.work_location),
    :employments => map_employments(employee.employments),
  )
end

.map_to_employment_model(employment) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 139

def self.map_to_employment_model(employment)
  return nil if employment.nil?

  MergeHRISClient::Employment.new(
    :job_title => employment[:job_title],
    :pay_rate => employment[:pay_rate],
    :pay_period => MergeHRISClient::PayPeriodEnum.build_from_hash(pay_period_enum_hash[employment[:pay_period]&.to_sym]),
    :pay_frequency => MergeHRISClient::PayFrequencyEnum.build_from_hash(pay_frequency_enum_hash[employment[:pay_frequency]&.to_sym]),
    :pay_currency => MergeHRISClient::PayCurrencyEnum.build_from_hash(employment[:pay_currency]&.to_s.upcase),
    :effective_date => employment[:effective_date],
    :employment_type => MergeHRISClient::EmploymentTypeEnum.build_from_hash(employment_type_enum_hash[employment[:employment_type]&.to_sym]),
  )
end

.map_to_paginated_employee_list_model(paginated_employees) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 175

def self.map_to_paginated_employee_list_model(paginated_employees)
  if paginated_employees&.data.nil? 
    mapped_results = []
  else 
    mapped_results = paginated_employees.data.map do |employee|
      map_to_employee_model(employee)
    end
  end

  next_page = paginated_employees.next_page unless paginated_employees.nil?

  MergeHRISClient::PaginatedEmployeeList.new(
    :_next => next_page,
    :results => mapped_results,
    :previous => nil
  )
end

.marital_status_enum_hashObject



15
16
17
18
19
20
21
22
23
24
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 15

def self.marital_status_enum_hash
  {
    :single => 'SINGLE',
    :married => 'MARRIED_FILING_JOINTLY',
    :divorced => 'MERGE_NONSTANDARD_VALUE',
    :widowed => 'QUALIFYING_WIDOW_OR_WIDOWER_WITH_DEPENDENT_CHILD',
    :domestic_partnership => 'MERGE_NONSTANDARD_VALUE',
    :other => 'MERGE_NONSTANDARD_VALUE',
  }
end

.pay_frequency_enum_hashObject



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 71

def self.pay_frequency_enum_hash
  {
    :weekly => 'WEEKLY',
    :bi_weekly => 'BIWEEKLY',
    :monthly => 'MONTHLY',
    :quarterly => 'QUARTERLY',
    :semi_annually => 'SEMIANNUALLY',
    :yearly => 'ANNUALLY',
    :thirteen_monthly => 'THIRTEEN-MONTHLY',
    :pro_rata => 'PRO_RATA',
  }
end

.pay_period_enum_hashObject



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/stackone_migration/mappers/employees_mapper.rb', line 58

def self.pay_period_enum_hash
  {
    :hour => 'HOUR',
    :day => 'DAY',
    :week => 'WEEK',
    :every_two_weeks => 'EVERY_TWO_WEEKS',
    :month => 'MONTH',
    :quarter => 'QUARTER',
    :every_six_months => 'EVERY_SIX_MONTHS',
    :year => 'YEAR',
  }
end