DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RE_VAL_CAH

Source


1 PACKAGE BODY IGS_RE_VAL_CAH AS
2 /* $Header: IGSRE06B.pls 120.0 2005/06/02 03:38:22 appldev noship $ */
3  -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    25-AUG-2001     Bug No. 1956374 .The function GENP_VAL_SDTT_SESS removed
7   --svanukur    08-apr-2004     BUG no 3453123. Removed default declaration in the body since this is
8   --                            a GSCC violation
9   --                            Removed procedure resp_val_cah_strt_dt as part of bug
10   -------------------------------------------------------------------------------------------
11   -- Allow for specified IGS_RE_CANDIDATURE trigger validation.
12   PROCEDURE RESP_VAL_CA_TRG(
13   p_table_name IN VARCHAR2 ,
14   p_insert_delete_ind IN VARCHAR2 )
15   AS
16   	cst_rsup_perc		CONSTANT	VARCHAR2(30) := 'RESP_VAL_RSUP_PERC';
17   	cst_cah_hist_dt		CONSTANT	VARCHAR2(30) := 'RESP_VAL_CAH_HIST_DT';
18   	cst_insert		CONSTANT	VARCHAR2(1) := 'I';
19   	cst_delete		CONSTANT	VARCHAR2(1) := 'D';
20   BEGIN
21   DECLARE
22 	L_ROWID VARCHAR2(25);
23   BEGIN
24   	IF p_table_name IN (cst_rsup_perc, cst_cah_hist_dt) THEN
25   		IF p_insert_delete_ind = cst_insert THEN
26   			-- Inserts a record into the s_disable_table_trigger
27   			-- database table.
28 
29 			IGS_GE_S_DSB_TAB_TRG_PKG.INSERT_ROW(
30 				X_ROWID => L_ROWID ,
31 				X_TABLE_NAME =>p_table_name,
32 				X_SESSION_ID => userenv('SESSIONID'),
33 				x_mode => 'R'
34 				);
35 
36   		ELSIF p_insert_delete_ind = cst_delete THEN
37   			-- Inserts a record into the s_disable_table_trigger
38   			-- database table.
39   			IGS_GE_MNT_SDTT.genp_del_sdtt(p_table_name);
40   		END IF;
41   	END IF;
42   END;
43   EXCEPTION
44 	WHEN OTHERS THEN
45 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
46 		IGS_GE_MSG_STACK.ADD;
47 		App_Exception.Raise_Exception;
48   END resp_val_ca_trg;
49   --
50   -- Validate IGS_RE_CANDIDATURE attendance history changes prior to census date.
51   FUNCTION resp_val_cah_census(
52   p_person_id IN NUMBER ,
53   p_ca_sequence_number IN NUMBER ,
54   p_effective_dt IN DATE ,
55   p_message_name OUT NOCOPY VARCHAR2 )
56   RETURN BOOLEAN AS
57   BEGIN	-- resp_val_cah_census
58   DECLARE
59   	v_ca_sca_course_cd		IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
60   	v_daiv_alias_val		IGS_CA_DA_INST_V.alias_val%TYPE;
61   	cst_unconfirm	CONSTANT
62   		IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE := 'UNCONFIRM';
63   	cst_duplicate	CONSTANT
64   		IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE := 'DUPLICATE';
65   	CURSOR c_ca IS
66   		SELECT	ca.sca_course_cd
67   		FROM	IGS_RE_CANDIDATURE ca
68   		WHERE	ca.person_id		= p_person_id	AND
69   			ca.sequence_number	= p_ca_sequence_number;
70   	CURSOR c_sua_uv_daiv_sgcc IS
71   		SELECT	daiv.alias_val
72   		FROM	IGS_EN_SU_ATTEMPT sua,
73   			IGS_PS_UNIT_VER uv,
74   			IGS_CA_DA_INST_V daiv,
75   			IGS_GE_S_GEN_CAL_CON sgcc
76   		WHERE	sua.person_id		= p_person_id			AND
77   			sua.course_cd		= v_ca_sca_course_cd		AND
78   			sua.unit_attempt_status NOT IN (
79   							cst_unconfirm,
80   							cst_duplicate)		AND
81   			sua.unit_cd		= uv.unit_cd			AND
82   			sua.version_number	= uv.version_number		AND
83   			uv.research_unit_ind	= 'Y'				AND
84   			sua.cal_type		= daiv.cal_type			AND
85   			sua.ci_sequence_number	= daiv.ci_sequence_number	AND
86   			daiv.dt_alias		= sgcc.census_dt_alias		AND
87   			sgcc.s_control_num	= 1				AND
88   			p_effective_dt		<= daiv.alias_val		AND
89   			daiv.alias_val		< trunc(SYSDATE);
90   BEGIN
91   	-- Set the default message number
92   	p_message_name := NULL;
93   	OPEN c_ca;
94   	FETCH c_ca INTO v_ca_sca_course_cd;
95   	IF c_ca%NOTFOUND OR
96   			v_ca_sca_course_cd IS NULL THEN
97   		CLOSE c_ca;
98   		RETURN TRUE;
99   	END IF;
100   	CLOSE c_ca;
101   	OPEN c_sua_uv_daiv_sgcc;
102   	FETCH c_sua_uv_daiv_sgcc INTO v_daiv_alias_val;
103   	IF c_sua_uv_daiv_sgcc%FOUND THEN
104   		--Changes are after a census date
105   		CLOSE c_sua_uv_daiv_sgcc;
106   		p_message_name := 'IGS_RE_CAND_ATT_HIST_CHANGES';
107   		RETURN TRUE;
108   	END IF;
109   	CLOSE c_sua_uv_daiv_sgcc;
110   	-- Return the default value
111   	RETURN TRUE;
112   EXCEPTION
113   	WHEN OTHERS THEN
114   		IF c_ca%ISOPEN THEN
115   			CLOSE c_ca;
116   		END IF;
117   		IF c_sua_uv_daiv_sgcc%ISOPEN THEN
118   			CLOSE c_sua_uv_daiv_sgcc;
119   		END IF;
120   		RAISE;
121   END;
122   EXCEPTION
123 	WHEN OTHERS THEN
124 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
125 		IGS_GE_MSG_STACK.ADD;
126 		App_Exception.Raise_Exception;
127   END resp_val_cah_census;
128   --
129   -- Validate IGS_RE_CANDIDATURE update.
130   FUNCTION resp_val_ca_childupd(
131   p_person_id IN NUMBER ,
132   p_ca_sequence_number IN NUMBER ,
133   p_message_name OUT NOCOPY VARCHAR2 )
134   RETURN BOOLEAN AS
135   --  Change History :
136   --  Who       When            What
137   -- stutta    05-May-2004   Added c_awd_exists,c_incomp_awd cursors and modified logic to return false
138   --                         only if a completed program attempt has all its awards completed.(Bug #3577988)
139   BEGIN	-- resp_val_ca_childupd
140   	-- This module validates the update of IGS_RE_CANDIDATURE child details.
141   	-- Validations are:
142   	-- IGS_RE_CANDIDATURE child details cannot be updated if
143   	-- IGS_EN_STDNT_PS_ATT.course_attempt_status is 'COMPLETED' with all awards completed.
144     -- If atleast one award is incomplete or no award is associated, update is allowed.
145   DECLARE
146   	cst_completed	CONSTANT	VARCHAR2(10) := 'COMPLETED';
147   	v_sca_course_cd			IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
148   	v_course_attempt_status		IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
149     v_dummy VARCHAR2(1);
150 
151   	CURSOR	c_ca IS
152   		SELECT 	ca.sca_course_cd
153   		FROM	IGS_RE_CANDIDATURE ca
154   		WHERE	ca.person_id 		= p_person_id AND
155    			ca.sequence_number 	= p_ca_sequence_number;
156   	CURSOR c_sca (
157   		cp_sca_course_cd	IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
158   		SELECT	sca.course_attempt_status
159   		FROM	IGS_EN_STDNT_PS_ATT sca
160   		WHERE	sca.person_id = p_person_id AND
161   			sca.course_cd = cp_sca_course_cd;
162     CURSOR c_awd_exists(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
163                            cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE) IS
164        SELECT 'x'
165        FROM igs_en_spa_awd_aim
166        WHERE person_id = cp_person_id
167        AND      course_cd = cp_course_cd
168        AND  ( 	end_dt IS NULL OR
169               	(end_dt IS NOT NULL AND complete_ind = 'Y')
170             );
171       CURSOR c_incomp_awd(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
172                           cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE) IS
173       SELECT 'x'
174       FROM igs_en_spa_awd_aim
175       WHERE person_id =  cp_person_id
176       AND course_cd = cp_course_cd
177       AND NVL(complete_ind,'N') = 'N'
178       AND end_dt IS NULL;
179 
180   BEGIN
181   	p_message_name := NULL;
182   	OPEN c_ca;
183   	FETCH c_ca INTO v_sca_course_cd;
184   	IF c_ca%NOTFOUND THEN
185   			--Invalid parameters, handled elsewhere
186   		CLOSE c_ca;
187   		RETURN TRUE;
188   	END IF;
189   	CLOSE c_ca;
190   	IF v_sca_course_cd IS NOT NULL THEN
191   		OPEN c_sca(
192   				v_sca_course_cd);
193   		FETCH c_sca INTO v_course_attempt_status;
194   		IF c_sca%NOTFOUND THEN
195   			CLOSE c_sca;
196   			--This should not occur, this will be handled by database integrity
197   			RETURN TRUE;
198   		END IF;
199   		CLOSE c_sca;
200   		IF v_course_attempt_status = cst_completed THEN
201           			OPEN c_awd_exists(p_person_id,v_sca_course_cd);
202                     FETCH c_awd_exists INTO v_dummy;
203                     IF c_awd_exists%FOUND THEN
204                     	OPEN c_incomp_awd(p_person_id,v_sca_course_cd);
205                         FETCH c_incomp_awd INTO v_dummy;
206                     	IF c_incomp_awd%FOUND THEN
207                     		CLOSE c_awd_exists;
208                     		CLOSE c_incomp_awd;
209                     		RETURN TRUE;
210                     	ELSE
211                     		p_message_name := 'IGS_RE_CANT_UPD_DET_WHEN_COUR';
212                     		CLOSE c_awd_exists;
213                     		CLOSE c_incomp_awd;
214                     		RETURN FALSE;
215                     	END IF;
216                     ELSE
217                     	CLOSE c_awd_exists;
218                     	RETURN TRUE;
219                     END IF;
220 
221   		END IF;
222   	END IF;
223   	RETURN TRUE;
224   EXCEPTION
225   	WHEN OTHERS THEN
226   		IF (c_ca%ISOPEN) THEN
227   			CLOSE c_ca;
228   		END IF;
229   		IF (c_sca%ISOPEN) THEN
230   			CLOSE c_sca;
231   		END IF;
232   		RAISE;
233   END;
234   EXCEPTION
235 	WHEN OTHERS THEN
236 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
237 		IGS_GE_MSG_STACK.ADD;
238 		App_Exception.Raise_Exception;
239   END resp_val_ca_childupd;
240   --
241   -- Validate IGS_RE_CANDIDATURE attendance history dates.
242   FUNCTION resp_val_cah_hist_dt(
243   p_person_id IN NUMBER ,
244   p_ca_sequence_number IN NUMBER ,
245   p_validate_first_hist_ind IN VARCHAR2 ,
246   p_message_name OUT NOCOPY VARCHAR2 )
247   RETURN BOOLEAN AS
248   BEGIN 	-- resp_val_cah_hist_dt
249   	-- This module validates for IGS_RE_CDT_ATT_HIST for the IGS_RE_CANDIDATURE. The
250   	-- following is validated:
251   	-- * first hist_start_dt = IGS_EN_STDNT_PS_ATT.commencement_dt
252   	-- * IGS_RE_CDT_ATT_HIST do not overlap or have gaps ie. history is
253   	--   continuous.
254          -------------------------------------------------------------------------------------------
255   --Change History:
256   --Who         When            What
257 
258   --svanukur    15-apr-2004     BUG no 3453123. Removed the check for commencement date not equal to
259   --                            history start date; moved this to the IGSRE013.pld instead
260   -------------------------------------------------------------------------------------------
261   DECLARE
262   	v_sca_commencement_dt			IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
263   	v_last_hist_end_dt			IGS_RE_CDT_ATT_HIST.hist_end_dt%TYPE;
264   	CURSOR c_cah IS
265   		SELECT	cah.person_id,
266   			cah.ca_sequence_number,
267   			cah.hist_start_dt,
268   			cah.hist_end_dt
269   		FROM	IGS_RE_CDT_ATT_HIST	cah
270   		WHERE	cah.person_id		= p_person_id AND
271   			cah.ca_sequence_number	= p_ca_sequence_number
272   		ORDER BY cah.hist_start_dt ASC;
273   	CURSOR c_ca_sca(
274   			cp_person_id		IGS_RE_CDT_ATT_HIST.person_id%TYPE,
275   			cp_ca_sequence_number	IGS_RE_CDT_ATT_HIST.ca_sequence_number%TYPE) IS
276   		SELECT	sca.commencement_dt
277   		FROM	IGS_RE_CANDIDATURE		ca,
278   			IGS_EN_STDNT_PS_ATT	sca
279   		WHERE	ca.person_id		= cp_person_id AND
280   			ca.sequence_number	= cp_ca_sequence_number AND
281   			ca.person_id		= sca.person_id AND
282   			ca.sca_course_cd	= sca.course_cd;
283   BEGIN
284   	-- Set the default message number
285   	p_message_name := NULL;
286   	FOR v_cah_rec IN c_cah LOOP
287   		IF c_cah%ROWCOUNT = 1 THEN
288   			IF p_validate_first_hist_ind = 'Y' THEN
289   				OPEN c_ca_sca(
290   						v_cah_rec.person_id,
291   						v_cah_rec.ca_sequence_number);
292   				FETCH c_ca_sca INTO v_sca_commencement_dt;
293   				IF c_ca_sca%NOTFOUND OR
294   						v_sca_commencement_dt IS NULL THEN
295   					CLOSE c_ca_sca;
296   					p_message_name := 'IGS_RE_CAND_ATTEND_NOT_RELEV';
297   					RETURN FALSE;
298   				END IF;
299   				CLOSE c_ca_sca;
300   				END IF;
301   			v_last_hist_end_dt := v_cah_rec.hist_end_dt;
302   		ELSE
303   			IF TRUNC(v_cah_rec.hist_start_dt) <>
304   					TRUNC(v_last_hist_end_dt + 1) THEN
305   				p_message_name := 'IGS_RE_CAND_ATTEND_NOT_CONTIN';
306   				RETURN FALSE;
307   			END IF;
308   			v_last_hist_end_dt := v_cah_rec.hist_end_dt;
309   		END IF;
310   	END LOOP;
311   	RETURN TRUE;
312   EXCEPTION
313   	WHEN OTHERS THEN
314   		IF c_cah%ISOPEN THEN
315   			CLOSE c_cah;
316   		END IF;
317   		IF c_ca_sca%ISOPEN THEN
318   			CLOSE c_ca_sca;
319   		END IF;
320   		RAISE;
321   END;
322   EXCEPTION
323 	WHEN OTHERS THEN
324 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
325 		IGS_GE_MSG_STACK.ADD;
326 		App_Exception.Raise_Exception;
327   END resp_val_cah_hist_dt;
328   --
329   -- Validate IGS_RE_CANDIDATURE attendance history insert.
330   FUNCTION resp_val_cah_ca_ins(
331   p_person_id IN NUMBER ,
332   p_ca_sequence_number IN NUMBER ,
333   p_sca_course_cd IN VARCHAR2 ,
334   p_commencement_dt OUT NOCOPY DATE ,
335   p_attendance_type OUT NOCOPY VARCHAR2 ,
336   p_message_name OUT NOCOPY VARCHAR2 )
337   RETURN BOOLEAN AS
338   BEGIN 	-- resp_val_cah_ca_ins
339   	-- This module validates IGS_RE_CDT_ATT_HIST insert in the context of
340   	-- IGS_RE_CANDIDATURE. The following is validated.
341   	-- * IGS_RE_CANDIDATURE.sca_course_cd must exist.
342   	-- * research IGS_RE_CANDIDATURE IGS_EN_STDNT_PS_ATT.student_confirmed_ind is
343   	-- 'Y' and IGS_EN_STDNT_PS_ATT.commencement_dt exists.
344   DECLARE
345   	v_sca_course_cd			IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
346   	v_sca_student_confirmed_ind
347   					IGS_EN_STDNT_PS_ATT.student_confirmed_ind%TYPE;
348   	v_sca_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
349   	v_sca_attendance_type		IGS_EN_STDNT_PS_ATT.attendance_type%TYPE;
350   	CURSOR c_ca IS
351   		SELECT 	ca.sca_course_cd
352   		FROM 	IGS_RE_CANDIDATURE		ca
353   		WHERE	ca.person_id 		= p_person_id AND
354   			ca.sequence_number 	= p_ca_sequence_number;
355   	CURSOR c_sca(cp_sca_course_cd	 IGS_RE_CANDIDATURE.sca_course_cd%TYPE)
356   		IS
357   		SELECT	sca.student_confirmed_ind,
358   			sca.commencement_dt,
359   			sca.attendance_type
360   		FROM 	IGS_EN_STDNT_PS_ATT 	sca
361   		WHERE	sca.person_id 		= p_person_id AND
362   			sca.course_cd 		= cp_sca_course_cd;
363   BEGIN
364   	p_message_name := NULL;
365   	p_commencement_dt := NULL;
366   	p_attendance_type := NULL;
367   	IF p_sca_course_cd IS NULL THEN
368   		-- Determine if student IGS_PS_COURSE attempt exists for the research
369   		-- IGS_RE_CANDIDATURE
370   		OPEN c_ca;
371   		FETCH c_ca INTO v_sca_course_cd;
372   		IF c_ca%NOTFOUND THEN
373   			-- Invalid parameters this will be handled elsewhere
374   			CLOSE c_ca;
375   			RETURN TRUE;
376   		END IF;
377   		CLOSE c_ca;
378   		IF v_sca_course_cd IS NULL THEN
379   			-- Changes to IGS_RE_CANDIDATURE attendance history are not recorded while
380   			-- IGS_RE_CANDIDATURE is only associated with an admission IGS_PS_COURSE application
381   			p_message_name := 'IGS_RE_CAND_STILL_UNDER_PROC';
382   			RETURN FALSE;
383   		END IF;
384   	ELSE
385   		v_sca_course_cd := p_sca_course_cd;
386   	END IF;
387   	OPEN c_sca(v_sca_course_cd);
388   	FETCH c_sca INTO
389   			v_sca_student_confirmed_ind,
390   			v_sca_commencement_dt,
391   			v_sca_attendance_type;
392   	IF c_sca%NOTFOUND THEN
393   		-- Invalid parameters, this will be handled elsewhere
394   		CLOSE c_sca;
395   		RETURN TRUE;
396   	END IF;
397   	CLOSE c_sca;
398   	IF v_sca_student_confirmed_ind = 'N' THEN
399   		p_message_name := 'IGS_RE_CHK_RSRCH_CAND_HISTOR';
400   		RETURN FALSE;
401   	END IF;
402   	IF v_sca_commencement_dt IS NULL THEN
403   		p_message_name := 'IGS_RE_CANT_INS_CAND_ATTEND';
404   		RETURN FALSE;
405   	END IF;
406   	p_commencement_dt := v_sca_commencement_dt;
407   	p_attendance_type := v_sca_attendance_type;
408   	RETURN TRUE;
409   EXCEPTION
410   	WHEN OTHERS THEN
411   		IF c_ca%ISOPEN THEN
412   			CLOSE c_ca;
413   		END IF;
414   		IF c_sca%ISOPEN THEN
415   			CLOSE c_sca;
416   		END IF;
417   		RAISE;
418   END;
419   EXCEPTION
420 	WHEN OTHERS THEN
421 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
422 		IGS_GE_MSG_STACK.ADD;
423 		App_Exception.Raise_Exception;
424   END resp_val_cah_ca_ins;
425   --
426   -- Validate IGS_RE_CANDIDATURE attendance hist start date and SCA commencement.
427   FUNCTION resp_val_cah_comm(
428   p_person_id IN NUMBER ,
429   p_ca_sequence_number IN NUMBER ,
430   p_sca_course_cd IN VARCHAR2 ,
431   p_commencement_dt IN DATE ,
432   p_message_name OUT NOCOPY VARCHAR2 )
433   RETURN BOOLEAN AS
434   BEGIN	-- resp_val_cah_comm
435   	-- Description: This module validates that the first IGS_RE_CDT_ATT_HIST.
436   	-- hist_start_dt is the same as the research IGS_RE_CANDIDATURE IGS_EN_STDNT_PS_ATT
437   	-- commencement_dt.
438   	-- This module currently only returns a warning.
439   DECLARE
440   	v_ca_sequence_number		IGS_RE_CANDIDATURE.sequence_number%TYPE;
441   	v_cah_hist_start_dt		IGS_RE_CDT_ATT_HIST.hist_start_dt%TYPE;
442   	CURSOR	c_ca IS
443   		SELECT 	ca.sequence_number
444   		FROM 	IGS_RE_CANDIDATURE 		ca
445   		WHERE	ca.person_id 		= p_person_id AND
446   			ca.sca_course_cd 	= p_sca_course_cd;
447   	CURSOR	c_cah(
448   		cp_ca_sequence_number		IGS_RE_CANDIDATURE.sequence_number%TYPE)IS
449   		SELECT 	 cah.hist_start_dt
450   		FROM 	 IGS_RE_CDT_ATT_HIST 	cah
451   		WHERE	 cah.person_id		= p_person_id AND
452   			 cah.ca_sequence_number = cp_ca_sequence_number
453   		ORDER BY cah.hist_start_dt;
454   BEGIN
455   	p_message_name := NULL;
456   	IF (p_commencement_dt) IS NOT NULL THEN
457   		IF (p_ca_sequence_number) IS NULL THEN
458   			OPEN c_ca;
459   			FETCH c_ca INTO v_ca_sequence_number;
460   			IF (c_ca%NOTFOUND) THEN
461   					CLOSE c_ca;
462   			--Student IGS_PS_COURSE attempt does not have IGS_RE_CANDIDATURE details, or
463   			--Parameters are invalid
464   				p_message_name := NULL;
465   				RETURN TRUE;
466   			END IF;
467   			CLOSE c_ca;
468   		ELSE
469   			v_ca_sequence_number := p_ca_sequence_number;
470   		END IF;
471   		OPEN c_cah(
472   			v_ca_sequence_number);
473   		FETCH c_cah INTO v_cah_hist_start_dt;
474   		IF (c_cah%NOTFOUND) THEN
475   				CLOSE c_cah;
476   			--No histories, therefore all is valid
477   			p_message_name := NULL;
478   			RETURN TRUE;
479   		END IF;
480   		IF (v_cah_hist_start_dt <> p_commencement_dt) THEN
481   			--Warn that commencement date and first history start date do not match
482   			p_message_name := 'IGS_RE_CHK_CAND_ATND_HIST_DT';
483   			RETURN TRUE;
484   		END IF;
485   		CLOSE c_cah;
486   	END IF;
487   	RETURN TRUE;
488   END;
489   EXCEPTION
490 	WHEN OTHERS THEN
491 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
492 		IGS_GE_MSG_STACK.ADD;
493 		App_Exception.Raise_Exception;
494   END resp_val_cah_comm;
495   --
496   -- Validate IGS_RE_CANDIDATURE attendance history end date.
497   FUNCTION resp_val_cah_end_dt(
498   p_person_id IN NUMBER ,
499   p_ca_sequence_number IN NUMBER ,
500   p_hist_start_dt IN DATE ,
501   p_hist_end_dt IN DATE ,
502   p_message_name OUT NOCOPY VARCHAR2 )
503   RETURN BOOLEAN AS
504   BEGIN	-- resp_val_cah_end_dt
505   	-- Description: This module validates IGS_RE_CDT_ATT_HIST.hist_end_dt.
506   	-- Validations are:
507   	-- *Hist_end_dt >= hist_start_dt and < current date.
508   DECLARE
509   BEGIN
510   	p_message_name := NULL;
511   	IF p_hist_end_dt >= TRUNC(SYSDATE) THEN
512   		p_message_name := 'IGS_RE_HIST_EN_DT_LT_CURR_DT';
513   		RETURN FALSE;
514   	END IF;
515   	IF (p_hist_end_dt < p_hist_start_dt) THEN
516   		p_message_name := 'IGS_RE_HIST_END_DT_GE_ST_DT';
517   		RETURN FALSE;
518   	END IF;
519   	RETURN TRUE;
520   END;
521   EXCEPTION
522 	WHEN OTHERS THEN
523 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
524 		IGS_GE_MSG_STACK.ADD;
525 		App_Exception.Raise_Exception;
526   END resp_val_cah_end_dt;
527  END IGS_RE_VAL_CAH;