DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_VAL_ESE

Source


1 PACKAGE BODY IGS_AS_VAL_ESE AS
2 /* $Header: IGSAS19B.pls 115.5 2002/11/28 22:44:11 nsidana ship $ */
3 
4 
5   --
6   -- To validate the uniqueness of the exam session number
7   FUNCTION ASSP_VAL_ESE_NUM(
8   p_exam_cal_type IN VARCHAR2 ,
9   p_exam_ci_sequence_number IN NUMBER ,
10   P_MESSAGE_NAME OUT NOCOPY VARCHAR2 )
11   RETURN BOOLEAN AS
12 
13   BEGIN	-- assp_val_ese_num
14   	-- Validate the exam session number for an entire examination.
15   	-- The number must be unique across the period
16   DECLARE
17   	v_check		CHAR;
18   	v_ret_val	BOOLEAN DEFAULT TRUE;
19   	CURSOR c_es IS
20   		SELECT	dt_alias,
21   			dai_sequence_number,
22   			start_time,
23   			end_time,
24   			exam_session_number
25   		FROM	IGS_AS_EXAM_SESSION es
26   		WHERE	exam_cal_type 		= p_exam_cal_type AND
27   			exam_ci_sequence_number = p_exam_ci_sequence_number;
28   	CURSOR c_es1 (
29   			cp_dt_alias		IGS_AS_EXAM_SESSION.dt_alias%TYPE,
30   			cp_dai_sequence_number	IGS_AS_EXAM_SESSION.dai_sequence_number%TYPE,
31   			cp_start_time		IGS_AS_EXAM_SESSION.start_time%TYPE,
32   			cp_end_time		IGS_AS_EXAM_SESSION.end_time%TYPE,
33   			cp_exam_session_number	IGS_AS_EXAM_SESSION.exam_session_number%TYPE) IS
34   		SELECT	'x'
35   		FROM	IGS_AS_EXAM_SESSION es
36   		WHERE	es.exam_cal_type 		= p_exam_cal_type 		AND
37   			es.exam_ci_sequence_number 	= p_exam_ci_sequence_number 	AND
38   			(dt_alias <> cp_dt_alias 			OR
39   			 dai_sequence_number <> cp_dai_sequence_number	OR
40   			 start_time <> cp_start_time			OR
41   			 end_time <> cp_end_time) AND
42   			exam_session_number = cp_exam_session_number;
43   BEGIN
44   	P_MESSAGE_NAME := NULL;
45   	FOR v_es_rec IN c_es LOOP
46   		OPEN c_es1 (
47   				v_es_rec.dt_alias,
48   				v_es_rec.dai_sequence_number,
49   				v_es_rec.start_time,
50   				v_es_rec.end_time,
51   				v_es_rec.exam_session_number);
52   		FETCH c_es1 INTO v_check;
53   		IF (c_es1%FOUND) THEN
54   			CLOSE c_es1;
55   			P_MESSAGE_NAME := 'IGS_AS_MORE_THAN_ONE_SESSION';
56   			v_ret_val := FALSE;
57   			EXIT;
58   		END IF;
59   		CLOSE c_es1;
60   	END LOOP;
61   	RETURN v_ret_val;
62   END;
63   EXCEPTION
64   	WHEN OTHERS THEN
65 	  	FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
66 	  	FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_ESE.assp_val_ese_num');
67 	  	IGS_GE_MSG_STACK.ADD;
68   END assp_val_ese_num;
69   --
70   -- To validate for overlap in start/end times of exam sessions
71   FUNCTION ASSP_VAL_ESE_OVRLP(
72   p_exam_cal_type IN VARCHAR2 ,
73   p_exam_ci_sequence_number IN NUMBER ,
74   p_dt_alias IN VARCHAR2 ,
75   p_dai_sequence_number IN NUMBER ,
76   p_start_time IN DATE ,
77   p_end_time IN DATE ,
78   P_MESSAGE_NAME OUT NOCOPY VARCHAR2 )
79   RETURN BOOLEAN AS
80 
81   BEGIN 	-- assp_val_ese_ovrlp
82   	-- Validate whether the examination session overlaps times with another session
83   	-- within the same examination calendar.
84   	-- This routine only returns warning, as it is seen as possible in unusual
85   	-- situations
86   DECLARE
87   	v_alias_val	IGS_AS_EXAM_SESSION_V.alias_val%TYPE;
88   	CURSOR	c_daiv(
89   			cp_exam_cal_type 		IGS_CA_DA_INST_V.cal_type%TYPE,
90   			cp_exam_ci_sequence_number 	IGS_CA_DA_INST_V.ci_sequence_number%TYPE,
91   			cp_dt_alias 			IGS_CA_DA_INST_V.dt_alias%TYPE,
92   			cp_dai_sequence_number		IGS_CA_DA_INST_V.sequence_number%TYPE) IS
93   		SELECT	daiv.alias_val
94   		FROM	IGS_CA_DA_INST_V		daiv
95   		WHERE	daiv.cal_type 			= cp_exam_cal_type AND
96   			daiv.ci_sequence_number 	= cp_exam_ci_sequence_number AND
97   		     	daiv.dt_alias 			= cp_dt_alias AND
98   			daiv.sequence_number		= cp_dai_sequence_number;
99   	CURSOR c_esv (
100   			cp_exam_cal_type 		IGS_AS_EXAM_SESSION_V.exam_cal_type%TYPE,
101   			cp_exam_ci_sequence_number 	IGS_AS_EXAM_SESSION_V.exam_ci_sequence_number%TYPE,
102   			cp_alias_val			IGS_AS_EXAM_SESSION_V.alias_val%TYPE) IS
103   		SELECT	*
104   		FROM	IGS_AS_EXAM_SESSION_V			esv
105   		WHERE	esv.exam_cal_type		= cp_exam_cal_type AND
106   			esv.exam_ci_sequence_number	= cp_exam_ci_sequence_number AND
107   			esv.alias_val			= cp_alias_val;
108   BEGIN
109   	P_MESSAGE_NAME := NULL;
110   	-- Validate parameters
111   	IF(p_exam_cal_type IS NULL OR
112   			p_exam_ci_sequence_number IS NULL OR
113   			p_dt_alias IS NULL OR
114   			p_dai_sequence_number IS NULL OR
115   			p_start_time IS NULL OR
116   			p_end_time IS NULL) THEN
117   		RETURN TRUE;
118   	END IF;
119   	-- Get the session date of the parameter session by querying
120   	-- the date alias instance view
121   	OPEN	c_daiv(
122   			p_exam_cal_type,
123   			p_exam_ci_sequence_number,
124   			p_dt_alias,
125   			p_dai_sequence_number);
126   	FETCH	c_daiv	INTO v_alias_val;
127   	IF(c_daiv%NOTFOUND) THEN
128   		CLOSE c_daiv;
129   		RETURN TRUE;
130   	END IF;
131   	CLOSE c_daiv;
132   	-- Loop through IGS_AS_EXAM_SESSION_V records validating each record for
133   	-- time overlaps
134   	FOR v_esv_rec IN c_esv(
135   				p_exam_cal_type,
136   				p_exam_ci_sequence_number,
137   				v_alias_val) LOOP
138   		IF(v_esv_rec.dt_alias = p_dt_alias AND
139   				v_esv_rec.dai_sequence_number = p_dai_sequence_number AND
140   				v_esv_rec.start_time = p_start_time AND
141   				v_esv_rec.end_time = p_end_time) THEN
142   			-- Do not validate against the record passed in
143   			NULL;
144   		ELSE
145   			IF(
146   					(p_start_time >= v_esv_rec.start_time AND
147   					 p_start_time <= v_esv_rec.end_time) OR
148   					(p_end_time >= v_esv_rec.start_time AND
149   					 p_end_time <= v_esv_rec.end_time) OR
150   					(p_start_time <= v_esv_rec.start_time AND
151   					 p_end_time >= v_esv_rec.end_time)) THEN
152   				P_MESSAGE_NAME := 'IGS_AS_SESSION_TIMES_OVERLAP';
153   				RETURN FALSE;
154   			END IF;
155   		END IF;
156   	END LOOP;
157   	RETURN TRUE;
158   END;
159   EXCEPTION
160   	WHEN OTHERS THEN
161 	  	FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
162 	  	FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_ESE.assp_val_ese_ovrlp');
163 	  	IGS_GE_MSG_STACK.ADD;
164   END assp_val_ese_ovrlp;
165   --
166   -- Validate the IGS_AS_EXAM_SESSION calendar instance
167   FUNCTION ASSP_VAL_ESE_CI(
168   p_cal_type IN VARCHAR2 ,
169   p_sequence_number IN NUMBER ,
170   P_MESSAGE_NAME OUT NOCOPY VARCHAR2 )
171   RETURN BOOLEAN AS
172 
173   BEGIN	-- assp_val_ese_ci
174   	-- Validate the calendar instance being linked to an IGS_AS_EXAM_SESSION record.
175   	-- Check for :
176   	--  . Calendar type must have SI_CA_S_CA_CAT of 'EXAM'
177   	--  . Calendar instance must have s_cal_status of 'ACTIVE'
178   DECLARE
179   	CURSOR c_cat IS
180   		SELECT	s_cal_cat
181   		FROM	IGS_CA_TYPE
182   		WHERE	cal_type = p_cal_type;
183   	v_cat_rec	c_cat%ROWTYPE;
184   	CURSOR c_cs IS
185   		SELECT	s_cal_status
186   		FROM	IGS_CA_INST	ci,
187   			IGS_CA_STAT	cs
188   		WHERE	ci.cal_type		= p_cal_type	AND
189   			ci.sequence_number	= p_sequence_number AND
190   			cs.cal_status		= ci.cal_status;
191   	v_cs_rec	c_cs%ROWTYPE;
192   BEGIN
193   	-- Set the default message number
194   	P_MESSAGE_NAME := NULL;
195   	-- 1. Check that calendar type is an examination calendar.
196   	OPEN c_cat;
197   	FETCH c_cat INTO v_cat_rec;
198   	IF (c_cat%NOTFOUND) THEN
199   		CLOSE c_cat;
200   		-- Calendar type is not valid ; the routine is not applicable.
201   		P_MESSAGE_NAME := NULL;
202   		RETURN TRUE;
203   	ELSE
204   		CLOSE c_cat;
205   		IF (v_cat_rec.s_cal_cat <> 'EXAM') THEN
206   			P_MESSAGE_NAME := 'IGS_AS_EXAMSESSIONS_LINKS';
207   			RETURN FALSE;
208   		END IF;
209   	END IF;
210   	-- 2. Check that calendar instance is active
211   	OPEN c_cs;
212   	FETCH c_cs INTO v_cs_rec;
213   	IF (c_cs%NOTFOUND) THEN
214   		CLOSE c_cs;
215   		-- The calendar instance is not valid ; the routine is not applicable.
216   		P_MESSAGE_NAME := NULL;
217   		RETURN TRUE;
218   	ELSE
219   		CLOSE c_cs;
220   		IF (v_cs_rec.s_cal_status <> 'ACTIVE') THEN
221   			P_MESSAGE_NAME := 'IGS_AS_EXAMCAL_NOT_ACTIVE';
222   			RETURN FALSE;
223   		END IF;
224   	END IF;
225   	RETURN TRUE;
226   END;
227   EXCEPTION
228   	WHEN OTHERS THEN
229 	  	FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
230 	  	FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_ESE.assp_val_ese_ci');
231 	  	IGS_GE_MSG_STACK.ADD;
232   END assp_val_ese_ci;
233   --
234   -- Compare time component of two dates and start time is before end time.
235   FUNCTION GENP_VAL_STRT_END_TM(
236   p_start_time IN DATE ,
237   p_end_time IN DATE ,
238   P_MESSAGE_NAME OUT NOCOPY VARCHAR2 )
239   RETURN BOOLEAN AS
240 
241   BEGIN
242   DECLARE
243   	v_start_time		DATE;
244   	v_end_time		DATE;
245   BEGIN
246   	--- Set the default message number
247   	P_MESSAGE_NAME := NULL;
248   	--- Make sure the only comparing the time component and that the dates
249   	--- are identical. (01/01/1900 is an arbitrary date)
250   	v_start_time := IGS_GE_DATE.IGSDATE( '1900/01/01 ' || SUBSTR(IGS_GE_DATE.IGSCHARDT(p_start_time),12));
251   	v_end_time := IGS_GE_DATE.IGSDATE( '1900/01/01 ' || SUBSTR(IGS_GE_DATE.IGSCHARDT(p_end_time),12));
252   	IF v_end_time <= v_start_time THEN
253   		P_MESSAGE_NAME := 'IGS_GE_ST_TIME_LT_END_TIME';
254   		RETURN FALSE;
255   	ELSE
256   		RETURN TRUE;
257   	END IF;
258   END;
259   EXCEPTION
260   	WHEN OTHERS THEN
261 	  	FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
262 	  	FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_ESE.GENP_VAL_STRT_END_TM');
263 	  	IGS_GE_MSG_STACK.ADD;
264   END GENP_VAL_STRT_END_TM;
265 END IGS_AS_VAL_ESE;