1 PACKAGE BODY IGS_AD_GRD_DATA_LOAD AS
2 /* $Header: IGSAD77B.pls 120.0 2005/06/01 20:44:33 appldev noship $ */
3
4 PROCEDURE admp_vtac_load_address (
5 p_vtac_addr1 IN VARCHAR2,
6 p_vtac_addr2 IN VARCHAR2,
7 p_vtac_addr3 IN VARCHAR2,
8 p_vtac_addr4 IN VARCHAR2,
9 p_vtac_postcode IN NUMBER,
10 p_vtac_home_ph IN VARCHAR2,
11 p_vtac_bus_ph IN VARCHAR2,
12 p_aus_addr_type IN VARCHAR2,
13 p_os_addr_type IN VARCHAR2 );
14
15 FUNCTION admp_vtac_load_stu_off_crs
16 (p_offer_round IN NUMBER,
17 p_override_adm_cat IN VARCHAR2,
18 p_fee_paying_appl_ind IN VARCHAR2,
19 p_fee_paying_hpo IN VARCHAR2,
20 p_offer_letter_req_ind IN VARCHAR2,
21 p_pre_enrol_ind IN VARCHAR2)
22 RETURN BOOLEAN;
23
24 PROCEDURE admp_vtac_load_sec_edu;
25
26 PROCEDURE admp_vtac_load_tert_edu;
27
28
29
30
31
32 -- Inserts a person and alternate person ID record with data from TAC
33 PROCEDURE admp_ins_vtac_offer (
34 errbuf out NOCOPY varchar2,
35 retcode out NOCOPY number,
36 p_file_name IN VARCHAR2 ,
37 p_offer_round IN NUMBER,
38 p_acad_perd IN VARCHAR2,
39 p_adm_perd IN VARCHAR2,
40 p_aus_addr_type IN VARCHAR2,
41 p_os_addr_type IN VARCHAR2,
42 p_alt_person_id_type IN VARCHAR2,
43 p_override_adm_cat IN VARCHAR2,
44 p_fee_payment IN VARCHAR2,
45 p_fee_paying_hpo IN VARCHAR2,
46 p_pre_enrol_ind IN VARCHAR2,
47 p_offer_letter_req_ind IN VARCHAR2,
48 p_org_id IN NUMBER) IS
49
50
51 --Personal Details Section
52 vtac_id_num VARCHAR2(9);
53 vtac_surname VARCHAR2(24);
54 vtac_gname1 VARCHAR2(17);
55 vtac_gname2 VARCHAR2(17);
56 vtac_DateOfBirth VARCHAR2(8);
57 vtac_addr1 VARCHAR2(25);
58 vtac_addr2 VARCHAR2(25);
59 vtac_addr3 VARCHAR2(3);
60 vtac_postcode VARCHAR2(4);
61 vtac_addr4 VARCHAR2(14);
62 vtac_home_ph VARCHAR2(12);
63 vtac_bus_ph VARCHAR2(12);
64 vtac_sex VARCHAR2(1);
65 vtac_category VARCHAR2(3);
66 v_message_name VARCHAR2(30);
67
68 v_initial VARCHAR2(1);
69 message_str VARCHAR2(2000);
70
71 vtac_filehandle UTL_FILE.FILE_TYPE;
72 vtac_filedir VARCHAR2(255);
73 v_last_char VARCHAR2(1);
74
75
76 CURSOR c_api ( cp_api_person_id
77 IGS_PE_ALT_PERS_ID.api_person_id%TYPE, cp_alt_person_id_type
78 IGS_PE_ALT_PERS_ID.person_id_type%TYPE) IS
79 SELECT pe_person_id
80 FROM IGS_PE_ALT_PERS_ID
81 WHERE api_person_id = cp_api_person_id
82 AND person_id_type = cp_alt_person_id_type
83 AND start_dt < SYSDATE
84 AND NVL(end_dt,SYSDATE) >= SYSDATE;
85
86 BEGIN
87 igs_ge_gen_003.set_org_id(p_org_id);
88 retcode := 0;
89
90 -- extract academic calendar
91 p_acad_cal_type := RTRIM(SUBSTR(p_acad_perd, 101, 10));
92 p_acad_seq_num := IGS_GE_NUMBER.TO_NUM(RTRIM(SUBSTR(p_acad_perd, 112, 6)));
93
94 -- extract admission calendar
95 p_adm_cal_type := RTRIM(SUBSTR(p_adm_perd, 101, 10));
96 p_adm_seq_num := IGS_GE_NUMBER.TO_NUM(RTRIM(SUBSTR(p_adm_perd, 112, 6)));
97
98
99 IF (IGS_EN_GEN_014.ENRS_GET_WITHIN_CI(
100 p_acad_cal_type,
101 p_acad_seq_num,
102 p_adm_cal_type,
103 p_adm_seq_num,
104 'N') = 'N') THEN
105
106 ERRBUF := FND_MESSAGE.GET_STRING('IGS','IGS_AD_CAL_DOES_NOT_EXIST');
107 retcode := 2;
108 Return;
109
110 END IF;
111
112 --decode p_fee_payment to required value
113 IF (p_fee_payment = 'FEE-PAYING') THEN
114 p_fee_paying_appl_ind := 'Y';
115 ELSIF (p_fee_payment = 'HECS') THEN
116 p_fee_paying_appl_ind := 'N';
117 ELSE
118 p_fee_paying_appl_ind := 'U';
119 END IF;
120
121 --Open the file p_file_name for reading, the directory must be specified in the --(INIT.ORA) using the UTL_FILE_DIR --parameter
122
123 vtac_filedir := nvl(RTRIM(FND_PROFILE.VALUE('IGS_IN_FILE_PATH')),' ');
124 v_last_char := SUBSTR(vtac_filedir,LENGTH(vtac_filedir),1);
125
126 IF v_last_char IN ('/','\') THEN -- '/' To match UNIX & '\' for NT
127 vtac_filedir := SUBSTR(vtac_filedir,1,LENGTH(vtac_filedir)-1);
128 END IF;
129
130
131 vtac_filehandle := UTL_FILE.FOPEN(vtac_filedir, p_file_name, 'r');
132
133
134 --Process Offers
135
136 LOOP -- Main Loop
137 BEGIN
138 UTL_FILE.GET_LINE(vtac_filehandle, G_vtac_output_buffer);
139 EXCEPTION
140 WHEN NO_DATA_FOUND THEN
141 EXIT;
142 END;
143
144 -- Commit the changes for the previous student
145
146 IF G_test_only = 'TRUE' THEN
147 ROLLBACK;
148 ELSE
149 COMMIT;
150 END IF;
151
152
153 G_read_number := G_read_number + 1;
154
155 -- Transfer the data to the host variables
156
157 vtac_id_num := RTRIM(SUBSTR(G_vtac_output_buffer,1,9));
158 vtac_surname := RTRIM(SUBSTR(G_vtac_output_buffer,10,24));
159 vtac_gname1 := RTRIM(SUBSTR(G_vtac_output_buffer,34,17));
160 vtac_gname2 := RTRIM(SUBSTR(G_vtac_output_buffer,51,17));
161 vtac_DateOfBirth := RTRIM(SUBSTR(G_vtac_output_buffer,68,8));
162 vtac_addr1 := RTRIM(SUBSTR(G_vtac_output_buffer,76,25));
163 vtac_addr2 := RTRIM(SUBSTR(G_vtac_output_buffer,101,25));
164 vtac_addr3 := RTRIM(SUBSTR(G_vtac_output_buffer,126,3));
165 vtac_addr4 := RTRIM(SUBSTR(G_vtac_output_buffer,129,14));
166 vtac_postcode := RTRIM(SUBSTR(G_vtac_output_buffer,143,4));
167 vtac_home_ph := RTRIM(SUBSTR(G_vtac_output_buffer,147,12));
168 vtac_bus_ph := RTRIM(SUBSTR(G_vtac_output_buffer,159,12));
169 vtac_sex := RTRIM(SUBSTR(G_vtac_output_buffer,171,1));
170
171
172 -- Log the student loaded
173 FND_FILE.PUT_LINE( FND_FILE.LOG,
174 G_read_number||'-'||vtac_id_num||' '||vtac_surname||' '||vtac_DateOfBirth);
175
176
177 -- Check to see if the person already exists on Callista.
178 -- Match on surname, birth date, sex and first initial of first name.
179
180
181 v_initial := SUBSTR(vtac_gname1,1,1);
182
183 -- admp_get_match_prsn module attempts to find a person based on surname,
184 -- birth date, sex and first initial.
185 G_match_person_id := IGS_AD_GEN_007.ADMP_GET_MATCH_PRSN(
186 vtac_surname,
187 vtac_DateOfBirth, -- format 'DDMMYYYY'
188 vtac_sex,
189 v_initial,
190 v_message_name);
191
192 IF (v_message_name IS NOT NULL) THEN
193 -- vtac_DateOfBirth has wrong date format
194 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
195 FND_FILE.PUT_LINE( FND_FILE.LOG, vtac_id_num||'.'||RTRIM(G_message_str));
196 END IF;
197
198
199 IF G_match_person_id = 0 THEN
200 OPEN c_api ( vtac_id_num,
201 p_alt_person_id_type);
202 FETCH c_api INTO G_match_person_id;
203 IF (c_api%NOTFOUND) THEN
204 G_match_person_id := 0;
205 END IF;
206
207 CLOSE c_api;
208 END IF;
209
210
211 -- Concatenate First Given Name with Second Given Name
212
213 IF vtac_gname2 IS NOT NULL THEN
214 G_vtac_all_given_names := RTRIM(vtac_gname1||' '||vtac_gname2);
215 END IF;
216
217
218 -- This module uses information from the TAC offer load process
219 -- to create person and alternate person ID records if they
220 -- don't already exist.
221 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_TAC_PRSN(
222 G_match_person_id,
223 vtac_id_num,
224 vtac_surname,
225 G_vtac_all_given_names,
226 vtac_sex,
227 TO_DATE(vtac_DateOfBirth, 'DDMMYYYY'),
228 p_alt_person_id_type,
229 G_new_person_id, -- OUT NOCOPY
230 G_message_str) = FALSE
231
232 THEN
233 ROLLBACK;
234 FND_FILE.PUT_LINE( FND_FILE.LOG,RTRIM(G_message_str));
235 UTL_FILE.FCLOSE(vtac_filehandle);
236 retcode := 2;
237 return;
238 END IF;
239
240
241 --Log the creating record message
242
243 FND_FILE.PUT_LINE( FND_FILE.LOG, RTRIM(G_message_str));
244
245 --Save the ID number we have used so far into a new variable. We can then use this
246 --variable from now on regardless of if the student was new or matched.
247 IF G_match_person_id <> 0 THEN
248 G_current_person_id := G_match_person_id;
249 ELSE
250 G_current_person_id := G_new_person_id;
251 END IF;
252
253
254 -- Load the address
255 admp_vtac_load_address(
256 vtac_addr1,
257 vtac_addr2,
258 vtac_addr3,
259 vtac_addr4,
260 vtac_postcode,
261 vtac_home_ph,
262 vtac_bus_ph,
263 p_aus_addr_type,
264 p_os_addr_type);
265
266 -- Only continue if admission application is created
267
268 IF (admp_vtac_load_stu_off_crs( p_offer_round,
269 p_override_adm_cat,
270 p_fee_paying_appl_ind,
271 p_fee_paying_hpo,
272 p_offer_letter_req_ind,
273 p_pre_enrol_ind) = TRUE) THEN
274
275 -- Load sec edu details and Load ter edu details
276
277 admp_vtac_load_sec_edu;
278 admp_vtac_load_tert_edu;
279
280 ELSE
281
282 IF G_match_person_id = 0 THEN
283 FND_FILE.PUT_LINE(FND_FILE.LOG,G_current_person_id||' '||IGS_GE_GEN_004.GENP_GET_LOOKUP('REPORT','REJTD'));
284 END IF;
285
286 END IF;
287
288 END LOOP; -- End of enormous main Loop.
289
290 -- Commit any changes made for the last student
291 IF G_test_only = 'TRUE' THEN
292 ROLLBACK;
293 ELSE
294 COMMIT;
295 END IF;
296
297 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('IGS','IGS_AD_NUM_OF_RECORD_READ')||'-'||G_read_number);
298
299 UTL_FILE.FCLOSE(vtac_filehandle);
300
301 EXCEPTION
302 WHEN UTL_FILE.INVALID_PATH THEN
303 UTL_FILE.FCLOSE(vtac_filehandle);
304 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_INVALID_PATH');
305 retcode := 2;
306
307 WHEN UTL_FILE.INVALID_MODE THEN
308 UTL_FILE.FCLOSE(vtac_filehandle);
309 ERRBUF:= FND_MESSAGE.GET_STRING('IGS', 'IGS_GE_INVALID_MODE');
310 retcode := 2;
311
312 WHEN UTL_FILE.INVALID_FILEHANDLE THEN
313 UTL_FILE.FCLOSE(vtac_filehandle);
314 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_INVALID_FILE_HANDLE');
315 retcode := 2;
316
317 WHEN UTL_FILE.INVALID_OPERATION THEN
318 UTL_FILE.FCLOSE(vtac_filehandle);
319 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_INVALID_OPER');
320 retcode := 2;
321
322 WHEN UTL_FILE.READ_ERROR THEN
323 UTL_FILE.FCLOSE(vtac_filehandle);
324 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_READ_ERR');
325 retcode := 2;
326
327 WHEN UTL_FILE.WRITE_ERROR THEN
328 UTL_FILE.FCLOSE(vtac_filehandle);
329 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_WRITE_ERR');
330 retcode := 2;
331
332 WHEN UTL_FILE.INTERNAL_ERROR THEN
333 UTL_FILE.FCLOSE(vtac_filehandle);
334 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_INTERNAL_ERR');
335 retcode := 2;
336
337 WHEN NO_DATA_FOUND THEN
338 UTL_FILE.FCLOSE(vtac_filehandle);
339 ERRBUF:= IGS_GE_GEN_004.GENP_GET_LOOKUP('REPORT','NO_DATA');
340 retcode := 2;
341
342 WHEN OTHERS THEN
343 UTL_FILE.FCLOSE(vtac_filehandle);
344 ERRBUF:= FND_MESSAGE.GET_STRING('IGS','IGS_GE_UNHANDLED_EXCEPTION');
345 retcode := 2;
346 IGS_GE_MSG_STACK.CONC_EXCEPTION_HNDL;
347 END admp_ins_vtac_offer;
348
349
350
351 --Load Address
352
353 PROCEDURE admp_vtac_load_address (
354 p_vtac_addr1 IN VARCHAR2,
355 p_vtac_addr2 IN VARCHAR2,
356 p_vtac_addr3 IN VARCHAR2,
357 p_vtac_addr4 IN VARCHAR2,
358 p_vtac_postcode IN NUMBER,
359 p_vtac_home_ph IN VARCHAR2,
360 p_vtac_bus_ph IN VARCHAR2,
361 p_aus_addr_type IN VARCHAR2,
362 p_os_addr_type IN VARCHAR2 ) IS
363
364 v_message_name VARCHAR2(30);
365 aust_address VARCHAR2(5);
366 message_str VARCHAR2(2000);
367
368
369 BEGIN
370 IF p_vtac_addr3 IS NOT NULL OR p_vtac_addr4 IS NULL THEN
371 aust_address := 'TRUE';
372 ELSE
373 aust_address := 'FALSE';
374 END IF;
375
376 IF aust_address = 'TRUE' THEN
377 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_PERSON_ADDR(
378 G_current_person_id,
379 p_aus_addr_type,
380 SYSDATE,
381 p_vtac_addr1,
382 p_vtac_addr2,
383 p_vtac_addr3,
384 NULL,
385 p_vtac_postcode,
386 NULL,
387 p_vtac_home_ph,
388 p_vtac_bus_ph,
389 v_message_name) = FALSE THEN
390
391 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
392 FND_FILE.PUT_LINE( FND_FILE.LOG,G_current_person_id||' '||RTRIM(G_message_str));
393 END IF;
394
395 ELSE
396 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_PERSON_ADDR(
397 G_current_person_id,
398 p_os_addr_type,
399 SYSDATE,
400 p_vtac_addr1,
401 p_vtac_addr2,
402 NULL,
403 p_vtac_addr4,
404 NULL,
405 p_vtac_postcode,
406 p_vtac_home_ph,
407 p_vtac_bus_ph,
408 v_message_name) = FALSE THEN
409
410 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
411 FND_FILE.PUT_LINE( FND_FILE.LOG,G_current_person_id||' '||RTRIM(G_message_str));
412 END IF;
413 END IF; --End of if aust_address
414
415 EXCEPTION
416
417 WHEN OTHERS THEN
418 RAISE;
419 END admp_vtac_load_address; --end of load address
420
421
422
423 --Load the students offered courses
424 FUNCTION admp_vtac_load_stu_off_crs
425 (p_offer_round IN NUMBER,
426 p_override_adm_cat IN VARCHAR2,
427 p_fee_paying_appl_ind IN VARCHAR2,
428 p_fee_paying_hpo IN VARCHAR2,
429 p_offer_letter_req_ind IN VARCHAR2,
430 p_pre_enrol_ind IN VARCHAR2)
431 RETURN BOOLEAN IS
432
433 vtac_category VARCHAR2(3);
434
435 --Course preference section (13)
436 vtac_inco VARCHAR2(5);
437 vtac_offer_stream VARCHAR2(1);
438 vtac_rank VARCHAR2(5);
439 vtac_orig_rank VARCHAR2(4);
440 vtac_offer_status VARCHAR2(1);
441 vtac_offer_round VARCHAR2(1);
442 vtac_special_admissions VARCHAR2(1);
443
444 valid_pref VARCHAR2(5) := 'FALSE';
445 course_cd VARCHAR2(80);
446 attendence_mode VARCHAR2(80);
447 admission_cat VARCHAR2(80);
448 admission_cd VARCHAR2(80);
449 basis_for_admission_type VARCHAR2(80);
450 return_type VARCHAR2(80);
451 tac_course_match_ind VARCHAR2(80);
452 message_str VARCHAR2(2000);
453 v_message_name VARCHAR2(30);
454
455 TYPE pref_str_table IS TABLE OF VARCHAR2( 25)
456 INDEX BY BINARY_INTEGER;
457 pref_str pref_str_table;
458 j BINARY_INTEGER := 1;
459 i NUMBER := 208;
460 k NUMBER := 1;
461
462 BEGIN
463
464 G_ret_val := 0;
465
466 vtac_category := RTRIM(SUBSTR(G_vtac_output_buffer,172,3));
467
468 -- Get the data we need for inserting adm_course_appl record
469
470 -- This module finds the user defined admission code and basis for
471 -- admission type from the admission code table.
472 IF (IGS_AD_GEN_003.ADMP_GET_AC_BFA(
473 vtac_category,
474 admission_cd,
475 basis_for_admission_type,
476 v_message_name) = FALSE) THEN
477
478 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
479 FND_FILE.PUT_LINE( FND_FILE.LOG,
480 RTRIM (G_message_str)||' '||vtac_category);
481 RETURN FALSE;
482 ROLLBACK;
483 END IF;
484
485 admission_cd := RTRIM(admission_cd);
486 basis_for_admission_type := RTRIM(basis_for_admission_type);
487
488 --Transfer the course preference section data from the VTAC file to the
489 --PL/SQL table of strings
490
491 WHILE i < 442
492 LOOP
493 pref_str(j) := RTRIM(SUBSTR(G_vtac_output_buffer,i,18));
494 i := i + 18;
495 j := j + 1;
496 END LOOP;
497
498
499 -- Loop through the preferences looking for Deakin Courses(s). Validate that
500 -- this is an actual course.
501
502
503 -- << pref_loop >>
504 WHILE k <=13
505 LOOP
506 vtac_inco := RTRIM(SUBSTR(pref_str(k),1,5));
507 vtac_offer_status := RTRIM(SUBSTR(pref_str(k),16,1));
508 vtac_offer_round := RTRIM(SUBSTR(pref_str(k),17,1));
509
510 IF vtac_inco IS NULL THEN
511 GOTO pref_loop; --Do not process this record, go to the end of the while loop
512 END IF;
513
514
515 -- We only want to process for offered courses for the correct offer round
516 IF vtac_offer_status = 'O' AND vtac_offer_round =SUBSTR(p_offer_round,1,1)
517 THEN
518
519
520 -- Get the data we need for inserting an admission_appl
521
522 IF p_override_adm_cat IS NOT NULL THEN
523 admission_cat := p_override_adm_cat;
524 END IF;
525
526 G_ret_val := 0;
527 -- Inserts TAC details to form an admission course
528 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_TAC_COURSE(
529 p_acad_cal_type,
530 p_acad_seq_num,
531 p_adm_cal_type,
532 p_adm_seq_num,
533 admission_cat,
534 NULL, -- fee category
535 NULL, -- enrolment cat
536 NULL, -- correspondence cat
537 G_current_person_id,
538 vtac_inco, -- match_course,
539 1, -- preference number
540 SYSDATE, -- application date
541 SYSDATE, -- offer date
542 basis_for_admission_type,
543 admission_cd,
544 p_fee_paying_appl_ind,
545 p_fee_paying_hpo,
546 p_offer_letter_req_ind,
547 -- VTAC produces offer letter
548 -- on Deakin's behalf
549 p_pre_enrol_ind,
550 course_cd, -- OUT NOCOPY
551 tac_course_match_ind, -- OUT NOCOPY
552 return_type, -- OUT NOCOPY
553 v_message_name) = FALSE
554 THEN
555 G_message_str :=
556 FND_MESSAGE.GET_STRING('IGS',
557 v_message_name);
558 G_ret_val := 1;
559 END IF;
560
561
562
563 course_cd := RTRIM(course_cd);
564 tac_course_match_ind := RTRIM(tac_course_match_ind);
565 return_type := RTRIM(return_type);
566 IF G_ret_val = 1 THEN
567 G_message_str := RTRIM(G_message_str);
568
569 IF return_type = 'W' THEN
570
571 FND_FILE.PUT_LINE( FND_FILE.LOG,FND_MESSAGE.GET_STRING('IGS','IGS_AD_WARNING_APPLICANT')||' '||
572 G_current_person_id||'-'||course_cd||'-'||vtac_inco||'.'||
573 G_message_str||'-'||
574 FND_MESSAGE.GET_STRING('IGS','IGS_AD_ADPS_APPL_INST_CREATIN'));
575 valid_pref := 'TRUE';
576
577 ELSE
578
579 -- Process next offer if no TAC match
580
581 IF tac_course_match_ind = 'N' THEN
582 --Do not process this record, go to the end of the while loop
583 GOTO pref_loop;
584 END IF;
585
586 --There must have been an error inserting
587
588 FND_FILE.PUT_LINE( FND_FILE.LOG,FND_MESSAGE.GET_STRING('IGS','IGS_AD_ERR_APPLICANT')||' '||
589 G_current_person_id||'-'||course_cd||'-'||vtac_inco||'.'||
590 G_message_str||'-'||
591 FND_MESSAGE.GET_STRING('IGS','IGS_AD_ADPS_APPL_INST_CREATIN'));
592
593 RETURN FALSE;
594 ROLLBACK;
595
596 END IF; --End of if return_type
597
598 ELSE
599 valid_pref := 'TRUE';
600
601 END IF; -- End of if G_ret_val -- Course offered and correct round
602
603 END IF; -- End of if vtac_offer_status
604
605 << pref_loop >>
606 k := k+1;
607 END LOOP; --End of while loop
608
609
610 IF valid_pref = 'FALSE' THEN
611 FND_FILE.PUT_LINE( FND_FILE.LOG,FND_MESSAGE.GET_STRING('IGS','IGS_AD_NO_VALID_PREFERENCES')||' '||
612 G_current_person_id);
613 END IF;
614
615
616 RETURN TRUE;
617
618 EXCEPTION
619 WHEN OTHERS THEN
620 RAISE;
621
622 END admp_vtac_load_stu_off_crs; -- End of Load the students offered courses.
623
624 -- Load secondary education details
625 PROCEDURE admp_vtac_load_sec_edu IS
626
627 --Secondary level qualifications (4)
628
629
630 vtac_qual_year VARCHAR2(4);
631 vtac_qual_type VARCHAR2(1);
632 vtac_qual_school VARCHAR2(3);
633 vtac_state_name VARCHAR2(24);
634
635
636 --Results (24)
637
638 vtac_result_year VARCHAR2(4);
639 vtac_s_result_year VARCHAR2(4);
640 vtac_subject_code VARCHAR2(2);
641 vtac_subject_type VARCHAR2(1);
642 vtac_gl_score NUMBER(2);
643 vtac_est_gl_score VARCHAR2(2);
644 vtac_fact_gl_score VARCHAR2(2);
645 vtac_old_mark VARCHAR2(3);
646 vtac_old_grade VARCHAR2(1);
647 vtac_unit_res_1 VARCHAR2(1);
648 vtac_unit_res_2 VARCHAR2(1);
649 vtac_unit_res_3 VARCHAR2(1);
650 vtac_unit_res_4 VARCHAR2(1);
651 vtac_average_cat_grade VARCHAR2(2);
652 vtac_s_ter VARCHAR2(5);
653 vtac_s_est_ter VARCHAR2(5);
654 vtac_s_factor_ter VARCHAR2(5);
655
656 vtac_study_count NUMBER(2);
657
658 result_yr NUMBER(4);
659 study_cnt NUMBER(2);
660 sub_result_yr NUMBER(4);
661 score NUMBER(5,2);
662 sub_result VARCHAR2(3);
663 ase_sequence_number NUMBER(10);
664
665 TYPE sec_edu_str_table IS TABLE OF VARCHAR2(80)
666 INDEX BY BINARY_INTEGER;
667 sec_edu_str sec_edu_str_table;
668 j BINARY_INTEGER := 1;
669 i NUMBER := 1050;
670 k NUMBER := 1;
671
672 message_str VARCHAR2(2000);
673 v_message_name VARCHAR2(30);
674 v_dummy NUMBER;
675
676 CURSOR c_dup_chk is
677 SELECT 1
678 FROM IGS_AD_AUS_SEC_ED_SU ases
679 WHERE ases.person_id = G_current_person_id and
680 ases.ase_sequence_number = ase_sequence_number and
681 ases.subject_result_yr = sub_result_yr and
682 ases.subject_cd = vtac_subject_code;
683
684 BEGIN
685
686 -- Take state_cd, ass_type and secondary school code data from the
687 --first record of secondary level qualifications (sec_qual)
688 --provided in the input file.
689
690 vtac_state_name := RTRIM(SUBSTR(G_vtac_output_buffer,608,24));
691
692 -- Check if the qualification is from a state of Australia.
693
694 IF SUBSTR(vtac_state_name,1,3) IN ('VIC','NSW','ACT','QLD','TAS') OR
695 SUBSTR(vtac_state_name,1,2) IN ('NT','WA','SA') THEN
696 G_aus_edu := 'TRUE';
697
698 ELSE
699 FND_FILE.PUT_LINE( FND_FILE.LOG,FND_MESSAGE.GET_STRING('IGS','IGS_AD_NO_SEC_QUALIFICATION')
700 ||'-'||G_current_person_id);
701 G_aus_edu := 'FALSE';
702 END IF;
703
704 IF G_aus_edu = 'TRUE' THEN
705
706 vtac_qual_type := RTRIM(SUBSTR(G_vtac_output_buffer,604,1));
707 vtac_qual_school := RTRIM(SUBSTR(G_vtac_output_buffer,605,3));
708
709
710 --Take year and TER score data from the first record of result
711 --summary (result) provided in the input file. See below.
712
713 vtac_s_result_year := RTRIM(SUBSTR(G_vtac_output_buffer,1050,4));
714
715 -- Only insert aus scn edu if the result year is known
716
717 IF vtac_s_result_year IS NOT NULL THEN
718
719 result_yr := IGS_GE_NUMBER.TO_NUM(vtac_s_result_year);
720 vtac_s_ter := RTRIM(SUBSTR(G_vtac_output_buffer,497,5));
721 score := IGS_GE_NUMBER.TO_NUM(vtac_s_ter);
722
723 IF score = 0 THEN
724 vtac_s_est_ter := RTRIM(SUBSTR(G_vtac_output_buffer,502,5));
725 score := IGS_GE_NUMBER.TO_NUM(vtac_s_est_ter);
726 END IF;
727
728 IF score = 0 THEN
729 vtac_s_factor_ter := RTRIM(SUBSTR(G_vtac_output_buffer,507,5));
730 score := IGS_GE_NUMBER.TO_NUM(vtac_s_factor_ter);
731 END IF;
732
733 score := score/100;
734
735 G_ret_val := 0;
736 -- This procedure inserts a new aus_scndry_education record
737 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_AUS_SCN_EDU(
738 G_current_person_id,
739 result_yr,
740 score,
741 vtac_state_name,
742 NULL,
743 vtac_qual_type,
744 vtac_qual_school,
745 ase_sequence_number, -- OUT NOCOPY
746 v_message_name) = FALSE
747 THEN
748 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
749 FND_FILE.PUT_LINE( FND_FILE.LOG,
750 G_message_str||' '||G_current_person_id||
751 ' '||vtac_state_name);
752 END IF;
753
754 --Load the secondary education subjects if any exist.
755
756 vtac_study_count := RTRIM(SUBSTR(G_vtac_output_buffer,1048,2));
757 study_cnt := IGS_GE_NUMBER.TO_NUM(vtac_study_count);
758
759 IF study_cnt > 0 THEN
760
761 --Transfer the secondary education subjects data form the VTAC file to the
762 -- PL/SQL table of strings
763
764 WHILE i <= 2658
765 LOOP
766 sec_edu_str(j) := RTRIM(SUBSTR(G_vtac_output_buffer,i,67));
767 i := i + 67;
768 j := j + 1;
769 END LOOP;
770
771
772 WHILE k <= study_cnt
773
774 LOOP
775 vtac_result_year := RTRIM(SUBSTR(sec_edu_str(k),1,4));
776 IF vtac_result_year IS NULL THEN
777 -- Do not process this record, go to end of the while loop
778 GOTO sec_edu_loop;
779 END IF;
780
781 sub_result_yr := IGS_GE_NUMBER.TO_NUM(vtac_result_year);
782
783 -- Work out NOCOPY mark from possible mark fields
784
785 vtac_gl_score := RTRIM(SUBSTR(sec_edu_str(k),8,2));
786 vtac_subject_code := RTRIM(SUBSTR(sec_edu_str(k),5,2));
787 vtac_subject_type := RTRIM(SUBSTR(sec_edu_str(k),7,1));
788
789 sub_result := RTRIM(vtac_gl_score);
790
791 IF sub_result IS NULL THEN
792 vtac_est_gl_score := RTRIM(SUBSTR(sec_edu_str(k),10 ,2));
793 sub_result := vtac_est_gl_score;
794 END IF;
795
796 IF sub_result IS NULL THEN
797 vtac_fact_gl_score := RTRIM(SUBSTR(sec_edu_str(k),12,2));
798 sub_result := vtac_fact_gl_score;
799 END IF;
800
801
802 G_ret_val := 0;
803 --check for duplicate record
804 OPEN c_dup_chk;
805 FETCH c_dup_chk into v_dummy;
806 IF (c_dup_chk%NOTFOUND) THEN
807 -- Insert an Australian secondary education subject record
808 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_AUS_SCN_SUB(
809 G_current_person_id,
810 ase_sequence_number,
811 sub_result_yr,
812 vtac_subject_code,
813 NULL,
814 sub_result,
815 NULL,
816 NULL,
817 vtac_subject_type,
818 NULL,
819 v_message_name) = FALSE
820 THEN
821 G_message_str :=FND_MESSAGE.GET_STRING('IGS',v_message_name);
822 FND_FILE.PUT_LINE( FND_FILE.LOG,RTRIM(G_message_str) ||' '||G_current_person_id
823 ||' '||vtac_state_name||' '||vtac_subject_code);
824 END IF;
825 ELSE
826 G_message_str := FND_MESSAGE.GET_STRING('IGS','IGS_GE_DUPLICATE_VALUE')||'-'
827 ||IGS_GE_NUMBER.TO_CANN(sub_result_yr) ;
828 FND_FILE.PUT_LINE( FND_FILE.LOG,RTRIM(G_message_str) ||'-'||G_current_person_id
829 ||'-'||vtac_state_name||'-'||vtac_subject_code);
830
831 END IF; -- End of if c_dup_chk%NOTFOUND
832
833 CLOSE c_dup_chk;
834
835 <<sec_edu_loop>>
836 k := k + 1;
837 END LOOP; -- End sec_edu_loop while loop
838
839 END IF; -- End of if study_cnt
840
841 END IF; --End of vtac result year not null
842
843 END IF; -- End of if G_aus_edu
844
845 EXCEPTION
846
847 WHEN OTHERS THEN
848 RAISE;
849
850 END admp_vtac_load_sec_edu; --End of Load sec edu details
851
852 --Load tert edu details
853
854 PROCEDURE admp_vtac_load_tert_edu IS
855
856 --Post Secondary levels qualifications Australia
857
858 vtac_post_sec_started VARCHAR2(4);
859 vtac_post_sec_completed VARCHAR2(4);
860 vtac_post_sec_level VARCHAR2(2);
861 vtac_post_sec_inst_code VARCHAR2(4);
862 vtac_post_sec_inst_name VARCHAR2(12);
863 vtac_post_sec_student_id VARCHAR2(10);
864 vtac_post_sec_compl VARCHAR2(1);
865 vtac_post_sec_gpa VARCHAR2(3);
866
867
868 --Post Secondary levels qualifications Overseas
869
870 vtac_post_sec_syear_ov VARCHAR2(4);
871 vtac_post_sec_cyear_ov VARCHAR2(4);
872 vtac_post_sec_inst_ov VARCHAR2(17);
873 vtac_post_sec_cntry_ov VARCHAR2(12);
874 vtac_post_sec_level_ov VARCHAR2(2);
875 vtac_post_sec_ccode_ov VARCHAR2(1);
876
877
878 institution_cd VARCHAR2(80);
879 notes VARCHAR2(80);
880
881 start_yr NUMBER(4);
882 end_yr NUMBER(4);
883 gpa NUMBER(3,2);
884
885 v_message_name VARCHAR2(30);
886 v_inserted_ind VARCHAR2(1);
887 message_str VARCHAR2(2000);
888
889 TYPE post_sec_str_table IS TABLE OF VARCHAR2(50)
890 INDEX BY BINARY_INTEGER;
891 po_sec_str post_sec_str_table;
892
893 TYPE po_sec_ov_str_table IS TABLE OF VARCHAR2(50)
894 INDEX BY BINARY_INTEGER;
895 po_sec_ov_str po_sec_ov_str_table;
896
897 j BINARY_INTEGER := 1;
898 i NUMBER := 728;
899 k NUMBER := 1;
900
901
902 BEGIN
903
904 --Transfer the course post secondary level qualification data from the VTAC file to
905 --the PL/SQL table of strings
906
907 WHILE i < 888
908 LOOP
909 po_sec_str(j) := RTRIM(SUBSTR(G_vtac_output_buffer,i,40));
910 i := i + 40;
911 j := j + 1;
912 END LOOP;
913
914
915 --Loop through the Post secondary level qualification in Australia
916
917
918 WHILE k <= 4
919 LOOP
920 vtac_post_sec_compl := RTRIM(SUBSTR(po_sec_str(k),37,1));
921
922 IF nvl(vtac_post_sec_compl,' ') = ' ' THEN
923 --Do not process the record, got to end of the loop
924 GOTO po_sec_loop;
925 END IF;
926
927
928 --Do Y2K stuff for start and end years
929
930 vtac_post_sec_started := RTRIM(SUBSTR(po_sec_str(k),1,4));
931 vtac_post_sec_completed := RTRIM(SUBSTR(po_sec_str(k),5,4));
932
933 start_yr := IGS_GE_NUMBER.TO_NUM(vtac_post_sec_started);
934 end_yr := IGS_GE_NUMBER.TO_NUM(vtac_post_sec_completed);
935
936 IF start_yr > 50 THEN
937 start_yr := start_yr + 1900;
938 ELSE
939 start_yr := start_yr + 2000;
940 END IF;
941
942 IF end_yr > 50 THEN
943 end_yr := end_yr + 1900;
944 ELSE
945 end_yr := end_yr + 2000;
946 END IF;
947
948 -- Get the GPA in a format we can use. It needs 2 decimal places
949
950 vtac_post_sec_gpa := RTRIM(SUBSTR(po_sec_str(k),38,3));
951 gpa := IGS_GE_NUMBER.TO_NUM(vtac_post_sec_gpa)/100;
952
953 vtac_post_sec_student_id := RTRIM(SUBSTR(po_sec_str(k),27,10));
954 vtac_post_sec_inst_code := RTRIM(SUBSTR(po_sec_str(k),11,4));
955 vtac_post_sec_inst_name := RTRIM(SUBSTR(po_sec_str(k),15,12));
956
957 G_ret_val := 0;
958 -- Insert a tertiary education record
959 IF IGS_AD_PRC_TAC_OFFER.ADMP_INS_TERT_EDU(
960 G_current_person_id,
961 'N',
962 vtac_post_sec_compl,
963 start_yr,
964 vtac_post_sec_inst_code,
965 end_yr,
966 gpa,
967 NULL,
968 NULL,
969 vtac_post_sec_inst_name,
970 NULL,
971 vtac_post_sec_student_id,
972 NULL,
973 NULL,
974 NULL,
975 NULL,
976 NULL,
977 NULL,
978 NULL,
979 NULL,
980 NULL,
981 NULL,
982 v_message_name,
983 v_inserted_ind) = FALSE THEN
984
985 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
986 FND_FILE.PUT_LINE( FND_FILE.LOG,G_current_person_id||' '||RTRIM(G_message_str));
987 END IF;
988
989 << po_sec_loop >>
990 k := k + 1;
991 END LOOP; --End po_sec_loop while loop
992
993
994
995 --Transfer the course post secondary level qualification Overseas data from the
996 --VTAC file to the PL/SQL table of strings
997
998 i := 888;
999 j := 1;
1000 k := 1;
1001 WHILE i < 1048
1002 LOOP
1003 po_sec_ov_str(j) := RTRIM(SUBSTR(G_vtac_output_buffer,i,40));
1004 i := i + 40;
1005 j := j + 1;
1006 END LOOP;
1007
1008
1009
1010 -- Loop through the Post Secondary level qualification Overseas
1011
1012
1013
1014 WHILE k <= 4
1015 LOOP
1016 -- Find the level of completion
1017 vtac_post_sec_ccode_ov := RTRIM(SUBSTR(po_sec_ov_str(k),40,1));
1018
1019 IF nvl(vtac_post_sec_ccode_ov,' ') = ' ' THEN
1020 --Do not process the current record, go to end of the loop
1021 GOTO po_sec_ov_loop;
1022 END IF;
1023
1024
1025 --Do Y2K stuff for start and end years
1026
1027 vtac_post_sec_syear_ov := RTRIM(SUBSTR(po_sec_ov_str(k),1,4));
1028 vtac_post_sec_cyear_ov := RTRIM(SUBSTR(po_sec_ov_str(k),5,4));
1029
1030 start_yr := IGS_GE_NUMBER.TO_NUM(vtac_post_sec_syear_ov);
1031 end_yr := IGS_GE_NUMBER.TO_NUM(vtac_post_sec_cyear_ov);
1032
1033 IF start_yr > 50 THEN
1034 start_yr := start_yr + 1900;
1035 ELSE
1036 start_yr := start_yr + 2000;
1037 END IF;
1038
1039 IF end_yr > 50 THEN
1040 end_yr := end_yr + 1900;
1041 ELSE
1042 end_yr := end_yr + 2000;
1043 END IF;
1044
1045 --We can't insert the overseas institution codes so we will
1046 --store the institution and the country in the notes field.
1047 --This should provide some extra info for the users.USES_ASE_FK
1048
1049 vtac_post_sec_inst_ov := RTRIM(SUBSTR(po_sec_ov_str(k),9,17));
1050 vtac_post_sec_cntry_ov := RTRIM(SUBSTR(po_sec_ov_str(k),26,12));
1051 notes := vtac_post_sec_inst_ov||' , '||vtac_post_sec_cntry_ov;
1052
1053
1054 G_ret_val := 0;
1055 -- Insert a tertiary education record
1056 IF (IGS_AD_PRC_TAC_OFFER.ADMP_INS_TERT_EDU(
1057 G_current_person_id,
1058 'N',
1059 vtac_post_sec_ccode_ov,
1060 start_yr,
1061 NULL,
1062 end_yr,
1063 NULL,
1064 NULL,
1065 NULL,
1066 notes,
1067 NULL,
1068 NULL,
1069 NULL,
1070 NULL,
1071 NULL,
1072 NULL,
1073 NULL,
1074 NULL,
1075 NULL,
1076 NULL,
1077 NULL,
1078 NULL,
1079 v_message_name,
1080 v_inserted_ind) = FALSE) THEN
1081
1082 G_message_str := FND_MESSAGE.GET_STRING('IGS',v_message_name);
1083 FND_FILE.PUT_LINE( FND_FILE.LOG,G_current_person_id||' '||RTRIM(G_message_str));
1084
1085 END IF;
1086 <<po_sec_ov_loop>>
1087 k := k + 1;
1088 END LOOP; --End of po_sec_ov_loop while loop
1089
1090 EXCEPTION
1091
1092 WHEN OTHERS THEN
1093 RAISE;
1094 END admp_vtac_load_tert_edu; -- End of Load ter edu details
1095
1096
1097 END IGS_AD_GRD_DATA_LOAD;