1 PACKAGE BODY IGS_AD_VAL_AA AS
2 /* $Header: IGSAD76B.pls 120.0 2005/06/01 22:17:58 appldev noship $ */
3
4 --
5 -- Validate delete of an IGS_AD_APPL record.
6 FUNCTION admp_val_aa_delete(
7 p_adm_appl_status IN VARCHAR2 ,
8 p_message_name OUT NOCOPY VARCHAR2 )
9 RETURN BOOLEAN AS
10 BEGIN -- admp_val_aa_delete
11 -- Validate delete of an IGS_AD_APPL record.
12 DECLARE
13 v_s_adm_appl_status IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
14 BEGIN
15 -- Set the default message number
16 p_message_name := null;
17 -- Get the system admission application status.
18 v_s_adm_appl_status := IGS_AD_GEN_007.ADMP_GET_SAAS(
19 p_adm_appl_status);
20 IF (v_s_adm_appl_status <> 'RECEIVED') THEN
21 p_message_name := 'IGS_AD_CANNOTDEL_ADMAPPL_PRD';
22 RETURN FALSE;
23 END IF;
24 RETURN TRUE;
25 END;
26 EXCEPTION
27 WHEN OTHERS THEN
28 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
29 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_delete');
30 IGS_GE_MSG_STACK.ADD;
31 App_Exception.Raise_Exception;
32 END admp_val_aa_delete;
33 --
34 -- Validate insert of an IGS_AD_APPL record.
35 FUNCTION admp_val_aa_insert(
36 p_person_id IN NUMBER ,
37 p_adm_cal_type IN VARCHAR2 ,
38 p_adm_ci_sequence_number IN NUMBER ,
39 p_s_admission_process_type IN VARCHAR2 ,
40 p_encmb_chk_ind IN VARCHAR2 DEFAULT 'N',
41 p_appl_dt IN DATE ,
42 p_title_required_ind IN VARCHAR2 DEFAULT 'N',
43 p_birth_dt_required_ind IN VARCHAR2 DEFAULT 'N',
44 p_message_name OUT NOCOPY VARCHAR2 ,
45 p_return_type OUT NOCOPY VARCHAR2 )
46 RETURN BOOLEAN AS
47 BEGIN
48 -- admp_val_aa_insert
49 -- Validate insert of an IGS_AD_APPL record.
50 -- * If the admission process type is short admission, the short admission
51 -- date alias for the admission period must be set.
52 -- * If the admission process type is short admission, the short admission
53 -- date must be greater than the current date.
54 -- * If encumbrance checking is applicable, warn if the person has an
55 -- encumbrance of revoke service or suspend service effective as at the
56 -- application date.
57 -- * If encumbrance checking is applicable, warn if the person has an
58 -- encumbrance of revoke service or suspend service effective as at the
59 -- encumbrance checking date.
60 -- * If the person?s title is required, warn if the persons?s title is not set.
61 -- * If the person?s birth date is required, warn if the persons?s birth date
62 -- is not set.
63 DECLARE
64 cst_error CONSTANT VARCHAR2(1) := 'E';
65 cst_warn CONSTANT VARCHAR2(1) := 'W';
66 v_person_found BOOLEAN DEFAULT FALSE;
67 v_short_adm_dt DATE;
68 v_encmb_chk_dt DATE;
69 v_effective_dt DATE;
70 v_message_name VARCHAR2(30);
71 CURSOR c_person IS
72 SELECT pb.title,
73 pb.birth_date,
74 ph.deceased_ind
75 FROM IGS_PE_PERSON_BASE_V pb, IGS_PE_HZ_PARTIES ph
76 WHERE pb.person_id = ph.party_id
77 AND pb.person_id = p_person_id;
78
79 v_person_rec c_person%ROWTYPE;
80 BEGIN
81 -- Set the default message number
82 p_message_name := null;
83 OPEN c_person;
84 FETCH c_person INTO v_person_rec;
85 IF (c_person%NOTFOUND) THEN
86 CLOSE c_person;
87 RETURN FALSE;
88 END IF;
89 CLOSE c_person;
90 -- Validate for deceased person.
91 IF (v_person_rec.deceased_ind = 'Y') THEN
92 p_message_name := 'IGS_AD_CANCREATE_ADMAPPL';
93 p_return_type := cst_error;
94 RETURN FALSE;
95 END IF;
96 -- Validate admission process type of short admission.
97 IF (p_s_admission_process_type = 'SHORT-ADM') THEN
98 -- Short admission date alias must exist for admission period and must
99 -- be greater than the current date.
100 v_short_adm_dt := IGS_AD_GEN_008.ADMP_GET_SHORT_DT (
101 p_adm_cal_type,
102 p_adm_ci_sequence_number);
103 IF (v_short_adm_dt IS NULL) THEN
104 p_message_name := 'IGS_AD_CANNOTINS_NO_SHORT_DT';
105 p_return_type := cst_error;
106 RETURN FALSE;
107 END IF;
108 IF (v_short_adm_dt > SYSDATE) THEN
109 p_message_name := 'IGS_AD_CANNOTINS_SHORT_DT';
110 p_return_type := cst_error;
111 RETURN FALSE;
112 END IF;
113 END IF;
114 -- Validate encumbrances.
115 IF (p_encmb_chk_ind = 'Y') THEN
116 --Warn if person is encumbered as at the application date.
117 IF NOT IGS_EN_VAL_ENCMB.enrp_val_excld_prsn (
118 p_person_id,
119 NULL, -- Input parameter course code: not applicable
120 p_appl_dt,
121 v_message_name) THEN
122 p_message_name := 'IGS_AD_PERSON_ENCUMB_SUSPEND';
123 p_return_type := cst_warn;
124 RETURN FALSE;
125 END IF;
126 -- Determine the effective_dt for performing the
127 -- encumbrance check.
128 v_effective_dt := IGS_AD_GEN_006.ADMP_GET_ENCMB_DT(
129 p_adm_cal_type,
130 p_adm_ci_sequence_number);
131 IF v_effective_dt IS NOT NULL THEN
132 -- Warn if IGS_PE_PERSON is encumbered as at the
133 -- encumbrance checking date.
134 IF NOT IGS_EN_VAL_ENCMB.enrp_val_excld_prsn (
135 p_person_id,
136 NULL, -- Input parameter course code: not applicable
137 v_effective_dt,
138 v_message_name) THEN
139 p_message_name := 'IGS_AD_ENCUMB_CHKING_DATE';
140 p_return_type := cst_warn;
141 RETURN FALSE;
142 END IF;
143 END IF;
144 END IF;
145 -- Validate person title.
146 IF (p_title_required_ind = 'Y') THEN
147 -- Warn if title is not set.
148 IF (v_person_rec.title IS NULL) THEN
149 p_message_name := 'IGS_AD_TITLE_TOBE_SET';
150 p_return_type := cst_warn;
151 RETURN FALSE;
152 END IF;
153 END IF;
154 -- Validate person birth date.
155 IF (p_birth_dt_required_ind = 'Y') THEN
156 -- Warn if birth date is not set.
157 IF (v_person_rec.birth_date IS NULL) THEN
158 p_message_name := 'IGS_AD_DOB_TOBE_SET';
159 p_return_type := cst_warn;
160 RETURN FALSE;
161 END IF;
162 END IF;
163 RETURN TRUE;
164 END;
165 EXCEPTION
166 WHEN OTHERS THEN
167 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
168 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_insert');
169 IGS_GE_MSG_STACK.ADD;
170 App_Exception.Raise_Exception;
171 END admp_val_aa_insert;
172 --
173 -- Validate update of an IGS_AD_APPL record.
174 FUNCTION admp_val_aa_update(
175 p_adm_appl_status IN VARCHAR2 ,
176 p_message_name OUT NOCOPY VARCHAR2 )
177 RETURN BOOLEAN AS
178 BEGIN -- admp_val_aa_update
179 -- Validate update of an IGS_AD_APPL record.
180 DECLARE
181 v_s_adm_appl_status IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
182 BEGIN
183 -- Set the default message number
184 p_message_name := null;
185 -- Get the system admission application status.
186 v_s_adm_appl_status := IGS_AD_GEN_007.ADMP_GET_SAAS(
187 p_adm_appl_status);
188 IF v_s_adm_appl_status IN ('COMPLETED', 'WITHDRAWN') THEN
189 p_message_name := 'IGS_AD_CANNOTUPD_STATUS_COMPL';
190 RETURN FALSE;
191 END IF;
192 RETURN TRUE;
193 END;
194 EXCEPTION
195 WHEN OTHERS THEN
196 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
197 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_update');
198 IGS_GE_MSG_STACK.ADD;
199 App_Exception.Raise_Exception;
200 END admp_val_aa_update;
201 --
202 -- Validate the IGS_AD_APPL.appl_dt.
203 FUNCTION admp_val_aa_appl_dt(
204 p_appl_dt IN DATE ,
205 p_message_name OUT NOCOPY VARCHAR2 )
206 RETURN BOOLEAN AS
207 BEGIN
208 -- Validate the IGS_AD_APPL.appl_dt.
209 -- Validations are -
210 -- IGS_AD_APPL.appl_dt must be less than or equal to
211 -- the current date.
212 IF (TRUNC(p_appl_dt) > TRUNC(SYSDATE)) THEN
213 p_message_name := 'IGS_AD_APPLDT_LE_CURRENT_DT';
214 RETURN FALSE;
215 END IF;
216 p_message_name := null;
217 RETURN TRUE;
218 EXCEPTION
219 WHEN OTHERS THEN
220 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
221 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_appl_dt');
222 IGS_GE_MSG_STACK.ADD;
223 App_Exception.Raise_Exception;
224 END admp_val_aa_appl_dt;
225 --
226 -- Validate the admission application academic calendar.
227 FUNCTION admp_val_aa_acad_cal(
228 p_acad_cal_type IN VARCHAR2 ,
229 p_acad_ci_sequence_number IN NUMBER ,
230 p_message_name OUT NOCOPY VARCHAR2 )
231 RETURN BOOLEAN AS
232 BEGIN -- admp_val_aa_acad_cal
233 -- Validate the admission application commencement period
234 -- (IGS_AD_APPL.acad_cal_type, IGS_AD_APPL.acad_ci_sequence_number).
235 -- Validations are -
236 -- ? IGS_AD_APPL.acad_cal_type must be an Academic calendar.
237 -- ? IGS_AD_APPL.acad_cal_type and IGS_AD_APPL.acad_ci_sequence_number
238 -- must be an Active calendar instance.
239 DECLARE
240 CURSOR c_ct (
241 cp_acad_cal_type IGS_AD_APPL.acad_cal_type%TYPE) IS
242 SELECT s_cal_cat
243 FROM IGS_CA_TYPE
244 WHERE cal_type = cp_acad_cal_type;
245 CURSOR c_ci_cs (
246 cp_acad_cal_type IGS_AD_APPL.acad_cal_type%TYPE,
247 cp_acad_ci_sequence_number IGS_AD_APPL.acad_ci_sequence_number%TYPE) IS
248 SELECT cs.s_cal_status
249 FROM IGS_CA_STAT cs,
250 IGS_CA_INST ci
251 WHERE ci.cal_type = cp_acad_cal_type AND
252 ci.sequence_number = cp_acad_ci_sequence_number AND
253 ci.cal_status = cs.cal_status;
254
255 v_ct_rec c_ct%ROWTYPE;
256 v_ci_cs_rec c_ci_cs%ROWTYPE;
257 cst_academic VARCHAR2(10) := 'ACADEMIC';
258 cst_active VARCHAR2(10) := 'ACTIVE';
259 BEGIN
260 -- Set the default message number
261 p_message_name := null;
262 -- Cursor handling
263 OPEN c_ct (p_acad_cal_type);
264 FETCH c_ct INTO v_ct_rec;
265 IF c_ct%FOUND THEN
266 CLOSE c_ct;
267 IF v_ct_rec.s_cal_cat <> cst_academic THEN
268 p_message_name := 'IGS_AD_CAT_AS_ACADEMIC';
269 RETURN FALSE;
270 END IF;
271 ELSE
272 CLOSE c_ct;
273 END IF;
274 OPEN c_ci_cs (
275 p_acad_cal_type,
276 p_acad_ci_sequence_number);
277 FETCH c_ci_cs INTO v_ci_cs_rec;
278 IF c_ci_cs%NOTFOUND THEN
279 CLOSE c_ci_cs;
280 p_message_name := 'IGS_AD_ADM_CAL_INSTNOT_DEFINE';
281 RETURN FALSE; -- Corrected, to return FALSE as part of the bug 2772337.
282 -- Removed the End_Date validation as part of bug 2974150
283 END IF;
284 CLOSE c_ci_cs;
285
286 IF v_ci_cs_rec.s_cal_status <> cst_active THEN --removed the planned status as per bug#2722785 --rghosh
287 p_message_name := 'IGS_AD_ACACAL_PLANNED_ACTIVE';
288 RETURN FALSE;
289 END IF;
290 -- Return the default value
291 RETURN TRUE;
292 END;
293 EXCEPTION
294 WHEN OTHERS THEN
295 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
296 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_acad_cal');
297 IGS_GE_MSG_STACK.ADD;
298 App_Exception.Raise_Exception;
299 END admp_val_aa_acad_cal;
300 --
301 -- Validate the admission application admission calendar.
302 FUNCTION admp_val_aa_adm_cal(
303 p_adm_cal_type IN VARCHAR2 ,
304 p_adm_ci_sequence_number IN NUMBER ,
305 p_acad_cal_type IN VARCHAR2 ,
306 p_acad_ci_sequence_number IN NUMBER ,
307 p_admission_cat IN VARCHAR2 ,
308 p_s_admission_process_type IN VARCHAR2 ,
309 p_message_name OUT NOCOPY VARCHAR2 )
310 RETURN BOOLEAN AS
311 BEGIN
312 DECLARE
313 cst_admission CONSTANT VARCHAR2(10) := 'ADMISSION';
314 cst_active CONSTANT VARCHAR2(10) := 'ACTIVE';
315 v_s_cal_cat IGS_CA_TYPE.s_cal_cat%TYPE;
316 v_dummy VARCHAR2(1);
317 CURSOR c_cal_type (
318 cp_cal_type IGS_CA_TYPE.cal_type%TYPE) IS
319 SELECT cat.s_cal_cat
320 FROM IGS_CA_TYPE cat
321 WHERE cat.cal_type = cp_cal_type;
322 --Modified the following cursor to fetch end_dt in addition with s_cal_status. Bug: 2772337
323 --Modified the following cursor not to fetch end_dt in addition with s_cal_status. Bug: 2974150
324 CURSOR c_cal_instance (
325 cp_cal_type IGS_CA_INST.cal_type%TYPE,
326 cp_sequence_number IGS_CA_INST.sequence_number%TYPE) IS
327 SELECT cs.s_cal_status
328 FROM IGS_CA_INST ci,
329 IGS_CA_STAT cs
330 WHERE ci.cal_status = cs.cal_status AND
331 ci.cal_type = cp_cal_type AND
332 ci.sequence_number = cp_sequence_number;
333 CURSOR c_cal_ins_rel (
334 cp_acad_cal_type IGS_CA_INST.cal_type%TYPE,
335 cp_acad_ci_sequence_number IGS_CA_INST.sequence_number%TYPE,
336 cp_adm_cal_type IGS_CA_INST.cal_type%TYPE,
337 cp_adm_ci_sequence_number IGS_CA_INST.sequence_number%TYPE) IS
338 SELECT 'x'
339 FROM IGS_CA_INST_REL cir
340 WHERE cir.sup_cal_type =cp_acad_cal_type AND
341 cir.sup_ci_sequence_number = cp_acad_ci_sequence_number AND
342 cir.sub_cal_type = cp_adm_cal_type AND
343 cir.sub_ci_sequence_number = cp_adm_ci_sequence_number;
344 CURSOR c_adm_perd_adm_proc_cat (
345 cp_adm_cal_type IGS_CA_INST.cal_type%TYPE,
346 cp_adm_ci_sequence_number IGS_CA_INST.sequence_number%TYPE,
347 cp_admission_cat IGS_AD_PRD_AD_PRC_CA.admission_cat%TYPE,
348 cp_s_admission_process_type
349 IGS_AD_PRD_AD_PRC_CA.s_admission_process_type%TYPE) IS
350 SELECT 'x'
351 FROM IGS_AD_PRD_AD_PRC_CA apapc
352 WHERE apapc.adm_cal_type = cp_adm_cal_type AND
353 apapc.adm_ci_sequence_number = cp_adm_ci_sequence_number AND
354 apapc.admission_cat = cp_admission_cat AND
355 apapc.s_admission_process_type = cp_s_admission_process_type AND
356 apapc.closed_ind = 'N'; --added the closed indicator for bug# 2380108 (rghosh)
357 v_s_cal_status c_cal_instance%ROWTYPE;
358 BEGIN
359 -- Validate the admission application admission calendar
360 -- (IGS_AD_APPL.adm_cal_type,
361 -- IGS_AD_APPL.adm_ci_sequence_number).
362 -- Validations are -
363 -- IGS_AD_APPL.acad_cal_type must be an Admission calendar.
364 -- IGS_AD_APPL.adm_cal_type and IGS_AD_APPL.adm_ci_sequence_number
365 -- must be
366 -- an Active calendar instance.
367 -- The Admission Calendar must be a child of the Academic Calendar.
368 -- This validation is enforced in the database via the foreign key AA_CIR_FK.
369 -- It is included in this module for Forms processing purposes only.
370 -- The Admission Calendar must be for the Admission Process Category. This
371 -- validation is enforced in the database via the foreign key AA_APAPC_FK.
372 -- It is included in this module for Forms processing purposes only.
373 p_message_name := null;
374 OPEN c_cal_type(
375 p_adm_cal_type);
376 FETCH c_cal_type INTO v_s_cal_cat;
377 IF(c_cal_type%FOUND) THEN
378 IF(v_s_cal_cat <> cst_admission) THEN
379 CLOSE c_cal_type;
380 p_message_name := 'IGS_AD_ADMCAL_CAT_AS_ADM';
381 RETURN FALSE;
382 END IF;
383 END IF;
384 CLOSE c_cal_type;
385
386 OPEN c_cal_instance(
387 p_adm_cal_type,
388 p_adm_ci_sequence_number);
389 FETCH c_cal_instance INTO v_s_cal_status;
390 IF(c_cal_instance%FOUND) THEN
391 -- Added the End_Date validation as part of the bug 2772337.
392 --Removed the End_Date validation as part of bug 2974150
393
394 IF(v_s_cal_status.s_cal_status<> cst_active) THEN
395 CLOSE c_cal_instance;
396 p_message_name := 'IGS_AD_ADMCAL_PLANNED_ACTIVE'; --removed the planned status as per bug#2722785 --rghosh
397 RETURN FALSE;
398 END IF;
399 END IF;
400 CLOSE c_cal_instance;
401
402 OPEN c_cal_ins_rel(
403 p_acad_cal_type,
404 p_acad_ci_sequence_number,
405 p_adm_cal_type,
406 p_adm_ci_sequence_number);
407 FETCH c_cal_ins_rel INTO v_dummy;
408 IF(c_cal_ins_rel%NOTFOUND) THEN
409 CLOSE c_cal_ins_rel;
410 p_message_name := 'IGS_AD_ADMCAL_CHILD_ACACAL';
411 RETURN FALSE;
412 END IF;
413 CLOSE c_cal_ins_rel;
414 OPEN c_adm_perd_adm_proc_cat(
415 p_adm_cal_type,
416 p_adm_ci_sequence_number,
417 p_admission_cat,
418 p_s_admission_process_type);
419 FETCH c_adm_perd_adm_proc_cat INTO v_dummy;
420 IF(c_adm_perd_adm_proc_cat%NOTFOUND) THEN
421 CLOSE c_adm_perd_adm_proc_cat;
422 p_message_name := 'IGS_AD_ADMCAL_NOTLINK_ADMCAT';
423 RETURN FALSE;
424 END IF;
425 CLOSE c_adm_perd_adm_proc_cat;
426 RETURN TRUE;
427 END;
428 EXCEPTION
429 WHEN OTHERS THEN
430 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
431 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_adm_cal');
432 IGS_GE_MSG_STACK.ADD;
433 App_Exception.Raise_Exception;
434 END admp_val_aa_adm_cal;
435 --
436 -- Validate the IGS_AD_APPL.admission_cat.
437 FUNCTION admp_val_aa_adm_cat(
438 p_admission_cat IN VARCHAR2 ,
439 p_message_name OUT NOCOPY VARCHAR2 )
440 RETURN BOOLEAN AS
441 BEGIN
442 DECLARE
443 v_closed_ind IGS_AD_CAT.closed_ind%TYPE;
444 v_count NUMBER;
445 v_admission_cat IGS_AD_CAT.admission_cat%TYPE;
446 CURSOR c_ac IS
447 SELECT ac.closed_ind
448 FROM IGS_AD_CAT ac
449 WHERE ac.admission_cat = p_admission_cat;
450 CURSOR c_ccm IS
451 SELECT ccm.admission_cat,
452 COUNT(*)
453 FROM IGS_CO_CAT_MAP ccm
454 WHERE ccm.admission_cat = p_admission_cat AND
455 ccm.dflt_cat_ind = 'Y'
456 GROUP BY ccm.admission_cat;
457 CURSOR c_ecm IS
458 SELECT ecm.admission_cat,
459 COUNT(*)
460 FROM IGS_EN_CAT_MAPPING ecm
461 WHERE ecm.admission_cat = p_admission_cat AND
462 ecm.dflt_cat_ind = 'Y'
463 GROUP BY ecm.admission_cat;
464 CURSOR c_fcm IS
465 SELECT fcm.admission_cat,
466 COUNT(*)
467 FROM IGS_FI_FEE_CAT_MAP fcm
468 WHERE fcm.admission_cat = p_admission_cat AND
469 fcm.dflt_cat_ind = 'Y'
470 GROUP BY fcm.admission_cat;
471 BEGIN
472 -- Validate the IGS_AD_APPL.admission_cat.
473 -- Validations are:
474 -- IGS_AD_APPL.admission_cat must not be closed.
475 -- IGS_AD_APPL.admission_cat must have one and only
476 -- one default IGS_CO_CAT_MAP record.
477 -- IGS_AD_APPL.admission_cat must have one and only
478 -- one default IGS_EN_CAT_MAPPING record.
479 -- IGS_AD_APPL.admission_cat must have one and only
480 -- one default IGS_FI_FEE_CAT_MAP record.
481 OPEN c_ac;
482 FETCH c_ac INTO v_closed_ind;
483 IF (c_ac%FOUND) THEN
484 IF (v_closed_ind = 'Y') THEN
485 CLOSE c_ac;
486 p_message_name := 'IGS_AD_ADM_CATEGORY_CLOSED';
487 RETURN FALSE;
488 END IF;
489 END IF;
490 CLOSE c_ac;
491 /* Commented out NOCOPY because correspondence functionality is removed. Bug# 1478593 P1, nsinha 25-Oct-00
492 OPEN c_ccm;
493 FETCH c_ccm INTO v_admission_cat,
494 v_count;
495 IF (c_ccm%NOTFOUND) THEN
496 CLOSE c_ccm;
497 p_message_name := 'IGS_AD_ADMCAT_NOT_DFLT_CORCAT';
498 RETURN FALSE;
499 END IF;
500 CLOSE c_ccm;
501 IF (v_count > 1) THEN
502 p_message_name := 'IGS_AD_ADMCAT_MORE_DFLT_CORCA';
503 RETURN FALSE;
504 END IF;
505 */
506
507 --These are not required while creating the application/instance.
508 -- Needs to be handled in the set up form
509
510 /* OPEN c_ecm;
511 FETCH c_ecm INTO v_admission_cat,
512 v_count;
513 IF (c_ecm%NOTFOUND) THEN
514 CLOSE c_ecm;
515 p_message_name := 'IGS_AD_ADMCAT_NOT_DFLT_ENRCAT';
516 RETURN FALSE;
517 END IF;
518 CLOSE c_ecm;
519 IF (v_count > 1) THEN
520 p_message_name := 'IGS_AD_ADMCAT_MORE_DFLT_ENRCA';
521 RETURN FALSE;
522 END IF;
523 OPEN c_fcm;
524 FETCH c_fcm INTO v_admission_cat,
525 v_count;
526 IF (c_fcm%NOTFOUND) THEN
527 CLOSE c_fcm;
528 p_message_name := 'IGS_AD_ADMCAT_NOT_DFLT_FEECAT';
529 RETURN FALSE;
530 END IF;
531 CLOSE c_fcm;
532 IF (v_count > 1) THEN
533 p_message_name := 'IGS_AD_ADMCAT_DFLT_FEECAT';
534 RETURN FALSE;
535 END IF;*/
536 p_message_name := null;
537 RETURN TRUE;
538 EXCEPTION
539 WHEN OTHERS THEN
540 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
541 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_adm_cat');
542 IGS_GE_MSG_STACK.ADD;
543 App_Exception.Raise_Exception;
544 END;
545 END admp_val_aa_adm_cat;
546 --
547 -- Validate the IGS_AD_APPL.adm_appl_status.
548 FUNCTION admp_val_aa_aas(
549 p_person_id IN NUMBER ,
550 p_admission_appl_number IN NUMBER ,
551 p_adm_appl_status IN VARCHAR2 ,
552 p_message_name OUT NOCOPY VARCHAR2 )
553 RETURN BOOLEAN AS
554 BEGIN -- admp_val_aa_aas
555 -- Validate the IGS_AD_APPL.adm_appl_status. Validations are -
556 -- * The admission application status must be open. (AAS01)
557 -- * If the admission application status has a system value of
558 -- received, then it must equal the derived value. (AAS02)
559 -- * If the admission application status has a system value of
560 -- completed, then it must equal the derived value. (AAS03)
561 -- * If the admission application status has a system value of
562 -- withdrawn, then it must equal the derived value. (AAS04)
563 -- * If the admission application status has a system value of
564 -- withdrawn, there must be no admission course application
565 -- instance that has been made an offer that has not been
566 -- resolved or accepted (including deferral). (AAS05)
567 DECLARE
568 CURSOR c_acai IS
569 SELECT aos.s_adm_outcome_status,
570 aors.s_adm_offer_resp_status
571 FROM IGS_AD_PS_APPL_INST acai,
572 IGS_AD_OU_STAT aos,
573 IGS_AD_OFR_RESP_STAT aors
574 WHERE acai.person_id = p_person_id AND
575 acai.admission_appl_number = p_admission_appl_number AND
576 aos.adm_outcome_status = acai.adm_outcome_status AND
577 aors.adm_offer_resp_status = acai.adm_offer_resp_status;
578 cst_received CONSTANT VARCHAR2(10) := 'RECEIVED';
579 cst_completed CONSTANT VARCHAR2(10) := 'COMPLETED';
580 cst_withdrawn CONSTANT VARCHAR2(10) := 'WITHDRAWN';
581 cst_offer CONSTANT VARCHAR2(10) := 'OFFER';
582 cst_cond_offer CONSTANT VARCHAR2(10) := 'COND-OFFER';
583 cst_rejected CONSTANT VARCHAR2(10) := 'REJECTED';
584 cst_lapsed CONSTANT VARCHAR2(10) := 'LAPSED';
585 cst_not_applic CONSTANT VARCHAR2(10) := 'NOT-APPLIC';
586 v_message_name VARCHAR2(30);
587 v_s_adm_appl_status IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
588 v_derived_s_adm_appl_status IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
589 v_exit_loop BOOLEAN DEFAULT FALSE;
590 BEGIN
591 -- Set the default message number
592 p_message_name := null;
593 -- Validate the closed indicator.
594 IF NOT IGS_AD_VAL_AA.admp_val_aas_closed (
595 p_adm_appl_status,
596 v_message_name) THEN
597 p_message_name := v_message_name;
598 RETURN FALSE;
599 END IF;
600 -- Get the admission application status system value.
601 v_s_adm_appl_status := IGS_AD_GEN_007.ADMP_GET_SAAS (
602 p_adm_appl_status);
603 -- Get admission application status derived value.
604 v_derived_s_adm_appl_status := IGS_AD_GEN_002.ADMP_GET_AA_AAS (
605 p_person_id,
606 p_admission_appl_number,
607 p_adm_appl_status);
608 -- Validate when the application is received.
609 IF v_s_adm_appl_status = cst_received AND
610 IGS_AD_GEN_007.ADMP_GET_SAAS(v_derived_s_adm_appl_status) <> cst_received THEN
611 p_message_name := 'IGS_AD_APPLST_CANNOT_RECEIVED';
612 RETURN FALSE;
613 END IF;
614 -- Validate when the application is completed.
615 IF v_s_adm_appl_status = cst_completed AND
616 IGS_AD_GEN_007.ADMP_GET_SAAS(v_derived_s_adm_appl_status) <> cst_completed THEN
617 p_message_name := 'IGS_AD_APPLST_CANNOT_COMPLETE';
618 RETURN FALSE;
619 END IF;
620 -- Validate when the application is withdrawn.
621 IF v_s_adm_appl_status = cst_withdrawn THEN
622 IF IGS_AD_GEN_007.ADMP_GET_SAAS(v_derived_s_adm_appl_status) <> cst_withdrawn THEN
623 p_message_name := 'IGS_AD_APPLST_CANNOT_WITHDRAW';
624 RETURN FALSE;
625 END IF;
626 -- Validate if the admission application can be withdrawn.
627 -- Loop through IGS_AD_PS_APPL_INST records:
628 FOR v_acai_rec IN c_acai LOOP
629 -- If any admission IGS_PS_COURSE application instance has been
630 -- made an offer that has not been resolved or accepted
631 -- (including deferral), then the admission application
632 -- cannot be withdrawn. The applicant should reject the offer.
633 IF v_acai_rec.s_adm_outcome_status IN (
634 cst_offer,
635 cst_cond_offer) AND
636 v_acai_rec.s_adm_offer_resp_status NOT IN (
637 cst_rejected,
638 cst_lapsed,
639 cst_not_applic) THEN
640 v_exit_loop := TRUE;
641 EXIT;
642 END IF;
643 END LOOP;
644 IF v_exit_loop THEN
645 p_message_name := 'IGS_AD_APPLST_NOTBE_WITHDRAWN';
646 RETURN FALSE;
647 END IF;
648 END IF;
649 -- Return the default value
650 RETURN TRUE;
651 EXCEPTION
652 WHEN OTHERS THEN
653 IF c_acai%ISOPEN THEN
654 CLOSE c_acai;
655 END IF;
656 App_Exception.Raise_Exception;
657 END;
658 EXCEPTION
659 WHEN OTHERS THEN
660 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
661 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_aas');
662 IGS_GE_MSG_STACK.ADD;
663 App_Exception.Raise_Exception;
664 END admp_val_aa_aas;
665 --
666 -- Validate if IGS_AD_APPL_STAT.adm_appl_status is closed.
667 FUNCTION admp_val_aas_closed(
668 p_adm_appl_status IN VARCHAR2 ,
669 p_message_name OUT NOCOPY VARCHAR2 )
670 RETURN BOOLEAN AS
671 BEGIN -- admp_val_aas_closed
672 -- Validate if IGS_AD_APPL_STAT.adm_appl_status is closed
673 DECLARE
674 CURSOR c_aas IS
675 SELECT closed_ind
676 FROM IGS_AD_APPL_STAT
677 WHERE adm_appl_status = p_adm_appl_status;
678 v_closed_ind IGS_AD_APPL_STAT.closed_ind%TYPE;
679 BEGIN
680 -- Set the default message number
681 p_message_name := null;
682 -- Cursor handling
683 OPEN c_aas;
684 FETCH c_aas INTO v_closed_ind;
685 IF c_aas%FOUND THEN
686 IF (v_closed_ind = 'Y') THEN
687 CLOSE c_aas;
688 p_message_name := 'IGS_AD_ADMAPL_STATUS_CLOSED';
689 RETURN FALSE;
690 END IF;
691 END IF;
692 -- Return the default value
693 CLOSE c_aas;
694 RETURN TRUE;
695 END;
696 EXCEPTION
697 WHEN OTHERS THEN
698 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
699 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aas_closed');
700 IGS_GE_MSG_STACK.ADD;
701 App_Exception.Raise_Exception;
702 END admp_val_aas_closed;
703 --
704 -- Validate the IGS_AD_APPL.adm_fee_status.
705 FUNCTION admp_val_aa_afs(
706 p_person_id IN NUMBER ,
707 p_admission_appl_number IN NUMBER ,
708 p_adm_fee_status IN VARCHAR2 ,
709 p_fees_required_ind IN VARCHAR2 DEFAULT 'N',
710 p_cond_offer_fee_allowed IN VARCHAR2 DEFAULT 'N',
711 p_message_name OUT NOCOPY VARCHAR2 )
712 RETURN BOOLEAN AS
713 BEGIN -- admp_val_aa_afs
714 -- Validate the IGS_AD_APPL.adm_fee_status. Validations are
715 -- The adm_fee_status must be open.
716 -- If fee's are required the adm_fee_status must not have a system value of
717 -- not-applicable.
718 -- If fee's are not required the adm_fee_status must have a system value of
719 -- not-applicable.
720 -- The IGS_AD_PS_APPL_INST relating to the admission application have
721 -- valid statuses for adm_fee_status.
722 DECLARE
723 cst_not_applic CONSTANT VARCHAR2(10) :='NOT-APPLIC';
724 cst_pending CONSTANT VARCHAR2(7) :='PENDING';
725 cst_assessed CONSTANT VARCHAR2(8) :='ASSESSED';
726 cst_offer CONSTANT VARCHAR2(5) :='OFFER';
727 cst_cond_offer CONSTANT VARCHAR2(10) :='COND-OFFER';
728 cst_withdrawn CONSTANT VARCHAR2(9) :='WITHDRAWN';
729 cst_voided CONSTANT VARCHAR2(6) :='VOIDED';
730 cst_satisfied CONSTANT VARCHAR2(9) :='SATISFIED';
731 v_dummy VARCHAR2(1);
732 v_s_adm_fee_status IGS_AD_FEE_STAT.s_adm_fee_status%TYPE;
733 v_message_name VARCHAR2(30);
734 CURSOR c_chk_offer_pend IS
735 SELECT 'x'
736 FROM IGS_AD_PS_APPL_INST acai,
737 IGS_AD_OU_STAT aos
738 WHERE acai.person_id = p_person_id AND
739 acai.admission_appl_number = p_admission_appl_number AND
740 aos.s_adm_outcome_status IN (
741 cst_offer,
742 cst_cond_offer,
743 cst_withdrawn,
744 cst_voided) AND
745 acai.adm_outcome_status = aos.adm_outcome_status;
746 CURSOR c_chk_offer_ass IS
747 SELECT 'x'
748 FROM IGS_AD_PS_APPL_INST acai,
749 IGS_AD_OU_STAT aos
750 WHERE acai.person_id = p_person_id AND
751 acai.admission_appl_number = p_admission_appl_number AND
752 aos.s_adm_outcome_status = cst_offer AND
753 acai.adm_outcome_status = aos.adm_outcome_status;
754 CURSOR c_chk_cond_fee IS
755 SELECT 'x'
756 FROM IGS_AD_PS_APPL_INST acai,
757 IGS_AD_OU_STAT aos
758 WHERE acai.person_id = p_person_id AND
759 acai.admission_appl_number = p_admission_appl_number AND
760 aos.s_adm_outcome_status = cst_cond_offer AND
761 acai.adm_outcome_status = aos.adm_outcome_status;
762 CURSOR c_check_cndtnl IS
763 SELECT 'x'
764 FROM IGS_AD_PS_APPL_INST acai,
765 IGS_AD_OU_STAT aos,
766 IGS_AD_CNDNL_OFRSTAT acos
767 WHERE acai.person_id = p_person_id AND
768 acai.admission_appl_number = p_admission_appl_number AND
769 aos.s_adm_outcome_status = cst_cond_offer AND
770 acos.s_adm_cndtnl_offer_status = cst_satisfied AND
771 acai.adm_cndtnl_offer_status = acos.adm_cndtnl_offer_status AND
772 acai.adm_outcome_status = aos.adm_outcome_status;
773 BEGIN
774 -- Set the default message number
775 p_message_name := null;
776 -- Validate the closed indicator.
777 IF IGS_AD_VAL_ACAI_STATUS.admp_val_afs_closed(
778 p_adm_fee_status,
779 v_message_name) = FALSE THEN
780 p_message_name := v_message_name;
781 RETURN FALSE;
782 END IF;
783 -- Get the admission fee status system value.
784 v_s_adm_fee_status := IGS_AD_GEN_008.ADMP_GET_SAFS(p_adm_fee_status);
785 -- Validate when fee's are required.
786 IF (p_fees_required_ind = 'Y') THEN
787 IF (v_s_adm_fee_status = cst_not_applic) THEN
788 p_message_name := 'IGS_AD_APPLFEE_REQUIRED';
789 RETURN FALSE;
790 END IF;
791 -- Validate against admission IGS_PS_COURSE application outcome status
792 IF (v_s_adm_fee_status = cst_pending) THEN
793 OPEN c_chk_offer_pend;
794 FETCH c_chk_offer_pend INTO v_dummy;
795 IF c_chk_offer_pend%FOUND THEN
796 CLOSE c_chk_offer_pend;
797 -- Cannot be determining fees when offer has been made
798 p_message_name := 'IGS_AD_APPLFEE_NOTSET_OFRMADE';
799 RETURN FALSE;
800 END IF;
801 CLOSE c_chk_offer_pend;
802 END IF;
803 IF (v_s_adm_fee_status = cst_assessed) THEN
804 OPEN c_chk_offer_ass;
805 FETCH c_chk_offer_ass INTO v_dummy;
806 IF c_chk_offer_ass%FOUND THEN
807 CLOSE c_chk_offer_ass;
808 -- Cannot be assessing fees when offer is being made
809 p_message_name := 'IGS_AD_APPLFEE_NOTSET_ASSESED';
810 RETURN FALSE;
811 END IF;
812 CLOSE c_chk_offer_ass;
813 IF p_cond_offer_fee_allowed = 'N' THEN
814 OPEN c_chk_cond_fee;
815 FETCH c_chk_cond_fee INTO v_dummy;
816 IF c_chk_cond_fee%FOUND THEN
817 CLOSE c_chk_cond_fee;
818 -- Cannot be assessing fees when conditional offer is being made and fee
819 -- condtional offers are not allowed.
820 p_message_name := 'IGS_AD_FEEST_NOTBE_ASSESSED';
821 RETURN FALSE;
822 END IF;
823 CLOSE c_chk_cond_fee;
824 END IF;
825 OPEN c_check_cndtnl;
826 FETCH c_check_cndtnl INTO v_dummy;
827 IF c_check_cndtnl%FOUND THEN
828 CLOSE c_check_cndtnl;
829 -- Cannot be assessing fees when a conditional offer has been satisfied.
830 p_message_name := 'IGS_AD_APPLFEE_NOTBE_ASSESSED';
831 RETURN FALSE;
832 END IF;
833 CLOSE c_check_cndtnl;
834 END IF;
835 END IF;
836 -- Validate when fee's are not required.
837 IF p_fees_required_ind = 'N' AND
838 v_s_adm_fee_status <> cst_not_applic THEN
839 p_message_name := 'IGS_AD_APPLFEE_NOT_APPLICABLE';
840 RETURN FALSE;
841 END IF;
842 RETURN TRUE;
843 EXCEPTION
844 WHEN OTHERS THEN
845 IF c_chk_offer_pend%ISOPEN THEN
846 CLOSE c_chk_offer_pend;
847 END IF;
848 IF c_chk_offer_ass%ISOPEN THEN
849 CLOSE c_chk_offer_ass;
850 END IF;
851 IF c_chk_cond_fee%ISOPEN THEN
852 CLOSE c_chk_cond_fee;
853 END IF;
854 IF c_check_cndtnl%ISOPEN THEN
855 CLOSE c_check_cndtnl;
856 END IF;
857 App_Exception.Raise_Exception;
858 END;
859 EXCEPTION
860 WHEN OTHERS THEN
861 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
862 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_afs');
863 IGS_GE_MSG_STACK.ADD;
864 App_Exception.Raise_Exception;
865 END admp_val_aa_afs;
866 --
867 -- Validate if IGS_AD_FEE_STAT.adm_fee_status is closed.
868
869 --
870 -- Validate the IGS_AD_APPL.tac_appl_ind.
871 FUNCTION admp_val_aa_tac_appl(
872 p_person_id IN NUMBER ,
873 p_tac_appl_ind IN VARCHAR2 DEFAULT 'N',
874 p_appl_dt IN DATE ,
875 p_s_admission_process_type IN VARCHAR2 ,
876 p_message_name OUT NOCOPY VARCHAR2 ,
877 p_return_type OUT NOCOPY VARCHAR2 )
878 RETURN BOOLEAN AS
879 BEGIN -- admp_val_aa_tac_appl
880 DECLARE -- Validate the IGS_AD_APPL.tac_appl_ind.
881 -- Validations are -
882 -- If the IGS_AD_APPL.tac_appl_ind = 'Y' then an alternate_person_id
883 -- record must exist for the person with an s_person_id_type of 'TAC'.
884 -- If the IGS_PE_ALT_PERS_ID record is dated, then it must be effective
885 -- as of the IGS_AD_APPL.appl_dt.
886 cst_error CONSTANT VARCHAR2(1) := 'E';
887 cst_warn CONSTANT VARCHAR2(1) := 'W';
888 cst_course CONSTANT IGS_AD_APPL.s_admission_process_type%TYPE := 'COURSE';
889 v_pe_person_id IGS_PE_ALT_PERS_ID.pe_person_id%TYPE;
890 -- gmaheswa: Added START_DT <> END_DT OR END_DT IS NULL condition as part of bug 3882788
891 CURSOR c_api_pit IS
892 SELECT api.pe_person_id
893 FROM IGS_PE_ALT_PERS_ID api,
894 IGS_PE_PERSON_ID_TYP pit
895 WHERE api.pe_person_id = p_person_id AND
896 (api.start_dt IS NULL OR
897 (api.start_dt <= p_appl_dt AND
898 NVL(api.end_dt, IGS_GE_DATE.IGSCHAR('9999/01/01')) >= p_appl_dt) AND
899 (api.end_dt IS NULL OR api.start_dt <> api.end_dt)) AND
900 pit.person_id_type = api.person_id_type AND
901 pit.s_person_id_type = 'TAC';
902 BEGIN
903 IF (p_tac_appl_ind = 'Y') THEN
904 IF (p_s_admission_process_type <> cst_course) THEN
905 p_message_name := 'IGS_AD_SYSADM_PRCTYPE_TACAPPL';
906 p_return_type := cst_error;
907 RETURN FALSE;
908 END IF;
909 OPEN c_api_pit;
910 FETCH c_api_pit INTO v_pe_person_id;
911 IF (c_api_pit%NOTFOUND) THEN
912 CLOSE c_api_pit;
913 p_message_name := 'IGS_AD_TACAPPL_INDICATOR_Y';
914 p_return_type := cst_warn;
915 RETURN FALSE;
916 END IF;
917 CLOSE c_api_pit;
918 END IF;
919 p_message_name := null;
920 RETURN TRUE;
921 EXCEPTION
922 WHEN OTHERS THEN
923 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
924 FND_MESSAGE.SET_TOKEN('NAME','IGS_AD_VAL_AA.admp_val_aa_tac_appl');
925 IGS_GE_MSG_STACK.ADD;
926 App_Exception.Raise_Exception;
927 END;
928 END admp_val_aa_tac_appl;
929 END IGS_AD_VAL_AA;