DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GR_VAL_GAC

Source


1 PACKAGE BODY IGS_GR_VAL_GAC AS
2 /* $Header: IGSGR08B.pls 115.6 2002/11/29 00:40:56 nsidana ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    27-AUG-2001     Bug No. 1956374 .The function GRDP_VAL_ACUSG_CLOSE removed
7   --smadathi    27-AUG-2001     Bug No. 1956374 .The function grdp_val_awc_closed removed
8   -------------------------------------------------------------------------------------------
9   -- Validate graduand award ceremony insert.
10   FUNCTION grdp_val_gac_insert(
11   p_person_id  IGS_GR_AWD_CRMN.person_id%TYPE ,
12   p_create_dt  IGS_GR_AWD_CRMN.create_dt%TYPE ,
13   p_message_name OUT NOCOPY VARCHAR2 )
14   RETURN BOOLEAN AS
15   BEGIN	-- grdp_val_gac_insert
16   	-- Description: This routine validates inserting a graduand_award_ceremony
17   	-- record based on the graduand details.
18   DECLARE
19   	v_gr_rec		IGS_GR_GRADUAND.s_graduand_type%TYPE;
20   	cst_unknown		CONSTANT VARCHAR2(10) := 'UNKNOWN';
21   	cst_attending		CONSTANT VARCHAR2(10) := 'ATTENDING';
22   	cst_inabsentia		CONSTANT VARCHAR2(10) := 'INABSENTIA';
23   	CURSOR	c_gr IS
24   		SELECT	'X'
25   		FROM 	IGS_GR_GRADUAND		gr
26   		WHERE	gr.person_id		= p_person_id AND
27   			gr.create_dt 		= p_create_dt AND
28   			gr.s_graduand_type 	NOT IN (cst_unknown,
29   						cst_attending,
30   						cst_inabsentia);
31   BEGIN
32   	p_message_name := NULL;
33   	IF p_person_id IS NULL OR
34      			p_create_dt IS NULL THEN
35   		RETURN TRUE;
36   	END IF;
37   	OPEN c_gr;
38   	FETCH c_gr INTO v_gr_rec;
39   	IF (c_gr%FOUND) THEN
40   		CLOSE c_gr;
41   		p_message_name := 'IGS_GR_TYPE_ATT_INABS_UNKNOWN';
42   		RETURN FALSE;
43   	END IF;
44   	CLOSE c_gr;
45   	RETURN TRUE;
46   END;
47   EXCEPTION
48   	WHEN OTHERS THEN
49        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
50        		IGS_GE_MSG_STACK.ADD;
51        		App_Exception.Raise_Exception;
52   END grdp_val_gac_insert;
53   --
54   -- Validate inserting or updating a graduand award ceremony.
55   FUNCTION grdp_val_gac_iu(
56   p_grd_cal_type  IGS_GR_AWD_CRMN.grd_cal_type%TYPE ,
57   p_grd_ci_sequence_number  IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE ,
58   p_ceremony_number  IGS_GR_AWD_CRMN.ceremony_number%TYPE ,
59   p_message_name OUT NOCOPY VARCHAR2 )
60   RETURN BOOLEAN AS
61   BEGIN	-- grdp_val_gac_iu
62   	-- Validate that the insert or update of a graduand_award_ceremony record
63   	--	does not fall outside the graduation_ceremony update window.
64   DECLARE
65   	CURSOR c_crd IS
66   		SELECT	crd.start_dt_alias,
67   			crd.start_dai_sequence_number,
68   			crd.end_dt_alias,
69   			crd.end_dai_sequence_number
70   		FROM	IGS_GR_CRMN_ROUND		crd
71   		WHERE	crd.grd_cal_type		= p_grd_cal_type AND
72   			crd.grd_ci_sequence_number	= p_grd_ci_sequence_number;
73   	v_crd_rec	c_crd%ROWTYPE;
74   	CURSOR	c_gc IS
75   		SELECT	gc.ceremony_dt_alias,
76   			gc.ceremony_dai_sequence_number,
77   			gc.closing_dt_alias,
78   			gc.closing_dai_sequence_number
79   		FROM	IGS_GR_CRMN	gc
80   		WHERE	gc.grd_cal_type			= p_grd_cal_type AND
81   			gc.grd_ci_sequence_number 	= p_grd_ci_sequence_number AND
82   			gc.ceremony_number		= p_ceremony_number;
83   	v_gc_rec	c_gc%ROWTYPE;
84   	v_start_dt	DATE DEFAULT NULL;
85   	v_end_dt	DATE DEFAULT NULL;
86   	v_ceremony_dt	DATE DEFAULT NULL;
87   	v_closing_dt	DATE DEFAULT NULL;
88   BEGIN
89   	-- Set the default message number
90   	p_message_name := NULL;
91   	IF p_grd_cal_type IS NULL OR
92   			p_grd_ci_sequence_number IS NULL OR
93   			p_ceremony_number IS NULL THEN
94   		RETURN TRUE;
95   	END IF;
96   	OPEN c_crd;
97   	FETCH c_crd INTO v_crd_rec;
98   	IF c_crd%FOUND THEN
99   	CLOSE c_crd;
100   		v_start_dt := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(
101   						v_crd_rec.start_dt_alias,
102   						v_crd_rec.start_dai_sequence_number,
103   						p_grd_cal_type,
104   						p_grd_ci_sequence_number);
105   		v_end_dt := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(
106   						v_crd_rec.end_dt_alias,
107   						v_crd_rec.end_dai_sequence_number,
108   						p_grd_cal_type,
109   						p_grd_ci_sequence_number);
110   		IF v_start_dt IS NULL OR
111   				v_end_dt IS NULL THEN
112   			p_message_name := NULL;
113   			RETURN TRUE;
114   		END IF;
115   		IF TRUNC(SYSDATE) < TRUNC(v_start_dt) OR
116   				TRUNC(SYSDATE) > TRUNC(v_end_dt) THEN
117   			p_message_name := 'IGS_GR_INVALID_PROC_PERIOD';
118   			RETURN FALSE;
119   		END IF;
120   	ELSE
121   	CLOSE c_crd;
122   	END IF;
123   	OPEN c_gc;
124   	FETCH c_gc INTO v_gc_rec;
125   	IF c_gc %FOUND THEN
126   	CLOSE c_gc;
127   		v_ceremony_dt := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(
128   						v_gc_rec.ceremony_dt_alias,
129   						v_gc_rec.ceremony_dai_sequence_number,
130   						p_grd_cal_type,
131   						p_grd_ci_sequence_number);
132   		v_closing_dt := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(
133   						v_gc_rec.closing_dt_alias,
134   						v_gc_rec.closing_dai_sequence_number,
135   						p_grd_cal_type,
136   						p_grd_ci_sequence_number);
137   		IF v_ceremony_dt IS NULL OR
138   				v_closing_dt IS NULL THEN
139   			p_message_name := NULL;
140   			RETURN TRUE;
141   		END IF;
142   		IF TRUNC(SYSDATE) > TRUNC(v_ceremony_dt) THEN
143   			p_message_name := 'IGS_GR_INV_DT_GRAD_CERM';
144   			RETURN TRUE;
145   		END IF;
146   		IF TRUNC(SYSDATE) > TRUNC(v_closing_dt) THEN
147   			p_message_name := 'IGS_GR_CLOSING_DT_REACHED';
148   			RETURN TRUE;
149   		END IF;
150   	ELSE
151   	CLOSE c_gc;
152   	END IF;
153   	-- Return the default value
154   	RETURN TRUE;
155   EXCEPTION
156   	WHEN OTHERS THEN
157   		IF c_crd %ISOPEN THEN
158   			CLOSE c_crd;
159   		END IF;
160   		IF c_gc %ISOPEN THEN
161   			CLOSE c_gc;
162   		END IF;
163   		RAISE;
164   END;
165   EXCEPTION
166   	WHEN OTHERS THEN
167        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
168        		IGS_GE_MSG_STACK.ADD;
169        		App_Exception.Raise_Exception;
170   END grdp_val_gac_iu;
171   --
172   -- Validate Graduand Award Ceremony required details have been specified.
173   FUNCTION grdp_val_gac_rqrd(
174   p_award_course_cd  IGS_GR_AWD_CRMN.award_course_cd%TYPE ,
175   p_award_crs_version_number  IGS_GR_AWD_CRMN.award_crs_version_number%TYPE ,
176   p_award_cd  IGS_GR_AWD_CRMN.award_cd%TYPE ,
177   p_us_group_number  IGS_GR_AWD_CRMN.us_group_number%TYPE ,
178   p_academic_dress_rqrd_ind  VARCHAR2 DEFAULT 'N',
179   p_academic_gown_size  VARCHAR2 ,
180   p_academic_hat_size  VARCHAR2 ,
181   p_message_name OUT NOCOPY VARCHAR2 )
182   RETURN BOOLEAN AS
183   BEGIN	-- grdp_val_gac_rqrd
184   	-- Validate that the graduand_award_ceremony record required details;
185   	-- 	us_group_number can only be specified when a course award
186   	--	is being conferred.
187   DECLARE
188   BEGIN
189   	-- Set the default message number
190   	p_message_name := NULL;
191   	IF p_award_cd IS NULL OR
192   		p_academic_dress_rqrd_ind IS NULL then
193   		RETURN TRUE;
194   	END IF;
195   	IF p_us_group_number IS NOT NULL THEN
196   		IF p_award_course_cd IS NULL AND
197   			p_award_crs_version_number IS NULL THEN
198   			p_message_name := 'IGS_GR_UNT_GRP_CANNNOT_BE_SET';
199   			RETURN FALSE;
200   		END IF;
201   	END IF;
202   	IF p_academic_dress_rqrd_ind = 'N' THEN
203   		IF p_academic_gown_size IS NOT NULL OR
204   			p_academic_hat_size IS NOT NULL THEN
205   			p_message_name := 'IGS_GR_SET_DRESS_INDICATOR';
206   			RETURN FALSE;
207   		END IF;
208   	END IF;
209   	-- Return the default value
210   	RETURN TRUE;
211   EXCEPTION
212   	WHEN OTHERS THEN
213   		RAISE;
214   END;
215   EXCEPTION
216   	WHEN OTHERS THEN
217        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
218        		IGS_GE_MSG_STACK.ADD;
219        		App_Exception.Raise_Exception;
220   END grdp_val_gac_rqrd;
221   --
222   -- Validate graduand seat number is unique for the person.
223   FUNCTION grdp_val_gac_seat(
224   p_person_id  IGS_GR_AWD_CRMN.person_id%TYPE ,
225   p_grd_cal_type  IGS_GR_AWD_CRMN.grd_cal_type%TYPE ,
226   p_grd_ci_sequence_number  IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE ,
227   p_ceremony_number  IGS_GR_AWD_CRMN.ceremony_number%TYPE ,
228   p_graduand_seat_number  IGS_GR_AWD_CRMN.graduand_seat_number%TYPE ,
229   p_message_name OUT NOCOPY VARCHAR2 )
230   RETURN BOOLEAN AS
231   BEGIN	-- grdp_val_gac_seat
232   	-- This routine validates the allocation of seats to graduands.  It checks
233   	-- that the same seat isn't allocated to more than one graduand at the
234   	-- same graduation ceromony.
235   DECLARE
236   	v_gac_found		VARCHAR2(1);
237   	CURSOR	c_gac IS
238   		SELECT	'x'
239   		FROM	IGS_GR_AWD_CRMN	gac
240   		WHERE	gac.grd_cal_type		= p_grd_cal_type AND
241   			gac.grd_ci_sequence_number	= p_grd_ci_sequence_number AND
242   			gac.ceremony_number		= p_ceremony_number AND
243   			gac.person_id			<> p_person_id AND
244   			gac.graduand_seat_number	= p_graduand_seat_number;
245   BEGIN
246   	-- Initialise p_message_name.
247   	p_message_name := NULL;
248   	-- Check parameters.
249   	IF p_person_id IS NULL OR
250      			p_grd_cal_type IS NULL OR
251     			p_grd_ci_sequence_number IS NULL OR
252      			p_ceremony_number IS NULL OR
253      			p_graduand_seat_number IS NULL THEN
254   		RETURN TRUE;
255   	END IF;
256   	-- Check seat number is not being used by another graduand.
257   	OPEN c_gac;
258   	FETCH c_gac INTO v_gac_found;
259   	IF c_gac%FOUND THEN
260   		CLOSE c_gac;
261   		p_message_name := 'IGS_GR_SEAT_ALREADY_ALLOCATED';
262   		RETURN FALSE;
263   	END IF;
264   	CLOSE c_gac;
265   	-- Return no error.
266   	RETURN TRUE;
267   EXCEPTION
268   	WHEN OTHERS THEN
269   		IF c_gac%ISOPEN THEN
270   			CLOSE c_gac;
271   		END IF;
272   		RAISE;
273   END;
274   EXCEPTION
275   	WHEN OTHERS THEN
276        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
277        		IGS_GE_MSG_STACK.ADD;
278        		App_Exception.Raise_Exception;
279   END grdp_val_gac_seat;
280   --
281   -- Validate Graduand  Student Unit Set Attempts.
282   FUNCTION grdp_val_gac_susa(
283   p_person_id  IGS_GR_AWD_CRMN.person_id%TYPE ,
284   p_create_dt  IGS_GR_AWD_CRMN.create_dt%TYPE ,
285   p_grd_cal_type  IGS_GR_AWD_CRMN.grd_cal_type%TYPE ,
286   p_grd_ci_sequence_number  IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE ,
287   p_course_cd  IGS_PS_COURSE.course_cd%TYPE ,
288   p_graduand_status  VARCHAR2 ,
289   p_ceremony_number  IGS_GR_AWD_CRMN.ceremony_number%TYPE ,
290   p_award_course_cd  IGS_GR_AWD_CRMN.award_course_cd%TYPE ,
291   p_award_crs_version_number  IGS_GR_AWD_CRMN.award_crs_version_number%TYPE ,
292   p_award_cd  IGS_GR_AWD_CRMN.award_cd%TYPE ,
293   p_us_group_number  IGS_GR_AWD_CRMN.us_group_number%TYPE ,
294   p_message_name OUT NOCOPY VARCHAR2 )
295   RETURN BOOLEAN AS
296   BEGIN	-- grdp_val_gac_susa
297   	-- This routine validates the award ceremony unit sets belonging to a unit
298   	-- set group match with student unit set attempts belonging to the graduand
299   	-- under the course of the award being conferred.
300   DECLARE
301   	cst_eligible	CONSTANT	VARCHAR2(10) := 'ELIGIBLE';
302   	cst_graduated	CONSTANT	VARCHAR2(10) := 'GRADUATED';
303   	cst_surrender	CONSTANT	VARCHAR2(10) := 'SURRENDER';
304   	v_incomplete_unit_sets 		BOOLEAN DEFAULT FALSE;
305   	v_rqrmnts_complete_ind		IGS_AS_SU_SETATMPT.rqrmnts_complete_ind%TYPE;
306   	v_course_cd			IGS_GR_GRADUAND.course_cd%TYPE;
307   	v_graduand_status		IGS_GR_GRADUAND.graduand_status%TYPE;
308   	v_s_graduand_status		IGS_GR_STAT.s_graduand_status%TYPE;
309   	CURSOR	c_gr IS
310   		SELECT 	gr.course_cd,
311   			gr.graduand_status
312   		FROM 	IGS_GR_GRADUAND	gr
313   		WHERE	gr.person_id = p_person_id AND
314   			gr.create_dt = p_create_dt;
315   	CURSOR	c_acus IS
316   		SELECT	acus.unit_set_cd,
317   			acus.us_version_number
318   		FROM	IGS_GR_AWD_CRM_UT_ST	acus
319   		WHERE	acus.grd_cal_type 		= p_grd_cal_type 		AND
320   			acus.grd_ci_sequence_number 	= p_grd_ci_sequence_number 	AND
321   			acus.ceremony_number 		= p_ceremony_number 		AND
322   			acus.award_course_cd 		= p_award_course_cd 		AND
323   			acus.award_crs_version_number 	= p_award_crs_version_number 	AND
324   			acus.award_cd 			= p_award_cd 			AND
325   			acus.us_group_number 		= p_us_group_number;
326   	CURSOR	c_susa (
327   		cp_course_cd			IGS_GR_GRADUAND.course_cd%TYPE,
328   		cp_unit_set_cd			IGS_GR_AWD_CRM_UT_ST.unit_set_cd%TYPE,
329   		cp_us_version_number		IGS_GR_AWD_CRM_UT_ST.us_version_number%TYPE)
330   	IS
331   		SELECT	susa.rqrmnts_complete_ind
332   		FROM 	IGS_AS_SU_SETATMPT	susa
333   		WHERE	susa.person_id 			= p_person_id 		AND
334   			susa.course_cd 			= cp_course_cd 		AND
335   			susa.unit_set_cd 		= cp_unit_set_cd	AND
336   			susa.us_version_number 		= cp_us_version_number	AND
337   			susa.student_confirmed_ind	= 'Y'			AND
338   			susa.primary_set_ind		= 'Y'			AND
339   			susa.end_dt			IS NULL;
340   	CURSOR	c_gst(
341   		cp_graduand_status		IGS_GR_GRADUAND.graduand_status%TYPE)
342   	IS
343   		SELECT	gst.s_graduand_status
344   		FROM	IGS_GR_STAT gst
345   		WHERE	gst.graduand_status = cp_graduand_status;
346   BEGIN
347   	-- 1. Check parameters :
348   	IF p_person_id IS NULL OR
349      			p_grd_cal_type 			IS NULL OR
350      			p_grd_ci_sequence_number 	IS NULL OR
351      			p_ceremony_number 		IS NULL OR
352      			p_award_course_cd 		IS NULL OR
353   	  		p_award_crs_version_number 	IS NULL OR
354      			p_award_cd 			IS NULL OR
355      			p_us_group_number 		IS NULL THEN
356   		p_message_name := NULL;
357   		RETURN TRUE;
358   	END IF;
359   	-- 2. Get the required graduand details
360   	IF p_course_cd IS NULL OR p_graduand_status IS NULL THEN
361   		OPEN c_gr;
362   		FETCH c_gr INTO v_course_cd,
363   				v_graduand_status;
364   		CLOSE c_gr;
365   	ELSE
366   		v_course_cd := p_course_cd;
367   		v_graduand_status := p_graduand_status;
368   	END IF;
369   	-- 3. Match award ceremony unit sets with student unit set attempts
370   	FOR v_acus IN c_acus LOOP
371   		OPEN c_susa(
372   				v_course_cd,
373   				v_acus.unit_set_cd,
374   				v_acus.us_version_number);
375   		FETCH c_susa INTO v_rqrmnts_complete_ind;
376   		IF c_susa%NOTFOUND THEN
377   			CLOSE c_susa;
378   			p_message_name := 'IGS_GR_NOT_ATTEMPTED_ALL_UNIT';
379   			RETURN FALSE;
380   		END IF;
381   		CLOSE c_susa;
382   		IF v_rqrmnts_complete_ind = 'N' THEN
383   			v_incomplete_unit_sets := TRUE;
384   		END IF;
385   	END LOOP;
386   	IF v_incomplete_unit_sets = TRUE THEN
387   		OPEN c_gst(
388   				v_graduand_status);
389   		FETCH c_gst INTO v_s_graduand_status;
390   		CLOSE c_gst;
391   		IF v_s_graduand_status = cst_eligible OR
392   			v_s_graduand_status = cst_graduated OR
393   			v_s_graduand_status = cst_surrender THEN
394   			p_message_name := 'IGS_GR_REQUIR_NOT_COMPLETED';
395   			RETURN FALSE;
396   		ELSE
397   			p_message_name := 'IGS_GR_INCOMPLETE_REQUIRMENTS';
398   			RETURN TRUE;
399   		END IF;
400   	END IF;
401   	-- 4. Return no error:
402   	p_message_name := NULL;
403   	RETURN TRUE;
404   EXCEPTION
405   	WHEN OTHERS THEN
406   		IF (c_gr%ISOPEN) THEN
407   			CLOSE c_gr;
408   		END IF;
409   		IF (c_acus%ISOPEN) THEN
410   			CLOSE c_acus;
411   		END IF;
412   		IF (c_susa%ISOPEN) THEN
413   			CLOSE c_susa;
414   		END IF;
415   		IF (c_gst%ISOPEN) THEN
416   			CLOSE c_gst;
417   		END IF;
418   		RAISE;
419   END;
420   EXCEPTION
421   	WHEN OTHERS THEN
422        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
423        		IGS_GE_MSG_STACK.ADD;
424        		App_Exception.Raise_Exception;
425   END grdp_val_gac_susa;
426   --
427   -- Validate Graduand Award Ceremony graduation calendar instance.
428   FUNCTION grdp_val_gac_grd_ci(
429   p_grd_cal_type  IGS_GR_AWD_CRMN.grd_cal_type%TYPE ,
430   p_grd_ci_sequence_number  IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE ,
431   p_message_name OUT NOCOPY VARCHAR2 )
432   RETURN BOOLEAN AS
433   BEGIN	-- grdp_val_gac_grd_ci
434   	-- Validate that the graduand_award_ceremony is linked
435   	-- to a ceremony_round that has an ACTIVE calendar instance.
436   DECLARE
437   	CURSOR c_ci_cs IS
438   		SELECT	'x'
439   		FROM	IGS_CA_INST	ci,
440   			IGS_CA_STAT	cs
441   		WHERE	ci.cal_type		= p_grd_cal_type AND
442   			ci.sequence_number	= p_grd_ci_sequence_number AND
443   			cs.cal_status		= ci.cal_status AND
444   			cs.s_cal_status		= 'ACTIVE';
445   	v_ci_cs_exists	VARCHAR2(1);
446   BEGIN
447   	-- Set the default message number
448   	p_message_name := NULL;
449   	IF p_grd_cal_type IS NULL OR
450   			p_grd_ci_sequence_number IS NULL THEN
451   		RETURN TRUE;
452   	END IF;
453   	OPEN c_ci_cs;
454   	FETCH c_ci_cs INTO v_ci_cs_exists;
455   	IF c_ci_cs %NOTFOUND THEN
456   		CLOSE c_ci_cs;
457   		p_message_name :='IGS_GR_CERM_CAL_ACTIVE';
458   		RETURN FALSE;
459   	END IF;
460   	CLOSE c_ci_cs;
461   	-- Return the default value
462   	RETURN TRUE;
463   EXCEPTION
464   	WHEN OTHERS THEN
465   		IF c_ci_cs %ISOPEN THEN
466   			CLOSE c_ci_cs;
467   		END IF;
468   		RAISE;
469   END;
470   EXCEPTION
471   	WHEN OTHERS THEN
472        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
473        		IGS_GE_MSG_STACK.ADD;
474        		App_Exception.Raise_Exception;
475   END grdp_val_gac_grd_ci;
476   --
477   -- Validate graduand award ceremony order in presentation is unique.
478   FUNCTION grdp_val_gac_order(
479   p_person_id IN NUMBER ,
480   p_grd_cal_type IN VARCHAR2 ,
481   p_grd_ci_sequence_number IN NUMBER ,
482   p_ceremony_number IN NUMBER ,
483   p_order_in_presentation IN NUMBER ,
484   p_message_name OUT NOCOPY VARCHAR2 )
485   RETURN BOOLEAN AS
486   BEGIN	-- grdp_val_gac_order
487   	-- Description: This routine validates the graduand award ceremony order
488   	-- in presentation is unique.
489   DECLARE
490   	v_dummy		VARCHAR2(1);
491   	CURSOR	c_gac IS
492   		SELECT	'X'
493   		FROM	IGS_GR_AWD_CRMN
494   		WHERE	grd_cal_type 			= p_grd_cal_type AND
495   			grd_ci_sequence_number		= p_grd_ci_sequence_number AND
496   			ceremony_number			= p_ceremony_number AND
497   			person_id 			<> p_person_id AND
498   			order_in_presentation		= p_order_in_presentation;
499   BEGIN
500   	p_message_name := NULL;
501   	IF p_person_id IS NULL OR
502      			p_grd_cal_type IS NULL OR
503     			p_grd_ci_sequence_number IS NULL OR
504      			p_ceremony_number IS NULL OR
505      			p_order_in_presentation IS NULL THEN
506   		RETURN TRUE;
507   	END IF;
508   	OPEN c_gac;
509   	FETCH c_gac INTO v_dummy;
510   	IF (c_gac%FOUND) THEN
511   		CLOSE c_gac;
512   		p_message_name := 'IGS_GR_PRES_ORDER_NOT_UNIQUE';
513   		RETURN FALSE;
514   	END IF;
515   	CLOSE c_gac;
516   	RETURN TRUE;
517   EXCEPTION
518   	WHEN OTHERS THEN
519   		IF (c_gac%ISOPEN) THEN
520   			CLOSE c_gac;
521   		END IF;
522   	RAISE;
523   END;
524   EXCEPTION
525   	WHEN OTHERS THEN
526        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
527        		IGS_GE_MSG_STACK.ADD;
528        		App_Exception.Raise_Exception;
529   END grdp_val_gac_order;
530 
531   -- Validate if the award ceremony unit set group is closed
532   FUNCTION grdp_val_acusg_close(
533   p_grd_cal_type  IGS_GR_AWD_CRM_US_GP.grd_cal_type%TYPE ,
534   p_grd_ci_sequence_number  IGS_GR_AWD_CRM_US_GP.grd_ci_sequence_number%TYPE ,
535   p_ceremony_number  IGS_GR_AWD_CRM_US_GP.ceremony_number%TYPE ,
536   p_award_course_cd  IGS_GR_AWD_CRM_US_GP.award_course_cd%TYPE ,
537   p_award_crs_version_number  IGS_GR_AWD_CRM_US_GP.award_crs_version_number%TYPE ,
538   p_award_cd  IGS_GR_AWD_CRM_US_GP.award_cd%TYPE ,
539   p_us_group_number  IGS_GR_AWD_CRM_US_GP.us_group_number%TYPE ,
540   p_message_name OUT NOCOPY VARCHAR2 )
541   RETURN BOOLEAN AS
542   BEGIN	-- grdp_val_acusg_close
543   	-- Description: Validate if the award ceremony unit set group is closed
544   DECLARE
545   	v_acusg_rec		IGS_GR_AWD_CRM_US_GP.closed_ind%TYPE;
546   	CURSOR	c_acusg IS
547   		SELECT	acusg.closed_ind
548   		FROM	IGS_GR_AWD_CRM_US_GP 	acusg
549   		WHERE	acusg.grd_cal_type		= p_grd_cal_type and
550   			acusg.grd_ci_sequence_number 	= p_grd_ci_sequence_number and
551   			acusg.ceremony_number 		= p_ceremony_number and
552   			acusg.award_course_cd 		= p_award_course_cd and
553   			acusg.award_crs_version_number 	=p_award_crs_version_number and
554   			acusg.award_cd			= p_award_cd and
555   			acusg.us_group_number 		= p_us_group_number and
556   			acusg.closed_ind 		='Y';
557   BEGIN
558   	p_message_name := NULL;
559   	IF p_grd_cal_type IS NULL OR
560     			p_grd_ci_sequence_number IS NULL OR
561     			p_ceremony_number IS NULL OR
562      			p_award_course_cd IS NULL OR
563   	 		p_award_crs_version_number IS NULL OR
564      			p_award_cd IS NULL OR
565      			p_us_group_number iS NULL THEN
566   		RETURN TRUE;
567   	END IF;
568   	OPEN c_acusg;
569   	FETCH c_acusg INTO v_acusg_rec;
570   	IF (c_acusg%FOUND) THEN
571   		CLOSE c_acusg;
572   		p_message_name := 'IGS_GR_AWD_CERM_GRP_CLOSED';
573   		RETURN FALSE;
574   	END IF;
575   	CLOSE c_acusg;
576   	RETURN TRUE;
577   EXCEPTION
578   	WHEN OTHERS THEN
579   		IF (c_acusg%ISOPEN) THEN
580   			CLOSE c_acusg;
581   		END IF;
582   	RAISE;
583   END;
584   EXCEPTION
585   	WHEN OTHERS THEN
586        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
587        		IGS_GE_MSG_STACK.ADD;
588        		App_Exception.Raise_Exception;
589   END grdp_val_acusg_close;
590   --
591   -- Validate a measurement code is not closed.
592   FUNCTION GRDP_VAL_MSR_CLOSED(
593   p_measurement_cd  IGS_GE_MEASUREMENT.measurement_cd%TYPE ,
594   p_message_name OUT NOCOPY VARCHAR2 )
595   RETURN BOOLEAN AS
596   BEGIN	-- GRDP_VAL_MSR_CLOSED
597   	-- Validate if the measurement is closed.
598   DECLARE
599   	CURSOR c_MSR IS
600   		SELECT	'X'
601   		FROM	IGS_GE_MEASUREMENT	msr
602   		WHERE	msr.measurement_cd	= p_measurement_cd AND
603   			msr.closed_ind		= 'Y';
604   	v_msr_exists	VARCHAR2(1);
605   BEGIN
606   	-- Set the default message number
607   	p_message_name := NULL;
608   	OPEN c_msr ;
609   	FETCH c_msr INTO  v_msr_exists ;
610   	IF c_msr %FOUND THEN
611   		CLOSE c_msr ;
612   		p_message_name := 'IGS_GR_MEASURMENT_CLOSED';
613   		RETURN FALSE;
614   	END IF;
615   	CLOSE c_msr ;
616   	-- Return the default value
617   	RETURN TRUE;
618   EXCEPTION
619   	WHEN OTHERS THEN
620   		IF c_msr %ISOPEN THEN
621   			CLOSE c_msr;
622   		END IF;
623   		RAISE;
624   END;
625   EXCEPTION
626   	WHEN OTHERS THEN
627        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
628        		IGS_GE_MSG_STACK.ADD;
629        		App_Exception.Raise_Exception;
630   END GRDP_VAL_MSR_CLOSED;
631 END IGS_GR_VAL_GAC;