DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_VAL_ACAI

Source


1 PACKAGE BODY igs_ad_val_acai AS
2  /* $Header: IGSAD22B.pls 120.6 2006/05/30 10:58:04 pbondugu ship $ */
3 -------------------------------------------------------------------------------------------
4 --Change History:
5 --Who         When            What
6 --
7 -- bug id : 1956374
8 -- sjadhav , 28-aug-2001
9 -- removed function enrp_val_hpo_closed
10 -- change  igs_ad_val_acai.enrp_val_hpo_closed
11 -- to      igs_en_val_scho.enrp_val_hpo_closed
12 --
13 --smadathi    28-AUG-2001     Bug No. 1956374 .The exception part removed from genp_val_staff_prsn
14   --msrinivi bug 1956374. pointing finp_val_fc_closed to igs_fi_val_fcm
15 
16   -- bug id : 1956374
17   -- sjadhav , 28-aug-2001
18   -- removed function enrp_val_ec_closed
19   -- change  igs_ad_val_acai.enrp_val_ec_closed
20   -- to      igs_ad_val_ecm.enrp_val_ec_closed
21 
22   --samaresh    21-DEC-2001     Bug No. 2158524 . The cursor c_ar has been modified as the
23   --                            the table IGS_AD_APP_ REQ has been moved from application
24   --                            instance level to application level
25   -- ssawhney   24-oct-2002     admp_val_acai_comp : SWS104 build 2630860, AD_ACAD_HONOR reference moved to PE.
26   --				removed DEFAULTs in declarations and parameters
27   --hreddych    13-dec-2002     function admp_val_acai_insert modified to check for completed application
28   --                            also when called with the parameter p_validate_aa_only set to TRUE .
29   --sarakshi    27-Feb-2003    Enh#2797116,modified procedure admp_val_acai_coo ,added delete_falg check in the where clause
30   --                           of the cursor c_coo
31   -- rghosh     03-mar-2003   Changed the signature of the function ADMP_VAL_DFRMNT_CAL (bug#2765260)
32   -------------------------------------------------------------------------------------------
33 
34   --
35   -- Validate insert of an IGS_AD_PS_APPL_INST record.
36 
37  FUNCTION admp_val_acai_insert(
38   p_person_id IN NUMBER ,
39   p_admission_appl_number IN NUMBER ,
40   p_nominated_course_cd IN VARCHAR2 ,
41   p_acai_sequence_number IN NUMBER ,
42   p_course_cd IN VARCHAR2 ,
43   p_location_cd IN VARCHAR2 ,
44   p_attendance_mode IN VARCHAR2 ,
45   p_attendance_type IN VARCHAR2 ,
46   p_unit_set_cd IN VARCHAR2 ,
47   p_us_version_number IN NUMBER ,
48   p_adm_cal_type IN VARCHAR2 ,
49   p_adm_ci_sequence_number IN NUMBER ,
50   p_s_admission_process_type IN VARCHAR2 ,
51   p_pref_limit IN NUMBER ,
52   p_validate_aa_only IN BOOLEAN ,
53   p_message_name OUT NOCOPY VARCHAR2,
54   p_return_type OUT NOCOPY VARCHAR2 )
55   RETURN BOOLEAN AS
56   	gv_validate_aa_only		VARCHAR2(1);
57   BEGIN 	-- admp_val_acai_insert
58   	-- Routine to validate the insert of an IGS_AD_PS_APPL_INST record.
59   DECLARE
60   	cst_completed			CONSTANT 	VARCHAR2(9) := 'COMPLETED';
61   	cst_withdrawn			CONSTANT 	VARCHAR2(9) := 'WITHDRAWN';
62   	cst_warn			CONSTANT 	VARCHAR2(1) := 'W';
63   	cst_error			CONSTANT 	VARCHAR2(1) := 'E';
64   	v_s_adm_appl_status		IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
65   	v_message_name			VARCHAR2(30);
66   	v_return			BOOLEAN := TRUE;
67   	CURSOR c_acaiv (
68   			cp_person_id			IGS_AD_PS_APPL_INST.person_id%TYPE,
69   			cp_course_cd			IGS_AD_PS_APPL_INST.course_cd%TYPE,
70   			cp_admission_appl_number	IGS_AD_PS_APPL_INST.admission_appl_number%TYPE,
71   			cp_acai_sequence_number		IGS_AD_PS_APPL_INST.sequence_number%TYPE,
72   			cp_location_cd			IGS_AD_PS_APPL_INST.location_cd%TYPE,
73   			cp_attendance_mode		IGS_AD_PS_APPL_INST.attendance_mode%TYPE,
74   			cp_attendance_type	   	IGS_AD_PS_APPL_INST.attendance_type%TYPE,
75   			cp_unit_set_cd			IGS_AD_PS_APPL_INST.unit_set_cd%TYPE,
76   			cp_us_version_number		IGS_AD_PS_APPL_INST.us_version_number%TYPE,
77   			cp_adm_cal_type		   	IGS_AD_APPL.adm_cal_type%TYPE,
78   			cp_adm_ci_sequence_number  	IGS_AD_APPL.adm_ci_sequence_number%TYPE) IS
79   		SELECT	'x'
80 	        FROM    IGS_AD_APPL aav, IGS_AD_PS_APPL_INST acaiv
81   		WHERE	 aav.person_id = acaiv.person_id AND
82 	                aav.admission_appl_number = acaiv.admission_appl_number AND
83 			acaiv.person_id			= cp_person_id AND
84   			acaiv.course_cd			= cp_course_cd AND
85   			(acaiv.admission_appl_number	<> cp_admission_appl_number OR
86   			 acaiv.sequence_number		<> cp_acai_sequence_number) AND
87   			NVL(acaiv.location_cd,'NULL')	= NVL(cp_location_cd,'NULL') AND
88   			NVL(acaiv.attendance_mode,'NULL') = NVL(cp_attendance_mode,'NULL') AND
89   			NVL(acaiv.attendance_type,'NULL') = NVL(cp_attendance_type,'NULL') AND
90   			NVL(acaiv.unit_set_cd, 'NULL')	= NVL(cp_unit_set_cd, 'NULL') AND
91   			NVL(acaiv.us_version_number,0)	= NVL(cp_us_version_number,0) AND
92   	                NVL(acaiv.adm_cal_type, aav.adm_cal_type) = cp_adm_cal_type AND
93   	                NVL(acaiv.adm_ci_sequence_number, aav.adm_ci_sequence_number)
94   			    = cp_adm_ci_sequence_number AND
95                         -- Check for CANCELLED added for bug 2678766
96                         NVL(IGS_AD_GEN_008.ADMP_GET_SAOS(acaiv.adm_outcome_status),'x') <> 'CANCELLED';
97 
98   -- Added the following cursor definitions for UK Bug 2462198
99   -- by rrengara on 24-JUL-2002
100 
101 	CURSOR c_acaiv_uk (
102 	        	cp_person_id			IGS_AD_PS_APPL_INST.person_id%TYPE,
103   			cp_course_cd			IGS_AD_PS_APPL_INST.course_cd%TYPE,
104   			cp_admission_appl_number	IGS_AD_PS_APPL_INST.admission_appl_number%TYPE,
105   			cp_acai_sequence_number		IGS_AD_PS_APPL_INST.sequence_number%TYPE,
106   			cp_location_cd			IGS_AD_PS_APPL_INST.location_cd%TYPE,
107   			cp_attendance_mode		IGS_AD_PS_APPL_INST.attendance_mode%TYPE,
108   			cp_attendance_type	   	IGS_AD_PS_APPL_INST.attendance_type%TYPE,
109   			cp_unit_set_cd			IGS_AD_PS_APPL_INST.unit_set_cd%TYPE,
110   			cp_us_version_number		IGS_AD_PS_APPL_INST.us_version_number%TYPE,
111   			cp_adm_cal_type		   	IGS_AD_APPL.adm_cal_type%TYPE,
112   			cp_adm_ci_sequence_number  	IGS_AD_APPL.adm_ci_sequence_number%TYPE,
113 			cp_choice_number                IGS_AD_APPL.choice_number%TYPE,
114 			cp_alt_appl_id                  IGS_AD_APPL.alt_appl_id%TYPE) IS
115          	 SELECT 'x'
116 	         FROM   IGS_AD_APPL aav, IGS_AD_PS_APPL_INST acaiv
117 	         WHERE  aav.person_id = acaiv.person_id AND
118 	                aav.admission_appl_number = acaiv.admission_appl_number AND
119                         acaiv.person_id			= cp_person_id AND
120   	                acaiv.course_cd			= cp_course_cd AND
121            	        (acaiv.admission_appl_number	<> cp_admission_appl_number OR
122   	                  acaiv.sequence_number		<> cp_acai_sequence_number) AND
123            	        NVL(acaiv.location_cd,'NULL')	= NVL(cp_location_cd,'NULL') AND
124   	                NVL(acaiv.attendance_mode,'NULL') = NVL(cp_attendance_mode,'NULL') AND
125            	        NVL(acaiv.attendance_type,'NULL') = NVL(cp_attendance_type,'NULL') AND
126   	                NVL(acaiv.unit_set_cd, 'NULL')	= NVL(cp_unit_set_cd, 'NULL') AND
127            	        NVL(acaiv.us_version_number,0)	= NVL(cp_us_version_number,0) AND
128   	                NVL(acaiv.adm_cal_type, aav.adm_cal_type) = cp_adm_cal_type AND
129   	                NVL(acaiv.adm_ci_sequence_number, aav.adm_ci_sequence_number)
130                             = cp_adm_ci_sequence_number AND
131          	        NVL(aav.choice_number, 0) = NVL(cp_choice_number,0) AND
132 	                NVL(aav.alt_appl_id, 0) = NVL(cp_alt_appl_id,0) AND
133                         -- Check for CANCELLED added for bug 2678766
134                         NVL(IGS_AD_GEN_008.ADMP_GET_SAOS(acaiv.adm_outcome_status),'x') <> 'CANCELLED';
135 
136 	  CURSOR c_aav_uk(cp_person_id igs_ad_appl.person_id%TYPE, cp_admission_appl_number igs_ad_appl.admission_appl_number%TYPE) IS
137 	  SELECT
138 	    choice_number, alt_appl_id
139 	  FROM
140 	    igs_ad_appl aav
141 	  WHERE
142 	    aav.person_id = cp_person_id
143 	    AND aav.admission_appl_number = cp_admission_appl_number;
144 
145 	  c_aav_uk_rec c_aav_uk%ROWTYPE;
146 
147 	  CURSOR c_igs_pe_ucas(cp_n_person_id igs_pe_person.person_id%TYPE) IS
148           SELECT
149             api_person_id
150           FROM
151             igs_pe_alt_pers_id
152           WHERE
153             sysdate BETWEEN start_dt AND NVL(end_dt, sysdate)
154 	    AND person_id_type = 'UCASID'
155 	    AND pe_person_id = cp_n_person_id ;
156 
157           rec_c_igs_pe_ucas     c_igs_pe_ucas%ROWTYPE;
158 
159     -- End definitions for UK Bug 2462198   by rrengara on 24-JUL-2002
160 
161 
162   	CURSOR c_acaiv_aa (
163   			cp_person_id			IGS_AD_PS_APPL_INST.person_id%TYPE,
164   			cp_course_cd			IGS_AD_PS_APPL_INST.course_cd%TYPE,
165   			cp_admission_appl_number	IGS_AD_PS_APPL_INST.admission_appl_number%TYPE,
166   			cp_acai_sequence_number		IGS_AD_PS_APPL_INST.sequence_number%TYPE,
167   			cp_location_cd			IGS_AD_PS_APPL_INST.location_cd%TYPE,
168   			cp_attendance_mode		IGS_AD_PS_APPL_INST.attendance_mode%TYPE,
169   			cp_attendance_type	   	IGS_AD_PS_APPL_INST.attendance_type%TYPE,
170   			cp_unit_set_cd			IGS_AD_PS_APPL_INST.unit_set_cd%TYPE,
171   			cp_us_version_number		IGS_AD_PS_APPL_INST.us_version_number%TYPE,
172   			cp_adm_cal_type		   	IGS_AD_APPL.adm_cal_type%TYPE,
173   			cp_adm_ci_sequence_number  	IGS_AD_APPL.adm_ci_sequence_number%TYPE) IS
174   		SELECT	aa.adm_appl_status
175   		FROM	IGS_AD_PS_APPL_INST		acaiv,
176   			IGS_AD_APPL			aa
177   		WHERE	acaiv.person_id			= cp_person_id AND
178   			acaiv.nominated_course_cd			= cp_course_cd AND
179   			(acaiv.admission_appl_number	<> cp_admission_appl_number OR
180   			 acaiv.sequence_number		<> cp_acai_sequence_number) AND
181   			NVL(acaiv.location_cd,'NULL')	= NVL(cp_location_cd,'NULL') AND
182   			NVL(acaiv.attendance_mode,'NULL') = NVL(cp_attendance_mode,'NULL') AND
183   			NVL(acaiv.attendance_type,'NULL') = NVL(cp_attendance_type,'NULL') AND
184   			NVL(acaiv.unit_set_cd, 'NULL')	= NVL(cp_unit_set_cd, 'NULL') AND
185   			NVL(acaiv.us_version_number,0)	= NVL(cp_us_version_number,0) AND
186   			(NVL(acaiv.adm_cal_type,aa.adm_cal_type)	<> cp_adm_cal_type OR
187   			 NVL(acaiv.adm_ci_sequence_number,aa.adm_ci_sequence_number) <> cp_adm_ci_sequence_number) AND
188   			acaiv.person_id			= aa.person_id AND
189   			acaiv.admission_appl_number	= aa.admission_appl_number;
190 
191   	CURSOR c_aal (
192   		cp_person_id			IGS_AD_PS_APPL_INST.person_id%TYPE,
193   		cp_admission_appl_number	IGS_AD_PS_APPL_INST.admission_appl_number%TYPE)
194         IS
195   		SELECT	'x'
196   		FROM	IGS_AD_APPL_LTR		aal
197   		WHERE	aal.person_id			= cp_person_id AND
198   			aal.admission_appl_number	= cp_admission_appl_number;
199   	CURSOR c_aa (
200   		cp_person_id			IGS_AD_APPL.person_id%TYPE,
201   		cp_admission_appl_number	IGS_AD_APPL.admission_appl_number%TYPE) IS
202   		SELECT	aas.s_adm_appl_status
203   		FROM	IGS_AD_APPL 			aa,
204   			IGS_AD_APPL_STAT 		aas
205   		WHERE	aa.person_id 			= cp_person_id AND
206   			aa.admission_appl_number 	= cp_admission_appl_number AND
207   			aas.adm_appl_status 		= aa.adm_appl_status;
208   BEGIN
209   	p_message_name := NULL;
210   	p_return_type := NULL;
211   	-- Validate the system admission application status.
212   	OPEN	c_aa(
213   			p_person_id,
214   			p_admission_appl_number);
215   	FETCH	c_aa	INTO v_s_adm_appl_status;
216   	IF(c_aa%FOUND AND
217   			v_s_adm_appl_status IN (cst_completed,cst_withdrawn)) THEN
218   		CLOSE c_aa;
219   		p_message_name := 'IGS_AD_NOTINS_ADMPRG_APPL';
220   		p_return_type := cst_error;
221   		RETURN FALSE;
222   	END IF;
223   	CLOSE c_aa;
224   	IF p_validate_aa_only = FALSE THEN
225   		-- Validate preferences.
226   		IF(IGS_AD_VAL_ACA.admp_val_pref_limit (
227   					p_person_id,
228   					p_admission_appl_number,
229   					p_nominated_course_cd,
230   					p_acai_sequence_number,
231   					p_s_admission_process_type,
232   					p_pref_limit,
233   					v_message_name) = FALSE) THEN
234   			p_message_name := v_message_name;
235   			p_return_type := cst_error;
236   			RETURN FALSE;
237   		END IF;
238 
239 		  -- Added the following logics  for UK Bug 2462198
240 		  -- If the UK profile is switched on and the ucas id is present
241 		  -- for the applicant then consider the choice number also
242 		  -- for duplicate application instance check
243 		  -- otherwise do not consider the choice number in duplicate check
244 		  -- by rrengara on 24-JUL-2002
245                   -- Also added alt_appl_id for duplicate check when UK profile
246                   -- is switched on for bug 2664410 by knag
247 
248 		OPEN c_igs_pe_ucas(p_person_id);
249 		FETCH c_igs_pe_ucas INTO rec_c_igs_pe_ucas;
250 
251                 IF FND_PROFILE.VALUE('OSS_COUNTRY_CODE') = 'GB' AND c_igs_pe_ucas%FOUND THEN
252 			OPEN c_aav_uk(p_person_id, p_admission_appl_number);
253 			FETCH c_aav_uk INTO c_aav_uk_rec;
254                         CLOSE c_aav_uk;
255 			FOR v_acaiv_rec_uk IN c_acaiv_uk(
256   					p_person_id,
257   					p_course_cd,
258   					p_admission_appl_number,
259   					p_acai_sequence_number,
260   					p_location_cd,
261   					p_attendance_mode,
262   					p_attendance_type,
263   					p_unit_set_cd,
264   					p_us_version_number,
265   					p_adm_cal_type,
266   					p_adm_ci_sequence_number,
267 					c_aav_uk_rec.choice_number,
268 					c_aav_uk_rec.alt_appl_id) LOOP
269   					p_message_name := 'IGS_AD_ANOTHER_ADMAPPL_EXISTS';
270   					p_return_type := cst_error;
271   					v_return := FALSE;
272   					EXIT;
273   			END LOOP;
274 		ELSE
275  			-- Validate for a matching admission course application instance for the
276   			-- IGS_PE_PERSON in the same admission period.
277   			FOR v_acaiv_rec IN c_acaiv(
278   				p_person_id,
279   				p_course_cd,
280   				p_admission_appl_number,
281   				p_acai_sequence_number,
282   				p_location_cd,
283   				p_attendance_mode,
284   				p_attendance_type,
285   				p_unit_set_cd,
286   				p_us_version_number,
287   				p_adm_cal_type,
288   				p_adm_ci_sequence_number) LOOP
289   				p_message_name := 'IGS_AD_ANOTHER_ADMAPPL_EXISTS';
290   				p_return_type := cst_error;
291   				v_return := FALSE;
292   				EXIT;
293   			END LOOP;
294 		END IF;
295 
296 		CLOSE c_igs_pe_ucas;
297 
298   		IF(v_return = TRUE) THEN
299   			-- Validate for a matching admission course application instance for the
300   			-- IGS_PE_PERSON
301   			-- in a different admission period.
302   			FOR v_acaiv_aa_rec IN c_acaiv_aa(
303   					p_person_id,
304   					p_course_cd,
305   					p_admission_appl_number,
306   					p_acai_sequence_number,
307   					p_location_cd,
308   					p_attendance_mode,
309   					p_attendance_type,
310   					p_unit_set_cd,
311   					p_us_version_number,
312   					p_adm_cal_type,
313   					p_adm_ci_sequence_number) LOOP
314   				IF(NVL(IGS_AD_GEN_007.ADMP_GET_SAAS(
315   						v_acaiv_aa_rec.adm_appl_status),'NULL')
316   						NOT IN 	(cst_completed, cst_withdrawn)) THEN
317   					p_message_name := 'IGS_AD_ADMPRG_MATCH_PRG';
318   					p_return_type := cst_warn;
319   					v_return := FALSE;
320   					EXIT;
321   				END IF;
322   			END LOOP;
323   		END IF;
324   	END IF;
325   	IF(v_return = TRUE) THEN
326   		-- Validate if correspondence has been sent.
327   		FOR v_aal_rec IN c_aal(
328   					p_person_id,
329   					p_admission_appl_number) LOOP
330   			p_message_name := 'IGS_AD_COR_SET_ADMAPPL';
331   			p_return_type := cst_warn;
332   			v_return := FALSE;
333   			EXIT;
334   		END LOOP;
335   	END IF;
336   	IF(v_return = TRUE) THEN
337   		RETURN TRUE;
338   	ELSE
339   		RETURN FALSE;
340   	END IF;
341   END;
342   EXCEPTION
343   	WHEN OTHERS THEN
344   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
345 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_insert');
346 			 IGS_GE_MSG_STACK.ADD;
347 			 APP_EXCEPTION.RAISE_EXCEPTION;
348  END admp_val_acai_insert;
349   --
350   -- Validate update of an IGS_AD_PS_APPL_INST record.
351   FUNCTION admp_val_acai_update(
352   p_adm_appl_status IN VARCHAR2 ,
353   p_person_id IN NUMBER ,
354   p_admission_appl_number IN NUMBER ,
355   p_nominated_course_cd IN VARCHAR2 ,
356   p_acai_sequence_number IN NUMBER ,
357   p_message_name OUT NOCOPY VARCHAR2 ,
358   p_update_non_enrol_detail_ind OUT NOCOPY VARCHAR2 )
359   RETURN BOOLEAN AS
360   BEGIN	--admp_val_acai_update
361   	--This module validates update of an IGS_AD_PS_APPL_INST record.
362   DECLARE
363   	v_s_appl_inst_status	IGS_AD_APPL_STAT.s_adm_appl_status%TYPE;
364   	v_person_id		IGS_EN_STDNT_PS_ATT.person_id%TYPE;
365 	cst_withdrawn		CONSTANT VARCHAR2(10) := 'WITHDRAWN';
366   	CURSOR c_sca (
367   		cp_person_id		IGS_EN_STDNT_PS_ATT.person_id%TYPE,
368   		cp_admission_appl_number
369   					IGS_EN_STDNT_PS_ATT.adm_admission_appl_number%TYPE,
370   		cp_nominated_course_cd	IGS_EN_STDNT_PS_ATT.adm_nominated_course_cd%TYPE,
371   		cp_acai_sequence_number	IGS_EN_STDNT_PS_ATT.adm_sequence_number%TYPE) IS
372   	SELECT	sca.person_id
373   	FROM	IGS_EN_STDNT_PS_ATT sca
374   	WHERE	sca.person_id = cp_person_id AND
375   		sca.adm_admission_appl_number IS NOT NULL AND
376   		sca.adm_admission_appl_number = cp_admission_appl_number AND
377   		sca.adm_nominated_course_cd IS NOT NULL AND
378   		sca.adm_nominated_course_cd = cp_nominated_course_cd AND
379   		sca.adm_sequence_number IS NOT NULL AND
380   		sca.adm_sequence_number = cp_acai_sequence_number AND
381   		sca.student_confirmed_ind = 'Y';
382 
383 	CURSOR c_ais IS									--arvsrini igsm
384 	SELECT appl_inst_status
385 	FROM IGS_AD_PS_APPL_INST
386 	WHERE person_id= p_person_id AND
387 	      admission_appl_number= p_admission_appl_number AND
388 	      nominated_course_cd= p_nominated_course_cd AND
389 	      sequence_number =p_acai_sequence_number;
390 
391   BEGIN
392   	--Set the default message number
393   	p_message_name := NULL;
394   	-- Set the default update status indicator.
395   	p_update_non_enrol_detail_ind := 'N';
396   	--Validate the system admission application status
397 
398 	OPEN c_ais;									--arvsrini igsm
399 	FETCH c_ais INTO v_s_appl_inst_status;
400 	CLOSE c_ais;
401 
402 	IF v_s_appl_inst_status IS NOT NULL THEN
403 		v_s_appl_inst_status := NVL(IGS_AD_GEN_007.ADMP_GET_SAAS(
404   					v_s_appl_inst_status), 'NULL');
405 	END IF;
406 
407 	IF v_s_appl_inst_status = cst_withdrawn THEN
408 		p_message_name := 'IGS_AD_APPL_INST_WITHD';
409   		p_update_non_enrol_detail_ind := 'N';
410 		RETURN FALSE;
411 	ELSIF igs_ad_gen_002.Is_App_Inst_Complete(p_person_id, p_admission_appl_number, p_nominated_course_cd, p_acai_sequence_number) = 'Y' THEN
412 		p_message_name := 'IGS_AD_APPL_INST_COMPL';
413   		p_update_non_enrol_detail_ind := 'N';
414 		RETURN FALSE;
415 	END IF;										--arvsrini igsm
416 
417 
418 
419 
420 
421   	-- Validate if the admission application has been pre-enrolled and confirmed.
422   	IF p_person_id IS NOT NULL AND
423   			p_admission_appl_number IS NOT NULL AND
424   			p_nominated_course_cd IS NOT NULL AND
425   			p_acai_sequence_number IS NOT NULL THEN
426   		OPEN c_sca (
427   			p_person_id,
428   			p_admission_appl_number,
429   			p_nominated_course_cd,
430   			p_acai_sequence_number);
431   		FETCH c_sca INTO v_person_id;
432   		IF c_sca%FOUND = TRUE THEN
433   			CLOSE c_sca;
434   			p_message_name := 'IGS_AD_CANNOT_UPD_ENR_INFO';
435   			p_update_non_enrol_detail_ind := 'Y';
436   			RETURN FALSE;
437   		END IF;
438   		CLOSE c_sca;
439   	END IF;
440   	RETURN TRUE;
441   END;
442    EXCEPTION
443   	WHEN OTHERS THEN
444   		         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
445 				 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_update');
446 				 IGS_GE_MSG_STACK.ADD;
447 				 APP_EXCEPTION.RAISE_EXCEPTION;
448   END admp_val_acai_update;
449   --
450   -- Validate delete of an IGS_AD_PS_APPL_INST record.
451   FUNCTION admp_val_acai_delete(
452   p_person_id IN NUMBER ,
453   p_admission_appl_number IN NUMBER ,
454   p_adm_outcome_status IN VARCHAR2 ,
455   p_message_name OUT NOCOPY VARCHAR2 ,
456   p_return_type OUT NOCOPY VARCHAR2 )
457   RETURN BOOLEAN AS
458   BEGIN	-- admp_val_acai_delete
459   	-- Validate delete of an IGS_AD_PS_APPL_INST record
460   DECLARE
461   	CURSOR c_aal IS
462   		SELECT	'x'
463   		FROM	IGS_AD_APPL_LTR
464   		WHERE	person_id 		= p_person_id AND
465   			admission_appl_number 	= p_admission_appl_number;
466   	CURSOR c_aas IS
467   		SELECT 	'x'
468   		FROM	IGS_AD_APPL 	aa,
469   			IGS_AD_APPL_STAT aas
470   		WHERE	aa.person_id 			= p_person_id AND
471   			aa.admission_appl_number 	= p_admission_appl_number AND
472   			aas.adm_appl_status 		= aa.adm_appl_status AND
473   			aas.s_adm_appl_status 		= 'WITHDRAWN';
474   	v_aal_exists	VARCHAR2(1);
475   	v_aas_exists	VARCHAR2(1);
476   	cst_error	CONSTANT VARCHAR2(1) := 'E';
477   	cst_warn	CONSTANT VARCHAR2(1) := 'W';
478   	v_s_adm_outcome_status	igs_ad_ou_stat.s_adm_outcome_status%TYPE := IGS_AD_GEN_008.ADMP_GET_SAOS(p_adm_outcome_status);
479   BEGIN
480   	-- Set the default message number
481   	p_message_name := NULL;
482   	-- Validate the system admission application status.
483   	OPEN c_aas;
484   	FETCH c_aas INTO v_aas_exists;
485   	IF c_aas%FOUND THEN
486   		CLOSE c_aas;
487   		p_message_name := 'IGS_AD_NOTDEL_ADMPRG_APPL';
488   		p_return_type := cst_error;
489   		RETURN FALSE;
490   	END IF;
491   	CLOSE c_aas;
492   	-- Validate the system admission outcome status
493   	IF NVL(v_s_adm_outcome_status, 'NULL') <> 'PENDING' THEN
494   		p_message_name := 'IGS_AD_CANDEL_ADMPRG_APPL';
495   		p_return_type := cst_error;
496   		RETURN FALSE;
497   	END IF;
498   	-- Validate if correspondence has been sent
499   	OPEN c_aal;
500   	FETCH c_aal INTO v_aal_exists;
501   	IF c_aal%FOUND THEN
502   		CLOSE c_aal;
503   		p_message_name := 'IGS_AD_CANDEL_ADMPRG_COR_EXIS';
504   		p_return_type := cst_error;
505   		RETURN FALSE;
506   	END IF;
507   	CLOSE c_aal;
508   	RETURN TRUE;
509   EXCEPTION
510   	WHEN OTHERS THEN
511   		IF c_aas%ISOPEN THEN
512   			CLOSE c_aas;
513   		END IF;
514   		IF c_aal%ISOPEN THEN
515   			CLOSE c_aal;
516   		END IF;
517   		RAISE;
518   END;
519   EXCEPTION
520     	WHEN OTHERS THEN
521            FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
522 		   FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_delete');
523 		   IGS_GE_MSG_STACK.ADD;
524 		   APP_EXCEPTION.RAISE_EXCEPTION;
525   END admp_val_acai_delete;
526   --
527   -- Validate change of preferences.
528   FUNCTION admp_val_chg_of_pref(
529   p_adm_cal_type IN VARCHAR2 ,
530   p_adm_ci_sequence_number IN NUMBER ,
531   p_admission_cat IN VARCHAR2 ,
532   p_s_admission_process_type IN VARCHAR2 ,
533   p_course_cd IN VARCHAR2 ,
534   p_crv_version_number IN NUMBER ,
535   p_acad_cal_type IN VARCHAR2 ,
536   p_location_cd IN VARCHAR2 ,
537   p_attendance_mode IN VARCHAR2 ,
538   p_attendance_type IN VARCHAR2 ,
539   p_message_name OUT NOCOPY VARCHAR2 )
540   RETURN BOOLEAN AS
541   BEGIN	-- admp_val_chg_of_pref
542   	-- Description: Validate change of preferences
543   DECLARE
544   	v_chng_of_pref_dt_alias
545   				IGS_AD_CAL_CONF.adm_appl_chng_of_pref_dt_alias%TYPE;
546   	v_chng_of_pref_dt	DATE;
547   	CURSOR	c_sacco IS
548   		SELECT	sacco.adm_appl_chng_of_pref_dt_alias
549   		FROM	IGS_AD_CAL_CONF	sacco
550   		WHERE	sacco.s_control_num 	= 1;
551   BEGIN
552   	p_message_name := NULL;
553   	OPEN c_sacco;
554   	FETCH c_sacco INTO v_chng_of_pref_dt_alias;
555   	CLOSE c_sacco;
556   	IF v_chng_of_pref_dt_alias IS NOT NULL THEN
557   		v_chng_of_pref_dt := IGS_AD_GEN_003.ADMP_GET_ADM_PERD_DT (
558   						v_chng_of_pref_dt_alias,
559   						p_adm_cal_type,
560   						p_adm_ci_sequence_number,
561   						p_admission_cat,
562   						p_s_admission_process_type,
563   						p_course_cd,
564   						p_crv_version_number,
565   						p_acad_cal_type,
566   						p_location_cd,
567   						p_attendance_mode,
568   						p_attendance_type);
569   		IF v_chng_of_pref_dt IS NOT NULL AND
570   			TRUNC(v_chng_of_pref_dt) < TRUNC(SYSDATE) THEN
571   			p_message_name := 'IGS_AD_PREFS_NOT_CHANGED';
572   			RETURN FALSE;
573   		END IF;
574   	END IF;
575   	RETURN TRUE;
576   EXCEPTION
577   	WHEN OTHERS THEN
578   		IF (c_sacco%ISOPEN) THEN
579   			CLOSE c_sacco;
580   		END IF;
581   	RAISE;
582   END;
583   EXCEPTION
584   	WHEN OTHERS THEN
585   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
586 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_chg_of_pref');
587 			 IGS_GE_MSG_STACK.ADD;
588 			 APP_EXCEPTION.RAISE_EXCEPTION;
589  END admp_val_chg_of_pref;
590   --
591 
592   -- Validate the course code of the admission application.
593   FUNCTION admp_val_acai_course(
594   p_course_cd IN VARCHAR2 ,
595   p_version_number IN NUMBER ,
596   p_admission_cat IN VARCHAR2 ,
597   p_s_admission_process_type IN VARCHAR2 ,
598   p_acad_cal_type IN VARCHAR2 ,
599   p_acad_ci_sequence_number IN NUMBER ,
600   p_adm_cal_type IN VARCHAR2 ,
601   p_adm_ci_sequence_number IN NUMBER ,
602   p_appl_dt IN DATE ,
603   p_late_appl_allowed IN VARCHAR2 ,
604   p_offer_ind IN VARCHAR2,
605   p_crv_version_number OUT NOCOPY NUMBER ,
606   p_message_name OUT NOCOPY VARCHAR2 ,
607   p_return_type OUT NOCOPY VARCHAR2 )
608   RETURN BOOLEAN AS
609   BEGIN	-- admp_val_acai_course
610   	-- Validate the course code of the admission application.
611   	-- Validations are performed against the course version
612   	-- and against the course offering option.
613   DECLARE
614   	CURSOR c_crv IS
615   		SELECT	version_number
616   		FROM	IGS_PS_VER
617   		WHERE	course_cd 	= p_course_cd;
618   	v_crv_rec		c_crv%ROWTYPE;
619   	cst_error		CONSTANT VARCHAR2(1) := 'E';
620   	cst_warn		CONSTANT VARCHAR2(1) := 'W';
621   	v_record_found		BOOLEAN := FALSE;
622   	v_exit_loop		BOOLEAN := FALSE;
623   	v_message_name		VARCHAR2(30) := NULL;
624   	v_version_number	VARCHAR2(3);
625   	v_return_type		VARCHAR2(1);
626   	v_late_ind		VARCHAR2(1)	:= 'N';
627   BEGIN
628   	-- Set the default message number
629   	p_message_name := NULL;
630   	-- Validate the input parameters
631   	IF p_admission_cat IS NULL OR
632   			p_s_admission_process_type IS NULL OR
633   			p_acad_cal_type IS NULL OR
634   			p_acad_ci_sequence_number IS NULL OR
635   			p_adm_cal_type IS NULL OR
636   			p_adm_ci_sequence_number IS NULL THEN
637   		p_message_name := 'IGS_AD_PRG_CANVALID_ADMCAT';
638   		p_return_type := cst_error;
639   		RETURN FALSE;
640   	END IF;
641   	FOR v_crv_rec IN c_crv LOOP
642   		-- Restrict the IGS_PS_VER records to match
643   		-- on input parameters.
644   		IF p_version_number IS NULL OR
645   				p_version_number = v_crv_rec.version_number THEN
646   			v_message_name := NULL;
647   			v_return_type := NULL;
648   			v_record_found := TRUE;
649   			-- Validate the course version data
650   			IF IGS_AD_VAL_CRS_ADMPERD.admp_val_coo_crv(
651   							p_course_cd,
652   							v_crv_rec.version_number,
653   							p_s_admission_process_type,
654   							p_offer_ind,
655   							v_message_name) = FALSE THEN
656   				v_return_type := cst_error;
657   				GOTO continue;
658   			END IF;
659   			IF IGS_AD_VAL_CRS_ADMPERD.admp_val_coo_adm_cat(
660   							p_course_cd,
661   							v_crv_rec.version_number,
662   							p_acad_cal_type,
663   							NULL,
664   							NULL,
665   							NULL,
666   							p_admission_cat,
667   							v_message_name) = FALSE THEN
668   				v_return_type := cst_error;
669   				GOTO continue;
670   			END IF;
671   			IF IGS_AD_VAL_ACAI.admp_val_acai_coo(
672   							p_course_cd,
673   							v_crv_rec.version_number,
674   							NULL,
675   							NULL,
676   							NULL,
677   							p_acad_cal_type,
678   							p_acad_ci_sequence_number,
679   							p_adm_cal_type,
680   							p_adm_ci_sequence_number,
681   							p_admission_cat,
682   							p_s_admission_process_type,
683   							p_offer_ind,
684   							p_appl_dt,
685   							p_late_appl_allowed,
686   							'N',	-- Deferred application.
687   							v_message_name,
688   							v_return_type,
689   							v_late_ind) = FALSE THEN
690   				IF v_return_type = cst_error THEN
691   					GOTO continue;
692   				END IF;
693   			END IF;
694   			-- If this point is reached, then all error validations have been successful,
695   			-- however, there may be a warning
696   			p_crv_version_number := v_crv_rec.version_number;
697   			p_message_name := v_message_name;
698   			p_return_type := v_return_type;
699   			v_exit_loop := TRUE;
700   			EXIT;
701   		END IF;
702   		<< continue >>
703   			NULL;
704   	END LOOP; -- v_crv_rec IN c_crv
705   	IF v_exit_loop  THEN
706   		IF v_message_name IS NULL THEN
707   			RETURN TRUE;
708   		ELSE
709   			RETURN FALSE;
710   		END IF;
711   	END IF;
712   	IF NOT v_record_found THEN
713   		p_return_type := NULL;
714   		RETURN TRUE;
715   	END IF;
716   	IF p_version_number IS NOT NULL THEN
717   		-- Only one course version was processed.
718   		p_message_name := v_message_name;
719   		p_return_type := v_return_type;
720   	ELSE
721   		p_message_name := 'IGS_AD_PRG_NOTVALID_ADMAPPL';
722   		p_return_type := cst_error;
723   	END IF;
724   	-- Return the default value
725   	RETURN FALSE;
726   END;
727   EXCEPTION
728   	WHEN OTHERS THEN
729   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
730 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_course');
731 			 IGS_GE_MSG_STACK.ADD;
732 			 APP_EXCEPTION.RAISE_EXCEPTION;
733  END admp_val_acai_course;
734   --
735   -- Perform encumbrance check for admission_course_appl_instance.course_cd
736   FUNCTION admp_val_acai_encmb(
737   p_person_id IN NUMBER ,
738   p_course_cd IN VARCHAR2 ,
739   p_adm_cal_type IN VARCHAR2 ,
740   p_adm_ci_sequence_number IN NUMBER ,
741   p_course_encmb_chk_ind IN VARCHAR2 ,
742   p_offer_ind IN VARCHAR2 ,
743   p_message_name OUT NOCOPY VARCHAR2 ,
744   p_return_type OUT NOCOPY VARCHAR2 )
745   RETURN BOOLEAN AS
746   BEGIN	-- admp_val_acai_encmb
747   	-- Perform encumbrance checks for the admission_course_appl_instance.course_cd.
748   DECLARE
749   	v_message_name		VARCHAR2(30) := NULL;
750   	v_encmb_check_dt	DATE;
751   	cst_error		CONSTANT VARCHAR2(1) := 'E';
752   	cst_warn		CONSTANT VARCHAR2(1) := 'W';
753   BEGIN
754   	-- Set the default message number
755   	p_message_name := NULL;
756   	IF p_course_encmb_chk_ind = 'Y' THEN
757   		-- Get the encumbrance checking date.
758   		v_encmb_check_dt := NVL(IGS_AD_GEN_006.ADMP_GET_ENCMB_DT(
759   						p_adm_cal_type,
760   						p_adm_ci_sequence_number),SYSDATE);	--arvsrini igsm
761  /* 		IF v_encmb_check_dt IS NULL THEN
762 
763 			IF p_offer_ind = 'Y' THEN
764   				p_message_name := 'IGS_AD_ENCUMB_CANNOT_PERFORM';
765   				p_return_type := cst_error;
766   			ELSE
767   				p_message_name := 'IGS_AD_ENCUMB_CHK_NOT_PERFORM';
768   				p_return_type := cst_warn;
769   			END IF;
770   			RETURN FALSE;
771   		END IF;
772   */
773 		-- Validate for exclusion or suspension from the course
774   		IF IGS_EN_VAL_ENCMB.enrp_val_excld_crs(
775   						p_person_id,
776   						p_course_cd,
777   						v_encmb_check_dt,
778   						v_message_name) = FALSE THEN
779   			IF p_offer_ind = 'Y' THEN
780   				p_message_name := 'IGS_AD_PRSN_ENCUMB_EXCLUDING';
781   				p_return_type := cst_error;
782   			ELSE
783   				p_message_name := 'IGS_AD_PRSN_ENCUMBRAN_SUSPEND';
784   				p_return_type := cst_warn;
785   			END IF;
786   			RETURN FALSE;
787   		END IF;
788   	END IF;
789   	-- Return the default value
790   	RETURN TRUE;
791   END;
792   EXCEPTION
793   	WHEN OTHERS THEN
794   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
795 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_encmb');
796 			 IGS_GE_MSG_STACK.ADD;
797 			 APP_EXCEPTION.RAISE_EXCEPTION;
798  END admp_val_acai_encmb;
799   --
800   -- Validate course appl process type against the student course attempt.
801   FUNCTION admp_val_aca_sca(
802   p_person_id IN NUMBER ,
803   p_course_cd IN VARCHAR2 ,
804   p_appl_dt IN DATE ,
805   p_admission_cat IN VARCHAR2 ,
806   p_s_admission_process_type IN VARCHAR2 ,
807   p_fee_cat IN VARCHAR2 ,
808   p_correspondence_cat IN VARCHAR2 ,
809   p_enrolment_cat IN VARCHAR2 ,
810   p_offer_ind IN VARCHAR2 ,
811   p_message_name OUT NOCOPY VARCHAR2 ,
812   p_return_type OUT NOCOPY VARCHAR2 )
813   RETURN BOOLEAN AS
814   BEGIN	-- admp_val_aca_process
815   	-- Validate that the nominated course admission application is
816   	-- valid for the admission application system process type and
817   	-- any existing course attempts the student may have.
818   DECLARE
819   	CURSOR c_sca IS
820   		SELECT	course_attempt_status,
821   			fee_cat,
822   			correspondence_cat,
823   			discontinued_dt
824   		FROM	IGS_EN_STDNT_PS_ATT
825   		WHERE	person_id = p_person_id AND
826   			course_cd = p_course_cd;
827   	CURSOR c_fcm (
828   		cp_fee_cat		IGS_EN_STDNT_PS_ATT.fee_cat%TYPE) IS
829   		SELECT	'x'
830   		FROM	IGS_FI_FEE_CAT_MAP
831   		WHERE	admission_cat 	= p_admission_cat AND
832   			fee_cat		= cp_fee_cat;
833 
834   	CURSOR c_ccm (
835   		cp_correspondence_cat		IGS_EN_STDNT_PS_ATT.correspondence_cat%TYPE) IS
836   		SELECT	'x'
837   		FROM	IGS_CO_CAT_MAP
838   		WHERE	admission_cat 		= p_admission_cat AND
839   			correspondence_cat	= cp_correspondence_cat;
840 
841   	CURSOR c_scae IS
842   		SELECT	enrolment_cat
843   		FROM	IGS_AS_SC_ATMPT_ENR 	scae,
844   			IGS_CA_INST 		ci
845   		WHERE	person_id		= p_person_id AND
846   			course_cd		= p_course_cd AND
847   			scae.cal_type		= ci.cal_type AND
848   			scae.ci_sequence_number = ci.sequence_number
849   		ORDER BY ci.start_dt DESC;
850   	CURSOR c_ecm (
851   		cp_enrolment_cat	IGS_AS_SC_ATMPT_ENR.enrolment_cat%TYPE) IS
852   		SELECT	'x'
853   		FROM	IGS_EN_CAT_MAPPING
854   		WHERE	admission_cat		= p_admission_cat AND
855   			enrolment_cat		= cp_enrolment_cat ;
856   	cst_error		CONSTANT VARCHAR2(1) := 'E';
857   	cst_warn		CONSTANT VARCHAR2(1) := 'W';
858   	v_sca_rec		c_sca%ROWTYPE;
859   	v_scae_rec		c_scae%ROWTYPE;
860   	v_fcm_exists		VARCHAR2(1);
861   	v_ccm_exists		VARCHAR2(1);
862   	v_ecm_exists		VARCHAR2(1);
863   	v_message_name		VARCHAR2(30) := NULL;
864   BEGIN
865   	p_message_name := NULL;
866   	OPEN c_sca;
867   	FETCH c_sca INTO v_sca_rec;
868   	IF (c_sca%NOTFOUND) THEN
869   		CLOSE c_sca;
870   		IF p_s_admission_process_type = 'RE-ADMIT' THEN
871   			p_return_type := cst_error;
872   			p_message_name := 'IGS_AD_APPL_NOT_EXISTING_STUD';
873   			RETURN FALSE;
874   		END IF;
875   		RETURN TRUE;
876   	END IF;
877   	CLOSE c_sca;
878   	-- Validate re-admission
879   	IF p_s_admission_process_type <> 'RE-ADMIT' THEN
880   		-- Validate against all other system admission process types
881   		IF v_sca_rec.course_attempt_status NOT IN ('DELETED',  'UNCONFIRM') THEN
882   			p_return_type := cst_error;
883   			p_message_name := 'IGS_AD_APPL_EXISTING_STUDPRG';
884   			RETURN FALSE;
885   		END IF;
886   		RETURN TRUE;
887   	END IF;
888   	IF (v_sca_rec.course_attempt_status <> 'DISCONTIN')  THEN
889   		p_message_name := 'IGS_AD_APPL_CANNOT_READMITTED';
890   		p_return_type := cst_error;
891   		RETURN FALSE;
892   	END IF;
893   	-- Validate against any existing student course transfer details
894   	IF IGS_AD_VAL_ACA.enrp_val_sca_trnsfr(
895   					p_person_id,
896   					p_course_cd,
897   					NULL,
898   					'A',
899   					v_message_name) = FALSE THEN
900   		p_return_type := cst_error;
901   		p_message_name := v_message_name;
902   		RETURN FALSE;
903   	END IF;
904   	-- Only validate the student course attempt fee category when
905   	-- none has been specified for the admission course application instance.
906   	IF p_fee_cat IS NULL AND
907   		v_sca_rec.fee_cat IS NOT NULL THEN
908   		-- Validate the Student course Attempt Fee Category Mapping.
909   		OPEN c_fcm (
910   			v_sca_rec.fee_cat);
911   		FETCH c_fcm INTO v_fcm_exists;
912   		IF (c_fcm%NOTFOUND) THEN
913   			CLOSE c_fcm;
914   			IF p_offer_ind = 'Y' THEN
915   				p_message_name := 'IGS_AD_FEECAT_PRGAPPL';
916   				p_return_type := cst_error;
917   			ELSE
918   				p_message_name := 'IGS_AD_FEECAT_PRG_APPL_READM';
919   				p_return_type := cst_warn;
920   			END IF;
921   			RETURN FALSE;
922   		END IF;
923   		CLOSE c_fcm;
924   	END IF;
925   	-- Only validate the student course attempt correspondence category
926   	-- when none has been specified for the admission course application instance.
927   	IF p_correspondence_cat IS NULL AND
928   			v_sca_rec.correspondence_cat IS NOT NULL THEN
929   		-- Validate the Student course Attempt Correspondence Category Mapping.
930   		OPEN c_ccm (
931   			v_sca_rec.correspondence_cat);
932   		FETCH c_ccm INTO v_ccm_exists;
933   		IF (c_ccm%NOTFOUND) THEN
934   			CLOSE c_ccm;
935   			IF p_offer_ind = 'Y' THEN
936   				p_message_name := 'IGS_AD_CORCAT_PRG_APPL';
937   				p_return_type := cst_error;
938   			ELSE
939   				p_message_name := 'IGS_AD_CORCAT_PRGAPPLICANT';
940   				p_return_type := cst_warn;
941   			END IF;
942   			RETURN FALSE;
943   		END IF;
944   		CLOSE c_ccm;
945   	END IF;
946   	-- Only validate the student course attempt enrolment category
947   	-- when none has been specified for the admission course application instance.
948   	IF p_enrolment_cat IS NULL THEN
949   		-- Validate the Student course Attempt Enrolment Category Mapping.
950   		OPEN c_scae;
951   		FETCH c_scae INTO v_scae_rec;
952   		IF (c_scae%FOUND) THEN
953   			CLOSE c_scae;
954   			OPEN c_ecm (
955   				v_scae_rec.enrolment_cat);
956   			FETCH c_ecm INTO v_ecm_exists;
957   			IF (c_ecm%NOTFOUND) THEN
958   				CLOSE c_ecm;
959   				IF p_offer_ind = 'Y' THEN
960   					p_message_name := 'IGS_AD_ENRCAT_PRG_APPL';
961   					p_return_type := cst_error;
962   				ELSE
963   					p_message_name := 'IGS_AD_ENRCAT_PRGAPPLICANT';
964   					p_return_type := cst_warn;
965   				END IF;
966   				RETURN FALSE;
967   			END IF;
968   			CLOSE c_ecm;
969   		ELSE
970   			CLOSE c_scae;
971   		END IF;
972   		-- Validate the discontinued date
973   		IF p_appl_dt IS NOT NULL AND
974   				v_sca_rec.discontinued_dt IS NOT NULL AND
975   				MONTHS_BETWEEN(p_appl_dt, v_sca_rec.discontinued_dt) <= 12 THEN
976   			p_message_name := 'IGS_AD_APPL_ENROLLED_12MONTHS';
977   			p_return_type := cst_warn;
978   			RETURN FALSE;
979   		END IF;
980   	END IF;
981   	RETURN TRUE;
982   EXCEPTION
983   	WHEN OTHERS THEN
984   		IF c_sca%ISOPEN THEN
985   			CLOSE c_sca;
986   		END IF;
987   		IF c_fcm%ISOPEN THEN
988   			CLOSE c_fcm;
989   		END IF;
990   		IF c_ccm%ISOPEN THEN
991   			CLOSE c_ccm;
992   		END IF;
993   		IF c_scae%ISOPEN THEN
994   			CLOSE c_scae;
995   		END IF;
996   		IF c_ecm%ISOPEN THEN
997   			CLOSE c_ecm;
998   		END IF;
999   		RAISE;
1000   END;
1001   EXCEPTION
1002   	WHEN OTHERS THEN
1003   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1004 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_aca_sca');
1005 			 IGS_GE_MSG_STACK.ADD;
1006 			 APP_EXCEPTION.RAISE_EXCEPTION;
1007  END admp_val_aca_sca;
1008   --
1009  -- Validate the adm course application instance course offering pattern.
1010   FUNCTION admp_val_acai_cop(
1011   p_course_cd IN VARCHAR2 ,
1012   p_version_number IN NUMBER ,
1013   p_location_cd IN VARCHAR2 ,
1014   p_attendance_mode IN VARCHAR2 ,
1015   p_attendance_type IN VARCHAR2 ,
1016   p_acad_cal_type IN VARCHAR2 ,
1017   p_acad_ci_sequence_number IN NUMBER ,
1018   p_adm_cal_type IN VARCHAR2 ,
1019   p_adm_ci_sequence_number IN NUMBER ,
1020   p_admission_cat IN VARCHAR2 ,
1021   p_s_admission_process_type IN VARCHAR2 ,
1022   p_offer_ind IN VARCHAR2 ,
1023   p_appl_dt IN DATE ,
1024   p_late_appl_allowed IN VARCHAR2 ,
1025   p_deferred_appl IN VARCHAR2 ,
1026   p_message_name OUT NOCOPY VARCHAR2 ,
1027   p_return_type OUT NOCOPY VARCHAR2 ,
1028   p_late_ind OUT NOCOPY VARCHAR2 )
1029   RETURN BOOLEAN AS
1030   BEGIN	-- admp_val_acai_cop
1031   	-- Validate the admission course application instance course offering pattern
1032   DECLARE
1033   	cst_error	CONSTANT VARCHAR2(1) := 'E';
1034   	cst_warn	CONSTANT VARCHAR2(1) := 'W';
1035   	v_ret_val		BOOLEAN	:= TRUE;
1036   	v_location_cd		IGS_AD_PS_APPL_INST.location_cd%TYPE;
1037   	v_attendance_mode	IGS_AD_PS_APPL_INST.attendance_mode%TYPE;
1038   	v_attendance_type	IGS_AD_PS_APPL_INST.attendance_type%TYPE;
1039   	v_message_name		VARCHAR2(30);
1040   	v_late_ind		VARCHAR2(1)	:= 'N';
1041   	v_return_type		VARCHAR2(1);
1042   BEGIN
1043   	p_message_name := NULL;
1044   	p_late_ind := 'N';
1045   	-- Validate the admission process category input parameters
1046   	-- All must be set for validation to occur
1047   	IF (p_acad_cal_type IS NULL OR
1048   			p_acad_ci_sequence_number IS NULL OR
1049   			p_adm_cal_type IS NULL OR
1050   			p_adm_ci_sequence_number IS NULL OR
1051   			p_admission_cat IS NULL OR
1052   			p_s_admission_process_type IS NULL) THEN
1053   		p_message_name := 'IGS_AD_PRGOFOP_CANNOT_VALID' ;
1054   		p_return_type := cst_error;
1055   		RETURN FALSE;
1056   	END IF;
1057   	-- course offering pattern is offered
1058   	IF p_offer_ind = 'Y'  THEN
1059   		-- All components of the course offering pattern must be specified.
1060   		IF (p_course_cd IS NULL OR
1061   				p_version_number IS NULL OR
1062   				p_location_cd IS NULL OR
1063   				p_attendance_mode IS NULL OR
1064   				p_attendance_type IS NULL) THEN
1065   			p_message_name := 'IGS_AD_PRGOFOP_NOVALIDATE_COM';
1066   			p_return_type := cst_error;
1067   			RETURN FALSE;
1068   		END IF;
1069   	ELSE	-- course offering pattern is nominated
1070   		-- course component of course offering option must be set
1071   		-- (other components may be null).
1072   		IF (p_course_cd IS NULL OR
1073   				p_version_number IS NULL) THEN
1074   			p_message_name := 'IGS_AD_PRGOFOP_CANVLD_PRGCOMP';
1075   			p_return_type := cst_error;
1076   			RETURN FALSE;
1077   		END IF;
1078   	END IF;
1079   	-- Set the IGS_AD_LOCATION code, attendance mode and attendance type
1080   	v_location_cd 	  := p_location_cd;
1081   	v_attendance_mode := p_attendance_mode;
1082   	v_attendance_type := p_attendance_type;
1083   	-- Validate the course offering pattern
1084   	IF NOT IGS_AD_VAL_ACAI.admp_val_acai_coo (
1085   					p_course_cd,
1086   					p_version_number,
1087   					v_location_cd,
1088   					v_attendance_mode,
1089   					v_attendance_type,
1090   					p_acad_cal_type,
1091   					p_acad_ci_sequence_number,
1092   					p_adm_cal_type,
1093   					p_adm_ci_sequence_number,
1094   					p_admission_cat,
1095   					p_s_admission_process_type,
1096   					p_offer_ind,
1097   					p_appl_dt,
1098   					p_late_appl_allowed,
1099   					p_deferred_appl,
1100   					v_message_name,
1101   					v_return_type,
1102   					v_late_ind) THEN
1103   		p_message_name := v_message_name;
1104   		p_return_type := v_return_type;
1105   		p_late_ind := v_late_ind;
1106   		RETURN FALSE;
1107   	END IF;
1108   	-- admission course application instance course offering pattern is valid
1109   	p_return_type := NULL;
1110   	RETURN TRUE;
1111   END;
1112   EXCEPTION
1113   	WHEN OTHERS THEN
1114   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1115 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_cop');
1116 			 IGS_GE_MSG_STACK.ADD;
1117 			 APP_EXCEPTION.RAISE_EXCEPTION;
1118  END admp_val_acai_cop;
1119   --
1120   -- Validate the adm course application instance course offering option.
1121   FUNCTION admp_val_acai_coo(
1122   p_course_cd IN VARCHAR2 ,
1123   p_version_number IN NUMBER ,
1124   p_location_cd IN VARCHAR2 ,
1125   p_attendance_mode IN VARCHAR2 ,
1126   p_attendance_type IN VARCHAR2 ,
1127   p_acad_cal_type IN VARCHAR2 ,
1128   p_acad_ci_sequence_number IN NUMBER ,
1129   p_adm_cal_type IN VARCHAR2 ,
1130   p_adm_ci_sequence_number IN NUMBER ,
1131   p_admission_cat IN VARCHAR2 ,
1132   p_s_admission_process_type IN VARCHAR2 ,
1133   p_offer_ind IN VARCHAR2 ,
1134   p_appl_dt IN DATE ,
1135   p_late_appl_allowed IN VARCHAR2 ,
1136   p_deferred_appl IN VARCHAR2 ,
1137   p_message_name OUT NOCOPY VARCHAR2 ,
1138   p_return_type OUT NOCOPY VARCHAR2 ,
1139   p_late_ind OUT NOCOPY VARCHAR2 )
1140   RETURN BOOLEAN AS
1141   BEGIN	-- admp_val_acai_coo
1142   	-- * This module assumes the course code component of the course offering
1143   	--   option
1144   	--   has already been validated (via a call to admp_val_acai_course).
1145   	-- * On nomination of a course offering option a blank value in the IGS_AD_LOCATION
1146   	--   code,
1147   	--   attendance mode or attendance type component of the course offering option
1148   	--   should be interpreted as any valid value.
1149   	-- * On offer of a course offering option all components of the course offering
1150   	--   option should be set.
1151   DECLARE
1152   	CURSOR c_coo IS
1153   		SELECT	location_cd,
1154   			attendance_mode,
1155   			attendance_type
1156   		FROM	IGS_PS_OFR_OPT
1157   		WHERE	course_cd 	= p_course_cd AND
1158   			version_number 	= p_version_number AND
1159   			cal_type 	= p_acad_cal_type AND
1160                         delete_flag= 'N';
1161   	CURSOR c_cop (
1162   		cp_course_cd			IGS_AD_PS_APPL_INST.course_cd%TYPE,
1163   		cp_version_number			IGS_AD_PS_APPL_INST.crv_version_number%TYPE,
1164   		cp_acad_cal_type			IGS_AD_APPL.acad_cal_type%TYPE,
1165   		cp_acad_ci_sequence_number	IGS_AD_APPL.acad_ci_sequence_number%TYPE,
1166   		cp_location_cd			IGS_AD_PS_APPL_INST.location_cd%TYPE,
1167   		cp_attendance_mode		IGS_AD_PS_APPL_INST.attendance_mode%TYPE,
1168   		cp_attendance_type		IGS_AD_PS_APPL_INST.attendance_type%TYPE) IS
1169   		SELECT	'x'
1170   		FROM	IGS_PS_OFR_PAT
1171   		WHERE	course_cd 		= cp_course_cd AND
1172   			version_number 		= cp_version_number AND
1173   			cal_type 			= cp_acad_cal_type AND
1174   			ci_sequence_number 	= cp_acad_ci_sequence_number AND
1175   			location_cd 		= cp_location_cd AND
1176   			attendance_mode 		= cp_attendance_mode AND
1177   			attendance_type 		= cp_attendance_type AND
1178   			offered_ind 		= 'Y' AND
1179   			entry_point_ind 		= 'Y';
1180   	cst_error		CONSTANT VARCHAR2(1) := 'E';
1181   	cst_warn		CONSTANT VARCHAR2(1) := 'W';
1182   	v_cop_exists		VARCHAR2(1);
1183   	v_location_cd		IGS_AD_PS_APPL_INST.location_cd%TYPE;
1184   	v_attendance_mode	IGS_AD_PS_APPL_INST.attendance_mode%TYPE;
1185   	v_attendance_type		IGS_AD_PS_APPL_INST.attendance_type%TYPE;
1186   	v_message_name		VARCHAR2(30);
1187   	v_record_found		BOOLEAN := FALSE;
1188   	v_cop_found		BOOLEAN := FALSE;
1189   	v_ac_match		BOOLEAN := FALSE;	-- admission process category
1190   	v_ap_match		BOOLEAN := FALSE;	-- admission period
1191   	v_ad_match		BOOLEAN := FALSE;	-- application date
1192   	v_coo_match		BOOLEAN := FALSE;	-- course offering option
1193   	v_exit_loop		NUMBER(1) := 0;
1194   BEGIN
1195   	p_message_name := NULL;
1196   	p_late_ind := 'N';
1197   	-- Validate input parameters. All must be set for validation to occur
1198   	IF p_acad_cal_type IS NULL OR
1199   			p_acad_ci_sequence_number IS NULL OR
1200   			p_adm_cal_type IS NULL OR
1201   			p_adm_ci_sequence_number IS NULL OR
1202   			p_admission_cat IS NULL OR
1203   			p_s_admission_process_type IS NULL THEN
1204   		p_message_name := 'IGS_AD_PRGOFOP_NOVALID_ADMPRC';
1205   		p_return_type := cst_error;
1206   		RETURN FALSE;
1207   	END IF;
1208   	-- course componenet of course offering option must be set.
1209   	IF p_course_cd IS NULL OR
1210   			p_version_number IS NULL THEN
1211   		p_message_name := 'IGS_AD_PRGOFOP_NOVALIDATE_PRG';
1212   		p_return_type := cst_error;
1213   		RETURN FALSE;
1214    	END IF;
1215   	-- Validate the course offering option data
1216   	FOR v_coo_rec IN c_coo LOOP
1217   		v_record_found := TRUE;
1218   		-- Restrict the course offering options to match on input parameters.
1219   		IF (p_location_cd IS NULL OR
1220   				p_location_cd = v_coo_rec.location_cd) AND
1221   				(p_attendance_mode IS NULL OR
1222   				p_attendance_mode = v_coo_rec.attendance_mode) AND
1223   				(p_attendance_type IS NULL OR
1224   				p_attendance_type = v_coo_rec.attendance_type) THEN
1225   			-- course Offering Option Match
1226   			v_coo_match := TRUE;
1227   			-- Check the existence of a course offering pattern that is both offered
1228   			-- and an entry point for the academic period of the admission application.
1229   			OPEN c_cop(
1230   				p_course_cd,
1231   				p_version_number,
1232   				p_acad_cal_type,
1233   				p_acad_ci_sequence_number,
1234   				v_coo_rec.location_cd,
1235   				v_coo_rec.attendance_mode,
1236   				v_coo_rec.attendance_type);
1237   			FETCH c_cop INTO v_cop_exists;
1238   			IF c_cop%NOTFOUND THEN
1239   				CLOSE c_cop;
1240   			ELSE
1241   				CLOSE c_cop;
1242   				v_cop_found := TRUE;
1243   				-- Determine if there is an Admission Category Match
1244   				IF IGS_AD_VAL_CRS_ADMPERD.admp_val_coo_adm_cat (
1245   								p_course_cd,
1246   								p_version_number,
1247   								p_acad_cal_type,
1248   								v_coo_rec.location_cd,
1249   								v_coo_rec.attendance_mode,
1250   								v_coo_rec.attendance_type,
1251   								p_admission_cat,
1252   								v_message_name) THEN
1253   					-- Admission Process Category Match
1254   					v_ac_match := TRUE;
1255   					-- Determine if the course offering pattern is valid for the admission
1256   					-- period
1257   					IF IGS_AD_VAL_CRS_ADMPERD.admp_val_coo_admperd (
1258   									p_adm_cal_type,
1259   									p_adm_ci_sequence_number,
1260   									p_admission_cat,
1261   									p_s_admission_process_type,
1262   									p_course_cd,
1263   									p_version_number,
1264   									p_acad_cal_type,
1265   									v_coo_rec.location_cd,
1266   									v_coo_rec.attendance_mode,
1267   									v_coo_rec.attendance_type,
1268   									v_message_name) THEN
1269   						-- The course offering pattern is valid for the admission process
1270   						-- category and the admission period
1271   						-- Admission Period Match
1272   						v_ap_match := TRUE;
1273   						-- Determine if the admission course application instance is late.
1274   						IF IGS_AD_VAL_ACAI.admp_val_acai_late (
1275   									p_appl_dt,
1276   									p_course_cd,
1277   									p_version_number,
1278   									p_acad_cal_type,
1279   									v_coo_rec.location_cd,
1280   									v_coo_rec.attendance_mode,
1281   									v_coo_rec.attendance_type,
1282   									p_adm_cal_type,
1283   									p_adm_ci_sequence_number,
1284   									p_admission_cat,
1285   									p_s_admission_process_type,
1286   									p_late_appl_allowed,
1287   									v_message_name) THEN
1288   							-- Application Date Valid
1289   							-- The course offering pattern is valid for the admission process
1290   							-- category and the admission period and is valid for the
1291   							-- application date.
1292   							v_ad_match := TRUE;
1293   							EXIT;
1294   						END IF;
1295   					END IF;
1296   				END IF;
1297   			END IF;
1298   		END IF;
1299   	END LOOP;
1300   	IF v_ad_match THEN
1301   		RETURN TRUE;
1302   	END IF;
1303   	-- No course offering option record found
1304   	IF NOT v_coo_match THEN
1305   		IF p_offer_ind = 'Y' THEN
1306   			p_message_name := 'IGS_AD_NOMINATED_PRG_NOTEXIST';
1307   			p_return_type := cst_error;
1308   		ELSE
1309   			IF p_deferred_appl = 'N' THEN
1310   				p_message_name := 'IGS_AD_NOMINATED_PRG_NOTEXIST';
1311   			ELSE
1312   				p_message_name := 'IGS_AD_POO_DFRD_ADM_PERIOD';
1313   			END IF;
1314   			p_return_type := cst_warn;
1315   		END IF;
1316   		RETURN FALSE;
1317   	END IF;
1318   	-- No course offering pattern record found
1319   	IF NOT v_cop_found THEN
1320   		IF p_offer_ind = 'Y' THEN
1321   			p_message_name := 'IGS_AD_PRGOFOP_OFR_ENRTYPOINT';
1322   			p_return_type := cst_error;
1323   		ELSE
1324   			IF p_deferred_appl = 'N' THEN
1325   				p_message_name := 'IGS_AD_NOMINATED_PRG_ENTRYPNT';
1326   			ELSE
1327   				p_message_name := 'IGS_AD_POO_PRG_OFRING_ADMPRD';
1328   			END IF;
1329   			p_return_type := cst_warn;
1330   		END IF;
1331   		RETURN FALSE;
1332   	END IF;
1333   	-- IF Admission Category Match
1334   	IF v_ac_match THEN
1335   		IF v_ap_match THEN
1336   			-- There must have been no Application Date Match
1337   			IF p_offer_ind = 'Y' THEN
1338   				p_message_name := 'IGS_AD_APPL_CLOSINGDT_PASSED';
1339   				p_return_type := cst_error;
1340   			ELSE
1341                         IF p_deferred_appl = 'N' THEN
1342                                    IF p_attendance_type IS NULL OR P_attendance_mode IS NULL THEN
1343                                           p_message_name := 'IGS_AD_APPL_CLOSINGDT_PASSED';
1344                                           p_return_type := cst_error;
1345                                     ELSE
1346                                         p_message_name := 'IGS_AD_APPLDT_HAS_PASSED';
1347                                           p_return_type := cst_warn;
1348                                     END IF;
1349                                 ELSE
1350                                         p_message_name := 'IGS_AD_POO_PRG_OFRING_LATEFEE';
1351                                            p_return_type := cst_warn;
1352                                 END IF;
1353                         END IF;
1354                      p_late_ind := 'Y';
1355                     RETURN FALSE;
1356 
1357   		END IF;
1358   		-- There must have been no Admission Period match
1359   		IF p_offer_ind = 'Y' THEN
1360   			p_message_name := 'IGS_AD_OFR_PRG_ENTRYPOINT_ADM';
1361   			p_return_type := cst_error;
1362   		ELSE
1363   			IF p_deferred_appl = 'N' THEN
1364   				p_message_name := 'IGS_AD_NOMINATE_PRG_OFR_ENTRY';
1365   			ELSE
1366   				p_message_name := 'IGS_AD_POO_PRG_OFRING_APPL';
1367   			END IF;
1368   			p_return_type := cst_warn;
1369   		END IF;
1370   		RETURN FALSE;
1371   	ELSE
1372   		-- There must have been no Admission Process Category Match
1373   		p_message_name := 'IGS_AD_PRG_VALIED_ADMCAT';
1374   		p_return_type := cst_error;
1375   		RETURN FALSE;
1376   	END IF;
1377   END;
1378   END admp_val_acai_coo;
1379   --
1380   -- Validate if the IGS_AD_PS_APPL_INST is late.
1381   FUNCTION admp_val_acai_late(
1382   p_appl_dt IN DATE ,
1383   p_course_cd IN VARCHAR2 ,
1384   p_crv_version_number IN NUMBER ,
1385   p_acad_cal_type IN VARCHAR2 ,
1386   p_location_cd IN VARCHAR2 ,
1387   p_attendance_mode IN VARCHAR2 ,
1388   p_attendance_type IN VARCHAR2 ,
1389   p_adm_cal_type IN VARCHAR2 ,
1390   p_adm_ci_sequence_number IN NUMBER ,
1391   p_admission_cat IN VARCHAR2 ,
1392   p_s_admission_process_type IN VARCHAR2 ,
1393   p_late_appl_allowed IN VARCHAR2 ,
1394   p_message_name OUT NOCOPY VARCHAR2 )
1395   RETURN BOOLEAN AS
1396   BEGIN	-- admp_val_acai_late
1397   	-- Validate if the IGS_AD_PS_APPL_INST is late.
1398   	-- Validate against the due date when late applications are not allowed.
1399   	-- Validate against the final date when late applications are allowed.
1400   DECLARE
1401   	CURSOR c_sacc IS
1402   		SELECT	adm_appl_due_dt_alias,
1403   			adm_appl_final_dt_alias
1404   		FROM	IGS_AD_CAL_CONF
1405   		WHERE	s_control_num 		= 1 AND
1406   			adm_appl_due_dt_alias 	IS NOT NULL AND
1407   			adm_appl_final_dt_alias IS NOT NULL;
1408   	v_sacc_rec		c_sacc%ROWTYPE;
1409   	v_final_dt		DATE := NULL;
1410   	v_due_dt 		DATE := NULL;
1411   BEGIN
1412   	-- Set the default message number
1413   	p_message_name := NULL;
1414   	-- Get the admission application due and final date aliases.
1415   	OPEN c_sacc;
1416   	FETCH c_sacc INTO v_sacc_rec;
1417   	IF c_sacc%NOTFOUND THEN
1418   		CLOSE c_sacc;
1419   		p_message_name := 'IGS_AD_CHK_ADMCAL_CONFIG' ;
1420   		RETURN TRUE;
1421   	END IF;
1422   	CLOSE c_sacc;
1423   	-- Validate for a late application.
1424   	IF p_late_appl_allowed = 'Y' THEN
1425   		-- Validate against the final date when late applications are allowed
1426   		-- Check the final date.
1427   		-- Get admission period final date.
1428   		v_final_dt := IGS_AD_GEN_003.ADMP_GET_ADM_PERD_DT(
1429   						v_sacc_rec.adm_appl_final_dt_alias,
1430   						p_adm_cal_type,
1431   						p_adm_ci_sequence_number,
1432   						p_admission_cat,
1433   						p_s_admission_process_type,
1434   						p_course_cd,
1435   						p_crv_version_number,
1436   						p_acad_cal_type,
1437   						p_location_cd,
1438   						p_attendance_mode,
1439   						p_attendance_type);
1440   		IF v_final_dt IS NOT NULL THEN
1441   			IF p_appl_dt > v_final_dt THEN
1442   				-- Admission course application instance is invalid
1443   				-- because the application date is after the due date
1444   				-- of the course offering option.
1445   				p_message_name := 'IGS_AD_APLDT_ADMAPL_FINALDT';
1446   				RETURN FALSE;
1447   			END IF;
1448   		END IF;
1449   	ELSE	-- p_late_appl_allowed = 'Y'
1450   		-- Validate against the due date when late applications are not allowed.
1451   		-- Check the final date.
1452   		-- Get admission period final date.
1453   		v_due_dt := IGS_AD_GEN_003.ADMP_GET_ADM_PERD_DT(
1454   						v_sacc_rec.adm_appl_due_dt_alias,
1455   						p_adm_cal_type,
1456   						p_adm_ci_sequence_number,
1457   						p_admission_cat,
1458   						p_s_admission_process_type,
1459   						p_course_cd,
1460   						p_crv_version_number,
1461   						p_acad_cal_type,
1462   						p_location_cd,
1463   						p_attendance_mode,
1464   						p_attendance_type);
1465   		IF v_due_dt IS NOT NULL THEN
1466   			IF p_appl_dt > v_due_dt THEN
1467   				-- Admission course application instance is invalid
1468   				-- because the application date is after the due date
1469   				-- of the course offering option.
1470   				p_message_name := 'IGS_AD_APPLDT_ADMAPPL_DUEDT';
1471   				RETURN FALSE;
1472   			END IF;
1473   		END IF;
1474   	END IF;
1475   	-- Return the default value
1476   	RETURN TRUE;
1477   EXCEPTION
1478     WHEN OTHERS THEN
1479       IF c_sacc%ISOPEN THEN
1480   	CLOSE c_sacc;
1481       END IF;
1482       RAISE;
1483   END;
1484  END admp_val_acai_late;
1485   --
1486   -- Validate the admission course appl instance offering option details.
1487   FUNCTION admp_val_acai_opt(
1488   p_course_cd IN VARCHAR2 ,
1489   p_version_number IN NUMBER ,
1490   p_acad_cal_type IN VARCHAR2 ,
1491   p_acad_ci_sequence_number IN NUMBER ,
1492   p_location_cd IN VARCHAR2 ,
1493   p_attendance_mode IN VARCHAR2 ,
1494   p_attendance_type IN VARCHAR2 ,
1495   p_adm_cal_type IN VARCHAR2 ,
1496   p_adm_ci_sequence_number IN NUMBER ,
1497   p_admission_cat IN VARCHAR2 ,
1498   p_s_admission_process_type IN VARCHAR2 ,
1499   p_offer_ind IN VARCHAR2 ,
1500   p_appl_dt IN DATE ,
1501   p_late_appl_allowed IN VARCHAR2 ,
1502   p_message_name OUT NOCOPY VARCHAR2 )
1503   RETURN BOOLEAN AS
1504   BEGIN	-- admp_val_acai_opt
1505   	-- Validate the admission course application instance offering option details.
1506   DECLARE
1507   	v_rec_found		BOOLEAN :=FALSE;
1508   	v_location_cd		IGS_PS_OFR_PAT.location_cd%TYPE;
1509   	v_attendance_mode	IGS_PS_OFR_PAT.attendance_mode%TYPE;
1510   	v_attendance_type		IGS_PS_OFR_PAT.attendance_type%TYPE;
1511   	v_message_name		VARCHAR2(30);
1512   	CURSOR c_acopv IS
1513   		SELECT	location_cd,
1514   			attendance_mode,
1515   			attendance_type
1516   		FROM	IGS_PS_OFR_PAT_OFERPAT_V
1517   		WHERE	course_cd		= p_course_cd AND
1518   			version_number		= p_version_number AND
1519   			acad_cal_type		= p_acad_cal_type AND
1520   			acad_ci_sequence_number	= p_acad_ci_sequence_number AND
1521   			adm_cal_type		= p_adm_cal_type AND
1522   			adm_ci_sequence_number	= p_adm_ci_sequence_number AND
1523   			admission_cat		= p_admission_cat AND
1524   			s_admission_process_type	= p_s_admission_process_type AND
1525   			(p_location_cd IS NULL OR
1526   				location_cd	= p_location_cd) AND
1527   			(p_attendance_mode IS NULL OR
1528   				attendance_mode	= p_attendance_mode) AND
1529   			(p_attendance_type IS NULL OR
1530   				attendance_type	= p_attendance_type) AND
1531   			(IGS_AD_GEN_013.ADMS_GET_COO_CRV(
1532   				course_cd,
1533   				version_number,
1534   				s_admission_process_type,
1535   				p_offer_ind) = 'Y') AND
1536   			(IGS_AD_GEN_013.ADMS_GET_ACAI_COO (
1537   				course_cd,
1538   				version_number,
1539   				location_cd,
1540   				attendance_mode,
1541   				attendance_type,
1542   				acad_cal_type,
1543   				acad_ci_sequence_number,
1544   				adm_cal_type,
1545   				adm_ci_sequence_number,
1546   				admission_cat,
1547   				s_admission_process_type,
1548   				p_offer_ind,
1549   				p_appl_dt,
1550   				p_late_appl_allowed,
1551   				'N') = 'Y');	-- Deferred application.
1552   --------------------------------------- SUB-FUNCTION---------------------------
1553   	FUNCTION admpl_val_param
1554   	RETURN BOOLEAN
1555   	AS
1556   	BEGIN	-- admpl_val_param
1557   		-- a sub-function that validates p_location_cd, p_attendance_mode,
1558   		-- p_attendance_type
1559   	DECLARE
1560   	BEGIN
1561   		v_message_name := NULL;
1562   		IF (p_location_cd IS NOT NULL AND
1563   				v_rec_found = TRUE) THEN
1564   			-- Check if the IGS_AD_LOCATION is open and whether IGS_AD_LOCATION type is correct
1565   			-- For bug # 1956374 changed the below call from IGS_AD_VAL_APCOO.crsp_val_loc_cd
1566   			IF IGS_PS_VAL_UOO.crsp_val_loc_cd (
1567   					p_location_cd,
1568   					v_message_name) = FALSE THEN
1569   	   			RETURN FALSE;
1570   			END IF;
1571   		END IF;
1572   		IF (p_attendance_mode IS NOT NULL AND
1573   				v_rec_found = TRUE) THEN
1574   	       		-- Check if the attendance mode is open
1575   			IF IGS_AD_VAL_APCOO.crsp_val_am_closed(
1576   					p_attendance_mode,
1577   					v_message_name) = FALSE THEN
1578   				RETURN FALSE;
1579   			END IF;
1580   		END IF;
1581   		IF (p_attendance_type IS NOT NULL AND
1582   				v_rec_found = TRUE) THEN
1583   			-- Check if the attendance type is open
1584   			IF IGS_AD_VAL_APCOO.crsp_val_att_closed (
1585   					p_attendance_type,
1586   					v_message_name) = FALSE THEN
1587   				RETURN FALSE;
1588   			END IF;
1589   		END IF;
1590   		RETURN TRUE;
1591   	END;
1592   	EXCEPTION
1593   		WHEN OTHERS THEN
1594          		          FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1595 						  FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admpl_val_param');
1596 						  IGS_GE_MSG_STACK.ADD;
1597 						  APP_EXCEPTION.RAISE_EXCEPTION;
1598   	END admpl_val_param;
1599   ----------------------------------------- MAIN ---------------------------------
1600   BEGIN
1601   	p_message_name := NULL;
1602   	IF p_location_cd IS NOT NULL OR
1603   		p_attendance_mode IS NOT NULL OR
1604   		p_attendance_type IS NOT NULL THEN
1605   		-- Check if the offering option is valid
1606   		OPEN c_acopv;
1607   		FETCH c_acopv INTO
1608   			v_location_cd,
1609   			v_attendance_mode,
1610   			v_attendance_type;
1611   		IF (c_acopv%FOUND) THEN
1612   			v_rec_found := TRUE;
1613   		END IF;
1614   		CLOSE c_acopv;
1615   		IF admpl_val_param = FALSE THEN
1616   			p_message_name := v_message_name;
1617   			RETURN FALSE;
1618   		END IF;
1619   	END IF;
1620   	RETURN TRUE;
1621   END;
1622   EXCEPTION
1623   	WHEN OTHERS THEN
1624   	                 FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1625 					 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_opt');
1626 					 IGS_GE_MSG_STACK.ADD;
1627 					 APP_EXCEPTION.RAISE_EXCEPTION;
1628  END admp_val_acai_opt;
1629   --
1630   -- Validate the admission course application unit set.
1631   FUNCTION admp_val_acai_us(
1632   p_unit_set_cd IN VARCHAR2 ,
1633   p_us_version_number IN NUMBER ,
1634   p_course_cd IN VARCHAR2 ,
1635   p_crv_version_number IN NUMBER ,
1636   p_acad_cal_type IN VARCHAR2 ,
1637   p_location_cd IN VARCHAR2 ,
1638   p_attendance_mode IN VARCHAR2 ,
1639   p_attendance_type IN VARCHAR2 ,
1640   p_admission_cat IN VARCHAR2 ,
1641   p_offer_ind IN VARCHAR2 ,
1642   p_unit_set_appl IN VARCHAR2 ,
1643   p_message_name OUT NOCOPY VARCHAR2 ,
1644   p_return_type OUT NOCOPY VARCHAR2 )
1645   RETURN BOOLEAN AS
1646   BEGIN 	-- admp_val_acai_us
1647   	-- Validate the admission course application unit set.
1648   	-- Validations are:
1649   	-- unit set may only be specified when the 'unit set' step exists for the
1650   	-- admission process category.
1651   	-- If the unit set is offered then both the unit set and unit set version must
1652   	-- be specified.
1653   	-- If the unit set is nominated then the unit set status must be
1654   	-- Active, however, if the unit set is offered the unit set status must be
1655   	-- Active.
1656   	-- The expiry date of the unit set must not be set.
1657   	-- The unit set must be mapped to the course offering option (this is an error
1658   	-- on offer but a warning on nomination).
1659   	-- The course offering option unit set must be valid for the admission category
1660   	--  of the admission application.
1661   DECLARE
1662   	cst_active		CONSTANT VARCHAR2(6) := 'ACTIVE';
1663   	cst_yes			CONSTANT VARCHAR2(1) := 'Y';
1664   	cst_error		CONSTANT VARCHAR2(1) := 'E';
1665   	cst_warn		CONSTANT VARCHAR2(1) := 'W';
1666   	v_s_unit_set_status	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
1667   	v_expiry_dt		IGS_EN_UNIT_SET.expiry_dt%TYPE;
1668   	v_message_name		VARCHAR2(30);
1669   	v_coousv_match		BOOLEAN := FALSE;
1670   	v_coacus_match		BOOLEAN := FALSE;
1671   	v_coacus_rec_found	BOOLEAN := FALSE;
1672   	CURSOR c_us_uss (
1673   			cp_unit_set_cd		IGS_EN_UNIT_SET.unit_set_cd%TYPE,
1674   			cp_us_version_number	IGS_EN_UNIT_SET.version_number%TYPE) IS
1675   		SELECT	uss.s_unit_set_status,
1676   			us.expiry_dt
1677   		FROM	IGS_EN_UNIT_SET			us,
1678   			IGS_EN_UNIT_SET_STAT		uss
1679   		WHERE	  us.unit_set_cat IN
1680 		         ( SELECT usc.unit_set_cat
1681                            FROM   igs_en_unit_set_cat usc
1682                      	   WHERE (fnd_profile.value ('IGS_PS_PRENRL_YEAR_IND'  ) <> 'Y'
1683 			      OR usc.s_unit_set_cat = 'PRENRL_YR') )
1684 		AND    us.UNIT_SET_STATUS	= uss.UNIT_SET_STATUS
1685   		AND	us.unit_set_cd	= cp_unit_set_cd
1686   		AND	us.version_number	= cp_us_version_number;
1687 
1688   	CURSOR c_coousv (
1689   			cp_unit_set_cd		IGS_PS_OF_OPT_UNT_ST.unit_set_cd%TYPE,
1690   			cp_us_version_number	IGS_PS_OF_OPT_UNT_ST.us_version_number%TYPE,
1691   			cp_course_cd		IGS_PS_OF_OPT_UNT_ST.course_cd%TYPE,
1692   			cp_crv_version_number	IGS_PS_OF_OPT_UNT_ST.crv_version_number%TYPE,
1693   			cp_acad_cal_type	IGS_PS_OF_OPT_UNT_ST.cal_type%TYPE,
1694 			cp_admission_cat        IGS_PS_COO_AD_UNIT_S.admission_cat%TYPE,
1695                         cp_location_cd                IGS_PS_COO_AD_UNIT_S.location_cd%TYPE,
1696                         cp_attendance_mode              IGS_PS_COO_AD_UNIT_S.attendance_mode%TYPE,
1697                         cp_attendance_type              IGS_PS_COO_AD_UNIT_S.attendance_type%TYPE)  IS
1698   		SELECT 1
1699   		FROM    IGS_PS_OFR_OPT_UNIT_SET_V psusv
1700   		WHERE   psusv.course_cd              = cp_course_cd
1701   		        AND psusv.crv_version_number = cp_crv_version_number
1702 			AND psusv.unit_set_cd        = cp_unit_set_cd
1703                         AND psusv.us_version_number  = cp_us_version_number
1704   		        AND psusv.cal_type           = cp_acad_cal_type
1705                         AND psusv.location_cd        = NVL(cp_location_cd, psusv.location_cd)
1706                         AND psusv.attendance_mode    = NVL(cp_attendance_mode, psusv.attendance_mode)
1707                         AND psusv.attendance_type    = NVL(cp_attendance_type, psusv.attendance_type)
1708   		        AND NOT EXISTS
1709   		        (SELECT 1
1710   		        FROM    igs_ps_coo_ad_unit_s psus
1711   		        WHERE   psus.course_cd              = psusv.course_cd
1712   		                AND psus.crv_version_number = psusv.crv_version_number
1713   		                AND psus.cal_type           = psusv.cal_type
1714 				AND psus.location_cd        = psusv.location_cd
1715   		                AND psus.attendance_mode    = psusv.attendance_mode
1716   		                AND psus.attendance_type    = psusv.attendance_type
1717   		                AND psus.admission_cat      = cp_admission_cat
1718 		        )
1719 		        AND psusv.UNIT_SET_STATUS IN
1720   				        (SELECT unit_set_status
1721   		        FROM    igs_en_unit_set_stat uss
1722   		        WHERE   psusv.unit_set_status      = uss.unit_set_status
1723   		                AND uss.s_unit_set_status <> 'INACTIVE'
1724                         )
1725                         AND psusv.unit_set_cat IN
1726                         (SELECT usc.unit_set_cat
1727   		        FROM    igs_en_unit_set_cat usc
1728   		        WHERE   ((fnd_profile.value ('IGS_PS_PRENRL_YEAR_IND') <> 'Y'
1729   		                OR usc.s_unit_set_cat  = 'PRENRL_YR'))
1730   		        )
1731   		        AND psusv.expiry_dt IS NULL
1732   		UNION
1733   		SELECT  1
1734 		FROM    igs_ps_coo_ad_unit_s psus,
1735 		        igs_en_unit_set us
1736   		WHERE   us.unit_set_cd              = psus.unit_set_cd
1737   		        AND us.version_number       = psus.us_version_number
1738                         AND psus.unit_set_cd        = cp_unit_set_cd
1739                         AND psus.us_version_number  = cp_us_version_number
1740   		        AND psus.course_cd          = cp_course_cd
1741   		        AND psus.crv_version_number = cp_crv_version_number
1742                         AND psus.cal_type           = cp_acad_cal_type
1743                         AND psus.location_cd        = NVL(cp_location_cd, psus.location_cd)
1744                         AND psus.attendance_mode    = NVL(cp_attendance_mode, psus.attendance_mode)
1745   		        AND psus.attendance_type    = NVL(cp_attendance_type, psus.attendance_type)
1746   		        AND psus.admission_cat      = cp_admission_cat
1747   		        AND us.unit_set_status IN
1748   		        (SELECT unit_set_status
1749   		        FROM    igs_en_unit_set_stat uss
1750   		        WHERE   us.unit_set_status         = uss.unit_set_status
1751   		                AND uss.s_unit_set_status <> 'INACTIVE'
1752   		        )
1753   		        AND us.unit_set_cat IN
1754   		        (SELECT usc.unit_set_cat
1755 		        FROM    igs_en_unit_set_cat usc
1756 		        WHERE   ((fnd_profile.value ('IGS_PS_PRENRL_YEAR_IND') <> 'Y'
1757 		                OR usc.s_unit_set_cat  = 'PRENRL_YR'))
1758 		                )
1759 		        AND us.expiry_dt IS NULL;
1760 
1761 
1762   	CURSOR c_coacus 	(
1763   			cp_course_cd		IGS_PS_COO_AD_UNIT_S.course_cd%TYPE,
1764   			cp_crv_version_number	IGS_PS_COO_AD_UNIT_S.crv_version_number%TYPE,
1765   			cp_acad_cal_type		IGS_PS_COO_AD_UNIT_S.cal_type%TYPE,
1766   			cp_admission_cat		IGS_PS_COO_AD_UNIT_S.admission_cat%TYPE,
1767                         cp_location_cd                IGS_PS_COO_AD_UNIT_S.location_cd%TYPE,
1768                         cp_attendance_mode              IGS_PS_COO_AD_UNIT_S.attendance_mode%TYPE,
1769                         cp_attendance_type              IGS_PS_COO_AD_UNIT_S.attendance_type%TYPE) IS
1770   		SELECT	coacus.unit_set_cd,
1771   			coacus.us_version_number,
1772   			coacus.location_cd,
1773   			coacus.attendance_mode,
1774   			coacus.attendance_type
1775   		FROM	IGS_PS_COO_AD_UNIT_S	coacus
1776   		WHERE	coacus.course_cd		= cp_course_cd AND
1777   			coacus.crv_version_number	= cp_crv_version_number AND
1778   			coacus.cal_type		= cp_acad_cal_type AND
1779   			coacus.admission_cat	= cp_admission_cat AND
1780 			coacus.location_cd = cp_location_cd AND
1781 			coacus.attendance_mode = cp_attendance_mode AND
1782 			coacus.attendance_type = cp_attendance_type;
1783   BEGIN
1784   	-- Initialise out NOCOPY parameters
1785   	p_message_name := NULL;
1786   	p_return_type := NULL;
1787   	IF p_unit_set_appl = 'N' THEN
1788   		-- Ensure the unit set details are not specified for an admission application
1789   		-- that does not allow unit sets.
1790   		IF p_unit_set_cd IS NOT NULL OR
1791   				p_us_version_number IS NOT NULL THEN
1792   			p_message_name := 'IGS_AD_UNITSET_NOTSPECIFIED' ;
1793   			p_return_type := cst_error;
1794   			RETURN FALSE;
1795   		END IF;
1796   	ELSE	-- unit sets are allowed for the application.
1797   		IF p_unit_set_cd IS NOT NULL AND
1798   				p_us_version_number IS NOT NULL THEN
1799   			-- Retrieve unit set data
1800   			OPEN 	c_us_uss(
1801   				p_unit_set_cd,
1802   				p_us_version_number);
1803   			FETCH	c_us_uss INTO 	v_s_unit_set_status,
1804   						v_expiry_dt;
1805   			IF(c_us_uss%FOUND) THEN
1806   				-- Validate unit set status
1807   				IF p_offer_ind = cst_yes THEN	-- Offered
1808   					IF v_s_unit_set_status <> cst_active THEN
1809   						CLOSE c_us_uss;
1810   						p_message_name := 'IGS_AD_UNITSET_MUSTBE_ACTIVE';
1811   						p_return_type := cst_error;
1812   						RETURN FALSE;
1813   					END IF;
1814   				ELSE				-- Nominated
1815   					IF v_s_unit_set_status  <> cst_active THEN   --removed the planned status as per bug#2722785 --rghosh
1816   						CLOSE c_us_uss;
1817   						p_message_name := 'IGS_AD_UNITSET_ACTIVE_PLANNED';
1818   						p_return_type := cst_warn;
1819   						RETURN FALSE;
1820   					END IF;
1821   				END IF;
1822   				-- Validate expiry date
1823   				IF v_expiry_dt IS NOT NULL THEN
1824   					CLOSE c_us_uss;
1825   					p_message_name := 'IGS_AD_UNITSET_EXPDT_NOTBESET';
1826   					p_return_type := cst_error;
1827   					RETURN FALSE;
1828   				END IF;
1829   				-- Validate that unit set is mapped to the course offering option.
1830   				-- If the option details of the course offering option are specified,
1831   				-- then an exact match must be found.  If the option details are not
1832   				-- specified then a match on the course offering and unit set is all
1833   				-- that is needed.
1834   				FOR v_coousv_rec IN c_coousv (
1835   						p_unit_set_cd,
1836   						p_us_version_number,
1837   						p_course_cd,
1838   						p_crv_version_number,
1839   						p_acad_cal_type,
1840 						p_admission_cat,
1841 						p_location_cd,
1842 						p_attendance_mode,
1843 						p_attendance_type) LOOP
1844 					v_coousv_match := TRUE;
1845   				END LOOP;
1846   				IF(v_coousv_match = FALSE) THEN
1847   					IF p_offer_ind = cst_yes THEN	-- Offered
1848   						CLOSE c_us_uss;
1849   						p_message_name := 'IGS_AD_UNITSET_NOTMAP_POO';
1850   						p_return_type := cst_error;
1851   						RETURN FALSE;
1852   					ELSE				-- Nominated
1853   						CLOSE c_us_uss;
1854   						p_message_name := 'IGS_AD_UNITSET_NOT_MAP_POO';
1855   						p_return_type := cst_warn;
1856   						RETURN FALSE;
1857   					END IF;
1858   				END IF;
1859   				-- Validate the course offering option unit set is mapped to the admission
1860   				-- category.
1861   				-- This is a restriction table. If no records exist on the table for the
1862   				-- course offering option, then the course offering option unit set is valid
1863   				-- for the admission category.  However, if any record exists on the table
1864   				-- for the course offering option then one must exist for the unit set.
1865   				FOR v_coacus_rec IN c_coacus(
1866   						p_course_cd,
1867   						p_crv_version_number,
1868   						p_acad_cal_type,
1869   						p_admission_cat,
1870 						p_location_cd,
1871 						p_attendance_mode,
1872 						p_attendance_type) LOOP
1873   					v_coacus_rec_found := TRUE;
1874   					IF ((p_unit_set_cd = v_coacus_rec.unit_set_cd) AND
1875   							(p_us_version_number = v_coacus_rec.us_version_number) AND
1876   							(p_location_cd IS NULL OR
1877   							p_location_cd = v_coacus_rec.location_cd) AND
1878   							(p_attendance_mode IS NULL OR
1879   							p_attendance_mode = v_coacus_rec.attendance_mode) AND
1880   							(p_attendance_type IS NULL OR
1881   							p_attendance_type = v_coacus_rec.attendance_type)) THEN
1882   						v_coacus_match := TRUE;
1883   					END IF;
1884   				END LOOP;
1885   				IF(v_coacus_rec_found = TRUE AND
1886   						v_coacus_match = FALSE) THEN
1887   					IF p_offer_ind = cst_yes THEN 	-- Offered
1888   						CLOSE c_us_uss;
1889   						p_message_name := 'IGS_AD_OFRPRG_NOT_VALID';
1890   						p_return_type := cst_error;
1891   						RETURN FALSE;
1892   					ELSE 				-- Nominated
1893   						CLOSE c_us_uss;
1894   						p_message_name := 'IGS_AD_PRGOFOP_NOT_VALID';
1895   						p_return_type := cst_warn;
1896   						RETURN FALSE;
1897   					END IF;
1898   				END IF;
1899   				IF v_coacus_rec_found = FALSE THEN
1900   					-- Validate the unit set.
1901   					IF IGS_AD_VAL_ACAI.crsp_val_cacus_sub (
1902   							p_course_cd,
1903   							p_crv_version_number,
1904   							p_acad_cal_type,
1905   							p_unit_set_cd,
1906   							p_us_version_number,
1907   							v_message_name) = FALSE THEN
1908   						CLOSE c_us_uss;
1909   						p_message_name := v_message_name;
1910   						p_return_type := cst_error;
1911   						RETURN FALSE;
1912   					END IF;
1913   				END IF;
1914   				CLOSE c_us_uss;
1915   			ELSE	-- unit set record not found.
1916   				CLOSE c_us_uss;
1917   				p_message_name := 'IGS_GE_VAL_DOES_NOT_XS';
1918   				p_return_type := cst_error;
1919   				RETURN FALSE;
1920   			END IF;
1921   		ELSE	-- unit set is not specified.
1922   			IF p_offer_ind = cst_yes THEN
1923   				p_message_name := 'IGS_AD_UNITSET_MUSTBE_SPECIFI';
1924   				p_return_type := cst_error;
1925   				RETURN FALSE;
1926   			END IF;
1927   		END IF;
1928   	END IF;
1929   	RETURN TRUE;
1930   END;
1931   EXCEPTION
1932   	WHEN OTHERS THEN
1933   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1934 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_us');
1935 			 IGS_GE_MSG_STACK.ADD;
1936 			 APP_EXCEPTION.RAISE_EXCEPTION;
1937   END admp_val_acai_us;
1938   --
1939   -- Validate CACUS can only be created when US is not a subordinate
1940   FUNCTION crsp_val_cacus_sub(
1941   p_course_cd IN VARCHAR2 ,
1942   p_crv_version_number IN NUMBER ,
1943   p_cal_type IN VARCHAR2 ,
1944   p_unit_set_cd IN VARCHAR2 ,
1945   p_us_version_number IN NUMBER ,
1946   p_message_name OUT NOCOPY varchar2 )
1947   RETURN BOOLEAN AS
1948   BEGIN	-- crsp_val_cacus_sub
1949   	-- This module validates that a crs_adm_cat_unit_set record can only be
1950   	-- created when:
1951   	-- . the IGS_PS_OFR_UNIT_SET.only_as_sub_ind = 'N' and
1952   	-- . the IGS_PS_OFR_UNIT_SET does not exist as a subordinate in the
1953   	--   IGS_PS_OF_UNT_SET_RL table.
1954   DECLARE
1955   	v_dummy		VARCHAR2(1);
1956   	CURSOR c_cousr IS
1957   		SELECT	'x'
1958   		FROM	IGS_PS_OF_UNT_SET_RL	cousr
1959   		WHERE	cousr.course_cd			= p_course_cd		AND
1960   			cousr.crv_version_number	= p_crv_version_number	AND
1961   			cousr.cal_type			= p_cal_type		AND
1962   			cousr.sub_unit_set_cd		= p_unit_set_cd		AND
1963   			cousr.sub_us_version_number	= p_us_version_number;
1964   BEGIN
1965   	-- set default vaule
1966   	p_message_name := null;
1967   	IF IGS_PS_GEN_003.CRSP_GET_COUS_SUBIND (
1968   				p_course_cd,
1969   				p_crv_version_number,
1970   				p_cal_type,
1971   				p_unit_set_cd,
1972   				p_us_version_number) = 'Y'	THEN
1973   		p_message_name := 'IGS_PS_UNIT_SET_IND_Y';
1974   		RETURN FALSE;
1975   	END IF;
1976   	OPEN c_cousr;
1977   	FETCH c_cousr INTO v_dummy;
1978   	IF c_cousr%FOUND THEN
1979   		CLOSE c_cousr;
1980   		p_message_name := 'IGS_PS_UNIT_SET_EXISTS_SUBORD';
1981   		RETURN FALSE;
1982   	END IF;
1983   	CLOSE c_cousr;
1984   	RETURN TRUE;
1985   EXCEPTION
1986   	WHEN OTHERS THEN
1987   		IF c_cousr%ISOPEN THEN
1988   			CLOSE c_cousr;
1989   		END IF;
1990   		RAISE;
1991   END;
1992   EXCEPTION
1993   	WHEN OTHERS THEN
1994   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
1995 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.crsp_val_cacus_sub');
1996 			 IGS_GE_MSG_STACK.ADD;
1997 			 APP_EXCEPTION.RAISE_EXCEPTION;
1998  END crsp_val_cacus_sub;
1999   --
2000   -- Do encumbrance checks for the IGS_AD_PS_APPL_INST.unit_set_cd.
2001   FUNCTION admp_val_us_encmb(
2002   p_person_id IN NUMBER ,
2003   p_course_cd IN VARCHAR2 ,
2004   p_unit_set_cd IN VARCHAR2 ,
2005   p_us_version_number IN NUMBER ,
2006   p_adm_cal_type IN VARCHAR2 ,
2007   p_adm_ci_sequence_number IN NUMBER ,
2008   p_course_encmb_chk_ind IN VARCHAR2 ,
2009   p_offer_ind IN VARCHAR2 ,
2010   p_message_name OUT NOCOPY VARCHAR2 ,
2011   p_return_type OUT NOCOPY VARCHAR2 )
2012   RETURN BOOLEAN AS
2013   BEGIN	-- admp_val_us_encmb
2014   	-- Perform encumberance checks for the
2015   	-- admission_course_appl_instance.unit_set_cd
2016   DECLARE
2017   	v_encmb_check_dt	DATE;
2018   	v_message_name		VARCHAR2(30);
2019   BEGIN
2020   	p_message_name := NULL;
2021   	IF p_unit_set_cd IS NOT NULL AND
2022   			p_us_version_number IS NOT NULL AND
2023   			p_course_encmb_chk_ind = 'Y' THEN
2024   		-- Get the encumberance checking date.
2025   		v_encmb_check_dt := NVL(IGS_AD_GEN_006.ADMP_GET_ENCMB_DT(
2026   					p_adm_cal_type,
2027   					p_adm_ci_sequence_number),SYSDATE);
2028 /*  		IF v_encmb_check_dt IS NULL THEN
2029   			IF p_offer_ind = 'Y' THEN
2030   				p_message_name := 'IGS_AD_ENCUMB_CANNOT_PERFORM';
2031   				p_return_type := 'E';
2032   			ELSE
2033   				p_message_name := 'IGS_AD_ENCUMB_CHK_NOT_PERFORM';
2034   				p_return_type := 'W';
2035   			END IF;
2036   			RETURN FALSE;
2037   		END IF;
2038 */
2039 		-- Validate for exclusion or suspension from the
2040   		-- unit set version within the course.
2041   		IF NOT IGS_EN_VAL_ENCMB.enrp_val_excld_us(
2042   					p_person_id,
2043   					p_course_cd,
2044   					p_unit_set_cd,
2045   					p_us_version_number,
2046   					v_encmb_check_dt,
2047   					v_message_name) THEN
2048   			IF p_offer_ind = 'Y' THEN
2049   				p_message_name := 'IGS_AD_PRSN_ENCUMB_EXCL_UNIT';
2050   				p_return_type := 'E';
2051   			ELSE
2052   				p_message_name := 'IGS_AD_ENCUMB_EXCL_PRG';
2053   				p_return_type := 'W';
2054   			END IF;
2055   			RETURN FALSE;
2056   		END IF;
2057   	END IF;
2058   	RETURN TRUE;
2059   END;
2060   EXCEPTION
2061   	WHEN OTHERS THEN
2062   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2063 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_us_encmb');
2064 			 IGS_GE_MSG_STACK.ADD;
2065 			 APP_EXCEPTION.RAISE_EXCEPTION;
2066 END admp_val_us_encmb;
2067   --
2068   -- Validate the IGS_AD_PS_APPL_INST.offer_dt.
2069   FUNCTION admp_val_offer_dt(
2070   p_offer_dt IN DATE ,
2071   p_adm_outcome_status IN VARCHAR2 ,
2072   p_adm_cal_type IN VARCHAR2 ,
2073   p_adm_ci_sequence_number IN NUMBER ,
2074   p_message_name OUT NOCOPY VARCHAR2 )
2075   RETURN BOOLEAN AS
2076   BEGIN	-- admp_val_offer_dt
2077   	-- Validate the IGS_AD_PS_APPL_INST.offer_dt.
2078   DECLARE
2079   	v_s_adm_outcome_status	VARCHAR2(255);
2080   	v_course_start_dt		DATE;
2081   BEGIN
2082   	p_message_name := NULL;
2083   	-- Validate offer date against the admission outcome status.
2084   	v_s_adm_outcome_status := IGS_AD_GEN_008.ADMP_GET_SAOS (
2085   					p_adm_outcome_status);
2086   	-- Offer date must be not be set for a pending admission course application
2087   	-- instance.
2088   	IF 	v_s_adm_outcome_status = 'PENDING' AND
2089   		p_offer_dt IS NOT NULL THEN
2090   		p_message_name := 'IGS_AD_OFRDT_SET_PENDING_AMD';
2091   		RETURN FALSE;
2092   	END IF;
2093   	-- Offer date must be set for an offered admission course application instance.
2094   	IF	v_s_adm_outcome_status IN ('OFFER', 'COND-OFFER') AND
2095   		p_offer_dt IS NULL THEN
2096   		p_message_name := 'IGS_AD_OFRDT_SET_ADMPRG_APPL';
2097   		RETURN FALSE;
2098   	END IF;
2099   -- The following code has been commented out.
2100   -- The users decided this check is no longer required.
2101 
2102 
2103   	RETURN TRUE;
2104   END;
2105   EXCEPTION
2106   	WHEN OTHERS THEN
2107   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2108 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_offer_dt');
2109 			 IGS_GE_MSG_STACK.ADD;
2110 			 APP_EXCEPTION.RAISE_EXCEPTION;
2111  END admp_val_offer_dt;
2112   --
2113   -- Validate the IGS_AD_PS_APPL_INST.offer_response_dt.
2114   FUNCTION admp_val_off_resp_dt(
2115   p_offer_response_dt IN DATE ,
2116   p_adm_outcome_status IN VARCHAR2 ,
2117   p_offer_dt IN DATE ,
2118   p_message_name OUT NOCOPY VARCHAR2 )
2119   RETURN BOOLEAN AS
2120   BEGIN	-- admp_val_off_resp_dt
2121   	-- Validate the IGS_AD_PS_APPL_INST.offer_response_dt.
2122   DECLARE
2123   	v_s_adm_outcome_status		VARCHAR2(255);
2124   BEGIN
2125   	p_message_name := NULL;
2126   	-- Validate offer response date against the admission outcome status.
2127   	v_s_adm_outcome_status := IGS_AD_GEN_008.ADMP_GET_SAOS (
2128   					p_adm_outcome_status);
2129   	-- Offer response date must be not be set for a pending admission course
2130   	-- application instance.
2131   	IF 	v_s_adm_outcome_status = 'PENDING' AND
2132   		p_offer_response_dt IS NOT NULL THEN
2133   		p_message_name := 'IGS_AD_OFR_RESPDT_SET_PENDING';
2134   		RETURN FALSE;
2135   	END IF;
2136   	-- Offer response date must be set for an offered admission course application
2137   	-- instance.
2138   	IF	v_s_adm_outcome_status IN ('OFFER', 'COND-OFFER') AND
2139   		p_offer_response_dt IS NULL THEN
2140   		p_message_name := 'IGS_AD_OFR_RESPDT_SET_ODR_ADM';
2141   		RETURN FALSE;
2142   	END IF;
2143   	-- Validate offer response date against offer date.
2144   	IF TRUNC(p_offer_response_dt) < TRUNC(p_offer_dt) THEN
2145   		p_message_name := 'IGS_AD_OFR_RSPDT_GE_OFRDT';
2146   		RETURN FALSE;
2147   	END IF;
2148   	RETURN TRUE;
2149   END;
2150   EXCEPTION
2151   	WHEN OTHERS THEN
2152   		         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2153 				 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_off_resp_dt');
2154 				 IGS_GE_MSG_STACK.ADD;
2155 				 APP_EXCEPTION.RAISE_EXCEPTION;
2156  END admp_val_off_resp_dt;
2157   --
2158   -- Validate the IGS_AD_PS_APPL_INST.actual_response_dt.
2159   FUNCTION admp_val_act_resp_dt(
2160   p_actual_response_dt IN DATE ,
2161   p_adm_offer_resp_status IN VARCHAR2 ,
2162   p_offer_dt IN DATE ,
2163   p_message_name OUT NOCOPY VARCHAR2 )
2164   RETURN BOOLEAN AS
2165   BEGIN	-- admp_val_act_resp_dt
2166   	-- Validate the IGS_AD_PS_APPL_INST.actual_response_dt.
2167   DECLARE
2168   	v_s_adm_offer_resp_status	VARCHAR2(255);
2169   BEGIN
2170   	p_message_name := NULL;
2171   	-- Validate actual response date against the admission offer response status.
2172   	v_s_adm_offer_resp_status := IGS_AD_GEN_008.ADMP_GET_SAORS (
2173   					p_adm_offer_resp_status);
2174   	-- Actual response date must be not be set for an admission course application
2175   	-- instance with an offer response status of pending, lapsed or not-applicable.
2176   	IF	v_s_adm_offer_resp_status IN ('PENDING', 'LAPSED', 'NOT-APPLIC') THEN
2177   		IF p_actual_response_dt IS NOT NULL THEN
2178   			p_message_name := 'IGS_AD_ACT_RSPDT_NOT_SET_ADM';
2179   			RETURN FALSE;
2180   		END IF;
2181   	ELSE
2182   		-- Actual response date must be set for an admission course application
2183   		-- instance with
2184   		-- an offer response status that is not pending, lapsed or not-applicable.
2185   		IF (p_actual_response_dt IS NULL) THEN
2186   			p_message_name := 'IGS_AD_ACT_RSPDT_SET_ADMPRG';
2187   			RETURN FALSE;
2188   		END IF;
2189   	END IF;
2190   	-- Validate actual response date against current date.
2191   	IF TRUNC(p_actual_response_dt) > TRUNC(SYSDATE) THEN
2192   		p_message_name := 'IGS_AD_ACT_RSPDT_LE_CURDT';
2193   		RETURN FALSE;
2194   	END IF;
2195   	-- Validate actual response date against offer date.
2196   	IF p_actual_response_dt IS NOT NULL AND
2197   			TRUNC(p_actual_response_dt) < TRUNC(p_offer_dt) THEN
2198   		p_message_name := 'IGS_AD_ACTRESPDT_GE_OFRDT';
2199   		RETURN FALSE;
2200   	END IF;
2201   	RETURN TRUE;
2202   END;
2203   EXCEPTION
2204   	WHEN OTHERS THEN
2205   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2206 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_act_resp_dt');
2207 			 IGS_GE_MSG_STACK.ADD;
2208 			 APP_EXCEPTION.RAISE_EXCEPTION;
2209  END admp_val_act_resp_dt;
2210   --
2211   -- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_satisfied_dt.
2212   FUNCTION admp_val_stsfd_dt(
2213   p_cndtnl_offer_satisfied_dt IN DATE ,
2214   p_adm_cndtnl_offer_status IN VARCHAR2 ,
2215   p_message_name OUT NOCOPY VARCHAR2 )
2216   RETURN BOOLEAN AS
2217   BEGIN	-- admp_val_stsfd_dt
2218   	-- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_satisfied_dt.
2219   DECLARE
2220   	v_s_adm_cndtnl_offer_status	VARCHAR2(255);
2221   BEGIN
2222   	p_message_name := NULL;
2223   	-- Validate conditional offer satisfied date against the admission conditional
2224   	-- offer status.
2225   	v_s_adm_cndtnl_offer_status := IGS_AD_GEN_007.ADMP_GET_SACOS (
2226   						p_adm_cndtnl_offer_status);
2227   	-- Conditional offer satisfied date must be set when the conditional offer has
2228   	--  been
2229   	-- satisfied or waived.
2230   	IF v_s_adm_cndtnl_offer_status IN ('SATISFIED', 'WAIVED') THEN
2231   		IF (p_cndtnl_offer_satisfied_dt IS NULL) THEN
2232   			p_message_name := 'IGS_AD_OFRDT_SET_CONDOFR';
2233   			RETURN FALSE;
2234   		END IF;
2235   	ELSE
2236   		-- Conditional offer satisfied date must not be set when the conditional offer
2237   		--  has not
2238   		-- been satisfied or waived.
2239   		IF (p_cndtnl_offer_satisfied_dt IS NOT NULL) THEN
2240   			p_message_name := 'IGS_AD_OFRDT_NOT_SET_CONDOFR';
2241   			RETURN FALSE;
2242   		END IF;
2243   	END IF;
2244   	-- Validate conditional offer satisfied date against current date.
2245   	IF TRUNC(p_cndtnl_offer_satisfied_dt) > TRUNC(SYSDATE) THEN
2246   		p_message_name := 'IGS_AD_COND_OFRDT_LE_CURDT';
2247   		RETURN FALSE;
2248   	END IF;
2249   	RETURN TRUE;
2250   END;
2251   EXCEPTION
2252   	WHEN OTHERS THEN
2253   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2254 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_stsfd_dt');
2255 			 IGS_GE_MSG_STACK.ADD;
2256 			 APP_EXCEPTION.RAISE_EXCEPTION;
2257  END admp_val_stsfd_dt;
2258   --
2259   -- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_cndtn.
2260   FUNCTION admp_val_offer_cndtn(
2261   p_cndtnl_offer_cndtn IN VARCHAR2 ,
2262   p_adm_cndtnl_offer_status IN VARCHAR2 ,
2263   p_message_name OUT NOCOPY VARCHAR2 )
2264   RETURN BOOLEAN AS
2265   BEGIN	-- admp_val_offer_cndtn
2266   	-- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_cndtn.
2267   	-- Validations are:
2268   	-- * The conditional offer condition may only have a value when a
2269   	--    conditional offer has been made.
2270   DECLARE
2271   	cst_not_applic		CONSTANT VARCHAR2(10) :='NOT-APPLIC';
2272   	v_s_adm_cndtnl_offer_status
2273   				IGS_AD_CNDNL_OFRSTAT.s_adm_cndtnl_offer_status%TYPE;
2274   BEGIN
2275   	-- Set the default message number
2276   	p_message_name := NULL;
2277   	-- Validate the conditional offer condition against the admission
2278   	-- conditional offer status.
2279   	IF p_cndtnl_offer_cndtn IS NOT NULL THEN
2280   		v_s_adm_cndtnl_offer_status := IGS_AD_GEN_007.ADMP_GET_SACOS (
2281   							p_adm_cndtnl_offer_status);
2282   		-- The conditional offer condition may only be specified when an
2283   		-- conditional offer has been made.
2284   		IF v_s_adm_cndtnl_offer_status = cst_not_applic THEN
2285   			p_message_name := 'IGS_AD_CONDOFR_COND';
2286   			RETURN FALSE;
2287   		END IF;
2288   	END IF;
2289   	RETURN TRUE;
2290   END;
2291   EXCEPTION
2292   	WHEN OTHERS THEN
2293   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2294 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_offer_cndtn');
2295 			 IGS_GE_MSG_STACK.ADD;
2296 			 APP_EXCEPTION.RAISE_EXCEPTION;
2297   END admp_val_offer_cndtn;
2298   --
2299   -- Validate the IGS_AD_PS_APPL_INST.applicant_acptnce_cndtn.
2300   FUNCTION admp_val_acpt_cndtn(
2301   p_applicant_acptnce_cndtn IN VARCHAR2 ,
2302   p_adm_offer_resp_status IN VARCHAR2 ,
2303   p_message_name OUT NOCOPY VARCHAR2 )
2304   RETURN BOOLEAN AS
2305   BEGIN	-- admp_val_acpt_cndtn
2306   	-- Validate the IGS_AD_PS_APPL_INST.applicant_acptnce_cndtn.
2307   	-- Validations are:
2308   	-- * The applicant acceptance condition may only have a value when the
2309   	--   applicant has responded to an offer of admission.
2310   DECLARE
2311   	cst_not_applic		CONSTANT VARCHAR2(10) :='NOT-APPLIC';
2312   	cst_pending		CONSTANT VARCHAR2(7) :='PENDING';
2313   	cst_lapsed		CONSTANT VARCHAR2(6) :='LAPSED';
2314   	v_s_adm_offer_resp_status	IGS_AD_OFR_RESP_STAT.s_adm_offer_resp_status%TYPE;
2315   BEGIN
2316   	-- Set the default message number
2317   	p_message_name := NULL;
2318   	-- Validate the applicant acceptance condition against the admission
2319   	-- offer response status.
2320   	IF p_applicant_acptnce_cndtn IS NOT NULL THEN
2321   		v_s_adm_offer_resp_status := IGS_AD_GEN_008.ADMP_GET_SAORS (
2322   							p_adm_offer_resp_status);
2323   		-- The applicant acceptance condition may only be specified when an
2324   		-- applicant has responded to an offer of admission.
2325   		IF v_s_adm_offer_resp_status IN (cst_pending,
2326   						 cst_lapsed,
2327   						 cst_not_applic) THEN
2328   			p_message_name := 'IGS_AD_APPL_RESP_COMMENTS';
2329   			RETURN FALSE;
2330   		END IF;
2331   	END IF;
2332   	RETURN TRUE;
2333   END;
2334   EXCEPTION
2335   	WHEN OTHERS THEN
2336   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2337 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acpt_cndtn');
2338 			 IGS_GE_MSG_STACK.ADD;
2339 			 APP_EXCEPTION.RAISE_EXCEPTION;
2340   END admp_val_acpt_cndtn;
2341   --
2342   -- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_must_be_stsfd_ind.
2343   FUNCTION admp_val_must_stsfd(
2344   p_cndtnl_off_must_be_stsfd_ind IN VARCHAR2 ,
2345   p_adm_cndtnl_offer_status IN VARCHAR2 ,
2346   p_adm_offer_resp_status IN VARCHAR2 ,
2347   p_cndtnl_offer_satisfied_dt IN DATE ,
2348   p_message_name OUT NOCOPY VARCHAR2 )
2349   RETURN BOOLEAN AS
2350   BEGIN	-- admp_val_must_stsfd
2351   	-- Validate the IGS_AD_PS_APPL_INST.cndtnl_offer_must_be_stsfd_ind.
2352   DECLARE
2353   	v_s_adm_cndtnl_offer_status
2354   					IGS_AD_CNDNL_OFRSTAT.adm_cndtnl_offer_status%TYPE;
2355   	v_s_adm_offer_resp_status		IGS_AD_OFR_RESP_STAT.adm_offer_resp_status%TYPE;
2356   	cst_not_applic				CONSTANT VARCHAR2(10) := 'NOT-APPLIC';
2357   	cst_accepted				CONSTANT VARCHAR2(8) := 'ACCEPTED';
2358 
2359   BEGIN
2360   	-- Set up the default return value.
2361   	p_message_name := NULL;
2362 
2363   	IF p_cndtnl_off_must_be_stsfd_ind = 'Y' THEN
2364   		v_s_adm_cndtnl_offer_status := IGS_AD_GEN_007.ADMP_GET_SACOS(
2365   							p_adm_cndtnl_offer_status);
2366   		IF v_s_adm_cndtnl_offer_status = cst_not_applic THEN
2367   			-- The conditional offer must be satisfied indicator cannot be set when
2368   			-- the conditional offer status is not applicable.
2369   			p_message_name := 'IGS_AD_SATISFIEDINDICATOR_SET';
2370   			RETURN FALSE;
2371   		END IF;
2372   		v_s_adm_offer_resp_status := IGS_AD_GEN_008.ADMP_GET_SAORS (
2373   							p_adm_offer_resp_status);
2374   		IF v_s_adm_offer_resp_status = cst_accepted AND
2375   				p_cndtnl_offer_satisfied_dt IS NULL THEN
2376   			-- The conditional offer must be satisfied before it can be accepted.
2377   			p_message_name := 'IGS_AD_CONDOFR_ACCEPTED';
2378   			RETURN FALSE;
2379   		END IF;
2380   	END IF;
2381   	RETURN TRUE;
2382   END;
2383   EXCEPTION
2384   	WHEN OTHERS THEN
2385   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2386 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_must_stsfd');
2387 			 IGS_GE_MSG_STACK.ADD;
2388 			 APP_EXCEPTION.RAISE_EXCEPTION;
2389  END admp_val_must_stsfd;
2390   --
2391   -- Validate adm course application instance deferred admission calendar.
2392   FUNCTION admp_val_dfrmnt_cal(
2393   p_deferred_adm_cal_type IN VARCHAR2 ,
2394   p_deferred_adm_ci_sequence_num IN NUMBER ,
2395   p_acad_cal_type IN VARCHAR2 ,
2396   p_adm_offer_resp_status IN VARCHAR2 ,
2397   p_admission_cat IN VARCHAR2 ,
2398   p_s_admission_process_type IN VARCHAR2 ,
2399   p_appl_dt IN DATE ,
2400   p_course_cd IN VARCHAR2 ,
2401   p_crv_version_number IN NUMBER ,
2402   p_location_cd IN VARCHAR2 ,
2403   p_attendance_mode IN VARCHAR2 ,
2404   p_attendance_type IN VARCHAR2 ,
2405   p_unit_set_cd IN VARCHAR2 ,
2406   p_us_version_number IN NUMBER ,
2407   p_deferral_allowed IN VARCHAR2 ,
2408   p_late_appl_allowed IN VARCHAR2 ,
2409   p_message_name OUT NOCOPY VARCHAR2 ,
2410   p_return_type OUT NOCOPY VARCHAR2,
2411   p_def_acad_ci_sequence_num IN NUMBER
2412   )
2413   RETURN BOOLEAN AS
2414   BEGIN 	-- admp_val_dfrmnt_cal
2415   	-- Validate the admission course application instance
2416   	-- deferred admission calendar
2417   	-- Validations are:
2418   	--	- If deferral is not allowed, then the deferred
2419   	-- admission calendar must not be specified
2420   	--	- If the admission offer response status has a value of deferral,
2421   	-- then the deferred admission calendar must be specified
2422   	--	- If the deferred admission calendar is specified,
2423   	-- then it must be an admission calendar
2424   	--	- If the deferred admission calendar is specified,
2425   	-- then it must be a active calendar instance
2426   	--	- If the deferred admission calendar is specified,
2427   	-- then it must be a child of an academic calendar that is the same
2428   	-- calendar tyoe as the admission application academic calendar.
2429   	--	- If the deferred admission calendar is specified,
2430   	-- then it must be for the admission process category of the
2431   	-- admission application
2432   	--	- If the deferred admission calendar is specified,
2433   	-- then the course offering pattern must be valid for the
2434   	-- deferred admission period
2435   	--	- If the deferred admission calendar is specified,
2436   	-- and unit sets are applicable for the admission application
2437   	-- and then the unit set must be valid for the deferred admission period.
2438   DECLARE
2439   	cst_error	CONSTANT	VARCHAR2(1) := 'E';
2440   	cst_deferral	CONSTANT
2441   				IGS_AD_OFR_RESP_STAT.s_adm_offer_resp_status%TYPE := 'DEFERRAL';
2442   	v_s_adm_offer_resp_status	IGS_AD_OFR_RESP_STAT.s_adm_offer_resp_status%TYPE;
2443   	v_message_name			VARCHAR2(30);
2444   	v_return_type			VARCHAR2(1);
2445   	v_late_ind			VARCHAR2(1);
2446   BEGIN
2447   	-- Validate if the deferred admission calendar can be specified
2448   	IF (p_deferral_allowed = 'N' AND
2449   			(p_deferred_adm_cal_type IS NOT NULL OR
2450   			p_deferred_adm_ci_sequence_num IS NOT NULL)) THEN
2451   		-- The deferred admission calendar must not be
2452   		-- specified when deferments are not allowed.
2453   		p_message_name := 'IGS_AD_DFRD_ADMCAL_NOTALLOW';
2454   		p_return_type := cst_error;
2455   		RETURN FALSE;
2456   	END IF;
2457   	-- Validate that the deferred admission calendar has been specified.
2458   	v_s_adm_offer_resp_status := IGS_AD_GEN_008.ADMP_GET_SAORS(p_adm_offer_resp_status);
2459   	IF (v_s_adm_offer_resp_status = cst_deferral AND
2460   			(p_deferred_adm_cal_type IS NULL OR
2461   			p_deferred_adm_ci_sequence_num IS NULL)) THEN
2462   		-- The deferred admission calendar must be
2463   		-- specified when an offer has been deferred.
2464   		p_message_name := 'IGS_AD_DFRD_ADMCAL_DEFFERED';
2465   		p_return_type := cst_error;
2466   		RETURN FALSE;
2467   	END IF;
2468   	IF (p_deferred_adm_cal_type IS NOT NULL) THEN
2469   		-- Validate the deferred admission calendar
2470   		-- Determine the calendar instance sequence number of the academic calendar
2471   		IF (IGS_AD_VAL_AA.admp_val_aa_adm_cal(
2472   						p_deferred_adm_cal_type,
2473   						p_deferred_adm_ci_sequence_num,
2474   						p_acad_cal_type,
2475   						p_def_acad_ci_sequence_num,
2476 						p_admission_cat,
2477   						p_s_admission_process_type,
2478   						v_message_name) = FALSE) THEN
2479   			-- The deferred admission calendar is invalid
2480   			p_message_name := v_message_name;
2481   			p_return_type := cst_error;
2482   			RETURN FALSE;
2483   		END IF;
2484   		-- Validate the course offering pattern in the deferred admission period
2485   		IF (IGS_AD_VAL_ACAI.admp_val_acai_cop(
2486   						p_course_cd,
2487   						p_crv_version_number,
2488   						p_location_cd,
2489   						p_attendance_mode,
2490   						p_attendance_type,
2491   						p_acad_cal_type,
2492   						p_def_acad_ci_sequence_num,
2493 						p_deferred_adm_cal_type,
2494   						p_deferred_adm_ci_sequence_num,
2495   						p_admission_cat,
2496   						p_s_admission_process_type,
2497   						'Y', -- Offer indicator
2498   						p_appl_dt,
2499   						p_late_appl_allowed,
2500   						'Y', -- Deferred application
2501   						v_message_name,
2502   						v_return_type,
2503   						v_late_ind) = FALSE) THEN
2504   			p_message_name := v_message_name;
2505   			p_return_type := v_return_type;
2506   			RETURN FALSE;
2507   		END IF;
2508   		-- Validate the unit set in the deferred admission period
2509   		IF (p_unit_set_cd IS NOT NULL) THEN
2510   			IF (IGS_AD_VAL_ACAI.admp_val_acai_us(
2511   							p_unit_set_cd,
2512   							p_us_version_number,
2513   							p_course_cd,
2514   							p_crv_version_number,
2515   							p_acad_cal_type,
2516   							p_location_cd,
2517   							p_attendance_mode,
2518   							p_attendance_type,
2519   							p_admission_cat,
2520   							'Y', -- Offer indicator
2521   							'Y', -- unit Set application
2522   							v_message_name,
2523   							v_return_type) = FALSE) THEN
2524   				p_message_name := v_message_name;
2525   				p_return_type := cst_error;
2526   				RETURN FALSE;
2527   			END IF;
2528   		END IF;
2529   	END IF;
2530   	p_message_name := NULL;
2531   	RETURN TRUE;
2532   END;
2533   EXCEPTION
2534   	WHEN OTHERS THEN
2535   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2536 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_dfrmnt_cal');
2537 			 IGS_GE_MSG_STACK.ADD;
2538 			 APP_EXCEPTION.RAISE_EXCEPTION;
2539  END admp_val_dfrmnt_cal;
2540   --
2541   -- Validate if admission course application instance corresponce cat.
2542   FUNCTION admp_val_acai_cc(
2543   p_admission_cat IN VARCHAR2 ,
2544   p_correspondence_cat IN VARCHAR2 ,
2545   p_message_name OUT NOCOPY VARCHAR2 )
2546   RETURN BOOLEAN AS
2547   BEGIN	-- admp_val_acai_cc
2548   	-- Validate that the nominated course admission application is valid
2549   	-- for the admission application system process type and any existing
2550   	-- course attempts the student may have
2551   DECLARE
2552   	CURSOR c_ccm IS
2553   		Select 'x'
2554   		FROM 	IGS_CO_CAT_MAP
2555   		WHERE	correspondence_cat 	= p_correspondence_cat AND
2556   			admission_cat 		= p_admission_cat;
2557   	v_x			VARCHAR2(1) := NULL;
2558   	v_message_name 		VARCHAR2(30);
2559   BEGIN
2560   	p_message_name := NULL;
2561   	IF (p_correspondence_cat IS NULL) THEN
2562   		RETURN TRUE;
2563   	END IF;
2564   	-- Validate that correspondence category is not closed
2565   	IF IGS_AD_VAL_ACAI.corp_val_cc_closed(
2566   					p_correspondence_cat,
2567   					v_message_name) = FALSE THEN
2568   		p_message_name := v_message_name;
2569   		Return FALSE;
2570   	END IF;
2571   	-- Validate that correspondence category has a mapping to the
2572   	-- admission category
2573   	OPEN c_ccm;
2574   	FETCH c_ccm INTO v_x;
2575   	IF (c_ccm%NOTFOUND) THEN
2576   		CLOSE c_ccm;
2577   		p_message_name := 'IGS_AD_CORCAT_NOTVALID_ADMCAT';
2578   		RETURN FALSE;
2579   	END IF;
2580   	CLOSE c_ccm;
2581   	RETURN TRUE;
2582   END;
2583   EXCEPTION
2584   	WHEN OTHERS THEN
2585   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2586 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_cc');
2587 			 IGS_GE_MSG_STACK.ADD;
2588 			 APP_EXCEPTION.RAISE_EXCEPTION;
2589  END admp_val_acai_cc;
2590   --
2591   -- Validate if IGS_CO_CAT.correspondence_cat is closed.
2592   FUNCTION corp_val_cc_closed(
2593   p_correspondence_cat IN VARCHAR2 ,
2594   p_message_name OUT NOCOPY VARCHAR2 )
2595   RETURN BOOLEAN AS
2596   BEGIN	--corp_val_cc_closed
2597   	--Validate if IGS_CO_CAT.correspondence_cat is closed
2598   DECLARE
2599   	v_closed_ind	IGS_CO_CAT.closed_ind%TYPE;
2600   	CURSOR c_cc IS
2601   		SELECT	cc.closed_ind
2602   		FROM	IGS_CO_CAT cc
2603   		WHERE	cc.correspondence_cat = p_correspondence_cat;
2604   BEGIN
2605   	--- Set the default message number
2606   	p_message_name := NULL;
2607   	OPEN c_cc;
2608   	FETCH c_cc INTO v_closed_ind;
2609   	IF (c_cc%FOUND)THEN
2610   		IF (v_closed_ind = 'Y') THEN
2611   			p_message_name := 'IGS_CO_CORCAT_IS_CLOSED' ;
2612   			CLOSE c_cc;
2613   			RETURN FALSE;
2614   		END IF;
2615   	END IF;
2616   	CLOSE c_cc;
2617   	RETURN TRUE;
2618   END;
2619   EXCEPTION
2620   	WHEN OTHERS THEN
2621   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2622 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.corp_val_cc_closed');
2623 			 IGS_GE_MSG_STACK.ADD;
2624 			 APP_EXCEPTION.RAISE_EXCEPTION;
2625  END corp_val_cc_closed;
2626   --
2627   -- Validate if admission course application instance enrolment category.
2628   FUNCTION admp_val_acai_ec(
2629   p_admission_cat IN VARCHAR2 ,
2630   p_enrolment_cat IN VARCHAR2 ,
2631   p_message_name OUT NOCOPY VARCHAR2 )
2632   RETURN BOOLEAN AS
2633   BEGIN	-- admp_val_acai_ec
2634   	-- Validate that the nominated course admission application is valid
2635   	-- for the admission application system process type and any
2636   	-- existing course attempts the student may have
2637   DECLARE
2638   	CURSOR c_ccm IS
2639   		Select 'x'
2640   		FROM 	IGS_EN_CAT_MAPPING
2641   		WHERE	enrolment_cat 	= p_enrolment_cat AND
2642   			admission_cat 	= p_admission_cat;
2643   	v_x			VARCHAR2(1) := NULL;
2644   	v_message_name 		VARCHAR2(30);
2645   BEGIN
2646   	p_message_name := NULL;
2647   	IF (p_enrolment_cat IS NULL) THEN
2648   		RETURN TRUE;
2649   	END IF;
2650   	-- Validate that enrolment category is not closed
2651   	IF IGS_AD_VAL_ECM.enrp_val_ec_closed(
2652   					p_enrolment_cat,
2653   					v_message_name) = FALSE THEN
2654   		p_message_name := v_message_name;
2655   		Return FALSE;
2656   	END IF;
2657   	-- Validate that enrolment category has a mapping to the admission
2658   	-- category
2659   	OPEN c_ccm;
2660   	FETCH c_ccm INTO v_x;
2661   	IF (c_ccm%NOTFOUND) THEN
2662   		CLOSE c_ccm;
2663   		p_message_name := 'IGS_AD_ENRCAT_NOTVALID_ADMCAT' ;
2664   		RETURN FALSE;
2665   	END IF;
2666   	CLOSE c_ccm;
2667   	RETURN TRUE;
2668   END;
2669   EXCEPTION
2670   	WHEN OTHERS THEN
2671   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2672 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_ec');
2673 			 IGS_GE_MSG_STACK.ADD;
2674 			 APP_EXCEPTION.RAISE_EXCEPTION;
2675   END admp_val_acai_ec;
2676 
2677 
2678   --
2679   -- bug id : 1956374
2680   -- sjadhav , 28-aug-2001
2681   -- removed function enrp_val_ec_closed
2682   -- change  igs_ad_val_acai.enrp_val_ec_closed
2683   -- to      igs_ad_val_ecm.enrp_val_ec_closed
2684   --
2685   --
2686   -- Validate if admission course application instance fee category.
2687   FUNCTION admp_val_acai_fc(
2688   p_admission_cat IN VARCHAR2 ,
2689   p_fee_cat IN VARCHAR2 ,
2690   p_message_name OUT NOCOPY VARCHAR2 )
2691   RETURN BOOLEAN AS
2692   BEGIN   -- admp_val_acai_fc
2693   DECLARE
2694   	CURSOR c_fcm(
2695   		cp_admission_cat	IGS_FI_FEE_CAT_MAP.admission_cat%TYPE,
2696   		cp_fee_cat		IGS_FI_FEE_CAT_MAP.fee_cat%TYPE) IS
2697   		SELECT  'x'
2698   		FROM	IGS_FI_FEE_CAT_MAP
2699   		WHERE   fee_cat		= cp_fee_cat AND
2700   			admission_cat	= cp_admission_cat;
2701   	v_fcm_rec	c_fcm%ROWTYPE;
2702   	v_message_name	VARCHAR2(30);
2703   BEGIN
2704   	-- Set the default message number
2705   	p_message_name := NULL;
2706   	IF (p_fee_cat IS NULL) THEN
2707   		RETURN TRUE;
2708   	END IF;
2709   	IF IGS_AD_VAL_FCM.finp_val_fc_closed(
2710   				p_fee_cat,
2711   				v_message_name) = FALSE THEN
2712   		p_message_name := v_message_name;
2713   		RETURN FALSE;
2714   	END IF;
2715   	-- Cursor handling
2716   	OPEN c_fcm(
2717   		p_admission_cat,
2718   		p_fee_cat);
2719   	FETCH c_fcm INTO v_fcm_rec;
2720   	IF c_fcm%NOTFOUND THEN
2721   		CLOSE c_fcm;
2722   		p_message_name := 'IGS_AD_FEECAT_NOTVALID_ADMCAT';
2723   		RETURN FALSE;
2724   	END IF;
2725   	CLOSE c_fcm;
2726   	-- Return the default value
2727   	RETURN TRUE;
2728   END;
2729   EXCEPTION
2730   	WHEN OTHERS THEN
2731   	          FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2732 			  FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_fc');
2733 			  IGS_GE_MSG_STACK.ADD;
2734 			  APP_EXCEPTION.RAISE_EXCEPTION;
2735   END admp_val_acai_fc;
2736   --
2737   -- Validate admission course application instance HECS payment option.
2738   FUNCTION admp_val_acai_hpo(
2739   p_admission_cat IN VARCHAR2 ,
2740   p_hecs_payment_option IN VARCHAR2 ,
2741   p_message_name OUT NOCOPY VARCHAR2 )
2742   RETURN BOOLEAN AS
2743   BEGIN	-- admp_val_acai_hpo
2744   	-- Validate the admission course application instance HECS Payment Option.
2745   DECLARE
2746   	v_message_name		VARCHAR2(30);
2747   	v_achpo_exist		VARCHAR2(1);
2748   	CURSOR c_achpo IS
2749   		SELECT 'x'
2750   		FROM	IGS_AD_CT_HECS_PAYOP
2751   		WHERE	admission_cat		= p_admission_cat AND
2752   			HECS_PAYMENT_OPTION	= p_hecs_payment_option;
2753   BEGIN
2754   	-- Set the default message number
2755   	p_message_name := NULL;
2756   	IF (p_hecs_payment_option IS NOT NULL) THEN
2757   		-- Validate that HECS Payment Option is not closed.
2758   		IF (igs_en_val_scho.enrp_val_hpo_closed(
2759   					p_hecs_payment_option,
2760   					v_message_name) = FALSE) THEN
2761   			p_message_name := v_message_name;
2762   			RETURN FALSE;
2763   		END IF;
2764   		-- Validate that HECS Payment Option has a mapping to the admission category
2765   		OPEN c_achpo;
2766   		FETCH c_achpo INTO v_achpo_exist;
2767   		IF c_achpo%NOTFOUND THEN
2768   			CLOSE c_achpo;
2769   			p_message_name := 'IGS_AD_HECS_PRMT_INVALID';
2770   			RETURN FALSE;
2771   		END IF;
2772   		CLOSE c_achpo;
2773   	END IF;
2774   	RETURN TRUE;
2775   END;
2776   EXCEPTION
2777   	WHEN OTHERS THEN
2778   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2779 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_hpo');
2780 			 IGS_GE_MSG_STACK.ADD;
2781 			 APP_EXCEPTION.RAISE_EXCEPTION;
2782   END admp_val_acai_hpo;
2783   --
2784   --
2785   -- Validate the IGS_AD_PS_APPL_INST.adm_outcome_status_auth_dt.
2786   FUNCTION admp_val_ovrd_dt(
2787   p_adm_outcome_status_auth_dt IN DATE ,
2788   p_override_outcome_allowed IN VARCHAR2 ,
2789   p_message_name OUT NOCOPY VARCHAR2 )
2790   RETURN BOOLEAN AS
2791   BEGIN	-- admp_val_ovrd_dt
2792   	-- Validate the IGS_AD_PS_APPL_INST.adm_outcome_status_auth_dt so that
2793   	-- * The admission outcome status authorising date must be null if the outcome
2794   	--   status cannot be overridden for the admission process category of the
2795   	--   admission application.
2796   	-- * If set, the admission outcome status authorising date must be less than or
2797   	--   equal to the current date.
2798   DECLARE
2799   BEGIN
2800   	-- Set the default message number
2801   	p_message_name := NULL;
2802   	-- Check if the admission outcome status can be overridden
2803   	IF p_override_outcome_allowed = 'N' AND
2804   			p_adm_outcome_status_auth_dt IS NOT NULL THEN
2805   		p_message_name := 'IGS_AD_ATHDT_SET_ADMOUTSOME';
2806   		RETURN FALSE;
2807   	END IF;
2808   	-- Check if the overriding date is valid
2809   	IF p_adm_outcome_status_auth_dt IS NOT NULL THEN
2810   		IF p_adm_outcome_status_auth_dt > SYSDATE THEN
2811   			p_message_name := 'IGS_AD_ATHDT_LE_CURDT';
2812   			RETURN FALSE;
2813   		END IF;
2814   	END IF;
2815   	RETURN TRUE;
2816   END;
2817   EXCEPTION
2818   	WHEN OTHERS THEN
2819   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2820 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_ovrd_dt');
2821 			 IGS_GE_MSG_STACK.ADD;
2822 			 APP_EXCEPTION.RAISE_EXCEPTION;
2823   END admp_val_ovrd_dt;
2824   --
2825   -- Validate the IGS_AD_PS_APPL_INST.adm_otcm_status_auth_person_id.
2826   FUNCTION admp_val_ovrd_person(
2827   p_adm_otcm_status_auth_person IN NUMBER ,
2828   p_adm_outcome_status_auth_dt IN DATE ,
2829   p_override_outcome_allowed IN VARCHAR2 ,
2830   p_message_name OUT NOCOPY VARCHAR2 )
2831   RETURN BOOLEAN AS
2832   BEGIN	-- admp_val_ovrd_person
2833   	-- Validate the following :
2834   	-- 1) The admission outcome status authorising IGS_PE_PERSON ID must be null if the
2835   	-- outcome
2836   	-- status cannot be overridden for the admission process category of the
2837   	-- admission application
2838   	-- 2) The admission outcome status authorising IGS_PE_PERSON ID must be null if the
2839   	-- admission outcome
2840   	-- status authorising date is not set
2841   	-- 3) The admission outcome status authorising IGS_PE_PERSON ID must be set if the
2842   	-- admission outcome
2843   	-- status authorising date is set
2844   	-- 4) If set, the admission outcome status authorising IGS_PE_PERSON ID must be a
2845   	-- staff member.
2846   DECLARE
2847   	v_message_name		VARCHAR2(30);
2848   BEGIN
2849   	-- Set the default message number
2850   	p_message_name := NULL;
2851   	-- Check if the admission outcome status can be overridden
2852   	IF p_override_outcome_allowed = 'N' AND
2853   			p_adm_otcm_status_auth_person IS NOT NULL THEN
2854   		p_message_name := 'IGS_AD_AUTHORISING_PRSNID';
2855   		RETURN FALSE;
2856   	END IF;
2857   	IF p_adm_outcome_status_auth_dt IS NULL AND
2858   			p_adm_otcm_status_auth_person IS NOT NULL THEN
2859   		p_message_name := 'IGS_AD_ARTH_PRSNID_SET';
2860   		RETURN FALSE;
2861   	END IF;
2862   	-- Check if the admission outcome status should be set.
2863   	IF p_adm_outcome_status_auth_dt IS NOT NULL AND
2864   			p_adm_otcm_status_auth_person IS NULL THEN
2865   		p_message_name := 'IGS_AD_ARTH_PRSNID_SET_ARTHDT' ;
2866   		RETURN FALSE;
2867   	END IF;
2868   	-- Check if the overriding IGS_PE_PERSON ID is a staff member.
2869   	IF p_adm_otcm_status_auth_person IS NOT NULL THEN
2870   		IF IGS_AD_VAL_ACAI.genp_val_staff_prsn (
2871   						p_adm_otcm_status_auth_person,
2872   						v_message_name) = FALSE THEN
2873   			p_message_name := v_message_name;
2874   			RETURN FALSE;
2875   		END IF;
2876   	END IF;
2877   	RETURN TRUE;
2878   END;
2879   EXCEPTION
2880   	WHEN OTHERS THEN
2881   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
2882 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_ovrd_person');
2883 			 IGS_GE_MSG_STACK.ADD;
2884 			 APP_EXCEPTION.RAISE_EXCEPTION;
2885   END admp_val_ovrd_person;
2886   --
2887   -- Validate a IGS_PE_PERSON id to ensure the IGS_PE_PERSON is a staff member.
2888   FUNCTION genp_val_staff_prsn(
2889   p_person_id IN NUMBER ,
2890   p_message_name OUT NOCOPY VARCHAR2 )
2891   RETURN BOOLEAN AS
2892   BEGIN
2893   DECLARE
2894      CURSOR pe_typ_cd IS
2895      SELECT pti.person_type_code
2896      FROM igs_pe_person_types pt,igs_pe_typ_instances pti
2897      WHERE     pti.person_id = p_person_id
2898            AND pti.person_type_code = pt.person_type_code
2899            AND pt.system_type = 'STAFF'
2900            AND SYSDATE BETWEEN pti.start_date AND NVL(pti.end_date,SYSDATE);
2901    lv_pe_typ_cd pe_typ_cd%RowType;
2902 
2903   BEGIN
2904     OPEN pe_typ_cd;
2905     FETCH pe_typ_cd INTO lv_pe_typ_cd;
2906     IF (pe_typ_cd%FOUND) THEN
2907        CLOSE pe_typ_cd;
2908        p_message_name := NULL;
2909        RETURN TRUE;
2910     ELSE
2911        CLOSE pe_typ_cd;
2912        p_message_name := 'IGS_GE_NOT_STAFF_MEMBER';
2913        RETURN FALSE;
2914     END IF;
2915    END;
2916   END genp_val_staff_prsn;
2917   --
2918     -- Validate a IGS_PE_PERSON id to ensure the IGS_PE_PERSON is a staff/Faculty member.
2919   FUNCTION genp_val_staff_fculty_prsn(
2920   p_person_id IN NUMBER ,
2921   p_message_name OUT NOCOPY VARCHAR2 )
2922   RETURN BOOLEAN AS
2923 
2924      CURSOR pe_typ_cd IS
2925      SELECT pti.person_type_code
2926      FROM igs_pe_person_types pt,igs_pe_typ_instances pti
2927      WHERE     pti.person_id = p_person_id
2928            AND pti.person_type_code = pt.person_type_code
2929            AND pt.system_type IN ('STAFF', 'FACULTY')
2930            AND SYSDATE BETWEEN pti.start_date AND NVL(pti.end_date,SYSDATE);
2931    lv_pe_typ_cd pe_typ_cd%RowType;
2932 
2933    CURSOR c_dmi IS
2934    SELECT 'X'
2935    FROM  igs_pe_person_base_v base, igs_pe_hz_parties pd
2936    WHERE base.person_id = p_person_id
2937    AND  base.person_id = pd.party_id (+)
2938    AND  DECODE(base.date_of_death,NULL,NVL(pd.deceased_ind,'N'),'Y') = 'Y';
2939 
2940    l_deceased igs_pe_person.person_id%TYPE := NULL;
2941 
2942   BEGIN
2943 
2944     OPEN pe_typ_cd;
2945     FETCH pe_typ_cd INTO lv_pe_typ_cd;
2946     CLOSE pe_typ_cd;
2947 
2948     OPEN c_dmi;
2949     FETCH c_dmi INTO l_deceased;
2950     CLOSE c_dmi;
2951 
2952 
2953     IF lv_pe_typ_cd.person_type_code IS NULL OR l_deceased IS NOT NULL
2954     THEN
2955        p_message_name := 'IGS_AD_NOT_STAF_FAC_MEMBER';
2956        RETURN FALSE;
2957     END IF;
2958 
2959   RETURN  TRUE;
2960   END genp_val_staff_fculty_prsn;
2961 
2962       -- Validate a IGS_PE_PERSON id to ensure the IGS_PE_PERSON is a staff/Faculty OR Evaluator  member.
2963   FUNCTION genp_val_staff_fac_eva_prsn(
2964   p_person_id IN NUMBER ,
2965   p_message_name OUT NOCOPY VARCHAR2 )
2966   RETURN BOOLEAN AS
2967 
2968      CURSOR pe_typ_cd IS
2969      SELECT pti.person_type_code
2970      FROM igs_pe_person_types pt,igs_pe_typ_instances pti
2971      WHERE     pti.person_id = p_person_id
2972            AND pti.person_type_code = pt.person_type_code
2973            AND pt.system_type IN ('STAFF', 'FACULTY' , 'EVALUATOR')
2974            AND SYSDATE BETWEEN pti.start_date AND NVL(pti.end_date,SYSDATE);
2975    lv_pe_typ_cd pe_typ_cd%RowType;
2976 
2977    CURSOR c_dmi IS
2978    SELECT 'X'
2979    FROM  igs_pe_person_base_v base, igs_pe_hz_parties pd
2980    WHERE base.person_id = p_person_id
2981    AND  base.person_id = pd.party_id (+)
2982    AND  DECODE(base.date_of_death,NULL,NVL(pd.deceased_ind,'N'),'Y') = 'Y';
2983 
2984    l_deceased igs_pe_person.person_id%TYPE := NULL;
2985 
2986   BEGIN
2987 
2988     OPEN pe_typ_cd;
2989     FETCH pe_typ_cd INTO lv_pe_typ_cd;
2990     CLOSE pe_typ_cd;
2991 
2992     OPEN c_dmi;
2993     FETCH c_dmi INTO l_deceased;
2994     CLOSE c_dmi;
2995 
2996 
2997     IF lv_pe_typ_cd.person_type_code IS NULL OR l_deceased IS NOT NULL
2998     THEN
2999        p_message_name := 'IGS_AD_NOT_STAF_FAC_EVA_MEMBER';
3000        RETURN FALSE;
3001     END IF;
3002 
3003   RETURN  TRUE;
3004   END genp_val_staff_fac_eva_prsn;
3005 
3006   --
3007   -- Validate the IGS_AD_PS_APPL_INST.adm_outcome_status_reason.
3008   FUNCTION admp_val_ovrd_reason(
3009   p_adm_outcome_status_reason IN VARCHAR2 ,
3010   p_adm_outcome_status_auth_dt IN DATE ,
3011   p_override_outcome_allowed IN VARCHAR2 ,
3012   p_message_name OUT NOCOPY VARCHAR2 )
3013   RETURN BOOLEAN AS
3014   BEGIN	-- admp_val_ovrd_reason
3015   	-- Validate the IGS_AD_PS_APPL_INST.adm_outcome_status_reason so that
3016   	-- * The admission outcome status reason must be null if the outcome
3017   	-- status cannot be overridden for the admission process category of the
3018   	-- admission application.
3019   	-- * The admission outcome status reason must be null if the admission outcome
3020   	-- status authorising date is not set
3021   DECLARE
3022   BEGIN
3023   	p_message_name := NULL;
3024   	IF (p_override_outcome_allowed = 'N' AND
3025   			p_adm_outcome_status_reason IS NOT NULL) THEN
3026   		p_message_name := 'IGS_AD_REASON_SET_ADMOUTCOME';
3027   		RETURN FALSE;
3028   	END IF;
3029   	IF (p_adm_outcome_status_auth_dt IS NULL AND
3030   			p_adm_outcome_status_reason IS NOT NULL) THEN
3031   		p_message_name := 'IGS_AD_REASON_SET_ARTHDT';
3032   		RETURN FALSE;
3033   	END IF;
3034   	RETURN TRUE;
3035   END;
3036   EXCEPTION
3037   	WHEN OTHERS THEN
3038   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
3039 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_ovrd_reason');
3040 			 IGS_GE_MSG_STACK.ADD;
3041 			 APP_EXCEPTION.RAISE_EXCEPTION;
3042   END admp_val_ovrd_reason;
3043   --
3044   -- Validate that the course application is complete on offer.
3045   FUNCTION admp_val_offer_comp(
3046   p_person_id IN NUMBER ,
3047   p_admission_appl_number IN NUMBER ,
3048   p_nominated_course_cd IN VARCHAR2 ,
3049   p_acai_sequence_number IN NUMBER ,
3050   p_course_cd IN VARCHAR2 ,
3051   p_crv_version_number IN NUMBER ,
3052   p_admission_cat IN VARCHAR2 ,
3053   p_s_admission_process_type IN VARCHAR2 ,
3054   p_effective_dt IN DATE ,
3055   p_called_from IN VARCHAR2 ,
3056   p_message_name OUT NOCOPY VARCHAR2 )
3057   RETURN BOOLEAN AS
3058   BEGIN	-- admp_val_offer_comp
3059   	-- Validate that the course application is complete on offer
3060   DECLARE
3061   	v_message_name			VARCHAR2(30);
3062   	v_mandatory_athletics 		BOOLEAN;
3063   	v_mandatory_alternate 		BOOLEAN;
3064   	v_mandatory_address 		BOOLEAN;
3065   	v_mandatory_disability 		BOOLEAN;
3066   	v_mandatory_visa 		BOOLEAN;
3067   	v_mandatory_finance 		BOOLEAN;
3068   	v_mandatory_notes 		BOOLEAN;
3069   	v_mandatory_statistics 		BOOLEAN;
3070   	v_mandatory_alias 		BOOLEAN;
3071   	v_mandatory_tertiary 		BOOLEAN;
3072   	v_mandatory_aus_sec_ed 		BOOLEAN;
3073   	v_mandatory_os_sec_ed 		BOOLEAN;
3074   	v_mandatory_employment 		BOOLEAN;
3075   	v_mandatory_membership 		BOOLEAN;
3076   	v_mandatory_dob 		BOOLEAN;
3077   	v_mandatory_title 		BOOLEAN;
3078   	v_mandatory_referee 		BOOLEAN;
3079   	v_mandatory_scholarship 	BOOLEAN;
3080   	v_mandatory_lang_prof 		BOOLEAN;
3081   	v_mandatory_interview 		BOOLEAN;
3082   	v_mandatory_exchange 		BOOLEAN;
3083   	v_mandatory_adm_test		BOOLEAN;
3084   	v_mandatory_fee_assess 		BOOLEAN;
3085   	v_mandatory_cor_category 	BOOLEAN;
3086   	v_mandatory_enr_category 	BOOLEAN;
3087   	v_mandatory_research 		BOOLEAN;
3088   	v_mandatory_rank_app 		BOOLEAN;
3089   	v_mandatory_completion 		BOOLEAN;
3090   	v_mandatory_rank_set 		BOOLEAN;
3091   	v_mandatory_basis_adm 		BOOLEAN;
3092   	v_mandatory_crs_international	BOOLEAN;
3093   	v_mandatory_ass_tracking 	BOOLEAN;
3094   	v_mandatory_adm_code 		BOOLEAN;
3095   	v_mandatory_fund_source		BOOLEAN;
3096   	v_mandatory_location 		BOOLEAN;
3097   	v_mandatory_att_mode 		BOOLEAN;
3098   	v_mandatory_att_type 		BOOLEAN;
3099   	v_mandatory_unit_set		BOOLEAN;
3100   	v_valid_athletics 		BOOLEAN;
3101   	v_valid_alternate 		BOOLEAN;
3102   	v_valid_address 		BOOLEAN;
3103   	v_valid_disability 		BOOLEAN;
3104   	v_valid_visa 			BOOLEAN;
3105   	v_valid_finance 		BOOLEAN;
3106   	v_valid_notes 			BOOLEAN;
3107   	v_valid_statistics 		BOOLEAN;
3108   	v_valid_alias 			BOOLEAN;
3109   	v_valid_tertiary 		BOOLEAN;
3110   	v_valid_aus_sec_ed 		BOOLEAN;
3111   	v_valid_os_sec_ed 		BOOLEAN;
3112   	v_valid_employment 		BOOLEAN;
3113   	v_valid_membership 		BOOLEAN;
3114   	v_valid_dob 			BOOLEAN;
3115   	v_valid_title			BOOLEAN;
3116   	v_valid_referee			BOOLEAN;
3117   	v_valid_scholarship 		BOOLEAN;
3118   	v_valid_lang_prof	 	BOOLEAN;
3119   	v_valid_interview 		BOOLEAN;
3120   	v_valid_exchange 		BOOLEAN;
3121   	v_valid_adm_test		BOOLEAN;
3122   	v_valid_fee_assess 		BOOLEAN;
3123   	v_valid_cor_category 		BOOLEAN;
3124   	v_valid_enr_category 		BOOLEAN;
3125   	v_valid_research 		BOOLEAN;
3126   	v_valid_rank_app 		BOOLEAN;
3127   	v_valid_completion 		BOOLEAN;
3128   	v_valid_rank_set 		BOOLEAN;
3129   	v_valid_basis_adm 		BOOLEAN;
3130   	v_valid_crs_international 	BOOLEAN;
3131   	v_valid_ass_tracking 		BOOLEAN;
3132   	v_valid_adm_code 		BOOLEAN;
3133   	v_valid_fund_source		BOOLEAN;
3134   	v_valid_location 		BOOLEAN;
3135   	v_valid_att_mode 		BOOLEAN;
3136   	v_valid_att_type 		BOOLEAN;
3137   	v_valid_unit_set		BOOLEAN;
3138 	v_valid_extrcurr                BOOLEAN;
3139         v_mandatory_evaluation_tab      BOOLEAN;
3140         v_mandatory_prog_approval       BOOLEAN;
3141         v_mandatory_indices             BOOLEAN;
3142         v_mandatory_tst_scores          BOOLEAN;
3143         v_mandatory_outcome           BOOLEAN ;
3144         v_mandatory_override          BOOLEAN ;
3145         v_mandatory_spl_consider      BOOLEAN ;
3146         v_mandatory_cond_offer        BOOLEAN ;
3147         v_mandatory_offer_dead        BOOLEAN ;
3148         v_mandatory_offer_resp        BOOLEAN ;
3149         v_mandatory_offer_defer       BOOLEAN ;
3150         v_mandatory_offer_compl       BOOLEAN ;
3151         v_mandatory_transfer          BOOLEAN ;
3152         v_mandatory_other_inst        BOOLEAN ;
3153         v_mandatory_edu_goals         BOOLEAN ;
3154         v_mandatory_acad_interest     BOOLEAN ;
3155         v_mandatory_app_intent        BOOLEAN ;
3156         v_mandatory_spl_interest      BOOLEAN ;
3157         v_mandatory_spl_talents       BOOLEAN ;
3158         v_mandatory_miscell           BOOLEAN ;
3159         v_mandatory_fees              BOOLEAN ;
3160         v_mandatory_program           BOOLEAN ;
3161         v_mandatory_completness       BOOLEAN ;
3162         v_mandatory_creden            BOOLEAN ;
3163         v_mandatory_review_det        BOOLEAN ;
3164         v_mandatory_recomm_det        BOOLEAN ;
3165         v_mandatory_fin_aid           BOOLEAN ;
3166         v_mandatory_acad_honors       BOOLEAN ;
3167         v_mandatory_des_unitsets      BOOLEAN ; -- added for 2382599
3168 	v_mandatory_extrcurr 	      BOOLEAN;
3169 
3170 
3171   BEGIN
3172   	--set the default message number
3173   	p_message_name := NULL;
3174   	--get the mandatory admission steps
3175   	IGS_AD_GEN_003.ADMP_GET_APCS_MNDTRY(
3176   			p_admission_cat,
3177   			p_s_admission_process_type,
3178   			v_mandatory_athletics,
3179   			v_mandatory_alternate,
3180   			v_mandatory_address,
3181   			v_mandatory_disability,
3182   			v_mandatory_visa,
3183   			v_mandatory_finance,
3184   			v_mandatory_notes,
3185   			v_mandatory_statistics,
3186   			v_mandatory_alias,
3187   			v_mandatory_tertiary,
3188   			v_mandatory_aus_sec_ed,
3189   			v_mandatory_os_sec_ed,
3190   			v_mandatory_employment,
3191   			v_mandatory_membership,
3192   			v_mandatory_dob,
3193   			v_mandatory_title,
3194   			v_mandatory_referee,
3195   			v_mandatory_scholarship,
3196   			v_mandatory_lang_prof,
3197   			v_mandatory_interview,
3198   			v_mandatory_exchange,
3199   			v_mandatory_adm_test,
3200   			v_mandatory_fee_assess,
3201   			v_mandatory_cor_category,
3202   			v_mandatory_enr_category,
3203   			v_mandatory_research,
3204   			v_mandatory_rank_app,
3205   			v_mandatory_completion,
3206   			v_mandatory_rank_set,
3207   			v_mandatory_basis_adm,
3208   			v_mandatory_crs_international,
3209   			v_mandatory_ass_tracking,
3210   			v_mandatory_adm_code,
3211   			v_mandatory_fund_source,
3212   			v_mandatory_location,
3213   			v_mandatory_att_mode,
3214   			v_mandatory_att_type,
3215   			v_mandatory_unit_set,
3216                         v_mandatory_evaluation_tab,
3217                         v_mandatory_prog_approval ,
3218                         v_mandatory_indices       ,
3219                         v_mandatory_tst_scores   ,
3220                         v_mandatory_outcome       ,
3221                         v_mandatory_override      ,
3222                         v_mandatory_spl_consider ,
3223                         v_mandatory_cond_offer    ,
3224                         v_mandatory_offer_dead    ,
3225                         v_mandatory_offer_resp    ,
3226                         v_mandatory_offer_defer   ,
3227                         v_mandatory_offer_compl   ,
3228                         v_mandatory_transfer      ,
3229                         v_mandatory_other_inst   ,
3230                         v_mandatory_edu_goals   ,
3231                         v_mandatory_acad_interest ,
3232                         v_mandatory_app_intent    ,
3233                         v_mandatory_spl_interest  ,
3234                         v_mandatory_spl_talents   ,
3235                         v_mandatory_miscell       ,
3236                         v_mandatory_fees          ,
3237                         v_mandatory_program      ,
3238                         v_mandatory_completness   ,
3239                         v_mandatory_creden        ,
3240                         v_mandatory_review_det   ,
3241                         v_mandatory_recomm_det ,
3242                         v_mandatory_fin_aid       ,
3243                         v_mandatory_acad_honors ,
3244                         v_mandatory_des_unitsets,
3245 			v_mandatory_extrcurr);
3246 
3247   	--validate if the admission application IGS_PE_PERSON details are complete
3248   	IF (IGS_AD_VAL_ACAI.admp_val_pe_comp(
3249   				p_person_id,
3250   				p_effective_dt,
3251   			        v_mandatory_athletics,
3252   				v_mandatory_alternate,
3253   				v_mandatory_address,
3254   				v_mandatory_disability,
3255   				v_mandatory_visa,
3256   				v_mandatory_finance,
3257   				v_mandatory_notes,
3258   				v_mandatory_statistics,
3259   				v_mandatory_alias,
3260   				v_mandatory_tertiary,
3261   				v_mandatory_aus_sec_ed,
3262   				v_mandatory_os_sec_ed,
3263   				v_mandatory_employment,
3264   				v_mandatory_membership,
3265   				v_mandatory_dob,
3266   				v_mandatory_title,
3267   				v_mandatory_extrcurr,
3268 				v_message_name,
3269   				v_valid_athletics,
3270   				v_valid_alternate,
3271   				v_valid_address,
3272   				v_valid_disability,
3273   				v_valid_visa,
3274   				v_valid_finance,
3275   				v_valid_notes,
3276   				v_valid_statistics,
3277   				v_valid_alias,
3278   				v_valid_tertiary,
3279   				v_valid_aus_sec_ed,
3280   				v_valid_os_sec_ed,
3281   				v_valid_employment,
3282   				v_valid_membership,
3283   				v_valid_dob,
3284   				v_valid_title,
3285 				v_valid_extrcurr ) = FALSE) THEN
3286   		p_message_name := v_message_name;
3287   		RETURN FALSE;
3288   	END IF;
3289   	--Validate if the admission application course details are complete
3290   	-- Only peform this validation if not called from the form.
3291   	IF p_called_from <> 'FORM' THEN
3292   		IF (IGS_AD_VAL_ACAI.admp_val_acai_comp(
3293   					p_person_id,
3294   					p_admission_appl_number,
3295   					p_nominated_course_cd,
3296   					p_acai_sequence_number,
3297   					p_course_cd,
3298   					p_crv_version_number,
3299   					p_s_admission_process_type,
3300   					p_effective_dt,
3301   					v_mandatory_referee,
3302   					v_mandatory_scholarship,
3303   					v_mandatory_lang_prof,
3304   					v_mandatory_interview,
3305   					v_mandatory_exchange,
3306   					v_mandatory_adm_test,
3307   					v_mandatory_fee_assess,
3308   					v_mandatory_cor_category,
3309   					v_mandatory_enr_category,
3310   					v_mandatory_research,
3311   					v_mandatory_rank_app,
3312   					v_mandatory_completion,
3313   					v_mandatory_rank_set,
3314   					v_mandatory_basis_adm,
3315   					v_mandatory_crs_international,
3316   					v_mandatory_ass_tracking,
3317   					v_mandatory_adm_code,
3318   					v_mandatory_fund_source,
3319   					v_mandatory_location,
3320   					v_mandatory_att_mode,
3321   					v_mandatory_att_type,
3322   					v_mandatory_unit_set,
3323   					v_message_name,
3324   					v_valid_referee,
3325   					v_valid_scholarship,
3326   					v_valid_lang_prof,
3327   					v_valid_interview,
3328   					v_valid_exchange,
3329   					v_valid_adm_test,
3330   					v_valid_fee_assess,
3331   					v_valid_cor_category,
3332   					v_valid_enr_category,
3333   					v_valid_research,
3334   					v_valid_rank_app,
3335   					v_valid_completion,
3336   					v_valid_rank_set,
3337   					v_valid_basis_adm,
3338   					v_valid_crs_international,
3339   					v_valid_ass_tracking,
3340   					v_valid_adm_code,
3341   					v_valid_fund_source,
3342   					v_valid_location,
3343   					v_valid_att_mode,
3344   					v_valid_att_type,
3345   					v_valid_unit_set) = FALSE) THEN
3346   			p_message_name := v_message_name;
3347   			RETURN FALSE;
3348   		END IF;
3349   	END IF;
3350   	RETURN TRUE;
3351   END;
3352   EXCEPTION
3353   	WHEN OTHERS THEN
3354   		         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
3355 				 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_offer_comp');
3356 				 IGS_GE_MSG_STACK.ADD;
3357 				 APP_EXCEPTION.RAISE_EXCEPTION;
3358   END admp_val_offer_comp;
3359   --
3360   -- Validate if the specified IGS_AD_PS_APPL_INST is complete.
3361   FUNCTION admp_val_acai_comp(
3362   p_person_id IN NUMBER ,
3363   p_admission_appl_number IN NUMBER ,
3364   p_nominated_course_cd IN VARCHAR2 ,
3365   p_acai_sequence_number IN NUMBER ,
3366   p_course_cd IN VARCHAR2 ,
3367   p_crv_version_number IN NUMBER ,
3368   p_s_admission_process_type IN VARCHAR2 ,
3369   p_effective_dt IN DATE ,
3370   p_check_referee IN BOOLEAN ,
3371   p_check_scholarship IN BOOLEAN ,
3372   p_check_lang_prof IN BOOLEAN ,
3373   p_check_interview IN BOOLEAN ,
3374   p_check_exchange IN BOOLEAN ,
3375   p_check_adm_test IN BOOLEAN ,
3376   p_check_fee_assess IN BOOLEAN ,
3377   p_check_cor_category IN BOOLEAN ,
3378   p_check_enr_category IN BOOLEAN ,
3379   p_check_research IN BOOLEAN ,
3380   p_check_rank_app IN BOOLEAN ,
3381   p_check_completion IN BOOLEAN ,
3382   p_check_rank_set IN BOOLEAN ,
3383   p_check_basis_adm IN BOOLEAN ,
3384   p_check_crs_international IN BOOLEAN ,
3385   p_check_ass_tracking IN BOOLEAN ,
3386   p_check_adm_code IN BOOLEAN ,
3387   p_check_fund_source IN BOOLEAN ,
3388   p_check_location IN BOOLEAN ,
3389   p_check_att_mode IN BOOLEAN ,
3390   p_check_att_type IN BOOLEAN ,
3391   p_check_unit_set IN BOOLEAN ,
3392   p_message_name OUT NOCOPY  VARCHAR2 ,
3393   p_valid_referee OUT NOCOPY BOOLEAN ,
3394   p_valid_scholarship OUT NOCOPY BOOLEAN ,
3395   p_valid_lang_prof OUT NOCOPY BOOLEAN ,
3396   p_valid_interview OUT NOCOPY BOOLEAN ,
3397   p_valid_exchange OUT NOCOPY BOOLEAN ,
3398   p_valid_adm_test OUT NOCOPY BOOLEAN ,
3399   p_valid_fee_assess OUT NOCOPY BOOLEAN ,
3400   p_valid_cor_category OUT NOCOPY BOOLEAN ,
3401   p_valid_enr_category OUT NOCOPY BOOLEAN ,
3402   p_valid_research OUT NOCOPY BOOLEAN ,
3403   p_valid_rank_app OUT NOCOPY BOOLEAN ,
3404   p_valid_completion OUT NOCOPY BOOLEAN ,
3405   p_valid_rank_set OUT NOCOPY BOOLEAN ,
3406   p_valid_basis_adm OUT NOCOPY BOOLEAN ,
3407   p_valid_crs_international OUT NOCOPY BOOLEAN ,
3408   p_valid_ass_tracking OUT NOCOPY BOOLEAN ,
3409   p_valid_adm_code OUT NOCOPY BOOLEAN ,
3410   p_valid_fund_source OUT NOCOPY BOOLEAN ,
3411   p_valid_location OUT NOCOPY BOOLEAN ,
3412   p_valid_att_mode OUT NOCOPY BOOLEAN ,
3413   p_valid_att_type OUT NOCOPY BOOLEAN ,
3414   p_valid_unit_set OUT NOCOPY BOOLEAN )
3415   RETURN BOOLEAN AS
3416   -------------------------------------------------------------------------------------------
3417   --Change History:
3418   --Who         When            What
3419   --samaresh    21-DEC-2001     Bug No. 2158524 . The cursor c_ar has been modified as the
3420   --                            the table IGS_AD_APP_ REQ has been moved from application
3421   --                            instance level to application level
3422   -- ssawhney   24-oct-2002     SWS104 build 2630860, AD_ACAD_HONOR reference moved to PE.
3423   -------------------------------------------------------------------------------------------
3424 
3425   BEGIN	-- admp_val_acai_comp
3426   	-- Validate if the specified IGS_AD_PS_APPL_INST is complete
3427   DECLARE
3428   	cst_re_admit			VARCHAR2(10) := 'RE-ADMIT';
3429   	v_check_research		BOOLEAN		:=  FALSE;
3430   	v_valid_referee			BOOLEAN		:= FALSE;
3431   	v_valid_scholarship		BOOLEAN		:= FALSE;
3432   	v_valid_lang_prof		BOOLEAN		:= FALSE;
3433   	v_valid_interview		BOOLEAN		:= FALSE;
3434   	v_valid_exchange		BOOLEAN		:= FALSE;
3435   	v_valid_adm_test		BOOLEAN		:= FALSE;
3436   	v_valid_fee_assess		BOOLEAN		:= FALSE;
3437   	v_valid_cor_category		BOOLEAN		:= FALSE;
3438   	v_valid_enr_category		BOOLEAN		:= FALSE;
3439   	v_valid_research		BOOLEAN		:= FALSE;
3440   	v_valid_rank_app		BOOLEAN		:= FALSE;
3441   	v_valid_completion		BOOLEAN		:= FALSE;
3442   	v_valid_rank_set		BOOLEAN		:= FALSE;
3443   	v_valid_basis_adm		BOOLEAN		:= FALSE;
3444   	v_valid_crs_international	BOOLEAN		:= FALSE;
3445   	v_valid_ass_tracking		BOOLEAN		:= FALSE;
3446   	v_valid_adm_code		BOOLEAN		:= FALSE;
3447   	v_valid_fund_source		BOOLEAN		:= FALSE;
3448   	v_valid_location		BOOLEAN		:= FALSE;
3449   	v_valid_att_mode		BOOLEAN		:= FALSE;
3450   	v_valid_att_type		BOOLEAN		:= FALSE;
3451   	v_valid_unit_set		BOOLEAN		:= FALSE;
3452   	v_location_cd			IGS_AD_PS_APPL_INST_APLINST_V.location_cd%TYPE;
3453   	v_attendance_mode		IGS_AD_PS_APPL_INST_APLINST_V.attendance_mode%TYPE;
3454   	v_attendance_type		IGS_AD_PS_APPL_INST_APLINST_V.attendance_type%TYPE;
3455   	v_unit_set_cd			IGS_AD_PS_APPL_INST_APLINST_V.unit_set_cd%TYPE;
3456   	v_us_version_number		IGS_AD_PS_APPL_INST_APLINST_V.us_version_number%TYPE;
3457   	v_ass_rank			IGS_AD_PS_APPL_INST_APLINST_V.ass_rank%TYPE;
3458   	v_intrntnl_accptnce_advice_num
3459   					IGS_AD_PS_APPL_INST_APLINST_V.intrntnl_acceptance_advice_num%TYPE;
3460   	v_ass_tracking_id		IGS_AD_PS_APPL_INST_APLINST_V.ass_tracking_id%TYPE;
3461   	v_fee_cat			IGS_AD_PS_APPL_INST_APLINST_V.fee_cat%TYPE;
3462   	v_expected_completion_yr	IGS_AD_PS_APPL_INST_APLINST_V.expected_completion_yr%TYPE;
3463   	v_expected_completion_perd
3464   					IGS_AD_PS_APPL_INST_APLINST_V.expected_completion_perd%TYPE;
3465   	v_correspondence_cat		IGS_AD_PS_APPL_INST_APLINST_V.correspondence_cat%TYPE;
3466   	v_enrolment_cat			IGS_AD_PS_APPL_INST_APLINST_V.enrolment_cat%TYPE;
3467   	v_funding_source		IGS_AD_PS_APPL_INST_APLINST_V.funding_source%TYPE;
3468   	v_basis_for_admission_type
3469   					IGS_AD_PS_APPL_INST_APLINST_V.basis_for_admission_type%TYPE;
3470   	v_admission_cd			IGS_AD_PS_APPL_INST_APLINST_V.admission_cd%TYPE;
3471   	v_course_rank_set		IGS_AD_PS_APPL_INST_APLINST_V.course_rank_set%TYPE;
3472   	v_course_rank_schedule		IGS_AD_PS_APPL_INST_APLINST_V.course_rank_schedule%TYPE;
3473   	v_sca_fee_cat			IGS_EN_STDNT_PS_ATT.fee_cat%TYPE;
3474   	v_sca_funding_source		IGS_EN_STDNT_PS_ATT.funding_source%TYPE;
3475   	v_sca_correspondence_cat	IGS_EN_STDNT_PS_ATT.correspondence_cat%TYPE;
3476   	v_scae_enrolment_cat		IGS_AS_SC_ATMPT_ENR.enrolment_cat%TYPE;
3477   	v_dummy				VARCHAR2(1);
3478         v_error_message_research        VARCHAR2(30);
3479 
3480   	CURSOR c_acaiv IS
3481   		SELECT	acaiv.location_cd,
3482   			acaiv.attendance_mode,
3483   			acaiv.attendance_type,
3484   			acaiv.unit_set_cd,
3485   			acaiv.us_version_number,
3486   			acaiv.ass_rank,
3487   			acaiv.intrntnl_acceptance_advice_num,
3488   			acaiv.ass_tracking_id,
3489   			acaiv.fee_cat,
3490   			acaiv.expected_completion_yr,
3491   			acaiv.expected_completion_perd,
3492   			acaiv.correspondence_cat,
3493   			acaiv.enrolment_cat,
3494   			acaiv.funding_source,
3495   			acav.basis_for_admission_type,
3496   			acav.admission_cd,
3497   			acav.course_rank_set,
3498   			acav.course_rank_schedule
3499   		FROM	IGS_AD_PS_APPL_INST	acaiv,
3500  		  	    IGS_AD_PS_APPL	acav
3501   		WHERE	acaiv.person_id 		= p_person_id AND
3502   			acaiv.admission_appl_number 	= p_admission_appl_number AND
3503   			acaiv.nominated_course_cd 	= p_nominated_course_cd AND
3504   			acaiv.sequence_number 		= p_acai_sequence_number AND
3505   			acav.person_id 		= acaiv.person_id AND
3506   			acav.admission_appl_number 	= acaiv.admission_appl_number AND
3507   			acav.nominated_course_cd 	= acav.nominated_course_cd;
3508   	CURSOR c_sca IS
3509   		SELECT	sca.fee_cat,
3510   			sca.correspondence_cat,
3511   			sca.funding_source
3512   		FROM	IGS_EN_STDNT_PS_ATT	sca
3513   		WHERE	sca.person_id	= p_person_id	AND
3514   			sca.course_cd	= p_course_cd;
3515   	CURSOR c_scae IS
3516   		SELECT	scae.enrolment_cat
3517   		FROM	IGS_AS_SC_ATMPT_ENR	scae
3518   		WHERE	scae.person_id	= p_person_id	AND
3519   			scae.course_cd	= p_course_cd;
3520   	CURSOR c_crv IS
3521   		SELECT	'x'
3522   		FROM	IGS_PS_VER crv,
3523   			IGS_PS_TYPE cty
3524   		WHERE	crv.course_cd 		= p_course_cd AND
3525   			crv.version_number 	= p_crv_version_number AND
3526   			cty.course_type 	= crv.course_type AND
3527   			cty.research_type_ind 	= 'Y';
3528 
3529       v_return  BOOLEAN := TRUE;
3530       v_person_id  igs_pe_person_v.person_id%TYPE;
3531     CURSOR c_apcs IS
3532 		  SELECT	apcs.s_admission_step_type
3533   		FROM	IGS_AD_PRCS_CAT_STEP	apcs
3534 		  WHERE admission_cat= (SELECT admission_cat
3535 				                    FROM IGS_AD_APPL  /* Replaced IGS_AD_APPL_ADMAPPL_V with IGS_AD_APPL Bug 3150054 */
3536                             WHERE person_id = p_person_id AND
3537                                   admission_appl_number=p_admission_appl_number) AND
3538 		        s_admission_process_type = p_s_admission_process_type	AND
3539 		        mandatory_step_ind = 'Y' AND
3540 		        step_group_type <> 'TRACK';
3541 
3542             CURSOR c_ae IS
3543 		SELECT	person_id
3544 		FROM	IGS_ad_appl_eval_v
3545 		WHERE	person_id	= p_person_id AND
3546 	            admission_appl_number = p_admission_appl_number AND
3547 			nominated_course_cd = p_nominated_course_cd;
3548             CURSOR c_pa IS
3549 		SELECT	person_id
3550 		FROM	igs_Ad_appl_pgmapprv_v
3551 		WHERE	person_id	= p_person_id AND
3552 	            admission_appl_number = p_admission_appl_number AND
3553 			nominated_course_cd = p_nominated_course_cd;
3554             CURSOR c_us IS
3555 		SELECT	person_id
3556 		FROM	igs_ad_unit_sets_v
3557 		WHERE	person_id	= p_person_id AND
3558 	            admission_appl_number = p_admission_appl_number AND
3559 			nominated_course_cd = p_nominated_course_cd;
3560 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3561 	    CURSOR c_oi IS
3562 		SELECT	person_id
3563 		FROM	igs_ad_other_inst
3564 		WHERE	person_id	= p_person_id AND
3565 	        admission_appl_number = p_admission_appl_number;
3566             CURSOR c_eg IS
3567 		SELECT	person_id
3568 		FROM	igs_ad_edu_goal_v
3569 		WHERE	person_id	= p_person_id AND
3570 	            admission_appl_number = p_admission_appl_number AND
3571 			nominated_course_cd = p_nominated_course_cd;
3572 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3573             CURSOR c_ai IS
3574 		SELECT	person_id
3575 		FROM	igs_ad_acad_interest_v
3576 		WHERE	person_id	= p_person_id AND
3577 	                admission_appl_number = p_admission_appl_number;
3578 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3579             CURSOR c_in IS
3580 		SELECT	person_id
3581 		FROM	igs_ad_app_intent_v
3582 		WHERE	person_id	= p_person_id AND
3583 	                admission_appl_number = p_admission_appl_number;
3584 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3585             CURSOR c_si IS
3586 		SELECT	person_id
3587 		FROM	igs_ad_spl_interests_v
3588 		WHERE	person_id	= p_person_id AND
3589 	                admission_appl_number = p_admission_appl_number;
3590 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3591             CURSOR c_st IS
3592 		SELECT	person_id
3593 		FROM	igs_ad_spl_talents_v
3594 		WHERE	person_id	= p_person_id AND
3595 	                admission_appl_number = p_admission_appl_number;
3596             CURSOR c_ar IS
3597 		SELECT	person_id
3598 		FROM	igs_ad_app_req_v
3599 		WHERE	person_id	= p_person_id AND
3600                         admission_appl_number = p_admission_appl_number;
3601 	    -- Enh# 2177686, DAP Re-design. To revisit in Adimit to future term.
3602             CURSOR c_ac IS
3603 		SELECT	person_id
3604 		FROM	igs_pe_credentials
3605 		WHERE	person_id	= p_person_id;
3606 	    -- Enh# 2177686, DAP Re-design. Removed the nominated_course_cd join.
3607 	    -- Enh# SWS104 build, 2630860 acad honors moved to PE
3608 	    CURSOR c_ah IS
3609 		SELECT	person_id
3610 		FROM	igs_pe_acad_honors_v
3611 		WHERE	person_id	= p_person_id ;
3612 		CURSOR c_md IS
3613 		SELECT	apply_for_finaid,
3614             app_file_location,
3615 			late_adm_fee_status,
3616 			enrolment_cat,
3617 			fee_cat,
3618 			hecs_payment_option,
3619 			app_source_id,
3620 			correspondence_cat,
3621 			funding_source
3622 		FROM	igs_ad_ps_appl_inst
3623 		WHERE	person_id	= p_person_id AND
3624 	        admission_appl_number = p_admission_appl_number AND
3625 			    nominated_course_cd = p_nominated_course_cd;
3626 
3627     CURSOR c_id_exist IS
3628       SELECT person_id
3629       FROM   igs_ad_panel_dtls
3630       WHERE  person_id = p_person_id AND
3631          	   admission_appl_number = p_admission_appl_number AND
3632     	       nominated_course_cd = p_nominated_course_cd AND
3633              sequence_number = p_acai_sequence_number AND
3634              final_decision_type = 'FINAL_INTERVIEW';
3635     CURSOR c_id IS
3636       SELECT person_id
3637       FROM   igs_ad_panel_dtls
3638       WHERE  person_id = p_person_id AND
3639         	   admission_appl_number = p_admission_appl_number AND
3640     	       nominated_course_cd = p_nominated_course_cd AND
3641              sequence_number = p_acai_sequence_number AND
3642              final_decision_type = 'FINAL_INTERVIEW' AND
3643              EXISTS (SELECT 'x'
3644                      FROM   igs_ad_code_classes
3645                      WHERE  class = 'FINAL_INTERVIEW'
3646                      AND    name = final_decision_code
3647                      AND    system_status <> 'PENDING'
3648 		     AND    CLASS_TYPE_CODE='ADM_CODE_CLASSES');
3649 
3650       v_app_file_location1 igs_ad_ps_appl_inst.app_file_location%TYPE;
3651 			v_late_adm_fee_status1 igs_ad_ps_appl_inst.late_adm_fee_status%TYPE;
3652 			v_enrolment_cat1 igs_ad_ps_appl_inst.enrolment_cat%TYPE;
3653 			v_fee_cat1 igs_ad_ps_appl_inst.fee_cat%TYPE;
3654 			v_hecs_payment_option1 igs_ad_ps_appl_inst.hecs_payment_option%TYPE;
3655 			v_app_source_id1 igs_ad_ps_appl_inst.app_source_id%TYPE;
3656 			v_correspondence_cat1 igs_ad_ps_appl_inst.correspondence_cat%TYPE;
3657 			v_funding_source1 igs_ad_ps_appl_inst.funding_source%TYPE;
3658 	                v_apply_for_finaid VARCHAR2(1);
3659   BEGIN
3660   	-- Initialise the output 'valid' parameters
3661   	IF (p_check_referee) THEN
3662   		p_valid_referee	:= FALSE;
3663   	ELSE
3664   		p_valid_referee	:= TRUE;
3665   	END IF;
3666   	IF (p_check_scholarship) THEN
3667   		p_valid_scholarship := FALSE;
3668   	ELSE
3669   		p_valid_scholarship := TRUE;
3670   	END IF;
3671   	IF (p_check_lang_prof) THEN
3672   		p_valid_lang_prof := FALSE;
3673   	ELSE
3674   		p_valid_lang_prof := TRUE;
3675   	END IF;
3676   	IF (p_check_interview) THEN
3677   		p_valid_interview := FALSE;
3678   	ELSE
3679   		p_valid_interview := TRUE;
3680   	END IF;
3681   	IF (p_check_exchange) THEN
3682   		p_valid_exchange := FALSE;
3683   	ELSE
3684   		p_valid_exchange := TRUE;
3685   	END IF;
3686   	IF (p_check_adm_test) THEN
3687   		p_valid_adm_test := FALSE;
3688   	ELSE
3689   		p_valid_adm_test := TRUE;
3690   	END IF;
3691   	IF (p_check_fee_assess) THEN
3692   		p_valid_fee_assess := FALSE;
3693   	ELSE
3694   		p_valid_fee_assess := TRUE;
3695   	END IF;
3696   	IF (p_check_cor_category) THEN
3697   		p_valid_cor_category := FALSE;
3698   	ELSE
3699   		p_valid_cor_category := TRUE;
3700   	END IF;
3701   	IF (p_check_enr_category) THEN
3702   		p_valid_enr_category := FALSE;
3703   	ELSE
3704   		p_valid_enr_category := TRUE;
3705   	END IF;
3706   	IF (p_check_research) THEN
3707   		p_valid_research := FALSE;
3708   		v_check_research := TRUE;
3709   	ELSE
3710   		-- Check if research data should be mandatory.
3711   		-- Research data is mandatory for research courses.
3712   		OPEN c_crv;
3713   		FETCH c_crv INTO v_dummy;
3714   		IF c_crv%FOUND THEN
3715   			CLOSE c_crv;
3716   			v_check_research := TRUE;
3717   			p_valid_research := FALSE;
3718   		ELSE
3719   			CLOSE c_crv;
3720   			v_check_research := FALSE;
3721   			p_valid_research := TRUE;
3722   		END IF;
3723   	END IF;
3724   	IF (p_check_rank_app) THEN
3725   		p_valid_rank_app := FALSE;
3726   	ELSE
3727   		p_valid_rank_app := TRUE;
3728   	END IF;
3729   	IF (p_check_completion) THEN
3730   		p_valid_completion := FALSE;
3731   	ELSE
3732   		p_valid_completion := TRUE;
3733   	END IF;
3734   	IF (p_check_rank_set) THEN
3735   		p_valid_rank_set := FALSE;
3736   	ELSE
3737   		p_valid_rank_set := TRUE;
3738   	END IF;
3739   	IF (p_check_basis_adm) THEN
3740   		p_valid_basis_adm := FALSE;
3741   	ELSE
3742   		p_valid_basis_adm := TRUE;
3743   	END IF;
3744   	IF (p_check_crs_international) THEN
3745   		p_valid_crs_international := FALSE;
3746   	ELSE
3747   		p_valid_crs_international := TRUE;
3748   	END IF;
3749   	IF (p_check_ass_tracking) THEN
3750   		p_valid_ass_tracking := FALSE;
3751   	ELSE
3752   		p_valid_ass_tracking := TRUE;
3753   	END IF;
3754   	IF (p_check_adm_code) THEN
3755   		p_valid_adm_code := FALSE;
3756   	ELSE
3757   		p_valid_adm_code := TRUE;
3758   	END IF;
3759   	IF (p_check_fund_source) THEN
3760   		p_valid_fund_source := FALSE;
3761   	ELSE
3762   		p_valid_fund_source := TRUE;
3763   	END IF;
3764   	IF (p_check_location) THEN
3765   		p_valid_location := FALSE;
3766   	ELSE
3767   		p_valid_location := TRUE;
3768   	END IF;
3769   	IF (p_check_att_mode) THEN
3770   		p_valid_att_mode := FALSE;
3771   	ELSE
3772   		p_valid_att_mode := TRUE;
3773   	END IF;
3774   	IF (p_check_att_type) THEN
3775   		p_valid_att_type := FALSE;
3776   	ELSE
3777   		p_valid_att_type := TRUE;
3778   	END IF;
3779   	IF (p_check_unit_set) THEN
3780   		p_valid_unit_set := FALSE;
3781   	ELSE
3782   		p_valid_unit_set := TRUE;
3783   	END IF;
3784   	-- Validate course level data
3785   	IF (p_check_referee = TRUE OR
3786   			p_check_scholarship	= TRUE OR
3787   			p_check_lang_prof	= TRUE OR
3788   			p_check_interview 	= TRUE OR
3789   			p_check_exchange 	= TRUE OR
3790   			p_check_adm_test	= TRUE OR
3791   			v_check_research	= TRUE) THEN
3792   		IGS_AD_GEN_004.ADMP_GET_CRS_EXISTS(
3793   				p_person_id,
3794   				p_admission_appl_number,
3795   				p_nominated_course_cd,
3796   				p_acai_sequence_number,
3797   				p_course_cd,
3798   				p_effective_dt,
3799   				p_s_admission_process_type,
3800   				p_check_referee,
3801   				p_check_scholarship,
3802   				p_check_lang_prof,
3803   				p_check_interview,
3804   				p_check_exchange,
3805   				p_check_adm_test,
3806   				v_check_research,
3807   				v_valid_referee,
3808   				v_valid_scholarship,
3809   				v_valid_lang_prof,
3810   				v_valid_interview,
3811   				v_valid_exchange,
3812   				v_valid_adm_test,
3813   				v_valid_research,
3814 				v_error_message_research);
3815 
3816       IF v_error_message_research IS NULL THEN
3817         v_error_message_research := 'IGS_AD_INVALID_RESDET';
3818       END IF;
3819 
3820   		IF (v_valid_referee = TRUE) THEN
3821   			p_valid_referee := TRUE;
3822   		END IF;
3823   		IF (v_valid_scholarship = TRUE) THEN
3824   			p_valid_scholarship := TRUE;
3825   		END IF;
3826   		IF (v_valid_lang_prof = TRUE) THEN
3827   			p_valid_lang_prof := TRUE;
3828   		END IF;
3829   		IF (v_valid_interview = TRUE) THEN
3830   			p_valid_interview := TRUE;
3831   		END IF;
3832   		IF (v_valid_exchange = TRUE) THEN
3833   			p_valid_exchange := TRUE;
3834   		END IF;
3835   		IF (v_valid_adm_test = TRUE) THEN
3836   			p_valid_adm_test := TRUE;
3837   		END IF;
3838   		IF (v_valid_research = TRUE) THEN
3839   			p_valid_research := TRUE;
3840   		END IF;
3841   	END IF;
3842   	IF (p_check_fee_assess 		= TRUE OR
3843   		p_check_cor_category 	= TRUE OR
3844   		p_check_enr_category 	= TRUE OR
3845   		p_check_rank_app 	= TRUE OR
3846   		p_check_completion 	= TRUE OR
3847   		p_check_rank_set 	= TRUE OR
3848   		p_check_basis_adm 	= TRUE OR
3849   		p_check_crs_international = TRUE OR
3850   		p_check_ass_tracking 	= TRUE OR
3851   		p_check_adm_code 	= TRUE OR
3852   		p_check_fund_source 	= TRUE OR
3853   		p_check_location 	= TRUE OR
3854   		p_check_att_mode 	= TRUE OR
3855   		p_check_att_type 	= TRUE OR
3856   		p_check_unit_set 	= TRUE) THEN
3857   		OPEN c_acaiv;
3858   		FETCH c_acaiv INTO 	v_location_cd,
3859   					v_attendance_mode,
3860   					v_attendance_type,
3861   					v_unit_set_cd,
3862   					v_us_version_number,
3863   					v_ass_rank,
3864   					v_intrntnl_accptnce_advice_num,
3865   					v_ass_tracking_id,
3866   					v_fee_cat,
3867   					v_expected_completion_yr,
3868   					v_expected_completion_perd,
3869   					v_correspondence_cat,
3870   					v_enrolment_cat,
3871   					v_funding_source,
3872   					v_basis_for_admission_type,
3873   					v_admission_cd,
3874   					v_course_rank_set,
3875   					v_course_rank_schedule;
3876   		CLOSE c_acaiv;
3877   		IF (p_check_fee_assess) THEN
3878   			IF (v_fee_cat IS NOT NULL) THEN
3879   				p_valid_fee_assess := TRUE;
3880   				v_valid_fee_assess := TRUE;
3881   			ELSE
3882   				IF (p_s_admission_process_type = cst_re_admit) THEN
3883   					OPEN c_sca;
3884   					FETCH c_sca INTO v_sca_fee_cat,
3885   							 v_sca_correspondence_cat,
3886   							 v_sca_funding_source;
3887   					CLOSE c_sca;
3888   					IF (v_sca_fee_cat IS NOT NULL) THEN
3889   						p_valid_fee_assess := TRUE;
3890   						v_valid_fee_assess := TRUE;
3891   					END IF;
3892   				END IF;
3893   			END IF;
3894   		END IF;
3895   		IF (p_check_cor_category) THEN
3896   			IF (v_correspondence_cat IS NOT NULL) THEN
3897   				p_valid_cor_category := TRUE;
3898   				v_valid_cor_category := TRUE;
3899   			ELSE
3900   				IF (p_s_admission_process_type = cst_re_admit) THEN
3901   					OPEN c_sca;
3902   					FETCH c_sca INTO v_sca_fee_cat,
3903   							 v_sca_correspondence_cat,
3904   							 v_sca_funding_source;
3905   					CLOSE c_sca;
3906   					IF (v_sca_correspondence_cat IS NOT NULL) THEN
3907   						p_valid_cor_category := TRUE;
3908   						v_valid_cor_category := TRUE;
3909   					END IF;
3910   				END IF;
3911   			END IF;
3912   		END IF;
3913   		IF (p_check_enr_category) THEN
3914   			IF (v_enrolment_cat IS NOT NULL) THEN
3915   				p_valid_enr_category := TRUE;
3916   				v_valid_enr_category := TRUE;
3917   			ELSE
3918   				IF (p_s_admission_process_type = cst_re_admit) THEN
3919   					OPEN c_scae;
3920   					FETCH c_scae INTO v_scae_enrolment_cat;
3921   					IF (c_scae%FOUND) THEN
3922   						CLOSE c_scae;
3923   						p_valid_enr_category := TRUE;
3924   						v_valid_enr_category := TRUE;
3925   					ELSE
3926   						CLOSE c_scae;
3927   					END IF;
3928   				END IF;
3929   			END IF;
3930   		END IF;
3931   		IF (p_check_rank_app = TRUE AND
3932   				v_ass_rank IS NOT NULL) THEN
3933   			p_valid_rank_app := TRUE;
3934   			v_valid_rank_app := TRUE;
3935   		END IF;
3936   		IF (p_check_completion = TRUE AND
3937   				v_expected_completion_yr IS NOT NULL AND
3938   				v_expected_completion_perd IS NOT NULL) THEN
3939   			p_valid_completion := TRUE;
3940   			v_valid_completion := TRUE;
3941   		END IF;
3942   		IF (p_check_rank_set = TRUE AND
3943   				v_course_rank_set IS NOT NULL AND
3944   				v_course_rank_schedule IS NOT NULL) THEN
3945   			p_valid_rank_set := TRUE;
3946   			v_valid_rank_set := TRUE;
3947   		END IF;
3948   		IF (p_check_basis_adm = TRUE AND
3949   				v_basis_for_admission_type IS NOT NULL) THEN
3950   			p_valid_basis_adm := TRUE;
3951   			v_valid_basis_adm := TRUE;
3952   		END IF;
3953   		IF (p_check_crs_international = TRUE AND
3954   				v_intrntnl_accptnce_advice_num IS NOT NULL) THEN
3955   			p_valid_crs_international := TRUE;
3956   			v_valid_crs_international := TRUE;
3957   		END IF;
3958   		IF (p_check_ass_tracking = TRUE AND
3959   				v_ass_tracking_id IS NOT NULL) THEN
3960   			p_valid_ass_tracking := TRUE;
3961   			v_valid_ass_tracking := TRUE;
3962   		END IF;
3963   		IF (p_check_adm_code = TRUE AND
3964   				v_admission_cd IS NOT NULL) THEN
3965   			p_valid_adm_code := TRUE;
3966   			v_valid_adm_code := TRUE;
3967   		END IF;
3968   		IF p_check_fund_source = TRUE THEN
3969   			IF v_funding_source IS NOT NULL THEN
3970   				p_valid_fund_source := TRUE;
3971   				v_valid_fund_source := TRUE;
3972   			ELSE
3973   				IF p_s_admission_process_type = cst_re_admit THEN
3974   					OPEN c_sca;
3975   					FETCH c_sca INTO v_sca_fee_cat,
3976   							 v_sca_correspondence_cat,
3977   							 v_sca_funding_source;
3978   					CLOSE c_sca;
3979   					IF v_sca_funding_source IS NOT NULL THEN
3980   						p_valid_fund_source := TRUE;
3981   						v_valid_fund_source := TRUE;
3982   					END IF;
3983   				END IF;
3984   			END IF;
3985   		END IF;
3986   		IF (p_check_location = TRUE AND
3987   				v_location_cd IS NOT NULL) THEN
3988   			p_valid_location := TRUE;
3989   			v_valid_location := TRUE;
3990   		END IF;
3991   		IF (p_check_att_mode = TRUE AND
3992   				v_attendance_mode IS NOT NULL) THEN
3993   			p_valid_att_mode := TRUE;
3994   			v_valid_att_mode := TRUE;
3995   		END IF;
3996   		IF (p_check_att_type = TRUE AND
3997   				v_attendance_type IS NOT NULL) THEN
3998   			p_valid_att_type := TRUE;
3999   			v_valid_att_type := TRUE;
4000   		END IF;
4001   		IF (p_check_unit_set = TRUE AND
4002   				v_unit_set_cd IS NOT NULL) THEN
4003   			p_valid_unit_set := TRUE;
4004   			v_valid_unit_set := TRUE;
4005   		END IF;
4006   	END IF;
4007   	-- Return false if the admission course application instance is incomplete.
4008   	-- The spec differs from this code, in that you cannot test an OUT NOCOPY parameter
4009   	-- for
4010   	-- value, so we set up temporary local variables of the same name (swap the
4011   	-- first p
4012   	-- for a v) and gave them the same value (above).
4013 
4014 	-- by rrengara on 8-NOV-2002
4015 	-- for bug no 2629077 (P) 2595982 (D) changed v_check_research to p_check_research
4016 
4017 
4018   	IF (p_check_adm_test = TRUE AND
4019   			v_valid_adm_test = FALSE) OR
4020   			(p_check_fee_assess = TRUE AND
4021   			v_valid_fee_assess = FALSE) OR
4022   			(p_check_cor_category = TRUE AND
4023   			v_valid_cor_category = FALSE) OR
4024   			(p_check_enr_category = TRUE AND
4025   			v_valid_enr_category = FALSE) OR
4026   			(p_check_research = TRUE AND
4027   			v_valid_research = FALSE) OR
4028   			(p_check_rank_app = TRUE AND
4029   			v_valid_rank_app = FALSE) OR
4030   			(p_check_completion = TRUE AND
4031   			v_valid_completion = FALSE) OR
4032   			(p_check_rank_set = TRUE AND
4033   			v_valid_rank_set = FALSE) OR
4034   			(p_check_basis_adm = TRUE AND
4035   			v_valid_basis_adm = FALSE) OR
4036   			(p_check_crs_international = TRUE AND
4037   			v_valid_crs_international = FALSE) OR
4038   			(p_check_ass_tracking = TRUE AND
4039   			v_valid_ass_tracking = FALSE) OR
4040   			(p_check_adm_code = TRUE AND
4041   			v_valid_adm_code = FALSE) OR
4042   			(p_check_fund_source = TRUE AND
4043   			v_valid_fund_source = FALSE) OR
4044   			(p_check_location = TRUE AND
4045   			v_valid_location = FALSE) OR
4046   			(p_check_att_mode = TRUE AND
4047   			v_valid_att_mode = FALSE) OR
4048   			(p_check_att_type = TRUE AND
4049   			v_valid_att_type = FALSE) OR
4050   			(p_check_unit_set = TRUE AND
4051   			v_valid_unit_set = FALSE) THEN
4052 
4053         --SETS THE MESSAGE FOR INDIVIDUL INVALID OPTIONS,INSTEAD OF A GENERIC MESSAGE.
4054 	IF       v_valid_referee = FALSE AND p_check_referee = TRUE THEN
4055                  p_message_name := 'IGS_AD_INVALID_REF';
4056         ELSIF    v_valid_scholarship = FALSE AND p_check_scholarship = TRUE THEN
4057                  p_message_name := 'IGS_AD_INVALID_SCHOL';
4058         ELSIF    v_valid_lang_prof = FALSE AND p_check_lang_prof  = TRUE THEN
4059 		 p_message_name := 'IGS_AD_INVALID_LANGPROF';
4060   	ELSIF	 v_valid_interview = FALSE AND p_check_interview = TRUE THEN
4061 		 p_message_name := 'IGS_AD_INVALID_INTERVIEW';
4062   	ELSIF	 v_valid_exchange = FALSE AND p_check_exchange = TRUE THEN
4063 		 p_message_name := 'IGS_AD_INVALID_EXCHANGE';
4064   	ELSIF	 v_valid_adm_test = FALSE AND p_check_adm_test  = TRUE THEN
4065 		 p_message_name := 'IGS_AD_INVALID_ADMTST';
4066  	ELSIF	 v_valid_fee_assess = FALSE AND p_check_fee_assess  = TRUE THEN
4067 		 p_message_name := 'IGS_AD_INVALID_FEEASS';
4068   	ELSIF	 v_valid_cor_category = FALSE AND p_check_cor_category  = TRUE THEN
4069 		 p_message_name := 'IGS_AD_INVALID_CORRCAT';
4070   	ELSIF    v_valid_enr_category = FALSE AND p_check_enr_category  = TRUE THEN
4071 		 p_message_name := 'IGS_AD_INVALID_ENRCAT';
4072      	ELSIF	 v_valid_research = FALSE AND p_check_research = TRUE THEN
4073 		 p_message_name := v_error_message_research;
4074      	ELSIF	 v_valid_rank_app = FALSE AND p_check_rank_app  = TRUE THEN
4075 		 p_message_name := 'IGS_AD_INVALID_RANKAPP';
4076   	ELSIF	 v_valid_completion = FALSE AND p_check_completion = TRUE THEN
4077 		 p_message_name := 'IGS_AD_INVALID_PERCOMP';
4078   	ELSIF    v_valid_rank_set = FALSE AND p_check_rank_set  = TRUE THEN
4079 		 p_message_name := 'IGS_AD_INVALID_PERRANK';
4080   	ELSIF	 v_valid_basis_adm = FALSE AND p_check_basis_adm  = TRUE THEN
4081 		 p_message_name := 'IGS_AD_INVALID_ADMBAS';
4082   	ELSIF	 v_valid_crs_international = FALSE AND p_check_crs_international  = TRUE THEN
4083 		 p_message_name := 'IGS_AD_INVALID_PRGINT';
4084  	ELSIF	 v_valid_ass_tracking = FALSE AND p_check_ass_tracking  = TRUE THEN
4085 		 p_message_name := 'IGS_AD_INVALID_TRCK';
4086   	ELSIF	 v_valid_adm_code = FALSE AND p_check_adm_code  = TRUE THEN
4087 		 p_message_name := 'IGS_AD_INVALID_ADMCD';
4088   	ELSIF	 v_valid_fund_source = FALSE AND p_check_fund_source  = TRUE THEN
4089 		 p_message_name := 'IGS_AD_INVALID_FUNDSRC';
4090   	ELSIF    v_valid_location = FALSE AND p_check_location  = TRUE THEN
4091 		 p_message_name := 'IGS_AD_INVALID_LOC';
4092   	ELSIF	 v_valid_att_mode = FALSE AND p_check_att_mode  = TRUE THEN
4093 		 p_message_name := 'IGS_AD_INVALID_ATTNDMODE';
4094   	ELSIF	 v_valid_att_type = FALSE AND p_check_att_type  = TRUE THEN
4095 		 p_message_name := 'IGS_AD_INVALID_ATTNDTYPE';
4096   	ELSIF	 v_valid_unit_set = FALSE AND p_check_unit_set  = TRUE THEN
4097 		 p_message_name := 'IGS_AD_INVALID_UNTSET';
4098       END IF;
4099       RETURN FALSE;
4100       END IF;
4101 
4102   FOR v_apcs_rec IN c_apcs LOOP
4103 	  IF (v_apcs_rec.s_admission_step_type = 'PGM-APPRV') THEN
4104 		  OPEN c_pa;
4105 		  FETCH c_pa INTO v_person_id;
4106 		  IF (c_pa%FOUND) THEN
4107 			  close c_pa;
4108 	    ELSE
4109         CLOSE c_pa;
4110         p_message_name:=  'IGS_AD_MND_PRGAPPRV';
4111         v_return := FALSE;
4112         EXIT;
4113 		  END IF;
4114 
4115     ELSIF (v_apcs_rec.s_admission_step_type = 'DES-UNITSETS') THEN -- modified for 2382599
4116 		  OPEN c_us;
4117 		  FETCH c_us INTO v_person_id;
4118 		  IF (c_us%FOUND) THEN
4119 			  close c_us;
4120       ELSE
4121         CLOSE c_us;
4122         p_message_name:=   'IGS_AD_MND_UNTSETDL';
4123         v_return := FALSE;
4124         EXIT;
4125   		END IF;
4126 
4127     ELSIF (v_apcs_rec.s_admission_step_type='OTH-INST-APPL') THEN
4128 		  OPEN c_oi;
4129 		  FETCH c_oi INTO v_person_id;
4130 		  IF (c_oi%FOUND) THEN
4131 			  close c_oi;
4132       ELSE
4133         CLOSE c_oi;
4134         p_message_name:=   'IGS_AD_MND_OTUNS_APP';
4135         v_return := FALSE;
4136         EXIT;
4137 		  END IF;
4138 
4139 	  ELSIF (v_apcs_rec.s_admission_step_type = 'EDU-GOALS') THEN
4140 		  OPEN c_eg;
4141 		  FETCH c_eg INTO v_person_id;
4142 		  IF (c_eg%FOUND) THEN
4143 			  close c_eg;
4144       ELSE
4145         CLOSE c_eg;
4146         p_message_name:=   'IGS_AD_MND_EDUGOAL';
4147         v_return := FALSE;
4148         EXIT;
4149 		  END IF;
4150 
4151 	  ELSIF (v_apcs_rec.s_admission_step_type = 'ACAD-INTEREST') THEN
4152 		  OPEN c_ai;
4153  		  FETCH c_ai INTO v_person_id;
4154 		  IF (c_ai%FOUND) THEN
4155 			  close c_ai;
4156       ELSE
4157         CLOSE c_ai;
4158         p_message_name:=   'IGS_AD_MND_ACADINT';
4159         v_return := FALSE;
4160         EXIT;
4161 		  END IF;
4162 
4163 	  ELSIF (v_apcs_rec.s_admission_step_type = 'APPL-INTENT') THEN
4164 		  OPEN c_in;
4165 		  FETCH c_in INTO v_person_id;
4166 		  IF (c_in%FOUND) THEN
4167 			  close c_in;
4168       ELSE
4169         CLOSE c_in;
4170         p_message_name:=   'IGS_AD_MND_ACINT_DET';
4171         v_return := FALSE;
4172         EXIT;
4173 		  END IF;
4174 
4175 	  ELSIF (v_apcs_rec.s_admission_step_type = 'SPL-INTEREST') THEN
4176 		  OPEN c_si;
4177 		  FETCH c_si INTO v_person_id;
4178 		  IF (c_si%FOUND) THEN
4179 			  close c_si;
4180       ELSE
4181         CLOSE c_si;
4182         p_message_name:=   'IGS_AD_SPINTR_DL';
4183         v_return := FALSE;
4184         EXIT;
4185 		  END IF;
4186 
4187 	  ELSIF (v_apcs_rec.s_admission_step_type = 'SPL-TALENT') THEN
4188 		  OPEN c_st;
4189 		  FETCH c_st INTO v_person_id;
4190 		  IF (c_st%FOUND) THEN
4191 			  close c_st;
4192       ELSE
4193         CLOSE c_st;
4194         p_message_name:=   'IGS_AD_MND_SPLTLNT';
4195         v_return := FALSE;
4196         EXIT;
4197 		  END IF;
4198 
4199 	  ELSIF (v_apcs_rec.s_admission_step_type = 'FEE-DETAIL') THEN
4200   	  OPEN c_ar;
4201 		  FETCH c_ar INTO v_person_id;
4202 		  IF (c_ar%FOUND) THEN
4203 			  close c_ar;
4204       ELSE
4205         CLOSE c_ar;
4206         p_message_name:=   'IGS_AD_MND_APPFINDTL';
4207         v_return := FALSE;
4208         EXIT;
4209 		  END IF;
4210 
4211 	  ELSIF (v_apcs_rec.s_admission_step_type = 'CREDENTAILS') THEN
4212   	  OPEN c_ac;
4213 		  FETCH c_ac INTO v_person_id;
4214 		  IF (c_ac%FOUND) THEN
4215 			  close c_ac;
4216       ELSE
4217         CLOSE c_ac;
4218         p_message_name:=   'IGS_AD_MND_CREDEN_DET';
4219         v_return := FALSE;
4220         EXIT;
4221 		  END IF;
4222 
4223 	  ELSIF (v_apcs_rec.s_admission_step_type = 'ACAD-HONORS') THEN
4224   	  OPEN c_ah;
4225 		  FETCH c_ah INTO v_person_id;
4226 		  IF (c_ah%FOUND) THEN
4227 			  close c_ah;
4228       ELSE
4229         CLOSE c_ah;
4230         p_message_name:=   'IGS_AD_MND_HONORS';
4231         v_return := FALSE;
4232         EXIT;
4233 		  END IF;
4234 
4235 	  ELSIF (v_apcs_rec.s_admission_step_type IN  ('MISC-DTL','FINAID')) THEN
4236   	  OPEN c_md;
4237 		  FETCH c_md INTO
4238   			v_apply_for_finaid,
4239         v_app_file_location1 ,
4240 		  	v_late_adm_fee_status1,
4241   			v_enrolment_cat1 ,
4242 	  		v_fee_cat1 ,
4243 		  	v_hecs_payment_option1 ,
4244   			v_app_source_id1 ,
4245 	  		v_correspondence_cat1,
4246 		  	v_funding_source1 ;
4247 		  IF v_apcs_rec.s_admission_step_type='MISC-DTL' AND
4248 	       (v_app_file_location1 IS NOT NULL OR
4249 				  v_enrolment_cat1 IS NOT NULL OR
4250 				  v_fee_cat1 IS NOT NULL OR
4251  				  v_hecs_payment_option1 IS NOT NULL OR
4252 				  v_app_source_id1 IS NOT NULL OR
4253 				  v_correspondence_cat1 IS NOT NULL OR
4254 				  v_funding_source1 IS NOT NULL) THEN
4255 			  close c_md;
4256 	    ELSIF v_apcs_rec.s_admission_step_type='FINAID' AND (v_apply_for_finaid = 'Y') THEN
4257         close c_md;
4258       ELSE
4259         CLOSE c_md;
4260         IF v_apcs_rec.s_admission_step_type='MISC-DTL' THEN
4261 		      p_message_name:=   'IGS_AD_MND_MSCDTL';
4262         ELSE
4263 		      p_message_name:=   'IGS_AD_MND_FINAID';
4264         END IF;
4265         v_return := FALSE;
4266         EXIT;
4267 	  	END IF;
4268 
4269     -- START Added for 1366894
4270     -- Ordering of steps INTERVIEW_DTLS and FIN_INTERVIEW_DECS is importent
4271     ELSIF (v_apcs_rec.s_admission_step_type = 'INTERVIEW_DTLS') THEN
4272 		  OPEN c_id_exist;
4273 		  FETCH c_id_exist INTO v_person_id;
4274 		  IF (c_id_exist%FOUND) THEN
4275 			  CLOSE c_id_exist;
4276       ELSE
4277         CLOSE c_id_exist;
4278         p_message_name:=   'IGS_AD_MND_INTERVIEW_DETAILS';
4279         v_return := FALSE;
4280         EXIT;
4281   		END IF;
4282 
4283     ELSIF (v_apcs_rec.s_admission_step_type = 'FIN_INTERVIEW_DECS') THEN
4284 		  OPEN c_id;
4285 		  FETCH c_id INTO v_person_id;
4286 		  IF (c_id%FOUND) THEN
4287 			  CLOSE c_id;
4288       ELSE
4289         CLOSE c_id;
4290         p_message_name:=   'IGS_AD_MND_INTERVIEW_DECISION';
4291         v_return := FALSE;
4292         EXIT;
4293   		END IF;
4294     -- END Added for 1366894
4295 
4296     END IF;
4297 
4298 	END LOOP;
4299 
4300   IF v_return = FALSE THEN
4301     RETURN v_return;
4302   ELSE
4303     p_message_name := NULL;
4304     RETURN TRUE;
4305   END IF;
4306 
4307 EXCEPTION
4308   	WHEN OTHERS THEN
4309   		IF (c_acaiv%ISOPEN) THEN
4310   			CLOSE c_acaiv;
4311   		END IF;
4312   		IF (c_sca%ISOPEN) THEN
4313   			CLOSE c_sca;
4314   		END IF;
4315   		IF (c_scae%ISOPEN) THEN
4316   			CLOSE c_scae;
4317   		END IF;
4318   		IF (c_crv%ISOPEN) THEN
4319   			CLOSE c_crv;
4320   		END IF;
4321                 IF (c_apcs%ISOPEN) THEN
4322   			CLOSE c_apcs;
4323   		END IF;
4324   		IF (c_ae%ISOPEN) THEN
4325   			CLOSE c_ae;
4326   		END IF;
4327   		IF (c_pa%ISOPEN) THEN
4328   			CLOSE c_pa;
4329   		END IF;
4330   		IF (c_us%ISOPEN) THEN
4331   			CLOSE c_us;
4332   		END IF;
4333 
4334   		IF (c_oi%ISOPEN) THEN
4335   			CLOSE c_oi;
4336   		END IF;
4337   		IF (c_eg%ISOPEN) THEN
4338   			CLOSE c_eg;
4339   		END IF;
4340   		IF (c_ai%ISOPEN) THEN
4341   			CLOSE c_ai;
4342   		END IF;
4343   		IF (c_in%ISOPEN) THEN
4344   			CLOSE c_in;
4345   		END IF;
4346   		IF (c_si%ISOPEN) THEN
4347   			CLOSE c_si;
4348   		END IF;
4349   		IF (c_st%ISOPEN) THEN
4350   			CLOSE c_st;
4351   		END IF;
4352   		IF (c_ar%ISOPEN) THEN
4353   			CLOSE c_ar;
4354   		END IF;
4355   		IF (c_ac%ISOPEN) THEN
4356   			CLOSE c_ac;
4357   		END IF;
4358   		IF (c_ah%ISOPEN) THEN
4359   			CLOSE c_ah;
4360   		END IF;
4361   		IF (c_md%ISOPEN) THEN
4362   			CLOSE c_md;
4363   		END IF;
4364 		  IF (c_id_exist%FOUND) THEN
4365 			  CLOSE c_id_exist;
4366       END IF;
4367 		  IF (c_id%FOUND) THEN
4368 			  CLOSE c_id;
4369       END IF;
4370 
4371   		RAISE;
4372   END;
4373   EXCEPTION
4374   	WHEN OTHERS THEN
4375   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4376 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_comp');
4377 			 IGS_GE_MSG_STACK.ADD;
4378 			 APP_EXCEPTION.RAISE_EXCEPTION;
4379  END admp_val_acai_comp;
4380   --
4381   -- Validate if the specified admission application IGS_PE_PERSON is complete.
4382   FUNCTION admp_val_pe_comp(
4383   p_person_id IN NUMBER ,
4384   p_effective_dt IN DATE ,
4385   p_check_athletics IN BOOLEAN,
4386   p_check_alternate IN BOOLEAN ,
4387   p_check_address IN BOOLEAN ,
4388   p_check_disability IN BOOLEAN ,
4389   p_check_visa IN BOOLEAN ,
4390   p_check_finance IN BOOLEAN ,
4391   p_check_notes IN BOOLEAN ,
4392   p_check_statistics IN BOOLEAN ,
4393   p_check_alias IN BOOLEAN ,
4394   p_check_tertiary IN BOOLEAN ,
4395   p_check_aus_sec_ed IN BOOLEAN ,
4396   p_check_os_sec_ed IN BOOLEAN ,
4397   p_check_employment IN BOOLEAN ,
4398   p_check_membership IN BOOLEAN ,
4399   p_check_dob IN BOOLEAN ,
4400   p_check_title IN BOOLEAN ,
4401   p_check_excurr IN BOOLEAN,
4402   p_message_name OUT NOCOPY VARCHAR2 ,
4403   p_valid_athletics OUT NOCOPY BOOLEAN ,
4404   p_valid_alternate OUT NOCOPY BOOLEAN ,
4405   p_valid_address OUT NOCOPY BOOLEAN ,
4406   p_valid_disability OUT NOCOPY BOOLEAN ,
4407   p_valid_visa OUT NOCOPY BOOLEAN ,
4408   p_valid_finance OUT NOCOPY BOOLEAN ,
4409   p_valid_notes OUT NOCOPY BOOLEAN ,
4410   p_valid_statistics OUT NOCOPY BOOLEAN ,
4411   p_valid_alias OUT NOCOPY BOOLEAN ,
4412   p_valid_tertiary OUT NOCOPY BOOLEAN ,
4413   p_valid_aus_sec_ed OUT NOCOPY BOOLEAN ,
4414   p_valid_os_sec_ed OUT NOCOPY BOOLEAN ,
4415   p_valid_employment OUT NOCOPY BOOLEAN ,
4416   p_valid_membership OUT NOCOPY BOOLEAN ,
4417   p_valid_dob OUT NOCOPY BOOLEAN ,
4418   p_valid_title OUT NOCOPY BOOLEAN,
4419   p_valid_excurr OUT NOCOPY BOOLEAN)
4420   RETURN BOOLEAN AS
4421 
4422   BEGIN	-- admp_val_pe_comp
4423   	-- Validate if the specified admission application IGS_PE_PERSON is complete
4424   DECLARE
4425   	v_valid_athletics	BOOLEAN		:= FALSE;
4426   	v_valid_alternate	BOOLEAN		:= FALSE;
4427   	v_valid_address		BOOLEAN		:= FALSE;
4428   	v_valid_disability	BOOLEAN		:= FALSE;
4429   	v_valid_visa		BOOLEAN		:= FALSE;
4430   	v_valid_finance		BOOLEAN		:= FALSE;
4431   	v_valid_notes		BOOLEAN		:= FALSE;
4432   	v_valid_statistics	BOOLEAN		:= FALSE;
4433   	v_valid_alias		BOOLEAN		:= FALSE;
4434   	v_valid_tertiary	BOOLEAN		:= FALSE;
4435   	v_valid_aus_sec_ed	BOOLEAN		:= FALSE;
4436   	v_valid_os_sec_ed	BOOLEAN		:= FALSE;
4437   	v_valid_employment	BOOLEAN		:= FALSE;
4438   	v_valid_membership	BOOLEAN		:= FALSE;
4439   	v_valid_dob		BOOLEAN		:= FALSE;
4440   	v_valid_title		BOOLEAN		:= FALSE;
4441   	v_birth_dt		IGS_PE_PERSON.birth_dt%TYPE;
4442   	v_title			IGS_PE_PERSON.title%TYPE;
4443 	v_valid_excurr         BOOLEAN         := FALSE;
4444   	CURSOR c_pe IS
4445   		SELECT	pe.birth_date birth_dt,
4446   			pe.title
4447   		FROM	IGS_PE_PERSON_BASE_V	pe
4448   		WHERE	pe.person_id = p_person_id;
4449   		  v_list_element VARCHAR2(30);
4450   BEGIN
4451   	--set default message number
4452   	p_message_name := NULL;
4453   	-- Initialise the output valid parameters
4454   	IF (p_check_athletics) THEN
4455   		p_valid_athletics := FALSE;
4456   	ELSE
4457   		p_valid_athletics := TRUE;
4458   	END IF;
4459   	IF (p_check_alternate) THEN
4460   		p_valid_alternate := FALSE;
4461   	ELSE
4462   		p_valid_alternate := TRUE;
4463   	END IF;
4464   	IF (p_check_address) THEN
4465   		p_valid_address := FALSE;
4466   	ELSE
4467   		p_valid_address := TRUE;
4468   	END IF;
4469   	IF (p_check_disability) THEN
4470   		p_valid_disability := FALSE;
4471   	ELSE
4472   		p_valid_disability := TRUE;
4473   	END IF;
4474   	IF (p_check_visa) THEN
4475   		p_valid_visa := FALSE;
4476   	ELSE
4477   		p_valid_visa := TRUE;
4478   	END IF;
4479   	IF (p_check_finance) THEN
4480   		p_valid_finance := FALSE;
4481   	ELSE
4482   		p_valid_finance := TRUE;
4483   	END IF;
4484   	IF (p_check_notes) THEN
4485   		p_valid_notes := FALSE;
4486   	ELSE
4487   		p_valid_notes := TRUE;
4488   	END IF;
4489   	IF (p_check_statistics) THEN
4490   		p_valid_statistics := FALSE;
4491   	ELSE
4492   		p_valid_statistics := TRUE;
4493   	END IF;
4494   	IF (p_check_alias) THEN
4495   		p_valid_alias := FALSE;
4496   	ELSE
4497   		p_valid_alias := TRUE;
4498   	END IF;
4499   	IF (p_check_tertiary) THEN
4500   		p_valid_tertiary := FALSE;
4501   	ELSE
4502   		p_valid_tertiary := TRUE;
4503   	END IF;
4504   	IF (p_check_aus_sec_ed) THEN
4505   		p_valid_aus_sec_ed := FALSE;
4506   	ELSE
4507   		p_valid_aus_sec_ed := TRUE;
4508   	END IF;
4509   	IF (p_check_os_sec_ed) THEN
4510   		p_valid_os_sec_ed := FALSE;
4511   	ELSE
4512   		p_valid_os_sec_ed := TRUE;
4513   	END IF;
4514   	IF (p_check_employment) THEN
4515   		p_valid_employment := FALSE;
4516   	ELSE
4517   		p_valid_employment := TRUE;
4518   	END IF;
4519   	IF (p_check_membership) THEN
4520   		p_valid_membership := FALSE;
4521   	ELSE
4522   		p_valid_membership := TRUE;
4523   	END IF;
4524   	IF (p_check_dob) THEN
4525   		p_valid_dob := FALSE;
4526   	ELSE
4527   		p_valid_dob := TRUE;
4528   	END IF;
4529   	IF (p_check_title) THEN
4530   		p_valid_title := FALSE;
4531   	ELSE
4532   		p_valid_title := TRUE;
4533   	END IF;
4534         IF (p_check_excurr) THEN
4535   		p_valid_excurr := FALSE;
4536   	ELSE
4537   		p_valid_excurr := TRUE;
4538   	END IF;
4539 
4540   	-- Validate IGS_PE_PERSON level data
4541   	IF (    p_check_athletics       = TRUE OR
4542                 p_check_alternate       = TRUE OR
4543   		p_check_address 	= TRUE OR
4544   		p_check_disability 	= TRUE OR
4545   		p_check_visa 		= TRUE OR
4546   		p_check_finance 	= TRUE OR
4547   		p_check_notes 		= TRUE OR
4548   		p_check_statistics 	= TRUE OR
4549   		p_check_alias 		= TRUE OR
4550   		p_check_tertiary	= TRUE OR
4551   		p_check_aus_sec_ed 	= TRUE OR
4552   		p_check_os_sec_ed 	= TRUE OR
4553   		p_check_employment 	= TRUE OR
4554   		p_check_membership 	= TRUE OR
4555 		p_check_excurr          = TRUE) THEN
4556   		IGS_AD_GEN_007.ADMP_GET_PE_EXISTS(
4557   				p_person_id,
4558   				p_effective_dt,
4559   				p_check_athletics,
4560   				p_check_alternate,
4561   				p_check_address,
4562   				p_check_disability,
4563   				p_check_visa,
4564   				p_check_finance,
4565   				p_check_notes,
4566   				p_check_statistics,
4567   				p_check_alias,
4568   				p_check_tertiary,
4569   				p_check_aus_sec_ed,
4570   				p_check_os_sec_ed,
4571   				p_check_employment,
4572   				p_check_membership,
4573 				p_check_excurr,
4574   				v_valid_athletics,
4575   				v_valid_alternate,
4576   				v_valid_address,
4577   				v_valid_disability,
4578   				v_valid_visa,
4579   				v_valid_finance,
4580   				v_valid_notes,
4581   				v_valid_statistics,
4582   				v_valid_alias,
4583   				v_valid_tertiary,
4584   				v_valid_aus_sec_ed,
4585   				v_valid_os_sec_ed,
4586   				v_valid_employment,
4587   				v_valid_membership,
4588 				v_valid_excurr);
4589   		IF (v_valid_athletics = TRUE) THEN
4590   			p_valid_athletics := TRUE;
4591   		END IF;
4592   		IF (v_valid_alternate = TRUE) THEN
4593   			p_valid_alternate := TRUE;
4594   		END IF;
4595   		IF (v_valid_address = TRUE) THEN
4596   			p_valid_address := TRUE;
4597   		END IF;
4598   		IF (v_valid_disability = TRUE) THEN
4599   			p_valid_disability := TRUE;
4600   		END IF;
4601   		IF (v_valid_visa = TRUE) THEN
4602   			p_valid_visa := TRUE;
4603   		END IF;
4604   		IF (v_valid_finance = TRUE) THEN
4605   			p_valid_finance := TRUE;
4606   		END IF;
4607   		IF (v_valid_notes = TRUE) THEN
4608   			p_valid_notes := TRUE;
4609   		END IF;
4610   		IF (v_valid_statistics = TRUE) THEN
4611   			p_valid_statistics := TRUE;
4612   		END IF;
4613   		IF (v_valid_alias = TRUE) THEN
4614   			p_valid_alias := TRUE;
4615   		END IF;
4616   		IF (v_valid_tertiary = TRUE) THEN
4617   			p_valid_tertiary := TRUE;
4618   		END IF;
4619   		IF (v_valid_aus_sec_ed = TRUE) THEN
4620   			p_valid_aus_sec_ed := TRUE;
4621   		END IF;
4622   		IF (v_valid_os_sec_ed = TRUE) THEN
4623   			p_valid_os_sec_ed := TRUE;
4624   		END IF;
4625   		IF (v_valid_employment = TRUE) THEN
4626   			p_valid_employment := TRUE;
4627   		END IF;
4628   		IF (v_valid_membership = TRUE) THEN
4629   			p_valid_membership := TRUE;
4630   		END IF;
4631   		IF (v_valid_excurr = TRUE) THEN
4632   			p_valid_excurr := TRUE;
4633   		END IF;
4634   	END IF;
4635   	IF (p_check_dob = TRUE OR
4636   			p_check_title = TRUE) THEN
4637   		OPEN c_pe;
4638   		FETCH c_pe INTO	v_birth_dt,
4639   				v_title;
4640   		CLOSE c_pe;
4641   		IF (p_check_dob = TRUE AND
4642   				v_birth_dt IS NOT NULL) THEN
4643   			p_valid_dob := TRUE;
4644   			v_valid_dob := TRUE;
4645   		END IF;
4646   		IF (p_check_title = TRUE AND
4647   				v_title IS NOT NULL) THEN
4648   			p_valid_title := TRUE;
4649   			v_valid_title := TRUE;
4650   		END IF;
4651 
4652 
4653   	END IF;
4654   	--Return false if the admission course application instance is incomplete
4655   	IF (p_check_athletics   = TRUE  AND
4656   	    v_valid_athletics 	= FALSE) OR
4657   	   (p_check_alternate   = TRUE  AND
4658   	    v_valid_alternate 	= FALSE) OR
4659   	   (p_check_address 	= TRUE	AND
4660   	    v_valid_address 	= FALSE) OR
4661   	   (p_check_disability 	= TRUE	AND
4662   	    v_valid_disability 	= FALSE) OR
4663   	   (p_check_visa 	= TRUE 	AND
4664   	    v_valid_visa 	= FALSE) OR
4665   	   (p_check_finance 	= TRUE 	AND
4666   	    v_valid_finance 	= FALSE) OR
4667   	   (p_check_notes 	= TRUE 	AND
4668   	    v_valid_notes 	= FALSE) OR
4669   	   (p_check_statistics 	= TRUE 	AND
4670   	    v_valid_statistics 	= FALSE) OR
4671   	   (p_check_alias 	= TRUE 	AND
4672   	    v_valid_alias 	= FALSE) OR
4673   	   (p_check_tertiary 	= TRUE	AND
4674   	    v_valid_tertiary 	= FALSE) OR
4675   	   (p_check_aus_sec_ed 	= TRUE	AND
4676   	    v_valid_aus_sec_ed 	= FALSE) OR
4677   	   (p_check_os_sec_ed 	= TRUE	AND
4678   	    v_valid_os_sec_ed 	= FALSE) OR
4679   	   (p_check_employment 	= TRUE	AND
4680   	    v_valid_employment 	= FALSE) OR
4681   	   (p_check_membership 	= TRUE	AND
4682   	    v_valid_membership 	= FALSE) OR
4683   	   (p_check_dob 	= TRUE	AND
4684   	    v_valid_dob 	= FALSE) OR
4685   	   (p_check_title 	= TRUE 	AND
4686   	    v_valid_title 	= FALSE) OR
4687   	   (p_check_excurr 	= TRUE 	AND
4688   	    v_valid_excurr 	= FALSE) THEN
4689 
4690                 --Set Messages for Individual Mandatory Details
4691   		IF v_valid_dob 		= FALSE AND p_check_dob = TRUE THEN
4692   		  v_list_element := 'IGS_AD_INVALID_DOB';
4693 
4694   		ELSIF v_valid_title 		= FALSE AND p_check_title = TRUE THEN
4695   		  v_list_element := 'IGS_AD_INVALID_TITLE';
4696 
4697   		ELSIF v_valid_athletics 	= FALSE AND p_check_athletics = TRUE THEN
4698   		  v_list_element := 'IGS_AD_MND_ATHLETICS';
4699 
4700   		ELSIF v_valid_alternate 	= FALSE AND p_check_alternate = TRUE THEN
4701   		  v_list_element := 'IGS_AD_INVALID_ALTDET';
4702 
4703   		ELSIF v_valid_address 	= FALSE AND p_check_address = TRUE THEN
4704   	  	  v_list_element := 'IGS_AD_INVALID_ADDR';
4705 
4706   		ELSIF v_valid_disability 	= FALSE AND p_check_disability = TRUE THEN
4707   		  v_list_element := 'IGS_AD_INVALID_DISDTL';
4708 
4709   		ELSIF v_valid_visa 		= FALSE AND p_check_visa = TRUE THEN
4710   		  v_list_element := 'IGS_AD_INVALID_VISA';
4711 
4712   		ELSIF v_valid_finance 	= FALSE AND p_check_finance = TRUE THEN
4713   		  v_list_element := 'IGS_AD_INVALID_FINDET';
4714 
4715   		ELSIF v_valid_notes 		= FALSE  AND p_check_notes = TRUE THEN
4716   		  v_list_element := 'IGS_AD_INVALID_NOTES';
4717 
4718   		ELSIF  v_valid_statistics 	= FALSE AND p_check_statistics = TRUE THEN
4719   		  v_list_element := 'IGS_AD_INVALID_PERSTAT';
4720 
4721   		ELSIF  v_valid_alias 		= FALSE AND p_check_alias = TRUE THEN
4722   		  v_list_element := 'IGS_AD_INVALID_ALIASDET';
4723 
4724   		ELSIF v_valid_tertiary 	= FALSE AND p_check_tertiary = TRUE THEN
4725   		  v_list_element := 'IGS_AD_INVALID_TEREDU';
4726 
4727   		ELSIF v_valid_aus_sec_ed 	= FALSE AND p_check_aus_sec_ed = TRUE THEN
4728   		  v_list_element := 'IGS_AD_INVALID_GOVSECEDU';
4729 
4730   		ELSIF v_valid_os_sec_ed 	= FALSE AND p_check_os_sec_ed = TRUE THEN
4731   		  v_list_element :=  'IGS_AD_INVALID_SECEDU';
4732 
4733   		ELSIF v_valid_employment = FALSE AND p_check_employment = TRUE THEN
4734   		  v_list_element := 'IGS_AD_INVALID_EMPDTL';
4735 
4736   		ELSIF v_valid_membership 	= FALSE AND p_check_membership = TRUE THEN
4737   		  v_list_element := 'IGS_AD_INVALID_MEM';
4738 
4739 		ELSIF v_valid_excurr = FALSE AND p_check_excurr = TRUE THEN
4740 		  v_list_element := 'IGS_AD_MND_EXCURR';
4741 
4742                 END IF;
4743 
4744                 p_message_name := v_list_element;
4745   	        RETURN FALSE;
4746   	END IF;
4747           p_message_name := NULL;
4748   	RETURN TRUE;
4749   EXCEPTION
4750   	WHEN OTHERS THEN
4751   		IF (c_pe%ISOPEN) THEN
4752   			CLOSE c_pe;
4753   		END IF;
4754   		RAISE;
4755   END;
4756   EXCEPTION
4757   	WHEN OTHERS THEN
4758   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4759 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_pe_comp');
4760 			 IGS_GE_MSG_STACK.ADD;
4761 			 APP_EXCEPTION.RAISE_EXCEPTION;
4762   END admp_val_pe_comp;
4763   --
4764   -- Validate the deferment of  IGS_AD_PS_APLINSTUNT records.
4765   FUNCTION admp_val_acaiu_defer(
4766   p_person_id IN NUMBER ,
4767   p_admission_appl_number IN NUMBER ,
4768   p_nominated_course_cd IN VARCHAR2 ,
4769   p_acai_sequence_number IN NUMBER ,
4770   p_acad_cal_type IN VARCHAR2 ,
4771   p_acad_ci_sequence_number IN NUMBER ,
4772   p_adm_cal_type IN VARCHAR2 ,
4773   p_adm_ci_sequence_number IN NUMBER ,
4774   p_s_admission_process_type IN VARCHAR2 ,
4775   p_message_name OUT NOCOPY VARCHAR2 )
4776   RETURN BOOLEAN AS
4777   BEGIN	-- admp_val_acaiu_defer
4778   	-- Validate the deferment of IGS_AD_PS_APLINSTUNT records
4779   DECLARE
4780   	cst_offer	CONSTANT
4781   					IGS_AD_UNIT_OU_STAT.s_adm_outcome_status%TYPE := 'OFFER';
4782   	v_message_name			VARCHAR2(30);
4783   	CURSOR c_acaiu_auos IS
4784   		SELECT	acaiu.unit_cd,
4785   			acaiu.uv_version_number,
4786   			acaiu.cal_type,
4787   			acaiu.ci_sequence_number,
4788   			acaiu.location_cd,
4789   			acaiu.unit_class,
4790   			acaiu.unit_mode
4791   		FROM	IGS_AD_PS_APLINSTUNT	acaiu,
4792   			IGS_AD_UNIT_OU_STAT		auos
4793   		WHERE	acaiu.person_id			= p_person_id AND
4794   			acaiu.admission_appl_number	= p_admission_appl_number AND
4795   			acaiu.nominated_course_cd	= p_nominated_course_cd AND
4796   			acaiu.acai_sequence_number	= p_acai_sequence_number AND
4797   			auos.adm_unit_outcome_status	= acaiu.adm_unit_outcome_status AND
4798   			auos.s_adm_outcome_status	= cst_offer;
4799   BEGIN
4800   	-- Retrieve the admission course application instance units
4801   	FOR v_acaiu_auos_rec IN c_acaiu_auos LOOP
4802   		-- Validate the unit version
4803   		IF (IGS_AD_VAL_ACAIU.admp_val_acaiu_uv(
4804   						v_acaiu_auos_rec.unit_cd,
4805   						v_acaiu_auos_rec.uv_version_number,
4806   						p_s_admission_process_type,
4807   						'Y', -- offered indicator
4808   						v_message_name) = FALSE) THEN
4809   			p_message_name := v_message_name;
4810   			RETURN FALSE;
4811   		END IF;
4812   		-- Validate the unit offering option
4813   		IF (IGS_AD_VAL_ACAIU.admp_val_acaiu_opt(
4814   						v_acaiu_auos_rec.unit_cd,
4815   						v_acaiu_auos_rec.uv_version_number,
4816   						v_acaiu_auos_rec.cal_type,
4817   						v_acaiu_auos_rec.ci_sequence_number,
4818   						v_acaiu_auos_rec.location_cd,
4819   						v_acaiu_auos_rec.unit_class,
4820   						v_acaiu_auos_rec.unit_mode,
4821   						p_adm_cal_type,
4822   						p_adm_ci_sequence_number,
4823   						p_acad_cal_type,
4824   						p_acad_ci_sequence_number,
4825   						'Y', -- offered indicator
4826   						v_message_name) = FALSE) THEN
4827   			p_message_name := v_message_name;
4828   			RETURN FALSE;
4829   		END IF;
4830   	END LOOP;
4831   	p_message_name := NULL;
4832   	RETURN TRUE;
4833   EXCEPTION
4834   	WHEN OTHERS THEN
4835   		IF (c_acaiu_auos%ISOPEN) THEN
4836   			CLOSE c_acaiu_auos;
4837   		END IF;
4838   		RAISE;
4839   END;
4840   EXCEPTION
4841   	WHEN OTHERS THEN
4842   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4843 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acaiu_defer');
4844 			 IGS_GE_MSG_STACK.ADD;
4845 			 APP_EXCEPTION.RAISE_EXCEPTION;
4846  END admp_val_acaiu_defer;
4847   --
4848   -- Validate the IGS_AD_PS_APPL_INST.preference_number.
4849   FUNCTION admp_val_acai_pref(
4850   p_preference_number IN NUMBER ,
4851   p_pref_allowed IN VARCHAR2 ,
4852   p_pref_limit IN NUMBER ,
4853   p_s_admission_process_type IN VARCHAR2 ,
4854   p_message_name OUT NOCOPY VARCHAR2 )
4855   RETURN BOOLEAN AS
4856   BEGIN	-- admp_val_acai_pref
4857   	-- Validate the IGS_AD_PS_APPL_INST.preference_number.
4858   	-- Validations are -
4859   	-- - Preference number must be specified for a course preference application.
4860   	-- - If specified, the preference number must not exceed the preference limit.
4861   DECLARE
4862   	cst_course	CONSTANT VARCHAR2(10) := 'COURSE';
4863   BEGIN
4864   	p_message_name := NULL;
4865   	IF p_pref_allowed = 'Y' AND
4866   			upper(p_s_admission_process_type) = cst_course THEN
4867   		--Preference number must be specified for a course preference application.
4868   		IF p_preference_number IS NULL THEN
4869   			p_message_name := 'IGS_AD_PREFNUM_SPECIFIED';
4870   			RETURN FALSE;
4871   		ELSIF p_preference_number > p_pref_limit THEN
4872   			--Preference number must be less than the preference limit.
4873   			p_message_name := 'IGS_AD_PREFNUM_NOT_EXCEED';
4874   			RETURN FALSE;
4875   		END IF;
4876   	END IF;
4877   	RETURN TRUE;
4878   END;
4879   EXCEPTION
4880   	WHEN OTHERS THEN
4881   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4882 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_pref');
4883 			 IGS_GE_MSG_STACK.ADD;
4884 			 APP_EXCEPTION.RAISE_EXCEPTION;
4885     END admp_val_acai_pref;
4886   --
4887   -- Validate adm course application instance expected completion details.
4888   FUNCTION admp_val_expctd_comp(
4889   p_expected_completion_yr IN NUMBER ,
4890   p_expected_completion_perd IN VARCHAR2 ,
4891   p_message_name OUT NOCOPY VARCHAR2 )
4892   RETURN BOOLEAN AS
4893   BEGIN	-- admp_val_expctd_comp
4894   	-- Description: Validate the admission course application
4895   	-- instance expected completion details.
4896   DECLARE
4897   BEGIN
4898   	p_message_name := NULL;
4899   	IF p_expected_completion_yr IS NOT NULL AND
4900   			p_expected_completion_perd IS NULL THEN
4901   		p_message_name := 'IGS_AD_EXPCOMP_PER_SPECIFIED';
4902   		RETURN FALSE;
4903   	END IF;
4904   	IF p_expected_completion_perd IS NOT NULL AND
4905   			p_expected_completion_yr IS NULL THEN
4906   		p_message_name := 'IGS_AD_EXPCOMP_YEAR_SPECIFIED';
4907   		RETURN FALSE;
4908   	END IF;
4909   	RETURN TRUE;
4910   END;
4911   EXCEPTION
4912   	WHEN OTHERS THEN
4913   		         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4914 				 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_expctd_comp');
4915 				 IGS_GE_MSG_STACK.ADD;
4916 				 APP_EXCEPTION.RAISE_EXCEPTION;
4917  END admp_val_expctd_comp;
4918   --
4919   -- Validate the admission course application instance funding source.
4920   FUNCTION admp_val_acai_fs(
4921   p_course_cd IN VARCHAR2 ,
4922   p_version_number IN NUMBER ,
4923   p_funding_source IN VARCHAR2 ,
4924   p_message_name OUT NOCOPY VARCHAR2 )
4925   RETURN BOOLEAN AS
4926   BEGIN	-- admp_val_acai_fs
4927   	-- This module validates the admission course application instance
4928   	-- funding source.
4929   DECLARE
4930   	v_fsr_found		BOOLEAN := FALSE;
4931   	v_fs_found		BOOLEAN := FALSE;
4932   	v_message_name		VARCHAR2(30);
4933   	CURSOR c_fsr IS
4934   		SELECT	fsr.funding_source
4935   		FROM	IGS_FI_FND_SRC_RSTN	fsr
4936   		WHERE	fsr.course_cd		= p_course_cd AND
4937   			fsr.version_number	= p_version_number AND
4938   			fsr.restricted_ind	= 'Y';
4939   BEGIN
4940   	-- Set initial value
4941   	p_message_name := NULL;
4942   	v_fsr_found := FALSE;
4943   	v_fs_found := FALSE;
4944   	IF p_funding_source IS NOT NULL THEN
4945   		-- Validate that the funding source is not closed.
4946   		IF IGS_AD_VAL_SAFT.crsp_val_fs_closed(
4947   					p_funding_source,
4948   					v_message_name) = FALSE THEN
4949   			p_message_name := v_message_name;
4950   			RETURN FALSE;
4951   		END IF;
4952   		-- Validate that funding source is valid for the course version.
4953   		FOR v_fsr_rec IN c_fsr LOOP
4954   			v_fsr_found := TRUE;
4955   			IF v_fsr_rec.funding_source = p_funding_source THEN
4956   				v_fs_found := TRUE;
4957   				EXIT;
4958   			END IF;
4959   		END LOOP;
4960   		IF v_fsr_found = FALSE THEN
4961   			-- No records found in IGS_FI_FND_SRC_RSTN
4962   			RETURN TRUE;
4963   		ELSIF v_fs_found = TRUE THEN
4964   			-- Records found in IGS_FI_FND_SRC_RSTN
4965   			-- found source is valid for the course version
4966   			RETURN TRUE;
4967   		ELSE
4968   			-- Records found in IGS_FI_FND_SRC_RSTN
4969   			-- found source is not valid for the course version
4970   			p_message_name := 'IGS_AD_FUNDSRC_NOTVALID_APPL';
4971   			RETURN FALSE;
4972   		END IF;
4973   	END IF;	--IF p_funding_source IS NOT NULL
4974   	RETURN TRUE;
4975   EXCEPTION
4976   	WHEN OTHERS THEN
4977   		IF c_fsr%ISOPEN THEN
4978   			CLOSE c_fsr;
4979   		END IF;
4980   		RAISE;
4981   END;
4982   EXCEPTION
4983   	WHEN OTHERS THEN
4984   	         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_UNHANDLED_EXP');
4985 			 FND_MESSAGE.SET_TOKEN('NAME', 'IGS_AD_VAL_ACAI.admp_val_acai_fs');
4986 			 IGS_GE_MSG_STACK.ADD;
4987 			 APP_EXCEPTION.RAISE_EXCEPTION;
4988         END admp_val_acai_fs; -- admp_val_acai_fs
4989 
4990 END igs_ad_val_acai;