DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_VAL_SCHO

Source


1 PACKAGE BODY IGS_EN_VAL_SCHO  AS
2 /* $Header: IGSEN63B.pls 115.5 2002/11/29 00:06:19 nsidana ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    27-AUG-2001     Bug No. 1956374 .The function GENP_VAL_STRT_END_DT removed.
7   --                            IGS_EN_VAL_SCHO.GENP_VAL_STRT_END_DT  replaced by IGS_AD_VAL_EDTL.GENP_VAL_STRT_END_DT
8   --smadathi    25-AUG-2001     Bug No. 1956374 .The function GENP_VAL_SDTT_SESS removed.
9   -------------------------------------------------------------------------------------------
10   -- Validate the delete of a student course HECS option record.
11   FUNCTION enrp_val_scho_trgdel(
12   p_person_id IN NUMBER ,
13   p_course_cd IN VARCHAR2 ,
14   p_start_dt IN DATE ,
15   p_message_name OUT NOCOPY VARCHAR2)
16   RETURN BOOLEAN  AS
17    BEGIN	-- enrp_val_scho_trgdel
18   	-- This module validates deletion of IGS_EN_STDNTPSHECSOP in
19   	-- the database trigger. This varies from the form validation in
20   	-- that it allows deletion of when the student course attempt is
21   	-- unconfirmed.
22   DECLARE
23   	cst_unconfirm		CONSTANT VARCHAR2(10) := 'UNCONFIRM';
24   	CURSOR c_sca IS
25   		SELECT	sca.course_attempt_status
26   		FROM	IGS_EN_STDNT_PS_ATT	sca
27   		WHERE	sca.person_id = p_person_id AND
28   			sca.course_cd = p_course_cd;
29   	v_sca_rec		c_sca%ROWTYPE;
30   	v_message_name		varchar2(30) ;
31   BEGIN
32   	-- Set the default message number
33   	p_message_name := null;
34   	-- Cursor handling
35   	OPEN c_sca;
36   	FETCH c_sca INTO v_sca_rec;
37   	IF c_sca%NOTFOUND THEN
38   		CLOSE c_sca;
39   		-- This should not occur, resolve elsewhere
40   		RETURN TRUE;
41   	END IF;
42   	CLOSE c_sca;
43   	IF v_sca_rec.course_attempt_status = cst_unconfirm THEN
44   		RETURN TRUE;
45   	END IF;
46   	-- Validate against start date
47   	IF NOT IGS_EN_VAL_SCHO.enrp_val_scho_delete(
48   					p_start_dt,
49   					v_message_name) THEN
50   		p_message_name := v_message_name;
51   		RETURN FALSE;
52   	END IF;
53   	-- Return the default value
54   	RETURN TRUE;
55   EXCEPTION
56   	WHEN OTHERS THEN
57   		IF c_sca%ISOPEN THEN
58   			CLOSE c_sca;
59   		END IF;
60   		RAISE;
61   END;
62   EXCEPTION
63   	WHEN OTHERS THEN
64 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
65 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_trgdel');
66 		IGS_GE_MSG_STACK.ADD;
67 			App_Exception.Raise_Exception;
68 END enrp_val_scho_trgdel;
69   --
70   -- To perform all validations on a scho record
71   FUNCTION ENRP_VAL_SCHO_ALL(
72   p_person_id IN NUMBER ,
73   p_course_cd IN VARCHAR2 ,
74   p_start_dt IN DATE ,
75   p_end_dt IN DATE ,
76   p_hecs_payment_option IN VARCHAR2 ,
77   p_differential_hecs_ind IN VARCHAR2 ,
78   p_diff_hecs_ind_update_who IN VARCHAR2 ,
79   p_diff_hecs_ind_update_on IN DATE ,
80   p_diff_hecs_ind_update_comment IN VARCHAR2 ,
81   p_outside_aus_res_ind IN VARCHAR2 ,
82   p_nz_citizen_ind IN VARCHAR2 ,
83   p_nz_citizen_less2yr_ind IN VARCHAR2 ,
84   p_nz_citizen_not_res_ind IN VARCHAR2 ,
85   p_safety_net_ind IN VARCHAR2 ,
86   p_tax_file_number IN NUMBER ,
87   p_tax_file_number_collected_dt IN DATE ,
88   p_tax_file_invalid_dt IN DATE ,
89   p_tax_file_certificate_number IN NUMBER ,
90   p_message_name OUT NOCOPY VARCHAR2)
91   RETURN boolean  AS
92    BEGIN	-- enrp_val_scho_all
93   	-- Perform all validations associated with the addition of a
94   	-- IGS_EN_STDNTPSHECSOP record. This routine is typically called by
95   	-- processes which are defaulting or HECS records and need all validations
96   	-- to be performed.
97   	-- The routine will return a single error, being the first one encountered.
98   DECLARE
99   	v_message_name		varchar2(30);
100   	v_return_type		VARCHAR2(1);
101   	cst_error 		CONSTANT VARCHAR2(1) DEFAULT 'E';
102   BEGIN
103   	-- Set the default message number
104   	p_message_name := null;
105   	-- Validate START DATE AND END DATE.
106   	IF p_end_dt IS NOT NULL THEN
107   		IF IGS_AD_VAL_EDTL.GENP_VAL_STRT_END_DT(
108   					p_start_dt,
109   					p_end_dt,
110   					v_message_name) = FALSE THEN
111   			p_message_name := v_message_name;
112   			RETURN FALSE;
113   		END IF;
114   	END IF;
115   	-- Validate the start/end dates against other hecs option records.
116   	IF IGS_EN_VAL_SCHO.enrp_val_scho_st_end(
117   				p_person_id,
118   				p_course_cd,
119   				p_start_dt,
120   				p_end_dt,
121   				v_message_name) = FALSE THEN
122   		p_message_name := v_message_name;
123   		RETURN FALSE;
124   	END IF;
125   	-- Validate for overlapping records.
126   	IF IGS_EN_VAL_SCHO.enrp_val_scho_ovrlp(
127   				p_person_id,
128   				p_course_cd,
129   				p_start_dt,
130   				p_end_dt,
131   				v_message_name) = FALSE THEN
132   		p_message_name := v_message_name;
133   		RETURN FALSE;
134   	END IF;
135   	-- Validate VISA indicators
136   	IF IGS_EN_VAL_SCHO.enrp_val_scho_visa(
137   				p_outside_aus_res_ind,
138   				p_nz_citizen_ind,
139   				p_nz_citizen_less2yr_ind,
140   				p_nz_citizen_not_res_ind,
141   				v_message_name) = FALSE THEN
142   		p_message_name := v_message_name;
143   		RETURN FALSE;
144   	END IF;
145   	-- Validate the tax file number
146   	IF IGS_EN_VAL_SCHO.enrp_val_scho_tfn(
147   				p_person_id,
148   				p_course_cd,
149   				p_start_dt,
150   				p_tax_file_number,
151   				v_message_name,
152   				v_return_type) = FALSE THEN
153   		IF v_return_type = cst_error THEN
154   			p_message_name := v_message_name;
155   			RETURN FALSE;
156   		END IF;
157   	END IF;
158   	-- Validate the HECS payment option
159   	IF IGS_EN_VAL_SCHO.enrp_val_scho_hpo(
160   				p_hecs_payment_option,
161   				p_outside_aus_res_ind,
162   				p_nz_citizen_ind,
163   				p_nz_citizen_less2yr_ind,
164   				p_nz_citizen_not_res_ind,
165   				p_safety_net_ind,
166   				p_tax_file_number,
167   				p_tax_file_number_collected_dt,
168   				p_tax_file_certificate_number,
169   				p_differential_hecs_ind,
170   				v_message_name,
171   				v_return_type) = FALSE THEN
172   		IF v_return_type = cst_error THEN
173   			p_message_name := v_message_name;
174   			RETURN FALSE;
175   		END IF;
176   	END IF;
177   	-- Validate the tax file number
178   	IF IGS_EN_VAL_SCHO.enrp_val_tfn_invalid(
179   				p_tax_file_number,
180   				p_tax_file_invalid_dt,
181   				v_message_name) = FALSE THEN
182   		p_message_name := v_message_name;
183   		RETURN FALSE;
184   	END IF;
185   	-- Validate the tax file certificate number
186   	IF IGS_EN_VAL_SCHO.enrp_val_tfn_crtfct(
187   				p_tax_file_number,
188   				p_tax_file_invalid_dt,
189   				p_tax_file_certificate_number,
190   				v_message_name) = FALSE THEN
191   		p_message_name := v_message_name;
192   		RETURN FALSE;
193   	END IF;
194   	-- Validate END DATE.
195   	IF (p_hecs_payment_option IS NOT NULL OR
196   				p_end_dt IS NOT NULL) THEN
197   		IF IGS_EN_VAL_SCHO.enrp_val_scho_expire (
198   				p_person_id,
199   				p_course_cd,
200   				p_start_dt,
201   				p_end_dt,
202   				p_hecs_payment_option,
203   				v_message_name) = FALSE THEN
204   			p_message_name := v_message_name;
205   			RETURN FALSE;
206   		END IF;
207   	END IF;
208   	-- Validate the student course attempt HECS option HECS payment option,
209   	-- and the course type of the course version for the student course attempt.
210   	IF (p_hecs_payment_option IS NOT NULL) THEN
211   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_crs_typ (
212   					p_person_id,
213   					p_course_cd,
214   					p_hecs_payment_option,
215   					v_message_name,
216   					v_return_type) = FALSE THEN
217   			IF v_return_type = cst_error THEN
218   				p_message_name := v_message_name;
219   				RETURN FALSE;
220   			END IF;
221   		END IF;
222   	END IF;
223   	-- Validate the student course attempt HECS option HECS payment option,
224   	-- and the special course type of the course version for the student
225   	-- course attempt.
226   	IF p_hecs_payment_option IS NOT NULL THEN
227   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_spc_crs (
228   					p_person_id,
229   					p_course_cd,
230   					p_hecs_payment_option,
231   					v_message_name,
232   					v_return_type) = FALSE THEN
233   			IF v_return_type = cst_error THEN
234   				p_message_name := v_message_name;
235   				RETURN FALSE;
236   			END IF;
237   		END IF;
238   	END IF;
239   	-- Validate the student course attempt HECS option HECS payment option,
240   	-- the course type of the course version for the student course attempt,
241   	-- and the person statistics citizenship code.
242   	IF (p_hecs_payment_option IS NOT NULL OR
243   				p_end_dt IS NOT NULL) THEN
244   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_crs_cic (
245   					p_person_id,
246   					p_course_cd,
247   					p_start_dt,
248   					p_end_dt,
249   					p_hecs_payment_option,
250   					NULL,
251   					NULL,
252   					NULL,
253   					v_message_name,
254   					v_return_type) = FALSE THEN
255   			IF v_return_type = cst_error THEN
256   				p_message_name := v_message_name;
257   				RETURN FALSE;
258   			END IF;
259   		END IF;
260   	END IF;
261   	-- Validate the student course attempt HECS option HECS payment option,
262   	-- and the person statistics citizenship code.
263   	IF (p_hecs_payment_option IS NOT NULL OR
264   				p_end_dt IS NOT NULL) THEN
265   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_cic (
266   					p_person_id,
267   					p_course_cd,
268   					p_start_dt,
269   					p_end_dt,
270   					p_hecs_payment_option,
271   					NULL,
272   					NULL,
273   					NULL,
274   					v_message_name,
275   					v_return_type) = FALSE THEN
276   			IF v_return_type = cst_error THEN
277   				p_message_name := v_message_name;
278   				RETURN FALSE;
279   			END IF;
280   		END IF;
281   	END IF;
282   	-- Validate the student course attempt HECS option HECS payment option,
283   	-- and the person statistics citizenship code and permanent resident code.
284   	IF (p_hecs_payment_option IS NOT NULL OR
285   				p_end_dt IS NOT NULL) THEN
286   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_cic_prc (
287   					p_person_id,
288   					p_course_cd,
289   					p_start_dt,
290   					p_end_dt,
291   					p_hecs_payment_option,
292   					NULL,
293   					NULL,
294   					NULL,
295   					NULL,
296   					v_message_name,
297   					v_return_type) = FALSE THEN
298   			IF v_return_type = cst_error THEN
299   				p_message_name := v_message_name;
300   				RETURN FALSE;
301   			END IF;
302   		END IF;
303   	END IF;
304   	-- Validate the student course attempt HECS option visa indicators,
305   	-- and the person statistics citizenship code and permanent resident code.
306   	IF (p_outside_aus_res_ind IS NOT NULL			OR
307   			p_nz_citizen_ind IS NOT NULL		OR
308   			p_nz_citizen_less2yr_ind IS NOT NULL	OR
309   			p_nz_citizen_not_res_ind IS NOT NULL	OR
310   			p_end_dt is NOT NULL) THEN
311   		IF IGS_EN_VAL_SCHO.enrp_val_vis_cic_prc (
312   					p_person_id,
313   					p_course_cd,
314   					p_start_dt,
315   					p_end_dt,
316   					p_outside_aus_res_ind,
317   					p_nz_citizen_ind,
318   					p_nz_citizen_less2yr_ind,
319   					p_nz_citizen_not_res_ind,
320   					NULL,
321   					NULL,
322   					NULL,
323   					NULL,
324   					v_message_name,
325   					v_return_type) = FALSE THEN
326   			IF v_return_type = cst_error THEN
327   				p_message_name := v_message_name;
328   				RETURN FALSE;
329   			END IF;
330   		END IF;
331   	END IF;
332   	-- Validate the student course attempt HECS option HECS payment option,
333   	-- the student course attempt HECS option visa indicators, and the person
334   	-- statistics citizenship code and permanent resident code.
335   	IF (p_hecs_payment_option IS NOT NULL			OR
336   			p_outside_aus_res_ind IS NOT NULL	OR
337   			p_end_dt IS NOT NULL) THEN
338   		IF IGS_EN_VAL_SCHO.enrp_val_ho_cic_prc (
339   					p_person_id,
340   					p_course_cd,
341   					p_start_dt,
342   					p_end_dt,
343   					p_hecs_payment_option,
344   					p_outside_aus_res_ind,
345   					NULL,
346   					NULL,
347   					NULL,
348   					NULL,
349   					v_message_name,
350   					v_return_type) = FALSE THEN
351   			IF v_return_type = cst_error THEN
352   				p_message_name := v_message_name;
353   				RETURN FALSE;
354   			END IF;
355   		END IF;
356   	END IF;
357   	-- Validate the student course attempt HECS option HECS payment option,
358   	-- the student course attempt HECS option visa indicators, and the person
359   	-- statistics citizenship code.
360   	IF (p_outside_aus_res_ind IS NOT NULL			OR
361   			p_nz_citizen_ind IS NOT NULL		OR
362   			p_nz_citizen_less2yr_ind IS NOT NULL	OR
363   			p_nz_citizen_not_res_ind is NOT NULL	OR
364   			p_end_dt is NOT NULL) THEN
365   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_vis_cic (
366   					p_person_id,
367   					p_course_cd,
368   					p_start_dt,
369   					p_end_dt,
370   					p_hecs_payment_option,
371   					p_outside_aus_res_ind,
372   					p_nz_citizen_ind,
373   					p_nz_citizen_less2yr_ind,
374   					p_nz_citizen_not_res_ind,
375   					NULL,
376   					NULL,
377   					NULL,
378   					NULL,
379   					v_message_name,
380   					v_return_type) = FALSE THEN
381   			IF v_return_type = cst_error THEN
382   				p_message_name := v_message_name;
383   				RETURN FALSE;
384   			END IF;
385   		END IF;
386   	END IF;
387   	-- Validate the student course attempt HECS option HECS payment option,
388   	-- and the person statistics citizenship code and other person statistics
389   	-- values including year of arrival and term LOCATION country and postcode.
390   	IF (p_hecs_payment_option IS NOT NULL	OR
391   			p_end_dt IS NOT NULL) THEN
392   		IF IGS_EN_VAL_SCHO.enrp_val_hpo_cic_ps (
393   					p_person_id,
394   					p_course_cd,
395   					p_start_dt,
396   					p_end_dt,
400   					NULL,
397   					p_hecs_payment_option,
398   					NULL,
399   					NULL,
401   					NULL,
402   					NULL,
403   					NULL,
404   					NULL,
405   					v_message_name,
406   					v_return_type) = FALSE THEN
407   			IF v_return_type = cst_error THEN
408   				p_message_name := v_message_name;
409   				RETURN FALSE;
410   			END IF;
411   		END IF;
412   	END IF;
413   	RETURN TRUE;
414   END;
415   EXCEPTION
416   	WHEN OTHERS THEN
417 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
418 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_all');
419 		IGS_GE_MSG_STACK.ADD;
420 		App_Exception.Raise_Exception;
421   END enrp_val_scho_all;
422   --
423 
424 
425   -- Validate that there are no other open ended student course hecs option
426   FUNCTION ENRP_VAL_SCHO_OPEN(
427   p_person_id IN NUMBER ,
428   p_course_cd IN VARCHAR2 ,
429   p_start_dt IN DATE ,
430   p_message_name OUT NOCOPY VARCHAR2)
431   RETURN BOOLEAN  AS
432   BEGIN
433   DECLARE
434    	CURSOR	gc_scho(
435   			cp_person_id IGS_EN_STDNTPSHECSOP.person_id%TYPE,
436   			cp_course_cd IGS_EN_STDNTPSHECSOP.course_cd%TYPE,
437   			cp_start_dt IGS_EN_STDNTPSHECSOP.start_dt%TYPE) IS
438   		SELECT	IGS_EN_STDNTPSHECSOP.end_dt
439   		FROM	IGS_EN_STDNTPSHECSOP
440   		WHERE	IGS_EN_STDNTPSHECSOP.person_id = cp_person_id AND
441   			IGS_EN_STDNTPSHECSOP.course_cd = cp_course_cd AND
442   			IGS_EN_STDNTPSHECSOP.start_dt <> cp_start_dt;
443   BEGIN
444   	-- this module validates that there are no other "open ended" scho
445   	-- records for the nominated student course attempt
446   	p_message_name := null;
447   	FOR gc_scho_rec IN gc_scho(
448   				p_person_id,
449   				p_course_cd,
450   				p_start_dt) LOOP
451   		IF gc_scho_rec.end_dt IS NULL THEN
452   			p_message_name := 'IGS_EN_OPEN_END_ALREADY_EXIST';
453   			RETURN FALSE;
454   		END IF;
455   	END LOOP;
456   	RETURN TRUE;
457   	EXCEPTION
458   	WHEN OTHERS THEN
459 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
460 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_open');
461 		IGS_GE_MSG_STACK.ADD;
462 			App_Exception.Raise_Exception;
463   END;
464   END enrp_val_scho_open;
465   --
466   -- Check for overlap in a students course hecs option records
467   FUNCTION enrp_val_scho_ovrlp(
468   p_person_id IN NUMBER ,
469   p_course_cd IN VARCHAR2 ,
470   p_start_dt IN DATE ,
471   p_end_dt IN DATE ,
472   p_message_name OUT NOCOPY VARCHAR2)
473   RETURN BOOLEAN  AS
474    BEGIN
475   DECLARE
476   	v_exit_loop 	BOOLEAN DEFAULT FALSE;
477     	CURSOR c_scho IS
478     		SELECT	scho.start_dt,
479     			scho.end_dt
480     		FROM	IGS_EN_STDNTPSHECSOP	scho
481     		WHERE	scho.person_id 	= p_person_id AND
482     			scho.course_cd 	= p_course_cd AND
483     			scho.start_dt 	<> p_start_dt;
484     BEGIN
485     	-- this module validates that the IGS_EN_STDNTPSHECSOP record
486     	-- being created or updated does not overlap with an existing record
487     	-- for the nominated person
488     	p_message_name := null;
489     	FOR v_scho_rec IN c_scho LOOP
490     		IF v_scho_rec.end_dt IS NOT NULL THEN
491     			-- Validate the start date is not between an existing
492     			-- date range.
493     			IF p_start_dt BETWEEN v_scho_rec.start_dt AND v_scho_rec.end_dt THEN
494     				p_message_name := 'IGS_EN_HECS_STDT_BTWN_DTRNG';
495   				v_exit_loop := TRUE;
496   				EXIT;
497   			-- Validate the end date is not between an
498   			-- existing date range.
499   			ELSIF p_end_dt BETWEEN v_scho_rec.start_dt AND v_scho_rec.end_dt THEN
500   				p_message_name := 'IGS_EN_HECS_ENDDT_BTWN_DTRNG';
501   				v_exit_loop := TRUE;
502   				EXIT;
503   			-- Validate the current dates do not overlap
504   			-- and entire exisitng date range.
505   			ELSIF p_start_dt <= v_scho_rec.start_dt AND
506   					(p_end_dt IS NULL OR
507   					p_end_dt >= v_scho_rec.end_dt) THEN
508   				p_message_name := 'IGS_EN_HECS_DT_OVERLAP_DTRNG';
509   				v_exit_loop := TRUE;
510   				EXIT;
511     			END IF;
512     		ELSE -- c_scho.end_dt is null
513     			-- Validate the new date range does not overlap an
514     			-- existing start date.
515     			IF p_end_dt IS NULL OR
516     				     v_scho_rec.start_dt <= p_end_dt THEN
517   				p_message_name := 'IGS_EN_HECS_DT_OVERLAP_STDT';
518   				v_exit_loop := TRUE;
519   				EXIT;
520     			END IF;
521     		END IF;
522     	END LOOP;
523   	IF v_exit_loop THEN
524   		RETURN FALSE;
525   	END IF;
526     	RETURN TRUE;
527   END;
528   EXCEPTION
529     	WHEN OTHERS THEN
530 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
531 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_ovrlp');
532 		IGS_GE_MSG_STACK.ADD;
533 			App_Exception.Raise_Exception;
534   END enrp_val_scho_ovrlp;
535   --
536   -- Validate student course HECS option start and end date.
537   FUNCTION enrp_val_scho_st_end(
538   p_person_id IN NUMBER ,
539   p_course_cd IN VARCHAR2 ,
540   p_start_dt IN DATE ,
541   p_end_dt IN DATE ,
542   p_message_name OUT NOCOPY VARCHAR2)
543   RETURN BOOLEAN  AS
544   BEGIN
545   DECLARE
549   	-- this module validates the start and end date for the
546   	v_other_detail	 VARCHAR(255);
547   	v_message_name 	 varchar2(30);
548   BEGIN
550   	-- nominated student course hecs option
551   	p_message_name := null;
552   	IF (p_end_dt IS NOT NULL) THEN
553   		IF (p_end_dt < p_start_dt) THEN
554   			p_message_name := 'IGS_EN_HECS_EN_DT_GE_ST_DT';
555   			RETURN FALSE;
556   		END IF;
557   	ELSE
558   		IF (IGS_EN_VAL_SCHO.enrp_val_scho_open(
559   					p_person_id,
560   					p_course_cd,
561   					p_start_dt,
562   					v_message_name) = FALSE) THEN
563   			p_message_name := v_message_name;
564   			RETURN FALSE;
565   		END IF;
566   	END IF;
567   	RETURN TRUE;
568   EXCEPTION
569   	WHEN OTHERS THEN
570 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
571 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_st_end');
572 		IGS_GE_MSG_STACK.ADD;
573 			App_Exception.Raise_Exception;
574 
575   END;
576   END enrp_val_scho_st_end;
577   --
578   -- Validate student course attempt HECS payment option visa indicators.
579   FUNCTION enrp_val_scho_visa(
580   p_outside_aus_res_ind IN VARCHAR2 DEFAULT 'N',
581   p_nz_citizen_ind IN VARCHAR2 DEFAULT 'N',
582   p_nz_citizen_less2yrind IN VARCHAR2 DEFAULT 'N',
583   p_nz_citizen_not_res_ind IN VARCHAR2 DEFAULT 'N',
584   p_message_name OUT NOCOPY VARCHAR2)
585   RETURN BOOLEAN  AS
586   BEGIN
587   DECLARE
588 
589   BEGIN
590   	-- This module validates the student course
591   	-- attempt visa indicators, in which either
592   	-- all must not be set or only one
593   	-- may be set
594   	p_message_name := 'IGS_EN_ONE_RES_IND';
595   	IF (p_outside_aus_res_ind = 'Y' AND
596   		p_nz_citizen_ind = 'N' AND
597   		p_nz_citizen_less2yrind = 'N' AND
598   		p_nz_citizen_not_res_ind = 'N') THEN
599   			p_message_name := null;
600   			return TRUE;
601   	ELSIF(p_nz_citizen_ind = 'Y' AND
602   		p_outside_aus_res_ind = 'N' AND
603   		p_nz_citizen_less2yrind = 'N' AND
604   		p_nz_citizen_not_res_ind = 'N') THEN
605   			p_message_name := null;
606   			return TRUE;
607   	ELSIF (p_nz_citizen_less2yrind = 'Y' AND
608   		p_nz_citizen_not_res_ind = 'N' AND
609   		p_outside_aus_res_ind = 'N' AND
610   		p_nz_citizen_ind = 'N') THEN
611   			p_message_name := null;
612   			return TRUE;
613   	ELSIF (p_nz_citizen_not_res_ind = 'Y' AND
614   		p_outside_aus_res_ind = 'N' AND
615   		p_nz_citizen_ind = 'N' AND
616   		p_nz_citizen_less2yrind = 'N') THEN
617   			p_message_name := null;
618   			return TRUE;
619   	ELSIF (p_nz_citizen_not_res_ind = 'N' AND
620   		p_outside_aus_res_ind = 'N' AND
621   		p_nz_citizen_ind = 'N' AND
622   		p_nz_citizen_less2yrind = 'N') THEN
623   			p_message_name := null;
624   			return TRUE;
625   	END IF;
626   	RETURN FALSE;
627   EXCEPTION
628   	WHEN OTHERS THEN
629 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
630 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_visa');
631 		IGS_GE_MSG_STACK.ADD;
632 			App_Exception.Raise_Exception;
633   END;
634   END enrp_val_scho_visa;
635   --
636   -- Validate student course attempt HECS payment option tax file number.
637   FUNCTION enrp_val_scho_tfn(
638   p_person_id IN NUMBER ,
639   p_course_cd IN VARCHAR2 ,
640   p_start_dt IN DATE ,
641   p_tax_file_number IN NUMBER ,
642   p_message_name OUT NOCOPY VARCHAR2,
643   p_return_type OUT NOCOPY VARCHAR2 )
644   RETURN BOOLEAN  AS
645   BEGIN
646             DECLARE
647                v_other_detail          VARCHAR2(255);
648                v_scho_unique_rec       IGS_EN_STDNTPSHECSOP%ROWTYPE;
649                v_scho_same_rec         IGS_EN_STDNTPSHECSOP%ROWTYPE;
650                v_count                 NUMBER;
651                v_count1                NUMBER;
652                v_cnt                   NUMBER;
653                v_tfn_digit             NUMBER;
654                v_algorithm_total       NUMBER;
655   	     cst_factor		     CONSTANT	NUMBER := 11;
656   	     CURSOR  c_scho_unique_rec IS
657                        SELECT  *
658                        FROM    IGS_EN_STDNTPSHECSOP
659                        WHERE   person_id <> p_person_id AND
660                                tax_file_number = p_tax_file_number;
661   	     CURSOR  c_scho_same_rec IS
662                        SELECT  *
663                        FROM    IGS_EN_STDNTPSHECSOP
664                        WHERE   person_id = p_person_id AND
665   		tax_file_number is NOT NULL AND
666                                tax_file_number <> p_tax_file_number;
667   	     TYPE t_algorithm IS TABLE OF NUMBER NOT NULL
668                                INDEX BY BINARY_INTEGER;
669   	     tax_file_alg_tab t_algorithm;
670   	  BEGIN
671                -- This module validates the student course attempt
672                -- HECS payment option tax file number.
673                -- The tax file number must be unique for a person_id
674                -- and the same for one person, of length 9 and must
675                -- be valid according to the tax file number
676                -- algorithm
677                p_message_name := null;
678                p_return_type := ' ';
682   	     IF (p_tax_file_number IS NULL) THEN
679   	     -- initialising the total
680   	     v_algorithm_total := 0;
681   	     -- this checks that the p_tax_file_number is entered
683   		     RETURN TRUE;
684   	     END IF;
685                -- this checks that the tax file number
686                -- is of the correct length (ie. 9)
687                IF (LENGTH(p_tax_file_number) <> 9) THEN
688                        p_message_name := 'IGS_EN_TFN_LENGTH_BE_9';
689                        p_return_type := cst_error;
690                        RETURN FALSE;
691                END IF;
692                -- this validates that the tax file number is unique
693                -- across a person's id
694                v_count  := 0;
695                OPEN c_scho_unique_rec;
696                LOOP
697                        FETCH c_scho_unique_rec INTO v_scho_unique_rec;
698                        EXIT WHEN c_scho_unique_rec%NOTFOUND;
699                        v_count := v_count + 1;
700                END LOOP;
701                CLOSE c_scho_unique_rec;
702                IF (v_count > 0) THEN
703                        p_message_name := 'IGS_GE_DUPLICATE_VALUE';
704                        p_return_type := cst_error;
705                        RETURN FALSE;
706                END IF;
707                -- setting the required values for the tax file
708                -- number algorithm
709                tax_file_alg_tab(1) := 10;
710                tax_file_alg_tab(2) := 7;
711                tax_file_alg_tab(3) := 8;
712                tax_file_alg_tab(4) := 4;
713                tax_file_alg_tab(5) := 6;
714                tax_file_alg_tab(6) := 3;
715                tax_file_alg_tab(7) := 5;
716                tax_file_alg_tab(8) := 2;
717                tax_file_alg_tab(9) := 1;
718   	     -- for each digit of the p_tax_file_number, extract it and
719   	     -- apply the tax file number algorithm to the digit
720                FOR v_cnt IN 1..9 LOOP
721                        v_tfn_digit :=
722   		SUBSTR(to_char(p_tax_file_number), v_cnt, 1);
723                        v_algorithm_total :=
724   		v_algorithm_total + (v_tfn_digit * tax_file_alg_tab(v_cnt));
725                END LOOP;
726   	     -- if the algorithm returns a number other than zero,
727   	     -- then an invalid p_tax_file_number was entered
728                IF (MOD(v_algorithm_total, cst_factor) <> 0) THEN
729                      p_message_name := 'IGS_EN_TFN_HAS_FAILED';
730   		   p_return_type := cst_error;
731                      RETURN FALSE;
732   	     END IF;
733                -- this validates that the tax file number is the
734                -- same for a person's id
735                v_count1 := 0;
736                OPEN c_scho_same_rec;
737                LOOP
738                        FETCH c_scho_same_rec INTO v_scho_same_rec;
739                        EXIT WHEN c_scho_same_rec%NOTFOUND;
740   	-- Eliminate the record being updated/inserted.
741   	  IF	(v_scho_same_rec.course_cd = p_course_cd AND
742   		 v_scho_same_rec.start_dt <> p_start_dt) OR
743   		(v_scho_same_rec.course_cd <> p_course_cd) THEN
744   	                     v_count1 := v_count1 + 1;
745   	END IF;
746                END LOOP;
747                CLOSE c_scho_same_rec;
748                IF (v_count1 > 0) THEN
749                        p_message_name := 'IGS_EN_STUD_HAS_DIFF_TFN';
750                        p_return_type := cst_warn;
751                        RETURN FALSE;
752                END IF;
753                RETURN TRUE;
754   	  EXCEPTION
755                WHEN OTHERS THEN
756 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
757 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_tfn');
758 			IGS_GE_MSG_STACK.ADD;
759 			App_Exception.Raise_Exception;
760   	  END;
761          END enrp_val_scho_tfn;
762   --
763   -- To validate the HECS Payment Option for a Student course HECS option
764   FUNCTION enrp_val_scho_hpo(
765   p_hecs_payment_option IN VARCHAR2 ,
766   p_outside_aus_res_ind IN VARCHAR2 DEFAULT 'N',
767   p_nz_citizen_ind IN VARCHAR2 DEFAULT 'N',
768   p_nz_citizen_less2yr_ind IN VARCHAR2 DEFAULT 'N',
769   p_nz_citizen_not_res_ind IN VARCHAR2 DEFAULT 'N',
770   p_safety_net_ind IN VARCHAR2 DEFAULT 'N',
771   p_tax_file_number IN NUMBER ,
772   p_tax_file_number_collected_dt IN DATE ,
773   p_tax_file_certificate_number IN NUMBER ,
774   p_differential_hecs_ind IN VARCHAR2 DEFAULT 'N',
775   p_message_name OUT NOCOPY VARCHAR2,
776   p_return_type OUT NOCOPY VARCHAR2 )
777   RETURN BOOLEAN  AS
778    BEGIN	--enrp_val_scho_hpo
779   	-- This module validates the student course attempt
780   	-- HECS payment_option and associated fields.
781   DECLARE
782   	CURSOR  c_ghpo_details IS
783   		SELECT  ghpo.s_hecs_payment_type
784   		FROM	IGS_FI_HECS_PAY_OPTN		hpo,
785   			IGS_FI_GOV_HEC_PA_OP	ghpo
786   		WHERE	hpo.hecs_payment_option		= p_hecs_payment_option AND
787   			ghpo.govt_hecs_payment_option	= hpo.govt_hecs_payment_option;
788   	v_ghpo_rec	c_ghpo_details%ROWTYPE;
789   BEGIN
790   	p_message_name := null;
791   	OPEN  c_ghpo_details;
792   	FETCH c_ghpo_details INTO v_ghpo_rec;
793   	-- exit if no HECS payment option is found
794   	IF c_ghpo_details%NOTFOUND THEN
795   		CLOSE c_ghpo_details;
796   		RETURN TRUE;
800   	-- deferred
797   	END IF;
798   	CLOSE c_ghpo_details;
799   	-- perform validation when the HECS payment option is
801   	IF v_ghpo_rec.s_hecs_payment_type = cst_hecs_type_deferred THEN
802   		-- validating the visa indicators, which
803   		-- none must be set
804   		IF p_outside_aus_res_ind = 'Y' OR
805   				p_nz_citizen_ind = 'Y' OR
806   				p_nz_citizen_less2yr_ind = 'Y' OR
807   				p_nz_citizen_not_res_ind = 'Y' THEN
808   			p_message_name := 'IGS_EN_VISA_IND_MUST_NOT_SET';
809   			p_return_type := cst_error;
810   			RETURN FALSE;
811   		END IF;
812   		-- validating the safety net indicator, which
813   		-- must not be set
814   		IF p_safety_net_ind = 'Y' THEN
815   			p_message_name := 'IGS_EN_SAFET_IND_MUST_NOT_SET';
816   			p_return_type := cst_error;
817   			RETURN FALSE;
818   		END IF;
819   		-- validate the tax file number/tax file certificate
820   		-- number, of which either must be set.  If the tax
821   		-- file number is set, then the tax fiel collected
822   		-- date must also be set
823   		IF ((p_tax_file_number IS NULL OR
824   				(p_tax_file_number IS NOT NULL AND
825   				p_tax_file_number_collected_dt IS NULL)) AND
826   				p_tax_file_certificate_number IS NULL) THEN
827   			p_message_name := 'IGS_EN_TAX_FILE_NO_BE_SET';
828   			p_return_type := cst_warn;
829   			RETURN FALSE;
830   		END IF;
831   	END IF;
832   	-- perform validation when the HECS payment option is
833   	-- up-front with discount
834   	IF v_ghpo_rec.s_hecs_payment_type = cst_hecs_type_upfront_discount THEN
835   		-- validating the visa indicators, which
836   		-- none must be set
837   		IF p_outside_aus_res_ind = 'Y' OR
838   				p_nz_citizen_ind = 'Y' OR
839   				p_nz_citizen_less2yr_ind = 'Y' OR
840   				p_nz_citizen_not_res_ind = 'Y' THEN
841   			p_message_name := 'IGS_EN_VISA_IND_NOT_BE_SET';
842   			p_return_type := cst_error;
843   			RETURN FALSE;
844   		END IF;
845   		-- validating the safety net indicator
846   		IF p_safety_net_ind = 'Y' THEN
847   			-- validate the tax file number/tax file certificate
848   			-- number, of which either must be set.  If the tax
849   			-- file number is set, then the tax fiel collected
850   			-- date must also be set
851   			IF ((p_tax_file_number IS NULL OR
852   					(p_tax_file_number IS NOT NULL AND
853   					 p_tax_file_number_collected_dt IS NULL)) AND
854   					 p_tax_file_certificate_number IS NULL)   THEN
855   				p_message_name := 'IGS_EN_CHK_TFN_RECORDED_DT';
856   				p_return_type := cst_warn;
857   				RETURN FALSE;
858   			END IF;
859   		ELSE -- p_safety_net_ind = 'N'
860   			IF p_tax_file_number IS NOT NULL OR
861   					p_tax_file_number_collected_dt IS NOT NULL OR
862   					p_tax_file_certificate_number IS NOT NULL THEN
863   				p_message_name := 'IGS_EN_CHK_HECS_PAY_OPTION';
864   				p_return_type := cst_error;
865   				RETURN FALSE;
866   			END IF;
867   		END IF;
868   	END IF;
869   	-- validate when HECS payment option is up-front with
870   	-- no discount
871   	IF v_ghpo_rec.s_hecs_payment_type = cst_hecs_type_upfront THEN
872   		IF p_outside_aus_res_ind ='Y' OR
873   		   p_nz_citizen_ind = 'Y' OR
874   		   p_nz_citizen_less2yr_ind = 'Y' OR
875   		   p_nz_citizen_not_res_ind = 'Y' THEN
876   			-- a visa indicator is set
877   			-- validate the safety net indicator, which must
878   			-- not be set
879   			IF p_safety_net_ind = 'Y' THEN
880   				p_message_name := 'IGS_EN_SAFETY_NET_IND_BE_SET';
881   				p_return_type := cst_error;
882   				RETURN FALSE;
883   			END IF;
884   			-- validate the tax file number/tax file
885   			-- certificate number, which none must be
886   			-- set
887   			IF p_tax_file_number IS NOT NULL OR
888   			   p_tax_file_number_collected_dt IS NOT NULL OR
889   			   p_tax_file_certificate_number IS NOT NULL THEN
890   				p_message_name := 'IGS_EN_CHK_TFN_TFC';
891   				p_return_type := cst_error;
892   				RETURN FALSE;
893   			END IF;
894   		END IF;
895   	END IF;
896   	-- validate when HECS payment option is exempt
897   	IF v_ghpo_rec.s_hecs_payment_type = cst_hecs_type_exempt THEN
898   		-- validate the visa indicators, safety net indicator
899   		-- and tax file number/tax file certificate number,
900   		-- which none must be set
901   		IF p_outside_aus_res_ind = 'Y' OR
902   				p_nz_citizen_ind = 'Y' OR
903   				p_nz_citizen_less2yr_ind = 'Y' OR
904   				p_nz_citizen_not_res_ind = 'Y' OR
905   				p_safety_net_ind = 'Y' OR
906   				p_tax_file_number IS NOT NULL OR
907   				p_tax_file_number_collected_dt IS NOT NULL OR
908   				p_tax_file_certificate_number IS NOT NULL OR
909   				p_differential_hecs_ind = 'Y' THEN
910   			p_message_name := 'IGS_EN_CHK_DIFF_INDICATORS';
911   			p_return_type := cst_error;
912   			RETURN FALSE;
913   		END IF;
914   	END IF;
915   	RETURN TRUE;
916   END;
917   EXCEPTION
918   	WHEN OTHERS THEN
919 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
920 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_hpo');
921 		IGS_GE_MSG_STACK.ADD;
922 			App_Exception.Raise_Exception;
923   END enrp_val_scho_hpo;
924   --
925   -- Validate the insert of a student course HECS option record.
929   p_message_name OUT NOCOPY VARCHAR2)
926   FUNCTION enrp_val_scho_insert(
927   p_person_id IN NUMBER ,
928   p_course_cd IN VARCHAR2 ,
930   RETURN BOOLEAN  AS
931   BEGIN
932   DECLARE
933   	v_other_detail			VARCHAR2(255);
934   	v_course_attempt_status		IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
935   	CURSOR  c_attempt_status IS
936   		SELECT  course_attempt_status
937   		FROM	IGS_EN_STDNT_PS_ATT
938   		WHERE	person_id = p_person_id AND
939   			course_cd = p_course_cd;
940   BEGIN
941   	-- This module validates the insertion of a
942   	-- IGS_EN_STDNT_PS_HECS_OPTION_V record, in which
943   	-- it can't be inserted if it has a status of
944   	-- completed or deleted.
945   	p_message_name := null;
946   	OPEN  c_attempt_status;
947   	FETCH c_attempt_status INTO v_course_attempt_status;
948   	-- exit successfully if a record isn't found
949   	-- therefore, no validation was required
950   	IF (c_attempt_status%NOTFOUND) THEN
951   		CLOSE c_attempt_status;
952   		p_message_name := null;
953   		RETURN TRUE;
954   	END IF;
955   	CLOSE c_attempt_status;
956   	-- checking if the attempt_status is set
957   	-- to deleted or completed
958   	IF (v_course_attempt_status = cst_deleted OR
959               v_course_attempt_status = cst_completed) THEN
960   		p_message_name := 'IGS_EN_CANT_CREATE_HECS';
961   		RETURN FALSE;
962   	END IF;
963   	RETURN TRUE;
964   EXCEPTION
965   	WHEN OTHERS THEN
966 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
967 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_insert');
968 		IGS_GE_MSG_STACK.ADD;
969 			App_Exception.Raise_Exception;
970   END;
971   END enrp_val_scho_insert;
972   --
973   -- Validate the update of a student course HECS option record.
974   FUNCTION enrp_val_scho_update(
975   p_start_dt IN DATE ,
976   p_message_name OUT NOCOPY VARCHAR2)
977   RETURN BOOLEAN  AS
978   BEGIN
979   DECLARE
980 
981   	v_diff			NUMBER;
982   BEGIN
983   	-- This module validates whether a IGS_EN_STDNT_PS_HECS_OPTION_V
984   	-- record may be updated.  It may only be updated if
985   	-- the IGS_EN_STDNTPSHECSOP.start_dt is equal or greater
986   	-- than the current date.
987   	v_diff := MONTHS_BETWEEN(SYSDATE, p_start_dt);
988   	-- start_dt is less than the current date
989   	IF (v_diff > 0) THEN
990   		p_message_name := 'IGS_EN_CANT_UPD_HECS_PAY_OPT';
991   		RETURN FALSE;
992   	END IF;
993   	-- start_dt is greater than or equal to the
994   	-- current date
995   	p_message_name := null;
996   	RETURN TRUE;
997   EXCEPTION
998   	WHEN OTHERS THEN
999 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1000 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_update');
1001 		IGS_GE_MSG_STACK.ADD;
1002 			App_Exception.Raise_Exception;
1003   END;
1004   END enrp_val_scho_update;
1005   --
1006   -- Validate the delete of a student course HECS option record.
1007   FUNCTION enrp_val_scho_delete(
1008   p_start_dt IN DATE ,
1009   p_message_name OUT NOCOPY VARCHAR2)
1010   RETURN BOOLEAN  AS
1011   BEGIN
1012   DECLARE
1013 
1014   	v_diff			NUMBER;
1015   BEGIN
1016   	-- This module validates whether a IGS_EN_STDNT_PS_HECS_OPTION_V
1017   	-- record may be deleted.  It may only be deleted if
1018   	-- the IGS_EN_STDNTPSHECSOP.start_dt is equal or greater
1019   	-- than the current date.
1020   	v_diff := MONTHS_BETWEEN(SYSDATE, p_start_dt);
1021   	-- start_dt is less than the current date
1022   	IF (v_diff > 0) THEN
1023   		p_message_name := 'IGS_EN_CANT_DEL_HECS_PAY_OPT';
1024   		RETURN FALSE;
1025   	END IF;
1026   	-- start_dt is greater than or equal to the
1027   	-- current date
1028   	p_message_name := null;
1029   	RETURN TRUE;
1030   EXCEPTION
1031   	WHEN OTHERS THEN
1032 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1033 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_delete');
1034 		IGS_GE_MSG_STACK.ADD;
1035 			App_Exception.Raise_Exception;
1036   END;
1037   END enrp_val_scho_delete;
1038   --
1039   -- Validate HECS option, citizenship code and permanent resident.
1040   FUNCTION enrp_val_ho_cic_prc(
1041   p_person_id IN NUMBER ,
1042   p_course_cd IN VARCHAR2 ,
1043   p_scho_start_dt IN DATE ,
1044   p_scho_end_dt IN DATE ,
1045   p_hecs_payment_option IN VARCHAR2 ,
1046   p_outside_aus_res_ind IN VARCHAR2 DEFAULT 'N',
1047   p_ps_start_dt IN DATE ,
1048   p_ps_end_dt IN DATE ,
1049   p_citizenship_cd IN VARCHAR2 ,
1050   p_perm_resident_cd IN VARCHAR2 ,
1051   p_message_name OUT NOCOPY VARCHAR2,
1052   p_return_type OUT NOCOPY VARCHAR2 )
1053   RETURN BOOLEAN  AS
1054    BEGIN
1055   DECLARE
1056   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
1057   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
1058   	v_govt_perm_resident_cd
1059   		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE DEFAULT NULL;
1060   	v_outside_aus_res_ind		IGS_EN_STDNT_PS_HECS_OPTION_V.outside_aus_res_ind%TYPE;
1061   	v_exit			BOOLEAN DEFAULT FALSE;
1062   	CURSOR c_ghpo IS
1063   		SELECT	govt_hecs_payment_option
1064   		FROM	IGS_FI_HECS_PAY_OPTN
1065   		WHERE	hecs_payment_option = p_hecs_payment_option AND
1066   			govt_hecs_payment_option IS NOT NULL;
1070   			CIT.govt_citizenship_cd,
1067   	CURSOR c_gcitiz IS
1068   		SELECT	PS.start_dt,
1069   			PS.end_dt,
1071   			PRCD.govt_perm_resident_cd
1072   		FROM	IGS_PE_STATISTICS PS,
1073   			IGS_ST_CITIZENSHP_CD CIT,
1074   			IGS_PE_PERM_RES_CD PRCD
1075   		WHERE	PS.person_id = p_person_id AND
1076   			PS.citizenship_cd = CIT.citizenship_cd AND
1077   			PS.perm_resident_cd = PRCD.perm_resident_cd (+)
1078   		ORDER BY PS.start_dt,
1079   			 PS.end_dt;
1080   	CURSOR c_gccd IS
1081   		SELECT	govt_citizenship_cd
1082   		FROM	IGS_ST_CITIZENSHP_CD
1083   		WHERE	citizenship_cd = p_citizenship_cd;
1084   	CURSOR c_gprcd IS
1085   		SELECT	govt_perm_resident_cd
1086   		FROM	IGS_PE_PERM_RES_CD
1087   		WHERE	perm_resident_cd = p_perm_resident_cd;
1088   	CURSOR c_hpo IS
1089   		SELECT	SCHOV.start_dt,
1090   			SCHOV.end_dt,
1091   			SCHOV.outside_aus_res_ind,
1092   			HPO.govt_hecs_payment_option
1093   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V SCHOV,
1094   			IGS_FI_HECS_PAY_OPTN HPO
1095   		WHERE	SCHOV.person_id = p_person_id AND
1096   			SCHOV.hecs_payment_option =
1097   				HPO.hecs_payment_option AND
1098   			HPO.govt_hecs_payment_option IS NOT NULL
1099   		ORDER BY SCHOV.start_dt,
1100   			 SCHOV.end_dt;
1101   	FUNCTION enrpl_chk_whether_to_validate (
1102   		p_p_start_dt	DATE,
1103   		p_p_end_dt	DATE,
1104   		p_db_start_dt	DATE,
1105   		p_db_end_dt	DATE)
1106   	RETURN BOOLEAN  AS
1107   	BEGIN
1108   	DECLARE
1109 
1110   	BEGIN
1111   		-- this module checks whether further validation
1112   		-- should be performed, depending on the values
1113   		-- of certain system and parameter dates
1114   		-- determining if a record should be validated
1115   		-- which will occur when the DB effective date(s)
1116   		-- overlap or match the parameter date(s)
1117   		IF (p_p_end_dt IS NULL OR
1118   				p_p_end_dt >= p_db_start_dt) AND
1119   				(p_db_end_dt IS NULL OR
1120   				p_p_start_dt <= p_db_end_dt) THEN
1121   			RETURN TRUE;
1122   		END IF;
1123   		RETURN FALSE;
1124   	EXCEPTION
1125   		WHEN OTHERS THEN
1126 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1127 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_whether_to_validate');
1128 			IGS_GE_MSG_STACK.ADD;
1129 			App_Exception.Raise_Exception;
1130   	END;
1131   	END enrpl_chk_whether_to_validate;
1132   	FUNCTION enrpl_do_validations (
1133   		p_outside_aus_res_ind		IGS_EN_STDNT_PS_HECS_OPTION_V.outside_aus_res_ind%TYPE,
1134   		p_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE,
1135   		p_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
1136   		p_govt_perm_resident_cd		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE)
1137   	RETURN BOOLEAN  AS
1138   	BEGIN
1139   	DECLARE
1140   		v_other_detail			VARCHAR2(255);
1141   	BEGIN
1142   		-- this module performs the validation that is
1143   		-- required, in that if the IGS_FI_GOV_HEC_PA_OP = 12
1144   		-- then the govt. value for the IGS_ST_CITIZENSHP_CD must be
1145   		-- 3 and the govt. value for the IGS_PE_PERM_RES_CD must
1146   		-- be 2
1147   		-- checking whether the IGS_FI_GOV_HEC_PA_OP = 12
1148   		IF p_govt_hecs_payment_option = cst_hecs_upfront AND
1149   				-- checking if the indicator is set
1150   				p_outside_aus_res_ind = 'Y' THEN
1151   			-- checking if the IGS_PE_GOVCITIZEN_CD = '3'
1152   			IF p_govt_citizenship_cd = cst_citizen_perm THEN
1153   				-- checking if the perm_resdient_cd = 2
1154   				IF NVL(p_govt_perm_resident_cd, 9) <> cst_perm_out_aust_not_crs THEN
1155   					RETURN FALSE;
1156   				END IF;
1157   			ELSE
1158   				RETURN FALSE;
1159   			END IF;
1160   		END IF;
1161   		RETURN TRUE;
1162   	EXCEPTION
1163   		WHEN OTHERS THEN
1164 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1165 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_do_validations');
1166 			IGS_GE_MSG_STACK.ADD;
1167 			App_Exception.Raise_Exception;
1168   	END;
1169   	END enrpl_do_validations;
1170   BEGIN
1171   	-- This is the main module which validates the student_course_hecs_
1172   	-- option_v.IGS_FI_HECS_PAY_OPTN against the IGS_PE_STATISTICS.
1173   	-- IGS_ST_CITIZENSHP_CD and the IGS_PE_STATISTICS.IGS_PE_PERM_RES_CD.
1174   	p_message_name := null;
1175   	-- validating the input parameters
1176   	IF p_person_id IS NULL THEN
1177   		RETURN TRUE;
1178   	END IF;
1179   	-- validating the input parameters
1180   	IF p_course_cd IS NOT NULL THEN
1181   		IF p_scho_start_dt IS NULL THEN
1182   			RETURN TRUE;
1183   		END IF;
1184   		-- retrieving the govt. value for the student_course_
1185   		-- hecs_option_v.IGS_FI_HECS_PAY_OPTN
1186   		OPEN c_ghpo;
1187   		FETCH c_ghpo INTO v_govt_hecs_payment_option;
1188   		-- exit successfully if a record isn't found
1189   		-- therefore, no validation is required
1190   		IF c_ghpo%NOTFOUND THEN
1191   			CLOSE c_ghpo;
1192   			RETURN TRUE;
1193   		END IF;
1194   		CLOSE c_ghpo;
1195   		-- set the below variable to the input parameter
1196   		v_outside_aus_res_ind := p_outside_aus_res_ind;
1197   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1198   		-- IGS_ST_CITIZENSHP_CD and the IGS_PE_STATISTICS.IGS_PE_PERM_RES_CD,
1199   		-- in which more than one may be found
1200   		FOR v_citz_record IN c_gcitiz LOOP
1204   			IF enrpl_chk_whether_to_validate (
1201   			-- execute the rountine which checks whether
1202   			-- further validation is required.
1203   			-- if it returns true, perform the validation
1205   							p_scho_start_dt,
1206   							p_scho_end_dt,
1207   							v_citz_record.start_dt,
1208   							v_citz_record.end_dt) THEN
1209   				-- execute the validation routine.
1210   				-- if it returns false, set the message number
1211   				-- and the return type
1212   				IF NOT enrpl_do_validations (
1213   							v_outside_aus_res_ind,
1214   							v_govt_hecs_payment_option,
1215   							v_citz_record.govt_citizenship_cd,
1216   							v_citz_record.govt_perm_resident_cd) THEN
1217   					v_exit := TRUE;
1218   					EXIT;
1219   				END IF;
1220   			END IF;
1221   		END LOOP;
1222   	ELSE	-- p_course_cd IS NULL
1223   		-- checking the input parameters
1224   		IF p_ps_start_dt IS NULL THEN
1225   			RETURN TRUE;
1226   		END IF;
1227   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1228   		-- IGS_ST_CITIZENSHP_CD
1229   		OPEN c_gccd;
1230   		FETCH c_gccd INTO v_govt_citizenship_cd;
1231   		-- exit successfully if a record isn't found
1232   		-- therefore, no validation is required
1233   		IF c_gccd%NOTFOUND THEN
1234   			CLOSE c_gccd;
1235   			RETURN TRUE;
1236   		END IF;
1237   		CLOSE c_gccd;
1238   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1239   		-- IGS_PE_PERM_RES_CD
1240   		OPEN c_gprcd;
1241   		FETCH c_gprcd INTO v_govt_perm_resident_cd;
1242   		CLOSE c_gprcd;
1243   		-- retrieving the visa indicators for the student_course_
1244   		-- hecs_option_v and the govt. value for the
1245   		-- IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN
1246   		-- in which more than one record may be found
1247   		FOR v_scho_record IN c_hpo LOOP
1248   			-- execute the rountine which checks whether
1249   			-- furhter validation is required.
1250   			-- if it returns true, perform the validation
1251   			IF enrpl_chk_whether_to_validate (
1252   							p_ps_start_dt,
1253   							p_ps_end_dt,
1254   							v_scho_record.start_dt,
1255   							v_scho_record.end_dt) THEN
1256   				-- execute the validation routine.
1257   				-- if it returns false, set the message number
1258   				-- and the return type
1259   				IF NOT enrpl_do_validations (
1260   							v_scho_record.outside_aus_res_ind,
1261   							v_scho_record.govt_hecs_payment_option,
1262   							v_govt_citizenship_cd,
1263   							v_govt_perm_resident_cd) THEN
1264   					v_exit := TRUE;
1265   					EXIT;
1266   				END IF;
1267   			END IF;
1268   		END LOOP;
1269   	END IF;
1270   	IF v_exit THEN
1271   		p_message_name := 'IGS_GE_INVALID_VALUE';
1272   		p_return_type := cst_error;
1273   		RETURN FALSE;
1274   	END IF;
1275   	RETURN TRUE;
1276   END;
1277   EXCEPTION
1278   	WHEN OTHERS THEN
1279 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1280 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_ho_cic_prc');
1281 		IGS_GE_MSG_STACK.ADD;
1282 			App_Exception.Raise_Exception;
1283   END enrp_val_ho_cic_prc;
1284   --
1285   -- Validate HECS visa indicators, citizenship cd and permanent resident.
1286   FUNCTION enrp_val_vis_cic_prc(
1287   p_person_id IN NUMBER ,
1288   p_course_cd IN VARCHAR2 ,
1289   p_scho_start_dt IN DATE ,
1290   p_scho_end_dt IN DATE ,
1291   p_outside_aus_res_ind IN VARCHAR2 DEFAULT 'N',
1292   p_nz_citizen_ind IN VARCHAR2 DEFAULT 'N',
1293   p_nz_citizen_less2yr_ind IN VARCHAR2 DEFAULT 'N',
1294   p_nz_citizen_not_res_ind IN VARCHAR2 DEFAULT 'N',
1295   p_ps_start_dt IN DATE ,
1296   p_ps_end_dt IN DATE ,
1300   p_return_type OUT NOCOPY VARCHAR2 )
1297   p_citizenship_cd IN VARCHAR2 ,
1298   p_perm_resident_cd IN VARCHAR2 ,
1299   p_message_name OUT NOCOPY VARCHAR2,
1301   RETURN BOOLEAN  AS
1302    BEGIN
1303   DECLARE
1304   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE
1305   					DEFAULT NULL;
1306   	v_govt_perm_resident_cd		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE
1307   					DEFAULT NULL;
1308   	v_return_false 			BOOLEAN DEFAULT FALSE;
1309   	CURSOR  c_prc IS
1310   		SELECT  prc.govt_perm_resident_cd
1311   		FROM	IGS_PE_PERM_RES_CD	prc
1312   		WHERE	prc.perm_resident_cd = p_perm_resident_cd;
1313   	CURSOR  c_ps IS
1314   		SELECT   ps.start_dt,
1315   			 ps.end_dt,
1316   			 cic.govt_citizenship_cd,
1317   			 prcd.govt_perm_resident_cd
1318   		FROM	 IGS_PE_STATISTICS 	ps,
1319   			 IGS_ST_CITIZENSHP_CD 	cic,
1320   			 IGS_PE_PERM_RES_CD 	prcd
1321   		WHERE	 ps.person_id 		= p_person_id AND
1322   			 ps.citizenship_cd 	= cic.citizenship_cd AND
1323   			 ps.perm_resident_cd 	= prcd.perm_resident_cd (+)
1324   		ORDER BY ps.start_dt,
1325   			 ps.end_dt;
1326   	CURSOR  c_cic IS
1327   		SELECT  cic.govt_citizenship_cd
1328   		FROM	IGS_ST_CITIZENSHP_CD	cic
1329   		WHERE	cic.citizenship_cd = p_citizenship_cd;
1330   	CURSOR c_schov IS
1331   		SELECT  schov.start_dt,
1332   			schov.end_dt,
1333   			schov.outside_aus_res_ind,
1334   			schov.nz_citizen_ind,
1335   			schov.nz_citizen_less2yr_ind,
1336   			schov.nz_citizen_not_res_ind
1337   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V 	schov
1338   		WHERE	schov.person_id = p_person_id
1339   		ORDER BY
1340   			schov.start_dt,
1341   			schov.end_dt;
1342   	FUNCTION enrpl_chk_whether_to_validate (
1343   		p_p_start_dt	  DATE,
1344   		p_p_end_dt	  DATE,
1345   		p_db_start_dt	  DATE,
1346   		p_db_end_dt	  DATE)
1347   	RETURN BOOLEAN  AS
1348   	BEGIN
1349   	DECLARE
1350 
1351   	BEGIN
1352   		-- determining if a record should be validated
1353   		-- which will occur when the DB effective date(s)
1354   		-- overlap or match the parameter date(s)
1355   		IF (p_p_end_dt IS NULL OR
1356   				p_p_end_dt >= p_db_start_dt) AND
1357   				(p_db_end_dt IS NULL OR
1358   				p_p_start_dt <= p_db_end_dt) THEN
1359   			RETURN TRUE;
1360   		END IF;
1361   		-- none of the conditions were true
1362   		RETURN FALSE;
1363   	EXCEPTION
1364   		WHEN OTHERS THEN
1365 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1366 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_whether_to_validate');
1367 			IGS_GE_MSG_STACK.ADD;
1368 			App_Exception.Raise_Exception;
1369   	END;
1370   	END enrpl_chk_whether_to_validate;
1371   	FUNCTION enrpl_do_validations (
1372   		p_outside_aus_res_ind		IGS_EN_STDNT_PS_HECS_OPTION_V.outside_aus_res_ind%TYPE,
1373   		p_nz_citizen_ind		IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_ind%TYPE,
1374   		p_nz_citizen_less2yr_ind
1375   				IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_less2yr_ind%TYPE,
1376   		p_nz_citizen_not_res_ind
1377   				IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_not_res_ind%TYPE,
1378   		p_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
1379   		p_govt_perm_resident_cd		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE)
1380   	RETURN BOOLEAN  AS
1381   	BEGIN
1382   	DECLARE
1383   		v_other_detail			VARCHAR2(255);
1384   	BEGIN
1385   		-- checking that if the govt. value for the IGS_ST_CITIZENSHP_CD
1386   		-- is 1, 4, or 5, or it is 3 and the govt. value for the
1387   		-- IGS_PE_PERM_RES_CD is 1 or 3, then the visa indicators
1388   		-- must not be set
1389   		-- checking the IGS_PE_GOVCITIZEN_CD and IGS_PE_GOV_PER_RESCD
1390   		IF p_govt_citizenship_cd IN (
1391   					cst_citizen_aust,
1392   		   			cst_citizen_temp_dip,
1393   		   			cst_citizen_other) OR
1394   				(p_govt_citizenship_cd = cst_citizen_perm AND
1395   				NVL(p_govt_perm_resident_cd, 9) IN (
1396   		  					cst_perm_in_out_aust_crs,
1397   		  					cst_perm)) THEN
1398   			  -- checking the visa indicators
1399   		   	  IF p_outside_aus_res_ind = 'Y' OR
1400   			  		p_nz_citizen_ind = 'Y' OR
1401   			  		p_nz_citizen_less2yr_ind = 'Y' OR
1402   			  		p_nz_citizen_not_res_ind = 'Y' THEN
1403   				RETURN FALSE;
1404   			  END IF;
1405   		END IF;
1406   		-- return when one of the above conditions
1407   		-- didn't hold
1408   		RETURN TRUE;
1409   	EXCEPTION
1410   		WHEN OTHERS THEN
1411 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1412 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_do_validations');
1413 			IGS_GE_MSG_STACK.ADD;
1414 			App_Exception.Raise_Exception;
1415   	END;
1416   	END enrpl_do_validations;
1417   BEGIN
1418   	-- This is the main module which validates the student_course_hecs_
1419   	-- option_v.IGS_FI_HECS_PAY_OPTN against the IGS_PE_STATISTICS.
1420   	-- IGS_ST_CITIZENSHP_CD.
1421   	p_message_name := null;
1422   	-- validating the input parameters
1423   	IF p_person_id IS NULL THEN
1424   		RETURN TRUE;
1425   	END IF;
1426   	-- validating the input parameters
1427   	IF p_course_cd IS NOT NULL THEN
1428   		IF p_scho_start_dt IS NULL THEN
1429   			RETURN TRUE;
1430   		END IF;
1431   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1432   		-- IGS_ST_CITIZENSHP_CD, and the government value for the
1436   			-- execute the rountine which checks whether
1433   		-- IGS_PE_STATISTICS.IGS_PE_PERM_RES_CD, in which more
1434   		-- than one may be found
1435   		FOR v_ps_rec IN c_ps LOOP
1437   			-- further validation is required.
1438   			-- if it returns true, perform the validation
1439   			IF enrpl_chk_whether_to_validate (
1440   							p_scho_start_dt,
1441   							p_scho_end_dt,
1442   							v_ps_rec.start_dt,
1443   							v_ps_rec.end_dt) THEN
1444   				-- execute the validation routine.
1445   				-- if it returns false, set the message number
1446   				-- and the return type
1447   				IF NOT enrpl_do_validations (
1448   							p_outside_aus_res_ind,
1449   							p_nz_citizen_ind,
1450   							p_nz_citizen_less2yr_ind,
1451   							p_nz_citizen_not_res_ind,
1452   							v_ps_rec.govt_citizenship_cd,
1453   							v_ps_rec.govt_perm_resident_cd) THEN
1454   					p_message_name := 'IGS_EN_VISA_IND_BE_SET';
1455   					p_return_type := cst_error;
1456   					v_return_false := TRUE;
1457   					EXIT;
1458   				END IF;
1459   			END IF;
1460   		END LOOP;
1461   	ELSE	-- p_course_cd IS NULL
1462   		IF p_ps_start_dt IS NULL THEN
1463   			RETURN TRUE;
1464   		END IF;
1465   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1466   		-- IGS_ST_CITIZENSHP_CD
1467   		OPEN  c_cic;
1468   		FETCH c_cic INTO v_govt_citizenship_cd;
1469   		-- exit successfully if a record isn't found
1470   		-- therefore, no validation is required
1471   		IF c_cic%NOTFOUND THEN
1472   			CLOSE c_cic;
1473   			RETURN TRUE;
1474   		END IF;
1475   		CLOSE c_cic;
1476   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1477   		-- IGS_PE_PERM_RES_CD
1478   		OPEN  c_prc;
1479   		FETCH c_prc INTO v_govt_perm_resident_cd;
1480   		CLOSE c_prc;
1481   		-- retrieving the visa indicators for the student_course_
1482   		-- hecs_option_v and the govt. value for the
1483   		-- IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN
1484   		-- in which more than one record may be found
1485   		FOR v_schov_rec IN c_schov LOOP
1486   			-- execute the rountine which checks whether
1487   			-- further validation is required.
1488   			-- if it returns true, perform the validation
1489   			IF enrpl_chk_whether_to_validate (
1490   							p_ps_start_dt,
1491   							p_ps_end_dt,
1492   							v_schov_rec.start_dt,
1493   							v_schov_rec.end_dt) THEN
1494   				-- execute the validation routine.
1495   				-- if it returns false, set the message number
1496   				-- and the return type
1497   				IF NOT enrpl_do_validations (
1498   							v_schov_rec.outside_aus_res_ind,
1499   							v_schov_rec.nz_citizen_ind,
1500   							v_schov_rec.nz_citizen_less2yr_ind,
1501   							v_schov_rec.nz_citizen_not_res_ind,
1502   							v_govt_citizenship_cd,
1503   							v_govt_perm_resident_cd) THEN
1504   					p_message_name := 'IGS_EN_VISA_IND_BE_SET';
1505   					p_return_type := cst_error;
1506   					v_return_false := TRUE;
1507   					EXIT;
1508   				END IF;
1509   			END IF;
1510   		END LOOP;
1511   	END IF;
1512   	IF v_return_false THEN
1513   		RETURN FALSE;
1514   	END IF;
1515   	RETURN TRUE;
1516   EXCEPTION
1517   	WHEN OTHERS THEN
1518   		IF c_prc%ISOPEN THEN
1519   			CLOSE c_prc;
1520   		END IF;
1521   		IF c_ps%ISOPEN THEN
1522   			CLOSE c_ps;
1523   		END IF;
1524   		IF c_cic%ISOPEN THEN
1525   			CLOSE c_cic;
1526   		END IF;
1527   		IF c_schov%ISOPEN THEN
1528   			CLOSE c_schov;
1529   		END IF;
1530   		RAISE;
1531   END;
1532   EXCEPTION
1533   	WHEN OTHERS THEN
1534 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1535 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_vis_cic_prc');
1536 		IGS_GE_MSG_STACK.ADD;
1537 			App_Exception.Raise_Exception;
1538   END enrp_val_vis_cic_prc;
1539   --
1540   -- Validate the HECS Payment Option against the course type.
1541   FUNCTION enrp_val_hpo_crs_typ(
1542   p_person_id IN NUMBER ,
1543   p_course_cd IN VARCHAR2 ,
1544   p_hecs_payment_option IN VARCHAR2 ,
1545   p_message_name OUT NOCOPY VARCHAR2,
1546   p_return_type OUT NOCOPY VARCHAR2 )
1547   RETURN BOOLEAN  AS
1548    BEGIN
1549   DECLARE
1550   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
1551   	v_govt_course_type		IGS_PS_TYPE.govt_course_type%TYPE;
1552   	CURSOR c_ghpo IS
1553   		SELECT	hpo.govt_hecs_payment_option
1554   		FROM	IGS_FI_HECS_PAY_OPTN	hpo
1555   		WHERE	hpo.hecs_payment_option = p_hecs_payment_option;
1556   	CURSOR c_gct IS
1557   		SELECT	cty.govt_course_type
1558   		FROM	IGS_EN_STDNT_PS_ATT	sca,
1559   			IGS_PS_VER		crv,
1560   			IGS_PS_TYPE		cty
1561   		WHERE	sca.person_id = p_person_id AND
1562   			sca.course_cd = p_course_cd AND
1563   			crv.course_cd = sca.course_cd AND
1564   			crv.version_number = sca.version_number AND
1565   			crv.course_type = cty.course_type;
1566   BEGIN
1567   	-- This module validates the student_course_hecs_
1568   	-- option_v.IGS_FI_HECS_PAY_OPTN against the IGS_PS_VER.
1569   	-- IGS_PS_TYPE.
1570   	-- Validations are :
1571   	-- 2.If the government vaue for the
1572   	-- IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN is 26,
1573   	-- then the government value for the IGS_PS_VER.IGS_PS_TYPE for the
1577   	-- the IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN then must be 22,
1574   	-- IGS_EN_STDNT_PS_HECS_OPTION_V.course_cd must be 50 (DEETYA validation 1294).
1575   	-- 3.If the government value for the IGS_PS_VER.IGS_PS_TYPE for the
1576   	-- IGS_EN_STDNT_PS_HECS_OPTION_V.course_cd is 50, then the government value for
1578   	-- 23, 24, 26, 27, 30, 33, 70or 99 (DEETYA validation 1655).
1579   	-- set the default message number
1580   	p_message_name := null;
1581   	-- retrieving the govt. value for the student_course_
1582   	-- hecs_option_v.IGS_FI_HECS_PAY_OPTN
1583   	OPEN c_ghpo;
1584   	FETCH c_ghpo INTO v_govt_hecs_payment_option;
1585   	-- exit successfully if a record isn't found
1586   	-- therefore, no validation is required
1587   	IF c_ghpo%NOTFOUND THEN
1588   		CLOSE c_ghpo;
1589   		RETURN TRUE;
1590   	END IF;
1591   	CLOSE c_ghpo;
1592   	-- retrieving the govt. value for the IGS_PS_VER.
1593   	-- IGS_PS_GOVT_SPL_TYPE
1594   	OPEN c_gct;
1595   	FETCH c_gct INTO v_govt_course_type;
1596   	-- exit successfully if a record isn't found
1597   	-- therefore, no validation is required
1598   	IF c_gct%NOTFOUND THEN
1599   		CLOSE c_gct;
1600   		RETURN TRUE;
1601   	END IF;
1602   	CLOSE c_gct;
1603  -- validating non-IGS_PS_AWD course tpye
1604   	-- DEETYA validation 1294
1605   	IF v_govt_hecs_payment_option = cst_hecs_non_award_crs AND
1606   			v_govt_course_type <> cst_crs_non_award THEN
1607   		p_message_name := 'IGS_EN_CHK_GOV_VAL_26';
1608   		p_return_type := cst_error;
1609   		RETURN FALSE;
1610   	END IF;
1611   	-- DEETYA validation 1655
1612   	IF v_govt_course_type = cst_crs_non_award AND
1613   			v_govt_hecs_payment_option NOT IN (
1614   						cst_hecs_fee_paying_os,
1615   						cst_hecs_os_student_charge,
1616   						cst_hecs_fee_paying_os_spnsr,
1617   						cst_hecs_non_award_crs,
1618   						cst_hecs_employer_funded_crs,
1619   						cst_hecs_os_exchange_student,
1620   						cst_hecs_work_experience,
1621   						cst_hecs_non_os_spec_crs,
1622   						cst_hecs_os_spec_crs,
1623   						cst_hecs_avondale_special)THEN
1624   		p_message_name := 'IGS_EN_CHK_GOV_VAL_50';
1625   		p_return_type := cst_error;
1626   		RETURN FALSE;
1627   	END IF;
1628   	-- DETYA validation 1729
1629   	IF v_govt_course_type IN (
1630   				cst_crs_cross_inst_ug,
1631   				cst_crs_cross_inst_pg) AND
1632   			v_govt_hecs_payment_option IN (
1633   					cst_hecs_fee_paying_os_spnsr,
1634   					cst_hecs_enabling_crs,
1635   					cst_hecs_non_award_crs,
1636   					cst_hecs_employer_funded_crs,
1637   					cst_hecs_non_os_comm_ug_dis,
1638   					cst_hecs_comm_industry,
1639   					cst_hecs_pg_award,
1640   					cst_hecs_non_os_spec_crs,
1641   					cst_hecs_os_spec_crs,
1642   					cst_hecs_avondale_special) THEN
1643   		p_message_name := 'IGS_EN_GOVT_PRGTYPE_SPA';
1644   		p_return_type := cst_error;
1645   		RETURN FALSE;
1646   	END IF;
1647   	IF v_govt_hecs_payment_option = cst_hecs_fee_paying_pg AND
1648   			v_govt_course_type NOT IN (
1649   					cst_crs_higher_doctorate,
1650   					cst_crs_doctorate_research,
1651   					cst_crs_masters_research,
1652   					cst_crs_masters_crs_work,
1653   					cst_crs_postgrad,
1654   					cst_crs_grad_dip_pg_dip_new,
1655   					cst_crs_grad_dip_pg_dip_extend,
1656   					cst_crs_graduate,
1657   					cst_crs_doctorate_crs_work,
1658   					cst_crs_cross_inst_pg) THEN
1659   		p_message_name := 'IGS_EN_GOVT_HECS_PAYMENT';
1660   		p_return_type := cst_error;
1661   		RETURN FALSE;
1662   	END IF;
1663   	IF v_govt_hecs_payment_option = cst_hecs_non_os_fee_paying_ug AND
1664   			v_govt_course_type NOT IN (
1665   					cst_crs_bachelor_graduate,
1666   					cst_crs_bachelor_honours,
1667   					cst_crs_bachelor_pass,
1668   					cst_crs_assoc_degree,
1669   					cst_crs_adv_diploma,
1670   					cst_crs_diploma,
1671   					cst_other_award,
1672   					cst_crs_cross_inst_ug) THEN
1673   		p_message_name := 'IGS_EN_GOVTVAL_HECS_PYMNT';
1674   		p_return_type := cst_error;
1675   		RETURN FALSE;
1676   	END IF;
1677   	-- set the default return type
1678   	RETURN TRUE;
1679   EXCEPTION
1680   	WHEN OTHERS THEN
1681   		IF c_ghpo%ISOPEN THEN
1682   			CLOSE c_ghpo;
1683   		END IF;
1684   		IF c_gct%ISOPEN THEN
1685   			CLOSE c_gct;
1686   		END IF;
1687   		RAISE;
1688   END;
1689   EXCEPTION
1690   	WHEN OTHERS THEN
1691 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1692 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_crs_typ');
1693 		IGS_GE_MSG_STACK.ADD;
1694 			App_Exception.Raise_Exception;
1695   END enrp_val_hpo_crs_typ;
1696   --
1697   -- Validate the HECS Payment Option against the special course type.
1698   FUNCTION enrp_val_hpo_spc_crs(
1699   p_person_id IN NUMBER ,
1700   p_course_cd IN VARCHAR2 ,
1701   p_hecs_payment_option IN VARCHAR2 ,
1702   p_message_name OUT NOCOPY VARCHAR2,
1703   p_return_type OUT NOCOPY VARCHAR2 )
1704   RETURN BOOLEAN  AS
1705    BEGIN
1706   DECLARE
1707   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
1708   	v_govt_special_course_type	IGS_PS_VER.govt_special_course_type%TYPE;
1709   	v_institution_2239		BOOLEAN DEFAULT FALSE;
1710   	v_dummy				VARCHAR2(1);
1711   	CURSOR c_hpo IS
1715   	CURSOR c_crv IS
1712   		SELECT  hpo.govt_hecs_payment_option
1713   		FROM	IGS_FI_HECS_PAY_OPTN	hpo
1714   		WHERE	hpo.hecs_payment_option = p_hecs_payment_option;
1716   		SELECT  crv.govt_special_course_type
1717   		FROM	IGS_EN_STDNT_PS_ATT	sca,
1718   			IGS_PS_VER		crv
1719   		WHERE	sca.person_id 		= p_person_id AND
1720   			sca.course_cd 		= p_course_cd AND
1721   			crv.course_cd 		= sca.course_cd AND
1722   			crv.version_number 	= sca.version_number;
1723   	CURSOR c_ins IS
1724   		SELECT 	'x'
1725   		FROM 	IGS_OR_INSTITUTION		ins,
1726   			IGS_OR_INST_STAT	ist
1727   		WHERE  	ins.local_institution_ind 	= 'Y' AND
1728   			ins.govt_institution_cd 	= 2239 AND
1729   			ist.institution_status 		= ins.institution_status AND
1730   			ist.s_institution_status 	= 'ACTIVE';
1731   BEGIN
1732   	-- This module validates the student_course_hecs_
1733   	-- option_v.hecs_payment_option against the IGS_PS_VER.
1734   	-- IGS_PS_GOVT_SPL_TYPE.
1735   	-- Validations are :
1736   	-- 1.  If the government value for the
1737   	-- IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option
1738   	-- is 70, then the IGS_PS_VER.govt_special_course_type for the
1739   	-- IGS_EN_STDNT_PS_HECS_OPTION_V.course_cd must be 15, and vice-versa, and the
1740   	-- IGS_OR_INSTITUTION code must be 2239 (Australian Maritime College)
1741   	-- (DEETYA validation 1670, 1671).
1742   	-- set the default message number
1743   	p_message_name := null;
1744   	-- retrieving the govt. value for the student_course_
1745   	-- hecs_option_v.hecs_payment_option
1746   	OPEN  c_hpo;
1747   	FETCH c_hpo INTO v_govt_hecs_payment_option;
1748   	-- exit successfully if a record isn't found
1749   	-- therefore, no validation is required
1750   	IF c_hpo%NOTFOUND THEN
1751   		CLOSE c_hpo;
1752   		RETURN TRUE;
1753   	END IF;
1754   	CLOSE c_hpo;
1755   	-- retrieving the govt. value for the IGS_PS_VER.
1756   	-- IGS_PS_GOVT_SPL_TYPE
1757   	OPEN  c_crv;
1758   	FETCH c_crv INTO v_govt_special_course_type;
1759   	-- exit successfully if a record isn't found
1760   	-- therefore, no validation is required
1761   	IF c_crv%NOTFOUND THEN
1762   		CLOSE c_crv;
1763   		RETURN TRUE;
1764   	END IF;
1765   	CLOSE c_crv;
1766   	-- retrieving the government INSTITUTION code
1767   	OPEN c_ins;
1768   	FETCH c_ins INTO v_dummy;
1769   	IF c_ins%FOUND THEN
1770   		v_institution_2239 := TRUE;
1771   	END IF;
1772   	CLOSE c_ins;
1773   	-- checking that if the student_course_hecs
1774   	-- option_v.hecs_payment_option is set to 70,
1775   	-- then the course_version_govt_special_course
1776   	-- type for the IGS_EN_STDNT_PS_HECS_OPTION_V.course_cd
1777   	-- must be 15, and vice-versa.
1778   	IF (v_govt_hecs_payment_option IN (
1779   				cst_hecs_non_os_spec_crs,
1780   				cst_hecs_os_spec_crs) AND
1781   			(v_govt_special_course_type <> cst_spcl_crs_amc OR
1782   			NOT v_institution_2239 )) OR
1783   			(v_govt_special_course_type = cst_spcl_crs_amc AND
1784   			(v_govt_hecs_payment_option NOT IN (
1785   				 		cst_hecs_non_os_spec_crs,
1786   						cst_hecs_os_spec_crs) OR
1787   			NOT v_institution_2239)) THEN
1788           	p_message_name := 'IGS_EN_CHK_GOV_VAL_71_72';
1789   		p_return_type := cst_error;
1790   		RETURN FALSE;
1791   	END IF;
1792   	-- set the default return type
1793   	RETURN TRUE;
1794   END;
1795   EXCEPTION
1796   	WHEN OTHERS THEN
1797 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1798 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_spc_crs');
1799 		IGS_GE_MSG_STACK.ADD;
1800 		App_Exception.Raise_Exception;
1801   END enrp_val_hpo_spc_crs;
1802   --
1803   -- Validate HECS payment option, visa indicators and citizenship code.
1804   FUNCTION enrp_val_hpo_vis_cic(
1805   p_person_id IN NUMBER ,
1806   p_course_cd IN VARCHAR2 ,
1807   p_scho_start_dt IN DATE ,
1808   p_scho_end_dt IN DATE ,
1809   p_hecs_payment_option IN VARCHAR2 ,
1810   p_outside_aus_res_ind IN VARCHAR2 ,
1811   p_nz_citizen_ind IN VARCHAR2 DEFAULT 'N',
1812   p_nz_citizen_less2yr_ind IN VARCHAR2 DEFAULT 'N',
1813   p_nz_citizen_not_res_ind IN VARCHAR2 DEFAULT 'N',
1814   p_ps_start_dt IN DATE ,
1815   p_ps_end_dt IN DATE ,
1816   p_yr_arrival IN VARCHAR2 ,
1817   p_citizenship_cd IN VARCHAR2 ,
1818   p_message_name OUT NOCOPY VARCHAR2,
1819   p_return_type OUT NOCOPY VARCHAR2 )
1820   RETURN BOOLEAN  AS
1821    BEGIN
1822   DECLARE
1823   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
1824   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
1825   	v_return_false			BOOLEAN DEFAULT FALSE;
1826   	CURSOR  c_hpo IS
1827   		SELECT  hpo.govt_hecs_payment_option
1828   		FROM	IGS_FI_HECS_PAY_OPTN		hpo
1829   		WHERE	hpo.hecs_payment_option 	= p_hecs_payment_option AND
1830   			hpo.govt_hecs_payment_option	IS NOT NULL;
1831   	CURSOR  c_ps_cic IS
1832   		SELECT   ps.start_dt,
1833   			 ps.end_dt,
1834   			 cic.govt_citizenship_cd,
1835   			 ps.yr_arrival
1836   		FROM	 IGS_PE_STATISTICS 	ps,
1837   			 IGS_ST_CITIZENSHP_CD 	cic
1838   		WHERE	 ps.person_id 		= p_person_id AND
1839   			 ps.citizenship_cd 	= cic.citizenship_cd(+)
1840   		ORDER BY ps.start_dt,
1841   			 ps.end_dt;
1842   	CURSOR  c_gcc IS
1843   		SELECT  gcc.govt_citizenship_cd
1844   		FROM	IGS_ST_CITIZENSHP_CD	gcc
1848   			scho.end_dt,
1845   		WHERE	gcc.citizenship_cd 	= p_citizenship_cd;
1846   	CURSOR c_scho_hpo IS
1847   		SELECT  scho.start_dt,
1849   			scho.outside_aus_res_ind,
1850   			scho.nz_citizen_ind,
1851   			scho.nz_citizen_less2yr_ind,
1852   			scho.nz_citizen_not_res_ind,
1853   		 	hpo.govt_hecs_payment_option
1854   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V 	scho,
1855   			IGS_FI_HECS_PAY_OPTN 		hpo
1856   		WHERE	scho.person_id 			= p_person_id AND
1857   			scho.hecs_payment_option 	= hpo.hecs_payment_option  AND
1858   			hpo.govt_hecs_payment_option 	IS NOT NULL
1859   		ORDER BY scho.start_dt,
1860   			 scho.end_dt;
1861   	FUNCTION enrpl_chk_whether_to_validate (
1862   		p_p_start_dt	  DATE,
1863   		p_p_end_dt	  DATE,
1864   		p_db_start_dt	  DATE,
1865   		p_db_end_dt	  DATE)
1866   	RETURN BOOLEAN
1867   	 AS
1868    	BEGIN
1869   	DECLARE
1870   	BEGIN
1871   		-- this module checks whether further validation
1872   		-- should be performed, depending on the values
1873   		-- of certain system and parameter dates
1874   		-- determining if a record should be validated
1875   		-- which will occur when the DB effective date(s)
1876   		-- overlap or match the parameter date(s)
1877   		IF (p_p_end_dt IS NULL OR
1878   				p_p_end_dt >= p_db_start_dt) AND
1879   				(p_db_end_dt IS NULL OR
1880   				p_p_start_dt <= p_db_end_dt) THEN
1881   			RETURN TRUE;
1882   		END IF;
1883   		-- none of the conditions were true
1884   		RETURN FALSE;
1885   	END;
1886   	EXCEPTION
1887   		WHEN OTHERS THEN
1888 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1889 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_whether_to_validate');
1890 			IGS_GE_MSG_STACK.ADD;
1891 			App_Exception.Raise_Exception;
1892   	END enrpl_chk_whether_to_validate;
1893   	FUNCTION enrpl_do_validations (
1894   		p_outside_aus_res_ind	IGS_EN_STDNT_PS_HECS_OPTION_V.outside_aus_res_ind%TYPE,
1895   		p_nz_citizen_ind	IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_ind%TYPE,
1896   		p_nz_citizen_less2yr_ind
1897   					IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_less2yr_ind%TYPE,
1898   		p_nz_citizen_not_res_ind
1899   					IGS_EN_STDNT_PS_HECS_OPTION_V.nz_citizen_not_res_ind%TYPE,
1900   		p_govt_hecs_payment_option
1901   					IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE,
1902   		p_govt_citizenship_cd	IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
1903   		p_yr_arrival		IGS_PE_STATISTICS.yr_arrival%TYPE)
1904   	RETURN BOOLEAN
1905   	 AS
1906    	BEGIN
1907   	DECLARE
1908   		v_test_year			NUMBER(6);
1909   	BEGIN
1910   		-- this module performs the validation that is
1911   		-- required, in that if the IGS_FI_GOV_HEC_PA_OP = 12
1912   		-- and if a New Zealand indicator is set, then the
1913   		-- government value must be '2'
1914   		-- checking whether the IGS_FI_GOV_HEC_PA_OP = 12
1915   		IF p_govt_hecs_payment_option = cst_hecs_upfront AND
1916   			-- checking if any New Zealand indicators are set
1917   		   		(p_nz_citizen_ind = 'Y' OR
1918   		          	p_nz_citizen_less2yr_ind = 'Y' OR
1919   		           	p_nz_citizen_not_res_ind = 'Y') AND
1920   				-- checking if the IGS_PE_GOVCITIZEN_CD = '2'
1921   			 	p_govt_citizenship_cd <> cst_citizen_nz THEN
1922   			p_message_name := 'IGS_EN_CTZ/RES_STAT_VAL_BE_2';
1923   			p_return_type := cst_error;
1924   			RETURN FALSE;
1925   		END IF;
1926   		IF  p_govt_hecs_payment_option = cst_hecs_upfront AND-- cst_hecs_upfront = 12
1927       				p_outside_aus_res_ind = 'N' AND
1928       				p_nz_citizen_ind = 'N' AND
1929       				p_nz_citizen_less2yr_ind = 'N' AND
1930       				p_nz_citizen_not_res_ind = 'N' THEN
1931   			IF p_govt_citizenship_cd IS NULL THEN
1932   				p_message_name := 'IGS_EN_STUD_PAY_UPFRONT_HECS';
1933   				p_return_type := cst_warn;
1934   				RETURN FALSE;
1935   			ELSIF p_govt_citizenship_cd <> 3 THEN
1936   				p_message_name := 'IGS_EN_STUD_PAY_UPFRONT_HECS';
1937   				p_return_type := cst_error;
1938   				RETURN FALSE;
1939   			ELSE
1940   				IF  p_yr_arrival IS NOT NULL AND
1941   						p_yr_arrival NOT IN (
1942   								cst_off_shore,		-- '00'
1943   								cst_no_arrival,		-- '01'
1944   								cst_arrival_prior_1903, -- '02'
1945   								cst_arrival_no_info,	-- 'A8'
1946   								cst_no_info_aust) THEN	-- 'A9'
1947   					IF TO_NUMBER(substr(IGS_GE_DATE.IGSCHAR(SYSDATE),1,4)) -
1948   							TO_NUMBER(p_yr_arrival) < 3 THEN
1949   						p_message_name := 'IGS_EN_STUD_GOVT_VAL3';
1950   						p_return_type := cst_warn;
1951   						RETURN FALSE;
1952   					END IF;
1953   					IF TO_NUMBER(p_yr_arrival) < 1996 THEN
1954   						p_message_name := 'IGS_EN_STUD_GOVT_VALUE';
1955   						p_return_type := cst_warn;
1956   						RETURN FALSE;
1957   					END IF;
1958   				END IF;
1959   			END IF;
1960   		END IF;
1961   		RETURN TRUE;
1962   	END;
1963   	EXCEPTION
1964   		WHEN OTHERS THEN
1965 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
1966 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_do_validations');
1967 			IGS_GE_MSG_STACK.ADD;
1968 			App_Exception.Raise_Exception;
1969   	END enrpl_do_validations;
1970   BEGIN
1971   	-- This is the main module which validates the student_course_hecs_
1972   	-- option_v.IGS_FI_HECS_PAY_OPTN against the IGS_PE_STATISTICS.
1973   	-- IGS_ST_CITIZENSHP_CD.
1974   	p_message_name := null;
1978   	END IF;
1975   	-- validating the input parameters
1976   	IF p_person_id IS NULL THEN
1977   		RETURN TRUE;
1979   	-- validating the input parameters
1980   	IF p_course_cd IS NOT NULL THEN
1981   		IF p_scho_start_dt IS NULL THEN
1982   			RETURN TRUE;
1983   		END IF;
1984   		-- retrieving the govt. value for the student_course_
1985   		-- hecs_option_v.IGS_FI_HECS_PAY_OPTN
1986   		OPEN  c_hpo;
1987   		FETCH c_hpo INTO v_govt_hecs_payment_option;
1988   		-- exit successfully if a record isn't found
1989   		-- therefore, no validation is required
1990   		IF c_hpo%NOTFOUND THEN
1991   			CLOSE c_hpo;
1992   			RETURN TRUE;
1993   		END IF;
1994   		CLOSE c_hpo;
1995   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
1996   		-- IGS_ST_CITIZENSHP_CD, in which more than one may be found
1997   		FOR v_ps_cic_rec IN c_ps_cic LOOP
1998   			-- execute the rountine which checks whether
1999   			-- further validation is required
2000   			-- if it returns true, perform the validation
2001   			IF enrpl_chk_whether_to_validate (
2002   						p_scho_start_dt,
2003   						p_scho_end_dt,
2004   						v_ps_cic_rec.start_dt,
2005   						v_ps_cic_rec.end_dt) THEN
2006   				-- execute the validation routine
2007   				-- if it returns false, set the message number
2008   				-- and the return type
2009   				IF NOT enrpl_do_validations (
2010   							p_outside_aus_res_ind,
2011   							p_nz_citizen_ind,
2012   							p_nz_citizen_less2yr_ind,
2013   							p_nz_citizen_not_res_ind,
2014   							v_govt_hecs_payment_option,
2015   							v_ps_cic_rec.govt_citizenship_cd,
2016   							v_ps_cic_rec.yr_arrival) THEN
2017   					v_return_false := TRUE;
2018   					EXIT;
2019   				END IF;
2020   			END IF;
2021   		END LOOP;
2022   	ELSE	-- p_course_cd IS NULL
2023   		-- checking the input parameters
2024   		IF p_ps_start_dt IS NULL THEN
2025   			RETURN TRUE;
2026   		END IF;
2027   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
2028   		-- IGS_ST_CITIZENSHP_CD
2029   		IF p_citizenship_cd IS NOT NULL THEN
2030   			OPEN  c_gcc;
2031   			FETCH c_gcc INTO v_govt_citizenship_cd;
2032   			-- exit successfully if a record isn't found
2033   			-- therefore, no validation is required
2034   			IF c_gcc%NOTFOUND THEN
2035   				CLOSE c_gcc;
2036   				RETURN TRUE;
2037   			END IF;
2038   			CLOSE c_gcc;
2039   		ELSE
2040   			v_govt_citizenship_cd := NULL;
2041   		END IF;
2042   		-- retrieving the visa indicators for the student_course_
2043   		-- hecs_option_v and the govt. value for the
2044   		-- IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN
2045   		-- in which more than one record may be found
2046   		FOR v_scho_rec IN c_scho_hpo LOOP
2047   			-- execute the rountine which checks whether
2048   			-- furhter validation is required
2049   			-- if it returns true, perform the validation
2050   			IF enrpl_chk_whether_to_validate (
2051   							p_ps_start_dt,
2052   							p_ps_end_dt,
2053   							v_scho_rec.start_dt,
2054   							v_scho_rec.end_dt) THEN
2055   				-- execute the validation routine
2056   				-- if it returns false, set the message number
2057   				-- and the return type
2058   				IF NOT enrpl_do_validations (
2059   							v_scho_rec.outside_aus_res_ind,
2060   							v_scho_rec.nz_citizen_ind,
2061   							v_scho_rec.nz_citizen_less2yr_ind,
2062   							v_scho_rec.nz_citizen_not_res_ind,
2063   							v_scho_rec.govt_hecs_payment_option,
2064   							v_govt_citizenship_cd,
2065   							p_yr_arrival)  THEN
2066   					v_return_false := TRUE;
2067   					EXIT;
2068   				END IF;
2069   			END IF;
2070   		END LOOP;
2071   	END IF;
2072   	IF v_return_false THEN
2073   		RETURN FALSE;
2074   	END IF;
2075   	RETURN TRUE;
2076   EXCEPTION
2077   	WHEN OTHERS THEN
2078   		IF c_hpo%ISOPEN THEN
2079   			CLOSE c_hpo;
2080   		END IF;
2081   		IF c_ps_cic%ISOPEN THEN
2082   			CLOSE c_ps_cic;
2083   		END IF;
2084   		IF c_gcc%ISOPEN THEN
2085   			CLOSE c_gcc;
2086   		END IF;
2087   		IF c_scho_hpo%ISOPEN THEN
2088   			CLOSE c_scho_hpo;
2089   		END IF;
2090   		RAISE;
2091   END;
2092   EXCEPTION
2093   	WHEN OTHERS THEN
2094 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2095 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_vis_cic');
2096 		IGS_GE_MSG_STACK.ADD;
2097 			App_Exception.Raise_Exception;
2098   END enrp_val_hpo_vis_cic;
2099   --
2100   -- Validate HECS payment option, citizenship code and permanent resident.
2101   FUNCTION enrp_val_hpo_cic_prc(
2102   p_person_id IN NUMBER ,
2103   p_course_cd IN VARCHAR2 ,
2104   p_scho_start_dt IN DATE ,
2105   p_scho_end_dt IN DATE ,
2106   p_hecs_payment_option IN VARCHAR2 ,
2107   p_ps_start_dt IN DATE ,
2108   p_ps_end_dt IN DATE ,
2109   p_citizenship_cd IN VARCHAR2 ,
2110   p_perm_resident_cd IN VARCHAR2 ,
2111   p_message_name OUT NOCOPY VARCHAR2,
2112   p_return_type OUT NOCOPY VARCHAR2 )
2113   RETURN BOOLEAN  AS
2114    BEGIN
2115   DECLARE
2116   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
2117   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
2118   	v_govt_perm_resident_cd
2122   	v_scho_rec_found		BOOLEAN DEFAULT FALSE;
2119   		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE DEFAULT NULL;
2120   	v_rec_found			BOOLEAN DEFAULT FALSE;
2121   	v_no_validation_req 		BOOLEAN DEFAULT FALSE;
2123   	v_false_val 			BOOLEAN DEFAULT FALSE;
2124   	CURSOR	c_ghpo IS
2125   		SELECT govt_hecs_payment_option
2126   		FROM	IGS_FI_HECS_PAY_OPTN
2127   		WHERE	hecs_payment_option = p_hecs_payment_option AND
2128   			govt_hecs_payment_option IS NOT NULL;
2129   	CURSOR	c_gcitiz_rec IS
2130   		SELECT PS.start_dt,
2131   			 PS.end_dt,
2132   			 CIT.govt_citizenship_cd,
2133   			 PRCD.govt_perm_resident_cd
2134   		FROM	 IGS_PE_STATISTICS PS,
2135   			 IGS_ST_CITIZENSHP_CD CIT,
2136   			 IGS_PE_PERM_RES_CD PRCD
2137   		WHERE	 PS.person_id = p_person_id AND
2138   			 PS.citizenship_cd = CIT.citizenship_cd AND
2139   			 PS.perm_resident_cd = PRCD.perm_resident_cd (+)
2140   		ORDER BY PS.start_dt,
2141   			 PS.end_dt;
2142   	CURSOR 	c_gccd IS
2143   		SELECT	govt_citizenship_cd
2144   		FROM	IGS_ST_CITIZENSHP_CD
2145   		WHERE	citizenship_cd = p_citizenship_cd;
2146   	CURSOR	c_gprcd IS
2147   		SELECT	govt_perm_resident_cd
2148   		FROM	IGS_PE_PERM_RES_CD
2149   		WHERE	perm_resident_cd = p_perm_resident_cd;
2150   	CURSOR c_hpo_rec IS
2151   		SELECT	SCHOV.start_dt,
2152   			 SCHOV.end_dt,
2153   			 HPO.govt_hecs_payment_option
2154   		FROM	 IGS_EN_STDNT_PS_HECS_OPTION_V SCHOV,
2155   			 IGS_FI_HECS_PAY_OPTN HPO
2156   		WHERE	 SCHOV.person_id = p_person_id AND
2157   			 SCHOV.hecs_payment_option = HPO.hecs_payment_option AND
2158   			HPO.govt_hecs_payment_option IS NOT NULL
2159   		ORDER BY SCHOV.start_dt,
2160   			 SCHOV.end_dt;
2161   	FUNCTION enrpl_chk_whether_to_validate (
2162   		p_p_start_dt	DATE,
2163   		p_p_end_dt	DATE,
2164   		p_db_start_dt	DATE,
2165   		p_db_end_dt	DATE)
2166   	RETURN BOOLEAN  AS
2167   	BEGIN
2168   	DECLARE
2169 
2170   	BEGIN
2171   		-- this module checks whether further validation
2172   		-- should be performed, depending on the values
2173   		-- of certain system and parameter dates
2174   		-- determining if a record should be validated
2175   		-- which will occur when the DB effective date(s)
2176   		-- overlap or match the parameter date(s)
2177   		IF (p_p_end_dt IS NULL OR
2178   				p_p_end_dt >= p_db_start_dt) AND
2179   				(p_db_end_dt IS NULL OR
2180   				p_p_start_dt <= p_db_end_dt) THEN
2181   			RETURN TRUE;
2182   		END IF;
2183   		-- none of the conditions were true
2184   		RETURN FALSE;
2185   	EXCEPTION
2186   		WHEN OTHERS THEN
2187 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2188 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_whether_to_validate');
2189 			IGS_GE_MSG_STACK.ADD;
2190 			App_Exception.Raise_Exception;
2191   	END;
2192   	END enrpl_chk_whether_to_validate;
2193   	FUNCTION enrpl_do_validations (
2194   		p_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE,
2195   		p_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
2196   		p_govt_perm_resident_cd		IGS_PE_PERM_RES_CD.govt_perm_resident_cd%TYPE,
2197   		p_message_name			OUT NOCOPY VARCHAR2,
2198   		p_return_type			OUT NOCOPY VARCHAR)
2199   	RETURN BOOLEAN  AS
2200   	BEGIN
2201   	DECLARE
2202   		v_other_detail			VARCHAR2(255);
2203   	BEGIN
2204   		-- this module performs the validation that is
2205   		-- required, in that if the govt. value for
2206   		-- the IGS_FI_HECS_PAY_OPTN = 10 or 11, then
2207   		-- the govt. value for the IGS_ST_CITIZENSHP_CD must be
2208   		-- 1 OR the govt. value for the IGS_PE_PERM_RES_CD must
2209   		-- be 1
2210   		-- OR
2211   		-- if the govt value for the IGS_FI_HECS_PAY_OPTN is 10,
2212   		-- 11, 19, 20, 25, 26, 27, 32, or 40, then the govt. value for
2213   		-- the IGS_ST_CITIZENSHP_CD must be 1, 2, or 3, and if it is
2214   		-- 3, then the govt. value for the IGS_PE_PERM_RES_CD must
2215   		-- be 1 or 3
2216   		-- checking whether the IGS_FI_GOV_HEC_PA_OP = 10 or 11
2217   		-- DETYA validation 1772.  Allow for values being NULL
2218   		IF p_govt_perm_resident_cd IN (
2219   					cst_perm_out_aust_not_crs,
2220   					cst_perm) AND
2221   				(p_govt_hecs_payment_option IS NULL OR
2222   				p_govt_hecs_payment_option <> cst_hecs_upfront) THEN
2223   			p_message_name := 'IGS_EN_PERM_RES_STAT_VAL_2_3';
2224   			p_return_type := cst_error;
2225   			RETURN FALSE;
2226   		END IF;
2227   		-- checking whether the IGS_FI_GOV_HEC_PA_OP = 10, 11, 19, 20, 25, 26,
2228   		-- 27, 32 or 40
2229   		-- DETYA validation 1774.  Allow for values being NULL
2230   		IF (p_govt_hecs_payment_option IS NOT NULL AND
2231   				p_govt_hecs_payment_option NOT IN (
2232   						cst_hecs_deferred,
2233   						cst_hecs_upfront_discount,
2234   						cst_hecs_upfront)) AND
2235   				(p_govt_perm_resident_cd IS NOT NULL AND
2236   				p_govt_perm_resident_cd <> cst_perm_no) THEN
2237   			p_message_name := 'IGS_EN_CHK_IF_GOV_VAL_GT_12';
2238   			p_return_type := cst_error;
2239   			RETURN FALSE;
2240   		END IF;
2241   		RETURN TRUE;
2242   	EXCEPTION
2243   		WHEN OTHERS THEN
2244 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2245 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_do_validations');
2246 			IGS_GE_MSG_STACK.ADD;
2247 			App_Exception.Raise_Exception;
2248   	END;
2249   	END enrpl_do_validations;
2250   BEGIN
2254   	p_message_name := null;
2251   	-- This is the main module which validates the student_course_hecs_
2252   	-- option_v.IGS_FI_HECS_PAY_OPTN against the IGS_PE_STATISTICS.
2253   	-- IGS_ST_CITIZENSHP_CD and the IGS_PE_STATISTICS.IGS_PE_PERM_RES_CD.
2255   	p_return_type := NULL;
2256   	-- validating the input parameters
2257   	IF p_person_id IS NULL THEN
2258   		RETURN TRUE;
2259   	END IF;
2260   	-- validating the input parameters
2261   	IF p_course_cd IS NOT NULL THEN
2262   		IF p_scho_start_dt IS NULL THEN
2263   			RETURN TRUE;
2264   		END IF;
2265   		-- retrieving the govt. value for the student_course_
2266   		-- hecs_option_v.IGS_FI_HECS_PAY_OPTN
2267   		OPEN c_ghpo;
2268   		FETCH c_ghpo INTO v_govt_hecs_payment_option;
2269   		-- exit successfully if a record isn't found
2270   		-- therefore, no validation is required
2271   		IF c_ghpo%NOTFOUND THEN
2272   			CLOSE c_ghpo;
2273   			RETURN TRUE;
2274   		END IF;
2275   		CLOSE c_ghpo;
2276   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
2277   		-- IGS_ST_CITIZENSHP_CD and the IGS_PE_STATISTICS.IGS_PE_PERM_RES_CD,
2278   		-- in which more than one may be found
2279   		FOR v_citz IN c_gcitiz_rec LOOP
2280   			-- set that a record was found
2281   			v_rec_found := TRUE;
2282   			-- execute the rountine which checks whether
2283   			-- further validation is required.
2284   			-- if it returns true, perform the validation
2285   			IF enrpl_chk_whether_to_validate (
2286   							p_scho_start_dt,
2287   							p_scho_end_dt,
2288   							v_citz.start_dt,
2289   							v_citz.end_dt) THEN
2290   				-- execute the validation routine.
2291   				-- if it returns false, set the message number
2292   				-- and the return type
2293   				IF NOT enrpl_do_validations (
2294   							v_govt_hecs_payment_option,
2295   							v_citz.govt_citizenship_cd,
2296   							v_citz.govt_perm_resident_cd,
2297   							p_message_name,
2298   							p_return_type) THEN
2299   					v_false_val := TRUE;
2300   					EXIT;
2301   				END IF;
2302   			END IF;
2303   		END LOOP;
2304   	ELSE	-- p_course_cd IS NULL
2305   		-- checking the input parameters
2306   		IF p_ps_start_dt IS NULL THEN
2307   			RETURN TRUE;
2308   		END IF;
2309   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
2310   		-- IGS_ST_CITIZENSHP_CD
2311   		OPEN c_gccd;
2312   		FETCH c_gccd INTO v_govt_citizenship_cd;
2313   		-- exit successfully if a record isn't found
2314   		-- therefore, no validation is required
2315   		IF c_gccd%NOTFOUND THEN
2316   			CLOSE c_gccd;
2317   			RETURN TRUE;
2318   		END IF;
2319   		CLOSE c_gccd;
2320   		-- retrieving the govt. value for the IGS_PE_STATISTICS.
2321   		-- IGS_PE_PERM_RES_CD
2322   		OPEN c_gprcd;
2323   		FETCH c_gprcd INTO v_govt_perm_resident_cd;
2324   		CLOSE c_gprcd;
2325   		-- retrieving govt. value for the
2326   		-- IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN
2327   		-- in which more than one record may be found
2328   		FOR v_scho IN c_hpo_rec LOOP
2329   			-- set that a record was found
2330   			v_scho_rec_found := TRUE;
2331   			-- execute the rountine which checks whether
2332   			-- further validation is required.
2333   			-- if it returns true, perform the validation
2334   			IF enrpl_chk_whether_to_validate (
2335   							p_ps_start_dt,
2336   							p_ps_end_dt,
2337   							v_scho.start_dt,
2338   							v_scho.end_dt) THEN
2339   				-- execute the validation routine.
2340   				-- if it returns false, set the message number
2341   				-- and the return type
2342   				IF NOT enrpl_do_validations (
2343   							v_scho.govt_hecs_payment_option,
2344   							v_govt_citizenship_cd,
2345   							v_govt_perm_resident_cd,
2346   							p_message_name,
2347   							p_return_type) THEN
2351   			END IF;
2348   					v_false_val := TRUE;
2349   					EXIT;
2350   				END IF;
2352   		END LOOP;
2353   	END IF;
2354   	-- the validation didn't return TRUE
2355   	IF v_false_val THEN
2356   		RETURN FALSE;
2357   	END IF;
2358   	RETURN TRUE;
2359   EXCEPTION
2360   	WHEN OTHERS THEN
2361   		IF c_ghpo%ISOPEN THEN
2362   			CLOSE c_ghpo;
2363   		END IF;
2364   		IF c_gcitiz_rec%ISOPEN THEN
2365   			CLOSE c_gcitiz_rec;
2366   		END IF;
2367   		IF c_gccd%ISOPEN THEN
2368   			CLOSE c_gccd;
2369   		END IF;
2370   		IF c_gprcd%ISOPEN THEN
2371   			CLOSE c_gprcd;
2372   		END IF;
2373   		IF c_hpo_rec%ISOPEN THEN
2374   			CLOSE c_hpo_rec;
2375   		END IF;
2376   		RAISE;
2377   END;
2378   EXCEPTION
2379   	WHEN OTHERS THEN
2380 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2381 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.');
2382 		IGS_GE_MSG_STACK.ADD;
2383 			App_Exception.Raise_Exception;
2384   END enrp_val_hpo_cic_prc;
2385   --
2386   -- Validate the HECS pay option, the course type and the citizenship cd.
2387   FUNCTION enrp_val_hpo_crs_cic(
2388   p_person_id IN NUMBER ,
2389   p_course_cd IN VARCHAR2 ,
2390   p_scho_start_dt IN DATE ,
2391   p_scho_end_dt IN DATE ,
2392   p_hecs_payment_option IN VARCHAR2 ,
2393   p_ps_start_dt IN DATE ,
2394   p_ps_end_dt IN DATE ,
2395   p_citizenship_cd IN VARCHAR2 ,
2396   p_message_name OUT NOCOPY VARCHAR2,
2397   p_return_type OUT NOCOPY VARCHAR2 )
2398   RETURN BOOLEAN  AS
2399    BEGIN
2400   	-- validate the IGS_EN_STDNT_PS_HECS_OPTION_V.IGS_FI_HECS_PAY_OPTN against
2401   	-- the IGS_PS_VER.IGS_PS_TYPE and the IGS_PE_STATISTICS.citizenship_cd
2402   DECLARE
2403   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
2404   	v_govt_course_type		IGS_PS_TYPE.govt_course_type%TYPE;
2405   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
2406   	v_validation_failed		BOOLEAN DEFAULT FALSE;
2407   	CURSOR c_hpo IS
2408   		SELECT 	hpo.govt_hecs_payment_option
2409   		FROM	IGS_FI_HECS_PAY_OPTN	hpo
2410   		WHERE	hpo.hecs_payment_option = p_hecs_payment_option;
2411   	CURSOR c_ct IS
2412   		SELECT	ct.govt_course_type
2413   		FROM	IGS_EN_STDNT_PS_ATT	sca,
2414   			IGS_PS_VER		cv,
2415   			IGS_PS_TYPE		ct
2416   		WHERE	sca.person_id		= p_person_id		AND
2417   			sca.course_cd		= p_course_cd		AND
2418   			cv.course_cd		= sca.course_cd		AND
2419   			cv.version_number	= sca.version_number	AND
2420   			cv.course_type		= ct.course_type;
2421   	CURSOR c_ps IS
2422   		SELECT	ps.start_dt,
2423   			ps.end_dt,
2424   			cc.govt_citizenship_cd
2425   		FROM	IGS_PE_STATISTICS	ps,
2426   			IGS_ST_CITIZENSHP_CD		cc
2427   		WHERE	ps.person_id		= p_person_id	AND
2428   			ps.citizenship_cd	= cc.citizenship_cd
2429   		ORDER BY
2430   			start_dt,
2431   			end_dt;
2432   	CURSOR c_scho IS
2433   		SELECT	scho.start_dt,
2434   			scho.end_dt,
2435   			hpo.govt_hecs_payment_option,
2436   			ct.govt_course_type
2437   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V	scho,
2438   			IGS_FI_HECS_PAY_OPTN		hpo,
2439   			IGS_EN_STDNT_PS_ATT		sca,
2440   			IGS_PS_VER			cv,
2441   			IGS_PS_TYPE			ct
2442   		WHERE	scho.person_id			= p_person_id			AND
2443   			scho.hecs_payment_option	= hpo.hecs_payment_option	AND
2444   			sca.person_id			= scho.person_id		AND
2445   			sca.course_cd			= scho.course_cd		AND
2446   			cv.course_cd			= sca.course_cd			AND
2447   			cv.version_number		= sca.version_number		AND
2448   			cv.course_type			= ct.course_type;
2449   	CURSOR	c_cic IS
2450   		SELECT	cic.govt_citizenship_cd
2451   		FROM	IGS_ST_CITIZENSHP_CD	cic
2452   		WHERE	cic.citizenship_cd = p_citizenship_cd;
2453   	FUNCTION enrpl_get_govt_values
2454   	RETURN BOOLEAN
2455   	 AS
2456   	BEGIN
2457   		-- Get the govt value for the student hecs paymt option
2458   		OPEN c_hpo;
2459   		FETCH c_hpo INTO v_govt_hecs_payment_option;
2460   		IF c_hpo%NOTFOUND THEN
2461   			CLOSE c_hpo;
2462   			RETURN FALSE;
2463   		END IF;
2464   		CLOSE c_hpo;
2465   		-- Get the govt value for IGS_PS_TYPE
2466   		OPEN c_ct;
2467   		FETCH c_ct INTO v_govt_course_type;
2468   		IF c_ct%NOTFOUND THEN
2469   			CLOSE c_ct;
2470   			RETURN FALSE;
2471   		END IF;
2472   		CLOSE c_ct;
2473   		RETURN TRUE;
2474   	END enrpl_get_govt_values;
2475   	FUNCTION enrpl_chk_dates_overlap (
2476   		p_para_start_dt	DATE,
2477   		p_para_end_dt		DATE,
2478   		p_dbase_start_dt	DATE,
2479   		p_dbase_end_dt	DATE)
2480   	RETURN BOOLEAN
2481   	 AS
2482   	BEGIN 	-- enrpl_chk_dates_overlap
2483   		-- Check if database effective date(s) overlap or match the parameter date(s)
2484   	DECLARE
2485 
2486   	BEGIN
2487   		IF (p_para_end_dt IS NULL OR
2488   				p_para_end_dt >= p_dbase_start_dt) AND
2489   				(p_dbase_end_dt IS NULL OR
2490   				p_para_start_dt <= p_dbase_end_dt) THEN
2491   			RETURN TRUE;
2492   		END IF;
2493   		RETURN FALSE;
2494   	EXCEPTION
2495   		WHEN OTHERS THEN
2496 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2497 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_dates_overlap');
2498 			IGS_GE_MSG_STACK.ADD;
2502   	FUNCTION enrpl_perform_validation (
2499 			App_Exception.Raise_Exception;
2500   	END;
2501   	END enrpl_chk_dates_overlap;
2503   			p_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE,
2504   			p_govt_course_type		IGS_PS_TYPE.govt_course_type%TYPE,
2505   			p_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
2506   			p_message_name			OUT NOCOPY VARCHAR2,
2507   			p_return_type			OUT NOCOPY VARCHAR2)
2508   	RETURN BOOLEAN
2509   	 AS
2510   	BEGIN
2511   	DECLARE
2512 
2513   	BEGIN
2514   		p_message_name := null;
2515   		-- DEETYA validation 1293
2516   		IF p_govt_hecs_payment_option = cst_hecs_enabling_crs AND
2517   				(p_govt_course_type <> cst_crs_enabling OR
2518   				p_govt_citizenship_cd NOT IN (
2519   								cst_citizen_aust,
2520   								cst_citizen_nz,
2521   								cst_citizen_perm)) THEN
2522   			p_message_name := 'IGS_EN_CHK_GOV_VAL_25';
2523   			p_return_type := cst_error;
2524   			RETURN FALSE;
2525   		END IF;
2526   		-- DEETYA validation 1654.
2527   		IF p_govt_course_type = cst_crs_enabling AND
2528   				(p_govt_hecs_payment_option <> cst_hecs_enabling_crs OR
2529   				p_govt_citizenship_cd NOT IN (
2530   							cst_citizen_aust,
2531   							cst_citizen_nz,
2532   							cst_citizen_perm)) THEN
2533   			p_message_name := 'IGS_EN_PRGTYPE_STUD_PRGATT';
2534   			p_return_type := cst_error;
2535   			RETURN FALSE;
2536   		END IF;
2537   		-- DEETYA validation 1646.
2538   		IF p_govt_hecs_payment_option = cst_hecs_pg_award THEN
2539   			IF p_govt_citizenship_cd IN(
2540   						cst_citizen_aust,
2541   						cst_citizen_nz,
2542   						cst_citizen_perm) AND
2543   					p_govt_course_type NOT IN (
2544   								cst_crs_higher_doctorate,
2545   								cst_crs_doctorate_research,
2546   								cst_crs_masters_research,
2547   								cst_crs_masters_crs_work,
2548   								cst_crs_postgrad,
2549   								cst_crs_grad_dip_pg_dip_new,
2550   								cst_crs_grad_dip_pg_dip_extend,
2551   								cst_crs_bachelor_graduate,
2552   								cst_crs_bachelor_honours,
2553   								cst_crs_graduate,
2554   								cst_crs_doctorate_crs_work) THEN
2555   				p_message_name := 'IGS_EN_CHK_GOV_CTZ_1_2_3';
2556   				p_return_type := cst_error;
2557   				RETURN FALSE;
2558   			END IF;
2559   			IF p_govt_citizenship_cd IN(
2560   						cst_citizen_temp_dip,
2561   						cst_citizen_other) AND
2562   					p_govt_course_type NOT IN (
2563   							cst_crs_higher_doctorate,
2564   							cst_crs_doctorate_research,
2565   							cst_crs_masters_research) THEN
2566   				p_message_name := 'IGS_EN_CHK_GOV_CTZ_1_2_3';
2567   				p_return_type := cst_error;
2568   				RETURN FALSE;
2569   			END IF;
2570   		END IF;
2571   		-- DEETYA validation 1645.
2572   		IF p_govt_hecs_payment_option = cst_hecs_fee_paying_pg AND
2573   				(p_govt_course_type NOT IN(
2574   						cst_crs_higher_doctorate,
2575   						cst_crs_doctorate_research,
2576   						cst_crs_masters_research,
2577   						cst_crs_masters_crs_work,
2578   						cst_crs_postgrad,
2579   						cst_crs_grad_dip_pg_dip_new,
2580   						cst_crs_grad_dip_pg_dip_extend,
2581   						cst_crs_graduate,
2582   						cst_crs_doctorate_crs_work,
2583   						cst_crs_cross_inst_pg) OR
2584   					p_govt_citizenship_cd NOT IN (
2585   								cst_citizen_aust,
2586   								cst_citizen_nz,
2587   								cst_citizen_perm)) THEN
2588   			p_message_name := 'IGS_EN_HECS_OPTION_GOVTVAK_20';
2589   			p_return_type := cst_error;
2590   			RETURN FALSE;
2591   		END IF;
2592   		IF p_govt_hecs_payment_option = cst_hecs_non_os_fee_paying_ug THEN
2593   			IF p_govt_course_type NOT IN (
2594   						cst_crs_bachelor_graduate,
2595   						cst_crs_bachelor_honours,
2596   						cst_crs_bachelor_pass,
2597   						cst_crs_assoc_degree,
2601   						cst_crs_cross_inst_ug) THEN
2598   						cst_crs_adv_diploma,
2599   						cst_crs_diploma,
2600   						cst_other_award,
2602   				p_message_name := 'IGS_EN_HECS_OPTION_GOVT_19';
2603   				p_return_type := cst_error;
2604   				RETURN FALSE;
2605   			ELSE	-- course type is a valid value
2606   				IF p_govt_citizenship_cd NOT IN (
2607   							cst_citizen_aust,
2608   							cst_citizen_nz,
2609   							cst_citizen_perm) THEN
2610   					p_message_name := 'IGS_EN_HECS_OPTION_GOVT_19';
2611   					p_return_type := cst_error;
2612   					RETURN FALSE;
2613   				END IF;
2614   			END IF;
2615   		END IF;
2616   		RETURN TRUE;
2617   	EXCEPTION
2618   		WHEN OTHERS THEN
2619 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2620 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_perform_validation');
2621 			IGS_GE_MSG_STACK.ADD;
2622 			App_Exception.Raise_Exception;
2623   	END;
2624   	END enrpl_perform_validation;
2625   BEGIN
2626   	p_message_name := null;
2627   	-- Validate input parameters
2628   	IF p_person_id IS NULL THEN
2629   		RETURN TRUE;
2630   	END IF;
2631   	IF p_course_cd IS NOT NULL THEN
2632   		-- This module has been called when validating
2633   		-- a IGS_EN_STDNT_PS_HECS_OPTION_V record
2634   		IF p_scho_start_dt IS NULL THEN
2635   			RETURN TRUE;
2636   		END IF;
2637   		-- get govt values for student hecs paymnt option, IGS_PS_TYPE
2638   		IF NOT enrpl_get_govt_values THEN
2639   			RETURN TRUE;
2640   		END IF;
2641   		-- Get the govt value for the IGS_ST_CITIZENSHP_CD
2642   		FOR v_rec IN c_ps LOOP
2643   			-- For each record that is retrieved, only validate if the
2644   			-- database effective date(s) overlap or match the parameter date(s)
2645   			IF enrpl_chk_dates_overlap (
2646   						p_scho_start_dt,
2647   						p_scho_end_dt,
2648   						v_rec.start_dt,
2649   						v_rec.end_dt) THEN
2650   				-- premature exit loop if validation fails
2651   				IF NOT enrpl_perform_validation (
2652   							v_govt_hecs_payment_option,
2653   							v_govt_course_type,
2654   							v_rec.govt_citizenship_cd,
2655   							p_message_name,
2656   							p_return_type) THEN
2657   					v_validation_failed := TRUE;
2658   					EXIT;
2659   				END IF;
2660   			END IF;
2661   		END LOOP;
2662   	ELSE -- p_course_cd IS NOT NULL
2663   		IF p_ps_start_dt IS NULL THEN
2664   			RETURN TRUE;
2665   		END IF;
2666   		OPEN c_cic;
2667   		FETCH c_cic INTO v_govt_citizenship_cd;
2668   		IF c_cic%NOTFOUND THEN
2669   			CLOSE c_cic;
2670   			RETURN TRUE;
2671   		END IF;
2672   		CLOSE c_cic;
2673   		FOR v_govt_rec IN c_scho LOOP
2674   			-- For each record that is retrieved, only validate if the
2675   			-- database effective date(s) overlap or match the parameter date(s)
2676   			IF enrpl_chk_dates_overlap (
2677   						p_ps_start_dt,
2678   						p_ps_end_dt,
2679   						v_govt_rec.start_dt,
2680   						v_govt_rec.end_dt) THEN
2681   				-- premature exit loop if validation fails
2682   				IF NOT enrpl_perform_validation (
2683   							v_govt_rec.govt_hecs_payment_option,
2684   							v_govt_rec.govt_course_type,
2685   							v_govt_citizenship_cd,
2686   							p_message_name,
2687   							p_return_type) THEN
2688   					v_validation_failed := TRUE;
2689   					EXIT;
2690   				END IF;
2691   			END IF;
2692   		END LOOP;
2693   	END IF; -- p_course_cd IS NULL
2694   	-- Validation fails
2695   	IF v_validation_failed THEN
2696   		RETURN FALSE;
2697   	END IF;
2698   	RETURN TRUE;
2699   END;
2700   EXCEPTION
2701   	WHEN OTHERS THEN
2702 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2703 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_crs_cic');
2704 		IGS_GE_MSG_STACK.ADD;
2705 			App_Exception.Raise_Exception;
2706   END enrp_val_hpo_crs_cic;
2707   --
2708   -- Validate HECS payment option and the citizenship code.
2709   FUNCTION enrp_val_hpo_cic(
2710   p_person_id IN NUMBER ,
2711   p_course_cd IN VARCHAR2 ,
2712   p_scho_start_dt IN DATE ,
2713   p_scho_end_dt IN DATE ,
2714   p_hecs_payment_option IN VARCHAR2 ,
2715   p_ps_start_dt IN DATE ,
2716   p_ps_end_dt IN DATE ,
2717   p_citizenship_cd IN VARCHAR2 ,
2718   p_message_name OUT NOCOPY VARCHAR2,
2719   p_return_type OUT NOCOPY VARCHAR2 )
2723   		pl_govt_hecs_payment_option	IN
2720   RETURN BOOLEAN  AS
2721    	-- local function
2722   	FUNCTION enrpl_val_hpo_cit_cd (
2724   			IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option%TYPE,
2725   		pl_govt_citizenship_cd		IN	IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
2726   		p1_v_inst_3037			IN	BOOLEAN,
2727   		pl_message_name			OUT NOCOPY	VARCHAR2,
2728   		pl_return_type			OUT NOCOPY	VARCHAR2 )
2729   	RETURN
2730   		BOOLEAN
2731   	 AS
2732   	BEGIN
2733   		pl_message_name := null;
2734   		pl_return_type := NULL;
2735   		-- DEETYA validation 1666
2736   		IF pl_govt_citizenship_cd IN (
2737   					cst_citizen_aust,
2738   					cst_citizen_nz,
2739   					cst_citizen_perm) AND
2740   				pl_govt_hecs_payment_option NOT IN (
2741   							cst_hecs_deferred,
2742   							cst_hecs_upfront_discount,
2743   							cst_hecs_upfront,
2744   							cst_hecs_non_os_fee_paying_ug,
2745   							cst_hecs_fee_paying_pg,
2746   							cst_hecs_enabling_crs,
2747   							cst_hecs_non_award_crs,
2748   							cst_hecs_employer_funded_crs,
2749   							cst_hecs_non_os_comm_ug_dis,
2750   							cst_hecs_comm_industry,
2751   							cst_hecs_work_experience,
2752   							cst_hecs_pg_award,
2753   							cst_hecs_non_os_spec_crs,
2754   							cst_hecs_avondale_special) THEN
2755   			pl_message_name := 'IGS_EN_CHK_CTZ/RES_STAT_1_2_3';
2756   			pl_return_type := cst_error;
2757   			RETURN FALSE;
2758   		END IF;
2759   		-- DEETYA validation 1574
2760   		IF pl_govt_citizenship_cd IN (
2761   					cst_citizen_temp_dip,
2762   					cst_citizen_other) AND
2763   				pl_govt_hecs_payment_option NOT IN (
2764   						cst_hecs_fee_paying_os,
2765   						cst_hecs_os_student_charge,
2766   						cst_hecs_fee_paying_os_spnsr,
2767   						cst_hecs_os_exchange_student,
2768   						cst_hecs_pg_award,
2769   						cst_hecs_os_spec_crs,
2770   						cst_hecs_avondale_special) THEN
2771   			pl_message_name := 'IGS_EN_CHK_CTZ/RES_STAT_4_5';
2772   			pl_return_type := cst_error;
2773   			RETURN FALSE;
2774   		END IF;
2775   		-- DEETYA validation 1675
2776   		IF NOT p1_v_inst_3037 AND
2777   				pl_govt_citizenship_cd = cst_citizen_aust AND
2778   				pl_govt_hecs_payment_option NOT IN (
2779   								cst_hecs_deferred,
2780   								cst_hecs_upfront_discount,
2781   								cst_hecs_non_os_fee_paying_ug,
2782   								cst_hecs_fee_paying_pg,
2783   								cst_hecs_enabling_crs,
2784   								cst_hecs_non_award_crs,
2785   								cst_hecs_employer_funded_crs,
2786   								cst_hecs_non_os_comm_ug_dis,
2787   								cst_hecs_comm_industry,
2788   								cst_hecs_work_experience,
2789   								cst_hecs_pg_award,
2790   								cst_hecs_non_os_spec_crs,
2791   								cst_hecs_avondale_special) THEN
2792   			pl_message_name := 'IGS_EN_INST_NOT_3037';
2793   			pl_return_type := cst_error;
2794   			RETURN FALSE;
2795   		END IF;
2796   		-- DETYA Validation 1759
2797   		IF pl_govt_hecs_payment_option = cst_hecs_employer_funded_crs AND
2798   				pl_govt_citizenship_cd NOT IN (
2799   						cst_citizen_aust,
2800   						cst_citizen_nz,
2801   						cst_citizen_perm) THEN
2802   			pl_message_name := 'IGS_EN_HECS_PYMNT_OPTION_27';
2803   			pl_return_type := cst_error;
2804   			RETURN FALSE;
2805   		END IF;
2806   		RETURN TRUE;
2807   	END enrpl_val_hpo_cit_cd;
2808   BEGIN
2809   DECLARE
2810   	TYPE t_govt_cit_cd_details IS RECORD (
2811   		start_dt		IGS_PE_STATISTICS.start_dt%TYPE,
2812   		end_dt			IGS_PE_STATISTICS.end_dt%TYPE,
2813   		IGS_PE_GOVCITIZEN_CD	IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE );
2814   	TYPE t_hpo_details IS RECORD (
2815   		start_dt		IGS_PE_STATISTICS.start_dt%TYPE,
2816   		end_dt			IGS_PE_STATISTICS.end_dt%TYPE,
2817   		govt_hpo		IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE );
2818   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
2819   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
2820   	v_cit_cd_details_rec		t_govt_cit_cd_details;
2821   	v_hpo_details_rec		t_hpo_details;
2822   	v_institution_3037		BOOLEAN DEFAULT FALSE;
2823   	v_exit				BOOLEAN DEFAULT FALSE;
2824   	CURSOR	 c_ins IS
2825   		SELECT 	ins.govt_institution_cd
2826   		FROM 	IGS_OR_INSTITUTION		ins,
2827   			IGS_OR_INST_STAT	ist
2828   		WHERE  	ins.local_institution_ind 	= 'Y' AND
2829   			ist.institution_status		= ins.institution_status AND
2830   			ist.s_institution_status 	= 'ACTIVE';
2831   	CURSOR	c_govt_hpo IS
2832   		SELECT	hpo.govt_hecs_payment_option
2833   		FROM	IGS_FI_HECS_PAY_OPTN	hpo
2834   		WHERE	hpo.hecs_payment_option 	= p_hecs_payment_option AND
2835   			hpo.govt_hecs_payment_option 	IS NOT NULL;
2836   	CURSOR	c_ps IS
2837   		SELECT	ps.start_dt,
2838   			ps.end_dt,
2839   			cic.govt_citizenship_cd
2840   		FROM	IGS_PE_STATISTICS	ps,
2841   			IGS_ST_CITIZENSHP_CD		cic
2842   		WHERE	ps.person_id 		= p_person_id AND
2843   			cic.citizenship_cd 	= ps.citizenship_cd
2844   		ORDER BY
2845   			ps.start_dt,
2846   			ps.end_dt;
2847   	CURSOR	c_schov IS
2848   		SELECT	schov.start_dt,
2849   			schov.end_dt,
2850   			hpo.govt_hecs_payment_option
2851   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V	schov,
2852   			IGS_FI_HECS_PAY_OPTN		hpo
2853   		WHERE	schov.person_id 		= p_person_id AND
2857   			schov.start_dt,
2854   			schov.hecs_payment_option	= hpo.hecs_payment_option AND
2855   			hpo.govt_hecs_payment_option 	IS NOT NULL
2856   		ORDER BY
2858   			schov.end_dt;
2859   	CURSOR	c_gov_details IS
2860   		SELECT		govt_citizenship_cd
2861   		FROM		IGS_ST_CITIZENSHP_CD
2862   		WHERE		citizenship_cd = p_citizenship_cd;
2863   BEGIN
2864   	-- This module may be called when validating a IGS_EN_STDNT_PS_HECS_OPTION_V
2865   	-- record or a IGS_PE_STATISTICS record.  person Id will be the only
2866   	-- input parameter that will be set when called from either place.  The
2867   	-- other input parameters will be set depending on where the module is
2868   	-- called from.  If course code is set, we can assume the module have been
2869   	-- called when validating a IGS_EN_STDNT_PS_HECS_OPTION_V record, otherwise
2870   	-- if it is not set, we can assume the module has been called when validating
2871   	-- a IGS_PE_STATISTICS record.  Because both records are effective dated,
2872   	-- validation from both places will need to include looping logic to match
2873   	-- on all records that overlap with the one being validated.  When validating
2874   	-- a IGS_PE_STATISTICS record, logic is required to loop through all of the
2875   	-- IGS_EN_STDNT_PS_HECS_OPTION_V records that may exist for the person.
2876   	-- Looping is required for the different course codes that may exist.
2877   	-- Therefor, this module validates the IGS_EN_STDNT_PS_HECS_OPTION_V.
2878   	-- IGS_FI_HECS_PAY_OPTN against the IGS_PE_STATISTICS.citizenship_cd.
2879   	-- Validations are :
2880   	-- 1.  If the government value for the IGS_PE_STATISTICS.citizenship_cd is
2881   	--  1, 2 or 3, then the government value for the
2882   	--  IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option must be
2883   	-- 10, 11, 12, 19, 20, 25, 26, 27, 31, 32, 33, 40,  70 or 99
2884   	-- (DEETYA validation1666).
2885   	-- 2.  If the government value for the IGS_PE_STATISTICS.citizenship_cd is 4 or
2886   	--5, then the government value for the
2887   	--  IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option must be 22, 23,
2888   	--  24, 26, 27, 30, 70 or 99  (DEETYA validation 1574).
2889   	-- 3.  If the local INSTITUTION is not 3037 (Open Learning Agency of Australia)
2890   	--  and the government value for the IGS_PE_STATISTICS.citizenship_cd is 1,
2891   	--  then the government value for the IGS_EN_STDNT_PS_HECS_OPTION_V.
2892   	--  IGS_FI_HECS_PAY_OPTN must be 10, 11, 19, 20, 25, 26, 27, 31, 32, 33, 40,
2893   	--  70
2894   	--  or 99 (DEETYA validation 1675).
2895   	--- Set the default message number
2896   	p_message_name := null;
2897   	--- Validate input parameters
2898   	IF p_person_id IS NULL THEN
2899   		RETURN TRUE;
2900   	END IF;
2901   	-- retrieving the government INSTITUTION code
2902   	FOR v_govt_ins_cd IN c_ins LOOP
2903   		IF v_govt_ins_cd.govt_institution_cd = 3037 THEN
2904   			v_institution_3037 := TRUE;
2905   			EXIT;
2906   		END IF;
2907    	END LOOP;
2908   	--- If the course code is set, then we assume this module has been called to
2909   	--- validate a IGS_EN_STDNT_PS_HECS_OPTION_V record.  Otherwise we assume we are
2910   	--- validating a IGS_PE_STATISTICS record.
2911   	IF p_course_cd IS NOT NULL THEN
2912   		IF p_scho_start_dt IS NULL THEN
2913   			RETURN TRUE;
2914   		END IF;
2915   		--- Retrieve the government value for
2916   		--- the IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option.
2917   		OPEN c_govt_hpo;
2918   		FETCH c_govt_hpo INTO v_govt_hecs_payment_option;
2919   		IF c_govt_hpo%NOTFOUND THEN
2920   			CLOSE c_govt_hpo;
2921   			RETURN TRUE;
2922   		END IF;
2923   		CLOSE c_govt_hpo;
2924   		--- Retrieve the government value for the IGS_PE_STATISTICS.citizenship_cd.
2925   		--- Many records may be retrieved.
2926   		--- For each record that is retrieved determine if it should be validated.
2927   		--- Validation is required if the database effective date(s) overlap or match
2928   		--- the parameter date(s).  Looping logic is required here.
2929   		FOR v_ps_rec IN c_ps LOOP
2930   			IF (p_scho_end_dt IS NULL OR
2931   					p_scho_end_dt >= v_ps_rec.start_dt) AND
2932   					(v_ps_rec.end_dt IS NULL OR
2933   					p_scho_start_dt <= v_ps_rec.end_dt) AND
2934   					NOT enrpl_val_hpo_cit_cd(
2935   							v_govt_hecs_payment_option,
2936   							v_ps_rec.govt_citizenship_cd,
2937   							v_institution_3037,
2938   							p_message_name,
2939   							p_return_type ) THEN
2940   				v_exit := TRUE;
2941   				EXIT;
2942   			END IF;
2943   		END LOOP;
2947   		END IF;
2944   	ELSE -- p_course_cd IS NULL
2945   		IF p_ps_start_dt IS NULL THEN
2946   			RETURN TRUE;
2948   		--- Retrieve the government value for the IGS_PE_STATISTICS.citizenship_cd
2949   		OPEN c_gov_details;
2950   		FETCH c_gov_details INTO v_govt_citizenship_cd;
2951   		IF c_gov_details%NOTFOUND THEN
2952   			CLOSE c_gov_details;
2953   			RETURN TRUE;
2954   		END IF;
2955   		CLOSE c_gov_details;
2956   		--- Retrieve the government value for the
2957   		--- IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option.
2958   		--- Many records may be retrieved.
2959   		--- For each record that is retrieved determine IF it should be validated.
2960   		--- Validation is required IF the database effective date(s) overlap or
2961   		--- match the parameter date(s).
2962   		FOR v_schov_rec IN c_schov LOOP
2963   			IF (p_scho_end_dt IS NULL OR
2964   					p_scho_end_dt >= v_schov_rec.start_dt) AND
2965   					(v_schov_rec.end_dt IS NULL OR
2966   					p_scho_start_dt <= v_schov_rec.end_dt) AND
2967   					NOT enrpl_val_hpo_cit_cd(
2968   							v_schov_rec.govt_hecs_payment_option,
2969   							v_govt_citizenship_cd,
2970   							v_institution_3037,
2971   							p_message_name,
2972   							p_return_type ) THEN
2973   				v_exit := TRUE;
2974   				EXIT;
2975   			END IF;
2976   		END LOOP;
2977   	END IF;
2978   	IF v_exit THEN
2979   		RETURN FALSE;
2980   	END IF;
2981   	--- Return the default values
2982   	RETURN TRUE;
2983   END;
2984   EXCEPTION
2985   	WHEN OTHERS THEN
2986 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
2987 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_cic');
2988 		IGS_GE_MSG_STACK.ADD;
2989 			App_Exception.Raise_Exception;
2990   END enrp_val_hpo_cic;
2991   --
2992   -- Validate the HECS payment option closed indicator.
2993   FUNCTION enrp_val_hpo_closed(
2994   p_hecs_payment_option IN VARCHAR2 ,
2995   p_message_name OUT NOCOPY VARCHAR2)
2996   RETURN BOOLEAN  AS
2997   BEGIN
2998   DECLARE
2999    	gv_closed_ind		IGS_FI_HECS_PAY_OPTN.closed_ind%TYPE;
3000   	CURSOR	gc_hecs_payment_option(
3001   		cp_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.hecs_payment_option%TYPE) IS
3002   		SELECT	IGS_FI_HECS_PAY_OPTN.closed_ind
3003   		FROM	IGS_FI_HECS_PAY_OPTN
3004   		WHERE	IGS_FI_HECS_PAY_OPTN.hecs_payment_option = cp_hecs_payment_option;
3005   BEGIN
3006   	-- This module validates if IGS_FI_HECS_PAY_OPTN.hecs_payment_option
3007   	-- is closed
3008   	p_message_name := null;
3009   	OPEN gc_hecs_payment_option(
3010   			p_hecs_payment_option);
3011   	FETCH gc_hecs_payment_option INTO gv_closed_ind;
3012   	IF (gc_hecs_payment_option%FOUND) THEN
3013   		IF (gv_closed_ind = 'Y' ) THEN
3014   			CLOSE gc_hecs_payment_option;
3015   			p_message_name := 'IGS_EN_HECS_PAY_OPT_CLOSED';
3016   			RETURN FALSE;
3017   		END IF;
3018   	END IF;
3019   	CLOSE gc_hecs_payment_option;
3020   	RETURN TRUE;
3021   EXCEPTION
3022   	WHEN OTHERS THEN
3023 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3024 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_closed');
3025 		IGS_GE_MSG_STACK.ADD;
3026 			App_Exception.Raise_Exception;
3027   END;
3028   END enrp_val_hpo_closed;
3029   --
3030   -- Validate HECS payment option, citizenship code and other statistics.
3031   FUNCTION enrp_val_hpo_cic_ps(
3032   p_person_id IN NUMBER ,
3033   p_course_cd IN VARCHAR2 ,
3034   p_scho_start_dt IN DATE ,
3035   p_scho_end_dt IN DATE ,
3036   p_hecs_payment_option IN VARCHAR2 ,
3037   p_ps_start_dt IN DATE ,
3038   p_ps_end_dt IN DATE ,
3039   p_citizenship_cd IN VARCHAR2 ,
3040   p_yr_arrival IN VARCHAR2 ,
3041   p_term_location_country IN VARCHAR2 ,
3042   p_term_location_postcode IN NUMBER ,
3043   p_collection_yr IN DATE ,
3044   p_message_name OUT NOCOPY VARCHAR2,
3045   p_return_type OUT NOCOPY VARCHAR2 )
3046   RETURN BOOLEAN  AS
3047    BEGIN	-- ernp_val_hpo_cic_ps
3048   	-- validate the IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option
3049   	-- against the IGS_PE_STATISTICS.citizenship_cd and other IGS_PE_STATISTICS
3050   	-- values, including IGS_PE_STATISTICS.yr_arrival and
3051   	-- IGS_PE_STATISTICS.term_location_[country|postcode]
3052   	-- The IGS_EN_STDNT_PS_ATT.commencement_dt is also used in validations.
3053   DECLARE
3054   	v_govt_hecs_payment_option	IGS_FI_HECS_PAY_OPTN.govt_hecs_payment_option%TYPE;
3055   	v_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
3056   	v_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE;
3057   	v_validation_failed		BOOLEAN DEFAULT FALSE;
3058   	CURSOR	c_hpo IS
3059   		SELECT	hpo.govt_hecs_payment_option
3060   		FROM	IGS_FI_HECS_PAY_OPTN	hpo
3061   		WHERE	hpo.hecs_payment_option = p_hecs_payment_option;
3062   	CURSOR c_sca IS
3063   		SELECT 	sca.commencement_dt
3064   		FROM	IGS_EN_STDNT_PS_ATT	sca
3065   		WHERE	sca.person_id = p_person_id	AND
3066   			sca.course_cd = p_course_cd;
3067   	CURSOR c_ps IS
3068   		SELECT	ps.start_dt,
3069   			ps.end_dt,
3070   			ps.yr_arrival,
3071   			ps.term_location_country,
3072   			ps.term_location_postcode,
3073   			cc.govt_citizenship_cd
3074   		FROM	IGS_PE_STATISTICS	ps,
3075   			IGS_ST_CITIZENSHP_CD		cc
3076   		WHERE	ps.person_id	= p_person_id	AND
3077   			ps.citizenship_cd = cc.citizenship_cd
3078   		ORDER BY
3079   			ps.start_dt,
3080   			ps.end_dt;
3081   	CURSOR c_cic IS
3082   		SELECT	cic.govt_citizenship_cd
3083   		FROM	IGS_ST_CITIZENSHP_CD	cic
3084   		WHERE	cic.citizenship_cd = p_citizenship_cd;
3085   	CURSOR c_scho IS
3086   		SELECT	scho.start_dt,
3087   			scho.end_dt,
3088   			hpo.govt_hecs_payment_option,
3089   			sca.commencement_dt
3090   		FROM	IGS_EN_STDNT_PS_HECS_OPTION_V	scho,
3091   			IGS_FI_HECS_PAY_OPTN		hpo,
3092   			IGS_EN_STDNT_PS_ATT		sca
3096   			sca.course_cd		= scho.course_cd
3093   		WHERE	scho.person_id		= p_person_id AND
3094   			scho.hecs_payment_option = hpo.hecs_payment_option AND
3095   			sca.person_id		= scho.person_id AND
3097   		ORDER BY
3098   			scho.start_dt,
3099   			scho.end_dt;
3100   	FUNCTION enrpl_chk_dates_overlap (
3101   		p_para_start_dt		DATE,
3102   		p_para_end_dt		DATE,
3103   		p_dbase_start_dt	DATE,
3104   		p_dbase_end_dt		DATE)
3105   	RETURN BOOLEAN
3106   	 AS
3107   	BEGIN	-- enrpl_chk_dates_overlap
3108   		-- Check if database effective date(s) overlap or match the
3109   		-- parameter date(s)
3110   	DECLARE
3111   		v_other_detail	VARCHAR2(255);
3112   	BEGIN
3113   		IF (p_para_end_dt IS NULL OR
3114   				p_para_end_dt >= p_dbase_start_dt) AND
3115   				(p_dbase_end_dt IS NULL OR
3116   				p_para_start_dt <= p_dbase_end_dt) THEN
3117   			RETURN TRUE;
3118   		END IF;
3119   		RETURN FALSE;
3120   	EXCEPTION
3121   		WHEN OTHERS THEN
3122 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3123 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_chk_dates_overlap');
3124 			IGS_GE_MSG_STACK.ADD;
3125 			App_Exception.Raise_Exception;
3126   	END;
3127   	END enrpl_chk_dates_overlap;
3128   	FUNCTION enrpl_perform_validation (
3129   		lp_govt_hecs_payment_option
3130   				IGS_EN_STDNT_PS_HECS_OPTION_V.hecs_payment_option%TYPE,
3131   		lp_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE,
3132   		lp_govt_citizenship_cd		IGS_ST_CITIZENSHP_CD.govt_citizenship_cd%TYPE,
3133   		lp_yr_arrival			IGS_PE_STATISTICS.yr_arrival%TYPE,
3134   		lp_term_location_country	IGS_PE_STATISTICS.term_location_country%TYPE,
3135   		lp_term_location_postcode	IGS_PE_STATISTICS.term_location_postcode%TYPE)
3136   	RETURN BOOLEAN
3137   	 AS
3138   		lv_other_detail			VARCHAR2(255);
3139   	BEGIN
3140   	DECLARE
3141   		lv_check			VARCHAR2(1);
3142   		lv_collection_yr		NUMBER(4);
3143   		lv_collection_yr_less1_str	VARCHAR2(12);
3144   		CURSOR c_cnc IS
3145   			SELECT	'x'
3146   			FROM	IGS_PE_COUNTRY_CD	cnc
3147   			WHERE	cnc.country_cd = lp_term_location_country;
3148   	BEGIN
3149   		lv_collection_yr := TO_NUMBER(substr(IGS_GE_DATE.IGSCHAR(p_collection_yr),1,4));
3150   		IF lp_govt_citizenship_cd = cst_citizen_nz THEN
3151   		IF lp_commencement_dt IS NOT NULL THEN
3152   			-- perform validations that are dependent on the course commencement date
3153   			IF lp_commencement_dt >= IGS_GE_DATE.IGSDATE('1996/01/01') THEN
3154   				-- DEET validation 1676
3155   				-- HECS payment option must not be deferred or upfront with discount
3156   				IF lp_govt_hecs_payment_option IN (
3157   								cst_hecs_deferred,
3158   								cst_hecs_upfront_discount) THEN
3159   					p_message_name := 'IGS_EN_HECS_GOV_VAL_10_11';
3160   					p_return_type := cst_warn;
3161   					RETURN FALSE;
3162   				END IF;
3163   			ELSE	-- commencement date before 1/1/96
3164   				IF lv_collection_yr IS NOT NULL AND
3165   						lp_yr_arrival IS NOT NULL AND
3166   						lp_yr_arrival NOT IN (
3167   								cst_off_shore,
3168   								cst_no_arrival,
3169   								cst_arrival_no_info,
3170   								cst_no_info_aust) AND
3171   						lv_collection_yr - lp_yr_arrival >= 3 THEN
3172   					IF lp_term_location_country = cst_born_os_no_info THEN
3173   						--Term LOCATION is S999.
3174   						-- DEET validation 1701
3175   						-- HECS payment must not be upfront(12).
3176   						IF lp_govt_hecs_payment_option= cst_hecs_upfront THEN
3177   							p_message_name := 'IGS_EN_CHK_CTZ/RES_STATUS';
3178   							p_return_type := cst_warn;
3179   							RETURN FALSE;
3180   						END IF;
3181   					ELSE
3182   						-- Check if term LOCATION is a country code.
3183   						OPEN c_cnc;
3184   						FETCH c_cnc INTO lv_check;
3185   						IF c_cnc%FOUND AND
3186   								-- Term LOCATION is an overseas country.
3187   								-- DEET validation 1701
3188   								-- HECS payment must not be upfront.
3189   								lp_govt_hecs_payment_option = cst_hecs_upfront THEN
3190   							CLOSE c_cnc;
3191   							p_message_name := 'IGS_EN_CHK_CTZ/RES_STATUS';
3192   							p_return_type := cst_warn;
3193   							RETURN FALSE;
3194   						END IF;
3195   						CLOSE c_cnc;
3196   					END IF;
3197   				END IF;
3198   			END IF;
3199   			IF p_collection_yr IS NOT NULL AND
3200   				lp_commencement_dt <
3201   					IGS_GE_DATE.IGSDATE(lv_collection_yr_less1_str) THEN
3202   				-- Perform validations that are dependent on the year of arrival
3203   				IF lp_yr_arrival IS NOT NULL AND
3204   						lp_yr_arrival NOT IN (
3205   								cst_off_shore,
3206   								cst_no_arrival,
3207   								cst_arrival_no_info,
3208   								cst_no_info_aust) THEN
3209   					IF TO_NUMBER(lp_yr_arrival) IN (
3210   									lv_collection_yr,
3211   									lv_collection_yr - 1) AND
3212   							-- DEET validation 1681
3213   							-- HECS payment option must not be deferred or
3214   							-- Upfront with discount
3215   							lp_govt_hecs_payment_option IN (
3216   										cst_hecs_deferred,
3217   										cst_hecs_upfront_discount) THEN
3218   						p_message_name := 'IGS_EN_CHK_GOV_VAL_CITIZEN';
3219   						p_return_type := cst_warn;
3220   						RETURN FALSE;
3221   					END IF;
3222   					IF TO_NUMBER(lp_yr_arrival) = lv_collection_yr - 2 AND
3223   							-- DEET validation 1682
3224   							-- HECS payment option would not nornally be deferred
3225   							-- or upfront with discount
3226   							lp_govt_hecs_payment_option IN (
3227   										cst_hecs_deferred,
3228   										cst_hecs_upfront_discount) THEN
3229   						p_message_name := 'IGS_EN_CHK_GOV_CTZ_STATUS';
3230   						p_return_type := cst_warn;
3231   						RETURN FALSE;
3232   					END IF;
3233   				END IF; -- lp_yr_arrival IS NOT NULL
3234   			END IF; -- p_collection_yr IS NOT NULL ...
3238   			-- Deet validation 1683
3235   		END IF; -- v_commencement_dt IS NOT NULL
3236   		IF lp_term_location_country = cst_born_os_no_info THEN
3237   			-- Term LOCATION is S999
3239   			-- HECS payment must not be deferred or upfront with discount
3240   			IF lp_govt_hecs_payment_option IN (
3241   							cst_hecs_deferred,
3242   							cst_hecs_upfront_discount) THEN
3243   				p_message_name := 'IGS_EN_GOVT_VAL_STATUS_2';
3244   				p_return_type := cst_error;
3245   				RETURN FALSE;
3246   			END IF;
3247   		ELSE
3248   			-- Check if term LOCATION is a country code
3249   			OPEN c_cnc;
3250   			FETCH c_cnc INTO lv_check;
3251   			IF c_cnc%FOUND THEN
3252   				-- Term LOCATION is an overseas country
3253   				-- DEET validation 1683
3254   				-- HECS payment option must not be deferred or upfront with discount
3255   				IF lp_govt_hecs_payment_option IN (
3256   								cst_hecs_deferred,
3257   								cst_hecs_upfront_discount) THEN
3258   					CLOSE c_cnc;
3259   					p_message_name := 'IGS_EN_GOVT_VAL_STATUS_2';
3260   					p_return_type := cst_error;
3261   					RETURN FALSE;
3262   				END IF;
3263   			END IF;
3264   			CLOSE c_cnc;
3265   		END IF;
3266   		END IF;	-- lp_govt_citizenship_cd = cst_citizen_nz
3267   		IF lp_govt_citizenship_cd = cst_citizen_perm THEN
3268   			IF lp_term_location_country = cst_born_os_no_info THEN
3269 
3270   				-- Warning.Payment would not normally be 10 or 11
3271   				IF lp_govt_hecs_payment_option IN (
3272   							cst_hecs_upfront_discount,
3273   							cst_hecs_deferred) THEN
3274   					p_message_name := 'IGS_EN_CHK_GOV_VAL_CTZN/RES';
3275   					p_return_type := cst_warn;
3276   					RETURN FALSE;
3277   				END IF;
3278   			ELSE
3279   				-- Check if term LOCATION is a country code.
3280   				OPEN c_cnc;
3281   				FETCH c_cnc INTO lv_check;
3282   				IF c_cnc%FOUND THEN
3283 
3284   					-- Warning.Payment would not normally be 10 or 11
3285   					IF lp_govt_hecs_payment_option IN (
3286   								cst_hecs_upfront_discount,
3287   								cst_hecs_deferred) THEN
3288   						CLOSE c_cnc;
3289   						p_message_name := 'IGS_EN_CHK_GOV_VAL_CTZN/RES';
3290   						p_return_type := cst_warn;
3291   						RETURN FALSE;
3292   					END IF;
3293   				END IF;
3294   				CLOSE c_cnc;
3295   			END IF;
3296   		END IF;
3297   		RETURN TRUE;
3298   	EXCEPTION
3299   		WHEN OTHERS THEN
3300   		 	IF c_cnc%ISOPEN THEN
3301   				CLOSE c_cnc;
3302   			END IF;
3303   			RAISE;
3304   	END;
3305   	EXCEPTION
3306   		WHEN OTHERS THEN
3307 			Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3308 			FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrpl_perform_validation');
3309 			IGS_GE_MSG_STACK.ADD;
3310 			App_Exception.Raise_Exception;
3311   	END enrpl_perform_validation;
3312   BEGIN
3313   	p_message_name := null;
3314   	IF p_person_id IS NULL THEN
3315   		RETURN TRUE;
3316   	END IF;
3317   	IF p_course_cd IS NOT NULL THEN
3318   		-- This module has been called when validating
3319   		-- a IGS_EN_STDNT_PS_HECS_OPTION_V record
3320   		IF p_scho_start_dt IS NULL THEN
3321   			RETURN TRUE;
3322   		END IF;
3323   		OPEN c_hpo;
3324   		FETCH c_hpo INTO v_govt_hecs_payment_option;
3325   		CLOSE c_hpo;
3326   		IF v_govt_hecs_payment_option IS NULL THEN
3327   			RETURN TRUE;
3328   		END IF;
3329   		OPEN c_sca;
3330   		FETCH c_sca INTO v_commencement_dt;
3331   		IF c_sca%NOTFOUND THEN
3332   			CLOSE c_sca;
3333   			RETURN TRUE;
3334   		END IF;
3335   		CLOSE c_sca;
3336   		FOR v_ps_rec IN c_ps LOOP
3337   			-- Only perform validation if dbase date overlap or match parameter dates
3338   			IF enrpl_chk_dates_overlap (
3339   						p_scho_start_dt,
3340   						p_scho_end_dt,
3341   						v_ps_rec.start_dt,
3342   						v_ps_rec.end_dt) THEN
3343   				IF NOT enrpl_perform_validation (
3344   							v_govt_hecs_payment_option,
3345   							v_commencement_dt,
3346   							v_ps_rec.govt_citizenship_cd,
3347   							v_ps_rec.yr_arrival,
3348   							NVL(v_ps_rec.term_location_country, 'NULL-VALUE'),
3349   							NVL(v_ps_rec.term_location_postcode, -1)) THEN
3350   					v_validation_failed := TRUE;
3351   					EXIT;
3352   				END IF;
3353   			END IF;
3354   		END LOOP;
3355   	ELSE -- (p_course_cd IS NULL)
3356   		-- This module has been called when validating
3357   		-- a person_statistic record
3358   		IF p_ps_start_dt IS NULL THEN
3359   			RETURN TRUE;
3360   		END IF;
3361   		OPEN c_cic;
3362   		FETCH c_cic INTO v_govt_citizenship_cd;
3363   		IF c_cic%NOTFOUND THEN
3364   			CLOSE c_cic;
3365   			RETURN TRUE;
3366   		END IF;
3367   		CLOSE c_cic;
3368   		FOR v_scho_rec IN c_scho LOOP
3369   			-- Only perform validation if dbase date overlap or match parameter dates
3370   			IF enrpl_chk_dates_overlap (
3371   						p_ps_start_dt,
3372   						p_ps_end_dt,
3373   						v_scho_rec.start_dt,
3374   						v_scho_rec.end_dt) THEN
3375   				IF NOT enrpl_perform_validation (
3376   							v_scho_rec.govt_hecs_payment_option,
3377   							v_scho_rec.commencement_dt,
3378   							v_govt_citizenship_cd,
3379   							p_yr_arrival,
3380   							NVL(p_term_location_country, 'NULL-VALUE'),
3381   							NVL(p_term_location_postcode, -1)) THEN
3382   					v_validation_failed := TRUE;
3383   					EXIT;
3384   				END IF;
3385   			END IF;
3386   		END LOOP;
3387   	END IF;
3388   	IF v_validation_failed THEN
3389   		RETURN FALSE;
3390   	END IF;
3391   	RETURN TRUE;
3392   EXCEPTION
3393   	WHEN OTHERS THEN
3394   	 	IF c_hpo%ISOPEN THEN
3395   			CLOSE c_hpo;
3396   		END IF;
3397   	 	IF c_sca%ISOPEN THEN
3398   			CLOSE c_sca;
3402   		END IF;
3399   		END IF;
3400   	 	IF c_ps%ISOPEN THEN
3401   			CLOSE c_ps;
3403   	 	IF c_cic%ISOPEN THEN
3404   			CLOSE c_cic;
3405   		END IF;
3406   	 	IF c_scho%ISOPEN THEN
3407   			CLOSE c_scho;
3408   		END IF;
3409   		RAISE;
3410   END;
3411   EXCEPTION
3412   	WHEN OTHERS THEN
3413 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3414 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_hpo_cic_ps');
3415 		IGS_GE_MSG_STACK.ADD;
3416 			App_Exception.Raise_Exception;
3417   END enrp_val_hpo_cic_ps;
3418   --
3419   -- Validate that scho end date is in accordance with expiry restriction.
3420   FUNCTION enrp_val_scho_expire(
3421   p_person_id IN NUMBER ,
3422   p_course_cd IN VARCHAR2 ,
3423   p_start_dt IN DATE ,
3424   p_end_dt IN DATE ,
3425   p_hecs_payment_option IN VARCHAR2 ,
3426   p_message_name OUT NOCOPY VARCHAR2)
3427   RETURN BOOLEAN  AS
3428   BEGIN
3429   DECLARE
3430   	v_expire_aftr_acdmc_perd_ind
3431   		IGS_FI_HECS_PAY_OPTN.expire_aftr_acdmc_perd_ind%TYPE;
3432   	v_end_dt		     IGS_CA_INST.end_dt%TYPE;
3433   	v_cal_type		     IGS_CA_INST.cal_type%TYPE;
3434   	v_sequence_number	     IGS_CA_INST.sequence_number%TYPE;
3435   	CURSOR	c_hpo(
3436   			cp_hpo IGS_EN_STDNTPSHECSOP.hecs_payment_option%TYPE) IS
3437   		SELECT	expire_aftr_acdmc_perd_ind
3438   		FROM	IGS_FI_HECS_PAY_OPTN
3439   		WHERE	hecs_payment_option= cp_hpo;
3440   	CURSOR	c_cal_instance (
3441   			cp_cal_type IGS_CA_INST.cal_type%TYPE,
3442   			cp_cal_sequence_number IGS_CA_INST.sequence_number%TYPE) IS
3443   		SELECT 	end_dt
3444   		FROM	IGS_CA_INST
3445   		WHERE	cal_type = cp_cal_type AND
3446   			sequence_number = cp_cal_sequence_number ;
3447   	v_other_detail	 VARCHAR(255);
3448   	v_message_name 	 varchar2(30);
3449   BEGIN
3450   	-- Validate the the end date is allowable according to whether the
3451   	-- nominated HECS payment option is an "expire before end of academic period"
3452   	-- option.
3453   	p_message_name := null;
3454   	OPEN c_hpo(
3455   		p_hecs_payment_option);
3456   	FETCH c_hpo INTO v_expire_aftr_acdmc_perd_ind;
3457   	IF(c_hpo%NOTFOUND) THEN
3458   		CLOSE c_hpo;
3459   		RETURN TRUE;
3460   	END IF;
3461   	CLOSE c_hpo;
3462   	IF(v_expire_aftr_acdmc_perd_ind = 'N') THEN
3463   		RETURN TRUE;
3464   	END IF;
3465   	IF p_end_dt IS NULL THEN
3466   		p_message_name := 'IGS_EN_HECS_PYMTOP_ENDDT';
3467   		RETURN FALSE;
3468   	END IF;
3469   	IGS_EN_GEN_001.ENRP_CLC_SCA_ACAD(p_person_id,
3470   			  p_course_cd,
3471   			  SYSDATE,
3472   			  v_cal_type,
3473   			  v_sequence_number);
3474   	IF(v_cal_type = NULL) THEN
3475   		RETURN TRUE;
3476   	END IF;
3477   	OPEN c_cal_instance(
3478   			v_cal_type,
3479   			v_sequence_number);
3480   	FETCH c_cal_instance INTO v_end_dt;
3481   	CLOSE c_cal_instance;
3482   	IF (p_end_dt > v_end_dt) THEN
3483   		p_message_name := 'IGS_EN_HECS_PAY_OPT_CANT_APPL';
3484   		RETURN FALSE;
3485   	END IF;
3486   	RETURN TRUE;
3487   EXCEPTION
3488   	WHEN OTHERS THEN
3489 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3490 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_scho_expire');
3491 		IGS_GE_MSG_STACK.ADD;
3492 			App_Exception.Raise_Exception;
3493   END;
3494   END enrp_val_scho_expire;
3495   --
3496   --
3497   -- Validate the HECS option tax file number certificate number.
3498   FUNCTION enrp_val_tfn_crtfct(
3499   p_tax_file_number IN NUMBER ,
3500   p_tax_file_invalid_dt IN DATE ,
3501   p_tax_file_certificate_number IN NUMBER ,
3502   p_message_name OUT NOCOPY VARCHAR2)
3503   RETURN BOOLEAN  AS
3504    BEGIN
3505   BEGIN
3506   	-- Validate the IGS_EN_STDNTPSHECSOP.tax_file_certificate_number.
3507   	-- Set the default message number
3508   	p_message_name := null;
3509   	-- Validate the input parameter
3510   	IF (p_tax_file_certificate_number IS NULL) THEN
3511   		RETURN TRUE;
3512   	END IF;
3513   	-- Validate the tax file certificate number.
3514   	-- Certificate number can only be set when there is no tax file number
3515   	-- recorded or an invalid tax file number is recorded.
3516   	IF (p_tax_file_number IS NOT NULL) AND
3517   			(p_tax_file_invalid_dt IS NULL) THEN
3518   		p_message_name := 'IGS_EN_CERTNUM_NO_TAX_FILE';
3519   		RETURN FALSE;
3520   	END IF;
3521   	-- Return the default value
3522   	RETURN TRUE;
3523   END;
3524   EXCEPTION
3525   	WHEN OTHERS THEN
3526 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3527 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_tfn_crtfct');
3528 		IGS_GE_MSG_STACK.ADD;
3529 			App_Exception.Raise_Exception;
3530   END enrp_val_tfn_crtfct;
3531   --
3532   -- Validate the HECS option tax file number invalid date.
3533   FUNCTION enrp_val_tfn_invalid(
3534   p_tax_file_number IN NUMBER ,
3535   p_tax_file_invalid_dt IN DATE ,
3536   p_message_name OUT NOCOPY VARCHAR2)
3537   RETURN BOOLEAN  AS
3538    BEGIN
3539   BEGIN
3540   	-- This module validates the IGS_EN_STDNTPSHECSOP.tax_file_invalid_dt.
3541   	-- Set the default message number
3542   	p_message_name := null;
3543   	-- Validate the input parameter
3544   	IF (p_tax_file_invalid_dt IS NULL) THEN
3545   		RETURN TRUE;
3546   	END IF;
3547   	-- Validate the tax file number invalid date.
3548   	-- The tax file number must be set when the invalid date is set.
3549   	IF (p_tax_file_number IS NULL) THEN
3550   		p_message_name := 'IGS_GE_INVALID_VALUE';
3551   		RETURN FALSE;
3552   	END IF;
3553   	-- Invalid date must not be future dated.
3554   	IF (p_tax_file_invalid_dt > SYSDATE) THEN
3555   		p_message_name := 'IGS_EN_TAX_FILE_NUM_INVALID_D';
3556   		RETURN FALSE;
3557   	END IF;
3558   	-- Return the default value
3562   	WHEN OTHERS THEN
3559   	RETURN TRUE;
3560   END;
3561   EXCEPTION
3563 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
3564 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCHO.enrp_val_tfn_invalid');
3565 		IGS_GE_MSG_STACK.ADD;
3566 			App_Exception.Raise_Exception;
3567 END enrp_val_tfn_invalid;
3568 END IGS_EN_VAL_SCHO;