DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_VAL_SCSR

Source


1 PACKAGE BODY IGS_EN_VAL_SCSR  AS
2 /* $Header: IGSEN65B.pls 115.5 2002/11/29 00:06:52 nsidana ship $ */
3   --
4   -- Validate the student course special requirement dates.
5   FUNCTION enrp_val_scsr_dates(
6   p_person_id IN NUMBER ,
7   p_course_cd IN VARCHAR2 ,
8   p_special_requirement_cd IN VARCHAR2 ,
9   p_completed_dt IN DATE ,
10   p_expiry_dt IN DATE ,
11   p_message_name OUT NOCOPY VARCHAR2)
12   RETURN BOOLEAN  AS
13    BEGIN	-- enrp_val_scsr_dates
14   	-- * Validate that if the expiry_dt of the current record is NULL that another
15   	--   IGS_PS_STDNT_SPL_REQ record does not does not exist for the same
16   	--   IGS_EN_STDNT_PS_ATT with the same special_requirement_cd with a NULL
17   	--   expiry_dt.
18   	-- * Validate that the current record's completed_dt and expiry_dt do not
19   	--    overlap with another IGS_PS_STDNT_SPL_REQ record for the same
20   	--    IGS_EN_STDNT_PS_ATT with the same special_requirement_cd.
21   	-- * Validation will fail if any of the following are true -
22   	-- (a)   The current completed date is between an existing date range.
23   	-- (b)  The current expiry date is between an existing date range.
24   	-- (c)  The current dates overlap an entire existing date range.
25   	-- (d)  The current dates overlap an existing completed date.
26   	-- (e) The current open date range is before an existing completed
27   	-- or expiry date.
28   DECLARE
29   	v_dummy 	VARCHAR2(1);
30   	v_ret_val	BOOLEAN := TRUE;
31   	CURSOR c_scsr1 IS
32   		SELECT	'X'
33   		FROM	IGS_PS_STDNT_SPL_REQ scsr1
34   		WHERE	scsr1.person_id 		= p_person_id AND
35   			scsr1.course_cd 		= p_course_cd AND
36   			scsr1.special_requirement_cd 	= p_special_requirement_cd AND
37   			scsr1.completed_dt 		<> p_completed_dt AND
38   			scsr1.expiry_dt IS NULL;
39   	CURSOR c_scsr2 IS
40   		SELECT	scsr2.completed_dt,
41   			scsr2.expiry_dt
42   		FROM	IGS_PS_STDNT_SPL_REQ scsr2
43   		WHERE	scsr2.person_id 		= p_person_id AND
44   			scsr2.course_cd 		= p_course_cd AND
45   			scsr2.special_requirement_cd 	= p_special_requirement_cd AND
46   			scsr2.completed_dt 		<> p_completed_dt;
47   BEGIN
48   	-- Set the default message number
49   	p_message_name := null;
50   	-- 1.	Check the passed parameters.
51   	IF p_person_id IS NULL OR
52      			p_course_cd IS NULL OR
53      			p_special_requirement_cd IS NULL OR
54      			p_completed_dt IS NULL THEN
55   		p_message_name := null;
56   		RETURN v_ret_val;
57   	END IF;
58   	-- 2.	Check if p_expiry_dt is NULL and that no other matching records exist
59   	--      with a NULL expiry_dt.
60 	-- New message created for bug#2283458
61   	OPEN c_scsr1;
62   	FETCH c_scsr1 INTO v_dummy;
63   	IF p_expiry_dt IS NULL THEN
64   		IF (c_scsr1%FOUND) THEN
65   			CLOSE c_scsr1;
66   			p_message_name := 'IGS_EN_COMPLDT_OVERLAPS';
67   			v_ret_val := FALSE;
68   			RETURN v_ret_val;
69   		END IF;
70   	END IF;
71   	CLOSE c_scsr1;
72   	-- 3.	Find all of the matching records accept for the record passed in.
73   	-- 4.	Loop through the matching records checking for records with
74   	--      overlapping dates.
75   	FOR v_scsr2_rec IN c_scsr2 LOOP
76   		IF v_scsr2_rec.expiry_dt IS NOT NULL THEN
77   			-- Validate (a),(b),(c),(e)
78   			IF p_completed_dt >= v_scsr2_rec.completed_dt AND
79   					p_completed_dt <= v_scsr2_rec.expiry_dt THEN
80   				p_message_name := 'IGS_EN_COMPLDT_BTWN_STDT_COMD';
81   				v_ret_val := FALSE;
82   			END IF;
83   			IF p_expiry_dt IS NOT NULL THEN
84   				-- Validate (b),(c)
85   				IF p_expiry_dt >= v_scsr2_rec.completed_dt AND
86   						p_expiry_dt <= v_scsr2_rec.expiry_dt THEN
87   					p_message_name := 'IGS_EN_EXPDT_BTWN_EXPDT_COMPL';
88   					v_ret_val := FALSE;
89   				END IF;
90   				IF p_completed_dt <= v_scsr2_rec.completed_dt AND
91   						p_expiry_dt >= v_scsr2_rec.expiry_dt THEN
92   					p_message_name := 'IGS_EN_COMPLDT_EXPDT_ENCOMPAS';
93   					v_ret_val := FALSE;
94   				END IF;
95   			ELSE
96   				-- p_expiry_dt IS NULL and Validate (e)
97   				IF p_completed_dt <= v_scsr2_rec.completed_dt OR
98   						p_completed_dt <= v_scsr2_rec.expiry_dt THEN
99   					p_message_name := 'IGS_EN_UNEXP_RECORD_OVERLAPS';
100   					v_ret_val := FALSE;
101   				END IF;
102   			END IF;
103   		ELSE
104   			-- expiry_dt IS NULL and Validate (d)
105   			IF p_completed_dt >= v_scsr2_rec.completed_dt OR
106   					p_expiry_dt  >= v_scsr2_rec.completed_dt THEN
107   				p_message_name := 'IGS_EN_DT_OVERLAP_UNEXPIRED';
108   				v_ret_val := FALSE;
109   			END IF;
110   		END IF;
111   	END LOOP; -- c_scsr2
112   	RETURN v_ret_val;
113   EXCEPTION
114   	WHEN OTHERS THEN
115   		IF (c_scsr1%ISOPEN) THEN
116   			CLOSE c_scsr1;
117   		END IF;
118   		IF (c_scsr2%ISOPEN) THEN
119   			CLOSE c_scsr2;
120   		END IF;
121   		RAISE;
122   END;
123   EXCEPTION
124   	WHEN OTHERS THEN
125 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
126 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCSR.enrp_val_scsr_dates');
127 		IGS_GE_MSG_STACK.ADD;
128 			App_Exception.Raise_Exception;
129   END enrp_val_scsr_dates;
130   --
131   -- Validate the student course special requirement completed date.
132   FUNCTION enrp_val_scsr_cmp_dt(
133   p_completed_dt IN DATE ,
134   p_message_name OUT NOCOPY VARCHAR2)
135   RETURN BOOLEAN  AS
136    BEGIN	-- enrp_val_scsr_cmp_dt
137   	-- Validate thata IGS_PS_STDNT_SPL_REQ.completed_dt is less
138   	-- than or equal to today's date/
139   DECLARE
140   	CURSOR	c_scsr IS
141   		SELECT	'x'
142   		FROM	dual
143   		WHERE	SYSDATE < p_completed_dt;
144   	v_c_scsr_found		VARCHAR2(1) DEFAULT NULL;
145   BEGIN
146   	-- initialise p_message_name
147   	p_message_name := null;
148   	-- Check p_completed_dt
149   	IF p_completed_dt IS NULL THEN
150   		RETURN TRUE;
151   	END IF;
152   	-- Check if the sysdate is less than or equal to p_completed_dt
153   	OPEN c_scsr;
154   	FETCH c_scsr INTO v_c_scsr_found;
155   	IF (c_scsr%FOUND) THEN
156   		CLOSE c_scsr;
157   		p_message_name := 'IGS_EN_COMPLT_LE_TODAY_DATE';
158   		RETURN FALSE;
159   	END IF;
160   	CLOSE c_scsr;
161    	RETURN TRUE;
162   EXCEPTION
163   	WHEN OTHERS THEN
164   		IF (c_scsr%ISOPEN) THEN
165   			CLOSE c_scsr;
166   		END IF;
167   		RAISE;
168   END;
169   EXCEPTION
170   	WHEN OTHERS THEN
171 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
172 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCSR.enrp_val_scsr_cmp_dt');
173 		IGS_GE_MSG_STACK.ADD;
174 			App_Exception.Raise_Exception;
175   END enrp_val_scsr_cmp_dt;
176   --
177   -- Validate the student course special requirement expiry date.
178   FUNCTION enrp_val_scsr_exp_dt(
179   p_completed_dt IN DATE ,
180   p_expiry_dt IN DATE ,
181   p_message_name OUT NOCOPY VARCHAR2)
182   RETURN BOOLEAN  AS
183 
184   BEGIN	-- enrp_val_scsr_exp_dt
185   	-- Validate that IGS_PS_STDNT_SPL_REQ.expiry_dt
186   	-- if it is not NULL, it must be greater than or equal to the completed_dt
187   DECLARE
188   BEGIN
189   	-- Set the default message number
190   	p_message_name := null;
191   	IF p_completed_dt IS NULL OR
192   			p_expiry_dt IS NULL THEN
193   		p_message_name := null;
194   		RETURN TRUE;
195   	END IF;
196   	-- 2.	Check that the p_expiry_dt is not less than the p_completed_dt.
197   	IF p_expiry_dt < p_completed_dt THEN
198   		p_message_name := 'IGS_EN_EXPDT_GE_COMPLDT';
199   		RETURN FALSE;
200   	END IF;
201   	RETURN TRUE;
202   END;
203   EXCEPTION
204   	WHEN OTHERS THEN
205 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
206 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCSR.enrp_val_scsr_exp_dt');
207 		IGS_GE_MSG_STACK.ADD;
208 			App_Exception.Raise_Exception;
209   END enrp_val_scsr_exp_dt;
210   --
211   -- Validate the student course special requirement SCA status.
212   FUNCTION enrp_val_scsr_scas(
213   p_person_id IN IGS_EN_STDNT_PS_ATT_ALL.person_id%TYPE ,
214   p_course_cd IN IGS_EN_STDNT_PS_ATT_ALL.course_cd%TYPE ,
215   p_message_name OUT NOCOPY VARCHAR2)
216   RETURN BOOLEAN  AS
217 
218   BEGIN	-- enrp_val_scsr_scas
219   	-- Validate the IGS_EN_STDNT_PS_ATT.course_attempt_status is
220   	-- ENROLLED, COMPLETED, INACTIVE or INTERMIT (not DISCONTIN,
221   	-- DELETED, LAPSED or UNCONFIRM) before inserting, updating
222   	-- or deleting IGS_PS_STDNT_SPL_REQ records.
223   DECLARE
224   	CURSOR	c_sca IS
225   		SELECT	course_attempt_status
226   		FROM	IGS_EN_STDNT_PS_ATT
227   		WHERE	person_id	= p_person_id AND
228   			course_cd	= p_course_cd;
229   	v_course_attempt_status		IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
230   BEGIN
231   	p_message_name := null;
232   	-- Check parameters
233   	IF p_person_id IS NULL OR p_course_cd IS NULL THEN
234   		RETURN TRUE;
235   	END IF;
236   	-- Get the course_attempt_status for the specified
237   	-- IGS_EN_STDNT_PS_ATT.
238   	OPEN c_sca;
239   	FETCH c_sca INTO v_course_attempt_status;
240   	IF (c_sca%FOUND) THEN
241   		IF v_course_attempt_status IN (
242   						'DISCONTIN',
243   						'DELETED',
244   						'LAPSED',
245   						'UNCONFIRM') THEN
246   			CLOSE c_sca;
247   			p_message_name := 'IGS_EN_STUDPRG_SPLREQ_NOTIUD';
248   			RETURN FALSE;
249   		END IF;
250   	END IF;
251   	CLOSE c_sca;
252   	RETURN TRUE;
253   EXCEPTION
254   	WHEN OTHERS THEN
255   		IF (c_sca%ISOPEN) THEN
256   			CLOSE c_sca;
257   		END IF;
258   		RAISE;
259   END;
260   EXCEPTION
261   	WHEN OTHERS THEN
262 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
263 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCSR.enrp_val_scsr_scas');
264 		IGS_GE_MSG_STACK.ADD;
265 			App_Exception.Raise_Exception;
266   END enrp_val_scsr_scas;
267   --
268   -- Validate the special requirement closed indicator.
269   FUNCTION enrp_val_srq_closed(
270   p_special_requirement_cd IN VARCHAR2 ,
271   p_message_name OUT NOCOPY VARCHAR2)
272   RETURN BOOLEAN  AS
273    BEGIN	-- enrp_val_srq_closed
274   	-- Validate that the IGS_GE_SPL_REQ is not closed
275   DECLARE
276   	CURSOR	c_srq IS
277   		SELECT	'x'
278   		FROM	IGS_GE_SPL_REQ	srq
279   		WHERE	srq.special_requirement_cd	= p_special_requirement_cd AND
280   			srq.closed_ind			= 'Y';
281   	v_closed_ind		VARCHAR2(1) DEFAULT NULL;
282   BEGIN
283   	p_message_name := null;
284   	-- Check p_special_requirement_cd
285   	IF p_special_requirement_cd IS NULL THEN
286   		RETURN TRUE;
287   	END IF;
288   	-- Check that the closed_ind <> 'Y'
289   	OPEN c_srq;
290   	FETCH c_srq INTO v_closed_ind;
291   	IF (c_srq%FOUND) THEN
292   		CLOSE c_srq;
293   		p_message_name := 'IGS_EN_SPLREQ_CLOSED';
294   		RETURN  FALSE;
295   	END IF;
296   	CLOSE c_srq;
297   	RETURN TRUE;
298   EXCEPTION
299   	WHEN OTHERS THEN
300   		IF (c_srq%ISOPEN) THEN
301   			CLOSE c_srq;
302   		END IF;
303   		RAISE;
304   END;
305   EXCEPTION
306   	WHEN OTHERS THEN
307 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
308 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCSR.enrp_val_srq_closed');
309 		IGS_GE_MSG_STACK.ADD;
310 			App_Exception.Raise_Exception;
311   END enrp_val_srq_closed;
312   --
313 END IGS_EN_VAL_SCSR;