DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_VAL_US

Source


1 PACKAGE BODY IGS_PS_VAL_US AS
2 /* $Header: IGSPS68B.pls 115.6 2002/11/29 03:09:51 nsidana ship $ */
3 /*change history:
4  who        when       what
5 sarakshi    14-nov-2002    bug#2649028,modified function crsp_val_ver_dt,added parameter p_lgcy_validator
6                            and corresponding validations
7 vvutukur    08-apr-2002    modifications done in crsp_val_us_category for bug#2121770.*/
8   --
9   -- Validate the IGS_PS_UNIT set status closed indicator.
10   FUNCTION crsp_val_uss_closed(
11   p_unit_set_status IN VARCHAR2 ,
12   p_message_name OUT NOCOPY VARCHAR2 )
13   RETURN BOOLEAN AS
14   BEGIN	-- crsp_val_uss_closed
15   	-- Validate the IGS_PS_UNIT set status closed indicator
16   DECLARE
17   	v_closed_ind		IGS_EN_UNIT_SET_STAT.closed_ind%TYPE;
18   	CURSOR c_uss IS
19   		SELECT	uss.closed_ind
20   		FROM	IGS_EN_UNIT_SET_STAT	uss
21   		WHERE	uss.unit_set_status = p_unit_set_status;
22   BEGIN
23   	OPEN c_uss;
24   	FETCH c_uss INTO v_closed_ind;
25   	IF (c_uss%NOTFOUND) THEN
26   		CLOSE c_uss;
27   		p_message_name := NULL;
28   		RETURN TRUE;
29   	END IF;
30   	CLOSE c_uss;
31   	IF (v_closed_ind = 'Y') THEN
32   		p_message_name := 'IGS_PS_UNIT_SET_STATUS_CLOSED';
33   		RETURN FALSE;
34   	END IF;
35   	p_message_name := NULL;
36   	RETURN TRUE;
37   EXCEPTION
38   	WHEN OTHERS THEN
39   		IF (c_uss%ISOPEN) THEN
40   			CLOSE c_uss;
41   		END IF;
42   		App_Exception.Raise_Exception;
43   END;
44   EXCEPTION
45   	WHEN OTHERS THEN
46 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
47 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_uss_closed');
48 	IGS_GE_MSG_STACK.ADD;
49 	App_Exception.Raise_Exception;
50   END crsp_val_uss_closed;
51   --
52   -- Validate the IGS_PS_UNIT set category closed indicator.
53   FUNCTION crsp_val_usc_closed(
54   p_unit_set_cat IN VARCHAR2 ,
55   p_message_name OUT NOCOPY VARCHAR2 )
56   RETURN BOOLEAN AS
57   BEGIN   --crsp_val_usc_closed
58           -- Validate the IGS_PS_UNIT set closed closed indicator
59   DECLARE
60           v_closed_ind        IGS_EN_UNIT_SET_CAT.closed_ind%TYPE;
61   	CURSOR c_usc IS
62   	SELECT  usc.closed_ind
63   	FROM    IGS_EN_UNIT_SET_CAT    usc
64   	WHERE   usc.unit_set_cat = p_unit_set_cat;
65   BEGIN
66   	--set default message number
67   	p_message_name := NULL;
68           OPEN c_usc;
69           FETCH c_usc INTO v_closed_ind;
70           IF (c_usc%NOTFOUND) THEN
71                 CLOSE c_usc;
72                 RETURN TRUE;
73           END IF;
74           CLOSE c_usc;
75           IF (v_closed_ind = 'Y') THEN
76   		p_message_name := 'IGS_PS_UNIT_SET_CAT_CLOSED';
77                 	RETURN FALSE;
78           END IF;
79           RETURN TRUE ;
80   EXCEPTION
81   	WHEN OTHERS THEN
82   		IF (c_usc%ISOPEN) THEN
83   	     		CLOSE c_usc;
84          		END IF;
85   		App_Exception.Raise_Exception;
86   END;
87   	EXCEPTION
88   		WHEN OTHERS THEN
89 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
90 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_usc_closed');
91 	IGS_GE_MSG_STACK.ADD;
92 	App_Exception.Raise_Exception;
93   END crsp_val_usc_closed;
94   --
95   -- Validate version dates for IGS_PS_COURSE and IGS_PS_UNIT versions.
96   FUNCTION crsp_val_ver_dt(
97   p_start_dt IN DATE ,
98   p_end_dt IN DATE ,
99   p_expiry_dt IN DATE ,
100   p_message_name OUT NOCOPY VARCHAR2,
101   p_lgcy_validator IN BOOLEAN)
102   RETURN BOOLEAN AS
103   l_ret_status   BOOLEAN :=TRUE;
104   BEGIN
105   	IF (p_end_dt IS NOT NULL) AND (p_start_dt IS NOT NULL) THEN
106   		IF (p_end_dt < p_start_dt) THEN
107                   IF p_lgcy_validator THEN
108                     igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_VERENDDT_GE_VERSTARTDT',NULL,NULL,FALSE);
109                     l_ret_status:=FALSE;
110                   ELSE
111   		    p_message_name := 'IGS_PS_VERENDDT_GE_VERSTARTDT';
112   		    RETURN FALSE;
113                   END IF;
114   		END IF;
115   	END IF;
116   	IF (p_end_dt IS NOT NULL) AND (p_expiry_dt IS NOT NULL) THEN
117   		IF (p_end_dt < p_expiry_dt) THEN
118                   IF p_lgcy_validator THEN
119                     igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_VER_ENDDT_GE_VER_EXPDT',NULL,NULL,FALSE);
120                     l_ret_status:=FALSE;
121                   ELSE
122   		    p_message_name := 'IGS_PS_VER_ENDDT_GE_VER_EXPDT';
123   		    RETURN FALSE;
124                   END IF;
125   		END IF;
126   	END IF;
127   	IF (p_start_dt IS NOT NULL) AND (p_expiry_dt IS NOT NULL) THEN
128   		IF (p_expiry_dt < p_start_dt) THEN
129                   IF p_lgcy_validator THEN
130                     igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_VER_EXPDT_GE_VER_STDT',NULL,NULL,FALSE);
131                     l_ret_status:=FALSE;
132                   ELSE
133   		    p_message_name := 'IGS_PS_VER_EXPDT_GE_VER_STDT';
134   		    RETURN FALSE;
135                   END IF;
136   		END IF;
137   	END IF;
138 
139         IF p_lgcy_validator THEN
140   	  p_message_name := NULL;
141   	  RETURN l_ret_status;
142         ELSE
143   	  p_message_name := NULL;
144   	  RETURN TRUE;
145         END IF;
146   EXCEPTION
147   	WHEN OTHERS THEN
148 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
149 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_ver_dt');
150 	IGS_GE_MSG_STACK.ADD;
151 	App_Exception.Raise_Exception;
152   END crsp_val_ver_dt;
153   --
154   -- Validate IGS_PS_UNIT set end date and IGS_PS_UNIT set status
155   FUNCTION crsp_val_us_end_sts(
156   p_end_dt IN DATE ,
157   p_unit_set_status IN VARCHAR2 ,
158   p_message_name OUT NOCOPY VARCHAR2 )
159   RETURN BOOLEAN AS
160   BEGIN	-- crsp_val_us_end_sts
161   	-- This module performs cross-field validation on the IGS_PS_UNIT set
162   	-- version end date and the IGS_PS_UNIT version status.
163   	-- - End date can only be set if the IGS_PS_UNIT set system status is INACTIVE
164   DECLARE
165   	cst_inactive	CONSTANT	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE := 'INACTIVE';
166   	v_s_unit_set_status		IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
167   	CURSOR c_uss IS
168   		SELECT	uss.s_unit_set_status
169   		FROM	IGS_EN_UNIT_SET_STAT	uss
170   		WHERE	uss.unit_set_status = p_unit_set_status;
171   BEGIN
172   	-- 1. Select the IGS_EN_UNIT_SET_STAT.s_unit_set_status for
173   	-- the given p_unit_set_status.
174   	OPEN c_uss;
175   	FETCH c_uss INTO v_s_unit_set_status;
176   	CLOSE c_uss;
177   	-- 2. Perform validation when the p_end_dt is set
178   	IF (p_end_dt IS NOT NULL) THEN
179   		IF (v_s_unit_set_status = cst_inactive) THEN
180   			p_message_name := NULL;
181   			RETURN TRUE;
182   		ELSE
183   			p_message_name := 'IGS_PS_STATUS_SET_INACTIVE';
184   			RETURN FALSE;
185   		END IF;
186   	ELSE
187   		-- 3. Perform validation when the p_end_dt is not set
188   		IF (v_s_unit_set_status <> cst_inactive) THEN
189   			p_message_name := NULL;
190   			RETURN TRUE;
191   		ELSE
192   			p_message_name := 'IGS_PS_STATUS_NOTSET_INACTIVE';
193   			RETURN FALSE;
194   		END IF;
195   	END IF;
196   EXCEPTION
197   	WHEN OTHERS THEN
198   		IF (c_uss%ISOPEN) THEN
199   			CLOSE c_uss;
200   		END IF;
201   		App_Exception.Raise_Exception;
202   END;
203   EXCEPTION
204   	WHEN OTHERS THEN
205 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
206 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_us_end_sts');
207 	IGS_GE_MSG_STACK.ADD;
208 	App_Exception.Raise_Exception;
209   END crsp_val_us_end_sts;
210   --
211   -- Validate IGS_PS_UNIT set end date and status when active students exist
212   FUNCTION crsp_val_us_enr(
213   p_unit_set_cd IN VARCHAR2 ,
214   p_version_number IN NUMBER ,
215   p_message_name OUT NOCOPY VARCHAR2 )
216   RETURN BOOLEAN AS
217   BEGIN	-- crsp_val_us_enr
218   	-- This module validates end date/IGS_PS_UNIT set status of INACTIVE cannot be set
219   	-- when there are active students within an offering of the IGS_PS_UNIT set.
220   DECLARE
221   	cst_enrolled	CONSTANT
222   					IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE := 'ENROLLED';
223   	cst_intermit	CONSTANT
224   					IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE := 'INTERMIT';
225   	cst_inactive	CONSTANT
226   					IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE := 'INACTIVE';
227   	v_course_attempt_status		IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
228   	CURSOR c_sca_susa IS
229   		SELECT	sca.course_attempt_status
230   		FROM	IGS_EN_STDNT_PS_ATT		sca,
231   			IGS_AS_SU_SETATMPT	susa
232   		WHERE	sca.person_id = susa.person_id AND
233   			sca.course_cd = susa.course_cd AND
234   			sca.course_attempt_status IN (
235   						cst_enrolled,
236   						cst_intermit,
237   						cst_inactive) AND
238   			susa.unit_set_cd		= p_unit_set_cd AND
239   			susa.us_version_number		= p_version_number AND
240   			susa.student_confirmed_ind	= 'Y';
241   BEGIN
242   	OPEN c_sca_susa;
243   	FETCH c_sca_susa INTO v_course_attempt_status;
244   	IF (c_sca_susa%FOUND) THEN
245   		CLOSE c_sca_susa;
246   		p_message_name := 'IGS_PS_ENDDT_CANNOT_BESET';
247   		RETURN FALSE;
248   	END IF;
249   	CLOSE c_sca_susa;
250   	p_message_name := NULL;
251   	RETURN TRUE;
252   EXCEPTION
253   	WHEN OTHERS THEN
254   		IF (c_sca_susa%ISOPEN) THEN
255   			CLOSE c_sca_susa;
256   		END IF;
257   		App_Exception.Raise_Exception;
258   END;
259   EXCEPTION
260   	WHEN OTHERS THEN
261                 Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
262                 FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_us_enr');
263 		IGS_GE_MSG_STACK.ADD;
264 		App_Exception.Raise_Exception;
265   END crsp_val_us_enr;
266   --
267   -- Validate IGS_PS_UNIT set status changes
268   FUNCTION crsp_val_us_status(
269   p_old_unit_set_status IN VARCHAR2 ,
270   p_new_unit_set_status IN VARCHAR2 ,
271   p_message_name OUT NOCOPY VARCHAR2 )
272   RETURN BOOLEAN AS
273   BEGIN	-- crsp_val_us_status
274   	-- This module validates the IGS_EN_UNIT_SET.IGS_EN_UNIT_SET_STAT. It is fired at
275   	-- item level. The checks are:
276   	-- IGS_PS_UNIT_STAT cannot be set back to a system status of 'PLANNED' once
277   	-- it is 'ACTIVE' or 'INACTIVE'.
278   DECLARE
279   	cst_planned	CONSTANT	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE := 'PLANNED';
280   	v_new_unit_set_status		IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
281   	v_old_unit_set_status		IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
282   	CURSOR c_uss (
283   		cp_unit_set_status	IGS_EN_UNIT_SET_STAT.unit_set_status%TYPE) IS
284   		SELECT	uss.s_unit_set_status
285   		FROM	IGS_EN_UNIT_SET_STAT	uss
286   		WHERE	uss.unit_set_status = cp_unit_set_status;
287   BEGIN
288   	-- Validate the system status is not being altered to PLANNED from
289   	-- ACTIVE or INACTIVE.
290   	IF (p_old_unit_set_status IS NOT NULL AND
291   			p_new_unit_set_status <> p_old_unit_set_status) THEN
292   		-- Fetch new system status
293   		OPEN c_uss(
294   			p_new_unit_set_status);
295   		FETCH c_uss INTO v_new_unit_set_status;
296   		CLOSE c_uss;
297   		-- Fetch old system status
298   		OPEN c_uss(
299   			p_old_unit_set_status);
300   		FETCH c_uss INTO v_old_unit_set_status;
301   		CLOSE c_uss;
302   		IF (v_new_unit_set_status <> v_old_unit_set_status AND
303   				v_new_unit_set_status = cst_planned) THEN
304   			p_message_name := 'IGS_PS_UNIT_SET_STATUS_NOTALT';
305   			RETURN FALSE;
306   		END IF;
307   	END IF;
308   	p_message_name := NULL;
309   	RETURN TRUE;
310   EXCEPTION
311   	WHEN OTHERS THEN
312   		IF (c_uss%ISOPEN) THEN
313   			CLOSE c_uss;
314   		END IF;
315   		App_Exception.Raise_Exception;
316   END;
317   EXCEPTION
318   	WHEN OTHERS THEN
319 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
320 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_us_status');
321 	IGS_GE_MSG_STACK.ADD;
322 	App_Exception.Raise_Exception;
323   END crsp_val_us_status;
324   --
325   -- Validate IGS_PS_UNIT set expiry date and IGS_PS_UNIT set status
326   FUNCTION crsp_val_us_exp_sts(
327   p_unit_set_cd IN VARCHAR2 ,
328   p_version_number IN NUMBER ,
329   p_unit_set_status IN VARCHAR2 ,
330   p_expiry_dt IN DATE ,
331   p_message_name OUT NOCOPY VARCHAR2 )
332   RETURN BOOLEAN AS
333   BEGIN	-- crsp_val_us_exp_sts
334   	-- This module validates the cross-record validation dependent on the
335   	-- IGS_EN_UNIT_SET.expiry_dt and IGS_EN_UNIT_SET.IGS_PS_UNIT_STAT columns.
336   	-- . There can only be one version of a IGS_PS_UNIT set which has a system status
337   	--    of 'ACTIVE' and the expiry date not set.
338   DECLARE
339   	cst_active	CONSTANT	VARCHAR2(10) :='ACTIVE';
340   	v_dummy		VARCHAR2(1);
341   	CURSOR c_uss IS
342   		SELECT 'x'
343   		FROM	IGS_EN_UNIT_SET_STAT	uss
344   		WHERE	uss.unit_set_status	= unit_set_status AND
345   			uss.s_unit_set_status	= cst_active;
346   	CURSOR c_us_uss IS
347   		SELECT 	'X'
348   		FROM	IGS_EN_UNIT_SET	us,
349   			IGS_EN_UNIT_SET_STAT	uss
350   		WHERE	us.unit_set_cd		= p_unit_set_cd		AND
351   			us.version_number	<> p_version_number	AND
352   			us.expiry_dt		IS NULL			AND
353   			us.unit_set_status	= uss.unit_set_status	AND
354   		 	uss.s_unit_set_status	= cst_active;
355   BEGIN
356   	--Set the default message number
357   	p_message_name := NULL;
361   	OPEN c_uss;
358   	-- Check parameters passed in. If the IGS_PS_UNIT set system status (fetch
359   	-- s_unit_set_status from IGS_EN_UNIT_SET_STAT table) is ACTIVE and the expiry
360   	-- date not set.
362   	FETCH c_uss INTO v_dummy;
363   	IF c_uss%FOUND THEN
364   		CLOSE c_uss;
365   		IF p_expiry_dt IS NULL THEN
366   			-- Check that no other versions of the IGS_PS_UNIT set exist that have a system
367   			-- status of ACTIVE and p_expiry_dt not set
368   			OPEN c_us_uss;
369   			FETCH c_us_uss INTO v_dummy;
370   			IF c_us_uss%FOUND THEN
371   				CLOSE c_us_uss;
372   				p_message_name := 'IGS_PS_ANOTHERVER_UNITSET_EXI';
373   				RETURN FALSE;
374   			END IF;
375   			CLOSE c_us_uss;
376   		END IF;
377   	ELSE
378   		CLOSE c_uss;
379   	END IF;
380   	RETURN TRUE;
381   EXCEPTION
382   	WHEN OTHERS THEN
383   		IF c_uss%ISOPEN THEN
384   			CLOSE c_uss;
385   		END IF;
386   		IF c_us_uss%ISOPEN THEN
387   			CLOSE c_us_uss;
388   		END IF;
389   		App_Exception.Raise_Exception;
390   END;
391   EXCEPTION
392   	WHEN OTHERS THEN
393 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
394 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_us_exp_sts');
395 	IGS_GE_MSG_STACK.ADD;
396 	App_Exception.Raise_Exception;
397   END crsp_val_us_exp_sts;
398   --
399   -- Validate IGS_PS_UNIT set status for ins/upd/del of IGS_PS_UNIT set details
400   FUNCTION crsp_val_iud_us_dtl2(
401   p_old_unit_set_status IN VARCHAR2 ,
402   p_new_unit_set_status IN VARCHAR2 ,
403   p_message_name OUT NOCOPY VARCHAR2 )
404   RETURN BOOLEAN AS
405   BEGIN	-- crsp_val_iud_us_dtl2
406   	-- This module validates whether or not inserts and updates can be made to
407   	-- IGS_EN_UNIT_SET details
408   	-- on the IGS_PS_UNIT set record. It is fired at record level (hence could not be
409   	-- incorporated
410   	-- in the CRSP_VAL_US_STATUS validation).
411   DECLARE
412   	v_new_unit_set_status	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
413   	v_old_unit_set_status	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
414   	-- Fetch new system status
415   	CURSOR c_new_uss IS
416   		SELECT	uss.s_unit_set_status
417   		FROM 	IGS_EN_UNIT_SET_STAT uss
418   		WHERE	uss.unit_set_status = p_new_unit_set_status;
419   	-- Fetch old system status
420   	CURSOR c_old_uss IS
421   		SELECT	uss.s_unit_set_status
422   		FROM 	IGS_EN_UNIT_SET_STAT uss
423   		WHERE	uss.unit_set_status = p_old_unit_set_status;
424   BEGIN
425   	-- Set the default message number
426   	p_message_name := NULL;
427   	OPEN c_new_uss;
428   	FETCH c_new_uss INTO v_new_unit_set_status;
429   	OPEN c_old_uss;
430   	FETCH c_old_uss INTO v_old_unit_set_status;
431   	-- Validate the system status is not being altered when INACTIVE
432   	-- unless system status is also being changed (to ACTIVE):
433   	IF (c_new_uss%FOUND AND c_old_uss%FOUND) THEN
434   		IF v_old_unit_set_status = 'INACTIVE' THEN
435   			IF v_new_unit_set_status <> 'ACTIVE' THEN
436   				CLOSE c_new_uss;
437   				CLOSE c_old_uss;
438   				p_message_name := 'IGS_PS_UNIT_SET_INACTIVE';
439   				RETURN FALSE;
440   			END IF;
441   		END IF;
442   	END IF;
443   	CLOSE c_new_uss;
444   	CLOSE c_old_uss;
445   	RETURN TRUE;
446   EXCEPTION
447   	WHEN OTHERS THEN
448   		IF (c_new_uss%NOTFOUND) THEN
449   			CLOSE c_new_uss;
450   		END IF;
451   		IF (c_old_uss%NOTFOUND) THEN
452   			CLOSE c_old_uss;
453   		END IF;
454   		App_Exception.Raise_Exception;
455   END;
456   EXCEPTION
457   	WHEN OTHERS THEN
458 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
459 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_iud_us_dtl2');
460 	IGS_GE_MSG_STACK.ADD;
461 	App_Exception.Raise_Exception;
462   END crsp_val_iud_us_dtl2;
463   --
464   --Validate IGS_PS_UNIT set category changes
465   FUNCTION crsp_val_us_category(
466   p_unit_set_status IN VARCHAR2 ,
467   p_old_unit_set_cat IN VARCHAR2 ,
468   p_new_unit_set_cat IN VARCHAR2 ,
469   p_message_name OUT NOCOPY VARCHAR2 )
470   RETURN BOOLEAN AS
471 /*  change history:
472   who            when             what*/
473   BEGIN	-- crsp_val_us_category
474   	-- This module provides a warning if the IGS_PS_UNIT set is active
475   	-- when the IGS_PS_UNIT set category is being changed.
476   DECLARE
477   	v_s_unit_set_status	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
478   	CURSOR c_uss IS
479   		SELECT	uss.s_unit_set_status
480   		FROM	IGS_EN_UNIT_SET_STAT	uss
481   		WHERE	uss.unit_set_status = p_unit_set_status;
482   BEGIN
483   	-- Set the default message number
484   	p_message_name := NULL;
485   	IF p_old_unit_set_cat <> p_new_unit_set_cat THEN
486   		-- check whether IGS_EN_UNIT_SET_STAT is ACTIVE
487   		OPEN c_uss;
488   		FETCH c_uss INTO v_s_unit_set_status;
489   --if the unit set status is not planned and unit set category is getting changed, throw error message.bug#2121770.
490   		IF (c_uss%FOUND) THEN
491   			IF v_s_unit_set_status <> 'PLANNED' THEN
492   				CLOSE c_uss;
493   				p_message_name := 'IGS_PS_UNIT_SET_ACTIVE';
494   				RETURN FALSE;
495   			END IF;
496   		END IF;
497   		CLOSE c_uss;
498   	END IF;
499   	RETURN TRUE;
500   EXCEPTION
501   	WHEN OTHERS THEN
502   		IF (c_uss%ISOPEN) THEN
503   			CLOSE c_uss;
504   		END IF;
505   		App_Exception.Raise_Exception;
506   END;
507   EXCEPTION
508   	WHEN OTHERS THEN
509 	Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
510 	FND_MESSAGE.SET_TOKEN('NAME','IGS_PS_VAL_US.crsp_val_us_category');
511 	IGS_GE_MSG_STACK.ADD;
512 	App_Exception.Raise_Exception;
513   END crsp_val_us_category ;
514   --
515 END IGS_PS_VAL_US;