DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_GEN_003

Source


1 PACKAGE BODY IGS_PS_GEN_003 AS
2 /* $Header: IGSPS03B.pls 120.6 2006/02/17 02:48:40 sarakshi ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --sarakshi    21-oct-2003     Enh#3052452,added function enrollment_for_uoo_check
7   --sarakshi    25-Feb-2003     Bug#2797116,modified curosr gc_cd_and_vn_passed and gc_coo_id_passed
8   --                            in crsp_get_coo_key procedure,added delete_flag check in the where clause
9   --shtatiko    05-FEB-2003     Bug# 2550392, Modified crsp_ins_ci_cop procedure and added
10   --                            log_parameters procedures.
11   --smadathi    28-AUG-2001     Bug No. 1956374 .The call to igs_ps_val_cop.genp_val_staff_prsn
12   --                            is changed to igs_ad_val_acai.genp_val_staff_prsn
13   -------------------------------------------------------------------------------------------
14  -- Bug # 1956374 Procedure assp_val_gs_cur_fut reference is changed
15 
16 PROCEDURE log_parameters ( p_c_param_name    VARCHAR2 ,
17                            p_c_param_value   VARCHAR2
18                          ) IS
19 /***********************************************************************************************
20 
21   Created By     :  SHTATIKO
22   Date Created By:  05-FEB-2003
23 
24   Purpose        :  To log the parameters. This has been added as part of Bug Fix 2550392.
25 
26   Known limitations,enhancements,remarks:
27   Change History
28   Who     When       What
29 
30 ********************************************************************************************** */
31 BEGIN
32   fnd_message.set_name('IGS','IGS_PS_DEL_PRIORITY_LOG');
33   fnd_message.set_token('PARAMETER_NAME', p_c_param_name );
34   fnd_message.set_token('PARAMETER_VAL' , p_c_param_value ) ;
35   fnd_file.put_line(fnd_file.LOG,FND_MESSAGE.GET);
36 END log_parameters  ;
37 
38 
39 PROCEDURE crsp_get_coo_key(
40   p_coo_id IN OUT NOCOPY NUMBER ,
41   p_course_cd IN OUT NOCOPY VARCHAR2 ,
42   p_version_number IN OUT NOCOPY NUMBER ,
43   p_cal_type IN OUT NOCOPY VARCHAR2 ,
44   p_location_cd IN OUT NOCOPY VARCHAR2 ,
45   p_attendance_mode IN OUT NOCOPY VARCHAR2 ,
46   p_attendance_type IN OUT NOCOPY VARCHAR2 )
47 AS
48 lv_param_values		VARCHAR2(1080);
49 BEGIN
50 DECLARE
51 
52 	gv_cd_and_vn_passed	IGS_PS_OFR_OPT.coo_id%TYPE;
53 	gv_coo_id_passed	IGS_PS_OFR_OPT%ROWTYPE;
54 	-- this is used when the course_cd and version_number
55 	-- are passed
56 	CURSOR gc_cd_and_vn_passed IS
57 		SELECT 	coo_id
58 		FROM	IGS_PS_OFR_OPT
59 		WHERE	course_cd = p_course_cd AND
60 			version_number = p_version_number AND
61 			cal_type = p_cal_type AND
62 			location_cd = p_location_cd AND
63 			attendance_mode = p_attendance_mode AND
64 			attendance_type = p_attendance_type AND
65                         delete_flag = 'N';
66 	-- this is used when the coo_id is passed
67 	CURSOR gc_coo_id_passed IS
68 		SELECT 	*
69 		FROM 	IGS_PS_OFR_OPT
70 		WHERE	coo_id = p_coo_id
71                 AND     delete_flag = 'N';
72 BEGIN
73 	-- if only the course_cd was enetered
74 	IF(NVL(p_course_cd, 'NO_VALUE') <> 'NO_VALUE') THEN
75 		OPEN 	gc_cd_and_vn_passed;
76 		FETCH	gc_cd_and_vn_passed INTO gv_cd_and_vn_passed;
77 		-- return the coo_id
78 		IF(gc_cd_and_vn_passed%ROWCOUNT <> 0) THEN
79 			CLOSE gc_cd_and_vn_passed;
80 			p_coo_id := gv_cd_and_vn_passed;
81 		END IF;
82 	ELSE
83 		-- if only the coo_id is entered
84 		IF p_coo_id IS NOT NULL THEN
85 			OPEN 	gc_coo_id_passed;
86 			FETCH	gc_coo_id_passed INTO gv_coo_id_passed;
87 			-- return the coo_id, course_cd, version_number,
88 			-- IGS_CA_TYPE, location_cd, attendance_mode, attendance_type
89 			IF(gc_coo_id_passed%ROWCOUNT <> 0) THEN
90 				CLOSE gc_coo_id_passed;
91 				p_course_cd := gv_coo_id_passed.course_cd;
92 				p_version_number := gv_coo_id_passed.version_number;
93 				p_cal_type := gv_coo_id_passed.cal_type;
94 				p_location_cd := gv_coo_id_passed.location_cd;
95 				p_attendance_mode := gv_coo_id_passed.attendance_mode;
96 				p_attendance_type := gv_coo_id_passed.attendance_type;
97 			END IF;
98 		ELSE
99 			-- Do nothing.
100 			NULL;
101 		END IF;
102 	END IF;
103 EXCEPTION
104 	WHEN OTHERS THEN
105 		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
106 		Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_get_coo_key');
107 		IGS_GE_MSG_STACK.ADD;
108 		lv_param_values := to_char(p_coo_id)||','||p_course_cd||','||to_char(p_version_number)||','||p_cal_type||','
109 					||p_location_cd||','||p_attendance_mode||','||p_attendance_type;
110 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
111 		Fnd_Message.Set_Token('VALUE',lv_param_values);
112 		IGS_GE_MSG_STACK.ADD;
113 		App_Exception.Raise_Exception;
114 END;
115 END crsp_get_coo_key;
116 
117 
118 PROCEDURE crsp_get_cop_key(
119   p_cop_id IN OUT NOCOPY NUMBER ,
120   p_course_cd IN OUT NOCOPY VARCHAR2 ,
121   p_version_number IN OUT NOCOPY NUMBER ,
122   p_cal_type IN OUT NOCOPY VARCHAR2 ,
123   p_ci_sequence_number IN OUT NOCOPY NUMBER ,
124   p_location_cd IN OUT NOCOPY VARCHAR2 ,
125   p_attendance_mode IN OUT NOCOPY VARCHAR2 ,
126   p_attendance_type IN OUT NOCOPY VARCHAR2 )
127 AS
128 lv_param_values		VARCHAR2(1080);
129 BEGIN
130 DECLARE
131 
132 	gv_cd_and_vn_passed	IGS_PS_OFR_PAT.coo_id%TYPE;
133 	gv_cop_id_passed	IGS_PS_OFR_PAT%ROWTYPE;
134 	-- this is used when the course_cd and version_number
135 	-- are passed
136 	CURSOR gc_cd_and_vn_passed IS
137 		SELECT 	cop_id
138 		FROM	IGS_PS_OFR_PAT
139 		WHERE	course_cd = p_course_cd AND
140 			version_number = p_version_number AND
141 			cal_type = p_cal_type AND
142 			ci_sequence_number = p_ci_sequence_number AND
143 			location_cd = p_location_cd AND
144 			attendance_mode = p_attendance_mode AND
145 			attendance_type = p_attendance_type;
146 	-- this is used when the coo_id is passed
147 	CURSOR gc_cop_id_passed IS
148 		SELECT 	*
149 		FROM 	IGS_PS_OFR_PAT
150 		WHERE	cop_id = p_cop_id;
151 BEGIN
152 	-- if only the course_cd was enetered
153 	IF(NVL(p_course_cd, 'NO_VALUE') <> 'NO_VALUE') THEN
154 		OPEN 	gc_cd_and_vn_passed;
155 		FETCH	gc_cd_and_vn_passed INTO gv_cd_and_vn_passed;
156 		-- return the cop_id
157 		IF(gc_cd_and_vn_passed%ROWCOUNT <> 0) THEN
158 			CLOSE gc_cd_and_vn_passed;
159 			p_cop_id := gv_cd_and_vn_passed;
160 		END IF;
161 	ELSE
162 		-- if only the cop_id is entered
163 		IF p_cop_id IS NOT NULL THEN
164 			OPEN 	gc_cop_id_passed;
165 			FETCH	gc_cop_id_passed INTO gv_cop_id_passed;
166 			-- return the cop_id, course_cd, version_number,
167 			-- IGS_CA_TYPE, ci_sequence_numberlocation_cd,
168 			-- attendance_mode, attendance_type
169 			IF(gc_cop_id_passed%ROWCOUNT <> 0) THEN
170 				CLOSE gc_cop_id_passed;
171 				p_course_cd := gv_cop_id_passed.course_cd;
172 				p_version_number := gv_cop_id_passed.version_number;
173 				p_cal_type := gv_cop_id_passed.cal_type;
174 				p_ci_sequence_number := gv_cop_id_passed.ci_sequence_number;
175 				p_location_cd := gv_cop_id_passed.location_cd;
176 				p_attendance_mode := gv_cop_id_passed.attendance_mode;
177 				p_attendance_type := gv_cop_id_passed.attendance_type;
178 			END IF;
179 		ELSE
180 			-- Do nothing.
181 			NULL;
182 		END IF;
183 	END IF;
184 EXCEPTION
185 
186 	WHEN OTHERS THEN
187 		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
188 		Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_get_cop_key');
189 		IGS_GE_MSG_STACK.ADD;
190 		lv_param_values := to_char(p_cop_id)||','||p_course_cd||','||to_char(p_version_number)||','||p_cal_type||','
191 					||to_char(p_ci_sequence_number)||','||p_location_cd||','||p_attendance_mode||','||p_attendance_type;
192 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
193 		Fnd_Message.Set_Token('VALUE',lv_param_values);
194 		IGS_GE_MSG_STACK.ADD;
195 		App_Exception.Raise_Exception;
196 END;
197 END crsp_get_cop_key;
198 
199 FUNCTION crsp_get_cous_ind(
200   p_course_cd IN VARCHAR2 ,
201   p_crv_version_number IN NUMBER ,
202   p_cal_type IN VARCHAR2 ,
203   p_unit_set_cd IN VARCHAR2 )
204 RETURN VARCHAR2 AS
205 lv_param_values		VARCHAR2(1080);
206 BEGIN	-- crsp_get_cous_ind
207 	-- This module returns Y if the IGS_PS_COURSE offering and IGS_PS_UNIT set exists
208 	-- in the IGS_PS_OFR_UNIT_SET table.
209 DECLARE
210 
211 	v_dummy		VARCHAR2(1);
212 	CURSOR c_cous IS
213 		SELECT	'X'
214 		FROM	IGS_PS_OFR_UNIT_SET	cous
215 		WHERE	cous.course_cd		= p_course_cd		AND
216 			cous.crv_version_number	= p_crv_version_number	AND
217 			cous.cal_type		= p_cal_type		AND
218 			cous.unit_set_cd		= p_unit_set_cd;
219 BEGIN
220 	OPEN c_cous;
221 	FETCH c_cous INTO v_dummy;
222 	IF c_cous%FOUND THEN
223 		CLOSE c_cous;
224 		RETURN 'Y';
225 	ELSE
226 		CLOSE c_cous;
227 		RETURN 'N';
228 	END IF;
229 EXCEPTION
230 	WHEN OTHERS THEN
231 		IF c_cous%ISOPEN THEN
232 			CLOSE c_cous;
233 		END IF;
234 		App_Exception.Raise_Exception;
235 END;
236 EXCEPTION
237 	WHEN OTHERS THEN
238 		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
239 		Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_get_cous_ind');
240 		IGS_GE_MSG_STACK.ADD;
241 		lv_param_values := p_course_cd||','||to_char(p_crv_version_number)||','||p_cal_type||','||p_unit_set_cd;
242 
243 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
244 		Fnd_Message.Set_Token('VALUE',lv_param_values);
245 		IGS_GE_MSG_STACK.ADD;
246 		App_Exception.Raise_Exception;
247 END crsp_get_cous_ind;
248 
249 FUNCTION crsp_get_cous_subind(
250   p_course_cd IN VARCHAR2 ,
251   p_crv_version_number IN NUMBER ,
252   p_cal_type IN VARCHAR2 ,
253   p_unit_set_cd IN VARCHAR2 ,
254   p_us_version_number IN NUMBER )
255 RETURN VARCHAR2 AS
256 lv_param_values		VARCHAR2(1080);
257 BEGIN	-- crsp_get_cous_subind
258 	-- This module fetches the value for the only_as_sub_ind for a IGS_PS_COURSE offering
259 	-- IGS_PS_UNIT set from the IGS_PS_OFR_UNIT_SET table.
260 DECLARE
261 
262 	v_only_as_sub_ind	IGS_PS_OFR_UNIT_SET.only_as_sub_ind%TYPE;
263 	CURSOR c_cous IS
264 		SELECT	cous.only_as_sub_ind
265 		FROM	IGS_PS_OFR_UNIT_SET	cous
266 		WHERE	cous.course_cd		= p_course_cd		AND
267 			cous.crv_version_number	= p_crv_version_number	AND
268 			cous.cal_type		= p_cal_type		AND
269 			cous.unit_set_cd	= p_unit_set_cd		AND
270 			cous.us_version_number	= p_us_version_number;
271 BEGIN
272 	OPEN c_cous;
273 	FETCH c_cous INTO v_only_as_sub_ind;
274 	IF c_cous%FOUND THEN
275 		CLOSE c_cous;
276 		RETURN v_only_as_sub_ind;
277 	ELSE
278 		CLOSE c_cous;
279 		RETURN NULL;
280 	END IF;
281 EXCEPTION
282 	WHEN OTHERS THEN
283 		IF c_cous%ISOPEN THEN
284 			CLOSE c_cous;
285 		END IF;
286 		App_Exception.Raise_Exception;
287 END;
288 EXCEPTION
289 	WHEN OTHERS THEN
290 
291 		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
292 		Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_get_cous_subind');
293 		IGS_GE_MSG_STACK.ADD;
294 		lv_param_values := p_course_cd||','||to_char(p_crv_version_number)||','||p_cal_type||','||p_unit_set_cd||
295 					','||to_char(p_us_version_number);
296 
297 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
298 		Fnd_Message.Set_Token('VALUE',lv_param_values);
299 		IGS_GE_MSG_STACK.ADD;
300 		App_Exception.Raise_Exception;
301 END crsp_get_cous_subind;
302 
303 FUNCTION crsp_ins_coi_cop(
304   p_course_cd IN VARCHAR2 ,
305   p_version_number IN NUMBER ,
306   p_source_cal_type IN VARCHAR2 ,
307   p_source_sequence_number IN NUMBER ,
308   p_dest_cal_type IN VARCHAR2 ,
309   p_dest_sequence_number IN NUMBER ,
310   p_message_name OUT NOCOPY VARCHAR2 )
311 RETURN boolean AS
312  lv_param_values		VARCHAR2(1080);
313 BEGIN   -- crsp_ins_coi_cop
314 DECLARE
315 
316         v_inserted_cnt          NUMBER(4);
317         v_check                 CHAR;
318         v_message_name          varchar2(30);
319         v_gs_version_number     IGS_AS_GRD_SCHEMA.version_number%TYPE;
320         CURSOR c_course_offering_pattern IS
321                 SELECT  location_cd,
322                         attendance_mode,
323                         attendance_type,
324                         cop_id,
325                         coo_id,
326                         offered_ind,
327                         entry_point_ind,
328                         pre_enrol_units_ind,
329                         enrollable_ind,
330                         ivrs_available_ind,
331                         min_entry_ass_score,
332                         guaranteed_entry_ass_scr,
333                         max_cross_faculty_cp,
334                         max_cross_location_cp,
335                         max_cross_mode_cp,
336                         max_hist_cross_faculty_cp,
337                         adm_ass_officer_person_id,
338                         adm_contact_person_id,
339                         grading_schema_cd,
340                         gs_version_number
341                 FROM    IGS_PS_OFR_PAT
342                 WHERE   course_cd               = p_course_cd           AND
343                         version_number          = p_version_number      AND
344                         cal_type                = p_source_cal_type     AND
345                         ci_sequence_number      = p_source_sequence_number;
346         v_cop_rec               c_course_offering_pattern%ROWTYPE;
347         CURSOR c_check_cop_exist IS
348                 SELECT  'x'
349                 FROM    IGS_PS_OFR_PAT
350                 WHERE   course_cd               = p_course_cd                   AND
351                         version_number          = p_version_number              AND
352                         cal_type                = p_dest_cal_type               AND
353                         ci_sequence_number      = p_dest_sequence_number        AND
354                         location_cd             = v_cop_rec.location_cd         AND
355                         attendance_type         = v_cop_rec.attendance_type     AND
356                         attendance_mode         = v_cop_rec.attendance_mode;
357         CURSOR c_cop_sequence_number IS
358                 SELECT  IGS_PS_OFR_PAT_COP_ID_S.NEXTVAL
359                 FROM    DUAL;
360         CURSOR c_latest_gs_version (
361                 cp_gs_cd                IGS_AS_GRD_SCHEMA.grading_schema_cd%TYPE) IS
362                 SELECT  MAX(gs.version_number)
363                 FROM    IGS_AS_GRD_SCHEMA  gs
364                 WHERE   gs.grading_schema_cd    = cp_gs_cd;
365 
366 	x_rowid			VARCHAR2(25);
367 BEGIN
368         p_message_name := NULL;
369         v_inserted_cnt := 0; -- number of records inserted
370         -- Rollover IGS_PS_COURSE offering patterns from
371         -- source IGS_PS_COURSE offering instance
372         --       (p_course_cd,p_version_number,
373         --        p_source_cal_type,p_source_sequence_number) to
374         -- destination IGS_PS_COURSE offering instance
375         --      (p_course_cd,p_version_number,
376         --       p_dest_cal_type,p_dest_sequence_number)
377         OPEN c_course_offering_pattern;
378         LOOP
379                 FETCH c_course_offering_pattern INTO v_cop_rec;
380                 EXIT WHEN c_course_offering_pattern%NOTFOUND;
381                 -- Check for closed IGS_AD_LOCATION code,
382                 --      closed attendance mode,
383                 --      and closed attendance type
384 
385                 -- As part of the bug# 1956374 changed to the below call from IGS_PS_VAL_COO.crsp_val_loc_cd
386                 IF (IGS_PS_VAL_UOO.crsp_val_loc_cd (
387                                 v_cop_rec.location_cd,
388                                 p_message_name) = TRUE)  AND
389                    (IGS_PS_VAL_COo.crsp_val_coo_am (
390                                 v_cop_rec.attendance_mode,
391                                 p_message_name) = TRUE)  AND
392                    (IGS_PS_VAL_COo.crsp_val_coo_att (
393                                 v_cop_rec.attendance_type,
394                                 p_message_name) = TRUE)  THEN
395                         OPEN c_check_cop_exist;
396                         FETCH c_check_cop_exist INTO v_check;
397                         -- Only rollover if the record to be inserted not exists
398                         IF (c_check_cop_exist%NOTFOUND) THEN
399                                 CLOSE c_check_cop_exist;
400                                 -- get the next sequence number
401                                 OPEN c_cop_sequence_number;
402                                 FETCH c_cop_sequence_number INTO v_cop_rec.cop_id;
403                                 CLOSE c_cop_sequence_number;
404                                 --  get the latest grading schema version number
405                                 OPEN c_latest_gs_version (
406                                                 v_cop_rec.grading_schema_cd);
407                                 FETCH c_latest_gs_version INTO v_gs_version_number;
408                                 CLOSE c_latest_gs_version;
409                                 IF IGS_AS_VAL_GSG.assp_val_gs_cur_fut (
410                                                         v_cop_rec.grading_schema_cd,
411                                                         v_gs_version_number,
412                                                         v_message_name) = FALSE THEN
413                                         -- The latest grading schema fails the current or vuture valildation
414                                         v_cop_rec.grading_schema_cd := NULL;
415                                         v_cop_rec.gs_version_number := NULL;
416                                 ELSE
417                                         v_cop_rec.gs_version_number := v_gs_version_number;
418                                 END IF;
419                                 -- check if a IGS_PE_PERSON fails the staff IGS_PE_PERSON validation
420                                 IF igs_ad_val_acai.genp_val_staff_prsn (
421                                                 v_cop_rec.adm_ass_officer_person_id,
422                                                 v_message_name) = FALSE THEN
423                                         v_cop_rec.adm_ass_officer_person_id := NULL;
424                                 END IF;
425                                 IF igs_ad_val_acai.genp_val_staff_prsn (
426                                                 v_cop_rec.adm_contact_person_id,
427                                                 v_message_name) = FALSE THEN
428                                         v_cop_rec.adm_contact_person_id := NULL;
429                                 END IF;
430 
431 
432 					  IGS_PS_OFR_PAT_PKG.Insert_Row(
433 						X_ROWID				=>   x_rowid,
434 						X_COURSE_CD                   => 	p_course_cd,
435 						X_CI_SEQUENCE_NUMBER          => 	 p_dest_sequence_number,
436 						X_CAL_TYPE                    => 	 p_dest_cal_type,
437 						X_VERSION_NUMBER              => 	 p_version_number,
438 						X_LOCATION_CD                 => 	 v_cop_rec.location_cd,
439 						X_ATTENDANCE_TYPE             => 	 v_cop_rec.attendance_type,
440 						X_ATTENDANCE_MODE             => 	 v_cop_rec.attendance_mode,
441 						X_COP_ID                      => 	 v_cop_rec.cop_id,
442 						X_COO_ID                      => 	 v_cop_rec.coo_id,
443 						X_OFFERED_IND                 => 	 v_cop_rec.offered_ind,
444 						X_CONFIRMED_OFFERING_IND      =>	 NULL,
445 						X_ENTRY_POINT_IND             => 	 v_cop_rec.entry_point_ind,
446 						X_PRE_ENROL_UNITS_IND         => 	 v_cop_rec.pre_enrol_units_ind,
447 						X_ENROLLABLE_IND              => 	 v_cop_rec.enrollable_ind,
448 						X_IVRS_AVAILABLE_IND          => 	 v_cop_rec.ivrs_available_ind,
449 						X_MIN_ENTRY_ASS_SCORE         => 	 v_cop_rec.min_entry_ass_score,
450 						X_GUARANTEED_ENTRY_ASS_SCR    => 	 v_cop_rec.guaranteed_entry_ass_scr,
451 						X_MAX_CROSS_FACULTY_CP        => 	 v_cop_rec.max_cross_faculty_cp,
452 						X_MAX_CROSS_LOCATION_CP       => 	 v_cop_rec.max_cross_location_cp,
453 						X_MAX_CROSS_MODE_CP           => 	 v_cop_rec.max_cross_mode_cp,
454 						X_MAX_HIST_CROSS_FACULTY_CP	=> v_cop_rec.max_hist_cross_faculty_cp,
455 						X_ADM_ASS_OFFICER_PERSON_ID	=> v_cop_rec.adm_ass_officer_person_id,
456 						X_ADM_CONTACT_PERSON_ID       => 	 v_cop_rec.adm_contact_person_id,
457 						X_GRADING_SCHEMA_CD           => 	 v_cop_rec.grading_schema_cd,
458 						X_GS_VERSION_NUMBER           => 	 v_cop_rec.gs_version_number,
459 						X_MODE                        => 	 'R');
460 
461 
462                                 v_inserted_cnt := v_inserted_cnt + 1;
463                         ELSE
464                                 CLOSE c_check_cop_exist;
465                         END IF; -- dest record does not exist
466                 END IF; -- check closed IGS_AD_LOCATION code
467         END LOOP;
468         -- No record is selected
469         IF (c_course_offering_pattern%ROWCOUNT = 0) THEN
470                 p_message_name := 'IGS_PS_NO_POP_TOBE_ENROLLED';
471         -- No record is inserted
472         ELSIF (v_inserted_cnt = 0) THEN
473                 p_message_name := 'IGS_PS_PRGOFFR_ROLLED_EXIST';
474         -- Some records are inserted
475         ELSIF (c_course_offering_pattern%ROWCOUNT <> v_inserted_cnt) THEN
476                 p_message_name := 'IGS_PS_PARTIALCREATION_OFFPAT';
477         -- All records are inserted
478         ELSIF (c_course_offering_pattern%ROWCOUNT = v_inserted_cnt) THEN
479                 p_message_name := 'IGS_PS_SUCCESS_CREATION_POP';
480         END IF;
481         CLOSE c_course_offering_pattern;
482         RETURN TRUE;
483 EXCEPTION
484         WHEN OTHERS THEN
485                 IF c_course_offering_pattern%ISOPEN THEN
486                         CLOSE c_course_offering_pattern;
487                 END IF;
488                 IF c_cop_sequence_number%ISOPEN THEN
489                         CLOSE c_cop_sequence_number;
490                 END IF;
491                 IF c_check_cop_exist%ISOPEN THEN
492                         CLOSE c_check_cop_exist;
493                 END IF;
494                 IF c_latest_gs_version%ISOPEN THEN
495                         CLOSE c_latest_gs_version;
496                 END IF;
497                 App_Exception.Raise_Exception;
498 END;
499 EXCEPTION
500         WHEN OTHERS THEN
501 
502                 Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
503                 Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_ins_coi_cop');
504 		IGS_GE_MSG_STACK.ADD;
505 		lv_param_values := p_course_cd||','||to_char(p_version_number)||','||p_source_cal_type||','
506 					||to_char(p_source_sequence_number)||','||p_dest_cal_type||','||
507 					to_char(p_dest_sequence_number)||','||p_message_name;
508 
509 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
510 		Fnd_Message.Set_Token('VALUE',lv_param_values);
511 		IGS_GE_MSG_STACK.ADD;
512 		App_Exception.Raise_Exception;
513 END crsp_ins_coi_cop;
514 
515 PROCEDURE CRSP_INS_CI_COP (
516 errbuf  out NOCOPY  varchar2,
517 retcode out NOCOPY  number,
518 p_source_cal  IN VARCHAR2 ,
519 p_dest_cal  IN VARCHAR2 ,
520 p_org_unit  IN VARCHAR2,
521 p_org_id     IN NUMBER) AS
522 /*
523   WHO             WHEN             WHAT
524   shtatiko        05-FEB-2003      Bug# 2550392, Added code to log information wherever needed to make
525                                    log file more informative.
526 */
527 
528 p_source_cal_type                    	igs_ca_inst.cal_type%type ;
529 p_source_sequence_number     	igs_ca_inst.sequence_number%type;
530 p_dest_cal_type                        	igs_ca_inst.cal_type%type;
531 p_dest_sequence_number         	igs_ca_inst.sequence_number%type;
532 p_org_unit_cd		         	igs_or_unit.org_unit_cd%type;
533 	v_check				CHAR;
534 	v_coi_rec			IGS_PS_OFR_INST%ROWTYPE;
535 	v_message			VARCHAR2(30);
536 	gv_ci_start_dt			IGS_PS_OFR_INST.ci_start_dt%TYPE;
537 	gv_ci_end_dt			IGS_PS_OFR_INST.ci_end_dt%TYPE;
538 	v_rec_inserted_cnt		NUMBER(4) := 0;
539 	cst_none_cop_rec_inserted	BOOLEAN := TRUE;
540 	cst_partial_cop_rec_inserted	BOOLEAN := TRUE;
541 	cst_all_cop_rec_inserted		BOOLEAN := TRUE;
542 	cst_none_coi_rec_inserted		BOOLEAN := FALSE;
543 	cst_partial_coi_rec_inserted	BOOLEAN := FALSE;
544 	cst_all_coi_rec_inserted		BOOLEAN := FALSE;
545 
546 	CURSOR c_check_cal_type_exist IS
547 		SELECT 'x'
548 		FROM	IGS_CA_TYPE
549 		WHERE 	cal_type = p_source_cal_type;
550 	CURSOR c_check_cal_instance_exist(
551 			cp_cal_type		IGS_PS_OFR_INST.cal_type%TYPE,
552 			cp_sequence_number	IGS_PS_OFR_INST.version_number%TYPE) IS
553 		SELECT	'x'
554 		FROM	IGS_CA_INST
555 		WHERE	cal_type	= cp_cal_type	AND
556 			sequence_number	= cp_sequence_number;
557 	CURSOR c_get_cal_instance_dates(
558 			cp_cal_type		IGS_PS_OFR_INST.cal_type%TYPE,
559 			cp_sequence_number	IGS_PS_OFR_INST.version_number%TYPE) IS
560 		SELECT	start_dt, end_dt
561 		FROM	IGS_CA_INST
562 		WHERE	cal_type	= cp_cal_type	AND
563 			sequence_number	= cp_sequence_number;
564 	CURSOR c_course_offering_instance IS
565 		SELECT	coi.course_cd,
566 			coi.version_number,
567 			coi.cal_type,
568 			coi.ci_sequence_number,
569 			coi.ci_start_dt,
570 			coi.ci_end_dt,
571 			coi.min_entry_ass_score,
572 			coi.guaranteed_entry_ass_scr,
573 			coi.created_by,
574 			coi.creation_date,
575 			coi.last_updated_by,
576 			coi.last_update_date,
577 			coi.last_update_login,
578 			coi.request_id,
579 			coi.PROGRAM_APPLICATION_ID,
580 			coi.PROGRAM_ID,
581 			coi.PROGRAM_UPDATE_DATE
582 		FROM	IGS_PS_OFR_INST	coi,
583 			IGS_PS_VER			cv
584 		WHERE	coi.cal_type=p_source_cal_type			AND
585 			coi.ci_sequence_number= 	p_source_sequence_number	AND
586 			cv.course_cd	= 	coi.course_cd			AND
587 			cv.version_number= 	coi.version_number		AND
588 			cv.expiry_dt 		IS NULL			AND
589 			cv.responsible_org_unit_cd	LIKE 	p_org_unit_cd;
590 	CURSOR c_check_coi_exist (
591 			cp_course_cd		IGS_PS_OFR_INST.course_cd%TYPE,
592 			cp_version_number	IGS_PS_OFR_INST.version_number%TYPE) IS
593 		SELECT	'x'
594 		FROM	IGS_PS_OFR_INST
595 		WHERE	course_cd	= cp_course_cd		AND
596 			version_number	= cp_version_number	AND
597 			cal_type		= p_dest_cal_type	AND
598 			ci_sequence_number	= p_dest_sequence_number;
599 	x_rowid			VARCHAR2(25);
600 	INVALID		EXCEPTION;
601         VALID		EXCEPTION;
602 
603 	l_start_dt      igs_ca_inst.start_dt%TYPE;
604 	l_end_dt        igs_ca_inst.end_dt%TYPE;
605 
606 BEGIN
607 -- Parameter Validation
608 -- Adding the default org id parameter as part of MULTI-ORG  changes
609              IGS_GE_GEN_003.SET_ORG_ID(p_org_id);
610 
611 -- Extract source calendar
612               p_source_cal_type 	       	:= RTRIM(SUBSTR(p_source_cal, 102, 10));
613               p_source_sequence_number 	:= TO_NUMBER(RTRIM(SUBSTR(p_source_cal, 113, 8)));
614 
615 -- Extract destination calendar
616               p_dest_cal_type			 := RTRIM(SUBSTR(p_dest_cal, 102, 10));
617               p_dest_sequence_number 		:= TO_NUMBER(RTRIM(SUBSTR(p_dest_cal, 113, 8)));
618 
619 -- Extract org_unit_cd
620         p_org_unit_cd 			:= NVL(SUBSTR(p_org_unit, 1, 10),'%');
621 
622 -- Log all the parameters passed. This has been added as part of Bug# 2550392 by shtatiko
623 
624   l_start_dt := TO_DATE ( RTRIM(SUBSTR(p_source_cal, 12, 10)), 'DD/MM/YYYY' ) ;
625   l_end_dt := TO_DATE ( RTRIM(SUBSTR(p_source_cal, 23, 10)), 'DD/MM/YYYY' );
626 
627   fnd_file.put_line ( fnd_file.LOG,  ' ' );
628   log_parameters ( p_c_param_name  => igs_ge_gen_004.GENP_GET_LOOKUP ( 'IGS_PS_LOG_PARAMETERS', 'SOURCE_CAL' ),
629                    p_c_param_value => TO_CHAR ( l_start_dt, 'DD-MON-YYYY' ) || ' - ' ||
630 		                      TO_CHAR ( l_end_dt, 'DD-MON-YYYY' ) || ' - ' ||
631 				      p_source_cal_type );
632 
633   l_start_dt := TO_DATE ( RTRIM(SUBSTR(p_dest_cal, 12, 10)), 'DD/MM/YYYY' ) ;
634   l_end_dt := TO_DATE ( RTRIM(SUBSTR(p_dest_cal, 23, 10)), 'DD/MM/YYYY' );
635 
636   log_parameters ( p_c_param_name  => igs_ge_gen_004.GENP_GET_LOOKUP ( 'IGS_PS_LOG_PARAMETERS', 'DEST_CAL' ),
637                    p_c_param_value => TO_CHAR ( l_start_dt, 'DD-MON-YYYY' ) || ' - ' ||
638 		                      TO_CHAR ( l_end_dt, 'DD-MON-YYYY' ) || ' - ' ||
639 				      p_dest_cal_type );
640   log_parameters ( p_c_param_name  => igs_ge_gen_004.GENP_GET_LOOKUP ( 'LEGACY_TOKENS', 'ORG_UNIT_CD' ),
641                    p_c_param_value => p_org_unit_cd );
642   fnd_file.put_line ( fnd_file.LOG,  ' ' );
643   fnd_file.put_line ( fnd_file.LOG,  ' ' );
644 
645 	v_message := NULL;
646 
647 	-- Can only transfer within the same IGS_CA_TYPE
648 	IF (p_source_cal_type <> p_dest_cal_type) THEN
649 		v_message  :='IGS_PS_ROLLOVER_CALINSTANCES';
650 		RAISE invalid;
651 	END IF;
652 
653 
654 	-- Calendar type must exist
655 	OPEN c_check_cal_type_exist;
656 	FETCH c_check_cal_type_exist INTO v_check;
657 	IF (c_check_cal_type_exist%NOTFOUND) THEN
658 		CLOSE c_check_cal_type_exist;
659 		v_message := 'IGS_GE_VAL_DOES_NOT_XS';
660 		RAISE invalid;
661 
662 	END IF;
663 	CLOSE c_check_cal_type_exist;
664 	-- validate the calendar type of IGS_PS_COURSE offering
665 	IF (IGS_PS_VAL_CO.crsp_val_co_cal_type (
666 			p_source_cal_type,
667 			v_message) = FALSE) THEN
668 		RAISE invalid;
669 	END IF;
670 	-- "Source" calendar instance must exist
671 	OPEN c_check_cal_instance_exist(
672 			p_source_cal_type,
673 			p_source_sequence_number);
674 	FETCH c_check_cal_instance_exist INTO v_check;
675 	IF (c_check_cal_instance_exist%NOTFOUND) THEN
676 		CLOSE c_check_cal_instance_exist;
677 		v_message := 'IGS_PS_SRC_CALINST_NOT_EXIST';
678 		RAISE invalid;
679 	END IF;
680 	CLOSE c_check_cal_instance_exist;
681 	-- "Destination" calendar instance must exist and fetch start_dt and end_dt
682 	OPEN c_get_cal_instance_dates(
683 			p_dest_cal_type,
684 			p_dest_sequence_number);
685 	FETCH c_get_cal_instance_dates INTO gv_ci_start_dt, gv_ci_end_dt;
686 	IF (c_get_cal_instance_dates%NOTFOUND) THEN
687 		CLOSE c_get_cal_instance_dates;
688 		v_message := 'IGS_PS_DEST_CAL_INST_NOT_EXIS';
689 		RAISE invalid;
690 	END IF;
691 	CLOSE c_get_cal_instance_dates;
692 	-- "Destination" calendar must be active
693 	IF (IGS_as_VAL_uai.crsp_val_crs_ci (
694 			p_dest_cal_type,
695 			p_dest_sequence_number,
696 			v_message) = FALSE) THEN
697 		RAISE invalid;
698 	END IF;
699 	OPEN c_course_offering_instance;
700 	LOOP
701 		FETCH c_course_offering_instance INTO v_coi_rec;
702 		EXIT WHEN c_course_offering_instance%NOTFOUND;
703 
704 		-- This logging Unit information has been added as part of Bug# 2550392 by shtatiko
705                 fnd_file.put_line ( fnd_file.LOG, ' ');
706 		fnd_file.put_line ( fnd_file.LOG, igs_ge_gen_004.genp_get_lookup ( 'IGS_PS_LOG_PARAMETERS', 'PROGRAM_CD' )
707 		                                  || '        : ' || v_coi_rec.course_cd );
708 		fnd_file.put_line ( fnd_file.LOG, igs_ge_gen_004.genp_get_lookup ( 'IGS_PS_LOG_PARAMETERS', 'VERSION_NUMBER' )
709 		                                  || ' : ' || TO_CHAR (v_coi_rec.version_number) );
710 		fnd_file.put_line ( fnd_file.LOG, igs_ge_gen_004.genp_get_lookup ( 'LEGACY_TOKENS', 'CAL_TYPE' )
711 		                                  || '  : ' || p_dest_cal_type );
712 		fnd_file.put_line ( fnd_file.LOG, igs_ge_gen_004.genp_get_lookup ( 'IGS_FI_LOCKBOX', 'START_DT' )
713 		                                  || '     : ' || fnd_date.date_to_displaydate (gv_ci_start_dt) );
714 		fnd_file.put_line ( fnd_file.LOG, igs_ge_gen_004.genp_get_lookup ( 'IGS_FI_LOCKBOX', 'END_DT' )
715 		                                  || '       : ' || fnd_date.date_to_displaydate (gv_ci_end_dt) );
716 		fnd_file.put_line ( fnd_file.LOG, ' ');
717 
718 		-- Check that IGS_PS_COURSE version is still active and can be updated
719 		IF (IGS_PS_VAL_CRS.crsp_val_iud_crv_dtl(
720 				v_coi_rec.course_cd,
721 				v_coi_rec.version_number,
722 				v_message) = TRUE) THEN
723 			OPEN c_check_coi_exist (
724 					v_coi_rec.course_cd,
725 					v_coi_rec.version_number);
726 			FETCH c_check_coi_exist INTO v_check;
727 			IF (c_check_coi_exist%NOTFOUND) THEN
728 			IGS_PS_OFR_INST_PKG.Insert_Row(
729 		        X_ROWID       		      =>	x_rowid,
730 			X_COURSE_CD                   => 	v_coi_rec.course_cd,
731 			X_VERSION_NUMBER              =>	v_coi_rec.version_number,
732 			X_CAL_TYPE                    => 	p_dest_cal_type,
733 			X_CI_SEQUENCE_NUMBER          => 	p_dest_sequence_number,
734 			X_CI_START_DT                 => 	gv_ci_start_dt,
735 			X_CI_END_DT                   => 	gv_ci_end_dt,
736 			X_MIN_ENTRY_ASS_SCORE         => 	v_coi_rec.min_entry_ass_score,
737 			X_GUARANTEED_ENTRY_ASS_SCR    =>         v_coi_rec.guaranteed_entry_ass_scr,
738 			X_MODE                        =>	'R');
739       		          v_rec_inserted_cnt := v_rec_inserted_cnt + 1;
740                           -- This message has been added as part of Bug# 2550392 by shtatiko
741 			  fnd_message.set_name ( 'IGS', 'IGS_PS_ROLL_POI_SUCCESS' );
742 			  fnd_file.put_line ( fnd_file.LOG, '   ' || fnd_message.get );
743 			ELSE
744                           -- This message has been added as part of Bug# 2550392 by shtatiko
745 			  fnd_message.set_name ( 'IGS', 'IGS_PS_ROLL_POI_EXISTS' );
746 			  fnd_file.put_line ( fnd_file.LOG, '   ' || fnd_message.get );
747 			END IF;
748 			CLOSE c_check_coi_exist;
749 			-- Rollover all course_offering_patterns
750 			-- within IGS_PS_OFR_INST.
751 			IF (IGS_PS_GEN_003.crsp_ins_coi_cop(
752 					v_coi_rec.course_cd,
753 					v_coi_rec.version_number,
754 					p_source_cal_type,
755 					p_source_sequence_number,
756 					p_dest_cal_type,
757 					p_dest_sequence_number,
758 					v_message) = FALSE) THEN
759 				-- This function never return FALSE at the moment
760 				RAISE invalid;
761 			END IF;
762 
763 			fnd_message.set_name ( 'IGS', v_message );
764 			fnd_file.put_line ( fnd_file.LOG, '   ' || fnd_message.get );
765 			-- no course_offering_patterns rolled over
766 			IF (v_message = 'IGS_PS_PRGOFFR_ROLLED_EXIST' OR
767                             v_message = 'IGS_PS_NO_POP_TOBE_ENROLLED') THEN
768 				cst_all_cop_rec_inserted := FALSE;
769 			-- partial course_offering_patterns rolled over
770 			ELSIF (v_message = 'IGS_PS_PARTIALCREATION_OFFPAT') THEN
771 
772 				cst_all_cop_rec_inserted := FALSE;
773 				cst_none_cop_rec_inserted := FALSE;
774 			-- all course_offering_pattenrs rolled over
775 			ELSIF (v_message = 'IGS_PS_SUCCESS_CREATION_POP') THEN
776 				cst_none_cop_rec_inserted := FALSE;
777 			END IF;
778 		END IF; -- course_version is active
779 	END LOOP;
780 	IF (cst_none_cop_rec_inserted AND NOT cst_all_cop_rec_inserted) OR
781 	   (cst_all_cop_rec_inserted AND NOT cst_none_cop_rec_inserted) THEN
782 		cst_partial_cop_rec_inserted := FALSE;
783 	END IF;
784 	-- none course_offering_instance is inserted
785 	IF (v_rec_inserted_cnt = 0) THEN
786 		cst_none_coi_rec_inserted := TRUE;
787 	-- all course_offering_instance are inserted
788 	ELSIF (v_rec_inserted_cnt = c_course_offering_instance%ROWCOUNT) THEN
789 		cst_all_coi_rec_inserted := TRUE;
790 	-- partial course_offering_instance are inserted
791 	ELSE
792 		cst_partial_coi_rec_inserted := TRUE;
793 	END IF;
794 	-- no course_offering_instances AND no course_offering_patterns are inserted
795 	IF (cst_none_coi_rec_inserted AND cst_none_cop_rec_inserted) THEN
796 		v_message := 'IGS_PS_NO_PRGOFFR_INST_FOUND';
797                               RAISE VALID;
798 	END IF;
799 	-- (no coi AND all cop are inserted) OR (partial coi OR partial cop are
800 	-- inserted)
801 	IF (cst_none_coi_rec_inserted AND cst_all_cop_rec_inserted) OR
802 	   (cst_partial_coi_rec_inserted OR cst_partial_cop_rec_inserted) THEN
803 		v_message := 'IGS_PS_PARTIALCREATION_OFFINS';
804                               RAISE VALID;
805 	END IF;
806 	-- otherwise: (all coi and all cop are inserted) OR
807 	--		(all coi and no cop are inserted)
808 	v_message := 'IGS_PS_SUCCESS_CREAT_POP';
809 	RAISE VALID;
810 
811 EXCEPTION
812   WHEN VALID THEN
813     COMMIT;
814     RETCODE:=0;
815     fnd_file.put_line ( fnd_file.LOG, ' ');
816     fnd_file.put_line ( fnd_file.LOG, fnd_message.get_string('IGS',v_message) );
817   WHEN INVALID THEN
818     RETCODE:=2;
819     fnd_file.put_line ( fnd_file.LOG, ' ');
820     fnd_file.put_line ( fnd_file.LOG, fnd_message.get_string('IGS',v_message) );
821   WHEN OTHERS THEN
822     RETCODE:=2;
823     ERRBUF:=FND_MESSAGE.GET_STRING('IGS','IGS_GE_UNHANDLED_EXCEPTION') || ' : ' || SQLERRM;
824     IGS_GE_MSG_STACK.CONC_EXCEPTION_HNDL;
825     ROLLBACK;
826 END crsp_ins_ci_cop;
827 
828 
829 PROCEDURE crsp_ins_cous(
830   p_course_cd IN VARCHAR2 ,
831   p_crv_version_number IN NUMBER ,
832   p_cal_type IN VARCHAR2 ,
833   p_unit_set_cd IN VARCHAR2 ,
834   p_us_version_number IN NUMBER ,
835   p_override_title IN VARCHAR2 ,
836   p_only_as_sub_ind IN VARCHAR2 DEFAULT 'N')
837 AS
838 lv_param_values			VARCHAR2(1080);
839 BEGIN	-- crsp_ins_cous
840 	-- This module inserts a record into the IGS_PS_OFR_UNIT_SET table.
841 	-- The routine is used by the defaulting mechanism for a IGS_EN_UNIT_SET. This is
842 	-- invoked from the 'Apply IGS_PS_UNIT Set to IGS_PS_COURSE Offerings' form (ie: CRSF4210)
843 	-- and applies the unit_set_in context to all IGS_PS_COURSE offerings selected via
844 	-- the screen.
845 	-- The routine is not used by the IGS_EN_UNIT_SET rollover process.
846 DECLARE
847 
848 	v_administrative_ind		IGS_EN_UNIT_SET.administrative_ind%TYPE;
849 	v_show_on_official_ntfctn_ind	VARCHAR2(1);
850 	v_dummy				VARCHAR2(1);
851 	CURSOR c_cous IS
852 		SELECT	'X'
853 		FROM	IGS_PS_OFR_UNIT_SET	cous
854 		WHERE	cous.course_cd		= p_course_cd AND
855 			cous.crv_version_number = p_crv_version_number AND
856 			cous.cal_type		= p_cal_type AND
857 			cous.unit_set_cd	= p_unit_set_cd AND
858 			cous.us_version_number	= p_us_version_number;
859 
860 			x_rowid			VARCHAR2(25);
861 BEGIN
862 	-- Fetch the administrative indicator from the IGS_EN_UNIT_SET table
863 	v_administrative_ind := IGS_PS_GEN_006.crsp_get_us_admin(
864 						p_unit_set_cd,
865 						p_us_version_number);
866 	IF (v_administrative_ind = 'Y') THEN
867 		v_show_on_official_ntfctn_ind := 'N';
868 	ELSE
869 		v_show_on_official_ntfctn_ind := 'Y';
870 	END IF;
871 	OPEN c_cous;
872 	FETCH c_cous INTO v_dummy;
873 	IF (c_cous%NOTFOUND) THEN
874 		CLOSE c_cous;
875 
876 		IGS_PS_OFR_UNIT_SET_Pkg.Insert_Row(
877 					X_ROWID                       =>	x_rowid,
878 					X_COURSE_CD                   => 	p_course_cd,
879 					X_CRV_VERSION_NUMBER          => 	p_crv_version_number,
880 					X_CAL_TYPE                    => 	p_cal_type,
881 					X_UNIT_SET_CD                 => 	p_unit_set_cd,
882 					X_US_VERSION_NUMBER           => 	p_us_version_number,
883 					X_OVERRIDE_TITLE              => 	p_override_title,
884 					X_ONLY_AS_SUB_IND             => 	p_only_as_sub_ind,
885 					X_SHOW_ON_OFFICIAL_NTFCTN_IND => 	v_show_on_official_ntfctn_ind,
886 					X_MODE                        =>	'R');
887 
888 					COMMIT;
889 	ELSE
890 		CLOSE c_cous;
891 	END IF;
892 EXCEPTION
893 	WHEN OTHERS THEN
894 		IF (c_cous%ISOPEN) THEN
895 			CLOSE c_cous;
896 		END IF;
897 		App_Exception.Raise_Exception;
898 END;
899 EXCEPTION
900 	WHEN OTHERS THEN
901 
902 		Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
903 		Fnd_Message.Set_Token('NAME','IGS_PS_GEN_003.crsp_ins_cous');
904 		IGS_GE_MSG_STACK.ADD;
905 		lv_param_values := p_course_cd||','||to_char(p_crv_version_number)||','||p_cal_type||','
906 					||p_unit_set_cd||','||to_char(p_us_version_number)||','||p_override_title||','||p_only_as_sub_ind;
907 		Fnd_Message.Set_Name('IGS','IGS_GE_PARAMETERS');
908 		Fnd_Message.Set_Token('VALUE',lv_param_values);
909 		IGS_GE_MSG_STACK.ADD;
910 		App_Exception.Raise_Exception;
911 END crsp_ins_cous;
912 
913 FUNCTION enrollment_for_uoo_check ( p_n_uoo_id NUMBER) RETURN BOOLEAN AS
914 /***********************************************************************************************
915 
916   Created By     : sarakshi
917   Date Created By: 21-oct-2003
918 
919   Purpose        : To check if enrollment exists for a unit section, i.e to check if a record exists in IGS_EN_SU_ATTEMPT
920                    for the input unit section
921 
922   Known limitations,enhancements,remarks:
923   Change History
924   Who     When       What
925 
926 ********************************************************************************************** */
927 CURSOR c_enroll (cp_n_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
928   SELECT  'X'
929   FROM    igs_en_su_attempt
930   WHERE   uoo_id=cp_n_uoo_id
931   AND     ROWNUM=1;
932   l_c_var    VARCHAR2(1) ;
933 
934 BEGIN
935    --If enrollment exists for a unit section (uoo_id) then return TRUE else FALSE
936    OPEN c_enroll(p_n_uoo_id);
937    FETCH c_enroll INTO l_c_var;
938    IF c_enroll%FOUND THEN
939      CLOSE c_enroll;
940      RETURN TRUE;
941    END IF;
942    CLOSE c_enroll;
943    RETURN FALSE;
944 
945 END enrollment_for_uoo_check;
946 
947   FUNCTION CheckValid(
948 		      p_n_uoo_id           NUMBER,
949 		      p_n_usec_occurs_id   NUMBER,
950                       p_c_building_cd      VARCHAR2,
951                       p_c_room_cd          VARCHAR2,
952 		      p_d_start_date       DATE,
953 		      p_d_end_date         DATE,
954 		      p_d_start_time       DATE,
955 		      p_d_end_time         DATE,
956 		      p_c_monday           VARCHAR2,
957 		      p_c_tuesday          VARCHAR2,
958 		      p_c_wednesday        VARCHAR2,
959 		      p_c_thrusday         VARCHAR2,
960 		      p_c_friday           VARCHAR2,
961 		      p_c_saturday         VARCHAR2,
962 		      p_c_sunday           VARCHAR2,
963 		      p_called_from        VARCHAR2,
964 		      p_c_clash_section    OUT NOCOPY VARCHAR2,
965 		      p_c_clash_occurrence OUT NOCOPY VARCHAR2
966 		      )
967   RETURN BOOLEAN AS
968   /***********************************************************************************************
969 
970   Created By     : sarakshi
971   Date Created By: 17-May-2005
972 
973   Purpose        : To check if an occurrence is having a building and Room conflict with other occurrences which
974                    are not in same crosslistd/meetwith group.
975 
976   Known limitations,enhancements,remarks:
977   Change History
978   Who     When       What
979   --sarakshi    29-Sep-2005     Bug#4589117, changed the signature of the function CheckValid and related validation.
980   --sarakshi    26-Sep-2005     Bug#4589301, modified the signature of function CheckValid and related processing
981   ********************************************************************************************** */
982 
983 
984     CURSOR chk IS
985     SELECT uso.unit_section_occurrence_id, uso.uoo_id, crs.usec_x_listed_group_id, mwg.class_meet_group_id
986     FROM   igs_ps_usec_occurs   uso, igs_ps_usec_x_grpmem crs, igs_ps_uso_clas_meet mwg
987     WHERE  uso.building_code  = p_c_building_cd AND
988            uso.room_code = p_c_room_cd AND
989            (
990 	     TRUNC( uso.start_date ) BETWEEN TRUNC(p_d_start_date) AND TRUNC(p_d_end_date) OR
991 	     TRUNC(uso.end_date) BETWEEN TRUNC(p_d_start_date) AND TRUNC(p_d_end_date) OR
992 	     TRUNC(p_d_start_date) BETWEEN TRUNC(uso.start_date) AND TRUNC(uso.end_date) OR
993 	     TRUNC(p_d_end_date) BETWEEN TRUNC(uso.start_date) AND TRUNC(uso.end_date)
994 	   ) AND
995 
996 	   (
997 	     (((TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI') BETWEEN TO_DATE(TO_CHAR(p_d_start_time,'HH24:MI'),'HH24:MI') AND TO_DATE(TO_CHAR(p_d_end_time,'HH24:MI'),'HH24:MI')) OR
998 	      (TO_DATE(TO_CHAR(uso.end_time,'HH24:MI'),'HH24:MI') BETWEEN TO_DATE(TO_CHAR(p_d_start_time,'HH24:MI'),'HH24:MI') AND TO_DATE(TO_CHAR(p_d_end_time,'HH24:MI'),'HH24:MI'))) AND
999 	     (
1000 	     -- considering boundary conditions as no conflict
1001 	     (TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI') <> TO_DATE(TO_CHAR(p_d_end_time,'HH24:MI'),'HH24:MI')) AND
1002 	     (TO_DATE(TO_CHAR(uso.end_time,'HH24:MI'),'HH24:MI') <> TO_DATE(TO_CHAR(p_d_start_time,'HH24:MI'),'HH24:MI'))))
1003 
1004 	     OR
1005 
1006 	     (((TO_DATE(TO_CHAR(p_d_start_time,'HH24:MI'),'HH24:MI') BETWEEN TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI') AND TO_DATE(TO_CHAR(uso.end_time,'HH24:MI'),'HH24:MI')) OR
1007 	      (TO_DATE(TO_CHAR(p_d_end_time ,'HH24:MI'),'HH24:MI') BETWEEN TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI') AND TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI'))) AND
1008 	     (
1009 	     -- considering boundary conditions as no conflict
1010 	     (TO_DATE(TO_CHAR(p_d_start_time ,'HH24:MI'),'HH24:MI') <> TO_DATE(TO_CHAR(uso.end_time,'HH24:MI'),'HH24:MI')) AND
1011 	     (TO_DATE(TO_CHAR(p_d_end_time ,'HH24:MI'),'HH24:MI') <> TO_DATE(TO_CHAR(uso.start_time,'HH24:MI'),'HH24:MI'))))
1012 
1013 	   ) AND
1014 
1015 
1016            (uso.monday = DECODE (p_c_monday,'Y','Y','-') OR
1017            uso.tuesday = DECODE (p_c_tuesday,'Y','Y','-') OR
1018            uso.wednesday = DECODE (p_c_wednesday,'Y','Y','-') OR
1019            uso.thursday = DECODE (p_c_thrusday,'Y','Y','-') OR
1020            uso.friday = DECODE (p_c_friday,'Y','Y','-') OR
1021            uso.saturday = DECODE (p_c_saturday,'Y','Y','-') OR
1022            uso.sunday = DECODE (p_c_sunday,'Y','Y','-'))  AND
1023            uso.uoo_id=crs.uoo_id(+) AND
1024            uso.uoo_id=mwg.uoo_id(+) AND
1025            uso.unit_section_occurrence_id <> p_n_usec_occurs_id;
1026 
1027      --check if member of cross listed group
1028      CURSOR chk_crs_list_grp (cp_usec_x_listed_group_id NUMBER) IS
1029      SELECT 'X'
1030      FROM  igs_ps_usec_x_grpmem
1031      WHERE usec_x_listed_group_id = cp_usec_x_listed_group_id
1032      AND   uoo_id = p_n_uoo_id;
1033 
1034      --check if member of meet with group
1035      CURSOR chk_meet_with_grp (cp_class_meet_group_id NUMBER) IS
1036      SELECT 'X'
1037      FROM  igs_ps_uso_clas_meet
1038      WHERE class_meet_group_id = cp_class_meet_group_id
1039      AND   uoo_id = p_n_uoo_id;
1040 
1041      CURSOR c_occur(cp_unit_section_occurrence_id  igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
1042      SELECT b.occurrence_identifier,a.unit_cd,a.version_number,a.location_cd,a.unit_class,c.alternate_code
1043      FROM   igs_ps_unit_ofr_opt_all a, igs_ps_usec_occurs_all b, igs_ca_inst_all c
1044      WHERE  a.uoo_id=b.uoo_id
1045      AND    b.unit_section_occurrence_id=cp_unit_section_occurrence_id
1046      AND    a.cal_type=c.cal_type
1047      AND    a.ci_sequence_number=c.sequence_number;
1048 
1049      l_c_occur c_occur%ROWTYPE;
1050 
1051      l_c_valid  BOOLEAN := TRUE;
1052      l_c_var   VARCHAR2(1);
1053   BEGIN
1054         FOR chk_rec IN chk LOOP
1055            l_c_valid  := FALSE;
1056 
1057            IF p_called_from='OCCURRENCE' THEN
1058 	     IF chk_rec.usec_x_listed_group_id IS NOT NULL THEN
1059 		OPEN chk_crs_list_grp (chk_rec.usec_x_listed_group_id);
1060 		FETCH chk_crs_list_grp INTO l_c_var;
1061 		IF chk_crs_list_grp%FOUND THEN
1062 		   l_c_valid  := TRUE;
1063 		END IF;
1064 		CLOSE chk_crs_list_grp;
1065 	     END IF;
1066 
1067 	     IF chk_rec.class_meet_group_id IS NOT NULL THEN
1068 		OPEN chk_meet_with_grp (chk_rec.class_meet_group_id);
1069 		FETCH chk_meet_with_grp INTO l_c_var;
1070 		IF chk_meet_with_grp%FOUND THEN
1071 		   l_c_valid  := TRUE;
1072 		END IF;
1073 		CLOSE chk_meet_with_grp;
1074 	     END IF;
1075            END IF;
1076 
1077            IF NOT l_c_valid THEN
1078               OPEN c_occur(chk_rec.unit_section_occurrence_id);
1079 	      FETCH c_occur INTO l_c_occur;
1080 	      CLOSE c_occur;
1081 	      p_c_clash_section:='"'||l_c_occur.unit_cd||'-'||l_c_occur.version_number||'-'||l_c_occur.alternate_code||'-'||l_c_occur.location_cd||'-'||l_c_occur.unit_class||'"';
1082 	      p_c_clash_occurrence:='"'||l_c_occur.occurrence_identifier||'"';
1083               EXIT;
1084            END IF;
1085 
1086         END LOOP;
1087 
1088         IF l_c_valid  THEN
1089           RETURN TRUE;
1090 	ELSE
1091 	  RETURN FALSE;
1092         END IF;
1093 
1094   END CheckValid;
1095 
1096 
1097 END IGS_PS_GEN_003;