· 6 years ago · Apr 20, 2019, 06:18 PM
1class AppsConfigExtractor
2
3 def initialize(email, lcc_code)
4 creator_id = User.find_by_email(email) ? User.find_by_email(email).id : false
5 company_code = Lcc.find_by(code: lcc_code) ? Lcc.find_by(code: lcc_code).code : false
6
7 if creator_id && company_code
8 env = Rails.application.secrets.pex_host_url.split('//').last[0..2].upcase
9 document_generator = Dm::DataMigration::DocumentGeneratorSchedule.new
10 document_type = 'INTERNAL'
11
12 @output = Object.new
13 @LccConfigCounter = 0
14 @EftConfigCounter = 0
15 @PayGroupConfigCounter = 0
16 @CalendarPeriodConfigCounter = 0
17 @EmailDomainConfigCounter = 0
18 @CustomerConfigCounter = 0
19 @PayElementConfigCounter = 0
20 @JWTConfigCounter = 0
21 @ActiveFormConfigCounter = 0
22
23 file = generate(env, company_code)
24 file_name = "#{document_type}_#{Gcc.first.code}_#{company_code}_D#{DateTime.now.utc.strftime('%Y%m%d')}_O999"
25 params_for_document = params_for_config_report(creator_id, file_name, company_code)
26 document = document_generator.create_document(file, params_for_document, [], "#{file_name}.xml")
27
28 document
29 else
30 puts "Please enter a valid params email address: #{creator_id}, lcc code: #{company_code}".colorize(:yellow)
31
32 false
33 end
34 end
35
36 def params_for_config_report(creator_id, document_name, company_code)
37 {
38 generated: true,
39 document_type: Dm::DocumentType.internal,
40 display_name: document_name,
41 creator_id: creator_id,
42 lcc_id: Lcc.where(code: company_code).last.id
43 }
44 end
45
46 def generate(env, lcc_code)
47 temp_file = Tempfile.new('apps_config_extract.xml')
48
49 begin
50 Gcc.find_each do |gcc|
51 @output = {
52 ENV: env,
53 GccConfig: [
54 code: gcc.code,
55 description: gcc.description,
56 onboarding_system: gcc.onboarding_system,
57 create_fg_user: gcc.create_fg_user,
58 connect_to_myhrw: gcc.connect_to_myhrw,
59 enable_legal_notice: gcc.enable_legal_notice,
60 legal_notice: gcc.legal_notice,
61 is_locked: gcc.is_locked,
62 validate_banks: gcc.validate_banks,
63 cleahrsky: gcc.cleahrsky,
64 contract_type: gcc.contract_type,
65 direct_costing_post_processing: gcc.direct_costing_post_processing,
66 worklist_enabled: gcc.worklist_enabled,
67 euhreka_validation: gcc.euhreka_validation,
68 enable_update_delete_form_button: gcc.enable_update_delete_form_button,
69 hrx_active: gcc.hrx_active
70 ],
71 EmailDomainConfig: get_email_domains,
72 CustomerConfig: get_customer_config,
73 JWTApiKeyConfig: get_jwt_api_key,
74 LccConfig: get_lccs(gcc, lcc_code),
75 Summary: [
76 JWTConfigCounter: @JWTConfigCounter,
77 LccConfigCounter: @LccConfigCounter,
78 EftConfigCounter: @EftConfigCounter,
79 PayGroupConfigCounter: @PayGroupConfigCounter,
80 CalendarConfigCounter: @CalendarConfigCounter,
81 EmailDomainConfigCounter: @EmailDomainConfigCounter,
82 CustomerConfigCounter: @CustomerConfigCounter,
83 PayElementConfigCounter: @PayElementConfigCounter,
84 ActiveFormConfigCounter: @ActiveFormConfigCounter
85 ]
86 }
87 end
88 temp_file << @output.to_yaml
89 ensure
90 temp_file.close
91 end
92
93 temp_file
94 end
95
96 def get_lccs(gcc, lcc_code)
97 data = Array.new
98
99 if lcc_code == '00000' # todo
100 gcc.lccs.each do |lcc|
101 data.push(params_for_lccs(lcc))
102 @LccConfigCounter += 1
103 end
104 else
105 Lcc.where(code: lcc_code).find_each do |lcc|
106 data.push(params_for_lccs(lcc))
107 @LccConfigCounter += 1
108 end
109 end
110
111 data.push({
112 LccConfigCount: @LccConfigCounter
113 })
114
115 data
116 end
117
118 def params_for_lccs(lcc)
119 {
120 code: lcc.code,
121 description: lcc.description,
122 payroll_service_id: lcc.payroll_service_id,
123 payroll_service_name: lcc.payroll_service.name,
124 payroll_service_description: lcc.payroll_service.description,
125 payroll_service_endpoint: lcc.payroll_service.payroll_service_endpoint,
126 payroll_service_ws_user: lcc.payroll_service.ws_user,
127 payroll_service_ws_password: '!excluded sensitive data!', #lcc.payroll_service.password,
128 third_party: lcc.third_party,
129 documents_only: lcc.documents_only,
130 gen_psid: lcc.gen_psid,
131 internal_eft_id: lcc.internal_eft_id,
132 eft_config_count: lcc.efts.count,
133 EftConfig: get_efts(lcc),
134 PayGroups: get_paygroup(lcc),
135 PayElements: get_pay_elements(lcc),
136 LocalForms: get_lcc_forms(lcc)
137 }
138 end
139
140 def get_efts(lcc)
141 data = Array.new
142 @EftConfigCounter = 0
143
144 lcc.efts.each do |eft|
145 data.push({
146 id: eft.id,
147 internal_eft_id: eft.internal_eft_id,
148 src_username: eft.src_username,
149 trg_username: eft.trg_username,
150 src_host_address: eft.src_host_address,
151 trg_host_address: eft.trg_host_address,
152 trg_path: eft.trg_path,
153 remote_src_username: eft.remote_src_username,
154 target_system: eft.target_system,
155 file_type: eft.file_type,
156 partner_id: eft.partner_id,
157 file_prefix: eft.file_prefix,
158 itfn: eft.itfn,
159 rename_prefix: eft.rename_prefix,
160 occurence: eft.occurence
161 })
162
163 @EftConfigCounter += 1
164 end
165
166 data.push({
167 EFTConfigCount: @EftConfigCounter
168 })
169
170 data
171 end
172
173 def get_paygroup(lcc)
174 data = Array.new
175
176 lcc.pay_groups.each do |pg|
177 data.push({
178 code: pg.code,
179 description: pg.description,
180 calendar: [
181 country_code: pg.active_calendar.try(:country_code),
182 curr_pp_start_date: pg.active_calendar.try(:curr_pp_start_date),
183 curr_pp_end_date: pg.active_calendar.try(:curr_pp_end_date),
184 periods: get_calendar_periods(pg)
185 ]
186 })
187
188 @PayGroupConfigCounter += 1
189 end
190 data.push({
191 PayGroupConfigCount: @PayGroupConfigCounter
192 })
193
194 data
195 end
196
197 def get_calendar_periods(pay_group)
198 data = Array.new
199
200 if pay_group.active_calendar
201 pay_group.active_calendar.pay_periods.each do |pp|
202 data.push({
203 pp_type: pp.pp_type,
204 pc_start_date: pp.pc_start_date,
205 pc_end_date: pp.pc_end_date,
206 cutoff_date: pp.cutoff_date,
207 manual_data_load_cutoff: pp.manual_data_load_cutoff,
208 time_pay_element_data_cutoff: pp.time_pay_element_data_cutoff,
209 queue_open: pp.queue_open,
210 pay_start_date: pp.pay_start_date,
211 pay_end_date: pp.pay_end_date,
212 fico_date: pp.fico_date,
213 payslip_date: pp.payslip_date,
214 payment_date: pp.payment_date,
215 file_date: pp.file_date,
216 year: pp.year,
217 number: pp.number,
218 offcycle: pp.offcycle,
219 ticket: pp.ticket,
220 pay_calendar_id: pp.pay_calendar_id,
221 task_id: pp.task_id,
222 earliest_retro_date: pp.earliest_retro_date
223 })
224
225 @CalendarPeriodConfigCounter += 1
226 end
227 data.push({
228 CalendarConfigCount: @CalendarPeriodConfigCounter
229 })
230 end
231
232 data
233 end
234
235 def get_email_domains
236 data = Array.new
237
238 EmailDomain.find_each do |ed|
239 if ed.status.upcase == 'ACTIVE'
240 data.push({
241 domain: ed.domain,
242 status: ed.status
243 })
244 @EmailDomainConfigCounter += 1
245 end
246 end
247 data.push({
248 EmailDomainConfigCount: @EmailDomainConfigCounter
249 })
250
251 data
252 end
253
254 def get_customer_config
255 data = Array.new
256
257 Conf::CustomerConfig.find_each do |cc|
258 if cc.status.upcase == 'ACTIVE'
259 data.push({
260 trans_type: cc.trans_type,
261 origin: cc.origin,
262 mapping: cc.mapping,
263 xsd_element: cc.xsd_element,
264 status: cc.status,
265 value: cc.value,
266 description: cc.description,
267 country: cc.country,
268 })
269 @CustomerConfigCounter += 1
270 end
271 end
272 data.push({
273 CustomerConfigCounter: @CustomerConfigCounter
274 })
275
276 data
277 end
278
279 def get_pay_elements(lcc)
280 data = Array.new
281 lcc.pay_elements.find_each do |pe|
282 if pe.enabled_for_gcc
283 data.push({
284 code: pe.hr_id,
285 description: pe.description,
286 basis: pe.basis,
287 type: pe.pay_element_type,
288 enabled_for_gcc: pe.enabled_for_gcc
289 })
290 @PayElementConfigCounter += 1
291 end
292 end
293 data.push({
294 PayElementConfigCounter: @PayElementConfigCounter
295 })
296
297 data
298 end
299
300 def get_jwt_api_key
301 data = Array.new
302 Conf::JWTApiKey.find_each do |jt|
303 data.push({
304 client_id: jt.client_id,
305 public_key: jt.public_key,
306 secret_key: '!excluded sensitive data!' #jt.secret_key
307 })
308 @JWTConfigCounter += 1
309 end
310 data.push({
311 JWTConfigCounter: @JWTConfigCounter
312 })
313
314 data
315 end
316
317 def get_lcc_forms(lcc)
318 data = Array.new
319 lcc.form_active_states.each do |fa|
320 if fa.active
321 data.push({
322 code: get_form_data(fa.fcs_field_set_uuid).code,
323 name: get_form_data(fa.fcs_field_set_uuid).name,
324 country_code: get_form_data(fa.fcs_field_set_uuid).country_code,
325 active: fa.active,
326 trigger_on_hire: fa.trigger_on_hire,
327 trigger_on_rehire: fa.trigger_on_rehire,
328 trigger_on_transfer_old: fa.trigger_on_transfer_old,
329 trigger_on_transfer_new: fa.trigger_on_transfer_new,
330 trigger_on_termination: fa.trigger_on_termination,
331 enabled_for_employees: fa.enabled_for_employees
332 })
333 @ActiveFormConfigCounter += 1
334 end
335 end
336 data.push({
337 ActiveFormConfigCounter: @ActiveFormConfigCounter
338 })
339
340 data
341 end
342
343 def get_form_data(uuid)
344 Fcs::Form.where(uuid: uuid).last
345 end
346end
347
348# Run the extractor (sample paramenters)
349AppsConfigExtractor.new('arvinfrancis.bien@ngahr.com','HU001')