1 PACKAGE BODY igs_ps_validate_generic_pkg AS
2 /* $Header: IGSPS92B.pls 120.2 2006/02/19 08:19:03 sommukhe noship $ */
3
4 /***********************************************************************************************
5 Created By : Sanjeeb Rakshit, Somnath Mukherjee
6 Date Created By: 17-Jun-2005
7 Purpose : This package has the some validation function which will be called from sub processes,
8 in igs_ps_create_generic_pkg package.
9
10 Known limitations,enhancements,remarks:
11 Change History (in reverse chronological order)
12 Who When What
13 ********************************************************************************************** */
14
15 g_n_user_id igs_ps_unit_ver_all.created_by%TYPE := NVL(fnd_global.user_id,-1);
16 g_n_login_id igs_ps_unit_ver_all.last_update_login%TYPE := NVL(fnd_global.login_id,-1);
17
18
19 PROCEDURE validate_usec_notes(p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type,
20 p_n_uoo_id IN NUMBER)
21 AS
22 /***********************************************************************************************
23 Created By : Sommukhe
24 Date Created By:
25 Purpose : This function will do validations after inserting records of Unit Section NOTES.
26 .
27
28 Known limitations,enhancements,remarks:
29 Change History (in reverse chronological order)
30 Who When What
31 ********************************************************************************************** */
32 v_message_name VARCHAR2(30);
33 BEGIN
34 IF NOT igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_notes_rec.unit_cd, p_usec_notes_rec.version_number,v_message_name ) THEN
35 fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS');
36 fnd_msg_pub.add;
37 p_usec_notes_rec.status := 'E';
38 END IF;
39
40 --Check if the unit section is NOT_OFFERED
41 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
42 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
43 fnd_msg_pub.add;
44 p_usec_notes_rec.status := 'E';
45 END IF;
46
47 END validate_usec_notes;
48
49
50 PROCEDURE validate_usec_assmnt ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type,
51 p_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE,
52 p_d_exam_start_time igs_ps_usec_as.exam_start_time%TYPE,
53 p_d_exam_end_time igs_ps_usec_as.exam_end_time%TYPE,
54 p_n_building_id NUMBER,
55 p_n_room_id NUMBER,
56 p_insert_update VARCHAR2)
57 AS
58 /***********************************************************************************************
59 Created By : Sommukhe
60 Date Created By:
61 Purpose : This function will do validations before inserting records of Unit Section Assesments.
62
63 Known limitations,enhancements,remarks:
64 Change History (in reverse chronological order)
65 Who When What
66 ********************************************************************************************** */
67 CURSOR c_check_host(cp_uoo_id IN igs_ps_us_exam_meet.exam_meet_group_id%TYPE) IS
68 SELECT host
69 FROM igs_ps_us_exam_meet
70 WHERE uoo_id = cp_uoo_id;
71
72 l_host igs_ps_us_exam_meet.host%TYPE;
73
74 CURSOR c_building(cp_building_id igs_ad_building_all.building_id%TYPE,
75 cp_location_cd igs_ad_building_all.location_cd%TYPE ) IS
76 SELECT 'X'
77 FROM igs_ad_building_all
78 WHERE building_id = cp_building_id
79 AND location_cd = cp_location_cd
80 AND closed_ind = 'N';
81
82 CURSOR c_room(cp_room_id igs_ad_room_all.room_id%TYPE,cp_building_id igs_ad_building_all.building_id%TYPE) IS
83 SELECT 'X'
84 FROM igs_ad_room_all
85 WHERE room_id = cp_room_id
86 AND building_id =cp_building_id
87 AND closed_ind = 'N';
88 l_c_var VARCHAR2(1);
89
90 BEGIN
91
92 --Check if the unit section is NOT_OFFERED
93 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
94 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
95 fnd_msg_pub.add;
96 p_usec_assmnt_rec.status := 'E';
97 END IF;
98
99 IF p_usec_assmnt_rec.final_exam_date IS NOT NULL
100 AND (p_d_exam_start_time IS NULL OR p_d_exam_end_time IS NULL ) THEN
101 fnd_message.set_name ('IGS','IGS_PS_XM_ST_END_TIME_ENTR' );
102 fnd_msg_pub.add;
103 p_usec_assmnt_rec.status := 'E';
104 END IF;
105
106 IF p_d_exam_end_time IS NOT NULL AND p_d_exam_start_time IS NOT NULL
107 AND (TO_NUMBER(TO_CHAR(p_d_exam_end_time,'HH24MI')) <
108 TO_NUMBER(TO_CHAR(p_d_exam_start_time,'HH24MI'))) THEN
109 fnd_message.set_name ( 'IGS','IGS_PS_XM_END_GR_ST_TM');
110 fnd_msg_pub.add;
111 p_usec_assmnt_rec.status := 'E';
112 END IF;
113
114 IF (p_d_exam_start_time IS NOT NULL OR p_d_exam_end_time IS NOT NULL) AND (p_usec_assmnt_rec.final_exam_date IS NULL ) THEN
115 fnd_message.set_name ('IGS','IGS_PS_FIN_XM_DT_ST_ET');
116 fnd_msg_pub.add;
117 p_usec_assmnt_rec.status := 'E';
118 END IF;
119
120 IF p_n_building_id IS NOT NULL THEN
121 OPEN c_building(p_n_building_id,p_usec_assmnt_rec.exam_location_cd);
122 FETCH c_building INTO l_c_var;
123 IF c_building%NOTFOUND THEN
124 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
125 p_usec_assmnt_rec.status := 'E';
126 END IF;
127 CLOSE c_building;
128 END IF;
129
130 IF p_n_building_id IS NOT NULL AND p_n_room_id IS NOT NULL THEN
131 OPEN c_room(p_n_room_id,p_n_building_id);
132 FETCH c_room INTO l_c_var;
133 IF c_room%NOTFOUND THEN
134 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
135 p_usec_assmnt_rec.status := 'E';
136 END IF;
137 CLOSE c_room;
138 END IF;
139
140
141 IF p_insert_update = 'U' THEN
142 OPEN c_check_host(p_n_uoo_id );
143 FETCH c_check_host INTO l_host;
144 IF c_check_host%FOUND THEN
145 IF l_host = 'Y' THEN
146 fnd_message.set_name('IGS','IGS_PS_CHANGE_US_HOST_REM');
147 fnd_msg_pub.add;
148 p_usec_assmnt_rec.status := 'E';
149 END IF;
150 END IF;
151 CLOSE c_check_host;
152 END IF;
153
154 END validate_usec_assmnt;
155
156
157 PROCEDURE validate_tch_rsp_ovrd ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type,
158 p_n_uoo_id IN NUMBER)
159 AS
160 /***********************************************************************************************
161 Created By : sommukhe
162 Date Created By:
163 Purpose :
164 Known limitations,enhancements,remarks:
165 Change History (in reverse chronological order)
166 Who When What
167 ********************************************************************************************** */
168 l_c_message VARCHAR2(30);
169 BEGIN
170 -- Check if unit status is inactive.
171 IF NOT igs_ps_val_unit.crsp_val_iud_uv_dtl(p_tch_rsp_ovrd_rec.unit_cd,p_tch_rsp_ovrd_rec.version_number,l_c_message) THEN
172 fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
173 fnd_msg_pub.add;
174 p_tch_rsp_ovrd_rec.status := 'E';
175 END IF;
176
177 --Check if the unit section is NOT_OFFERED
178 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
179 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
180 fnd_msg_pub.add;
181 p_tch_rsp_ovrd_rec.status := 'E';
182 END IF;
183
184 -- Check if orgunit is inactive.
185 IF NOT igs_ps_val_crv.crsp_val_ou_sys_sts(p_tch_rsp_ovrd_rec.org_unit_cd,p_tch_rsp_ovrd_rec.ou_start_dt,l_c_message) THEN
186 fnd_message.set_name ( 'IGS', 'IGS_PS_ORGUNIT_STATUS_INACTIV' );
187 fnd_msg_pub.add;
188 p_tch_rsp_ovrd_rec.status := 'E';
189 END IF;
190 END validate_tch_rsp_ovrd;
191
192 ---validations before inserting/updating Unit Section Assessment item group records
193 PROCEDURE validate_as_us_ai_group (p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,
194 p_n_uoo_id NUMBER)
195 AS
196 /***********************************************************************************************
197 Created By : sommukhe
198 Date Created By:
199 Purpose :
200 Known limitations,enhancements,remarks:
201 Change History (in reverse chronological order)
202 Who When What
203 ********************************************************************************************** */
204 CURSOR cur_usec (cp_uoo_id NUMBER) IS
205 SELECT 'X'
206 FROM igs_ps_unit_ofr_opt_all
207 WHERE uoo_id = cp_uoo_id
208 AND NVL(enrollment_actual,0) > 0;
209 l_c_var VARCHAR2(1);
210 l_c_message VARCHAR2(30);
211
212 BEGIN
213 IF p_as_us_ai_group_rec.final_formula_code IN ('ATLEAST_N', 'BEST_N') THEN
214 IF p_as_us_ai_group_rec.final_formula_qty IS NULL THEN
215 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'FINAL_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
216 p_as_us_ai_group_rec.status := 'E';
217 END IF;
218 END IF;
219
220 IF p_as_us_ai_group_rec.final_formula_code IN ('ATLEAST_N', 'BEST_N','WEIGHTED_AVERAGE') THEN
221 IF p_as_us_ai_group_rec.final_weight_qty IS NULL THEN
222 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'FINAL_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
223 p_as_us_ai_group_rec.status := 'E';
224 END IF;
225 END IF;
226
227 IF (p_as_us_ai_group_rec.midterm_formula_code IS NOT NULL) AND (p_as_us_ai_group_rec.midterm_formula_code IN ('ATLEAST_N', 'BEST_N')) THEN
228 IF p_as_us_ai_group_rec.midterm_formula_qty IS NULL THEN
229 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'MIDTERM_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
230 p_as_us_ai_group_rec.status := 'E';
231 END IF;
232 END IF;
233
234 IF (p_as_us_ai_group_rec.midterm_formula_code IS NOT NULL) AND (p_as_us_ai_group_rec.midterm_formula_code IN ('ATLEAST_N', 'BEST_N','WEIGHTED_AVERAGE')) THEN
235 IF p_as_us_ai_group_rec.midterm_weight_qty IS NULL THEN
236 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'MIDTERM_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
237 p_as_us_ai_group_rec.status := 'E';
238 END IF;
239 END IF;
240
241
242 --Final formula qty cannot have value when final formula code is null
243 IF p_as_us_ai_group_rec.final_formula_qty IS NOT NULL AND p_as_us_ai_group_rec.final_formula_code IS NULL THEN
244 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FINAL_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
245 p_as_us_ai_group_rec.status := 'E';
246 END IF;
247
248 --Final weight qty cannot have value when final formula code is null
249 IF p_as_us_ai_group_rec.final_weight_qty IS NOT NULL AND p_as_us_ai_group_rec.final_formula_code IS NULL THEN
250 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FINAL_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
251 p_as_us_ai_group_rec.status := 'E';
252 END IF;
253
254 --Midterm weight qty cannot have value when Midterm formula code is null
255 IF p_as_us_ai_group_rec.midterm_weight_qty IS NOT NULL AND p_as_us_ai_group_rec.midterm_formula_code IS NULL THEN
256 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'MIDTERM_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
257 p_as_us_ai_group_rec.status := 'E';
258 END IF;
259
260 --Midterm formula qty cannot have value when Midterm formula code is null
261 IF p_as_us_ai_group_rec.midterm_formula_qty IS NOT NULL AND p_as_us_ai_group_rec.midterm_formula_code IS NULL THEN
262 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'MIDTERM_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
263 p_as_us_ai_group_rec.status := 'E';
264 END IF;
265
266
267
268 IF (p_as_us_ai_group_rec.final_formula_code IS NOT NULL) AND (p_as_us_ai_group_rec.final_formula_code NOT IN ('ATLEAST_N', 'BEST_N','WEIGHTED_AVERAGE')) THEN
269 p_as_us_ai_group_rec.status := 'E';
270 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FINAL_FORMULA_CODE', 'LEGACY_TOKENS', FALSE);
271 END IF;
272
273 IF (p_as_us_ai_group_rec.midterm_formula_code IS NOT NULL) AND (p_as_us_ai_group_rec.midterm_formula_code NOT IN ('ATLEAST_N', 'BEST_N','WEIGHTED_AVERAGE')) THEN
274 p_as_us_ai_group_rec.status := 'E';
275 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'MIDTERM_FORMULA_CODE', 'LEGACY_TOKENS', FALSE);
276 END IF;
277
278 --Check if enrollment exists against a unit section then import is not allowed
279 OPEN cur_usec(p_n_uoo_id) ;
280 FETCH cur_usec INTO l_c_var;
281 IF cur_usec%FOUND THEN
282 fnd_message.set_name ( 'IGS', 'IGS_PS_ENR_EXISTS_NO_IMPORT' );
283 fnd_msg_pub.add;
284 p_as_us_ai_group_rec.status := 'E';
285 END IF;
286 CLOSE cur_usec;
287
288 --check if location code is closed.
289 IF NOT igs_ps_val_uoo.crsp_val_loc_cd(p_as_us_ai_group_rec.location_cd,l_c_message) THEN
290 fnd_message.set_name ( 'IGS', l_c_message );
291 fnd_msg_pub.add;
292 p_as_us_ai_group_rec.status := 'E';
293 END IF;
294
295 -- Check if unit status is inactive.
296 IF NOT igs_ps_val_unit.crsp_val_iud_uv_dtl(p_as_us_ai_group_rec.unit_cd,p_as_us_ai_group_rec.version_number,l_c_message) THEN
297 fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
298 fnd_msg_pub.add;
299 p_as_us_ai_group_rec.status := 'E';
300 END IF;
301
302 --Check if the unit section is NOT_OFFERED
303 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
304 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
305 fnd_msg_pub.add;
306 p_as_us_ai_group_rec.status := 'E';
307 END IF;
308
309 END validate_as_us_ai_group;
310
311 -- validations before inserting/updating Unit Section Assessment item records
312 PROCEDURE validate_unitass_item ( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,
313 p_cal_type IN VARCHAR2,
314 p_ci_sequence_number NUMBER,
315 p_n_uoo_id NUMBER,
316 p_insert VARCHAR2)
317 AS
318 /***********************************************************************************************
319 Created By : sommukhe
320 Date Created By:
321 Purpose :
322 Known limitations,enhancements,remarks:
323 Change History (in reverse chronological order)
324 Who When What
325 ********************************************************************************************** */
326
327 CURSOR cp_st_en_dt(cp_cal_type VARCHAR ,cp_seq_number NUMBER) IS
328 SELECT start_dt, end_dt
329 FROM igs_ca_inst
330 WHERE cal_type = cp_cal_type
331 AND sequence_number = cp_seq_number;
332
333 cp_st_en_dt_rec cp_st_en_dt%ROWTYPE;
334
335 CURSOR c_reference(cp_n_uoo_id NUMBER,cp_reference VARCHAR2) IS
336 SELECT 'X'
337 FROM igs_ps_unitass_item
338 WHERE uoo_id = cp_n_uoo_id
339 AND reference = cp_reference
340 AND logical_delete_dt IS NULL;
341
342 c_reference_rec c_reference%ROWTYPE;
343
344 CURSOR c_usec(cp_n_uoo_id NUMBER) IS
345 SELECT *
346 FROM igs_ps_unit_ofr_opt_all
347 WHERE uoo_id = cp_n_uoo_id;
348
349 c_usec_rec c_usec%ROWTYPE;
350
351 CURSOR c_action_dt(cp_assessment_id igs_as_assessmnt_itm.ass_id%TYPE,cp_uoo_id NUMBER,cp_sequence_number NUMBER) IS
352 SELECT *
353 FROM igs_ps_unitass_item
354 WHERE ass_id =cp_assessment_id
355 AND uoo_id =cp_uoo_id
356 AND sequence_number =cp_sequence_number ;
357
358 c_action_dt_rec c_action_dt%ROWTYPE;
359 l_c_message VARCHAR2(30);
360
361
362 CURSOR cur_assessment_id(cp_assessment_id igs_as_assessmnt_itm.ass_id%TYPE ) IS
363 SELECT assessment_type
364 FROM igs_as_assessmnt_itm
365 WHERE ass_id = cp_assessment_id;
366 l_cur_assessment_id cur_assessment_id%ROWTYPE;
367
368 l_grading_schema_cd igs_ps_unitass_item.grading_schema_cd%TYPE;
369 l_gs_version_number igs_ps_unitass_item.gs_version_number%TYPE;
370 l_description igs_as_grd_schema.description%TYPE;
371 l_approved VARCHAR2 (1);
372
373 CURSOR cur_grading_approved(cp_unit_cd VARCHAR2,cp_version_number NUMBER,cp_assessment_type VARCHAR2,cp_grading_schema_cd VARCHAR2,cp_gs_version_number NUMBER) IS
374 SELECT 'X'
375 FROM igs_as_appr_grd_sch agrs,
376 igs_as_grd_schema grd
377 WHERE grd.grading_schema_cd = agrs.grading_schema_cd
378 AND grd.version_number = agrs.gs_version_number
379 AND agrs.unit_cd = cp_unit_cd
380 AND agrs.version_number = cp_version_number
381 AND agrs.assessment_type = cp_assessment_type
382 AND agrs.closed_ind = 'N'
383 AND agrs.grading_schema_cd = cp_grading_schema_cd
384 AND agrs.gs_version_number = cp_gs_version_number;
385
386 CURSOR cur_grading_assess(cp_grading_schema_cd VARCHAR2,cp_gs_version_number NUMBER) IS
387 SELECT 'X'
388 FROM igs_as_grd_schema
389 WHERE grading_schema_cd = cp_grading_schema_cd
390 AND version_number = cp_gs_version_number
391 AND NVL(end_dt,SYSDATE) >= SYSDATE
392 AND grading_schema_type = 'ASSESSMENT_ITEM';
393
394 l_c_var VARCHAR2(1);
395 l_c_token_val fnd_new_messages.message_text%TYPE;
396
397 BEGIN
398
399 IF (p_unitass_item_rec.midterm_mandatory_type_code IS NOT NULL) AND (p_unitass_item_rec.midterm_mandatory_type_code NOT IN ('MANDATORY', 'MANDATORY_PASS','OPTIONAL')) THEN
400 p_unitass_item_rec.status := 'E';
401 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'MIDTERM_MANDATORY_TYPE_CD', 'LEGACY_TOKENS', FALSE);
402 END IF;
403
404 IF (p_unitass_item_rec.final_mandatory_type_code IS NOT NULL) AND (p_unitass_item_rec.final_mandatory_type_code NOT IN ('MANDATORY', 'MANDATORY_PASS','OPTIONAL')) THEN
405 p_unitass_item_rec.status := 'E';
406 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FINAL_MANDATORY_TYPE_CD', 'LEGACY_TOKENS', FALSE);
407 END IF;
408
409 --If midterm_mandatory_type_code is not null then MIDTERM_WEIGHT_QTY is mandatory.
410 IF p_unitass_item_rec.midterm_mandatory_type_code IS NOT NULL THEN
411 IF p_unitass_item_rec.midterm_weight_qty_item IS NULL THEN
412 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'MIDTERM_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
413 p_unitass_item_rec.status := 'E';
414 END IF;
415 END IF;
416
417 --If final_mandatory_type_code is not null then FINAL_WEIGHT_QTY is mandatory.
418 IF p_unitass_item_rec.final_mandatory_type_code IS NOT NULL THEN
419 IF p_unitass_item_rec.final_weight_qty_item IS NULL THEN
420 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'FINAL_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
421 p_unitass_item_rec.status := 'E';
422 END IF;
423 END IF;
424
425
426 --Midterm weight qty cannot have value when Midterm mandatory Type code is null
427 IF p_unitass_item_rec.midterm_weight_qty_item IS NOT NULL AND p_unitass_item_rec.midterm_mandatory_type_code IS NULL THEN
428 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'MIDTERM_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
429 p_unitass_item_rec.status := 'E';
430 END IF;
431
432 --Final weight qty cannot have value when Final mandatory Type code is null
433 IF p_unitass_item_rec.final_weight_qty_item IS NOT NULL AND p_unitass_item_rec.final_mandatory_type_code IS NULL THEN
434 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FINAL_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
435 p_unitass_item_rec.status := 'E';
436 END IF;
437
438
439
440 --Validate grading schema code
441 OPEN cur_assessment_id(p_unitass_item_rec.assessment_id);
442 FETCH cur_assessment_id INTO l_cur_assessment_id;
443 CLOSE cur_assessment_id;
444 igs_as_gen_003.get_default_grds (
445 x_unit_cd => p_unitass_item_rec.unit_cd,
446 x_version_number => p_unitass_item_rec.version_number,
447 x_assessment_type => l_cur_assessment_id.assessment_type,
448 x_grading_schema_cd => l_grading_schema_cd,
449 x_gs_version_number => l_gs_version_number,
450 x_description => l_description,
451 x_approved => l_approved
452 );
453 IF NVL (l_approved, 'N') = 'Y' THEN
454 OPEN cur_grading_approved(p_unitass_item_rec.unit_cd,p_unitass_item_rec.version_number,l_cur_assessment_id.assessment_type,p_unitass_item_rec.grading_schema_cd,p_unitass_item_rec.gs_version_number);
455 FETCH cur_grading_approved INTO l_c_var;
456 IF cur_grading_approved%NOTFOUND THEN
457 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
458 p_unitass_item_rec.status := 'E';
459 END IF;
460 CLOSE cur_grading_approved;
461 ELSE
462 OPEN cur_grading_assess(p_unitass_item_rec.grading_schema_cd,p_unitass_item_rec.gs_version_number);
463 FETCH cur_grading_assess INTO l_c_var;
464 IF cur_grading_assess%NOTFOUND THEN
465 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
466 p_unitass_item_rec.status := 'E';
467 END IF;
468 CLOSE cur_grading_assess;
469 END IF;
470
471 --Release date should be greater than or equal to due date
472 IF p_unitass_item_rec.release_date IS NOT NULL AND p_unitass_item_rec.due_dt IS NOT NULL THEN
473 IF p_unitass_item_rec.release_date < p_unitass_item_rec.due_dt THEN
474 fnd_message.set_name ( 'IGS', 'IGS_AS_DUE_DT_LESS_RELEASE_DT' );
475 fnd_msg_pub.add;
476 p_unitass_item_rec.status := 'E';
477 END IF;
478 END IF;
479
480
481 IF p_insert = 'I' THEN
482 OPEN c_reference(p_n_uoo_id,p_unitass_item_rec.reference);
483 FETCH c_reference INTO c_reference_rec;
484 IF c_reference%FOUND THEN
485 fnd_message.set_name ( 'IGS', 'IGS_PS_REF_USAI_UNIQUE_US' );
486 fnd_msg_pub.add;
487 p_unitass_item_rec.status := 'E';
488 END IF;
489 CLOSE c_reference;
490 ELSE
491 OPEN c_action_dt(p_unitass_item_rec.assessment_id,p_n_uoo_id,p_unitass_item_rec.sequence_number);
492 FETCH c_action_dt INTO c_action_dt_rec;
493 IF c_action_dt_rec.reference <>p_unitass_item_rec.reference THEN
494 OPEN c_reference(p_n_uoo_id,p_unitass_item_rec.reference);
495 FETCH c_reference INTO c_reference_rec;
496 IF c_reference%FOUND THEN
497 fnd_message.set_name ( 'IGS', 'IGS_PS_REF_USAI_UNIQUE_US' );
498 fnd_msg_pub.add;
499 p_unitass_item_rec.status := 'E';
500 END IF;
501 CLOSE c_reference;
502 END IF;
503 CLOSE c_action_dt;
504 END IF;
505
506
507
508 --If item is examinable then validate that reference is set
509 IF NVL (p_unitass_item_rec.reference, 'NULL666') = 'NULL666'
510 AND (igs_as_val_aiem.assp_val_ai_exmnbl (p_unitass_item_rec.assessment_id, l_c_message) OR igs_as_gen_002.assp_get_ai_s_type (p_unitass_item_rec.assessment_id) = 'ASSIGNMENT') THEN
511 fnd_message.set_name ( 'IGS', 'IGS_AS_REF_ASSITEM_EXAM' );
512 fnd_msg_pub.add;
513 p_unitass_item_rec.status := 'E';
514 END IF;
515
516 --If the assessment item is examinable,Validate that the reference number id unique within a UOP.Else if record has not been deleted, again validate the reference number.
517 IF igs_as_val_aiem.assp_val_ai_exmnbl (p_unitass_item_rec.assessment_id, l_c_message) = TRUE THEN
518 IF igs_as_val_uai.assp_val_uai_uniqref (p_unitass_item_rec.unit_cd,
519 p_unitass_item_rec.version_number,
520 p_cal_type, p_ci_sequence_number,
521 p_unitass_item_rec.sequence_number,
522 p_unitass_item_rec.reference,
523 p_unitass_item_rec.assessment_id,
524 l_c_message) = FALSE THEN
525 fnd_message.set_name ( 'IGS', l_c_message );
526 fnd_msg_pub.add;
527 p_unitass_item_rec.status := 'E';
528 ELSIF NVL(p_unitass_item_rec.logical_delete_dt, igs_ge_date.igsdate ('1900/01/01')) = igs_ge_date.igsdate ('1900/01/01') THEN
529 IF igs_ps_val_uai.assp_val_uai_opt_ref (
530 p_unitass_item_rec.unit_cd,
531 p_unitass_item_rec.version_number,
532 p_cal_type, p_ci_sequence_number,
533 p_unitass_item_rec.sequence_number,
534 p_unitass_item_rec.reference,
535 p_unitass_item_rec.assessment_id,
536 igs_as_gen_001.assp_get_ai_a_type (p_unitass_item_rec.assessment_id),
537 l_c_message) = FALSE THEN
538
539 fnd_message.set_name ( 'IGS', l_c_message );
540 fnd_msg_pub.add;
541 p_unitass_item_rec.status := 'E';
542 END IF;
543 END IF;
544 END IF;
545
546 --validations on Due date
547 OPEN c_usec(p_n_uoo_id);
548 FETCH c_usec INTO c_usec_rec;
549 OPEN cp_st_en_dt(p_cal_type, p_ci_sequence_number);
550 FETCH cp_st_en_dt INTO cp_st_en_dt_rec;
551 IF p_unitass_item_rec.due_dt IS NOT NULL THEN
552 IF c_usec_rec.unit_section_start_date IS NOT NULL
553 OR c_usec_rec.unit_section_end_date IS NOT NULL THEN
554 IF c_usec_rec.unit_section_start_date IS NULL THEN
555 IF p_unitass_item_rec.due_dt < TRUNC (cp_st_en_dt_rec.start_dt)
556 OR p_unitass_item_rec.due_dt > TRUNC (c_usec_rec.unit_section_end_date) THEN
557 fnd_message.set_name ('IGS', 'IGS_PS_USEC_EFFET_DATES');
558 l_c_token_val:= fnd_message.get;
559
560 fnd_message.set_name ('IGS', 'IGS_PS_UA_DUDT_IN_TP');
561 fnd_message.set_token ('PERIOD', l_c_token_val);
562 fnd_msg_pub.add;
563 p_unitass_item_rec.status := 'E';
564
565 END IF;
566 ELSIF c_usec_rec.unit_section_end_date IS NULL THEN
567 IF p_unitass_item_rec.due_dt < TRUNC (c_usec_rec.unit_section_start_date)
568 OR p_unitass_item_rec.due_dt > TRUNC (cp_st_en_dt_rec.end_dt) THEN
569 fnd_message.set_name ('IGS', 'IGS_PS_USEC_EFFET_DATES');
570 l_c_token_val:= fnd_message.get;
571
572 fnd_message.set_name ('IGS', 'IGS_PS_UA_DUDT_IN_TP');
573 fnd_message.set_token ('PERIOD', l_c_token_val);
574 fnd_msg_pub.add;
575 p_unitass_item_rec.status := 'E';
576
577 END IF;
578 ELSE
579 IF p_unitass_item_rec.due_dt < TRUNC (c_usec_rec.unit_section_start_date)
580 OR p_unitass_item_rec.due_dt > TRUNC (c_usec_rec.unit_section_end_date) THEN
581 fnd_message.set_name ('IGS', 'IGS_PS_USEC_EFFET_DATES');
582 l_c_token_val:= fnd_message.get;
583
584 fnd_message.set_name ('IGS', 'IGS_PS_UA_DUDT_IN_TP');
585 fnd_message.set_token ('PERIOD', l_c_token_val);
586 fnd_msg_pub.add;
587 p_unitass_item_rec.status := 'E';
588
589 END IF;
590 END IF;
591 ELSE
592 IF p_unitass_item_rec.due_dt < TRUNC (cp_st_en_dt_rec.start_dt)
593 OR p_unitass_item_rec.due_dt > TRUNC (cp_st_en_dt_rec.end_dt) THEN
594 fnd_message.set_name ('IGS', 'IGS_PS_TP_DATES');
595 l_c_token_val:= fnd_message.get;
596
597 fnd_message.set_name ('IGS', 'IGS_PS_UA_DUDT_IN_TP');
598 fnd_message.set_token ('PERIOD', l_c_token_val);
599 fnd_msg_pub.add;
600 p_unitass_item_rec.status := 'E';
601 END IF;
602 END IF;
603 END IF;
604 CLOSE cp_st_en_dt;
605 CLOSE c_usec;
606
607 END validate_unitass_item;
608
609
610 PROCEDURE validate_uso_clas_meet ( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type,
611 p_n_uoo_id NUMBER,
612 p_n_class_meet_group_id NUMBER,
613 p_c_cal_type VARCHAR2,
614 p_n_seq_num NUMBER)
615 AS
616 /***********************************************************************************************
617 Created By : sommukhe
618 Date Created By:
619 Purpose :
620
621 Known limitations,enhancements,remarks:
622 Change History (in reverse chronological order)
623 Who When What
624 ********************************************************************************************** */
625
626 CURSOR cur_usec IS
627 SELECT 'X'
628 FROM igs_ps_unit_ofr_opt_all uoo
629 WHERE uoo.unit_section_status IN ('OPEN','PLANNED','FULLWAITOK','CLOSED')
630 AND uoo.relation_type='NONE'
631 AND uoo.cal_type=p_c_cal_type
632 AND uoo.ci_sequence_number =p_n_seq_num
633 AND uoo.uoo_id=p_n_uoo_id;
634
635 cur_usec_rec cur_usec%ROWTYPE;
636
637 CURSOR cur_std_attempt(cp_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
638 SELECT *
639 FROM igs_en_su_attempt
640 WHERE uoo_id=cp_uoo_id
641 AND unit_attempt_status='WAITLISTED';
642
643 CURSOR c_x_grpmem(cp_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
644 SELECT 'X'
645 FROM igs_ps_usec_x_grpmem
646 WHERE uoo_id=cp_uoo_id;
647
648 c_x_grpmem_rec c_x_grpmem%ROWTYPE;
649
650 CURSOR cur_waitlist(cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
651 SELECT waitlist_actual
652 FROM igs_ps_unit_ofr_opt
653 WHERE uoo_id=cp_uoo_id;
654 l_cur_waitlist cur_waitlist%ROWTYPE;
655
656 l_sysdate DATE := trunc(SYSDATE);
657
658
659
660 BEGIN
661
662 --Check if the unit section is NOT_OFFERED
663 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
664 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
665 fnd_msg_pub.add;
666 p_uso_clas_meet_rec.status := 'E';
667 END IF;
668
669 --Validation on selection of
670 OPEN cur_usec;
671 FETCH cur_usec INTO cur_usec_rec;
672 IF cur_usec%NOTFOUND THEN
673 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
674 p_uso_clas_meet_rec.status := 'E';
675 END IF;
676 CLOSE cur_usec;
677
678 --This unit section should not be present in any cross listed Unit section group
679 OPEN c_x_grpmem(p_n_uoo_id);
680 FETCH c_x_grpmem INTO c_x_grpmem_rec;
681 IF c_x_grpmem%FOUND THEN
682 fnd_message.set_name('IGS','IGS_PS_UNT_SEC_DEFINED_GRP');
683 fnd_msg_pub.add;
684 p_uso_clas_meet_rec.status := 'E';
685 END IF;
686 CLOSE c_x_grpmem;
687
688 OPEN cur_waitlist(p_n_uoo_id);
689 FETCH cur_waitlist INTO l_cur_waitlist;
690 IF l_cur_waitlist.waitlist_actual >= 1 THEN
691 FOR l_c_fetch_record_cur IN cur_std_attempt(p_n_uoo_id) LOOP
692
693 DECLARE
694 FUNCTION get_msg_from_stack(l_n_msg_count NUMBER) RETURN VARCHAR2 AS
695 l_c_msg VARCHAR2(3000);
696 l_c_msg_name fnd_new_messages.message_name%TYPE;
697 l_appl_name VARCHAR2(30);
698 BEGIN
699 l_c_msg := FND_MSG_PUB.GET(p_msg_index => l_n_msg_count, p_encoded => 'T');
700 FND_MESSAGE.SET_ENCODED (l_c_msg);
701 FND_MESSAGE.PARSE_ENCODED(FND_MESSAGE.GET_ENCODED,l_appl_name, l_c_msg_name);
702 RETURN l_c_msg_name;
703 END get_msg_from_stack;
704
705 BEGIN
706
707 IGS_EN_SUA_API.UPDATE_UNIT_ATTEMPT(
708 X_ROWID => l_c_fetch_record_cur.row_id,
709 x_waitlist_manual_ind => l_c_fetch_record_cur.waitlist_manual_ind,
710 X_PERSON_ID => l_c_fetch_record_cur.person_id,
711 X_COURSE_CD => l_c_fetch_record_cur.course_cd,
712 X_UNIT_CD => l_c_fetch_record_cur.unit_cd,
713 X_CAL_TYPE => l_c_fetch_record_cur.cal_type,
714 X_CI_SEQUENCE_NUMBER => l_c_fetch_record_cur.ci_sequence_number,
715 X_VERSION_NUMBER => l_c_fetch_record_cur.version_number,
716 X_LOCATION_CD => l_c_fetch_record_cur.location_cd,
717 X_UNIT_CLASS => l_c_fetch_record_cur.unit_class,
718 X_CI_START_DT => l_c_fetch_record_cur.ci_start_dt,
719 X_CI_END_DT => l_c_fetch_record_cur.ci_end_dt,
720 X_UOO_ID => l_c_fetch_record_cur.uoo_id,
721 X_ENROLLED_DT => l_c_fetch_record_cur.enrolled_dt,
722 X_UNIT_ATTEMPT_STATUS => 'DROPPED',
723 X_ADMINISTRATIVE_UNIT_STATUS => l_c_fetch_record_cur.administrative_unit_status,
724 X_DISCONTINUED_DT => nvl(l_c_fetch_record_cur.discontinued_dt, l_sysdate),
725 X_RULE_WAIVED_DT => l_c_fetch_record_cur.rule_waived_dt,
726 X_RULE_WAIVED_PERSON_ID => l_c_fetch_record_cur.rule_waived_person_id,
727 X_NO_ASSESSMENT_IND => l_c_fetch_record_cur.no_assessment_ind,
728 X_SUP_UNIT_CD => l_c_fetch_record_cur.sup_unit_cd,
729 X_SUP_VERSION_NUMBER => l_c_fetch_record_cur.sup_version_number,
730 X_EXAM_LOCATION_CD => l_c_fetch_record_cur.exam_location_cd,
731 X_ALTERNATIVE_TITLE => l_c_fetch_record_cur.alternative_title,
732 X_OVERRIDE_ENROLLED_CP => l_c_fetch_record_cur.override_enrolled_cp,
733 X_OVERRIDE_EFTSU => l_c_fetch_record_cur.override_eftsu,
734 X_OVERRIDE_ACHIEVABLE_CP => l_c_fetch_record_cur.override_achievable_cp,
735 X_OVERRIDE_OUTCOME_DUE_DT => l_c_fetch_record_cur.override_outcome_due_dt,
736 X_OVERRIDE_CREDIT_REASON => l_c_fetch_record_cur.override_credit_reason,
737 X_ADMINISTRATIVE_PRIORITY => l_c_fetch_record_cur.administrative_priority,
738 X_WAITLIST_DT => l_c_fetch_record_cur.waitlist_dt,
739 X_DCNT_REASON_CD => l_c_fetch_record_cur.dcnt_reason_cd,
740 X_MODE => 'R',
741 X_GS_VERSION_NUMBER => l_c_fetch_record_cur.gs_version_number,
742 X_ENR_METHOD_TYPE => l_c_fetch_record_cur.enr_method_type,
743 X_FAILED_UNIT_RULE => l_c_fetch_record_cur.failed_unit_rule,
744 X_CART => l_c_fetch_record_cur.cart,
745 X_RSV_SEAT_EXT_ID => l_c_fetch_record_cur.rsv_seat_ext_id ,
746 X_ORG_UNIT_CD => l_c_fetch_record_cur.org_unit_cd,
747 X_SESSION_ID => l_c_fetch_record_cur.session_id,
748 X_GRADING_SCHEMA_CODE => l_c_fetch_record_cur.grading_schema_code,
749 X_DEG_AUD_DETAIL_ID => l_c_fetch_record_cur.deg_aud_detail_id,
750 X_SUBTITLE => l_c_fetch_record_cur.subtitle,
751 X_STUDENT_CAREER_TRANSCRIPT => l_c_fetch_record_cur.student_career_transcript,
752 X_STUDENT_CAREER_STATISTICS => l_c_fetch_record_cur.student_career_statistics,
753 X_ATTRIBUTE_CATEGORY => l_c_fetch_record_cur.attribute_category,
754 X_ATTRIBUTE1 => l_c_fetch_record_cur.attribute1,
755 X_ATTRIBUTE2 => l_c_fetch_record_cur.attribute2,
756 X_ATTRIBUTE3 => l_c_fetch_record_cur.attribute3,
757 X_ATTRIBUTE4 => l_c_fetch_record_cur.attribute4,
758 X_ATTRIBUTE5 => l_c_fetch_record_cur.attribute5,
759 X_ATTRIBUTE6 => l_c_fetch_record_cur.attribute6,
760 X_ATTRIBUTE7 => l_c_fetch_record_cur.attribute7,
761 X_ATTRIBUTE8 => l_c_fetch_record_cur.attribute8,
762 X_ATTRIBUTE9 => l_c_fetch_record_cur.attribute9,
763 X_ATTRIBUTE10 => l_c_fetch_record_cur.attribute10,
764 X_ATTRIBUTE11 => l_c_fetch_record_cur.attribute11,
765 X_ATTRIBUTE12 => l_c_fetch_record_cur.attribute12,
766 X_ATTRIBUTE13 => l_c_fetch_record_cur.attribute13,
767 X_ATTRIBUTE14 => l_c_fetch_record_cur.attribute14,
768 X_ATTRIBUTE15 => l_c_fetch_record_cur.attribute15,
769 X_ATTRIBUTE16 => l_c_fetch_record_cur.attribute16,
770 X_ATTRIBUTE17 => l_c_fetch_record_cur.attribute17,
771 X_ATTRIBUTE18 => l_c_fetch_record_cur.attribute18,
772 X_ATTRIBUTE19 => l_c_fetch_record_cur.attribute19,
773 X_ATTRIBUTE20 => l_c_fetch_record_cur.attribute20,
774 X_WLST_PRIORITY_WEIGHT_NUM => l_c_fetch_record_cur.wlst_priority_weight_num,
775 X_WLST_PREFERENCE_WEIGHT_NUM => l_c_fetch_record_cur.wlst_preference_weight_num,
776 X_CORE_INDICATOR_CODE => l_c_fetch_record_cur.core_indicator_code
777 ) ;
778 EXCEPTION
779 WHEN OTHERS THEN
780 fnd_message.set_name('IGS', get_msg_from_stack(1));
781 fnd_msg_pub.add;
782 p_uso_clas_meet_rec.status := 'E';
783 END;
784
785 END LOOP;
786 END IF;
787 CLOSE cur_waitlist;
788
789 END validate_uso_clas_meet;
790
791 PROCEDURE update_usec_status(p_uoo_id IN igs_ps_unit_ofr_opt.uoo_id%TYPE,
792 p_unit_section_status IN igs_ps_unit_ofr_opt.unit_section_status%TYPE) IS
793 CURSOR cur_usec(cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
794 SELECT *
795 FROM igs_ps_unit_ofr_opt
796 WHERE uoo_id=cp_uoo_id;
797 l_cur_usec cur_usec%ROWTYPE;
798
799 BEGIN
800 OPEN cur_usec(p_uoo_id);
801 FETCH cur_usec INTO l_cur_usec;
802 CLOSE cur_usec;
803
804
805 igs_ps_unit_ofr_opt_pkg.update_row( x_rowid =>l_cur_usec.row_id,
806 x_unit_cd =>l_cur_usec.unit_cd,
807 x_version_number =>l_cur_usec.version_number,
808 x_cal_type =>l_cur_usec.cal_type,
809 x_ci_sequence_number =>l_cur_usec.ci_sequence_number,
810 x_location_cd =>l_cur_usec.location_cd,
811 x_unit_class =>l_cur_usec.unit_class,
812 x_uoo_id =>l_cur_usec.uoo_id,
813 x_ivrs_available_ind =>l_cur_usec.ivrs_available_ind,
814 x_call_number =>l_cur_usec.call_number,
815 x_unit_section_status =>p_unit_section_status,
816 x_unit_section_start_date =>l_cur_usec.unit_section_start_date,
817 x_unit_section_end_date =>l_cur_usec.unit_section_end_date,
818 x_enrollment_actual =>l_cur_usec.enrollment_actual,
819 x_waitlist_actual =>l_cur_usec.waitlist_actual,
820 x_offered_ind =>l_cur_usec.offered_ind,
821 x_state_financial_aid =>l_cur_usec.state_financial_aid,
822 x_grading_schema_prcdnce_ind =>l_cur_usec.grading_schema_prcdnce_ind,
823 x_federal_financial_aid =>l_cur_usec.federal_financial_aid,
824 x_unit_quota =>l_cur_usec.unit_quota,
825 x_unit_quota_reserved_places =>l_cur_usec.unit_quota_reserved_places,
826 x_institutional_financial_aid =>l_cur_usec.institutional_financial_aid,
827 x_grading_schema_cd =>l_cur_usec.grading_schema_cd,
828 x_gs_version_number =>l_cur_usec.gs_version_number,
829 x_unit_contact =>l_cur_usec.unit_contact,
830 x_mode =>'R',
831 x_ss_enrol_ind =>l_cur_usec.ss_enrol_ind,
832 x_owner_org_unit_cd => l_cur_usec.owner_org_unit_cd,
833 x_attendance_required_ind => l_cur_usec.attendance_required_ind,
834 x_reserved_seating_allowed => l_cur_usec.reserved_seating_allowed,
835 x_ss_display_ind => l_cur_usec.ss_display_ind,
836 x_special_permission_ind => l_cur_usec.special_permission_ind,
837 x_rev_account_cd => l_cur_usec.rev_account_cd ,
838 x_anon_unit_grading_ind => l_cur_usec.anon_unit_grading_ind,
839 x_anon_assess_grading_ind => l_cur_usec.anon_assess_grading_ind ,
840 x_non_std_usec_ind => l_cur_usec.non_std_usec_ind,
841 x_auditable_ind => l_cur_usec.auditable_ind,
842 x_audit_permission_ind => l_cur_usec.audit_permission_ind,
843 x_not_multiple_section_flag => l_cur_usec.not_multiple_section_flag,
844 x_sup_uoo_id => l_cur_usec.sup_uoo_id,
845 x_relation_type => l_cur_usec.relation_type,
846 x_default_enroll_flag => l_cur_usec.default_enroll_flag,
847 x_abort_flag => l_cur_usec.abort_flag
848 );
849 END update_usec_status;
850
851 FUNCTION post_usec_meet_with(p_tab_usec_meet_with IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_tbl_type,
852 p_class_meet_tab IN igs_ps_create_generic_pkg.class_meet_rec_tbl_type) RETURN BOOLEAN
853 AS
854 /***********************************************************************************************
855 Created By : sommukhe
856 Date Created By:
857 Purpose :
858 Known limitations,enhancements,remarks:
859 Change History (in reverse chronological order)
860 Who When What
861 ********************************************************************************************** */
862 CURSOR c_host(cp_class_meet_group_id NUMBER) IS
863 SELECT count (ROWID) cnt
864 FROM igs_ps_uso_clas_meet
865 WHERE host = 'Y'
866 AND class_meet_group_id =cp_class_meet_group_id;
867
868 c_host_rec c_host%ROWTYPE;
869
870 CURSOR c_cm_grp(cp_class_meet_group_id igs_ps_uso_clas_meet_v.class_meet_group_id%TYPE) IS
871 SELECT *
872 FROM igs_ps_uso_cm_grp
873 WHERE class_meet_group_id = cp_class_meet_group_id;
874
875 c_cm_grp_rec c_cm_grp%ROWTYPE;
876
877
878 CURSOR c_sum_enract(cp_class_meet_group_id igs_ps_uso_clas_meet_v.class_meet_group_id%TYPE) IS
879 SELECT SUM(enrollment_actual) sum_enrollment_actual
880 FROM igs_ps_uso_clas_meet_v
881 WHERE class_meet_group_id = cp_class_meet_group_id ;
882
883 c_sum_enract_rec c_sum_enract%ROWTYPE;
884
885 CURSOR c_usec_enr(cp_class_meet_group_id igs_ps_uso_clas_meet_v.class_meet_group_id%TYPE) IS
886 SELECT *
887 FROM igs_ps_uso_clas_meet_v
888 WHERE class_meet_group_id = cp_class_meet_group_id ;
889
890 c_usec_enr_rec c_usec_enr%ROWTYPE;
891
892 CURSOR cur_usec (cp_class_meet_group_id igs_ps_uso_clas_meet.class_meet_group_id%TYPE,
893 cp_usec_status igs_ps_unit_ofr_opt.unit_section_status%TYPE ) IS
894 SELECT uoo.uoo_id
895 FROM igs_ps_uso_clas_meet usm,
896 igs_ps_unit_ofr_opt uoo
897 WHERE usm.class_meet_group_id = cp_class_meet_group_id
898 AND usm.uoo_id=uoo.uoo_id
899 AND uoo.unit_section_status NOT IN (cp_usec_status,'PLANNED','CANCELLED','NOT_OFFERED');
900
901 CURSOR cur_group_id (cp_group_name VARCHAR2, cp_alternate_cd VARCHAR2) IS
902 SELECT a.class_meet_group_id
903 FROM igs_ps_uso_cm_grp a, igs_ca_inst_all b
904 WHERE a.class_meet_group_name = cp_group_name
905 AND a.cal_type = b.cal_type
906 AND a.ci_sequence_number =b.sequence_number
907 AND b.alternate_code=cp_alternate_cd;
908 l_cur_group_id NUMBER;
909
910
911 l_new_sum NUMBER;
912 l_execute_next_logic BOOLEAN;
913 l_n_count_msg NUMBER;
914 max_enr_group_temp igs_ps_uso_cm_grp.max_enr_group%TYPE;
915 max_ovr_group_temp igs_ps_uso_cm_grp.max_ovr_group%TYPE;
916 l_b_status BOOLEAN;
917 l_b_error BOOLEAN;
918 BEGIN
919
920 l_b_status := TRUE;
921 FOR i IN 1 ..p_class_meet_tab.LAST LOOP
922 l_b_error := FALSE;
923 OPEN c_host (p_class_meet_tab(i).class_meet_group_id);
924 FETCH c_host INTO c_host_rec;
925 CLOSE c_host;
926 IF NVL(c_host_rec.cnt,0) = 0 THEN
927 l_b_status := FALSE;
928 l_b_error := TRUE;
929 fnd_message.set_name ( 'IGS', 'IGS_PS_CM_NO_HOST' );
930 fnd_message.set_token('GROUP_NAME',p_class_meet_tab(i).class_meet_group_name);
931 fnd_msg_pub.add;
932 l_n_count_msg := fnd_msg_pub.count_msg;
933 ELSIF NVL(c_host_rec.cnt,0) > 1 THEN
934 l_b_status := FALSE;
935 l_b_error := TRUE;
936 fnd_message.set_name ( 'IGS', 'IGS_PS_CM_ONLY_ONE_HOST' );
937 fnd_msg_pub.add;
938 l_n_count_msg := fnd_msg_pub.count_msg;
939 END IF;
940 IF l_b_error THEN
941 FOR j in 1..p_tab_usec_meet_with.LAST LOOP
942 IF p_tab_usec_meet_with.EXISTS(j) THEN
943 OPEN cur_group_id(p_tab_usec_meet_with(j).class_meet_group_name,p_tab_usec_meet_with(j).teach_cal_alternate_code);
944 FETCH cur_group_id INTO l_cur_group_id;
945 CLOSE cur_group_id;
946 IF p_tab_usec_meet_with(j).status = 'S' AND l_cur_group_id = p_class_meet_tab(i).class_meet_group_id THEN
947 p_tab_usec_meet_with(j).status := 'E';
948 p_tab_usec_meet_with(j).msg_from := l_n_count_msg;
949 p_tab_usec_meet_with(j).msg_to := l_n_count_msg;
950 END IF;
951 END IF;
952 END LOOP;
953 END IF;
954
955 -- Group Override Maximum should always be greater than or equal to
956 -- Actual Enrollment for the group
957 OPEN c_sum_enract(p_class_meet_tab(i).class_meet_group_id);
958 FETCH c_sum_enract INTO c_sum_enract_rec;
959 CLOSE c_sum_enract;
960
961 OPEN c_cm_grp(p_class_meet_tab(i).class_meet_group_id);
962 FETCH c_cm_grp INTO c_cm_grp_rec;
963 CLOSE c_cm_grp;
964
965 IF ((c_cm_grp_rec.max_ovr_group IS NOT NULL) AND (NVL(c_cm_grp_rec.max_ovr_group,0) < NVL(c_sum_enract_rec.sum_enrollment_actual,0))) THEN
966 l_b_status := FALSE;
967 fnd_message.set_name('IGS','IGS_PS_MAX_OVR_MAX');
968 fnd_msg_pub.add;
969 l_n_count_msg := fnd_msg_pub.count_msg;
970 FOR j in 1..p_tab_usec_meet_with.LAST LOOP
971 IF p_tab_usec_meet_with.EXISTS(j) THEN
972 OPEN cur_group_id(p_tab_usec_meet_with(j).class_meet_group_name,p_tab_usec_meet_with(j).teach_cal_alternate_code);
973 FETCH cur_group_id INTO l_cur_group_id;
974 CLOSE cur_group_id;
975 IF p_tab_usec_meet_with(j).status = 'S' AND l_cur_group_id = p_class_meet_tab(i).class_meet_group_id THEN
976 p_tab_usec_meet_with(j).status := 'E';
977 p_tab_usec_meet_with(j).msg_from := l_n_count_msg;
978 p_tab_usec_meet_with(j).msg_to := l_n_count_msg;
979 END IF;
980 END IF;
981 END LOOP;
982 END IF;
983
984 IF l_b_status THEN
985 OPEN c_cm_grp(p_class_meet_tab(i).class_meet_group_id);
986 FETCH c_cm_grp INTO c_cm_grp_rec;
987 CLOSE c_cm_grp;
988
989 OPEN c_usec_enr(p_class_meet_tab(i).class_meet_group_id);
990 FETCH c_usec_enr INTO c_usec_enr_rec;
991 CLOSE c_usec_enr;
992
993 OPEN c_sum_enract(p_class_meet_tab(i).class_meet_group_id);
994 FETCH c_sum_enract INTO l_new_sum;
995 CLOSE c_sum_enract;
996
997 l_execute_next_logic:= TRUE;
998
999 IF c_cm_grp_rec.max_ovr_group IS NOT NULL OR c_cm_grp_rec.max_enr_group IS NOT NULL THEN--1o
1000 IF NVL(c_usec_enr_rec.enrollment_actual,0) >= 1 THEN--2o
1001 l_execute_next_logic:= FALSE;
1002 IF NVL(c_cm_grp_rec.max_enr_group,0) < NVL(l_new_sum,0) THEN--3o
1003 max_enr_group_temp:=l_new_sum;
1004 max_ovr_group_temp:=c_cm_grp_rec.max_ovr_group;
1005
1006 IF NVL(c_cm_grp_rec.max_ovr_group,0) < NVL(l_new_sum,0) THEN
1007 max_ovr_group_temp:=l_new_sum;
1008 END IF;
1009
1010 --Update the maximum enrollment/ovrride group
1011 UPDATE igs_ps_uso_cm_grp
1012 SET max_enr_group=max_enr_group_temp,
1013 max_ovr_group=max_ovr_group_temp,
1014 last_updated_by = g_n_user_id,
1015 last_update_date = SYSDATE,
1016 last_update_login = g_n_login_id
1017 WHERE class_meet_group_id =p_class_meet_tab(i).class_meet_group_id;
1018
1019 --Make all the unit section status to closed if open in that group
1020 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'CLOSED') LOOP
1021 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1022 END LOOP;
1023
1024 ELSIF NVL(c_cm_grp_rec.max_enr_group,0) > NVL(l_new_sum,0) THEN
1025 --Make this unit section status open if closed
1026 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'OPEN') LOOP
1027 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1028 END LOOP;
1029
1030 ELSE
1031 --Make all the unit section status to closed if open in that group
1032 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'CLOSED') LOOP
1033 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1034 END LOOP;
1035
1036 END IF;--3c
1037
1038 ELSE
1039 --If the inserted/modified unit section is not an enrolled one then also change the status
1040 --accordingly, bug#2702252
1041 IF NVL(c_cm_grp_rec.max_enr_group,0) < NVL(l_new_sum,0) THEN--4o
1042 --Make all the unit section status to closed if open in that group
1043 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'CLOSED') LOOP
1044 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1045 END LOOP;
1046
1047 ELSIF NVL(c_cm_grp_rec.max_enr_group,0) > NVL(l_new_sum,0) THEN
1048 --Make this unit section status open if closed
1049 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'OPEN') LOOP
1050 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1051 END LOOP;
1052
1053 ELSIF c_cm_grp_rec.max_enr_group IS NULL AND l_new_sum IS NULL THEN
1054 --Make all the unit section status to open if closed in that group
1055 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'OPEN') LOOP
1056 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1057 END LOOP;
1058
1059 ELSE
1060 --Make all the unit section status to closed if open in that group
1061 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'CLOSED') LOOP
1062 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1063 END LOOP;
1064
1065 END IF;--4c
1066 END IF; --2c
1067 END IF;--1c
1068
1069 IF l_execute_next_logic = TRUE THEN
1070 IF NVL(p_class_meet_tab(i).old_max_enr_group ,0) <> NVL(c_cm_grp_rec.max_enr_group,0) THEN
1071 IF p_class_meet_tab(i).old_max_enr_group = l_new_sum THEN
1072 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'OPEN') LOOP
1073 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1074 END LOOP;
1075
1076 ELSIF l_new_sum = c_cm_grp_rec.max_enr_group THEN
1077 FOR l_cur_usec IN cur_usec(p_class_meet_tab(i).class_meet_group_id,'CLOSED') LOOP
1078 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1079 END LOOP;
1080 END IF;
1081 END IF;
1082 END IF;
1083
1084 END IF; --l_b_status
1085
1086 END LOOP;
1087
1088 RETURN l_b_status;
1089
1090 END post_usec_meet_with;
1091
1092
1093 PROCEDURE validate_uso_cm_grp ( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type,
1094 p_c_cal_type VARCHAR2,
1095 p_n_seq_num NUMBER,
1096 p_insert_update VARCHAR2,
1097 p_class_meet_rec IN OUT NOCOPY igs_ps_create_generic_pkg.class_meet_rec_type )
1098 AS
1099 /***********************************************************************************************
1100 Created By : sommukhe
1101 Date Created By: 18-Jun-2005
1102 Purpose :
1103
1104 Known limitations,enhancements,remarks:
1105 Change History (in reverse chronological order)
1106 Who When What
1107 ********************************************************************************************** */
1108 CURSOR c_uso_cm_grp(cp_cmg_name VARCHAR2) IS
1109 SELECT 'X' FROM igs_ps_uso_cm_grp
1110 WHERE class_meet_group_name =cp_cmg_name;
1111
1112 c_uso_cm_grp_rec c_uso_cm_grp%ROWTYPE;
1113
1114 CURSOR c_val_enr(cp_cmg_name VARCHAR2,cp_cal_type VARCHAR2,cp_sequence_number NUMBER) IS
1115 SELECT *
1116 FROM igs_ps_uso_cm_grp
1117 WHERE class_meet_group_name =cp_cmg_name
1118 AND Cal_type=cp_cal_type
1119 AND ci_sequence_number=cp_sequence_number;
1120
1121 c_val_enr_rec c_val_enr%ROWTYPE;
1122
1123 CURSOR c_old_cmgrp(cp_cmg_name VARCHAR2,cp_cal_type VARCHAR2,cp_seq_no NUMBER) IS
1124 SELECT * FROM igs_ps_uso_cm_grp
1125 WHERE class_meet_group_name =cp_cmg_name
1126 AND cal_type=cp_cal_type
1127 AND ci_sequence_number=cp_seq_no;
1128
1129 c_old_cmgrp_rec c_old_cmgrp%ROWTYPE;
1130
1131 CURSOR cur_usec (cp_class_meet_group_id igs_ps_uso_clas_meet.class_meet_group_id%TYPE,
1132 cp_usec_status igs_ps_unit_ofr_opt.unit_section_status%TYPE ) IS
1133 SELECT uoo.uoo_id
1134 FROM igs_ps_uso_clas_meet usm,
1135 igs_ps_unit_ofr_opt uoo
1136 WHERE usm.class_meet_group_id = cp_class_meet_group_id
1137 AND usm.uoo_id=uoo.uoo_id
1138 AND uoo.unit_section_status NOT IN (cp_usec_status,'PLANNED','CANCELLED','NOT_OFFERED');
1139
1140 CURSOR cur_usecs_in_group(cp_class_meet_group_id igs_ps_uso_clas_meet.class_meet_group_id%TYPE) IS
1141 SELECT uoo_id
1142 FROM igs_ps_uso_clas_meet
1143 WHERE class_meet_group_id = cp_class_meet_group_id;
1144
1145 l_message_name fnd_new_messages.message_name%TYPE;
1146 l_request_id igs_ps_sch_hdr_int.request_id%TYPE;
1147
1148 BEGIN
1149
1150 --Cannot enter a value for Override Maximum when Enrollment Maximum is null
1151 IF ((p_uso_cm_grp_rec.max_ovr_group IS NOT NULL) AND (p_uso_cm_grp_rec.max_enr_group IS NULL)) THEN
1152 fnd_message.set_name ( 'IGS', 'IGS_PS_ENR_NULL_OVR_NOT' );
1153 fnd_msg_pub.add;
1154 p_uso_cm_grp_rec.status := 'E';
1155 END IF;
1156
1157 --Group Override Maximum should always be greater than or equal toMaximum Enrollment for the group
1158 IF ((p_uso_cm_grp_rec.max_ovr_group IS NOT NULL) AND (NVL(p_uso_cm_grp_rec.max_ovr_group,0) < NVL(p_uso_cm_grp_rec.max_enr_group,0))) THEN
1159 fnd_message.set_name ( 'IGS', 'IGS_PS_OVERIDE_MIN_MAX_CP' );
1160 fnd_msg_pub.add;
1161 p_uso_cm_grp_rec.status := 'E';
1162 END IF;
1163
1164
1165 p_class_meet_rec.class_meet_group_name:=p_uso_cm_grp_rec.class_meet_group_name;
1166
1167 OPEN c_old_cmgrp(p_uso_cm_grp_rec.class_meet_group_name,p_c_cal_type,p_n_seq_num);
1168 FETCH c_old_cmgrp INTO c_old_cmgrp_rec;
1169 IF c_old_cmgrp%FOUND THEN
1170 p_class_meet_rec.class_meet_group_id:=c_old_cmgrp_rec.class_meet_group_id;
1171 p_class_meet_rec.old_max_enr_group:=c_old_cmgrp_rec.max_enr_group;
1172 ELSE
1173 p_class_meet_rec.class_meet_group_id:=NULL;
1174 p_class_meet_rec.old_max_enr_group:=NULL;
1175 END IF;
1176 CLOSE c_old_cmgrp;
1177
1178
1179 -- IF the group enrollment is getting modified
1180 OPEN c_val_enr(p_uso_cm_grp_rec.class_meet_group_name,p_c_cal_type,p_n_seq_num);
1181 FETCH c_val_enr INTO c_val_enr_rec;
1182
1183 IF c_val_enr%FOUND THEN
1184 IF NVL( p_uso_cm_grp_rec.max_enr_group,0) <> c_val_enr_rec.max_enr_group OR
1185 NVL(p_uso_cm_grp_rec.max_ovr_group,0) <> c_val_enr_rec.max_ovr_group THEN
1186
1187 --for loop which loops thru all unit sections within a group.
1188 FOR rec_cur_usecs_in_group IN cur_usecs_in_group(c_val_enr_rec.class_meet_group_id) LOOP
1189 --Before updating check for validity of schedule status...
1190 IF igs_ps_usec_schedule.prgp_get_schd_status(p_uoo_id => rec_cur_usecs_in_group.uoo_id,
1191 p_usec_id => NULL,
1192 p_message_name => l_message_name ) = TRUE THEN
1193 IF l_message_name IS NULL THEN
1194 l_message_name := 'IGS_PS_SCST_PROC';
1195 END IF;
1196
1197 fnd_message.set_name('IGS',l_message_name);
1198 fnd_msg_pub.add;
1199 p_uso_cm_grp_rec.status := 'E';
1200 --update the schedule status to 'Rescheduling Requested', if unit section occurrence is a scheduled one.
1201 ELSIF igs_ps_usec_schedule.prgp_upd_usec_dtls
1202 (
1203 p_uoo_id => rec_cur_usecs_in_group.uoo_id,
1204 p_location_cd => NULL,
1205 p_usec_status => NULL,
1206 p_max_enrollments => NVL(p_uso_cm_grp_rec.max_enr_group,-999),
1207 p_override_enrollment_max => NVL(p_uso_cm_grp_rec.max_ovr_group,-999),
1208 p_enrollment_expected => NULL,
1209 p_request_id => l_request_id,
1210 p_message_name => l_message_name
1211 ) = FALSE THEN
1212 fnd_message.set_name('IGS',l_message_name);
1213 fnd_msg_pub.add;
1214 p_uso_cm_grp_rec.status := 'E';
1215 END IF;
1216 END LOOP;
1217 END IF;
1218 END IF;
1219 CLOSE c_val_enr;
1220
1221 END validate_uso_cm_grp;
1222
1223
1224 --Validations of crosslisted unit sections
1225 PROCEDURE validate_usec_x_grpmem ( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type,
1226 p_n_uoo_id NUMBER,
1227 p_n_usec_x_listed_group_id NUMBER,
1228 p_c_cal_type VARCHAR2,
1229 p_n_seq_num NUMBER)
1230 AS
1231 /***********************************************************************************************
1232 Created By : sommukhe
1233 Date Created By:
1234 Purpose :
1235
1236 Known limitations,enhancements,remarks:
1237 Change History (in reverse chronological order)
1238 Who When What
1239 ********************************************************************************************** */
1240
1241 CURSOR cur_usec IS
1242 SELECT 'X'
1243 FROM igs_ps_unit_ofr_opt_all uoo
1244 WHERE uoo.unit_section_status IN ('OPEN','PLANNED','FULLWAITOK','CLOSED')
1245 AND uoo.relation_type='NONE'
1246 AND uoo.cal_type=p_c_cal_type
1247 AND uoo.ci_sequence_number =p_n_seq_num
1248 AND uoo.uoo_id=p_n_uoo_id;
1249
1250 cur_usec_rec cur_usec%ROWTYPE;
1251
1252 CURSOR c_uso_cm(cp_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
1253 SELECT 'X'
1254 FROM igs_ps_uso_clas_meet
1255 WHERE uoo_id=cp_uoo_id;
1256
1257 c_uso_cm_rec c_uso_cm%ROWTYPE;
1258
1259 CURSOR cur_std_attempt(cp_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
1260 SELECT *
1261 FROM igs_en_su_attempt
1262 WHERE uoo_id=cp_uoo_id
1263 AND unit_attempt_status='WAITLISTED';
1264
1265 CURSOR cur_waitlist(cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
1266 SELECT waitlist_actual
1267 FROM igs_ps_unit_ofr_opt
1268 WHERE uoo_id=cp_uoo_id;
1269 l_cur_waitlist cur_waitlist%ROWTYPE;
1270
1271 l_sysdate DATE := trunc(SYSDATE);
1272
1273 BEGIN
1274
1275 --Check if the unit section is NOT_OFFERED
1276 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
1277 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
1278 fnd_msg_pub.add;
1279 p_usec_x_grpmem.status := 'E';
1280 END IF;
1281
1282
1283 --Validation on selection of
1284 OPEN cur_usec;
1285 FETCH cur_usec INTO cur_usec_rec;
1286 IF cur_usec%NOTFOUND THEN
1287 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1288 p_usec_x_grpmem.status := 'E';
1289 END IF;
1290 CLOSE cur_usec;
1291
1292 --This unit section should not be present in any Unit section meet with class group
1293 OPEN c_uso_cm(p_n_uoo_id);
1294 FETCH c_uso_cm INTO c_uso_cm_rec;
1295 IF c_uso_cm%FOUND THEN
1296 fnd_message.set_name('IGS','IGS_PS_UNT_SEC_DEFINED_GRP');
1297 fnd_msg_pub.add;
1298 p_usec_x_grpmem.status := 'E';
1299 END IF;
1300 CLOSE c_uso_cm;
1301
1302 OPEN cur_waitlist(p_n_uoo_id);
1303 FETCH cur_waitlist INTO l_cur_waitlist;
1304 IF l_cur_waitlist.waitlist_actual >= 1 THEN
1305 FOR l_c_fetch_record_cur IN cur_std_attempt(p_n_uoo_id) LOOP
1306
1307 DECLARE
1308 FUNCTION get_msg_from_stack(l_n_msg_count NUMBER) RETURN VARCHAR2 AS
1309 l_c_msg VARCHAR2(3000);
1310 l_c_msg_name fnd_new_messages.message_name%TYPE;
1311 l_appl_name VARCHAR2(30);
1312 BEGIN
1313 l_c_msg := FND_MSG_PUB.GET(p_msg_index => l_n_msg_count, p_encoded => 'T');
1314 FND_MESSAGE.SET_ENCODED (l_c_msg);
1315 FND_MESSAGE.PARSE_ENCODED(FND_MESSAGE.GET_ENCODED,l_appl_name, l_c_msg_name);
1316 RETURN l_c_msg_name;
1317 END get_msg_from_stack;
1318 BEGIN
1319
1320 IGS_EN_SUA_API.UPDATE_UNIT_ATTEMPT(
1321 X_ROWID => l_c_fetch_record_cur.row_id,
1322 x_waitlist_manual_ind => l_c_fetch_record_cur.waitlist_manual_ind,
1323 X_PERSON_ID => l_c_fetch_record_cur.person_id,
1324 X_COURSE_CD => l_c_fetch_record_cur.course_cd,
1325 X_UNIT_CD => l_c_fetch_record_cur.unit_cd,
1326 X_CAL_TYPE => l_c_fetch_record_cur.cal_type,
1327 X_CI_SEQUENCE_NUMBER => l_c_fetch_record_cur.ci_sequence_number,
1328 X_VERSION_NUMBER => l_c_fetch_record_cur.version_number,
1329 X_LOCATION_CD => l_c_fetch_record_cur.location_cd,
1330 X_UNIT_CLASS => l_c_fetch_record_cur.unit_class,
1331 X_CI_START_DT => l_c_fetch_record_cur.ci_start_dt,
1332 X_CI_END_DT => l_c_fetch_record_cur.ci_end_dt,
1333 X_UOO_ID => l_c_fetch_record_cur.uoo_id,
1334 X_ENROLLED_DT => l_c_fetch_record_cur.enrolled_dt,
1335 X_UNIT_ATTEMPT_STATUS => 'DROPPED',
1336 X_ADMINISTRATIVE_UNIT_STATUS => l_c_fetch_record_cur.administrative_unit_status,
1337 X_DISCONTINUED_DT => nvl(l_c_fetch_record_cur.discontinued_dt, l_sysdate),
1338 X_RULE_WAIVED_DT => l_c_fetch_record_cur.rule_waived_dt,
1339 X_RULE_WAIVED_PERSON_ID => l_c_fetch_record_cur.rule_waived_person_id,
1340 X_NO_ASSESSMENT_IND => l_c_fetch_record_cur.no_assessment_ind,
1341 X_SUP_UNIT_CD => l_c_fetch_record_cur.sup_unit_cd,
1342 X_SUP_VERSION_NUMBER => l_c_fetch_record_cur.sup_version_number,
1343 X_EXAM_LOCATION_CD => l_c_fetch_record_cur.exam_location_cd,
1344 X_ALTERNATIVE_TITLE => l_c_fetch_record_cur.alternative_title,
1345 X_OVERRIDE_ENROLLED_CP => l_c_fetch_record_cur.override_enrolled_cp,
1346 X_OVERRIDE_EFTSU => l_c_fetch_record_cur.override_eftsu,
1347 X_OVERRIDE_ACHIEVABLE_CP => l_c_fetch_record_cur.override_achievable_cp,
1348 X_OVERRIDE_OUTCOME_DUE_DT => l_c_fetch_record_cur.override_outcome_due_dt,
1349 X_OVERRIDE_CREDIT_REASON => l_c_fetch_record_cur.override_credit_reason,
1350 X_ADMINISTRATIVE_PRIORITY => l_c_fetch_record_cur.administrative_priority,
1351 X_WAITLIST_DT => l_c_fetch_record_cur.waitlist_dt,
1352 X_DCNT_REASON_CD => l_c_fetch_record_cur.dcnt_reason_cd,
1353 X_MODE => 'R',
1354 X_GS_VERSION_NUMBER => l_c_fetch_record_cur.gs_version_number,
1355 X_ENR_METHOD_TYPE => l_c_fetch_record_cur.enr_method_type,
1356 X_FAILED_UNIT_RULE => l_c_fetch_record_cur.failed_unit_rule,
1357 X_CART => l_c_fetch_record_cur.cart,
1358 X_RSV_SEAT_EXT_ID => l_c_fetch_record_cur.rsv_seat_ext_id ,
1359 X_ORG_UNIT_CD => l_c_fetch_record_cur.org_unit_cd,
1360 X_SESSION_ID => l_c_fetch_record_cur.session_id,
1361 X_GRADING_SCHEMA_CODE => l_c_fetch_record_cur.grading_schema_code,
1362 X_DEG_AUD_DETAIL_ID => l_c_fetch_record_cur.deg_aud_detail_id,
1363 X_SUBTITLE => l_c_fetch_record_cur.subtitle,
1364 X_STUDENT_CAREER_TRANSCRIPT => l_c_fetch_record_cur.student_career_transcript,
1365 X_STUDENT_CAREER_STATISTICS => l_c_fetch_record_cur.student_career_statistics,
1366 X_ATTRIBUTE_CATEGORY => l_c_fetch_record_cur.attribute_category,
1367 X_ATTRIBUTE1 => l_c_fetch_record_cur.attribute1,
1368 X_ATTRIBUTE2 => l_c_fetch_record_cur.attribute2,
1369 X_ATTRIBUTE3 => l_c_fetch_record_cur.attribute3,
1370 X_ATTRIBUTE4 => l_c_fetch_record_cur.attribute4,
1371 X_ATTRIBUTE5 => l_c_fetch_record_cur.attribute5,
1372 X_ATTRIBUTE6 => l_c_fetch_record_cur.attribute6,
1373 X_ATTRIBUTE7 => l_c_fetch_record_cur.attribute7,
1374 X_ATTRIBUTE8 => l_c_fetch_record_cur.attribute8,
1375 X_ATTRIBUTE9 => l_c_fetch_record_cur.attribute9,
1376 X_ATTRIBUTE10 => l_c_fetch_record_cur.attribute10,
1377 X_ATTRIBUTE11 => l_c_fetch_record_cur.attribute11,
1378 X_ATTRIBUTE12 => l_c_fetch_record_cur.attribute12,
1379 X_ATTRIBUTE13 => l_c_fetch_record_cur.attribute13,
1380 X_ATTRIBUTE14 => l_c_fetch_record_cur.attribute14,
1381 X_ATTRIBUTE15 => l_c_fetch_record_cur.attribute15,
1382 X_ATTRIBUTE16 => l_c_fetch_record_cur.attribute16,
1383 X_ATTRIBUTE17 => l_c_fetch_record_cur.attribute17,
1384 X_ATTRIBUTE18 => l_c_fetch_record_cur.attribute18,
1385 X_ATTRIBUTE19 => l_c_fetch_record_cur.attribute19,
1386 X_ATTRIBUTE20 => l_c_fetch_record_cur.attribute20,
1387 X_WLST_PRIORITY_WEIGHT_NUM => l_c_fetch_record_cur.wlst_priority_weight_num,
1388 X_WLST_PREFERENCE_WEIGHT_NUM => l_c_fetch_record_cur.wlst_preference_weight_num,
1389 X_CORE_INDICATOR_CODE => l_c_fetch_record_cur.core_indicator_code
1390 ) ;
1391 EXCEPTION
1392 WHEN OTHERS THEN
1393 fnd_message.set_name('IGS', get_msg_from_stack(1));
1394 fnd_msg_pub.add;
1395 p_usec_x_grpmem.status := 'E';
1396 END;
1397
1398 END LOOP;
1399
1400 END IF;
1401 CLOSE cur_waitlist;
1402
1403 END validate_usec_x_grpmem;
1404
1405
1406 FUNCTION post_usec_cross_group(p_tab_usec_cross_group IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_tbl_type,
1407 p_cross_group_tab IN igs_ps_create_generic_pkg.cross_group_rec_tbl_type) RETURN BOOLEAN
1408 AS
1409 /***********************************************************************************************
1410 Created By : sommukhe
1411 Date Created By:
1412 Purpose :
1413 Known limitations,enhancements,remarks:
1414 Change History (in reverse chronological order)
1415 Who When What
1416 ********************************************************************************************** */
1417 CURSOR c_parent(cp_usec_x_listed_group_id NUMBER) IS
1418 SELECT count (ROWID) cnt
1419 FROM igs_ps_usec_x_grpmem
1420 WHERE parent = 'Y'
1421 AND usec_x_listed_group_id =cp_usec_x_listed_group_id;
1422
1423 c_parent_rec c_parent%ROWTYPE;
1424
1425 CURSOR c_x_grp(cp_usec_x_listed_group_id igs_ps_usec_x_grpmem.usec_x_listed_group_id%TYPE) IS
1426 SELECT *
1427 FROM igs_ps_usec_x_grp
1428 WHERE usec_x_listed_group_id = cp_usec_x_listed_group_id;
1429
1430 c_x_grp_rec c_x_grp%ROWTYPE;
1431
1432
1433 CURSOR c_sum_enract(cp_usec_x_listed_group_id igs_ps_usec_x_grpmem.usec_x_listed_group_id%TYPE) IS
1434 SELECT SUM(enrollment_actual) sum_enrollment_actual
1435 FROM igs_ps_usec_x_grpmem_v
1436 WHERE usec_x_listed_group_id = cp_usec_x_listed_group_id;
1437
1438
1439 c_sum_enract_rec c_sum_enract%ROWTYPE;
1440
1441 CURSOR c_usec_enr(cp_usec_x_listed_group_id igs_ps_usec_x_grpmem.usec_x_listed_group_id%TYPE) IS
1442 SELECT *
1443 FROM igs_ps_usec_x_grpmem_v
1444 WHERE usec_x_listed_group_id = cp_usec_x_listed_group_id ;
1445
1446 c_usec_enr_rec c_usec_enr%ROWTYPE;
1447
1448 CURSOR cur_usec (cp_usec_x_listed_group_id igs_ps_usec_x_grpmem.usec_x_listed_group_id%TYPE,
1449 cp_usec_status igs_ps_unit_ofr_opt.unit_section_status%TYPE
1450 ) IS
1451 SELECT uoo.uoo_id
1452 FROM igs_ps_usec_x_grpmem usm,
1453 igs_ps_unit_ofr_opt uoo
1454 WHERE usm.usec_x_listed_group_id = cp_usec_x_listed_group_id
1455 AND usm.uoo_id=uoo.uoo_id
1456 AND uoo.unit_section_status NOT IN (cp_usec_status,'PLANNED','CANCELLED','NOT_OFFERED');
1457
1458 CURSOR cur_group_id (cp_group_name VARCHAR2, cp_alternate_cd VARCHAR2) IS
1459 SELECT a.usec_x_listed_group_id
1460 FROM igs_ps_usec_x_grp a, igs_ca_inst_all b
1461 WHERE a.usec_x_listed_group_name = cp_group_name
1462 AND a.cal_type = b.cal_type
1463 AND a.ci_sequence_number =b.sequence_number
1464 AND b.alternate_code=cp_alternate_cd;
1465 l_cur_group_id NUMBER;
1466
1467 l_new_sum NUMBER;
1468 l_execute_next_logic BOOLEAN;
1469 l_n_count_msg NUMBER;
1470 max_enr_group_temp NUMBER;
1471 max_ovr_group_temp NUMBER;
1472 l_b_status BOOLEAN;
1473 l_b_error BOOLEAN;
1474 BEGIN
1475 l_b_status := TRUE;
1476 FOR i IN 1 ..p_cross_group_tab.LAST LOOP
1477 l_b_error := FALSE;
1478 OPEN c_parent (p_cross_group_tab(i).usec_x_listed_group_id);
1479 FETCH c_parent INTO c_parent_rec;
1480 CLOSE c_parent;
1481 IF NVL(c_parent_rec.cnt,0) = 0 THEN
1482 l_b_status := FALSE;
1483 l_b_error := TRUE;
1484 fnd_message.set_name ( 'IGS', 'IGS_PS_USXL_NO_PARENT' );
1485 fnd_message.set_token ( 'GROUP_NAME',p_cross_group_tab(i).usec_x_listed_group_name );
1486 fnd_msg_pub.add;
1487 l_n_count_msg := fnd_msg_pub.count_msg;
1488 ELSIF NVL(c_parent_rec.cnt,0) > 1 THEN
1489 l_b_status := FALSE;
1490 l_b_error := TRUE;
1491 fnd_message.set_name ( 'IGS', 'IGS_PS_UXL_ONLY_ONE_PARENT' );
1492 fnd_msg_pub.add;
1493 l_n_count_msg := fnd_msg_pub.count_msg;
1494 END IF;
1495 IF l_b_error THEN
1496 FOR j in 1..p_tab_usec_cross_group.LAST LOOP
1497 IF p_tab_usec_cross_group.EXISTS(j) THEN
1498 OPEN cur_group_id(p_tab_usec_cross_group(j).usec_x_listed_group_name,p_tab_usec_cross_group(j).teach_cal_alternate_code);
1499 FETCH cur_group_id INTO l_cur_group_id;
1500 CLOSE cur_group_id;
1501 IF p_tab_usec_cross_group(j).status = 'S' AND l_cur_group_id = p_cross_group_tab(i).usec_x_listed_group_id THEN
1502 p_tab_usec_cross_group(j).status := 'E';
1503 p_tab_usec_cross_group(j).msg_from := l_n_count_msg;
1504 p_tab_usec_cross_group(j).msg_to := l_n_count_msg;
1505 END IF;
1506 END IF;
1507 END LOOP;
1508 END IF;
1509
1510
1511 -- Group Override Maximum should always be greater than or equal to
1512 -- Actual Enrollment for the group
1513 OPEN c_sum_enract(p_cross_group_tab(i).usec_x_listed_group_id);
1514 FETCH c_sum_enract INTO c_sum_enract_rec;
1515 CLOSE c_sum_enract;
1516
1517 OPEN c_x_grp(p_cross_group_tab(i).usec_x_listed_group_id);
1518 FETCH c_x_grp INTO c_x_grp_rec;
1519 CLOSE c_x_grp;
1520
1521 IF ((c_x_grp_rec.max_ovr_group IS NOT NULL) AND (NVL(c_x_grp_rec.max_ovr_group,0) < NVL(c_sum_enract_rec.sum_enrollment_actual,0))) THEN
1522 l_b_status := FALSE;
1523 fnd_message.set_name('IGS','IGS_PS_MAX_OVR_MAX');
1524 fnd_msg_pub.add;
1525 l_n_count_msg := fnd_msg_pub.count_msg;
1526 FOR j in 1..p_tab_usec_cross_group.LAST LOOP
1527 IF p_tab_usec_cross_group.EXISTS(j) THEN
1528 OPEN cur_group_id(p_tab_usec_cross_group(j).usec_x_listed_group_name,p_tab_usec_cross_group(j).teach_cal_alternate_code);
1529 FETCH cur_group_id INTO l_cur_group_id;
1530 CLOSE cur_group_id;
1531 IF p_tab_usec_cross_group(j).status = 'S' AND l_cur_group_id =p_cross_group_tab(i).usec_x_listed_group_id THEN
1532 p_tab_usec_cross_group(j).status := 'E';
1533 p_tab_usec_cross_group(j).msg_from := l_n_count_msg;
1534 p_tab_usec_cross_group(j).msg_to := l_n_count_msg;
1535 END IF;
1536 END IF;
1537 END LOOP;
1538 END IF;
1539
1540 IF l_b_status THEN
1541
1542 OPEN c_x_grp(p_cross_group_tab(i).usec_x_listed_group_id);
1543 FETCH c_x_grp INTO c_x_grp_rec;
1544 CLOSE c_x_grp;
1545
1546 OPEN c_usec_enr(p_cross_group_tab(i).usec_x_listed_group_id);
1547 FETCH c_usec_enr INTO c_usec_enr_rec;
1548 CLOSE c_usec_enr;
1549
1550 OPEN c_sum_enract(p_cross_group_tab(i).usec_x_listed_group_id);
1551 FETCH c_sum_enract INTO l_new_sum;
1552 CLOSE c_sum_enract;
1553
1554 l_execute_next_logic:= TRUE;
1555
1556 IF c_x_grp_rec.max_ovr_group IS NOT NULL OR c_x_grp_rec.max_enr_group IS NOT NULL THEN--1o
1557
1558 IF NVL(c_usec_enr_rec.enrollment_actual,0) >= 1 THEN--2o
1559 l_execute_next_logic:= FALSE;
1560
1561 IF NVL(c_x_grp_rec.max_enr_group,0) < NVL(l_new_sum,0) THEN--3o
1562 max_enr_group_temp:=l_new_sum;
1563 max_ovr_group_temp:=c_x_grp_rec.max_ovr_group;
1564
1565 IF NVL(c_x_grp_rec.max_ovr_group,0) < NVL(l_new_sum,0) THEN
1566 max_ovr_group_temp:=l_new_sum;
1567 END IF;
1568
1569 --Update the maximum enrollment/ovrride group
1570 UPDATE igs_ps_usec_x_grp
1571 SET max_enr_group=max_enr_group_temp,
1572 max_ovr_group=max_ovr_group_temp,
1573 last_updated_by = g_n_user_id,
1574 last_update_date = SYSDATE,
1575 last_update_login = g_n_login_id
1576 WHERE usec_x_listed_group_id =p_cross_group_tab(i).usec_x_listed_group_id;
1577
1578 --Make all the unit section status to closed if open in that group
1579 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'CLOSED') LOOP
1580 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1581 END LOOP;
1582
1583 ELSIF NVL(c_x_grp_rec.max_enr_group,0) > NVL(l_new_sum,0) THEN
1584 --Make this unit section status open if closed
1585
1586 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'OPEN') LOOP
1587 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1588 END LOOP;
1589
1590 ELSE
1591
1592 --Make all the unit section status to closed if open in that group
1593 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'CLOSED') LOOP
1594 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1595 END LOOP;
1596
1597 END IF;--3c
1598
1599 ELSE
1600 --If the inserted/modified unit section is not an enrolled one then also change the status
1601 --accordingly, bug#2702252
1602 IF NVL(c_x_grp_rec.max_enr_group,0) < NVL(l_new_sum,0) THEN--4o
1603
1604 --Make all the unit section status to closed if open in that group
1605 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'CLOSED') LOOP
1606 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1607 END LOOP;
1608
1609 ELSIF NVL(c_x_grp_rec.max_enr_group,0) > NVL(l_new_sum,0) THEN
1610 --Make this unit section status open if closed
1611
1612 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'OPEN') LOOP
1613 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1614 END LOOP;
1615
1616 ELSIF c_x_grp_rec.max_enr_group IS NULL AND l_new_sum IS NULL THEN
1617 --Make all the unit section status to open if closed in that group
1618
1619 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'OPEN') LOOP
1620 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1621 END LOOP;
1622
1623 ELSE
1624
1625 --Make all the unit section status to closed if open in that group
1626 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'CLOSED') LOOP
1627 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1628 END LOOP;
1629
1630 END IF;--4c
1631 END IF; --2c
1632 END IF;--1c
1633
1634 IF l_execute_next_logic = TRUE THEN
1635
1636 IF NVL(p_cross_group_tab(i).old_max_enr_group ,0) <> NVL(c_x_grp_rec.max_enr_group,0) THEN
1637 IF p_cross_group_tab(i).old_max_enr_group = l_new_sum THEN
1638
1639 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'OPEN') LOOP
1640 update_usec_status(l_cur_usec.uoo_id,'OPEN');
1641 END LOOP;
1642
1643 ELSIF l_new_sum = c_x_grp_rec.max_enr_group THEN
1644 FOR l_cur_usec IN cur_usec(p_cross_group_tab(i).usec_x_listed_group_id,'CLOSED') LOOP
1645 update_usec_status(l_cur_usec.uoo_id,'CLOSED');
1646 END LOOP;
1647 END IF;
1648 END IF;
1649 END IF;
1650
1651 END IF; --l_b_status
1652
1653 END LOOP;
1654
1655 RETURN l_b_status;
1656
1657 END post_usec_cross_group;
1658
1659
1660
1661 PROCEDURE validate_usec_x_grp ( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type,
1662 p_c_cal_type VARCHAR2,
1663 p_n_seq_num NUMBER,
1664 p_insert_update VARCHAR2,
1665 p_cross_group_rec IN OUT NOCOPY igs_ps_create_generic_pkg.cross_group_rec_type )
1666 AS
1667 /***********************************************************************************************
1668 Created By : sommukhe
1669 Date Created By: 10-Jun-2005
1670 Purpose :
1671
1672 Known limitations,enhancements,remarks:
1673 Change History (in reverse chronological order)
1674 Who When What
1675 ********************************************************************************************** */
1676 CURSOR c_usec_x_grp(cp_xgrp_name VARCHAR2) IS
1677 SELECT 'X'
1678 FROM igs_ps_usec_x_grp
1679 WHERE usec_x_listed_group_name =cp_xgrp_name;
1680
1681 c_usec_x_grp_rec c_usec_x_grp%ROWTYPE;
1682
1683
1684 CURSOR c_val_enr(cp_x_name VARCHAR2,cp_cal_type VARCHAR2,cp_sequence_number NUMBER) IS
1685 SELECT *
1686 FROM igs_ps_usec_x_grp
1687 WHERE usec_x_listed_group_name =cp_x_name
1688 AND Cal_type=cp_cal_type
1689 AND ci_sequence_number=cp_sequence_number;
1690
1691 c_val_enr_rec c_val_enr%ROWTYPE;
1692
1693 CURSOR c_old_cmgrp(cp_x_name VARCHAR2,cp_cal_type VARCHAR2,cp_seq_no NUMBER) IS
1694 SELECT * FROM igs_ps_usec_x_grp
1695 WHERE usec_x_listed_group_name =cp_x_name
1696 AND cal_type=cp_cal_type
1697 AND ci_sequence_number=cp_seq_no;
1698
1699 c_old_cmgrp_rec c_old_cmgrp%ROWTYPE;
1700
1701 CURSOR cur_usecs_in_group(cp_usec_x_listed_group_id igs_ps_usec_x_grpmem.usec_x_listed_group_id%TYPE) IS
1702 SELECT uoo_id
1703 FROM igs_ps_usec_x_grpmem
1704 WHERE usec_x_listed_group_id = cp_usec_x_listed_group_id;
1705
1706 l_message_name fnd_new_messages.message_name%TYPE;
1707 l_request_id igs_ps_sch_hdr_int.request_id%TYPE;
1708
1709 BEGIN
1710
1711 --Cannot enter a value for Override Maximum when Enrollment Maximum is null
1712 IF ((p_usec_x_grp_rec.max_ovr_group IS NOT NULL) AND (p_usec_x_grp_rec.max_enr_group IS NULL)) THEN
1713 fnd_message.set_name ( 'IGS', 'IGS_PS_ENR_NULL_OVR_NOT' );
1714 fnd_msg_pub.add;
1715 p_usec_x_grp_rec.status := 'E';
1716 END IF;
1717
1718 --Group Override Maximum should always be greater than or equal toMaximum Enrollment for the group
1719 IF ((p_usec_x_grp_rec.max_ovr_group IS NOT NULL) AND (NVL(p_usec_x_grp_rec.max_ovr_group,0) < NVL(p_usec_x_grp_rec.max_enr_group,0))) THEN
1720 fnd_message.set_name ( 'IGS', 'IGS_PS_OVERIDE_MIN_MAX_CP' );
1721 fnd_msg_pub.add;
1722 p_usec_x_grp_rec.status := 'E';
1723 END IF;
1724
1725
1726 p_cross_group_rec.usec_x_listed_group_name:=p_usec_x_grp_rec.usec_x_listed_group_name;
1727
1728 OPEN c_old_cmgrp(p_usec_x_grp_rec.usec_x_listed_group_name,p_c_cal_type,p_n_seq_num);
1729 FETCH c_old_cmgrp INTO c_old_cmgrp_rec;
1730 IF c_old_cmgrp%FOUND THEN
1731 p_cross_group_rec.usec_x_listed_group_id:=c_old_cmgrp_rec.usec_x_listed_group_id;
1732 p_cross_group_rec.old_max_enr_group:=c_old_cmgrp_rec.max_enr_group;
1733 ELSE
1734 p_cross_group_rec.usec_x_listed_group_id:=NULL;
1735 p_cross_group_rec.old_max_enr_group:=NULL;
1736 END IF;
1737 CLOSE c_old_cmgrp;
1738
1739 --validation related to location_inheritance
1740 IF p_insert_update = 'U' THEN
1741 IF p_usec_x_grp_rec.location_inheritance = 'N' AND c_old_cmgrp_rec.location_inheritance ='Y' THEN
1742 Fnd_Message.Set_Name('IGS', 'IGS_PS_LOC_INHR_CANNOT_UPD');
1743 fnd_msg_pub.add;
1744 p_usec_x_grp_rec.status := 'E';
1745 END IF;
1746 END IF;
1747
1748 -- IF the group enrollment is getting modified
1749 OPEN c_val_enr(p_usec_x_grp_rec.usec_x_listed_group_name,p_c_cal_type,p_n_seq_num);
1750 FETCH c_val_enr INTO c_val_enr_rec;
1751 IF c_val_enr%FOUND THEN
1752 IF NVL( p_usec_x_grp_rec.max_enr_group,0) <> c_val_enr_rec.max_enr_group OR
1753 NVL(p_usec_x_grp_rec.max_ovr_group,0) <> c_val_enr_rec.max_ovr_group THEN
1754
1755 --for loop which loops thru all unit sections within a group.
1756 FOR rec_cur_usecs_in_group IN cur_usecs_in_group(c_val_enr_rec.usec_x_listed_group_id) LOOP
1757 --Before updating check for validity of schedule status...
1758 IF igs_ps_usec_schedule.prgp_get_schd_status( p_uoo_id => rec_cur_usecs_in_group.uoo_id,
1759 p_usec_id => NULL,
1760 p_message_name => l_message_name ) = TRUE THEN
1761 IF l_message_name IS NULL THEN
1762 l_message_name := 'IGS_PS_SCST_PROC';
1763 END IF;
1764
1765 fnd_message.set_name('IGS',l_message_name);
1766 fnd_msg_pub.add;
1767 p_usec_x_grp_rec.status := 'E';
1768 --update the schedule status to 'Rescheduling Requested', if unit section occurrence is a scheduled one.
1769 ELSIF igs_ps_usec_schedule.prgp_upd_usec_dtls
1770 (
1771 p_uoo_id => rec_cur_usecs_in_group.uoo_id,
1772 p_location_cd => NULL,
1773 p_usec_status => NULL,
1774 p_max_enrollments => NVL(p_usec_x_grp_rec.max_enr_group,-999),
1775 p_override_enrollment_max => NVL(p_usec_x_grp_rec.max_ovr_group,-999),
1776 p_enrollment_expected => NULL,
1777 p_request_id => l_request_id,
1778 p_message_name => l_message_name
1779 ) = FALSE THEN
1780 fnd_message.set_name('IGS',l_message_name);
1781 fnd_msg_pub.add;
1782 p_usec_x_grp_rec.status := 'E';
1783 END IF;
1784 END LOOP;
1785 END IF;
1786 END IF;
1787 CLOSE c_val_enr;
1788
1789
1790 END validate_usec_x_grp;
1791
1792
1793 FUNCTION post_as_us_ai ( p_tab_as_us_ai IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_tbl_type,
1794 p_tab_uoo IN igs_ps_create_generic_pkg.uoo_tbl_type) RETURN BOOLEAN
1795 AS
1796 /***********************************************************************************************
1797 Created By : sommukhe
1798 Date Created By:
1799 Purpose :
1800 Known limitations,enhancements,remarks:
1801 Change History (in reverse chronological order)
1802 Who When What
1803 ********************************************************************************************** */
1804 CURSOR cur_aig (cp_uoo_id IN NUMBER) IS
1805 SELECT us_ass_item_group_id,
1806 group_name,
1807 NVL (final_weight_qty, 0) group_final_weight_qty,
1808 NVL (midterm_weight_qty, 0) group_midterm_weight_qty,
1809 NVL (final_formula_qty, 0) group_final_formula_qty,
1810 NVL (midterm_formula_qty, 0) group_midterm_formula_qty
1811 FROM igs_as_us_ai_group
1812 WHERE uoo_id = cp_uoo_id;
1813
1814 CURSOR cur_ai (cp_us_ass_item_group_id IN NUMBER ) IS
1815 SELECT NVL (SUM (final_weight_qty), 0) sum_final_weight_qty,
1816 NVL (SUM (midterm_weight_qty), 0) sum_midterm_weight_qty,
1817 COUNT (us_ass_item_group_id) number_of_ai,
1818 COUNT (DECODE (dflt_item_ind, 'Y', 1, NULL)) number_of_default_ai
1819 FROM igs_ps_unitass_item
1820 WHERE us_ass_item_group_id = cp_us_ass_item_group_id
1821 AND logical_delete_dt IS NULL;
1822
1823 CURSOR cur_group (cp_rec_as_us_ai igs_ps_generic_pub.usec_ass_item_grp_rec_type) IS
1824 SELECT a.us_ass_item_group_id
1825 FROM igs_as_us_ai_group a, igs_ps_unit_ofr_opt_all b, igs_ca_inst_all c
1826 WHERE a.group_name = cp_rec_as_us_ai.group_name
1827 AND a.uoo_id =b.uoo_id
1828 AND b.unit_cd=cp_rec_as_us_ai.unit_cd
1829 AND b.version_number=cp_rec_as_us_ai.version_number
1830 AND b.cal_type=c.cal_type
1831 AND b.ci_sequence_number=c.sequence_number
1832 AND c.alternate_code=cp_rec_as_us_ai.teach_cal_alternate_code
1833 AND b.unit_class=cp_rec_as_us_ai.unit_class
1834 AND b.location_cd=cp_rec_as_us_ai.location_cd;
1835 l_cur_group cur_group%ROWTYPE;
1836
1837 rec_ai cur_ai%ROWTYPE;
1838 l_n_count_msg NUMBER(6);
1839 l_b_status BOOLEAN;
1840 BEGIN
1841 l_b_status := TRUE;
1842
1843 FOR i IN 1 ..p_tab_uoo.LAST LOOP
1844 FOR rec_aig IN cur_aig (p_tab_uoo(i)) LOOP
1845 --
1846 -- Validate that the at least one Assessment Item has to have a weighting
1847 -- of more than zero, if the corresponding Assessment Item Group's Grading
1848 -- Period has a weighting of more than zero.
1849 --
1850 OPEN cur_ai (rec_aig.us_ass_item_group_id);
1851 FETCH cur_ai INTO rec_ai;
1852 CLOSE cur_ai;
1853 --
1854 -- Midterm Grading Period
1855 --
1856 IF (rec_aig.group_midterm_weight_qty > 0) THEN
1857 IF (rec_ai.number_of_ai >= 0) THEN
1858 IF (rec_ai.sum_midterm_weight_qty = 0) THEN
1859 fnd_message.set_name ('IGS', 'IGS_AS_GRP_WEIT_GT_SUM_AI_WEIT');
1860 fnd_msg_pub.add;
1861 l_n_count_msg := fnd_msg_pub.count_msg;
1862 FOR j in 1..p_tab_as_us_ai.LAST LOOP
1863 IF p_tab_as_us_ai.EXISTS(j) THEN
1864 OPEN cur_group( p_tab_as_us_ai(j));
1865 FETCH cur_group INTO l_cur_group;
1866 CLOSE cur_group;
1867 IF p_tab_as_us_ai(j).status = 'S' AND l_cur_group.us_ass_item_group_id = rec_aig.us_ass_item_group_id THEN
1868 p_tab_as_us_ai(j).status := 'E';
1869 p_tab_as_us_ai(j).msg_from := l_n_count_msg;
1870 p_tab_as_us_ai(j).msg_to := l_n_count_msg;
1871 END IF;
1872 END IF;
1873 END LOOP;
1874 l_b_status :=FALSE;
1875 END IF;
1876 END IF;
1877 END IF;
1878
1879 --
1880 -- Final Grading Period
1881 --
1882 IF (rec_aig.group_final_weight_qty > 0) THEN
1883 IF (rec_ai.number_of_ai >= 0) THEN
1884 IF (rec_ai.sum_final_weight_qty = 0) THEN
1885 fnd_message.set_name ('IGS', 'IGS_AS_GRP_WEIT_GT_SUM_AI_WEIT');
1886 fnd_msg_pub.add;
1887 l_n_count_msg := fnd_msg_pub.count_msg;
1888 FOR j in 1..p_tab_as_us_ai.LAST LOOP
1889 IF p_tab_as_us_ai.EXISTS(j) THEN
1890 OPEN cur_group( p_tab_as_us_ai(j));
1891 FETCH cur_group INTO l_cur_group;
1892 CLOSE cur_group;
1893 IF p_tab_as_us_ai(j).status = 'S' AND l_cur_group.us_ass_item_group_id = rec_aig.us_ass_item_group_id THEN
1894 p_tab_as_us_ai(j).status := 'E';
1895 p_tab_as_us_ai(j).msg_from := l_n_count_msg;
1896 p_tab_as_us_ai(j).msg_to := l_n_count_msg;
1897 END IF;
1898 END IF;
1899 END LOOP;
1900 l_b_status :=FALSE;
1901 END IF;
1902 END IF;
1903 END IF;
1904 --
1905 -- Check that there are enough Default Assessment Items to satisfy the
1906 -- Assessment Item Group's Final/Midterm Grading Period formula number.
1907 --
1908 IF ((rec_ai.number_of_default_ai < rec_aig.group_final_formula_qty) OR
1909 (rec_ai.number_of_default_ai < rec_aig.group_midterm_formula_qty)) THEN
1910 fnd_message.set_name ('IGS', 'IGS_AS_NOT_ENOUGH_DFLT_AI');
1911 fnd_msg_pub.add;
1912 l_n_count_msg := fnd_msg_pub.count_msg;
1913 FOR j in 1..p_tab_as_us_ai.LAST LOOP
1914 IF p_tab_as_us_ai.EXISTS(j) THEN
1915 OPEN cur_group( p_tab_as_us_ai(j));
1916 FETCH cur_group INTO l_cur_group;
1917 CLOSE cur_group;
1918 IF p_tab_as_us_ai(j).status = 'S' AND l_cur_group.us_ass_item_group_id = rec_aig.us_ass_item_group_id THEN
1919 p_tab_as_us_ai(j).status := 'E';
1920 p_tab_as_us_ai(j).msg_from := l_n_count_msg;
1921 p_tab_as_us_ai(j).msg_to := l_n_count_msg;
1922 END IF;
1923 END IF;
1924 END LOOP;
1925 l_b_status :=FALSE;
1926 END IF;
1927 END LOOP;
1928 END LOOP;
1929
1930 RETURN l_b_status;
1931
1932 END post_as_us_ai;
1933
1934
1935 FUNCTION post_tch_rsp_ovrd ( p_tab_tch_rsp_ovrd IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_tbl_type,
1936 p_tab_uoo IN igs_ps_create_generic_pkg.uoo_tbl_type) RETURN BOOLEAN
1937 AS
1938 /***********************************************************************************************
1939 Created By : sommukhe
1940 Date Created By: 18-Jun-2005
1941 Purpose : This function will do validations after importing records of Unit Section Teaching Responsibility Override.
1942 This will returns TRUE if all the validations pass and returns FALSE, if fails.
1943
1944 Known limitations,enhancements,remarks:
1945 Change History (in reverse chronological order)
1946 Who When What
1947 ********************************************************************************************** */
1948 CURSOR c_tro_perc_sum( cp_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
1949 SELECT SUM(percentage) percentage
1950 FROM igs_ps_tch_resp_ovrd_all
1951 WHERE uoo_id=cp_uoo_id;
1952 c_tro_perc_sum_rec c_tro_perc_sum%ROWTYPE;
1953
1954 CURSOR c_uoo_id (cp_usec_tch_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type) IS
1955 SELECT uoo_id
1956 FROM igs_ps_unit_ofr_opt_all a,igs_ca_inst_all b
1957 WHERE a.unit_cd = cp_usec_tch_resp_rec.unit_cd
1958 AND a.version_number = cp_usec_tch_resp_rec.version_number
1959 AND a.cal_type = b.cal_type
1960 AND a.ci_sequence_number = b.sequence_number
1961 AND b.alternate_code=cp_usec_tch_resp_rec.teach_cal_alternate_code
1962 AND a.location_cd =cp_usec_tch_resp_rec.location_cd
1963 AND a.unit_class = cp_usec_tch_resp_rec.unit_class;
1964 c_uoo_id_rec c_uoo_id%ROWTYPE;
1965
1966 l_n_count_msg NUMBER(6);
1967 l_b_status BOOLEAN;
1968
1969 BEGIN
1970 l_b_status:= TRUE;
1971
1972 FOR i IN 1 ..p_tab_uoo.LAST LOOP
1973 OPEN c_tro_perc_sum (p_tab_uoo(i));
1974 FETCH c_tro_perc_sum INTO c_tro_perc_sum_rec;
1975 CLOSE c_tro_perc_sum;
1976 IF (c_tro_perc_sum_rec.percentage) <> 100 THEN
1977 l_b_status:= FALSE;
1978 fnd_message.set_name ( 'IGS', 'IGS_PS_PRCALLOC_TEACH_RESP' );
1979 fnd_msg_pub.add;
1980 l_n_count_msg := fnd_msg_pub.count_msg;
1981 FOR j in 1..p_tab_tch_rsp_ovrd.LAST LOOP
1982 OPEN c_uoo_id (p_tab_tch_rsp_ovrd(j));
1983 FETCH c_uoo_id INTO c_uoo_id_rec;
1984 CLOSE c_uoo_id;
1985 IF p_tab_tch_rsp_ovrd.EXISTS(j) THEN
1986 IF p_tab_tch_rsp_ovrd(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id THEN
1987 p_tab_tch_rsp_ovrd(j).status := 'E';
1988 p_tab_tch_rsp_ovrd(j).msg_from := l_n_count_msg;
1989 p_tab_tch_rsp_ovrd(j).msg_to := l_n_count_msg;
1990 END IF;
1991 END IF;
1992 END LOOP;
1993 END IF;
1994 END LOOP;
1995
1996 RETURN l_b_status;
1997
1998 END post_tch_rsp_ovrd;
1999
2000
2001 FUNCTION post_usec_rsv ( p_tab_usec_rsv IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_tbl_type,
2002 p_tab_uoo IN igs_ps_create_generic_pkg.uoo_tbl_type) RETURN BOOLEAN
2003 AS
2004 /***********************************************************************************************
2005 Created By : sommukhe
2006 Date Created By: 18-Jul-2005
2007 Purpose : Check child existence for a priority
2008 Priority order should be in series
2009 Preference order should be in series
2010
2011 Known limitations,enhancements,remarks:
2012 Change History (in reverse chronological order)
2013 Who When What
2014 ********************************************************************************************** */
2015 l_n_count_msg NUMBER(6);
2016
2017 CURSOR c_rsv_perc_sum( cp_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
2018 SELECT nvl(SUM(percentage_reserved),0) percentage_reserved
2019 FROM igs_ps_rsv_usec_pri usprv,igs_ps_rsv_usec_prf uspfv
2020 WHERE usprv.rsv_usec_pri_id = uspfv.rsv_usec_pri_id
2021 AND usprv.uoo_id =cp_uoo_id;
2022
2023 c_rsv_perc_sum_rec c_rsv_perc_sum%ROWTYPE;
2024
2025 CURSOR c_usec_rsvpric_ser(cp_uoo_id NUMBER) IS
2026 SELECT priority_order
2027 FROM igs_ps_rsv_usec_pri
2028 WHERE uoo_id=cp_uoo_id
2029 ORDER BY priority_order;
2030
2031 CURSOR cur_priority_id(cp_uoo_id NUMBER) IS
2032 SELECT rsv_usec_pri_id,priority_value
2033 FROM igs_ps_rsv_usec_pri
2034 WHERE uoo_id=cp_uoo_id;
2035
2036 CURSOR c_usec_rsvprfc_ser(cp_rsv_usec_pri_id NUMBER) IS
2037 SELECT preference_order
2038 FROM igs_ps_rsv_usec_prf
2039 WHERE rsv_usec_pri_id = cp_rsv_usec_pri_id
2040 ORDER BY preference_order;
2041 l_c_usec_rsvprfc_ser c_usec_rsvprfc_ser%ROWTYPE;
2042
2043 CURSOR c_uoo_id (cp_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type) IS
2044 SELECT uoo_id
2045 FROM igs_ps_unit_ofr_opt_all a,igs_ca_inst_all b
2046 WHERE a.unit_cd = cp_usec_rsv_rec.unit_cd
2047 AND a.version_number = cp_usec_rsv_rec.version_number
2048 AND a.cal_type = b.cal_type
2049 AND a.ci_sequence_number = b.sequence_number
2050 AND b.alternate_code=cp_usec_rsv_rec.teach_cal_alternate_code
2051 AND a.location_cd =cp_usec_rsv_rec.location_cd
2052 AND a.unit_class = cp_usec_rsv_rec.unit_class;
2053
2054 c_uoo_id_rec c_uoo_id%ROWTYPE;
2055
2056 l_b_status BOOLEAN;
2057 l_n_counter NUMBER;
2058
2059 BEGIN
2060 l_b_status:=TRUE;
2061 FOR i IN 1 ..p_tab_uoo.LAST LOOP
2062 --Check child existence for a priority
2063 FOR rec_priority_id IN cur_priority_id(p_tab_uoo(i)) LOOP
2064
2065 OPEN c_usec_rsvprfc_ser(rec_priority_id.rsv_usec_pri_id);
2066 FETCH c_usec_rsvprfc_ser INTO l_c_usec_rsvprfc_ser;
2067 IF c_usec_rsvprfc_ser%NOTFOUND THEN
2068 l_b_status:= FALSE;
2069 fnd_message.set_name ( 'IGS', 'IGS_EN_PREF_REQ_PRIOR');
2070 fnd_message.set_token('PRIORITY',rec_priority_id.priority_value);
2071 fnd_msg_pub.add;
2072 l_n_count_msg := fnd_msg_pub.count_msg;
2073 FOR j in 1..p_tab_usec_rsv.LAST LOOP
2074 IF p_tab_usec_rsv.EXISTS(j) THEN
2075 OPEN c_uoo_id(p_tab_usec_rsv(j));
2076 FETCH c_uoo_id INTO c_uoo_id_rec;
2077 CLOSE c_uoo_id;
2078 IF p_tab_usec_rsv(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id AND p_tab_usec_rsv(j).priority_value = rec_priority_id.priority_value THEN
2079 p_tab_usec_rsv(j).status := 'E';
2080 p_tab_usec_rsv(j).msg_from := l_n_count_msg;
2081 p_tab_usec_rsv(j).msg_to := l_n_count_msg;
2082 END IF;
2083 END IF;
2084 END LOOP;
2085
2086 END IF;
2087 CLOSE c_usec_rsvprfc_ser;
2088
2089 END LOOP;
2090
2091
2092 --Sum of the percentage of preferences for a unit section should not be greater than 100.
2093 OPEN c_rsv_perc_sum (p_tab_uoo(i));
2094 FETCH c_rsv_perc_sum INTO c_rsv_perc_sum_rec;
2095 IF (c_rsv_perc_sum_rec.percentage_reserved) > 100 THEN
2096 l_b_status:= FALSE;
2097 fnd_message.set_name ( 'IGS', 'IGS_PS_PREF_SUM_BET_0_100' );
2098 fnd_msg_pub.add;
2099 l_n_count_msg := fnd_msg_pub.count_msg;
2100 FOR j in 1..p_tab_usec_rsv.LAST LOOP
2101 IF p_tab_usec_rsv.EXISTS(j) THEN
2102 OPEN c_uoo_id(p_tab_usec_rsv(j));
2103 FETCH c_uoo_id INTO c_uoo_id_rec;
2104 CLOSE c_uoo_id;
2105 IF p_tab_usec_rsv(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id THEN
2106 p_tab_usec_rsv(j).status := 'E';
2107 p_tab_usec_rsv(j).msg_from := l_n_count_msg;
2108 p_tab_usec_rsv(j).msg_to := l_n_count_msg;
2109 END IF;
2110 END IF;
2111 END LOOP;
2112 END IF;
2113 CLOSE c_rsv_perc_sum;
2114
2115
2116 --Priority order should be in series
2117 l_n_counter :=1;
2118 FOR c_usec_rsvpric_ser_rec IN c_usec_rsvpric_ser(p_tab_uoo(i)) LOOP
2119 IF l_n_counter <> c_usec_rsvpric_ser_rec.priority_order THEN
2120 l_b_status:= FALSE;
2121 fnd_message.set_name ( 'IGS', 'IGS_PS_RSV_PRI_NOT_IN_SERIES' );
2122 fnd_msg_pub.add;
2123 l_n_count_msg := fnd_msg_pub.count_msg;
2124 FOR j in 1..p_tab_usec_rsv.LAST LOOP
2125 IF p_tab_usec_rsv.EXISTS(j) THEN
2126 OPEN c_uoo_id(p_tab_usec_rsv(j));
2127 FETCH c_uoo_id INTO c_uoo_id_rec;
2128 CLOSE c_uoo_id;
2129 IF p_tab_usec_rsv(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id THEN
2130 p_tab_usec_rsv(j).status := 'E';
2131 p_tab_usec_rsv(j).msg_from := l_n_count_msg;
2132 p_tab_usec_rsv(j).msg_to := l_n_count_msg;
2133 END IF;
2134 END IF;
2135 END LOOP;
2136
2137 IF l_b_status = FALSE THEN
2138 EXIT;
2139 END IF;
2140
2141 END IF;
2142 l_n_counter:= l_n_counter+1;
2143 END LOOP;
2144
2145 --Preference order should be in series
2146 FOR rec_priority_id IN cur_priority_id(p_tab_uoo(i)) LOOP
2147 l_n_counter:=1;
2148 FOR c_usec_rsvprfc_ser_rec IN c_usec_rsvprfc_ser(rec_priority_id.rsv_usec_pri_id) LOOP
2149
2150 IF l_n_counter <> c_usec_rsvprfc_ser_rec.preference_order THEN
2151 l_b_status:= FALSE;
2152 fnd_message.set_name ( 'IGS', 'IGS_PS_RSV_PRF_NOT_IN_SERIES' );
2153 fnd_msg_pub.add;
2154 l_n_count_msg := fnd_msg_pub.count_msg;
2155 FOR j in 1..p_tab_usec_rsv.LAST LOOP
2156 IF p_tab_usec_rsv.EXISTS(j) THEN
2157 OPEN c_uoo_id(p_tab_usec_rsv(j));
2158 FETCH c_uoo_id INTO c_uoo_id_rec;
2159 CLOSE c_uoo_id;
2160 IF p_tab_usec_rsv(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id AND p_tab_usec_rsv(j).priority_value = rec_priority_id.priority_value THEN
2161 p_tab_usec_rsv(j).status := 'E';
2162 p_tab_usec_rsv(j).msg_from := l_n_count_msg;
2163 p_tab_usec_rsv(j).msg_to := l_n_count_msg;
2164 END IF;
2165 END IF;
2166 END LOOP;
2167
2168 END IF;
2169 l_n_counter:= l_n_counter+1;
2170
2171 END LOOP;
2172 END LOOP; --distinct priority_id loop
2173
2174 END LOOP; --Main distinct uoo_id loop
2175
2176 RETURN l_b_status;
2177
2178 END post_usec_rsv;
2179
2180
2181
2182 --post insert/update validations for Unit section Waitlist
2183 FUNCTION post_usec_wlst ( p_tab_usec_wlst IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_tbl_type,
2184 p_tab_uoo IN igs_ps_create_generic_pkg.uoo_tbl_type) RETURN BOOLEAN
2185 AS
2186 /***********************************************************************************************
2187 Created By : sommukhe
2188 Date Created By: 18-Jul-2005
2189 Purpose : Check child existence for a priority
2190 Priority order should be in series
2191 Preference order should be in series
2192
2193 Known limitations,enhancements,remarks:
2194 Change History (in reverse chronological order)
2195 Who When What
2196 ********************************************************************************************** */
2197 l_n_count_msg NUMBER(6);
2198
2199 CURSOR c_usec_wlstpric_ser(cp_uoo_id NUMBER) IS
2200 SELECT priority_number
2201 FROM igs_ps_usec_wlst_pri
2202 WHERE uoo_id=cp_uoo_id
2203 ORDER BY priority_number;
2204
2205 CURSOR cur_priority_id(cp_uoo_id NUMBER) IS
2206 SELECT unit_sec_waitlist_priority_id,priority_value
2207 FROM igs_ps_usec_wlst_pri
2208 WHERE uoo_id=cp_uoo_id;
2209
2210 CURSOR c_usec_wlstprfc_ser(cp_waitlist_priority_id NUMBER) IS
2211 SELECT preference_order
2212 FROM igs_ps_usec_wlst_prf
2213 WHERE unit_sec_waitlist_priority_id = cp_waitlist_priority_id
2214 ORDER BY preference_order;
2215 l_c_usec_wlstprfc_ser c_usec_wlstprfc_ser%ROWTYPE;
2216
2217 CURSOR c_uoo_id (cp_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type) IS
2218 SELECT uoo_id
2219 FROM igs_ps_unit_ofr_opt_all a,igs_ca_inst_all b
2220 WHERE a.unit_cd = cp_usec_wlst_rec.unit_cd
2221 AND a.version_number = cp_usec_wlst_rec.version_number
2222 AND a.cal_type = b.cal_type
2223 AND a.ci_sequence_number = b.sequence_number
2224 AND b.alternate_code=cp_usec_wlst_rec.teach_cal_alternate_code
2225 AND a.location_cd =cp_usec_wlst_rec.location_cd
2226 AND a.unit_class = cp_usec_wlst_rec.unit_class;
2227
2228 c_uoo_id_rec c_uoo_id%ROWTYPE;
2229
2230 l_b_status BOOLEAN;
2231 l_n_counter NUMBER;
2232
2233 BEGIN
2234 l_b_status:=TRUE;
2235 FOR i IN 1 ..p_tab_uoo.LAST LOOP
2236 --Check child existence for a priority
2237 FOR rec_priority_id IN cur_priority_id(p_tab_uoo(i)) LOOP
2238 OPEN c_usec_wlstprfc_ser(rec_priority_id.unit_sec_waitlist_priority_id);
2239 FETCH c_usec_wlstprfc_ser INTO l_c_usec_wlstprfc_ser;
2240 IF c_usec_wlstprfc_ser%NOTFOUND THEN
2241 l_b_status:= FALSE;
2242 fnd_message.set_name ( 'IGS', 'IGS_EN_PREF_REQ_PRIOR');
2243 fnd_message.set_token('PRIORITY',rec_priority_id.priority_value);
2244 fnd_msg_pub.add;
2245 l_n_count_msg := fnd_msg_pub.count_msg;
2246 FOR j in 1..p_tab_usec_wlst.LAST LOOP
2247 IF p_tab_usec_wlst.EXISTS(j) THEN
2248 OPEN c_uoo_id(p_tab_usec_wlst(j));
2249 FETCH c_uoo_id INTO c_uoo_id_rec;
2250 CLOSE c_uoo_id;
2251 IF p_tab_usec_wlst(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id AND p_tab_usec_wlst(j).priority_value = rec_priority_id.priority_value THEN
2252 p_tab_usec_wlst(j).status := 'E';
2253 p_tab_usec_wlst(j).msg_from := l_n_count_msg;
2254 p_tab_usec_wlst(j).msg_to := l_n_count_msg;
2255 END IF;
2256 END IF;
2257 END LOOP;
2258 END IF;
2259 CLOSE c_usec_wlstprfc_ser;
2260 END LOOP;
2261
2262
2263 --Priority order should be in series
2264 l_n_counter :=1;
2265 FOR c_usec_wlstpric_ser_rec IN c_usec_wlstpric_ser(p_tab_uoo(i)) LOOP
2266 IF l_n_counter <> c_usec_wlstpric_ser_rec.priority_number THEN
2267 l_b_status:= FALSE;
2268 fnd_message.set_name ( 'IGS', 'IGS_PS_WLST_PRI_NOT_IN_SERIES' );
2269 fnd_msg_pub.add;
2270 l_n_count_msg := fnd_msg_pub.count_msg;
2271 FOR j in 1..p_tab_usec_wlst.LAST LOOP
2272 IF p_tab_usec_wlst.EXISTS(j) THEN
2273 OPEN c_uoo_id(p_tab_usec_wlst(j));
2274 FETCH c_uoo_id INTO c_uoo_id_rec;
2275 CLOSE c_uoo_id;
2276 IF p_tab_usec_wlst(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id THEN
2277 p_tab_usec_wlst(j).status := 'E';
2278 p_tab_usec_wlst(j).msg_from := l_n_count_msg;
2279 p_tab_usec_wlst(j).msg_to := l_n_count_msg;
2280 END IF;
2281 END IF;
2282 END LOOP;
2283
2284 IF l_b_status = FALSE THEN
2285 EXIT;
2286 END IF;
2287
2288 END IF;
2289 l_n_counter:= l_n_counter+1;
2290 END LOOP;
2291
2292 --Preference order should be in series
2293 FOR rec_priority_id IN cur_priority_id(p_tab_uoo(i)) LOOP
2294 l_n_counter:=1;
2295 FOR c_usec_wlstprfc_ser_rec IN c_usec_wlstprfc_ser(rec_priority_id.unit_sec_waitlist_priority_id) LOOP
2296
2297 IF l_n_counter <> c_usec_wlstprfc_ser_rec.preference_order THEN
2298 l_b_status:= FALSE;
2299 fnd_message.set_name ( 'IGS', 'IGS_PS_WLST_PRF_NOT_IN_SERIES' );
2300 fnd_msg_pub.add;
2301 l_n_count_msg := fnd_msg_pub.count_msg;
2302 FOR j in 1..p_tab_usec_wlst.LAST LOOP
2303 IF p_tab_usec_wlst.EXISTS(j) THEN
2304 OPEN c_uoo_id(p_tab_usec_wlst(j));
2305 FETCH c_uoo_id INTO c_uoo_id_rec;
2306 CLOSE c_uoo_id;
2307 IF p_tab_usec_wlst(j).status = 'S' AND p_tab_uoo(i)= c_uoo_id_rec.uoo_id AND p_tab_usec_wlst(j).priority_value = rec_priority_id.priority_value THEN
2308 p_tab_usec_wlst(j).status := 'E';
2309 p_tab_usec_wlst(j).msg_from := l_n_count_msg;
2310 p_tab_usec_wlst(j).msg_to := l_n_count_msg;
2311 END IF;
2312 END IF;
2313 END LOOP;
2314
2315 END IF;
2316 l_n_counter:= l_n_counter+1;
2317
2318 END LOOP;
2319 END LOOP; --distinct priority_id loop
2320
2321 END LOOP; --Main distinct uoo_id loop
2322
2323 RETURN l_b_status;
2324
2325 END post_usec_wlst;
2326
2327
2328
2329
2330 -- Validate Unit Section Occurence Facility Records before inserting them
2331
2332 PROCEDURE validate_facility (p_uso_fclt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_rec_type,
2333 p_n_uoo_id IN NUMBER,
2334 p_uso_id IN NUMBER,
2335 p_calling_context IN VARCHAR2)
2336 AS
2337 /***********************************************************************************************
2338 Created By : SOMMUKHE
2339 Date Created By: 21-NOV-2002
2340 Purpose :
2341
2342 Known limitations,enhancements,remarks:
2343 Change History (in reverse chronological order)
2344 Who When What
2345 ********************************************************************************************** */
2346
2347 CURSOR cur_facility_closed (cp_facility_code igs_ps_media_equip_all.media_code%TYPE) IS
2348 SELECT 'X'
2349 FROM igs_ps_media_equip_all
2350 WHERE media_code = cp_facility_code
2351 AND closed_ind = 'Y';
2352
2353 CURSOR c_facility (cp_uso_id igs_ps_uso_facility.unit_section_occurrence_id%TYPE) IS
2354 SELECT 'X'
2355 FROM igs_ps_usec_occurs_all
2356 WHERE unit_section_occurrence_id = cp_uso_id
2357 AND schedule_status = 'PROCESSING';
2358
2359 l_c_var VARCHAR2(1);
2360
2361 CURSOR c_occurs(cp_unit_section_occurrence_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
2362 SELECT uso.unit_section_occurrence_id
2363 FROM igs_ps_usec_occurs_all uso
2364 WHERE (uso.schedule_status IS NOT NULL AND uso.schedule_status NOT IN ('PROCESSING','USER_UPDATE'))
2365 AND uso.no_set_day_ind ='N'
2366 AND uso.unit_section_occurrence_id=cp_unit_section_occurrence_id;
2367
2368 BEGIN
2369
2370 --Check if the unit section is NOT_OFFERED
2371 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
2372 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
2373 fnd_msg_pub.add;
2374 p_uso_fclt_rec.status := 'E';
2375 END IF;
2376
2377 --Facility code cannot be closed
2378 OPEN cur_facility_closed( p_uso_fclt_rec.facility_code);
2379 FETCH cur_facility_closed INTO l_c_var;
2380 IF cur_facility_closed%FOUND THEN
2381 fnd_message.set_name ( 'IGS', 'IGS_PS_FACILITY_CLOSED' );
2382 fnd_msg_pub.add;
2383 p_uso_fclt_rec.status := 'E';
2384 END IF;
2385 CLOSE cur_facility_closed;
2386
2387 --Cannot import facilities when the occurrence is in progress except calling context is scheduling
2388 IF p_calling_context <> 'S' THEN
2389 OPEN c_facility (p_uso_id);
2390 FETCH c_facility INTO l_c_var;
2391 IF c_facility%FOUND THEN
2392 fnd_message.set_name ( 'IGS', 'IGS_PS_SCHEDULING_IN_PROGRESS' );
2393 fnd_msg_pub.add;
2394 p_uso_fclt_rec.status := 'E';
2395 END IF;
2396 CLOSE c_facility;
2397
2398 --Update the schedule status of the occurrence to USER_UPDATE if inserting/updating a record
2399 IF p_uso_fclt_rec.status = 'S' THEN
2400 FOR l_occurs_rec IN c_occurs(p_uso_id) LOOP
2401 igs_ps_usec_schedule.update_occurrence_status(l_occurs_rec.unit_section_occurrence_id,'USER_UPDATE','N');
2402 END LOOP;
2403 END IF;
2404
2405 END IF;
2406
2407
2408 END validate_facility;
2409
2410 PROCEDURE validate_category (p_usec_cat_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cat_rec_type,
2411 p_n_uoo_id IN NUMBER)
2412 AS
2413 /***********************************************************************************************
2414 Created By : SOMMUKHE
2415 Date Created By: 21-NOV-2002
2416 Purpose : Check for the closed indicator for the unit category
2417
2418 Known limitations,enhancements,remarks:
2419 Change History (in reverse chronological order)
2420 Who When What
2421 ********************************************************************************************** */
2422 CURSOR c_category(cp_unit_cat igs_ps_usec_category.unit_cat%type) IS
2423 SELECT 'X'
2424 FROM igs_ps_unit_cat
2425 WHERE unit_cat = cp_unit_cat
2426 AND closed_ind = 'Y';
2427
2428 c_category_rec c_category%ROWTYPE;
2429 BEGIN
2430
2431 --Check if the unit section is NOT_OFFERED
2432 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
2433 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
2434 fnd_msg_pub.add;
2435 p_usec_cat_rec.status := 'E';
2436 END IF;
2437
2438 OPEN c_category(p_usec_cat_rec.unit_cat);
2439 FETCH c_category INTO c_category_rec;
2440 IF c_category%FOUND THEN
2441 fnd_message.set_name ( 'IGS', 'IGS_PS_CATEGORY_CLOSED' );
2442 fnd_msg_pub.add;
2443 p_usec_cat_rec.status := 'E';
2444 END IF;
2445 CLOSE c_category;
2446
2447 END validate_category;
2448
2449 PROCEDURE validate_usec_rsvpri(p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,
2450 p_n_uoo_id IN igs_ps_unit_ofr_opt_all.uoo_id%TYPE,
2451 p_insert_update IN VARCHAR2)
2452 AS
2453 /***********************************************************************************************
2454 Created By : Sommukhe
2455 Date Created By:
2456 Purpose : Check if reserved seating is allowed and if priority value is 'PERSON_GRP'
2457
2458 Known limitations,enhancements,remarks:
2459 Change History (in reverse chronological order)
2460 Who When What
2461 ********************************************************************************************** */
2462 CURSOR c_rsv_allow (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
2463 SELECT reserved_seating_allowed
2464 FROM igs_ps_unit_ofr_opt_all
2465 WHERE uoo_id =cp_n_uoo_id;
2466 c_rsvpri_rec c_rsv_allow%ROWTYPE;
2467
2468 l_c_message VARCHAR2(30);
2469 BEGIN
2470
2471 -- Check if unit status is inactive.
2472 IF NOT igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_rsv_rec.unit_cd,p_usec_rsv_rec.version_number,l_c_message) THEN
2473 fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
2474 fnd_msg_pub.add;
2475 p_usec_rsv_rec.status := 'E';
2476 END IF;
2477
2478 --Check if the unit section is NOT_OFFERED
2479 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
2480 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
2481 fnd_msg_pub.add;
2482 p_usec_rsv_rec.status := 'E';
2483 END IF;
2484
2485
2486 OPEN c_rsv_allow (p_n_uoo_id);
2487 FETCH c_rsv_allow INTO c_rsvpri_rec;
2488 IF c_rsvpri_rec.reserved_seating_allowed = 'N' THEN
2489 fnd_message.set_name ( 'IGS', 'IGS_PS_RSV_SEAT_NOT_ALLOWED' );
2490 fnd_msg_pub.add;
2491 p_usec_rsv_rec.status := 'E';
2492 END IF;
2493 CLOSE c_rsv_allow;
2494
2495 IF p_insert_update = 'I' THEN
2496 IF p_usec_rsv_rec.priority_order IS NULL THEN
2497 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_ORDER', 'LEGACY_TOKENS', FALSE);
2498 p_usec_rsv_rec.status := 'E';
2499 END IF;
2500 END IF;
2501
2502 END validate_usec_rsvpri;
2503
2504 PROCEDURE validate_usec_rsvprf(p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,
2505 p_insert_update IN VARCHAR2)
2506 AS
2507 /***********************************************************************************************
2508 Created By : Sommukhe
2509 Date Created By:
2510 Purpose : Check if reserved seating is allowed and if priority value is 'PERSON_GRP'
2511
2512 Known limitations,enhancements,remarks:
2513 Change History (in reverse chronological order)
2514 Who When What
2515 sommukhe 16-FEB-2006 Bug#3094371, replaced IGS_OR_UNIT by igs_or_inst_org_base_v for cursor c_org
2516 ********************************************************************************************** */
2517
2518 CURSOR c_clstd(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2519 SELECT 'X'
2520 FROM igs_pr_class_std
2521 WHERE closed_ind = 'N'
2522 AND class_standing = cp_preference_code;
2523
2524 c_clstd_rec c_clstd%ROWTYPE;
2525
2526 CURSOR c_pstage(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2527 SELECT 'X'
2528 FROM igs_ps_stage_type
2529 WHERE closed_ind = 'N'
2530 AND course_stage_type = cp_preference_code;
2531
2532 c_pstage_rec c_pstage%ROWTYPE;
2533
2534 CURSOR c_prog(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE,
2535 cp_preference_version igs_ps_rsv_usec_prf.preference_version%TYPE) IS
2536 SELECT 'X'
2537 FROM igs_ps_ver pv, igs_ps_stat pvst
2538 WHERE pvst.course_status = pv.course_status
2539 AND pvst.s_course_status <> 'INACTIVE'
2540 AND pv.course_cd=cp_preference_code
2541 AND pv.version_number=cp_preference_version;
2542
2543 c_prog_rec c_prog%ROWTYPE;
2544
2545 CURSOR c_unit_set(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE,
2546 cp_preference_version igs_ps_rsv_usec_prf.preference_version%TYPE) IS
2547 SELECT 'X'
2548 FROM igs_en_unit_set us, igs_en_unit_set_stat uss
2549 WHERE us.unit_set_status = uss.unit_set_status
2550 AND uss.s_unit_set_status <> 'INACTIVE'
2551 AND us.unit_set_cd = cp_preference_code
2552 AND us.version_number = cp_preference_version;
2553
2554 c_unit_set_rec c_unit_set%ROWTYPE;
2555
2556 CURSOR c_pgrp(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2557 SELECT 'X'
2558 FROM igs_pe_persid_group_all
2559 WHERE closed_ind = 'N'
2560 AND group_cd = cp_preference_code
2561 AND file_name IS NULL
2562 AND NVL(org_id,NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV('CLIENT_INFO'),1,1),
2563 ' ',NULL,SUBSTRB(USERENV('CLIENT_INFO'),1,10))),-99)) =
2564 NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV('CLIENT_INFO'),1,1),
2565 ' ',NULL,SUBSTRB(USERENV('CLIENT_INFO'),1,10))),-99);
2566
2567 c_pgrp_rec c_pgrp%ROWTYPE;
2568
2569 CURSOR c_org(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2570 SELECT 'X'
2571 FROM igs_or_inst_org_base_v a, igs_or_status b
2572 WHERE a.party_number = cp_preference_code
2573 AND a.org_status = b.org_status
2574 AND b.s_org_status <> 'INACTIVE';
2575 c_org_rec c_org%ROWTYPE;
2576
2577 BEGIN
2578
2579 IF p_insert_update = 'I' THEN
2580
2581 --validation when priority value as Person Group
2582 IF p_usec_rsv_rec.priority_value = 'PERSON_GRP' THEN
2583 OPEN c_pgrp (p_usec_rsv_rec.preference_code);
2584 FETCH c_pgrp INTO c_pgrp_rec;
2585 IF c_pgrp%NOTFOUND THEN
2586 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2587 p_usec_rsv_rec.status := 'E';
2588 END IF;
2589 CLOSE c_pgrp;
2590 END IF;
2591
2592 --validation when priority value as Org unit
2593 IF p_usec_rsv_rec.priority_value = 'ORG_UNIT' THEN
2594 OPEN c_org (p_usec_rsv_rec.preference_code);
2595 FETCH c_org INTO c_org_rec;
2596 IF c_org%NOTFOUND THEN
2597 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2598 p_usec_rsv_rec.status := 'E';
2599 END IF;
2600 CLOSE c_org;
2601 END IF;
2602
2603
2604 --validation when priority value as Class standing
2605 IF p_usec_rsv_rec.priority_value = 'CLASS_STD' THEN
2606 OPEN c_clstd (p_usec_rsv_rec.preference_code);
2607 FETCH c_clstd INTO c_clstd_rec;
2608 IF c_clstd%NOTFOUND THEN
2609 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2610 p_usec_rsv_rec.status := 'E';
2611 END IF;
2612 CLOSE c_clstd;
2613 END IF;
2614
2615 --Validation when priority value as Program stage.
2616 IF p_usec_rsv_rec.priority_value = 'PROGRAM_STAGE' THEN
2617 OPEN c_pstage (p_usec_rsv_rec.preference_code);
2618 FETCH c_pstage INTO c_pstage_rec;
2619 IF c_pstage%NOTFOUND THEN
2620 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2621 p_usec_rsv_rec.status := 'E';
2622 END IF;
2623 CLOSE c_pstage;
2624 END IF;
2625
2626 --Validation when priority value as Program .
2627 IF p_usec_rsv_rec.priority_value = 'PROGRAM' THEN
2628 OPEN c_prog (p_usec_rsv_rec.preference_code,p_usec_rsv_rec.preference_version);
2629 FETCH c_prog INTO c_prog_rec;
2630 IF c_prog%NOTFOUND THEN
2631 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2632 p_usec_rsv_rec.status := 'E';
2633 END IF;
2634 CLOSE c_prog;
2635 END IF;
2636
2637 --Validation when priority value as UNIT_SET .
2638 IF p_usec_rsv_rec.priority_value = 'UNIT_SET' THEN
2639 OPEN c_unit_set (p_usec_rsv_rec.preference_code,p_usec_rsv_rec.preference_version);
2640 FETCH c_unit_set INTO c_unit_set_rec;
2641 IF c_unit_set%NOTFOUND THEN
2642 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2643 p_usec_rsv_rec.status := 'E';
2644 END IF;
2645 CLOSE c_unit_set;
2646 END IF;
2647
2648 END IF;
2649
2650 END validate_usec_rsvprf;
2651
2652
2653 PROCEDURE validate_usec_wlstprf(p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,
2654 p_insert_update IN VARCHAR2) AS
2655
2656 /***********************************************************************************************
2657 Created By : Sommukhe
2658 Date Created By:
2659 Purpose : Check if waitlist preference related validation are passed.
2660
2661 Known limitations,enhancements,remarks:
2662 Change History (in reverse chronological order)
2663 Who When What
2664 sommukhe 16-FEB-2006 Bug#3094371, replaced IGS_OR_UNIT by igs_or_inst_org_base_v for cursor c_org
2665 ********************************************************************************************** */
2666
2667 CURSOR c_clstd(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2668 SELECT 'X'
2669 FROM igs_pr_class_std
2670 WHERE closed_ind = 'N'
2671 AND class_standing = cp_preference_code;
2672
2673 c_clstd_rec c_clstd%ROWTYPE;
2674
2675 CURSOR c_pstage(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2676 SELECT 'X'
2677 FROM igs_ps_stage_type
2678 WHERE closed_ind = 'N'
2679 AND course_stage_type = cp_preference_code;
2680
2681 c_pstage_rec c_pstage%ROWTYPE;
2682
2683 CURSOR c_prog(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE,
2684 cp_preference_version igs_ps_rsv_usec_prf.preference_version%TYPE) IS
2685 SELECT 'X'
2686 FROM igs_ps_ver pv, igs_ps_stat pvst
2687 WHERE pvst.course_status = pv.course_status
2688 AND pvst.s_course_status <> 'INACTIVE'
2689 AND pv.course_cd=cp_preference_code
2690 AND pv.version_number=cp_preference_version;
2691
2692 c_prog_rec c_prog%ROWTYPE;
2693
2694 CURSOR c_unit_set(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE,
2695 cp_preference_version igs_ps_rsv_usec_prf.preference_version%TYPE) IS
2696 SELECT 'X'
2697 FROM igs_en_unit_set us, igs_en_unit_set_stat uss
2698 WHERE us.unit_set_status = uss.unit_set_status
2699 AND uss.s_unit_set_status <> 'INACTIVE'
2700 AND us.unit_set_cd = cp_preference_code
2701 AND us.version_number = cp_preference_version;
2702
2703 c_unit_set_rec c_unit_set%ROWTYPE;
2704
2705 CURSOR c_org(cp_preference_code igs_ps_rsv_usec_prf.preference_code%TYPE) IS
2706 SELECT 'X'
2707 FROM igs_or_inst_org_base_v a, igs_or_status b
2708 WHERE a.party_number = cp_preference_code
2709 AND a.org_status = b.org_status
2710 AND b.s_org_status <> 'INACTIVE';
2711 c_org_rec c_org%ROWTYPE;
2712
2713 BEGIN
2714
2715 IF p_insert_update = 'I' THEN
2716
2717 --validation when priority value as Org unit
2718 IF p_usec_wlst_rec.priority_value = 'ORG_UNIT' THEN
2719 OPEN c_org (p_usec_wlst_rec.preference_code);
2720 FETCH c_org INTO c_org_rec;
2721 IF c_org%NOTFOUND THEN
2722 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2723 p_usec_wlst_rec.status := 'E';
2724 END IF;
2725 CLOSE c_org;
2726 END IF;
2727
2728
2729 --validation when priority value as Class standing
2730 IF p_usec_wlst_rec.priority_value = 'CLASS_STD' THEN
2731 OPEN c_clstd (p_usec_wlst_rec.preference_code);
2732 FETCH c_clstd INTO c_clstd_rec;
2733 IF c_clstd%NOTFOUND THEN
2734 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2735 p_usec_wlst_rec.status := 'E';
2736 END IF;
2737 CLOSE c_clstd;
2738 END IF;
2739
2740 --Validation when priority value as Program stage.
2741 IF p_usec_wlst_rec.priority_value = 'PROGRAM_STAGE' THEN
2742 OPEN c_pstage (p_usec_wlst_rec.preference_code);
2743 FETCH c_pstage INTO c_pstage_rec;
2744 IF c_pstage%NOTFOUND THEN
2745 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2746 p_usec_wlst_rec.status := 'E';
2747 END IF;
2748 CLOSE c_pstage;
2749 END IF;
2750
2751 --Validation when priority value as Program .
2752 IF p_usec_wlst_rec.priority_value = 'PROGRAM' THEN
2753 OPEN c_prog (p_usec_wlst_rec.preference_code,p_usec_wlst_rec.preference_version);
2754 FETCH c_prog INTO c_prog_rec;
2755 IF c_prog%NOTFOUND THEN
2756 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2757 p_usec_wlst_rec.status := 'E';
2758 END IF;
2759 CLOSE c_prog;
2760 END IF;
2761
2762 --Validation when priority value as UNIT_SET .
2763 IF p_usec_wlst_rec.priority_value = 'UNIT_SET' THEN
2764 OPEN c_unit_set (p_usec_wlst_rec.preference_code,p_usec_wlst_rec.preference_version);
2765 FETCH c_unit_set INTO c_unit_set_rec;
2766 IF c_unit_set%NOTFOUND THEN
2767 igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
2768 p_usec_wlst_rec.status := 'E';
2769 END IF;
2770 CLOSE c_unit_set;
2771 END IF;
2772
2773 END IF;
2774
2775
2776 END validate_usec_wlstprf;
2777
2778
2779 --Validations for Unit section waitlist
2780 PROCEDURE validate_usec_wlstpri(p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,
2781 p_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE,
2782 p_insert_update VARCHAR2)
2783 AS
2784 /***********************************************************************************************
2785 Created By : Sommukhe
2786 Date Created By:
2787 Purpose : Check if Waitlist is allowed and if priority value is 'PERSON_GRP'
2788
2789 Known limitations,enhancements,remarks:
2790 Change History (in reverse chronological order)
2791 Who When What
2792 ********************************************************************************************** */
2793 CURSOR c_wlst_allow (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
2794 SELECT waitlist_allowed
2795 FROM igs_ps_usec_lim_wlst
2796 WHERE uoo_id = cp_n_uoo_id;
2797
2798 c_wlst_allow_rec c_wlst_allow%ROWTYPE;
2799
2800 CURSOR c_wlst_allow_pat (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
2801 SELECT 'X'
2802 FROM igs_ps_unit_ofr_pat_all a, igs_ps_unit_ofr_opt_all b
2803 WHERE b.uoo_id = cp_n_uoo_id
2804 AND a.unit_cd=b.unit_cd
2805 AND a.version_number=b.version_number
2806 AND a.cal_type=b.cal_type
2807 AND a.ci_sequence_number=b.ci_sequence_number
2808 AND waitlist_allowed='Y';
2809 l_c_var VARCHAR2(1);
2810 l_c_message VARCHAR2(30);
2811
2812 BEGIN
2813
2814 -- Check if unit status is inactive.
2815 IF NOT igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_wlst_rec.unit_cd,p_usec_wlst_rec.version_number,l_c_message) THEN
2816 fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
2817 fnd_msg_pub.add;
2818 p_usec_wlst_rec.status := 'E';
2819 END IF;
2820
2821 --Check if the unit section is NOT_OFFERED
2822 IF NOT igs_ps_validate_lgcy_pkg.check_not_offered_usec_status(p_n_uoo_id) THEN
2823 fnd_message.set_name ( 'IGS', 'IGS_PS_IMP_NOT_ALD_NOT_OFFERED' );
2824 fnd_msg_pub.add;
2825 p_usec_wlst_rec.status := 'E';
2826 END IF;
2827
2828 --Waitlist should be allowed at section level if record exists else at pattern level such that priorities and preferences
2829 --can be imported
2830 OPEN c_wlst_allow (p_n_uoo_id);
2831 FETCH c_wlst_allow INTO c_wlst_allow_rec;
2832 IF c_wlst_allow%FOUND THEN
2833 IF c_wlst_allow_rec.waitlist_allowed = 'N' THEN
2834 fnd_message.set_name ( 'IGS', 'IGS_PS_WAITLIST_NOT_ALLOWED' );
2835 fnd_msg_pub.add;
2836 p_usec_wlst_rec.status := 'E';
2837 END IF;
2838 ELSE
2839 OPEN c_wlst_allow_pat(p_n_uoo_id);
2840 FETCH c_wlst_allow_pat INTO l_c_var;
2841 IF c_wlst_allow_pat%NOTFOUND THEN
2842 fnd_message.set_name ( 'IGS', 'IGS_PS_WAITLIST_NOT_ALLOWED' );
2843 fnd_msg_pub.add;
2844 p_usec_wlst_rec.status := 'E';
2845 END IF;
2846 CLOSE c_wlst_allow_pat;
2847 END IF;
2848 CLOSE c_wlst_allow;
2849
2850 IF p_insert_update = 'I' THEN
2851 IF p_usec_wlst_rec.priority_number IS NULL THEN
2852 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_NUMBER', 'LEGACY_TOKENS', FALSE);
2853 p_usec_wlst_rec.status := 'E';
2854 END IF;
2855 END IF;
2856
2857 END validate_usec_wlstpri;
2858
2859
2860 END igs_ps_validate_generic_pkg;