kuali_toolbox 0.30 → 0.40
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/transform_CSV_to_HR_XML +278 -191
- data/lib/kuali_toolbox/version.rb +1 -1
- data/spec/kuali_toolbox/etl/grm_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61426bf943a693faacbdd6e65b107492979b22ec
|
4
|
+
data.tar.gz: e83c477f4620573a79375250ea88c15f60182ec9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e29fae6e9c6caa6ef52a7021c875e9d900b213b2dcc743b61d2ef865c64a48a2127b70470a8d757c15615fd751dbd43b33e4d09c5bc6ea8ee5001b45a5b4cb6
|
7
|
+
data.tar.gz: ecd14a53bc9403fd4eb49fd6aa952a3dec074827e1a0c501b813a3ae96a88281b79faeaf2a8c30f54930328cc8a8e3b89cfaf9618d97c305ee6ae7bcf53c446f
|
data/bin/transform_CSV_to_HR_XML
CHANGED
@@ -79,13 +79,243 @@ def self.parse_command_line_options(
|
|
79
79
|
return opt
|
80
80
|
end
|
81
81
|
|
82
|
+
|
83
|
+
def buildName(row)
|
84
|
+
nm = {}
|
85
|
+
nm_typ_cd = GRM.parse_name_code row[:nm_typ_cd]
|
86
|
+
prefix_nm = GRM.parse_prefix row[:prefix_nm]
|
87
|
+
first_nm = ETL.parse_string row[:first_nm], length: 40, name: 'FIRST_NM'
|
88
|
+
middle_nm = ETL.parse_string row[:middle_nm], length: 40, name: 'MIDDLE_NM'
|
89
|
+
last_nm = ETL.parse_string row[:last_nm], length: 80, name: 'LAST_NM'
|
90
|
+
suffix_nm = GRM.parse_suffix row[:suffix_nm]
|
91
|
+
title_nm = ETL.parse_string row[:title_nm], length: 20, name: 'TITLE_NM'
|
92
|
+
nm[:nameCode] = nm_typ_cd unless nm_typ_cd.empty?
|
93
|
+
nm[:prefix] = prefix_nm unless prefix_nm.empty?
|
94
|
+
nm[:firstName] = first_nm unless first_nm.empty?
|
95
|
+
nm[:middleName] = middle_nm unless middle_nm.empty?
|
96
|
+
nm[:lastName] = last_nm unless last_nm.empty?
|
97
|
+
nm[:suffix] = suffix_nm unless suffix_nm.empty?
|
98
|
+
nm[:title] = title_nm unless title_nm.empty?
|
99
|
+
nm[:default] = true
|
100
|
+
nm[:active] = true
|
101
|
+
return nm.empty? ? nil : nm
|
102
|
+
end
|
103
|
+
|
104
|
+
def buildExtendedAttributes(row)
|
105
|
+
ea = {}
|
106
|
+
visa_type = ETL.parse_string( row[:visa_type], length: 30, name: 'VISA_TYPE' )
|
107
|
+
county = ETL.parse_string( row[:county], length: 30, name: 'COUNTY' )
|
108
|
+
age_by_fiscal_year = ETL.parse_integer( row[:age_by_fiscal_year], length: 3, name: 'AGE_BY_FISCAL_YEAR' )
|
109
|
+
race = ETL.parse_string( row[:race], length: 30, name: 'RACE' )
|
110
|
+
education_level = ETL.parse_string( row[:education_level], length: 30, name: 'EDUCATION_LEVEL' )
|
111
|
+
degree = GRM.parse_degree( row[:degree], name: 'DEGREE' )
|
112
|
+
major = ETL.parse_string( row[:major], length: 30, name: 'MAJOR' )
|
113
|
+
is_handicapped = ETL.parse_boolean( row[:is_handicapped], name: 'IS_HANDICAPPED' )
|
114
|
+
handicap_type = ETL.parse_string( row[:handicap_type], length: 30, name: 'HANDICAP_TYPE' )
|
115
|
+
is_veteran = ETL.parse_boolean( row[:is_veteran], name: 'IS_VETERAN' )
|
116
|
+
veteran_type = ETL.parse_string( row[:veteran_type], length: 30, name: 'VETERAN_TYPE' )
|
117
|
+
has_visa = ETL.parse_boolean( row[:has_visa], name: 'HAS_VISA' )
|
118
|
+
visa_code = ETL.parse_string( row[:visa_code], length: 20, name: 'VISA_CODE' )
|
119
|
+
visa_renewal_date = ETL.parse_string( row[:visa_renewal_date], length: 19, name: 'VISA_RENEWAL_DATE' )
|
120
|
+
office_location = ETL.parse_string( row[:office_location], length: 30, name: 'OFFICE_LOCATION' )
|
121
|
+
secondry_office_location = ETL.parse_string( row[:secondry_office_location], length: 30, name: 'SECONDRY_OFFICE_LOCATION' )
|
122
|
+
school = ETL.parse_string( row[:school], length: 50, name: 'SCHOOL' )
|
123
|
+
year_graduated = GRM.parse_year( row[:year_graduated], name: 'YEAR_GRADUATED' )
|
124
|
+
directory_department = ETL.parse_string( row[:directory_department], length: 30, name: 'DIRECTORY_DEPARTMENT' )
|
125
|
+
directory_title = ETL.parse_string( row[:directory_title], length: 50, name: 'DIRECTORY_TITLE', strict: false )
|
126
|
+
primary_title = ETL.parse_string( row[:primary_title], length: 51, name: 'PRIMARY_TITLE', strict: false )
|
127
|
+
vacation_accural = ETL.parse_boolean( row[:vacation_accural], name: 'VACATION_ACCURAL' )
|
128
|
+
is_on_sabbatical = ETL.parse_boolean( row[:is_on_sabbatical], name: 'IS_ON_SABBATICAL' )
|
129
|
+
id_provided = ETL.parse_string( row[:id_provided], length: 30, name: 'ID_PROVIDED' )
|
130
|
+
id_verified = ETL.parse_string( row[:id_verified], length: 30, name: 'ID_VERIFIED' )
|
131
|
+
citizenship_type_code = GRM.parse_citizenship_type( row[:citizenship_type_code] )
|
132
|
+
multi_campus_principal_id = ETL.parse_string( row[:multi_campus_principal_id], length: 40, name: 'MULTI_CAMPUS_PRINCIPAL_ID' )
|
133
|
+
multi_campus_principal_name = ETL.parse_string( row[:multi_campus_principal_name], length: 100, name: 'MULTI_CAMPUS_PRINCIPAL_NAME' )
|
134
|
+
salary_anniversary_date = ETL.parse_string( row[:salary_anniversary_date], length: 10, name: 'SALARY_ANNIVERSARY_DATE' )
|
135
|
+
ea[:visaType] = visa_type unless visa_type.empty?
|
136
|
+
ea[:county] = county unless county.empty?
|
137
|
+
ea[:ageByFiscalYear] = age_by_fiscal_year unless age_by_fiscal_year.nil?
|
138
|
+
ea[:race] = race unless race.empty?
|
139
|
+
ea[:educationLevel] = education_level unless education_level.empty?
|
140
|
+
ea[:degree] = degree unless degree.empty?
|
141
|
+
ea[:major] = major unless major.empty?
|
142
|
+
ea[:handicapped] = is_handicapped unless is_handicapped.nil?
|
143
|
+
ea[:handicapType] = handicap_type unless handicap_type.empty?
|
144
|
+
ea[:veteran] = is_veteran unless is_veteran.nil?
|
145
|
+
ea[:veteranType] = veteran_type unless veteran_type.empty?
|
146
|
+
ea[:visa] = has_visa unless has_visa.nil?
|
147
|
+
ea[:visaCode] = visa_code unless visa_code.empty?
|
148
|
+
ea[:visaRenewalDate] = visa_renewal_date unless visa_renewal_date.empty?
|
149
|
+
ea[:officeLocation] = office_location unless office_location.empty?
|
150
|
+
ea[:secondaryOfficeLocation] = secondry_office_location unless secondry_office_location.empty?
|
151
|
+
ea[:school] = school unless school.empty?
|
152
|
+
ea[:yearGraduated] = year_graduated unless year_graduated.empty?
|
153
|
+
ea[:directoryDepartment] = directory_department unless directory_department.empty?
|
154
|
+
ea[:directoryTitle] = directory_title unless directory_title.empty?
|
155
|
+
ea[:primaryTitle] = primary_title unless primary_title.empty?
|
156
|
+
ea[:vacationAccrual] = vacation_accural unless vacation_accural.nil?
|
157
|
+
ea[:onSabbatical] = is_on_sabbatical unless is_on_sabbatical.nil?
|
158
|
+
ea[:idProvided] = id_provided unless id_provided.empty?
|
159
|
+
ea[:idVerified] = id_verified unless id_verified.empty?
|
160
|
+
ea[:citizenshipType] = citizenship_type_code unless citizenship_type_code.empty?
|
161
|
+
ea[:multiCampusPrincipalId] = multi_campus_principal_id unless multi_campus_principal_id.empty?
|
162
|
+
ea[:multiCampusPrincipalName] = multi_campus_principal_name unless multi_campus_principal_name.empty?
|
163
|
+
ea[:salaryAnniversaryDate] = salary_anniversary_date unless salary_anniversary_date.empty?
|
164
|
+
return ea
|
165
|
+
end
|
166
|
+
|
167
|
+
def buildAffiliations(row)
|
168
|
+
aff = {}
|
169
|
+
afltn_typ_cd = ETL.parse_string row[:afltn_typ_cd], name: 'AFLTN_TYP_CD', length: 40, required: true
|
170
|
+
campus = ETL.parse_string row[:campus_cd], name: 'CAMPUS_CD', length: 2
|
171
|
+
aff[:affiliationType] = afltn_typ_cd unless afltn_typ_cd.empty?
|
172
|
+
aff[:campus] = campus unless campus.empty?
|
173
|
+
aff[:default] = true
|
174
|
+
aff[:active] = true
|
175
|
+
|
176
|
+
emp = {}
|
177
|
+
emp_stat_cd = GRM.parse_emp_stat_cd row[:emp_stat_cd]
|
178
|
+
emp_typ_cd = GRM.parse_emp_typ_cd row[:emp_typ_cd]
|
179
|
+
base_slry_amt = ETL.parse_float row[:base_slry_amt], length: 15, name: 'BASE_SLRY_AMT'
|
180
|
+
prmry_dept_cd = ETL.parse_string row[:prmry_dept_cd], length: 40, name: 'PRMRY_DEPT_CD'
|
181
|
+
emp_id = ETL.parse_string row[:emp_id], length: 40, name: 'EMP_ID'
|
182
|
+
emp[:employeeStatus] = emp_stat_cd unless emp_stat_cd.empty?
|
183
|
+
emp[:employeeType] = emp_typ_cd unless emp_typ_cd.empty?
|
184
|
+
emp[:baseSalaryAmount] = base_slry_amt unless base_slry_amt.nil?
|
185
|
+
emp[:primaryDepartment] = prmry_dept_cd unless prmry_dept_cd.empty?
|
186
|
+
emp[:employeeId] = emp_id unless emp_id.empty?
|
187
|
+
emp[:primaryEmployment] = true
|
188
|
+
|
189
|
+
if (!emp.empty?)
|
190
|
+
aff[:employment] = []
|
191
|
+
aff[:employment].push(emp);
|
192
|
+
end
|
193
|
+
return aff.empty? ? nil : aff
|
194
|
+
end
|
195
|
+
|
196
|
+
def buildAddress(row)
|
197
|
+
address = {}
|
198
|
+
addr_typ_cd = GRM.parse_address_type_code( row[:addr_typ_cd] )
|
199
|
+
addr_line_1 = ETL.parse_string( row[:addr_line_1], name: 'ADDR_LINE_1', length: 45 )
|
200
|
+
addr_line_2 = ETL.parse_string( row[:addr_line_2], name: 'ADDR_LINE_2', length: 45 )
|
201
|
+
addr_line_3 = ETL.parse_string( row[:addr_line_3], name: 'ADDR_LINE_3', length: 45 )
|
202
|
+
city = ETL.parse_string( row[:city], name: 'CITY', length: 30 )
|
203
|
+
state_pvc_cd = ETL.parse_string( row[:state_pvc_cd], name: 'STATE_PVC_CD', length: 2 )
|
204
|
+
postal_cd = ETL.parse_string( row[:postal_cd], name: 'POSTAL_CD', length: 20 )
|
205
|
+
postal_cntry_cd = ETL.parse_string( row[:postal_cntry_cd], name: 'POSTAL_CNTRY_CD', length: 2 )
|
206
|
+
address[:addressTypeCode] = addr_typ_cd unless addr_typ_cd.empty?
|
207
|
+
address[:addressLine1] = addr_line_1 unless addr_line_1.empty?
|
208
|
+
address[:addressLine2] = addr_line_2 unless addr_line_2.empty?
|
209
|
+
address[:addressLine3] = addr_line_3 unless addr_line_3.empty?
|
210
|
+
address[:city] = city unless city.empty?
|
211
|
+
address[:stateOrProvince] = state_pvc_cd unless state_pvc_cd.empty?
|
212
|
+
address[:postalCode] = postal_cd unless postal_cd.empty?
|
213
|
+
address[:country] = postal_cntry_cd unless postal_cntry_cd.empty?
|
214
|
+
address[:default] = true
|
215
|
+
return address.empty? ? nil : address
|
216
|
+
end
|
217
|
+
|
218
|
+
def buildPhone(row)
|
219
|
+
ph = {}
|
220
|
+
phone_typ_cd = GRM.parse_phone_type row[:phone_typ_cd]
|
221
|
+
phone_nbr = GRM.parse_phone_number row[:phone_nbr]
|
222
|
+
phone_extn_nbr = ETL.parse_string row[:phone_extn_nbr], length: 8, name: 'PHONE_EXTN_NBR'
|
223
|
+
phone_cntry_cd = ETL.parse_string row[:phone_cntry_cd], length: 2, name: 'PHONE_CNTRY_CD'
|
224
|
+
ph[:phoneType] = phone_typ_cd unless phone_typ_cd.empty?
|
225
|
+
ph[:phoneNumber] = phone_nbr unless phone_nbr.empty?
|
226
|
+
ph[:extension] = phone_extn_nbr unless phone_extn_nbr.empty?
|
227
|
+
ph[:country] = phone_cntry_cd unless phone_cntry_cd.empty?
|
228
|
+
ph[:default] = true
|
229
|
+
ph[:active] = true
|
230
|
+
return ph.empty? ? nil : ph
|
231
|
+
end
|
232
|
+
|
233
|
+
def buildAppointment(row)
|
234
|
+
ap = {}
|
235
|
+
unit_number = ETL.parse_string( row[:unit_number], length: 8, name: 'UNIT_NUMBER' )
|
236
|
+
appointment_type_code = ETL.parse_string( row[:appointment_type_code], length: 3, name: 'APPOINTMENT_TYPE_CODE' )
|
237
|
+
job_code = ETL.parse_string( row[:job_code], length: 6, name: 'JOB_CODE' )
|
238
|
+
salary = ETL.parse_float( row[:salary], length: 15, name: 'SALARY' )
|
239
|
+
appointment_start_date = ETL.parse_string( row[:appointment_start_date], name: 'APPOINTMENT_START_DATE' )
|
240
|
+
appointment_end_date = ETL.parse_string( row[:appointment_end_date], name: 'APPOINTMENT_END_DATE' )
|
241
|
+
job_title = ETL.parse_string( row[:job_title], length: 50, name: 'JOB_TITLE', strict: false )
|
242
|
+
prefered_job_title = ETL.parse_string( row[:prefered_job_title], length: 51, name: 'PREFERED_JOB_TITLE', strict: false )
|
243
|
+
ap[:unitNumber] = unit_number unless unit_number.empty?
|
244
|
+
ap[:appointmentType] = appointment_type_code unless appointment_type_code.empty?
|
245
|
+
ap[:jobCode] = job_code unless job_code.empty?
|
246
|
+
ap[:salary] = salary unless salary.nil?
|
247
|
+
ap[:startDate] = appointment_start_date unless appointment_start_date.empty?
|
248
|
+
ap[:endDate] = appointment_end_date unless appointment_end_date.empty?
|
249
|
+
ap[:jobTitle] = job_title unless job_title.empty?
|
250
|
+
ap[:preferedJobTitle] = prefered_job_title unless prefered_job_title.empty?
|
251
|
+
return ap.empty? ? nil : ap
|
252
|
+
end
|
253
|
+
|
254
|
+
def buildEmail(row)
|
255
|
+
em = {}
|
256
|
+
email_typ_cd = GRM.parse_email_type( row[:email_typ_cd] )
|
257
|
+
email_addr = GRM.parse_email_address( row[:email_addr] )
|
258
|
+
em[:emailType] = email_typ_cd unless email_typ_cd.empty?
|
259
|
+
em[:emailAddress] = email_addr unless email_addr.empty?
|
260
|
+
em[:default] = true
|
261
|
+
em[:active] = true
|
262
|
+
return em.empty? ? nil : em
|
263
|
+
end
|
264
|
+
|
265
|
+
def addToListIfNotIncluded(item, list)
|
266
|
+
if (!item.nil? && list.nil?)
|
267
|
+
return [item]
|
268
|
+
elsif (!item.nil? && !list.include?(item))
|
269
|
+
if (item[:default] && !list.find{ |x| x[:default] }.nil?)
|
270
|
+
item[:default] = false
|
271
|
+
end
|
272
|
+
return list.push(item)
|
273
|
+
else
|
274
|
+
return list
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
82
278
|
opt = parse_command_line_options (File.basename $0), ARGF.argv
|
83
279
|
|
84
280
|
text_parse_errors = []
|
85
281
|
|
282
|
+
recordsByPrincipalId = {}
|
86
283
|
CSV.open(opt[:csv_filename], opt[:csv_options]) do |csv|
|
87
284
|
record_count = csv.readlines.count
|
88
285
|
csv.rewind # go back to first row
|
286
|
+
csv.find_all do |row|
|
287
|
+
begin
|
288
|
+
principalId = GRM.parse_principal_id( row[:prncpl_id] )
|
289
|
+
record = recordsByPrincipalId.has_key?(principalId) ? recordsByPrincipalId[principalId] : {}
|
290
|
+
record[:principalId] = principalId
|
291
|
+
record[:principalName] = GRM.parse_principal_name( row[:prncpl_nm] )
|
292
|
+
record[:kcExtendedAttributes] = buildExtendedAttributes(row)
|
293
|
+
|
294
|
+
newAffiliation = buildAffiliations(row)
|
295
|
+
if (!newAffiliation.nil? && record[:affiliations].nil?)
|
296
|
+
record[:affiliations] = []
|
297
|
+
end
|
298
|
+
if (!record[:affiliations].include? newAffiliation)
|
299
|
+
record[:affiliations].push(newAffiliation)
|
300
|
+
end
|
301
|
+
|
302
|
+
record[:names] = addToListIfNotIncluded(buildName(row), record[:names])
|
303
|
+
record[:addresses] = addToListIfNotIncluded(buildAddress(row), record[:addresses])
|
304
|
+
record[:phones] = addToListIfNotIncluded(buildPhone(row), record[:phones])
|
305
|
+
record[:appointments] = addToListIfNotIncluded(buildAppointment(row), record[:appointments])
|
306
|
+
record[:emails] = addToListIfNotIncluded(buildEmail(row), record[:emails])
|
307
|
+
|
308
|
+
recordsByPrincipalId[principalId] = record
|
309
|
+
|
310
|
+
rescue TextParseError => e
|
311
|
+
puts e.message
|
312
|
+
text_parse_errors.push e
|
313
|
+
end
|
314
|
+
end # row
|
315
|
+
|
316
|
+
#puts "#{recordsByPrincipalId}\n";
|
317
|
+
csv.rewind # go back to first row
|
318
|
+
|
89
319
|
|
90
320
|
File.open(opt[:xml_filename], 'w') do |xml_file|
|
91
321
|
xml = Builder::XmlMarkup.new target: xml_file, indent: 2
|
@@ -96,208 +326,65 @@ CSV.open(opt[:csv_filename], opt[:csv_options]) do |csv|
|
|
96
326
|
schemaVersion: "2.0",
|
97
327
|
statusEmailRecipient: opt[:email_recipients],
|
98
328
|
reportDate: Time.now.iso8601,
|
99
|
-
recordCount:
|
329
|
+
recordCount: recordsByPrincipalId.length do |hrmanifest|
|
100
330
|
hrmanifest.records do |record|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
aff[:default] = true
|
112
|
-
aff[:active] = true
|
113
|
-
|
114
|
-
affiliations.affiliation aff do |affiliation|
|
115
|
-
emp = {}
|
116
|
-
emp_stat_cd = GRM.parse_emp_stat_cd row[:emp_stat_cd]
|
117
|
-
emp_typ_cd = GRM.parse_emp_typ_cd row[:emp_typ_cd]
|
118
|
-
base_slry_amt = ETL.parse_float row[:base_slry_amt], length: 15, name: 'BASE_SLRY_AMT'
|
119
|
-
prmry_dept_cd = ETL.parse_string row[:prmry_dept_cd], length: 40, name: 'PRMRY_DEPT_CD'
|
120
|
-
emp_id = ETL.parse_string row[:emp_id], length: 40, name: 'EMP_ID'
|
121
|
-
emp[:employeeStatus] = emp_stat_cd unless emp_stat_cd.empty?
|
122
|
-
emp[:employeeType] = emp_typ_cd unless emp_typ_cd.empty?
|
123
|
-
emp[:baseSalaryAmount] = base_slry_amt unless base_slry_amt.nil?
|
124
|
-
emp[:primaryDepartment] = prmry_dept_cd unless prmry_dept_cd.empty?
|
125
|
-
emp[:employeeId] = emp_id unless emp_id.empty?
|
126
|
-
emp[:primaryEmployment] = true
|
127
|
-
|
128
|
-
affiliation.employment emp
|
331
|
+
recordsByPrincipalId.each do |principalId, info|
|
332
|
+
xml.record principalId: principalId,
|
333
|
+
principalName: info[:principalName] do |record|
|
334
|
+
|
335
|
+
record.affiliations do |affiliations|
|
336
|
+
info[:affiliations].each do |affilInfo|
|
337
|
+
affiliations.affiliation affilInfo.reject{ |k| k == :employment } do |affiliation|
|
338
|
+
affilInfo[:employment].each do |employmentInfo|
|
339
|
+
affiliation.employment employmentInfo
|
340
|
+
end
|
129
341
|
end
|
130
|
-
end # affiliations
|
131
|
-
|
132
|
-
address = {}
|
133
|
-
addr_typ_cd = GRM.parse_address_type_code( row[:addr_typ_cd] )
|
134
|
-
addr_line_1 = ETL.parse_string( row[:addr_line_1], name: 'ADDR_LINE_1', length: 45 )
|
135
|
-
addr_line_2 = ETL.parse_string( row[:addr_line_2], name: 'ADDR_LINE_2', length: 45 )
|
136
|
-
addr_line_3 = ETL.parse_string( row[:addr_line_3], name: 'ADDR_LINE_3', length: 45 )
|
137
|
-
city = ETL.parse_string( row[:city], name: 'CITY', length: 30 )
|
138
|
-
state_pvc_cd = ETL.parse_string( row[:state_pvc_cd], name: 'STATE_PVC_CD', length: 2 )
|
139
|
-
postal_cd = ETL.parse_string( row[:postal_cd], name: 'POSTAL_CD', length: 20 )
|
140
|
-
postal_cntry_cd = ETL.parse_string( row[:postal_cntry_cd], name: 'POSTAL_CNTRY_CD', length: 2 )
|
141
|
-
address[:addressTypeCode] = addr_typ_cd unless addr_typ_cd.empty?
|
142
|
-
address[:addressLine1] = addr_line_1 unless addr_line_1.empty?
|
143
|
-
address[:addressLine2] = addr_line_2 unless addr_line_2.empty?
|
144
|
-
address[:addressLine3] = addr_line_3 unless addr_line_3.empty?
|
145
|
-
address[:city] = city unless city.empty?
|
146
|
-
address[:stateOrProvince] = state_pvc_cd unless state_pvc_cd.empty?
|
147
|
-
address[:postalCode] = postal_cd unless postal_cd.empty?
|
148
|
-
address[:country] = postal_cntry_cd unless postal_cntry_cd.empty?
|
149
|
-
unless address.empty?
|
150
|
-
record.addresses do |addresses|
|
151
|
-
addresses.address address
|
152
|
-
end # addresses
|
153
342
|
end
|
343
|
+
end # affiliations
|
154
344
|
|
345
|
+
unless info[:addresses].nil? || info[:addresses].empty?
|
346
|
+
record.addresses do |addresses|
|
347
|
+
info[:addresses].each do |addrInfo|
|
348
|
+
addresses.address addrInfo
|
349
|
+
end
|
350
|
+
end # addresses
|
351
|
+
end
|
352
|
+
|
353
|
+
unless info[:names].nil?
|
155
354
|
record.names do |names|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
first_nm = ETL.parse_string row[:first_nm], length: 40, name: 'FIRST_NM'
|
160
|
-
middle_nm = ETL.parse_string row[:middle_nm], length: 40, name: 'MIDDLE_NM'
|
161
|
-
last_nm = ETL.parse_string row[:last_nm], length: 80, name: 'LAST_NM'
|
162
|
-
suffix_nm = GRM.parse_suffix row[:suffix_nm]
|
163
|
-
title_nm = ETL.parse_string row[:title_nm], length: 20, name: 'TITLE_NM'
|
164
|
-
nm[:nameCode] = nm_typ_cd unless nm_typ_cd.empty?
|
165
|
-
nm[:prefix] = prefix_nm unless prefix_nm.empty?
|
166
|
-
nm[:firstName] = first_nm unless first_nm.empty?
|
167
|
-
nm[:middleName] = middle_nm unless middle_nm.empty?
|
168
|
-
nm[:lastName] = last_nm unless last_nm.empty?
|
169
|
-
nm[:suffix] = suffix_nm unless suffix_nm.empty?
|
170
|
-
nm[:title] = title_nm unless title_nm.empty?
|
171
|
-
nm[:default] = true
|
172
|
-
nm[:active] = true
|
173
|
-
|
174
|
-
names.name nm
|
355
|
+
info[:names].each do |nameInfo|
|
356
|
+
names.name nameInfo
|
357
|
+
end
|
175
358
|
end # names
|
359
|
+
end
|
176
360
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
ph[:phoneType] = phone_typ_cd unless phone_typ_cd.empty?
|
183
|
-
ph[:phoneNumber] = phone_nbr unless phone_nbr.empty?
|
184
|
-
ph[:extension] = phone_extn_nbr unless phone_extn_nbr.empty?
|
185
|
-
ph[:country] = phone_cntry_cd unless phone_cntry_cd.empty?
|
186
|
-
ph[:default] = true
|
187
|
-
ph[:active] = true
|
188
|
-
|
189
|
-
unless phone_typ_cd.empty? || phone_nbr.empty?
|
190
|
-
record.phones do |phones|
|
191
|
-
phones.phone ph
|
192
|
-
end # phones
|
361
|
+
unless info[:phones].nil? || info[:phones].empty?
|
362
|
+
record.phones do |phones|
|
363
|
+
info[:phones].each do |phoneInfo|
|
364
|
+
phones.phone phoneInfo
|
365
|
+
end
|
193
366
|
end
|
367
|
+
end
|
194
368
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
unless email_typ_cd.empty? || email_addr.empty?
|
204
|
-
record.emails do |emails|
|
205
|
-
emails.email em unless email_addr.empty?
|
206
|
-
end # emails
|
207
|
-
end
|
369
|
+
unless info[:emails].nil? || info[:emails].empty?
|
370
|
+
record.emails do |emails|
|
371
|
+
info[:emails].each do |emailInfo|
|
372
|
+
emails.email emailInfo
|
373
|
+
end
|
374
|
+
end # emails
|
375
|
+
end
|
208
376
|
|
209
|
-
|
210
|
-
visa_type = ETL.parse_string( row[:visa_type], length: 30, name: 'VISA_TYPE' )
|
211
|
-
county = ETL.parse_string( row[:county], length: 30, name: 'COUNTY' )
|
212
|
-
age_by_fiscal_year = ETL.parse_integer( row[:age_by_fiscal_year], length: 3, name: 'AGE_BY_FISCAL_YEAR' )
|
213
|
-
race = ETL.parse_string( row[:race], length: 30, name: 'RACE' )
|
214
|
-
education_level = ETL.parse_string( row[:education_level], length: 30, name: 'EDUCATION_LEVEL' )
|
215
|
-
degree = GRM.parse_degree( row[:degree], name: 'DEGREE' )
|
216
|
-
major = ETL.parse_string( row[:major], length: 30, name: 'MAJOR' )
|
217
|
-
is_handicapped = ETL.parse_boolean( row[:is_handicapped], name: 'IS_HANDICAPPED' )
|
218
|
-
handicap_type = ETL.parse_string( row[:handicap_type], length: 30, name: 'HANDICAP_TYPE' )
|
219
|
-
is_veteran = ETL.parse_boolean( row[:is_veteran], name: 'IS_VETERAN' )
|
220
|
-
veteran_type = ETL.parse_string( row[:veteran_type], length: 30, name: 'VETERAN_TYPE' )
|
221
|
-
has_visa = ETL.parse_boolean( row[:has_visa], name: 'HAS_VISA' )
|
222
|
-
visa_code = ETL.parse_string( row[:visa_code], length: 20, name: 'VISA_CODE' )
|
223
|
-
visa_renewal_date = ETL.parse_string( row[:visa_renewal_date], length: 19, name: 'VISA_RENEWAL_DATE' )
|
224
|
-
office_location = ETL.parse_string( row[:office_location], length: 30, name: 'OFFICE_LOCATION' )
|
225
|
-
secondry_office_location = ETL.parse_string( row[:secondry_office_location], length: 30, name: 'SECONDRY_OFFICE_LOCATION' )
|
226
|
-
school = ETL.parse_string( row[:school], length: 50, name: 'SCHOOL' )
|
227
|
-
year_graduated = GRM.parse_year( row[:year_graduated], name: 'YEAR_GRADUATED' )
|
228
|
-
directory_department = ETL.parse_string( row[:directory_department], length: 30, name: 'DIRECTORY_DEPARTMENT' )
|
229
|
-
directory_title = ETL.parse_string( row[:directory_title], length: 50, name: 'DIRECTORY_TITLE', strict: false )
|
230
|
-
primary_title = ETL.parse_string( row[:primary_title], length: 51, name: 'PRIMARY_TITLE', strict: false )
|
231
|
-
vacation_accural = ETL.parse_boolean( row[:vacation_accural], name: 'VACATION_ACCURAL' )
|
232
|
-
is_on_sabbatical = ETL.parse_boolean( row[:is_on_sabbatical], name: 'IS_ON_SABBATICAL' )
|
233
|
-
id_provided = ETL.parse_string( row[:id_provided], length: 30, name: 'ID_PROVIDED' )
|
234
|
-
id_verified = ETL.parse_string( row[:id_verified], length: 30, name: 'ID_VERIFIED' )
|
235
|
-
citizenship_type_code = GRM.parse_citizenship_type( row[:citizenship_type_code] )
|
236
|
-
multi_campus_principal_id = ETL.parse_string( row[:multi_campus_principal_id], length: 40, name: 'MULTI_CAMPUS_PRINCIPAL_ID' )
|
237
|
-
multi_campus_principal_name = ETL.parse_string( row[:multi_campus_principal_name], length: 100, name: 'MULTI_CAMPUS_PRINCIPAL_NAME' )
|
238
|
-
salary_anniversary_date = ETL.parse_string( row[:salary_anniversary_date], length: 10, name: 'SALARY_ANNIVERSARY_DATE' )
|
239
|
-
ea[:visaType] = visa_type unless visa_type.empty?
|
240
|
-
ea[:county] = county unless county.empty?
|
241
|
-
ea[:ageByFiscalYear] = age_by_fiscal_year unless age_by_fiscal_year.nil?
|
242
|
-
ea[:race] = race unless race.empty?
|
243
|
-
ea[:educationLevel] = education_level unless education_level.empty?
|
244
|
-
ea[:degree] = degree unless degree.empty?
|
245
|
-
ea[:major] = major unless major.empty?
|
246
|
-
ea[:handicapped] = is_handicapped unless is_handicapped.nil?
|
247
|
-
ea[:handicapType] = handicap_type unless handicap_type.empty?
|
248
|
-
ea[:veteran] = is_veteran unless is_veteran.nil?
|
249
|
-
ea[:veteranType] = veteran_type unless veteran_type.empty?
|
250
|
-
ea[:visa] = has_visa unless has_visa.nil?
|
251
|
-
ea[:visaCode] = visa_code unless visa_code.empty?
|
252
|
-
ea[:visaRenewalDate] = visa_renewal_date unless visa_renewal_date.empty?
|
253
|
-
ea[:officeLocation] = office_location unless office_location.empty?
|
254
|
-
ea[:secondaryOfficeLocation] = secondry_office_location unless secondry_office_location.empty?
|
255
|
-
ea[:school] = school unless school.empty?
|
256
|
-
ea[:yearGraduated] = year_graduated unless year_graduated.empty?
|
257
|
-
ea[:directoryDepartment] = directory_department unless directory_department.empty?
|
258
|
-
ea[:directoryTitle] = directory_title unless directory_title.empty?
|
259
|
-
ea[:primaryTitle] = primary_title unless primary_title.empty?
|
260
|
-
ea[:vacationAccrual] = vacation_accural unless vacation_accural.nil?
|
261
|
-
ea[:onSabbatical] = is_on_sabbatical unless is_on_sabbatical.nil?
|
262
|
-
ea[:idProvided] = id_provided unless id_provided.empty?
|
263
|
-
ea[:idVerified] = id_verified unless id_verified.empty?
|
264
|
-
ea[:citizenshipType] = citizenship_type_code unless citizenship_type_code.empty?
|
265
|
-
ea[:multiCampusPrincipalId] = multi_campus_principal_id unless multi_campus_principal_id.empty?
|
266
|
-
ea[:multiCampusPrincipalName] = multi_campus_principal_name unless multi_campus_principal_name.empty?
|
267
|
-
ea[:salaryAnniversaryDate] = salary_anniversary_date unless salary_anniversary_date.empty?
|
268
|
-
|
269
|
-
record.kcExtendedAttributes ea
|
270
|
-
|
271
|
-
ap = {}
|
272
|
-
unit_number = ETL.parse_string( row[:unit_number], length: 8, name: 'UNIT_NUMBER' )
|
273
|
-
appointment_type_code = ETL.parse_string( row[:appointment_type_code], length: 3, name: 'APPOINTMENT_TYPE_CODE' )
|
274
|
-
job_code = ETL.parse_string( row[:job_code], length: 6, name: 'JOB_CODE' )
|
275
|
-
salary = ETL.parse_float( row[:salary], length: 15, name: 'SALARY' )
|
276
|
-
appointment_start_date = ETL.parse_string( row[:appointment_start_date], name: 'APPOINTMENT_START_DATE' )
|
277
|
-
appointment_end_date = ETL.parse_string( row[:appointment_end_date], name: 'APPOINTMENT_END_DATE' )
|
278
|
-
job_title = ETL.parse_string( row[:job_title], length: 50, name: 'JOB_TITLE', strict: false )
|
279
|
-
prefered_job_title = ETL.parse_string( row[:prefered_job_title], length: 51, name: 'PREFERED_JOB_TITLE', strict: false )
|
280
|
-
ap[:unitNumber] = unit_number unless unit_number.empty?
|
281
|
-
ap[:appointmentType] = appointment_type_code unless appointment_type_code.empty?
|
282
|
-
ap[:jobCode] = job_code unless job_code.empty?
|
283
|
-
ap[:salary] = salary unless salary.nil?
|
284
|
-
ap[:startDate] = appointment_start_date unless appointment_start_date.empty?
|
285
|
-
ap[:endDate] = appointment_end_date unless appointment_end_date.empty?
|
286
|
-
ap[:jobTitle] = job_title unless job_title.empty?
|
287
|
-
ap[:preferedJobTitle] = prefered_job_title unless prefered_job_title.empty?
|
288
|
-
|
289
|
-
unless unit_number.empty? || job_code.empty?
|
290
|
-
record.appointments do |appointments|
|
291
|
-
appointments.appointment ap
|
292
|
-
end # appointments
|
293
|
-
end
|
294
|
-
end # record
|
377
|
+
record.kcExtendedAttributes info[:kcExtendedAttributes]
|
295
378
|
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
379
|
+
unless info[:appointments].nil? || info[:appointments].empty?
|
380
|
+
record.appointments do |appointments|
|
381
|
+
info[:appointments].each do |appointmentInfo|
|
382
|
+
appointments.appointment appointmentInfo
|
383
|
+
end
|
384
|
+
end # appointments
|
385
|
+
end
|
386
|
+
end # record
|
387
|
+
end
|
301
388
|
end # record
|
302
389
|
end # hrmanifest
|
303
390
|
end # xml_file
|
@@ -586,9 +586,9 @@ RSpec.describe "KualiCo::ETL::GRM" do
|
|
586
586
|
expect { GRM.parse_citizenship_type("Z") }.to raise_error(TextParseError)
|
587
587
|
end
|
588
588
|
|
589
|
-
it "
|
590
|
-
expect(GRM.parse_citizenship_type(nil)).to eq("")
|
591
|
-
expect(GRM.parse_citizenship_type("")).to eq("")
|
589
|
+
it "defaults to citizenship_type 1" do
|
590
|
+
expect(GRM.parse_citizenship_type(nil)).to eq("1")
|
591
|
+
expect(GRM.parse_citizenship_type("")).to eq("1")
|
592
592
|
end
|
593
593
|
|
594
594
|
it "raises an TextParseError if length exceeds 1 character" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kuali_toolbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.40'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KualiCo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|