peoplegroup-connectors 0.1.96 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/peoplegroup/connectors/bamboo.rb +97 -61
- data/lib/peoplegroup/connectors/hris.rb +6 -6
- data/lib/peoplegroup/connectors/version.rb +1 -1
- metadata +37 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52119b48d43178c73a802c6eb5361c052447bd6ee72a5a2a6d48b7fac5d19b41
|
4
|
+
data.tar.gz: 61af8cffaa0bbd000489f8ff493147bfbf2f7ffbd6e67a3daa93189f11305e2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b5baabf6fa07a5e8c4c080682afddc5145d9419ece8d4c5df4b07f17ffdc0cbbd2ab1569148d136b749af31b0e03594e71ab936a0cf33b7e52e786d8bb25bcc
|
7
|
+
data.tar.gz: 331e0a2ecd5514ee3ed39a351d4c91fb4d7d3ac12c7a11227199810854a92324cf501d4ca18958ce2ca22719664927a5db504fff16cde6a88a2f00007974b545
|
data/README.md
CHANGED
@@ -31,6 +31,8 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
31
31
|
|
32
32
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
33
33
|
|
34
|
+
For local development and manual testing, copy the contents of the `.env.example` file to a new file called `.env` and fill-in the environment variable values. You will then be able to run a REPL by running `bundle exec bin/console` from the root of the repository.
|
35
|
+
|
34
36
|
## Contributing and Code of Conduct
|
35
37
|
|
36
38
|
Bug reports and pull requests are welcome on GitLab at https://gitlab.com/gitlab-com/people-group/peopleops-eng/connectors-gem. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
@@ -15,16 +15,21 @@ module PeopleGroup
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def get_employee_details(id)
|
18
|
-
employees.find { |emp| emp['
|
18
|
+
employees.find { |emp| emp['employeeNumber'] == id.to_s }
|
19
19
|
end
|
20
20
|
alias_method :get_team_member_details, :get_employee_details
|
21
21
|
|
22
22
|
def get_employee_details!(id)
|
23
23
|
employee_details = get_employee_details(id)
|
24
|
-
raise EmployeeNotFoundError, "No
|
24
|
+
raise EmployeeNotFoundError, "No team member found with employee number #{id}" if employee_details.nil?
|
25
25
|
|
26
26
|
employee_details
|
27
27
|
end
|
28
|
+
alias_method :get_team_member_details!, :get_employee_details!
|
29
|
+
|
30
|
+
def bamboo_id!(employee_number)
|
31
|
+
get_team_member_details!(employee_number)['id']
|
32
|
+
end
|
28
33
|
|
29
34
|
def search_employee(name)
|
30
35
|
return if name.empty?
|
@@ -109,7 +114,7 @@ module PeopleGroup
|
|
109
114
|
|
110
115
|
def people_managers_in_functions(departments: [], divisions: [])
|
111
116
|
active_and_current_team_members.select do |team_member|
|
112
|
-
(departments.include?(team_member['department']) || divisions.include?(team_member['division'])) && has_direct_reports?(team_member['
|
117
|
+
(departments.include?(team_member['department']) || divisions.include?(team_member['division'])) && has_direct_reports?(team_member['employeeNumber'])
|
113
118
|
end
|
114
119
|
end
|
115
120
|
|
@@ -119,17 +124,17 @@ module PeopleGroup
|
|
119
124
|
while direct_reports_to_check.present?
|
120
125
|
current_node = direct_reports_to_check.shift
|
121
126
|
reports_to_return << current_node
|
122
|
-
direct_reports_to_check.concat(direct_reports_for(current_node['
|
127
|
+
direct_reports_to_check.concat(direct_reports_for(current_node['employeeNumber']))
|
123
128
|
end
|
124
129
|
reports_to_return
|
125
130
|
end
|
126
131
|
|
127
132
|
def direct_reports_for(id)
|
128
|
-
active_and_current_team_members.select { |team_member| team_member['
|
133
|
+
active_and_current_team_members.select { |team_member| team_member['supervisorId'] == id.to_s }
|
129
134
|
end
|
130
135
|
|
131
136
|
def has_direct_reports?(id)
|
132
|
-
active_and_current_team_members.any? { |team_member| team_member['
|
137
|
+
active_and_current_team_members.any? { |team_member| team_member['supervisorId'] == id.to_s }
|
133
138
|
end
|
134
139
|
|
135
140
|
def reports_in_departments(departments, exclude_email)
|
@@ -149,17 +154,26 @@ module PeopleGroup
|
|
149
154
|
def create_employee(employee_details_hash)
|
150
155
|
retry_on_error { @client.employee.add(employee_details_hash) }
|
151
156
|
end
|
157
|
+
alias_method :create_team_member, :create_employee
|
152
158
|
|
153
|
-
def update_employee(
|
154
|
-
|
159
|
+
def update_employee(employee_number, employee_details_hash)
|
160
|
+
id = bamboo_id!(employee_number)
|
161
|
+
retry_on_error { @client.employee.update(id, employee_details_hash) }
|
155
162
|
end
|
163
|
+
alias_method :update_team_member, :update_employee
|
156
164
|
|
157
165
|
def departments
|
158
|
-
meta_fields
|
166
|
+
meta_fields
|
167
|
+
.detect { |res| res['name'] == 'Department' }
|
168
|
+
.dig('options')
|
169
|
+
.each_with_object([]) { |option, array| array << option['name'] if option['archived'] == 'no' } || []
|
159
170
|
end
|
160
171
|
|
161
172
|
def divisions
|
162
|
-
meta_fields
|
173
|
+
meta_fields
|
174
|
+
.detect { |res| res['name'] == 'Division' }
|
175
|
+
.dig('options')
|
176
|
+
.each_with_object([]) { |option, array| array << option['name'] if option['archived'] == 'no' } || []
|
163
177
|
end
|
164
178
|
|
165
179
|
def locations
|
@@ -199,30 +213,36 @@ module PeopleGroup
|
|
199
213
|
end
|
200
214
|
alias_method :active_and_current_team_members, :active_and_current_employees
|
201
215
|
|
202
|
-
def add_stock_options(
|
203
|
-
|
216
|
+
def add_stock_options(employee_number, data)
|
217
|
+
id = bamboo_id!(employee_number)
|
218
|
+
retry_on_error { @client.employee.add_table_row(id, 'customEquity', data) }
|
204
219
|
end
|
205
220
|
|
206
|
-
def stock_options_data(
|
207
|
-
|
221
|
+
def stock_options_data(employee_number)
|
222
|
+
id = bamboo_id!(employee_number)
|
223
|
+
retry_on_error { @client.employee.table_data(id, 'customEquity') }
|
208
224
|
end
|
209
225
|
|
210
|
-
def add_job_details(
|
211
|
-
|
226
|
+
def add_job_details(employee_number, data)
|
227
|
+
id = bamboo_id!(employee_number)
|
228
|
+
retry_on_error { @client.employee.add_table_row(id, 'jobInfo', data) }
|
212
229
|
end
|
213
230
|
|
214
|
-
def update_job_details(
|
215
|
-
|
231
|
+
def update_job_details(employee_number, data)
|
232
|
+
id = bamboo_id!(employee_number)
|
233
|
+
current_data = job_details(employee_number) # it should only be one row as we just created this user
|
216
234
|
row_id = current_data.first.dig('id')
|
217
|
-
retry_on_error { @client.employee.update_table_row(
|
235
|
+
retry_on_error { @client.employee.update_table_row(id, 'jobInfo', row_id, data) }
|
218
236
|
end
|
219
237
|
|
220
|
-
def add_compensation_details(
|
221
|
-
|
238
|
+
def add_compensation_details(employee_number, data)
|
239
|
+
id = bamboo_id!(employee_number)
|
240
|
+
retry_on_error { @client.employee.add_table_row(id, 'compensation', data) }
|
222
241
|
end
|
223
242
|
|
224
|
-
def employment_statuses(
|
225
|
-
|
243
|
+
def employment_statuses(employee_number)
|
244
|
+
id = bamboo_id!(employee_number)
|
245
|
+
retry_on_error { @client.employee.table_data(id, 'employmentStatus') }
|
226
246
|
end
|
227
247
|
|
228
248
|
def time_off_types
|
@@ -233,17 +253,19 @@ module PeopleGroup
|
|
233
253
|
time_off_types['timeOffTypes'].find { |type| type['name'] == name }
|
234
254
|
end
|
235
255
|
|
236
|
-
def time_off_estimate(
|
237
|
-
|
256
|
+
def time_off_estimate(employee_number, end_date = Date.today)
|
257
|
+
id = bamboo_id!(employee_number)
|
258
|
+
retry_on_error { @client.employee.time_off_estimate(id, end_date) }
|
238
259
|
end
|
239
260
|
|
240
|
-
def time_off_adjustment(
|
241
|
-
|
261
|
+
def time_off_adjustment(employee_number, options)
|
262
|
+
id = bamboo_id!(employee_number)
|
263
|
+
retry_on_error { @client.employee.time_off_balance_adjustment(id, options) }
|
242
264
|
end
|
243
265
|
|
244
|
-
def accrued_days(
|
266
|
+
def accrued_days(employee_number)
|
245
267
|
employee_accruals_type = time_off_type('Employee Accruals')
|
246
|
-
total_accruals = time_off_estimate(
|
268
|
+
total_accruals = time_off_estimate(employee_number).find { |type| type['timeOffType'] == employee_accruals_type['id'] }
|
247
269
|
|
248
270
|
total_accruals['balance'].to_f
|
249
271
|
end
|
@@ -252,75 +274,88 @@ module PeopleGroup
|
|
252
274
|
@time_off_policies ||= retry_on_error { @client.meta.time_off_policies }
|
253
275
|
end
|
254
276
|
|
255
|
-
def employee_time_off_policies(
|
256
|
-
|
277
|
+
def employee_time_off_policies(employee_number)
|
278
|
+
id = bamboo_id!(employee_number)
|
279
|
+
retry_on_error { @client.employee.time_off_policies(id) }
|
257
280
|
end
|
258
281
|
alias_method :team_member_time_off_policies, :employee_time_off_policies
|
259
282
|
|
260
|
-
def add_time_off_policy(
|
283
|
+
def add_time_off_policy(employee_number, time_off_policy_id, accrual_start_date)
|
261
284
|
policies = [{ timeOffPolicyId: time_off_policy_id, accrualStartDate: accrual_start_date }]
|
285
|
+
id = bamboo_id!(employee_number)
|
262
286
|
|
263
|
-
retry_on_error { @client.employee.add_time_off_policies(
|
287
|
+
retry_on_error { @client.employee.add_time_off_policies(id, policies) }
|
264
288
|
end
|
265
289
|
|
266
|
-
def remove_time_off_policy(
|
290
|
+
def remove_time_off_policy(employee_number, time_off_policy_id)
|
267
291
|
# A nil accrual start date removes a policy assignment
|
268
292
|
# Reference: https://documentation.bamboohr.com/reference#time-off-assign-time-off-policies-for-an-employee
|
269
|
-
add_time_off_policy(
|
293
|
+
add_time_off_policy(employee_number, time_off_policy_id, nil)
|
270
294
|
end
|
271
295
|
|
272
|
-
def job_details(
|
273
|
-
|
296
|
+
def job_details(employee_number)
|
297
|
+
id = bamboo_id!(employee_number)
|
298
|
+
retry_on_error { @client.employee.table_data(id, 'jobInfo') }
|
274
299
|
end
|
275
300
|
|
276
|
-
def resumes_folder_id(
|
277
|
-
@resumes_folder_id ||= files(
|
301
|
+
def resumes_folder_id(employee_number)
|
302
|
+
@resumes_folder_id ||= files(employee_number).dig('categories').find { |folder| folder['name'] == 'Resumes and Applications' }.dig('id')
|
278
303
|
end
|
279
304
|
|
280
|
-
def contract_folder_id(
|
281
|
-
@contract_folder_id ||= files(
|
305
|
+
def contract_folder_id(employee_number)
|
306
|
+
@contract_folder_id ||= files(employee_number).dig('categories').find { |folder| folder['name'] == 'Contracts & Changes' }.dig('id')
|
282
307
|
end
|
283
308
|
|
284
|
-
def add_file(
|
309
|
+
def add_file(employee_number, file_name, file, folder_id)
|
310
|
+
id = bamboo_id!(employee_number)
|
311
|
+
|
285
312
|
options = {
|
286
313
|
category: folder_id,
|
287
314
|
fileName: file_name,
|
288
315
|
share: 'yes',
|
289
316
|
file: file
|
290
317
|
}
|
291
|
-
retry_on_error { @client.employee.add_file(
|
318
|
+
retry_on_error { @client.employee.add_file(id, options) }
|
292
319
|
end
|
293
320
|
|
294
|
-
def add_employment_status(
|
295
|
-
|
321
|
+
def add_employment_status(employee_number, data)
|
322
|
+
id = bamboo_id!(employee_number)
|
323
|
+
retry_on_error { @client.employee.add_table_row(id, 'employmentStatus', data) }
|
296
324
|
end
|
297
325
|
|
298
|
-
def add_currency_conversion(
|
299
|
-
|
326
|
+
def add_currency_conversion(employee_number, data)
|
327
|
+
id = bamboo_id!(employee_number)
|
328
|
+
retry_on_error { @client.employee.add_table_row(id, 'customCurrencyConversion', data) }
|
300
329
|
end
|
301
330
|
|
302
|
-
def add_on_target_earnings(
|
303
|
-
|
331
|
+
def add_on_target_earnings(employee_number, data)
|
332
|
+
id = bamboo_id!(employee_number)
|
333
|
+
retry_on_error { @client.employee.add_table_row(id, 'customOnTargetEarnings', data) }
|
304
334
|
end
|
305
335
|
|
306
|
-
def add_signing_bonus(
|
307
|
-
|
336
|
+
def add_signing_bonus(employee_number, data)
|
337
|
+
id = bamboo_id!(employee_number)
|
338
|
+
retry_on_error { @client.employee.add_table_row(id, 'customBonus', data) }
|
308
339
|
end
|
309
340
|
|
310
|
-
def add_family_member(
|
311
|
-
|
341
|
+
def add_family_member(employee_number, data)
|
342
|
+
id = bamboo_id!(employee_number)
|
343
|
+
retry_on_error { @client.employee.add_table_row(id, 'customFamilyMember', data) }
|
312
344
|
end
|
313
345
|
|
314
|
-
def add_additional_data(
|
315
|
-
|
346
|
+
def add_additional_data(employee_number, data)
|
347
|
+
id = bamboo_id!(employee_number)
|
348
|
+
retry_on_error { @client.employee.add_table_row(id, 'customAdditionalInformation1', data) }
|
316
349
|
end
|
317
350
|
|
318
|
-
def additional_data(
|
319
|
-
|
351
|
+
def additional_data(employee_number)
|
352
|
+
id = bamboo_id!(employee_number)
|
353
|
+
retry_on_error { @client.employee.table_data(id, 'employmentStatus') }
|
320
354
|
end
|
321
355
|
|
322
|
-
def currency_conversion(
|
323
|
-
|
356
|
+
def currency_conversion(employee_number)
|
357
|
+
id = bamboo_id!(employee_number)
|
358
|
+
retry_on_error { @client.employee.table_data(id, 'customCurrencyConversion') }
|
324
359
|
end
|
325
360
|
|
326
361
|
def add_bonus(employee_number, comment)
|
@@ -350,8 +385,9 @@ module PeopleGroup
|
|
350
385
|
@meta_fields ||= retry_on_error { @client.meta.lists }
|
351
386
|
end
|
352
387
|
|
353
|
-
def files(
|
354
|
-
|
388
|
+
def files(employee_number)
|
389
|
+
id = bamboo_id!(employee_number)
|
390
|
+
@files ||= retry_on_error { @client.employee.files(id) }
|
355
391
|
end
|
356
392
|
|
357
393
|
def retry_on_error(&block)
|
@@ -14,14 +14,14 @@ module PeopleGroup
|
|
14
14
|
@workday.workers.map { |worker| format_worker(worker) }
|
15
15
|
end
|
16
16
|
|
17
|
-
def get_employee_details(
|
18
|
-
employees.find { |emp| emp['
|
17
|
+
def get_employee_details(employee_number)
|
18
|
+
employees.find { |emp| emp['employeeNumber'] == employee_number.to_s }
|
19
19
|
end
|
20
20
|
alias_method :get_team_member_details, :get_employee_details
|
21
21
|
|
22
|
-
def get_employee_details!(
|
23
|
-
employee_details = get_employee_details(
|
24
|
-
raise EmployeeNotFoundError, "No
|
22
|
+
def get_employee_details!(employee_number)
|
23
|
+
employee_details = get_employee_details(employee_number)
|
24
|
+
raise EmployeeNotFoundError, "No team member found with employee number #{employee_number}" if employee_details.nil?
|
25
25
|
|
26
26
|
employee_details
|
27
27
|
end
|
@@ -33,7 +33,7 @@ module PeopleGroup
|
|
33
33
|
return nil if worker.nil?
|
34
34
|
|
35
35
|
{
|
36
|
-
'
|
36
|
+
'employeeNumber' => worker.dig(:worker_data, :worker_id),
|
37
37
|
'firstName' => worker.dig(:worker_data, :personal_data, :name_data, :legal_name_data, :name_detail_data, :first_name),
|
38
38
|
'lastName' => worker.dig(:worker_data, :personal_data, :name_data, :legal_name_data, :name_detail_data, :last_name),
|
39
39
|
'preferredName' => worker.dig(:worker_data, :personal_data, :name_data, :preferred_name_data, :name_detail_data, :first_name),
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: peoplegroup-connectors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- lien van den steen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gitlab
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '3.
|
131
|
+
version: '3.11'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '3.
|
138
|
+
version: '3.11'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rubocop
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,34 +150,48 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.91'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rake
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '13.0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '13.0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: gitlab-styles
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
173
|
+
version: '7.0'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
180
|
+
version: '7.0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: rubocop-packaging
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version: '0.
|
187
|
+
version: '0.5'
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
192
|
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version: '0.
|
194
|
+
version: '0.5'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: rubocop-rspec
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +234,20 @@ dependencies:
|
|
220
234
|
- - "~>"
|
221
235
|
- !ruby/object:Gem::Version
|
222
236
|
version: '0.21'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: byebug
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '11.1'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '11.1'
|
223
251
|
description: Avoid repeating methods in different projects for our connectos.
|
224
252
|
email:
|
225
253
|
- lvandensteen@gitlab.com
|
@@ -262,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
262
290
|
- !ruby/object:Gem::Version
|
263
291
|
version: '0'
|
264
292
|
requirements: []
|
265
|
-
rubygems_version: 3.2.
|
293
|
+
rubygems_version: 3.2.32
|
266
294
|
signing_key:
|
267
295
|
specification_version: 4
|
268
296
|
summary: Library for our shared connectors.
|