DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_VAL_COUSR

Source


1 PACKAGE BODY IGS_PS_VAL_COusr AS
2 /* $Header: IGSPS29B.pls 115.4 2002/11/29 03:00:52 nsidana ship $ */
3 
4   -- Validate IGS_PS_UNIT set status for ins/upd/del of detail records
5   FUNCTION crsp_val_iud_us_dtl(
6   p_unit_set_cd IN VARCHAR2 ,
7   p_version_number IN NUMBER ,
8   p_message_name OUT NOCOPY VARCHAR2 )
9   RETURN BOOLEAN AS
10   BEGIN
11 	-- crsp_val_iud_us_dtl
12   	-- This module validates whether or not inserts and updates can be made to
13   	-- IGS_EN_UNIT_SET
14   	-- detail records (ie; record structures underneath the IGS_EN_UNIT_SET table)
15   DECLARE
16   	v_s_unit_set_status	IGS_EN_UNIT_SET_STAT.s_unit_set_status%TYPE;
17   	CURSOR c_us IS
18   		SELECT  uss.s_unit_set_status
19   		FROM	IGS_EN_UNIT_SET us,
20   			IGS_EN_UNIT_SET_STAT uss
21   		WHERE	us.unit_set_cd 		= p_unit_set_cd	AND
22   			us.version_number 	= p_version_number AND
23   			us.unit_set_status	= uss.unit_set_status;
24   BEGIN
25   	-- Set the default message number
26   	p_message_name := NULL;
27   	-- 1. Select the IGS_EN_UNIT_SET.IGS_EN_UNIT_SET_STAT for the given p_unit_cd and
28   	-- p_version_number and
29   	--    Select the IGS_EN_UNIT_SET_STAT.s_unit_set_status for the selected
30   	-- IGS_EN_UNIT_SET.IGS_EN_UNIT_SET_STAT.
31   	OPEN c_us;
32   	FETCH c_us INTO v_s_unit_set_status;
33   	-- 2.  If no record is found -
34   	IF (c_us%NOTFOUND) THEN
35   		CLOSE c_us;
36   		p_message_name := NULL;
37   		RETURN TRUE;
38   	END IF;
39   	CLOSE c_us;
40   	-- 3.  Test the value of the IGS_EN_UNIT_SET_STAT.s_unit_set_status
41   	IF v_s_unit_set_status = 'INACTIVE' THEN
42   		p_message_name := 'IGS_PS_UNIT_SET_INACTIVE';
43   		RETURN FALSE;
44   	END IF;
45   	RETURN TRUE;
46   EXCEPTION
47   	WHEN OTHERS THEN
48   		IF (c_us%ISOPEN) THEN
49   			CLOSE c_us;
50   		END IF;
51 		App_Exception.Raise_Exception;
52   END;
53   END crsp_val_iud_us_dtl;
54   --
55   -- Validate COUSR hierarchy for duplicate ancestors/descendants
56   FUNCTION crsp_val_cousr_tree(
57   p_course_cd IN VARCHAR2 ,
58   p_crv_version_number IN NUMBER ,
59   p_cal_type IN VARCHAR2 ,
60   p_sup_unit_set_cd IN VARCHAR2 ,
61   p_sup_us_version_number IN NUMBER ,
62   p_sub_unit_set_cd IN VARCHAR2 ,
63   p_sub_us_version_number IN NUMBER ,
64   p_message_name OUT NOCOPY VARCHAR2 )
65   RETURN BOOLEAN AS
66   BEGIN
67 	-- crsp_val_cousr_tree
68   	-- This module validates that a IGS_PS_OF_UNT_SET_RL record can not
69   	-- be created such that a IGS_PS_UNIT set is a parent/ancestor or child/descendant
70   	-- of itself.
71   DECLARE
72   	v_dummy		VARCHAR2(1);
73   	CURSOR c_cous (
74   			cp_unit_set_cd		IGS_PS_OFR_UNIT_SET.unit_set_cd%TYPE,
75   			cp_us_version_number	IGS_PS_OFR_UNIT_SET.us_version_number%TYPE) IS
76   		SELECT	'x'
77   		FROM	IGS_PS_OFR_UNIT_SET	cous
78   		WHERE	cous.course_cd		= p_course_cd		AND
79   			cous.crv_version_number	= p_crv_version_number	AND
80   			cous.cal_type		= p_cal_type		AND
81   			cous.unit_set_cd	= cp_unit_set_cd	AND
82   			cous.us_version_number	= cp_us_version_number;
83   	FUNCTION crspl_val_tree_circle (
84   		p_tmp_sup_us_cd			IGS_PS_OF_UNT_SET_RL.sup_unit_set_cd%TYPE,
85   		p_tmp_sup_us_ver_num
86   				IGS_PS_OF_UNT_SET_RL.sup_us_version_number%TYPE)
87   	RETURN BOOLEAN
88   	AS
89   	BEGIN	-- crspl_val_tree_circle
90   		-- This validation function requires recursion.
91   	DECLARE
92   		v_circle_exists		BOOLEAN	DEFAULT FALSE;
93   		CURSOR c_cousr (
94   				cp_sup_unit_set_cd		IGS_PS_OF_UNT_SET_RL.sup_unit_set_cd%TYPE,
95   				cp_sup_us_version_number
96   						IGS_PS_OF_UNT_SET_RL.sup_us_version_number%TYPE) IS
97   			SELECT	cousr.sub_unit_set_cd,
98   				cousr.sub_us_version_number
99   			FROM	IGS_PS_OF_UNT_SET_RL	cousr
100   			WHERE	cousr.course_cd			= p_course_cd		AND
101   				cousr.crv_version_number	= p_crv_version_number	AND
102   				cousr.cal_type			= p_cal_type		AND
103   				cousr.sup_unit_set_cd		= cp_sup_unit_set_cd	AND
104   				cousr.sup_us_version_number	= cp_sup_us_version_number;
105   	BEGIN
106   		FOR v_cousr_rec IN c_cousr (
107   						p_tmp_sup_us_cd,
108   						p_tmp_sup_us_ver_num) LOOP
109   			IF v_cousr_rec.sub_unit_set_cd = p_sup_unit_set_cd AND
110   					v_cousr_rec.sub_us_version_number = p_sup_us_version_number THEN
111   				-- the sub IGS_PS_UNIT set already had the same sup IGS_PS_UNIT set as child.
112   				-- find circle in tree.
113   				v_circle_exists := TRUE;
114   				EXIT;
115   			END IF;
116   			IF crspl_val_tree_circle (
117   						v_cousr_rec.sub_unit_set_cd,
118   						v_cousr_rec.sub_us_version_number) = FALSE THEN
119   				-- the sub IGS_PS_UNIT set already had the same sup IGS_PS_UNIT set as descendant.
120   				-- find circle in subtree.
121   				v_circle_exists := TRUE;
122   				EXIT;
123   			END IF;
124   		END LOOP;
125   		IF v_circle_exists = TRUE THEN
126   			RETURN FALSE;
127   		ELSE
128   			RETURN TRUE;
129   		END IF;
130   	EXCEPTION
131   		WHEN OTHERS THEN
132   			IF c_cousr%ISOPEN THEN
133   				CLOSE c_cousr;
134   			END IF;
135 		App_Exception.Raise_Exception;
136   	END;
137   	END crspl_val_tree_circle;
138   BEGIN
139   	-- set default vaule
140   	p_message_name := NULL;
141   	-- 1.  Validate the superior IGS_PS_UNIT set:
142   	OPEN c_cous (
143   			p_sup_unit_set_cd,
144   			p_sup_us_version_number);
145   	FETCH c_cous INTO v_dummy;
146   	IF c_cous%NOTFOUND THEN
147   		CLOSE c_cous;
148   		p_message_name := 'IGS_GE_VAL_DOES_NOT_XS';
149   		RETURN FALSE;
150   	END IF;
151   	CLOSE c_cous;
152   	-- 2.  Validate the subordinate IGS_PS_UNIT set:
153   	OPEN c_cous (
154   			p_sub_unit_set_cd,
155   			p_sub_us_version_number);
156   	FETCH c_cous INTO v_dummy;
157   	IF c_cous%NOTFOUND THEN
158   		CLOSE c_cous;
159   		p_message_name := 'IGS_GE_VAL_DOES_NOT_XS';
160   		RETURN FALSE;
161   	END IF;
162   	CLOSE c_cous;
163   	-- 3.  Validate the superior and subordinate IGS_PS_UNIT sets are not the same:
164   	IF p_sup_unit_set_cd = p_sub_unit_set_cd AND
165   			p_sup_us_version_number = p_sub_us_version_number THEN
166   		p_message_name := 'IGS_PS_INVALID_RELATION_SUP';
167   		RETURN FALSE;
168   	END IF;
169   	-- 4.  Validate the IGS_PS_OF_UNT_SET_RL tree to ensure the superior
170   	--     IGS_PS_UNIT set of the relationship does not exist anywhere else in the
171   	--     relationship tree (ie; a recursive loop). This must cater for branching
172   	--     (ie; multiple dependants).
173   	IF crspl_val_tree_circle (
174   				p_sub_unit_set_cd,
175   				p_sub_us_version_number) = FALSE THEN
176   		p_message_name := 'IGS_PS_INVALID_RELATION_HIERA';
177   		RETURN FALSE;
178   	END IF;
179   	RETURN TRUE;
180   EXCEPTION
181   	WHEN OTHERS THEN
182   		IF c_cous%ISOPEN THEN
183   			CLOSE c_cous;
184   		END IF;
185   		App_Exception.Raise_Exception;
186   END;
187   END crsp_val_cousr_tree;
188   --
189   -- Validate COUSR can only be created with US as superior if appropriate
190   FUNCTION crsp_val_cousr_sub(
191   p_course_cd IN VARCHAR2 ,
192   p_crv_version_number IN NUMBER ,
193   p_cal_type IN VARCHAR2 ,
194   p_sup_unit_set_cd IN VARCHAR2 ,
195   p_sup_us_version_number IN NUMBER ,
196   p_message_name OUT NOCOPY VARCHAR2 )
197   RETURN BOOLEAN AS
198   BEGIN
199 	-- crsp_val_cousr_sub
200   	-- This module validates that a IGS_PS_OF_UNT_SET_RL record can not
201   	-- be created with a IGS_PS_OFR_UNIT_SET as the superior when the
202   	-- only_as_sub_ind for that IGS_PS_OFR_UNIT_SET is set to 'Y'.
203   BEGIN
204   	-- set default vaule
205   	p_message_name := NUll;
206   	IF IGS_PS_GEN_003.CRSP_GET_COUS_SUBIND (
207   				p_course_cd,
208   				p_crv_version_number,
209   				p_cal_type,
210   				p_sup_unit_set_cd,
211   				p_sup_us_version_number) = 'Y'	THEN
212   		p_message_name := 'IGS_PS_UNIT_SET_NOT_USED';
213   		RETURN FALSE;
214   	ELSE
215   		RETURN TRUE;
216   	END IF;
217   END;
218   END crsp_val_cousr_sub;
219   --
220   -- Validate COUSR can only be created as sub if CACUS rec does not exist
221   FUNCTION crsp_val_cousr_cacus(
222   p_course_cd IN VARCHAR2 ,
223   p_crv_version_number IN NUMBER ,
224   p_cal_type IN VARCHAR2 ,
225   p_sub_unit_set_cd IN VARCHAR2 ,
226   p_sub_us_version_number IN NUMBER ,
227   p_message_name OUT NOCOPY VARCHAR2 )
228   RETURN BOOLEAN AS
229   BEGIN
230 	-- crsp_val_cousr_cacus
231   	-- validate that a crs_off_set_relationship record can't be created
232   	-- with a IGS_PS_OFR_UNIT_SET as the subordinate when the IGS_PS_UNIT set is
233   	-- restricting an IGS_PS_COURSE offering option admission category
234   DECLARE
235   	v_unit_set_cd		IGS_PS_COO_AD_UNIT_S.unit_set_cd%TYPE;
236   	CURSOR c_cacus IS
237   		SELECT	cacus.unit_set_cd
238   		FROM	IGS_PS_COO_AD_UNIT_S	cacus
239   		WHERE	cacus.course_cd 		= p_course_cd AND
240   			cacus.crv_version_number 	= p_crv_version_number AND
241   			cacus.cal_type 			= p_cal_type AND
242   			cacus.unit_set_cd 		= p_sub_unit_set_cd AND
243   			cacus.us_version_number 	= p_sub_us_version_number;
244   BEGIN
245   	OPEN c_cacus;
246   	FETCH c_cacus INTO v_unit_set_cd;
247   	IF (c_cacus%FOUND) THEN
248   		CLOSE c_cacus;
249   		p_message_name := 'IGS_PS_UNIT_SET_NOT_USED_SUB';
250   		RETURN FALSE;
251   	END IF;
252   	CLOSE c_cacus;
253   	p_message_name := NULL;
254   	RETURN TRUE ;
255   EXCEPTION
256   	WHEN OTHERS THEN
257   		IF (c_cacus%ISOPEN) THEN
258   			CLOSE c_cacus;
259   		END IF;
260 		App_Exception.Raise_Exception;
261   END;
262   END crsp_val_cousr_cacus;
263   --
264 END IGS_PS_VAL_COusr;