DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_UNIT_LGCY_PKG

Source


1 PACKAGE BODY igs_ps_unit_lgcy_pkg AS
2 /* $Header: IGSPS85B.pls 120.15 2006/08/02 11:47:44 sommukhe ship $ */
3 
4   /***********************************************************************************************
5     Created By     :  Sanjeeb Rakshit, Shirish Tatiko, Saravana Kumar
6     Date Created By:  11-NOV-2002
7     Purpose        :  This package has the 8 sub processes, which will be called from
8                       PSP Unit API.
9                       process 1 : create_unit_version
10                                     Imports Unit Version and its associated Subtitle and Curriculum
11                       process 2 : create_teach_resp
12                                     Imports Teaching Reponsibility.
13                       process 3 : create_unit_discip
14                                     Imports Unit Discipline.
15                       process 4 : create_unit_grd_sch
16                                     Imports Unit Grading Schema.
17                                 : validate_unit_dtls
18                                      Validations performed across different sub process at unil level.
19                       process 5 : create_unit_section
20                                     Imports Unit Section and its associated Credits Point and Referrence
21                       process 6 : create_usec_grd_sch
22                                     Imports Unit Section Grading Schema
23                       process 7 : create_usec_occur
24                                     Imports Unit Section Occurrence
25                       process 8 : create_unit_ref_code
26                                     Imports Unit / Unit Section / Unit Section Occurrence Referrences
27                      process 9 : create_uso_ins
28                                     Imports Unit Section Occurrence instructors and creates unit
29                                     section teaching responsibilites record if current instructor
30                                     getting imported does not already exists.
31 
32     Known limitations,enhancements,remarks:
33     Change History (in reverse chronological order)
34     Who         When            What
35     sommukhe    27-SEP-2005     BUG #4632652.FND logging included.
36     smvk        28-Jul-2004     Bug # 3793580. Allowing the user to import instructors for No Set Day USO.
37                                 Coded to call procedure get_uso_id to get USO ID. Removed cursors used to derive USO id.
38     smvk        07-Nov-2003     Bug # 3138353. Added new procedure validate_unit_dtls to do unit level cross subprocesses validation.
39     smvk        10-Oct-2003     Bug # 3052445. Modified the signature of igs_ps_validate_lgcy_pkg.validate_waitlist_allowed without org unit code.
40     smvk        23-Sep-2003     Bug # 3121311, Removed the call to procedures uso_effective_dates and validate_instructor.
41     sarakshi    02-sep-2003     Enh#3052452,removed the reference of the column sup_unit_allowed_ind and sub_unit_allowed_ind
42     vvutukur    05-Aug-2003     Enh#3045069.PSP Enh Build. Modified trim_values,create_uoo,validate_uoo_db_cons,
43                                 validate_derivations,validate_db_cons.
44     smvk        27-Jun-2003     Enh Bug # 2999888. Modified unit reference code process for importing
45                                 Unit requirements / Unit Sectin requirements reference codes.
46     smvk        25-jun-2003     Enh bug#2918094. Modified create_usec_occur process to add a column cancel_flag.
47     jbegum      02-June-2003    Bug # 2972950.
48                                 For the Legacy Enhancements TD:
49                                 Created Sub process create_uso_ins and Sub process create_usec_el as mentioned in TD.
50                                 Modified the code to use messages rather than lookup codes mentioned in TD, due to
51                                 Non Backward compatible changes in igslkups.ldt.
52   ********************************************************************************************** */
53 
54   g_n_user_id igs_ps_unit_ver_all.created_by%TYPE := NVL(fnd_global.user_id,-1);          -- Stores the User Id
55   g_n_login_id igs_ps_unit_ver_all.last_update_login%TYPE := NVL(fnd_global.login_id,-1); -- Stores the Login Id
56   TYPE uso_tbl_type IS TABLE OF igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE INDEX BY BINARY_INTEGER;
57   l_tbl_uso uso_tbl_type;
58 
59 
60 
61   PROCEDURE create_unit_version(p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type,
62                                 p_rec_status   OUT NOCOPY    VARCHAR2) AS
63   /***********************************************************************************************
64 
65   Created By:         sarakshi
66   Date Created By:    11-Nov-2002
67   Purpose:            This procedure imports unit version data.
68 
69   Known limitations,enhancements,remarks:
70 
71   Change History
72 
73   Who       When         What
74 
75   sarakshi  04-May-2004  Enh#3568858,columns ovrd_wkld_val_flag, workload_val_code has been trimed and also included in  the insert statement.
76   sarakshi  10-Nov-2003  Enh#3116171, added logic related to the newly introduced field BILLING_CREDIT_POINTS, modified trim values procedure and insert_row
77   ***********************************************************************************************/
78 
79     CURSOR cur_check (cp_unit_cd igs_ps_unit.unit_cd%TYPE) IS
80     SELECT 'X'
81     FROM   igs_ps_unit
82     WHERE  unit_cd=cp_unit_cd;
83     l_c_var  VARCHAR2(1);
84 
85     l_n_coord_person_id             igs_ps_unit_ver_all.coord_person_id%TYPE;
86     l_d_owner_ou_start_dt           igs_ps_unit_ver_all.owner_ou_start_dt%TYPE;
87     l_n_subtitle_id                 igs_ps_unit_ver_all.subtitle_id%TYPE;
88     l_n_rpt_fmly_id                 igs_ps_rpt_fmly.rpt_fmly_id%TYPE;
89     l_n_unit_type_id                igs_ps_unit_type_lvl.unit_type_id%TYPE;
90     l_c_cal_type_enrol_load_cal     igs_ps_unit_ver_all.cal_type_enrol_load_cal%TYPE;
91     l_n_seq_num_enrol_load_cal igs_ps_unit_ver_all.sequence_num_enrol_load_cal%TYPE;
92     l_c_cal_type_offer_load_cal     igs_ps_unit_ver_all.cal_type_offer_load_cal%TYPE;
93     l_n_seq_num_offer_load_cal igs_ps_unit_ver_all.sequence_num_offer_load_cal%TYPE;
94 
95     PROCEDURE trim_values (p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type) AS
96     BEGIN
97               p_unit_ver_rec.unit_cd := TRIM(p_unit_ver_rec.unit_cd);
98               p_unit_ver_rec.version_number := TRIM(p_unit_ver_rec.version_number);
99               p_unit_ver_rec.start_dt := TRUNC(p_unit_ver_rec.start_dt);
100               p_unit_ver_rec.review_dt  := TRUNC(p_unit_ver_rec.review_dt);
101               p_unit_ver_rec.expiry_dt  := TRUNC(p_unit_ver_rec.expiry_dt);
102               p_unit_ver_rec.end_dt  := TRUNC(p_unit_ver_rec.end_dt);
103               p_unit_ver_rec.unit_status := TRIM(p_unit_ver_rec.unit_status);
104               p_unit_ver_rec.title := TRIM(p_unit_ver_rec.title);
105               p_unit_ver_rec.short_title := TRIM(p_unit_ver_rec.short_title);
106               p_unit_ver_rec.title_override_ind  := TRIM(p_unit_ver_rec.title_override_ind);
107               p_unit_ver_rec.abbreviation  := TRIM(p_unit_ver_rec.abbreviation);
108               p_unit_ver_rec.unit_level := TRIM(p_unit_ver_rec.unit_level);
109               p_unit_ver_rec.credit_point_descriptor := TRIM(p_unit_ver_rec.credit_point_descriptor);
110               p_unit_ver_rec.enrolled_credit_points := TRIM(p_unit_ver_rec.enrolled_credit_points);
111               p_unit_ver_rec.points_override_ind := TRIM(p_unit_ver_rec.points_override_ind);
112               p_unit_ver_rec.supp_exam_permitted_ind := TRIM(p_unit_ver_rec.supp_exam_permitted_ind);
113               p_unit_ver_rec.coord_person_number := TRIM(p_unit_ver_rec.coord_person_number);
114               p_unit_ver_rec.owner_org_unit_cd := TRIM(p_unit_ver_rec.owner_org_unit_cd);
115               p_unit_ver_rec.award_course_only_ind := TRIM(p_unit_ver_rec.award_course_only_ind);
116               p_unit_ver_rec.research_unit_ind := TRIM(p_unit_ver_rec.research_unit_ind);
117               p_unit_ver_rec.industrial_ind := TRIM(p_unit_ver_rec.industrial_ind);
118               p_unit_ver_rec.practical_ind := TRIM(p_unit_ver_rec.practical_ind);
119               p_unit_ver_rec.repeatable_ind := TRIM(p_unit_ver_rec.repeatable_ind);
120               p_unit_ver_rec.assessable_ind := TRIM(p_unit_ver_rec.assessable_ind);
121               p_unit_ver_rec.achievable_credit_points  := TRIM(p_unit_ver_rec.achievable_credit_points);
122               p_unit_ver_rec.points_increment := TRIM(p_unit_ver_rec.points_increment);
123               p_unit_ver_rec.points_min := TRIM(p_unit_ver_rec.points_min);
124               p_unit_ver_rec.points_max := TRIM(p_unit_ver_rec.points_max);
125               p_unit_ver_rec.unit_int_course_level_cd  := TRIM(p_unit_ver_rec.unit_int_course_level_cd);
126               p_unit_ver_rec.subtitle_modifiable_flag  := TRIM(p_unit_ver_rec.subtitle_modifiable_flag);
127               p_unit_ver_rec.approval_date := TRUNC(p_unit_ver_rec.approval_date);
128               p_unit_ver_rec.lecture_credit_points  := TRIM(p_unit_ver_rec.lecture_credit_points);
129               p_unit_ver_rec.lab_credit_points := TRIM(p_unit_ver_rec.lab_credit_points);
130               p_unit_ver_rec.other_credit_points := TRIM(p_unit_ver_rec.other_credit_points);
131               p_unit_ver_rec.clock_hours := TRIM(p_unit_ver_rec.clock_hours);
132               p_unit_ver_rec.work_load_cp_lecture := TRIM(p_unit_ver_rec.work_load_cp_lecture);
133               p_unit_ver_rec.work_load_cp_lab := TRIM(p_unit_ver_rec.work_load_cp_lab);
134               p_unit_ver_rec.continuing_education_units := TRIM(p_unit_ver_rec.continuing_education_units);
135               p_unit_ver_rec.enrollment_expected := TRIM(p_unit_ver_rec.enrollment_expected);
136               p_unit_ver_rec.enrollment_minimum  := TRIM(p_unit_ver_rec.enrollment_minimum);
137               p_unit_ver_rec.enrollment_maximum  := TRIM(p_unit_ver_rec.enrollment_maximum);
138               p_unit_ver_rec.advance_maximum  := TRIM(p_unit_ver_rec.advance_maximum);
139               p_unit_ver_rec.state_financial_aid := TRIM(p_unit_ver_rec.state_financial_aid);
140               p_unit_ver_rec.federal_financial_aid  := TRIM(p_unit_ver_rec.federal_financial_aid);
141               p_unit_ver_rec.institutional_financial_aid  := TRIM(p_unit_ver_rec.institutional_financial_aid);
142               p_unit_ver_rec.same_teaching_period := TRIM(p_unit_ver_rec.same_teaching_period);
143               p_unit_ver_rec.max_repeats_for_credit := TRIM(p_unit_ver_rec.max_repeats_for_credit);
144               p_unit_ver_rec.max_repeats_for_funding := TRIM(p_unit_ver_rec.max_repeats_for_funding);
145               p_unit_ver_rec.max_repeat_credit_points  := TRIM(p_unit_ver_rec.max_repeat_credit_points);
146               p_unit_ver_rec.same_teach_period_repeats := TRIM(p_unit_ver_rec.same_teach_period_repeats);
147               p_unit_ver_rec.same_teach_period_repeats_cp := TRIM(p_unit_ver_rec.same_teach_period_repeats_cp);
148               p_unit_ver_rec.attribute_category  := TRIM(p_unit_ver_rec.attribute_category);
149               p_unit_ver_rec.attribute1 := TRIM(p_unit_ver_rec.attribute1);
150               p_unit_ver_rec.attribute2 := TRIM(p_unit_ver_rec.attribute2);
151               p_unit_ver_rec.attribute3 := TRIM(p_unit_ver_rec.attribute3);
152               p_unit_ver_rec.attribute4 := TRIM(p_unit_ver_rec.attribute4);
153               p_unit_ver_rec.attribute5 := TRIM(p_unit_ver_rec.attribute5);
154               p_unit_ver_rec.attribute6 := TRIM(p_unit_ver_rec.attribute6);
155               p_unit_ver_rec.attribute7 := TRIM(p_unit_ver_rec.attribute7);
156               p_unit_ver_rec.attribute8 := TRIM(p_unit_ver_rec.attribute8);
157               p_unit_ver_rec.attribute9 := TRIM(p_unit_ver_rec.attribute9);
158               p_unit_ver_rec.attribute10 := TRIM(p_unit_ver_rec.attribute10);
159               p_unit_ver_rec.attribute11 := TRIM(p_unit_ver_rec.attribute11);
160               p_unit_ver_rec.attribute12 := TRIM(p_unit_ver_rec.attribute12);
161               p_unit_ver_rec.attribute13 := TRIM(p_unit_ver_rec.attribute13);
162               p_unit_ver_rec.attribute14 := TRIM(p_unit_ver_rec.attribute14);
163               p_unit_ver_rec.attribute15 := TRIM(p_unit_ver_rec.attribute15);
164               p_unit_ver_rec.attribute16 := TRIM(p_unit_ver_rec.attribute16);
165               p_unit_ver_rec.attribute17 := TRIM(p_unit_ver_rec.attribute17);
166               p_unit_ver_rec.attribute18 := TRIM(p_unit_ver_rec.attribute18);
167               p_unit_ver_rec.attribute19 := TRIM(p_unit_ver_rec.attribute19);
168               p_unit_ver_rec.attribute20 := TRIM(p_unit_ver_rec.attribute20);
169               p_unit_ver_rec.ivr_enrol_ind := TRIM(p_unit_ver_rec.ivr_enrol_ind);
170               p_unit_ver_rec.ss_enrol_ind  := TRIM(p_unit_ver_rec.ss_enrol_ind);
171               p_unit_ver_rec.work_load_other  := TRIM(p_unit_ver_rec.work_load_other);
172               p_unit_ver_rec.contact_hrs_lecture := TRIM(p_unit_ver_rec.contact_hrs_lecture);
173               p_unit_ver_rec.contact_hrs_lab  := TRIM(p_unit_ver_rec.contact_hrs_lab);
174               p_unit_ver_rec.contact_hrs_other := TRIM(p_unit_ver_rec.contact_hrs_other);
175               p_unit_ver_rec.non_schd_required_hrs  := TRIM(p_unit_ver_rec.non_schd_required_hrs);
176               p_unit_ver_rec.exclude_from_max_cp_limit := TRIM(p_unit_ver_rec.exclude_from_max_cp_limit);
177               p_unit_ver_rec.record_exclusion_flag  := TRIM(p_unit_ver_rec.record_exclusion_flag);
178               p_unit_ver_rec.ss_display_ind := TRIM(p_unit_ver_rec.ss_display_ind);
179               p_unit_ver_rec.enrol_load_alt_cd := TRIM(p_unit_ver_rec.enrol_load_alt_cd);
180               p_unit_ver_rec.offer_load_alt_cd := TRIM(p_unit_ver_rec.offer_load_alt_cd);
181               p_unit_ver_rec.override_enrollment_max := TRIM(p_unit_ver_rec.override_enrollment_max);
182               p_unit_ver_rec.repeat_code := TRIM(p_unit_ver_rec.repeat_code);
183               p_unit_ver_rec.level_code := TRIM(p_unit_ver_rec.level_code);
184               p_unit_ver_rec.special_permission_ind := TRIM(p_unit_ver_rec.special_permission_ind);
185               p_unit_ver_rec.rev_account_cd := TRIM(p_unit_ver_rec.rev_account_cd);
186               p_unit_ver_rec.claimable_hours  := TRIM(p_unit_ver_rec.claimable_hours);
187               p_unit_ver_rec.anon_unit_grading_ind  := TRIM(p_unit_ver_rec.anon_unit_grading_ind);
188               p_unit_ver_rec.anon_assess_grading_ind := TRIM(p_unit_ver_rec.anon_assess_grading_ind);
189               p_unit_ver_rec.subtitle := TRIM(p_unit_ver_rec.subtitle);
190               p_unit_ver_rec.subtitle_approved_ind  := TRIM(p_unit_ver_rec.subtitle_approved_ind);
191               p_unit_ver_rec.subtitle_closed_ind := TRIM(p_unit_ver_rec.subtitle_closed_ind);
192               p_unit_ver_rec.curriculum_id := TRIM(p_unit_ver_rec.curriculum_id);
193               p_unit_ver_rec.curriculum_description := TRIM(p_unit_ver_rec.curriculum_description);
194               p_unit_ver_rec.curriculum_closed_ind  := TRIM(p_unit_ver_rec.curriculum_closed_ind);
195               p_unit_ver_rec.auditable_ind := TRIM(p_unit_ver_rec.auditable_ind);
196               p_unit_ver_rec.audit_permission_ind := TRIM(p_unit_ver_rec.audit_permission_ind);
197               p_unit_ver_rec.max_auditors_allowed := TRIM(p_unit_ver_rec.max_auditors_allowed);
198 	      p_unit_ver_rec.billing_credit_points := TRIM(p_unit_ver_rec.billing_credit_points);
199               p_unit_ver_rec.ovrd_wkld_val_flag := TRIM(p_unit_ver_rec.ovrd_wkld_val_flag);
200               p_unit_ver_rec.workload_val_code := TRIM(p_unit_ver_rec.workload_val_code);
201 	      p_unit_ver_rec.billing_hrs := TRIM(p_unit_ver_rec.billing_hrs);
202     END trim_values ;
203 
204     PROCEDURE validate_parameters(p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type) AS
205     /***********************************************************************************************
206 
207     Created By:         sarakshi
208     Date Created By:    11-Nov-2002
209     Purpose:            This procedure validates the parameters for the unit version record passed.
210 
211     Known limitations,enhancements,remarks:
212     Change History
213     Who       When         What
214     sarakshi  12-dec-2002  MAndatory check for level code is added as a part of bug#2702240
215     ***********************************************************************************************/
216 
217     BEGIN
218       p_unit_ver_rec.status:='S';
219 
220       --Validate all mandatory parameter,which are required for subprocess to continue
221 
222       IF p_unit_ver_rec.unit_cd IS NULL THEN
223         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
224         p_unit_ver_rec.status:='E';
225       END IF;
226 
227       IF p_unit_ver_rec.version_number IS NULL THEN
228         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
229         p_unit_ver_rec.status:='E';
230       END IF;
231 
232       IF p_unit_ver_rec.start_dt IS NULL THEN
233         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_START_DATE','LEGACY_TOKENS',FALSE);
234         p_unit_ver_rec.status:='E';
235       END IF;
236 
237       IF p_unit_ver_rec.unit_status IS NULL THEN
238         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_STATUS','LEGACY_TOKENS',FALSE);
239         p_unit_ver_rec.status:='E';
240       END IF;
241 
242       IF p_unit_ver_rec.title IS NULL THEN
243         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TITLE','LEGACY_TOKENS',FALSE);
244         p_unit_ver_rec.status:='E';
245       END IF;
246 
247       IF p_unit_ver_rec.short_title IS NULL THEN
248         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','SHORT_TITLE','LEGACY_TOKENS',FALSE);
249         p_unit_ver_rec.status:='E';
250       END IF;
251 
252       IF p_unit_ver_rec.credit_point_descriptor IS NULL THEN
253         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','CREDIT_POINT_DESCRIPTOR','LEGACY_TOKENS',FALSE);
254         p_unit_ver_rec.status:='E';
255       END IF;
256 
257       IF p_unit_ver_rec.enrolled_credit_points IS NULL THEN
258         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ENROL_CREDIT_PTS','LEGACY_TOKENS',FALSE);
259         p_unit_ver_rec.status:='E';
260       END IF;
261 
262       IF p_unit_ver_rec.unit_level IS NULL THEN
263         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_LEVEL','LEGACY_TOKENS',FALSE);
264         p_unit_ver_rec.status:='E';
265       END IF;
266 
267       IF p_unit_ver_rec.coord_person_number IS NULL THEN
268         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','CORD_PERSON_NUM','LEGACY_TOKENS',FALSE);
269         p_unit_ver_rec.status:='E';
270       END IF;
271 
272       IF p_unit_ver_rec.owner_org_unit_cd IS NULL THEN
273         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','OWNER_ORG_UNIT_CD','LEGACY_TOKENS',FALSE);
274         p_unit_ver_rec.status:='E';
275       END IF;
276 
277       IF p_unit_ver_rec.curriculum_id IS NULL AND
278         p_unit_ver_rec.curriculum_description IS NOT NULL AND
279         FND_PROFILE.VALUE('IGS_PS_CURRICULUM_ID')= 'Y'  THEN
280         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','CURRICULUM_ID','LEGACY_TOKENS',FALSE);
281         p_unit_ver_rec.status:='E';
282       END IF;
283 
284       --This validation is added as a part of bug#2702240
285       IF p_unit_ver_rec.level_code IS NULL THEN
286         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','LEVEL_CODE','LEGACY_TOKENS',FALSE);
287         p_unit_ver_rec.status:='E';
288       END IF;
289 
290     END validate_parameters;
291 
292 
293     PROCEDURE validate_derivations(p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type) AS
294     /***********************************************************************************************
295 
296     Created By:         sarakshi
297     Date Created By:    11-Nov-2002
298     Purpose:            This procedure derives the values of certain fields that are compatible to OSS.
299 
300     Known limitations,enhancements,remarks:
301     Change History
302     Who       When         What
303     sarakshi  04-May-2004  Enh#3568858,Added validation related to ovrd_wkld_val_flag
304     vvutukur  10-Aug-2003  Enh#3045069.PSP Enh Build.Assigned initial value 'X' for repeatable_ind instead of 'N'.
305     sarakshi  11-Dec-2002  Bug#2702240,derived values for state_financail_aid,federal_financial_aid,
306                            institutional_financial_aid,same_teaching_period,exclude_from_cp_limit,
307                            record_exclusion_flag,ss_display_ind,special_permission_ind
308     smvk      26-Dec-2002  Bug # 2721495. Calling the procedure igs_ps_validate_lgcy_pkg.get_party_id
309                            instead of function igs_ge_gen_003.get_person_id to derive the person id.
310     ***********************************************************************************************/
311     CURSOR c_unit_lvl(cp_level_code igs_ps_unit_type_lvl.level_code%TYPE) IS
312     SELECT unit_type_id
313     FROM   igs_ps_unit_type_lvl
314     WHERE  level_code=cp_level_code;
315 
316     CURSOR c_repeat_code(cp_repeat_code igs_ps_rpt_fmly.repeat_code%TYPE) IS
317     SELECT rpt_fmly_id
318     FROM   igs_ps_rpt_fmly
319     WHERE  repeat_code=cp_repeat_code;
320 
321     CURSOR  c_curriculum_seq_num IS
322     SELECT  igs_ps_unt_crclm_all_s.NEXTVAL
323     FROM    DUAL;
324 
325 
326     l_d_start_date   DATE;
327     l_d_end_date     DATE;
328     l_b_ret_status   VARCHAR2(100);
329     BEGIN
330       IF p_unit_ver_rec.title_override_ind IS NULL THEN
331          p_unit_ver_rec.title_override_ind :='N';
332       END IF;
333 
334       IF p_unit_ver_rec.abbreviation IS NULL THEN
335          p_unit_ver_rec.abbreviation :=UPPER(SUBSTR(p_unit_ver_rec.title,1,20));
336       END IF;
337 
338       IF p_unit_ver_rec.points_override_ind IS NULL THEN
339          p_unit_ver_rec.points_override_ind :='N';
340       END IF;
341 
342       IF p_unit_ver_rec.supp_exam_permitted_ind IS NULL THEN
343          p_unit_ver_rec.supp_exam_permitted_ind :='N';
344       END IF;
345 
346       IF p_unit_ver_rec.award_course_only_ind IS NULL THEN
347          p_unit_ver_rec.award_course_only_ind :='N';
348       END IF;
349 
350       IF p_unit_ver_rec.research_unit_ind IS NULL THEN
351          p_unit_ver_rec.research_unit_ind :='N';
352       END IF;
353 
354       IF p_unit_ver_rec.industrial_ind IS NULL THEN
355          p_unit_ver_rec.industrial_ind :='N';
356       END IF;
357 
358       IF p_unit_ver_rec.practical_ind IS NULL THEN
359          p_unit_ver_rec.practical_ind :='N';
360       END IF;
361 
362       IF p_unit_ver_rec.repeatable_ind IS NULL THEN
363          p_unit_ver_rec.repeatable_ind :='X';
364       END IF;
365 
366       IF p_unit_ver_rec.assessable_ind IS NULL THEN
367          p_unit_ver_rec.assessable_ind :='N';
368       END IF;
369 
370       IF p_unit_ver_rec.ivr_enrol_ind IS NULL THEN
371          p_unit_ver_rec.ivr_enrol_ind :='N';
372       END IF;
373 
374       IF p_unit_ver_rec.ss_enrol_ind IS NULL THEN
375          p_unit_ver_rec.ss_enrol_ind :='N';
376       END IF;
377 
378       IF p_unit_ver_rec.anon_unit_grading_ind IS NULL THEN
379          p_unit_ver_rec.anon_unit_grading_ind :='N';
380       END IF;
381 
382       IF p_unit_ver_rec.anon_assess_grading_ind IS NULL THEN
383          p_unit_ver_rec.anon_assess_grading_ind :='N';
384       END IF;
385 
386       IF p_unit_ver_rec.subtitle_approved_ind IS NULL THEN
387          p_unit_ver_rec.subtitle_approved_ind :='N';
388       END IF;
389 
390       IF p_unit_ver_rec.subtitle_closed_ind IS NULL THEN
391          p_unit_ver_rec.subtitle_closed_ind :='N';
392       END IF;
393 
394       IF p_unit_ver_rec.curriculum_closed_ind IS NULL THEN
395          p_unit_ver_rec.curriculum_closed_ind :='N';
396       END IF;
397 
398       IF p_unit_ver_rec.auditable_ind IS NULL THEN
399          p_unit_ver_rec.auditable_ind :='N';
400       END IF;
401 
402       IF p_unit_ver_rec.audit_permission_ind IS NULL THEN
403          p_unit_ver_rec.audit_permission_ind :='N';
404       END IF;
405 
406 
407 
408       --Following defaulting are done as a part of bug#2702240
409 
410       IF p_unit_ver_rec.state_financial_aid IS NULL THEN
411          p_unit_ver_rec.state_financial_aid :='N';
412       END IF;
413 
414       IF p_unit_ver_rec.federal_financial_aid IS NULL THEN
415          p_unit_ver_rec.federal_financial_aid :='N';
416       END IF;
417 
418       IF p_unit_ver_rec.institutional_financial_aid IS NULL THEN
419          p_unit_ver_rec.institutional_financial_aid :='N';
420       END IF;
421 
422       IF p_unit_ver_rec.same_teaching_period IS NULL THEN
423          p_unit_ver_rec.same_teaching_period :='N';
424       END IF;
425 
426       IF p_unit_ver_rec.exclude_from_max_cp_limit IS NULL THEN
427          p_unit_ver_rec.exclude_from_max_cp_limit :='N';
428       END IF;
429 
430       IF p_unit_ver_rec.record_exclusion_flag IS NULL THEN
431          p_unit_ver_rec.record_exclusion_flag :='N';
432       END IF;
433 
434       IF p_unit_ver_rec.ss_display_ind IS NULL THEN
435          p_unit_ver_rec.ss_display_ind :='N';
436       END IF;
437 
438       IF p_unit_ver_rec.special_permission_ind IS NULL THEN
439          p_unit_ver_rec.special_permission_ind :='N';
440       END IF;
441 
442       -------------------------------------------------------
443 
444       IF p_unit_ver_rec.review_dt IS NULL THEN
445          p_unit_ver_rec.review_dt := p_unit_ver_rec.start_dt;
446       END IF;
447 
448       OPEN c_unit_lvl(p_unit_ver_rec.level_code);
449       FETCH c_unit_lvl INTO l_n_unit_type_id;
450       CLOSE c_unit_lvl;
451 
452       OPEN c_repeat_code(p_unit_ver_rec.repeat_code);
453       FETCH c_repeat_code INTO l_n_rpt_fmly_id;
454       CLOSE c_repeat_code;
455 
456       igs_ps_validate_lgcy_pkg.get_party_id(p_unit_ver_rec.coord_person_number,l_n_coord_person_id);
457       IF l_n_coord_person_id IS NULL THEN
458         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','CORD_PERSON_NUM','LEGACY_TOKENS',FALSE);
459         p_unit_ver_rec.status:='E';
460       END IF;
461 
462       --derive cal type and seq number for enrol load alternate code
463       IF p_unit_ver_rec.enrol_load_alt_cd IS NOT NULL THEN
464         igs_ge_gen_003.get_calendar_instance(p_unit_ver_rec.enrol_load_alt_cd,
465                                              NULL,
466                                              l_c_cal_type_enrol_load_cal,
467                                              l_n_seq_num_enrol_load_cal,
468                                              l_d_start_date,
469                                              l_d_end_date,
470                                              l_b_ret_status);
471         IF l_b_ret_status <> 'SINGLE' THEN
472           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','ENROL_ALT_CODE','LEGACY_TOKENS',FALSE);
473           p_unit_ver_rec.status:='E';
474         END IF;
475       END IF;
476 
477       --derive cal type and seq number for offer load alternate code
478       IF p_unit_ver_rec.offer_load_alt_cd IS NOT NULL THEN
479         igs_ge_gen_003.get_calendar_instance(p_unit_ver_rec.offer_load_alt_cd,
480                                              NULL,
481                                              l_c_cal_type_offer_load_cal,
482                                              l_n_seq_num_offer_load_cal,
483                                              l_d_start_date,
484                                              l_d_end_date,
485                                              l_b_ret_status);
486         IF l_b_ret_status <> 'SINGLE' THEN
487           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','OFFER_ALT_CODE','LEGACY_TOKENS',FALSE);
488           p_unit_ver_rec.status:='E';
489         END IF;
490       END IF;
491 
492       --Derive the owner org unit start date
493       IF NOT igs_re_val_rsup.get_org_unit_dtls(p_unit_ver_rec.owner_org_unit_cd,l_d_owner_ou_start_dt) THEN
494         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','OWNER_ORG_UNIT_CD','LEGACY_TOKENS',FALSE);
495         p_unit_ver_rec.status:='E';
496       END IF;
497 
498 
499       IF FND_PROFILE.VALUE('IGS_PS_CURRICULUM_ID')= 'N'  AND
500         p_unit_ver_rec.curriculum_description IS NOT NULL THEN
501 
502         OPEN c_curriculum_seq_num;
503         FETCH c_curriculum_seq_num INTO p_unit_ver_rec.curriculum_id;
504         CLOSE c_curriculum_seq_num;
505       END IF;
506 
507       IF p_unit_ver_rec.subtitle IS NOT NULL THEN
508         p_unit_ver_rec.subtitle_modifiable_flag := 'Y';
509       ELSE
510         p_unit_ver_rec.subtitle_modifiable_flag :='N';
511       END IF;
512 
513       IF p_unit_ver_rec.ovrd_wkld_val_flag IS NULL THEN
514         p_unit_ver_rec.ovrd_wkld_val_flag :='N';
515       END IF;
516 
517 
518     END validate_derivations;
519 
520     PROCEDURE validate_db_cons(p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type) AS
521     /***********************************************************************************************
522 
523     Created By:         sarakshi
524     Date Created By:    12-Nov-2002
525     Purpose:            This procedure validates database constraints.
526 
527     Known limitations,enhancements,remarks:
528 
529     Change History
530 
531     Who       When         What
532     sarakshi  15-May-2006  Bug#3064563, modified the format mask(clock_hours,continuing_education_units,work_load_cp_lecture,work_load_cp_lab,contact_hrs_lab) as specified in the bug.
533     sarakshi  04-May-2004  Enh#3568858,Added validation related to columns ovrd_wkld_val_flag, workload_val_code
534     sarakshi  07-Nov-2003  Enh#3116171, added logic related to the newly introduced field BILLING_CREDIT_POINTS, check_constraint
535     vvutukur  19-Aug-2003  Enh#3045069.PSP Enh Build. Incorporated review comments.
536     smvk      09-Jan-2003  Bug # 2702263, Checking the range of values for columns claimable_hours,lecture_credit_points,
537                            lab_credit_points,other_credit_points,clock_hours,continuing_education_units,
538                            advance_maximum,enrollment_expected,enrollment_minimum,enrollment_maximum,
539                            override_enrollment_max,max_auditors_allowed,work_load_cp_lecture,work_load_cp_lab,
540                            max_repeat_credit_points,same_teach_period_repeats_cp,work_load_other,contact_hrs_lecture,
541                            contact_hrs_lab,contact_hrs_other,non_schd_required_hrs,max_repeats_for_credit,
542                            max_repeats_for_funding and same_teach_period_repeats.
543     sarakshi  11-Dec-2002  Bug#2702240,checking values for state_financial_aid,federal_financial_aid,
544                            institutional_financial_aid,same_teaching_period,exclude_from_cp_limit,
545                            record_exclusion_flag,ss_display_ind,special_permission_ind,IVR_enrol_ind,
546                            ss_enrol_ind,anon_unit_grading_ind,anon_assess_grading_ind,auditable_ind,
547                            audit_permission_ind
548     smvk      20-Dec-2002  Removed the IGS_PS_UNIT_VER_PKG.check_constraints call of owner_org_unit_cd.
549                            As owner org unit code can have value in mixed case. Bug 2487149.
550     ***********************************************************************************************/
551 
552     CURSOR  cur_credit_point_des(cp_credit_point_descriptor igs_lookup_values.lookup_code%TYPE) IS
553     SELECT 'X'
554     FROM   igs_lookup_values
555     WHERE  lookup_type='CREDIT_POINT_DSCR'
556     AND    lookup_code=cp_credit_point_descriptor;
557     l_var  VARCHAR2(1);
558 
559     BEGIN
560       --Check for Pk validations
561       IF igs_ps_unit_ver_pkg.get_pk_for_validation(p_unit_ver_rec.unit_cd,
562                                                         p_unit_ver_rec.version_number) THEN
563         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS','UNIT_VERSION','LEGACY_TOKENS',FALSE);
564         p_unit_ver_rec.status:='W';
565         RETURN;
566       END IF;
567 
568       IF FND_PROFILE.VALUE('IGS_PS_CURRICULUM_ID')= 'Y'  AND p_unit_ver_rec.curriculum_description IS NOT NULL THEN
569         IF igs_ps_unt_crclm_pkg.get_pk_for_validation(p_unit_ver_rec.curriculum_id) THEN
570           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS','CURRICULUM_ID','LEGACY_TOKENS',FALSE);
571           p_unit_ver_rec.status:='W';
572           RETURN;
573         END IF;
574       END IF;
575 
576       --Check UK for validations
577       IF igs_ps_unit_subtitle_pkg.get_uk_for_validation(p_unit_ver_rec.unit_cd,
578                                                         p_unit_ver_rec.version_number,
579                                                         p_unit_ver_rec.subtitle) THEN
580         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS','SUBTITLE','LEGACY_TOKENS',FALSE);
581         p_unit_ver_rec.status:='W';
582         RETURN;
583       END IF;
584 
585       --Check constraint
586       BEGIN
587         igs_ps_unit_ver_pkg.check_constraints('UNIT_CD',p_unit_ver_rec.unit_cd);
588       EXCEPTION
589         WHEN OTHERS THEN
590           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_CD','LEGACY_TOKENS',TRUE);
591           p_unit_ver_rec.status :='E';
592       END;
593 
594       BEGIN
595         igs_ps_unit_ver_pkg.check_constraints('ABBREVIATION',p_unit_ver_rec.abbreviation);
596       EXCEPTION
597         WHEN OTHERS THEN
598           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','ABBREVIATION','LEGACY_TOKENS',TRUE);
599           p_unit_ver_rec.status :='E';
600       END;
601 
602       BEGIN
603         igs_ps_unit_ver_pkg.check_constraints('ASSESSABLE_IND',p_unit_ver_rec.assessable_ind);
604       EXCEPTION
605         WHEN OTHERS THEN
606           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','ASSESSABLE_IND','LEGACY_TOKENS',TRUE);
607           p_unit_ver_rec.status :='E';
608       END;
609 
610       BEGIN
611         igs_ps_unit_ver_pkg.check_constraints('AWARD_COURSE_ONLY_IND',p_unit_ver_rec.award_course_only_ind);
612       EXCEPTION
613         WHEN OTHERS THEN
614           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','AWARD_COURSE_ONLY_IND','LEGACY_TOKENS',TRUE);
615           p_unit_ver_rec.status :='E';
616       END;
617 
618       BEGIN
619         igs_ps_unit_ver_pkg.check_constraints('CREDIT_POINT_DESCRIPTOR',p_unit_ver_rec.credit_point_descriptor);
620       EXCEPTION
621         WHEN OTHERS THEN
622           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','CREDIT_POINT_DESCRIPTOR','LEGACY_TOKENS',TRUE);
623           p_unit_ver_rec.status :='E';
624       END;
625 
626       BEGIN
627         igs_ps_unit_ver_pkg.check_constraints('INDUSTRIAL_IND',p_unit_ver_rec.industrial_ind);
628       EXCEPTION
629         WHEN OTHERS THEN
630           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','INDUSTRIAL_IND','LEGACY_TOKENS',TRUE);
631           p_unit_ver_rec.status :='E';
632       END;
633 
634       BEGIN
635         igs_ps_unit_ver_pkg.check_constraints('POINTS_OVERRIDE_IND',p_unit_ver_rec.points_override_ind);
636       EXCEPTION
637         WHEN OTHERS THEN
638           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','POINTS_OVERRIDE_IND','LEGACY_TOKENS',TRUE);
639           p_unit_ver_rec.status :='E';
640       END;
641 
642       BEGIN
643         igs_ps_unit_ver_pkg.check_constraints('PRACTICAL_IND',p_unit_ver_rec.practical_ind);
644       EXCEPTION
645         WHEN OTHERS THEN
646           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','PRACTICAL_IND','LEGACY_TOKENS',TRUE);
647           p_unit_ver_rec.status :='E';
648       END;
649 
650       BEGIN
651         igs_ps_unit_ver_pkg.check_constraints('REPEATABLE_IND',p_unit_ver_rec.repeatable_ind);
652       EXCEPTION
653         WHEN OTHERS THEN
654           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','REPEATABLE_IND','LEGACY_TOKENS',TRUE);
655           p_unit_ver_rec.status :='E';
656       END;
657 
658       BEGIN
659         igs_ps_unit_ver_pkg.check_constraints('RESEARCH_UNIT_IND',p_unit_ver_rec.research_unit_ind);
660       EXCEPTION
661         WHEN OTHERS THEN
662           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','RESEARCH_UNIT_IND','LEGACY_TOKENS',TRUE);
663           p_unit_ver_rec.status :='E';
664       END;
665 
666       BEGIN
667         igs_ps_unit_ver_pkg.check_constraints('SUPP_EXAM_PERMITTED_IND',p_unit_ver_rec.supp_exam_permitted_ind);
668       EXCEPTION
669         WHEN OTHERS THEN
670           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SUPP_EXAM_PERMITTED_IND','LEGACY_TOKENS',TRUE);
671           p_unit_ver_rec.status :='E';
672       END;
673 
674       BEGIN
675         igs_ps_unit_ver_pkg.check_constraints('TITLE_OVERRIDE_IND',p_unit_ver_rec.title_override_ind);
676       EXCEPTION
677         WHEN OTHERS THEN
678           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','TITLE_OVERRIDE_IND','LEGACY_TOKENS',TRUE);
679           p_unit_ver_rec.status :='E';
680       END;
681 
682       -----------------------------------Following checks are done as a part of bug#2702240---------------
683 
684       BEGIN
685         igs_ps_unit_ver_pkg.check_constraints('STATE_FINANCIAL_AID',p_unit_ver_rec.state_financial_aid);
686       EXCEPTION
687         WHEN OTHERS THEN
688           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','STATE_FINANCIAL_AID','LEGACY_TOKENS',TRUE);
689           p_unit_ver_rec.status :='E';
690       END;
691 
692       BEGIN
693         igs_ps_unit_ver_pkg.check_constraints('FEDERAL_FINANCIAL_AID',p_unit_ver_rec.federal_financial_aid);
694       EXCEPTION
695         WHEN OTHERS THEN
696           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','FEDERAL_FINANCIAL_AID','LEGACY_TOKENS',TRUE);
697           p_unit_ver_rec.status :='E';
698       END;
699 
700       BEGIN
701         igs_ps_unit_ver_pkg.check_constraints('INSTITUTIONAL_FINANCIAL_AID',p_unit_ver_rec.institutional_financial_aid);
702       EXCEPTION
703         WHEN OTHERS THEN
704           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','INSTITUTIONAL_FINANCIAL_AID','LEGACY_TOKENS',TRUE);
705           p_unit_ver_rec.status :='E';
706       END;
707 
708       BEGIN
709         igs_ps_unit_ver_pkg.check_constraints('SAME_TEACHING_PERIOD',p_unit_ver_rec.same_teaching_period);
710       EXCEPTION
711         WHEN OTHERS THEN
712           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SAME_TEACHING_PERIOD','LEGACY_TOKENS',TRUE);
713           p_unit_ver_rec.status :='E';
714       END;
715 
716       BEGIN
717         igs_ps_unit_ver_pkg.check_constraints('EXCLUDE_FROM_MAX_CP_LIMIT',p_unit_ver_rec.exclude_from_max_cp_limit);
718       EXCEPTION
719         WHEN OTHERS THEN
720           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','EXCLUDE_FROM_MAX_CP_LIMIT','LEGACY_TOKENS',TRUE);
721           p_unit_ver_rec.status :='E';
722       END;
723 
724       BEGIN
725         igs_ps_unit_ver_pkg.check_constraints('RECORD_EXCLUSION_FLAG',p_unit_ver_rec.record_exclusion_flag);
726       EXCEPTION
727         WHEN OTHERS THEN
728           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','RECORD_EXCLUSION_FLAG','LEGACY_TOKENS',TRUE);
729           p_unit_ver_rec.status :='E';
730       END;
731 
732       BEGIN
733         igs_ps_unit_ver_pkg.check_constraints('SS_DISPLAY_IND',p_unit_ver_rec.ss_display_ind);
734       EXCEPTION
735         WHEN OTHERS THEN
736           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SS_DISPLAY_IND','LEGACY_TOKENS',TRUE);
737           p_unit_ver_rec.status :='E';
738       END;
739 
740       BEGIN
741         igs_ps_unit_ver_pkg.check_constraints('SPECIAL_PERMISSION_IND',p_unit_ver_rec.special_permission_ind);
742       EXCEPTION
743         WHEN OTHERS THEN
744           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SPECIAL_PERMISSION_IND','LEGACY_TOKENS',TRUE);
745           p_unit_ver_rec.status :='E';
746       END;
747 
748       --should not call the TBH chcek constraint as some other validation are also there
749       IF  p_unit_ver_rec.ivr_enrol_ind NOT IN ('Y','N') THEN
750         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','IVR_ENROL_IND','LEGACY_TOKENS',FALSE);
751         p_unit_ver_rec.status :='E';
752       END IF;
753 
754       --should not call the TBH chcek constraint as some other validation are also there
755       IF  p_unit_ver_rec.ss_enrol_ind NOT IN ('Y','N') THEN
756         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SS_ENROL_IND','LEGACY_TOKENS',FALSE);
757         p_unit_ver_rec.status :='E';
758       END IF;
759 
760       IF p_unit_ver_rec.subtitle_approved_ind NOT IN ('Y','N') THEN
761         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SUBTITLE_APPROVED_IND','LEGACY_TOKENS',FALSE);
762         p_unit_ver_rec.status :='E';
763       END IF;
764 
765       IF p_unit_ver_rec.subtitle_closed_ind NOT IN ('Y','N') THEN
766         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','SUBTITLE_CLOSED_IND','LEGACY_TOKENS',FALSE);
767         p_unit_ver_rec.status :='E';
768       END IF;
769 
770       IF p_unit_ver_rec.curriculum_closed_ind NOT IN ('Y','N') THEN
771         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','CURRICULUM_CLOSED_IND','LEGACY_TOKENS',FALSE);
772         p_unit_ver_rec.status :='E';
773       END IF;
774 
775 
776       BEGIN
777         igs_ps_unit_ver_pkg.check_constraints('ANON_UNIT_GRADING_IND',p_unit_ver_rec.anon_unit_grading_ind);
778       EXCEPTION
779         WHEN OTHERS THEN
780           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','ANON_UNIT_GRADING_IND','LEGACY_TOKENS',TRUE);
781           p_unit_ver_rec.status :='E';
782       END;
783 
784       BEGIN
785         igs_ps_unit_ver_pkg.check_constraints('ANON_ASSESS_GRADING_IND',p_unit_ver_rec.anon_assess_grading_ind);
786       EXCEPTION
787         WHEN OTHERS THEN
788           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','ANON_ASSESS_GRADING_IND','LEGACY_TOKENS',TRUE);
789           p_unit_ver_rec.status :='E';
790       END;
791 
792       BEGIN
793         igs_ps_unit_ver_pkg.check_constraints('AUDITABLE_IND',p_unit_ver_rec.auditable_ind);
794       EXCEPTION
795         WHEN OTHERS THEN
796           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','AUDITABLE_IND','LEGACY_TOKENS',TRUE);
797           p_unit_ver_rec.status :='E';
798       END;
799 
800       BEGIN
801         igs_ps_unit_ver_pkg.check_constraints('AUDIT_PERMISSION_IND',p_unit_ver_rec.audit_permission_ind);
802       EXCEPTION
803         WHEN OTHERS THEN
804           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','AUDIT_PERMISSION_IND','LEGACY_TOKENS',TRUE);
805           p_unit_ver_rec.status :='E';
806       END;
807       -----------------------------------------------------------------------------------------------------
808 
809       BEGIN
810         igs_ps_unit_ver_pkg.check_constraints('UNIT_INT_COURSE_LEVEL_CD',p_unit_ver_rec.unit_int_course_level_cd);
811       EXCEPTION
812         WHEN OTHERS THEN
813           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_INT_COURSE_LEVEL_CD','LEGACY_TOKENS',TRUE);
814           p_unit_ver_rec.status :='E';
815       END;
816 
817       BEGIN
818         igs_ps_unit_ver_pkg.check_constraints('UNIT_STATUS',p_unit_ver_rec.unit_status);
819       EXCEPTION
820         WHEN OTHERS THEN
821           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_STATUS','LEGACY_TOKENS',TRUE);
822           p_unit_ver_rec.status :='E';
823       END;
824 
825       BEGIN
826         igs_ps_unit_ver_pkg.check_constraints('UNIT_LEVEL',p_unit_ver_rec.unit_level);
827       EXCEPTION
828         WHEN OTHERS THEN
829           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_LEVEL','LEGACY_TOKENS',TRUE);
830           p_unit_ver_rec.status :='E';
831       END;
832 
833       BEGIN
834         igs_ps_unit_ver_pkg.check_constraints('ACHIEVABLE_CREDIT_POINTS',p_unit_ver_rec.achievable_credit_points);
835       EXCEPTION
836         WHEN OTHERS THEN
837           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','ACHIEVABLE_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
838           p_unit_ver_rec.status :='E';
839       END;
840 
841       BEGIN
842         igs_ps_unit_ver_pkg.check_constraints('POINTS_INCREMENT',p_unit_ver_rec.points_increment);
843       EXCEPTION
844         WHEN OTHERS THEN
845           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','POINTS_INCREMENT','LEGACY_TOKENS',TRUE);
846           p_unit_ver_rec.status :='E';
847       END;
848 
849       BEGIN
850         igs_ps_unit_ver_pkg.check_constraints('POINTS_MIN',p_unit_ver_rec.points_min);
851       EXCEPTION
852         WHEN OTHERS THEN
853           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','POINTS_MIN','LEGACY_TOKENS',TRUE);
854           p_unit_ver_rec.status :='E';
855       END;
856 
857       BEGIN
858         igs_ps_unit_ver_pkg.check_constraints('POINTS_MAX',p_unit_ver_rec.points_max);
859       EXCEPTION
860         WHEN OTHERS THEN
861           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','POINTS_MAX','LEGACY_TOKENS',TRUE);
862           p_unit_ver_rec.status :='E';
863       END;
864 
865       BEGIN
866         igs_ps_unit_ver_pkg.check_constraints('ENROLLED_CREDIT_POINTS',p_unit_ver_rec.enrolled_credit_points);
867       EXCEPTION
868         WHEN OTHERS THEN
869           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','ENROLLED_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
870           p_unit_ver_rec.status :='E';
871       END;
872 
873       BEGIN
874         igs_ps_unit_ver_pkg.check_constraints('VERSION_NUMBER',p_unit_ver_rec.version_number);
875       EXCEPTION
876         WHEN OTHERS THEN
877           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VER_NUM_1_999',NULL,NULL,TRUE);
878           p_unit_ver_rec.status :='E';
879       END;
880 
881       IF p_unit_ver_rec.billing_credit_points IS NOT NULL THEN
882         BEGIN
883           igs_ps_unit_ver_pkg.check_constraints ( 'BILLING_CREDIT_POINTS', p_unit_ver_rec.billing_credit_points);
884         EXCEPTION
885           WHEN OTHERS THEN
886             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999', 'BILLING_CREDIT_POINTS', 'LEGACY_TOKENS', TRUE);
887             p_unit_ver_rec.status := 'E';
888         END;
889       END IF;
890 
891 
892       --Fk validations
893       IF (NOT igs_ps_unit_stat_pkg.get_pk_for_validation(p_unit_ver_rec.unit_status)) THEN
894         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_STATUS','LEGACY_TOKENS',FALSE);
895         p_unit_ver_rec.status:='E';
896       END IF;
897 
898       IF l_n_rpt_fmly_id IS NOT NULL THEN
899         IF (NOT igs_ps_rpt_fmly_pkg.get_pk_for_validation(l_n_rpt_fmly_id)) THEN
900           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_REPEAT','LEGACY_TOKENS',FALSE);
901           p_unit_ver_rec.status:='E';
902         END IF;
903       END IF;
904 
905       IF (NOT igs_ps_unit_level_pkg.get_pk_for_validation(p_unit_ver_rec.unit_level)) THEN
906         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_LEVEL','LEGACY_TOKENS',FALSE);
907         p_unit_ver_rec.status:='E';
908       END IF;
909 
910       IF p_unit_ver_rec.unit_int_course_level_cd IS NOT NULL THEN
911         IF (NOT igs_ps_unit_int_lvl_pkg.get_pk_for_validation(p_unit_ver_rec.unit_int_course_level_cd)) THEN
912           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_INT_COURSE_LEVEL_CD','LEGACY_TOKENS',FALSE);
913           p_unit_ver_rec.status:='E';
914         END IF;
915       END IF;
916 
917       IF p_unit_ver_rec.rev_account_cd IS NOT NULL THEN
918         IF (NOT igs_fi_acc_pkg.get_pk_for_validation(p_unit_ver_rec.rev_account_cd)) THEN
919           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','REV_ACC_CD','LEGACY_TOKENS',FALSE);
920           p_unit_ver_rec.status:='E';
921         END IF;
922       END IF;
923 
924       --Validating the credit point descriptor, bug#2702240
925       OPEN cur_credit_point_des(p_unit_ver_rec.credit_point_descriptor);
926       FETCH cur_credit_point_des INTO l_var;
927       IF cur_credit_point_des%NOTFOUND THEN
928         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','CREDIT_POINT_DESCRIPTOR','LEGACY_TOKENS',FALSE);
929         p_unit_ver_rec.status:='E';
930       END IF;
931 
932       --validating the level_code passed is a valid one
933       IF l_n_unit_type_id IS NULL THEN
934         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','LEVEL_CODE','LEGACY_TOKENS',FALSE);
935         p_unit_ver_rec.status:='E';
936       END IF;
937 
938       -- Added as a part of 2702263
939       IF p_unit_ver_rec.claimable_hours IS NOT NULL THEN
940         BEGIN
941           igs_ps_unit_ver_pkg.check_constraints('CLAIMABLE_HOURS',p_unit_ver_rec.claimable_hours);
942         EXCEPTION
943           WHEN OTHERS THEN
944             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','CLAIMABLE_HOURS','LEGACY_TOKENS',TRUE);
945             p_unit_ver_rec.status :='E';
946         END;
947       END IF;
948 
949       IF p_unit_ver_rec.lecture_credit_points IS NOT NULL THEN
950         BEGIN
951           igs_ps_unit_ver_pkg.check_constraints('LECTURE_CREDIT_POINTS',p_unit_ver_rec.lecture_credit_points);
952         EXCEPTION
953           WHEN OTHERS THEN
954             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','LECTURE_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
955             p_unit_ver_rec.status :='E';
956         END;
957       END IF;
958 
959       IF p_unit_ver_rec.lab_credit_points IS NOT NULL THEN
960         BEGIN
961           igs_ps_unit_ver_pkg.check_constraints('LAB_CREDIT_POINTS',p_unit_ver_rec.lab_credit_points);
962         EXCEPTION
963           WHEN OTHERS THEN
964             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','LAB_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
965             p_unit_ver_rec.status :='E';
966         END;
967       END IF;
968 
969       IF p_unit_ver_rec.other_credit_points IS NOT NULL THEN
970         BEGIN
971           igs_ps_unit_ver_pkg.check_constraints('OTHER_CREDIT_POINTS',p_unit_ver_rec.other_credit_points);
972         EXCEPTION
973           WHEN OTHERS THEN
974             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','OTHER_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
975             p_unit_ver_rec.status :='E';
976         END;
977       END IF;
978 
979       IF p_unit_ver_rec.clock_hours IS NOT NULL THEN
980         BEGIN
981           igs_ps_unit_ver_pkg.check_constraints('CLOCK_HOURS',p_unit_ver_rec.clock_hours);
982         EXCEPTION
983           WHEN OTHERS THEN
984             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','CLOCK_HOURS','LEGACY_TOKENS',TRUE);
985             p_unit_ver_rec.status :='E';
986         END;
987       END IF;
988 
989       IF p_unit_ver_rec.continuing_education_units IS NOT NULL THEN
990         BEGIN
991           igs_ps_unit_ver_pkg.check_constraints('CONTINUING_EDUCATION_UNITS',p_unit_ver_rec.continuing_education_units);
992         EXCEPTION
993           WHEN OTHERS THEN
994             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','CONTINUING_EDUCATION_UNITS','LEGACY_TOKENS',TRUE);
995             p_unit_ver_rec.status :='E';
996         END;
997       END IF;
998 
999       IF p_unit_ver_rec.advance_maximum IS NOT NULL THEN
1000         BEGIN
1001           igs_ps_unit_ver_pkg.check_constraints('ADVANCE_MAXIMUM',p_unit_ver_rec.advance_maximum);
1002         EXCEPTION
1003           WHEN OTHERS THEN
1004             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ADVANCE_MAXIMUM','LEGACY_TOKENS',TRUE);
1005             p_unit_ver_rec.status :='E';
1006         END;
1007       END IF;
1008 
1009       IF p_unit_ver_rec.enrollment_expected IS NOT NULL THEN
1010         BEGIN
1011           igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_EXPECTED',p_unit_ver_rec.enrollment_expected);
1012         EXCEPTION
1013           WHEN OTHERS THEN
1014             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_EXPECTED','LEGACY_TOKENS',TRUE);
1015             p_unit_ver_rec.status :='E';
1016         END;
1017       END IF;
1018 
1019       IF p_unit_ver_rec.enrollment_minimum IS NOT NULL THEN
1020         BEGIN
1021           igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_MINIMUM',p_unit_ver_rec.enrollment_minimum);
1022         EXCEPTION
1023           WHEN OTHERS THEN
1024             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_MINIMUM','LEGACY_TOKENS',TRUE);
1025             p_unit_ver_rec.status :='E';
1026         END;
1027       END IF;
1028 
1029       IF p_unit_ver_rec.enrollment_maximum IS NOT NULL THEN
1030         BEGIN
1031           igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_MAXIMUM',p_unit_ver_rec.enrollment_maximum);
1032         EXCEPTION
1033           WHEN OTHERS THEN
1034             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_MAXIMUM','LEGACY_TOKENS',TRUE);
1035             p_unit_ver_rec.status :='E';
1036         END;
1037       END IF;
1038 
1039       IF p_unit_ver_rec.override_enrollment_max IS NOT NULL THEN
1040         BEGIN
1041           igs_ps_unit_ver_pkg.check_constraints('OVERRIDE_ENROLLMENT_MAX',p_unit_ver_rec.override_enrollment_max);
1042         EXCEPTION
1043           WHEN OTHERS THEN
1044             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','OVERRIDE_ENROLLMENT_MAX','LEGACY_TOKENS',TRUE);
1045             p_unit_ver_rec.status :='E';
1046         END;
1047       END IF;
1048 
1049       IF p_unit_ver_rec.max_auditors_allowed IS NOT NULL THEN
1050         BEGIN
1051           igs_ps_unit_ver_pkg.check_constraints('MAX_AUDITORS_ALLOWED',p_unit_ver_rec.max_auditors_allowed);
1052         EXCEPTION
1053           WHEN OTHERS THEN
1054             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999','MAX_AUDITORS_ALLOWED','LEGACY_TOKENS',TRUE);
1055             p_unit_ver_rec.status :='E';
1056         END;
1057       END IF;
1058 
1059       IF p_unit_ver_rec.work_load_cp_lecture IS NOT NULL THEN
1060         BEGIN
1061           igs_ps_unit_ver_pkg.check_constraints('WORK_LOAD_CP_LECTURE',p_unit_ver_rec.work_load_cp_lecture);
1062         EXCEPTION
1063           WHEN OTHERS THEN
1064             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_CP_LECTURE','LEGACY_TOKENS',TRUE);
1065             p_unit_ver_rec.status :='E';
1066         END;
1067       END IF;
1068 
1069 
1070       IF p_unit_ver_rec.work_load_cp_lab IS NOT NULL THEN
1071         BEGIN
1072           igs_ps_unit_ver_pkg.check_constraints('WORK_LOAD_CP_LAB',p_unit_ver_rec.work_load_cp_lab);
1073         EXCEPTION
1074           WHEN OTHERS THEN
1075             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_CP_LAB','LEGACY_TOKENS',TRUE);
1076             p_unit_ver_rec.status :='E';
1077         END;
1078       END IF;
1079 
1080       IF p_unit_ver_rec.max_repeat_credit_points IS NOT NULL THEN
1081         BEGIN
1082           igs_ps_unit_ver_pkg.check_constraints('MAX_REPEAT_CREDIT_POINTS',p_unit_ver_rec.max_repeat_credit_points);
1083         EXCEPTION
1084           WHEN OTHERS THEN
1085             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','MAX_REPEAT_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
1086             p_unit_ver_rec.status :='E';
1087         END;
1088       END IF;
1089 
1090       IF p_unit_ver_rec.same_teach_period_repeats_cp IS NOT NULL THEN
1091         BEGIN
1092           igs_ps_unit_ver_pkg.check_constraints('SAME_TEACH_PERIOD_REPEATS_CP',p_unit_ver_rec.same_teach_period_repeats_cp);
1093         EXCEPTION
1094           WHEN OTHERS THEN
1095             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','SAME_TEACH_PERIOD_REPEATS_CP','LEGACY_TOKENS',TRUE);
1096             p_unit_ver_rec.status :='E';
1097         END;
1098       END IF;
1099 
1100       IF p_unit_ver_rec.work_load_other IS NOT NULL THEN
1101         BEGIN
1102           igs_ps_unit_ver_pkg.check_constraints('WORK_LOAD_OTHER',p_unit_ver_rec.work_load_other);
1103         EXCEPTION
1104           WHEN OTHERS THEN
1105             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_OTHER','LEGACY_TOKENS',TRUE);
1106             p_unit_ver_rec.status :='E';
1107         END;
1108       END IF;
1109 
1110       IF p_unit_ver_rec.contact_hrs_lecture IS NOT NULL THEN
1111         BEGIN
1112           igs_ps_unit_ver_pkg.check_constraints('CONTACT_HRS_LECTURE',p_unit_ver_rec.contact_hrs_lecture);
1113         EXCEPTION
1114           WHEN OTHERS THEN
1115             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_LECTURE','LEGACY_TOKENS',TRUE);
1116             p_unit_ver_rec.status :='E';
1117         END;
1118       END IF;
1119 
1120       IF p_unit_ver_rec.contact_hrs_lab IS NOT NULL THEN
1121         BEGIN
1122           igs_ps_unit_ver_pkg.check_constraints('CONTACT_HRS_LAB',p_unit_ver_rec.contact_hrs_lab);
1123         EXCEPTION
1124           WHEN OTHERS THEN
1125             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_LAB','LEGACY_TOKENS',TRUE);
1126             p_unit_ver_rec.status :='E';
1127         END;
1128       END IF;
1129 
1130       IF p_unit_ver_rec.contact_hrs_other IS NOT NULL THEN
1131         BEGIN
1132           igs_ps_unit_ver_pkg.check_constraints('CONTACT_HRS_OTHER',p_unit_ver_rec.contact_hrs_other);
1133         EXCEPTION
1134           WHEN OTHERS THEN
1135             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_OTHER','LEGACY_TOKENS',TRUE);
1136             p_unit_ver_rec.status :='E';
1137         END;
1138       END IF;
1139 
1140       IF p_unit_ver_rec.non_schd_required_hrs IS NOT NULL THEN
1141         BEGIN
1142           igs_ps_unit_ver_pkg.check_constraints('NON_SCHD_REQUIRED_HRS',p_unit_ver_rec.non_schd_required_hrs);
1143         EXCEPTION
1144           WHEN OTHERS THEN
1145             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','NON_SCHD_REQUIRED_HRS','LEGACY_TOKENS',TRUE);
1146             p_unit_ver_rec.status :='E';
1147         END;
1148       END IF;
1149 
1150       IF p_unit_ver_rec.max_repeats_for_credit IS NOT NULL THEN
1151         BEGIN
1152           igs_ps_unit_ver_pkg.check_constraints('MAX_REPEATS_FOR_CREDIT',p_unit_ver_rec.max_repeats_for_credit);
1153         EXCEPTION
1154           WHEN OTHERS THEN
1155             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999','MAX_REPEATS_FOR_CREDIT','LEGACY_TOKENS',TRUE);
1156             p_unit_ver_rec.status :='E';
1157         END;
1158       END IF;
1159 
1160       IF p_unit_ver_rec.max_repeats_for_funding IS NOT NULL THEN
1161         BEGIN
1162           igs_ps_unit_ver_pkg.check_constraints('MAX_REPEATS_FOR_FUNDING',p_unit_ver_rec.max_repeats_for_funding);
1163         EXCEPTION
1164           WHEN OTHERS THEN
1165             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999','MAX_REPEATS_FOR_FUNDING','LEGACY_TOKENS',TRUE);
1166             p_unit_ver_rec.status :='E';
1167         END;
1168       END IF;
1169 
1170       IF p_unit_ver_rec.same_teach_period_repeats IS NOT NULL THEN
1171         BEGIN
1172           igs_ps_unit_ver_pkg.check_constraints('SAME_TEACH_PERIOD_REPEATS',p_unit_ver_rec.same_teach_period_repeats);
1173         EXCEPTION
1174           WHEN OTHERS THEN
1175             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999','SAME_TEACH_PERIOD_REPEATS','LEGACY_TOKENS',TRUE);
1176             p_unit_ver_rec.status :='E';
1177         END;
1178       END IF;
1179 
1180 
1181       BEGIN
1182         igs_ps_unit_ver_pkg.check_constraints('OVRD_WKLD_VAL_FLAG',p_unit_ver_rec.ovrd_wkld_val_flag);
1183       EXCEPTION
1184         WHEN OTHERS THEN
1185           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','OVRD_WKLD_VAL_FLAG','LEGACY_TOKENS',TRUE);
1186           p_unit_ver_rec.status :='E';
1187       END;
1188 
1189       IF p_unit_ver_rec.workload_val_code IS NOT NULL THEN
1190         IF NOT igs_lookups_view_pkg.get_pk_for_validation('WKLD_VAL_TYPE',p_unit_ver_rec.workload_val_code) THEN
1191            igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'WKLD_VAL_TYPE','LEGACY_TOKENS', FALSE);
1192            p_unit_ver_rec.status := 'E';
1193         END IF;
1194       END IF;
1195 
1196       IF p_unit_ver_rec.billing_hrs IS NOT NULL THEN
1197         BEGIN
1198           igs_ps_unit_ver_pkg.check_constraints('BILLING_HRS',p_unit_ver_rec.billing_hrs);
1199         EXCEPTION
1200           WHEN OTHERS THEN
1201             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','BILLING_HRS','LEGACY_TOKENS',TRUE);
1202             p_unit_ver_rec.status :='E';
1203         END;
1204       END IF;
1205 
1206 
1207     END validate_db_cons;
1208 
1209   BEGIN
1210 
1211     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1212       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.start_logging_for','Unit Versions');
1213     END IF;
1214 
1215     p_rec_status :='S';
1216     p_unit_ver_rec.msg_from := FND_MSG_PUB.COUNT_MSG;
1217     trim_values(p_unit_ver_rec);
1218     validate_parameters(p_unit_ver_rec);
1219 
1220      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1221        fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.status_after_validate_parameters',
1222        'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1223        'Status:'||p_unit_ver_rec.status);
1224      END IF;
1225 
1226     IF p_unit_ver_rec.status = 'S' THEN
1227       validate_derivations(p_unit_ver_rec);
1228 
1229       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1230        fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.status_after_validate_derivations',
1231        'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1232        'Status:'||p_unit_ver_rec.status);
1233      END IF;
1234 
1235     END IF;
1236 
1237     IF p_unit_ver_rec.status = 'S' THEN
1238       validate_db_cons(p_unit_ver_rec);
1239 
1240       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1241        fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.status_after_validate_db_cons',
1242        'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1243        'Status:'||p_unit_ver_rec.status);
1244       END IF;
1245 
1246     END IF;
1247 
1248     IF p_unit_ver_rec.status = 'S' THEN
1249       igs_ps_validate_lgcy_pkg.unit_version(p_unit_ver_rec,l_n_coord_person_id);
1250 
1251       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1252         fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.status_after_Business_validation',
1253         'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1254         'Status:'||p_unit_ver_rec.status);
1255       END IF;
1256 
1257     END IF;
1258 
1259     IF p_unit_ver_rec.status  ='S' THEN
1260 
1261       --If for this unit entry is not there in igs_ps_unit then insert it
1262       OPEN cur_check(p_unit_ver_rec.unit_cd);
1263       FETCH cur_check INTO l_c_var;
1264       IF cur_check%NOTFOUND THEN
1265         INSERT INTO igs_ps_unit
1266             (
1267             unit_cd,
1268             creation_date,
1269             created_by,
1270             last_update_date,
1271             last_updated_by,
1272             last_update_login
1273             )
1274         VALUES
1275             (
1276             p_unit_ver_rec.unit_cd,
1277             SYSDATE,
1278             g_n_user_id,
1279             SYSDATE,
1280             g_n_user_id,
1281             g_n_login_id
1282             );
1283 
1284 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1285 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.Record_created_igs_ps_unit',
1286 	      'Unit code:'||p_unit_ver_rec.unit_cd);
1287 	    END IF;
1288       END IF;
1289 
1290       CLOSE cur_check;
1291 
1292       --If subtitle is not null then insert a record into igs_ps_unit_subtitle
1293       IF p_unit_ver_rec.subtitle IS NOT NULL THEN
1294         INSERT INTO igs_ps_unit_subtitle
1295              (
1296              subtitle_id,
1297              unit_cd,
1298              version_number,
1299              subtitle,
1300              approved_ind,
1301              closed_ind,
1302              creation_date,
1303              created_by,
1304              last_update_date,
1305              last_updated_by,
1306              last_update_login
1307              )
1308         VALUES
1309              (
1310              igs_ps_unit_subtitle_s.NEXTVAL,
1311              p_unit_ver_rec.unit_cd,
1312              p_unit_ver_rec.version_number,
1313              p_unit_ver_rec.subtitle,
1314              p_unit_ver_rec.subtitle_approved_ind,
1315              p_unit_ver_rec.subtitle_closed_ind,
1316              SYSDATE,
1317              g_n_user_id,
1318              SYSDATE,
1319              g_n_user_id,
1320              g_n_login_id
1321              ) RETURNING subtitle_id INTO l_n_subtitle_id;
1322 
1323 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1324 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.rec_inserted_igs_ps_unit_subtitle',
1325 	       'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1326 	       'Subtitle_id:'||l_n_subtitle_id||'  '||'Status:'||p_unit_ver_rec.status);
1327 	     END IF;
1328 
1329       END IF;
1330 
1331 
1332       --If curriculum description is not null then insert a record into igs_ps_unt_crclm_all
1333       IF p_unit_ver_rec.curriculum_description IS NOT NULL THEN
1334         INSERT INTO igs_ps_unt_crclm_all
1335              (
1336              curriculum_id,
1337              description,
1338              closed_ind,
1339              org_id,
1340              creation_date,
1341              created_by,
1342              last_update_date,
1343              last_updated_by,
1344              last_update_login
1345              )
1346         VALUES
1347              (
1348              p_unit_ver_rec.curriculum_id,
1349              p_unit_ver_rec.curriculum_description,
1350              p_unit_ver_rec.curriculum_closed_ind,
1351              igs_ge_gen_003.get_org_id,
1352              SYSDATE,
1353              g_n_user_id,
1354              SYSDATE,
1355              g_n_user_id,
1356              g_n_login_id
1357              );
1358 
1359 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1360 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.rec_inserted_igs_ps_unt_crclm_all',
1361 	       'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number||'  '||
1362 	       'curriculum_id:'||p_unit_ver_rec.curriculum_id||'  '||'Status:'||p_unit_ver_rec.status);
1363 	     END IF;
1364       END IF;
1365 
1366       --Enter the unit version record in igs_ps_unit_ver_all
1367       INSERT INTO igs_ps_unit_ver_all
1368            (
1369            unit_cd,
1370            version_number,
1371            start_dt,
1372            review_dt,
1373            expiry_dt,
1374            end_dt,
1375            unit_status,
1376            title,
1377            short_title,
1378            title_override_ind,
1379            abbreviation,
1380            unit_level,
1381            credit_point_descriptor,
1382            enrolled_credit_points,
1383            points_override_ind,
1384            supp_exam_permitted_ind,
1385            coord_person_id,
1386            owner_org_unit_cd,
1387            owner_ou_start_dt,
1388            award_course_only_ind,
1389            research_unit_ind,
1390            industrial_ind,
1391            practical_ind,
1392            repeatable_ind,
1393            assessable_ind,
1394            achievable_credit_points,
1395            points_increment,
1396            points_min,
1397            points_max,
1398            unit_int_course_level_cd,
1399            subtitle_modifiable_flag,
1400            approval_date,
1401            lecture_credit_points,
1402            lab_credit_points,
1403            other_credit_points,
1404            clock_hours,
1405            work_load_cp_lecture,
1406            work_load_cp_lab,
1407            continuing_education_units,
1408            enrollment_expected,
1409            enrollment_minimum,
1410            enrollment_maximum,
1411            advance_maximum,
1412            state_financial_aid,
1413            federal_financial_aid,
1414            institutional_financial_aid,
1415            same_teaching_period,
1416            max_repeats_for_credit,
1417            max_repeats_for_funding,
1418            max_repeat_credit_points,
1419            same_teach_period_repeats,
1420            same_teach_period_repeats_cp,
1421            attribute_category,
1422            attribute1,
1423            attribute2,
1424            attribute3,
1425            attribute4,
1426            attribute5,
1427            attribute6,
1428            attribute7,
1429            attribute8,
1430            attribute9,
1431            attribute10,
1432            attribute11,
1433            attribute12,
1434            attribute13,
1435            attribute14,
1436            attribute15,
1437            attribute16,
1438            attribute17,
1439            attribute18,
1440            attribute19,
1441            attribute20,
1442            subtitle_id,
1443            work_load_other,
1444            contact_hrs_lecture,
1445            contact_hrs_lab,
1446            contact_hrs_other,
1447            non_schd_required_hrs,
1448            exclude_from_max_cp_limit,
1449            record_exclusion_flag,
1450            ss_display_ind,
1451            cal_type_enrol_load_cal,
1452            sequence_num_enrol_load_cal,
1453            cal_type_offer_load_cal,
1454            sequence_num_offer_load_cal,
1455            curriculum_id,
1456            override_enrollment_max,
1457            rpt_fmly_id,
1458            unit_type_id,
1459            special_permission_ind,
1460            org_id,
1461            ss_enrol_ind,
1462            ivr_enrol_ind,
1463            rev_account_cd,
1464            claimable_hours,
1465            anon_unit_grading_ind,
1466            anon_assess_grading_ind,
1467            auditable_ind,
1468            audit_permission_ind,
1469            max_auditors_allowed,
1470 	   billing_credit_points,
1471            ovrd_wkld_val_flag,
1472            workload_val_code,
1473 	   billing_hrs,
1474            creation_date,
1475            created_by,
1476            last_update_date,
1477            last_updated_by,
1478            last_update_login
1479            )
1480       VALUES
1481            (
1482            p_unit_ver_rec.unit_cd,
1483            p_unit_ver_rec.version_number,
1484            p_unit_ver_rec.start_dt,
1485            p_unit_ver_rec.review_dt,
1486            p_unit_ver_rec.expiry_dt,
1487            p_unit_ver_rec.end_dt,
1488            p_unit_ver_rec.unit_status,
1489            p_unit_ver_rec.title,
1490            p_unit_ver_rec.short_title,
1491            p_unit_ver_rec.title_override_ind,
1492            p_unit_ver_rec.abbreviation,
1493            p_unit_ver_rec.unit_level,
1494            p_unit_ver_rec.credit_point_descriptor,
1495            p_unit_ver_rec.enrolled_credit_points,
1496            p_unit_ver_rec.points_override_ind,
1497            p_unit_ver_rec.supp_exam_permitted_ind,
1498            l_n_coord_person_id,
1499            p_unit_ver_rec.owner_org_unit_cd,
1500            l_d_owner_ou_start_dt,
1501            p_unit_ver_rec.award_course_only_ind,
1502            p_unit_ver_rec.research_unit_ind,
1503            p_unit_ver_rec.industrial_ind,
1504            p_unit_ver_rec.practical_ind,
1505            p_unit_ver_rec.repeatable_ind,
1506            p_unit_ver_rec.assessable_ind,
1507            p_unit_ver_rec.achievable_credit_points,
1508            p_unit_ver_rec.points_increment,
1509            p_unit_ver_rec.points_min,
1510            p_unit_ver_rec.points_max,
1511            p_unit_ver_rec.unit_int_course_level_cd,
1512            p_unit_ver_rec.subtitle_modifiable_flag,
1513            p_unit_ver_rec.approval_date,
1514            p_unit_ver_rec.lecture_credit_points,
1515            p_unit_ver_rec.lab_credit_points,
1516            p_unit_ver_rec.other_credit_points,
1517            p_unit_ver_rec.clock_hours,
1518            p_unit_ver_rec.work_load_cp_lecture,
1519            p_unit_ver_rec.work_load_cp_lab,
1520            p_unit_ver_rec.continuing_education_units,
1521            p_unit_ver_rec.enrollment_expected,
1522            p_unit_ver_rec.enrollment_minimum,
1523            p_unit_ver_rec.enrollment_maximum,
1524            p_unit_ver_rec.advance_maximum,
1525            p_unit_ver_rec.state_financial_aid,
1526            p_unit_ver_rec.federal_financial_aid,
1527            p_unit_ver_rec.institutional_financial_aid,
1528            p_unit_ver_rec.same_teaching_period,
1529            p_unit_ver_rec.max_repeats_for_credit,
1530            p_unit_ver_rec.max_repeats_for_funding,
1531            p_unit_ver_rec.max_repeat_credit_points,
1532            p_unit_ver_rec.same_teach_period_repeats,
1533            p_unit_ver_rec.same_teach_period_repeats_cp,
1534            p_unit_ver_rec.attribute_category,
1535            p_unit_ver_rec.attribute1,
1536            p_unit_ver_rec.attribute2,
1537            p_unit_ver_rec.attribute3,
1538            p_unit_ver_rec.attribute4,
1539            p_unit_ver_rec.attribute5,
1540            p_unit_ver_rec.attribute6,
1541            p_unit_ver_rec.attribute7,
1542            p_unit_ver_rec.attribute8,
1543            p_unit_ver_rec.attribute9,
1544            p_unit_ver_rec.attribute10,
1545            p_unit_ver_rec.attribute11,
1546            p_unit_ver_rec.attribute12,
1547            p_unit_ver_rec.attribute13,
1548            p_unit_ver_rec.attribute14,
1549            p_unit_ver_rec.attribute15,
1550            p_unit_ver_rec.attribute16,
1551            p_unit_ver_rec.attribute17,
1552            p_unit_ver_rec.attribute18,
1553            p_unit_ver_rec.attribute19,
1554            p_unit_ver_rec.attribute20,
1555            l_n_subtitle_id,
1556            p_unit_ver_rec.work_load_other,
1557            p_unit_ver_rec.contact_hrs_lecture,
1558            p_unit_ver_rec.contact_hrs_lab,
1559            p_unit_ver_rec.contact_hrs_other,
1560            p_unit_ver_rec.non_schd_required_hrs,
1561            p_unit_ver_rec.exclude_from_max_cp_limit,
1562            p_unit_ver_rec.record_exclusion_flag,
1563            p_unit_ver_rec.ss_display_ind,
1564            l_c_cal_type_enrol_load_cal,
1565            l_n_seq_num_enrol_load_cal,
1566            l_c_cal_type_offer_load_cal,
1567            l_n_seq_num_offer_load_cal,
1568            p_unit_ver_rec.curriculum_id,
1569            p_unit_ver_rec.override_enrollment_max,
1570            l_n_rpt_fmly_id,
1571            l_n_unit_type_id,
1572            p_unit_ver_rec.special_permission_ind,
1573            igs_ge_gen_003.get_org_id,
1574            p_unit_ver_rec.ss_enrol_ind,
1575            p_unit_ver_rec.ivr_enrol_ind,
1576            p_unit_ver_rec.rev_account_cd,
1577            p_unit_ver_rec.claimable_hours,
1578            p_unit_ver_rec.anon_unit_grading_ind,
1579            p_unit_ver_rec.anon_assess_grading_ind,
1580            p_unit_ver_rec.auditable_ind,
1581            p_unit_ver_rec.audit_permission_ind,
1582            p_unit_ver_rec.max_auditors_allowed,
1583 	   p_unit_ver_rec.billing_credit_points,
1584            p_unit_ver_rec.ovrd_wkld_val_flag,
1585            p_unit_ver_rec.workload_val_code,
1586 	   p_unit_ver_rec.billing_hrs,
1587            SYSDATE,
1588            g_n_user_id,
1589            SYSDATE,
1590            g_n_user_id,
1591            g_n_login_id
1592            );
1593 
1594            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1595 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.Record_Inserted',
1596 	     'Unit code:'||p_unit_ver_rec.unit_cd||'  '||'Version number:'||p_unit_ver_rec.version_number);
1597 	   END IF;
1598 
1599       p_unit_ver_rec.msg_from := NULL;
1600       p_unit_ver_rec.msg_to := NULL;
1601     ELSE
1602       p_unit_ver_rec.msg_from := p_unit_ver_rec.msg_from + 1;
1603       p_unit_ver_rec.msg_to := FND_MSG_PUB.COUNT_MSG;
1604     END IF;
1605     p_rec_status:= p_unit_ver_rec.status;
1606 
1607      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1608        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_version.after_import_status',p_rec_status);
1609      END IF;
1610 
1611   END create_unit_version;
1612 
1613   PROCEDURE create_teach_resp ( p_tab_teach_resp IN OUT NOCOPY igs_ps_generic_pub.unit_tr_tbl_type,
1614                                 p_c_rec_status OUT NOCOPY VARCHAR2 ) AS
1615 
1616   /***********************************************************************************************
1617     Created By     :  shtatiko
1618     Date Created By:  11-NOV-2002
1619     Purpose        :  This procedure is a sub process to insert records of Teaching Responsibility.
1620 
1621     Known limitations,enhancements,remarks:
1622     Change History (in reverse chronological order)
1623     Who         When            What
1624     smvk      12-Dec-2002      Added a boolean parameter to the function call igs_ps_val_tr.crsp_val_tr_perc.
1625                                As a part of the Bug # 2696207
1626     smvk      20-Dec-2002      Removed the IGS_PS_TCH_RESP_PKG.check_constraints for org_unit_cd,
1627                                as the org unit code can have value in mixed case. Bug # 2487149.
1628   ********************************************************************************************** */
1629 
1630     l_d_ou_start_dt   igs_ps_unit_ver_all.owner_ou_start_dt%TYPE;
1631     l_c_message_name  VARCHAR2 (30);
1632     CURSOR c_org(cp_org_unit_cd igs_ps_tch_resp.org_unit_cd%TYPE) IS
1633     SELECT 'X'
1634     FROM   igs_or_inst_org_base_v a, igs_or_status b
1635     WHERE  a.party_number = cp_org_unit_cd
1636     AND    a.org_status = b.org_status
1637     AND    b.s_org_status <> 'INACTIVE';
1638     c_org_rec c_org%ROWTYPE;
1639 
1640     /* Private Procedures for create_teach_resp */
1641     PROCEDURE trim_values ( p_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_tr_rec_type ) AS
1642     BEGIN
1643              p_teach_resp_rec.unit_cd := trim(p_teach_resp_rec.unit_cd);
1644              p_teach_resp_rec.version_number := trim(p_teach_resp_rec.version_number);
1645              p_teach_resp_rec.org_unit_cd := trim(p_teach_resp_rec.org_unit_cd);
1646              p_teach_resp_rec.percentage := trim(p_teach_resp_rec.percentage);
1647 
1648     END trim_values;
1649     -- validate parameters passed.
1650     PROCEDURE validate_parameters ( p_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_tr_rec_type ) AS
1651     BEGIN
1652       /* Check for Mandatory Parameters */
1653       IF p_teach_resp_rec.unit_cd IS NULL THEN
1654         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
1655         p_teach_resp_rec.status := 'E';
1656       END IF;
1657       IF p_teach_resp_rec.version_number IS NULL THEN
1658         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
1659         p_teach_resp_rec.status := 'E';
1660       END IF;
1661       IF p_teach_resp_rec.org_unit_cd IS NULL THEN
1662         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
1663         p_teach_resp_rec.status := 'E';
1664       END IF;
1665       IF p_teach_resp_rec.percentage IS NULL THEN
1666         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PERCENTAGE', 'LEGACY_TOKENS', FALSE);
1667         p_teach_resp_rec.status := 'E';
1668       END IF;
1669     END validate_parameters;
1670 
1671     -- Carry out derivations and validate them
1672     PROCEDURE validate_derivations ( p_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_tr_rec_type ) AS
1673     BEGIN
1674       IF NOT igs_re_val_rsup.get_org_unit_dtls ( p_teach_resp_rec.org_unit_cd, l_d_ou_start_dt ) THEN
1675         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
1676         p_teach_resp_rec.status := 'E';
1677       END IF;
1678     END validate_derivations;
1679 
1680     -- Validate Database Constraints
1681     PROCEDURE validate_db_cons ( p_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_tr_rec_type ) AS
1682     BEGIN
1683 
1684       /* Validate PK Constraints */
1685       IF igs_ps_tch_resp_pkg.get_pk_for_validation (
1686            x_unit_cd        => p_teach_resp_rec.unit_cd,
1687            x_version_number => p_teach_resp_rec.version_number,
1688            x_org_unit_cd    => p_teach_resp_rec.org_unit_cd,
1689            x_ou_start_dt    => l_d_ou_start_dt ) THEN
1690         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_TEACH_RESP', 'LEGACY_TOKENS', FALSE);
1691         p_teach_resp_rec.status := 'W';
1692         RETURN;
1693       END IF;
1694 
1695       /* Validate Check Constraints */
1696       BEGIN
1697         igs_ps_tch_resp_pkg.check_constraints ( 'UNIT_CD', p_teach_resp_rec.unit_cd );
1698       EXCEPTION
1699         WHEN OTHERS THEN
1700           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'UNIT_CD', 'LEGACY_TOKENS', TRUE);
1701           p_teach_resp_rec.status := 'E';
1702       END;
1703 
1704       BEGIN
1705         igs_ps_tch_resp_pkg.check_constraints ( 'PERCENTAGE', p_teach_resp_rec.percentage );
1706       EXCEPTION
1707         WHEN OTHERS THEN
1708           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PER_0_100', null, null, TRUE);
1709           p_teach_resp_rec.status := 'E';
1710       END;
1711 
1712       /* Validate FK Constraints */
1713       IF NOT igs_or_unit_pkg.get_pk_for_validation (
1714            p_teach_resp_rec.org_unit_cd,
1715            l_d_ou_start_dt ) THEN
1716         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
1717         p_teach_resp_rec.status := 'E';
1718       END IF;
1719       IF NOT igs_ps_unit_ver_pkg.get_pk_for_validation (
1720            p_teach_resp_rec.unit_cd,
1721            p_teach_resp_rec.version_number ) THEN
1722         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_VERSION', 'LEGACY_TOKENS', FALSE);
1723         p_teach_resp_rec.status := 'E';
1724       END IF;
1725 
1726     END validate_db_cons;
1727 
1728   /* Main Teaching Responsibility Sub Process */
1729   BEGIN
1730      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1731        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.start_logging_for','Teaching Responsibility');
1732      END IF;
1733     p_c_rec_status := 'S';
1734 
1735     FOR I in 1..p_tab_teach_resp.LAST LOOP
1736       IF ( p_tab_teach_resp.EXISTS(I) ) THEN
1737         p_tab_teach_resp(I).status := 'S';
1738         p_tab_teach_resp(I).msg_from := fnd_msg_pub.count_msg;
1739         trim_values(p_tab_teach_resp(I) );
1740         validate_parameters ( p_tab_teach_resp(I) );
1741 
1742         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1743 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.status_after_validate_parameters',
1744 	  'Unit code:'||p_tab_teach_resp(I).unit_cd||'  '||'Version number:'||p_tab_teach_resp(I).version_number||'  '||
1745 	  'org_unit_cd:'||p_tab_teach_resp(I).org_unit_cd||'  '||'Status:'||p_tab_teach_resp(I).status);
1746 	END IF;
1747 
1748         IF p_tab_teach_resp(I).status = 'S' THEN
1749           validate_derivations ( p_tab_teach_resp(I) );
1750 
1751           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1752 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.status_after_validate_derivations',
1753 	    'Unit code:'||p_tab_teach_resp(I).unit_cd||'  '||'Version number:'||p_tab_teach_resp(I).version_number||'  '||
1754 	    'org_unit_cd:'||p_tab_teach_resp(I).org_unit_cd||'  '||'ou_start_dt:'||l_d_ou_start_dt||'  '||
1755 	    'Status:'||p_tab_teach_resp(I).status);
1756  	  END IF;
1757 
1758         END IF;
1759 
1760         IF p_tab_teach_resp(I).status = 'S' THEN
1761           validate_db_cons ( p_tab_teach_resp(I) );
1762 
1763           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1764 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.status_after_validate_db_cons',
1765 	    'Unit code:'||p_tab_teach_resp(I).unit_cd||'  '||'Version number:'||p_tab_teach_resp(I).version_number||'  '||
1766 	    'org_unit_cd:'||p_tab_teach_resp(I).org_unit_cd||'  '||'ou_start_dt:'||l_d_ou_start_dt||'  '||
1767 	    'Status:'||p_tab_teach_resp(I).status);
1768  	  END IF;
1769 
1770         END IF;
1771        IF p_tab_teach_resp(I).status = 'S' THEN
1772 	  OPEN c_org (p_tab_teach_resp(I).org_unit_cd);
1773 	  FETCH c_org  INTO c_org_rec;
1774 	  IF c_org%NOTFOUND THEN
1775             fnd_message.set_name('IGS','IGS_PS_ORGUNIT_STATUS_INACTIV');
1776             fnd_msg_pub.add;
1777 	    p_tab_teach_resp(I).status := 'E';
1778 	  END IF;
1779           CLOSE c_org;
1780        END IF;
1781 
1782         /* Business Validations */
1783         /* Proceed with business validations only if the status is Success, 'S' */
1784         IF p_tab_teach_resp(I).status = 'S' THEN
1785           /* Validation# 1: Check if the Teaching Responsibility Percentage adds upto 100 */
1786           IF igs_ps_val_tr.crsp_val_tr_perc (
1787               p_unit_cd        => p_tab_teach_resp(I).unit_cd,
1788               p_version_number => p_tab_teach_resp(I).version_number,
1789               p_message_name   => l_c_message_name  ,
1790               p_b_lgcy_validator => TRUE) THEN
1791               fnd_message.set_name('IGS','IGS_PS_LGCY_TR_100_EXISTS');
1792               fnd_msg_pub.add;
1793               p_tab_teach_resp(I).status := 'W' ;
1794           END IF;
1795 
1796 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1797 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.status_after_Business_validation',
1798 	    'Unit code:'||p_tab_teach_resp(I).unit_cd||'  '||'Version number:'||p_tab_teach_resp(I).version_number||'  '||
1799 	    'org_unit_cd:'||p_tab_teach_resp(I).org_unit_cd||'  '||'ou_start_dt:'||l_d_ou_start_dt||'  '||
1800 	    'Status:'||p_tab_teach_resp(I).status);
1801  	  END IF;
1802 
1803         END IF;
1804 
1805         IF p_tab_teach_resp(I).status = 'S' THEN
1806           /* Insert the Record */
1807           INSERT INTO igs_ps_tch_resp
1808           (unit_cd,
1809            version_number,
1810            org_unit_cd,
1811            ou_start_dt,
1812            percentage,
1813            created_by,
1814            creation_date,
1815            last_updated_by,
1816            last_update_date,
1817            last_update_login
1818           )
1819           VALUES
1820           (p_tab_teach_resp(I).unit_cd,
1821            p_tab_teach_resp(I).version_number,
1822            p_tab_teach_resp(I).org_unit_cd,
1823            l_d_ou_start_dt,
1824            p_tab_teach_resp(I).percentage,
1825            g_n_user_id,
1826            SYSDATE,
1827            g_n_user_id,
1828            SYSDATE,
1829            g_n_login_id
1830           );
1831 
1832           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1833 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.Record_Inserted',
1834 	    'Unit code:'||p_tab_teach_resp(I).unit_cd||'  '||'Version number:'||p_tab_teach_resp(I).version_number||'  '||
1835 	    'org_unit_cd:'||p_tab_teach_resp(I).org_unit_cd||'  '||'ou_start_dt:'||l_d_ou_start_dt);
1836  	  END IF;
1837 
1838           p_tab_teach_resp(I).msg_from := NULL;
1839           p_tab_teach_resp(I).msg_to := NULL;
1840         ELSE
1841           p_c_rec_status := p_tab_teach_resp(I).status;
1842           p_tab_teach_resp(I).msg_from := p_tab_teach_resp(I).msg_from+1;
1843           p_tab_teach_resp(I).msg_to := fnd_msg_pub.count_msg;
1844           IF p_tab_teach_resp(I).status = 'E' THEN
1845             RETURN;
1846           END IF;
1847         END IF;
1848       END IF;
1849 
1850     END LOOP;
1851 
1852     /* Post Insert Validations */
1853     IF NOT igs_ps_validate_lgcy_pkg.post_teach_resp(p_tab_teach_resp) THEN
1854       p_c_rec_status := 'E';
1855     END IF;
1856 
1857     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1858       fnd_log.string( fnd_log.level_statement,
1859       'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.status_after_Post_insert_validation','Status:'||p_c_rec_status);
1860     END IF;
1861 
1862     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1863       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_teach_resp.after_import_status',p_c_rec_status);
1864     END IF;
1865 
1866   END create_teach_resp;
1867 
1868 
1869   PROCEDURE create_unit_discip ( p_tab_unit_dscp IN OUT NOCOPY igs_ps_generic_pub.unit_dscp_tbl_type,
1870                                  p_c_rec_status OUT NOCOPY VARCHAR2 ) AS
1871 
1872   /***********************************************************************************************
1873     Created By     :  shtatiko
1874     Date Created By:  11-NOV-2002
1875     Purpose        :  This procedure is a sub process to insert records of Unit Disciplines.
1876 
1877     Known limitations,enhancements,remarks:
1878     Change History (in reverse chronological order)
1879     Who         When            What
1880     smvk      12-Dec-2002      Added a boolean parameter to the function call igs_ps_val_ud.crsp_val_ud_perc.
1881                                As a part of the Bug # 2696207
1882   ********************************************************************************************** */
1883 
1884     l_c_message_name      VARCHAR2(30);
1885 
1886     /* Private Procedures for create_unit_dscp */
1887     PROCEDURE trim_values ( p_unit_dscp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_dscp_rec_type ) AS
1888     BEGIN
1889       p_unit_dscp_rec.unit_cd := TRIM(p_unit_dscp_rec.unit_cd);
1890       p_unit_dscp_rec.version_number := TRIM(p_unit_dscp_rec.version_number);
1891       p_unit_dscp_rec.discipline_group_cd := TRIM(p_unit_dscp_rec.discipline_group_cd);
1892       p_unit_dscp_rec.percentage  := TRIM(p_unit_dscp_rec.percentage);
1893     END trim_values;
1894 
1895     -- validate parameters passed.
1896     PROCEDURE validate_parameters ( p_unit_dscp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_dscp_rec_type ) AS
1897     BEGIN
1898       /* Check for Mandatory Parameters */
1899       IF p_unit_dscp_rec.unit_cd IS NULL THEN
1900         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
1901         p_unit_dscp_rec.status := 'E';
1902       END IF;
1903       IF p_unit_dscp_rec.version_number IS NULL THEN
1904         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
1905         p_unit_dscp_rec.status := 'E';
1906       END IF;
1907       IF p_unit_dscp_rec.discipline_group_cd IS NULL THEN
1908         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'DISCIPLINE_GROUP_CD', 'LEGACY_TOKENS', FALSE);
1909         p_unit_dscp_rec.status := 'E';
1910       END IF;
1911       IF p_unit_dscp_rec.percentage IS NULL THEN
1912         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PERCENTAGE', 'LEGACY_TOKENS', FALSE);
1913         p_unit_dscp_rec.status := 'E';
1914       END IF;
1915     END validate_parameters;
1916 
1917     -- Validate Database Constraints
1918     PROCEDURE validate_db_cons ( p_unit_dscp_rec IN OUT NOCOPY igs_ps_generic_pub.unit_dscp_rec_type ) AS
1919     BEGIN
1920 
1921       /* Validate PK Constraints */
1922       IF igs_ps_unit_dscp_pkg.get_pk_for_validation (
1923            x_unit_cd                => p_unit_dscp_rec.unit_cd,
1924            x_version_number         => p_unit_dscp_rec.version_number,
1925            x_discipline_group_cd    => p_unit_dscp_rec.discipline_group_cd ) THEN
1926         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_DISCIPLINE', 'LEGACY_TOKENS', FALSE);
1927         p_unit_dscp_rec.status := 'W';
1928         RETURN;
1929       END IF;
1930 
1931       /* Validate Check Constraints */
1932       BEGIN
1933         igs_ps_unit_dscp_pkg.check_constraints ( 'UNIT_CD', p_unit_dscp_rec.unit_cd );
1934       EXCEPTION
1935         WHEN OTHERS THEN
1936           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'UNIT_CD', 'LEGACY_TOKENS', TRUE);
1937           p_unit_dscp_rec.status := 'E';
1938       END;
1939 
1940       BEGIN
1941         igs_ps_unit_dscp_pkg.check_constraints ( 'DISCIPLINE_GROUP_CD', p_unit_dscp_rec.discipline_group_cd );
1942       EXCEPTION
1943         WHEN OTHERS THEN
1944           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'DISCIPLINE_GROUP_CD', 'LEGACY_TOKENS', TRUE);
1945           p_unit_dscp_rec.status := 'E';
1946       END;
1947 
1948       BEGIN
1949         igs_ps_unit_dscp_pkg.check_constraints ( 'PERCENTAGE', p_unit_dscp_rec.percentage );
1950       EXCEPTION
1951         WHEN OTHERS THEN
1952           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PER_0_100', null, null, TRUE);
1953           p_unit_dscp_rec.status := 'E';
1954       END;
1955 
1956       /* Validate FK Constraints */
1957       IF NOT igs_ps_dscp_pkg.get_pk_for_validation (p_unit_dscp_rec.discipline_group_cd) THEN
1958         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'DISCIPLINE_GROUP_CD', 'LEGACY_TOKENS', FALSE);
1959         p_unit_dscp_rec.status := 'E';
1960       END IF;
1961 
1962       IF NOT igs_ps_unit_ver_pkg.get_pk_for_validation (p_unit_dscp_rec.unit_cd, p_unit_dscp_rec.version_number) THEN
1963         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_VERSION', 'LEGACY_TOKENS', FALSE);
1964         p_unit_dscp_rec.status := 'E';
1965       END IF;
1966 
1967     END validate_db_cons;
1968 
1969   /* Main Unit Discipline Sub Process */
1970   BEGIN
1971 
1972     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1973       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.start_logging_for','Unit Discipline');
1974     END IF;
1975 
1976     p_c_rec_status := 'S';
1977     FOR I in 1..p_tab_unit_dscp.LAST LOOP
1978       IF ( p_tab_unit_dscp.EXISTS(I) ) THEN
1979         p_tab_unit_dscp(I).status := 'S';
1980         p_tab_unit_dscp(I).msg_from := fnd_msg_pub.count_msg;
1981         trim_values(p_tab_unit_dscp(I) );
1982         validate_parameters ( p_tab_unit_dscp(I) );
1983 
1984         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1985 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.status_after_validate_parameters',
1986 	  'Unit code:'||p_tab_unit_dscp(I).unit_cd||'  '||'Version number:'||p_tab_unit_dscp(I).version_number||'  '||
1987 	  'discipline_group_cd:'||p_tab_unit_dscp(I).discipline_group_cd||'  '||'Status:'||p_tab_unit_dscp(I).status);
1988 	END IF;
1989 
1990         IF p_tab_unit_dscp(I).status = 'S' THEN
1991           validate_db_cons ( p_tab_unit_dscp(I) );
1992 
1993           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1994 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.status_after_validate_db_cons',
1995 	    'Unit code:'||p_tab_unit_dscp(I).unit_cd||'  '||'Version number:'||p_tab_unit_dscp(I).version_number||'  '||
1996 	    'discipline_group_cd:'||p_tab_unit_dscp(I).discipline_group_cd||'  '||'Status:'||p_tab_unit_dscp(I).status);
1997 	  END IF;
1998 
1999         END IF;
2000 
2001         /* Business Validations */
2002         /* Proceed with business validations only if the status is Success, 'S' */
2003         IF p_tab_unit_dscp(I).status = 'S' THEN
2004           /* Validation# 1: Check if the Unit Discipline Percentage adds upto 100 */
2005           IF igs_ps_val_ud.crsp_val_ud_perc ( p_tab_unit_dscp(I).unit_cd, p_tab_unit_dscp(I).version_number, l_c_message_name ,TRUE) THEN
2006             fnd_message.set_name('IGS','IGS_PS_LGCY_UD_100_EXISTS');
2007             fnd_msg_pub.add;
2008             p_tab_unit_dscp(I).status := 'W';
2009           END IF;
2010 
2011 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2012 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.status_after_Business_validation',
2013 	    'Unit code:'||p_tab_unit_dscp(I).unit_cd||'  '||'Version number:'||p_tab_unit_dscp(I).version_number||'  '||
2014 	    'discipline_group_cd:'||p_tab_unit_dscp(I).discipline_group_cd||'  '||'Status:'||p_tab_unit_dscp(I).status);
2015 	  END IF;
2016 
2017         END IF;
2018 
2019         IF p_tab_unit_dscp(I).status = 'S' THEN
2020           /* Insert record */
2021           INSERT INTO igs_ps_unit_dscp
2022           (unit_cd,
2023            version_number,
2024            discipline_group_cd,
2025            percentage,
2026            created_by,
2027            creation_date,
2028            last_updated_by,
2029            last_update_date,
2030            last_update_login
2031           )
2032           VALUES
2033           (p_tab_unit_dscp(I).unit_cd,
2034            p_tab_unit_dscp(I).version_number,
2035            p_tab_unit_dscp(I).discipline_group_cd,
2036            p_tab_unit_dscp(I).percentage,
2037            g_n_user_id,
2038            SYSDATE,
2039            g_n_user_id,
2040            SYSDATE,
2041            g_n_login_id
2042           );
2043 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2044 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.Record_Inserted',
2045 	    'Unit code:'||p_tab_unit_dscp(I).unit_cd||'  '||'Version number:'||p_tab_unit_dscp(I).version_number||'  '||
2046 	    'discipline_group_cd:'||p_tab_unit_dscp(I).discipline_group_cd);
2047 	  END IF;
2048 
2049           p_tab_unit_dscp(I).msg_from := NULL;
2050           p_tab_unit_dscp(I).msg_to := NULL;
2051         ELSE
2052           p_c_rec_status := p_tab_unit_dscp(I).status;
2053           p_tab_unit_dscp(I).msg_from := p_tab_unit_dscp(I).msg_from+1;
2054           p_tab_unit_dscp(I).msg_to := fnd_msg_pub.count_msg;
2055           IF p_tab_unit_dscp(I).status = 'E' THEN
2056             RETURN;
2057           END IF;
2058         END IF;
2059       END IF;
2060     END LOOP;
2061 
2062     /* Post Insert Checks */
2063     IF NOT igs_ps_validate_lgcy_pkg.post_unit_discip(p_tab_unit_dscp) THEN
2064       p_c_rec_status := 'E';
2065     END IF;
2066 
2067     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2068 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.Status_after_Post_insert_check',
2069 	    'Status:'||p_c_rec_status);
2070     END IF;
2071 
2072     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2073       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_discip.after_import_status',p_c_rec_status);
2074     END IF;
2075 
2076   END create_unit_discip;
2077 
2078   PROCEDURE create_unit_grd_sch ( p_tab_grd_sch IN OUT NOCOPY igs_ps_generic_pub.unit_gs_tbl_type,
2079                                   p_c_rec_status OUT NOCOPY VARCHAR2 ) AS
2080 
2081   /***********************************************************************************************
2082     Created By     :  shtatiko
2083     Date Created By:  12-NOV-2002
2084     Purpose        :  This procedure is a sub process to insert records of Unit Grading Schema.
2085 
2086     Known limitations,enhancements,remarks:
2087     Change History (in reverse chronological order)
2088     Who         When            What
2089   ********************************************************************************************** */
2090 
2091     /* Private Procedures for create_unit_grd_sch */
2092     PROCEDURE trim_values ( p_grd_sch_rec IN OUT NOCOPY igs_ps_generic_pub.unit_gs_rec_type ) AS
2093     BEGIN
2094       p_grd_sch_rec.unit_cd := trim(p_grd_sch_rec.unit_cd);
2095       p_grd_sch_rec.version_number := trim(p_grd_sch_rec.version_number);
2096       p_grd_sch_rec.grading_schema_code := trim(p_grd_sch_rec.grading_schema_code);
2097       p_grd_sch_rec.grd_schm_version_number := trim(p_grd_sch_rec.grd_schm_version_number);
2098       p_grd_sch_rec.default_flag := trim(p_grd_sch_rec.default_flag);
2099     END trim_values;
2100 
2101     -- Validation of Parameters passed.
2102     PROCEDURE validate_parameters ( p_grd_sch_rec IN OUT NOCOPY igs_ps_generic_pub.unit_gs_rec_type ) AS
2103     BEGIN
2104 
2105       /* Check for Mandatory Parameters */
2106       IF p_grd_sch_rec.unit_cd IS NULL THEN
2107         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
2108         p_grd_sch_rec.status := 'E';
2109       END IF;
2110       IF p_grd_sch_rec.version_number IS NULL THEN
2111         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
2112         p_grd_sch_rec.status := 'E';
2113       END IF;
2114       IF p_grd_sch_rec.grading_schema_code IS NULL THEN
2115         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_GRADING_SCHM_CD', 'LEGACY_TOKENS', FALSE);
2116         p_grd_sch_rec.status := 'E';
2117       END IF;
2118       IF p_grd_sch_rec.grd_schm_version_number IS NULL THEN
2119         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_GRADING_SCHM_VER_NUM', 'LEGACY_TOKENS', FALSE);
2120         p_grd_sch_rec.status := 'E';
2121       END IF;
2122       IF p_grd_sch_rec.default_flag IS NULL THEN
2123         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'DEFAULT_FLAG', 'LEGACY_TOKENS', FALSE);
2124         p_grd_sch_rec.status := 'E';
2125       END IF;
2126 
2127     END validate_parameters;
2128 
2129     -- Validate Database Constraints.
2130     PROCEDURE validate_db_cons ( p_grd_sch_rec IN OUT NOCOPY igs_ps_generic_pub.unit_gs_rec_type ) AS
2131     BEGIN
2132 
2133       /* Unique Key Validation */
2134       IF igs_ps_unit_grd_schm_pkg.get_uk_for_validation (
2135               x_unit_version_number     => p_grd_sch_rec.version_number,
2136               x_grading_schema_code     => p_grd_sch_rec.grading_schema_code,
2137               x_grd_schm_version_number => p_grd_sch_rec.grd_schm_version_number,
2138               x_unit_code               => p_grd_sch_rec.unit_cd ) THEN
2139         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_GRADING_SCHM', 'LEGACY_TOKENS', FALSE);
2140         p_grd_sch_rec.status := 'W';
2141         RETURN;
2142       END IF;
2143 
2144       /* Validate Check Constraints */
2145       BEGIN
2146         igs_ps_unit_grd_schm_pkg.check_constraints ( 'DEFAULT_FLAG', p_grd_sch_rec.default_flag );
2147       EXCEPTION
2148         WHEN OTHERS THEN
2149           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'DEFAULT_FLAG', 'LEGACY_TOKENS', TRUE);
2150           p_grd_sch_rec.status := 'E';
2151       END;
2152 
2153       /* Validate FK Constraints */
2154       IF NOT igs_as_grd_schema_pkg.get_pk_for_validation ( p_grd_sch_rec.grading_schema_code, p_grd_sch_rec.grd_schm_version_number) THEN
2155         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_GRADING_SCHM', 'LEGACY_TOKENS', FALSE);
2156         p_grd_sch_rec.status := 'E';
2157       END IF;
2158 
2159       IF NOT igs_ps_unit_ver_pkg.get_pk_for_validation ( p_grd_sch_rec.unit_cd, p_grd_sch_rec.version_number ) THEN
2160         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_VERSION', 'LEGACY_TOKENS', FALSE);
2161         p_grd_sch_rec.status := 'E';
2162       END IF;
2163     END validate_db_cons;
2164 
2165   /* Main Grading Schema Sub Process */
2166   BEGIN
2167 
2168     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2169       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.start_logging_for','Unit Grading Schema');
2170     END IF;
2171 
2172     p_c_rec_status := 'S';
2173     FOR I in 1..p_tab_grd_sch.LAST LOOP
2174       IF p_tab_grd_sch.EXISTS(I) THEN
2175         p_tab_grd_sch(I).status := 'S';
2176         p_tab_grd_sch(I).msg_from := fnd_msg_pub.count_msg;
2177         trim_values(p_tab_grd_sch(I));
2178         validate_parameters ( p_tab_grd_sch(I) );
2179 
2180         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2181 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.status_after_validate_parameters',
2182 	  'Unit code:'||p_tab_grd_sch(I).unit_cd||'  '||'Version number:'||p_tab_grd_sch(I).version_number||'  '||
2183 	  'grading_schema_code:'||p_tab_grd_sch(I).grading_schema_code||'  '||'grd_schm_version_number:'||
2184 	  p_tab_grd_sch(I).grd_schm_version_number||'  '||'Status:'||p_tab_grd_sch(I).status);
2185  	END IF;
2186 
2187         IF p_tab_grd_sch(I).status = 'S' THEN
2188           validate_db_cons ( p_tab_grd_sch(I) );
2189 
2190           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2191 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.status_after_validate_db_cons',
2192 	    'Unit code:'||p_tab_grd_sch(I).unit_cd||'  '||'Version number:'||p_tab_grd_sch(I).version_number||'  '||
2193 	    'grading_schema_code:'||p_tab_grd_sch(I).grading_schema_code||'  '||'grd_schm_version_number:'||
2194 	    p_tab_grd_sch(I).grd_schm_version_number||'  '||'Status:'||p_tab_grd_sch(I).status);
2195  	  END IF;
2196 
2197         END IF;
2198 
2199         /* Business Validations */
2200         /* Proceed with business validations only if the status is Success, 'S' */
2201         IF p_tab_grd_sch(I).status = 'S' THEN
2202           igs_ps_validate_lgcy_pkg.validate_unit_grd_sch ( p_tab_grd_sch(I) );
2203 
2204           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2205 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.status_after_Business_Validation',
2206 	    'Unit code:'||p_tab_grd_sch(I).unit_cd||'  '||'Version number:'||p_tab_grd_sch(I).version_number||'  '||
2207 	    'grading_schema_code:'||p_tab_grd_sch(I).grading_schema_code||'  '||'grd_schm_version_number:'||
2208 	    p_tab_grd_sch(I).grd_schm_version_number||'  '||'Status:'||p_tab_grd_sch(I).status);
2209  	  END IF;
2210 
2211         END IF;
2212 
2213         IF p_tab_grd_sch(I).status = 'S' THEN
2214           /* Insert Record */
2215           INSERT INTO igs_ps_unit_grd_schm
2216           (unit_grading_schema_id,
2217            unit_code,
2218            unit_version_number,
2219            grading_schema_code,
2220            grd_schm_version_number,
2221            default_flag,
2222            created_by,
2223            creation_date,
2224            last_updated_by,
2225            last_update_date,
2226            last_update_login
2227           )
2228           VALUES
2229           (igs_ps_unit_grd_schm_s.NEXTVAL,
2230            p_tab_grd_sch(I).unit_cd,
2231            p_tab_grd_sch(I).version_number,
2232            p_tab_grd_sch(I).grading_schema_code,
2233            p_tab_grd_sch(I).grd_schm_version_number,
2234            p_tab_grd_sch(I).default_flag,
2235            g_n_user_id,
2236            SYSDATE,
2237            g_n_user_id,
2238            SYSDATE,
2239            g_n_login_id
2240           );
2241 
2242 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2243 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.record_inserted',
2244 	    'Unit code:'||p_tab_grd_sch(I).unit_cd||'  '||'Version number:'||p_tab_grd_sch(I).version_number||'  '||
2245 	    'grading_schema_code:'||p_tab_grd_sch(I).grading_schema_code||'  '||'grd_schm_version_number:'||
2246 	    p_tab_grd_sch(I).grd_schm_version_number);
2247  	  END IF;
2248 
2249           p_tab_grd_sch(I).msg_from := NULL;
2250           p_tab_grd_sch(I).msg_to := NULL;
2251         ELSE
2252           p_c_rec_status := p_tab_grd_sch(I).status;
2253           p_tab_grd_sch(I).msg_from := p_tab_grd_sch(I).msg_from+1;
2254           p_tab_grd_sch(I).msg_to := fnd_msg_pub.count_msg;
2255           IF p_tab_grd_sch(I).status = 'E' THEN
2256             RETURN;
2257           END IF;
2258         END IF;
2259       END IF;
2260     END LOOP;
2261 
2262     /* Post Insert Checks */
2263     IF NOT igs_ps_validate_lgcy_pkg.post_unit_grd_sch (p_tab_grd_sch) THEN
2264       p_c_rec_status := 'E';
2265     END IF;
2266 
2267     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2268       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_grd_sch.after_import_status',p_c_rec_status);
2269     END IF;
2270 
2271 
2272   END create_unit_grd_sch;
2273 
2274   PROCEDURE validate_unit_dtls (
2275           p_unit_ver_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ver_rec_type,
2276           p_rec_status   OUT NOCOPY    VARCHAR2) AS
2277 
2278   /***********************************************************************************************
2279     Created By     :  smvk
2280     Date Created By:  07-NOV-2003
2281     Purpose        :  To do validations across different sub process at unil level.
2282                       Presently doing the following validations
2283                       1) For active unit's the teaching responsibility percentage should total to 100
2284                       2) For active unit's the unit discipline percentage should total to 100
2285 
2286     Known limitations,enhancements,remarks:
2287     Change History (in reverse chronological order)
2288     Who         When            What
2289   ********************************************************************************************* */
2290 
2291     CURSOR c_unit_status (cp_c_unit_status IN igs_ps_unit_stat.unit_status%TYPE) IS
2292       SELECT s_unit_status
2293       FROM   igs_ps_unit_stat
2294       WHERE unit_status = cp_c_unit_status;
2295 
2296     rec_unit_status c_unit_status%ROWTYPE;
2297     l_c_message VARCHAR2(30);
2298 
2299   BEGIN
2300 
2301     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2302       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.validate_unit_dtls.start_logging_for','Unit Details Validations');
2303     END IF;
2304 
2305     OPEN c_unit_status (p_unit_ver_rec.unit_status);
2306     FETCH c_unit_status INTO rec_unit_status;
2307     CLOSE c_unit_status;
2308 
2309     IF rec_unit_status.s_unit_status = 'ACTIVE' THEN
2310       p_unit_ver_rec.msg_from := fnd_msg_pub.count_msg;
2311       p_rec_status := p_unit_ver_rec.status;
2312 
2313       IF NOT igs_ps_val_tr.crsp_val_tr_perc ( p_unit_ver_rec.unit_cd, p_unit_ver_rec.version_number, l_c_message ,TRUE) THEN
2314         -- Adding more meaningful message rather then the message returned in the variable l_c_message
2315         fnd_message.set_name('IGS','IGS_PS_LGCY_ACT_UNT_WITHOUT_TR');
2316         fnd_msg_pub.add;
2317         p_unit_ver_rec.status := 'E';
2318       END IF;
2319 
2320       IF NOT igs_ps_val_ud.crsp_val_ud_perc ( p_unit_ver_rec.unit_cd, p_unit_ver_rec.version_number, l_c_message ,TRUE) THEN
2321         -- Adding more meaningful message rather then the message returned in the variable l_c_message
2322         fnd_message.set_name('IGS','IGS_PS_LGCY_ACT_UNT_WITHOUT_UD');
2323         fnd_msg_pub.add;
2324         p_unit_ver_rec.status := 'E';
2325       END IF;
2326 
2327       IF p_unit_ver_rec.status = 'S' THEN
2328          p_unit_ver_rec.msg_from := NULL;
2329          p_unit_ver_rec.msg_to := NULL;
2330       ELSE
2331          p_unit_ver_rec.msg_from := p_unit_ver_rec.msg_from + 1;
2332          p_unit_ver_rec.msg_to := fnd_msg_pub.count_msg;
2333          p_rec_status := p_unit_ver_rec.status;
2334       END IF;
2335     END IF;
2336 
2337     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2338       fnd_log.string( fnd_log.level_procedure,
2339                       'igs.plsql.igs_ps_unit_lgcy_pkg.validate_unit_dtls.record_status_after_validation_of_unit_details',
2340 		      p_unit_ver_rec.status);
2341     END IF;
2342 
2343 
2344   END validate_unit_dtls;
2345 
2346 
2347 PROCEDURE create_unit_section ( p_usec_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_tbl_type,
2348                                 p_c_rec_status OUT NOCOPY VARCHAR2,
2349 				p_calling_context  IN VARCHAR2
2350 			      ) AS
2351 
2352     l_insert_update     VARCHAR2(1);
2353     l_conc_flag         BOOLEAN;
2354     l_request_id        NUMBER;
2355     l_message_name      VARCHAR2(30);
2356 
2357     l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
2358     l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
2359     l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
2360     l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
2361     l_c_org_unit_cd igs_ps_unit_ver_all.owner_org_unit_cd%TYPE;
2362     l_n_unit_contact_id igs_pe_person_base_v.person_id%TYPE;
2363     l_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
2364     l_n_sup_uoo_id igs_ps_unit_ofr_opt_all.sup_uoo_id%TYPE;
2365     l_c_relation_type igs_ps_unit_ofr_opt_all.relation_type%TYPE;
2366     l_n_subtitle_id igs_ps_unit_subtitle.subtitle_id%TYPE;
2367     l_b_uop_deleted BOOLEAN;
2368 
2369 
2370     /* Private Procedures for create_unit_section */
2371     PROCEDURE trim_values ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2372     /***********************************************************************************************
2373     Created By     :
2374     Date Created By:
2375     Purpose        :
2376     Known limitations,enhancements,remarks:
2377     Change History (in reverse chronological order)
2378     Who         When            What
2379     sarakshi  10-Nov-2003   Enh#3116171, added code trim billing_credit_points field
2380     sarakshi  11-Sep-2003   ENh#3052452,added coe to trim the value of sup_unit_cd,sup_version_number,sup_teach_cal_alternate_code,sup_location_cd,sup_unit_class,default_enoll_flag
2381     vvutukur  05-Aug-2003   Enh#3045069.PSP Enh Build. Added code to trim the value of newly added column not_multiple_section_flag.
2382     ********************************************************************************************* */
2383     BEGIN
2384       p_usec_rec.unit_cd := trim(p_usec_rec.unit_cd);
2385       p_usec_rec.version_number := trim(p_usec_rec.version_number);
2386       p_usec_rec.teach_cal_alternate_code := trim(p_usec_rec.teach_cal_alternate_code);
2387       p_usec_rec.location_cd := trim(p_usec_rec.location_cd);
2388       p_usec_rec.unit_class := trim(p_usec_rec.unit_class);
2389       p_usec_rec.ivrs_available_ind := trim(p_usec_rec.ivrs_available_ind);
2390       p_usec_rec.call_number := trim(p_usec_rec.call_number);
2391       p_usec_rec.unit_section_status := trim(p_usec_rec.unit_section_status);
2392       p_usec_rec.unit_section_start_date := TRUNC(p_usec_rec.unit_section_start_date);
2393       p_usec_rec.unit_section_end_date := TRUNC(p_usec_rec.unit_section_end_date);
2394       p_usec_rec.offered_ind := trim(p_usec_rec.offered_ind);
2395       p_usec_rec.state_financial_aid := trim(p_usec_rec.state_financial_aid);
2396       p_usec_rec.grading_schema_prcdnce_ind := trim(p_usec_rec.grading_schema_prcdnce_ind);
2397       p_usec_rec.federal_financial_aid := trim(p_usec_rec.federal_financial_aid);
2398       p_usec_rec.unit_quota := trim(p_usec_rec.unit_quota);
2399       p_usec_rec.unit_quota_reserved_places := trim(p_usec_rec.unit_quota_reserved_places);
2400       p_usec_rec.institutional_financial_aid := trim(p_usec_rec.institutional_financial_aid);
2401       p_usec_rec.grading_schema_cd := trim(p_usec_rec.grading_schema_cd);
2402       p_usec_rec.gs_version_number := trim(p_usec_rec.gs_version_number);
2403       p_usec_rec.unit_contact_number := trim(p_usec_rec.unit_contact_number);
2404       p_usec_rec.ss_enrol_ind := trim(p_usec_rec.ss_enrol_ind);
2405       p_usec_rec.owner_org_unit_cd := trim(p_usec_rec.owner_org_unit_cd);
2406       p_usec_rec.attendance_required_ind := trim(p_usec_rec.attendance_required_ind);
2407       p_usec_rec.reserved_seating_allowed := trim(p_usec_rec.reserved_seating_allowed);
2408       p_usec_rec.special_permission_ind := trim(p_usec_rec.special_permission_ind);
2409       p_usec_rec.ss_display_ind := trim(p_usec_rec.ss_display_ind);
2410       p_usec_rec.rev_account_cd := trim(p_usec_rec.rev_account_cd);
2411       p_usec_rec.anon_unit_grading_ind := trim(p_usec_rec.anon_unit_grading_ind);
2412       p_usec_rec.anon_assess_grading_ind := trim(p_usec_rec.anon_assess_grading_ind);
2413       p_usec_rec.non_std_usec_ind := trim(p_usec_rec.non_std_usec_ind);
2414       p_usec_rec.auditable_ind := trim(p_usec_rec.auditable_ind);
2415       p_usec_rec.audit_permission_ind := trim(p_usec_rec.audit_permission_ind);
2416       p_usec_rec.waitlist_allowed := trim(p_usec_rec.waitlist_allowed);
2417       p_usec_rec.max_students_per_waitlist := trim(p_usec_rec.max_students_per_waitlist);
2418       p_usec_rec.minimum_credit_points := trim(p_usec_rec.minimum_credit_points);
2419       p_usec_rec.maximum_credit_points := trim(p_usec_rec.maximum_credit_points);
2420       p_usec_rec.variable_increment := trim(p_usec_rec.variable_increment);
2421       p_usec_rec.lecture_credit_points := trim(p_usec_rec.lecture_credit_points);
2422       p_usec_rec.lab_credit_points := trim(p_usec_rec.lab_credit_points);
2423       p_usec_rec.other_credit_points := trim(p_usec_rec.other_credit_points);
2424       p_usec_rec.clock_hours := trim(p_usec_rec.clock_hours);
2425       p_usec_rec.work_load_cp_lecture := trim(p_usec_rec.work_load_cp_lecture);
2426       p_usec_rec.work_load_cp_lab := trim(p_usec_rec.work_load_cp_lab);
2427       p_usec_rec.continuing_education_units := trim(p_usec_rec.continuing_education_units);
2428       p_usec_rec.work_load_other := trim(p_usec_rec.work_load_other);
2429       p_usec_rec.contact_hrs_lecture := trim(p_usec_rec.contact_hrs_lecture);
2430       p_usec_rec.contact_hrs_lab := trim(p_usec_rec.contact_hrs_lab);
2431       p_usec_rec.contact_hrs_other := trim(p_usec_rec.contact_hrs_other);
2432       p_usec_rec.non_schd_required_hrs := trim(p_usec_rec.non_schd_required_hrs);
2433       p_usec_rec.exclude_from_max_cp_limit := trim(p_usec_rec.exclude_from_max_cp_limit);
2434       p_usec_rec.claimable_hours := trim(p_usec_rec.claimable_hours);
2435       p_usec_rec.reference_subtitle := trim(p_usec_rec.reference_subtitle);
2436       p_usec_rec.reference_short_title := trim(p_usec_rec.reference_short_title);
2437       p_usec_rec.reference_subtitle_mod_flag := trim(p_usec_rec.reference_subtitle_mod_flag);
2438       p_usec_rec.reference_class_sch_excl_flag := trim(p_usec_rec.reference_class_sch_excl_flag);
2439       p_usec_rec.reference_rec_exclusion_flag := trim(p_usec_rec.reference_rec_exclusion_flag);
2440       p_usec_rec.reference_title := trim(p_usec_rec.reference_title);
2441       p_usec_rec.reference_attribute_category  := trim(p_usec_rec.reference_attribute_category);
2442       p_usec_rec.reference_attribute1 := trim(p_usec_rec.reference_attribute1);
2443       p_usec_rec.reference_attribute2 := trim(p_usec_rec.reference_attribute2);
2444       p_usec_rec.reference_attribute3 := trim(p_usec_rec.reference_attribute3);
2445       p_usec_rec.reference_attribute4 := trim(p_usec_rec.reference_attribute4);
2446       p_usec_rec.reference_attribute5 := trim(p_usec_rec.reference_attribute5);
2447       p_usec_rec.reference_attribute6 := trim(p_usec_rec.reference_attribute6);
2448       p_usec_rec.reference_attribute7 := trim(p_usec_rec.reference_attribute7);
2449       p_usec_rec.reference_attribute8 := trim(p_usec_rec.reference_attribute8);
2450       p_usec_rec.reference_attribute9 := trim(p_usec_rec.reference_attribute9);
2451       p_usec_rec.reference_attribute10 := trim(p_usec_rec.reference_attribute10);
2452       p_usec_rec.reference_attribute11 := trim(p_usec_rec.reference_attribute11);
2453       p_usec_rec.reference_attribute12 := trim(p_usec_rec.reference_attribute12);
2454       p_usec_rec.reference_attribute13 := trim(p_usec_rec.reference_attribute13);
2455       p_usec_rec.reference_attribute14 := trim(p_usec_rec.reference_attribute14);
2456       p_usec_rec.reference_attribute15 := trim(p_usec_rec.reference_attribute15);
2457       p_usec_rec.reference_attribute16 := trim(p_usec_rec.reference_attribute16);
2458       p_usec_rec.reference_attribute17 := trim(p_usec_rec.reference_attribute17);
2459       p_usec_rec.reference_attribute18 := trim(p_usec_rec.reference_attribute18);
2460       p_usec_rec.reference_attribute19 := trim(p_usec_rec.reference_attribute19);
2461       p_usec_rec.reference_attribute20 := trim(p_usec_rec.reference_attribute20);
2462       p_usec_rec.enrollment_expected := trim(p_usec_rec.enrollment_expected);
2463       p_usec_rec.enrollment_minimum := trim(p_usec_rec.enrollment_minimum);
2464       p_usec_rec.enrollment_maximum := trim(p_usec_rec.enrollment_maximum);
2465       p_usec_rec.advance_maximum := trim(p_usec_rec.advance_maximum);
2466       p_usec_rec.usec_waitlist_allowed := trim(p_usec_rec.usec_waitlist_allowed);
2467       p_usec_rec.usec_max_students_per_waitlist := trim(p_usec_rec.usec_max_students_per_waitlist);
2468       p_usec_rec.override_enrollment_maximum := trim(p_usec_rec.override_enrollment_maximum);
2469       p_usec_rec.max_auditors_allowed := trim(p_usec_rec.max_auditors_allowed);
2470       p_usec_rec.not_multiple_section_flag := TRIM(p_usec_rec.not_multiple_section_flag);
2471       p_usec_rec.sup_unit_cd:=trim(p_usec_rec.sup_unit_cd);
2472       p_usec_rec.sup_version_number:=trim(p_usec_rec.sup_version_number);
2473       p_usec_rec.sup_teach_cal_alternate_code := trim(p_usec_rec.sup_teach_cal_alternate_code);
2474       p_usec_rec.sup_location_cd := trim(p_usec_rec.sup_location_cd);
2475       p_usec_rec.sup_unit_class := trim(p_usec_rec.sup_unit_class);
2476       p_usec_rec.default_enroll_flag:=trim(p_usec_rec.default_enroll_flag);
2477       p_usec_rec.billing_credit_points := TRIM(p_usec_rec.billing_credit_points);
2478       p_usec_rec.billing_hrs := TRIM(p_usec_rec.billing_hrs);
2479     END trim_values;
2480 
2481     -- Private procedures for Unit Offering Records
2482 
2483     -- This procedure validates UO parameter values in Unit Section record
2484     PROCEDURE validate_uo_parameters ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2485     BEGIN
2486       /* Check for Mandatory Fields */
2487       IF p_usec_rec.unit_cd IS NULL OR p_usec_rec.unit_cd = FND_API.G_MISS_CHAR THEN
2488         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
2489         p_usec_rec.status := 'E';
2490       END IF;
2491       IF p_usec_rec.version_number IS NULL OR p_usec_rec.version_number = FND_API.G_MISS_NUM THEN
2492         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
2493         p_usec_rec.status := 'E';
2494       END IF;
2495       IF p_usec_rec.teach_cal_alternate_code IS NULL OR p_usec_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR  THEN
2496         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
2497         p_usec_rec.status := 'E';
2498       END IF;
2499     END validate_uo_parameters;
2500 
2501     -- This procedure will derive values required for Unit Offering.
2502     PROCEDURE validate_uo_derivations ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2503     l_c_message  VARCHAR2(30);
2504     BEGIN
2505       -- Derive Calander Type and Sequence Number
2506       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_rec.teach_cal_alternate_code,
2507                                              p_cal_type           => l_c_cal_type,
2508                                              p_ci_sequence_number => l_n_seq_num,
2509                                              p_start_dt           => l_d_start_dt,
2510                                              p_end_dt             => l_d_end_dt,
2511                                              p_return_status      => l_c_message );
2512       IF ( l_c_message <> 'SINGLE' ) THEN
2513         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
2514         p_usec_rec.status := 'E';
2515       END IF;
2516       l_c_message := NULL;
2517     END validate_uo_derivations;
2518 
2519     -- Validate UO Database Constraints
2520     PROCEDURE validate_uo_db_cons ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2521     /***********************************************************************************************
2522     Created By     :
2523     Date Created By:
2524     Purpose        :
2525     Known limitations,enhancements,remarks:
2526     Change History (in reverse chronological order)
2527     Who         When            What
2528     ********************************************************************************************* */
2529     BEGIN
2530 
2531       /* Primary Key Validation */
2532       IF igs_ps_unit_ofr_pkg.get_pk_for_validation ( x_unit_cd        => p_usec_rec.unit_cd,
2533                                                      x_version_number => p_usec_rec.version_number,
2534                                                      x_cal_type       => l_c_cal_type ) THEN
2535         p_usec_rec.status := 'K';
2536         RETURN;
2537       END IF;
2538 
2539     /* Validate Check Constraints */
2540       BEGIN
2541         igs_ps_unit_ofr_pkg.check_constraints ( 'UNIT_CD', p_usec_rec.unit_cd );
2542       EXCEPTION
2543         WHEN OTHERS THEN
2544           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'UNIT_CD', 'LEGACY_TOKENS', TRUE);
2545           p_usec_rec.status := 'E';
2546       END;
2547 
2548       BEGIN
2549         igs_ps_unit_ofr_pkg.check_constraints ( 'CAL_TYPE', l_c_cal_type );
2550       EXCEPTION
2551         WHEN OTHERS THEN
2552           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ALT_CODE', 'LEGACY_TOKENS', TRUE);
2553           p_usec_rec.status := 'E';
2554       END;
2555 
2556     /* Validate FK Constraints */
2557       BEGIN
2558         IF NOT igs_ca_type_pkg.get_pk_for_validation ( l_c_cal_type ) THEN
2559           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'CAL_TYPE', 'LEGACY_TOKENS', FALSE);
2560           p_usec_rec.status := 'E';
2561         END IF;
2562       END;
2563 
2564       BEGIN
2565         IF NOT igs_ps_unit_ver_pkg.get_pk_for_validation ( p_usec_rec.unit_cd, p_usec_rec.version_number ) THEN
2566           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_VERSION', 'LEGACY_TOKENS', FALSE);
2567           p_usec_rec.status := 'E';
2568         END IF;
2569       END;
2570     END validate_uo_db_cons;
2571 
2572     -- Main private procedure to create records of Unit Offering.
2573 
2574     PROCEDURE create_uo ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type )
2575     AS
2576      /***********************************************************************************************
2577     Created By     :
2578     Date Created By:
2579     Purpose        :
2580     Known limitations,enhancements,remarks:
2581     Change History (in reverse chronological order)
2582     Who         When            What
2583     sommukhe    14-NOV-2005     Bug # 4730169 addded column abort_flag in the insert to igs_ps_unit_ofr
2584     ********************************************************************************************* */
2585     BEGIN
2586 
2587       validate_uo_parameters ( p_usec_rec );
2588       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2589         fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.status_after_validate_uo_parameters',
2590 	'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2591 	||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2592       END IF;
2593 
2594       IF ( p_usec_rec.status = 'S' ) THEN
2595         validate_uo_derivations ( p_usec_rec );
2596 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2597 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.status_after_validate_uo_derivations',
2598 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2599 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2600         END IF;
2601       END IF;
2602 
2603       IF ( p_usec_rec.status = 'S' ) THEN
2604         validate_uo_db_cons ( p_usec_rec );
2605 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2606 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.status_after_validate_uo_db_cons',
2607 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2608 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2609         END IF;
2610       END IF;
2611 
2612       IF ( p_usec_rec.status = 'K' ) THEN
2613         -- If the record is already existing update status as 'Success' and return
2614         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2615 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.record is already existing update status as Success and return',
2616 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2617 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2618         END IF;
2619 	p_usec_rec.status := 'S';
2620         RETURN;
2621       END IF;
2622       IF p_calling_context IN ('G','S') THEN
2623         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2624 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.calling_context_G_or_S_return',
2625 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2626 	  ||p_usec_rec.teach_cal_alternate_code);
2627         END IF;
2628         RETURN ;
2629       ELSE
2630 	/* Business validations */
2631 	-- Check if the calendar category is 'TEACHING'
2632 	IF ( p_usec_rec.status = 'S' ) THEN
2633 	  IF NOT igs_ps_validate_lgcy_pkg.validate_cal_cat ( l_c_cal_type, 'TEACHING' ) THEN
2634 	    fnd_message.set_name ( 'IGS', 'IGS_PS_CALTYPE_TEACHING_CAL' );
2635 	    fnd_msg_pub.add;
2636 	    p_usec_rec.status := 'E';
2637 	  END IF;
2638           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2639 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.status_after_Business_validation',
2640 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2641 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2642           END IF;
2643 	END IF;
2644 
2645 	IF ( p_usec_rec.status = 'S' ) THEN
2646 	  INSERT INTO igs_ps_unit_ofr
2647 	  (unit_cd,
2648 	   version_number,
2649 	   cal_type,
2650 	   created_by,
2651 	   creation_date,
2652 	   last_updated_by,
2653 	   last_update_date,
2654 	   last_update_login
2655 	  )
2656 	  VALUES
2657 	  (p_usec_rec.unit_cd,
2658 	   p_usec_rec.version_number,
2659 	   l_c_cal_type,
2660 	   g_n_user_id,
2661 	   SYSDATE,
2662 	   g_n_user_id,
2663 	   SYSDATE,
2664 	   g_n_login_id
2665 	  );
2666 	  p_usec_rec.status := 'S';
2667 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2668 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.Record_Inserted',
2669 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2670 	    ||p_usec_rec.teach_cal_alternate_code);
2671           END IF;
2672 	END IF;
2673       END IF;
2674 
2675     END create_uo;
2676 
2677     -- Private procedures for Unit Offering Pattern Record
2678     -- This procedure will derive values required for Unit Offering Pattern.
2679     PROCEDURE validate_uop_derivations ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2680 
2681     BEGIN
2682 
2683       -- Default waitlist_allowed and max students per waitlist
2684       IF p_usec_rec.waitlist_allowed IS NULL THEN
2685         p_usec_rec.waitlist_allowed := 'N';
2686       END IF;
2687 
2688       IF p_usec_rec.max_students_per_waitlist IS NULL THEN
2689         p_usec_rec.max_students_per_waitlist := 0;
2690       END IF;
2691 
2692     END validate_uop_derivations;
2693 
2694     -- Procedure to validate Database constraints for Unit Offering Pattern Records.
2695     PROCEDURE validate_uop_db_cons ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2696 
2697       CURSOR cur_rowid ( cp_c_unit_cd    IN  igs_ps_unit_ofr_pat.unit_cd%TYPE,
2698                          cp_n_ver_num    IN  igs_ps_unit_ofr_pat.version_number%TYPE,
2699 			 cp_c_cal_type   IN  igs_ps_unit_ofr_pat.cal_type%TYPE,
2700 			 cp_n_ci_seq_num IN igs_ps_unit_ofr_pat.ci_sequence_number%TYPE) IS
2701       SELECT delete_flag
2702       FROM  igs_ps_unit_ofr_pat_all
2703       WHERE unit_cd = cp_c_unit_cd  AND
2704       version_number = cp_n_ver_num  AND
2705       cal_type = cp_c_cal_type  AND
2706       ci_sequence_number = cp_n_ci_seq_num;
2707       rec_rowid cur_rowid%ROWTYPE;
2708 
2709     BEGIN
2710 
2711       /* Pk validation for IGS_PS_UNIT_OFR_PAT , having delete_flag implementation*/
2712       l_b_uop_deleted := FALSE;
2713       OPEN cur_rowid( p_usec_rec.unit_cd,p_usec_rec.version_number,l_c_cal_type,l_n_seq_num);
2714       FETCH  cur_rowid INTO rec_rowid;
2715       IF cur_rowid%FOUND THEN
2716         CLOSE cur_rowid;
2717         IF rec_rowid.delete_flag ='N' THEN
2718           p_usec_rec.status := 'K';
2719           RETURN;
2720         ELSE
2721           l_b_uop_deleted := TRUE;
2722         END IF;
2723       ELSE
2724         CLOSE cur_rowid;
2725       END IF;
2726 
2727 
2728       /* Check for Foreign Key Validations */
2729 
2730       -- Check for existence of Calender Instance
2731       IF NOT igs_ca_inst_pkg.get_pk_for_validation ( x_cal_type        => l_c_cal_type,
2732                                                      x_sequence_number => l_n_seq_num ) THEN
2733         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
2734         p_usec_rec.status := 'E';
2735       END IF;
2736 
2737       -- Check for existence of Unit Offering
2738       IF NOT igs_ps_unit_ofr_pkg.get_pk_for_validation ( x_unit_cd        => p_usec_rec.unit_cd,
2739                                                          x_version_number => p_usec_rec.version_number,
2740                                                          x_cal_type       => l_c_cal_type ) THEN
2741         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_OFR_PAT', 'LEGACY_TOKENS', FALSE);
2742         p_usec_rec.status := 'E';
2743       END IF;
2744 
2745       -- Check Constraints checking.
2746       IF p_usec_rec.waitlist_allowed IS NOT NULL THEN
2747          BEGIN
2748            igs_ps_unit_ofr_pat_pkg.check_constraints ( 'WAITLIST_ALLOWED', p_usec_rec.waitlist_allowed);
2749          EXCEPTION
2750            WHEN OTHERS THEN
2751              igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'WAITLIST_ALLOWED', 'LEGACY_TOKENS', TRUE);
2752              p_usec_rec.status := 'E';
2753          END;
2754        END IF;
2755 
2756       IF p_usec_rec.max_students_per_waitlist IS NOT NULL THEN
2757          BEGIN
2758            igs_ps_unit_ofr_pat_pkg.check_constraints ( 'MAX_STUDENTS_PER_WAITLIST', p_usec_rec.max_students_per_waitlist);
2759          EXCEPTION
2760            WHEN OTHERS THEN
2761              igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999', 'MAX_STUDENTS_PER_WAITLIST', 'LEGACY_TOKENS', TRUE);
2762              p_usec_rec.status := 'E';
2763          END;
2764        END IF;
2765 
2766     END validate_uop_db_cons;
2767 
2768     -- Main private procedure to create records of Unit Offering Pattern.
2769 
2770     PROCEDURE create_uop ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type )
2771     AS
2772     BEGIN
2773 
2774       validate_uop_derivations ( p_usec_rec );
2775       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2776         fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.status_after_validate_uop_parameters',
2777 	'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2778 	||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2779       END IF;
2780 
2781       IF ( p_usec_rec.status = 'S' ) THEN
2782         validate_uop_db_cons ( p_usec_rec );
2783 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2784 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.status_after_validate_uop_db_cons',
2785 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2786 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2787         END IF;
2788       END IF;
2789 
2790 
2791       IF ( p_usec_rec.status = 'K' ) THEN
2792         -- If the record is already existing update status as 'Success' and return
2793         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2794 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.record is already existing update status as Success and return',
2795 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2796 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2797         END IF;
2798 	p_usec_rec.status := 'S';
2799         RETURN;
2800       END IF;
2801       IF p_calling_context IN ('G','S') THEN
2802         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2803 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.calling_context_G_or_S_return',
2804 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2805 	  ||p_usec_rec.teach_cal_alternate_code);
2806         END IF;
2807         RETURN ;
2808       ELSE
2809 	/* Business validations */
2810 	IF ( p_usec_rec.status = 'S' ) THEN
2811 
2812 	  -- Check if waitlist_allowed is 'Y' then check if waitlisting is allowed at organization level.
2813 	  IF p_usec_rec.waitlist_allowed = 'Y' THEN
2814 	    IF NOT igs_ps_validate_lgcy_pkg.validate_waitlist_allowed ( l_c_cal_type, l_n_seq_num ) THEN
2815 	      fnd_message.set_name ( 'IGS', 'IGS_EN_WAIT_NOT_ALW' );
2816 	      fnd_msg_pub.add;
2817 	      p_usec_rec.status := 'E';
2818 	    END IF;
2819 	  ELSE
2820 	    -- default max_students_per_waitlist to 0
2821 	    p_usec_rec.max_students_per_waitlist := 0;
2822 	  END IF;
2823 
2824 	  -- If Waitlist allowed is Yes and Max Students per waitlist is Zero then log a warning.
2825 	  IF ( p_usec_rec.waitlist_allowed = 'Y' AND p_usec_rec.max_students_per_waitlist = 0 ) THEN
2826 	      fnd_message.set_name ( 'IGS', 'IGS_PS_LGCY_MAX_STD_GT_0' );
2827 	      fnd_msg_pub.add;
2828 	      p_usec_rec.status := 'W';
2829 	  END IF;
2830 
2831 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2832 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.status_after_Business_validation',
2833 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2834 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Status:'||p_usec_rec.status);
2835           END IF;
2836 
2837 	END IF;
2838 
2839 	IF ( p_usec_rec.status = 'S' ) THEN
2840 	  IF l_b_uop_deleted THEN
2841 	    UPDATE igs_ps_unit_ofr_pat_all
2842 	    SET
2843 	      waitlist_allowed = p_usec_rec.waitlist_allowed,
2844 	      max_students_per_waitlist = p_usec_rec.max_students_per_waitlist,
2845 	      delete_flag = 'N',
2846 	      created_by = g_n_user_id,
2847 	      creation_date = SYSDATE,
2848 	      last_updated_by = g_n_user_id,
2849 	      last_update_date = SYSDATE,
2850 	      last_update_login = g_n_login_id
2851 	    WHERE unit_cd = p_usec_rec.unit_cd
2852 	    AND  version_number = p_usec_rec.version_number
2853 	    AND  cal_type = l_c_cal_type
2854 	    AND  ci_sequence_number = l_n_seq_num;
2855 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2856 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.Record_updated_when_uop_deleted',
2857 	      'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2858 	      ||p_usec_rec.teach_cal_alternate_code);
2859             END IF;
2860 	  ELSE
2861 	    INSERT INTO igs_ps_unit_ofr_pat_all
2862 	    (unit_cd,
2863 	     version_number,
2864 	     cal_type,
2865 	     ci_sequence_number,
2866 	     ci_start_dt,
2867 	     ci_end_dt,
2868 	     waitlist_allowed,
2869 	     max_students_per_waitlist,
2870 	     delete_flag,
2871 	     abort_flag,
2872 	     created_by,
2873 	     creation_date,
2874 	     last_updated_by,
2875 	     last_update_date,
2876 	     last_update_login
2877 	    )
2878 	    VALUES
2879 	    (p_usec_rec.unit_cd,
2880 	     p_usec_rec.version_number,
2881 	     l_c_cal_type,
2882 	     l_n_seq_num,
2883 	     l_d_start_dt,
2884 	     l_d_end_dt,
2885 	     p_usec_rec.waitlist_allowed,
2886 	     p_usec_rec.max_students_per_waitlist,
2887 	     'N',
2888 	     'N',
2889 	     g_n_user_id,
2890 	     SYSDATE,
2891 	     g_n_user_id,
2892 	     SYSDATE,
2893 	     g_n_login_id
2894 	    );
2895 
2896 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2897 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.Record_Inserted',
2898 	      'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
2899 	      ||p_usec_rec.teach_cal_alternate_code);
2900             END IF;
2901 	  END IF;
2902 	  p_usec_rec.status := 'S';
2903 	END IF;
2904       END IF;
2905     END create_uop;
2906 
2907     -- Private procedures for Unit Offering Option Records
2908 
2909     -- This procedure validates UOO parameter values in Unit Section record
2910     PROCEDURE validate_uoo_parameters ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2911     BEGIN
2912 
2913       /* Check for Mandatory Fields */
2914       IF p_usec_rec.location_cd IS NULL OR p_usec_rec.location_cd = FND_API.G_MISS_CHAR THEN
2915         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
2916         p_usec_rec.status := 'E';
2917       END IF;
2918       IF p_usec_rec.unit_class IS NULL OR p_usec_rec.unit_class = FND_API.G_MISS_CHAR THEN
2919         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
2920         p_usec_rec.status := 'E';
2921       END IF;
2922 
2923     END validate_uoo_parameters;
2924 
2925     -- This procedure will derive values required for Unit Offering Option.
2926     PROCEDURE validate_uoo_derivations ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
2927 
2928     /***********************************************************************************************
2929     Created By     :
2930     Date Created By:
2931     Purpose        :
2932     Known limitations,enhancements,remarks:
2933     Change History (in reverse chronological order)
2934     Who         When            What
2935     sarakshi  11-Sep-2003       Enh#3052452,dervied teh value of sup_uoo_id.
2936     sarakshi  22-Aug-2003       Bug#304509, defaulting the value of Not Multiple Unit Section Flag
2937     ********************************************************************************************* */
2938     l_c_sup_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
2939     l_n_sup_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
2940     l_d_sup_start_dt igs_ca_inst_all.start_dt%TYPE;
2941     l_d_sup_end_dt   igs_ca_inst_all.end_dt%TYPE;
2942     l_c_message      VARCHAR2(30);
2943 
2944     BEGIN
2945 
2946 
2947       --Either all column values of sup_unit_cd,sup_version_number,sup_teach_cal_alternate_code,sup_location_cd,sup_unit_class neds to be passed or none
2948       l_n_sup_uoo_id :=NULL;
2949       l_c_relation_type := NULL;
2950 
2951       IF (p_usec_rec.sup_unit_cd IS NOT NULL OR p_usec_rec.sup_version_number IS NOT NULL OR
2952          p_usec_rec.sup_teach_cal_alternate_code IS NOT NULL OR p_usec_rec.sup_location_cd IS NOT NULL OR p_usec_rec.sup_unit_class IS NOT NULL)
2953          AND
2954          (p_usec_rec.sup_unit_cd IS NULL OR p_usec_rec.sup_version_number IS NULL OR
2955          p_usec_rec.sup_teach_cal_alternate_code IS NULL OR p_usec_rec.sup_location_cd IS NULL OR
2956          p_usec_rec.sup_unit_class IS NULL) THEN
2957 
2958          fnd_message.set_name ( 'IGS', 'IGS_PS_NO_SUFF_VAL_SUP');
2959          fnd_msg_pub.add;
2960          p_usec_rec.status := 'E';
2961       ELSIF p_usec_rec.sup_unit_cd IS NOT NULL THEN
2962 
2963 
2964         -- Derive Calander Type and Sequence Number for sup alternate code
2965         igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_rec.sup_teach_cal_alternate_code,
2966                                                p_cal_type           => l_c_sup_cal_type,
2967                                                p_ci_sequence_number => l_n_sup_seq_num,
2968                                                p_start_dt           => l_d_sup_start_dt,
2969                                                p_end_dt             => l_d_sup_end_dt,
2970                                                p_return_status      => l_c_message );
2971         IF ( l_c_message <> 'SINGLE' ) THEN
2972           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'SUP_TEACH_CAL_ALT_CD', 'LEGACY_TOKENS', FALSE);
2973           p_usec_rec.status := 'E';
2974         END IF;
2975 
2976 
2977         -- Derive sup_uoo_id
2978         l_c_message := NULL;
2979         igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_rec.sup_unit_cd,
2980                                               p_ver_num    => p_usec_rec.sup_version_number,
2981                                               p_cal_type   => l_c_sup_cal_type,
2982                                               p_seq_num    => l_n_sup_seq_num,
2983                                               p_loc_cd     => p_usec_rec.sup_location_cd,
2984                                               p_unit_class => p_usec_rec.sup_unit_class,
2985                                               p_uoo_id     => l_n_sup_uoo_id,
2986                                               p_message    => l_c_message );
2987         IF ( l_c_message IS NOT NULL ) THEN
2988           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
2989           p_usec_rec.status := 'E';
2990         END IF;
2991 
2992       END IF;
2993 
2994     END validate_uoo_derivations;
2995 
2996     -- Procedure to validate Database constraints for Unit Offering Option Records.
2997     PROCEDURE validate_uoo_db_cons ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,p_insert_update VARCHAR2 ) AS
2998     /***********************************************************************************************
2999     Created By     :
3000     Date Created By:
3001     Purpose        :
3002     Known limitations,enhancements,remarks:
3003     Change History (in reverse chronological order)
3004     Who         When            What
3005     sarakshi  11-Sep-2003    Enh#3052452, Added call to igs_ps_unit_ofr_opt_pkg.check_constraints
3006                              for validating default_enroll_flag.
3007     vvutukur  19-Aug-2003    Enh#3045069.PSP Enh Build. Added call to igs_ps_unit_ofr_opt_pkg.check_constraints
3008                              for validating not_multiple_section_flag.
3009     ********************************************************************************************* */
3010     BEGIN
3011 
3012       IF p_insert_update = 'I'  THEN
3013       /* Check for Unique Key Validation */
3014         IF igs_ps_unit_ofr_opt_pkg.get_pk_for_validation ( x_unit_cd            => p_usec_rec.unit_cd,
3015                                                          x_version_number     => p_usec_rec.version_number,
3016                                                          x_cal_type           => l_c_cal_type,
3017                                                          x_ci_sequence_number => l_n_seq_num,
3018                                                          x_location_cd        => p_usec_rec.location_cd,
3019                                                          x_unit_class         => p_usec_rec.unit_class ) THEN
3020           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
3021           p_usec_rec.status := 'W';
3022           RETURN;
3023         END IF;
3024       END IF;
3025 
3026       /* Check for Check Constraints */
3027 
3028       --Validate whether the column not_multiple_section_flag has value other than 'Y' or 'N'.
3029       BEGIN
3030         igs_ps_unit_ofr_opt_pkg.check_constraints('NOT_MULTIPLE_SECTION_FLAG',p_usec_rec.not_multiple_section_flag);
3031       EXCEPTION
3032         WHEN OTHERS THEN
3033           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N',
3034                                            'NOT_MULTIPLE_SECTION_FLAG',
3035                                            'LEGACY_TOKENS',
3036                                            TRUE);
3037           p_usec_rec.status :='E';
3038       END;
3039 
3040       -- Unit Class should be in Upper Case
3041       BEGIN
3042         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'UNIT_CLASS', p_usec_rec.unit_class );
3043       EXCEPTION
3044         WHEN OTHERS THEN
3045           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'UNIT_CLASS', 'LEGACY_TOKENS', TRUE);
3046           p_usec_rec.status := 'E';
3047       END;
3048 
3049       --call number cannot be negative
3050       IF p_usec_rec.call_number IS NOT NULL  AND p_usec_rec.call_number < 1 THEN
3051           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'CALL_NUMBER', 'LEGACY_TOKENS', FALSE);
3052           p_usec_rec.status := 'E';
3053       END IF;
3054 
3055       BEGIN
3056         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'GRADING_SCHEMA_CD', p_usec_rec.grading_schema_cd );
3057       EXCEPTION
3058         WHEN OTHERS THEN
3059           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'USEC_GRADING_SCHM_CD', 'LEGACY_TOKENS', TRUE);
3060           p_usec_rec.status := 'E';
3061       END;
3062 
3063       BEGIN
3064         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'LOCATION_CD', p_usec_rec.location_cd );
3065       EXCEPTION
3066         WHEN OTHERS THEN
3067           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'LOCATION_CD', 'LEGACY_TOKENS', TRUE);
3068           p_usec_rec.status := 'E';
3069       END;
3070 
3071       BEGIN
3072         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'UNIT_QUOTA', p_usec_rec.unit_quota );
3073       EXCEPTION
3074         WHEN OTHERS THEN
3075           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999', 'UNIT_QUOTA', 'LEGACY_TOKENS', TRUE);
3076           p_usec_rec.status := 'E';
3077       END;
3078 
3079       IF p_usec_rec.unit_quota_reserved_places IS NOT NULL THEN
3080       BEGIN
3081         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'UNIT_QUOTA_RESERVED_PLACES', p_usec_rec.unit_quota_reserved_places );
3082       EXCEPTION
3083         WHEN OTHERS THEN
3084           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999', 'UNIT_QUOTA_RESERVED_PLACES', 'LEGACY_TOKENS', TRUE);
3085           p_usec_rec.status := 'E';
3086       END;
3087       END IF;
3088 
3089       BEGIN
3090         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'CI_SEQUENCE_NUMBER', l_n_seq_num );
3091       EXCEPTION
3092         WHEN OTHERS THEN
3093           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999', 'CAL_SEQ_NUM', 'LEGACY_TOKENS', TRUE);
3094           p_usec_rec.status := 'E';
3095       END;
3096 
3097       BEGIN
3098         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'GRADING_SCHEMA_PRCDNCE_IND', p_usec_rec.grading_schema_prcdnce_ind );
3099       EXCEPTION
3100         WHEN OTHERS THEN
3101           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'GRADING_SCHEMA_PRCDNCE_IND', 'LEGACY_TOKENS', TRUE);
3102           p_usec_rec.status := 'E';
3103       END;
3104 
3105       BEGIN
3106         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'IVRS_AVAILABLE_IND', p_usec_rec.ivrs_available_ind );
3107       EXCEPTION
3108         WHEN OTHERS THEN
3109           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'IVRS_AVAILABLE_IND', 'LEGACY_TOKENS', TRUE);
3110           p_usec_rec.status := 'E';
3111       END;
3112 
3113       BEGIN
3114         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'OFFERED_IND', p_usec_rec.offered_ind );
3115       EXCEPTION
3116         WHEN OTHERS THEN
3117           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'OFFERED_IND', 'LEGACY_TOKENS', TRUE);
3118           p_usec_rec.status := 'E';
3119       END;
3120 
3121       BEGIN
3122         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'NON_STD_USEC_IND', p_usec_rec.non_std_usec_ind );
3123       EXCEPTION
3124         WHEN OTHERS THEN
3125           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'NON_STD_USEC_IND', 'LEGACY_TOKENS', TRUE);
3126           p_usec_rec.status := 'E';
3127       END;
3128 
3129       BEGIN
3130         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'AUDITABLE_IND', p_usec_rec.auditable_ind );
3131       EXCEPTION
3132         WHEN OTHERS THEN
3133           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'AUDITABLE_IND', 'LEGACY_TOKENS', TRUE);
3134           p_usec_rec.status := 'E';
3135       END;
3136 
3137       BEGIN
3138         igs_ps_unit_ofr_opt_pkg.check_constraints ( 'AUDIT_PERMISSION_IND', p_usec_rec.audit_permission_ind );
3139       EXCEPTION
3140         WHEN OTHERS THEN
3141           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'AUDIT_PERMISSION_IND', 'LEGACY_TOKENS', TRUE);
3142           p_usec_rec.status := 'E';
3143       END;
3144 
3145       -- Check whether Owner Organization Unit Code is valid, if it is passed.
3146       IF ( p_usec_rec.owner_org_unit_cd IS NOT NULL ) THEN
3147         IF NOT igs_ps_validate_lgcy_pkg.validate_org_unit_cd ( p_usec_rec.owner_org_unit_cd, 'UNIT_SECTION_LGCY' ) THEN
3148           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
3149           p_usec_rec.status := 'E';
3150         END IF;
3151       END IF;
3152 
3153       -- Check for existence of Revenue Account Code, if passed
3154       IF ( p_usec_rec.rev_account_cd IS NOT NULL ) THEN
3155         IF NOT igs_fi_acc_pkg.get_pk_for_validation ( x_account_cd => p_usec_rec.rev_account_cd ) THEN
3156           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'REV_ACC_CD', 'LEGACY_TOKENS', FALSE);
3157           p_usec_rec.status := 'E';
3158         END IF;
3159       END IF;
3160 
3161       /* Check for Foreign Key Validations */
3162 
3163       -- Check for existence of Unit Offering Pattern
3164       IF NOT igs_ps_unit_ofr_pat_pkg.get_pk_for_validation ( x_unit_cd            => p_usec_rec.unit_cd,
3165                                                              x_version_number     => p_usec_rec.version_number,
3166                                                              x_cal_type           => l_c_cal_type,
3167                                                              x_ci_sequence_number => l_n_seq_num ) THEN
3168         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_OFR_PAT', 'LEGACY_TOKENS', FALSE);
3169         p_usec_rec.status := 'E';
3170       END IF;
3171 
3172       -- Check for existence of Location Code
3173       IF NOT igs_ad_location_pkg.get_pk_for_validation ( p_usec_rec.location_cd ) THEN
3174         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
3175         p_usec_rec.status := 'E';
3176       END IF;
3177 
3178       -- Check for existence of Unit Status
3179       IF NOT igs_as_unit_class_pkg.get_pk_for_validation ( p_usec_rec.unit_class ) THEN
3180         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
3181         p_usec_rec.status := 'E';
3182       END IF;
3183 
3184       -- Check for existence of Grading Schema
3185       IF NOT igs_as_grd_schema_pkg.get_pk_for_validation ( p_usec_rec.grading_schema_cd, p_usec_rec.gs_version_number ) THEN
3186         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
3187         p_usec_rec.status := 'E';
3188       END IF;
3189 
3190       -- Check the existence of Unit Contact Number, if passed
3191       IF p_usec_rec.unit_contact_number IS NOT NULL THEN
3192         IF NOT igs_pe_person_pkg.get_pk_for_validation ( l_n_unit_contact_id ) THEN
3193           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_CONT_NUM', 'LEGACY_TOKENS', FALSE);
3194           p_usec_rec.status := 'E';
3195         END IF;
3196       END IF;
3197 
3198       -- Check the Unit Section Status
3199       IF NOT igs_lookups_view_pkg.get_pk_for_validation('UNIT_SECTION_STATUS',p_usec_rec.unit_section_status) THEN
3200           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'USEC_STATUS', 'LEGACY_TOKENS', FALSE);
3201           p_usec_rec.status := 'E';
3202       END IF;
3203 
3204       --Validate default enroll flag
3205       BEGIN
3206         igs_ps_unit_ofr_opt_pkg.check_constraints('DEFAULT_ENROLL_FLAG',p_usec_rec.default_enroll_flag);
3207       EXCEPTION
3208         WHEN OTHERS THEN
3209           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','DEFAULT_ENROLL_FLAG','LEGACY_TOKENS',TRUE);
3210           p_usec_rec.status :='E';
3211       END;
3212 
3213 
3214     END validate_uoo_db_cons;
3215 
3216 
3217 
3218     -- Main private procedure to create records of Unit Offering Option.
3219 
3220     PROCEDURE create_uoo ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type )
3221     /***********************************************************************************************
3222     Created By     :
3223     Date Created By:
3224     Purpose        :
3225     Known limitations,enhancements,remarks:
3226     Change History (in reverse chronological order)
3227     Who         When            What
3228     sarakshi  31-Aug-2005   Bug#4543368, while creating cerdit points and limits record, checking whether all the values are null, if all
3229                             the values are null then do no proceed with the insert/update for these two tables.
3230     sarakshi  12-Apr-2004   bug#3555871, Added code to populate the call_number field if teh profile option is AUTO
3231     sarakshi  11-Sep-2003   Enh#3052452,Added new column sup_uoo_id,relation_type,default_enroll_flag to the insert statement.
3232                             Also updated the superior unit section record.
3233     vvutukur  05-Aug-2003   Enh#3045069.PSP Enh Build. Added new column not_multiple_section_flag while insertion.
3234     ********************************************************************************************* */
3235     AS
3236 
3237     CURSOR c_usec_check(cp_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
3238     SELECT 'X'
3239     FROM   igs_ps_unit_ofr_opt_all
3240     WHERE  uoo_id=cp_uoo_id
3241     AND    relation_type='SUPERIOR';
3242     l_c_var  VARCHAR2(1);
3243 
3244     CURSOR cur_int_pat(cp_unit_cd IN VARCHAR2,
3245                     cp_version_number IN NUMBER,
3246 		    cp_cal_type IN VARCHAR2,
3247 		    cp_seq_num  IN NUMBER) IS
3248     SELECT *
3249     FROM  igs_ps_sch_pat_int
3250     WHERE unit_cd=cp_unit_cd
3251     AND version_number=cp_version_number
3252     AND calendar_type =cp_cal_type
3253     AND sequence_number= cp_seq_num
3254     AND  abort_flag='N';
3255     l_cur_int_pat  cur_int_pat%ROWTYPE;
3256 
3257     CURSOR cur_int_usec(cp_unit_cd IN VARCHAR2,
3258 			cp_version_number IN NUMBER,
3259 			cp_cal_type IN VARCHAR2,
3260 			cp_seq_num  IN NUMBER,
3261 			cp_location_cd IN VARCHAR2,
3262 			cp_unit_class IN VARCHAR2) IS
3263     SELECT *
3264     FROM  igs_ps_sch_usec_int_all
3265     WHERE unit_cd=cp_unit_cd
3266     AND version_number=cp_version_number
3267     AND calendar_type =cp_cal_type
3268     AND sequence_number= cp_seq_num
3269     AND location_cd=cp_location_cd
3270     AND unit_class=cp_unit_class
3271     AND  abort_flag='N';
3272     l_cur_int_usec  cur_int_usec%ROWTYPE;
3273 
3274 
3275     FUNCTION check_insert_update ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type) RETURN VARCHAR2 IS
3276      CURSOR c_usec(cp_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE,cp_seq_num igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE) IS
3277      SELECT 'X'
3278      FROM  igs_ps_unit_ofr_opt_all
3279      WHERE unit_cd = p_usec_rec.unit_cd
3280      AND version_number =  p_usec_rec.version_number
3281      AND ci_sequence_number =cp_seq_num
3282      AND unit_class = p_usec_rec.unit_class
3283      AND location_cd = p_usec_rec.location_cd
3284      AND cal_type = cp_cal_type ;
3285      c_usec_rec c_usec%ROWTYPE;
3286 
3287     BEGIN
3288       OPEN c_usec( l_c_cal_type,l_n_seq_num);
3289       FETCH c_usec INTO c_usec_rec;
3290       IF c_usec%NOTFOUND THEN
3291         CLOSE c_usec;
3292         RETURN 'I';
3293       ELSE
3294         CLOSE c_usec;
3295 	RETURN 'U';
3296       END IF;
3297 
3298     END check_insert_update;
3299 
3300     PROCEDURE Assign_default(  p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,p_insert_update VARCHAR2 ) AS
3301 
3302       CURSOR c_usec(cp_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE,cp_seq_num igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE) IS
3303       SELECT *
3304       FROM   igs_ps_unit_ofr_opt_all
3305       WHERE  unit_cd = p_usec_rec.unit_cd
3306       AND    version_number =  p_usec_rec.version_number
3307       AND    ci_sequence_number =cp_seq_num
3308       AND    unit_class = p_usec_rec.unit_class
3309       AND    location_cd = p_usec_rec.location_cd
3310       AND    cal_type = cp_cal_type ;
3311 
3312       CURSOR c_audit_info ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3313 			    cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3314       SELECT auditable_ind, audit_permission_ind
3315       FROM   igs_ps_unit_ver_all
3316       WHERE  unit_cd = cp_unit_cd
3317       AND    version_number = cp_version_number;
3318 
3319       CURSOR c_grd_sch ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3320 			 cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3321       SELECT grading_schema_code, grd_schm_version_number
3322       FROM   igs_ps_unit_grd_schm
3323       WHERE  unit_code = cp_unit_cd
3324       AND    unit_version_number = cp_version_number
3325       AND    default_flag = 'Y';
3326 
3327       CURSOR c_ivr_enrol_ind ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3328 			       cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3329       SELECT ivr_enrol_ind
3330       FROM   igs_ps_unit_ver_all
3331       WHERE  unit_cd = cp_unit_cd
3332       AND    version_number = cp_version_number;
3333 
3334       CURSOR c_ss_enrol_ind ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3335 			      cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3336       SELECT ss_enrol_ind
3337       FROM   igs_ps_unit_ver_all
3338       WHERE  unit_cd = cp_unit_cd
3339       AND    version_number = cp_version_number;
3340 
3341       CURSOR c_muiltiple_section_flag ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3342 					cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3343       SELECT same_teaching_period
3344       FROM   igs_ps_unit_ver_all
3345       WHERE  unit_cd = cp_unit_cd
3346       AND    version_number = cp_version_number;
3347 
3348       CURSOR c_org_unit_cd ( cp_unit_cd igs_ps_unit_ver_all.unit_cd%TYPE,
3349 			     cp_version_number igs_ps_unit_ver_all.version_number%TYPE )IS
3350       SELECT owner_org_unit_cd
3351       FROM   igs_ps_unit_ver_all
3352       WHERE  unit_cd = cp_unit_cd
3353       AND    version_number = cp_version_number;
3354 
3355       c_usec_rec c_usec%ROWTYPE;
3356       l_same_teaching_period  igs_ps_unit_ver_all.same_teaching_period%TYPE;
3357 
3358     BEGIN
3359 
3360       IF p_insert_update = 'I' THEN
3361         IF p_usec_rec.offered_ind IS NULL THEN
3362           p_usec_rec.offered_ind := 'Y';
3363         END IF;
3364 
3365 	IF p_usec_rec.state_financial_aid IS NULL THEN
3366 	  p_usec_rec.state_financial_aid := 'N';
3367 	END IF;
3368 
3369 	IF p_usec_rec.grading_schema_prcdnce_ind IS NULL THEN
3370 	  p_usec_rec.grading_schema_prcdnce_ind := 'N';
3371 	END IF;
3372 
3373 	IF p_usec_rec.federal_financial_aid IS NULL THEN
3374 	  p_usec_rec.federal_financial_aid := 'N';
3375 	END IF;
3376 
3377 	IF p_usec_rec.ss_enrol_ind IS NULL THEN
3378 	  p_usec_rec.ss_enrol_ind := 'N';
3379 	END IF;
3380 
3381 	IF p_usec_rec.attendance_required_ind IS NULL THEN
3382 	  p_usec_rec.attendance_required_ind := 'N';
3383 	END IF;
3384 
3385 	IF p_usec_rec.reserved_seating_allowed IS NULL THEN
3386 	  p_usec_rec.reserved_seating_allowed := 'Y';
3387 	END IF;
3388 
3389 	IF p_usec_rec.special_permission_ind IS NULL THEN
3390 	  p_usec_rec.special_permission_ind := 'N';
3391 	END IF;
3392 
3393 	IF p_usec_rec.ss_display_ind IS NULL THEN
3394 	  p_usec_rec.ss_display_ind := 'N';
3395 	END IF;
3396 
3397 	IF p_usec_rec.anon_unit_grading_ind IS NULL THEN
3398 	  p_usec_rec.anon_unit_grading_ind := 'N';
3399 	END IF;
3400 
3401 	IF p_usec_rec.anon_assess_grading_ind IS NULL THEN
3402 	  p_usec_rec.anon_assess_grading_ind := 'N';
3403 	END IF;
3404 
3405 	-- If ivrs_available_ind is null then default it to unit level
3406 	IF p_usec_rec.ivrs_available_ind IS NULL THEN
3407 	  OPEN c_ivr_enrol_ind ( p_usec_rec.unit_cd, p_usec_rec.version_number );
3408 	  FETCH c_ivr_enrol_ind INTO p_usec_rec.ivrs_available_ind;
3409 	  CLOSE c_ivr_enrol_ind;
3410 	END IF;
3411 
3412 	-- If ss_enrol_ind is null then default it to unit level
3413 	IF p_usec_rec.ss_enrol_ind IS NULL THEN
3414 	  OPEN c_ss_enrol_ind ( p_usec_rec.unit_cd, p_usec_rec.version_number );
3415 	  FETCH c_ss_enrol_ind INTO p_usec_rec.ss_enrol_ind;
3416 	  CLOSE c_ivr_enrol_ind;
3417 	END IF;
3418 
3419 	-- If unit contact number is not null the derive person id associated with it.
3420 	IF p_usec_rec.unit_contact_number IS NOT NULL THEN
3421 	  igs_ps_validate_lgcy_pkg.get_party_id( p_usec_rec.unit_contact_number,l_n_unit_contact_id );
3422 	  IF l_n_unit_contact_id IS NULL THEN
3423 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'UNIT_CONT_NUM', 'LEGACY_TOKENS', FALSE);
3424 	      p_usec_rec.status := 'E';
3425 	  END IF;
3426 	END IF;
3427 
3428 	-- If auditable_ind and audit_permission_ind are not passed then derive thier unit level values
3429 	IF p_usec_rec.auditable_ind IS NULL AND p_usec_rec.audit_permission_ind IS NULL THEN
3430 	  OPEN c_audit_info ( p_usec_rec.unit_cd, p_usec_rec.version_number );
3431 	  FETCH c_audit_info INTO p_usec_rec.auditable_ind, p_usec_rec.audit_permission_ind;
3432 	  CLOSE c_audit_info;
3433 	END IF;
3434 
3435 	-- Derive unit level default grading schema and version number if they are not passed at unit section level
3436 	IF ( p_usec_rec.grading_schema_cd IS NULL AND p_usec_rec.gs_version_number IS NULL ) THEN
3437 	  OPEN c_grd_sch ( p_usec_rec.unit_cd, p_usec_rec.version_number );
3438 	  FETCH c_grd_sch into p_usec_rec.grading_schema_cd, p_usec_rec.gs_version_number;
3439 	  IF ( c_grd_sch%NOTFOUND ) THEN
3440 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
3441 	    p_usec_rec.status := 'E';
3442 	  END IF;
3443 	  CLOSE c_grd_sch;
3444 	END IF;
3445 
3446 	--Derive the value of Multiple Unit sections flag
3447 	IF p_usec_rec.not_multiple_section_flag IS NULL THEN
3448 	   OPEN c_muiltiple_section_flag( p_usec_rec.unit_cd, p_usec_rec.version_number );
3449 	   FETCH c_muiltiple_section_flag INTO l_same_teaching_period;
3450 	   CLOSE c_muiltiple_section_flag;
3451 	   IF l_same_teaching_period = 'Y' THEN
3452 	     p_usec_rec.not_multiple_section_flag := 'N';
3453 	   ELSE
3454 	     p_usec_rec.not_multiple_section_flag := 'Y';
3455 	   END IF;
3456 	END IF;
3457 
3458 	--Default the value of default_enrol_flag to N if not passed
3459 	IF p_usec_rec.default_enroll_flag IS NULL THEN
3460 	  p_usec_rec.default_enroll_flag := 'N';
3461 	END IF;
3462 
3463 	   -- Derive Organization Unit Code from unit level if it is not provided at unit section.
3464 	IF p_usec_rec.owner_org_unit_cd IS NULL THEN
3465 	  OPEN c_org_unit_cd ( p_usec_rec.unit_cd, p_usec_rec.version_number );
3466 	  FETCH c_org_unit_cd INTO l_c_org_unit_cd;
3467 	  CLOSE c_org_unit_cd;
3468 	END IF;
3469 
3470       END IF;
3471 
3472       IF p_insert_update = 'U' THEN
3473          OPEN c_usec( l_c_cal_type,l_n_seq_num);
3474          FETCH c_usec INTO c_usec_rec;
3475          CLOSE c_usec;
3476 
3477          IF p_usec_rec.ivrs_available_ind  IS NULL  THEN
3478 	    p_usec_rec.ivrs_available_ind  := c_usec_rec.ivrs_available_ind ;
3479 	 ELSIF  p_usec_rec.ivrs_available_ind  = FND_API.G_MISS_CHAR THEN
3480 	    p_usec_rec.ivrs_available_ind  :='N';
3481 	 END IF;
3482 
3483 	 IF p_usec_rec.call_number IS NULL THEN
3484 	    p_usec_rec.call_number := c_usec_rec.call_number;
3485 	 ELSIF p_usec_rec.call_number = FND_API.G_MISS_NUM THEN
3486 	    IF fnd_profile.value('IGS_PS_CALL_NUMBER') = 'USER_DEFINED' THEN
3487   	      p_usec_rec.call_number :=NULL;
3488             ELSE
3489               p_usec_rec.call_number := c_usec_rec.call_number;
3490             END IF;
3491          ELSE
3492            IF (fnd_profile.value('IGS_PS_CALL_NUMBER') = 'AUTO' AND p_usec_rec.call_number IS NOT NULL) THEN
3493 
3494   	     -- Profile is AUTO and values is passed to call_number so raise error
3495 	     igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'CALL_NUMBER', 'LEGACY_TOKENS', FALSE);
3496 	     p_usec_rec.status := 'E';
3497            END IF;
3498 	 END IF;
3499 
3500          IF p_usec_rec.unit_section_status IS NULL THEN
3501 	    p_usec_rec.unit_section_status :=c_usec_rec.unit_section_status;
3502 	 ELSIF p_usec_rec.unit_section_status  = FND_API.G_MISS_CHAR THEN
3503 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'USEC_STATUS', 'LEGACY_TOKENS', FALSE);
3504 	    p_usec_rec.status := 'E';
3505 	 END IF;
3506 
3507 	 IF p_usec_rec.unit_section_start_date IS NULL THEN
3508 	    p_usec_rec.unit_section_start_date :=c_usec_rec.unit_section_start_date;
3509 	 ELSIF p_usec_rec.unit_section_start_date = FND_API.G_MISS_DATE THEN
3510 	    p_usec_rec.unit_section_start_date :=NULL;
3511 	 END IF;
3512 
3513 	 IF p_usec_rec.unit_section_end_date IS NULL THEN
3514 	    p_usec_rec.unit_section_end_date := c_usec_rec.unit_section_end_date;
3515 	 ELSIF p_usec_rec.unit_section_end_date = FND_API.G_MISS_DATE THEN
3516 	    p_usec_rec.unit_section_end_date :=NULL;
3517 	 END IF;
3518 
3519 	 IF p_usec_rec.offered_ind IS NULL THEN
3520 	    p_usec_rec.offered_ind := c_usec_rec.offered_ind;
3521 	 ELSIF p_usec_rec.offered_ind = FND_API.G_MISS_CHAR THEN
3522 	    p_usec_rec.offered_ind :='N';
3523 	 END IF;
3524 
3525 	 IF p_usec_rec.state_financial_aid IS NULL THEN
3526 	    p_usec_rec.state_financial_aid := c_usec_rec.state_financial_aid;
3527 	 ELSIF p_usec_rec.state_financial_aid = FND_API.G_MISS_CHAR THEN
3528 	    p_usec_rec.state_financial_aid :='N';
3529 	 END IF;
3530 
3531 	 IF p_usec_rec.grading_schema_prcdnce_ind IS NULL THEN
3532 	    p_usec_rec.grading_schema_prcdnce_ind := c_usec_rec.grading_schema_prcdnce_ind;
3533 	 ELSIF p_usec_rec.grading_schema_prcdnce_ind = FND_API.G_MISS_CHAR THEN
3534 	    p_usec_rec.grading_schema_prcdnce_ind :='N';
3535 	 END IF;
3536 
3537 	 IF p_usec_rec.federal_financial_aid IS NULL THEN
3538 	    p_usec_rec.federal_financial_aid := c_usec_rec.federal_financial_aid;
3539 	 ELSIF p_usec_rec.federal_financial_aid = FND_API.G_MISS_CHAR THEN
3540 	    p_usec_rec.federal_financial_aid :='N';
3541 	 END IF;
3542 
3543 	 IF p_usec_rec.unit_quota IS NULL THEN
3544 	    p_usec_rec.unit_quota := c_usec_rec.unit_quota;
3545 	 ELSIF p_usec_rec.unit_quota = FND_API.G_MISS_NUM THEN
3546 	    p_usec_rec.unit_quota :=NULL;
3547 	 END IF;
3548 
3549 	 IF p_usec_rec.unit_quota_reserved_places IS NULL THEN
3550 	    p_usec_rec.unit_quota_reserved_places := c_usec_rec.unit_quota_reserved_places;
3551 	 ELSIF p_usec_rec.unit_quota_reserved_places = FND_API.G_MISS_NUM THEN
3552 	    p_usec_rec.unit_quota_reserved_places :=NULL;
3553 	 END IF;
3554 
3555 	 IF p_usec_rec.institutional_financial_aid IS NULL THEN
3556 	    p_usec_rec.institutional_financial_aid := c_usec_rec.institutional_financial_aid;
3557 	 ELSIF p_usec_rec.institutional_financial_aid = FND_API.G_MISS_CHAR THEN
3558 	    p_usec_rec.institutional_financial_aid :='N';
3559 	 END IF;
3560 
3561 	 IF p_usec_rec.grading_schema_cd IS NULL THEN
3562 	    p_usec_rec.grading_schema_cd := c_usec_rec.grading_schema_cd;
3563 	 ELSIF p_usec_rec.grading_schema_cd = FND_API.G_MISS_CHAR THEN
3564 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
3565 	    p_usec_rec.status := 'E';
3566 	 END IF;
3567 
3568 	 IF p_usec_rec.gs_version_number IS NULL THEN
3569 	    p_usec_rec.gs_version_number := c_usec_rec.gs_version_number;
3570 	 ELSIF p_usec_rec.gs_version_number = FND_API.G_MISS_NUM THEN
3571 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'GS_VERSION_NUMBER', 'LEGACY_TOKENS', FALSE);
3572 	    p_usec_rec.status := 'E';
3573 	 END IF;
3574 
3575 	 IF p_usec_rec.unit_contact_number IS NULL THEN
3576 	    p_usec_rec.unit_contact_number := c_usec_rec.unit_contact;
3577 	 ELSIF p_usec_rec.unit_contact_number = FND_API.G_MISS_NUM THEN
3578 	    p_usec_rec.unit_contact_number :=NULL;
3579 	 END IF;
3580 
3581 	 IF p_usec_rec.ss_enrol_ind IS NULL THEN
3582 	    p_usec_rec.ss_enrol_ind := c_usec_rec.ss_enrol_ind;
3583 	 ELSIF p_usec_rec.ss_enrol_ind = FND_API.G_MISS_CHAR THEN
3584 	    p_usec_rec.ss_enrol_ind :='N';
3585 	 END IF;
3586 
3587 	 IF p_usec_rec.owner_org_unit_cd IS NULL THEN
3588 	    p_usec_rec.owner_org_unit_cd := c_usec_rec.owner_org_unit_cd;
3589 	 ELSIF p_usec_rec.owner_org_unit_cd = FND_API.G_MISS_CHAR THEN
3590 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'OWNER_ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
3591 	    p_usec_rec.status := 'E';
3592 	 END IF;
3593 
3594 	 IF p_usec_rec.attendance_required_ind IS NULL THEN
3595 	    p_usec_rec.attendance_required_ind := c_usec_rec.attendance_required_ind;
3596 	 ELSIF p_usec_rec.attendance_required_ind = FND_API.G_MISS_CHAR THEN
3597 	    p_usec_rec.attendance_required_ind :='N';
3598 	 END IF;
3599 
3600 	 IF p_usec_rec.reserved_seating_allowed IS NULL THEN
3601 	    p_usec_rec.reserved_seating_allowed := c_usec_rec.reserved_seating_allowed;
3602 	 ELSIF p_usec_rec.reserved_seating_allowed = FND_API.G_MISS_CHAR THEN
3603 	    p_usec_rec.reserved_seating_allowed :='N';
3604 	 END IF;
3605 
3606 	 IF p_usec_rec.special_permission_ind IS NULL THEN
3607 	    p_usec_rec.special_permission_ind := c_usec_rec.special_permission_ind;
3608 	 ELSIF p_usec_rec.special_permission_ind = FND_API.G_MISS_CHAR THEN
3609 	    p_usec_rec.special_permission_ind :='N';
3610 	 END IF;
3611 
3612 	 IF p_usec_rec.ss_display_ind IS NULL THEN
3613 	    p_usec_rec.ss_display_ind := c_usec_rec.ss_display_ind;
3614 	 ELSIF p_usec_rec.ss_display_ind = FND_API.G_MISS_CHAR THEN
3615 	    p_usec_rec.ss_display_ind :='N';
3616 	 END IF;
3617 
3618 	 IF p_usec_rec.rev_account_cd IS NULL THEN
3619 	    p_usec_rec.rev_account_cd := c_usec_rec.rev_account_cd;
3620 	 ELSIF p_usec_rec.rev_account_cd = FND_API.G_MISS_CHAR THEN
3621 	    p_usec_rec.rev_account_cd :=NULL;
3622 	 END IF;
3623 
3624 	 IF p_usec_rec.anon_unit_grading_ind IS NULL THEN
3625 	    p_usec_rec.anon_unit_grading_ind := c_usec_rec.anon_unit_grading_ind;
3626 	 ELSIF p_usec_rec.anon_unit_grading_ind = FND_API.G_MISS_CHAR THEN
3627 	    p_usec_rec.anon_unit_grading_ind :='N';
3628 	 END IF;
3629 
3630 	 IF p_usec_rec.anon_assess_grading_ind IS NULL THEN
3631 	    p_usec_rec.anon_assess_grading_ind := c_usec_rec.anon_assess_grading_ind;
3632 	 ELSIF p_usec_rec.anon_assess_grading_ind = FND_API.G_MISS_CHAR THEN
3633 	    p_usec_rec.anon_assess_grading_ind :='N';
3634 	 END IF;
3635 
3636 	 IF p_usec_rec.non_std_usec_ind IS NULL THEN
3637 	    p_usec_rec.non_std_usec_ind := c_usec_rec.non_std_usec_ind;
3638 	 ELSIF p_usec_rec.non_std_usec_ind = FND_API.G_MISS_CHAR THEN
3639 	    p_usec_rec.non_std_usec_ind :='N';
3640 	 END IF;
3641 
3642 	 IF p_usec_rec.auditable_ind IS NULL THEN
3643 	    p_usec_rec.auditable_ind := c_usec_rec.auditable_ind;
3644 	 ELSIF p_usec_rec.auditable_ind = FND_API.G_MISS_CHAR THEN
3645 	    p_usec_rec.auditable_ind :='N';
3646 	 END IF;
3647 
3648 	 IF p_usec_rec.audit_permission_ind IS NULL THEN
3649 	    p_usec_rec.audit_permission_ind := c_usec_rec.audit_permission_ind;
3650 	 ELSIF p_usec_rec.audit_permission_ind = FND_API.G_MISS_CHAR THEN
3651 	    p_usec_rec.audit_permission_ind :='N';
3652 	 END IF;
3653 
3654 	 IF p_usec_rec.not_multiple_section_flag IS NULL THEN
3655 	    p_usec_rec.not_multiple_section_flag := c_usec_rec.not_multiple_section_flag;
3656 	 ELSIF p_usec_rec.not_multiple_section_flag = FND_API.G_MISS_CHAR THEN
3657 	    p_usec_rec.not_multiple_section_flag :='N';
3658 	 END IF;
3659 
3660 	 IF p_usec_rec.default_enroll_flag IS NULL THEN
3661 	    p_usec_rec.default_enroll_flag := c_usec_rec.default_enroll_flag;
3662 	 ELSIF p_usec_rec.default_enroll_flag = FND_API.G_MISS_CHAR THEN
3663 	    p_usec_rec.default_enroll_flag :='N';
3664 	 END IF;
3665 
3666       END IF;
3667 
3668     END Assign_default;
3669 
3670 
3671     BEGIN
3672 
3673       validate_uoo_parameters ( p_usec_rec );
3674 
3675       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3676         fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_validate_uoo_parameters',
3677 	'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3678 	||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3679 	p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3680       END IF;
3681 
3682       IF ( p_usec_rec.status = 'S' ) THEN
3683         validate_uoo_derivations ( p_usec_rec );
3684 
3685 
3686 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3687 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_validate_uoo_derivations',
3688 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3689 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3690 	  p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3691 	END IF;
3692 
3693       END IF;
3694 
3695       --Find out whether it is insert/update of record
3696       l_insert_update:='I';
3697       IF p_usec_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
3698          l_insert_update:= check_insert_update(p_usec_rec);
3699 
3700           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3701 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_check_insert_update',
3702 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3703 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3704 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3705 	  END IF;
3706 
3707       END IF;
3708 
3709       IF p_usec_rec.status = 'S' AND p_calling_context ='S' THEN
3710         IF igs_ps_validate_lgcy_pkg.check_import_allowed( p_unit_cd => p_usec_rec.unit_cd,
3711 	                                                  p_version_number =>p_usec_rec.version_number,
3712 							  p_alternate_code =>p_usec_rec.teach_cal_alternate_code,
3713 							  p_location_cd => p_usec_rec.location_cd,
3714 							  p_unit_class => p_usec_rec.unit_class,
3715 							  p_uso_id =>NULL) = FALSE THEN
3716            fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
3717            fnd_msg_pub.add;
3718            p_usec_rec.status := 'A';
3719         END IF;
3720 
3721 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3722           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_check_import_allowed',
3723 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3724 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3725 	  p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3726         END IF;
3727 
3728       END IF;
3729 
3730       IF p_usec_rec.status = 'S' THEN
3731 	Assign_default(p_usec_rec,l_insert_update);
3732 
3733         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3734           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_Assign_default',
3735 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3736 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3737 	  p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3738         END IF;
3739 
3740       END IF;
3741 
3742       IF ( p_usec_rec.status = 'S' ) THEN
3743         validate_uoo_db_cons ( p_usec_rec,l_insert_update );
3744 
3745         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3746           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_validate_uoo_db_cons',
3747 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3748 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3749 	  p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3750         END IF;
3751 
3752       END IF;
3753 
3754 
3755 
3756       /* Business validations */
3757       IF ( p_usec_rec.status = 'S' ) THEN
3758         -- Check for validation by calling validate_uoo
3759         igs_ps_validate_lgcy_pkg.validate_uoo ( p_usec_rec, l_c_cal_type, l_n_seq_num,l_n_sup_uoo_id,l_insert_update,l_conc_flag ) ;
3760 
3761          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3762 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_Business validations',
3763 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3764 	   ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3765 	   p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
3766          END IF;
3767 
3768       END IF;
3769 
3770       IF ( p_usec_rec.status = 'S' ) THEN
3771 
3772         --update the superior unit section if the current unit section is a subordinate.Also set the value of relation_type colunn
3773 
3774 	IF l_insert_update = 'I' THEN
3775 	  IF l_n_sup_uoo_id IS NOT NULL THEN
3776 	    OPEN c_usec_check(l_n_sup_uoo_id);
3777 	    FETCH c_usec_check INTO l_c_var;
3778 	    IF c_usec_check%NOTFOUND THEN
3779 	      UPDATE igs_ps_unit_ofr_opt_all SET relation_type = 'SUPERIOR'
3780 	      WHERE uoo_id = l_n_sup_uoo_id;
3781 	    END IF;
3782 	    CLOSE c_usec_check;
3783 	    l_c_relation_type := 'SUBORDINATE';
3784 	  ELSE
3785 	    l_c_relation_type := 'NONE';
3786 	  END IF;
3787         ELSE
3788 	   DECLARE
3789                CURSOR cur_usec(cp_unit_cd IN VARCHAR2,
3790 	                       cp_version_number IN NUMBER,
3791 			       cp_cal_type  IN VARCHAR2,
3792 			       cp_seq_num  IN NUMBER,
3793 			       cp_location_cd IN VARCHAR2,
3794 			       cp_unit_class IN VARCHAR2
3795 			       ) IS
3796 	       SELECT relation_type,sup_uoo_id
3797 	       FROM   igs_ps_unit_ofr_opt_all
3798  	       WHERE  unit_cd = cp_unit_cd
3799 	       AND    version_number =  cp_version_number
3800 	       AND    ci_sequence_number =cp_seq_num
3801 	       AND    unit_class = cp_unit_class
3802 	       AND    location_cd = cp_location_cd
3803 	       AND    cal_type = cp_cal_type ;
3804                l_cur_usec  cur_usec%ROWTYPE;
3805 
3806                CURSOR c_count_sup(cp_uoo_id NUMBER)  IS
3807 	       SELECT COUNT(*)
3808 	       FROM igs_ps_unit_ofr_opt_all
3809 	       WHERE sup_uoo_id= cp_uoo_id;
3810                l_c_count NUMBER;
3811             BEGIN
3812 
3813 	      OPEN cur_usec(p_usec_rec.unit_cd,p_usec_rec.version_number,l_c_cal_type,l_n_seq_num,
3814 	                    p_usec_rec.location_cd ,p_usec_rec.unit_class );
3815 	      FETCH cur_usec INTO l_cur_usec;
3816 	      CLOSE cur_usec;
3817 
3818 	      IF l_n_sup_uoo_id IS NOT NULL THEN
3819 	        OPEN c_usec_check(l_n_sup_uoo_id);
3820 	        FETCH c_usec_check INTO l_c_var;
3821 	        IF c_usec_check%NOTFOUND THEN
3822 	          UPDATE igs_ps_unit_ofr_opt_all SET relation_type = 'SUPERIOR'
3823 	          WHERE uoo_id = l_n_sup_uoo_id;
3824 	        END IF;
3825 	        CLOSE c_usec_check;
3826 	        l_c_relation_type := 'SUBORDINATE';
3827 
3828                 --If existing usec is having one superior section and this time it is going for update of another
3829 		-- value, then should set the earlier section's relation type as 'NONE' if this was the only subordinate
3830                 IF l_cur_usec.sup_uoo_id IS NOT NULL AND l_cur_usec.sup_uoo_id <> l_n_sup_uoo_id THEN
3831                     OPEN c_count_sup(l_cur_usec.sup_uoo_id);
3832 		    FETCH c_count_sup INTO l_c_count;
3833                     IF c_count_sup%FOUND THEN
3834 		      IF l_c_count < 2 THEN
3835 			UPDATE igs_ps_unit_ofr_opt_all SET relation_type = 'NONE'
3836 			WHERE uoo_id = l_cur_usec.sup_uoo_id;
3837 		      END IF;
3838 		    END IF;
3839 		    CLOSE c_count_sup;
3840                 END IF;
3841 	      ELSE
3842 	        --Keep the existing values if no values are passed
3843 	        l_c_relation_type :=l_cur_usec.relation_type;
3844 	        l_n_sup_uoo_id := l_cur_usec.sup_uoo_id;
3845   	      END IF;
3846 	    END;
3847 	END IF;
3848 
3849 	--should not perform while update...
3850         --Set the value of the call_number if the profile option is AUTO
3851 
3852 	IF l_insert_update = 'I' THEN
3853           IF FND_PROFILE.VALUE('IGS_PS_CALL_NUMBER') = 'AUTO' THEN
3854             p_usec_rec.call_number := igs_ps_unit_ofr_opt_pkg.get_call_number( l_c_cal_type, l_n_seq_num);
3855           END IF;
3856 
3857           INSERT INTO igs_ps_unit_ofr_opt_all
3858           (unit_cd,
3859            version_number,
3860            cal_type,
3861            ci_sequence_number,
3862            location_cd,
3863            unit_class,
3864            uoo_id,
3865            ivrs_available_ind,
3866            call_number,
3867            unit_section_status,
3868            unit_section_start_date,
3869            unit_section_end_date,
3870            offered_ind,
3871            state_financial_aid,
3872            grading_schema_prcdnce_ind,
3873            federal_financial_aid,
3874            unit_quota,
3875            unit_quota_reserved_places,
3876            institutional_financial_aid,
3877            grading_schema_cd,
3878            gs_version_number,
3879            unit_contact,
3880            created_by,
3881            creation_date,
3882            last_updated_by,
3883            last_update_date,
3884            last_update_login,
3885            ss_enrol_ind,
3886            owner_org_unit_cd,
3887            attendance_required_ind,
3888            reserved_seating_allowed,
3889            special_permission_ind,
3890            ss_display_ind,
3891            rev_account_cd,
3892            anon_unit_grading_ind,
3893            anon_assess_grading_ind,
3894            non_std_usec_ind,
3895            auditable_ind,
3896            audit_permission_ind,
3897            not_multiple_section_flag,
3898            sup_uoo_id,
3899            relation_type,
3900            default_enroll_flag,
3901 	   abort_flag
3902           )
3903         VALUES
3904           (p_usec_rec.unit_cd,
3905            p_usec_rec.version_number,
3906            l_c_cal_type,
3907            l_n_seq_num,
3908            p_usec_rec.location_cd,
3909            p_usec_rec.unit_class,
3910            igs_ps_unit_ofr_opt_uoo_id_s.NEXTVAL,
3911            p_usec_rec.ivrs_available_ind,
3912            p_usec_rec.call_number,
3913            p_usec_rec.unit_section_status,
3914            p_usec_rec.unit_section_start_date,
3915            p_usec_rec.unit_section_end_date,
3916            p_usec_rec.offered_ind,
3917            p_usec_rec.state_financial_aid,
3918            p_usec_rec.grading_schema_prcdnce_ind,
3919            p_usec_rec.federal_financial_aid,
3920            p_usec_rec.unit_quota,
3921            p_usec_rec.unit_quota_reserved_places,
3922            p_usec_rec.institutional_financial_aid,
3923            p_usec_rec.grading_schema_cd,
3924            p_usec_rec.gs_version_number,
3925            l_n_unit_contact_id,
3926            g_n_user_id,
3927            SYSDATE,
3928            g_n_user_id,
3929            SYSDATE,
3930            g_n_login_id,
3931            p_usec_rec.ss_enrol_ind,
3932            NVL(p_usec_rec.owner_org_unit_cd,l_c_org_unit_cd),
3933            p_usec_rec.attendance_required_ind,
3934            p_usec_rec.reserved_seating_allowed,
3935            p_usec_rec.special_permission_ind,
3936            p_usec_rec.ss_display_ind,
3937            p_usec_rec.rev_account_cd,
3938            p_usec_rec.anon_unit_grading_ind,
3939            p_usec_rec.anon_assess_grading_ind,
3940            p_usec_rec.non_std_usec_ind,
3941            p_usec_rec.auditable_ind,
3942            p_usec_rec.audit_permission_ind,
3943            p_usec_rec.not_multiple_section_flag,
3944            l_n_sup_uoo_id,
3945            l_c_relation_type,
3946            p_usec_rec.default_enroll_flag,
3947 	   'N'
3948         );
3949 
3950           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3951              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.record_inserted',
3952 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3953 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3954 	    p_usec_rec.unit_class);
3955           END IF;
3956 
3957 	  --If calling context is scheduling then update the interface table import done flag
3958 	  IF   p_calling_context = 'S' THEN
3959 	    OPEN cur_int_pat(p_usec_rec.unit_cd,p_usec_rec.version_number,l_c_cal_type,l_n_seq_num);
3960 	    FETCH cur_int_pat INTO l_cur_int_pat;
3961 	    IF cur_int_pat%FOUND THEN
3962  	      UPDATE igs_ps_sch_pat_int set import_done_flag='Y' WHERE int_pat_id = l_cur_int_pat.int_pat_id;
3963 	    END IF;
3964 	    CLOSE cur_int_pat;
3965 
3966             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3967                fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.interface_table_updated',
3968 	      'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
3969 	      ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
3970 	      p_usec_rec.unit_class||'  '||'int_pat_id:'||l_cur_int_pat.int_pat_id);
3971             END IF;
3972 
3973 	  END IF;
3974 
3975 	ELSE --update
3976 	  UPDATE igs_ps_unit_ofr_opt_all SET
3977           ivrs_available_ind =  p_usec_rec.ivrs_available_ind,
3978           call_number=p_usec_rec.call_number,
3979           unit_section_status=p_usec_rec.unit_section_status,
3980           unit_section_start_date=p_usec_rec.unit_section_start_date,
3981           unit_section_end_date=p_usec_rec.unit_section_end_date,
3982           offered_ind=p_usec_rec.offered_ind,
3983           state_financial_aid=p_usec_rec.state_financial_aid,
3984           grading_schema_prcdnce_ind=p_usec_rec.grading_schema_prcdnce_ind,
3985           federal_financial_aid=p_usec_rec.federal_financial_aid,
3986           unit_quota=p_usec_rec.unit_quota,
3987           unit_quota_reserved_places=p_usec_rec.unit_quota_reserved_places,
3988           institutional_financial_aid=p_usec_rec.institutional_financial_aid,
3989           grading_schema_cd=p_usec_rec.grading_schema_cd,
3990           gs_version_number=p_usec_rec.gs_version_number,
3991           unit_contact= l_n_unit_contact_id,
3992           ss_enrol_ind=p_usec_rec.ss_enrol_ind,
3993           owner_org_unit_cd=p_usec_rec.owner_org_unit_cd,
3994           attendance_required_ind=p_usec_rec.attendance_required_ind,
3995           reserved_seating_allowed=p_usec_rec.reserved_seating_allowed,
3996           special_permission_ind=p_usec_rec.special_permission_ind,
3997           ss_display_ind=p_usec_rec.ss_display_ind,
3998           rev_account_cd=p_usec_rec.rev_account_cd,
3999           anon_unit_grading_ind=p_usec_rec.anon_unit_grading_ind,
4000           anon_assess_grading_ind=p_usec_rec.anon_assess_grading_ind,
4001           non_std_usec_ind=p_usec_rec.non_std_usec_ind,
4002           auditable_ind=p_usec_rec.auditable_ind,
4003           audit_permission_ind=p_usec_rec.audit_permission_ind,
4004           not_multiple_section_flag=p_usec_rec.not_multiple_section_flag,
4005           sup_uoo_id = l_n_sup_uoo_id,
4006           relation_type=l_c_relation_type,
4007           default_enroll_flag=p_usec_rec.default_enroll_flag,
4008           last_updated_by = g_n_user_id,
4009           last_update_date= SYSDATE ,
4010           last_update_login= g_n_login_id
4011 	  WHERE unit_cd = p_usec_rec.unit_cd
4012           AND version_number =  p_usec_rec.version_number
4013           AND ci_sequence_number =l_n_seq_num
4014           AND unit_class = p_usec_rec.unit_class
4015           AND location_cd = p_usec_rec.location_cd
4016           AND cal_type = l_c_cal_type ;
4017 
4018 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4019              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.record_updated',
4020 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4021 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4022 	    p_usec_rec.unit_class);
4023           END IF;
4024 
4025 	  --If calling context is scheduling then update the interface table import done flag
4026 	  IF   p_calling_context = 'S' THEN
4027 	    OPEN cur_int_usec(p_usec_rec.unit_cd,p_usec_rec.version_number,l_c_cal_type,l_n_seq_num,p_usec_rec.location_cd, p_usec_rec.unit_class);
4028 	    FETCH cur_int_usec INTO l_cur_int_usec;
4029 	    IF cur_int_usec%FOUND THEN
4030 		UPDATE igs_ps_sch_usec_int_all set import_done_flag='Y' WHERE int_usec_id = l_cur_int_usec.int_usec_id;
4031 		UPDATE igs_ps_sch_pat_int set import_done_flag='Y' WHERE int_pat_id = l_cur_int_usec.int_pat_id;
4032 	    END IF;
4033 
4034 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4035               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.interface_table_updated',
4036 	      'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4037 	      ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4038 	      p_usec_rec.unit_class||'  '||'int_pat_id:'||l_cur_int_pat.int_pat_id);
4039             END IF;
4040 
4041 	    CLOSE cur_int_usec;
4042 	  END IF;
4043 
4044 	END IF; --insert /update
4045       END IF;
4046 
4047 
4048     END create_uoo;
4049 
4050     -- This procedure will derive values required for Unit Section Credit Points.
4051     PROCEDURE get_uoo_id ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type) AS
4052     l_c_message  VARCHAR2(30);
4053     BEGIN
4054       -- Derive uoo_id
4055       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_rec.unit_cd,
4056                                             p_ver_num    => p_usec_rec.version_number,
4057                                             p_cal_type   => l_c_cal_type,
4058                                             p_seq_num    => l_n_seq_num,
4059                                             p_loc_cd     => p_usec_rec.location_cd,
4060                                             p_unit_class => p_usec_rec.unit_class,
4061                                             p_uoo_id     => l_n_uoo_id,
4062                                             p_message    => l_c_message );
4063       IF l_c_message IS NOT NULL THEN
4064         fnd_message.set_name ( 'IGS', l_c_message );
4065         fnd_msg_pub.add;
4066         p_usec_rec.status := 'E';
4067       END IF;
4068 
4069 
4070     END get_uoo_id;
4071 
4072     -- Procedure to validate Database constraints for Unit Section Credit Points Records.
4073     PROCEDURE validate_cp_db_cons ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,p_insert_update VARCHAR2 ) AS
4074     --sarakshi  15-May-2006  Bug#3064563, modified the format mask(clock_hours,continuing_education_units,work_load_cp_lecture,work_load_cp_lab,contact_hrs_lab) as specified in the bug.
4075     BEGIN
4076 
4077       IF p_insert_update = 'I' THEN
4078       /* Check for Unique Key Constraints */
4079 	IF igs_ps_usec_cps_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4080 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_CPS', 'LEGACY_TOKENS', FALSE);
4081 	  p_usec_rec.status := 'W';
4082 	  RETURN;
4083 	END IF;
4084       END IF;
4085 
4086       /* Check for Foreign Key Constraints */
4087       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4088         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4089         p_usec_rec.status := 'E';
4090       END IF;
4091 
4092       IF p_usec_rec.minimum_credit_points IS NOT NULL THEN
4093         BEGIN
4094           igs_ps_usec_cps_pkg.check_constraints('MINIMUM_CREDIT_POINTS',p_usec_rec.minimum_credit_points);
4095         EXCEPTION
4096           WHEN OTHERS THEN
4097             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','MINIMUM_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4098             p_usec_rec.status :='E';
4099         END;
4100       END IF;
4101 
4102       IF p_usec_rec.maximum_credit_points IS NOT NULL THEN
4103         BEGIN
4104           igs_ps_usec_cps_pkg.check_constraints('MAXIMUM_CREDIT_POINTS',p_usec_rec.maximum_credit_points);
4105         EXCEPTION
4106           WHEN OTHERS THEN
4107             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','MAXIMUM_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4108             p_usec_rec.status :='E';
4109         END;
4110       END IF;
4111 
4112       IF p_usec_rec.variable_increment IS NOT NULL THEN
4113         BEGIN
4114           igs_ps_usec_cps_pkg.check_constraints('VARIABLE_INCREMENT',p_usec_rec.variable_increment);
4115         EXCEPTION
4116           WHEN OTHERS THEN
4117             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','VARIABLE_INCREMENT','LEGACY_TOKENS',TRUE);
4118             p_usec_rec.status :='E';
4119         END;
4120       END IF;
4121 
4122 
4123       IF p_usec_rec.lecture_credit_points IS NOT NULL THEN
4124         BEGIN
4125           igs_ps_usec_cps_pkg.check_constraints('LECTURE_CREDIT_POINTS',p_usec_rec.lecture_credit_points);
4126         EXCEPTION
4127           WHEN OTHERS THEN
4128             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','LECTURE_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4129             p_usec_rec.status :='E';
4130         END;
4131       END IF;
4132 
4133       IF p_usec_rec.lab_credit_points IS NOT NULL THEN
4134         BEGIN
4135           igs_ps_usec_cps_pkg.check_constraints('LAB_CREDIT_POINTS',p_usec_rec.lab_credit_points);
4136         EXCEPTION
4137           WHEN OTHERS THEN
4138             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','LAB_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4139             p_usec_rec.status :='E';
4140         END;
4141       END IF;
4142 
4143       IF p_usec_rec.other_credit_points IS NOT NULL THEN
4144         BEGIN
4145           igs_ps_usec_cps_pkg.check_constraints('OTHER_CREDIT_POINTS',p_usec_rec.other_credit_points);
4146         EXCEPTION
4147           WHEN OTHERS THEN
4148             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','OTHER_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4149             p_usec_rec.status :='E';
4150         END;
4151       END IF;
4152 
4153       IF p_usec_rec.clock_hours IS NOT NULL THEN
4154         BEGIN
4155           igs_ps_usec_cps_pkg.check_constraints('CLOCK_HOURS',p_usec_rec.clock_hours);
4156         EXCEPTION
4157           WHEN OTHERS THEN
4158             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','CLOCK_HOURS','LEGACY_TOKENS',TRUE);
4159             p_usec_rec.status :='E';
4160         END;
4161       END IF;
4162 
4163       IF p_usec_rec.work_load_cp_lecture IS NOT NULL THEN
4164         BEGIN
4165           igs_ps_usec_cps_pkg.check_constraints('WORK_LOAD_CP_LECTURE',p_usec_rec.work_load_cp_lecture);
4166         EXCEPTION
4167           WHEN OTHERS THEN
4168             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_CP_LECTURE','LEGACY_TOKENS',TRUE);
4169             p_usec_rec.status :='E';
4170         END;
4171       END IF;
4172 
4173 
4174       IF p_usec_rec.work_load_cp_lab IS NOT NULL THEN
4175         BEGIN
4176           igs_ps_usec_cps_pkg.check_constraints('WORK_LOAD_CP_LAB',p_usec_rec.work_load_cp_lab);
4177         EXCEPTION
4178           WHEN OTHERS THEN
4179             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_CP_LAB','LEGACY_TOKENS',TRUE);
4180             p_usec_rec.status :='E';
4181         END;
4182       END IF;
4183 
4184       --Validate achievable credit points
4185       IF p_usec_rec.achievable_credit_points IS NOT NULL THEN
4186         BEGIN
4187           igs_ps_usec_cps_pkg.check_constraints('ACHIEVABLE_CREDIT_POINTS',p_usec_rec.achievable_credit_points);
4188         EXCEPTION
4189           WHEN OTHERS THEN
4190             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','ACHIEVABLE_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4191             p_usec_rec.status :='E';
4192         END;
4193       END IF;
4194 
4195       --Validate enrolled credit points
4196       BEGIN
4197         igs_ps_usec_cps_pkg.check_constraints('ENROLLED_CREDIT_POINTS',p_usec_rec.enrolled_credit_points);
4198       EXCEPTION
4199         WHEN OTHERS THEN
4200           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','ENROLLED_CREDIT_POINTS','LEGACY_TOKENS',TRUE);
4201           p_usec_rec.status :='E';
4202       END;
4203 
4204       --Validate billing credit points
4205       IF p_usec_rec.billing_credit_points IS NOT NULL THEN
4206         BEGIN
4207           igs_ps_usec_cps_pkg.check_constraints( 'BILLING_CREDIT_POINTS', p_usec_rec.billing_credit_points);
4208         EXCEPTION
4209           WHEN OTHERS THEN
4210             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999', 'BILLING_CREDIT_POINTS', 'LEGACY_TOKENS', TRUE);
4211             p_usec_rec.status := 'E';
4212         END;
4213       END IF;
4214 
4215       IF p_usec_rec.billing_hrs IS NOT NULL THEN
4216         BEGIN
4217           igs_ps_usec_cps_pkg.check_constraints( 'BILLING_HRS', p_usec_rec.billing_hrs);
4218         EXCEPTION
4219           WHEN OTHERS THEN
4220             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999', 'BILLING_HRS', 'LEGACY_TOKENS', TRUE);
4221             p_usec_rec.status := 'E';
4222         END;
4223       END IF;
4224       IF p_usec_rec.continuing_education_units IS NOT NULL THEN
4225         BEGIN
4226           igs_ps_usec_cps_pkg.check_constraints('CONTINUING_EDUCATION_UNITS',p_usec_rec.continuing_education_units);
4227         EXCEPTION
4228           WHEN OTHERS THEN
4229             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D999','CONTINUING_EDUCATION_UNITS','LEGACY_TOKENS',TRUE);
4230             p_usec_rec.status :='E';
4231         END;
4232       END IF;
4233 
4234       IF p_usec_rec.work_load_other IS NOT NULL THEN
4235         BEGIN
4236           igs_ps_usec_cps_pkg.check_constraints('WORK_LOAD_OTHER',p_usec_rec.work_load_other);
4237         EXCEPTION
4238           WHEN OTHERS THEN
4239             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','WORK_LOAD_OTHER','LEGACY_TOKENS',TRUE);
4240             p_usec_rec.status :='E';
4241         END;
4242       END IF;
4243 
4244       IF p_usec_rec.contact_hrs_lecture IS NOT NULL THEN
4245         BEGIN
4246           igs_ps_usec_cps_pkg.check_constraints('CONTACT_HRS_LECTURE',p_usec_rec.contact_hrs_lecture);
4247         EXCEPTION
4248           WHEN OTHERS THEN
4249             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_LECTURE','LEGACY_TOKENS',TRUE);
4250             p_usec_rec.status :='E';
4251         END;
4252       END IF;
4253 
4254       IF p_usec_rec.contact_hrs_lab IS NOT NULL THEN
4255         BEGIN
4256           igs_ps_usec_cps_pkg.check_constraints('CONTACT_HRS_LAB',p_usec_rec.contact_hrs_lab);
4257         EXCEPTION
4258           WHEN OTHERS THEN
4259             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_LAB','LEGACY_TOKENS',TRUE);
4260             p_usec_rec.status :='E';
4261         END;
4262       END IF;
4263 
4264       IF p_usec_rec.contact_hrs_other IS NOT NULL THEN
4265         BEGIN
4266           igs_ps_usec_cps_pkg.check_constraints('CONTACT_HRS_OTHER',p_usec_rec.contact_hrs_other);
4267         EXCEPTION
4268           WHEN OTHERS THEN
4269             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','CONTACT_HRS_OTHER','LEGACY_TOKENS',TRUE);
4270             p_usec_rec.status :='E';
4271         END;
4272       END IF;
4273 
4274       IF p_usec_rec.non_schd_required_hrs IS NOT NULL THEN
4275         BEGIN
4276           igs_ps_usec_cps_pkg.check_constraints('NON_SCHD_REQUIRED_HRS',p_usec_rec.non_schd_required_hrs);
4277         EXCEPTION
4278           WHEN OTHERS THEN
4279             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','NON_SCHD_REQUIRED_HRS','LEGACY_TOKENS',TRUE);
4280             p_usec_rec.status :='E';
4281         END;
4282       END IF;
4283 
4284       IF p_usec_rec.exclude_from_max_cp_limit IS NOT NULL THEN
4285         BEGIN
4286           igs_ps_usec_ref_pkg.check_constraints ( 'EXCLUDE_FROM_MAX_CP_LIMIT', p_usec_rec.exclude_from_max_cp_limit);
4287         EXCEPTION
4288           WHEN OTHERS THEN
4289             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'EXCLUDE_FROM_MAX_CP_LIMIT', 'LEGACY_TOKENS', TRUE);
4290             p_usec_rec.status := 'E';
4291         END;
4292       END IF;
4293 
4294       IF p_usec_rec.claimable_hours IS NOT NULL THEN
4295         BEGIN
4296           igs_ps_usec_cps_pkg.check_constraints('CLAIMABLE_HOURS',p_usec_rec.claimable_hours);
4297         EXCEPTION
4298           WHEN OTHERS THEN
4299             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','CLAIMABLE_HOURS','LEGACY_TOKENS',TRUE);
4300             p_usec_rec.status :='E';
4301         END;
4302       END IF;
4303 
4304     END validate_cp_db_cons;
4305 
4306     -- Main private procedure to create records of Unit Section Credit Points.
4307 
4308     PROCEDURE create_cp ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type )
4309     AS
4310     FUNCTION check_insert_update (p_usec_rec IN igs_ps_generic_pub.usec_rec_type ) RETURN VARCHAR2 IS
4311 
4312     CURSOR c_usec_cp(cp_n_uoo_id NUMBER) IS
4313     SELECT *
4314     FROM igs_ps_usec_cps
4315     WHERE uoo_id = cp_n_uoo_id;
4316 
4317     c_usec_cp_rec c_usec_cp%ROWTYPE;
4318     BEGIN
4319       OPEN c_usec_cp(l_n_uoo_id);
4320       FETCH c_usec_cp INTO c_usec_cp_rec;
4321       IF c_usec_cp%NOTFOUND THEN
4322 	 CLOSE c_usec_cp;
4323 	 RETURN 'I';
4324       ELSE
4325 	 CLOSE c_usec_cp;
4326 	 RETURN 'U';
4327       END IF;
4328 
4329     END check_insert_update;
4330     PROCEDURE Assign_default(  p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,
4331                                p_insert_update VARCHAR2 ) AS
4332     CURSOR c_usec_cp(p_n_uoo_id NUMBER) IS
4333     SELECT *
4334     FROM igs_ps_usec_cps
4335     WHERE uoo_id = p_n_uoo_id;
4336 
4337     c_usec_cp_rec c_usec_cp%ROWTYPE;
4338     BEGIN
4339       IF p_insert_update = 'U' THEN
4340 
4341 	OPEN c_usec_cp(l_n_uoo_id);
4342 	FETCH c_usec_cp INTO c_usec_cp_rec;
4343 	CLOSE c_usec_cp;
4344 
4345         IF p_usec_rec.minimum_credit_points  IS NULL  THEN
4346 	  p_usec_rec.minimum_credit_points  := c_usec_cp_rec.minimum_credit_points ;
4347         ELSIF  p_usec_rec.minimum_credit_points  = FND_API.G_MISS_NUM THEN
4348 	  p_usec_rec.minimum_credit_points  :=NULL;
4349         END IF;
4350 	IF p_usec_rec.maximum_credit_points  IS NULL  THEN
4351 	  p_usec_rec.maximum_credit_points  := c_usec_cp_rec.maximum_credit_points ;
4352         ELSIF  p_usec_rec.maximum_credit_points  = FND_API.G_MISS_NUM THEN
4353 	  p_usec_rec.maximum_credit_points  :=NULL;
4354         END IF;
4355 	IF p_usec_rec.variable_increment  IS NULL  THEN
4356 	  p_usec_rec.variable_increment  := c_usec_cp_rec.variable_increment ;
4357         ELSIF  p_usec_rec.variable_increment  = FND_API.G_MISS_NUM THEN
4358 	  p_usec_rec.variable_increment  :=NULL;
4359         END IF;
4360 	IF p_usec_rec.lecture_credit_points  IS NULL  THEN
4361 	  p_usec_rec.lecture_credit_points  := c_usec_cp_rec.lecture_credit_points ;
4362         ELSIF  p_usec_rec.lecture_credit_points  = FND_API.G_MISS_NUM THEN
4363 	  p_usec_rec.lecture_credit_points  :=NULL;
4364         END IF;
4365 	IF p_usec_rec.lab_credit_points  IS NULL  THEN
4366 	  p_usec_rec.lab_credit_points  := c_usec_cp_rec.lab_credit_points ;
4367         ELSIF  p_usec_rec.lab_credit_points  = FND_API.G_MISS_NUM THEN
4368 	  p_usec_rec.lab_credit_points  :=NULL;
4369         END IF;
4370 	IF p_usec_rec.other_credit_points  IS NULL  THEN
4371 	  p_usec_rec.other_credit_points  := c_usec_cp_rec.other_credit_points ;
4372         ELSIF  p_usec_rec.other_credit_points  = FND_API.G_MISS_NUM THEN
4373 	  p_usec_rec.other_credit_points  :=NULL;
4374         END IF;
4375 	IF p_usec_rec.clock_hours  IS NULL  THEN
4376 	  p_usec_rec.clock_hours  := c_usec_cp_rec.clock_hours ;
4377         ELSIF  p_usec_rec.clock_hours  = FND_API.G_MISS_NUM THEN
4378 	  p_usec_rec.clock_hours  :=NULL;
4379         END IF;
4380 	IF p_usec_rec.billing_credit_points  IS NULL  THEN
4381 	  p_usec_rec.billing_credit_points  := c_usec_cp_rec.billing_credit_points ;
4382         ELSIF  p_usec_rec.billing_credit_points  = FND_API.G_MISS_NUM THEN
4383 	  p_usec_rec.billing_credit_points  :=NULL;
4384         END IF;
4385 	IF p_usec_rec.work_load_cp_lecture  IS NULL  THEN
4386 	  p_usec_rec.work_load_cp_lecture  := c_usec_cp_rec.work_load_cp_lecture ;
4387         ELSIF  p_usec_rec.work_load_cp_lecture  = FND_API.G_MISS_NUM THEN
4388 	  p_usec_rec.work_load_cp_lecture  :=NULL;
4389         END IF;
4390 	IF p_usec_rec.work_load_cp_lab  IS NULL  THEN
4391 	  p_usec_rec.work_load_cp_lab  := c_usec_cp_rec.work_load_cp_lab ;
4392         ELSIF  p_usec_rec.work_load_cp_lab  = FND_API.G_MISS_NUM THEN
4393 	  p_usec_rec.work_load_cp_lab  :=NULL;
4394         END IF;
4395 	IF p_usec_rec.continuing_education_units  IS NULL  THEN
4396 	  p_usec_rec.continuing_education_units  := c_usec_cp_rec.continuing_education_units ;
4397         ELSIF  p_usec_rec.continuing_education_units  = FND_API.G_MISS_NUM THEN
4398 	  p_usec_rec.continuing_education_units  :=NULL;
4399         END IF;
4400 	IF p_usec_rec.achievable_credit_points  IS NULL  THEN
4401 	  p_usec_rec.achievable_credit_points  := c_usec_cp_rec.achievable_credit_points ;
4402         ELSIF  p_usec_rec.achievable_credit_points  = FND_API.G_MISS_NUM THEN
4403 	  p_usec_rec.achievable_credit_points  :=NULL;
4404         END IF;
4405 	IF p_usec_rec.enrolled_credit_points  IS NULL  THEN
4406 	  p_usec_rec.enrolled_credit_points  := c_usec_cp_rec.enrolled_credit_points ;
4407         ELSIF  p_usec_rec.enrolled_credit_points  = FND_API.G_MISS_NUM THEN
4408 	  p_usec_rec.enrolled_credit_points  :=NULL;
4409         END IF;
4410 	IF p_usec_rec.work_load_other  IS NULL  THEN
4411 	  p_usec_rec.work_load_other  := c_usec_cp_rec.work_load_other ;
4412         ELSIF  p_usec_rec.work_load_other  = FND_API.G_MISS_NUM THEN
4413 	  p_usec_rec.work_load_other  :=NULL;
4414         END IF;
4415 	IF p_usec_rec.contact_hrs_lecture  IS NULL  THEN
4416 	  p_usec_rec.contact_hrs_lecture  := c_usec_cp_rec.contact_hrs_lecture ;
4417         ELSIF  p_usec_rec.contact_hrs_lecture  = FND_API.G_MISS_NUM THEN
4418 	  p_usec_rec.contact_hrs_lecture  :=NULL;
4419         END IF;
4420 	IF p_usec_rec.contact_hrs_lab  IS NULL  THEN
4421 	  p_usec_rec.contact_hrs_lab  := c_usec_cp_rec.contact_hrs_lab ;
4422         ELSIF  p_usec_rec.contact_hrs_lab  = FND_API.G_MISS_NUM THEN
4423 	  p_usec_rec.contact_hrs_lab  :=NULL;
4424         END IF;
4425 	IF p_usec_rec.contact_hrs_other  IS NULL  THEN
4426 	  p_usec_rec.contact_hrs_other  := c_usec_cp_rec.contact_hrs_other ;
4427         ELSIF  p_usec_rec.contact_hrs_other  = FND_API.G_MISS_NUM THEN
4428 	  p_usec_rec.contact_hrs_other  :=NULL;
4429         END IF;
4430 	IF p_usec_rec.billing_hrs  IS NULL  THEN
4431 	  p_usec_rec.billing_hrs  := c_usec_cp_rec.billing_hrs ;
4432         ELSIF  p_usec_rec.billing_hrs  = FND_API.G_MISS_NUM THEN
4433 	  p_usec_rec.billing_hrs  :=NULL;
4434         END IF;
4435 	IF p_usec_rec.non_schd_required_hrs  IS NULL  THEN
4436 	  p_usec_rec.non_schd_required_hrs  := c_usec_cp_rec.non_schd_required_hrs ;
4437         ELSIF  p_usec_rec.non_schd_required_hrs  = FND_API.G_MISS_NUM THEN
4438 	  p_usec_rec.non_schd_required_hrs  :=NULL;
4439         END IF;
4440 	IF p_usec_rec.exclude_from_max_cp_limit  IS NULL  THEN
4441 	  p_usec_rec.exclude_from_max_cp_limit  := c_usec_cp_rec.exclude_from_max_cp_limit ;
4442         ELSIF  p_usec_rec.exclude_from_max_cp_limit  = FND_API.G_MISS_CHAR THEN
4443 	  p_usec_rec.exclude_from_max_cp_limit  :=NULL;
4444         END IF;
4445 	IF p_usec_rec.claimable_hours  IS NULL  THEN
4446 	  p_usec_rec.claimable_hours  := c_usec_cp_rec.claimable_hours ;
4447         ELSIF  p_usec_rec.claimable_hours  = FND_API.G_MISS_NUM THEN
4448 	  p_usec_rec.claimable_hours  :=NULL;
4449         END IF;
4450       END IF;
4451 
4452     END Assign_default;
4453 
4454     BEGIN
4455       IF   p_usec_rec.minimum_credit_points IS NULL AND
4456 	   p_usec_rec.maximum_credit_points IS NULL AND
4457 	   p_usec_rec.variable_increment IS NULL AND
4458 	   p_usec_rec.lecture_credit_points IS NULL AND
4459 	   p_usec_rec.lab_credit_points IS NULL AND
4460 	   p_usec_rec.other_credit_points IS NULL AND
4461 	   p_usec_rec.clock_hours IS NULL AND
4462 	   p_usec_rec.billing_credit_points IS NULL AND
4463 	   p_usec_rec.work_load_cp_lecture IS NULL AND
4464 	   p_usec_rec.work_load_cp_lab IS NULL AND
4465 	   p_usec_rec.continuing_education_units IS NULL AND
4466 	   p_usec_rec.achievable_credit_points IS NULL AND
4467 	   p_usec_rec.enrolled_credit_points IS NULL AND
4468 	   p_usec_rec.work_load_other IS NULL AND
4469 	   p_usec_rec.contact_hrs_lecture IS NULL AND
4470 	   p_usec_rec.contact_hrs_lab IS NULL AND
4471 	   p_usec_rec.contact_hrs_other IS NULL AND
4472 	   p_usec_rec.billing_hrs IS NULL AND
4473 	   p_usec_rec.non_schd_required_hrs IS NULL AND
4474 	   p_usec_rec.exclude_from_max_cp_limit IS NULL AND
4475 	   p_usec_rec.claimable_hours  IS NULL THEN
4476 
4477 
4478         --No need to insert/update the empty record if all the attribute are null
4479 	NULL;
4480       ELSE
4481 
4482 	IF p_usec_rec.status = 'S' THEN
4483 	  get_uoo_id ( p_usec_rec);
4484 
4485 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4486 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_get_uoo_id',
4487 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4488 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4489 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4490 	  END IF;
4491 
4492 	END IF;
4493 
4494 	--Find out whether it is insert/update of record
4495 	 l_insert_update:='I';
4496 	 IF p_usec_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
4497 	   l_insert_update:= check_insert_update(p_usec_rec);
4498 
4499 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4500 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_check_insert_update',
4501 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4502 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4503 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4504 	   END IF;
4505 
4506 	 END IF;
4507 
4508 	IF p_usec_rec.status = 'S' THEN
4509 	  Assign_default(p_usec_rec,l_insert_update);
4510 
4511 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4512 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_Assign_default',
4513 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4514 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4515 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4516 	   END IF;
4517 
4518 	END IF;
4519 
4520 	IF ( p_usec_rec.status = 'S' ) THEN
4521 	  validate_cp_db_cons ( p_usec_rec,l_insert_update );
4522 
4523 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4524 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_validate_cp_db_cons',
4525 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4526 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4527 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4528 	   END IF;
4529 
4530 	END IF;
4531 
4532 	/* Business validations */
4533 	IF ( p_usec_rec.status = 'S' ) THEN
4534 	  -- Check for validation by calling validate_cps
4535 	  igs_ps_validate_lgcy_pkg.validate_cps ( p_usec_rec,l_n_uoo_id,l_insert_update ) ;
4536 
4537 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4538 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_Business_validation',
4539 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4540 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4541 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4542 	  END IF;
4543 
4544 	END IF;
4545 
4546 	IF ( p_usec_rec.status = 'S' ) THEN
4547 	  IF l_insert_update = 'I' THEN
4548 	    /* Insert Record */
4549 	    INSERT INTO igs_ps_usec_cps
4550 	    (unit_sec_credit_points_id,
4551 	    uoo_id,
4552 	    minimum_credit_points,
4553 	    maximum_credit_points,
4554 	    variable_increment,
4555 	    lecture_credit_points,
4556 	    lab_credit_points,
4557 	    other_credit_points,
4558 	    clock_hours,
4559 	    billing_credit_points,
4560 	    work_load_cp_lecture,
4561 	    work_load_cp_lab,
4562 	    continuing_education_units,
4563 	    achievable_credit_points,
4564 	    enrolled_credit_points,
4565 	    created_by,
4566 	    creation_date,
4567 	    last_updated_by,
4568 	    last_update_date,
4569 	    last_update_login,
4570 	    work_load_other,
4571 	    contact_hrs_lecture,
4572 	    contact_hrs_lab,
4573 	    contact_hrs_other,
4574 	    billing_hrs,
4575 	    non_schd_required_hrs,
4576 	    exclude_from_max_cp_limit,
4577 	    claimable_hours
4578 	    )
4579 	    VALUES
4580 	    (igs_ps_usec_cps_s.NEXTVAL,
4581 	     l_n_uoo_id,
4582 	     p_usec_rec.minimum_credit_points,
4583 	     p_usec_rec.maximum_credit_points,
4584 	     p_usec_rec.variable_increment,
4585 	     p_usec_rec.lecture_credit_points,
4586 	     p_usec_rec.lab_credit_points,
4587 	     p_usec_rec.other_credit_points,
4588 	     p_usec_rec.clock_hours,
4589 	     p_usec_rec.billing_credit_points,
4590 	     p_usec_rec.work_load_cp_lecture,
4591 	     p_usec_rec.work_load_cp_lab,
4592 	     p_usec_rec.continuing_education_units,
4593 	     p_usec_rec.achievable_credit_points,
4594 	     p_usec_rec.enrolled_credit_points,
4595 	     g_n_user_id,
4596 	     SYSDATE,
4597 	     g_n_user_id,
4598 	     SYSDATE,
4599 	     g_n_login_id,
4600 	     p_usec_rec.work_load_other,
4601 	     p_usec_rec.contact_hrs_lecture,
4602 	     p_usec_rec.contact_hrs_lab,
4603 	     p_usec_rec.contact_hrs_other,
4604 	     p_usec_rec.billing_hrs,
4605 	     p_usec_rec.non_schd_required_hrs,
4606 	     p_usec_rec.exclude_from_max_cp_limit,
4607 	     p_usec_rec.claimable_hours
4608 	   );
4609 
4610 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4611               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.record_inserted',
4612 	      'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4613 	      ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4614 	      p_usec_rec.unit_class);
4615             END IF;
4616 
4617 	  ELSE ---update
4618 	   UPDATE igs_ps_usec_cps SET
4619 	   minimum_credit_points =p_usec_rec.minimum_credit_points,
4620 	   maximum_credit_points =p_usec_rec.maximum_credit_points,
4621 	   variable_increment =p_usec_rec.variable_increment,
4622 	   lecture_credit_points =p_usec_rec.lecture_credit_points,
4623 	   lab_credit_points =p_usec_rec.lab_credit_points,
4624 	   other_credit_points =p_usec_rec.other_credit_points,
4625 	   clock_hours =p_usec_rec.clock_hours,
4626 	   billing_credit_points =p_usec_rec.billing_credit_points,
4627 	   work_load_cp_lecture =p_usec_rec.work_load_cp_lecture,
4628 	   work_load_cp_lab =p_usec_rec.work_load_cp_lab,
4629 	   continuing_education_units =p_usec_rec.continuing_education_units,
4630 	   achievable_credit_points =p_usec_rec.achievable_credit_points,
4631 	   enrolled_credit_points =p_usec_rec.enrolled_credit_points,
4632 	   last_updated_by =g_n_user_id,
4633 	   last_update_date =SYSDATE,
4634 	   last_update_login =g_n_login_id,
4635 	   work_load_other =p_usec_rec.work_load_other,
4636 	   contact_hrs_lecture = p_usec_rec.contact_hrs_lecture,
4637 	   contact_hrs_lab =p_usec_rec.contact_hrs_lab,
4638 	   contact_hrs_other =p_usec_rec.contact_hrs_other,
4639 	   billing_hrs =p_usec_rec.billing_hrs,
4640 	   non_schd_required_hrs =p_usec_rec.non_schd_required_hrs,
4641 	   exclude_from_max_cp_limit = p_usec_rec.exclude_from_max_cp_limit,
4642 	   claimable_hours =p_usec_rec.claimable_hours
4643 	   WHERE uoo_id = l_n_uoo_id;
4644 
4645 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4646              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.record_updated',
4647 	     'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4648 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4649 	     p_usec_rec.unit_class);
4650            END IF;
4651 
4652 	  END IF;
4653         END IF;
4654 
4655       END IF;
4656 
4657      END create_cp;
4658 
4659     -- Procedure to validate Database constraints for Unit Section Reference Records.
4660     PROCEDURE validate_ref_db_cons ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,p_insert_update VARCHAR2 ) AS
4661     BEGIN
4662       IF p_insert_update = 'I' THEN
4663       /* Check for Unique Key Constraints */
4664 	IF igs_ps_usec_ref_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4665 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_SEC_REF', 'LEGACY_TOKENS', FALSE);
4666 	  p_usec_rec.status := 'W';
4667 	  RETURN;
4668 	END IF;
4669       END IF;
4670 
4671       /* Check for Foreign Key Constraints */
4672       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4673         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4674         p_usec_rec.status := 'E';
4675       END IF;
4676 
4677 
4678 
4679      IF p_usec_rec.reference_subtitle_mod_flag IS NOT NULL THEN
4680         BEGIN
4681           igs_ps_usec_ref_pkg.check_constraints ( 'REFERENCE_SUBTITLE_MOD_FLAG', p_usec_rec.reference_subtitle_mod_flag);
4682         EXCEPTION
4683           WHEN OTHERS THEN
4684             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'REFERENCE_SUBTITLE_MOD_FLAG', 'LEGACY_TOKENS', TRUE);
4685             p_usec_rec.status := 'E';
4686         END;
4687      END IF;
4688 
4689      IF p_usec_rec.reference_class_sch_excl_flag IS NOT NULL THEN
4690         BEGIN
4691           igs_ps_usec_ref_pkg.check_constraints ( 'REFERENCE_CLASS_SCH_EXCL_FLAG', p_usec_rec.reference_class_sch_excl_flag);
4692         EXCEPTION
4693           WHEN OTHERS THEN
4694             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'REFERENCE_CLASS_SCH_EXCL_FLAG', 'LEGACY_TOKENS', TRUE);
4695             p_usec_rec.status := 'E';
4696         END;
4697      END IF;
4698 
4699      IF p_usec_rec.reference_rec_exclusion_flag IS NOT NULL THEN
4700         BEGIN
4701           igs_ps_usec_ref_pkg.check_constraints ( 'REFERENCE_REC_EXCLUSION_FLAG', p_usec_rec.reference_rec_exclusion_flag);
4702         EXCEPTION
4703           WHEN OTHERS THEN
4704             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'REFERENCE_REC_EXCLUSION_FLAG', 'LEGACY_TOKENS', TRUE);
4705             p_usec_rec.status := 'E';
4706         END;
4707      END IF;
4708 
4709     END validate_ref_db_cons;
4710 
4711     -- Main private procedure to create records of Unit Section Reference .
4712 
4713     PROCEDURE create_ref ( p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type )
4714     AS
4715 
4716     FUNCTION check_insert_update (p_usec_rec IN igs_ps_generic_pub.usec_rec_type ) RETURN VARCHAR2 IS
4717 
4718       CURSOR c_usec_ref(p_n_uoo_id NUMBER) IS
4719       SELECT 'X'
4720       FROM igs_ps_usec_ref
4721       WHERE uoo_id = p_n_uoo_id;
4722 
4723       c_usec_ref_rec c_usec_ref%ROWTYPE;
4724     BEGIN
4725 
4726       OPEN c_usec_ref(l_n_uoo_id);
4727       FETCH c_usec_ref INTO c_usec_ref_rec;
4728       IF c_usec_ref%NOTFOUND THEN
4729 	 CLOSE c_usec_ref;
4730 	 RETURN 'I';
4731       ELSE
4732 	 CLOSE c_usec_ref;
4733 	 RETURN 'U';
4734       END IF;
4735 
4736     END check_insert_update;
4737 
4738     PROCEDURE Assign_default(  p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,
4739                                p_insert_update VARCHAR2 ) AS
4740       CURSOR c_usec_ref(p_n_uoo_id NUMBER) IS
4741       SELECT *
4742       FROM igs_ps_usec_ref
4743       WHERE uoo_id = p_n_uoo_id;
4744 
4745       c_usec_ref_rec c_usec_ref%ROWTYPE;
4746     BEGIN
4747 
4748       IF p_insert_update = 'I' THEN
4749         IF p_usec_rec.reference_subtitle_mod_flag IS NULL THEN
4750 	  p_usec_rec.reference_subtitle_mod_flag := 'N';
4751         END IF;
4752 
4753         IF p_usec_rec.reference_class_sch_excl_flag IS NULL THEN
4754 	  p_usec_rec.reference_class_sch_excl_flag := 'N';
4755         END IF;
4756 
4757         IF p_usec_rec.reference_rec_exclusion_flag IS NULL THEN
4758 	  p_usec_rec.reference_rec_exclusion_flag := 'N';
4759         END IF;
4760       ELSE
4761 
4762 	OPEN c_usec_ref(l_n_uoo_id);
4763 	FETCH c_usec_ref INTO c_usec_ref_rec;
4764 	CLOSE c_usec_ref;
4765 
4766         IF p_usec_rec.reference_subtitle  IS NULL  THEN
4767 	  p_usec_rec.reference_subtitle  := c_usec_ref_rec.subtitle ;
4768         ELSIF  p_usec_rec.reference_subtitle  = FND_API.G_MISS_CHAR THEN
4769 	  p_usec_rec.reference_subtitle  :=NULL;
4770         END IF;
4771 	IF p_usec_rec.reference_short_title  IS NULL  THEN
4772 	  p_usec_rec.reference_short_title  := c_usec_ref_rec.short_title ;
4773         ELSIF  p_usec_rec.reference_short_title  = FND_API.G_MISS_CHAR THEN
4774 	  p_usec_rec.reference_short_title  :=NULL;
4775         END IF;
4776 	IF p_usec_rec.reference_subtitle_mod_flag  IS NULL  THEN
4777 	  p_usec_rec.reference_subtitle_mod_flag  := c_usec_ref_rec.subtitle_modifiable_flag ;
4778         ELSIF  p_usec_rec.reference_subtitle_mod_flag  = FND_API.G_MISS_CHAR THEN
4779 	  p_usec_rec.reference_subtitle_mod_flag  :='N';
4780         END IF;
4781 	IF p_usec_rec.reference_class_sch_excl_flag  IS NULL  THEN
4782 	  p_usec_rec.reference_class_sch_excl_flag  := c_usec_ref_rec.class_schedule_exclusion_flag ;
4783         ELSIF  p_usec_rec.reference_class_sch_excl_flag  = FND_API.G_MISS_CHAR THEN
4784 	  p_usec_rec.reference_class_sch_excl_flag  :='N';
4785         END IF;
4786 	IF p_usec_rec.reference_rec_exclusion_flag  IS NULL  THEN
4787 	  p_usec_rec.reference_rec_exclusion_flag  := c_usec_ref_rec.record_exclusion_flag   ;
4788         ELSIF  p_usec_rec.reference_rec_exclusion_flag  = FND_API.G_MISS_CHAR THEN
4789 	  p_usec_rec.reference_rec_exclusion_flag  :='N';
4790         END IF;
4791 	IF p_usec_rec.reference_attribute_category  IS NULL  THEN
4792 	  p_usec_rec.reference_attribute_category  := c_usec_ref_rec.attribute_category ;
4793         ELSIF  p_usec_rec.reference_attribute_category  = FND_API.G_MISS_CHAR THEN
4794 	  p_usec_rec.reference_attribute_category  :=NULL;
4795         END IF;
4796 	IF p_usec_rec.reference_attribute1  IS NULL  THEN
4797 	  p_usec_rec.reference_attribute1  := c_usec_ref_rec.attribute1 ;
4798         ELSIF  p_usec_rec.reference_attribute1  = FND_API.G_MISS_CHAR THEN
4799 	  p_usec_rec.reference_attribute1  :=NULL;
4800         END IF;
4801 	IF p_usec_rec.reference_attribute2  IS NULL  THEN
4802 	  p_usec_rec.reference_attribute2  := c_usec_ref_rec.attribute2 ;
4803         ELSIF  p_usec_rec.reference_attribute2  = FND_API.G_MISS_CHAR THEN
4804 	  p_usec_rec.reference_attribute2  :=NULL;
4805         END IF;
4806 	IF p_usec_rec.reference_attribute3  IS NULL  THEN
4807 	  p_usec_rec.reference_attribute3  := c_usec_ref_rec.attribute3 ;
4808         ELSIF  p_usec_rec.reference_attribute3  = FND_API.G_MISS_CHAR THEN
4809 	  p_usec_rec.reference_attribute3  :=NULL;
4810         END IF;
4811 	IF p_usec_rec.reference_attribute4  IS NULL  THEN
4812 	  p_usec_rec.reference_attribute4  := c_usec_ref_rec.attribute4 ;
4813         ELSIF  p_usec_rec.reference_attribute4  = FND_API.G_MISS_CHAR THEN
4814 	  p_usec_rec.reference_attribute4  :=NULL;
4815         END IF;
4816 	IF p_usec_rec.reference_attribute5  IS NULL  THEN
4817 	  p_usec_rec.reference_attribute5  := c_usec_ref_rec.attribute5 ;
4818         ELSIF  p_usec_rec.reference_attribute5  = FND_API.G_MISS_CHAR THEN
4819 	  p_usec_rec.reference_attribute5  :=NULL;
4820         END IF;
4821 	IF p_usec_rec.reference_attribute6  IS NULL  THEN
4822 	  p_usec_rec.reference_attribute6  := c_usec_ref_rec.attribute6 ;
4823         ELSIF  p_usec_rec.reference_attribute6  = FND_API.G_MISS_CHAR THEN
4824 	  p_usec_rec.reference_attribute6  :=NULL;
4825         END IF;
4826 	IF p_usec_rec.reference_attribute7  IS NULL  THEN
4827 	  p_usec_rec.reference_attribute7  := c_usec_ref_rec.attribute7 ;
4828         ELSIF  p_usec_rec.reference_attribute7  = FND_API.G_MISS_CHAR THEN
4829 	  p_usec_rec.reference_attribute7  :=NULL;
4830         END IF;
4831 	IF p_usec_rec.reference_attribute8  IS NULL  THEN
4832 	  p_usec_rec.reference_attribute8  := c_usec_ref_rec.attribute8 ;
4833         ELSIF  p_usec_rec.reference_attribute8  = FND_API.G_MISS_CHAR THEN
4834 	  p_usec_rec.reference_attribute8  :=NULL;
4835         END IF;
4836 	IF p_usec_rec.reference_attribute9  IS NULL  THEN
4837 	  p_usec_rec.reference_attribute9  := c_usec_ref_rec.attribute9 ;
4838         ELSIF  p_usec_rec.reference_attribute9  = FND_API.G_MISS_CHAR THEN
4839 	  p_usec_rec.reference_attribute9  :=NULL;
4840         END IF;
4841 	IF p_usec_rec.reference_attribute10  IS NULL  THEN
4842 	  p_usec_rec.reference_attribute10  := c_usec_ref_rec.attribute10 ;
4843         ELSIF  p_usec_rec.reference_attribute10  = FND_API.G_MISS_CHAR THEN
4844 	  p_usec_rec.reference_attribute10  :=NULL;
4845         END IF;
4846 	IF p_usec_rec.reference_attribute11  IS NULL  THEN
4847 	  p_usec_rec.reference_attribute11  := c_usec_ref_rec.attribute11 ;
4848         ELSIF  p_usec_rec.reference_attribute11  = FND_API.G_MISS_CHAR THEN
4849 	  p_usec_rec.reference_attribute11  :=NULL;
4850         END IF;
4851 	IF p_usec_rec.reference_attribute12  IS NULL  THEN
4852 	  p_usec_rec.reference_attribute12  := c_usec_ref_rec.attribute12 ;
4853         ELSIF  p_usec_rec.reference_attribute12  = FND_API.G_MISS_CHAR THEN
4854 	  p_usec_rec.reference_attribute12  :=NULL;
4855         END IF;
4856 	IF p_usec_rec.reference_attribute13  IS NULL  THEN
4857 	  p_usec_rec.reference_attribute13  := c_usec_ref_rec.attribute13 ;
4858         ELSIF  p_usec_rec.reference_attribute13  = FND_API.G_MISS_CHAR THEN
4859 	  p_usec_rec.reference_attribute13  :=NULL;
4860         END IF;
4861 	IF p_usec_rec.reference_attribute14  IS NULL  THEN
4862 	  p_usec_rec.reference_attribute14  := c_usec_ref_rec.attribute14 ;
4863         ELSIF  p_usec_rec.reference_attribute14  = FND_API.G_MISS_CHAR THEN
4864 	  p_usec_rec.reference_attribute14  :=NULL;
4865         END IF;
4866 	IF p_usec_rec.reference_attribute15  IS NULL  THEN
4867 	  p_usec_rec.reference_attribute15  := c_usec_ref_rec.attribute15 ;
4868         ELSIF  p_usec_rec.reference_attribute15  = FND_API.G_MISS_CHAR THEN
4869 	  p_usec_rec.reference_attribute15  :=NULL;
4870         END IF;
4871 	IF p_usec_rec.reference_attribute16  IS NULL  THEN
4872 	  p_usec_rec.reference_attribute16  := c_usec_ref_rec.attribute16 ;
4873         ELSIF  p_usec_rec.reference_attribute16  = FND_API.G_MISS_CHAR THEN
4874 	  p_usec_rec.reference_attribute16  :=NULL;
4875         END IF;
4876 	IF p_usec_rec.reference_attribute17  IS NULL  THEN
4877 	  p_usec_rec.reference_attribute17  := c_usec_ref_rec.attribute17 ;
4878         ELSIF  p_usec_rec.reference_attribute17  = FND_API.G_MISS_CHAR THEN
4879 	  p_usec_rec.reference_attribute17  :=NULL;
4880         END IF;
4881 	IF p_usec_rec.reference_attribute18  IS NULL  THEN
4882 	  p_usec_rec.reference_attribute18  := c_usec_ref_rec.attribute18 ;
4883         ELSIF  p_usec_rec.reference_attribute18  = FND_API.G_MISS_CHAR THEN
4884 	  p_usec_rec.reference_attribute18  :=NULL;
4885         END IF;
4886 	IF p_usec_rec.reference_attribute19  IS NULL  THEN
4887 	  p_usec_rec.reference_attribute19  := c_usec_ref_rec.attribute19 ;
4888         ELSIF  p_usec_rec.reference_attribute19  = FND_API.G_MISS_CHAR THEN
4889 	  p_usec_rec.reference_attribute19  :=NULL;
4890         END IF;
4891 	IF p_usec_rec.reference_attribute20  IS NULL  THEN
4892 	  p_usec_rec.reference_attribute20  := c_usec_ref_rec.attribute20 ;
4893         ELSIF  p_usec_rec.reference_attribute20  = FND_API.G_MISS_CHAR THEN
4894 	  p_usec_rec.reference_attribute20  :=NULL;
4895         END IF;
4896 	IF p_usec_rec.reference_title  IS NULL  THEN
4897 	  p_usec_rec.reference_title  := c_usec_ref_rec.title ;
4898         ELSIF  p_usec_rec.reference_title  = FND_API.G_MISS_CHAR THEN
4899 	  p_usec_rec.reference_title  :=NULL;
4900         END IF;
4901       END IF;
4902     END Assign_default;
4903 
4904     BEGIN
4905 
4906 	IF p_usec_rec.status = 'S' THEN
4907 	  get_uoo_id ( p_usec_rec);
4908 
4909 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4910 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_get_uoo_id',
4911 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4912 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4913 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4914 	  END IF;
4915 
4916 	END IF;
4917 
4918        --Find out whether it is insert/update of record
4919        l_insert_update:='I';
4920        IF p_usec_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
4921          l_insert_update:= check_insert_update(p_usec_rec);
4922 
4923 	 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4924 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_check_insert_update',
4925 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4926 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4927 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4928 	  END IF;
4929 
4930        END IF;
4931 
4932       IF p_usec_rec.status = 'S' THEN
4933 	Assign_default(p_usec_rec,l_insert_update);
4934 
4935 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4936 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_Assign_default',
4937 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4938 	  ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4939 	  p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4940 	END IF;
4941 
4942       END IF;
4943 
4944       IF ( p_usec_rec.status = 'S' ) THEN
4945 	validate_ref_db_cons ( p_usec_rec,l_insert_update );
4946 
4947 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4948 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_validate_ref_db_cons',
4949 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4950 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4951 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4952 	END IF;
4953 
4954       END IF;
4955       /* Business validations */
4956       IF ( p_usec_rec.status = 'S' ) THEN
4957 	-- Check for validation by calling validate_ref
4958 	 l_n_subtitle_id := NULL;
4959 	 igs_ps_validate_lgcy_pkg.validate_ref ( p_usec_rec, l_n_subtitle_id ,l_n_uoo_id,l_insert_update);
4960 
4961 	 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4962 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_Business_validation',
4963 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
4964 	   ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
4965 	   p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
4966          END IF;
4967 
4968       END IF;
4969 
4970       IF ( p_usec_rec.status = 'S' ) THEN
4971 	IF l_insert_update = 'I' THEN
4972 	  /* Insert Record */
4973 	INSERT INTO igs_ps_usec_ref
4974 	(unit_section_reference_id,
4975 	uoo_id,
4976 	short_title,
4977 	subtitle,
4978 	subtitle_modifiable_flag,
4979 	class_schedule_exclusion_flag,
4980 	registration_exclusion_flag,
4981 	attribute_category,
4982 	attribute1,
4983 	attribute2,
4984 	attribute3,
4985 	attribute4,
4986 	attribute5,
4987 	attribute6,
4988 	attribute7,
4989 	attribute8,
4990 	attribute9,
4991 	attribute10,
4992 	attribute11,
4993 	attribute12,
4994 	attribute13,
4995 	attribute14,
4996 	attribute15,
4997 	attribute16,
4998 	attribute17,
4999 	attribute18,
5000 	attribute19,
5001 	attribute20,
5002 	created_by,
5003 	creation_date,
5004 	last_updated_by,
5005 	last_update_date,
5006 	last_update_login,
5007 	record_exclusion_flag,
5008 	title,
5009 	subtitle_id
5010 	)
5011 	VALUES
5012 	(igs_ps_usec_ref_s.NEXTVAL,
5013 	l_n_uoo_id,
5014 	p_usec_rec.reference_short_title,
5015 	p_usec_rec.reference_subtitle,
5016 	p_usec_rec.reference_subtitle_mod_flag,
5017 	p_usec_rec.reference_class_sch_excl_flag,
5018 	null,
5019 	p_usec_rec.reference_attribute_category,
5020 	p_usec_rec.reference_attribute1,
5021 	p_usec_rec.reference_attribute2,
5022 	p_usec_rec.reference_attribute3,
5023 	p_usec_rec.reference_attribute4,
5024 	p_usec_rec.reference_attribute5,
5025 	p_usec_rec.reference_attribute6,
5026 	p_usec_rec.reference_attribute7,
5027 	p_usec_rec.reference_attribute8,
5028 	p_usec_rec.reference_attribute9,
5029 	p_usec_rec.reference_attribute10,
5030 	p_usec_rec.reference_attribute11,
5031 	p_usec_rec.reference_attribute12,
5032 	p_usec_rec.reference_attribute13,
5033 	p_usec_rec.reference_attribute14,
5034 	p_usec_rec.reference_attribute15,
5035 	p_usec_rec.reference_attribute16,
5036 	p_usec_rec.reference_attribute17,
5037 	p_usec_rec.reference_attribute18,
5038 	p_usec_rec.reference_attribute19,
5039 	p_usec_rec.reference_attribute20,
5040 	g_n_user_id,
5041 	SYSDATE,
5042 	g_n_user_id,
5043 	SYSDATE,
5044 	g_n_login_id,
5045 	p_usec_rec.reference_rec_exclusion_flag,
5046 	p_usec_rec.reference_title,
5047 	l_n_subtitle_id
5048 	);
5049 
5050          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5051            fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.record_inserted',
5052 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5053 	   ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5054 	   p_usec_rec.unit_class);
5055          END IF;
5056 
5057 	ELSE ---update
5058 	 UPDATE igs_ps_usec_ref SET
5059 	 short_title =p_usec_rec.reference_short_title,
5060 	 subtitle =p_usec_rec.reference_subtitle,
5061 	 subtitle_modifiable_flag =p_usec_rec.reference_subtitle_mod_flag,
5062 	 class_schedule_exclusion_flag =p_usec_rec.reference_class_sch_excl_flag,
5063 	 attribute_category =p_usec_rec.reference_attribute_category,
5064 	 attribute1 =p_usec_rec.reference_attribute1,
5065 	 attribute2 =p_usec_rec.reference_attribute2,
5066 	 attribute3 =p_usec_rec.reference_attribute3,
5067 	 attribute4 =p_usec_rec.reference_attribute4,
5068 	 attribute5 =p_usec_rec.reference_attribute5,
5069 	 attribute6 =p_usec_rec.reference_attribute6,
5070 	 attribute7 =p_usec_rec.reference_attribute7,
5071 	 attribute8 =p_usec_rec.reference_attribute8,
5072 	 attribute9 =p_usec_rec.reference_attribute9,
5073 	 attribute10 =p_usec_rec.reference_attribute10,
5074 	 attribute11 =p_usec_rec.reference_attribute11,
5075 	 attribute12 =p_usec_rec.reference_attribute12,
5076 	 attribute13 =p_usec_rec.reference_attribute13,
5077 	 attribute14 =p_usec_rec.reference_attribute14,
5078 	 attribute15 =p_usec_rec.reference_attribute15,
5079 	 attribute16 =p_usec_rec.reference_attribute16,
5080 	 attribute17 =p_usec_rec.reference_attribute17,
5081 	 attribute18 =p_usec_rec.reference_attribute18,
5082 	 attribute19 =p_usec_rec.reference_attribute19,
5083 	 attribute20 =p_usec_rec.reference_attribute20,
5084 	 last_updated_by =g_n_user_id,
5085 	 last_update_date =SYSDATE,
5086 	 last_update_login =g_n_login_id,
5087 	 title=p_usec_rec.reference_title,
5088 	 record_exclusion_flag =p_usec_rec.reference_rec_exclusion_flag,
5089 	 subtitle_id=l_n_subtitle_id
5090 	 WHERE uoo_id = l_n_uoo_id;
5091 
5092          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5093            fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.record_updated',
5094 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5095 	   ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5096 	   p_usec_rec.unit_class);
5097          END IF;
5098 
5099 	END IF;
5100      END IF;
5101 
5102     END create_ref;
5103   -- Adding the new procedure to import unit section enrollment limits
5104     PROCEDURE create_usec_el(p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type ) AS
5105    /***********************************************************************************************
5106 
5107    Created By:         SMVK
5108    Date Created By:    28-May-2003
5109    Purpose:            This procedure imports Unit Section Enrollment Limits.
5110 
5111    Known limitations,enhancements,remarks:
5112 
5113    Change History
5114 
5115    Who       When         What
5116 
5117   ***********************************************************************************************/
5118     FUNCTION check_insert_update (p_usec_rec IN igs_ps_generic_pub.usec_rec_type ) RETURN VARCHAR2 IS
5119       CURSOR c_usec_lim(p_n_uoo_id NUMBER) IS
5120       SELECT 'X'
5121       FROM igs_ps_usec_lim_wlst
5122       WHERE uoo_id = p_n_uoo_id;
5123 
5124      c_usec_lim_rec c_usec_lim%ROWTYPE;
5125     BEGIN
5126 
5127       OPEN c_usec_lim(l_n_uoo_id);
5128       FETCH c_usec_lim INTO c_usec_lim_rec;
5129       IF c_usec_lim%NOTFOUND THEN
5130 	 CLOSE c_usec_lim;
5131 	 RETURN 'I';
5132       ELSE
5133 	 CLOSE c_usec_lim;
5134 	 RETURN 'U';
5135       END IF;
5136 
5137     END check_insert_update;
5138 
5139     PROCEDURE Assign_default(  p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,
5140                                p_insert_update VARCHAR2 ) AS
5141       CURSOR c_uop(cp_c_unit_cd  IN igs_ps_unit_ofr_pat_all.unit_cd%TYPE,
5142 		 cp_n_ver_num  IN igs_ps_unit_ofr_pat_all.version_number%TYPE,
5143 		 cp_c_cal_type IN igs_ps_unit_ofr_pat_all.cal_type%TYPE,
5144 		 cp_n_seq_num  IN igs_ps_unit_ofr_pat_all.ci_sequence_number%TYPE ) IS
5145       SELECT waitlist_allowed, max_students_per_waitlist
5146       FROM   igs_ps_unit_ofr_pat_all
5147       WHERE  unit_cd = cp_c_unit_cd
5148       AND    version_number = cp_n_ver_num
5149       AND    cal_type = cp_c_cal_type
5150       AND    ci_sequence_number = cp_n_seq_num ;
5151 
5152     rec_uop  c_uop%ROWTYPE;
5153 
5154     CURSOR c_usec_lim(p_n_uoo_id NUMBER) IS
5155       SELECT *
5156       FROM igs_ps_usec_lim_wlst
5157       WHERE uoo_id = p_n_uoo_id;
5158 
5159      c_usec_lim_rec c_usec_lim%ROWTYPE;
5160    BEGIN
5161 
5162      IF p_insert_update = 'I' THEN
5163        OPEN  c_uop (p_usec_rec.unit_cd, p_usec_rec.version_number, l_c_cal_type, l_n_seq_num);
5164        FETCH c_uop INTO rec_uop;
5165        CLOSE c_uop;
5166 
5167        IF p_usec_rec.usec_waitlist_allowed IS NULL THEN
5168 	 p_usec_rec.usec_waitlist_allowed := rec_uop.waitlist_allowed;
5169        END IF;
5170 
5171        IF p_usec_rec.usec_max_students_per_waitlist IS NULL THEN
5172 	 p_usec_rec.usec_max_students_per_waitlist := rec_uop.max_students_per_waitlist;
5173        END IF;
5174      ELSE
5175        OPEN c_usec_lim(l_n_uoo_id);
5176        FETCH c_usec_lim INTO c_usec_lim_rec;
5177        CLOSE c_usec_lim;
5178 
5179        IF p_usec_rec.usec_waitlist_allowed  IS NULL  THEN
5180 	  p_usec_rec.usec_waitlist_allowed  := c_usec_lim_rec.waitlist_allowed;
5181        ELSIF  p_usec_rec.usec_waitlist_allowed  = FND_API.G_MISS_CHAR THEN
5182 	  p_usec_rec.usec_waitlist_allowed  :='N';
5183        END IF;
5184 
5185        IF p_usec_rec.usec_max_students_per_waitlist  IS NULL  THEN
5186 	  p_usec_rec.usec_max_students_per_waitlist  := c_usec_lim_rec.max_students_per_waitlist ;
5187        ELSIF  p_usec_rec.usec_max_students_per_waitlist  = FND_API.G_MISS_NUM THEN
5188 	  p_usec_rec.usec_max_students_per_waitlist  :=0;
5189        END IF;
5190 
5191        IF p_usec_rec.enrollment_expected  IS NULL  THEN
5192 	  p_usec_rec.enrollment_expected  := c_usec_lim_rec.enrollment_expected ;
5193        ELSIF  p_usec_rec.enrollment_expected  = FND_API.G_MISS_NUM THEN
5194 	  p_usec_rec.enrollment_expected  :=NULL;
5195        END IF;
5196 
5197        IF p_usec_rec.enrollment_minimum  IS NULL  THEN
5198 	  p_usec_rec.enrollment_minimum  := c_usec_lim_rec.enrollment_minimum ;
5199        ELSIF  p_usec_rec.enrollment_minimum  = FND_API.G_MISS_NUM THEN
5200 	  p_usec_rec.enrollment_minimum  :=NULL;
5201        END IF;
5202 
5203        IF p_usec_rec.enrollment_maximum  IS NULL  THEN
5204 	  p_usec_rec.enrollment_maximum  := c_usec_lim_rec.enrollment_maximum ;
5205        ELSIF  p_usec_rec.enrollment_maximum  = FND_API.G_MISS_NUM THEN
5206 	  p_usec_rec.enrollment_maximum  :=NULL;
5207        END IF;
5208 
5209        IF p_usec_rec.advance_maximum  IS NULL  THEN
5210 	  p_usec_rec.advance_maximum  := c_usec_lim_rec.advance_maximum ;
5211        ELSIF  p_usec_rec.advance_maximum  = FND_API.G_MISS_NUM THEN
5212 	  p_usec_rec.advance_maximum  :=NULL;
5213        END IF;
5214 
5215        IF p_usec_rec.override_enrollment_maximum  IS NULL  THEN
5216 	  p_usec_rec.override_enrollment_maximum  := c_usec_lim_rec.override_enrollment_max ;
5217        ELSIF  p_usec_rec.override_enrollment_maximum  = FND_API.G_MISS_NUM THEN
5218 	  p_usec_rec.override_enrollment_maximum  :=NULL;
5219        END IF;
5220 
5221        IF p_usec_rec.max_auditors_allowed  IS NULL  THEN
5222 	  p_usec_rec.max_auditors_allowed  := c_usec_lim_rec.max_auditors_allowed ;
5223        ELSIF  p_usec_rec.max_auditors_allowed  = FND_API.G_MISS_NUM THEN
5224 	  p_usec_rec.max_auditors_allowed  :=NULL;
5225        END IF;
5226      END IF;
5227 
5228    END Assign_default;
5229 
5230 
5231    PROCEDURE validate_db_cons(p_usec_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rec_type,p_insert_update VARCHAR2 ) AS
5232    BEGIN
5233       IF p_insert_update = 'I' THEN
5234 	IF igs_ps_usec_lim_wlst_pkg.get_uk_for_validation(l_n_uoo_id) THEN
5235 	   p_usec_rec.status :='W';
5236 	   fnd_message.set_name('IGS','IGS_PS_USEC_ENR_LMTS');
5237 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', fnd_message.get, NULL, FALSE);
5238 	END IF;
5239       END IF;
5240 
5241       IF p_usec_rec.enrollment_expected IS NOT NULL THEN
5242 	 BEGIN
5243 	    igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_EXPECTED',p_usec_rec.enrollment_expected);
5244 	 EXCEPTION
5245 	    WHEN OTHERS THEN
5246 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_EXPECTED','LEGACY_TOKENS',TRUE);
5247 	       p_usec_rec.status :='E';
5248 	 END;
5249       END IF;
5250 
5251       IF p_usec_rec.enrollment_minimum IS NOT NULL THEN
5252 	 BEGIN
5253 	    igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_MINIMUM',p_usec_rec.enrollment_minimum);
5254 	 EXCEPTION
5255 	    WHEN OTHERS THEN
5256 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_MINIMUM','LEGACY_TOKENS',TRUE);
5257 	       p_usec_rec.status :='E';
5258 	 END;
5259       END IF;
5260 
5261       IF p_usec_rec.enrollment_maximum IS NOT NULL THEN
5262 	 BEGIN
5263 	    igs_ps_unit_ver_pkg.check_constraints('ENROLLMENT_MAXIMUM',p_usec_rec.enrollment_maximum);
5264 	 EXCEPTION
5265 	    WHEN OTHERS THEN
5266 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ENROLLMENT_MAXIMUM','LEGACY_TOKENS',TRUE);
5267 	       p_usec_rec.status :='E';
5268 	 END;
5269       END IF;
5270 
5271       IF p_usec_rec.advance_maximum IS NOT NULL THEN
5272 	 BEGIN
5273 	    igs_ps_unit_ver_pkg.check_constraints('ADVANCE_MAXIMUM',p_usec_rec.advance_maximum);
5274 	 EXCEPTION
5275 	    WHEN OTHERS THEN
5276 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','ADVANCE_MAXIMUM','LEGACY_TOKENS',TRUE);
5277 	       p_usec_rec.status :='E';
5278 	 END;
5279       END IF;
5280 
5281       IF p_usec_rec.override_enrollment_maximum IS NOT NULL THEN
5282 	 BEGIN
5283 	    igs_ps_unit_ver_pkg.check_constraints('OVERRIDE_ENROLLMENT_MAX',p_usec_rec.override_enrollment_maximum);
5284 	 EXCEPTION
5285 	    WHEN OTHERS THEN
5286 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','OVERRIDE_ENROLLMENT_MAX','LEGACY_TOKENS',TRUE);
5287 	       p_usec_rec.status :='E';
5288 	 END;
5289       END IF;
5290 
5291       IF p_usec_rec.max_auditors_allowed IS NOT NULL THEN
5292 	 BEGIN
5293 	    igs_ps_unit_ver_pkg.check_constraints('MAX_AUDITORS_ALLOWED',p_usec_rec. max_auditors_allowed);
5294 	 EXCEPTION
5295 	    WHEN OTHERS THEN
5296 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','MAX_AUDITORS_ALLOWED','LEGACY_TOKENS',TRUE);
5297 	       p_usec_rec.status :='E';
5298 	 END;
5299       END IF;
5300 
5301       IF p_usec_rec.usec_waitlist_allowed IS NOT NULL THEN
5302 	 BEGIN
5303 	    igs_ps_unit_ofr_pat_pkg.check_constraints ('WAITLIST_ALLOWED', p_usec_rec.usec_waitlist_allowed);
5304 	 EXCEPTION
5305 	    WHEN OTHERS THEN
5306 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','WAITLIST_ALLOWED', 'LEGACY_TOKENS', TRUE);
5307 	       p_usec_rec.status := 'E';
5308 	 END;
5309       END IF;
5310 
5311       IF p_usec_rec.usec_max_students_per_waitlist IS NOT NULL THEN
5312 	 BEGIN
5313 	    igs_ps_unit_ofr_pat_pkg.check_constraints('MAX_STUDENTS_PER_WAITLIST',p_usec_rec.usec_max_students_per_waitlist);
5314 	 EXCEPTION
5315 	    WHEN OTHERS THEN
5316 	       igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999999','MAX_STUDENTS_PER_WAITLIST','LEGACY_TOKENS',TRUE);
5317 	       p_usec_rec.status :='E';
5318 	 END;
5319       END IF;
5320 
5321       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
5322 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5323 	 p_usec_rec.status := 'E';
5324       END IF;
5325 
5326    END validate_db_cons;
5327 
5328    BEGIN
5329 
5330       IF p_usec_rec.enrollment_expected   IS NULL AND
5331          p_usec_rec.enrollment_minimum    IS NULL AND
5332 	 p_usec_rec.enrollment_maximum    IS NULL AND
5333          p_usec_rec.advance_maximum       IS NULL AND
5334          p_usec_rec.usec_waitlist_allowed IS NULL AND
5335          p_usec_rec.usec_max_students_per_waitlist IS NULL AND
5336          p_usec_rec.override_enrollment_maximum IS NULL AND
5337          p_usec_rec.max_auditors_allowed  IS NULL THEN
5338 
5339 	 --No need to insert/update the empty record
5340 	 NULL ;
5341       ELSE
5342 
5343         IF p_usec_rec.status = 'S' THEN
5344 	  get_uoo_id ( p_usec_rec);
5345 
5346           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5347 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_get_uoo_id',
5348 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5349 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5350 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5351           END IF;
5352 
5353 	END IF;
5354 
5355 	 --Find out whether it is insert/update of record
5356 	 l_insert_update:='I';
5357 	 IF p_usec_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
5358 	   l_insert_update:= check_insert_update(p_usec_rec);
5359 
5360            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5361 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_check_insert_update',
5362 	    'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5363 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5364 	     p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5365            END IF;
5366 
5367 	 END IF;
5368 
5369 	IF p_usec_rec.status = 'S' THEN
5370 	  Assign_default(p_usec_rec,l_insert_update);
5371 
5372           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5373             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_Assign_default',
5374 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5375 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5376 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5377           END IF;
5378 
5379 	END IF;
5380 
5381 	IF p_usec_rec.status = 'S' THEN
5382 	  validate_db_cons(p_usec_rec,l_insert_update);
5383 
5384      	 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5385            fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_validate_db_cons',
5386 	  'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5387 	   ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5388 	   p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5389          END IF;
5390 
5391 	END IF;
5392 
5393 	IF p_usec_rec.status = 'S' THEN
5394 	  igs_ps_validate_lgcy_pkg.validate_usec_el (p_usec_rec,l_n_uoo_id,l_insert_update);
5395 
5396 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5397             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_business_validations',
5398 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5399 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5400 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5401           END IF;
5402 
5403 	END IF;
5404 
5405 	IF p_usec_rec.status = 'S' THEN
5406 	  IF l_insert_update = 'I' THEN
5407 	    /* Insert Record */
5408 	    INSERT INTO igs_ps_usec_lim_wlst
5409 	    (unit_section_limit_waitlist_id,
5410 	    uoo_id,
5411 	    enrollment_expected,
5412 	    enrollment_minimum ,
5413 	    enrollment_maximum ,
5414 	    advance_maximum,
5415 	    waitlist_allowed ,
5416 	    max_students_per_waitlist,
5417 	    override_enrollment_max,
5418 	    max_auditors_allowed,
5419 	    created_by ,
5420 	    creation_date,
5421 	    last_updated_by,
5422 	    last_update_date ,
5423 	    last_update_login
5424 	    )
5425 	    VALUES
5426 	    (
5427 	    igs_ps_usec_lim_wlst_s.nextval,
5428 	    l_n_uoo_id,
5429 	    p_usec_rec.enrollment_expected,
5430 	    p_usec_rec.enrollment_minimum,
5431 	    p_usec_rec.enrollment_maximum,
5432 	    p_usec_rec.advance_maximum,
5433 	    p_usec_rec.usec_waitlist_allowed,
5434 	    p_usec_rec.usec_max_students_per_waitlist,
5435 	    p_usec_rec.override_enrollment_maximum,
5436 	    p_usec_rec.max_auditors_allowed,
5437 	    g_n_user_id,
5438 	    sysdate,
5439 	    g_n_user_id,
5440 	    sysdate,
5441 	    g_n_login_id
5442 	   );
5443 
5444            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5445               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.record_inserted',
5446 	     'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5447 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5448 	     p_usec_rec.unit_class);
5449            END IF;
5450 
5451          ELSE ---update
5452 	   UPDATE igs_ps_usec_lim_wlst SET
5453 	   enrollment_expected=p_usec_rec.enrollment_expected,
5454 	   enrollment_minimum=p_usec_rec.enrollment_minimum ,
5455 	   enrollment_maximum=p_usec_rec.enrollment_maximum ,
5456 	   advance_maximum=p_usec_rec.advance_maximum,
5457 	   waitlist_allowed=p_usec_rec.usec_waitlist_allowed ,
5458 	   max_students_per_waitlist=p_usec_rec.usec_max_students_per_waitlist,
5459 	   override_enrollment_max=p_usec_rec.override_enrollment_maximum,
5460 	   max_auditors_allowed=p_usec_rec.max_auditors_allowed,
5461 	   last_updated_by = g_n_user_id,
5462 	   last_update_date= SYSDATE ,
5463 	   last_update_login= g_n_login_id
5464 	   WHERE uoo_id =l_n_uoo_id;
5465 
5466            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5467               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.record_updated',
5468 	     'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5469 	     ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5470 	     p_usec_rec.unit_class);
5471            END IF;
5472 
5473 	 END IF;
5474 
5475 	 igs_ps_validate_lgcy_pkg.post_usec_limits(p_usec_rec,p_calling_context,l_n_uoo_id,l_insert_update);
5476 
5477          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5478             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_post_usec_limits',
5479 	   'Unit code:'||p_usec_rec.unit_cd||'  '||'Version number:'||p_usec_rec.version_number||'  '||'teach_cal_alternate_code:'
5480 	    ||p_usec_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rec.location_cd||'  '||'Unit Class:'||
5481 	    p_usec_rec.unit_class||'  '||'Status:'||p_usec_rec.status);
5482           END IF;
5483 
5484        END IF;
5485 
5486      END IF;
5487 
5488     END create_usec_el;
5489 
5490 
5491   BEGIN
5492 
5493     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5494       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.start_logging_for','Unit Sections');
5495     END IF;
5496 
5497     p_c_rec_status := 'S';
5498     FOR I in 1..p_usec_tbl.LAST LOOP
5499       IF p_usec_tbl.EXISTS(I) THEN
5500         p_usec_tbl(I).status := 'S';
5501         p_usec_tbl(I).msg_from := fnd_msg_pub.count_msg;
5502 	l_conc_flag := FALSE;
5503 
5504         trim_values(p_usec_tbl(I));
5505         -- Create Unit Offering
5506 
5507         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5508           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.call',
5509 	  'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5510 	  ||p_usec_tbl(I).teach_cal_alternate_code);
5511         END IF;
5512 
5513         create_uo ( p_usec_rec => p_usec_tbl(I) );
5514 
5515 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5516           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uo.status_after_record_creation',
5517 	  'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5518 	  ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Status:'||p_usec_tbl(I).status);
5519         END IF;
5520 
5521 
5522         IF p_usec_tbl(I).status = 'S' THEN
5523             -- Create Unit Offering Pattern
5524 
5525 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5526               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.call',
5527 	      'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5528 	      ||p_usec_tbl(I).teach_cal_alternate_code);
5529             END IF;
5530 
5531             create_uop ( p_usec_tbl(I) );
5532 
5533             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5534               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uop.status_after_record_creation',
5535 	      'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5536 	      ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Status:'||p_usec_tbl(I).status);
5537            END IF;
5538 
5539         END IF;
5540 
5541         IF p_usec_tbl(I).status = 'S' THEN
5542           -- Create Unit Offering Option
5543 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5544             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.call',
5545 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5546 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5547 	    p_usec_tbl(I).unit_class);
5548           END IF;
5549 
5550 	  create_uoo ( p_usec_tbl(I) );
5551 
5552           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5553             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_uoo.status_after_record_creation',
5554 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5555 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5556 	    p_usec_tbl(I).unit_class||'  '||'Status:'||p_usec_tbl(I).status);
5557           END IF;
5558         END IF;
5559         IF p_usec_tbl(I).status = 'S' THEN
5560           -- Create Unit Section Credit Points
5561           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5562             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.call',
5563 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5564 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5565 	    p_usec_tbl(I).unit_class);
5566           END IF;
5567 
5568           create_cp ( p_usec_tbl(I) );
5569 
5570           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5571             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_cp.status_after_record_creation',
5572 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5573 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5574 	    p_usec_tbl(I).unit_class||'  '||'Status:'||p_usec_tbl(I).status);
5575           END IF;
5576 
5577         END IF;
5578         IF p_usec_tbl(I).status = 'S' THEN
5579           -- Create Unit Section Reference
5580 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5581             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.call',
5582 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5583 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5584 	    p_usec_tbl(I).unit_class);
5585           END IF;
5586 
5587           create_ref ( p_usec_tbl(I) );
5588 
5589            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5590             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_ref.status_after_record_creation',
5591 	    'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5592 	    ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5593 	    p_usec_tbl(I).unit_class||'  '||'Status:'||p_usec_tbl(I).status);
5594           END IF;
5595 
5596         END IF;
5597         IF p_usec_tbl(I).status = 'S' THEN
5598            -- Create Unit Section Enrollment Limits
5599 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5600              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.call',
5601 	     'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5602 	     ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5603 	     p_usec_tbl(I).unit_class);
5604            END IF;
5605 
5606            create_usec_el ( p_usec_tbl(I) );
5607 
5608 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5609              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.create_usec_el.status_after_record_creation',
5610 	     'Unit code:'||p_usec_tbl(I).unit_cd||'  '||'Version number:'||p_usec_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5611 	     ||p_usec_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_tbl(I).location_cd||'  '||'Unit Class:'||
5612 	     p_usec_tbl(I).unit_class||'  '||'Status:'||p_usec_tbl(I).status);
5613           END IF;
5614 
5615         END IF;
5616 
5617 	-- if the unit section status changed to CANCELLED then invoke the concurrent program to transfer the data to interface
5618 	-- the flag is set in validate_uoo(IGSPS86B.pls)
5619 	IF l_conc_flag THEN
5620 	  IF NOT Igs_ps_usec_schedule.prgp_upd_usec_dtls(
5621 						     p_uoo_id=>l_n_uoo_id,
5622 						     p_usec_status=>p_usec_tbl(I).unit_section_status,
5623 						     p_request_id=>l_request_id,
5624 						     p_message_name=>l_message_name) THEN
5625 
5626 		  fnd_message.set_name ('IGS', l_message_name);
5627 		  fnd_msg_pub.add;
5628 		  p_usec_tbl(I).status := 'E';
5629 	  END IF;
5630 	END IF;
5631 
5632         IF  p_usec_tbl(I).status = 'S' THEN
5633            p_usec_tbl(I).msg_from := NULL;
5634            p_usec_tbl(I).msg_to := NULL;
5635         ELSIF  p_usec_tbl(I).status = 'A' THEN
5636 	   p_usec_tbl(I).msg_from  := p_usec_tbl(I).msg_from + 1;
5637 	   p_usec_tbl(I).msg_to := fnd_msg_pub.count_msg;
5638 	ELSE
5639            p_c_rec_status :=  p_usec_tbl(I).status;
5640            p_usec_tbl(I).msg_from :=  p_usec_tbl(I).msg_from + 1;
5641            p_usec_tbl(I).msg_to := fnd_msg_pub.count_msg;
5642            IF p_c_rec_status = 'E' THEN
5643              RETURN;
5644            END IF;
5645         END IF;
5646       END IF;--exists
5647     END LOOP;
5648 
5649     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5650       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_section.after_import_status',p_c_rec_status);
5651     END IF;
5652 
5653   END create_unit_section;
5654 
5655 
5656   PROCEDURE create_usec_grd_sch (
5657             p_tab_usec_gs IN OUT NOCOPY igs_ps_generic_pub.usec_gs_tbl_type,
5658             p_c_rec_status OUT NOCOPY VARCHAR2,
5659 	    p_calling_context  IN VARCHAR2
5660   ) AS
5661   /***********************************************************************************************
5662     Created By     :  shtatiko
5663     Date Created By:  18-NOV-2002
5664     Purpose        :  This procedure is a sub process to insert records of Unit Section Grading Schema.
5665 
5666     Known limitations,enhancements,remarks:
5667     Change History (in reverse chronological order)
5668     Who         When            What
5669   ********************************************************************************************** */
5670      l_insert_update  VARCHAR2(1);
5671      l_n_uoo_id       igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
5672      l_tbl_uoo        igs_ps_create_generic_pkg.uoo_tbl_type;
5673 
5674     /* Private Procedures for create_usec_grd_sch */
5675     PROCEDURE trim_values ( p_usec_gs_rec IN OUT NOCOPY igs_ps_generic_pub.usec_gs_rec_type ) AS
5676     BEGIN
5677       p_usec_gs_rec.unit_cd := trim(p_usec_gs_rec.unit_cd);
5678       p_usec_gs_rec.version_number := trim(p_usec_gs_rec.version_number);
5679       p_usec_gs_rec.teach_cal_alternate_code := trim(p_usec_gs_rec.teach_cal_alternate_code);
5680       p_usec_gs_rec.location_cd := trim(p_usec_gs_rec.location_cd);
5681       p_usec_gs_rec.unit_class := trim(p_usec_gs_rec.unit_class);
5682       p_usec_gs_rec.grading_schema_code := trim(p_usec_gs_rec.grading_schema_code);
5683       p_usec_gs_rec.grd_schm_version_number := trim(p_usec_gs_rec.grd_schm_version_number);
5684       p_usec_gs_rec.default_flag := trim(p_usec_gs_rec.default_flag);
5685     END trim_values;
5686 
5687     -- validate parameters passed.
5688     PROCEDURE validate_parameters ( p_usec_gs_rec IN OUT NOCOPY igs_ps_generic_pub.usec_gs_rec_type ) AS
5689     BEGIN
5690 
5691       /* Check for Mandatory Parameters */
5692       IF p_usec_gs_rec.unit_cd IS NULL OR p_usec_gs_rec.unit_cd = FND_API.G_MISS_CHAR THEN
5693         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
5694         p_usec_gs_rec.status := 'E';
5695       END IF;
5696       IF p_usec_gs_rec.version_number IS NULL OR p_usec_gs_rec.version_number = FND_API.G_MISS_NUM THEN
5697         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
5698         p_usec_gs_rec.status := 'E';
5699       END IF;
5700       IF p_usec_gs_rec.teach_cal_alternate_code IS NULL OR p_usec_gs_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
5701         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5702         p_usec_gs_rec.status := 'E';
5703       END IF;
5704       IF p_usec_gs_rec.location_cd IS NULL OR p_usec_gs_rec.location_cd = FND_API.G_MISS_CHAR THEN
5705         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
5706         p_usec_gs_rec.status := 'E';
5707       END IF;
5708       IF p_usec_gs_rec.unit_class IS NULL OR p_usec_gs_rec.unit_class = FND_API.G_MISS_CHAR THEN
5709         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
5710         p_usec_gs_rec.status := 'E';
5711       END IF;
5712       IF p_usec_gs_rec.grading_schema_code IS NULL OR p_usec_gs_rec.grading_schema_code = FND_API.G_MISS_CHAR THEN
5713         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_GRADING_SCHM_CD', 'LEGACY_TOKENS', FALSE);
5714         p_usec_gs_rec.status := 'E';
5715       END IF;
5716       IF p_usec_gs_rec.grd_schm_version_number IS NULL OR p_usec_gs_rec.grd_schm_version_number = FND_API.G_MISS_NUM THEN
5717         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_GRADING_SCHM_VER_NUM', 'LEGACY_TOKENS', FALSE);
5718         p_usec_gs_rec.status := 'E';
5719       END IF;
5720       IF p_usec_gs_rec.default_flag IS NULL OR p_usec_gs_rec.default_flag = FND_API.G_MISS_CHAR THEN
5721         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'DEFAULT_FLAG', 'LEGACY_TOKENS', FALSE);
5722         p_usec_gs_rec.status := 'E';
5723       END IF;
5724     END validate_parameters;
5725 
5726     -- Check for Update
5727     FUNCTION check_insert_update ( p_usec_gs_rec IN OUT NOCOPY igs_ps_generic_pub.usec_gs_rec_type ) RETURN VARCHAR2 IS
5728        CURSOR c_usec_gs(p_grading_schema_code IN VARCHAR2,p_grd_schm_version_number NUMBER ,p_n_uoo_id NUMBER) IS
5729        SELECT 'X'
5730        FROM  igs_ps_usec_grd_schm
5731        WHERE grading_schema_code =p_grading_schema_code
5732        AND grd_schm_version_number = p_grd_schm_version_number
5733        AND uoo_id = p_n_uoo_id;
5734 
5735        c_usec_gs_rec c_usec_gs%ROWTYPE;
5736     BEGIN
5737 
5738 	OPEN c_usec_gs(p_usec_gs_rec.grading_schema_code,p_usec_gs_rec.grd_schm_version_number, l_n_uoo_id);
5739 	FETCH c_usec_gs INTO c_usec_gs_rec;
5740 	IF c_usec_gs%NOTFOUND THEN
5741           CLOSE c_usec_gs;
5742 	 RETURN 'I';
5743         ELSE
5744          CLOSE c_usec_gs;
5745 	 RETURN 'U';
5746         END IF;
5747 
5748     END check_insert_update;
5749 
5750     -- Carry out derivations and validate them
5751     PROCEDURE validate_derivations ( p_usec_gs_rec IN OUT NOCOPY igs_ps_generic_pub.usec_gs_rec_type ) AS
5752       l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
5753       l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
5754       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
5755       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
5756       l_c_message  VARCHAR2(30);
5757     BEGIN
5758 
5759 
5760       -- Derive Calander Type and Sequence Number
5761       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_gs_rec.teach_cal_alternate_code,
5762                                              p_cal_type           => l_c_cal_type,
5763                                              p_ci_sequence_number => l_n_seq_num,
5764                                              p_start_dt           => l_d_start_dt,
5765                                              p_end_dt             => l_d_end_dt,
5766                                              p_return_status      => l_c_message );
5767       IF ( l_c_message <> 'SINGLE' ) THEN
5768         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5769         p_usec_gs_rec.status := 'E';
5770       END IF;
5771 
5772 
5773       -- Derive uoo_id
5774       l_c_message := NULL;
5775       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_gs_rec.unit_cd,
5776                                             p_ver_num    => p_usec_gs_rec.version_number,
5777                                             p_cal_type   => l_c_cal_type,
5778                                             p_seq_num    => l_n_seq_num,
5779                                             p_loc_cd     => p_usec_gs_rec.location_cd,
5780                                             p_unit_class => p_usec_gs_rec.unit_class,
5781                                             p_uoo_id     => l_n_uoo_id,
5782                                             p_message    => l_c_message );
5783       IF ( l_c_message IS NOT NULL ) THEN
5784         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5785         p_usec_gs_rec.status := 'E';
5786       END IF;
5787 
5788     END validate_derivations;
5789 
5790     -- Validate Database Constraints
5791     PROCEDURE validate_db_cons ( p_usec_gs_rec IN OUT NOCOPY igs_ps_generic_pub.usec_gs_rec_type,p_insert_update VARCHAR2 ) AS
5792     BEGIN
5793       IF (p_insert_update = 'I') THEN
5794 	/* Unique Key Validation */
5795 	IF igs_ps_usec_grd_schm_pkg.get_uk_for_validation ( x_grading_schema_code => p_usec_gs_rec.grading_schema_code,
5796 							    x_grd_schm_version_number => p_usec_gs_rec.grd_schm_version_number,
5797 							    x_uoo_id => l_n_uoo_id ) THEN
5798 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_GRADING_SCHM', 'LEGACY_TOKENS', FALSE);
5799 	  p_usec_gs_rec.status := 'W';
5800 	  RETURN;
5801 	END IF;
5802       END IF;
5803 
5804       /* Validate Check Constraints */
5805       BEGIN
5806         igs_ps_usec_grd_schm_pkg.check_constraints ( 'DEFAULT_FLAG', p_usec_gs_rec.default_flag );
5807       EXCEPTION
5808         WHEN OTHERS THEN
5809           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'DEFAULT_FLAG', 'LEGACY_TOKENS', TRUE);
5810           p_usec_gs_rec.status := 'E';
5811       END;
5812 
5813       /* Validate FK Constraints */
5814       IF NOT igs_as_grd_schema_pkg.get_pk_for_validation ( p_usec_gs_rec.grading_schema_code, p_usec_gs_rec.grd_schm_version_number) THEN
5815         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_GRADING_SCHM', 'LEGACY_TOKENS', FALSE);
5816         p_usec_gs_rec.status := 'E';
5817       END IF;
5818 
5819       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
5820         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5821         p_usec_gs_rec.status := 'E';
5822       END IF;
5823     END validate_db_cons;
5824 
5825 
5826   /* Main Unit Section Grading Schema Sub Process */
5827   BEGIN
5828 
5829     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5830       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.start_logging_for','Unit Section Grading Schema');
5831     END IF;
5832 
5833     p_c_rec_status := 'S';
5834     FOR I in 1..p_tab_usec_gs.LAST LOOP
5835 
5836       IF p_tab_usec_gs.EXISTS(I) THEN
5837         l_n_uoo_id := NULL;
5838         p_tab_usec_gs(I).status := 'S';
5839         p_tab_usec_gs(I).msg_from := fnd_msg_pub.count_msg;
5840         trim_values(p_tab_usec_gs(I) );
5841         validate_parameters ( p_tab_usec_gs(I) );
5842 
5843 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5844           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_validate_parameters',
5845 	  'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5846 	  ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5847 	  p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5848           ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5849         END IF;
5850 
5851 	IF p_tab_usec_gs(I).status = 'S' THEN
5852           validate_derivations ( p_tab_usec_gs(I));
5853 
5854 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5855             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_validate_derivations',
5856 	    'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5857 	    ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5858 	    p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5859             ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5860           END IF;
5861 
5862         END IF;
5863 
5864 	--Find out whether it is insert/update of record
5865         l_insert_update:='I';
5866         IF p_tab_usec_gs(I).status = 'S' AND p_calling_context IN ('G','S') THEN
5867             l_insert_update:= check_insert_update(p_tab_usec_gs(I));
5868 
5869 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5870               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_check_insert_update',
5871 	      'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5872 	      ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5873 	      p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5874               ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5875             END IF;
5876 
5877         END IF;
5878 
5879 
5880 	-- Find out whether record can go for import in context of cancelled/aborted
5881 	IF  p_tab_usec_gs(I).status = 'S' AND p_calling_context = 'S' THEN
5882 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
5883 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
5884 	    fnd_msg_pub.add;
5885 	    p_tab_usec_gs(I).status := 'A';
5886 	  END IF;
5887 
5888 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5889              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_check_import_allowed',
5890 	    'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5891 	    ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5892 	    p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5893             ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5894           END IF;
5895 
5896 	END IF;
5897 
5898         IF l_tbl_uoo.count = 0 THEN
5899           l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
5900 	ELSE
5901 	  IF NOT igs_ps_validate_lgcy_pkg.isExists(l_n_uoo_id,l_tbl_uoo) THEN
5902 	    l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
5903           END IF;
5904 	END IF;
5905 
5906 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5907              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.count_unique_uoo_ids',
5908 	    'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5909 	    ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5910 	    p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5911             ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Count:'||l_tbl_uoo.count);
5912          END IF;
5913 
5914 	IF p_tab_usec_gs(I).status = 'S' THEN
5915           validate_db_cons ( p_tab_usec_gs(I),l_insert_update );
5916 
5917 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5918             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_validate_db_cons',
5919 	    'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5920 	    ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5921 	    p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5922             ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5923           END IF;
5924 
5925         END IF;
5926 
5927 
5928 
5929         /* Business Validations */
5930         /* Proceed with business validations only if the status is Success, 'S' */
5931         IF p_tab_usec_gs(I).status = 'S' THEN
5932           igs_ps_validate_lgcy_pkg.validate_usec_grd_sch ( p_tab_usec_gs(I),l_n_uoo_id );
5933 
5934 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5935             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.status_after_Business_validation',
5936 	    'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5937 	    ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5938 	    p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5939             ||p_tab_usec_gs(I).grd_schm_version_number||'  '||'Status:'||p_tab_usec_gs(I).status);
5940           END IF;
5941 
5942         END IF;
5943 
5944         IF p_tab_usec_gs(I).status = 'S'  THEN
5945 	  IF l_insert_update = 'I' THEN
5946              /* Insert Record */
5947              INSERT INTO igs_ps_usec_grd_schm
5948              (unit_section_grading_schema_id,
5949              uoo_id,
5950              grading_schema_code,
5951              grd_schm_version_number,
5952              default_flag,
5953              created_by,
5954              creation_date,
5955              last_updated_by,
5956              last_update_date,
5957              last_update_login
5958              )
5959              VALUES
5960              (igs_ps_usec_grd_schm_s.NEXTVAL,
5961              l_n_uoo_id,
5962              p_tab_usec_gs(I).grading_schema_code,
5963              p_tab_usec_gs(I).grd_schm_version_number,
5964              p_tab_usec_gs(I).default_flag,
5965              g_n_user_id,
5966              SYSDATE,
5967              g_n_user_id,
5968              SYSDATE,
5969              g_n_login_id
5970              );
5971 
5972              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5973                fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.record_inserted',
5974 	       'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5975 	       ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5976 	       p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5977                ||p_tab_usec_gs(I).grd_schm_version_number);
5978              END IF;
5979 
5980 
5981          ELSE
5982 	      /*Update record*/
5983               UPDATE igs_ps_usec_grd_schm
5984 	      SET default_flag = p_tab_usec_gs(I).default_flag,
5985 	      last_updated_by = g_n_user_id,
5986 	      last_update_date = SYSDATE,
5987               last_update_login = g_n_login_id
5988 	      WHERE grading_schema_code = p_tab_usec_gs(I).grading_schema_code
5989 	      AND grd_schm_version_number = p_tab_usec_gs(I).grd_schm_version_number
5990 	      AND uoo_id = l_n_uoo_id;
5991 
5992 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5993                fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.record_updated',
5994 	       'Unit code:'||p_tab_usec_gs(I).unit_cd||'  '||'Version number:'||p_tab_usec_gs(I).version_number||'  '||'teach_cal_alternate_code:'
5995 	       ||p_tab_usec_gs(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_gs(I).location_cd||'  '||'Unit Class:'||
5996 	       p_tab_usec_gs(I).unit_class||'  '||'Grading Schema Code:'||p_tab_usec_gs(I).grading_schema_code||' '||'Grading Schema Version Number:'
5997                ||p_tab_usec_gs(I).grd_schm_version_number);
5998              END IF;
5999 
6000 	 END IF;--insert/update
6001        END IF;
6002 
6003        IF p_tab_usec_gs(I).status = 'S' THEN
6004 	  p_tab_usec_gs(I).msg_from := NULL;
6005 	  p_tab_usec_gs(I).msg_to := NULL;
6006        ELSIF   p_tab_usec_gs(I).status = 'A' THEN
6007 	  p_tab_usec_gs(I).msg_from  :=  p_tab_usec_gs(I).msg_from + 1;
6008 	  p_tab_usec_gs(I).msg_to := fnd_msg_pub.count_msg;
6009        ELSE
6010           p_c_rec_status := p_tab_usec_gs(I).status;
6011           p_tab_usec_gs(I).msg_from := p_tab_usec_gs(I).msg_from+1;
6012           p_tab_usec_gs(I).msg_to := fnd_msg_pub.count_msg;
6013           IF p_tab_usec_gs(I).status = 'E' THEN
6014             RETURN;
6015           END IF;
6016        END IF;
6017 
6018      END IF;--exists
6019    END LOOP;
6020 
6021 	    /* Post Insert/Update Checks */
6022    IF NOT igs_ps_validate_lgcy_pkg.post_usec_grd_sch (p_tab_usec_gs,l_tbl_uoo) THEN
6023      p_c_rec_status := 'E';
6024    END IF;
6025    l_tbl_uoo.DELETE;
6026 
6027    IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6028      fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_grd_sch.after_import_status',p_c_rec_status);
6029    END IF;
6030 
6031 
6032  END create_usec_grd_sch;
6033 
6034  PROCEDURE create_usec_occur ( p_tab_usec_occur IN OUT NOCOPY igs_ps_generic_pub.uso_tbl_type,
6035                                 p_c_rec_status OUT NOCOPY VARCHAR2,
6036  			        p_calling_context  IN VARCHAR2) AS
6037 
6038   /***********************************************************************************************
6039     Created By     :  shtatiko
6040     Date Created By:  19-NOV-2002
6041     Purpose        :  This procedure is a sub process to insert records of Unit Section Occurrence.
6042 
6043     Known limitations,enhancements,remarks:
6044     Change History (in reverse chronological order)
6045     Who         When            What
6046     sommukhe    02-AUG-2006     Bug#5356402, Using a PL/SQl table l_tbl_uso to store USO that get inserted.
6047     sommukhe    27-APR-2006     Bug#5122473,Modified the cursor check_ovrd to include Date override check
6048                                 so that the Scheduling API considers Date Occurrence Override during import.
6049     sommukhe    27-SEP-2005     Bug #4632652.Used cursor c_build_id to derive Building id.
6050     smvk        25-jun-2003     Enh bug#2918094. Added column cancel_flag and its value will be 'N'
6051     jbegum      3-June-2003     Enh Bug#2972950
6052                                 For PSP Scheduling Enhancements TD:
6053                                 Modified the local procedure's validate_derivation,validate_db_cons.
6054   ********************************************************************************************** */
6055 
6056     l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
6057     l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
6058     l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
6059     l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
6060     l_n_uoo_id   igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
6061     l_n_uso_id   igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE;
6062     l_n_usec_occurs_id	igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE;
6063 
6064     l_n_building_code           igs_ps_usec_occurs_all.building_code%TYPE;
6065     l_n_dedicated_building_code igs_ps_usec_occurs_all.dedicated_building_code%TYPE;
6066     l_n_preferred_building_code igs_ps_usec_occurs_all.preferred_building_code%TYPE;
6067 
6068     l_n_room_code           igs_ps_usec_occurs_all.room_code%TYPE;
6069     l_n_dedicated_room_code igs_ps_usec_occurs_all.dedicated_room_code%TYPE;
6070     l_n_preferred_room_code igs_ps_usec_occurs_all.preferred_room_code%TYPE;
6071 
6072     l_c_schedule_status     igs_ps_usec_occurs_all.schedule_status%TYPE;
6073     l_notify_status         igs_ps_usec_occurs_all.notify_status%TYPE;
6074 
6075     l_insert_update VARCHAR2(1);
6076     l_n_tbl_cnt NUMBER;
6077 
6078 
6079 
6080     PROCEDURE trim_values ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type ) AS
6081     BEGIN
6082       p_uso_rec.unit_cd := trim(p_uso_rec.unit_cd);
6083       p_uso_rec.version_number := trim(p_uso_rec.version_number);
6084       p_uso_rec.teach_cal_alternate_code := trim(p_uso_rec.teach_cal_alternate_code);
6085       p_uso_rec.location_cd := trim(p_uso_rec.location_cd);
6086       p_uso_rec.unit_class := trim(p_uso_rec.unit_class);
6087       p_uso_rec.occurrence_identifier := trim(p_uso_rec.occurrence_identifier);
6088       p_uso_rec.to_be_announced     := trim(p_uso_rec.to_be_announced);
6089       p_uso_rec.monday := trim(p_uso_rec.monday);
6090       p_uso_rec.tuesday := trim(p_uso_rec.tuesday);
6091       p_uso_rec.wednesday := trim(p_uso_rec.wednesday);
6092       p_uso_rec.thursday := trim(p_uso_rec.thursday);
6093       p_uso_rec.friday := trim(p_uso_rec.friday);
6094       p_uso_rec.saturday := trim(p_uso_rec.saturday);
6095       p_uso_rec.sunday := trim(p_uso_rec.sunday);
6096       p_uso_rec.start_date := TRUNC(p_uso_rec.start_date);
6097       p_uso_rec.end_date := TRUNC(p_uso_rec.end_date);
6098       p_uso_rec.building_code := trim(p_uso_rec.building_code);
6099       p_uso_rec.room_code := trim(p_uso_rec.room_code);
6100       p_uso_rec.dedicated_building_code := trim(p_uso_rec.dedicated_building_code);
6101       p_uso_rec.dedicated_room_code := trim(p_uso_rec.dedicated_room_code);
6102       p_uso_rec.preferred_building_code := trim(p_uso_rec.preferred_building_code);
6103       p_uso_rec.preferred_room_code := trim(p_uso_rec.preferred_room_code);
6104       p_uso_rec.no_set_day_ind := trim(p_uso_rec.no_set_day_ind);
6105       p_uso_rec.preferred_region_code := trim(p_uso_rec.preferred_region_code);
6106       p_uso_rec.attribute_category := trim(p_uso_rec.attribute_category);
6107       p_uso_rec.attribute1 := trim(p_uso_rec.attribute1);
6108       p_uso_rec.attribute2 := trim(p_uso_rec.attribute2);
6109       p_uso_rec.attribute3 := trim(p_uso_rec.attribute3);
6110       p_uso_rec.attribute4 := trim(p_uso_rec.attribute4);
6111       p_uso_rec.attribute5 := trim(p_uso_rec.attribute5);
6112       p_uso_rec.attribute6 := trim(p_uso_rec.attribute6);
6113       p_uso_rec.attribute7 := trim(p_uso_rec.attribute7);
6114       p_uso_rec.attribute8 := trim(p_uso_rec.attribute8);
6115       p_uso_rec.attribute9 := trim(p_uso_rec.attribute9);
6116       p_uso_rec.attribute10 := trim(p_uso_rec.attribute10);
6117       p_uso_rec.attribute11 := trim(p_uso_rec.attribute11);
6118       p_uso_rec.attribute12 := trim(p_uso_rec.attribute12);
6119       p_uso_rec.attribute13 := trim(p_uso_rec.attribute13);
6120       p_uso_rec.attribute14 := trim(p_uso_rec.attribute14);
6121       p_uso_rec.attribute15 := trim(p_uso_rec.attribute15);
6122       p_uso_rec.attribute16 := trim(p_uso_rec.attribute16);
6123       p_uso_rec.attribute17 := trim(p_uso_rec.attribute17);
6124       p_uso_rec.attribute18 := trim(p_uso_rec.attribute18);
6125       p_uso_rec.attribute19 := trim(p_uso_rec.attribute19);
6126       p_uso_rec.attribute20 := trim(p_uso_rec.attribute20);
6127 
6128     END trim_values;
6129 
6130     /* Private Procedures for create_usec_occur */
6131     PROCEDURE validate_parameters ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type ) AS
6132     BEGIN
6133 
6134      /* Check for Mandatory Parameters */
6135       IF p_uso_rec.unit_cd IS NULL OR p_uso_rec.unit_cd = FND_API.G_MISS_CHAR THEN
6136         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
6137         p_uso_rec.status := 'E';
6138       END IF;
6139       IF p_uso_rec.version_number IS NULL OR p_uso_rec.version_number = FND_API.G_MISS_NUM THEN
6140         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VERSION', 'LEGACY_TOKENS', FALSE);
6141         p_uso_rec.status := 'E';
6142       END IF;
6143       IF p_uso_rec.teach_cal_alternate_code IS NULL OR p_uso_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
6144         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
6145         p_uso_rec.status := 'E';
6146       END IF;
6147       IF p_uso_rec.location_cd IS NULL  OR p_uso_rec.location_cd = FND_API.G_MISS_CHAR THEN
6148         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
6149         p_uso_rec.status := 'E';
6150       END IF;
6151       IF p_uso_rec.unit_class IS NULL OR p_uso_rec.unit_class = FND_API.G_MISS_CHAR THEN
6152         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
6153         p_uso_rec.status := 'E';
6154       END IF;
6155       IF p_uso_rec.occurrence_identifier IS NULL OR p_uso_rec.occurrence_identifier = FND_API.G_MISS_CHAR THEN
6156         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_OCCRS_ID', 'IGS_PS_LOG_PARAMETERS', FALSE);
6157         p_uso_rec.status := 'E';
6158       END IF;
6159 
6160     END validate_parameters;
6161 
6162     PROCEDURE validate_derivations ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type ) AS
6163 
6164     CURSOR c_bld_id ( cp_building_cd igs_ad_building_all.building_cd%TYPE,
6165                       cp_location_cd igs_ad_building_all.location_cd%TYPE ) IS
6166     SELECT building_id
6167     FROM igs_ad_building_all
6168     WHERE
6169       building_cd = cp_building_cd AND
6170       location_cd = cp_location_cd;
6171 
6172     CURSOR c_build_id ( cp_building_cd igs_ad_building_all.building_cd%TYPE) IS
6173     SELECT building_id
6174     FROM igs_ad_building_all
6175     WHERE building_cd = cp_building_cd;
6176 
6177     CURSOR c_room_id ( cp_building_id igs_ad_building_all.building_id%TYPE,
6178                        cp_room_cd igs_ad_room_all.room_cd%TYPE ) IS
6179     SELECT room_id
6180     FROM igs_ad_room_all
6181     WHERE
6182       room_cd = cp_room_cd AND
6183       building_id = cp_building_id;
6184 
6185     l_c_message  VARCHAR2(30);
6186 
6187     BEGIN
6188       l_c_message :=NULL;
6189 
6190       -- Derive Calander Type and Sequence Number
6191       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_uso_rec.teach_cal_alternate_code,
6192                                              p_cal_type           => l_c_cal_type,
6193                                              p_ci_sequence_number => l_n_seq_num,
6194                                              p_start_dt           => l_d_start_dt,
6195                                              p_end_dt             => l_d_end_dt,
6196                                              p_return_status      => l_c_message );
6197       IF ( l_c_message <> 'SINGLE' ) THEN
6198         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
6199         p_uso_rec.status := 'E';
6200       END IF;
6201 
6202       l_c_message :=NULL;
6203 
6204       -- Derive uoo_id
6205       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_uso_rec.unit_cd,
6206                                             p_ver_num    => p_uso_rec.version_number,
6207                                             p_cal_type   => l_c_cal_type,
6208                                             p_seq_num    => l_n_seq_num,
6209                                             p_loc_cd     => p_uso_rec.location_cd,
6210                                             p_unit_class => p_uso_rec.unit_class,
6211                                             p_uoo_id     => l_n_uoo_id,
6212                                             p_message    => l_c_message );
6213       IF ( l_c_message IS NOT NULL ) THEN
6214         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
6215         p_uso_rec.status := 'E';
6216       END IF;
6217 
6218       -- Derive Building Identifier and associated Room Identifier.
6219       IF p_uso_rec.building_code IS NOT NULL AND p_uso_rec.building_code <> FND_API.G_MISS_CHAR THEN
6220         OPEN c_build_id ( p_uso_rec.building_code);
6221         FETCH c_build_id INTO l_n_building_code;
6222         IF ( c_build_id%NOTFOUND ) THEN
6223           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
6224             p_uso_rec.status := 'E';
6225         END IF;
6226         CLOSE c_build_id;
6227 
6228         -- Derive Room Identifier
6229         IF p_uso_rec.room_code IS NOT NULL AND p_uso_rec.room_code <> FND_API.G_MISS_CHAR THEN
6230           OPEN c_room_id ( l_n_building_code, p_uso_rec.room_code );
6231           FETCH c_room_id INTO l_n_room_code;
6232           IF ( c_room_id%NOTFOUND ) THEN
6233             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
6234               p_uso_rec.status := 'E';
6235           END IF;
6236           CLOSE c_room_id;
6237         END IF;
6238       END IF;
6239 
6240       -- Derive Dedicated Building Identifier associated Room Identifier
6241       IF p_uso_rec.dedicated_building_code IS NOT NULL AND p_uso_rec.dedicated_building_code <> FND_API.G_MISS_CHAR THEN
6242         OPEN c_bld_id ( p_uso_rec.dedicated_building_code, p_uso_rec.location_cd );
6243         FETCH c_bld_id INTO l_n_dedicated_building_code;
6244         IF ( c_bld_id%NOTFOUND ) THEN
6245           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('DEDICATED', 'LEGACY_TOKENS') || ' ' ||
6246                                            igs_ps_validate_lgcy_pkg.get_lkup_meaning('BUILDING_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6247           p_uso_rec.status := 'E';
6248         END IF;
6249         CLOSE c_bld_id;
6250 
6251         -- Derive Dedicated Room Identifier
6252         IF p_uso_rec.dedicated_room_code IS NOT NULL AND p_uso_rec.dedicated_room_code <> FND_API.G_MISS_CHAR THEN
6253           OPEN c_room_id ( l_n_dedicated_building_code, p_uso_rec.dedicated_room_code );
6254           FETCH c_room_id INTO l_n_dedicated_room_code;
6255           IF ( c_room_id%NOTFOUND ) THEN
6256             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('DEDICATED', 'LEGACY_TOKENS') || ' ' ||
6257                                              igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6258             p_uso_rec.status := 'E';
6259           END IF;
6260           CLOSE c_room_id;
6261         END IF;
6262       END IF;
6263 
6264       -- Derive Preferred Building Identifier
6265       IF p_uso_rec.preferred_building_code IS NOT NULL AND p_uso_rec.preferred_building_code <> FND_API.G_MISS_CHAR THEN
6266         OPEN c_bld_id ( p_uso_rec.preferred_building_code, p_uso_rec.location_cd );
6267         FETCH c_bld_id INTO l_n_preferred_building_code;
6268         IF ( c_bld_id%NOTFOUND ) THEN
6269           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('PREFERRED', 'LEGACY_TOKENS') || ' ' ||
6270                                             igs_ps_validate_lgcy_pkg.get_lkup_meaning('BUILDING_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6271           p_uso_rec.status := 'E';
6272         END IF;
6273         CLOSE c_bld_id;
6274 
6275         -- Derive Preferred Room Identifier
6276         IF p_uso_rec.preferred_room_code IS NOT NULL AND p_uso_rec.preferred_room_code <> FND_API.G_MISS_CHAR THEN
6277           OPEN c_room_id ( l_n_preferred_building_code, p_uso_rec.preferred_room_code );
6278           FETCH c_room_id INTO l_n_preferred_room_code;
6279           IF ( c_room_id%NOTFOUND ) THEN
6280             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('PREFERRED', 'LEGACY_TOKENS') || ' ' ||
6281                                              igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6282             p_uso_rec.status := 'E';
6283           END IF;
6284           CLOSE c_room_id;
6285         END IF;
6286       END IF;
6287 
6288 
6289     END validate_derivations;
6290 
6291     -- Validate Database Constraints
6292     PROCEDURE validate_db_cons ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type,p_insert IN VARCHAR2 ) AS
6293     BEGIN
6294 
6295     /* Validate Check Constraints */
6296 
6297       -- Following validation added as part of bug#2972950 for the PSP Scheduling Enhancements TD
6298       -- If No Set Day Indicator is not NULL then it should have a value of either of 'Y' or 'N'
6299       BEGIN
6300         igs_ps_usec_occurs_pkg.check_constraints ( 'NO_SET_DAY_IND', p_uso_rec.no_set_day_ind );
6301       EXCEPTION
6302         WHEN OTHERS THEN
6303           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'NO_SET_DAY_IND', 'LEGACY_TOKENS', TRUE);
6304           p_uso_rec.status := 'E';
6305       END;
6306 
6307       BEGIN
6308         igs_ps_usec_occurs_pkg.check_constraints ( 'TO_BE_ANNOUNCED', p_uso_rec.to_be_announced );
6309       EXCEPTION
6310         WHEN OTHERS THEN
6311           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'TO_BE_ANNOUNCED', 'LEGACY_TOKENS', TRUE);
6312           p_uso_rec.status := 'E';
6313       END;
6314 
6315       BEGIN
6316         igs_ps_usec_occurs_pkg.check_constraints ( 'MONDAY', p_uso_rec.monday );
6317       EXCEPTION
6318         WHEN OTHERS THEN
6319           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'MONDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6320           p_uso_rec.status := 'E';
6321       END;
6322 
6323       BEGIN
6324         igs_ps_usec_occurs_pkg.check_constraints ( 'TUESDAY', p_uso_rec.tuesday );
6325       EXCEPTION
6326         WHEN OTHERS THEN
6327           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'TUESDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6328           p_uso_rec.status := 'E';
6329       END;
6330 
6331       BEGIN
6332         igs_ps_usec_occurs_pkg.check_constraints ( 'WEDNESDAY', p_uso_rec.wednesday );
6333       EXCEPTION
6334         WHEN OTHERS THEN
6335           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'WEDNESDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6336           p_uso_rec.status := 'E';
6337       END;
6338 
6339       BEGIN
6340         igs_ps_usec_occurs_pkg.check_constraints ( 'THURSDAY', p_uso_rec.thursday );
6341       EXCEPTION
6342         WHEN OTHERS THEN
6343           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'THURSDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6344           p_uso_rec.status := 'E';
6345       END;
6346 
6347       BEGIN
6348         igs_ps_usec_occurs_pkg.check_constraints ( 'FRIDAY', p_uso_rec.friday );
6349       EXCEPTION
6350         WHEN OTHERS THEN
6351           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'FRIDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6352           p_uso_rec.status := 'E';
6353       END;
6354 
6355       BEGIN
6356         igs_ps_usec_occurs_pkg.check_constraints ( 'SATURDAY', p_uso_rec.saturday );
6357       EXCEPTION
6358         WHEN OTHERS THEN
6359           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'SATURDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6360           p_uso_rec.status := 'E';
6361       END;
6362 
6363       BEGIN
6364         igs_ps_usec_occurs_pkg.check_constraints ( 'SUNDAY', p_uso_rec.sunday );
6365       EXCEPTION
6366         WHEN OTHERS THEN
6367           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'SUNDAY', 'DT_OFFSET_CONSTRAINT_TYPE', TRUE);
6368           p_uso_rec.status := 'E';
6369       END;
6370 
6371 
6372       IF p_insert = 'I' THEN
6373 	/* Unique Key Validation */
6374 	IF igs_ps_usec_occurs_pkg.get_uk_for_validation ( x_uoo_id => l_n_uoo_id ,
6375 							  x_occurrence_identifier => p_uso_rec.occurrence_identifier
6376 							 ) THEN
6377 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_OCCRS_ID', 'IGS_PS_LOG_PARAMETERS', FALSE);
6378 	  p_uso_rec.status := 'W';
6379 	  RETURN;
6380 	END IF;
6381       END IF;
6382 
6383       /* Validate FK Constraints */
6384 
6385       -- Check for the existence of Unit Section
6386       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
6387         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
6388         p_uso_rec.status := 'E';
6389       END IF;
6390 
6391       -- Check for the existence of Buildings, if their codes are passed
6392       IF l_n_building_code IS NOT NULL THEN
6393         IF NOT igs_ad_building_pkg.get_pk_for_validation ( l_n_building_code ) THEN
6394           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
6395           p_uso_rec.status := 'E';
6396         END IF;
6397       END IF;
6398 
6399       IF  l_n_dedicated_building_code  IS NOT NULL THEN
6400         IF NOT igs_ad_building_pkg.get_pk_for_validation ( l_n_dedicated_building_code ) THEN
6401           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', igs_ps_validate_lgcy_pkg.get_lkup_meaning('DEDICATED', 'LEGACY_TOKENS') || ' ' ||
6402                                             igs_ps_validate_lgcy_pkg.get_lkup_meaning('BUILDING_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6403           p_uso_rec.status := 'E';
6404         END IF;
6405       END IF;
6406 
6407       IF  l_n_preferred_building_code  IS NOT NULL THEN
6408         IF NOT igs_ad_building_pkg.get_pk_for_validation ( l_n_preferred_building_code ) THEN
6409           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', igs_ps_validate_lgcy_pkg.get_lkup_meaning('PREFERRED', 'LEGACY_TOKENS') || ' ' ||
6410                                             igs_ps_validate_lgcy_pkg.get_lkup_meaning('BUILDING_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6411           p_uso_rec.status := 'E';
6412         END IF;
6413       END IF;
6414 
6415       -- Check for the existence of Rooms, if their codes are passed
6416       IF  l_n_room_code IS NOT NULL THEN
6417         IF NOT igs_ad_room_pkg.get_pk_for_validation ( l_n_room_code ) THEN
6418           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
6419           p_uso_rec.status := 'E';
6420         END IF;
6421       END IF;
6422 
6423       IF  l_n_dedicated_room_code IS NOT NULL THEN
6424         IF NOT igs_ad_room_pkg.get_pk_for_validation ( l_n_dedicated_room_code ) THEN
6425           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', igs_ps_validate_lgcy_pkg.get_lkup_meaning('DEDICATED', 'LEGACY_TOKENS') || ' ' ||
6426                                             igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6427           p_uso_rec.status := 'E';
6428         END IF;
6429       END IF;
6430 
6431       IF  l_n_preferred_room_code IS NOT NULL THEN
6432         IF NOT igs_ad_room_pkg.get_pk_for_validation ( l_n_preferred_room_code ) THEN
6433           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', igs_ps_validate_lgcy_pkg.get_lkup_meaning('PREFERRED', 'LEGACY_TOKENS') || ' ' ||
6434                                             igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6435           p_uso_rec.status := 'E';
6436         END IF;
6437       END IF;
6438 
6439       -- Following validation added as part of bug#2972950 for the PSP Scheduling Enhancements TD
6440       -- If preferred region code is not NULL check it has a valid value
6441       IF p_uso_rec.preferred_region_code IS NOT NULL THEN
6442         IF NOT igs_lookups_view_pkg.get_pk_for_validation ('IGS_OR_LOC_REGION',p_uso_rec.preferred_region_code) THEN
6443           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','PREFERRED_REGION_CODE','LEGACY_TOKENS',FALSE);
6444           p_uso_rec.status := 'E';
6445         ELSIF NOT igs_or_loc_region_pkg.get_pk_for_validation(p_uso_rec.location_cd,p_uso_rec.preferred_region_code) THEN
6446           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','PREFERRED_REGION_CODE','LEGACY_TOKENS',FALSE);
6447           p_uso_rec.status := 'E';
6448         END IF;
6449       END IF;
6450 
6451     END validate_db_cons;
6452 
6453 ---
6454     -- Check for Update/Insert
6455     FUNCTION check_insert_update ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type ) RETURN VARCHAR2 IS
6456 
6457       CURSOR c_occr IS
6458       SELECT unit_section_occurrence_id
6459       FROM  igs_ps_usec_occurs_all
6460       WHERE uoo_id = l_n_uoo_id
6461       AND   occurrence_identifier=p_uso_rec.occurrence_identifier;
6462 
6463       l_c_occr c_occr%ROWTYPE;
6464 
6465     BEGIN
6466 
6467        OPEN c_occr;
6468        FETCH c_occr INTO l_c_occr;
6469        IF c_occr%FOUND THEN
6470 	 CLOSE c_occr;
6471 	 l_n_uso_id := l_c_occr.unit_section_occurrence_id;
6472 	 RETURN 'U';
6473        ELSE
6474 	 CLOSE c_occr;
6475 	 RETURN 'I';
6476        END IF;
6477 
6478     END check_insert_update;
6479 
6480     PROCEDURE assign_defaults ( p_uso_rec IN OUT NOCOPY igs_ps_generic_pub.uso_rec_type, p_insert IN VARCHAR2) IS
6481      CURSOR cur_usec_ocurs ( cp_uso_id IN NUMBER) IS
6482      SELECT *
6483      FROM   igs_ps_usec_occurs_all
6484      WHERE  unit_section_occurrence_id = cp_uso_id;
6485      l_cur_usec_ocurs cur_usec_ocurs%ROWTYPE;
6486 
6487       CURSOR cur_room (cp_building_id IN NUMBER, cp_room_cd IN VARCHAR2) IS
6488       SELECT room_id
6489       FROM igs_ad_room
6490       WHERE room_cd=cp_room_cd
6491       AND   building_id=cp_building_id;
6492 
6493     BEGIN
6494       IF p_insert = 'I' THEN
6495 
6496 
6497 	-- If To Be Announced is Null then default it to 'N'
6498 	IF ( p_uso_rec.to_be_announced IS NULL ) THEN
6499 	  p_uso_rec.to_be_announced := 'N';
6500 	END IF;
6501 
6502 	-- Similarly default days to 'N', if they are NULL.
6503 	IF ( p_uso_rec.monday IS NULL ) THEN
6504 	  p_uso_rec.monday := 'N';
6505 	END IF;
6506 
6507 	IF ( p_uso_rec.tuesday IS NULL ) THEN
6508 	  p_uso_rec.tuesday := 'N';
6509 	END IF;
6510 
6511 	IF ( p_uso_rec.wednesday IS NULL ) THEN
6512 	  p_uso_rec.wednesday := 'N';
6513 	END IF;
6514 
6515 	IF ( p_uso_rec.thursday IS NULL ) THEN
6516 	  p_uso_rec.thursday := 'N';
6517 	END IF;
6518 
6519 	IF ( p_uso_rec.friday IS NULL ) THEN
6520 	  p_uso_rec.friday := 'N';
6521 	END IF;
6522 
6523 	IF ( p_uso_rec.saturday IS NULL ) THEN
6524 	  p_uso_rec.saturday := 'N';
6525 	END IF;
6526 
6527 	IF ( p_uso_rec.sunday IS NULL ) THEN
6528 	  p_uso_rec.sunday := 'N';
6529 	END IF;
6530 
6531 	-- Following validation added as part of bug#2972950 for the PSP Scheduling Enhancements TD
6532 	-- If No Set Day Indicator is NULL then default it to 'N'
6533 	IF p_uso_rec.no_set_day_ind IS NULL THEN
6534 	   p_uso_rec.no_set_day_ind := 'N';
6535 	END IF;
6536 
6537 	-- Derive schedule status depending on values of building_code/room_code
6538 	IF p_uso_rec.building_code IS NOT NULL THEN
6539 	  l_c_schedule_status     := 'SCHEDULED';
6540 	ELSE
6541 	  l_c_schedule_status     := NULL;
6542 	END IF;
6543 
6544       ELSE
6545 
6546 	OPEN cur_usec_ocurs(l_n_uso_id);
6547 	FETCH cur_usec_ocurs INTO l_cur_usec_ocurs;
6548 	CLOSE cur_usec_ocurs;
6549 
6550 	IF ( p_uso_rec.to_be_announced IS NULL ) THEN
6551 	  p_uso_rec.to_be_announced := l_cur_usec_ocurs.to_be_announced;
6552         ELSIF p_uso_rec.to_be_announced = FND_API.G_MISS_CHAR THEN
6553 	  p_uso_rec.to_be_announced := 'N';
6554 	END IF;
6555 
6556 	-- Similarly default days to 'N', if they are NULL.
6557 	IF ( p_uso_rec.monday IS NULL ) THEN
6558 	  p_uso_rec.monday := l_cur_usec_ocurs.monday;
6559         ELSIF p_uso_rec.monday = FND_API.G_MISS_CHAR THEN
6560 	  p_uso_rec.monday := 'N';
6561 	END IF;
6562 
6563 	IF ( p_uso_rec.tuesday IS NULL ) THEN
6564 	  p_uso_rec.tuesday := l_cur_usec_ocurs.tuesday;
6565         ELSIF  p_uso_rec.tuesday = FND_API.G_MISS_CHAR THEN
6566 	  p_uso_rec.tuesday := 'N';
6567 	END IF;
6568 
6569 	IF ( p_uso_rec.wednesday IS NULL ) THEN
6570 	  p_uso_rec.wednesday := l_cur_usec_ocurs.wednesday;
6571         ELSIF  p_uso_rec.wednesday = FND_API.G_MISS_CHAR THEN
6572 	  p_uso_rec.wednesday := 'N';
6573 	END IF;
6574 
6575 	IF ( p_uso_rec.thursday IS NULL ) THEN
6576 	  p_uso_rec.thursday := l_cur_usec_ocurs.thursday;
6577         ELSIF  p_uso_rec.thursday = FND_API.G_MISS_CHAR THEN
6578 	  p_uso_rec.thursday := 'N';
6579 	END IF;
6580 
6581 	IF ( p_uso_rec.friday IS NULL ) THEN
6582 	  p_uso_rec.friday := l_cur_usec_ocurs.friday;
6583         ELSIF  p_uso_rec.friday = FND_API.G_MISS_CHAR THEN
6584 	  p_uso_rec.friday := 'N';
6585 	END IF;
6586 
6587 	IF ( p_uso_rec.saturday IS NULL ) THEN
6588 	  p_uso_rec.saturday := l_cur_usec_ocurs.saturday;
6589         ELSIF  p_uso_rec.saturday = FND_API.G_MISS_CHAR THEN
6590 	  p_uso_rec.saturday := 'N';
6591 	END IF;
6592 
6593 
6594 	IF ( p_uso_rec.sunday IS NULL ) THEN
6595 	  p_uso_rec.sunday := l_cur_usec_ocurs.sunday;
6596         ELSIF  p_uso_rec.sunday = FND_API.G_MISS_CHAR THEN
6597 	  p_uso_rec.sunday := 'N';
6598 	END IF;
6599 
6600 
6601 	IF p_uso_rec.no_set_day_ind IS NULL THEN
6602 	   p_uso_rec.no_set_day_ind := l_cur_usec_ocurs.no_set_day_ind;
6603         ELSIF  p_uso_rec.no_set_day_ind = FND_API.G_MISS_CHAR THEN
6604 	  p_uso_rec.no_set_day_ind := 'N';
6605 	END IF;
6606 
6607 
6608 	IF p_uso_rec.attribute_category IS NULL THEN
6609 	   p_uso_rec.attribute_category := l_cur_usec_ocurs.attribute_category;
6610         ELSIF  p_uso_rec.attribute_category = FND_API.G_MISS_CHAR THEN
6611 	  p_uso_rec.attribute_category := NULL;
6612 	END IF;
6613 
6614 
6615 	IF p_uso_rec.attribute1 IS NULL THEN
6616 	   p_uso_rec.attribute1 := l_cur_usec_ocurs.attribute1;
6617         ELSIF  p_uso_rec.attribute1 = FND_API.G_MISS_CHAR THEN
6618 	  p_uso_rec.attribute1 := NULL;
6619 	END IF;
6620 
6621 
6622 	IF p_uso_rec.attribute2 IS NULL THEN
6623 	   p_uso_rec.attribute2 := l_cur_usec_ocurs.attribute2;
6624         ELSIF  p_uso_rec.attribute2 = FND_API.G_MISS_CHAR THEN
6625 	  p_uso_rec.attribute2 := NULL;
6626 	END IF;
6627 
6628 
6629 	IF p_uso_rec.attribute3 IS NULL THEN
6630 	   p_uso_rec.attribute3 := l_cur_usec_ocurs.attribute3;
6631         ELSIF  p_uso_rec.attribute3 = FND_API.G_MISS_CHAR THEN
6632 	  p_uso_rec.attribute3 := NULL;
6633 	END IF;
6634 
6635 	IF p_uso_rec.attribute4 IS NULL THEN
6636 	   p_uso_rec.attribute4 := l_cur_usec_ocurs.attribute4;
6637         ELSIF  p_uso_rec.attribute4 = FND_API.G_MISS_CHAR THEN
6638 	  p_uso_rec.attribute4 := NULL;
6639 	END IF;
6640 
6641 	IF p_uso_rec.attribute5 IS NULL THEN
6642 	   p_uso_rec.attribute5 := l_cur_usec_ocurs.attribute5;
6643         ELSIF  p_uso_rec.attribute5 = FND_API.G_MISS_CHAR THEN
6644 	  p_uso_rec.attribute5 := NULL;
6645 	END IF;
6646 
6647 
6648 	IF p_uso_rec.attribute6 IS NULL THEN
6649 	   p_uso_rec.attribute6 := l_cur_usec_ocurs.attribute6;
6650         ELSIF  p_uso_rec.attribute6 = FND_API.G_MISS_CHAR THEN
6651 	  p_uso_rec.attribute6 := NULL;
6652 	END IF;
6653 
6654 
6655 	IF p_uso_rec.attribute7 IS NULL THEN
6656 	   p_uso_rec.attribute7 := l_cur_usec_ocurs.attribute7;
6657         ELSIF  p_uso_rec.attribute7 = FND_API.G_MISS_CHAR THEN
6658 	  p_uso_rec.attribute7 := NULL;
6659 	END IF;
6660 
6661 
6662 	IF p_uso_rec.attribute8 IS NULL THEN
6663 	   p_uso_rec.attribute8 := l_cur_usec_ocurs.attribute8;
6664         ELSIF  p_uso_rec.attribute8 = FND_API.G_MISS_CHAR THEN
6665 	  p_uso_rec.attribute8 := NULL;
6666 	END IF;
6667 
6668 
6669 	IF p_uso_rec.attribute9 IS NULL THEN
6670 	   p_uso_rec.attribute9 := l_cur_usec_ocurs.attribute9;
6671         ELSIF  p_uso_rec.attribute9 = FND_API.G_MISS_CHAR THEN
6672 	  p_uso_rec.attribute9 := NULL;
6673 	END IF;
6674 
6675 
6676 	IF p_uso_rec.attribute10 IS NULL THEN
6677 	   p_uso_rec.attribute10 := l_cur_usec_ocurs.attribute10;
6678         ELSIF  p_uso_rec.attribute10 = FND_API.G_MISS_CHAR THEN
6679 	  p_uso_rec.attribute10 := NULL;
6680 	END IF;
6681 
6682 
6683 	IF p_uso_rec.attribute11 IS NULL THEN
6684 	   p_uso_rec.attribute11 := l_cur_usec_ocurs.attribute11;
6685         ELSIF  p_uso_rec.attribute11 = FND_API.G_MISS_CHAR THEN
6686 	  p_uso_rec.attribute11 := NULL;
6687 	END IF;
6688 
6689 
6690 	IF p_uso_rec.attribute12 IS NULL THEN
6691 	   p_uso_rec.attribute12 := l_cur_usec_ocurs.attribute12;
6692         ELSIF  p_uso_rec.attribute12 = FND_API.G_MISS_CHAR THEN
6693 	  p_uso_rec.attribute12 := NULL;
6694 	END IF;
6695 
6696 
6697 	IF p_uso_rec.attribute13 IS NULL THEN
6698 	   p_uso_rec.attribute13 := l_cur_usec_ocurs.attribute13;
6699         ELSIF  p_uso_rec.attribute13 = FND_API.G_MISS_CHAR THEN
6700 	  p_uso_rec.attribute13 := NULL;
6701 	END IF;
6702 
6703 
6704 	IF p_uso_rec.attribute14 IS NULL THEN
6705 	   p_uso_rec.attribute14 := l_cur_usec_ocurs.attribute14;
6706         ELSIF  p_uso_rec.attribute14 = FND_API.G_MISS_CHAR THEN
6707 	  p_uso_rec.attribute14 := NULL;
6708 	END IF;
6709 
6710 	IF p_uso_rec.attribute15 IS NULL THEN
6711 	   p_uso_rec.attribute15 := l_cur_usec_ocurs.attribute15;
6712         ELSIF  p_uso_rec.attribute15 = FND_API.G_MISS_CHAR THEN
6713 	  p_uso_rec.attribute15 := NULL;
6714 	END IF;
6715 
6716 
6717 	IF p_uso_rec.attribute16 IS NULL THEN
6718 	   p_uso_rec.attribute16 := l_cur_usec_ocurs.attribute16;
6719         ELSIF  p_uso_rec.attribute16 = FND_API.G_MISS_CHAR THEN
6720 	  p_uso_rec.attribute16 := NULL;
6721 	END IF;
6722 
6723 	IF p_uso_rec.attribute17 IS NULL THEN
6724 	   p_uso_rec.attribute17 := l_cur_usec_ocurs.attribute17;
6725         ELSIF  p_uso_rec.attribute17 = FND_API.G_MISS_CHAR THEN
6726 	  p_uso_rec.attribute17 := NULL;
6727 	END IF;
6728 
6729 	IF p_uso_rec.attribute18 IS NULL THEN
6730 	   p_uso_rec.attribute18 := l_cur_usec_ocurs.attribute18;
6731         ELSIF  p_uso_rec.attribute18 = FND_API.G_MISS_CHAR THEN
6732 	  p_uso_rec.attribute18 := NULL;
6733 	END IF;
6734 
6735 	IF p_uso_rec.attribute19 IS NULL THEN
6736 	   p_uso_rec.attribute19 := l_cur_usec_ocurs.attribute19;
6737         ELSIF  p_uso_rec.attribute19 = FND_API.G_MISS_CHAR THEN
6738 	  p_uso_rec.attribute19 := NULL;
6739 	END IF;
6740 
6741 
6742 	IF p_uso_rec.attribute20 IS NULL THEN
6743 	   p_uso_rec.attribute20 := l_cur_usec_ocurs.attribute20;
6744         ELSIF  p_uso_rec.attribute20 = FND_API.G_MISS_CHAR THEN
6745 	  p_uso_rec.attribute20 := NULL;
6746 	END IF;
6747 
6748 
6749 	IF p_uso_rec.start_time IS NULL THEN
6750 	   p_uso_rec.start_time := l_cur_usec_ocurs.start_time;
6751         ELSIF  p_uso_rec.start_time = FND_API.G_MISS_DATE THEN
6752 	  p_uso_rec.start_time := NULL;
6753 	END IF;
6754 
6755 
6756 	IF p_uso_rec.end_time IS NULL THEN
6757 	   p_uso_rec.end_time := l_cur_usec_ocurs.end_time;
6758         ELSIF  p_uso_rec.end_time = FND_API.G_MISS_DATE THEN
6759 	  p_uso_rec.end_time := NULL;
6760 	END IF;
6761 
6762 
6763 	IF p_uso_rec.building_code IS NULL THEN
6764 	  l_n_building_code := l_cur_usec_ocurs.building_code;
6765         ELSIF  p_uso_rec.building_code = FND_API.G_MISS_CHAR THEN
6766 	  l_n_building_code := NULL;
6767 	END IF;
6768 
6769 	IF p_uso_rec.room_code IS NULL THEN
6770 	   l_n_room_code := l_cur_usec_ocurs.room_code;
6771         ELSIF  p_uso_rec.room_code = FND_API.G_MISS_CHAR THEN
6772 	  l_n_room_code := NULL;
6773         ELSIF p_uso_rec.room_code IS NOT NULL THEN
6774 
6775           OPEN cur_room(l_n_building_code,p_uso_rec.room_code);
6776 	  FETCH cur_room INTO l_n_room_code;
6777 	  IF cur_room%NOTFOUND THEN
6778             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
6779             p_uso_rec.status := 'E';
6780 	  END IF;
6781           CLOSE cur_room;
6782 	END IF;
6783 
6784 
6785 	IF p_uso_rec.dedicated_building_code IS NULL THEN
6786 	   l_n_dedicated_building_code := l_cur_usec_ocurs.dedicated_building_code;
6787         ELSIF  p_uso_rec.dedicated_building_code = FND_API.G_MISS_CHAR THEN
6788 	  l_n_dedicated_building_code := NULL;
6789 	END IF;
6790 
6791 
6792 	IF p_uso_rec.dedicated_room_code IS NULL THEN
6793 	   l_n_dedicated_room_code := l_cur_usec_ocurs.dedicated_room_code;
6794         ELSIF  p_uso_rec.dedicated_room_code = FND_API.G_MISS_CHAR THEN
6795 	  l_n_dedicated_room_code := NULL;
6796         ELSIF p_uso_rec.dedicated_room_code IS NOT NULL THEN
6797           OPEN cur_room(l_n_dedicated_building_code,p_uso_rec.dedicated_room_code);
6798 	  FETCH cur_room INTO l_n_dedicated_room_code;
6799 	  IF cur_room%NOTFOUND THEN
6800             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('DEDICATED', 'LEGACY_TOKENS') || ' ' ||
6801                                              igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6802             p_uso_rec.status := 'E';
6803 	  END IF;
6804           CLOSE cur_room;
6805 	END IF;
6806 
6807 	IF p_uso_rec.preferred_building_code IS NULL THEN
6808 	   l_n_preferred_building_code := l_cur_usec_ocurs.preferred_building_code;
6809         ELSIF  p_uso_rec.preferred_building_code = FND_API.G_MISS_CHAR THEN
6810 	  l_n_preferred_building_code := NULL;
6811 	END IF;
6812 
6813 
6814 	IF p_uso_rec.preferred_room_code IS NULL THEN
6815 	   l_n_preferred_room_code := l_cur_usec_ocurs.preferred_room_code;
6816         ELSIF  p_uso_rec.preferred_room_code = FND_API.G_MISS_CHAR THEN
6817 	  l_n_preferred_room_code := NULL;
6818         ELSIF p_uso_rec.preferred_room_code IS NOT NULL THEN
6819           OPEN cur_room(l_n_preferred_building_code,p_uso_rec.preferred_room_code);
6820 	  FETCH cur_room INTO l_n_preferred_room_code;
6821 	  IF cur_room%NOTFOUND THEN
6822             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', igs_ps_validate_lgcy_pkg.get_lkup_meaning('PREFERRED', 'LEGACY_TOKENS') || ' ' ||
6823                                              igs_ps_validate_lgcy_pkg.get_lkup_meaning('ROOM_CODE', 'LEGACY_TOKENS'), NULL, FALSE);
6824             p_uso_rec.status := 'E';
6825 	  END IF;
6826           CLOSE cur_room;
6827 	END IF;
6828 
6829 
6830 	IF p_uso_rec.start_date IS NULL THEN
6831 	   p_uso_rec.start_date := l_cur_usec_ocurs.start_date;
6832         ELSIF  p_uso_rec.start_date = FND_API.G_MISS_DATE THEN
6833 	  p_uso_rec.start_date := NULL;
6834 	END IF;
6835 
6836 
6837 	IF p_uso_rec.end_date IS NULL THEN
6838 	   p_uso_rec.end_date := l_cur_usec_ocurs.end_date;
6839         ELSIF  p_uso_rec.end_date = FND_API.G_MISS_DATE THEN
6840 	  p_uso_rec.end_date := NULL;
6841 	END IF;
6842 
6843 
6844 	IF p_uso_rec.preferred_region_code IS NULL THEN
6845 	   p_uso_rec.preferred_region_code := l_cur_usec_ocurs.preferred_region_code;
6846         ELSIF  p_uso_rec.preferred_region_code = FND_API.G_MISS_CHAR THEN
6847 	  p_uso_rec.preferred_region_code := NULL;
6848 	END IF;
6849 
6850         --Set the  schedule status.
6851 	IF l_cur_usec_ocurs.schedule_status IN ('ERROR','TBA','PROCESSING') AND l_n_building_code IS NOT NULL THEN
6852 	    l_c_schedule_status := 'SCHEDULED';
6853 	END IF;
6854 
6855 
6856       END IF;
6857 
6858     END assign_defaults;
6859 ----
6860 
6861 
6862   /* Main Unit Section Occurrence Sub Process */
6863   BEGIN
6864 
6865     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6866       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.start_logging_for','Unit Section Occurrence');
6867     END IF;
6868 
6869     p_c_rec_status := 'S';
6870     FOR I in 1..p_tab_usec_occur.LAST LOOP
6871       IF p_tab_usec_occur.EXISTS(I) THEN
6872         --Initialize all variables
6873 	l_c_cal_type                :=NULL;
6874 	l_n_seq_num                 :=NULL;
6875 	l_d_start_dt                :=NULL;
6876 	l_d_end_dt                  :=NULL;
6877 	l_n_uoo_id                  :=NULL;
6878 	l_n_uso_id                  :=NULL;
6879 	l_n_building_code           :=NULL;
6880 	l_n_dedicated_building_code :=NULL;
6881 	l_n_preferred_building_code :=NULL;
6882 	l_n_room_code               :=NULL;
6883 	l_n_dedicated_room_code     :=NULL;
6884 	l_n_preferred_room_code     :=NULL;
6885 	l_c_schedule_status         :=NULL;
6886         l_notify_status :=NULL;
6887 
6888 
6889 	p_tab_usec_occur(I).status := 'S';
6890         p_tab_usec_occur(I).msg_from := fnd_msg_pub.count_msg;
6891         trim_values(p_tab_usec_occur(I) );
6892         validate_parameters ( p_tab_usec_occur(I) );
6893 
6894 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6895           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_validate_parameters',
6896 	  'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6897 	  ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6898 	  p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6899 	  'Status:'||p_tab_usec_occur(I).status);
6900         END IF;
6901 
6902         --Only derivation no defaulting
6903 	IF p_tab_usec_occur(I).status = 'S' THEN
6904 	  validate_derivations ( p_tab_usec_occur(I));
6905 
6906 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6907             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_validate_derivations',
6908 	    'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6909 	    ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6910 	    p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6911 	    'Status:'||p_tab_usec_occur(I).status);
6912           END IF;
6913 
6914 	END IF;
6915 
6916 	--Find out whether it is insert/update of record
6917 	l_insert_update:='I';
6918 	IF p_tab_usec_occur(I).status = 'S' AND p_calling_context IN ('G','S') THEN
6919 	  l_insert_update:= check_insert_update(p_tab_usec_occur(I));
6920 
6921 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6922             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_check_insert_update',
6923 	    'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6924 	    ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6925 	    p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6926 	    'Status:'||p_tab_usec_occur(I).status);
6927           END IF;
6928 
6929 	END IF;
6930 
6931 	-- Find out whether record can go for import in context of cancelled/aborted
6932         IF  p_tab_usec_occur(I).status = 'S' AND p_calling_context ='S' THEN
6933 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,l_n_uso_id) = FALSE THEN
6934             fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
6935             fnd_msg_pub.add;
6936             p_tab_usec_occur(I).status := 'A';
6937 	  END IF;
6938 
6939 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6940              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_check_import_allowed',
6941 	     'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6942 	     ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6943 	     p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6944 	     'Status:'||p_tab_usec_occur(I).status);
6945           END IF;
6946 
6947         END IF;
6948 
6949         --Defaulting depending upon insert or update
6950 	IF p_tab_usec_occur(I).status = 'S' THEN
6951 	  assign_defaults(p_tab_usec_occur(I),l_insert_update);
6952 
6953 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6954              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_assign_defaults',
6955 	     'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6956 	     ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6957 	     p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6958 	     'Status:'||p_tab_usec_occur(I).status);
6959           END IF;
6960 
6961 	END IF;
6962 
6963 	IF p_tab_usec_occur(I).status = 'S' THEN
6964 	  validate_db_cons ( p_tab_usec_occur(I),l_insert_update);
6965 
6966           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6967              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_validate_db_cons',
6968 	     'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6969 	     ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6970 	     p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6971 	     'Status:'||p_tab_usec_occur(I).status);
6972           END IF;
6973 
6974 	END IF;
6975 
6976 	/* Business Validations */
6977 	/* Proceed with business validations only if the status is Success, 'S' */
6978 	IF p_tab_usec_occur(I).status = 'S' THEN
6979 	  igs_ps_validate_lgcy_pkg.validate_usec_occurs ( p_tab_usec_occur(I), l_n_uoo_id, l_d_start_dt, l_d_end_dt,
6980 	                                                  l_n_building_code,l_n_room_code,
6981 							  l_n_dedicated_building_code,l_n_dedicated_room_code,
6982 							  l_n_preferred_building_code,l_n_preferred_room_code,l_n_uso_id,
6983 							  l_insert_update,p_calling_context,l_notify_status,l_c_schedule_status
6984 							  );
6985 
6986            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6987              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.status_after_Business_validation',
6988 	     'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
6989 	     ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
6990 	     p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier||'  '||
6991 	     'Status:'||p_tab_usec_occur(I).status);
6992            END IF;
6993 	END IF;
6994 
6995 	IF p_tab_usec_occur(I).status = 'S' THEN
6996 	  IF l_insert_update = 'I' THEN
6997 	      /* Insert Record */
6998 	      INSERT INTO igs_ps_usec_occurs_all
6999 	      (unit_section_occurrence_id,
7000 	       uoo_id,
7001 	       monday,
7002 	       tuesday,
7003 	       wednesday,
7004 	       thursday,
7005 	       friday,
7006 	       saturday,
7007 	       sunday,
7008 	       start_time,
7009 	       end_time,
7010 	       building_code,
7011 	       room_code,
7012 	       schedule_status,
7013 	       status_last_updated,
7014 	       created_by,
7015 	       creation_date,
7016 	       last_updated_by,
7017 	       last_update_date,
7018 	       last_update_login,
7019 	       attribute_category,
7020 	       attribute1,
7021 	       attribute2,
7022 	       attribute3,
7023 	       attribute4,
7024 	       attribute5,
7025 	       attribute6,
7026 	       attribute7,
7027 	       attribute8,
7028 	       attribute9,
7029 	       attribute10,
7030 	       attribute11,
7031 	       attribute12,
7032 	       attribute13,
7033 	       attribute14,
7034 	       attribute15,
7035 	       attribute16,
7036 	       attribute17,
7037 	       attribute18,
7038 	       attribute19,
7039 	       attribute20,
7040 	       dedicated_building_code,
7041 	       dedicated_room_code,
7042 	       preferred_building_code,
7043 	       preferred_room_code,
7044 	       start_date,
7045 	       end_date,
7046 	       to_be_announced,
7047 	       preferred_region_code,
7048 	       no_set_day_ind,
7049 	       cancel_flag,
7050 	       occurrence_identifier,
7051 	       abort_flag
7052 	      )
7053 	      VALUES
7054 	      (igs_ps_usec_occurs_s.NEXTVAL,
7055 	       l_n_uoo_id,
7056 	       p_tab_usec_occur(I).monday,
7057 	       p_tab_usec_occur(I).tuesday,
7058 	       p_tab_usec_occur(I).wednesday,
7059 	       p_tab_usec_occur(I).thursday,
7060 	       p_tab_usec_occur(I).friday,
7061 	       p_tab_usec_occur(I).saturday,
7062 	       p_tab_usec_occur(I).sunday,
7063 	       p_tab_usec_occur(I).start_time,
7064 	       p_tab_usec_occur(I).end_time,
7065 	       l_n_building_code,
7066 	       l_n_room_code,
7067 	       l_c_schedule_status,
7068 	       TRUNC(SYSDATE),
7069 	       g_n_user_id,
7070 	       SYSDATE,
7071 	       g_n_user_id,
7072 	       SYSDATE,
7073 	       g_n_login_id,
7074 	       p_tab_usec_occur(I).attribute_category,
7075 	       p_tab_usec_occur(I).attribute1,
7076 	       p_tab_usec_occur(I).attribute2,
7077 	       p_tab_usec_occur(I).attribute3,
7078 	       p_tab_usec_occur(I).attribute4,
7079 	       p_tab_usec_occur(I).attribute5,
7080 	       p_tab_usec_occur(I).attribute6,
7081 	       p_tab_usec_occur(I).attribute7,
7082 	       p_tab_usec_occur(I).attribute8,
7083 	       p_tab_usec_occur(I).attribute9,
7084 	       p_tab_usec_occur(I).attribute10,
7085 	       p_tab_usec_occur(I).attribute11,
7086 	       p_tab_usec_occur(I).attribute12,
7087 	       p_tab_usec_occur(I).attribute13,
7088 	       p_tab_usec_occur(I).attribute14,
7089 	       p_tab_usec_occur(I).attribute15,
7090 	       p_tab_usec_occur(I).attribute16,
7091 	       p_tab_usec_occur(I).attribute17,
7092 	       p_tab_usec_occur(I).attribute18,
7093 	       p_tab_usec_occur(I).attribute19,
7094 	       p_tab_usec_occur(I).attribute20,
7095 	       l_n_dedicated_building_code,
7096 	       l_n_dedicated_room_code,
7097 	       l_n_preferred_building_code,
7098 	       l_n_preferred_room_code,
7099 	       p_tab_usec_occur(I).start_date,
7100 	       p_tab_usec_occur(I).end_date,
7101 	       p_tab_usec_occur(I).to_be_announced,
7102 	       p_tab_usec_occur(I).preferred_region_code,
7103 	       p_tab_usec_occur(I).no_set_day_ind,
7104 	       'N',
7105 	       p_tab_usec_occur(I).occurrence_identifier,
7106 	       'N'
7107 	      )RETURNING unit_section_occurrence_id INTO l_n_usec_occurs_id;
7108 
7109 
7110 	      l_n_tbl_cnt :=l_tbl_uso.count+1;
7111 	      l_tbl_uso(l_n_tbl_cnt):=l_n_usec_occurs_id ;
7112 
7113 
7114               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7115                 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.record_inserted',
7116 	        'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
7117 	        ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
7118 	        p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier);
7119               END IF;
7120 
7121           ELSE
7122 
7123 	    DECLARE
7124 
7125 	      CURSOR c_prd_uso(cp_n_uso_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
7126 	      SELECT rowid,uso.*
7127 	      FROM   igs_ps_usec_occurs_all uso
7128 	      WHERE  uso.unit_section_occurrence_id=cp_n_uso_id;
7129               rec_prd_uso c_prd_uso%ROWTYPE;
7130 
7131 	      CURSOR check_ovrd IS
7132 	      SELECT day_ovrd_flag, time_ovrd_flag, scheduled_bld_ovrd_flag, scheduled_room_ovrd_flag,date_ovrd_flag
7133 	      FROM igs_ps_sch_ocr_cfig;
7134 
7135 	      l_check_ovrd check_ovrd%ROWTYPE;
7136 	      l_c_monday     igs_ps_usec_occurs_all.monday%TYPE;
7137 	      l_c_tuesday    igs_ps_usec_occurs_all.tuesday%TYPE;
7138 	      l_c_wednesday  igs_ps_usec_occurs_all.wednesday%TYPE;
7139 	      l_c_thursday   igs_ps_usec_occurs_all.thursday%TYPE;
7140 	      l_c_friday     igs_ps_usec_occurs_all.friday%TYPE;
7141 	      l_c_saturday   igs_ps_usec_occurs_all.saturday%TYPE;
7142 	      l_c_sunday     igs_ps_usec_occurs_all.sunday%TYPE;
7143 	      l_d_uso_start_date igs_ps_usec_occurs_all.start_date%TYPE;
7144               l_d_uso_end_date   igs_ps_usec_occurs_all.end_date%TYPE;
7145 	      l_start_time   igs_ps_usec_occurs_all.start_time%TYPE;
7146 	      l_end_time     igs_ps_usec_occurs_all.end_time%TYPE;
7147 	      l_sch_bld      igs_ps_usec_occurs_all.building_code%TYPE;
7148 	      l_sch_room     igs_ps_usec_occurs_all.room_code%TYPE;
7149 	    BEGIN
7150 		OPEN  c_prd_uso (l_n_uso_id);
7151 		FETCH c_prd_uso INTO rec_prd_uso;
7152 		CLOSE c_prd_uso;
7153 
7154 		OPEN check_ovrd;
7155 		FETCH check_ovrd INTO l_check_ovrd;
7156 		IF check_ovrd%FOUND THEN
7157 		  --Days override
7158 		  IF l_check_ovrd.day_ovrd_flag = 'N' AND (p_tab_usec_occur(I).monday='Y' OR
7159 							   p_tab_usec_occur(I).tuesday='Y' OR
7160 							   p_tab_usec_occur(I).wednesday='Y' OR
7161 							   p_tab_usec_occur(I).thursday='Y' OR
7162 							   p_tab_usec_occur(I).friday='Y' OR
7163 							   p_tab_usec_occur(I).saturday='Y' OR
7164 							   p_tab_usec_occur(I).sunday='Y'  ) THEN
7165 		   l_c_monday := rec_prd_uso.monday;
7166 		   l_c_tuesday := rec_prd_uso.tuesday;
7167 		   l_c_wednesday := rec_prd_uso.wednesday;
7168 		   l_c_thursday := rec_prd_uso.thursday;
7169 		   l_c_friday := rec_prd_uso.friday;
7170 		   l_c_saturday := rec_prd_uso.saturday;
7171 		   l_c_sunday := rec_prd_uso.sunday;
7172 		 ELSE
7173 		   l_c_monday := p_tab_usec_occur(I).monday;
7174 		   l_c_tuesday := p_tab_usec_occur(I).tuesday;
7175 		   l_c_wednesday := p_tab_usec_occur(I).wednesday;
7176 		   l_c_thursday := p_tab_usec_occur(I).thursday;
7177 		   l_c_friday := p_tab_usec_occur(I).friday;
7178 		   l_c_saturday := p_tab_usec_occur(I).saturday;
7179 		   l_c_sunday := p_tab_usec_occur(I).sunday;
7180 		 END IF;
7181 		  --Date override
7182 		 IF l_check_ovrd.date_ovrd_flag = 'N' AND (rec_prd_uso.start_date IS NOT NULL  OR
7183 						      rec_prd_uso.end_date IS NOT NULL ) THEN
7184 		  l_d_uso_start_date  := rec_prd_uso.start_date;
7185 		  l_d_uso_end_date := rec_prd_uso.end_date;
7186 		 ELSE
7187 		   l_d_uso_start_date := p_tab_usec_occur(I).start_date;
7188 		   l_d_uso_end_date := p_tab_usec_occur(I).end_date;
7189 		 END IF;
7190 		 --Time override
7191 		 IF l_check_ovrd.time_ovrd_flag = 'N' AND (rec_prd_uso.start_time IS NOT NULL  OR
7192 						      rec_prd_uso.end_time IS NOT NULL ) THEN
7193 		   l_start_time := rec_prd_uso.start_time;
7194 		   l_end_time := rec_prd_uso.end_time;
7195 		 ELSE
7196 		   l_start_time := p_tab_usec_occur(I).start_time;
7197 		   l_end_time := p_tab_usec_occur(I).end_time;
7198 		 END IF;
7199 		 --Schedule Building override
7200 		 IF l_check_ovrd.scheduled_bld_ovrd_flag = 'N' AND (rec_prd_uso.building_code IS NOT NULL) THEN
7201 		   l_sch_bld := rec_prd_uso.building_code;
7202 		 ELSE
7203 		   l_sch_bld := l_n_building_code;
7204 		 END IF;
7205 		 --Schedule Room override
7206 		 IF l_check_ovrd.scheduled_room_ovrd_flag = 'N' AND (rec_prd_uso.room_code IS NOT NULL ) THEN
7207 		   l_sch_room := rec_prd_uso.room_code;
7208 		 ELSE
7209 		   l_sch_room := l_n_room_code;
7210 		 END IF;
7211 
7212 	       ELSE
7213 		   l_c_monday := p_tab_usec_occur(I).monday;
7214 		   l_c_tuesday := p_tab_usec_occur(I).tuesday;
7215 		   l_c_wednesday := p_tab_usec_occur(I).wednesday;
7216 		   l_c_thursday := p_tab_usec_occur(I).thursday;
7217 		   l_c_friday := p_tab_usec_occur(I).friday;
7218 		   l_c_saturday := p_tab_usec_occur(I).saturday;
7219 		   l_c_sunday := p_tab_usec_occur(I).sunday;
7220 		   l_start_time := p_tab_usec_occur(I).start_time;
7221 		   l_end_time := p_tab_usec_occur(I).end_time;
7222                    l_d_uso_start_date :=p_tab_usec_occur(I).start_date;
7223                    l_d_uso_end_date := p_tab_usec_occur(I).end_date;
7224 		   l_sch_bld := l_n_building_code;
7225 		   l_sch_room := l_n_room_code;
7226 	       END IF;
7227 	       CLOSE check_ovrd;
7228 
7229                /*Update record*/
7230                UPDATE IGS_PS_USEC_OCCURS_ALL SET
7231                monday = l_c_monday,
7232                tuesday = l_c_tuesday,
7233                wednesday = l_c_wednesday,
7234                thursday =l_c_thursday,
7235                friday = l_c_friday,
7236                saturday = l_c_saturday,
7237                sunday = l_c_sunday,
7238                start_time = l_start_time,
7239                end_time = l_end_time,
7240                building_code = l_sch_bld,
7241                room_code = l_sch_room,
7242                schedule_status = NVL(l_c_schedule_status,schedule_status),
7243 	       error_text = DECODE(l_c_schedule_status,'SCHEDULED',NULL,'CANCELLED',NULL,error_text),
7244 	       notify_status = NVL(l_notify_status,notify_status),
7245                status_last_updated = TRUNC(SYSDATE),
7246                last_updated_by=g_n_user_id,
7247                last_update_date=SYSDATE,
7248                last_update_login=g_n_login_id,
7249                attribute_category=p_tab_usec_occur(I).attribute_category,
7250                attribute1=p_tab_usec_occur(I).attribute1,
7251                attribute2=p_tab_usec_occur(I).attribute2,
7252                attribute3=p_tab_usec_occur(I).attribute3,
7253                attribute4=p_tab_usec_occur(I).attribute4,
7254                attribute5=p_tab_usec_occur(I).attribute5,
7255                attribute6=p_tab_usec_occur(I).attribute6,
7256                attribute7=p_tab_usec_occur(I).attribute7,
7257                attribute8=p_tab_usec_occur(I).attribute8,
7258                attribute9=p_tab_usec_occur(I).attribute9,
7259                attribute10=p_tab_usec_occur(I).attribute10,
7260                attribute11=p_tab_usec_occur(I).attribute11,
7261                attribute12=p_tab_usec_occur(I).attribute12,
7262                attribute13=p_tab_usec_occur(I).attribute13,
7263                attribute14=p_tab_usec_occur(I).attribute14,
7264                attribute15=p_tab_usec_occur(I).attribute15,
7265                attribute16=p_tab_usec_occur(I).attribute16,
7266                attribute17=p_tab_usec_occur(I).attribute17,
7267                attribute18=p_tab_usec_occur(I).attribute18,
7268                attribute19=p_tab_usec_occur(I).attribute19,
7269                attribute20=p_tab_usec_occur(I).attribute20,
7270                dedicated_building_code=l_n_dedicated_building_code,
7271                dedicated_room_code=l_n_dedicated_room_code,
7272                preferred_building_code=l_n_preferred_building_code,
7273                preferred_room_code=l_n_preferred_room_code,
7274                start_date=l_d_uso_start_date,
7275                end_date=l_d_uso_end_date,
7276                to_be_announced=p_tab_usec_occur(I).to_be_announced,
7277                preferred_region_code=p_tab_usec_occur(I).preferred_region_code,
7278                no_set_day_ind=p_tab_usec_occur(I).no_set_day_ind
7279 	       WHERE unit_section_occurrence_id = l_n_uso_id ;
7280 
7281 	       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7282                 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.record_updated',
7283 	        'Unit code:'||p_tab_usec_occur(I).unit_cd||'  '||'Version number:'||p_tab_usec_occur(I).version_number||'  '||'teach_cal_alternate_code:'
7284 	        ||p_tab_usec_occur(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_usec_occur(I).location_cd||'  '||'Unit Class:'||
7285 	        p_tab_usec_occur(I).unit_class||'Occurrence Identifier:'|| p_tab_usec_occur(I).occurrence_identifier);
7286               END IF;
7287 
7288             END;
7289 	  END IF;
7290 	  p_tab_usec_occur(I).msg_from := NULL;
7291 	  p_tab_usec_occur(I).msg_to := NULL;
7292 	ELSIF p_tab_usec_occur(I).status = 'A' THEN
7293 	  p_tab_usec_occur(I).msg_from := p_tab_usec_occur(I).msg_from+1;
7294 	  p_tab_usec_occur(I).msg_to   := fnd_msg_pub.count_msg;
7295 	ELSE
7296 	  p_c_rec_status := p_tab_usec_occur(I).status;
7297 	  p_tab_usec_occur(I).msg_from := p_tab_usec_occur(I).msg_from+1;
7298 	  p_tab_usec_occur(I).msg_to   := fnd_msg_pub.count_msg;
7299 	  IF p_tab_usec_occur(I).status = 'E' THEN
7300 	    RETURN;
7301 	  END IF;
7302 	END IF;
7303       END IF;
7304     END LOOP;
7305 
7306      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7307        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_usec_occur.after_import_status',p_c_rec_status);
7308      END IF;
7309 
7310   END create_usec_occur;
7311 
7312   PROCEDURE create_unit_ref_code( p_tab_ref_cd IN OUT NOCOPY igs_ps_generic_pub.unit_ref_tbl_type,
7313                                   p_c_rec_status OUT NOCOPY VARCHAR2,
7314 				  p_calling_context  IN VARCHAR2) AS
7315 
7316   /***********************************************************************************************
7317     Created By     :  smvk
7318     Date Created By:  18-NOV-2002
7319     Purpose        :  This procedure import reference codes of unit version, unit section, unit section occurrence.
7320 
7321     Known limitations,enhancements,remarks:
7322     Change History (in reverse chronological order)
7323     Who         When            What
7324     sarakshi    11-Mar-2005     Bug#4212680, modified cursor c_ref_des within procedure validate_derivation.
7325     smvk        27-Jun-2003     Enh Bug # 2999888. Importing Unit requirements / Unit Section requirements reference codes
7326     jbegum      02-June-2003    Enh#2972950
7327                                 For Legacy Enhancements TD:
7328                                 Modified validate_usec_db_cons, changed the impact of change of
7329                                 signature of igs_ps_usec_ref_cd_pkg.get_uk_for_validation
7330                                 For PSP Scheduling Enhancements TD:
7331                                 Modified the local procedure's validate_occur_deri_busi,validate_occur_db_cons.
7332                                 For PSP Enhancements TD:
7333                                 Modified validate_occur_db_cons,validate_derivation,validate_unit_db_cons
7334                                 validate_usec_db_cons,validate_usec_derivations.
7335 
7336   ********************************************************************************************** */
7337 
7338 
7339     l_c_cal_type      igs_ca_inst_all.cal_type%TYPE;         -- Holds Calendar Type
7340     l_n_seq_num       igs_ca_inst_all.sequence_number%TYPE;  -- Holds Calendar Instance Sequence Number
7341     l_n_uoo_id        igs_ps_unit_ofr_opt_all.uoo_id%TYPE;   -- Holds Unit Offering Options Identifier
7342     l_n_usec_ref_id   igs_ps_usec_ref.unit_section_reference_id%TYPE;  -- Holds Unit Section Reference Identifier
7343     l_n_uso_id        igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE; -- Holds the Unit Section Occurrence Identifier
7344 
7345 --
7346 l_insert_update VARCHAR2(1);
7347 --
7348     -- Following cursor added as part of bug#2972950 for the PSP Enhancements TD
7349     CURSOR c_res_flag (cp_c_ref_type igs_ge_ref_cd_type_all.reference_cd_type%TYPE) IS
7350        SELECT restricted_flag
7351        FROM igs_ge_ref_cd_type_all
7352        WHERE reference_cd_type = cp_c_ref_type;
7353 
7354     rec_res_flag c_res_flag%ROWTYPE;
7355 
7356     PROCEDURE trim_values ( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7357     BEGIN
7358       p_ref_cd_rec.unit_cd := trim(p_ref_cd_rec.unit_cd);
7359       p_ref_cd_rec.version_number := trim(p_ref_cd_rec.version_number);
7360       p_ref_cd_rec.data_type := trim(p_ref_cd_rec.data_type);
7361       p_ref_cd_rec.teach_cal_alternate_code := trim(p_ref_cd_rec.teach_cal_alternate_code);
7362       p_ref_cd_rec.location_cd := trim(p_ref_cd_rec.location_cd);
7363       p_ref_cd_rec.unit_class := trim(p_ref_cd_rec.unit_class);
7364       p_ref_cd_rec.occurrence_identifier := trim(p_ref_cd_rec.occurrence_identifier);
7365       p_ref_cd_rec.reference_cd_type := trim(p_ref_cd_rec.reference_cd_type);
7366       p_ref_cd_rec.reference_cd := trim(p_ref_cd_rec.reference_cd);
7367       p_ref_cd_rec.description := trim(p_ref_cd_rec.description);
7368       p_ref_cd_rec.gen_ref_flag := trim(p_ref_cd_rec.gen_ref_flag);
7369 
7370     END trim_values ;
7371 
7372     -- Validate the Mandatory Parameters for creation of unit referrence code
7373     PROCEDURE validate_unit_parameters( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7374     BEGIN
7375        IF p_ref_cd_rec.unit_cd IS NULL OR p_ref_cd_rec.unit_cd = FND_API.G_MISS_CHAR THEN
7376          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD','LEGACY_TOKENS', FALSE);
7377          p_ref_cd_rec.status := 'E';
7378        END IF;
7379        IF p_ref_cd_rec.version_number IS NULL OR p_ref_cd_rec.version_number = FND_API.G_MISS_NUM THEN
7380          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM','LEGACY_TOKENS', FALSE);
7381          p_ref_cd_rec.status := 'E';
7382        END IF;
7383        IF p_ref_cd_rec.data_type IS NULL OR p_ref_cd_rec.data_type = FND_API.G_MISS_CHAR THEN
7384          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'DATA_TYPE','LEGACY_TOKENS', FALSE);
7385          p_ref_cd_rec.status := 'E';
7386        END IF;
7387        IF p_ref_cd_rec.reference_cd_type IS NULL OR p_ref_cd_rec.reference_cd_type = FND_API.G_MISS_CHAR THEN
7388          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'REFERENCE_CD_TYPE','LEGACY_TOKENS', FALSE);
7389          p_ref_cd_rec.status := 'E';
7390        END IF;
7391        IF p_ref_cd_rec.reference_cd IS NULL OR p_ref_cd_rec.reference_cd = FND_API.G_MISS_CHAR THEN
7392          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'REFERENCE_CD','LEGACY_TOKENS', FALSE);
7393          p_ref_cd_rec.status := 'E';
7394        END IF;
7395     END validate_unit_parameters;
7396 
7397     -- Validate the Mandatory Parameters for Unit Section / Unit Section Occurrence
7398     PROCEDURE validate_usec_parameters( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7399     BEGIN
7400        validate_unit_parameters( p_ref_cd_rec );
7401        IF p_ref_cd_rec.teach_cal_alternate_code IS NULL OR p_ref_cd_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
7402          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
7403          p_ref_cd_rec.status := 'E';
7404        END IF;
7405        IF p_ref_cd_rec.location_cd IS NULL OR p_ref_cd_rec.location_cd = FND_API.G_MISS_CHAR THEN
7406          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS', FALSE);
7407          p_ref_cd_rec.status := 'E';
7408        END IF;
7409        IF p_ref_cd_rec.unit_class IS NULL OR p_ref_cd_rec.unit_class = FND_API.G_MISS_CHAR THEN
7410          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS','LEGACY_TOKENS', FALSE);
7411          p_ref_cd_rec.status := 'E';
7412        END IF;
7413 
7414        IF p_ref_cd_rec.data_type = 'OCCURRENCE' AND
7415          (p_ref_cd_rec.occurrence_identifier IS NULL OR p_ref_cd_rec.occurrence_identifier = FND_API.G_MISS_CHAR) AND (p_ref_cd_rec.production_uso_id IS NULL OR p_ref_cd_rec.production_uso_id = FND_API.G_MISS_NUM) THEN
7416          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_OCCRS_ID','IGS_PS_LOG_PARAMETERS', FALSE);
7417          p_ref_cd_rec.status := 'E';
7418        END IF;
7419 
7420        IF p_calling_context IN ('G','S') AND p_ref_cd_rec.data_type = 'UNIT' THEN
7421             fnd_message.set_name ( 'IGS', 'IGS_PS_UNIT_REF_N_ALLW_GEN_SCH' );
7422             fnd_msg_pub.add;
7423             p_ref_cd_rec.status := 'E';
7424        END IF;
7425 
7426 
7427     END validate_usec_parameters;
7428 
7429     -- Validate the Mandatory Parameters
7430     PROCEDURE validate_parameters( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7431     BEGIN
7432        IF p_ref_cd_rec.data_type IS NULL OR p_ref_cd_rec.data_type = 'UNIT' THEN
7433          validate_unit_parameters(p_ref_cd_rec);
7434        ELSIF p_ref_cd_rec.data_type = 'SECTION'  OR p_ref_cd_rec.data_type = 'OCCURRENCE' THEN
7435          validate_usec_parameters(p_ref_cd_rec);
7436        ELSE
7437          igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'DATA_TYPE','LEGACY_TOKENS', FALSE);
7438          p_ref_cd_rec.status := 'E';
7439        END IF;
7440     END validate_parameters;
7441 
7442     --Enh Bug#2972950
7443     --For the PSP Enhancements TD:
7444     --Removed the cursor c_ref_cd_id and its reference from validate_usec_derivations
7445 
7446     -- Derivation of values required to create Unit Section Referrence.
7447     PROCEDURE validate_usec_derivations( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7448 
7449       CURSOR c_usec_ref_id (cp_uoo_id IN igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
7450         SELECT  A.unit_section_reference_id
7451           FROM  igs_ps_usec_ref A
7452           WHERE A.uoo_id = cp_uoo_id;
7453 
7454       l_d_start igs_ca_inst_all.start_dt%TYPE;
7455       l_d_end igs_ca_inst_all.end_dt%TYPE;
7456       l_ret_status VARCHAR2(30);
7457 
7458     BEGIN
7459 
7460       -- Deriving the Calendar Type and Calendar Sequence Number
7461       igs_ge_gen_003.get_calendar_instance(p_ref_cd_rec.teach_cal_alternate_code, '''TEACHING''', l_c_cal_type,l_n_seq_num,l_d_start,l_d_end,l_ret_status);
7462       IF l_ret_status <> 'SINGLE' THEN
7463         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
7464         p_ref_cd_rec.status := 'E';
7465       END IF;
7466 
7467       -- Deriving the Unit Offering Option Identifier
7468       l_ret_status := NULL;
7469       igs_ps_validate_lgcy_pkg.get_uoo_id(p_ref_cd_rec.unit_cd, p_ref_cd_rec.version_number , l_c_cal_type, l_n_seq_num, p_ref_cd_rec.location_cd, p_ref_cd_rec.unit_class,l_n_uoo_id,l_ret_status);
7470       IF l_ret_status IS NOT NULL THEN
7471         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION','LEGACY_TOKENS', FALSE);
7472         p_ref_cd_rec.status := 'E';
7473       END IF;
7474 
7475       -- Deriving the Unit Section Reference Identifier
7476       OPEN c_usec_ref_id (l_n_uoo_id);
7477       FETCH c_usec_ref_id INTO l_n_usec_ref_id;
7478       IF c_usec_ref_id%NOTFOUND THEN
7479         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS',
7480                                          igs_ps_validate_lgcy_pkg.get_lkup_meaning('UNIT_SECTION','LEGACY_TOKENS') || ' ' ||
7481                                          igs_ps_validate_lgcy_pkg.get_lkup_meaning('REFERENCE_CD','LEGACY_TOKENS'),
7482                                          NULL, FALSE);
7483         p_ref_cd_rec.status := 'E';
7484       END IF;
7485       CLOSE c_usec_ref_id;
7486     END validate_usec_derivations;
7487 
7488     -- As the derivation of Unit Section Occurrence Identifier and the business validation
7489     -- for the Unit Section Occurrence References are tightly coupled, the derivation and
7490     -- business validation mentioned in the TD are combined.
7491 
7492     -- Change History
7493     -- Who         When            What
7494     -- smvk        28-Jul-2004     Bug # 3793580. Coded to call get_uso_id procedure and removed
7495     --                             cursors used to derive USO id.
7496     -- jbegum      04-June-2003    Enh#2972950
7497     --                             For PSP Scheduling Enhancements TD:
7498     --                             Modified the cursor's c_tba_count,c_tba_uso_id,c_count,c_uso_id.
7499     --                             Added 2 new cursor's c_nsd_count,c_nsd_uso_id.
7500     PROCEDURE validate_occur_deri_busi( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7501 
7502       l_d_start DATE;
7503       l_d_end DATE;
7504       l_ret_status VARCHAR2(30);
7505       l_c_msg VARCHAR2(30);
7506 
7507     BEGIN
7508 
7509       -- Deriving the Calendar Type and Calendar Sequence Number
7510       igs_ge_gen_003.get_calendar_instance(p_ref_cd_rec.teach_cal_alternate_code, '''TEACHING''', l_c_cal_type,l_n_seq_num,l_d_start,l_d_end,l_ret_status);
7511       IF l_ret_status <> 'SINGLE' THEN
7512         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
7513         p_ref_cd_rec.status := 'E';
7514       END IF;
7515 
7516       -- Deriving the Unit Offering Option Identifier
7517       l_ret_status := NULL;
7518       igs_ps_validate_lgcy_pkg.get_uoo_id(p_ref_cd_rec.unit_cd, p_ref_cd_rec.version_number , l_c_cal_type, l_n_seq_num, p_ref_cd_rec.location_cd, p_ref_cd_rec.unit_class,l_n_uoo_id,l_ret_status);
7519       IF l_ret_status IS NOT NULL THEN
7520         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION','LEGACY_TOKENS', FALSE);
7521         p_ref_cd_rec.status := 'E';
7522       END IF;
7523 
7524 
7525 
7526       IF p_ref_cd_rec.production_uso_id IS NULL THEN
7527 	--  To get the unit section occurrence id.
7528 	--  Error message is return in the out parameter l_c_msg if any.
7529 	l_c_msg := NULL;
7530 
7531 
7532 	igs_ps_validate_lgcy_pkg.get_uso_id( p_uoo_id                => l_n_uoo_id,
7533 					     p_occurrence_identifier => p_ref_cd_rec.occurrence_identifier,
7534 					     p_uso_id                => l_n_uso_id,
7535 					     p_message               => l_c_msg
7536 					    );
7537 
7538 	IF l_c_msg IS NOT NULL THEN
7539 	   fnd_message.set_name('IGS',l_c_msg);
7540 	   fnd_msg_pub.add;
7541 	   p_ref_cd_rec.status := 'E';
7542 	END IF;
7543       ELSE
7544         l_n_uso_id := p_ref_cd_rec.production_uso_id;
7545       END IF;
7546 
7547     END validate_occur_deri_busi;
7548 
7549     -- Decides to call the derivation procedures based on the datatype
7550     PROCEDURE validate_derivation( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7551 
7552     -- Following cursor added as part of bug#2972950 for the PSP Enhancements TD
7553     CURSOR c_ref_des (cp_c_ref_type igs_ge_ref_cd_type_all.reference_cd_type%TYPE,
7554                       cp_c_ref_cd   igs_ge_ref_cd.reference_cd%TYPE) IS
7555        SELECT rc.description
7556        FROM igs_ge_ref_cd_type_all rct,
7557             igs_ge_ref_cd  rc
7558        WHERE rct.reference_cd_type = cp_c_ref_type
7559        AND  rct.reference_cd_type = rc.reference_cd_type
7560        AND  rc.reference_cd = cp_c_ref_cd
7561        AND rct.restricted_flag = 'Y';
7562 
7563     rec_ref_des c_ref_des%ROWTYPE;
7564 
7565     BEGIN
7566 
7567       -- Following validation added as part of bug#2972950 for the PSP Enhancements TD
7568       -- Description field to be defaulted to the description of the passed reference code
7569       -- if 'Restricted Reference Code Values' checkbox is checked else passed values to be used if any.
7570 
7571       OPEN c_ref_des(p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd);
7572       FETCH c_ref_des INTO rec_ref_des;
7573       IF c_ref_des%FOUND THEN
7574          p_ref_cd_rec.description := rec_ref_des.description;
7575       END IF;
7576       CLOSE c_ref_des;
7577 
7578       IF p_ref_cd_rec.gen_ref_flag IS NULL THEN
7579          p_ref_cd_rec.gen_ref_flag := 'Y' ;-- Defauling to 'Y' that is generic reference codes
7580       ELSE
7581          IF p_ref_cd_rec.gen_ref_flag NOT IN ('Y','N') THEN
7582             fnd_message.set_name('IGS','IGS_PS_LGCY_GEN_FLAG');
7583             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N',fnd_message.get,NULL,FALSE);
7584             p_ref_cd_rec.status:='E';
7585          END IF;
7586       END IF;
7587 
7588       IF p_ref_cd_rec.data_type = 'SECTION' THEN
7589         validate_usec_derivations( p_ref_cd_rec );
7590       ELSIF p_ref_cd_rec.data_type = 'OCCURRENCE' THEN
7591 
7592         validate_occur_deri_busi( p_ref_cd_rec );
7593 
7594       END IF;
7595 
7596     END validate_derivation;
7597 
7598     -- Validate the database constraints for the Unit Referrence code
7599     PROCEDURE validate_unit_db_cons(p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type) AS
7600 
7601     BEGIN
7602       -- Unique Key Validation
7603       IF p_ref_cd_rec.gen_ref_flag  = 'Y' THEN  -- if generic reference code
7604         IF igs_ps_unit_ref_cd_pkg.get_uk_for_validation(p_ref_cd_rec.unit_cd,
7605                                                         p_ref_cd_rec.version_number,
7606                                                         p_ref_cd_rec.reference_cd_type) THEN
7607           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_REFERENCE_CD','LEGACY_TOKENS', FALSE);
7608           p_ref_cd_rec.status := 'W';
7609           RETURN;
7610         END IF;
7611       ELSE   -- else Unit requirement reference code
7612         IF igs_ps_unitreqref_cd_pkg.get_uk_for_validation(p_ref_cd_rec.unit_cd,
7613                                                           p_ref_cd_rec.version_number,
7614                                                           p_ref_cd_rec.reference_cd_type,
7615                                                           p_ref_cd_rec.reference_cd
7616                                                           ) THEN
7617           fnd_message.set_name('IGS','IGS_PS_LGCY_UNIT_REQ_REF');
7618           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', fnd_message.get,NULL, FALSE);
7619           p_ref_cd_rec.status := 'W';
7620           RETURN;
7621         END IF;
7622       END IF;
7623 
7624       -- Check Constraints: Unit Code Should be in Upper Case
7625       BEGIN
7626         igs_ps_unit_ref_cd_pkg.check_constraints('UNIT_CD', p_ref_cd_rec.unit_cd);
7627       EXCEPTION
7628         WHEN OTHERS THEN
7629         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'UNIT_CD','LEGACY_TOKENS', TRUE);
7630         p_ref_cd_rec.status := 'E';
7631       END;
7632 
7633       -- Check Constraints: Reference Code Should be in Upper Case
7634       BEGIN
7635         igs_ps_unit_ref_cd_pkg.check_constraints('REFERENCE_CD', p_ref_cd_rec.reference_cd);
7636       EXCEPTION
7637         WHEN OTHERS THEN
7638         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'REFERENCE_CD','LEGACY_TOKENS', TRUE);
7639         p_ref_cd_rec.status := 'E';
7640       END;
7641 
7642       -- Check Constraints: Reference Code Type Should be in Upper Case
7643       BEGIN
7644         igs_ps_unit_ref_cd_pkg.check_constraints('REFERENCE_CD_TYPE', p_ref_cd_rec.reference_cd_type);
7645       EXCEPTION
7646         WHEN OTHERS THEN
7647         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE', 'REFERENCE_CD_TYPE','LEGACY_TOKENS', TRUE);
7648         p_ref_cd_rec.status := 'E';
7649       END;
7650 
7651       -- Following validation added as part of bug#2972950 for the PSP Enhancements TD
7652       OPEN c_res_flag(p_ref_cd_rec.reference_cd_type);
7653       FETCH c_res_flag INTO rec_res_flag;
7654       IF c_res_flag%FOUND THEN
7655          IF rec_res_flag.restricted_flag = 'Y' THEN
7656             -- Foreign Key Validations : Reference Code doesn't exists
7657             IF NOT igs_ge_ref_cd_pkg.get_uk_for_validation(p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd) THEN
7658                igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'REFERENCE_CD','LEGACY_TOKENS', FALSE);
7659                p_ref_cd_rec.status := 'E';
7660             END IF;
7661          END IF;
7662       ELSE
7663          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_INVALID_REF_CD_TYPE',NULL,NULL,FALSE);
7664          p_ref_cd_rec.status := 'E';
7665       END IF;
7666       CLOSE c_res_flag;
7667 
7668       -- Foreign Key Validations : Unit Version doesn't exists
7669       IF NOT igs_ps_unit_ver_pkg.get_pk_for_validation(p_ref_cd_rec.unit_cd, p_ref_cd_rec.version_number) THEN
7670         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_VERSION','LEGACY_TOKENS', FALSE);
7671         p_ref_cd_rec.status := 'E';
7672       END IF;
7673 
7674     END validate_unit_db_cons;
7675 
7676     -- Validate the database constraints for the Unit Section Occurrence Referrence code
7677     PROCEDURE validate_usec_db_cons(p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type,p_insert IN VARCHAR2) AS
7678 
7679     BEGIN
7680 
7681       IF p_insert = 'I' THEN
7682 	--Unique Key Validation
7683 	--Enh#2972950,impact of change of signature of igs_ps_usec_ref_cd_pkg.get_uk_for_validation
7684 	IF p_ref_cd_rec.gen_ref_flag  = 'Y' THEN  -- if generic reference code
7685 	  IF igs_ps_usec_ref_cd_pkg.get_uk_for_validation(l_n_usec_ref_id,p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd) THEN
7686 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS',
7687 					     igs_ps_validate_lgcy_pkg.get_lkup_meaning('UNIT_SECTION','LEGACY_TOKENS') || ' ' ||
7688 					     igs_ps_validate_lgcy_pkg.get_lkup_meaning('REFERENCE_CD','LEGACY_TOKENS'),
7689 					     NULL, FALSE);
7690 	    p_ref_cd_rec.status := 'W';
7691 	    RETURN;
7692 	  END IF;
7693 	ELSE -- else Unit Section requirement reference code
7694 	  IF igs_ps_us_req_ref_cd_pkg.get_uk_for_validation(l_n_usec_ref_id,p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd) THEN
7695 	    fnd_message.set_name('IGS','IGS_PS_LGCY_USEC_REQ_REF');
7696 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS',fnd_message.get,NULL, FALSE);
7697 	    p_ref_cd_rec.status := 'W';
7698 	    RETURN;
7699 	  END IF;
7700 	END IF;
7701       END IF;
7702 
7703       -- Following validation added as part of bug#2972950 for the PSP Enhancements TD
7704       OPEN c_res_flag(p_ref_cd_rec.reference_cd_type);
7705       FETCH c_res_flag INTO rec_res_flag;
7706       IF c_res_flag%FOUND THEN
7707          IF rec_res_flag.restricted_flag = 'Y' THEN
7708             -- Foreign Key Validations : Reference Code doesn't exists
7709             IF NOT igs_ge_ref_cd_pkg.get_uk_for_validation(p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd) THEN
7710                igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'REFERENCE_CD','LEGACY_TOKENS', FALSE);
7711                p_ref_cd_rec.status := 'E';
7712             END IF;
7713          END IF;
7714       ELSE
7715          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_INVALID_REF_CD_TYPE',NULL,NULL,FALSE);
7716          p_ref_cd_rec.status := 'E';
7717       END IF;
7718       CLOSE c_res_flag;
7719 
7720       -- Foreign Key Validation :  Unit Section  doesn't exists
7721       IF NOT igs_ps_usec_ref_pkg.get_pk_for_validation(l_n_usec_ref_id) THEN
7722         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS',
7723                                          igs_ps_validate_lgcy_pkg.get_lkup_meaning('UNIT_SECTION','LEGACY_TOKENS') || ' ' ||
7724                                          igs_ps_validate_lgcy_pkg.get_lkup_meaning('REFERENCE_CD','LEGACY_TOKENS'),
7725                                          NULL, FALSE);
7726         p_ref_cd_rec.status := 'E';
7727       END IF;
7728 
7729     END validate_usec_db_cons;
7730 
7731     -- Validate the database constraints for the Unit Section Occurrence Referrence code
7732     PROCEDURE validate_occur_db_cons(p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type,p_insert IN VARCHAR2) AS
7733 
7734     BEGIN
7735       IF p_insert = 'I' THEN
7736 	-- Unique Key Validation
7737 	IF igs_ps_usec_ocur_ref_pkg.get_uk_for_validation( p_ref_cd_rec.reference_cd_type ,
7738 							   p_ref_cd_rec.reference_cd ,
7739 							   l_n_uso_id ) THEN
7740 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS',
7741 					   igs_ps_validate_lgcy_pkg.get_lkup_meaning('USEC_OCCUR','LEGACY_TOKENS') || ' ' ||
7742 					   igs_ps_validate_lgcy_pkg.get_lkup_meaning('REFERENCE_CD','LEGACY_TOKENS'),
7743 					   NULL, FALSE);
7744 	  p_ref_cd_rec.status := 'W';
7745 	  RETURN;
7746 	END IF;
7747       END IF;
7748 
7749       -- Following validation added as part of bug#2972950 for the PSP Enhancements TD
7750       OPEN c_res_flag(p_ref_cd_rec.reference_cd_type);
7751       FETCH c_res_flag INTO rec_res_flag;
7752       IF c_res_flag%FOUND THEN
7753          IF rec_res_flag.restricted_flag = 'Y' THEN
7754             -- Foreign Key Validations : Reference Code doesn't exists
7755             IF NOT igs_ge_ref_cd_pkg.get_uk_for_validation(p_ref_cd_rec.reference_cd_type,p_ref_cd_rec.reference_cd) THEN
7756                igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'REFERENCE_CD','LEGACY_TOKENS', FALSE);
7757                p_ref_cd_rec.status := 'E';
7758             END IF;
7759          END IF;
7760       ELSE
7761          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_INVALID_REF_CD_TYPE',NULL,NULL,FALSE);
7762          p_ref_cd_rec.status := 'E';
7763       END IF;
7764       CLOSE c_res_flag;
7765 
7766       -- Foreign Key Validation : Unit Section Occurrence doesn't exists
7767       IF NOT igs_ps_usec_occurs_pkg.get_pk_for_validation(l_n_uso_id) THEN
7768          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_OCCUR','LEGACY_TOKENS', FALSE);
7769          p_ref_cd_rec.status := 'E';
7770       END IF;
7771 
7772 
7773     END validate_occur_db_cons;
7774 
7775 
7776     -- Decides to call the database constraint procedures based on the datatype
7777     PROCEDURE validate_db_cons( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type,p_insert IN VARCHAR2) AS
7778     BEGIN
7779       IF p_ref_cd_rec.data_type = 'UNIT' THEN
7780         validate_unit_db_cons(p_ref_cd_rec);
7781       ELSIF p_ref_cd_rec.data_type = 'SECTION' THEN
7782         validate_usec_db_cons(p_ref_cd_rec,p_insert);
7783       ELSIF p_ref_cd_rec.data_type = 'OCCURRENCE' THEN
7784         validate_occur_db_cons(p_ref_cd_rec,p_insert);
7785       END IF;
7786     END validate_db_cons;
7787 
7788 ---
7789     -- Check for Update/Insert
7790     FUNCTION check_insert_update ( p_ref_cd_rec IN OUT NOCOPY igs_ps_generic_pub.unit_ref_rec_type ) RETURN VARCHAR2 IS
7791       --For  IGS_PS_USEC_REF_CD record
7792       CURSOR c_gen IS
7793       SELECT rc.restricted_flag,ur.reference_code_desc
7794       FROM igs_ps_usec_ref_cd ur, igs_ge_ref_cd_type_all rc
7795       WHERE ur.unit_section_reference_id  = l_n_usec_ref_id
7796       AND ur.reference_code_type    = p_ref_cd_rec.reference_cd_type
7797       AND ur.reference_code = p_ref_cd_rec.reference_cd
7798       AND ur.reference_code_type=rc.reference_cd_type;
7799 
7800 
7801       --For  IGS_PS_US_REQ_REF_CD record
7802       CURSOR c_req IS
7803       SELECT rc.restricted_flag,urr.reference_code_desc
7804       FROM  igs_ps_us_req_ref_cd urr,igs_ge_ref_cd_type_all rc
7805       WHERE urr.unit_section_reference_id  =  l_n_usec_ref_id
7806       AND   urr.reference_cd_type    = p_ref_cd_rec.reference_cd_type
7807       AND   urr.reference_code = p_ref_cd_rec.reference_cd
7808       AND   urr.reference_cd_type=rc.reference_cd_type;
7809 
7810       --For  IGS_PS_USEC_OCUR_REF record
7811       CURSOR c_occr IS
7812       SELECT rc.restricted_flag,uo.reference_code_desc
7813       FROM  igs_ps_usec_ocur_ref uo,igs_ge_ref_cd_type_all rc
7814       WHERE uo.reference_code_type    = p_ref_cd_rec.reference_cd_type
7815       AND   uo.reference_code = p_ref_cd_rec.reference_cd
7816       AND   uo.unit_section_occurrence_id = l_n_uso_id
7817       AND   uo.reference_code_type=rc.reference_cd_type;
7818 
7819       l_c_gen c_gen%ROWTYPE;
7820       l_c_req c_req%ROWTYPE;
7821       l_c_occr c_occr%ROWTYPE;
7822 
7823     BEGIN
7824         IF p_ref_cd_rec.data_type = 'SECTION' THEN
7825           IF p_ref_cd_rec.gen_ref_flag = 'Y' THEN
7826              OPEN c_gen;
7827 	     FETCH c_gen INTO l_c_gen;
7828 	     IF c_gen%FOUND THEN
7829                CLOSE c_gen;
7830                IF l_c_gen.restricted_flag = 'N'  THEN
7831 	         IF p_ref_cd_rec.description IS NULL THEN
7832  		   p_ref_cd_rec.description := l_c_gen.reference_code_desc;
7833                  ELSIF p_ref_cd_rec.description =  FND_API.G_MISS_CHAR THEN
7834  		   p_ref_cd_rec.description := NULL;
7835 		 END IF;
7836 	       END IF;
7837                RETURN 'U';
7838 	     ELSE
7839                CLOSE c_gen;
7840                RETURN 'I';
7841 	     END IF;
7842 	  ELSE
7843              OPEN c_req;
7844 	     FETCH c_req INTO l_c_req;
7845 	     IF c_req%FOUND THEN
7846                CLOSE c_req;
7847                IF l_c_req.restricted_flag = 'N'  THEN
7848 	         IF p_ref_cd_rec.description IS NULL THEN
7849  		   p_ref_cd_rec.description := l_c_req.reference_code_desc;
7850                  ELSIF p_ref_cd_rec.description =  FND_API.G_MISS_CHAR THEN
7851  		   p_ref_cd_rec.description := NULL;
7852 		 END IF;
7853 	       END IF;
7854                RETURN 'U';
7855 	     ELSE
7856                CLOSE c_req;
7857                RETURN 'I';
7858 	     END IF;
7859 	  END IF;
7860 
7861         ELSIF p_ref_cd_rec.data_type = 'OCCURRENCE' THEN
7862              OPEN c_occr;
7863 	     FETCH c_occr INTO l_c_occr;
7864 	     IF c_occr%FOUND THEN
7865                CLOSE c_occr;
7866                IF l_c_occr.restricted_flag = 'N'  THEN
7867 	         IF p_ref_cd_rec.description IS NULL THEN
7868  		   p_ref_cd_rec.description := l_c_occr.reference_code_desc;
7869                  ELSIF p_ref_cd_rec.description =  FND_API.G_MISS_CHAR THEN
7870  		   p_ref_cd_rec.description := NULL;
7871 		 END IF;
7872 	       END IF;
7873                RETURN 'U';
7874 	     ELSE
7875                CLOSE c_occr;
7876                RETURN 'I';
7877 	     END IF;
7878 
7879 	ELSE
7880 	  RETURN 'I';
7881 	END IF;
7882 
7883     END check_insert_update;
7884 
7885 
7886 ----
7887 
7888   BEGIN
7889 
7890     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7891       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.start_logging_for','Reference: Unit,Unit Sections,Unit section Occurrence');
7892     END IF;
7893 
7894     p_c_rec_status := 'S';
7895 
7896     FOR i IN 1 .. p_tab_ref_cd.LAST
7897     LOOP
7898       IF p_tab_ref_cd.EXISTS(i) THEN
7899         --Initialize the variable
7900 	l_c_cal_type    :=NULL;
7901 	l_n_seq_num     :=NULL;
7902 	l_n_uoo_id      :=NULL;
7903 	l_n_usec_ref_id :=NULL;
7904 	l_n_uso_id      :=NULL;
7905 
7906         p_tab_ref_cd(i).status := 'S';
7907         p_tab_ref_cd(i).msg_from := fnd_msg_pub.count_msg;
7908         trim_values(p_tab_ref_cd(i));
7909         -- Validate the parameters values
7910 
7911         validate_parameters(p_tab_ref_cd(i));
7912 
7913 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7914 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_validate_parameters',
7915 	  'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7916 	  ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7917 	  ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
7918 	  'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
7919 	  '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
7920 	  ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
7921         END IF;
7922 
7923           -- Derive the required values
7924 	  IF p_tab_ref_cd(i).status = 'S' THEN
7925 	    validate_derivation(p_tab_ref_cd(i));
7926 
7927             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7928 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_validate_derivation',
7929 	      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7930 	      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7931 	      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
7932 	      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
7933 	      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
7934 	      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
7935             END IF;
7936 
7937 	  END IF;
7938 
7939 	  --Find out whether it is insert/update of record
7940           l_insert_update:='I';
7941           IF p_tab_ref_cd(i).status = 'S' AND p_calling_context IN ('G','S')  THEN
7942             l_insert_update:= check_insert_update(p_tab_ref_cd(I));
7943 
7944             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7945 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_check_insert_update',
7946 	      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7947 	      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7948 	      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
7949 	      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
7950 	      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
7951 	      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
7952             END IF;
7953 
7954           END IF;
7955 
7956 	-- Find out whether record can go for import in context of cancelled/aborted
7957         IF  p_tab_ref_cd(i).status = 'S' AND p_calling_context ='S' THEN
7958           IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,l_n_uso_id) = FALSE THEN
7959             fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
7960             fnd_msg_pub.add;
7961             p_tab_ref_cd(i).status := 'A';
7962 	  END IF;
7963 
7964 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7965 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_check_import_allowed',
7966 	      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7967 	      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7968 	      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
7969 	      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
7970 	      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
7971 	      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
7972             END IF;
7973 
7974 	END IF;
7975 
7976 	  -- Check for database constraints
7977 	  IF p_tab_ref_cd(i).status = 'S' THEN
7978 	    validate_db_cons(p_tab_ref_cd(i),l_insert_update);
7979 
7980             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7981 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_validate_db_cons',
7982 	      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7983 	      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7984 	      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
7985 	      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
7986 	      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
7987 	      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
7988             END IF;
7989 
7990 	  END IF;
7991 
7992 	  IF p_tab_ref_cd(i).status = 'S' THEN
7993 	    igs_ps_validate_lgcy_pkg.validate_unit_reference(p_tab_ref_cd(i),l_n_uoo_id,l_n_uso_id,p_calling_context);
7994 
7995 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7996 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.status_after_Business_Validation',
7997 	      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
7998 	      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
7999 	      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8000 	      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8001 	      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
8002 	      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id||'  '||'Status:'||p_tab_ref_cd(i).status);
8003             END IF;
8004 
8005 	  END IF;
8006 
8007 	  -- Insert the reference codes in appropriate table based on datatype value.
8008 	  IF p_tab_ref_cd(i).status = 'S' THEN
8009 	    IF p_tab_ref_cd(i).data_type = 'UNIT' THEN
8010 	       IF p_tab_ref_cd(i).gen_ref_flag = 'Y' THEN -- if generic reference code
8011 		  -- Creating the unit refernce code if the datatype is UNIT.
8012 		  INSERT INTO igs_ps_unit_ref_cd (
8013 						   UNIT_CD,
8014 						   VERSION_NUMBER,
8015 						   REFERENCE_CD_TYPE,
8016 						   REFERENCE_CD,
8017 						   DESCRIPTION,
8018 						   CREATION_DATE,
8019 						   CREATED_BY,
8020 						   LAST_UPDATE_DATE,
8021 						   LAST_UPDATED_BY,
8022 						   LAST_UPDATE_LOGIN
8023 						 ) VALUES (
8024 						    p_tab_ref_cd(i).unit_cd,
8025 						    p_tab_ref_cd(i).version_number,
8026 						    p_tab_ref_cd(i).reference_cd_type,
8027 						    p_tab_ref_cd(i).reference_cd,
8028 						    p_tab_ref_cd(i).description,
8029 						    sysdate,
8030 						    g_n_user_id,
8031 						    sysdate,
8032 						    g_n_user_id,
8033 						    g_n_login_id
8034 						 );
8035                  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8036 		    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_Inserted_igs_ps_unit_ref_cd',
8037 		    'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8038 		    ||p_tab_ref_cd(i).version_number||'  '||'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||
8039 		    'reference_cd:'||p_tab_ref_cd(i).reference_cd||'  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8040                  END IF;
8041 	       ELSE  -- else unit requirements reference code
8042 		  INSERT INTO igs_ps_unitreqref_cd (
8043 						     unit_req_ref_cd_id,
8044 						     unit_cd,
8045 						     version_number,
8046 						     reference_cd_type,
8047 						     creation_date,
8048 						     created_by,
8049 						     last_update_date,
8050 						     last_updated_by,
8051 						     last_update_login,
8052 						     reference_code,
8053 						     reference_code_desc
8054 						   ) VALUES (
8055 						     igs_ps_unitreqref_cd_s.NEXTVAL,
8056 						     p_tab_ref_cd(i).unit_cd,
8057 						     p_tab_ref_cd(i).version_number,
8058 						     p_tab_ref_cd(i).reference_cd_type,
8059 						     SYSDATE,
8060 						     g_n_user_id,
8061 						     SYSDATE,
8062 						     g_n_user_id,
8063 						     g_n_login_id,
8064 						     p_tab_ref_cd(i).reference_cd,
8065 						     p_tab_ref_cd(i).description
8066 						   );
8067                   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8068 		    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_Inserted_igs_ps_unitreqref_cd',
8069 		    'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8070 		    ||p_tab_ref_cd(i).version_number||'  '||'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||
8071 		    'reference_cd:'||p_tab_ref_cd(i).reference_cd||'  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8072                   END IF;
8073 
8074 	       END IF;
8075 
8076 	    ELSIF p_tab_ref_cd(i).data_type = 'SECTION' THEN
8077 
8078 	       IF p_tab_ref_cd(i).gen_ref_flag = 'Y' THEN -- if generic reference code
8079 		  --Enh Bug#2972950
8080 		  --For the PSP Enhancements TD:
8081 		  --Added the column's reference_code_type,reference_code,reference_code_desc
8082 		  --in the INSERT of table igs_ps_usec_ref_cd
8083 		  --Also deleted column reference_code_id in the INSERT of table igs_ps_usec_ref_cd
8084 
8085 		  -- Creating the unit section refernce code if the datatype is SECTION.
8086                   IF l_insert_update = 'I' THEN
8087 
8088 		    INSERT INTO igs_ps_usec_ref_cd (
8089 						     unit_section_reference_cd_id,
8090 						     unit_section_reference_id,
8091 						     creation_date,
8092 						     created_by,
8093 						     last_update_date,
8094 						     last_updated_by,
8095 						     last_update_login,
8096 						     reference_code_type,
8097 						     reference_code,
8098 						     reference_code_desc
8099 						   ) VALUES (
8100 						     igs_ps_usec_ref_cd_s.nextval,
8101 						     l_n_usec_ref_id,
8102 						     sysdate,
8103 						     g_n_user_id,
8104 						     sysdate,
8105 						     g_n_user_id,
8106 						     g_n_login_id,
8107 						     p_tab_ref_cd(i).reference_cd_type,
8108 						     p_tab_ref_cd(i).reference_cd,
8109 						     p_tab_ref_cd(i).description
8110 						   );
8111 	        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8112 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_Inserted_igs_ps_usec_ref_cd',
8113 		  'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8114 		  ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8115 		  ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8116 		  'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8117 		  '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8118 		END IF;
8119                   ELSE
8120 
8121                     UPDATE igs_ps_usec_ref_cd SET reference_code_desc=p_tab_ref_cd(i).description,last_updated_by=g_n_user_id,
8122                     last_update_date=SYSDATE WHERE unit_section_reference_id=l_n_usec_ref_id AND
8123 		    reference_code_type=p_tab_ref_cd(i).reference_cd_type AND reference_code=p_tab_ref_cd(i).reference_cd;
8124 
8125                     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8126 		      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_Updated_igs_ps_usec_ref_cd',
8127 		      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8128 		      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8129 		      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8130 		      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8131 		      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8132 		    END IF;
8133 
8134 		  END IF;
8135 	       ELSE -- else unit section requirements reference code
8136 	          IF l_insert_update = 'I' THEN
8137 
8138 		    INSERT INTO igs_ps_us_req_ref_cd (
8139 						       unit_section_req_ref_cd_id,
8140 						       unit_section_reference_id,
8141 						       reference_cd_type,
8142 						       creation_date,
8143 						       created_by,
8144 						       last_update_date,
8145 						       last_updated_by,
8146 						       last_update_login,
8147 						       reference_code,
8148 						       reference_code_desc
8149 						     ) VALUES (
8150 						       igs_ps_us_req_ref_cd_s.NEXTVAL,
8151 						       l_n_usec_ref_id,
8152 						       p_tab_ref_cd(i).reference_cd_type,
8153 						       SYSDATE,
8154 						       g_n_user_id,
8155 						       SYSDATE,
8156 						       g_n_user_id,
8157 						       g_n_login_id,
8158 						       p_tab_ref_cd(i).reference_cd,
8159 						       p_tab_ref_cd(i).description
8160 						     );
8161 		   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8162 		      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_Inserted_igs_ps_us_req_ref_cd',
8163 		      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8164 		      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8165 		      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8166 		      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8167 		      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8168 		    END IF;
8169                   ELSE
8170 
8171 		    UPDATE igs_ps_us_req_ref_cd SET reference_code_desc=p_tab_ref_cd(i).description,last_updated_by=g_n_user_id,
8172                     last_update_date=SYSDATE WHERE unit_section_reference_id=l_n_usec_ref_id AND
8173 		    reference_cd_type=p_tab_ref_cd(i).reference_cd_type AND reference_code=p_tab_ref_cd(i).reference_cd;
8174 
8175                     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8176 		      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_updated_igs_ps_us_req_ref_cd',
8177 		      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8178 		      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8179 		      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8180 		      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8181 		      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag);
8182 		    END IF;
8183 
8184 		  END IF;
8185 	       END IF;
8186 
8187 	    ELSIF p_tab_ref_cd(i).data_type = 'OCCURRENCE' THEN
8188 
8189 	     --Enh Bug#2972950
8190 	     --For the PSP Enhancements TD:
8191 	     --Added the reference_code_desc column in the INSERT of table igs_ps_usec_ocur_ref
8192 
8193 	     --Creating the unit section occurrence refernce code if the datatype is OCCURRENCE.
8194 	      IF l_insert_update = 'I' THEN
8195 
8196 	        INSERT INTO igs_ps_usec_ocur_ref (
8197 						  unit_sec_occur_reference_id,
8198 						  unit_section_occurrence_id,
8199 						  reference_code_type,
8200 						  reference_code,
8201 						  creation_date,
8202 						  created_by,
8203 						  last_update_date,
8204 						  last_updated_by,
8205 						  last_update_login,
8206 						  reference_code_desc
8207 						 ) VALUES (
8208 						   igs_ps_usec_occur_ref_s.nextval,
8209 						   l_n_uso_id,
8210 						   p_tab_ref_cd(i).reference_cd_type,
8211 						   p_tab_ref_cd(i).reference_cd,
8212 						   sysdate,
8213 						   g_n_user_id,
8214 						   sysdate,
8215 						   g_n_user_id,
8216 						   g_n_login_id,
8217 						   p_tab_ref_cd(i).description
8218 						 );
8219                   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8220 		      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_inserted_igs_ps_usec_ocur_ref',
8221 		      'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8222 		      ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8223 		      ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8224 		      'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8225 		      '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
8226 		      ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id);
8227 		    END IF;
8228               ELSE
8229 
8230                 UPDATE igs_ps_usec_ocur_ref SET reference_code_desc=p_tab_ref_cd(i).description,last_updated_by=g_n_user_id,
8231                 last_update_date=SYSDATE WHERE unit_section_occurrence_id=l_n_uso_id AND
8232 		reference_code_type=p_tab_ref_cd(i).reference_cd_type AND reference_code=p_tab_ref_cd(i).reference_cd;
8233 
8234                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8235 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.Record_updated_igs_ps_usec_ocur_ref',
8236 		  'Data Type:'||p_tab_ref_cd(i).data_type||'  '||'Unit code:'||p_tab_ref_cd(i).unit_cd||'  '||'Version number:'
8237 		  ||p_tab_ref_cd(i).version_number||'  '||'teach_cal_alternate_code:'||p_tab_ref_cd(i).teach_cal_alternate_code
8238 		  ||'  '||'Location_cd:'||p_tab_ref_cd(i).location_cd||'  '||'Unit Class:'||p_tab_ref_cd(i).unit_class||'  '||
8239 		  'reference_cd_type:'||p_tab_ref_cd(i).reference_cd_type||'  '||'reference_cd:'||p_tab_ref_cd(i).reference_cd||
8240 		  '  '||'gen_ref_flag:'||p_tab_ref_cd(i).gen_ref_flag||'  '||'occurrence_identifier'||p_tab_ref_cd(i).occurrence_identifier
8241 		  ||'  '||'production_uso_id:'||p_tab_ref_cd(i).production_uso_id);
8242 		END IF;
8243 	      END IF;
8244 
8245 	    END IF;
8246 	    p_tab_ref_cd(i).msg_from  := NULL;
8247 	    p_tab_ref_cd(i).msg_to    := NULL;
8248           ELSIF  p_tab_ref_cd(i).status = 'A' THEN
8249 	    p_tab_ref_cd(i).msg_from  := p_tab_ref_cd(i).msg_from + 1;
8250 	    p_tab_ref_cd(i).msg_to := fnd_msg_pub.count_msg;
8251 	  ELSE
8252 	    p_c_rec_status := p_tab_ref_cd(i).status;
8253 	    p_tab_ref_cd(i).msg_from  := p_tab_ref_cd(i).msg_from + 1;
8254 	    p_tab_ref_cd(i).msg_to := fnd_msg_pub.count_msg;
8255 	    IF p_c_rec_status = 'E' THEN
8256 	      RETURN;
8257 	    END IF;
8258 	  END IF; -- status is E
8259       END IF; --  end of exist(i) if
8260     END LOOP;
8261 
8262     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8263       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_unit_ref_code.after_import_status',p_c_rec_status);
8264     END IF;
8265 
8266 
8267   END create_unit_ref_code;
8268 
8269  --This procedure is a sub process to create Unit Section Occurrence Instructors
8270  --in production table(IGS_PS_USO_INSTRCTRS)
8271   PROCEDURE create_uso_ins( p_tab_uso_ins IN OUT NOCOPY igs_ps_generic_pub.uso_ins_tbl_type,
8272                             p_c_rec_status   OUT NOCOPY VARCHAR2 ) AS
8273     /***********************************************************************************************
8274 
8275     Created By:         smvk
8276     Date Created By:    20-May-2003
8277     Purpose:            This procedure imports unit section occurrence instructor.
8278 
8279     Known limitations,enhancements,remarks:
8280     Change History
8281     Who       When         What
8282     sommukhe  02-AUG-2006  Bug#5356402,Using function usoexists to probe the PL/SQL table so that the status of occurrences
8283                            are not changed to resheduling when imported together with instructors.
8284     smvk      30-Aug-2004  Bug # 3862086. Modified Return to Exit. Post insert business logic needs to be executed Always.
8285                            This internally clears the package level PL/SQL table v_tab_usec_tr.
8286     smvk      23-Sep-2003  Bug # 3121311, Removed the call to procedures uso_effective_dates and validate_instructor.
8287     jbegum    4-June-2003  Enh Bug#2972950
8288                            For PSP Scheduling Enhancements TD:
8289                            Modified local procedures validate_db_cons and validate_derivation.
8290     ***********************************************************************************************/
8291 
8292     l_n_ins_id            igs_ps_uso_instrctrs.instructor_id%TYPE;
8293     l_n_uso_id            igs_ps_uso_instrctrs.unit_section_occurrence_id%TYPE;
8294     l_n_uoo_id            igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
8295     l_d_start_dt          igs_ps_usec_occurs_all.start_date%TYPE;
8296     l_d_end_dt            igs_ps_usec_occurs_all.end_date%TYPE;
8297 
8298     CURSOR c_occurs(cp_unit_section_occurrence_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
8299     SELECT uso.unit_section_occurrence_id
8300     FROM igs_ps_usec_occurs_all uso
8301     WHERE (uso.schedule_status IS NOT NULL AND uso.schedule_status NOT IN ('PROCESSING','USER_UPDATE'))
8302     AND uso.no_set_day_ind ='N'
8303     AND uso.unit_section_occurrence_id=cp_unit_section_occurrence_id;
8304 
8305     FUNCTION usoexists(p_n_uso_id igs_ps_uso_instrctrs.unit_section_occurrence_id%TYPE) RETURN BOOLEAN AS
8306   /***********************************************************************************************
8307     Created By     :  sommukhe
8308     Date Created By:  1-08-2006.
8309     Purpose        :  This utility procedure is to check if a uso exists in a pl/sql table
8310 
8311     Known limitations,enhancements,remarks:
8312     Change History (in reverse chronological order)
8313     Who         When            What
8314   ***********************************************************************************************/
8315     BEGIN
8316       FOR i in 1..l_tbl_uso.count LOOP
8317         IF p_n_uso_id = l_tbl_uso(i) THEN
8318           RETURN TRUE;
8319 	END IF;
8320       END LOOP;
8321       RETURN FALSE;
8322     END usoexists;
8323 
8324     PROCEDURE trim_values ( p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
8325     BEGIN
8326       p_uso_ins_rec.instructor_person_number := TRIM(p_uso_ins_rec.instructor_person_number);
8327       p_uso_ins_rec.production_uso_id := TRIM(p_uso_ins_rec.production_uso_id);
8328       p_uso_ins_rec.unit_cd := TRIM(p_uso_ins_rec.unit_cd);
8329       p_uso_ins_rec.version_number := TRIM(p_uso_ins_rec.version_number);
8330       p_uso_ins_rec.teach_cal_alternate_code := TRIM(p_uso_ins_rec.teach_cal_alternate_code);
8331       p_uso_ins_rec.location_cd := TRIM(p_uso_ins_rec.location_cd);
8332       p_uso_ins_rec.unit_class := TRIM(p_uso_ins_rec.unit_class);
8333       p_uso_ins_rec.occurrence_identifier := TRIM(p_uso_ins_rec.occurrence_identifier);
8334       p_uso_ins_rec.confirmed_flag := TRIM(p_uso_ins_rec.confirmed_flag);
8335       p_uso_ins_rec.wl_percentage_allocation := TRIM(p_uso_ins_rec.wl_percentage_allocation);
8336       p_uso_ins_rec.instructional_load_lecture := TRIM(p_uso_ins_rec.instructional_load_lecture);
8337       p_uso_ins_rec.instructional_load_laboratory :=  TRIM(p_uso_ins_rec.instructional_load_laboratory);
8338       p_uso_ins_rec.instructional_load_other :=  TRIM(p_uso_ins_rec.instructional_load_other);
8339       p_uso_ins_rec.lead_instructor_flag := TRIM(p_uso_ins_rec.lead_instructor_flag);
8340 
8341     END trim_values;
8342 
8343     PROCEDURE validate_parameters(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
8344     /***********************************************************************************************
8345 
8346     Created By:         smvk
8347     Date Created By:    20-May-2003
8348     Purpose:            This procedure validates all mandatory parameter required for the unit section occurrence
8349                         instructor process to proceed.
8350 
8351     Known limitations,enhancements,remarks:
8352     Change History
8353     Who       When         What
8354     ***********************************************************************************************/
8355 
8356     BEGIN
8357       p_uso_ins_rec.status:='S';
8358 
8359       -- Checking for the mandatory existence of Unit Code, verison  number, instructor person number parameter in the record.
8360       IF p_uso_ins_rec.instructor_person_number IS NULL OR p_uso_ins_rec.instructor_person_number = FND_API.G_MISS_CHAR THEN
8361          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
8362          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY',fnd_message.get,NULL,FALSE);
8363          p_uso_ins_rec.status := 'E';
8364       END IF;
8365 
8366       IF p_uso_ins_rec.unit_cd IS NULL OR p_uso_ins_rec.unit_cd = FND_API.G_MISS_CHAR THEN
8367          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
8368          p_uso_ins_rec.status := 'E';
8369       END IF;
8370 
8371       IF p_uso_ins_rec.version_number IS NULL OR p_uso_ins_rec.version_number = FND_API.G_MISS_NUM THEN
8372          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
8373          p_uso_ins_rec.status := 'E';
8374       END IF;
8375 
8376       -- if the production USO id is not provided then Teching calendar alternate code, location code and
8377       -- unit class are required.
8378       IF p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM THEN
8379          IF p_uso_ins_rec.teach_cal_alternate_code IS NULL OR p_uso_ins_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
8380             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
8381             p_uso_ins_rec.status := 'E';
8382          END IF;
8383          IF p_uso_ins_rec.location_cd IS NULL OR p_uso_ins_rec.location_cd = FND_API.G_MISS_CHAR THEN
8384             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
8385             p_uso_ins_rec.status := 'E';
8386          END IF;
8387          IF p_uso_ins_rec.unit_class IS NULL OR p_uso_ins_rec.unit_class = FND_API.G_MISS_CHAR THEN
8388             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
8389           p_uso_ins_rec.status := 'E';
8390          END IF;
8391       END IF;
8392 
8393       IF (p_uso_ins_rec.teach_cal_alternate_code IS NULL OR p_uso_ins_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR ) AND
8394          (p_uso_ins_rec.location_cd IS NULL OR p_uso_ins_rec.location_cd = FND_API.G_MISS_CHAR ) AND
8395          (p_uso_ins_rec.unit_class IS NULL OR p_uso_ins_rec.unit_class = FND_API.G_MISS_CHAR) THEN
8396          IF p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM THEN
8397             fnd_message.set_name('IGS','IGS_PS_PRODUCTION_USO_ID');
8398             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY',fnd_message.get,NULL,FALSE);
8399             p_uso_ins_rec.status := 'E';
8400          END IF;
8401       END IF;
8402 
8403       IF (p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM ) AND
8404          (p_uso_ins_rec.occurrence_identifier IS NULL OR p_uso_ins_rec.occurrence_identifier = FND_API.G_MISS_CHAR) THEN
8405          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_OCCRS_ID','IGS_PS_LOG_PARAMETERS', FALSE);
8406          p_uso_ins_rec.status := 'E';
8407       END IF;
8408 
8409 
8410     END validate_parameters;
8411 
8412     PROCEDURE validate_derivation(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
8413     /***********************************************************************************************
8414 
8415     Created By:         smvk
8416     Date Created By:    20-May-2003
8417     Purpose:            This procedure derives the values required for creation of unit section occurrence instructor in production table.
8418 
8419     Known limitations,enhancements,remarks:
8420     Change History
8421     Who       When         What
8422     smvk      28-Jul-2004  Bug # 3793580. Coded to call get_uso_id procedure and removed
8423                            cursors used to derive USO id.
8424     jbegum    5-June-2003  Bug#2972950
8425                            For the PSP Scheduling Enhancements TD:
8426                            Modified the two cursors c_tba_count,c_tba_uso_id
8427     ***********************************************************************************************/
8428 
8429 
8430       CURSOR c_uoo_id (cp_n_uso_id IN igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
8431         SELECT A.uoo_id
8432         FROM   igs_ps_usec_occurs_all A
8433         WHERE  A.unit_section_occurrence_id = cp_n_uso_id;
8434 
8435       l_c_cal_type    igs_ca_inst_all.cal_type%TYPE;
8436       l_n_seq_num     igs_ca_inst_all.sequence_number%TYPE;
8437       l_d_start       igs_ca_inst_all.start_dt%TYPE;
8438       l_d_end         igs_ca_inst_all.end_dt%TYPE;
8439       l_c_ret_status  VARCHAR2(30);
8440       l_c_msg         VARCHAR2(30);
8441 
8442     BEGIN
8443       -- Initialize the variable use to store the derived values.
8444       l_n_ins_id := NULL;
8445       l_n_uso_id := NULL;
8446       l_n_uoo_id := NULL;
8447 
8448       -- Derive the Instructor identifier
8449       igs_ps_validate_lgcy_pkg.get_party_id(p_uso_ins_rec.instructor_person_number, l_n_ins_id);
8450       IF l_n_ins_id IS NULL THEN
8451          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
8452          igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
8453          p_uso_ins_rec.status := 'E';
8454       END IF;
8455 
8456       -- if the production unit section occurrence identifier is provided then validate it
8457       -- otherwise derive the production unit section occurrence identifier.
8458       IF p_uso_ins_rec.production_uso_id IS NOT NULL THEN
8459          IF igs_ps_usec_occurs_pkg.get_pk_for_validation(p_uso_ins_rec.production_uso_id) THEN
8460             l_n_uso_id := p_uso_ins_rec.production_uso_id;
8461             -- Also derive the unit section identifier uoo_id for the the unit section occurrence identifier
8462             OPEN  c_uoo_id(l_n_uso_id);
8463             FETCH c_uoo_id INTO l_n_uoo_id;
8464             CLOSE c_uoo_id;
8465          ELSE
8466             fnd_message.set_name('IGS','IGS_PS_PRODUCTION_USO_ID');
8467             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
8468             p_uso_ins_rec.status := 'E';
8469          END IF;
8470       ELSE
8471          -- Deriving the value of Unit section Occurrence identifier
8472 
8473          -- Deriving the Calendar Type and Calendar Sequence Number
8474          igs_ge_gen_003.get_calendar_instance(p_uso_ins_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
8475          IF l_c_ret_status <> 'SINGLE' THEN
8476             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
8477              p_uso_ins_rec.status := 'E';
8478          END IF;
8479          -- Deriving the Unit Offering Option Identifier
8480          l_c_ret_status := NULL;
8481          igs_ps_validate_lgcy_pkg.get_uoo_id(p_uso_ins_rec.unit_cd, p_uso_ins_rec.version_number, l_c_cal_type, l_n_seq_num, p_uso_ins_rec.location_cd, p_uso_ins_rec.unit_class, l_n_uoo_id, l_c_ret_status);
8482          IF l_c_ret_status IS NOT NULL THEN
8483             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
8484             p_uso_ins_rec.status := 'E';
8485          END IF;
8486 
8487 
8488 	 --Derive the unit section occurrence id
8489 	 l_c_msg := NULL;
8490 	 igs_ps_validate_lgcy_pkg.get_uso_id( p_uoo_id                => l_n_uoo_id,
8491 					      p_occurrence_identifier => p_uso_ins_rec.occurrence_identifier,
8492 					      p_uso_id                => l_n_uso_id,
8493 					      p_message               => l_c_msg
8494 					    );
8495 	 IF l_c_msg IS NOT NULL THEN
8496 	    fnd_message.set_name('IGS',l_c_msg);
8497 	    fnd_msg_pub.add;
8498 	    p_uso_ins_rec.status := 'E';
8499 	 END IF;
8500 
8501       END IF;
8502     END validate_derivation;
8503 
8504     PROCEDURE validate_db_cons(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
8505 	CURSOR c_unit_ver (cp_n_uso_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
8506 	SELECT  a.unit_cd, a.version_number
8507 	FROM    igs_ps_unit_ofr_opt_all a, igs_ps_usec_occurs_all b
8508 	WHERE   a.uoo_id = b.uoo_id
8509 	AND     b.unit_section_occurrence_id = cp_n_uso_id;
8510 
8511 	rec_unit_ver c_unit_ver%ROWTYPE;
8512 
8513 	CURSOR c_occur_status (cp_uso_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
8514 	SELECT 'X'
8515 	FROM   igs_ps_usec_occurs_all
8516 	WHERE  unit_section_occurrence_id = cp_uso_id
8517 	AND    schedule_status = 'PROCESSING';
8518 	l_c_var  VARCHAR2(1);
8519 
8520     BEGIN
8521       -- Check uniqueness validation
8522       IF igs_ps_uso_instrctrs_pkg.get_uk_for_validation(l_n_uso_id, l_n_ins_id) THEN
8523          p_uso_ins_rec.status :='W';
8524          fnd_message.set_name('IGS','IGS_PS_USO_INS');
8525          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', fnd_message.get, NULL, FALSE);
8526          RETURN;
8527       END IF;
8528 
8529       -- Check Constraints
8530       BEGIN
8531         igs_ps_unit_ver_pkg.check_constraints( 'UNIT_CD',p_uso_ins_rec.unit_cd);
8532       EXCEPTION
8533         WHEN OTHERS THEN
8534             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_CD','LEGACY_TOKENS',TRUE);
8535             p_uso_ins_rec.status :='E';
8536       END;
8537 
8538       BEGIN
8539         igs_ps_unit_ver_pkg.check_constraints('VERSION_NUMBER',p_uso_ins_rec.version_number);
8540       EXCEPTION
8541         WHEN OTHERS THEN
8542           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VER_NUM_1_999',NULL,NULL,TRUE);
8543           p_uso_ins_rec.status :='E';
8544       END;
8545 
8546       -- Foreign Key Checking
8547       IF NOT igs_pe_person_pkg.get_pk_for_validation(l_n_ins_id ) THEN
8548          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
8549          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', fnd_message.get, NULL, FALSE);
8550          p_uso_ins_rec.status := 'E';
8551       END IF;
8552       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
8553          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
8554          p_uso_ins_rec.status := 'E';
8555       END IF;
8556 
8557       IF p_uso_ins_rec.production_uso_id IS NOT NULL THEN
8558 
8559          -- validate the production USO ID with unit_cd, version_number
8560          OPEN  c_unit_ver(p_uso_ins_rec.production_uso_id);
8561          FETCH c_unit_ver INTO rec_unit_ver;
8562          IF c_unit_ver%FOUND THEN
8563             IF p_uso_ins_rec.unit_cd <> rec_unit_ver.unit_cd  OR
8564                p_uso_ins_rec.version_number <> rec_unit_ver.version_number THEN
8565                fnd_message.set_name('IGS','IGS_PS_LGCY_UNIT_VER_NOT_USO');
8566                fnd_msg_pub.add;
8567                p_uso_ins_rec.status :='E';
8568             END IF;
8569          ELSE
8570             fnd_message.set_name('IGS','IGS_PS_LGCY_UNIT_VER_NOT_USO');
8571             fnd_msg_pub.add;
8572             p_uso_ins_rec.status :='E';
8573          END IF;
8574          CLOSE c_unit_ver;
8575 
8576       END IF;
8577 
8578 
8579       --When the occurrence is Scheduling in progress then import is not allowed
8580       --Note this validation cannot be pushed in the post validation as that is also called from the instructor override
8581       OPEN c_occur_status (l_n_uso_id);
8582       FETCH c_occur_status INTO l_c_var;
8583       IF c_occur_status%FOUND THEN
8584 	 fnd_message.set_name ( 'IGS', 'IGS_PS_SCHEDULING_IN_PROGRESS' );
8585 	 fnd_msg_pub.add;
8586 	 p_uso_ins_rec.status := 'E';
8587       END IF;
8588       CLOSE c_occur_status;
8589 
8590     END validate_db_cons;
8591 
8592   BEGIN
8593 
8594      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8595        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.start_logging_for','Unit Section Occurrence Instructors');
8596      END IF;
8597 
8598      p_c_rec_status := 'S';
8599      FOR I in 1..p_tab_uso_ins.LAST LOOP
8600          IF p_tab_uso_ins.EXISTS(I) THEN
8601             p_tab_uso_ins(I).status := 'S';
8602             p_tab_uso_ins(I).msg_from := fnd_msg_pub.count_msg;
8603             trim_values(p_tab_uso_ins(I));
8604             validate_parameters(p_tab_uso_ins(I));
8605 
8606 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8607 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.status_after_validate_parameters',
8608 	      'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
8609 	      'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
8610 	       ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
8611 	       ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
8612 	       ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
8613 	    END IF;
8614 
8615             IF p_tab_uso_ins(I).status = 'S' THEN
8616                validate_derivation(p_tab_uso_ins(I));
8617 
8618 	       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8619 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.status_after_validate_derivation',
8620 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
8621 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
8622 		   ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
8623 		   ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
8624 		   ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
8625 	       END IF;
8626 
8627             END IF;
8628 
8629             IF p_tab_uso_ins(I).status = 'S' THEN
8630                validate_db_cons ( p_tab_uso_ins(I) );
8631 	        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8632 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.status_after_validate_db_cons',
8633 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
8634 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
8635 		   ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
8636 		   ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
8637 		   ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
8638 	       END IF;
8639             END IF;
8640             IF p_tab_uso_ins(I).status = 'S' THEN
8641                INSERT INTO IGS_PS_USO_INSTRCTRS (
8642                                                   USO_INSTRUCTOR_ID,
8643                                                   UNIT_SECTION_OCCURRENCE_ID,
8644                                                   INSTRUCTOR_ID,
8645                                                   CREATED_BY ,
8646                                                   CREATION_DATE,
8647                                                   LAST_UPDATED_BY,
8648                                                   LAST_UPDATE_DATE ,
8649                                                   LAST_UPDATE_LOGIN
8650                                                 ) VALUES (
8651                                                   igs_ps_uso_instrctrs_s.nextval,
8652                                                   l_n_uso_id,
8653                                                   l_n_ins_id,
8654                                                   g_n_user_id,
8655                                                   sysdate,
8656                                                   g_n_user_id,
8657                                                   sysdate,
8658                                                   g_n_login_id
8659                                                 );
8660                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8661 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.record_inserted',
8662 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
8663 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
8664 		   ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
8665 		   ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
8666 		   ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id);
8667 	       END IF;
8668             END IF;
8669 
8670             IF p_tab_uso_ins(I).status = 'S' THEN
8671                igs_ps_validate_lgcy_pkg.post_uso_ins(l_n_ins_id, l_n_uoo_id, p_tab_uso_ins(I),I);
8672                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8673 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.status_after_post_uso_ins',
8674 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
8675 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
8676 		   ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
8677 		   ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
8678 		   ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
8679 	       END IF;
8680             END IF;
8681 
8682             IF p_tab_uso_ins(I).status = 'S' THEN
8683 	      --Update the schedule status of the occurrence to USER_UPDATE if inserting a record
8684 	      --Note this validation cannot be pushed in the post validation as that is also called from the instructor override
8685               IF NOT usoexists(l_n_uso_id) THEN
8686 		FOR l_occurs_rec IN c_occurs(l_n_uso_id) LOOP
8687 		  igs_ps_usec_schedule.update_occurrence_status(l_occurs_rec.unit_section_occurrence_id,'USER_UPDATE','N');
8688 		END LOOP;
8689 	      END IF;
8690             END IF;
8691 
8692             IF p_tab_uso_ins(I).status = 'S' THEN
8693                p_tab_uso_ins(I).msg_from := NULL;
8694                p_tab_uso_ins(I).msg_to := NULL;
8695             ELSE
8696                p_c_rec_status := p_tab_uso_ins(I).status;
8697                p_tab_uso_ins(I).msg_from := p_tab_uso_ins(I).msg_from+1;
8698                p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
8699                IF p_tab_uso_ins(I).status = 'E' THEN
8700                   RETURN;
8701                END IF;
8702             END IF;
8703 
8704          END IF;
8705      END LOOP;
8706      IF NOT igs_ps_validate_lgcy_pkg.post_uso_ins_busi(p_tab_uso_ins) THEN
8707         p_c_rec_status :=  'E';
8708      END IF;
8709 
8710      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8711        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_unit_lgcy_pkg.create_uso_ins.after_import_status',p_c_rec_status);
8712      END IF;
8713 
8714      l_tbl_uso.DELETE;
8715 
8716   END create_uso_ins;
8717 
8718 
8719 END igs_ps_unit_lgcy_pkg;