DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_VAL_SUAAI

Source


1 PACKAGE BODY IGS_AS_VAL_SUAAI AS
2 /* $Header: IGSAS30B.pls 115.11 2003/12/03 08:45:44 ijeddy ship $ */
3 
4 
5   -- Val IGS_PS_UNIT assess item applies to stud IGS_PS_UNIT IGS_AD_LOCATION, class and mode.
6   FUNCTION ASSP_VAL_UAI_LOC_UC(
7   p_student_location_cd IN VARCHAR2 ,
8   p_student_unit_class IN VARCHAR2 ,
9   p_student_unit_mode IN VARCHAR2 ,
10   p_location_cd IN VARCHAR2 ,
11   p_unit_class IN VARCHAR2 ,
12   p_unit_mode IN VARCHAR2 ,
13   p_message_name  OUT NOCOPY VARCHAR2 )
14   RETURN BOOLEAN IS
15 
16   BEGIN	-- assp_val_uai_loc_uc
17     -- ijeddy, Bug 3201661, Grade Book. Obsoleted
18     RETURN TRUE;
19   END assp_val_uai_loc_uc;
20   --
21   -- Validate that date is not after the assessment variation cutoff date.
22   --
23   -- Validate Assessment Item IGS_PS_COURSE Type restrictions.
24   FUNCTION ASSP_VAL_AI_ACOT(
25   p_ass_id IN NUMBER ,
26   p_course_type IN VARCHAR2 ,
27   p_message_name  OUT NOCOPY VARCHAR2 )
28   RETURN BOOLEAN IS
29   	gv_other_detail		VARCHAR2(255);
30   BEGIN	-- assp_val_ai_acot
31   	-- Validate that if the assessment item is of an examinable type,
32   	-- then validate if there exists IGS_AS_COURSE_TYPE records that restrict
33   	-- the assessment item to particular IGS_PS_COURSE types.
34   DECLARE
35   	cst_no			CONSTANT CHAR := 'N';
36   	v_rows_exist			BOOLEAN := FALSE;
37   	v_valid_item			BOOLEAN := FALSE;
38   	v_examinable_ind			IGS_AS_ASSESSMNT_TYP.examinable_ind%TYPE;
39   	v_course_type			IGS_AS_COURSE_TYPE.course_type%TYPE;
40   	CURSOR c_atyp(
41   			cp_ass_id		IGS_AS_ASSESSMNT_ITM.ass_id%TYPE) IS
42   		SELECT	atyp.examinable_ind
43   		FROM	IGS_AS_ASSESSMNT_TYP atyp,
44   			IGS_AS_ASSESSMNT_ITM ai
45   		WHERE	ai.ass_id 		= cp_ass_id AND
46   			ai.assessment_type 	= atyp.assessment_type;
47   	CURSOR c_act(
48   			cp_ass_id		IGS_AS_ASSESSMNT_ITM.ass_id%TYPE) IS
49   		SELECT	course_type
50   		FROM	IGS_AS_COURSE_TYPE
51   		WHERE	ass_id = cp_ass_id;
52   BEGIN
53   	-- Set the default message number
54   	p_message_name  := NULL;
55   	-- Cursor handling
56   	OPEN c_atyp(p_ass_id);
57   	FETCH c_atyp INTO v_examinable_ind;
58   	IF c_atyp%NOTFOUND THEN
59   		CLOSE c_atyp;
60   		RAISE NO_DATA_FOUND;
61   	END IF;
62   	CLOSE c_atyp;
63   	IF (v_examinable_ind = cst_no) THEN
64   		RETURN TRUE;
65   	END IF;
66   	FOR v_act_rec IN c_act(p_ass_id)
67   	LOOP
68   		v_rows_exist := TRUE;
69   		IF (v_act_rec.course_type = p_course_type) THEN
70   			v_valid_item := TRUE;
71   			EXIT;
72   		END IF;
73   	END LOOP;
74   	IF v_rows_exist THEN
75   		IF v_valid_item THEN
76   			RETURN TRUE;
77   		ELSE
78   			p_message_name  := 'IGS_AS_EXAM_ASSITEM_NA';
79   			RETURN FALSE;
80   		END IF;
81   	ELSE
82   		RETURN TRUE;
83   	END IF;
84   END;
85 
86   	  END assp_val_ai_acot;
87   --
88   --
89   -- Validate if assessment item completed for discontinued IGS_PS_UNIT.
90   FUNCTION ASSP_VAL_ASS_COUNT(
91   p_unit_attempt_status IN VARCHAR2 ,
92   p_tracking_id IN NUMBER )
93   RETURN VARCHAR2 IS
94   	gv_other_detail		VARCHAR2(255);
95   BEGIN	-- assp_val_ass_count
96   	-- This module will check that if the status is discontinued, determine if the
97   	-- assignment has been returned by the student, if it has, then include it
98   	-- in the count.
99   	-- This module is called from a view suaai_extension_v which is used in the
100   	-- report "Assignment Due Date Summary Report".
101   DECLARE
102   	v_check		CHAR;
103   	CURSOR c_trst IS
104   		SELECT	'x'
105   		FROM	IGS_TR_STEP	trst
106   		WHERE	trst.tracking_id		= p_tracking_id AND
107   			trst.s_tracking_step_type	= 'ASSIGN-DUE' AND
108   			trst.completion_dt IS NOT NULL;
109   BEGIN
110   	-- Invalid status so do not count this record.
111   	IF (p_unit_attempt_status = 'INVALID') THEN
112   		RETURN 'N';
113   	-- If status is discontinued, determine if the assignment has been returned by
114   	-- the student ready for marking.
115   	ELSIF (p_unit_attempt_status = 'DISCONTIN') THEN
116   		OPEN c_trst;
117   		FETCH c_trst INTO v_check;
118   		IF (c_trst%FOUND) THEN
119   			-- Assignment returned to include it to be counted.
120   			CLOSE c_trst;
121   			RETURN 'Y';
122   		ELSE
123   			-- Assignment not to be counted as student has not returned the assignment.
124   			CLOSE c_trst;
125   			RETURN 'N';
126   		END IF;
127   		CLOSE c_trst;
128   	-- Valid status (ie. COMPLETED, UNCONFIRMED, ENROLLED), include record
129   	-- to be counted.
130   	ELSE
131   		RETURN 'Y';
132   	END IF;
133   EXCEPTION
134   	WHEN OTHERS THEN
135   		IF (c_trst%ISOPEN) THEN
136   			CLOSE c_trst;
137   		END IF;
138   		RAISE;
139   END;
140   EXCEPTION
141   	WHEN OTHERS THEN
142                Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXP');
143   	       FND_MESSAGE.SET_TOKEN('NAME','IGS_AS_VAL_SUAAI.assp_val_ass_count');
144 	       IGS_GE_MSG_STACK.ADD;
145 	       App_Exception.Raise_Exception;
146   END assp_val_ass_count;
147   --
148   -- Validate the attempt number is unique within the student assigment.
149   FUNCTION assp_val_suaai_atmpt(
150   p_person_id  IGS_AS_SU_ATMPT_ITM.person_id%TYPE ,
151   p_course_cd  IGS_AS_SU_ATMPT_ITM.course_cd%TYPE ,
152   p_unit_cd  IGS_AS_SU_ATMPT_ITM.unit_cd%TYPE ,
153   p_cal_type  IGS_AS_SU_ATMPT_ITM.cal_type%TYPE ,
154   p_ci_sequence_number  IGS_AS_SU_ATMPT_ITM.ci_sequence_number%TYPE ,
155   p_ass_id  IGS_AS_SU_ATMPT_ITM.ass_id%TYPE ,
156   p_creation_dt IN DATE ,
157   p_attempt_number  NUMBER ,
158   p_message_name  OUT NOCOPY VARCHAR2 ,
159   -- anilk, 22-Apr-2003, Bug# 2829262
160   p_uoo_id IN NUMBER )
161   RETURN BOOLEAN IS
162 
163   BEGIN	-- assp_val_suaai_atmpt
164   	-- Validate that the attempt number for a student's assessment item is unique.
165   DECLARE
166   	v_attempt_number	IGS_AS_SU_ATMPT_ITM.attempt_number%TYPE;
167   	CURSOR c_suaai_atmpt_num IS
168   		SELECT	suaai.attempt_number
169   		FROM	IGS_AS_SU_ATMPT_ITM	suaai
170   		WHERE	suaai.person_id		= p_person_id			AND
171   			suaai.course_cd		= p_course_cd			AND
172                         -- anilk, 22-Apr-2003, Bug# 2829262
173   			suaai.uoo_id            = p_uoo_id                      AND
174   			suaai.ass_id		= p_ass_id			AND
175   			suaai.creation_dt		<> p_creation_dt			AND
176   			suaai.attempt_number	= p_attempt_number		AND
177   			suaai.logical_delete_dt IS NULL;
178   BEGIN
179   	-- Set the default message number
180   	p_message_name  := NULL;
181   	-- Determine if the attempt number is unique within
182   	-- the assessment item for the student.
183   	OPEN c_suaai_atmpt_num;
184   	FETCH c_suaai_atmpt_num INTO v_attempt_number;
185   	IF c_suaai_atmpt_num%FOUND THEN
186   		CLOSE c_suaai_atmpt_num;
187   		p_message_name  := 'IGS_GE_DUPLICATE_VALUE';
188   		RETURN FALSE;
189   	END IF;
190   	CLOSE c_suaai_atmpt_num;
191   	RETURN TRUE;
192   EXCEPTION
193   	WHEN OTHERS THEN
194   		IF c_suaai_atmpt_num%ISOPEN THEN
195   			CLOSE c_suaai_atmpt_num;
196   		END IF;
197   		RAISE;
198   END;
199   EXCEPTION
200   	WHEN OTHERS THEN
201 	null;
202          --Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
203 --         App_Exception.Raise_Exception;
204   END assp_val_suaai_atmpt;
205   --
206   -- Validate item still applies to student as a uai or part of a pattern.
207 
208 --ijeddy, Bug 3201661, Grade Book.
209   FUNCTION ASSP_VAL_SUAAI_VALID(
210   p_person_id IN NUMBER ,
211   p_unit_cd IN VARCHAR2 ,
212   p_course_cd IN VARCHAR2 ,
213   p_cal_type IN VARCHAR2 ,
214   p_ci_sequence_number IN NUMBER ,
215   p_ass_pattern_id IN NUMBER ,
216   p_ass_id IN NUMBER ,
217   p_suaai_logical_delete_dt IN DATE ,
218   p_message_name  OUT NOCOPY VARCHAR2 ,
219  -- anilk, 22-Apr-2003, Bug# 2829262
220   p_uoo_id IN NUMBER DEFAULT NULL )
221   RETURN BOOLEAN IS
222 
223   BEGIN	-- assp_val_suaai_valid
224   	-- This module validate IGS_AD_PS_APLINSTUNT unit version.
225   DECLARE
226   	v_logical_del_dt	IGS_AS_UNTAS_PATTERN.logical_delete_dt%TYPE;
227   	v_uapi_dummy		VARCHAR2(1);
228   	v_rec_found		BOOLEAN := FALSE;
229 
230    -- This cursor is changed by DDEY as a part of bug # 2358821
231    -- The Assessment Item can be set at Unit level and the Unit Section Level
232    -- this cursor checks if the Assessmsnt Item is stil valid for the Unit Section
233    -- or at the Unit level.
234 
235      CURSOR c_suv IS
236   	   SELECT	uai.logical_delete_dt
237   		FROM
238                  IGS_EN_SU_ATTEMPT  sua,
239                  IGS_AS_UNITASS_ITEM  uai
240   		WHERE 	sua.person_id 			= p_person_id 	AND
241   			sua.course_cd			= p_course_cd 	AND
242                         -- anilk, 22-Apr-2003, Bug# 2829262
243 			sua.uoo_id                      = p_uoo_id  AND
244   			uai.ass_id			= p_ass_id  AND
245             	      	sua.unit_cd = uai.unit_cd  AND
246 			sua.version_number = uai.version_number  AND
247 			sua.cal_type = uai.cal_type AND
248 			sua.ci_sequence_number = uai.ci_sequence_number AND
249 			IGS_AS_VAL_UAI.assp_val_sua_ai_acot(uai.ass_id,
250 			     sua.person_id,
251  			   	 sua.course_cd) = 'TRUE'
252           UNION
253           SELECT	psuai.logical_delete_dt
254   		FROM
255                   IGS_EN_SU_ATTEMPT  sua,
256                   IGS_PS_UNITASS_ITEM_V  psuai
257   		WHERE 	sua.person_id 			= p_person_id 	AND
258   			sua.course_cd			= p_course_cd 	AND
259                         -- anilk, 22-Apr-2003, Bug# 2829262
260   			sua.uoo_id      		= p_uoo_id      AND
261   			psuai.ass_id = p_ass_id   AND
262 	              	sua.uoo_id = psuai.uoo_id  AND
263 			IGS_AS_VAL_UAI.assp_val_sua_ai_acot(psuai.ass_id,
264 			     sua.person_id,
265  			   	 sua.course_cd) = 'TRUE' ;
266 
267 
268   BEGIN
269   	p_message_name  := NULL;
270   	-- Check if part of a pattern or not, whether the item is still valid.
271   	-- There may have been IGS_PS_COURSE restrictions placed on the item.
272   	-- Determine if the item is still valid for the student
273   	FOR v_suv_rec IN c_suv LOOP
274   		IF v_suv_rec.logical_delete_dt IS NOT NULL AND
275      			p_suaai_logical_delete_dt IS NULL THEN
276   			-- Item has been logically deleted but the item belonging
277   			-- to student has not been logically deleted, hence it is
278   			-- invalid. Do nothing at this point as there may still
279   			-- be records to process and a valid one is yet to be found.
280   			NULL;
281   		ELSE
282   			IF (v_suv_rec.logical_delete_dt IS NULL AND
283      				p_suaai_logical_delete_dt IS NULL) OR
284     				(p_suaai_logical_delete_dt IS NOT NULL) THEN
285   				-- The record is valid or a valid item has been found
286   				-- but the student's record has been deleted.
287   				v_rec_found := TRUE;
288   				EXIT;
289   			END IF;
290   		END IF;
291   	END LOOP;
292   	-- Applicable offering options may have changed or IGS_PS_COURSE restriction placed on
293   	-- the item, hence the item is no longer valid for the student.
294   	IF v_rec_found = FALSE THEN
295   		p_message_name   := 'IGS_AS_SUA_ASSITEM_INVALID';
296   		RETURN FALSE;
297   	END IF;
298   	RETURN TRUE;
299   EXCEPTION
300   	WHEN OTHERS THEN
301   		IF (c_suv%ISOPEN) THEN
302   			CLOSE c_suv;
303   		END IF;
304   END;
305 
306   END assp_val_suaai_valid;
307 
308 END IGS_AS_VAL_SUAAI;