1 PACKAGE BODY igs_ad_gen_004 AS
2 /* $Header: IGSAD04B.pls 115.21 2003/12/05 11:11:53 rboddu ship $ */
3
4 /*
5 who when what
6 sarakshi 06-May-2003 Enh#2858431,modified admp_get_cricos_cd replaced system reference code of CRICOS to OTHER
7 */
8 PROCEDURE Admp_Get_Apcs_Val(
9 p_admission_cat IN VARCHAR2 ,
10 p_s_admission_process_type IN VARCHAR2 ,
11 p_apcs_pref_limit_ind OUT NOCOPY VARCHAR2 ,
12 p_apcs_app_fee_ind OUT NOCOPY VARCHAR2 ,
13 p_apcs_late_app_ind OUT NOCOPY VARCHAR2 ,
14 p_apcs_late_fee_ind OUT NOCOPY VARCHAR2 ,
15 p_apcs_chkpencumb_ind OUT NOCOPY VARCHAR2 ,
16 p_apcs_fee_assess_ind OUT NOCOPY VARCHAR2 ,
17 p_apcs_corcategry_ind OUT NOCOPY VARCHAR2 ,
18 p_apcs_enrcategry_ind OUT NOCOPY VARCHAR2 ,
19 p_apcs_chkcencumb_ind OUT NOCOPY VARCHAR2 ,
20 p_apcs_unit_set_ind OUT NOCOPY VARCHAR2 ,
21 p_apcs_un_crs_us_ind OUT NOCOPY VARCHAR2 ,
22 p_apcs_chkuencumb_ind OUT NOCOPY VARCHAR2 ,
23 p_apcs_unit_restr_ind OUT NOCOPY VARCHAR2 ,
24 p_apcs_unit_restriction_num OUT NOCOPY NUMBER ,
25 p_apcs_un_dob_ind OUT NOCOPY VARCHAR2 ,
26 p_apcs_un_title_ind OUT NOCOPY VARCHAR2 ,
27 p_apcs_asses_cond_ind OUT NOCOPY VARCHAR2 ,
28 p_apcs_fee_cond_ind OUT NOCOPY VARCHAR2 ,
29 p_apcs_doc_cond_ind OUT NOCOPY VARCHAR2 ,
30 p_apcs_multi_off_ind OUT NOCOPY VARCHAR2 ,
31 p_apcs_multi_off_restrict_num OUT NOCOPY NUMBER ,
32 p_apcs_set_otcome_ind OUT NOCOPY VARCHAR2 ,
33 p_apcs_override_o_ind OUT NOCOPY VARCHAR2 ,
34 p_apcs_defer_ind OUT NOCOPY VARCHAR2 ,
35 p_apcs_ack_app_ind OUT NOCOPY VARCHAR2 ,
36 p_apcs_outcome_lt_ind OUT NOCOPY VARCHAR2 ,
37 p_apcs_pre_enrol_ind OUT NOCOPY VARCHAR2 )
38 IS
39 ----------------------------------------------------------------
40 --Created by :
41 --Date created:
42 --
43 --Purpose: BUG NO :
44 --
45 --
46 --Known limitations/enhancements and/or remarks:
47 --
48 --Change History:
49 --Who When What
50 ----------------------------------------------------------------
51
52 BEGIN -- admp_get_apcs_val
53 -- Return the steps for an admission process category validation.
54 DECLARE
55 -- Retrieve the admission process category steps.
56 CURSOR c_apcs IS
57 SELECT s_admission_step_type,
58 step_type_restriction_num
59 FROM IGS_AD_PRCS_CAT_STEP
60 WHERE admission_cat = p_admission_cat AND
61 s_admission_process_type = p_s_admission_process_type AND
62 step_group_type <> 'TRACK'; --2402377
63 BEGIN
64 p_apcs_pref_limit_ind :='N';
65 p_apcs_app_fee_ind :='N';
66 p_apcs_late_app_ind :='N';
67 p_apcs_late_fee_ind :='N';
68 p_apcs_chkpencumb_ind :='N';
69 p_apcs_fee_assess_ind :='N';
70 p_apcs_corcategry_ind :='N';
71 p_apcs_enrcategry_ind :='N';
72 p_apcs_chkcencumb_ind :='N';
73 p_apcs_unit_set_ind :='N';
74 p_apcs_un_crs_us_ind :='N';
75 p_apcs_chkuencumb_ind :='N';
76 p_apcs_unit_restr_ind :='N';
77 p_apcs_unit_restriction_num := 0;
78 p_apcs_asses_cond_ind :='N';
79 p_apcs_fee_cond_ind :='N';
80 p_apcs_doc_cond_ind :='N';
81 p_apcs_multi_off_ind := 'N';
82 p_apcs_multi_off_restrict_num := 0;
83 p_apcs_set_otcome_ind :='N';
84 p_apcs_override_o_ind :='N';
85 p_apcs_defer_ind :='N';
86 p_apcs_ack_app_ind :='N';
87 p_apcs_outcome_lt_ind :='N';
88 p_apcs_pre_enrol_ind :='N';
89 p_apcs_un_dob_ind :='N';
90 p_apcs_un_title_ind :='N';
91 --Loop through each IGS_AD_PRCS_CAT_STEP record
92 FOR v_apcs_rec IN c_apcs LOOP
93 IF (v_apcs_rec.s_admission_step_type = 'PREF-LIMIT') THEN
94 p_apcs_pref_limit_ind := 'Y';
95 ELSIF (v_apcs_rec.s_admission_step_type = 'APP-FEE') THEN
96 p_apcs_app_fee_ind :='Y';
97 ELSIF (v_apcs_rec.s_admission_step_type = 'LATE-APP') THEN
98 p_apcs_late_app_ind :='Y';
99 ELSIF (v_apcs_rec.s_admission_step_type = 'LATE-FEE') THEN
100 p_apcs_late_fee_ind := 'Y';
101 ELSIF (v_apcs_rec.s_admission_step_type = 'CHKPENCUMB') THEN
102 p_apcs_chkpencumb_ind := 'Y';
103 ELSIF (v_apcs_rec.s_admission_step_type = 'FEE-ASSESS') THEN
104 p_apcs_fee_assess_ind := 'Y';
105 ELSIF (v_apcs_rec.s_admission_step_type = 'CORCATEGRY') THEN
106 p_apcs_corcategry_ind := 'Y';
107 ELSIF (v_apcs_rec.s_admission_step_type = 'ENRCATEGRY') THEN
108 p_apcs_enrcategry_ind :='Y';
109 ELSIF (v_apcs_rec.s_admission_step_type = 'CHKCENCUMB') THEN
110 p_apcs_chkcencumb_ind := 'Y';
111 ELSIF (v_apcs_rec.s_admission_step_type = 'UNIT-SET') THEN
112 p_apcs_unit_set_ind := 'Y';
113 ELSIF (v_apcs_rec.s_admission_step_type = 'UN-CRS-US') THEN
114 p_apcs_un_crs_us_ind := 'Y';
115 ELSIF (v_apcs_rec.s_admission_step_type = 'CHKUENCUMB') THEN
116 p_apcs_chkuencumb_ind := 'Y';
117 ELSIF (v_apcs_rec.s_admission_step_type = 'UNIT-RESTR') THEN
118 p_apcs_unit_restr_ind := 'Y';
119 p_apcs_unit_restriction_num := v_apcs_rec.step_type_restriction_num;
120 ELSIF (v_apcs_rec.s_admission_step_type = 'ASSES-COND') THEN
121 p_apcs_asses_cond_ind := 'Y';
122 ELSIF (v_apcs_rec.s_admission_step_type = 'FEE-COND') THEN
123 p_apcs_fee_cond_ind :='Y';
124 ELSIF (v_apcs_rec.s_admission_step_type = 'DOC-COND') THEN
125 p_apcs_doc_cond_ind :='Y';
126 ELSIF (v_apcs_rec.s_admission_step_type = 'MULTI-OFF') THEN
127 p_apcs_multi_off_ind := 'Y';
128 p_apcs_multi_off_restrict_num := v_apcs_rec.step_type_restriction_num;
129 ELSIF (v_apcs_rec.s_admission_step_type = 'SET-OTCOME') THEN
130 p_apcs_set_otcome_ind :='Y';
131 ELSIF (v_apcs_rec.s_admission_step_type = 'OVERRIDE-O') THEN
132 p_apcs_override_o_ind := 'Y';
133 ELSIF (v_apcs_rec.s_admission_step_type = 'DEFER') THEN
134 p_apcs_defer_ind := 'Y';
135 ELSIF (v_apcs_rec.s_admission_step_type = 'ACK-APP') THEN
136 p_apcs_ack_app_ind := 'Y';
137 ELSIF (v_apcs_rec.s_admission_step_type = 'OUTCOME-LT') THEN
138 p_apcs_outcome_lt_ind := 'Y';
139 ELSIF (v_apcs_rec.s_admission_step_type = 'PRE-ENROL') THEN
140 p_apcs_pre_enrol_ind := 'Y';
141 ELSIF (v_apcs_rec.s_admission_step_type = 'UN-DOB') THEN
142 p_apcs_un_dob_ind := 'Y';
143 ELSIF (v_apcs_rec.s_admission_step_type = 'UN-TITLE') THEN
144 p_apcs_un_title_ind :='Y';
145 END IF;
146 END LOOP;
147 END;
148 EXCEPTION
149 WHEN OTHERS THEN
150 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
151 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_apcs_val');
152 IGS_GE_MSG_STACK.ADD;
153 App_Exception.Raise_Exception;
154 END admp_get_apcs_val;
155
156 FUNCTION Admp_Get_Archive_Ind(
157 p_person_id IN NUMBER )
158 RETURN VARCHAR2 IS
159 BEGIN -- admp_get_archive_ind
160 -- Determine whether or not a person is archived
161 DECLARE
162 CURSOR c_pe(
163 cp_person_id IGS_PE_PERSON.person_id%TYPE) IS
164 SELECT pd.archive_dt
165 FROM igs_pe_hz_parties pd
166 WHERE pd.party_id = cp_person_id ;
167
168 cst_yes CONSTANT CHAR := 'Y';
169 cst_no CONSTANT CHAR := 'N';
170 v_pe_rec c_pe%ROWTYPE;
171 BEGIN
172 OPEN c_pe(
173 p_person_id);
174 FETCH c_pe INTO v_pe_rec;
175 IF c_pe%NOTFOUND THEN
176 CLOSE c_pe;
177 RETURN cst_no;
178 END IF;
179 CLOSE c_pe;
180 IF v_pe_rec.archive_dt IS NOT NULL THEN
181 RETURN cst_yes;
182 END IF;
183 RETURN cst_no;
184 END;
185 EXCEPTION
186 WHEN OTHERS THEN
187 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
188 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_archive_ind');
189 IGS_GE_MSG_STACK.ADD;
190 App_Exception.Raise_Exception;
191 END admp_get_archive_ind;
192
193 FUNCTION Admp_Get_Chg_Pref_Dt(
194 p_person_id IN NUMBER ,
195 p_admission_appl_number IN NUMBER ,
196 p_nominated_course_cd IN VARCHAR2 ,
197 p_acai_sequence_number IN NUMBER )
198 RETURN VARCHAR2 IS
199 BEGIN -- admp_get_chg_pref_dt
200 -- This module retrieves the date instance for change of preferences.
201 DECLARE
202 v_out_date DATE;
203 v_dt_alias IGS_AD_CAL_CONF.adm_appl_chng_of_pref_dt_alias%TYPE;
204 CURSOR c_sacc_dt_alias IS
205 SELECT sacc.adm_appl_chng_of_pref_dt_alias
206 FROM IGS_AD_CAL_CONF sacc
207 WHERE sacc.s_control_num = 1;
208 CURSOR c_aa_acaiv IS
209 SELECT acaiv.adm_cal_type,
210 acaiv.adm_ci_sequence_number,
211 aa.admission_cat,
212 aa.s_admission_process_type,
213 acaiv.course_cd,
214 acaiv.crv_version_number,
215 aa.acad_cal_type,
216 acaiv.location_cd,
217 acaiv.attendance_mode,
218 acaiv.attendance_type
219 FROM igs_ad_ps_appl_inst acaiv, -- Replaced IGS_AD_PS_APPL_INST_APLINST_V with IGS_AD_PS_APPL Bug: 3150054
220 igs_ad_appl aa
221 WHERE acaiv.admission_appl_number = aa.admission_appl_number AND
222 acaiv.person_id = aa.person_id AND
223 acaiv.person_id = p_person_id AND
224 acaiv.admission_appl_number = p_admission_appl_number AND
225 acaiv.nominated_course_cd = p_nominated_course_cd AND
226 acaiv.sequence_number = p_acai_sequence_number;
227 v_aa_acaiv_rec c_aa_acaiv%ROWTYPE;
228 BEGIN
229 OPEN c_sacc_dt_alias;
230 FETCH c_sacc_dt_alias INTO v_dt_alias;
231 CLOSE c_sacc_dt_alias;
232 OPEN c_aa_acaiv;
233 FETCH c_aa_acaiv INTO v_aa_acaiv_rec;
234 CLOSE c_aa_acaiv;
235 v_out_date := IGS_AD_GEN_003.admp_get_adm_perd_dt(
236 v_dt_alias,
237 v_aa_acaiv_rec.adm_cal_type,
238 v_aa_acaiv_rec.adm_ci_sequence_number,
239 v_aa_acaiv_rec.admission_cat,
240 v_aa_acaiv_rec.s_admission_process_type,
241 v_aa_acaiv_rec.course_cd,
242 v_aa_acaiv_rec.crv_version_number,
243 v_aa_acaiv_rec.acad_cal_type,
244 v_aa_acaiv_rec.location_cd,
245 v_aa_acaiv_rec.attendance_mode,
246 v_aa_acaiv_rec.attendance_type);
247 IF v_out_date IS NOT NULL THEN
248 RETURN IGS_GE_DATE.IGSCHAR(v_out_date); -- IGS_GE_DATE.IGSCHAR(v_out_date, 'DD/MM/YYYY');
249 ELSE
250 RETURN NULL;
251 END IF;
252 EXCEPTION
253 WHEN OTHERS THEN
254 IF c_sacc_dt_alias%ISOPEN THEN
255 CLOSE c_sacc_dt_alias;
256 END IF;
257 IF c_aa_acaiv%ISOPEN THEN
258 CLOSE c_aa_acaiv;
259 END IF;
260 App_Exception.Raise_Exception;
261 END;
262 EXCEPTION
263 WHEN OTHERS THEN
264 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
265 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_chg_pref_dt');
266 IGS_GE_MSG_STACK.ADD;
267 App_Exception.Raise_Exception;
268 END admp_get_chg_pref_dt;
269
270 FUNCTION Admp_Get_Comm_Perd(
271 p_person_id IN NUMBER ,
272 p_admission_appl_number IN NUMBER ,
273 p_nominated_course_cd IN VARCHAR2 ,
274 p_acai_sequence_number IN NUMBER )
275 RETURN VARCHAR2 IS
276 BEGIN -- admp_get_comm_perd
277 -- This module retrieves the commencement period
278 DECLARE
279 v_commencement_period IGS_AD_PS_APPL_INST_APLSUMR_V.commencement_period%TYPE;
280 CURSOR c_aasv IS --modified the cursor to use base tables instead of IGS_AD_PS_APPL_INST_APLSUMR_V. Bug: 3150054
281 SELECT SUBSTR(IGS_AD_GEN_002.admp_get_acai_acadcd(
282 aav.person_id,
283 aav.admission_appl_number,
284 aav.acad_cal_type,
285 NVL(acai.adm_cal_type, aav.adm_cal_type),
286 NVL(acai.adm_ci_sequence_number, aav.adm_ci_sequence_number)),1,10) || '/' || ci.alternate_code commencement_period
287 FROM igs_ad_ps_appl_inst acai,
288 igs_ad_appl aav,
289 igs_ca_inst ci
290 WHERE aav.person_id = acai.person_id AND
291 aav.admission_appl_number = acai.admission_appl_number AND
292 ci.cal_type = NVL(acai.adm_cal_type, aav.adm_cal_type) AND
293 ci.sequence_number = NVL(acai.adm_ci_sequence_number,aav.adm_ci_sequence_number) AND
294 acai.person_id = p_person_id AND
295 acai.admission_appl_number = p_admission_appl_number AND
296 acai.nominated_course_cd = p_nominated_course_cd AND
297 acai.sequence_number = p_acai_sequence_number;
298 BEGIN
299 OPEN c_aasv;
300 FETCH c_aasv INTO v_commencement_period;
301 IF (c_aasv%NOTFOUND) THEN
302 CLOSE c_aasv;
303 RETURN NULL;
304 END IF;
305 CLOSE c_aasv;
306 RETURN v_commencement_period;
307 EXCEPTION
308 WHEN OTHERS THEN
309 IF (c_aasv%ISOPEN) THEN
310 CLOSE c_aasv;
311 END IF;
312 App_Exception.Raise_Exception;
313 END;
314 EXCEPTION
315 WHEN OTHERS THEN
316 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
317 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_comm_perd');
318 IGS_GE_MSG_STACK.ADD;
319 App_Exception.Raise_Exception;
320 END admp_get_comm_perd;
321
322 FUNCTION Admp_Get_Course_Det(
323 p_person_id IN NUMBER ,
324 p_admission_appl_number IN NUMBER ,
325 p_s_letter_parameter_type IN VARCHAR2 ,
326 p_record_number IN NUMBER ,
327 p_extra_context OUT NOCOPY VARCHAR2 )
328 RETURN VARCHAR2 IS
329 BEGIN -- admp_get_course_det
330 -- This module retrieves course details from IGS_AD_PS_APPL_INST
331 -- for use on letters.
332 DECLARE
333 v_out_string VARCHAR2(106) DEFAULT NULL;
334 v_alt_acad_cal IGS_CA_INST.alternate_code%TYPE;
335 CURSOR c_cv_acaiv IS
336 SELECT acaiv.preference_number,
337 acaiv.course_cd,
338 cv.short_title,
339 cv.title,
340 acaiv.location_cd,
341 acaiv.attendance_mode,
342 acaiv.attendance_type,
343 aav.acad_cal_type,
344 aav.acad_ci_sequence_number,
345 acaiv.sequence_number,
346 ci1.alternate_code || '/' || ci2.alternate_code commencement_period
347 FROM igs_ad_ps_appl_inst acaiv, -- Replaced IGS_AD_APPL_ADMAPPL_V with igs_ad_appl_inst Bug: 3150054
348 igs_ad_appl aav,
349 igs_ca_inst ci1,
350 igs_ca_inst ci2,
351 igs_ps_ver cv
352 WHERE acaiv.crv_version_number = cv.version_number AND
353 acaiv.course_cd = cv.course_cd AND
354 acaiv.person_id = p_person_id AND
355 acaiv.admission_appl_number = p_admission_appl_number AND
356 aav.person_id = acaiv.person_id AND
357 aav.admission_appl_number = acaiv.admission_appl_number AND
358 ci1.cal_type = aav.acad_cal_type AND
359 ci1.sequence_number = aav.acad_ci_sequence_number AND
360 ci2.cal_type = NVL(acaiv.adm_cal_type, aav.adm_cal_type) AND
361 ci2.sequence_number = NVL(acaiv.adm_cal_type, aav.adm_ci_sequence_number)
362 ORDER BY acaiv.preference_number,
363 acaiv.course_cd;
364 BEGIN
365 -- Set default value
366 p_extra_context := NULL;
367 FOR v_cv_acaiv_rec IN c_cv_acaiv LOOP
368 IF c_cv_acaiv%ROWCOUNT = p_record_number THEN
369 -- create output return string and create p_extra_context string
370 IF p_s_letter_parameter_type = 'ADM_COURSE' THEN
371 IF v_cv_acaiv_rec.preference_number IS NULL THEN
372 v_out_string :=
373 RPAD(NVL(v_cv_acaiv_rec.course_cd, '-'),10) || ' ' ||
374 RPAD(NVL(v_cv_acaiv_rec.short_title, '-'),40) || ' ' ||
375 RPAD(NVL(v_cv_acaiv_rec.location_cd, '-'),10) || ' ' ||
376 RPAD(NVL(v_cv_acaiv_rec.attendance_mode, '-'),2) || ' ' ||
377 RPAD(NVL(v_cv_acaiv_rec.attendance_type, '-'),2) || ' ' ||
378 NVL(v_cv_acaiv_rec.commencement_period, '-');
379 ELSE
380 v_out_string :=
381 RPAD(NVL(IGS_GE_NUMBER.TO_CANN(v_cv_acaiv_rec.preference_number),'-'),2) || ' ' ||
382 RPAD(NVL(v_cv_acaiv_rec.course_cd, '-'),10) || ' ' ||
383 RPAD(NVL(v_cv_acaiv_rec.short_title, '-'),40) || ' ' ||
384 RPAD(NVL(v_cv_acaiv_rec.location_cd, '-'),10) || ' ' ||
385 RPAD(NVL(v_cv_acaiv_rec.attendance_mode, '-'),2) || ' ' ||
386 RPAD(NVL(v_cv_acaiv_rec.attendance_type, '-'),2) || ' ' ||
387 NVL(v_cv_acaiv_rec.commencement_period, '-');
388 END IF;
389 ELSIF p_s_letter_parameter_type = 'ADM_CRS_CD' THEN
390 v_out_string := NVL(v_cv_acaiv_rec.course_cd, '-');
391 ELSE
392 v_out_string := INITCAP(NVL(v_cv_acaiv_rec.title, '-'));
393 END IF;
394 p_extra_context := v_cv_acaiv_rec.course_cd || '|' ||
395 v_cv_acaiv_rec.sequence_number;
396 END IF;
397 END LOOP;
398 RETURN v_out_string;
399 EXCEPTION
400 WHEN OTHERS THEN
401 IF c_cv_acaiv%ISOPEN THEN
402 CLOSE c_cv_acaiv;
403 END IF;
404 App_Exception.Raise_Exception;
405 END;
406 EXCEPTION
407 WHEN OTHERS THEN
408 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
409 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_course_det');
410 IGS_GE_MSG_STACK.ADD;
411 App_Exception.Raise_Exception;
412 END admp_get_course_det;
413
414 FUNCTION Admp_Get_Cricos_Cd(
415 p_person_id IN NUMBER ,
416 p_admission_appl_number IN NUMBER ,
417 p_nominated_course_cd IN VARCHAR2 ,
418 p_acai_sequence_number IN NUMBER )
419 RETURN VARCHAR2 IS
420 BEGIN
421 DECLARE
422 v_course_cd IGS_AD_PS_APPL_INST.course_cd%TYPE;
423 v_crv_version_number IGS_AD_PS_APPL_INST.crv_version_number%TYPE;
424 v_reference_cd IGS_PS_REF_CD.reference_cd%TYPE;
425 CURSOR c_acai IS
426 SELECT acai.course_cd,
427 acai.crv_version_number
428 FROM IGS_AD_PS_APPL_INST acai
429 WHERE acai.person_id = p_person_id AND
430 acai.admission_appl_number = p_admission_appl_number AND
431 acai.nominated_course_cd = p_nominated_course_cd AND
432 acai.sequence_number = p_acai_sequence_number;
433 CURSOR c_crc_rct (
434 cp_course_cd IGS_AD_PS_APPL_INST.course_cd%TYPE,
435 cp_crv_version_number IGS_AD_PS_APPL_INST.crv_version_number%TYPE) IS
436 SELECT crc.reference_cd
437 FROM IGS_PS_REF_CD crc,
438 IGS_GE_REF_CD_TYPE rct
439 WHERE rct.s_reference_cd_type = 'OTHER' AND
440 crc.reference_cd_type = rct.reference_cd_type AND
441 crc.course_cd = cp_course_cd AND
442 crc.version_number = cp_crv_version_number;
443 BEGIN
444 IF (p_person_id IS NULL OR
445 p_admission_appl_number IS NULL OR
446 p_nominated_course_cd IS NULL OR
447 p_acai_sequence_number IS NULL) THEN
448 RETURN NULL;
449 END IF;
450 OPEN c_acai;
451 FETCH c_acai INTO v_course_cd,
452 v_crv_version_number;
453 IF (c_acai%NOTFOUND) THEN
454 CLOSE c_acai;
455 RETURN NULL;
456 ELSE
457 CLOSE c_acai;
458 OPEN c_crc_rct (
459 v_course_cd,
460 v_crv_version_number);
461 FETCH c_crc_rct INTO v_reference_cd;
462 CLOSE c_crc_rct;
463 RETURN v_reference_cd;
464 END IF;
465 EXCEPTION
466 WHEN OTHERS THEN
467 IF (c_acai%ISOPEN) THEN
468 CLOSE c_acai;
469 END IF;
470 IF (c_crc_rct%ISOPEN) THEN
471 CLOSE c_crc_rct;
472 END IF;
473 App_Exception.Raise_Exception;
474 END;
475 EXCEPTION
476 WHEN OTHERS THEN
477 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
478 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_cricos_cd');
479 IGS_GE_MSG_STACK.ADD;
480 App_Exception.Raise_Exception;
481 END admp_get_cricos_cd;
482
483 PROCEDURE Admp_Get_Crs_Exists(
484 p_person_id IN NUMBER ,
485 p_admission_appl_number IN NUMBER ,
486 p_nominated_course_cd IN VARCHAR2 ,
487 p_acai_sequence_number IN NUMBER ,
488 p_course_cd IN VARCHAR2 ,
489 p_effective_dt IN DATE ,
490 p_s_admission_process_type IN VARCHAR2 ,
491 p_check_referee IN BOOLEAN ,
492 p_check_scholarship IN BOOLEAN ,
493 p_check_lang_prof IN BOOLEAN ,
494 p_check_interview IN BOOLEAN ,
495 p_check_exchange IN BOOLEAN ,
496 p_check_adm_test IN BOOLEAN ,
497 p_check_research IN BOOLEAN ,
498 p_referee_exists OUT NOCOPY BOOLEAN ,
499 p_scholarship_exists OUT NOCOPY BOOLEAN ,
500 p_lang_prof_exists OUT NOCOPY BOOLEAN ,
501 p_interview_exists OUT NOCOPY BOOLEAN ,
502 p_exchange_exists OUT NOCOPY BOOLEAN ,
503 p_adm_test_exists OUT NOCOPY BOOLEAN ,
504 p_research_exists OUT NOCOPY BOOLEAN ,
505 p_error_message_research OUT NOCOPY VARCHAR2)
506
507 IS
508 /******************************************************************
509 Created By:
510 Date Created By:
511 Purpose:
512 Known limitations,enhancements,remarks:
513 Change History
514 Who When What
515 rrengara 2-APR-2002 Added parameter P_error_message_research in procedure for the bug 2285677
516 hreddych 6-jan-2003 Remove cursor check for ADM TEST and
517 return FALSE for it # 2737932
518 *****************************************************************************************************/
519
520 BEGIN -- admp_get_crs_exists
521 -- Return output parameters indicating whether or not data exists
522 -- on course level detail tables for the specified person id.
523 DECLARE
524 cst_readmit CONSTANT VARCHAR2(10) := 'RE-ADMIT';
525 v_check VARCHAR2(1);
526 v_message_name VARCHAR2(30) default null;
527 v_out_admission_appl_number IGS_AD_PS_APPL.admission_appl_number%TYPE;
528 v_out_nominated_course_cd IGS_AD_PS_APPL.nominated_course_cd%TYPE;
529 v_out_acai_sequence_number IGS_AD_PS_APPL_INST.sequence_number%TYPE;
530 v_admission_appl_number IGS_AD_PS_APPL.admission_appl_number%TYPE;
531 v_nominated_course_cd IGS_AD_PS_APPL.nominated_course_cd%TYPE;
532 v_acai_sequence_number IGS_AD_PS_APPL_INST.sequence_number%TYPE;
533 v_parent VARCHAR2(5);
534 BEGIN -- Initialise output parameters
535 p_referee_exists := FALSE;
536 p_scholarship_exists := FALSE;
537 p_lang_prof_exists := FALSE;
538 p_interview_exists := FALSE;
539 p_exchange_exists := FALSE;
540 p_adm_test_exists := FALSE;
541 p_research_exists := FALSE;
542
543 IF p_check_research = TRUE THEN
544 IF p_s_admission_process_type = cst_readmit THEN
545 --Determine the admission course application instance.
546 IGS_RE_GEN_002.resp_get_sca_ca_acai (
547 p_person_id,
548 p_course_cd,
549 p_admission_appl_number,
550 p_nominated_course_cd,
551 p_acai_sequence_number,
552 v_out_admission_appl_number,
553 v_out_nominated_course_cd,
554 v_out_acai_sequence_number);
555 IF v_out_admission_appl_number IS NULL THEN
556 v_parent := 'SCA';
557 ELSE
558 v_parent := 'ACAI';
559 END IF;
560 v_admission_appl_number := v_out_admission_appl_number;
561 v_nominated_course_cd := v_out_nominated_course_cd;
562 v_acai_sequence_number := v_out_acai_sequence_number;
563 ELSE
564 v_parent := 'ACAI';
565 v_admission_appl_number := p_admission_appl_number;
566 v_nominated_course_cd := p_nominated_course_cd;
567 v_acai_sequence_number := p_acai_sequence_number;
568 END IF;
569 -- Check for existence of research details.
570 /*
571 || Bug ID 1956374 - Removal of Duplicate Program Units from OSS.
572 || Changed the reference of "IGS_AD_VAL_ACAI.RESP_VAL_CA_DTL_COMP" to program unit "IGS_EN_VAL_SCA.RESP_VAL_CA_DTL_COMP". -- kdande
573 */
574 IF IGS_EN_VAL_SCA.resp_val_ca_dtl_comp (
575 p_person_id,
576 p_course_cd,
577 v_admission_appl_number,
578 v_nominated_course_cd,
579 v_acai_sequence_number,
580 v_parent,
581 v_message_name) = TRUE THEN
582 p_research_exists := TRUE;
583 -- Added else part for the bug 2285677 by rrengara on 2-APR-2002
584 -- Previously the message was not propagating to the calling procedure
585 -- if the api fails.
586 ELSE
587 p_error_message_research := v_message_name;
588 END IF;
589 END IF;
590 EXCEPTION
591 WHEN OTHERS THEN
592 App_Exception.Raise_Exception;
593 END;
594 EXCEPTION
595 WHEN OTHERS THEN
596 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
597 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_crs_exists');
598 IGS_GE_MSG_STACK.ADD;
599 App_Exception.Raise_Exception;
600 END admp_get_crs_exists;
601
602 PROCEDURE Admp_Get_Crv_Comp_Dt(
603 p_course_cd IN VARCHAR2 ,
604 p_crv_version_number IN NUMBER ,
605 p_cal_type IN VARCHAR2 ,
606 p_attendance_type IN VARCHAR2 ,
607 p_start_dt IN DATE ,
608 p_expected_completion_yr IN OUT NOCOPY NUMBER ,
609 p_expected_completion_perd IN OUT NOCOPY VARCHAR2 ,
610 p_completion_dt OUT NOCOPY DATE,
611 p_attendance_mode IN VARCHAR2 ,
612 p_location_cd IN VARCHAR2)
613 ----------------------------------------------------------------
614 --Created by :
615 --Date created:
616 --
617 --Purpose: BUG NO :
618 --
619 --
620 --Known limitations/enhancements and/or remarks:
621 --
622 --Change History:
623 --Who When What
624 --rboddu 29-OCT-2002 Calculating the Program Completion details based on
625 -- the Program Length and Program Length Measurement present
626 -- in the Program Offering Option record. Removed the code
627 -- related to the Standard Full time or Standard Part time
628 -- Completion. Enh bug : 2647482
629 ----------------------------------------------------------------
630 IS
631 BEGIN --admp_get_crv_comp_dt
632 --Routine to return the course version expected completion date.
633 --This can be determined from a start date or expected completeion details
634 DECLARE
635 v_cal_type IGS_PS_OFR.cal_type%TYPE;
636 v_att_gat IGS_EN_ATD_TYPE.govt_attendance_type%TYPE;
637 v_comp_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_e_comp_perd_dt_alias%TYPE;
638 v_completion_time IGS_PS_VER.std_ft_completion_time%TYPE;
639 v_completion_months IGS_PS_VER.std_ft_completion_time%TYPE;
640 v_completion_dt DATE;
641 v_start_dt_yyyy VARCHAR2(4);
642 v_completion_dt_yyyy VARCHAR2(4);
643 v_context_completion_dt DATE;
644 v_dai2_alias_val_dd_mon VARCHAR2(7);
645 v_dai2_alias_val_yyyy VARCHAR2(4);
646 v_dai2_alias_val IGS_CA_DA_INST_V.alias_val%TYPE;
647 v_dai2_dt_alias IGS_CA_DA_INST_V.dt_alias%TYPE;
648 v_dai IGS_CA_DA_INST_V.alias_val%TYPE;
649 v_adm_e_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_e_comp_perd_dt_alias%TYPE;
650 v_adm_m_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_m_comp_perd_dt_alias%TYPE;
651 v_adm_s_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_s_comp_perd_dt_alias%TYPE;
652 v_rec_cnt NUMBER;
653 v_completion_days NUMBER;
654 CURSOR c_co IS
655 SELECT co.cal_type
656 FROM IGS_PS_OFR co
657 WHERE co.course_cd = p_course_cd AND
658 co.version_number = p_crv_version_number;
659 CURSOR c_sacco IS
660 SELECT adm_appl_e_comp_perd_dt_alias,
661 adm_appl_m_comp_perd_dt_alias,
662 adm_appl_s_comp_perd_dt_alias
663 FROM IGS_AD_CAL_CONF sacco
664 WHERE s_control_num = 1;
665
666 --Following cursor is modified as part of bug 2715535, to pick up alias values which are greater than
667 --the Context Completion Date such that the Year part of it is greater than or equal to Expected Completion Year.
668 CURSOR c_dai IS
669 SELECT dai.alias_val
670 FROM IGS_CA_DA_INST_V dai
671 WHERE dt_alias = v_comp_perd_dt_alias AND
672 cal_type = v_cal_type AND
673 NVL(alias_val, IGS_GE_DATE.IGSDATE('1900/01/01')) >= v_context_completion_dt AND
674 SUBSTR(IGS_GE_DATE.IGSCHAR(alias_val),1,4) >= p_expected_completion_yr
675 ORDER BY alias_val; -- Order is changed to Ascending. Bug :2647482
676
677 CURSOR c_dai2 (
678 cp_adm_e_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_e_comp_perd_dt_alias%TYPE,
679 cp_adm_m_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_m_comp_perd_dt_alias%TYPE,
680 cp_adm_s_perd_dt_alias IGS_AD_CAL_CONF.adm_appl_s_comp_perd_dt_alias%TYPE) IS
681 SELECT alias_val,
682 dt_alias
683 FROM IGS_CA_DA_INST_V dai
684 WHERE dt_alias IN(
685 NVL(cp_adm_e_perd_dt_alias, 'NONE'),
686 NVL(cp_adm_m_perd_dt_alias, 'NONE'),
687 NVL(cp_adm_s_perd_dt_alias, 'NONE')
688 ) AND
689 cal_type = v_cal_type AND
690 NVL(alias_val, IGS_GE_DATE.IGSDATE('1900/01/01')) >= v_context_completion_dt --Replaced '<' with '>'. Bug: 2647482
691 ORDER BY alias_val; -- Order is changed to Ascending. Bug :2647482
692
693 --Cursor to get the Program Length and Program Length Measurement for the Program Offering Option record. Bug:2647482
694 CURSOR c_get_prg_mesr_dtls(
695 cp_course_cd igs_ps_ofr_opt_all.course_cd%TYPE,
696 cp_version_number igs_ps_ofr_opt_all.version_number%TYPE,
697 cp_cal_type igs_ps_ofr_opt_all.cal_type%TYPE,
698 cp_attendance_type igs_ps_ofr_opt_all.attendance_type%TYPE,
699 cp_attendance_mode igs_ps_ofr_opt_all.attendance_mode%TYPE,
700 cp_location_cd igs_ps_ofr_opt_all.location_cd%TYPE
701 ) IS
702 SELECT program_length,
703 program_length_measurement
704 FROM igs_ps_ofr_opt_all
705 WHERE course_cd = p_course_cd AND
706 version_number = p_crv_version_number AND
707 cal_type = p_cal_type AND
708 location_cd = p_location_cd AND
709 attendance_mode = p_attendance_mode AND
710 attendance_type = p_attendance_type;
711
712 c_get_prg_mesr_dtls_rec c_get_prg_mesr_dtls%ROWTYPE;
713
714 BEGIN
715
716 --Check if there is adequate information to identify the Program Offering Option record. Enh Bug: 2647482
717 IF p_attendance_type IS NULL OR p_attendance_mode IS NULL OR p_location_cd IS NULL THEN
718 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
719 RETURN;
720 END IF;
721 --Check for adequate information to continue processing
722 IF (p_start_dt IS NULL AND
723 p_expected_completion_yr IS NULL AND
724 p_expected_completion_perd IS NULL) THEN
725 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
726 RETURN;
727 END IF;
728
729 --Check that course start date is given, calculations cannot be
730 --determined without it
731 IF (p_start_dt IS NULL) THEN
732 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
733 RETURN;
734 ELSE
735 -- Determine course start date year
736 v_start_dt_yyyy := SUBSTR(IGS_GE_DATE.IGSCHAR(p_start_dt),1,4);
737 END IF;
738
739
740 --Get academic calendar type if not specified or validate calendar type
741 -- specified
742 OPEN c_co;
743 FETCH c_co INTO v_cal_type;
744 IF (c_co%NOTFOUND) THEN
745 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
746 CLOSE c_co;
747 RETURN;
748 END IF;
749 CLOSE c_co;
750 v_rec_cnt := 0;
751
752 FOR v_co_rec IN c_co LOOP
753 IF (p_cal_type IS NULL) THEN
754 IF (v_rec_cnt = 0) THEN
755 v_cal_type := v_co_rec.cal_type;
756 ELSE
757 v_cal_type := NULL;
758 EXIT;
759 END IF;
760 ELSE
761 IF (v_co_rec.cal_type = p_cal_type) THEN
762 v_cal_type := v_co_rec.cal_type;
763 END IF;
764 END IF;
765 v_rec_cnt := v_rec_cnt + 1;
766 END LOOP;
767
768 IF ( v_cal_type IS NULL) THEN
769 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
770 RETURN;
771 END IF;
772
773 --Check for existence of completion period date alias
774 --in calendar configuration table
775 OPEN c_sacco;
776 FETCH c_sacco INTO v_adm_e_perd_dt_alias,
777 v_adm_m_perd_dt_alias,
778 v_adm_s_perd_dt_alias;
779 IF (c_sacco%NOTFOUND) THEN
780 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
781 CLOSE c_sacco;
782 RETURN;
783 END IF;
784 CLOSE c_sacco;
785
786 -- Removed the code related to the Government Attendance Type, which gives the course whether
787 -- it's FULL / PART time. Now the completion details calculation is based on Program Length and
788 -- Program Length Measurement details present at the Program Offering Option record.
789 -- The following cursor c_get_prg_mesr_dtls gets the Program length details of the Offering Option record.
790 -- Enh Bug : 2647482
791
792 OPEN c_get_prg_mesr_dtls(p_course_cd,
793 p_crv_version_number,
794 p_cal_type,
795 p_attendance_type,
796 p_attendance_mode,
797 p_location_cd
798 );
799
800 FETCH c_get_prg_mesr_dtls INTO c_get_prg_mesr_dtls_rec;
801 IF c_get_prg_mesr_dtls%NOTFOUND THEN
802 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
803 CLOSE c_get_prg_mesr_dtls;
804 RETURN;
805 END IF;
806 CLOSE c_get_prg_mesr_dtls;
807
808 -- Convert the Program Length into Days, depending on the Program Length Measurement
809 -- record for the Program Offering Option. Enh Bug: 2647482
810 IF c_get_prg_mesr_dtls_rec.program_length_measurement = 'YEAR' THEN
811 v_completion_days := c_get_prg_mesr_dtls_rec.program_length*365;
812 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = '10TH OF A YEAR' THEN
813 v_completion_days := c_get_prg_mesr_dtls_rec.program_length*36.5;
814 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = 'MONTHS' THEN
815 v_completion_days := c_get_prg_mesr_dtls_rec.program_length*30.4;
816 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = 'WEEKS' THEN
817 v_completion_days := c_get_prg_mesr_dtls_rec.program_length*7;
818 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = 'DAYS' THEN
819 v_completion_days := c_get_prg_mesr_dtls_rec.program_length;
820 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = 'HOURS' THEN
821 v_completion_days := c_get_prg_mesr_dtls_rec.program_length/24;
822 ELSIF c_get_prg_mesr_dtls_rec.program_length_measurement = 'MINUTES' THEN
823 v_completion_days := c_get_prg_mesr_dtls_rec.program_length/1440;
824 END IF;
825
826 IF v_completion_days IS NULL THEN
827 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
828 RETURN;
829 END IF;
830
831 --Add the Program Length (in Days) to the Program Start Date to get the Completion Date. Bug: 2647482
832 v_context_completion_dt := p_start_dt + ROUND(v_completion_days) -1;
833
834 -- Calculate the Completion Details for the given Expected Completion Period only if the Expected Completion Period and Completion Period Date alias are NOT NULL.
835 IF (p_expected_completion_yr IS NOT NULL AND --replaced the OR condition here with the AND and removed the following redundant validation. Bug: 2647482
836 p_expected_completion_perd IS NOT NULL) THEN
837
838 -- Determine end date, expected completion details given
839 IF (p_expected_completion_perd = 'E' AND
840 v_adm_e_perd_dt_alias IS NOT NULL) THEN
841 v_comp_perd_dt_alias := v_adm_e_perd_dt_alias;
842 ELSIF (p_expected_completion_perd = 'M' AND
843 v_adm_m_perd_dt_alias IS NOT NULL) THEN
844 v_comp_perd_dt_alias := v_adm_m_perd_dt_alias;
845 ELSIF (p_expected_completion_perd = 'S' AND
846 v_adm_s_perd_dt_alias IS NOT NULL) THEN
847 v_comp_perd_dt_alias := v_adm_s_perd_dt_alias;
848 END IF;
849
850 IF (v_comp_perd_dt_alias IS NULL) THEN
851 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
852 RETURN;
853 END IF;
854
855 -- get completion date, which is the closest date greater than the context completion date and year part is greater than
856 -- the Expected Completion Year. Bug : 2715535
857 OPEN c_dai;
858 FETCH c_dai INTO v_dai;
859 IF (c_dai%NOTFOUND) THEN
860 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
861 CLOSE c_dai;
862 RETURN;
863 END IF;
864 CLOSE c_dai;
865
866 -- Only process the first record found as it's the closest date greater than the Context Completion Date.
867 -- And also the returned alias value has the Year which is greater than or equal to the given Expected Completion Year. Bug: 2715535
868 p_completion_dt := v_dai;
869 RETURN;
870 END IF;
871
872 -- Move completion date into context of course start date
873 v_completion_dt_yyyy := SUBSTR(IGS_GE_DATE.IGSCHAR(v_completion_dt),1,4); --IGSCHAR returns date in 'YYYY/MM/DD' format
874
875 --Determine expected completion details
876 OPEN c_dai2 ( v_adm_e_perd_dt_alias,
877 v_adm_m_perd_dt_alias,
878 v_adm_s_perd_dt_alias );
879 FETCH c_dai2 INTO v_dai2_alias_val,
880 v_dai2_dt_alias;
881
882 IF (c_dai2%NOTFOUND) THEN
883 p_completion_dt := IGS_GE_DATE.IGSDATE(NULL);
884 CLOSE c_dai2;
885 RETURN;
886 END IF;
887 CLOSE c_dai2;
888
889 -- Only process the first record found because it's the nearest date greater than the Context Completion Date;
890 v_dai2_alias_val_dd_mon := SUBSTR(IGS_GE_DATE.IGSCHAR(v_dai2_alias_val),5,10); --IGSCHAR returns date in 'YYYY/MM/DD' format
891
892 v_dai2_alias_val_yyyy := SUBSTR(IGS_GE_DATE.IGSCHAR(v_dai2_alias_val),1,4); --IGSCHAR returns date in 'YYYY/MM/DD' format
893
894 p_expected_completion_yr := IGS_GE_NUMBER.TO_NUM(v_dai2_alias_val_yyyy);
895
896 p_completion_dt := IGS_GE_DATE.IGSDATE(IGS_GE_NUMBER.TO_CANN(p_expected_completion_yr)||v_dai2_alias_val_dd_mon);
897
898 --Return the Completion Period associated with the calculated Completion date alias instance.
899 IF (v_dai2_dt_alias = NVL(v_adm_e_perd_dt_alias, 'NONE')) THEN
900 p_expected_completion_perd := 'E';
901 ELSIF (v_dai2_dt_alias = NVL(v_adm_m_perd_dt_alias, 'NONE')) THEN
902 p_expected_completion_perd := 'M';
903 ELSIF (v_dai2_dt_alias = NVL(v_adm_s_perd_dt_alias, 'NONE')) THEN
904 p_expected_completion_perd := 'S';
905 END IF;
906 RETURN;
907 END;
908 EXCEPTION
909 WHEN OTHERS THEN
910 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
911 Fnd_Message.Set_Token('NAME','IGS_AD_GEN_004.admp_get_crv_comp_dt');
912 IGS_GE_MSG_STACK.ADD;
913 App_Exception.Raise_Exception;
914 END admp_get_crv_comp_dt;
915
916 END igs_ad_gen_004;