DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GR_VAL_GC

Source


1 PACKAGE BODY IGS_GR_VAL_GC AS
2 /* $Header: IGSGR02B.pls 115.4 2002/11/29 00:39:34 nsidana ship $ */
3   --
4   -- Validate the graduation ceremony date aliases
5   FUNCTION grdp_val_gc_dai(
6   p_grd_cal_type IN VARCHAR2 ,
7   p_grd_ci_sequence_number IN NUMBER ,
8   p_ceremony_dt_alias IN VARCHAR2 ,
9   p_ceremony_dai_sequence_number IN NUMBER ,
10   p_closing_dt_alias IN VARCHAR2 ,
11   p_closing_dai_sequence_number IN NUMBER ,
12   p_message_name OUT NOCOPY VARCHAR2 )
13   RETURN BOOLEAN AS
14 
15   BEGIN	-- grdp_val_gc_dai
16   	-- Validate that closing_dt_alias and closing_dai_sequence_number relate to a
17   	-- IGS_CA_DA_INST with an alias_val less than or equal to the alias_val for
18   	-- the IGS_CA_DA_INST for the ceremony_dt_alias and
19   	-- ceremony_dai_sequence_number.
20   DECLARE
21   	v_gc_dai_found		VARCHAR2(1);
22   	CURSOR	c_ceremony_daiv IS
23   		SELECT	'X'
24   		FROM	IGS_CA_DA_INST_V 		daiv
25 	   	WHERE	daiv.dt_alias 		= p_ceremony_dt_alias AND
26   			daiv.sequence_number 	= p_ceremony_dai_sequence_number AND
27   			daiv.cal_type 		= p_grd_cal_type AND
28   			daiv.ci_sequence_number 	= p_grd_ci_sequence_number AND
29   			TRUNC(daiv.alias_val)	< TRUNC(SYSDATE);
30   	CURSOR	c_closing_daiv IS
31   		SELECT	'X'
32   		FROM	IGS_CA_DA_INST_V 		daiv
33   		WHERE	daiv.dt_alias 		= p_closing_dt_alias AND
34   			daiv.sequence_number 	= p_closing_dai_sequence_number AND
35   			daiv.cal_type 		= p_grd_cal_type AND
36   			daiv.ci_sequence_number 	= p_grd_ci_sequence_number AND
37   			TRUNC(daiv.alias_val)	< TRUNC(SYSDATE);
38   	CURSOR	c_daiv IS
39   		SELECT	'X'
40   		FROM	IGS_CA_DA_INST_V 		ceremony_daiv,
41   			IGS_CA_DA_INST_V 		closing_daiv
42   		WHERE	ceremony_daiv.dt_alias 		= p_ceremony_dt_alias AND
43   			ceremony_daiv.sequence_number 	= p_ceremony_dai_sequence_number AND
44   			ceremony_daiv.cal_type 		= p_grd_cal_type AND
45   			ceremony_daiv.ci_sequence_number 	= p_grd_ci_sequence_number AND
46   			closing_daiv.dt_alias 		= p_closing_dt_alias AND
47   			closing_daiv.sequence_number 	= p_closing_dai_sequence_number AND
48   			closing_daiv.cal_type 		= p_grd_cal_type AND
49   			closing_daiv.ci_sequence_number 	= p_grd_ci_sequence_number AND
50   			closing_daiv.alias_val 		<= ceremony_daiv.alias_val;
51   BEGIN
52   	p_message_name := NULL;
53   	IF p_grd_cal_type IS NULL OR
54   	    p_grd_ci_sequence_number IS NULL THEN
55   		RETURN TRUE;
56   	END IF;
57   	IF p_ceremony_dt_alias IS NOT NULL AND
58   	    p_ceremony_dai_sequence_number IS NOT NULL  THEN
59   		OPEN c_ceremony_daiv;
60   		FETCH c_ceremony_daiv INTO v_gc_dai_found;
61   		IF c_ceremony_daiv%FOUND THEN
62   			CLOSE c_ceremony_daiv;
63   			p_message_name := 'IGS_GR_GRAD_DT_CANNOT_LT_CUR';
64   			RETURN FALSE;
65   		END IF;
66   		CLOSE c_ceremony_daiv;
67   	END IF;
68   	IF p_closing_dt_alias IS NOT NULL AND
69   	    p_closing_dai_sequence_number IS NOT NULL  THEN
70   		OPEN c_closing_daiv;
71   		FETCH c_closing_daiv INTO v_gc_dai_found;
72   		IF c_closing_daiv%FOUND THEN
73   			CLOSE c_closing_daiv;
74   			p_message_name := 'IGS_GR_CERCL_DT_CANNOT_LT_CUR';
75   			RETURN FALSE;
76   		END IF;
77   		CLOSE c_closing_daiv;
78   	END IF;
79   	IF p_ceremony_dt_alias IS NULL OR
80   	    p_ceremony_dai_sequence_number IS NULL OR
81   	    p_closing_dt_alias IS NULL OR
82   	    p_closing_dai_sequence_number IS NULL THEN
83   		RETURN TRUE;
84   	END IF;
85   	OPEN c_daiv;
86   	FETCH c_daiv INTO v_gc_dai_found;
87   	IF c_daiv%NOTFOUND THEN
88   		CLOSE c_daiv;
89   		p_message_name := 'IGS_GR_CER_CL_DT_LE_CERM_DT';
90   		RETURN FALSE;
91   	END IF;
92   	CLOSE c_daiv;
93   	RETURN TRUE;
94   EXCEPTION
95   	WHEN OTHERS THEN
96   		IF c_daiv%ISOPEN THEN
97   			CLOSE c_daiv;
98   		END IF;
99   		RAISE;
100   END;
101   EXCEPTION
102   	WHEN OTHERS THEN
103        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
104        		IGS_GE_MSG_STACK.ADD;
105        		App_Exception.Raise_Exception;
106 
107   END grdp_val_gc_dai;
108   --
109   -- Validate the graduation ceremony can be updated
110   FUNCTION grdp_val_gc_upd(
111   p_grd_cal_type IN VARCHAR2 ,
112   p_grd_ci_sequence_number IN NUMBER ,
113   p_ceremony_number IN NUMBER ,
114   p_message_name OUT NOCOPY VARCHAR2 )
115   RETURN BOOLEAN AS
116 
117   BEGIN	-- grdp_val_gc_upd
118   	-- Description: Check if any IGS_GR_AWD_CRMN records exist
119   	-- for this IGS_GR_CRMN.
120   DECLARE
121   	v_gac_exists	VARCHAR2(1);
122   	CURSOR	c_gac IS
123   		SELECT	'X'
124   		FROM	IGS_GR_AWD_CRMN		gac
125   		WHERE	gac.grd_cal_type		= p_grd_cal_type AND
126   			gac.grd_ci_sequence_number	= p_grd_ci_sequence_number AND
127   			gac.ceremony_number		= p_ceremony_number;
128   BEGIN
129   	p_message_name := NULL;
130   	IF p_grd_cal_type IS NULL OR
131      			p_grd_ci_sequence_number IS NULL OR
132      			p_ceremony_number IS NULL THEN
133   		RETURN TRUE;
134   	END IF;
135   	OPEN c_gac;
136   	FETCH c_gac INTO v_gac_exists;
137   	IF (c_gac%FOUND) THEN
138   		CLOSE c_gac;
139   		p_message_name := 'IGS_GR_DATES_CANNOT_BE_CHANGE';
140   		RETURN FALSE;
141   	END IF;
142   	CLOSE c_gac;
143   	RETURN TRUE;
144   EXCEPTION
145   	WHEN OTHERS THEN
146   		IF (c_gac%ISOPEN) THEN
147   			CLOSE c_gac;
148   		END IF;
149   	RAISE;
150   END;
151   EXCEPTION
152   	WHEN OTHERS THEN
153        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
154        		IGS_GE_MSG_STACK.ADD;
155        		App_Exception.Raise_Exception;
156   END grdp_val_gc_upd;
157   --
158   -- Validate the ceremony round linked to the graduation ceremony
159   FUNCTION grdp_val_gc_crd(
160   p_grd_cal_type IN VARCHAR2 ,
161   p_grd_ci_sequence_number IN NUMBER ,
162   p_message_name OUT NOCOPY VARCHAR2 )
163   RETURN BOOLEAN AS
164 
165   BEGIN	-- grdp_val_gc_crd
166   DECLARE
167   	v_crdp_exists		VARCHAR2(1);
168   	CURSOR c_crdp IS
169   		SELECT	'x'
170   		FROM	IGS_GR_CRM_ROUND_PRD crdp
171   		WHERE	crdp.grd_cal_type		= p_grd_cal_type AND
172   			crdp.grd_ci_sequence_number	= p_grd_ci_sequence_number;
173   BEGIN
174   	-- Set the default message number
175   	p_message_name := NULL;
176   	--1. Check parameters :
177   	IF p_grd_cal_type IS NULL OR
178   			p_grd_ci_sequence_number IS NULL THEN
179   		RETURN TRUE;
180   	END IF;
181   	--2. Return a warning if no IGS_GR_CRMN_ROUND_PRD records exist for the
182   	--specified IGS_GR_CRMN_ROUND.
183   	OPEN c_crdp;
184   	FETCH c_crdp INTO v_crdp_exists;
185   	IF c_crdp%NOTFOUND THEN
186   		CLOSE c_crdp;
187   		p_message_name := 'IGS_GR_NO_CERM_ROUND_PERIOD';
188   		RETURN TRUE;		-- Warning only
189   	END IF;
190   	CLOSE c_crdp;
191   	-- Return the default value
192   	RETURN TRUE;
193   EXCEPTION
194   	WHEN OTHERS THEN
195   		IF c_crdp%ISOPEN THEN
196   			CLOSE c_crdp;
197   		END IF;
198   		RAISE;
199   END;
200   EXCEPTION
201   	WHEN OTHERS THEN
202        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
203        		IGS_GE_MSG_STACK.ADD;
204        		App_Exception.Raise_Exception;
205   END grdp_val_gc_crd;
206   --
207   -- Validate the start and end time of the graduation ceremony
208   FUNCTION grdp_val_gc_times(
209   p_grd_cal_type IN VARCHAR2 ,
210   p_grd_ci_sequence_number IN NUMBER ,
211   p_ceremony_number IN NUMBER ,
212   p_venue_cd IN VARCHAR2 ,
213   p_ceremony_dt_alias IN VARCHAR2 ,
214   p_ceremony_dai_sequence_number IN NUMBER ,
215   p_ceremony_start_time IN DATE ,
216   p_ceremony_end_time IN DATE ,
217   p_message_name OUT NOCOPY VARCHAR2 )
218   RETURN BOOLEAN AS
219   BEGIN	-- grdp_val_gc_times
220   	-- Check if the ceremony_start_time is after the ceremony_end_time.
221   	-- Check if the graduation_ceremony ceremony date(ceremony_dt_alias,
222   	--ceremony_dai_sequence_number), venue_cd, ceremony_start_time and
223   	--ceremony_end_time overlap with another graduation_ceremony.
224   DECLARE
225   	v_gc_daiv_exists	VARCHAR2(1);
226   	CURSOR c_gc_daiv IS
227   		SELECT	'x'
228   		FROM	IGS_GR_CRMN	gc,
229   			IGS_CA_DA_INST_V	daiv1,
230   			IGS_CA_DA_INST_V	daiv2
231   		WHERE	gc.grd_cal_type			= p_grd_cal_type			AND
232   			gc.grd_ci_sequence_number	= p_grd_ci_sequence_number		AND
233   			gc.ceremony_number		<> p_ceremony_number			AND
234   			gc.venue_cd			= p_venue_cd				AND
235   			gc.ceremony_dt_alias		= daiv1.dt_alias			AND
236   			gc.ceremony_dai_sequence_number	= daiv1.sequence_number			AND
237   			gc.grd_cal_type			= daiv1.cal_type			AND
238   			gc.grd_ci_sequence_number	= daiv1.ci_sequence_number		AND
239   			daiv2.dt_alias			= p_ceremony_dt_alias			AND
240   			daiv2.sequence_number		= p_ceremony_dai_sequence_number	AND
241   			daiv2.cal_type			= p_grd_cal_type			AND
242   			daiv2.ci_sequence_number	= p_grd_ci_sequence_number		AND
243   			TRUNC(daiv1.alias_val)		= TRUNC(daiv2.alias_val)		AND
244   			((TO_CHAR(p_ceremony_start_time, 'HH24:MI') >
245   				TO_CHAR(gc.ceremony_start_time, 'HH24:MI')		AND
246   			TO_CHAR(p_ceremony_start_time, 'HH24:MI') <
247   				TO_CHAR(gc.ceremony_end_time, 'HH24:MI'))			OR
248   			(TO_CHAR(p_ceremony_end_time, 'HH24:MI') >
249   				 TO_CHAR(gc.ceremony_start_time, 'HH24:MI')		AND
250   			TO_CHAR(p_ceremony_end_time, 'HH24:MI') <=
251   				TO_CHAR(gc.ceremony_end_time, 'HH24:MI'))		OR
252   			(TO_CHAR(p_ceremony_start_time, 'HH24:MI') <=
253   				TO_CHAR(gc.ceremony_start_time, 'HH24:MI')		AND
254   			TO_CHAR(p_ceremony_end_time, 'HH24:MI') >=
255   				TO_CHAR(gc.ceremony_end_time, 'HH24:MI')));
256   BEGIN
257   	-- Set the default message number
258   	p_message_name := NULL;
259   	--1. Check parameters :
260   	IF p_grd_cal_type	IS NULL OR
261   			p_grd_ci_sequence_number	IS NULL OR
262   			p_ceremony_number		IS NULL OR
263   			p_venue_cd			IS NULL OR
264   			p_ceremony_dt_alias		IS NULL OR
265   			p_ceremony_dai_sequence_number	IS NULL OR
266   			p_ceremony_start_time		IS NULL OR
267   			p_ceremony_end_time		IS NULL THEN
268   		RETURN TRUE;
269   	END IF;
270   	--Check if ceremony_start_time is after the ceremony_end_time..
271   	IF TO_CHAR(p_ceremony_start_time, 'HH24:MI') >
272   	    TO_CHAR(p_ceremony_end_time, 'HH24:MI') THEN
273   		p_message_name := 'IGS_GR_CERM_TIME_LT_END_TIME';
274   		RETURN FALSE;
275   	END IF;
276   	--Check if the start and end times overlap with another ceremony on the
277   	--same day at the same venue.
278   	OPEN c_gc_daiv;
279   	FETCH c_gc_daiv INTO v_gc_daiv_exists;
280   	IF c_gc_daiv%FOUND THEN
281   		CLOSE c_gc_daiv;
282   		p_message_name := 'IGS_GR_CERM_DT_TIME_OVERLAPS';
283   		RETURN FALSE;
284   	END IF;
285   	CLOSE c_gc_daiv;
286   	-- Return the default value
287   	RETURN TRUE;
288   EXCEPTION
289   	WHEN OTHERS THEN
290   		IF c_gc_daiv%ISOPEN THEN
291   			CLOSE c_gc_daiv;
292   		END IF;
293   		RAISE;
294   END;
295   EXCEPTION
296   	WHEN OTHERS THEN
297        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
298        		IGS_GE_MSG_STACK.ADD;
299        		App_Exception.Raise_Exception;
300   END grdp_val_gc_times;
301   --
302   -- Validate the ins/upd/del to the graduation ceremony
303   FUNCTION grdp_val_gc_iud(
304   p_grd_cal_type IN VARCHAR2 ,
305   p_grd_ci_sequence_number IN NUMBER ,
306   p_ceremony_number IN NUMBER ,
307   p_message_name OUT NOCOPY VARCHAR2 )
308   RETURN BOOLEAN AS
309   BEGIN	-- grdp_val_gc_iud
310   DECLARE
311   	v_gc_daiv_exists	VARCHAR2(1);
312   	CURSOR c_gc_daiv IS
313   		SELECT	'x'
314   		FROM	IGS_GR_CRMN	gc,
315   			IGS_CA_DA_INST_V	daiv
316   		WHERE	gc.grd_cal_type			= p_grd_cal_type		AND
317   			gc.grd_ci_sequence_number	= p_grd_ci_sequence_number	AND
318   			gc.ceremony_number		= p_ceremony_number		AND
319   			gc.ceremony_dt_alias		= daiv.dt_alias			AND
320   			gc.ceremony_dai_sequence_number	= daiv.sequence_number		AND
321   			gc.grd_cal_type			= daiv.cal_type			AND
322   			gc.grd_ci_sequence_number	= daiv.ci_sequence_number	AND
323   			TRUNC(daiv.alias_val)		< TRUNC(SYSDATE);
324   BEGIN
325   	-- Set the default message number
326   	p_message_name := NULL;
327   	--1. Check parameters :
328   	IF p_grd_cal_type IS NULL OR
329   			p_grd_ci_sequence_number	IS NULL OR
330   			p_ceremony_number		IS NULL THEN
331   		RETURN TRUE;
332   	END IF;
333   	--2. Return a warning if ceremony_round start_dt_alias has a value earlier
334   	-- than the current date.
335   	OPEN c_gc_daiv;
336   	FETCH c_gc_daiv INTO v_gc_daiv_exists;
337   	IF c_gc_daiv%FOUND THEN
338   		CLOSE c_gc_daiv;
339   		p_message_name := 'IGS_GR_CERMONY_DT_EXPIRED';
340   		RETURN FALSE;
341   	END IF;
342   	CLOSE c_gc_daiv;
343   	-- Return the default value
344   	RETURN TRUE;
345   EXCEPTION
346   	WHEN OTHERS THEN
347   		IF c_gc_daiv%ISOPEN THEN
348   			CLOSE c_gc_daiv;
349   		END IF;
350   		RAISE;
351   END;
352   EXCEPTION
353   	WHEN OTHERS THEN
354        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
355        		IGS_GE_MSG_STACK.ADD;
356        		App_Exception.Raise_Exception;
357   END grdp_val_gc_iud;
358   --
359   -- Validate if the venue has a system location type of CRD_CTR
360   FUNCTION grdp_val_ve_lot(
361   p_venue_cd IN VARCHAR2 ,
362   p_message_name OUT NOCOPY VARCHAR2 )
363   RETURN BOOLEAN AS
364   BEGIN	-- grdp_val_ve_lot
365   	-- Validate that the venue relates to a location which has a
366   	-- location_type.s_location_type of GRD_CTR
367   DECLARE
368   	v_ve_lot_found		VARCHAR2(1);
369   	cst_grd_ctr		CONSTANT VARCHAR2(10) := 'GRD_CTR';
370   	CURSOR	c_ve IS
371   		SELECT	'x'
372   		FROM	IGS_GR_VENUE		ve,
373   			IGS_AD_LOCATION	loc,
374   			IGS_AD_LOCATION_TYPE	lot
375   		WHERE	ve.venue_cd		= p_venue_cd AND
376   			ve.exam_location_cd	= loc.location_cd AND
377   			loc.location_type	= lot.location_type AND
378   			lot.s_location_type	= cst_grd_ctr;
379   BEGIN
380   	p_message_name := NULL;
381   	IF p_venue_cd IS NULL THEN
382   		RETURN TRUE;
383   	END IF;
384   	OPEN c_ve;
385   	FETCH c_ve INTO v_ve_lot_found;
386   	IF c_ve%NOTFOUND THEN
387   		CLOSE c_ve;
388   		p_message_name := 'IGS_GR_TYPE_MUST_BE_GRD_CTR';
389   		RETURN FALSE;
390   	END IF;
391   	CLOSE c_ve;
392   	RETURN TRUE;
393   EXCEPTION
394   	WHEN OTHERS THEN
395   		IF c_ve%ISOPEN THEN
396   			CLOSE c_ve;
397   		END IF;
398   		RAISE;
399   END;
400   EXCEPTION
401   	WHEN OTHERS THEN
402        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
403        		IGS_GE_MSG_STACK.ADD;
404        		App_Exception.Raise_Exception;
405   END grdp_val_ve_lot;
406   --
407   -- To validate the venue closed indicator
408   FUNCTION ASSP_VAL_VE_CLOSED(
409   p_venue_cd IN VARCHAR2 ,
410   p_message_name OUT NOCOPY VARCHAR2 )
411   RETURN boolean AS
412   BEGIN	-- assp_val_ve_closed
413   	-- Validate the venue closed indicator
414   DECLARE
415   	v_venue_cd	IGS_GR_VENUE.venue_cd%TYPE;
416   	v_ve_closed_ind	IGS_GR_VENUE.closed_ind%TYPE;
417   	v_ret_val	BOOLEAN	DEFAULT TRUE;
418   	CURSOR	c_ve IS
419   		SELECT closed_ind
420   		FROM	IGS_GR_VENUE
421   		WHERE	venue_cd = p_venue_cd;
422   BEGIN
423   	p_message_name := NULL;
424   	OPEN c_ve;
425   	FETCH c_ve INTO v_ve_closed_ind;
426   	IF (c_ve%FOUND) THEN
427   		IF (v_ve_closed_ind = 'Y') THEN
428   			p_message_name := 'IGS_AS_VENUE_CLOSED';
429   			v_ret_val := FALSE;
430   		END IF;
431   	END IF;
432   	CLOSE c_ve;
433   	RETURN v_ret_val;
434   END;
435   EXCEPTION
436   	WHEN OTHERS THEN
437        		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
438        		IGS_GE_MSG_STACK.ADD;
439        		App_Exception.Raise_Exception;
440   END assp_val_ve_closed;
441 END IGS_GR_VAL_GC;