DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GR_PRC_GAC

Source


1 PACKAGE BODY IGS_GR_PRC_GAC AS
2 /* $Header: IGSGR01B.pls 120.2 2006/02/21 00:56:30 sepalani noship $ */
3   --
4   -- Create graduand award ceremony records for graduands
5   FUNCTION grdp_ins_gac(
6   p_person_id IN NUMBER ,
7   p_create_dt IN DATE ,
8   p_grd_cal_type IN VARCHAR2 ,
9   p_grd_ci_sequence_number IN NUMBER ,
10   p_name_pronunciation IN VARCHAR2 ,
11   p_name_announced IN VARCHAR2 ,
12   p_academic_dress_rqrd_ind IN VARCHAR2 DEFAULT 'N',
13   p_academic_gown_size IN VARCHAR2 ,
14   p_academic_hat_size IN VARCHAR2 ,
15   p_guest_tickets_requested IN NUMBER ,
16   p_guest_tickets_allocated IN NUMBER ,
17   p_guest_seats IN VARCHAR2 ,
18   p_fees_paid_ind IN VARCHAR2 DEFAULT 'N',
19   p_special_requirements IN VARCHAR2 ,
20   p_resolve_stalemate_type IN VARCHAR2 ,
21   p_ignore_unit_sets_ind IN VARCHAR2 DEFAULT 'N',
22   p_message_name OUT NOCOPY VARCHAR2 )
23   RETURN BOOLEAN AS
24 
25   	gv_t_awc_cntr		NUMBER DEFAULT 0;
26   	gv_t_acusg_cntr		NUMBER DEFAULT 0;
27   BEGIN	-- grdp_ins_gac
28   	-- This process performs allocation of graduands to the appropriate ceremony
29   	-- for their course award and unit set(s) depending on the campus location of
30   	-- their student_course_attempt record.  The process ultimately creates
31   	-- graduand_award_ceremony records
32 		--
33 		--  Change History :
34 		--  Who             When            What
35 		--  (reverse chronological order - newest change first)
36 		--
37 		--  Nalin Kumar   18-DEC-2002    Modified grdpl_ins_gac_record procedure to fix Bug# 2690151.
38 		--                               Added the code to log message when the Graduand ceremony record is created.
39 		--
40   DECLARE
41   	-- table to hold acusg records which have matching acus and susa unit sets
42   	TYPE r_acusg_match_typ IS RECORD(
43   		grd_cal_type			IGS_GR_AWD_CRM_US_GP.grd_cal_type%TYPE,
44   		grd_ci_sequence_number
45   						IGS_GR_AWD_CRM_US_GP.grd_ci_sequence_number%TYPE,
46   		ceremony_number			IGS_GR_AWD_CRM_US_GP.ceremony_number%TYPE,
47   		award_course_cd			IGS_GR_AWD_CRM_US_GP.award_course_cd%TYPE,
48   		award_crs_version_number
49   						IGS_GR_AWD_CRM_US_GP.award_crs_version_number%TYPE,
50   		award_cd			IGS_GR_AWD_CRM_US_GP.award_cd%TYPE,
51   		us_group_number			IGS_GR_AWD_CRM_US_GP.us_group_number%TYPE,
52   		dflt_ind				IGS_AD_LOCATION_REL.dflt_ind%TYPE);
53   	r_acusg_match			r_acusg_match_typ;
54   	TYPE t_acusg_match_typ IS TABLE OF r_acusg_match%TYPE
55   		INDEX BY BINARY_INTEGER;
56   	t_acusg_match			t_acusg_match_typ;
57   	t_acusg_match_blank		t_acusg_match_typ;
58   	-- table to hold awc matching graduand award course_cd and version_num with
59   	-- links through graduation ceremony - venue - location - sca location
60   	TYPE r_awc_match_typ IS RECORD(
61   		grd_cal_type			IGS_GR_AWD_CEREMONY.grd_cal_type%TYPE,
62   		grd_ci_sequence_number		IGS_GR_AWD_CEREMONY.grd_ci_sequence_number%TYPE,
63   		ceremony_number			IGS_GR_AWD_CEREMONY.ceremony_number%TYPE,
64   		award_course_cd			IGS_GR_AWD_CEREMONY.award_course_cd%TYPE,
65   		award_crs_version_number	IGS_GR_AWD_CEREMONY.award_crs_version_number%TYPE,
66   		award_cd			IGS_GR_AWD_CEREMONY.award_cd%TYPE,
67   		dflt_ind				IGS_AD_LOCATION_REL.dflt_ind%TYPE);
68   	r_awc_match			r_awc_match_typ;
69   	TYPE t_awc_match_typ IS TABLE OF r_awc_match%TYPE
70   		INDEX BY BINARY_INTEGER;
71   	t_awc_match			t_awc_match_typ;
72   	t_awc_match_blank		t_awc_match_typ;
73   	cst_alpha	CONSTANT	VARCHAR2(5) := 'ALPHA';
74   	cst_proportion	CONSTANT	VARCHAR2(10) :='PROPORTION';
75   	v_susa_count		NUMBER;
76   	v_cntr			NUMBER;
77   	v_row_num		NUMBER;
78   	CURSOR	c_susa IS
79   		SELECT	COUNT(*)
80   		FROM	IGS_AS_SU_SETATMPT	susa,
81   			IGS_GR_GRADUAND			gr
82   		WHERE	gr.person_id 			= p_person_id			AND
83   			gr.create_dt 			= p_create_dt			AND
84   			gr.grd_cal_type 		= p_grd_cal_type		AND
85   			gr.grd_ci_sequence_number 	= p_grd_ci_sequence_number 	AND
86   			susa.person_id 			= gr.person_id			AND
87   			susa.course_cd 			= gr.course_cd			AND
88   			susa.primary_set_ind 		= 'Y'				AND
89   			susa.student_confirmed_ind 	= 'Y'				AND
90   			susa.end_dt 			IS NULL;
91   	CURSOR	c_awc IS
92   		SELECT	awc.grd_cal_type,
93   			awc.grd_ci_sequence_number,
94   			awc.ceremony_number,
95   			awc.award_course_cd,
96   			awc.award_crs_version_number,
97   			awc.award_cd,
98   			lr.dflt_ind
99   		FROM	IGS_GR_GRADUAND		gr,
100   			IGS_GR_AWD_CEREMONY		awc,
101   			IGS_EN_STDNT_PS_ATT	sca,
102   			IGS_GR_CRMN	gc,
103   			IGS_GR_VENUE				ve,
104   			IGS_AD_LOCATION_REL		lr,
105   			IGS_CA_DA_INST_V		daiv
106   		WHERE	gr.person_id 			= p_person_id			AND
107   			gr.create_dt 			= p_create_dt			AND
108   			gr.grd_cal_type 		= p_grd_cal_type		AND
109   			gr.grd_ci_sequence_number 	= p_grd_ci_sequence_number	AND
110   			sca.person_id 			= gr.person_id			AND
111   			sca.course_cd 			= gr.course_cd			AND
112   			sca.location_cd 		= lr.location_cd		AND
113   			gc.grd_cal_type 		= gr.grd_cal_type		AND
114   			gc.grd_ci_sequence_number 	= gr.grd_ci_sequence_number	AND
115   			gc.venue_cd 			= ve.venue_cd 			AND
116   			ve.exam_location_cd 		= lr.sub_location_cd		AND
117   			gc.closing_dt_alias = daiv.dt_alias			AND
118   			gc.closing_dai_sequence_number = daiv.sequence_number	AND
119   			gc.grd_cal_type = daiv.cal_type			AND
120   			gc.grd_ci_sequence_number = daiv.ci_sequence_number	AND
121   			TRUNC(SYSDATE) < TRUNC(daiv.alias_val)		AND
122   			awc.grd_cal_type 		= gc.grd_cal_type		AND
123   			awc.grd_ci_sequence_number 	= gc.grd_ci_sequence_number	AND
124   			awc.ceremony_number 		= gc.ceremony_number		AND
125   			awc.award_course_cd 		= gr.award_course_cd		AND
126   			awc.award_crs_version_number 	= gr.award_crs_version_number	AND
127   			awc.award_cd 			= gr.award_cd			AND
128   			awc.closed_ind 			= 'N'
129   		ORDER BY	awc.grd_cal_type,
130   				awc.grd_ci_sequence_number,
131   				awc.ceremony_number,
132   				awc.award_course_cd,
133   				awc.award_crs_version_number,
134   				awc.award_cd;
135   	CURSOR	c_acusg (
136   		cp_grd_cal_type			IGS_GR_AWD_CEREMONY.grd_cal_type%TYPE,
137   		cp_grd_ci_sequence_number	IGS_GR_AWD_CEREMONY.grd_ci_sequence_number%TYPE,
138   		cp_ceremony_number		IGS_GR_AWD_CEREMONY.ceremony_number%TYPE,
139   		cp_award_course_cd		IGS_GR_AWD_CEREMONY.award_course_cd%TYPE,
140   		cp_award_crs_version_number	IGS_GR_AWD_CEREMONY.award_crs_version_number%TYPE,
141   		cp_award_cd			IGS_GR_AWD_CEREMONY.award_cd%TYPE) IS
142   		SELECT	acusg.grd_cal_type,
143   			acusg.grd_ci_sequence_number,
144   			acusg.ceremony_number,
145   			acusg.award_course_cd,
146   			acusg.award_crs_version_number,
147   			acusg.award_cd,
148   			acusg.us_group_number
149   		FROM	IGS_GR_AWD_CRM_US_GP		acusg
150   		WHERE	acusg.grd_cal_type 		= cp_grd_cal_type		AND
151   			acusg.grd_ci_sequence_number 	= cp_grd_ci_sequence_number	AND
152   			acusg.ceremony_number 		= cp_ceremony_number		AND
153   			acusg.award_course_cd 		= cp_award_course_cd		AND
154   			acusg.award_crs_version_number 	= cp_award_crs_version_number	AND
155   			acusg.award_cd 			= cp_award_cd			AND
156   			acusg.closed_ind = 'N'						AND
157   		NOT EXISTS
158   			(SELECT	susa.unit_set_cd,
159   				susa.us_version_number
160   			FROM	IGS_AS_SU_SETATMPT	susa,
161   				IGS_GR_GRADUAND			gr
162   			WHERE	gr.person_id 			= p_person_id			AND
163   				gr.create_dt 			= p_create_dt			AND
164   				gr.grd_cal_type 		= p_grd_cal_type		AND
165   				gr.grd_ci_sequence_number 	= p_grd_ci_sequence_number 	AND
166   				susa.person_id 			= gr.person_id			AND
167   				susa.course_cd 			= gr.course_cd			AND
168   				susa.primary_set_ind 		= 'Y'				AND
169   				susa.student_confirmed_ind 	= 'Y'				AND
170   				susa.end_dt 			IS NULL
171   			MINUS
172   			SELECT	acus.unit_set_cd,
173   				acus.us_version_number
174   			FROM	IGS_GR_AWD_CRM_UT_ST	acus
175   			WHERE	acus.grd_cal_type 		= acusg.grd_cal_type 			AND
176   				acus.grd_ci_sequence_number	= acusg.grd_ci_sequence_number 		AND
177   				acus.ceremony_number 		= acusg.ceremony_number 		AND
178   				acus.award_course_cd 		= acusg.award_course_cd 		AND
179   				acus.award_crs_version_number 	= acusg.award_crs_version_number 	AND
180   				acus.award_cd 			= acusg.award_cd 			AND
181   				acus.us_group_number 		= acusg.us_group_number) 		AND
182   		NOT EXISTS
183   			(SELECT	acus.unit_set_cd,
184   				acus.us_version_number
185   			FROM	IGS_GR_AWD_CRM_UT_ST	acus
186   			WHERE	acus.grd_cal_type 		= acusg.grd_cal_type 			AND
187   				acus.grd_ci_sequence_number 	= acusg.grd_ci_sequence_number 		AND
188   				acus.ceremony_number 		= acusg.ceremony_number 		AND
189   				acus.award_course_cd 		= acusg.award_course_cd 		AND
190   				acus.award_crs_version_number 	= acusg.award_crs_version_number 	AND
191   				acus.award_cd 			= acusg.award_cd 			AND
192   				acus.us_group_number 		= acusg.us_group_number
193   			MINUS
194   			SELECT	susa.unit_set_cd,
195   				susa.us_version_number
196   			FROM	IGS_AS_SU_SETATMPT	susa,
197   				IGS_GR_GRADUAND			gr
198   			WHERE	gr.person_id 			= p_person_id			AND
199   				gr.create_dt 			= p_create_dt 			AND
200   				gr.grd_cal_type 		= p_grd_cal_type 		AND
201   				gr.grd_ci_sequence_number 	= p_grd_ci_sequence_number 	AND
202   				susa.person_id 			= gr.person_id 			AND
203   				susa.course_cd 			= gr.course_cd 			AND
204   				susa.primary_set_ind 		= 'Y'				AND
205   				susa.student_confirmed_ind 	= 'Y'				AND
206   				susa.end_dt 			IS NULL)
207   		ORDER BY	acusg.grd_cal_type,
208   				acusg.grd_ci_sequence_number,
209   				acusg.ceremony_number,
210   				acusg.award_course_cd,
211   				acusg.award_crs_version_number,
212   				acusg.award_cd,
213   				acusg.us_group_number;
214   	PROCEDURE grdpl_rslv_stlmt_default (
215   			p_row_num OUT NOCOPY NUMBER)
216   	AS
217   		-- 8A. Internal procedure to resolve ceremony stalemates by using
218   		-- the ceremony at the default graduation location for the students
219   		-- campus location if one exists.
220   	BEGIN
221   	DECLARE
222   		v_row_num	NUMBER;
223   		v_row_num_new	NUMBER;
224   		v_dflt_count	NUMBER;
225   	BEGIN
226   		p_row_num := 0;
227   		v_dflt_count := 0;
228   		FOR v_row_num IN 1.. gv_t_acusg_cntr LOOP
229   			IF t_acusg_match(v_row_num).dflt_ind = 'Y' THEN
230   				p_row_num := v_row_num;
231   				v_dflt_count := v_dflt_count + 1;
232   			END IF;
233   		END LOOP;
234   		IF v_dflt_count > 1 THEN
235   			p_row_num := 0;
236   			v_row_num_new := 0;
237   			-- Remove the non-default location ceremonies from the set
238   			FOR v_row_num IN 1.. gv_t_acusg_cntr LOOP
239   				IF t_acusg_match(v_row_num).dflt_ind = 'Y' THEN
240   					v_row_num_new := v_row_num_new + 1;
241   					t_acusg_match(v_row_num_new) := t_acusg_match(v_row_num);
242   				END IF;
243   			END LOOP;
244   			gv_t_acusg_cntr := v_row_num_new;
245   		END IF;
246   	END;
247   	EXCEPTION
248   		WHEN OTHERS THEN
249 	       		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
250 	       		IGS_GE_MSG_STACK.ADD;
251        			App_Exception.Raise_Exception;
252   	END grdpl_rslv_stlmt_default;
253   	PROCEDURE grdpl_rslv_stlmt_alpha (
254   	 	p_row_number OUT NOCOPY NUMBER)
255   	AS
256   	BEGIN
257   		--Internal procedure to resolve ceremony stalemates by splitting the
258   		-- ceremonies alphabetically.  It passes back the row number for the
259   		-- appropriate record in the t_acusg_match PL/SQL table.
260   	DECLARE
261   		v_letter_number		NUMBER;
262   		CURSOR	c_pe IS
263   			SELECT	(ASCII(UPPER(pe.last_name)) - 65)
264   			FROM	IGS_PE_PERSON_BASE_V pe
265   			WHERE	pe.person_id = p_person_id;
266   	BEGIN
267   		OPEN 	c_pe;
268   		FETCH	c_pe INTO v_letter_number;
269   		CLOSE 	c_pe;
270   		p_row_number := FLOOR(v_letter_number / (26 / gv_t_acusg_cntr)) + 1;
271   	EXCEPTION
272   		WHEN OTHERS THEN
273   			IF c_pe%ISOPEN THEN
274   				CLOSE c_pe;
275   			END IF;
276   			RAISE;
277   	END;
278   	EXCEPTION
279   		WHEN OTHERS THEN
280 	       		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
281 	       		IGS_GE_MSG_STACK.ADD;
282        			App_Exception.Raise_Exception;
283   	END grdpl_rslv_stlmt_alpha;
284   	PROCEDURE grdpl_rslv_stlmt_prprtn (
285   			p_row_num OUT NOCOPY NUMBER)
286   	AS
287   		-- 8. Internal procedure to resolve ceremony stalemates by splitting the
288   		-- ceremonies proportionally.  It passes back the row number for the
289   		-- appropriate record in the t_acusg_match PL/SQL table.
290   	BEGIN
291   	DECLARE
292   		v_lowest_count 	NUMBER;
293   		v_row_num	NUMBER;
294   		v_gac_count	NUMBER;
295   		CURSOR	c_gac (
296   			cp_row_num	NUMBER) IS
297   			SELECT	COUNT(*)
298   			FROM	IGS_GR_AWD_CRMN		gac
299   			WHERE	gac.grd_cal_type 		= t_acusg_match(cp_row_num).grd_cal_type 	AND
300   				gac.grd_ci_sequence_number 	=
301   								t_acusg_match(cp_row_num).grd_ci_sequence_number AND
302   				gac.ceremony_number 		= t_acusg_match(cp_row_num).ceremony_number 	AND
303   				gac.award_course_cd 		= t_acusg_match(cp_row_num).award_course_cd 	AND
304   				gac.award_crs_version_number 	=
305   								t_acusg_match(cp_row_num).award_crs_version_number AND
306   				gac.award_cd 			= t_acusg_match(cp_row_num).award_cd 		AND
307   				NVL(gac.us_group_number, 0) 	=
308   								NVL(t_acusg_match(cp_row_num).us_group_number, 0);
309   	BEGIN
310   		v_lowest_count := 999999;
311   		FOR v_row_num IN 1.. gv_t_acusg_cntr LOOP
312   			OPEN c_gac(v_row_num);
313   			FETCH c_gac INTO v_gac_count;
314   			CLOSE c_gac;
315   			IF v_gac_count < v_lowest_count THEN
316   				v_lowest_count := v_gac_count;
317   				p_row_num := v_row_num;
318   			END IF;
319   		END LOOP;
320   	EXCEPTION
321   		WHEN OTHERS THEN
322   			IF c_gac%ISOPEN THEN
323   				CLOSE c_gac;
324   			END IF;
325   			RAISE;
326   	END;
327   	EXCEPTION
328   		WHEN OTHERS THEN
329 	       		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
330 	       		IGS_GE_MSG_STACK.ADD;
331        			App_Exception.Raise_Exception;
332   	END grdpl_rslv_stlmt_prprtn;
333   	PROCEDURE grdpl_ins_gac_record (
334   			p_row_num NUMBER)
335   	AS
336   	BEGIN
337   		-- 9. Internal procedure to insert graduand_award_ceremony records.
338   		-- It is passed the row number for the appropriate record in the
339   		-- t_acusg_match PL/SQL table.
340   	DECLARE
341 		  lv_rowid VARCHAR2(25);
342 		  lv_id	 NUMBER;
343 
344 			-- Added the following coursor to get the Person Number. Bug# 2690151
345 	    CURSOR get_person_num IS
346 	    SELECT person_number
347 	    FROM igs_pe_person_base_v
348 	    WHERE person_id = p_person_id;
349 	    l_person_number igs_pe_person_base_v.person_number%TYPE := NULL;
350   	BEGIN
351 		IGS_GR_AWD_CRMN_PKG.INSERT_ROW(
352 		  X_ROWID => lv_rowid,
353 		  X_GAC_ID => lv_id,
354 		  X_GRADUAND_SEAT_NUMBER => NULL,
355 		  X_NAME_PRONUNCIATION => p_name_pronunciation,
356 		  X_NAME_ANNOUNCED => p_name_announced,
357 		  X_ACADEMIC_DRESS_RQRD_IND => p_academic_dress_rqrd_ind,
358 		  X_ACADEMIC_GOWN_SIZE => p_academic_gown_size,
359 		  X_ACADEMIC_HAT_SIZE => p_academic_hat_size,
360 		  X_GUEST_TICKETS_REQUESTED => p_guest_tickets_requested,
361 		  X_GUEST_TICKETS_ALLOCATED => p_guest_tickets_allocated,
362 		  X_GUEST_SEATS => p_guest_seats,
363 		  X_FEES_PAID_IND => p_fees_paid_ind,
364 		  X_SPECIAL_REQUIREMENTS => p_special_requirements,
365 		  X_COMMENTS => NULL,
366 		  X_PERSON_ID => p_person_id,
367 		  X_CREATE_DT => p_create_dt,
368 		  X_GRD_CAL_TYPE => t_acusg_match(p_row_num).grd_cal_type,
369 		  X_GRD_CI_SEQUENCE_NUMBER => t_acusg_match(p_row_num).grd_ci_sequence_number,
370 		  X_CEREMONY_NUMBER => t_acusg_match(p_row_num).ceremony_number,
371 		  X_AWARD_COURSE_CD => t_acusg_match(p_row_num).award_course_cd,
372 		  X_AWARD_CRS_VERSION_NUMBER => t_acusg_match(p_row_num).award_crs_version_number,
373 		  X_AWARD_CD => t_acusg_match(p_row_num).award_cd,
374 		  X_US_GROUP_NUMBER => t_acusg_match(p_row_num).us_group_number,
375 		  X_ORDER_IN_PRESENTATION => NULL,
376 		  X_MODE => 'R');
377   		COMMIT;
378 			--
379 			-- Added the following 'put_line' to fix bug# 2690151
380 			--
381 		  --Get the Person Number
382 		  OPEN get_person_num;
383 		  FETCH get_person_num INTO l_person_number;
384 		  CLOSE get_person_num;
385 			FND_MESSAGE.SET_NAME('IGS','IGS_GR_CRMN_REC_CRTD');
386 			FND_MESSAGE.SET_TOKEN('PERSON',l_person_number);
387 			FND_MESSAGE.SET_TOKEN('GRD_CAL',t_acusg_match(p_row_num).grd_cal_type);
388 			FND_MESSAGE.SET_TOKEN('CEREMONY',t_acusg_match(p_row_num).ceremony_number);
389 			FND_MESSAGE.SET_TOKEN('COURSE',t_acusg_match(p_row_num).award_course_cd);
390 			FND_MESSAGE.SET_TOKEN('AWARD',t_acusg_match(p_row_num).award_cd);
391 			FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET());
392 			FND_FILE.PUT_LINE(FND_FILE.LOG,' ');
393 
394   	END;
395   	EXCEPTION
396   		WHEN OTHERS THEN
397 	       		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
398 	       		IGS_GE_MSG_STACK.ADD;
399        			App_Exception.Raise_Exception;
400   	END grdpl_ins_gac_record;
401   BEGIN
402   	gv_t_awc_cntr := 0;
403   	gv_t_acusg_cntr := 0;
404   	t_acusg_match := t_acusg_match_blank;
405   	t_awc_match := t_awc_match_blank;
406   	--1. Check parameters :
407   	IF p_person_id IS NULL OR
408      			p_create_dt IS NULL OR
409      			p_grd_cal_type IS NULL OR
410      			p_grd_ci_sequence_number IS NULL OR
411      			p_academic_dress_rqrd_ind IS NULL OR
412      			p_fees_paid_ind IS NULL OR
413      			p_resolve_stalemate_type IS NULL OR
414      			p_ignore_unit_sets_ind IS NULL THEN
415   		p_message_name := NULL;
416   		RETURN TRUE;
417   	END IF;
418   	-- 2. Get the count of primary student_unit_set_attempts for the current
419   	-- graduand.
420   	OPEN c_susa;
421   	FETCH c_susa INTO v_susa_count;
422   	CLOSE c_susa;
423   	-- 3. Find award_ceremony records which match the graduand award_course_cd,
424   	-- award_crs_version_number and award_cd and are linked to a
425   	-- graduation_ceremony at a venue linked to the location in the graduands
426   	-- student_course_attempt.  Loop through the matching award_ceremony records.
427   	FOR v_awc_rec IN c_awc LOOP
428   		-- 4. If the graduand has any primary student_unit_set_attempt records
429   		-- attempt to find an award_ceremony_us_group within the current
430   		-- award_ceremony with a matching set of award_ceremony_unit_set records.
431   		IF v_susa_count > 0 THEN
432   			FOR v_acusg_rec IN c_acusg (
433   					v_awc_rec.grd_cal_type,
434   					v_awc_rec.grd_ci_sequence_number,
435   					v_awc_rec.ceremony_number,
436   					v_awc_rec.award_course_cd,
437   					v_awc_rec.award_crs_version_number,
438   					v_awc_rec.award_cd) LOOP
439   				-- write record v_acusg_rec into PL/SQL table t_acusg_match
440   				gv_t_acusg_cntr := gv_t_acusg_cntr + 1;
441   				t_acusg_match(gv_t_acusg_cntr).grd_cal_type := v_acusg_rec.grd_cal_type;
442   				t_acusg_match(gv_t_acusg_cntr).grd_ci_sequence_number :=
443   							v_acusg_rec.grd_ci_sequence_number;
444   				t_acusg_match(gv_t_acusg_cntr).ceremony_number :=
445   							v_acusg_rec.ceremony_number;
446   				t_acusg_match(gv_t_acusg_cntr).award_course_cd :=
447   							v_acusg_rec.award_course_cd;
448   				t_acusg_match(gv_t_acusg_cntr).award_crs_version_number :=
449   							v_acusg_rec.award_crs_version_number;
450   				t_acusg_match(gv_t_acusg_cntr).award_cd := v_acusg_rec.award_cd;
451   				t_acusg_match(gv_t_acusg_cntr).us_group_number :=
452   							v_acusg_rec.us_group_number;
453   				t_acusg_match(gv_t_acusg_cntr).dflt_ind :=
454   							v_awc_rec.dflt_ind;
455   			END LOOP; -- c_acusg
456   		END IF;
457   		-- write record v_awc_rec into PL/SQL table t_awc_match
458   		gv_t_awc_cntr := gv_t_awc_cntr + 1;
459   		t_awc_match(gv_t_awc_cntr).grd_cal_type := v_awc_rec.grd_cal_type;
460   		t_awc_match(gv_t_awc_cntr).grd_ci_sequence_number :=
461   					v_awc_rec.grd_ci_sequence_number;
462   		t_awc_match(gv_t_awc_cntr).ceremony_number := v_awc_rec.ceremony_number;
463   		t_awc_match(gv_t_awc_cntr).award_course_cd := v_awc_rec.award_course_cd;
464   		t_awc_match(gv_t_awc_cntr).award_crs_version_number :=
465   					v_awc_rec.award_crs_version_number;
466   		t_awc_match(gv_t_awc_cntr).award_cd := v_awc_rec.award_cd;
467   		t_awc_match(gv_t_awc_cntr).dflt_ind := v_awc_rec.dflt_ind;
468   	END LOOP;
469   	-- 5. Place the award_ceremony records in the empty award_ceremony_us_group
470   	-- PL/SQL table t_acusg_match.
471   	IF(v_susa_count = 0 AND gv_t_awc_cntr > 0) OR
472   	   		(v_susa_count > 0 AND
473   			gv_t_acusg_cntr = 0 AND
474   			p_ignore_unit_sets_ind = 'Y') THEN
475   		-- Copy t_awc_match records into t_acusg_match
476   		FOR v_cntr IN 1..gv_t_awc_cntr LOOP
477   			gv_t_acusg_cntr := gv_t_acusg_cntr + 1;
478   			t_acusg_match(gv_t_acusg_cntr).grd_cal_type :=
479   						t_awc_match(v_cntr).grd_cal_type;
480   			t_acusg_match(gv_t_acusg_cntr).grd_ci_sequence_number :=
481   						t_awc_match(v_cntr).grd_ci_sequence_number;
482   			t_acusg_match(gv_t_acusg_cntr).ceremony_number :=
483   						t_awc_match(v_cntr).ceremony_number;
484   			t_acusg_match(gv_t_acusg_cntr).award_course_cd :=
485   						t_awc_match(v_cntr).award_course_cd;
486   			t_acusg_match(gv_t_acusg_cntr).award_crs_version_number :=
487   						t_awc_match(v_cntr).award_crs_version_number;
488   			t_acusg_match(gv_t_acusg_cntr).award_cd := t_awc_match(v_cntr).award_cd;
489   			t_acusg_match(gv_t_acusg_cntr).us_group_number := NULL;
490   			t_acusg_match(gv_t_acusg_cntr).dflt_ind := t_awc_match(v_cntr).dflt_ind;
491   		END LOOP;
492   	END IF;
493   	-- 6. If there is only one matching ceremony insert the record there.
494   	-- If there is more than one matching ceremony call a function to resolve
495   	-- the stalemate.
496   	IF gv_t_acusg_cntr = 1 THEN
497   		grdpl_ins_gac_record(gv_t_acusg_cntr);
498   	ELSE
499   		IF gv_t_acusg_cntr > 1 THEN
500   			grdpl_rslv_stlmt_default(v_row_num);
501   			IF v_row_num > 0 THEN
502   				grdpl_ins_gac_record(v_row_num);
503   			ELSE
504   				IF p_resolve_stalemate_type = cst_alpha THEN
505   					grdpl_rslv_stlmt_alpha(v_row_num);
506   					grdpl_ins_gac_record(v_row_num);
507   				ELSE
508   					IF p_resolve_stalemate_type = cst_proportion THEN
509   						grdpl_rslv_stlmt_prprtn(v_row_num);
510   						grdpl_ins_gac_record(v_row_num);
511   					END IF;
512   				END IF;
513   			END IF;
514   		END IF;
515   	END IF;
516    	-- Return no error:
517   	p_message_name := NULL;
518   	RETURN TRUE;
519   EXCEPTION
520   	WHEN OTHERS THEN
521   		IF (c_susa%ISOPEN) THEN
522   			CLOSE c_susa;
523   		END IF;
524   		IF (c_awc%ISOPEN) THEN
525   			CLOSE c_awc;
526   		END IF;
527   		IF (c_acusg%ISOPEN) THEN
528   			CLOSE c_acusg;
529   		END IF;
530   		RAISE;
531   END;
532   EXCEPTION
533   	WHEN OTHERS THEN
534        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
535        		IGS_GE_MSG_STACK.ADD;
536        		App_Exception.Raise_Exception;
537   END grdp_ins_gac;
538   --
539   -- Process the close of a Award Ceremony Unit Set Group
540   FUNCTION grdp_prc_acusg_close(
541   p_grd_cal_type IN VARCHAR2 ,
542   p_grd_ci_sequence_number IN NUMBER ,
543   p_ceremony_number IN NUMBER ,
544   p_award_course_cd IN VARCHAR2 ,
545   p_award_crs_version_number IN NUMBER ,
546   p_award_cd IN VARCHAR2 ,
547   p_us_group_number IN NUMBER ,
548   p_resolve_stalemate_type IN VARCHAR2 ,
549   p_ignore_unit_sets_ind IN VARCHAR2 DEFAULT 'N',
550   p_message_name OUT NOCOPY VARCHAR2 )
551   RETURN BOOLEAN AS
552 
553   BEGIN	-- grdp_prc_acusg_close
554   	-- Description: This process is passed the details of a award_ceremony_us_group
555   	-- record which is closed.  It finds any associated graduand_award_ceremony
556   	-- records
557   DECLARE
558   	v_loop_flag				BOOLEAN := FALSE;
559   	e_resource_busy_exception		EXCEPTION;
560   	PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
561   	CURSOR	c_gac IS
562   		SELECT	gac.person_id,
563   			gac.create_dt,
564   			gac.name_pronunciation,
565   			gac.name_announced,
566   			gac.academic_dress_rqrd_ind,
567   			gac.academic_gown_size,
568   			gac.academic_hat_size,
569   			gac.guest_tickets_requested,
570   			gac.guest_tickets_allocated,
571   			gac.guest_seats,
572   			gac.fees_paid_ind,
573   			gac.special_requirements,
574   			gac.grd_cal_type,
575   			gac.grd_ci_sequence_number,
576   			gac.ceremony_number,
577   			gac.award_course_cd,
578   			gac.award_crs_version_number,
579   			gac.award_cd
580   		FROM	IGS_GR_AWD_CRMN			gac
581   		WHERE	gac.grd_cal_type 			= p_grd_cal_type AND
582   			gac.grd_ci_sequence_number 		= p_grd_ci_sequence_number AND
583   			gac.ceremony_number 			= p_ceremony_number AND
584   			NVL(gac.award_course_cd,'NULL')
585   						= NVL(p_award_course_cd,'NULL') AND
586   			NVL(gac.award_crs_version_number,0)
587   						= NVL(p_award_crs_version_number,0) AND
588   			gac.award_cd 				= p_award_cd AND
589   			gac.us_group_number 			= p_us_group_number;
590   	CURSOR	c_gac_del (
591   			cp_person_id			IGS_GR_AWD_CRMN.person_id%TYPE,
592   			cp_create_dt			IGS_GR_AWD_CRMN.create_dt%TYPE,
593   			cp_grd_cal_type			IGS_GR_AWD_CRMN.grd_cal_type%TYPE,
594   			cp_grd_ci_sequence_number
595   							IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE,
596   			cp_ceremony_number		IGS_GR_AWD_CRMN.ceremony_number%TYPE,
597   			cp_award_cd			IGS_GR_AWD_CRMN.award_cd%TYPE) IS
598   		SELECT	rowid,gac.*
599   		FROM	IGS_GR_AWD_CRMN		gac
600   		WHERE	gac.person_id 			= cp_person_id AND
601   			gac.create_dt			= cp_create_dt AND
602   			gac.grd_cal_type		= cp_grd_cal_type AND
603   			gac.grd_ci_sequence_number	= cp_grd_ci_sequence_number AND
604   			gac.award_cd			= cp_award_cd
605   		FOR UPDATE OF gac.person_id NOWAIT;
606   		v_gac_del		c_gac_del%ROWTYPE;
607   	CURSOR	c_gach(
608   			cp_gac_person_id			IGS_GR_AWD_CRMN.person_id%TYPE,
609   			cp_gac_create_dt			IGS_GR_AWD_CRMN.create_dt%TYPE,
610   			cp_grd_cal_type			IGS_GR_AWD_CRMN.grd_cal_type%TYPE,
611   			cp_grd_ci_sequence_number
612   							IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE,
613   			cp_ceremony_number		IGS_GR_AWD_CRMN.ceremony_number%TYPE,
614   			cp_award_cd			IGS_GR_AWD_CRMN.award_cd%TYPE) IS
615   		SELECT	rowid, gach.person_id
616   		FROM	IGS_GR_AWD_CRMN_HIST	gach
617   		WHERE	gach.person_id 			= cp_gac_person_id AND
618   			gach.create_dt			= cp_gac_create_dt AND
619   			gach.grd_cal_type		= cp_grd_cal_type AND
620   			gach.grd_ci_sequence_number	= cp_grd_ci_sequence_number AND
621   			gach.ceremony_number 		= cp_ceremony_number AND
622   			gach.award_cd			= cp_award_cd
623   		FOR UPDATE OF gach.person_id NOWAIT;
624   BEGIN
625   	p_message_name := NULL;
626   	-- 1.Check parameters
627   	IF p_grd_cal_type IS NULL OR
628     			p_grd_ci_sequence_number IS NULL OR
629      			p_ceremony_number IS NULL OR
630      			p_award_cd IS NULL OR
631      			p_us_group_number IS NULL THEN
632   		RETURN TRUE;
633   	END IF;
634   	-- 2.Find any associated graduand_award_ceremony records for
635   	-- this award_ceremony_us_group and loop through them.
636   	FOR v_gac_rec IN c_gac LOOP
637   		SAVEPOINT sp_gac_del;
638   		BEGIN
639   		OPEN c_gac_del(
640   			v_gac_rec.person_id,
641   			v_gac_rec.create_dt,
642   			v_gac_rec.grd_cal_type,
643   			v_gac_rec.grd_ci_sequence_number,
644   			v_gac_rec.ceremony_number,
645   			v_gac_rec.award_cd);
646   		FETCH c_gac_del INTO v_gac_del;
647   			-- 3.Delete the existing graduand_award_ceremony record
648   			IF (c_gac_del%FOUND) THEN
649 				IGS_GR_AWD_CRMN_PKG.DELETE_ROW(
650 				  X_ROWID => v_gac_del.rowid);
651   			END IF;
652   			CLOSE c_gac_del;
653   		EXCEPTION
654   			WHEN e_resource_busy_exception THEN
655   				IF c_gach %ISOPEN THEN
656   					CLOSE c_gach;
657   				END IF;
658   				ROLLBACK TO sp_gac_del;
659   				p_message_name := 'IGS_GR_CANNOT_DELETE_AWD_CERM';
660   				RETURN FALSE;
661   			WHEN OTHERS THEN
662   				ROLLBACK TO sp_gac_del;
663   				RAISE;
664   		END;
665   		BEGIN
666   			FOR v_gach_rec IN c_gach(
667   						v_gac_rec.person_id,
668   						v_gac_rec.create_dt,
669   						v_gac_rec.grd_cal_type,
670   						v_gac_rec.grd_ci_sequence_number,
671   						v_gac_rec.ceremony_number,
672   						v_gac_rec.award_cd) LOOP
673 				IGS_GR_AWD_CRMN_HIST_PKG.DELETE_ROW(
674 				  X_ROWID => v_gach_rec.rowid);
675   			END LOOP;
676   		EXCEPTION
677   			WHEN e_resource_busy_exception THEN
678   				IF c_gach %ISOPEN THEN
679   					CLOSE c_gach;
680   				END IF;
681   				ROLLBACK TO sp_gac_del;
682   				p_message_name := 'IGS_GR_CANNOT_DELETE_AWD_CERM';
683   				RETURN FALSE;
684   			WHEN OTHERS THEN
685   				ROLLBACK TO sp_gac_del;
686   				RAISE;
687   		END;
688   		COMMIT;
689   		-- 4.Call GRDP_INS_GAC to allocate this graduand to another
690   		-- ceremony if one is available
691   		IF NOT grdp_ins_gac(
692   				v_gac_rec.person_id,
693   				v_gac_rec.create_dt ,
694   				p_grd_cal_type,
695   				p_grd_ci_sequence_number,
696   				v_gac_rec.name_pronunciation,
697   				v_gac_rec.name_announced,
698   				v_gac_rec.academic_dress_rqrd_ind,
699   				v_gac_rec.academic_gown_size,
700   				v_gac_rec.academic_hat_size,
701   				v_gac_rec.guest_tickets_requested,
702   				v_gac_rec.guest_tickets_allocated,
703   				v_gac_rec.guest_seats,
704   				v_gac_rec.fees_paid_ind,
705   				v_gac_rec.special_requirements,
706   				p_resolve_stalemate_type,
707   				p_ignore_unit_sets_ind,
708   				p_message_name) THEN
709   			v_loop_flag := TRUE;
710   			Exit;
711   		END IF;
712   	END LOOP; --c_gac
713   	IF (v_loop_flag = TRUE) THEN
714   		RETURN FALSE;
715   	END IF;
716   	RETURN TRUE;
717   EXCEPTION
718   	WHEN OTHERS THEN
719   		IF c_gac %ISOPEN THEN
720   			CLOSE c_gac;
721   		END IF;
722   		IF c_gac_del %ISOPEN THEN
723   			CLOSE c_gac_del;
724   		END IF;
725   		IF c_gach %ISOPEN THEN
726   			CLOSE c_gach;
727   		END IF;
728   	RAISE;
729   END;
730   EXCEPTION
731   	WHEN OTHERS THEN
732        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
733        		IGS_GE_MSG_STACK.ADD;
734        		App_Exception.Raise_Exception;
735   END grdp_prc_acusg_close;
736   --
737   -- Process the close of a Award Ceremony
738   FUNCTION grdp_prc_awc_close(
739   p_grd_cal_type IN VARCHAR2 ,
740   p_grd_ci_sequence_number IN NUMBER ,
741   p_ceremony_number IN NUMBER ,
742   p_award_course_cd IN VARCHAR2 ,
743   p_award_crs_version_number IN NUMBER ,
744   p_award_cd IN VARCHAR2 ,
745   p_resolve_stalemate_type IN VARCHAR2 ,
746   p_ignore_unit_sets_ind IN VARCHAR2 DEFAULT 'N',
747   p_message_name OUT NOCOPY VARCHAR2 )
748   RETURN BOOLEAN AS
749 
750   BEGIN	-- grdp_prc_awc_close
751   	-- Description: This process is passed the details of a award_ceremony
752   	-- record which is closed. It finds any related award_ceremony_us_group
753   	-- records and calls GENP_PRC_ACUSG_CLOSE to delete associated
754   	-- graduand_award_ceremony records and attempt to re-allocate them to
755   	-- another ceremony.  After all the graduand_award_ceremony records are
756   	-- removed the award_ceremony_us_group record is deleted.  The process
757   	-- then finds any graduand_award_ceremony records associated with the
758 	-- award_ceremony, deletes them and calls GENP_PRC_GAC_CRMNY to attempt
759   	-- to allocate them to another ceremony.
760   DECLARE
761   	v_loop_flag			BOOLEAN := FALSE;
762   	e_resource_busy_exception		EXCEPTION;
763   	PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
764   	CURSOR	c_acusg IS
765   		SELECT	acusg.us_group_number
766   		FROM	IGS_GR_AWD_CRM_US_GP		acusg
767   		WHERE	acusg.grd_cal_type		= p_grd_cal_type AND
768   			acusg.grd_ci_sequence_number	= p_grd_ci_sequence_number AND
769   			acusg.ceremony_number		= p_ceremony_number AND
770   			NVL(acusg.award_course_cd, 'NULL') = NVL(p_award_course_cd, 'NULL') AND
771   			NVL(acusg.award_crs_version_number, 0)
772   						= NVL(p_award_crs_version_number, 0) AND
773   			acusg.award_cd 			= p_award_cd;
774   	CURSOR	c_gac IS
775   		SELECT	gac.person_id,
776   			gac.create_dt,
777   			gac.name_pronunciation,
778   			gac.name_announced,
779   			gac.academic_dress_rqrd_ind,
780   			gac.academic_gown_size,
781   			gac.academic_hat_size,
782   			gac.guest_tickets_requested,
783   			gac.guest_tickets_allocated,
784   			gac.guest_seats,
785   			gac.fees_paid_ind,
786   			gac.special_requirements,
787   			gac.grd_cal_type,
788   			gac.grd_ci_sequence_number,
789   			gac.ceremony_number,
790   			gac.award_course_cd,
791   			gac.award_crs_version_number,
792   			gac.award_cd
793   		FROM	IGS_GR_AWD_CRMN		gac
794   		WHERE	gac.grd_cal_type 		= p_grd_cal_type AND
795   			gac.grd_ci_sequence_number 	= p_grd_ci_sequence_number AND
796   			gac.ceremony_number 		= p_ceremony_number AND
797   			gac.award_course_cd 		= p_award_course_cd AND
798   			gac.award_crs_version_number 	= p_award_crs_version_number AND
799   			gac.award_cd 			= p_award_cd AND
800   			gac.us_group_number 		IS NULL;
801   	CURSOR	c_gac_del (
802   			cp_person_id			IGS_GR_AWD_CRMN.person_id%TYPE,
803   			cp_create_dt			IGS_GR_AWD_CRMN.create_dt%TYPE,
804   			cp_grd_cal_type			IGS_GR_AWD_CRMN.grd_cal_type%TYPE,
805   			cp_grd_ci_sequence_number
806   							IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE,
807   			cp_ceremony_number		IGS_GR_AWD_CRMN.ceremony_number%TYPE,
808   			cp_award_cd			IGS_GR_AWD_CRMN.award_cd%TYPE) IS
809   		SELECT	rowid, gac.*
810   		FROM	IGS_GR_AWD_CRMN		gac
811   		WHERE	gac.person_id 			= cp_person_id AND
812   			gac.create_dt			= cp_create_dt AND
813   			gac.grd_cal_type		= cp_grd_cal_type AND
814   			gac.grd_ci_sequence_number	= cp_grd_ci_sequence_number AND
815   			gac.award_cd			= cp_award_cd
816   		FOR UPDATE OF gac.person_id NOWAIT;
817   		v_gac_del		c_gac_del%ROWTYPE;
818   	CURSOR	c_gach(
819   			cp_gac_person_id		IGS_GR_AWD_CRMN.person_id%TYPE,
820   			cp_gac_create_dt		IGS_GR_AWD_CRMN.create_dt%TYPE,
821   			cp_grd_cal_type			IGS_GR_AWD_CRMN.grd_cal_type%TYPE,
822   			cp_grd_ci_sequence_number
823   						IGS_GR_AWD_CRMN.grd_ci_sequence_number%TYPE,
824   			cp_ceremony_number		IGS_GR_AWD_CRMN.ceremony_number%TYPE,
825   			cp_award_cd			IGS_GR_AWD_CRMN.award_cd%TYPE) IS
826   		SELECT	rowid, gach.person_id
827   		FROM	IGS_GR_AWD_CRMN_HIST	gach
828   		WHERE	gach.person_id			= cp_gac_person_id AND
829   			gach.create_dt			= cp_gac_create_dt AND
830   			gach.grd_cal_type		= cp_grd_cal_type AND
831   			gach.grd_ci_sequence_number	= cp_grd_ci_sequence_number AND
832   			gach.ceremony_number		= cp_ceremony_number AND
833   			gach.award_cd			= cp_award_cd
834   		FOR UPDATE OF gach.person_id NOWAIT;
835   BEGIN
836   	p_message_name := NULL;
837   	-- 1.Check parameters
838   	IF p_grd_cal_type IS NULL OR
839      			p_grd_ci_sequence_number IS NULL OR
840      			p_ceremony_number IS NULL OR
841      			p_award_cd IS NULL THEN
842   		RETURN TRUE;
843   	END IF;
844   	-- 2.Find any associated award_ceremony_us_group records for
845   	-- this award_ceremony and loop through them.
846   	FOR v_acusg_rec IN c_acusg LOOP
847   		-- 3.Call GRDP_PRC_ACUSG_CLOSE to process the graduands
848   		-- for the award_ceremony_us_group record and then delete it.
849   		IF NOT grdp_prc_acusg_close(
850   					p_grd_cal_type,
851   					p_grd_ci_sequence_number,
852   					p_ceremony_number,
853   					p_award_course_cd,
854   					p_award_crs_version_number,
855   					p_award_cd,
856   					v_acusg_rec.us_group_number,
857   					p_resolve_stalemate_type,
858   					p_ignore_unit_sets_ind,
859   					p_message_name) THEN
860   			v_loop_flag := TRUE;
861   			Exit;
862   		END IF;
863   	END LOOP;
864   	IF (v_loop_flag = TRUE) THEN
865   		RETURN FALSE;
866   	END IF;
867   	-- 4.Find any associated graduand_award_ceremony records for this
868   	-- award_ceremony and loop through them.
869   	FOR v_gac_rec IN c_gac LOOP
870   		SAVEPOINT sp_gac_del;
871   		BEGIN
872   		OPEN c_gac_del(
873   			v_gac_rec.person_id,
874   			v_gac_rec.create_dt,
875   			v_gac_rec.grd_cal_type,
876   			v_gac_rec.grd_ci_sequence_number,
877   			v_gac_rec.ceremony_number,
878   			v_gac_rec.award_cd);
879   		FETCH c_gac_del INTO v_gac_del;
880   			-- 3.Delete the existing graduand_award_ceremony record
881   			IF (c_gac_del%FOUND) THEN
882 				IGS_GR_AWD_CRMN_PKG.DELETE_ROW(
883 				  X_ROWID => v_gac_del.rowid);
884   			END IF;
885   			CLOSE c_gac_del;
886   		EXCEPTION
887   			WHEN e_resource_busy_exception THEN
888   				IF c_gach %ISOPEN THEN
889   					CLOSE c_gach;
890   				END IF;
891   				ROLLBACK TO sp_gac_del;
892   				p_message_name := 'IGS_GR_CANNOT_DELETE_AWD_CERM';
893   				RETURN FALSE;
894   			WHEN OTHERS THEN
895   				ROLLBACK TO sp_gac_del;
896   				RAISE;
897   		END;
898   		BEGIN
899   			FOR v_gach_rec IN c_gach(
900   						v_gac_rec.person_id,
901   						v_gac_rec.create_dt,
902   						v_gac_rec.grd_cal_type,
903   						v_gac_rec.grd_ci_sequence_number,
904   						v_gac_rec.ceremony_number,
905   						v_gac_rec.award_cd) LOOP
906 				IGS_GR_AWD_CRMN_HIST_PKG.DELETE_ROW(
907 				  X_ROWID => v_gach_rec.rowid);
908   			END LOOP;
909   		EXCEPTION
910   			WHEN e_resource_busy_exception THEN
911   				IF c_gach %ISOPEN THEN
912   					CLOSE c_gach;
913   				END IF;
914   				ROLLBACK TO sp_gac_del;
915   				p_message_name := 'IGS_GR_CANNOT_DELETE_AWD_CERM';
916   				RETURN FALSE;
917   			WHEN OTHERS THEN
918   				ROLLBACK TO sp_gac_del;
919   				RAISE;
920   		END;
921   		COMMIT;
922   		-- 6.Call grdp_ins_gac to allocate this graduand to
923   		-- another ceremony if one is available.
924   		IF NOT grdp_ins_gac(
925   				v_gac_rec.person_id,
926   				v_gac_rec.create_dt ,
927   				p_grd_cal_type,
928   				p_grd_ci_sequence_number,
929   				v_gac_rec.name_pronunciation,
930   				v_gac_rec.name_announced,
931   				v_gac_rec.academic_dress_rqrd_ind,
932   				v_gac_rec.academic_gown_size,
933   				v_gac_rec.academic_hat_size,
934   				v_gac_rec.guest_tickets_requested,
935   				v_gac_rec.guest_tickets_allocated,
936   				v_gac_rec.guest_seats,
937   				v_gac_rec.fees_paid_ind,
938   				v_gac_rec.special_requirements,
939   				p_resolve_stalemate_type,
940   				p_ignore_unit_sets_ind,
941   				p_message_name) THEN
942   			v_loop_flag := TRUE;
943   			Exit;
944   		END IF;
945   	END LOOP;
946   	IF (v_loop_flag = TRUE) THEN
947   		RETURN FALSE;
948   	END IF;
949   	RETURN TRUE;
950   EXCEPTION
951   	WHEN OTHERS THEN
952   		IF c_acusg %ISOPEN THEN
953   			CLOSE c_acusg;
954   		END IF;
955   		IF c_gac %ISOPEN THEN
956   			CLOSE c_gac;
957   		END IF;
958   		IF c_gac_del %ISOPEN THEN
959   			CLOSE c_gac_del;
960   		END IF;
961   		IF c_gach %ISOPEN THEN
962   			CLOSE c_gach;
963   		END IF;
964   	RAISE;
965   END;
966   EXCEPTION
967   	WHEN OTHERS THEN
968        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
969        		IGS_GE_MSG_STACK.ADD;
970        		App_Exception.Raise_Exception;
971   END grdp_prc_awc_close;
972 END IGS_GR_PRC_GAC;