DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_VAL_GSG

Source


1 PACKAGE BODY IGS_AS_VAL_GSG AS
2 /* $Header: IGSAS24B.pls 115.3 2002/11/28 22:45:30 nsidana ship $ */
3 
4   --
5   -- Validate grade's gs date range is current or future
6   FUNCTION assp_val_gs_cur_fut(
7   p_grading_schema_cd IN IGS_AS_GRD_SCHEMA.grading_schema_cd%TYPE ,
8   p_version_number IN IGS_AS_GRD_SCHEMA.version_number%TYPE ,
9   p_message_name OUT NOCOPY varchar2 )
10   RETURN BOOLEAN IS
11   	gv_other_detail		VARCHAR2(255);
12   BEGIN
13   DECLARE
14   	CURSOR c_gsg IS
15   		SELECT 	start_dt,
16   			end_dt
17   		FROM	IGS_AS_GRD_SCHEMA
18   		WHERE	grading_schema_cd = p_grading_schema_cd AND
19   			version_number = p_version_number;
20   	v_gsg_rec			c_gsg%ROWTYPE;
21   	v_fnc_return_value		BOOLEAN;
22   BEGIN
23   	-- Validate the IGS_AS_GRD_SCHEMA's date range is current or future
24   	-- Set the default message number
25   	p_message_name := null;
26   	-- Cursor handling
27   	OPEN c_gsg;
28   	FETCH c_gsg INTO  v_gsg_rec;
29   	IF c_gsg%NOTFOUND THEN
30   		CLOSE c_gsg;
31   		RETURN TRUE;
32   	END IF;
33   	CLOSE c_gsg  ;
34   	-- Check if the grading schema is obsolete.
35   	v_fnc_return_value := IGS_AS_VAL_GSG.GENP_VAL_DT_RANGE(v_gsg_rec.start_dt,
36   							v_gsg_rec.end_dt,
37   							p_message_name);
38   	IF (NOT v_fnc_return_value) THEN
39   		p_message_name := 'IGS_AS_GRD_SCHEMA_OBSLETE';
40   		RETURN FALSE;
41   	END IF;
42   	-- Return the default value
43   	RETURN TRUE;
44   END;
45   EXCEPTION
46   	WHEN OTHERS THEN
47 	        Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
48 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gs_cur_fut');
49 	        IGS_GE_MSG_STACK.ADD;
50        		App_Exception.Raise_Exception;
51   END assp_val_gs_cur_fut;
52   --
53   -- Retrofitted
54   FUNCTION genp_val_dt_range(
55   p_start_dt IN DATE ,
56   p_end_dt IN DATE ,
57   p_message_name OUT NOCOPY varchar2 )
58   RETURN BOOLEAN IS
59   	gv_other_detail		VARCHAR2(255);
60   BEGIN
61   DECLARE
62   BEGIN
63   	-- Validate the date range specified is current or future.
64   	-- Set the default message number
65   	p_message_name := null;
66   	IF (p_end_dt IS NOT NULL) THEN
67   		IF (p_start_dt <= TRUNC(SYSDATE) AND
68   				p_end_dt < TRUNC(SYSDATE)) THEN
69   			p_message_name := 'IGS_GE_INVALID_DATE_RANGE';
70   			RETURN FALSE;
71   		END IF;
72   	END IF;
73   	-- Return the default value
74   	RETURN TRUE;
75   END;
76   EXCEPTION
77   	WHEN OTHERS THEN
78 	       Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
79 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.genp_val_dt_range');
80 	        IGS_GE_MSG_STACK.ADD;
81       	       App_Exception.Raise_Exception;
82   END genp_val_dt_range;
83   --
84   -- Validate upper mark range >= lower mark range and both set if one set
85   FUNCTION assp_val_gsg_mrk_rng(
86   p_lower_mark_range IN IGS_AS_GRD_SCH_GRADE.lower_mark_range%TYPE ,
87   p_upper_mark_range IN IGS_AS_GRD_SCH_GRADE.upper_mark_range%TYPE ,
88   p_message_name OUT NOCOPY varchar2 )
89   RETURN BOOLEAN IS
90   	gv_other_detail		VARCHAR2(255);
91   BEGIN
92   DECLARE
93   BEGIN
94   	-- Validate the grade's mark range.
95   	-- Set the default message number
96   	p_message_name := null;
97   	-- Lower mark is set if upper mark is set
98   	IF (p_upper_mark_range IS NOT NULL AND
99   			p_lower_mark_range IS NULL) THEN
100   		p_message_name := 'IGS_AS_LOWER_MARKRANGE_SPEC';
101   		RETURN FALSE;
102   	END IF;
103   	-- Upper mark is set if lower mark is set
104   	IF (p_upper_mark_range IS NULL AND
105   			p_lower_mark_range IS NOT NULL) THEN
106   		p_message_name := 'IGS_AS_UPP_MARKRANGE_SPEC';
107   		RETURN FALSE;
108   	END IF;
109   	-- Lower mark is greater than or equal to the lower mark range
110   	IF (p_upper_mark_range IS NOT NULL) THEN
111   		IF (p_upper_mark_range < p_lower_mark_range) THEN
112   			p_message_name := 'IGS_AS_UPP_MARKRANGE_GE_LOWER';
113   			RETURN FALSE;
114   		END IF;
115   	END IF;
116   	--- Return the default value
117   	RETURN TRUE;
118   END;
119   EXCEPTION
120   	WHEN OTHERS THEN
121 	       Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
122 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_mrk_rng');
123 	        IGS_GE_MSG_STACK.ADD;
124        		App_Exception.Raise_Exception;
125   END assp_val_gsg_mrk_rng;
126   --
127   -- Validate max percentage >= min percentage
128   FUNCTION assp_val_gsg_min_max(
129   p_min_percentage IN IGS_AS_GRD_SCH_GRADE.min_percentage%TYPE ,
130   p_max_percentage IN IGS_AS_GRD_SCH_GRADE.max_percentage%TYPE ,
131   p_message_name OUT NOCOPY varchar2 )
132   RETURN BOOLEAN IS
133   	gv_other_detail		VARCHAR2(255);
134   BEGIN
135   DECLARE
136   BEGIN
137   	-- Validate the maximum percentage is greater than the minimum percentage.
138   	-- Set the default message number
139   	p_message_name := null;
140   	IF (p_max_percentage < p_min_percentage) THEN
141   		p_message_name := 'IGS_AS_MAXPER_GE_MINPER';
142   		RETURN FALSE;
143   	END IF;
144   	-- Return the default value
145   	RETURN TRUE;
146   END;
147   EXCEPTION
148   	WHEN OTHERS THEN
149 	       Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
150 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_min_max');
151 	        IGS_GE_MSG_STACK.ADD;
152 	      	App_Exception.Raise_Exception;
153   END assp_val_gsg_min_max;
154   --
155   -- Validate mark range does not overlap with other grades in GS version
156   FUNCTION assp_val_gsg_m_ovrlp(
157   p_grading_schema_cd IN IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE ,
158   p_version_number IN IGS_AS_GRD_SCH_GRADE.version_number%TYPE ,
159   p_grade IN IGS_AS_GRD_SCH_GRADE.grade%TYPE ,
160   p_lower_mark_range IN IGS_AS_GRD_SCH_GRADE.lower_mark_range%TYPE ,
161   p_upper_mark_range IN IGS_AS_GRD_SCH_GRADE.upper_mark_range%TYPE ,
162   p_message_name OUT NOCOPY varchar2 )
163   RETURN BOOLEAN IS
164   	gv_other_detail		VARCHAR2(255);
165   BEGIN
166   DECLARE
167   	CURSOR c_gsg IS
168   		SELECT	lower_mark_range,
169   			upper_mark_range
170   		FROM	IGS_AS_GRD_SCH_GRADE
171   		WHERE	grading_schema_cd = p_grading_schema_cd AND
172   			version_number = p_version_number AND
173   			grade <> p_grade AND
174   			p_lower_mark_range IS NOT NULL AND
175   			p_upper_mark_range IS NOT NULL;
176   	v_gsg_rec			c_gsg%ROWTYPE;
177   BEGIN
178   	-- Validate that the mark range for the grade does not overlap with the mark
179   	-- range for another grade within the same version of the grading schema.
180   	-- Set the default message number
181   	p_message_name := null;
182   	FOR v_gsg_rec IN c_gsg LOOP
183   		-- The lower mark range is within an existing range (inclusive).
184   		IF (p_lower_mark_range >= v_gsg_rec.lower_mark_range AND
185   				p_lower_mark_range <= v_gsg_rec.upper_mark_range) THEN
186   			p_message_name := 'IGS_AS_LOWER_MARKRANGE_WITHIN';
187   			RETURN FALSE;
188   		END IF;
189   		-- The upper mark range is within an existing range (inclusive).
190   		IF (p_upper_mark_range >= v_gsg_rec.lower_mark_range AND
191   				p_upper_mark_range <= v_gsg_rec.upper_mark_range) THEN
192   			p_message_name := 'IGS_AS_UPP_MARKRANGE_WITHIN';
193   			RETURN FALSE;
194   		END IF;
195   		-- The lower mark range is less than the lower mark range of an
196   		-- existing range and the upper mark range is greater than the
197   		-- upper mark range of an existing range.
198   		IF (p_lower_mark_range < v_gsg_rec.lower_mark_range AND
199   				p_upper_mark_range > v_gsg_rec.upper_mark_range) THEN
200   			p_message_name := 'IGS_AS_MARKRANGE_ENCOMPASS';
201   			RETURN FALSE;
202   		END IF;
203   	END LOOP;
204   	RETURN TRUE;
205   END;
206   EXCEPTION
207   	WHEN OTHERS THEN
208 	        Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
209 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_m_ovrlp');
210 	        IGS_GE_MSG_STACK.ADD;
211        		App_Exception.Raise_Exception;
212   END assp_val_gsg_m_ovrlp;
213   --
214   -- Validate only 1 grade exists in a GS with the dflt outstanding ind set
215   FUNCTION assp_val_gsg_dflt(
216   p_grading_schema_cd IN IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE ,
217   p_version_number IN IGS_AS_GRD_SCH_GRADE.version_number%TYPE ,
218   p_grade IN IGS_AS_GRD_SCH_GRADE.grade%TYPE ,
219   p_message_name OUT NOCOPY varchar2 )
220   RETURN BOOLEAN IS
221   	gv_other_detail		VARCHAR2(255);
222   BEGIN
223   DECLARE
224   	CURSOR c_gsg IS
225   		SELECT	COUNT(*)
226   		FROM	IGS_AS_GRD_SCH_GRADE
227   		WHERE	grading_schema_cd = p_grading_schema_cd AND
228   			version_number = p_version_number AND
229   			grade <> p_grade AND
230   			dflt_outstanding_ind = 'Y';
231   	v_gsg_count		NUMBER;
232   BEGIN
233   	-- Validate only one grade exists within a version of the grading schema
234   	-- with the default outstanding indicator set.
235   	-- Set the default message number
236   	p_message_name := null;
237   	-- Cursor handling
238   	OPEN c_gsg  ;
239   	FETCH c_gsg INTO v_gsg_count;
240   	IF c_gsg%NOTFOUND THEN
241   		CLOSE c_gsg  ;
242   		RETURN TRUE;
243   	END IF;
244   	CLOSE c_gsg  ;
245   	IF (v_gsg_count > 0) THEN
246   		p_message_name := 'IGS_AS_ONE_GRADE_VERSION_GRD';
247   		RETURN FALSE;
248   	END IF;
249   	-- Return the default value
250   	RETURN TRUE;
251   END;
252   EXCEPTION
253   	WHEN OTHERS THEN
254 	        Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
255 	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_dflt');
256 	        IGS_GE_MSG_STACK.ADD;
257 	        App_Exception.Raise_Exception;
258   END assp_val_gsg_dflt;
259   --
260   -- Routine to clear rowids saved in a PL/SQL TABLE from a prior commit.
261   --
262   -- Process GSG rowids in a PL/SQL TABLE for the current commit.
263   --
264   -- Validate the result for a grade cannot be chngd when translat'ns exist
265   FUNCTION assp_val_gsg_gsgt(
266   p_grading_schema_cd IN VARCHAR2 ,
267   p_version_number IN NUMBER ,
268   p_grade IN VARCHAR2 ,
269   p_message_name OUT NOCOPY varchar2 )
270   RETURN BOOLEAN IS
271   	gv_other_detail		VARCHAR2(255);
272   BEGIN	-- assp_val_gsg_gsgt
273   DECLARE
274   	v_gsgt_exists		VARCHAR2(1);
275   	CURSOR c_gsgt IS
276   		SELECT	'x'
277   		FROM	IGS_AS_GRD_SCH_TRN	gsgt
278   		WHERE	gsgt.grading_schema_cd	= p_grading_schema_cd	AND
279   			gsgt.version_number	= p_version_number	AND
280   			gsgt.grade		= p_grade;
281   	CURSOR c_gsgt2 IS
282   		SELECT	'x'
283   		FROM	IGS_AS_GRD_SCH_TRN	gsgt
284   		WHERE	gsgt.to_grading_schema_cd	= p_grading_schema_cd	AND
285   			gsgt.to_version_number		= p_version_number	AND
286   			gsgt.to_grade			= p_grade;
287   BEGIN
288   	-- Set the default message number
289   	p_message_name := null;
290   	OPEN c_gsgt;
291   	FETCH c_gsgt INTO v_gsgt_exists;
292   	IF c_gsgt%FOUND THEN
293   		CLOSE c_gsgt;
294   		p_message_name :='IGS_AS_GRDRSLT_TYPE_MAP_FROM';
295   		RETURN FALSE;
296   	END IF;
297   	CLOSE c_gsgt;
298   	OPEN c_gsgt2;
299   	FETCH c_gsgt2 INTO v_gsgt_exists;
300   	IF c_gsgt2%FOUND THEN
301   		CLOSE c_gsgt2;
302   		p_message_name :='IGS_AS_GRDRSLT_TYPE_MAP_TO';
303   		RETURN FALSE;
304   	END IF;
305   	CLOSE c_gsgt2;
306   	-- Return the default value
307   	RETURN TRUE;
308   EXCEPTION
309   	WHEN OTHERS THEN
310   		IF c_gsgt%ISOPEN THEN
311   			CLOSE c_gsgt;
312   		END IF;
313   		IF c_gsgt2%ISOPEN THEN
314   			CLOSE c_gsgt2;
315   		END IF;
316   		RAISE;
317   END;
318   EXCEPTION
319   	WHEN OTHERS THEN
320 	        Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
321        	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_gsgt');
322 	        IGS_GE_MSG_STACK.ADD;
323  	        App_Exception.Raise_Exception;
324   END assp_val_gsg_gsgt;
325   --
326   -- Validate special grade type.
327   FUNCTION assp_val_gsg_ssgt(
328   p_s_special_grade_type IN VARCHAR2 ,
329   p_s_result_type IN VARCHAR2 ,
330   p_message_name OUT NOCOPY varchar2 )
331   RETURN BOOLEAN IS
332   	gv_other_detail		VARCHAR2(255);
333   BEGIN	-- assp_val_gsg_ssgt
334   	-- This module validates the special grade type. If the special grade
335   	-- type is 'CONCEDED-PASS' then the s_result_type must be 'PASS'.
336   DECLARE
337   	cst_conceded_pass	CONSTANT
338   						IGS_AS_GRD_SCH_GRADE.s_special_grade_type%TYPE := 'CONCEDED-PASS';
339   	cst_pass		CONSTANT	IGS_AS_GRD_SCH_GRADE.s_result_type%TYPE := 'PASS';
340   BEGIN
341   	IF p_s_special_grade_type = cst_conceded_pass AND
342   			p_s_result_type <> cst_pass THEN
343   		p_message_name := 'IGS_AS_SPL_GRDTYPE_CONCEDED';
344   		RETURN FALSE;
345   	END IF;
346   	p_message_name := null;
347   	RETURN TRUE;
348   END;
349   EXCEPTION
350   	WHEN OTHERS THEN
351 	        Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
352        	        FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_GSG.assp_val_gsg_ssgt');
353 	        IGS_GE_MSG_STACK.ADD;
354     	        App_Exception.Raise_Exception;
355   END assp_val_gsg_ssgt;
356 END IGS_AS_VAL_GSG;