DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_CREATE_GENERIC_PKG

Source


1 PACKAGE BODY igs_ps_create_generic_pkg AS
2 /* $Header: IGSPS91B.pls 120.7 2006/05/12 04:59:39 abshriva noship $ */
3 
4   /***********************************************************************************************
5     Created By     :  Sanjeeb Rakshit, Somnath Mukherjee
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   ********************************************************************************************** */
37 
38   g_n_user_id igs_ps_unit_ver_all.created_by%TYPE := NVL(fnd_global.user_id,-1);          -- Stores the User Id
39   g_n_login_id igs_ps_unit_ver_all.last_update_login%TYPE := NVL(fnd_global.login_id,-1); -- Stores the Login Id
40 
41 
42   PROCEDURE create_usec_res_seat(
43           p_usec_res_seat_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_tbl_type,
44           p_c_rec_status OUT NOCOPY VARCHAR2,
45 	  p_calling_context  IN VARCHAR2
46   ) AS
47   /***********************************************************************************************
48     Created By     :  Sommukhe
49     Date Created By:  17-Jun-2005
50     Purpose        :  This procedure is a sub process to insert records of Unit Section Reserve Seating.
51 
52     Known limitations,enhancements,remarks:
53     Change History (in reverse chronological order)
54     Who         When            What
55     --sommukhe    12-AUG-2005     Bug#4377818,changed the cursor cur_hzp, included table igs_pe_hz_parties in
56     --                            FROM clause and modified the WHERE clause by joining HZ_PARTIES and IGS_PE_HZ_PARTIES
57     --                            using party_id and org unit being compared with oss_org_unit_cd of IGS_PE_HZ_PARTIES.
58   ********************************************************************************************** */
59      /* Private Procedures for create_usec_res_seat */
60 
61     l_insert_update      VARCHAR2(1);
62     l_n_uoo_id           igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
63     l_n_rsv_usec_pri_id  igs_ps_rsv_usec_pri.rsv_usec_pri_id%type;
64     l_n_group_id         igs_pe_persid_group_all.group_id%TYPE;
65 
66     l_tbl_uoo            igs_ps_create_generic_pkg.uoo_tbl_type;
67 
68     PROCEDURE trim_values ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type ) AS
69     BEGIN
70 
71       p_usec_rsv_rec.unit_cd := trim(p_usec_rsv_rec.unit_cd);
72       p_usec_rsv_rec.version_number := trim(p_usec_rsv_rec.version_number);
73       p_usec_rsv_rec.teach_cal_alternate_code := trim(p_usec_rsv_rec.teach_cal_alternate_code);
74       p_usec_rsv_rec.location_cd := trim(p_usec_rsv_rec.location_cd);
75       p_usec_rsv_rec.unit_class := trim(p_usec_rsv_rec.unit_class);
76       p_usec_rsv_rec.priority_order := trim(p_usec_rsv_rec.priority_order);
77       p_usec_rsv_rec.priority_value := trim(p_usec_rsv_rec.priority_value);
78       p_usec_rsv_rec.preference_order := trim(p_usec_rsv_rec.preference_order);
79       p_usec_rsv_rec.preference_code := trim(p_usec_rsv_rec.preference_code);
80       p_usec_rsv_rec.preference_version := trim(p_usec_rsv_rec.preference_version);
81       p_usec_rsv_rec.percentage_reserved := trim(p_usec_rsv_rec.percentage_reserved);
82     END trim_values;
83 
84 
85     PROCEDURE create_rsvpri( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type ) AS
86 
87       -- validate parameters passed reserved seating
88       PROCEDURE validate_parameters ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type ) AS
89       BEGIN
90 
91 	/* Check for Mandatory Parameters */
92 	IF p_usec_rsv_rec.unit_cd IS NULL OR p_usec_rsv_rec.unit_cd = FND_API.G_MISS_CHAR THEN
93 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
94 	  p_usec_rsv_rec.status := 'E';
95 	END IF;
96 
97 	IF p_usec_rsv_rec.version_number IS NULL OR p_usec_rsv_rec.version_number = FND_API.G_MISS_NUM THEN
98 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
99 	  p_usec_rsv_rec.status := 'E';
100 	END IF;
101 
102 	IF p_usec_rsv_rec.teach_cal_alternate_code IS NULL OR p_usec_rsv_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
103 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
104 	  p_usec_rsv_rec.status := 'E';
105 	END IF;
106 
107 	IF p_usec_rsv_rec.location_cd IS NULL OR p_usec_rsv_rec.location_cd = FND_API.G_MISS_CHAR THEN
108 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
109 	  p_usec_rsv_rec.status := 'E';
110 	END IF;
111 
112 	IF p_usec_rsv_rec.unit_class IS NULL OR p_usec_rsv_rec.unit_class = FND_API.G_MISS_CHAR THEN
113 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
114 	  p_usec_rsv_rec.status := 'E';
115 	END IF;
116 
117 	IF p_usec_rsv_rec.priority_value IS NULL OR p_usec_rsv_rec.priority_value = FND_API.G_MISS_CHAR THEN
118 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_VALUE', 'LEGACY_TOKENS', FALSE);
119 	  p_usec_rsv_rec.status := 'E';
120 	END IF;
121 
122       END validate_parameters ;
123 
124 
125       --validate derivations of priority
126       PROCEDURE validate_derivations_pri ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_insert_update VARCHAR2 ) AS
127 	l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
128 	l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
129 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
130 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
131 	l_c_message  VARCHAR2(30);
132       BEGIN
133 	-- Derive Calander Type and Sequence Number
134 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_rsv_rec.teach_cal_alternate_code,
135 					       p_cal_type           => l_c_cal_type,
136 					       p_ci_sequence_number => l_n_seq_num,
137 					       p_start_dt           => l_d_start_dt,
138 					       p_end_dt             => l_d_end_dt,
139 					       p_return_status      => l_c_message );
140 	IF ( l_c_message <> 'SINGLE' ) THEN
141 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
142 	  p_usec_rsv_rec.status := 'E';
143 	END IF;
144 	-- Derive uoo_id
145 	l_c_message := NULL;
146 	igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_rsv_rec.unit_cd,
147 					      p_ver_num    => p_usec_rsv_rec.version_number,
148 					      p_cal_type   => l_c_cal_type,
149 					      p_seq_num    => l_n_seq_num,
150 					      p_loc_cd     => p_usec_rsv_rec.location_cd,
151 					      p_unit_class => p_usec_rsv_rec.unit_class,
152 					      p_uoo_id     => l_n_uoo_id,
153 					      p_message    => l_c_message );
154 	IF ( l_c_message IS NOT NULL ) THEN
155 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
156 	  p_usec_rsv_rec.status := 'E';
157 	END IF;
158       END validate_derivations_pri;
159 
160       -- Check for Update
161       FUNCTION check_insert_update ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_n_rsv_usec_pri_id NUMBER) RETURN VARCHAR2 IS
162 	 CURSOR c_usec_rsv_pri(cp_n_uoo_id NUMBER,cp_priority_value VARCHAR2) IS
163 	 SELECT 'X'
164 	 FROM   igs_ps_rsv_usec_pri
165 	 WHERE  uoo_id = cp_n_uoo_id
166 	 AND    priority_value = cp_priority_value;
167 
168 	 c_usec_rsv_pri_rec c_usec_rsv_pri%ROWTYPE;
169       BEGIN
170 	  OPEN c_usec_rsv_pri(l_n_uoo_id,p_usec_rsv_rec.priority_value );
171 	  FETCH c_usec_rsv_pri INTO c_usec_rsv_pri_rec;
172 	  IF c_usec_rsv_pri%NOTFOUND THEN
173 	    CLOSE c_usec_rsv_pri;
174 	    RETURN 'I';
175 	  ELSE
176 	   CLOSE c_usec_rsv_pri;
177 	   RETURN 'U';
178 	  END IF;
179       END check_insert_update;
180 
181       PROCEDURE Assign_default(p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_insert_update VARCHAR2 ) AS
182 
183          CURSOR c_usprv(cp_n_uoo_id NUMBER,cp_priority_value VARCHAR2) IS
184 	 SELECT priority_order
185 	 FROM   igs_ps_rsv_usec_pri
186 	 WHERE  uoo_id = cp_n_uoo_id
187 	 AND    priority_value = cp_priority_value;
188 
189 	 rec_usprv  c_usprv%ROWTYPE;
190 
191       BEGIN
192 
193 	IF p_insert_update = 'U' THEN
194 	   OPEN c_usprv( l_n_uoo_id,p_usec_rsv_rec.priority_value);
195 	   FETCH c_usprv INTO rec_usprv;
196 	   CLOSE c_usprv;
197 
198       	   IF p_usec_rsv_rec.priority_order IS NULL  THEN
199 	      p_usec_rsv_rec.priority_order:= rec_usprv.priority_order;
200            ELSIF p_usec_rsv_rec.priority_order = FND_API.G_MISS_NUM THEN
201 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_ORDER', 'LEGACY_TOKENS', FALSE);
202               p_usec_rsv_rec.status := 'E';
203 	   END IF;
204 
205 	 END IF;
206 
207       END Assign_default;
208 
209       -- Validate Database Constraints for reserved seating priority.
210       PROCEDURE validate_db_cons_rsvpri ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_insert_update VARCHAR2 ) AS
211       BEGIN
212 	IF(p_insert_update = 'I') THEN
213 	  /* Unique Key Validation */
214 	  IF igs_ps_rsv_usec_pri_pkg.get_uk_for_validation (x_uoo_id => l_n_uoo_id,
215 							    x_priority_value =>p_usec_rsv_rec.priority_value ) THEN
216 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_RSV_PRI', 'LEGACY_TOKENS', FALSE);
217 	    p_usec_rsv_rec.status := 'W';
218 	    RETURN;
219 	  END IF;
220 	END IF;
221 	 /* Validate FK Constraints */
222 
223 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
224 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
225 	  p_usec_rsv_rec.status := 'E';
226 	END IF;
227 
228 	 IF NOT igs_lookups_view_pkg.get_pk_for_validation('RESERVE_SEAT_PRIORITY', p_usec_rsv_rec.priority_value) THEN
229 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'PRIORITY_VALUE', 'LEGACY_TOKENS', FALSE);
230 	  p_usec_rsv_rec.status := 'E';
231 	END IF;
232       END validate_db_cons_rsvpri;
233 
234     BEGIN
235 
236       IF p_usec_rsv_rec.status = 'S' THEN
237         validate_parameters(p_usec_rsv_rec);
238 
239         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
240 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_validate_parameters',
241 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
242 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
243 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
244 	  ||p_usec_rsv_rec.status);
245         END IF;
246 
247       END IF;
248 
249       IF p_usec_rsv_rec.status = 'S' THEN
250         validate_derivations_pri(p_usec_rsv_rec,l_insert_update);
251 
252         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
253 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_validate_derivations_pri',
254 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
255 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
256 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
257 	  ||p_usec_rsv_rec.status);
258         END IF;
259 
260       END IF;
261 
262 
263       --Find out whether it is insert/update of record
264       l_insert_update:='I';
265       IF p_usec_rsv_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
266         l_insert_update:= check_insert_update(p_usec_rsv_rec,l_n_rsv_usec_pri_id);
267 
268         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
269 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_check_insert_update',
270 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
271 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
272 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
273 	  ||p_usec_rsv_rec.status);
274         END IF;
275 
276       END IF;
277 
278 
279       IF p_usec_rsv_rec.status = 'S' AND p_calling_context = 'S'  THEN
280         IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
281           fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
282           fnd_msg_pub.add;
283           p_usec_rsv_rec.status := 'A';
284         END IF;
285 
286 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
287 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_check_import_allowed',
288 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
289 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
290 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
291 	  ||p_usec_rsv_rec.status);
292         END IF;
293 
294       END IF;
295 
296       IF p_usec_rsv_rec.status = 'S' THEN
297 	 Assign_default(p_usec_rsv_rec,l_insert_update);
298 
299          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
300 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_Assign_default',
301 	   'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
302 	   ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
303 	   p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
304 	   ||p_usec_rsv_rec.status);
305          END IF;
306 
307       END IF;
308 
309 
310 
311       IF l_tbl_uoo.count = 0 THEN
312         l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
313       ELSE
314         IF NOT igs_ps_validate_lgcy_pkg.isExists(l_n_uoo_id,l_tbl_uoo) THEN
315 	  l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
316 	END IF;
317       END IF;
318 
319       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
320 	fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.Count_unique_uoo_ids',
321 	'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
322 	||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
323 	p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Count:'||l_tbl_uoo.count);
324       END IF;
325 
326       IF p_usec_rsv_rec.status = 'S' THEN
327         validate_db_cons_rsvpri(p_usec_rsv_rec,l_insert_update);
328 
329         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
330 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_validate_db_cons_rsvpri',
331 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
332 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
333 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
334 	  ||p_usec_rsv_rec.status);
335         END IF;
336 
337       END IF;
338 
339 
340       IF p_usec_rsv_rec.status = 'S' THEN
341         igs_ps_validate_generic_pkg.validate_usec_rsvpri (p_usec_rsv_rec,l_n_uoo_id,l_insert_update);
342 
343         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
344 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_Business_validation',
345 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
346 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
347 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||'Status:'
348 	  ||p_usec_rsv_rec.status);
349         END IF;
350 
351       END IF;
352 
353 
354       IF p_usec_rsv_rec.status = 'S' THEN
355 	 IF l_insert_update = 'I' THEN
356               /* Insert Record */
357               INSERT INTO igs_ps_rsv_usec_pri
358 	      (
359 	      rsv_usec_pri_id,
360               uoo_id,
361               priority_order,
362               priority_value,
363               created_by,
364               creation_date,
365               last_updated_by,
366               last_update_date,
367               last_update_login
368 	      )
369 	      VALUES
370 	      (
371               igs_ps_rsv_usec_pri_s.nextval,
372               l_n_uoo_id,
373               p_usec_rsv_rec.priority_order,
374               p_usec_rsv_rec.priority_value,
375               g_n_user_id,
376               sysdate,
377               g_n_user_id,
378               sysdate,
379               g_n_login_id
380 	      );
381 
382 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
383 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.Record_Inserted',
384 		'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
385 		||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
386 		p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value);
387 	      END IF;
388 
389          ELSE --update
390 	     UPDATE igs_ps_rsv_usec_pri SET
391              priority_order= p_usec_rsv_rec.priority_order,
392              last_updated_by = g_n_user_id,
393              last_update_date= SYSDATE ,
394              last_update_login= g_n_login_id
395 	     WHERE uoo_id =l_n_uoo_id AND priority_value = p_usec_rsv_rec.priority_value;
396 
397              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
398 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.Record_Updated',
399 		'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
400 		||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
401 		p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value);
402 	     END IF;
403 
404 
405          END IF;
406       END IF;
407 
408     END create_rsvpri;
409 
410     PROCEDURE create_rsvprf( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type ) AS
411 
412       PROCEDURE validate_parameters_prf ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type ) AS
413       BEGIN
414 
415 	/* Check for Mandatory Parameters */
416 	IF p_usec_rsv_rec.preference_order IS NULL OR p_usec_rsv_rec.preference_order = FND_API.G_MISS_NUM THEN
417 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_ORDER', 'LEGACY_TOKENS', FALSE);
418 	   p_usec_rsv_rec.status := 'E';
419 	END IF;
420 
421 	IF p_usec_rsv_rec.preference_code IS NULL OR p_usec_rsv_rec.preference_code = FND_API.G_MISS_CHAR THEN
422 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
423 	   p_usec_rsv_rec.status := 'E';
424 	END IF;
425 
426 	IF p_usec_rsv_rec.percentage_reserved IS NULL OR p_usec_rsv_rec.percentage_reserved = FND_API.G_MISS_NUM THEN
427 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PERCENTAGE_RESERVED', 'LEGACY_TOKENS', FALSE);
428 	  p_usec_rsv_rec.status := 'E';
429 	END IF;
430 
431 	IF p_usec_rsv_rec.priority_value IS NOT NULL AND p_usec_rsv_rec.priority_value IN ('PROGRAM','UNIT_SET') THEN
432 	  IF p_usec_rsv_rec.preference_version IS NULL OR p_usec_rsv_rec.preference_version = FND_API.G_MISS_NUM THEN
433 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_VERSION', 'LEGACY_TOKENS', FALSE);
434 	    p_usec_rsv_rec.status := 'E';
435 	  END IF;
436 	ELSIF p_usec_rsv_rec.priority_value IS NOT NULL AND p_usec_rsv_rec.priority_value NOT IN ('PROGRAM','UNIT_SET') THEN
437 	  IF p_usec_rsv_rec.preference_version IS NOT NULL THEN
438 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_VERSION', 'LEGACY_TOKENS', FALSE);
439 	    p_usec_rsv_rec.status := 'E';
440 	  END IF;
441 	END IF;
442 
443       END validate_parameters_prf ;
444 
445       -- Carry out derivations and validate them
446       PROCEDURE validate_derivations_prf ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_insert_update VARCHAR2 ) AS
447 	l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
448 	l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
449 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
450 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
451 	l_c_message  VARCHAR2(30);
452 
453 	 CURSOR c_pri_id(cp_uoo_id NUMBER, cp_priority_value igs_ps_rsv_usec_pri.priority_value%type) IS
454 	 SELECT rsv_usec_pri_id
455 	 FROM   igs_ps_rsv_usec_pri
456 	 WHERE  uoo_id = cp_uoo_id
457 	 AND    priority_value = cp_priority_value;
458 
459       BEGIN
460 
461 	OPEN c_pri_id(l_n_uoo_id,p_usec_rsv_rec.priority_value);
462 	FETCH c_pri_id INTO l_n_rsv_usec_pri_id;
463 	CLOSE c_pri_id;
464 
465       END validate_derivations_prf;
466 
467 
468       FUNCTION check_insert_update ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_n_rsv_usec_pri_id NUMBER) RETURN VARCHAR2 IS
469         CURSOR c_usec_rsv_prf(p_rsv_usec_pri_id NUMBER,p_preference_code VARCHAR2) IS
470         SELECT 'X'
471 	FROM   igs_ps_rsv_usec_prf
472         WHERE  rsv_usec_pri_id = p_rsv_usec_pri_id
473         AND    preference_code = p_preference_code;
474 
475         c_usec_rsv_prf_rec c_usec_rsv_prf%ROWTYPE;
476 
477         CURSOR c_usec_rsv_prf1(cp_rsv_usec_pri_id NUMBER,cp_preference_code VARCHAR2,cp_preference_version NUMBER) IS
478         SELECT 'X'
479 	FROM   igs_ps_rsv_usec_prf
480         WHERE  rsv_usec_pri_id = cp_rsv_usec_pri_id
481         AND    preference_code = cp_preference_code
482         AND    preference_version = cp_preference_version;
483 
484         c_usec_rsv_prf1_rec c_usec_rsv_prf1%ROWTYPE;
485       BEGIN
486         IF p_usec_rsv_rec.priority_value IN ('PROGRAM', 'UNIT_SET') THEN
487   	  OPEN c_usec_rsv_prf1(l_n_rsv_usec_pri_id,p_usec_rsv_rec.preference_code,p_usec_rsv_rec.preference_version );
488 	  FETCH c_usec_rsv_prf1 INTO c_usec_rsv_prf1_rec;
489 	  IF c_usec_rsv_prf1%NOTFOUND THEN
490             CLOSE c_usec_rsv_prf1;
491 	    RETURN 'I';
492           ELSE
493             CLOSE c_usec_rsv_prf1;
494 	    RETURN 'U';
495           END IF;
496         ELSE
497           OPEN c_usec_rsv_prf(l_n_rsv_usec_pri_id,p_usec_rsv_rec.preference_code );
498 	  FETCH c_usec_rsv_prf INTO c_usec_rsv_prf_rec;
499 	  IF c_usec_rsv_prf%NOTFOUND THEN
500             CLOSE c_usec_rsv_prf;
501 	    RETURN 'I';
502           ELSE
503             CLOSE c_usec_rsv_prf;
504 	    RETURN 'U';
505           END IF;
506         END IF;
507       END check_insert_update;
508 
509       -- Validate Database Constraints for reserved seating preference.
510       PROCEDURE validate_db_cons_rsvprf ( p_usec_rsv_rec IN OUT NOCOPY igs_ps_generic_pub.usec_res_seat_rec_type,p_insert_update VARCHAR2 ) AS
511       CURSOR cur_hzp(cp_preference_code VARCHAR2) IS
512       SELECT 'x'
513       FROM   hz_parties hp, igs_pe_hz_parties pe
514       WHERE  hp.party_id = pe.party_id
515       AND pe.oss_org_unit_cd =cp_preference_code;
516 
517       cur_Hzp_rec cur_Hzp%ROWTYPE;
518 
519       CURSOR c_group(cp_preference_code VARCHAR2) IS
520       SELECT group_id
521       FROM   igs_pe_persid_group_all
522       WHERE  group_cd = cp_preference_code;
523 
524       BEGIN
525 
526 	IF(p_insert_update = 'I') THEN
527 	  /* Unique Key Validation */
528 	  IF igs_ps_rsv_usec_prf_pkg.get_uk_for_validation(x_rsv_usec_pri_id => l_n_rsv_usec_pri_id ,
529 							    x_preference_code =>p_usec_rsv_rec.preference_code ) THEN
530 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
531 	    p_usec_rsv_rec.status := 'W';
532 
533 	    RETURN;
534 	  END IF;
535 	END IF;
536 
537 	/* check constraint */
538 	IF p_usec_rsv_rec.percentage_reserved < 0 OR p_usec_rsv_rec.percentage_reserved > 100 THEN
539           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PER_0_100', null, null, FALSE);
540           p_usec_rsv_rec.status := 'E';
541 	END IF;
542 
543 	 /* Validate FK Constraints */
544 	IF (p_usec_rsv_rec.priority_value = 'PROGRAM') THEN
545 	  IF NOT igs_ps_ver_pkg.get_pk_for_validation (p_usec_rsv_rec.preference_code,p_usec_rsv_rec.preference_version  ) THEN
546 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
547 	    p_usec_rsv_rec.status := 'E';
548 	  END IF;
549 	END IF;
550 
551 	IF (p_usec_rsv_rec.priority_value = 'PERSON_GRP') THEN
552 	  IF NOT igs_pe_persid_group_pkg.get_uk_for_validation (p_usec_rsv_rec.preference_code  ) THEN
553 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
554 	    p_usec_rsv_rec.status := 'E';
555 	  END IF;
556 	  OPEN c_group(p_usec_rsv_rec.preference_code);
557 	  FETCH c_group INTO l_n_group_id;
558 	  CLOSE c_group;
559 	END IF;
560 
561 	IF (p_usec_rsv_rec.priority_value = 'UNIT_SET') THEN
562 	  IF NOT igs_en_unit_set_pkg.get_pk_for_validation (p_usec_rsv_rec.preference_code,p_usec_rsv_rec.preference_version) THEN
563 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
564 	    p_usec_rsv_rec.status := 'E';
565 	  END IF;
566 	END IF;
567 
568 	IF (p_usec_rsv_rec.priority_value = 'PROGRAM_STAGE') THEN
569 	  IF NOT igs_ps_stage_type_pkg.get_pk_for_validation (p_usec_rsv_rec.preference_code  ) THEN
570 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
571 	    p_usec_rsv_rec.status := 'E';
572 	  END IF;
573 	END IF;
574 
575 	IF (p_usec_rsv_rec.priority_value = 'CLASS_STD' ) THEN
576 	  IF NOT igs_pr_class_std_pkg.get_uk_for_validation (p_usec_rsv_rec.preference_code  ) THEN
577 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
578 	    p_usec_rsv_rec.status := 'E';
579 	  END IF;
580 	END IF;
581 
582 	IF (p_usec_rsv_rec.priority_value = 'ORG_UNIT') THEN
583 	  OPEN  cur_hzp(p_usec_rsv_rec.preference_code );
584 	  FETCH cur_hzp INTO cur_hzp_rec;
585 	  IF cur_hzp%NOTFOUND THEN
586 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_RSV_PRF', 'LEGACY_TOKENS', FALSE);
587 	    p_usec_rsv_rec.status := 'E';
588 	  END IF;
589 	  CLOSE cur_hzp;
590 	END IF;
591       END validate_db_cons_rsvprf;
592 
593     BEGIN
594 
595       IF p_usec_rsv_rec.status = 'S' THEN
596         validate_parameters_prf(p_usec_rsv_rec);
597 
598         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
599 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_validate_parameters_prf',
600 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
601 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
602 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
603 	  'Preference Code:'||p_usec_rsv_rec.preference_code||' '||'Status:'||p_usec_rsv_rec.status);
604         END IF;
605 
606       END IF;
607 
608       IF p_usec_rsv_rec.status = 'S' THEN
609         validate_derivations_prf(p_usec_rsv_rec,l_insert_update);
610 
611         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
612 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_validate_derivations_prf',
613 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
614 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
615 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
616 	  'Preference Code:'||p_usec_rsv_rec.preference_code||' '||'Status:'||p_usec_rsv_rec.status);
617         END IF;
618 
619       END IF;
620 
621 
622       --Find out whether it is insert/update of record
623       l_insert_update:='I';
624       IF p_usec_rsv_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
625         l_insert_update:= check_insert_update(p_usec_rsv_rec,l_n_rsv_usec_pri_id);
626 
627         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
628 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_check_insert_update',
629 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
630 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
631 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
632 	  'Preference Code:'||p_usec_rsv_rec.preference_code||' '||'Status:'||p_usec_rsv_rec.status);
633         END IF;
634 
635       END IF;
636 
637 
638       IF p_usec_rsv_rec.status = 'S' THEN
639          validate_db_cons_rsvprf(p_usec_rsv_rec,l_insert_update);
640 
641          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
642 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_validate_db_cons_rsvprf',
643 	  'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
644 	  ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
645 	  p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
646 	  'Preference Code:'||p_usec_rsv_rec.preference_code||' '||'Status:'||p_usec_rsv_rec.status);
647          END IF;
648 
649       END IF;
650 
651 
652       IF p_usec_rsv_rec.status = 'S' THEN
653          igs_ps_validate_generic_pkg.validate_usec_rsvprf (p_usec_rsv_rec,l_insert_update);
654 
655          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
656 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_Business_validation',
657 	   'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
658 	   ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
659 	   p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
660 	   'Preference Code:'||p_usec_rsv_rec.preference_code||' '||'Status:'||p_usec_rsv_rec.status);
661          END IF;
662 
663       END IF;
664 
665 
666       IF p_usec_rsv_rec.status = 'S' THEN
667 	IF l_insert_update = 'I' THEN
668           /* Insert Record */
669           INSERT INTO igs_ps_rsv_usec_prf (
670           rsv_usec_prf_id,
671           rsv_usec_pri_id,
672           preference_order,
673           preference_code,
674           preference_version,
675           percentage_reserved,
676           group_id,
677           created_by,
678           creation_date,
679           last_updated_by,
680           last_update_date,
681           last_update_login )
682           VALUES (
683           igs_ps_rsv_usec_prf_s.NEXTVAL,
684           l_n_rsv_usec_pri_id,
685           p_usec_rsv_rec.preference_order,
686           p_usec_rsv_rec.preference_code,
687 	  p_usec_rsv_rec.preference_version,
688           p_usec_rsv_rec.percentage_reserved,
689           l_n_group_id,
690           g_n_user_id,
691           sysdate,
692           g_n_user_id,
693           sysdate,
694           g_n_login_id );
695 
696           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
697 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_Record_Inserted',
698 	     'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
699 	     ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
700 	     p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
701 	     'Preference Code:'||p_usec_rsv_rec.preference_code);
702           END IF;
703 
704 
705         ELSE --update
706 	  UPDATE igs_ps_rsv_usec_prf SET
707           preference_order= p_usec_rsv_rec.preference_order,
708           percentage_reserved=p_usec_rsv_rec.percentage_reserved,
709           preference_version=p_usec_rsv_rec.preference_version,
710           last_updated_by = g_n_user_id,
711           last_update_date= SYSDATE ,
712           last_update_login= g_n_login_id
713 	  WHERE rsv_usec_pri_id  =l_n_rsv_usec_pri_id AND preference_code = p_usec_rsv_rec.preference_code;
714 
715 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
716 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_Record_Updated',
717 	     'Unit code:'||p_usec_rsv_rec.unit_cd||'  '||'Version number:'||p_usec_rsv_rec.version_number||'  '||'teach_cal_alternate_code:'
718 	     ||p_usec_rsv_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rsv_rec.location_cd||'  '||'Unit Class:'||
719 	     p_usec_rsv_rec.unit_class||'  '||'Priority Value:'||p_usec_rsv_rec.priority_value||'  '||
720 	     'Preference Code:'||p_usec_rsv_rec.preference_code);
721           END IF;
722 
723         END IF;
724       END IF;
725 
726     END create_rsvprf;
727 
728   /* Main Unit Section reserved seating Sub Process */
729   BEGIN
730 
731     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
732       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.start_logging_for','Unit Section reserved Seating');
733     END IF;
734 
735     p_c_rec_status := 'S';
736     FOR I in 1..p_usec_res_seat_tbl.LAST LOOP
737       l_n_uoo_id:= NULL;
738       l_n_rsv_usec_pri_id:=NULL;
739       l_n_group_id := NULL;
740       IF p_usec_res_seat_tbl.EXISTS(I) THEN
741         p_usec_res_seat_tbl(I).status := 'S';
742         p_usec_res_seat_tbl(I).msg_from := fnd_msg_pub.count_msg;
743         trim_values(p_usec_res_seat_tbl(I));
744 
745 
746 	--create reserved seating priority
747 	IF p_usec_res_seat_tbl(I).status = 'S' THEN
748 
749 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
750 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.call',
751 	    'Unit code:'||p_usec_res_seat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_res_seat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
752 	    ||p_usec_res_seat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_res_seat_tbl(I).location_cd||'  '||'Unit Class:'||
753 	    p_usec_res_seat_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_res_seat_tbl(I).priority_value);
754           END IF;
755 
756 	  create_rsvpri(p_usec_res_seat_tbl(I));
757 
758           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
759 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvpri.status_after_creating_priority_record',
760 	    'Unit code:'||p_usec_res_seat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_res_seat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
761 	    ||p_usec_res_seat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_res_seat_tbl(I).location_cd||'  '||'Unit Class:'||
762 	    p_usec_res_seat_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_res_seat_tbl(I).priority_value||'  '||'Status:'
763 	    ||p_usec_res_seat_tbl(I).status);
764           END IF;
765 
766         END IF;
767 
768         -- Create reserved seating preference
769 	IF  p_usec_res_seat_tbl(I).status = 'S' THEN
770 	  IF p_usec_res_seat_tbl(I).preference_code IS NOT NULL THEN
771 
772             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
773 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.call',
774 	      'Unit code:'||p_usec_res_seat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_res_seat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
775 	      ||p_usec_res_seat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_res_seat_tbl(I).location_cd||'  '||'Unit Class:'||
776 	      p_usec_res_seat_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_res_seat_tbl(I).priority_value||' '||
777 	      'Preference Code:'||p_usec_res_seat_tbl(I).preference_code);
778             END IF;
779 
780             create_rsvprf(p_usec_res_seat_tbl(I));
781 
782             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
783 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.create_rsvprf.status_after_creating_prefenrence_record',
784 	      'Unit code:'||p_usec_res_seat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_res_seat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
785 	      ||p_usec_res_seat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_res_seat_tbl(I).location_cd||'  '||'Unit Class:'||
786 	      p_usec_res_seat_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_res_seat_tbl(I).priority_value||'  '||
787 	      'Preference Code:'||p_usec_res_seat_tbl(I).preference_code||' '||'Status:'||p_usec_res_seat_tbl(I).status);
788             END IF;
789 
790           END IF;
791 	END IF;
792 
793         IF  p_usec_res_seat_tbl(I).status = 'S' THEN
794           p_usec_res_seat_tbl(I).msg_from := NULL;
795           p_usec_res_seat_tbl(I).msg_to := NULL;
796         ELSIF  p_usec_res_seat_tbl(I).status = 'A' THEN
797 	  p_usec_res_seat_tbl(I).msg_from  := p_usec_res_seat_tbl(I).msg_from + 1;
798 	  p_usec_res_seat_tbl(I).msg_to := fnd_msg_pub.count_msg;
799 	ELSE
800           p_c_rec_status :=  p_usec_res_seat_tbl(I).status;
801           p_usec_res_seat_tbl(I).msg_from :=  p_usec_res_seat_tbl(I).msg_from + 1;
802           p_usec_res_seat_tbl(I).msg_to := fnd_msg_pub.count_msg;
803           IF p_c_rec_status = 'E' THEN
804             RETURN;
805           END IF;
806         END IF;
807       END IF;--exists
808     END LOOP;
809 
810     /* Post Insert/Update Checks */
811     IF NOT igs_ps_validate_generic_pkg.post_usec_rsv(p_usec_res_seat_tbl,l_tbl_uoo) THEN
812       p_c_rec_status := 'E';
813     END IF;
814 
815     l_tbl_uoo.DELETE;
816 
817     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
818       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_res_seat.after_import_status',p_c_rec_status);
819     END IF;
820 
821   END create_usec_res_seat;
822 
823   PROCEDURE create_uso_facility (p_usec_occurs_facility_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_tbl_type,
824                                  p_c_rec_status OUT NOCOPY VARCHAR2,
825                                  p_calling_context  IN VARCHAR2
826   )  AS
827 
828   /***********************************************************************************************
829     Created By     :  sommukhe
830     Date Created By:  17-MAR-2005
831     Purpose        :  This procedure is a sub process to insert records of Unit Section Occurrence Facility.
832 
833     Known limitations,enhancements,remarks:
834     Change History (in reverse chronological order)
835     Who         When            What
836 
837   ********************************************************************************************** */
838     l_n_uoo_id   igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
839     l_n_uso_id   igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE;
840 
841     /* Private Procedures for create_uso_facility */
842     PROCEDURE trim_values ( p_uso_fclt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_rec_type ) AS
843     BEGIN
844 
845       p_uso_fclt_rec.unit_cd := TRIM(p_uso_fclt_rec.unit_cd);
846       p_uso_fclt_rec.version_number := TRIM(p_uso_fclt_rec.version_number);
847       p_uso_fclt_rec.teach_cal_alternate_code := TRIM(p_uso_fclt_rec.teach_cal_alternate_code);
848       p_uso_fclt_rec.location_cd := TRIM(p_uso_fclt_rec.location_cd);
849       p_uso_fclt_rec.unit_class := TRIM(p_uso_fclt_rec.unit_class);
850       p_uso_fclt_rec.production_uso_id := TRIM(p_uso_fclt_rec.production_uso_id);
851       p_uso_fclt_rec.occurrence_identifier := TRIM(p_uso_fclt_rec.occurrence_identifier);
852       p_uso_fclt_rec.facility_code := TRIM(p_uso_fclt_rec.facility_code);
853     END trim_values;
854 
855     -- validate parameters passed.
856     PROCEDURE validate_parameters (p_uso_fclt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_rec_type ) AS
857     BEGIN
858       /* Check for Mandatory Parameters */
859       IF p_uso_fclt_rec.unit_cd IS NULL OR p_uso_fclt_rec.unit_cd = FND_API.G_MISS_CHAR THEN
860         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
861         p_uso_fclt_rec.status := 'E';
862       END IF;
863       IF p_uso_fclt_rec.version_number IS NULL OR p_uso_fclt_rec.version_number = FND_API.G_MISS_NUM THEN
864         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
865         p_uso_fclt_rec.status := 'E';
866       END IF;
867       IF p_uso_fclt_rec.teach_cal_alternate_code IS NULL OR p_uso_fclt_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
868         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
869         p_uso_fclt_rec.status := 'E';
870       END IF;
871       IF p_uso_fclt_rec.location_cd IS NULL OR p_uso_fclt_rec.location_cd = FND_API.G_MISS_CHAR THEN
872         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
873         p_uso_fclt_rec.status := 'E';
874       END IF;
875       IF p_uso_fclt_rec.unit_class IS NULL OR p_uso_fclt_rec.unit_class = FND_API.G_MISS_CHAR THEN
876         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
877         p_uso_fclt_rec.status := 'E';
878       END IF;
879       IF (p_uso_fclt_rec.production_uso_id IS NULL OR p_uso_fclt_rec.production_uso_id = FND_API.G_MISS_NUM) AND  (p_uso_fclt_rec.occurrence_identifier IS NULL OR p_uso_fclt_rec.occurrence_identifier = FND_API.G_MISS_CHAR) THEN
880         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_OCCRS_ID', 'IGS_PS_LOG_PARAMETERS', FALSE);
881         p_uso_fclt_rec.status := 'E';
882       END IF;
883       IF p_uso_fclt_rec.facility_code IS NULL OR p_uso_fclt_rec.facility_code = FND_API.G_MISS_CHAR THEN
884         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'FACILITY_CODE', 'LEGACY_TOKENS', FALSE);
885         p_uso_fclt_rec.status := 'E';
886       END IF;
887 
888     END validate_parameters;
889 
890     PROCEDURE validate_derivations ( p_uso_fclt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_rec_type ) AS
891       l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
892       l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
893       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
894       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
895       l_c_message  VARCHAR2(30);
896 
897       CURSOR c_uso_id (cp_occurrence_identifier igs_ps_usec_occurs_all.occurrence_identifier%TYPE,cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
898       SELECT unit_section_occurrence_id
899       FROM igs_ps_usec_occurs_all
900       WHERE uoo_id = cp_n_uoo_id
901       AND occurrence_identifier = cp_occurrence_identifier;
902 
903 
904     BEGIN
905 
906 
907       -- Derive Calander Type and Sequence Number
908       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_uso_fclt_rec.teach_cal_alternate_code,
909                                              p_cal_type           => l_c_cal_type,
910                                              p_ci_sequence_number => l_n_seq_num,
911                                              p_start_dt           => l_d_start_dt,
912                                              p_end_dt             => l_d_end_dt,
913                                              p_return_status      => l_c_message );
914       IF ( l_c_message <> 'SINGLE' ) THEN
915         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
916         p_uso_fclt_rec.status := 'E';
917       END IF;
918 
919 
920       -- Derive uoo_id
921       l_c_message := NULL;
922       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_uso_fclt_rec.unit_cd,
923                                             p_ver_num    => p_uso_fclt_rec.version_number,
924                                             p_cal_type   => l_c_cal_type,
925                                             p_seq_num    => l_n_seq_num,
926                                             p_loc_cd     => p_uso_fclt_rec.location_cd,
927                                             p_unit_class => p_uso_fclt_rec.unit_class,
928                                             p_uoo_id     => l_n_uoo_id,
929                                             p_message    => l_c_message );
930       IF ( l_c_message IS NOT NULL ) THEN
931         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
932         p_uso_fclt_rec.status := 'E';
933       END IF;
934 
935       IF p_uso_fclt_rec.production_uso_id IS NOT NULL THEN
936         l_n_uso_id := p_uso_fclt_rec.production_uso_id;
937       ELSE
938         OPEN c_uso_id(p_uso_fclt_rec.occurrence_identifier,l_n_uoo_id);
939         FETCH c_uso_id INTO l_n_uso_id;
940 	IF c_uso_id%NOTFOUND THEN
941 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'USEC_OCCRS_ID', 'IGS_PS_LOG_PARAMETERS', FALSE);
942 	  p_uso_fclt_rec.status := 'E';
943 	END IF;
944         CLOSE c_uso_id;
945       END IF;
946 
947     END validate_derivations;
948 
949     -- Validate Database Constraints
950     PROCEDURE validate_db_cons ( p_uso_fclt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_occurs_facility_rec_type ) AS
951     BEGIN
952 
953       /* Validate UK Constraints */
954       IF igs_ps_uso_facility_pkg.get_uk_for_validation (
955            x_unit_section_occurrence_id           => l_n_uso_id,
956 	   x_facility_code                        =>  p_uso_fclt_rec.facility_code
957            ) THEN
958         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'FACILITY', 'LEGACY_TOKENS', FALSE);
959         p_uso_fclt_rec.status := 'W';
960         RETURN;
961       END IF;
962 
963        /* Validate FK Constraints */
964       IF NOT igs_ps_media_equip_pkg.get_pk_for_validation (p_uso_fclt_rec.facility_code) THEN
965         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'FACILITY_CODE', 'LEGACY_TOKENS', FALSE);
966         p_uso_fclt_rec.status := 'E';
967       END IF;
968 
969       IF NOT igs_ps_usec_occurs_pkg.get_pk_for_validation (l_n_uso_id) THEN
970         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_OCCUR', 'LEGACY_TOKENS', FALSE);
971         p_uso_fclt_rec.status := 'E';
972       END IF;
973 
974     END validate_db_cons;
975 
976   /* Main facilities Sub Process */
977   BEGIN
978 
979     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
980       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.start_logging_for','Unit Section Occurence facility');
981     END IF;
982 
983     p_c_rec_status := 'S';
984     FOR I in 1..p_usec_occurs_facility_tbl.LAST LOOP
985       IF ( p_usec_occurs_facility_tbl.EXISTS(I) ) THEN
986         l_n_uoo_id      := NULL;
987 	l_n_uso_id      := NULL;
988         p_usec_occurs_facility_tbl(I).status := 'S';
989         p_usec_occurs_facility_tbl(I).msg_from := fnd_msg_pub.count_msg;
990         trim_values(p_usec_occurs_facility_tbl(I) );
991         validate_parameters ( p_usec_occurs_facility_tbl(I) );
992 
993 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
994           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.status_after_validate_parameters',
995 	  'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
996 	  ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
997 	  p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'  '||'Status:'||p_usec_occurs_facility_tbl(I).status);
998         END IF;
999 
1000 
1001 	IF p_usec_occurs_facility_tbl(I).status = 'S' THEN
1002 	    validate_derivations ( p_usec_occurs_facility_tbl(I));
1003 
1004 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1005               fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.status_after_validate_derivations',
1006 	      'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1007 	      ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
1008 	      p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'Unit Section Occurrence id:'||
1009 	      l_n_uso_id||'  '||'Status:'||p_usec_occurs_facility_tbl(I).status);
1010             END IF;
1011 
1012         END IF;
1013 
1014         -- Find out whether record can go for import in context of cancelled/aborted
1015         IF p_usec_occurs_facility_tbl(I).status = 'S' AND p_calling_context ='S' THEN
1016 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,l_n_uso_id) = FALSE THEN
1017 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
1018 	    fnd_msg_pub.add;
1019 	    p_usec_occurs_facility_tbl(I).status := 'A';
1020 	  END IF;
1021 
1022 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1023             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.status_after_check_import_allowed',
1024 	    'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1025 	    ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
1026 	    p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'Unit Section Occurrence id:'
1027 	    ||l_n_uso_id||'  '||'Status:'||p_usec_occurs_facility_tbl(I).status);
1028           END IF;
1029 
1030 	END IF;
1031 
1032 	IF p_usec_occurs_facility_tbl(I).status = 'S' THEN
1033           validate_db_cons ( p_usec_occurs_facility_tbl(I) );
1034 
1035           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1036             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.status_after_validate_db_cons',
1037 	    'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1038 	    ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
1039 	    p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'Unit Section Occurrence id:'
1040 	    ||l_n_uso_id||'  '||'Status:'||p_usec_occurs_facility_tbl(I).status);
1041           END IF;
1042 
1043         END IF;
1044 
1045         /* Business Validations */
1046         /* Proceed with business validations only if the status is Success, 'S' */
1047         IF p_usec_occurs_facility_tbl(I).status = 'S' THEN
1048            igs_ps_validate_generic_pkg.validate_facility ( p_usec_occurs_facility_tbl(I),l_n_uoo_id,l_n_uso_id,p_calling_context) ;
1049 
1050 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1051              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.status_after_Business_validations',
1052 	     'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1053 	     ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
1054 	     p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'Unit Section Occurrence id:'
1055 	     ||l_n_uso_id||'  '||'Status:'||p_usec_occurs_facility_tbl(I).status);
1056            END IF;
1057 
1058         END IF;
1059 
1060         IF p_usec_occurs_facility_tbl(I).status = 'S' THEN
1061             /* Insert record */
1062           INSERT INTO igs_ps_uso_facility
1063           (uso_facility_id,
1064            unit_section_occurrence_id,
1065            facility_code,
1066            created_by,
1067            creation_date,
1068            last_updated_by,
1069            last_update_date,
1070            last_update_login
1071           )
1072           VALUES
1073           (IGS_PS_USO_FACILITY_S.nextval,
1074            l_n_uso_id,
1075            p_usec_occurs_facility_tbl(I).facility_code,
1076            g_n_user_id,
1077            SYSDATE,
1078            g_n_user_id,
1079            SYSDATE,
1080            g_n_login_id
1081           );
1082 
1083            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1084              fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.Record_Inserted',
1085 	     'Unit code:'||p_usec_occurs_facility_tbl(I).unit_cd||'  '||'Version number:'||p_usec_occurs_facility_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1086 	     ||p_usec_occurs_facility_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_occurs_facility_tbl(I).location_cd||'  '||'Unit Class:'||
1087 	     p_usec_occurs_facility_tbl(I).unit_class||'  '||'Facility Code:'||p_usec_occurs_facility_tbl(I).facility_code||'Unit Section Occurrence id:'
1088 	     ||l_n_uso_id);
1089            END IF;
1090 
1091         END IF;--insert
1092 
1093         IF p_usec_occurs_facility_tbl(I).status = 'S' THEN
1094 	   p_usec_occurs_facility_tbl(I).msg_from := NULL;
1095 	   p_usec_occurs_facility_tbl(I).msg_to := NULL;
1096 	ELSIF  p_usec_occurs_facility_tbl(I).status = 'A' THEN
1097 	   p_usec_occurs_facility_tbl(I).msg_from  := p_usec_occurs_facility_tbl(I).msg_from + 1;
1098 	   p_usec_occurs_facility_tbl(I).msg_to := fnd_msg_pub.count_msg;
1099 	ELSE
1100            p_c_rec_status := p_usec_occurs_facility_tbl(I).status;
1101            p_usec_occurs_facility_tbl(I).msg_from :=p_usec_occurs_facility_tbl(I).msg_from+1;
1102            p_usec_occurs_facility_tbl(I).msg_to := fnd_msg_pub.count_msg;
1103            IF p_usec_occurs_facility_tbl(I).status = 'E' THEN
1104              RETURN;
1105 	   END IF;
1106          END IF;
1107 
1108       END IF;--Exists
1109     END LOOP;
1110 
1111     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1112       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_facility.after_import_status',p_c_rec_status);
1113     END IF;
1114 
1115   END create_uso_facility;
1116 
1117 
1118 
1119   PROCEDURE create_usec_cat (
1120           p_usec_cat_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_cat_tbl_type,
1121           p_c_rec_status OUT NOCOPY VARCHAR2,
1122 	  p_calling_context  IN VARCHAR2
1123           )  AS
1124 
1125   /***********************************************************************************************
1126     Created By     :  sommukhe
1127     Date Created By:  17-Jun-2005
1128     Purpose        :  This procedure is a sub process to insert records of Unit Section Catogories.
1129 
1130     Known limitations,enhancements,remarks:
1131     Change History (in reverse chronological order)
1132     Who         When            What
1133 
1134   ********************************************************************************************** */
1135     l_n_uoo_id           igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
1136 
1137     /* Private Procedures for create_usec_cat */
1138     PROCEDURE trim_values ( p_usec_cat_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cat_rec_type ) AS
1139     BEGIN
1140       p_usec_cat_rec.unit_cd := TRIM(p_usec_cat_rec.unit_cd);
1141       p_usec_cat_rec.version_number := TRIM(p_usec_cat_rec.version_number);
1142       p_usec_cat_rec.teach_cal_alternate_code := TRIM(p_usec_cat_rec.teach_cal_alternate_code);
1143       p_usec_cat_rec.location_cd := TRIM(p_usec_cat_rec.location_cd);
1144       p_usec_cat_rec.unit_class := TRIM(p_usec_cat_rec.unit_class);
1145       p_usec_cat_rec.unit_cat := TRIM(p_usec_cat_rec.unit_cat);
1146     END trim_values;
1147 
1148     -- validate parameters passed.
1149     PROCEDURE validate_parameters (p_usec_cat_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cat_rec_type ) AS
1150     BEGIN
1151       /* Check for Mandatory Parameters */
1152       IF p_usec_cat_rec.unit_cd IS NULL OR p_usec_cat_rec.unit_cd = FND_API.G_MISS_CHAR THEN
1153         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
1154         p_usec_cat_rec.status := 'E';
1155       END IF;
1156       IF p_usec_cat_rec.version_number IS NULL OR p_usec_cat_rec.version_number = FND_API.G_MISS_NUM THEN
1157         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
1158         p_usec_cat_rec.status := 'E';
1159       END IF;
1160       IF p_usec_cat_rec.teach_cal_alternate_code IS NULL OR p_usec_cat_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
1161         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
1162         p_usec_cat_rec.status := 'E';
1163       END IF;
1164       IF p_usec_cat_rec.location_cd IS NULL OR p_usec_cat_rec.location_cd = FND_API.G_MISS_CHAR THEN
1165         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
1166         p_usec_cat_rec.status := 'E';
1167       END IF;
1168       IF p_usec_cat_rec.unit_class IS NULL OR p_usec_cat_rec.unit_class = FND_API.G_MISS_CHAR THEN
1169         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
1170         p_usec_cat_rec.status := 'E';
1171       END IF;
1172       IF p_usec_cat_rec.unit_cat IS NULL OR p_usec_cat_rec.unit_cat = FND_API.G_MISS_CHAR THEN
1173         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'CATEGORY', 'LEGACY_TOKENS', FALSE);
1174         p_usec_cat_rec.status := 'E';
1175       END IF;
1176 
1177     END validate_parameters;
1178 
1179     PROCEDURE validate_derivations ( p_usec_cat_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cat_rec_type ) AS
1180       l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
1181       l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
1182       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
1183       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
1184       l_c_message  VARCHAR2(30);
1185 
1186     BEGIN
1187 
1188 
1189       -- Derive Calander Type and Sequence Number
1190       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_cat_rec.teach_cal_alternate_code,
1191                                              p_cal_type           => l_c_cal_type,
1192                                              p_ci_sequence_number => l_n_seq_num,
1193                                              p_start_dt           => l_d_start_dt,
1194                                              p_end_dt             => l_d_end_dt,
1195                                              p_return_status      => l_c_message );
1196       IF ( l_c_message <> 'SINGLE' ) THEN
1197         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
1198         p_usec_cat_rec.status := 'E';
1199       END IF;
1200 
1201 
1202       -- Derive uoo_id
1203       l_c_message := NULL;
1204       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_cat_rec.unit_cd,
1205                                             p_ver_num    => p_usec_cat_rec.version_number,
1206                                             p_cal_type   => l_c_cal_type,
1207                                             p_seq_num    => l_n_seq_num,
1208                                             p_loc_cd     => p_usec_cat_rec.location_cd,
1209                                             p_unit_class => p_usec_cat_rec.unit_class,
1210                                             p_uoo_id     => l_n_uoo_id,
1211                                             p_message    => l_c_message );
1212 
1213       IF ( l_c_message IS NOT NULL ) THEN
1214 
1215         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1216         p_usec_cat_rec.status := 'E';
1217 
1218       END IF;
1219 
1220     END validate_derivations;
1221 
1222     -- Validate Database Constraints
1223     PROCEDURE validate_db_cons ( p_usec_cat_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cat_rec_type ) AS
1224     BEGIN
1225 
1226       /* Validate UK Constraints */
1227       IF igs_ps_usec_category_pkg.get_uk_for_validation (
1228            x_uoo_id           => l_n_uoo_id,
1229 	   x_unit_cat         => p_usec_cat_rec.unit_cat
1230            ) THEN
1231         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'CATEGORY', 'LEGACY_TOKENS', FALSE);
1232         p_usec_cat_rec.status := 'W';
1233         RETURN;
1234       END IF;
1235 
1236        /* Validate FK Constraints */
1237       IF NOT igs_ps_unit_cat_pkg.get_pk_for_validation (p_usec_cat_rec.unit_cat) THEN
1238         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'CATEGORY', 'LEGACY_TOKENS', FALSE);
1239         p_usec_cat_rec.status := 'E';
1240       END IF;
1241 
1242       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id) THEN
1243         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1244         p_usec_cat_rec.status := 'E';
1245       END IF;
1246 
1247     END validate_db_cons;
1248 
1249   /* Main Unit Section Category Sub Process */
1250   BEGIN
1251 
1252     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1253       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.start_logging_for','Unit Section category');
1254     END IF;
1255 
1256     p_c_rec_status := 'S';
1257     FOR I in 1..p_usec_cat_tbl.LAST LOOP
1258       IF ( p_usec_cat_tbl.EXISTS(I) ) THEN
1259         l_n_uoo_id  := NULL;
1260         p_usec_cat_tbl(I).status := 'S';
1261         p_usec_cat_tbl(I).msg_from := fnd_msg_pub.count_msg;
1262         trim_values(p_usec_cat_tbl(I) );
1263         validate_parameters ( p_usec_cat_tbl(I) );
1264 
1265         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1266           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.status_after_validate_parameters',
1267 	  'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1268 	  ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1269 	  p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat||'  '||'Status:'||p_usec_cat_tbl(I).status);
1270         END IF;
1271 
1272 	IF p_usec_cat_tbl(I).status = 'S' THEN
1273 	  validate_derivations ( p_usec_cat_tbl(I));
1274 
1275 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1276 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.status_after_validate_derivations',
1277 	    'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1278 	    ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1279 	    p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat||'  '||'Status:'||p_usec_cat_tbl(I).status);
1280 	  END IF;
1281 
1282         END IF;
1283 
1284         IF p_usec_cat_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
1285 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
1286 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
1287 	    fnd_msg_pub.add;
1288 	    p_usec_cat_tbl(I).status := 'A';
1289 	  END IF;
1290 
1291           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1292 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.status_after_check_import_allowed',
1293 	    'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1294 	    ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1295 	    p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat||'  '||'Status:'||p_usec_cat_tbl(I).status);
1296 	  END IF;
1297 
1298 	END IF;
1299 
1300 	IF p_usec_cat_tbl(I).status = 'S' THEN
1301           validate_db_cons ( p_usec_cat_tbl(I) );
1302 
1303           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1304 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.status_after_validate_db_cons',
1305 	    'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1306 	    ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1307 	    p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat||'  '||'Status:'||p_usec_cat_tbl(I).status);
1308 	  END IF;
1309 
1310         END IF;
1311 
1312 
1313           /* Proceed with business validations only if the status is Success, 'S' */
1314         IF p_usec_cat_tbl(I).status = 'S' THEN
1315           /* Validation# 1: Check for the closed_ind for UNIT_CAT */
1316            igs_ps_validate_generic_pkg.validate_category( p_usec_cat_tbl(I),l_n_uoo_id ) ;
1317 
1318            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1319 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.status_after_Business_Validation',
1320 	     'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1321 	     ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1322 	     p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat||'  '||'Status:'||p_usec_cat_tbl(I).status);
1323 	   END IF;
1324 
1325         END IF;
1326 
1327 	IF p_usec_cat_tbl(I).status = 'S' THEN
1328            /* Insert record */
1329            INSERT INTO igs_ps_usec_category
1330            (usec_cat_id,
1331             uoo_id,
1332             unit_cat,
1333             created_by,
1334             creation_date,
1335             last_updated_by,
1336             last_update_date,
1337             last_update_login
1338            )
1339            VALUES
1340            (igs_ps_usec_category_s.nextval,
1341             l_n_uoo_id,
1342             p_usec_cat_tbl(I).unit_cat,
1343             g_n_user_id,
1344             SYSDATE,
1345             g_n_user_id,
1346             SYSDATE,
1347             g_n_login_id
1348            );
1349 
1350            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1351 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.Record_Inserted',
1352 	     'Unit code:'||p_usec_cat_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cat_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1353 	     ||p_usec_cat_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cat_tbl(I).location_cd||'  '||'Unit Class:'||
1354 	     p_usec_cat_tbl(I).unit_class||'  '||'Unit_Cat:'||p_usec_cat_tbl(I).unit_cat);
1355 	   END IF;
1356 
1357         END IF; --insert
1358 
1359 	IF p_usec_cat_tbl(I).status = 'S' THEN
1360 	   p_usec_cat_tbl(I).msg_from := NULL;
1361 	   p_usec_cat_tbl(I).msg_to := NULL;
1362 	ELSIF  p_usec_cat_tbl(I).status = 'A' THEN
1363 	   p_usec_cat_tbl(I).msg_from  := p_usec_cat_tbl(I).msg_from + 1;
1364 	   p_usec_cat_tbl(I).msg_to := fnd_msg_pub.count_msg;
1365 	ELSE
1366            p_c_rec_status := p_usec_cat_tbl(I).status;
1367            p_usec_cat_tbl(I).msg_from :=p_usec_cat_tbl(I).msg_from+1;
1368            p_usec_cat_tbl(I).msg_to := fnd_msg_pub.count_msg;
1369            IF p_usec_cat_tbl(I).status = 'E' THEN
1370             RETURN;
1371 	   END IF;
1372         END IF;
1373 
1374       END IF;--Exists
1375     END LOOP;
1376 
1377     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1378       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cat.after_import_status',p_c_rec_status);
1379     END IF;
1380 
1381   END create_usec_cat;
1382 
1383 
1384 
1385 /*teaching responsibility ovrd*/
1386 PROCEDURE create_usec_teach_resp_ovrd (
1387           p_usec_teach_resp_ovrd_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_tbl_type,
1388           p_c_rec_status             OUT NOCOPY VARCHAR2,
1389 	  p_calling_context          IN VARCHAR2
1390   ) AS
1391   /***********************************************************************************************
1392     Created By     :  sommukhe
1393     Date Created By:  10-JUN-2005
1394     Purpose        :  This procedure is a sub process to import records of Unit Section Teaching Responsibility Overrides.
1395 
1396     Known limitations,enhancements,remarks:
1397     Change History (in reverse chronological order)
1398     Who         When            What
1399   ********************************************************************************************** */
1400        l_insert_update  VARCHAR2(1);
1401        l_n_uoo_id       igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
1402        l_c_cal_type     igs_ps_unit_ofr_opt_all.cal_type%TYPE;
1403        l_n_seq_num      igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
1404 
1405        l_tbl_uoo        igs_ps_create_generic_pkg.uoo_tbl_type;
1406 
1407        CURSOR c_tch_rsp_ovrd(p_unit_cd IN VARCHAR2,
1408        p_version_number NUMBER,
1409        p_cal_type VARCHAR2,
1410        p_ci_sequence_number NUMBER,
1411        p_location_cd VARCHAR2,
1412        p_unit_class VARCHAR2,
1413        p_org_unit_cd VARCHAR2,
1414        p_ou_start_dt DATE
1415        ) IS
1416        SELECT *
1417        FROM igs_ps_tch_resp_ovrd_all
1418        WHERE unit_cd = p_unit_cd
1419        AND version_number= p_version_number
1420        AND cal_type=p_cal_type
1421        AND ci_sequence_number=p_ci_sequence_number
1422        AND location_cd=p_location_cd
1423        AND unit_class=p_unit_class
1424        AND org_unit_cd=p_org_unit_cd
1425        AND ou_start_dt =p_ou_start_dt;
1426 
1427        c_tch_rsp_ovrd_rec c_tch_rsp_ovrd%ROWTYPE;
1428 
1429     /* Private Procedures for create_usec_teach_resp_ovrd */
1430     PROCEDURE trim_values ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type ) AS
1431     BEGIN
1432       p_tch_rsp_ovrd_rec.unit_cd := trim(p_tch_rsp_ovrd_rec.unit_cd);
1433       p_tch_rsp_ovrd_rec.version_number := trim(p_tch_rsp_ovrd_rec.version_number);
1434       p_tch_rsp_ovrd_rec.teach_cal_alternate_code := trim(p_tch_rsp_ovrd_rec.teach_cal_alternate_code);
1435       p_tch_rsp_ovrd_rec.location_cd := trim(p_tch_rsp_ovrd_rec.location_cd);
1436       p_tch_rsp_ovrd_rec.unit_class := trim(p_tch_rsp_ovrd_rec.unit_class);
1437       p_tch_rsp_ovrd_rec.org_unit_cd := trim(p_tch_rsp_ovrd_rec.org_unit_cd);
1438       p_tch_rsp_ovrd_rec.ou_start_dt := TRUNC(p_tch_rsp_ovrd_rec.ou_start_dt);
1439       p_tch_rsp_ovrd_rec.percentage := trim(p_tch_rsp_ovrd_rec.percentage);
1440     END trim_values;
1441 
1442     -- validate parameters passed.
1443     PROCEDURE validate_parameters ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type ) AS
1444     BEGIN
1445 
1446       /* Check for Mandatory Parameters */
1447       IF p_tch_rsp_ovrd_rec.unit_cd IS NULL OR p_tch_rsp_ovrd_rec.unit_cd = FND_API.G_MISS_CHAR THEN
1448         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
1449         p_tch_rsp_ovrd_rec.status := 'E';
1450       END IF;
1451       IF p_tch_rsp_ovrd_rec.version_number IS NULL OR p_tch_rsp_ovrd_rec.version_number = FND_API.G_MISS_NUM THEN
1452         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
1453         p_tch_rsp_ovrd_rec.status := 'E';
1454       END IF;
1455       IF p_tch_rsp_ovrd_rec.teach_cal_alternate_code IS NULL OR p_tch_rsp_ovrd_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
1456         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
1457         p_tch_rsp_ovrd_rec.status := 'E';
1458       END IF;
1459       IF p_tch_rsp_ovrd_rec.location_cd IS NULL OR p_tch_rsp_ovrd_rec.location_cd = FND_API.G_MISS_CHAR THEN
1460         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
1461         p_tch_rsp_ovrd_rec.status := 'E';
1462       END IF;
1463       IF p_tch_rsp_ovrd_rec.unit_class IS NULL OR p_tch_rsp_ovrd_rec.unit_class = FND_API.G_MISS_CHAR THEN
1464         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
1465         p_tch_rsp_ovrd_rec.status := 'E';
1466       END IF;
1467       IF p_tch_rsp_ovrd_rec.org_unit_cd IS NULL OR p_tch_rsp_ovrd_rec.org_unit_cd = FND_API.G_MISS_CHAR THEN
1468         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'ORG_UNIT_CD', 'LEGACY_TOKENS', FALSE);
1469         p_tch_rsp_ovrd_rec.status := 'E';
1470       END IF;
1471       IF p_tch_rsp_ovrd_rec.ou_start_dt IS NULL OR p_tch_rsp_ovrd_rec.ou_start_dt = FND_API.G_MISS_DATE THEN
1472         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'OU_START_DT', 'LEGACY_TOKENS', FALSE);
1473         p_tch_rsp_ovrd_rec.status := 'E';
1474       END IF;
1475       IF p_tch_rsp_ovrd_rec.percentage IS NULL OR p_tch_rsp_ovrd_rec.percentage = FND_API.G_MISS_NUM THEN
1476         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PERCENTAGE', 'LEGACY_TOKENS', FALSE);
1477         p_tch_rsp_ovrd_rec.status := 'E';
1478       END IF;
1479     END validate_parameters;
1480 
1481 
1482     -- Check for Update
1483     FUNCTION check_insert_update ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type ) RETURN VARCHAR2 IS
1484       CURSOR c_tch_resp_ovrd(p_unit_cd IN VARCHAR2,
1485 			     p_version_number NUMBER,
1486 			     p_cal_type VARCHAR2,
1487 			     p_ci_sequence_number NUMBER,
1488 			     p_location_cd VARCHAR2,
1489 			     p_unit_class VARCHAR2,
1490 			     p_org_unit_cd VARCHAR2,
1491 			     p_ou_start_dt DATE
1492        ) IS
1493        SELECT 'X'
1494        FROM igs_ps_tch_resp_ovrd_all
1495        WHERE unit_cd = p_unit_cd
1496        AND version_number= p_version_number
1497        AND cal_type=p_cal_type
1498        AND ci_sequence_number=p_ci_sequence_number
1499        AND location_cd=p_location_cd
1500        AND unit_class=p_unit_class
1501        AND org_unit_cd=p_org_unit_cd
1502        AND ou_start_dt =p_ou_start_dt;
1503 
1504        c_tch_resp_ovrd_rec c_tch_resp_ovrd%ROWTYPE;
1505 
1506     BEGIN
1507 
1508 	OPEN c_tch_resp_ovrd(p_tch_rsp_ovrd_rec.unit_cd,
1509 			     p_tch_rsp_ovrd_rec.version_number,
1510 			     l_c_cal_type,
1511 			     l_n_seq_num,
1512 			     p_tch_rsp_ovrd_rec.location_cd,
1513 			     p_tch_rsp_ovrd_rec.unit_class,
1514 			     p_tch_rsp_ovrd_rec.org_unit_cd,
1515 			     p_tch_rsp_ovrd_rec.ou_start_dt);
1516 	FETCH c_tch_resp_ovrd INTO c_tch_resp_ovrd_rec;
1517 	IF c_tch_resp_ovrd%NOTFOUND THEN
1518           CLOSE c_tch_resp_ovrd;
1519 	  RETURN 'I';
1520         ELSE
1521           CLOSE c_tch_resp_ovrd;
1522 	  RETURN 'U';
1523         END IF;
1524 
1525     END check_insert_update;
1526 
1527     -- Carry out derivations and validate them
1528     PROCEDURE validate_derivations ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type ) AS
1529       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
1530       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
1531       l_c_message  VARCHAR2(30);
1532     BEGIN
1533 
1534 
1535       -- Derive Calander Type and Sequence Number
1536       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_tch_rsp_ovrd_rec.teach_cal_alternate_code,
1537                                              p_cal_type           => l_c_cal_type,
1538                                              p_ci_sequence_number => l_n_seq_num,
1539                                              p_start_dt           => l_d_start_dt,
1540                                              p_end_dt             => l_d_end_dt,
1541                                              p_return_status      => l_c_message );
1542       IF ( l_c_message <> 'SINGLE' ) THEN
1543         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
1544         p_tch_rsp_ovrd_rec.status := 'E';
1545       END IF;
1546 
1547 
1548       -- Derive uoo_id
1549       l_c_message := NULL;
1550       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_tch_rsp_ovrd_rec.unit_cd,
1551                                             p_ver_num    => p_tch_rsp_ovrd_rec.version_number,
1552                                             p_cal_type   => l_c_cal_type,
1553                                             p_seq_num    => l_n_seq_num,
1554                                             p_loc_cd     => p_tch_rsp_ovrd_rec.location_cd,
1555                                             p_unit_class => p_tch_rsp_ovrd_rec.unit_class,
1556                                             p_uoo_id     => l_n_uoo_id,
1557                                             p_message    => l_c_message );
1558       IF ( l_c_message IS NOT NULL ) THEN
1559         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1560         p_tch_rsp_ovrd_rec.status := 'E';
1561       END IF;
1562 
1563     END validate_derivations;
1564 
1565     -- Validate Database Constraints
1566     PROCEDURE validate_db_cons ( p_tch_rsp_ovrd_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_ovrd_rec_type,p_insert_update VARCHAR2 ) AS
1567     BEGIN
1568       IF (p_insert_update = 'I') THEN
1569 
1570 	/* Unique Key Validation */
1571 	IF igs_ps_tch_resp_ovrd_pkg.get_pk_for_validation ( x_unit_cd => p_tch_rsp_ovrd_rec.unit_cd,
1572 							    x_version_number => p_tch_rsp_ovrd_rec.version_number,
1573 							    x_cal_type=>l_c_cal_type,
1574 							    x_ci_sequence_number=>l_n_seq_num,
1575 							    x_location_cd=>p_tch_rsp_ovrd_rec.location_cd,
1576 							    x_unit_class=>p_tch_rsp_ovrd_rec.unit_class,
1577 							    x_org_unit_cd=>p_tch_rsp_ovrd_rec.org_unit_cd,
1578 							    x_ou_start_dt =>p_tch_rsp_ovrd_rec.ou_start_dt ) THEN
1579 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1580 	  p_tch_rsp_ovrd_rec.status := 'W';
1581 	  RETURN;
1582 	END IF;
1583       END IF;
1584 
1585       /* Validate Check Constraints */
1586       BEGIN
1587         igs_ps_tch_resp_ovrd_pkg.check_constraints ( 'CI_SEQUENCE_NUMBER', l_n_seq_num);
1588       EXCEPTION
1589         WHEN OTHERS THEN
1590           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'CI_SEQUENCE_NUMBER', 'LEGACY_TOKENS', TRUE);
1591           p_tch_rsp_ovrd_rec.status := 'E';
1592       END;
1593 
1594       BEGIN
1595         igs_ps_tch_resp_ovrd_pkg.check_constraints ( 'UOO_ID', l_n_uoo_id);
1596       EXCEPTION
1597         WHEN OTHERS THEN
1598           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'UOO_ID', 'LEGACY_TOKENS', TRUE);
1599           p_tch_rsp_ovrd_rec.status := 'E';
1600       END;
1601 
1602       BEGIN
1603         igs_ps_tch_resp_ovrd_pkg.check_constraints ( 'PERCENTAGE', p_tch_rsp_ovrd_rec.percentage);
1604       EXCEPTION
1605         WHEN OTHERS THEN
1606           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PER_0_100', null, null, TRUE);
1607           p_tch_rsp_ovrd_rec.status := 'E';
1608       END;
1609 
1610       /* Validate FK Constraints */
1611       IF NOT igs_ps_unit_ofr_opt_pkg.get_pk_for_validation ( p_tch_rsp_ovrd_rec.unit_cd, p_tch_rsp_ovrd_rec.version_number,
1612       l_c_cal_type,l_n_seq_num,p_tch_rsp_ovrd_rec.location_cd,p_tch_rsp_ovrd_rec.unit_class) THEN
1613         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1614         p_tch_rsp_ovrd_rec.status := 'E';
1615       END IF;
1616 
1617       IF NOT igs_or_unit_pkg.get_pk_for_validation ( p_tch_rsp_ovrd_rec.org_unit_cd,p_tch_rsp_ovrd_rec.ou_start_dt ) THEN
1618         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ORG_UNIT', 'LEGACY_TOKENS', FALSE);
1619         p_tch_rsp_ovrd_rec.status := 'E';
1620       END IF;
1621 
1622       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
1623         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
1624         p_tch_rsp_ovrd_rec.status := 'E';
1625       END IF;
1626     END validate_db_cons;
1627 
1628   /* Main Unit Section Teaching Responsibililty Override Sub Process */
1629   BEGIN
1630 
1631     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1632       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.start_logging_for',
1633                       'Unit Section Teaching Responsibility Overrides ');
1634     END IF;
1635 
1636     p_c_rec_status := 'S';
1637     FOR I in 1..p_usec_teach_resp_ovrd_tbl.LAST LOOP
1638 
1639       IF p_usec_teach_resp_ovrd_tbl.EXISTS(I) THEN
1640         l_n_uoo_id   := NULL;
1641 	l_c_cal_type := NULL;
1642 	l_n_seq_num  := NULL;
1643         p_usec_teach_resp_ovrd_tbl(I).status := 'S';
1644         p_usec_teach_resp_ovrd_tbl(I).msg_from := fnd_msg_pub.count_msg;
1645         trim_values(p_usec_teach_resp_ovrd_tbl(I) );
1646 
1647         validate_parameters ( p_usec_teach_resp_ovrd_tbl(I) );
1648 
1649 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1650           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_validate_parameters',
1651 	  'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1652 	  ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1653 	  p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1654 	  ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1655         END IF;
1656 
1657         IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' THEN
1658           validate_derivations ( p_usec_teach_resp_ovrd_tbl(I));
1659 
1660           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1661             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_validate_derivations',
1662 	    'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1663 	    ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1664 	    p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1665 	    ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1666 	  END IF;
1667 
1668 	END IF;
1669 
1670 	---INSERT /UPDATE
1671         l_insert_update:='I';
1672         IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
1673           l_insert_update:= check_insert_update(p_usec_teach_resp_ovrd_tbl(I));
1674 
1675           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1676             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_check_insert_update',
1677 	    'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1678 	    ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1679 	    p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1680 	    ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1681 	  END IF;
1682 
1683         END IF;
1684 
1685 	IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
1686 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
1687 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
1688 	    fnd_msg_pub.add;
1689 	    p_usec_teach_resp_ovrd_tbl(I).status := 'A';
1690 	  END IF;
1691 
1692           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1693             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_check_import_allowed',
1694 	    'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1695 	    ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1696 	    p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1697 	    ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1698 	  END IF;
1699 
1700 	END IF;
1701 
1702         IF l_tbl_uoo.count = 0 THEN
1703           l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
1704         ELSE
1705 	  IF NOT igs_ps_validate_lgcy_pkg.isExists(l_n_uoo_id,l_tbl_uoo) THEN
1706 	   l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
1707           END IF;
1708 	END IF;
1709 
1710 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1711 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.Count_of_unique_uoo_ids',
1712 	  'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1713 	  ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1714 	  p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1715 	  ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Count:'||l_tbl_uoo.count);
1716 	END IF;
1717 
1718         IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' THEN
1719           validate_db_cons ( p_usec_teach_resp_ovrd_tbl(I),l_insert_update );
1720 
1721           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1722             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_validate_db_cons',
1723 	    'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1724 	    ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1725 	    p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1726 	    ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1727 	  END IF;
1728 
1729         END IF;
1730 
1731         /* Business Validations */
1732         /* Proceed with business validations only if the status is Success, 'S' */
1733         IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' THEN
1734           igs_ps_validate_generic_pkg.validate_tch_rsp_ovrd ( p_usec_teach_resp_ovrd_tbl(I),l_n_uoo_id );
1735 
1736           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1737             fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.status_after_Business_validation',
1738 	    'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1739 	    ||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1740 	    p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1741 	    ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt||'  '||'Status:'||p_usec_teach_resp_ovrd_tbl(I).status);
1742 	  END IF;
1743 
1744         END IF;
1745 
1746          IF p_usec_teach_resp_ovrd_tbl(I).status = 'S'  THEN
1747 	   IF l_insert_update = 'I' THEN
1748              /* Insert Record */
1749 
1750              INSERT INTO igs_ps_tch_resp_ovrd_all
1751              (unit_cd,
1752               version_number,
1753               cal_type,
1754               ci_sequence_number,
1755               location_cd,
1756               unit_class,
1757               org_unit_cd,
1758               ou_start_dt,
1759               uoo_id,
1760               percentage,
1761               created_by,
1762               creation_date,
1763               last_updated_by,
1764               last_update_date,
1765               last_update_login
1766              )
1767              VALUES
1768              (p_usec_teach_resp_ovrd_tbl(I).unit_cd,
1769               p_usec_teach_resp_ovrd_tbl(I).version_number,
1770 	      l_c_cal_type,
1771 	      l_n_seq_num,
1772 	      p_usec_teach_resp_ovrd_tbl(I).location_cd,
1773               p_usec_teach_resp_ovrd_tbl(I).unit_class,
1774               p_usec_teach_resp_ovrd_tbl(I).org_unit_cd,
1775 	      p_usec_teach_resp_ovrd_tbl(I).ou_start_dt,
1776               l_n_uoo_id,
1777               p_usec_teach_resp_ovrd_tbl(I).percentage,
1778               g_n_user_id,
1779               SYSDATE,
1780               g_n_user_id,
1781               SYSDATE,
1782               g_n_login_id
1783              );
1784 
1785 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1786 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.Record_Inserted',
1787 		'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1788 		||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1789 		p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1790 		||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt);
1791 	      END IF;
1792 
1793            ELSE
1794 	     /*Update record*/
1795 
1796              --Opening the cursor to fetch the existing data wich will be used in the history table insert
1797 	     --Note this fetch needs to be done prior to the update statement
1798              OPEN c_tch_rsp_ovrd(p_usec_teach_resp_ovrd_tbl(I).unit_cd,
1799 	                         p_usec_teach_resp_ovrd_tbl(I).version_number,
1800 	                         l_c_cal_type,
1801 	                         l_n_seq_num,
1802 	                         p_usec_teach_resp_ovrd_tbl(I).location_cd,
1803 	                         p_usec_teach_resp_ovrd_tbl(I).unit_class,
1804 	                         p_usec_teach_resp_ovrd_tbl(I).org_unit_cd,
1805 	                         p_usec_teach_resp_ovrd_tbl(I).ou_start_dt);
1806 	     FETCH c_tch_rsp_ovrd INTO c_tch_rsp_ovrd_rec;
1807              CLOSE c_tch_rsp_ovrd;
1808 
1809              UPDATE igs_ps_tch_resp_ovrd_all
1810 	     SET percentage = p_usec_teach_resp_ovrd_tbl(I).percentage,
1811 	     last_updated_by = g_n_user_id,
1812 	     last_update_date = SYSDATE,
1813              last_update_login = g_n_login_id
1814 	     WHERE unit_cd = p_usec_teach_resp_ovrd_tbl(I).unit_cd
1815              AND version_number= p_usec_teach_resp_ovrd_tbl(I).version_number
1816              AND cal_type=l_c_cal_type
1817              AND ci_sequence_number=l_n_seq_num
1818              AND location_cd=p_usec_teach_resp_ovrd_tbl(I).location_cd
1819              AND unit_class=p_usec_teach_resp_ovrd_tbl(I).unit_class
1820              AND org_unit_cd=p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1821              AND ou_start_dt =p_usec_teach_resp_ovrd_tbl(I).ou_start_dt;
1822 
1823 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1824 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.Record_Updated',
1825 		'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1826 		||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1827 	        p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1828 	       ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt);
1829 	     END IF;
1830 
1831              --Inserting into the history table.
1832              IGS_PS_GEN_005.CRSP_INS_TRO_HIST (
1833 				p_usec_teach_resp_ovrd_tbl(I).unit_cd,
1834 				p_usec_teach_resp_ovrd_tbl(I).version_number,
1835 				l_c_cal_type,
1836 				l_n_seq_num,
1837 				p_usec_teach_resp_ovrd_tbl(I).location_cd,
1838 				p_usec_teach_resp_ovrd_tbl(I).unit_class,
1839 				p_usec_teach_resp_ovrd_tbl(I).org_unit_cd,
1840 				p_usec_teach_resp_ovrd_tbl(I).ou_start_dt,
1841 				p_usec_teach_resp_ovrd_tbl(I).percentage,
1842 				c_tch_rsp_ovrd_rec.percentage,
1843 				g_n_user_id,
1844 				c_tch_rsp_ovrd_rec.last_updated_by,
1845 				SYSDATE,
1846 				c_tch_rsp_ovrd_rec.last_update_date);
1847 
1848             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1849 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.Record_Inserted_into_history_table',
1850 		'Unit code:'||p_usec_teach_resp_ovrd_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_ovrd_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
1851 		||p_usec_teach_resp_ovrd_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_ovrd_tbl(I).location_cd||'  '||'Unit Class:'||
1852 	        p_usec_teach_resp_ovrd_tbl(I).unit_class||'  '||'org_unit_cd:'||p_usec_teach_resp_ovrd_tbl(I).org_unit_cd
1853 	       ||'  '||'ou_start_dt'||p_usec_teach_resp_ovrd_tbl(I).ou_start_dt);
1854 	     END IF;
1855 
1856      	   END IF;--insert/update
1857          END IF;
1858 
1859 	 IF p_usec_teach_resp_ovrd_tbl(I).status = 'S' THEN
1860 	   p_usec_teach_resp_ovrd_tbl(I).msg_from := NULL;
1861 	   p_usec_teach_resp_ovrd_tbl(I).msg_to := NULL;
1862 	 ELSIF  p_usec_teach_resp_ovrd_tbl(I).status = 'A' THEN
1863 	   p_usec_teach_resp_ovrd_tbl(I).msg_from  := p_usec_teach_resp_ovrd_tbl(I).msg_from + 1;
1864 	   p_usec_teach_resp_ovrd_tbl(I).msg_to := fnd_msg_pub.count_msg;
1865 	 ELSE
1866            p_c_rec_status := p_usec_teach_resp_ovrd_tbl(I).status;
1867            p_usec_teach_resp_ovrd_tbl(I).msg_from := p_usec_teach_resp_ovrd_tbl(I).msg_from+1;
1868            p_usec_teach_resp_ovrd_tbl(I).msg_to := fnd_msg_pub.count_msg;
1869            IF p_usec_teach_resp_ovrd_tbl(I).status = 'E' THEN
1870              RETURN;
1871            END IF;
1872          END IF;
1873 
1874        END IF;--exists
1875      END LOOP;
1876 
1877      /* Post Insert/Update Checks */
1878      IF NOT igs_ps_validate_generic_pkg.post_tch_rsp_ovrd (p_usec_teach_resp_ovrd_tbl,l_tbl_uoo) THEN
1879        p_c_rec_status := 'E';
1880      END IF;
1881      l_tbl_uoo.DELETE;
1882 
1883      IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1884        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp_ovrd.after_import_status',p_c_rec_status);
1885      END IF;
1886 
1887 
1888   END create_usec_teach_resp_ovrd;
1889 
1890 
1891 
1892 /*Unit Section assessment item groups*/
1893 
1894   PROCEDURE create_usec_ass_item_grp(
1895           p_usec_ass_item_grp_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_tbl_type,
1896           p_c_rec_status OUT NOCOPY VARCHAR2,
1897 	  p_calling_context  IN VARCHAR2
1898   )   AS
1899   /***********************************************************************************************
1900     Created By     :  SOMMUKHE
1901     Date Created By:  17-Jun-2005
1902     Purpose        :  This procedure is a sub process to insert records of Unit Section assessment item groups.
1903 
1904     Known limitations,enhancements,remarks:
1905     Change History (in reverse chronological order)
1906     Who         When            What
1907   ********************************************************************************************** */
1908     l_n_uoo_id           igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
1909     l_tbl_uoo            igs_ps_create_generic_pkg.uoo_tbl_type;
1910     l_insert_update      VARCHAR2(1);
1911 
1912 
1913     /* Private Procedures for create_usec_grd_sch */
1914     PROCEDURE trim_values ( p_as_us_ai_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) AS
1915     BEGIN
1916       p_as_us_ai_rec.unit_cd := trim(p_as_us_ai_rec.unit_cd);
1917       p_as_us_ai_rec.version_number := trim(p_as_us_ai_rec.version_number);
1918       p_as_us_ai_rec.teach_cal_alternate_code := trim(p_as_us_ai_rec.teach_cal_alternate_code);
1919       p_as_us_ai_rec.location_cd := trim(p_as_us_ai_rec.location_cd);
1920       p_as_us_ai_rec.unit_class := trim(p_as_us_ai_rec.unit_class);
1921       p_as_us_ai_rec.group_name := trim(p_as_us_ai_rec.group_name);
1922       p_as_us_ai_rec.midterm_formula_code := trim(p_as_us_ai_rec.midterm_formula_code);
1923       p_as_us_ai_rec.midterm_formula_qty := trim(p_as_us_ai_rec.midterm_formula_qty);
1924       p_as_us_ai_rec.midterm_weight_qty := trim(p_as_us_ai_rec.midterm_weight_qty);
1925       p_as_us_ai_rec.final_formula_code := trim(p_as_us_ai_rec.final_formula_code);
1926       p_as_us_ai_rec.final_formula_qty := trim(p_as_us_ai_rec.final_formula_qty);
1927       p_as_us_ai_rec.final_weight_qty := trim(p_as_us_ai_rec.final_weight_qty);
1928 
1929       p_as_us_ai_rec.assessment_id := trim(p_as_us_ai_rec.assessment_id);
1930       p_as_us_ai_rec.sequence_number := trim(p_as_us_ai_rec.sequence_number);
1931       p_as_us_ai_rec.due_dt := TRUNC(p_as_us_ai_rec.due_dt);
1932       p_as_us_ai_rec.reference := trim(p_as_us_ai_rec.reference);
1933       p_as_us_ai_rec.dflt_item_ind := trim(p_as_us_ai_rec.dflt_item_ind);
1934       --p_as_us_ai_rec.logical_delete_dt := TRUNC(p_as_us_ai_rec.logical_delete_dt);
1935       p_as_us_ai_rec.exam_cal_alternate_code := trim(p_as_us_ai_rec.exam_cal_alternate_code);
1936       p_as_us_ai_rec.grading_schema_cd := trim(p_as_us_ai_rec.grading_schema_cd);
1937       p_as_us_ai_rec.gs_version_number := trim(p_as_us_ai_rec.gs_version_number);
1938       p_as_us_ai_rec.description := trim(p_as_us_ai_rec.description);
1939       --p_as_us_ai_rec.release_date := TRUNC(p_as_us_ai_rec.release_date);
1940       p_as_us_ai_rec.midterm_mandatory_type_code := trim(p_as_us_ai_rec.midterm_mandatory_type_code);
1941       p_as_us_ai_rec.midterm_weight_qty_item := trim(p_as_us_ai_rec.midterm_weight_qty_item);
1942       p_as_us_ai_rec.final_mandatory_type_code := trim(p_as_us_ai_rec.final_mandatory_type_code);
1943       p_as_us_ai_rec.final_weight_qty_item := trim(p_as_us_ai_rec.final_weight_qty_item);
1944 
1945 
1946     END trim_values;
1947 
1948     PROCEDURE create_group( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) AS
1949       -- validate parameters passed.
1950       PROCEDURE validate_parameters ( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) AS
1951       BEGIN
1952 
1953 	/* Check for Mandatory Parameters */
1954 	IF p_as_us_ai_group_rec.unit_cd IS NULL OR p_as_us_ai_group_rec.unit_cd = FND_API.G_MISS_CHAR THEN
1955 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
1956 	  p_as_us_ai_group_rec.status := 'E';
1957 	END IF;
1958 	IF p_as_us_ai_group_rec.version_number IS NULL OR p_as_us_ai_group_rec.version_number = FND_API.G_MISS_NUM  THEN
1959 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
1960 	  p_as_us_ai_group_rec.status := 'E';
1961 	END IF;
1962 	IF p_as_us_ai_group_rec.teach_cal_alternate_code IS NULL OR p_as_us_ai_group_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
1963 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
1964 	  p_as_us_ai_group_rec.status := 'E';
1965 	END IF;
1966 	IF p_as_us_ai_group_rec.location_cd IS NULL  OR p_as_us_ai_group_rec.location_cd = FND_API.G_MISS_CHAR THEN
1967 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
1968 	  p_as_us_ai_group_rec.status := 'E';
1969 	END IF;
1970 	IF p_as_us_ai_group_rec.unit_class IS NULL OR p_as_us_ai_group_rec.unit_class = FND_API.G_MISS_CHAR  THEN
1971 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
1972 	  p_as_us_ai_group_rec.status := 'E';
1973 	END IF;
1974 	IF p_as_us_ai_group_rec.group_name IS NULL  OR p_as_us_ai_group_rec.group_name = FND_API.G_MISS_CHAR  THEN
1975 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'GROUP_NAME', 'LEGACY_TOKENS', FALSE);
1976 	  p_as_us_ai_group_rec.status := 'E';
1977 	END IF;
1978 
1979 
1980       END validate_parameters;
1981 
1982 
1983       -- Check for Update
1984       FUNCTION check_insert_update ( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) RETURN VARCHAR2 IS
1985 	CURSOR c_us_ai_group(cp_group_name VARCHAR2 ,cp_n_uoo_id NUMBER) IS
1986 	 SELECT 'X'
1987 	 FROM  igs_as_us_ai_group
1988 	 WHERE group_name = cp_group_name
1989 	 AND uoo_id = cp_n_uoo_id;
1990 
1991 	 c_us_ai_group_rec c_us_ai_group%ROWTYPE;
1992 
1993       BEGIN
1994 
1995 	  OPEN c_us_ai_group(p_as_us_ai_group_rec.group_name, l_n_uoo_id);
1996 	  FETCH c_us_ai_group INTO c_us_ai_group_rec;
1997 	  IF c_us_ai_group%NOTFOUND THEN
1998 	    CLOSE c_us_ai_group;
1999 	    RETURN 'I';
2000 	  ELSE
2001 	    CLOSE c_us_ai_group;
2002 	    RETURN 'U';
2003 	  END IF;
2004 
2005       END check_insert_update;
2006 
2007       -- Carry out derivations and validate them
2008       PROCEDURE validate_derivations ( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type) AS
2009 	l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
2010 	l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
2011 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
2012 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
2013 	l_c_message  VARCHAR2(30);
2014       BEGIN
2015 
2016 
2017 	-- Derive Calander Type and Sequence Number
2018 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_as_us_ai_group_rec.teach_cal_alternate_code,
2019 					       p_cal_type           => l_c_cal_type,
2020 					       p_ci_sequence_number => l_n_seq_num,
2021 					       p_start_dt           => l_d_start_dt,
2022 					       p_end_dt             => l_d_end_dt,
2023 					       p_return_status      => l_c_message );
2024 	IF ( l_c_message <> 'SINGLE' ) THEN
2025 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
2026 	  p_as_us_ai_group_rec.status := 'E';
2027 	END IF;
2028 
2029 	--check if calendar instance is inactive
2030 	IF NOT  igs_ps_val_uai.crsp_val_crs_ci(l_c_cal_type, l_n_seq_num, l_c_message) THEN
2031 	  fnd_message.set_name ( 'IGS', l_c_message );
2032 	  fnd_msg_pub.add;
2033 	  p_as_us_ai_group_rec.status := 'E';
2034 	END IF;
2035 
2036 	--check if calendar type is closed
2037 	IF NOT  igs_as_val_uai.crsp_val_uo_cal_type(l_c_cal_type, l_c_message) THEN
2038 	  fnd_message.set_name ( 'IGS', l_c_message );
2039 	  fnd_msg_pub.add;
2040 	  p_as_us_ai_group_rec.status := 'E';
2041 	END IF;
2042 
2043 
2044 	-- Derive uoo_id
2045 	l_c_message := NULL;
2046 	igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_as_us_ai_group_rec.unit_cd,
2047 					      p_ver_num    => p_as_us_ai_group_rec.version_number,
2048 					      p_cal_type   => l_c_cal_type,
2049 					      p_seq_num    => l_n_seq_num,
2050 					      p_loc_cd     => p_as_us_ai_group_rec.location_cd,
2051 					      p_unit_class => p_as_us_ai_group_rec.unit_class,
2052 					      p_uoo_id     => l_n_uoo_id,
2053 					      p_message    => l_c_message );
2054 	IF ( l_c_message IS NOT NULL ) THEN
2055 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
2056 	  p_as_us_ai_group_rec.status := 'E';
2057 	END IF;
2058       END validate_derivations;
2059 
2060       PROCEDURE Assign_default( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,p_insert_update VARCHAR2 ) AS
2061 
2062 	CURSOR c_us_ai_group(cp_group_name VARCHAR2 ,cp_n_uoo_id NUMBER) IS
2063 	SELECT *
2064 	FROM  igs_as_us_ai_group
2065 	WHERE group_name = cp_group_name
2066 	AND uoo_id = cp_n_uoo_id;
2067 
2068 	c_us_ai_group_rec c_us_ai_group%ROWTYPE;
2069 
2070       BEGIN
2071 
2072 	IF p_insert_update = 'U' THEN
2073 	   OPEN c_us_ai_group(p_as_us_ai_group_rec.group_name, l_n_uoo_id);
2074 	   FETCH c_us_ai_group INTO c_us_ai_group_rec;
2075 	   CLOSE c_us_ai_group;
2076 
2077 	   IF p_as_us_ai_group_rec.midterm_formula_code IS NULL  THEN
2078 	      p_as_us_ai_group_rec.midterm_formula_code := c_us_ai_group_rec.midterm_formula_code;
2079 	   ELSIF  p_as_us_ai_group_rec.midterm_formula_code = FND_API.G_MISS_CHAR THEN
2080 	      p_as_us_ai_group_rec.midterm_formula_code :=NULL;
2081 	   END IF;
2082 
2083 	   IF p_as_us_ai_group_rec.midterm_formula_qty IS NULL THEN
2084 	     p_as_us_ai_group_rec.midterm_formula_qty := c_us_ai_group_rec.midterm_formula_qty;
2085 	   ELSIF p_as_us_ai_group_rec.midterm_formula_qty = FND_API.G_MISS_NUM THEN
2086 	     p_as_us_ai_group_rec.midterm_formula_qty :=NULL;
2087 	   END IF;
2088 
2089 	   IF p_as_us_ai_group_rec.midterm_weight_qty IS NULL THEN
2090 	     p_as_us_ai_group_rec.midterm_weight_qty :=c_us_ai_group_rec.midterm_weight_qty;
2091 	   ELSIF p_as_us_ai_group_rec.midterm_weight_qty  = FND_API.G_MISS_NUM THEN
2092 	     p_as_us_ai_group_rec.midterm_weight_qty :=NULL;
2093 	   END IF;
2094 
2095 	   IF p_as_us_ai_group_rec.final_formula_code IS NULL THEN
2096 	     p_as_us_ai_group_rec.final_formula_code :=c_us_ai_group_rec.final_formula_code;
2097 	   ELSIF p_as_us_ai_group_rec.final_formula_code = FND_API.G_MISS_CHAR THEN
2098 	     p_as_us_ai_group_rec.final_formula_code :=NULL;
2099 	   END IF;
2100 
2101 	   IF p_as_us_ai_group_rec.final_formula_qty IS NULL THEN
2102 	     p_as_us_ai_group_rec.final_formula_qty := c_us_ai_group_rec.final_formula_qty;
2103 	   ELSIF p_as_us_ai_group_rec.final_formula_qty = FND_API.G_MISS_NUM THEN
2104 	     p_as_us_ai_group_rec.final_formula_qty :=NULL;
2105 	   END IF;
2106 
2107 	   IF p_as_us_ai_group_rec.final_weight_qty IS NULL THEN
2108 	     p_as_us_ai_group_rec.final_weight_qty := c_us_ai_group_rec.final_weight_qty;
2109 	   ELSIF p_as_us_ai_group_rec.final_weight_qty = FND_API.G_MISS_NUM THEN
2110 	     p_as_us_ai_group_rec.final_weight_qty :=NULL;
2111 	   END IF;
2112 
2113 	END IF;
2114 
2115       END Assign_default;
2116 
2117       -- Validate Database Constraints
2118       PROCEDURE validate_db_cons ( p_as_us_ai_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,p_insert_update VARCHAR2 ) AS
2119       BEGIN
2120 	IF (p_insert_update = 'I') THEN
2121 	  /* Unique Key Validation */
2122 	  IF igs_as_us_ai_group_pkg.get_uk_for_validation (x_uoo_id => l_n_uoo_id,
2123 							   x_group_name => p_as_us_ai_group_rec.group_name) THEN
2124 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_ASSMNT', 'LEGACY_TOKENS', FALSE);
2125 	    p_as_us_ai_group_rec.status := 'W';
2126 	    RETURN;
2127 	  END IF;
2128 	END IF;
2129 
2130 	/* Validate Check Constraints */
2131 	IF p_as_us_ai_group_rec.midterm_formula_qty IS NOT NULL THEN
2132 	  IF p_as_us_ai_group_rec.midterm_formula_qty <0 OR p_as_us_ai_group_rec.midterm_formula_qty >999 THEN
2133 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999', 'MIDTERM_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
2134 	    p_as_us_ai_group_rec.status := 'E';
2135 	  END IF;
2136 
2137 	  --Format mask validation
2138 	  IF p_as_us_ai_group_rec.status <> 'E' THEN
2139 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_as_us_ai_group_rec.midterm_formula_qty,3,0) THEN
2140 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999', 'MIDTERM_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
2141 		p_as_us_ai_group_rec.status :='E';
2142 	    END IF;
2143 	  END IF;
2144 
2145 	END IF;
2146 
2147 	IF p_as_us_ai_group_rec.midterm_weight_qty IS NOT NULL THEN
2148 	  IF p_as_us_ai_group_rec.midterm_weight_qty <0.001 OR p_as_us_ai_group_rec.midterm_weight_qty >999.999 THEN
2149 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'MIDTERM_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
2150 	    p_as_us_ai_group_rec.status := 'E';
2151 	  END IF;
2152 
2153 	  --Format mask validation
2154 	  IF p_as_us_ai_group_rec.status <> 'E' THEN
2155 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_as_us_ai_group_rec.midterm_weight_qty,3,3) THEN
2156 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'MIDTERM_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
2157 		p_as_us_ai_group_rec.status :='E';
2158 	    END IF;
2159 	  END IF;
2160 
2161 	END IF;
2162 
2163 	IF p_as_us_ai_group_rec.final_formula_qty IS NOT NULL THEN
2164 	  IF p_as_us_ai_group_rec.final_formula_qty <0 OR p_as_us_ai_group_rec.final_formula_qty >999 THEN
2165 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999', 'FINAL_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
2166 	    p_as_us_ai_group_rec.status := 'E';
2167 	  END IF;
2168 
2169 	  --Format mask validation
2170 	  IF p_as_us_ai_group_rec.status <> 'E' THEN
2171 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_as_us_ai_group_rec.final_formula_qty,3,0) THEN
2172 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999', 'FINAL_FORMULA_QTY', 'LEGACY_TOKENS', FALSE);
2173 		p_as_us_ai_group_rec.status :='E';
2174 	    END IF;
2175 	  END IF;
2176 
2177 	END IF;
2178 
2179 	IF p_as_us_ai_group_rec.final_weight_qty IS NOT NULL THEN
2180 	  IF p_as_us_ai_group_rec.final_weight_qty <0.001 OR p_as_us_ai_group_rec.final_weight_qty >999.999 THEN
2181 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'FINAL_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
2182     	    p_as_us_ai_group_rec.status := 'E';
2183 	  END IF;
2184 
2185 	  --Format mask validation
2186 	  IF p_as_us_ai_group_rec.status <> 'E' THEN
2187 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_as_us_ai_group_rec.final_weight_qty,3,3) THEN
2188 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'FINAL_WEIGHT_QTY', 'LEGACY_TOKENS', FALSE);
2189 		p_as_us_ai_group_rec.status :='E';
2190 	    END IF;
2191 	  END IF;
2192 
2193 	END IF;
2194 
2195 
2196 	/* Validate FK Constraints */
2197 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
2198 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
2199 	  p_as_us_ai_group_rec.status := 'E';
2200 	END IF;
2201 
2202       END validate_db_cons;
2203 
2204     -- Main section for assesment item group.
2205     BEGIN
2206 
2207        validate_parameters(p_as_us_ai_group_rec);
2208 
2209        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2210 	 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_validate_parameters_item',
2211 	 'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2212 	 ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2213 	 p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2214        END IF;
2215 
2216        IF p_as_us_ai_group_rec.status = 'S' THEN
2217           validate_derivations(p_as_us_ai_group_rec);
2218 
2219 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2220 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_validate_derivations',
2221 	     'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2222 	     ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2223 	     p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2224 	   END IF;
2225 
2226        END IF;
2227 
2228        --Find out whether it is insert/update of record
2229        l_insert_update:='I';
2230        IF p_as_us_ai_group_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
2231          l_insert_update:= check_insert_update(p_as_us_ai_group_rec);
2232 
2233          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2234 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_check_insert_update',
2235 	   'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2236 	   ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2237 	   p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2238 	 END IF;
2239 
2240        END IF;
2241 
2242        -- Find out whether record can go for import in context of cancelled/aborted
2243        IF p_as_us_ai_group_rec.status = 'S' AND p_calling_context = 'S' THEN
2244 	 IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
2245 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
2246 	    fnd_msg_pub.add;
2247 	    p_as_us_ai_group_rec.status := 'A';
2248 	 END IF;
2249 
2250          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2251 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_check_import_allowed',
2252 	   'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2253 	   ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2254 	   p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2255 	 END IF;
2256 
2257 
2258        END IF;
2259 
2260        IF p_as_us_ai_group_rec.status = 'S' THEN
2261 	  Assign_default(p_as_us_ai_group_rec,l_insert_update);
2262 
2263           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2264 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_Assign_default',
2265 	    'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2266 	    ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2267 	    p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2268 	  END IF;
2269 
2270        END IF;
2271 
2272        IF l_tbl_uoo.count = 0 THEN
2273           l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
2274        ELSE
2275           IF NOT igs_ps_validate_lgcy_pkg.isExists(l_n_uoo_id,l_tbl_uoo)  THEN
2276 	     l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
2277 	  END IF;
2278        END IF;
2279 
2280        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2281 	 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.Count_unique_uoo_ids',
2282 	 'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2283 	 ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2284 	 p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||'  '||'Count:'||l_tbl_uoo.count);
2285        END IF;
2286 
2287        IF p_as_us_ai_group_rec.status = 'S' THEN
2288           validate_db_cons(p_as_us_ai_group_rec,l_insert_update);
2289 
2290           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2291 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_validate_db_cons',
2292 	    'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2293 	    ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2294 	    p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2295 	  END IF;
2296 
2297        END IF;
2298 
2299        IF p_as_us_ai_group_rec.status = 'S' THEN
2300          igs_ps_validate_generic_pkg.validate_as_us_ai_group(p_as_us_ai_group_rec, l_n_uoo_id);
2301 
2302          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2303 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_Business_validation',
2304 	   'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2305 	   ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2306 	   p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name||' '||'Status:'||p_as_us_ai_group_rec.status);
2307 	 END IF;
2308 
2309        END IF;
2310 
2311        IF p_as_us_ai_group_rec.status = 'S' THEN
2312 	 IF l_insert_update = 'I' THEN
2313               /* Insert Record */
2314            INSERT INTO igs_as_us_ai_group
2315            (us_ass_item_group_id,
2316            uoo_id,
2317            group_name,
2318            midterm_formula_code,
2319            midterm_formula_qty,
2320            midterm_weight_qty,
2321            final_formula_code,
2322            final_formula_qty,
2323            final_weight_qty,
2324            created_by,
2325            creation_date,
2326            last_updated_by,
2327            last_update_date,
2328            last_update_login
2329            )
2330            VALUES
2331            (igs_as_us_ai_group_s.NEXTVAL,
2332            l_n_uoo_id,
2333            p_as_us_ai_group_rec.group_name,
2334            p_as_us_ai_group_rec.midterm_formula_code,
2335            p_as_us_ai_group_rec.midterm_formula_qty,
2336 	   p_as_us_ai_group_rec.midterm_weight_qty,
2337 	   p_as_us_ai_group_rec.final_formula_code,
2338 	   p_as_us_ai_group_rec.final_formula_qty,
2339 	   p_as_us_ai_group_rec.final_weight_qty,
2340            g_n_user_id,
2341            SYSDATE,
2342            g_n_user_id,
2343            SYSDATE,
2344            g_n_login_id
2345            );
2346 
2347            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2348 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.record_Inserted',
2349 	     'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2350 	     ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2351 	     p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name);
2352 	   END IF;
2353 
2354          ELSE --update
2355 	   UPDATE igs_as_us_ai_group
2356 	   SET midterm_formula_code=p_as_us_ai_group_rec.midterm_formula_code,
2357 	   midterm_formula_qty=p_as_us_ai_group_rec.midterm_formula_qty,
2358 	   midterm_weight_qty=p_as_us_ai_group_rec.midterm_weight_qty,
2359 	   final_formula_code=p_as_us_ai_group_rec.final_formula_code,
2360 	   final_formula_qty=p_as_us_ai_group_rec.final_formula_qty,
2361 	   final_weight_qty=p_as_us_ai_group_rec.final_weight_qty,
2362 	   last_updated_by = g_n_user_id,
2363 	   last_update_date = SYSDATE,
2364            last_update_login = g_n_login_id
2365 	   WHERE group_name =p_as_us_ai_group_rec.group_name
2366 	   AND uoo_id = l_n_uoo_id;
2367 
2368            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2369 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.record_updated',
2370 	     'Unit code:'||p_as_us_ai_group_rec.unit_cd||'  '||'Version number:'||p_as_us_ai_group_rec.version_number||'  '||'teach_cal_alternate_code:'
2371 	     ||p_as_us_ai_group_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_as_us_ai_group_rec.location_cd||'  '||'Unit Class:'||
2372 	     p_as_us_ai_group_rec.unit_class||'Group name:'||p_as_us_ai_group_rec.group_name);
2373 	   END IF;
2374 
2375          END IF;
2376        END IF;
2377 
2378     END create_group;
2379 
2380     PROCEDURE create_item( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) AS
2381       CURSOR c_unitass_item(cp_n_uoo_id NUMBER ,cp_assessment_id NUMBER,cp_sequence_number NUMBER) IS
2382       SELECT *
2383       FROM igs_ps_unitass_item
2384       WHERE uoo_id = cp_n_uoo_id
2385       AND ass_id = cp_assessment_id
2386       AND sequence_number=cp_sequence_number;
2387 
2388       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
2389       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
2390 
2391       l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
2392       l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
2393 
2394       l_c_exam_cal_type igs_ca_inst_all.cal_type%TYPE;
2395       l_n_exam_seq_num  igs_ca_inst_all.sequence_number%TYPE;
2396 
2397       l_n_us_ass_item_group_id  igs_ps_unitass_item.us_ass_item_group_id%type;
2398 
2399       -- validate parameters passed.
2400       PROCEDURE validate_parameters_item ( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) AS
2401       BEGIN
2402 
2403 	/* Check for Mandatory Parameters */
2404 	IF p_unitass_item_rec.assessment_id IS NULL OR p_unitass_item_rec.assessment_id = FND_API.G_MISS_NUM THEN
2405 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'ASSESSMENT_ID', 'LEGACY_TOKENS', FALSE);
2406 	  p_unitass_item_rec.status := 'E';
2407 	END IF;
2408 	IF p_unitass_item_rec.grading_schema_cd IS NULL OR p_unitass_item_rec.grading_schema_cd = FND_API.G_MISS_CHAR THEN
2409 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'GRADINGS_SCHEMA_CD', 'LEGACY_TOKENS', FALSE);
2410 	  p_unitass_item_rec.status := 'E';
2411 	END IF;
2412 	IF p_unitass_item_rec.gs_version_number IS NULL OR p_unitass_item_rec.gs_version_number = FND_API.G_MISS_NUM THEN
2413 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'GS_VERSION_NUMBER', 'LEGACY_TOKENS', FALSE);
2414 	  p_unitass_item_rec.status := 'E';
2415 	END IF;
2416 
2417       END validate_parameters_item;
2418 
2419 
2420       -- Check for Update
2421       FUNCTION check_insert_update_item ( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type ) RETURN VARCHAR2 IS
2422 	CURSOR c_unitass_item(cp_n_uoo_id NUMBER ,cp_assessment_id NUMBER,cp_sequence_number NUMBER) IS
2423 	SELECT 'X'
2424 	FROM igs_ps_unitass_item
2425 	WHERE uoo_id = cp_n_uoo_id
2426 	AND ass_id = cp_assessment_id
2427 	AND sequence_number=cp_sequence_number;
2428 
2429 	c_unitass_item_rec c_unitass_item%ROWTYPE;
2430       BEGIN
2431 	OPEN c_unitass_item(l_n_uoo_id,p_unitass_item_rec.assessment_id,p_unitass_item_rec.sequence_number);
2432 	FETCH c_unitass_item INTO c_unitass_item_rec;
2433 	IF c_unitass_item%NOTFOUND THEN
2434 	  CLOSE c_unitass_item;
2435 	  RETURN 'I';
2436 	ELSE
2437 	  CLOSE c_unitass_item;
2438 	  RETURN 'U';
2439 	END IF;
2440 
2441       END check_insert_update_item;
2442 
2443       -- Carry out derivations and validate them
2444       PROCEDURE validate_derivations_item ( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type) AS
2445 
2446 	  l_c_message  VARCHAR2(30);
2447 
2448 	  CURSOR c_uaig_id(cp_uoo_id NUMBER,cp_group_name VARCHAR2) IS
2449 	  SELECT us_ass_item_group_id
2450 	  FROM igs_as_us_ai_group
2451 	  WHERE uoo_id = cp_uoo_id
2452 	  AND group_name = cp_group_name;
2453 
2454       BEGIN
2455 
2456 	-- Derive Calander Type and Sequence Number
2457 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_unitass_item_rec.teach_cal_alternate_code,
2458 					       p_cal_type           => l_c_cal_type,
2459 					       p_ci_sequence_number => l_n_seq_num,
2460 					       p_start_dt           => l_d_start_dt,
2461 					       p_end_dt             => l_d_end_dt,
2462 					       p_return_status      => l_c_message );
2463 	IF ( l_c_message <> 'SINGLE' ) THEN
2464 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
2465 	  p_unitass_item_rec.status := 'E';
2466 	END IF;
2467 
2468 	--derive us_ass_item_group_id
2469 	IF p_unitass_item_rec.status = 'S' THEN
2470 	  OPEN c_uaig_id(l_n_uoo_id,p_unitass_item_rec.group_name);
2471 	  FETCH c_uaig_id INTO l_n_us_ass_item_group_id;
2472 	  CLOSE c_uaig_id;
2473 	END IF;
2474       END validate_derivations_item;
2475 
2476       PROCEDURE Assign_default( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,p_insert_update VARCHAR2 ) AS
2477 	CURSOR c_unitass_item(cp_n_uoo_id NUMBER ,cp_assessment_id NUMBER,cp_sequence_number NUMBER) IS
2478 	SELECT *
2479 	FROM igs_ps_unitass_item
2480 	WHERE uoo_id = cp_n_uoo_id
2481 	AND ass_id = cp_assessment_id
2482 	AND sequence_number=cp_sequence_number;
2483 
2484 	c_unitass_item_rec c_unitass_item%ROWTYPE;
2485 
2486 	CURSOR cal_type (cp_alternate_code igs_ca_inst_all.alternate_code%TYPE) IS
2487 	SELECT cal_type,sequence_number
2488 	FROM   igs_ca_inst_all
2489 	WHERE  alternate_code = cp_alternate_code;
2490 
2491         CURSOR cur_exam_cal(cp_cal_type igs_ca_inst_all.cal_type%TYPE, cp_sequence_number igs_ca_inst_all.sequence_number%TYPE ) IS
2492 	SELECT 'X'
2493 	FROM   igs_ca_inst ci,
2494 	       igs_ca_type cat
2495 	WHERE  cat.s_cal_cat = 'EXAM'
2496 	AND    ci.cal_type = cat.cal_type
2497 	AND    ci.cal_type = cp_cal_type
2498 	AND    ci.sequence_number = cp_sequence_number
2499 	AND    ci.sequence_number IN (SELECT ci2.sequence_number
2500 				      FROM   igs_ca_inst ci2,
2501 					     igs_ca_inst_rel cir
2502 				      WHERE  ci2.cal_type = cir.sup_cal_type
2503 	                              AND    ci2.sequence_number = cir.sup_ci_sequence_number
2504 	                              AND    cir.sub_cal_type = l_c_cal_type
2505 	                              AND    cir.sub_ci_sequence_number = l_n_seq_num);
2506 	l_c_var  VARCHAR2(1);
2507 
2508 	CURSOR cur_ass_desc(cp_assessment_id NUMBER) IS
2509 	SELECT description
2510 	FROM igs_as_assessmnt_itm
2511 	WHERE ass_id = cp_assessment_id;
2512 	l_cur_ass_desc cur_ass_desc%ROWTYPE;
2513 
2514       BEGIN
2515 	IF p_insert_update = 'I' THEN
2516 	  IF p_unitass_item_rec.dflt_item_ind IS NULL  THEN
2517 	    p_unitass_item_rec.dflt_item_ind :='Y';
2518 	  ELSIF  p_unitass_item_rec.dflt_item_ind = FND_API.G_MISS_CHAR THEN
2519 	    p_unitass_item_rec.dflt_item_ind :='Y';
2520 	  END IF;
2521 
2522 	  IF  p_unitass_item_rec.due_dt  = FND_API.G_MISS_DATE THEN
2523 	    p_unitass_item_rec.due_dt  :=NULL;
2524 	  END IF;
2525 
2526 	  IF p_unitass_item_rec.reference = FND_API.G_MISS_CHAR THEN
2527 	    p_unitass_item_rec.reference :=NULL;
2528 	  END IF;
2529 
2530 
2531           IF p_unitass_item_rec.midterm_mandatory_type_code = FND_API.G_MISS_CHAR THEN
2532 	    p_unitass_item_rec.midterm_mandatory_type_code :=NULL;
2533 	  END IF;
2534 
2535 	  IF p_unitass_item_rec.midterm_weight_qty_item   = FND_API.G_MISS_NUM THEN
2536 	    p_unitass_item_rec.midterm_weight_qty_item   :=NULL;
2537 	  END IF;
2538 
2539   	  IF p_unitass_item_rec.final_mandatory_type_code = FND_API.G_MISS_CHAR THEN
2540 	    p_unitass_item_rec.final_mandatory_type_code :=NULL;
2541 	  END IF;
2542 
2543 	  IF p_unitass_item_rec.final_weight_qty_item = FND_API.G_MISS_NUM THEN
2544 	    p_unitass_item_rec.final_weight_qty_item :=NULL;
2545 	  END IF;
2546 
2547 	  IF p_unitass_item_rec.release_date   = FND_API.G_MISS_DATE THEN
2548 	    p_unitass_item_rec.release_date   :=NULL;
2549 	  END IF;
2550 
2551 	  IF p_unitass_item_rec.logical_delete_dt IS NOT NULL THEN
2552 	    p_unitass_item_rec.logical_delete_dt :=NULL;
2553 	  END IF;
2554 
2555 
2556 	  IF p_unitass_item_rec.description IS NOT NULL THEN
2557             OPEN cur_ass_desc(p_unitass_item_rec.assessment_id);
2558 	    FETCH cur_ass_desc INTO l_cur_ass_desc;
2559 	    CLOSE cur_ass_desc;
2560 	    IF l_cur_ass_desc.description = p_unitass_item_rec.description THEN
2561               p_unitass_item_rec.description:=NULL;
2562 	    END IF;
2563 	  ELSIF p_unitass_item_rec.description = FND_API.G_MISS_CHAR THEN
2564 	    p_unitass_item_rec.description :=NULL;
2565 	  END IF;
2566 
2567 	  IF p_unitass_item_rec.exam_cal_alternate_code IS NULL THEN
2568             l_c_exam_cal_type := NULL;
2569             l_n_exam_seq_num  := NULL;
2570           ELSE
2571             OPEN cal_type(p_unitass_item_rec.exam_cal_alternate_code);
2572 	    FETCH cal_type INTO l_c_exam_cal_type,l_n_exam_seq_num;
2573 	    IF cal_type%NOTFOUND THEN
2574 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'EXAM_CAL_ALTERNATE_CODE', 'LEGACY_TOKENS', FALSE);
2575 	      p_unitass_item_rec.status := 'E';
2576             ELSE
2577 	      --validate the exam calendar is a valid one, if provided
2578 	      OPEN cur_exam_cal(l_c_exam_cal_type,l_n_exam_seq_num);
2579 	      FETCH cur_exam_cal INTO l_c_var;
2580 	      IF cur_exam_cal%NOTFOUND THEN
2581 		igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'EXAM_CAL_ALTERNATE_CODE', 'LEGACY_TOKENS', FALSE);
2582 		p_unitass_item_rec.status := 'E';
2583 	      END IF;
2584 	      CLOSE cur_exam_cal;
2585 	    END IF;
2586 	    CLOSE cal_type;
2587 	  END IF;
2588 
2589 	END IF;
2590 
2591 	IF p_insert_update = 'U' THEN
2592 	  OPEN c_unitass_item(l_n_uoo_id,p_unitass_item_rec.assessment_id,p_unitass_item_rec.sequence_number);
2593 	  FETCH c_unitass_item INTO c_unitass_item_rec;
2594 	  CLOSE c_unitass_item;
2595 
2596 	  IF p_unitass_item_rec.due_dt  IS NULL  THEN
2597 	    p_unitass_item_rec.due_dt  := c_unitass_item_rec.due_dt ;
2598 	  ELSIF  p_unitass_item_rec.due_dt  = FND_API.G_MISS_DATE THEN
2599 	    p_unitass_item_rec.due_dt  :=NULL;
2600 	  END IF;
2601 
2602 	  IF p_unitass_item_rec.dflt_item_ind IS NULL  THEN
2603 	    p_unitass_item_rec.dflt_item_ind :=c_unitass_item_rec.dflt_item_ind;
2604 	  ELSIF  p_unitass_item_rec.dflt_item_ind = FND_API.G_MISS_CHAR THEN
2605 	    p_unitass_item_rec.dflt_item_ind :='N';
2606 	  END IF;
2607 
2608 	  IF p_unitass_item_rec.reference IS NULL  THEN
2609 	    p_unitass_item_rec.reference := c_unitass_item_rec.reference;
2610 	  ELSIF  p_unitass_item_rec.reference = FND_API.G_MISS_CHAR THEN
2611 	    p_unitass_item_rec.reference :=NULL;
2612 	  END IF;
2613 
2614 	  IF p_unitass_item_rec.logical_delete_dt IS NULL  THEN
2615 	    p_unitass_item_rec.logical_delete_dt := c_unitass_item_rec.logical_delete_dt;
2616 	  ELSIF  p_unitass_item_rec.logical_delete_dt = FND_API.G_MISS_DATE THEN
2617 	    p_unitass_item_rec.logical_delete_dt :=NULL;
2618 	  END IF;
2619 
2620 
2621           IF p_unitass_item_rec.description IS NULL THEN
2622             p_unitass_item_rec.description := c_unitass_item_rec.description;
2623 	  ELSIF p_unitass_item_rec.description = FND_API.G_MISS_CHAR THEN
2624 	    p_unitass_item_rec.description :=NULL;
2625           ELSIF p_unitass_item_rec.description IS NOT NULL THEN
2626             OPEN cur_ass_desc(p_unitass_item_rec.assessment_id);
2627 	    FETCH cur_ass_desc INTO l_cur_ass_desc;
2628 	    CLOSE cur_ass_desc;
2629 	    IF l_cur_ass_desc.description = p_unitass_item_rec.description THEN
2630               p_unitass_item_rec.description:=NULL;
2631 	    END IF;
2632 	  END IF;
2633 
2634 
2635 
2636 
2637 	  IF p_unitass_item_rec.exam_cal_alternate_code IS NULL THEN
2638             l_c_exam_cal_type := c_unitass_item_rec.exam_cal_type;
2639             l_n_exam_seq_num  := c_unitass_item_rec.exam_ci_sequence_number;
2640           ELSIF p_unitass_item_rec.exam_cal_alternate_code = FND_API.G_MISS_CHAR THEN
2641             l_c_exam_cal_type := NULL;
2642             l_n_exam_seq_num  := NULL;
2643 	  ELSE
2644             OPEN cal_type(p_unitass_item_rec.exam_cal_alternate_code);
2645 	    FETCH cal_type INTO l_c_exam_cal_type,l_n_exam_seq_num;
2646 	    IF cal_type%NOTFOUND THEN
2647 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'EXAM_CAL_ALTERNATE_CODE', 'LEGACY_TOKENS', FALSE);
2648 	      p_unitass_item_rec.status := 'E';
2649             ELSE
2650 	      --validate the exam calendar is a valid one, if provided
2651 	      OPEN cur_exam_cal(l_c_exam_cal_type,l_n_exam_seq_num);
2652 	      FETCH cur_exam_cal INTO l_c_var;
2653 	      IF cur_exam_cal%NOTFOUND THEN
2654 		igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'EXAM_CAL_ALTERNATE_CODE', 'LEGACY_TOKENS', FALSE);
2655 		p_unitass_item_rec.status := 'E';
2656 	      END IF;
2657 	      CLOSE cur_exam_cal;
2658 	    END IF;
2659 	    CLOSE cal_type;
2660 
2661 	  END IF;
2662 
2663 	  IF p_unitass_item_rec.release_date   IS NULL THEN
2664 	    p_unitass_item_rec.release_date   := c_unitass_item_rec.release_date  ;
2665 	  ELSIF p_unitass_item_rec.release_date   = FND_API.G_MISS_DATE THEN
2666 	    p_unitass_item_rec.release_date   :=NULL;
2667 	  END IF;
2668 
2669 	  IF p_unitass_item_rec.midterm_mandatory_type_code IS NULL THEN
2670 	    p_unitass_item_rec.midterm_mandatory_type_code := c_unitass_item_rec.midterm_mandatory_type_code;
2671 	  ELSIF p_unitass_item_rec.midterm_mandatory_type_code = FND_API.G_MISS_CHAR THEN
2672 	    p_unitass_item_rec.midterm_mandatory_type_code :=NULL;
2673 	  END IF;
2674 
2675 	  IF p_unitass_item_rec.midterm_weight_qty_item   IS NULL THEN
2676 	    p_unitass_item_rec.midterm_weight_qty_item   := c_unitass_item_rec.midterm_weight_qty;
2677 	  ELSIF p_unitass_item_rec.midterm_weight_qty_item   = FND_API.G_MISS_NUM THEN
2678 	    p_unitass_item_rec.midterm_weight_qty_item   :=NULL;
2679 	  END IF;
2680 
2681   	  IF p_unitass_item_rec.final_mandatory_type_code IS NULL THEN
2682 	    p_unitass_item_rec.final_mandatory_type_code := c_unitass_item_rec.final_mandatory_type_code;
2683 	  ELSIF p_unitass_item_rec.final_mandatory_type_code = FND_API.G_MISS_CHAR THEN
2684 	    p_unitass_item_rec.final_mandatory_type_code :=NULL;
2685 	  END IF;
2686 
2687 	  IF p_unitass_item_rec.final_weight_qty_item IS NULL THEN
2688 	    p_unitass_item_rec.final_weight_qty_item := c_unitass_item_rec.final_weight_qty;
2689 	  ELSIF p_unitass_item_rec.final_weight_qty_item = FND_API.G_MISS_NUM THEN
2690 	    p_unitass_item_rec.final_weight_qty_item :=NULL;
2691 	  END IF;
2692 
2693 
2694 	END IF;
2695 
2696       END Assign_default;
2697 
2698       -- Validate Database Constraints
2699       PROCEDURE validate_db_cons_item ( p_unitass_item_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ass_item_grp_rec_type,p_insert_update VARCHAR2 ) AS
2700 	CURSOR c_assessment_id(cp_assessment_id  igs_as_assessmnt_itm.ass_id%TYPE)IS
2701 	SELECT 'X'
2702 	FROM igs_as_assessmnt_itm
2703 	WHERE ass_id =cp_assessment_id;
2704 
2705 	c_assessment_id_rec c_assessment_id%ROWTYPE;
2706       BEGIN
2707         IF (p_insert_update = 'I') THEN
2708 	  -- Unique Key Validation
2709 	  IF igs_ps_unitass_item_pkg.get_uk_for_validation (x_ass_id =>p_unitass_item_rec.assessment_id,
2710 	 						    x_sequence_number=>p_unitass_item_rec.sequence_number,
2711 						            x_uoo_id =>l_n_uoo_id) THEN
2712 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_ASSMNT', 'LEGACY_TOKENS', FALSE);
2713 	    p_unitass_item_rec.status := 'W';
2714 	    RETURN;
2715 	  END IF;
2716 	END IF;
2717 
2718 	/* Validate Check Constraints */
2719 	IF p_unitass_item_rec.midterm_weight_qty_item IS NOT NULL THEN
2720 	  IF p_unitass_item_rec.midterm_weight_qty_item <0.001 OR p_unitass_item_rec.midterm_weight_qty_item >999.999 THEN
2721 	    p_unitass_item_rec.status := 'E';
2722 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'MIDTERM_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
2723 	  END IF;
2724 
2725 	  --Format mask validation
2726 	  IF p_unitass_item_rec.status <> 'E' THEN
2727 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_unitass_item_rec.midterm_weight_qty_item,3,3) THEN
2728 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'MIDTERM_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
2729 		p_unitass_item_rec.status :='E';
2730 	    END IF;
2731 	  END IF;
2732 
2733 	END IF;
2734 
2735 	IF p_unitass_item_rec.final_weight_qty_item IS NOT NULL THEN
2736 	  IF p_unitass_item_rec.final_weight_qty_item <0.001 OR p_unitass_item_rec.final_weight_qty_item >999.999 THEN
2737 	    p_unitass_item_rec.status := 'E';
2738 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'FINAL_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
2739 	  END IF;
2740 
2741 	  --Format mask validation
2742 	  IF p_unitass_item_rec.status <> 'E' THEN
2743 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_unitass_item_rec.final_weight_qty_item,3,3) THEN
2744 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_990D00', 'FINAL_WEIGHT_QTY_ITEM', 'LEGACY_TOKENS', FALSE);
2745 		p_unitass_item_rec.status :='E';
2746 	    END IF;
2747 	  END IF;
2748 
2749 	END IF;
2750 
2751 
2752 
2753 	/* Validate FK Constraints */
2754 	IF NOT igs_as_grd_schema_pkg.get_pk_for_validation ( p_unitass_item_rec.grading_schema_cd,p_unitass_item_rec.gs_version_number ) THEN
2755 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'GRADING_SCHEMA', 'LEGACY_TOKENS', FALSE);
2756 	   p_unitass_item_rec.status := 'E';
2757 	END IF;
2758 
2759 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
2760 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
2761 	   p_unitass_item_rec.status := 'E';
2762 	END IF;
2763 
2764 	IF NOT igs_as_us_ai_group_pkg.get_pk_for_validation ( l_n_us_ass_item_group_id ) THEN
2765 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_ASSMNT', 'LEGACY_TOKENS', FALSE);
2766 	  p_unitass_item_rec.status := 'E';
2767 	END IF;
2768 
2769 	OPEN c_assessment_id(p_unitass_item_rec.assessment_id);
2770 	FETCH c_assessment_id INTO c_assessment_id_rec;
2771 	IF c_assessment_id%NOTFOUND THEN
2772 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ASSESSMENT_ID', 'LEGACY_TOKENS', FALSE);
2773 	  p_unitass_item_rec.status := 'E';
2774 	END IF;
2775 	CLOSE c_assessment_id;
2776 
2777 
2778       END validate_db_cons_item;
2779 
2780     -- Main section for assesment item group.
2781     BEGIN
2782       validate_parameters_item(p_unitass_item_rec);
2783 
2784       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2785 	fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.status_after_validate_parameters_item',
2786 	'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2787 	||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2788 	p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||' '||'Status:'||p_unitass_item_rec.status);
2789       END IF;
2790 
2791       IF p_unitass_item_rec.status = 'S' THEN
2792 	validate_derivations_item(p_unitass_item_rec);
2793 
2794         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2795 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.status_after_validate_derivations_item',
2796 	  'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2797 	  ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2798 	  p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2799         END IF;
2800 
2801       END IF;
2802 
2803       l_insert_update:='I';
2804       --Find out whether it is insert/update of record
2805       IF p_unitass_item_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
2806         l_insert_update:= check_insert_update_item(p_unitass_item_rec);
2807 
2808         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2809 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.status_after_check_insert_update_item',
2810 	  'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2811 	  ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2812 	  p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2813         END IF;
2814 
2815       END IF;
2816 
2817       IF p_unitass_item_rec.status = 'S' AND p_calling_context = 'S' THEN
2818         IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
2819 	  fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
2820 	  fnd_msg_pub.add;
2821 	  p_unitass_item_rec.status := 'A';
2822         END IF;
2823 
2824         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2825 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.status_after_check_import_allowed',
2826 	  'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2827 	  ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2828 	  p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2829         END IF;
2830 
2831       END IF;
2832 
2833        IF p_unitass_item_rec.status = 'S' THEN
2834 	  Assign_default(p_unitass_item_rec,l_insert_update);
2835 
2836           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2837 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.Status_after_Assign_default',
2838 	    'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2839 	    ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2840 	    p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2841           END IF;
2842 
2843        END IF;
2844 
2845       IF p_unitass_item_rec.status = 'S' THEN
2846         validate_db_cons_item(p_unitass_item_rec,l_insert_update);
2847 
2848         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2849 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.Status_after_validate_db_cons_item',
2850 	  'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2851 	  ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2852 	  p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2853         END IF;
2854 
2855       END IF;
2856 
2857       IF p_unitass_item_rec.status = 'S' THEN
2858         igs_ps_validate_generic_pkg.validate_unitass_item (p_unitass_item_rec, l_c_cal_type ,l_n_seq_num ,l_n_uoo_id,l_insert_update);
2859 
2860         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2861 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.Status_after_Business_validation',
2862 	  'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2863 	  ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2864 	  p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'Status:'||p_unitass_item_rec.status);
2865         END IF;
2866 
2867       END IF;
2868 
2869       IF p_unitass_item_rec.status = 'S' THEN
2870         IF l_insert_update = 'I' THEN
2871 	  /* Insert Record */
2872 	  INSERT INTO igs_ps_unitass_item
2873 	  (unit_section_ass_item_id,
2874 	   uoo_id,
2875 	   ass_id,
2876 	   sequence_number,
2877 	   ci_start_dt,
2878 	   ci_end_dt,
2879 	   due_dt,
2880 	   reference,
2881 	   dflt_item_ind,
2882 	   logical_delete_dt,
2883 	   action_dt,
2884 	   exam_cal_type,
2885 	   exam_ci_sequence_number,
2886 	   created_by,
2887 	   creation_date,
2888 	   last_updated_by,
2889 	   last_update_date,
2890 	   last_update_login,
2891 	   grading_schema_cd,
2892 	   gs_version_number,
2893 	   release_date,
2894 	   description,
2895 	   us_ass_item_group_id,
2896 	   midterm_mandatory_type_code,
2897 	   midterm_weight_qty,
2898 	   final_mandatory_type_code,
2899 	   final_weight_qty
2900 	  )
2901 	  VALUES
2902 	  (igs_ps_unitass_item_s.NEXTVAL,
2903 	  l_n_uoo_id,
2904 	  p_unitass_item_rec.assessment_id,
2905 	  igs_ps_unitass_item_seq_num_s.NEXTVAL,
2906 	  l_d_start_dt,
2907 	  l_d_end_dt,
2908 	  p_unitass_item_rec.due_dt,
2909 	  p_unitass_item_rec.reference,
2910 	  p_unitass_item_rec.dflt_item_ind,
2911 	  p_unitass_item_rec.logical_delete_dt,
2912 	  SYSDATE,
2913           l_c_exam_cal_type,
2914           l_n_exam_seq_num,
2915 	  g_n_user_id,
2916 	  SYSDATE,
2917 	  g_n_user_id,
2918 	  SYSDATE,
2919 	  g_n_login_id,
2920 	  p_unitass_item_rec.grading_schema_cd,
2921 	  p_unitass_item_rec.gs_version_number,
2922 	  p_unitass_item_rec.release_date,
2923           p_unitass_item_rec.description,
2924 	  l_n_us_ass_item_group_id,
2925 	  p_unitass_item_rec.midterm_mandatory_type_code,
2926 	  p_unitass_item_rec.midterm_weight_qty_item,
2927 	  p_unitass_item_rec.final_mandatory_type_code,
2928 	  p_unitass_item_rec.final_weight_qty_item
2929 	  );
2930 
2931           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2932 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.Status_record_inserted',
2933 	    'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2934 	    ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2935 	    p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id);
2936           END IF;
2937 
2938         ELSE --update
2939 	  UPDATE igs_ps_unitass_item
2940 	  SET  due_dt = p_unitass_item_rec.due_dt,
2941 	  reference = p_unitass_item_rec.reference,
2942 	  dflt_item_ind = p_unitass_item_rec.dflt_item_ind,
2943 	  logical_delete_dt = p_unitass_item_rec.logical_delete_dt,
2944 	  action_dt = SYSDATE,
2945 	  exam_cal_type = l_c_exam_cal_type,
2946 	  exam_ci_sequence_number = l_n_exam_seq_num,
2947 	  grading_schema_cd = p_unitass_item_rec.grading_schema_cd,
2948 	  gs_version_number = p_unitass_item_rec.gs_version_number,
2949 	  release_date = p_unitass_item_rec.release_date,
2950 	  description = p_unitass_item_rec.description,
2951 	  midterm_mandatory_type_code = p_unitass_item_rec.midterm_mandatory_type_code,
2952 	  midterm_weight_qty = p_unitass_item_rec.midterm_weight_qty_item,
2953 	  final_mandatory_type_code = p_unitass_item_rec.final_mandatory_type_code,
2954 	  final_weight_qty = p_unitass_item_rec.final_weight_qty_item,
2955 	  last_updated_by = g_n_user_id,
2956 	  last_update_date = SYSDATE,
2957 	  last_update_login = g_n_login_id
2958 	  WHERE uoo_id = l_n_uoo_id
2959 	  AND ass_id = p_unitass_item_rec.assessment_id
2960 	  AND sequence_number=p_unitass_item_rec.sequence_number;
2961 
2962           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2963 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.Status_record_updated',
2964 	    'Unit code:'||p_unitass_item_rec.unit_cd||'  '||'Version number:'||p_unitass_item_rec.version_number||'  '||'teach_cal_alternate_code:'
2965 	    ||p_unitass_item_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_unitass_item_rec.location_cd||'  '||'Unit Class:'||
2966 	    p_unitass_item_rec.unit_class||'  '||'Assesment_id:'||p_unitass_item_rec.assessment_id||'  '||'sequence_number:'||p_unitass_item_rec.sequence_number);
2967           END IF;
2968 
2969         END IF;
2970       END IF;
2971 
2972     END create_item;
2973 
2974 
2975   /* Main Unit Section Assessment groups/item  Sub Process */
2976   BEGIN
2977 
2978     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2979       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.start_logging_for',
2980                       'Unit Section Assessment groups/item ');
2981     END IF;
2982 
2983     p_c_rec_status := 'S';
2984     FOR I in 1..p_usec_ass_item_grp_tbl.LAST LOOP
2985       l_n_uoo_id:= NULL;
2986       IF p_usec_ass_item_grp_tbl.EXISTS(I) THEN
2987         p_usec_ass_item_grp_tbl(I).status := 'S';
2988         p_usec_ass_item_grp_tbl(I).msg_from := fnd_msg_pub.count_msg;
2989         trim_values(p_usec_ass_item_grp_tbl(I) );
2990 
2991         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2992           fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.call',
2993 	  'Unit code:'||p_usec_ass_item_grp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ass_item_grp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
2994 	  ||p_usec_ass_item_grp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ass_item_grp_tbl(I).location_cd||'  '||'Unit Class:'||
2995 	  p_usec_ass_item_grp_tbl(I).unit_class);
2996         END IF;
2997 
2998 	-- unit section assesment item group
2999 	create_group(p_usec_ass_item_grp_tbl(I));
3000 
3001 	 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3002 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_group.status_after_record_creation',
3003 	      'Unit code:'||p_usec_ass_item_grp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ass_item_grp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3004 	      ||p_usec_ass_item_grp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ass_item_grp_tbl(I).location_cd||'  '||'Unit Class:'||
3005 	      p_usec_ass_item_grp_tbl(I).unit_class||'  '||'Status:'||p_usec_ass_item_grp_tbl(I).status);
3006 	  END IF;
3007 
3008         -- Create section assesment items
3009 	IF  p_usec_ass_item_grp_tbl(I).status = 'S' THEN
3010           IF p_usec_ass_item_grp_tbl(I).assessment_id IS NOT NULL THEN
3011 
3012             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3013 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.call',
3014 	      'Unit code:'||p_usec_ass_item_grp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ass_item_grp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3015 	      ||p_usec_ass_item_grp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ass_item_grp_tbl(I).location_cd||'  '||'Unit Class:'||
3016 	      p_usec_ass_item_grp_tbl(I).unit_class||'  '||'Assesment_id:'||p_usec_ass_item_grp_tbl(I).assessment_id);
3017 	    END IF;
3018 
3019 	    create_item(p_usec_ass_item_grp_tbl(I));
3020 
3021 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3022 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.create_item.status_after_record_creation',
3023 	      'Unit code:'||p_usec_ass_item_grp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ass_item_grp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3024 	      ||p_usec_ass_item_grp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ass_item_grp_tbl(I).location_cd||'  '||'Unit Class:'||
3025 	      p_usec_ass_item_grp_tbl(I).unit_class||'  '||'Assesment_id:'||p_usec_ass_item_grp_tbl(I).assessment_id||'  '||
3026 	      'Status:'||p_usec_ass_item_grp_tbl(I).status);
3027 	    END IF;
3028 
3029 	  END IF;
3030 	END IF;
3031 
3032         IF  p_usec_ass_item_grp_tbl(I).status = 'S' THEN
3033            p_usec_ass_item_grp_tbl(I).msg_from := NULL;
3034            p_usec_ass_item_grp_tbl(I).msg_to := NULL;
3035         ELSIF  p_usec_ass_item_grp_tbl(I).status = 'A' THEN
3036 	   p_usec_ass_item_grp_tbl(I).msg_from  := p_usec_ass_item_grp_tbl(I).msg_from + 1;
3037 	   p_usec_ass_item_grp_tbl(I).msg_to := fnd_msg_pub.count_msg;
3038 	ELSE
3039            p_c_rec_status :=  p_usec_ass_item_grp_tbl(I).status;
3040            p_usec_ass_item_grp_tbl(I).msg_from :=  p_usec_ass_item_grp_tbl(I).msg_from + 1;
3041            p_usec_ass_item_grp_tbl(I).msg_to := fnd_msg_pub.count_msg;
3042           IF p_c_rec_status = 'E' THEN
3043             RETURN;
3044           END IF;
3045         END IF;
3046       END IF;--exists
3047     END LOOP;
3048 
3049     /* Post Insert/Update Checks */
3050     IF NOT igs_ps_validate_generic_pkg.post_as_us_ai(p_usec_ass_item_grp_tbl,l_tbl_uoo) THEN
3051       p_c_rec_status := 'E';
3052     END IF;
3053 
3054     l_tbl_uoo.DELETE;
3055 
3056     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3057       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ass_item_grp.after_import_status',p_c_rec_status);
3058     END IF;
3059 
3060 
3061   END create_usec_ass_item_grp;
3062   /* END OF UNIT SECTION ASSESMENT ITEM GROUPS */
3063 
3064 --start of Meet with class group
3065 PROCEDURE create_usec_meet_with(
3066           p_usec_meet_with_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_tbl_type,
3067           p_c_rec_status OUT NOCOPY VARCHAR2,
3068 	  p_calling_context  IN VARCHAR2
3069   )   AS
3070   /***********************************************************************************************
3071     Created By     :  SOMMUKHE
3072     Date Created By:  17-Jun-2005
3073     Purpose        :  This procedure is a sub process to import records of meet with group.
3074 
3075     Known limitations,enhancements,remarks:
3076     Change History (in reverse chronological order)
3077     Who         When            What
3078   ********************************************************************************************** */
3079 
3080     l_n_class_meet_group_id  igs_ps_uso_cm_grp.class_meet_group_id%type;
3081     l_n_uoo_id               igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
3082     l_c_cal_type             igs_ps_unit_ofr_opt_all.cal_type%TYPE;
3083     l_n_seq_num              igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
3084     l_insert_update          VARCHAR2(1);
3085 
3086     FUNCTION ifexists(p_n_class_meet_group_id igs_ps_uso_cm_grp.class_meet_group_id%type,
3087                    p_old_max_enr_group igs_ps_uso_cm_grp.max_enr_group%TYPE
3088 		   ) RETURN BOOLEAN AS
3089     BEGIN
3090       FOR I in 1..class_meet_tab.count LOOP
3091         IF p_n_class_meet_group_id = class_meet_tab(i).class_meet_group_id THEN
3092            class_meet_tab(i).old_max_enr_group:= p_old_max_enr_group;
3093 	   RETURN TRUE;
3094          END IF;
3095       END LOOP;
3096       RETURN FALSE;
3097     END ifexists;
3098 
3099 
3100     /* Private Procedures for create_usec_grd_sch */
3101     PROCEDURE trim_values ( p_usec_meet_with_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) AS
3102     BEGIN
3103       p_usec_meet_with_rec.unit_cd := trim(p_usec_meet_with_rec.unit_cd);
3104       p_usec_meet_with_rec.version_number := trim(p_usec_meet_with_rec.version_number);
3105       p_usec_meet_with_rec.teach_cal_alternate_code := trim(p_usec_meet_with_rec.teach_cal_alternate_code);
3106       p_usec_meet_with_rec.location_cd := trim(p_usec_meet_with_rec.location_cd);
3107       p_usec_meet_with_rec.unit_class := trim(p_usec_meet_with_rec.unit_class);
3108       p_usec_meet_with_rec.class_meet_group_name := trim(p_usec_meet_with_rec.class_meet_group_name);
3109       p_usec_meet_with_rec.max_enr_group := trim(p_usec_meet_with_rec.max_enr_group);
3110       p_usec_meet_with_rec.max_ovr_group := trim(p_usec_meet_with_rec.max_ovr_group);
3111       p_usec_meet_with_rec.host := trim(p_usec_meet_with_rec.host);
3112 
3113     END trim_values;
3114 
3115 
3116     PROCEDURE create_uso_cm_grp( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) AS
3117 
3118       l_n_tbl_cnt NUMBER;
3119 
3120       PROCEDURE validate_parameters ( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) AS
3121       BEGIN
3122 
3123 	/* Check for Mandatory Parameters */
3124 	IF p_uso_cm_grp_rec.teach_cal_alternate_code IS NULL OR p_uso_cm_grp_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
3125 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3126 	  p_uso_cm_grp_rec.status := 'E';
3127 	END IF;
3128 	IF p_uso_cm_grp_rec.class_meet_group_name IS NULL  OR p_uso_cm_grp_rec.class_meet_group_name = FND_API.G_MISS_CHAR  THEN
3129 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'GROUP_NAME', 'LEGACY_TOKENS', FALSE);
3130 	  p_uso_cm_grp_rec.status := 'E';
3131 	END IF;
3132 
3133       END validate_parameters;
3134 
3135       -- Check for Update
3136       FUNCTION check_insert_update ( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) RETURN VARCHAR2 IS
3137 	CURSOR c_uso_cm_grp(cp_cm_grp_name VARCHAR2) IS
3138 	SELECT 'X'
3139 	FROM igs_ps_uso_cm_grp
3140 	WHERE class_meet_group_name =cp_cm_grp_name
3141 	AND Cal_type=l_c_cal_type
3142 	AND ci_sequence_number=l_n_seq_num;
3143 
3144 	 c_uso_cm_grp_rec c_uso_cm_grp%ROWTYPE;
3145 
3146       BEGIN
3147 
3148 	  OPEN c_uso_cm_grp( p_uso_cm_grp_rec.class_meet_group_name);
3149 	  FETCH c_uso_cm_grp INTO c_uso_cm_grp_rec;
3150 	  IF c_uso_cm_grp%NOTFOUND THEN
3151 	    CLOSE c_uso_cm_grp;
3152 	   RETURN 'I';
3153 	  ELSE
3154 	   CLOSE c_uso_cm_grp;
3155 	   RETURN 'U';
3156 	  END IF;
3157 
3158       END check_insert_update;
3159 
3160       -- Carry out derivations and validate them
3161       PROCEDURE validate_derivations ( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type) AS
3162 
3163 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
3164 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
3165 	l_c_message  VARCHAR2(30);
3166       BEGIN
3167 
3168 
3169 	-- Derive Calander Type and Sequence Number
3170 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_uso_cm_grp_rec.teach_cal_alternate_code,
3171 					       p_cal_type           => l_c_cal_type,
3172 					       p_ci_sequence_number => l_n_seq_num,
3173 					       p_start_dt           => l_d_start_dt,
3174 					       p_end_dt             => l_d_end_dt,
3175 					       p_return_status      => l_c_message );
3176 	IF ( l_c_message <> 'SINGLE' ) THEN
3177 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3178 	  p_uso_cm_grp_rec.status := 'E';
3179 	END IF;
3180 
3181 
3182       END validate_derivations;
3183 
3184       PROCEDURE Assign_default( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type,p_insert_update VARCHAR2 ) AS
3185 
3186         CURSOR c_uso_cm_grp(cp_cm_grp_name VARCHAR2) IS
3187 	SELECT *
3188 	FROM   igs_ps_uso_cm_grp
3189 	WHERE  class_meet_group_name =cp_cm_grp_name
3190 	AND    cal_type=l_c_cal_type
3191 	AND    ci_sequence_number=l_n_seq_num;
3192 
3193 	 c_uso_cm_grp_rec c_uso_cm_grp%ROWTYPE;
3194 
3195       BEGIN
3196 
3197 	IF p_insert_update = 'U' THEN
3198 	   OPEN c_uso_cm_grp(p_uso_cm_grp_rec.class_meet_group_name);
3199 	   FETCH c_uso_cm_grp INTO c_uso_cm_grp_rec;
3200 	   CLOSE c_uso_cm_grp;
3201 	   l_n_class_meet_group_id := c_uso_cm_grp_rec.class_meet_group_id;
3202 
3203 	   IF p_uso_cm_grp_rec.max_enr_group IS NULL  THEN
3204 	      p_uso_cm_grp_rec.max_enr_group := c_uso_cm_grp_rec.max_enr_group;
3205 	   ELSIF  p_uso_cm_grp_rec.max_enr_group = FND_API.G_MISS_NUM THEN
3206 	      p_uso_cm_grp_rec.max_enr_group :=NULL;
3207 	   END IF;
3208 
3209 	   IF p_uso_cm_grp_rec.max_ovr_group IS NULL THEN
3210 	      p_uso_cm_grp_rec.max_ovr_group := c_uso_cm_grp_rec.max_ovr_group;
3211 	   ELSIF p_uso_cm_grp_rec.max_ovr_group = FND_API.G_MISS_NUM THEN
3212 	      p_uso_cm_grp_rec.max_ovr_group :=NULL;
3213 	   END IF;
3214 
3215 	 END IF;
3216 
3217       END Assign_default;
3218 
3219       -- Validate Database Constraints
3220       PROCEDURE validate_db_cons ( p_uso_cm_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type,p_insert_update VARCHAR2 ) AS
3221       BEGIN
3222 	IF (p_insert_update = 'I') THEN
3223 	  /* Unique Key Validation */
3224 	  IF igs_ps_uso_cm_grp_pkg.get_uk_for_validation (x_class_meet_group_name=>p_uso_cm_grp_rec.class_meet_group_name,
3225 							  x_cal_type=>l_c_cal_type,
3226 							  x_ci_sequence_number=>l_n_seq_num) THEN
3227 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_MEET_WITH_CLASS_GROUP', 'LEGACY_TOKENS', FALSE);
3228 	    p_uso_cm_grp_rec.status := 'W';
3229 	    RETURN;
3230 	  END IF;
3231 	END IF;
3232 
3233 
3234         --Check constraint
3235 	IF p_uso_cm_grp_rec.max_enr_group IS NOT NULL THEN
3236 	  IF p_uso_cm_grp_rec.max_enr_group <1 OR p_uso_cm_grp_rec.max_enr_group >999999 THEN
3237 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_ENR_GROUP', 'LEGACY_TOKENS', FALSE);
3238 	    p_uso_cm_grp_rec.status := 'E';
3239 	  END IF;
3240 
3241 	  --Format mask validation
3242 	  IF p_uso_cm_grp_rec.status <> 'E' THEN
3243 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_uso_cm_grp_rec.max_enr_group,6,0) THEN
3244 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_ENR_GROUP', 'LEGACY_TOKENS', FALSE);
3245 		p_uso_cm_grp_rec.status :='E';
3246 	    END IF;
3247 	  END IF;
3248 
3249 	END IF;
3250 
3251 	IF p_uso_cm_grp_rec.max_ovr_group IS NOT NULL THEN
3252 	  IF p_uso_cm_grp_rec.max_ovr_group <1 OR p_uso_cm_grp_rec.max_ovr_group >999999 THEN
3253 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_OVR_GROUP', 'LEGACY_TOKENS', FALSE);
3254 	    p_uso_cm_grp_rec.status := 'E';
3255 	  END IF;
3256 
3257 	  --Format mask validation
3258 	  IF p_uso_cm_grp_rec.status <> 'E' THEN
3259 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_uso_cm_grp_rec.max_ovr_group,6,0) THEN
3260  	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_OVR_GROUP', 'LEGACY_TOKENS', FALSE);
3261 		p_uso_cm_grp_rec.status :='E';
3262 	    END IF;
3263 	  END IF;
3264 
3265 	END IF;
3266 
3267 	/* Validate FK Constraints*/
3268 	IF NOT igs_ca_inst_pkg.get_pk_for_validation (x_cal_type =>l_c_cal_type,
3269 						      x_sequence_number =>l_n_seq_num) THEN
3270 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3271 	  p_uso_cm_grp_rec.status := 'E';
3272 	END IF;
3273 
3274       END validate_db_cons;
3275 
3276     -- Main section for meet with group header.
3277     BEGIN
3278 
3279       IF p_uso_cm_grp_rec.status = 'S' THEN
3280          validate_parameters(p_uso_cm_grp_rec);
3281 
3282          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3283 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_validate_parameters',
3284 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3285 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3286 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3287 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3288          END IF;
3289 
3290       END IF;
3291 
3292 
3293       IF p_uso_cm_grp_rec.status = 'S' THEN
3294          validate_derivations(p_uso_cm_grp_rec);
3295 
3296          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3297 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_validate_derivations',
3298 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3299 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3300 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3301 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3302          END IF;
3303 
3304       END IF;
3305 
3306       --Find out whether it is insert/update of record
3307       l_insert_update:='I';
3308       IF p_uso_cm_grp_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
3309           l_insert_update:= check_insert_update(p_uso_cm_grp_rec);
3310 
3311          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3312 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_check_insert_update',
3313 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3314 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3315 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3316 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3317          END IF;
3318 
3319       END IF;
3320 
3321       -- Find out whether record can go for import in context of cancelled/aborted
3322       IF p_uso_cm_grp_rec.status = 'S' AND p_calling_context = 'S' THEN
3323         IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
3324 	   fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
3325 	   fnd_msg_pub.add;
3326 	   p_uso_cm_grp_rec.status := 'A';
3327 	END IF;
3328 
3329         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3330 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_check_import_allowed',
3331 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3332 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3333 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3334 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3335          END IF;
3336 
3337 
3338       END IF;
3339 
3340       IF p_uso_cm_grp_rec.status = 'S' THEN
3341 	 Assign_default(p_uso_cm_grp_rec,l_insert_update);
3342 
3343          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3344 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_Assign_default',
3345 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3346 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3347 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3348 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3349          END IF;
3350 
3351       END IF;
3352 
3353       IF p_uso_cm_grp_rec.status = 'S' THEN
3354          validate_db_cons(p_uso_cm_grp_rec,l_insert_update);
3355 
3356          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3357 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_validate_db_cons',
3358 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3359 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3360 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3361 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3362          END IF;
3363 
3364 
3365 
3366       END IF;
3367 
3368       IF p_uso_cm_grp_rec.status = 'S' THEN
3369         igs_ps_validate_generic_pkg.validate_uso_cm_grp(p_uso_cm_grp_rec, l_c_cal_type,l_n_seq_num,l_insert_update,class_meet_rec);
3370 
3371         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3372 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_Business_validation',
3373 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3374 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3375 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name
3376 	   ||'  '||'Status:'|| p_uso_cm_grp_rec.status);
3377          END IF;
3378 
3379       END IF;
3380 
3381 
3382 
3383       IF p_uso_cm_grp_rec.status = 'S' THEN
3384 	IF l_insert_update = 'I' THEN
3385               /* Insert Record */
3386           INSERT INTO igs_ps_uso_cm_grp
3387           (class_meet_group_id,
3388            class_meet_group_name,
3389            cal_type,
3390            ci_sequence_number ,
3391            created_by,
3392            creation_date,
3393            last_updated_by,
3394            last_update_date,
3395            last_update_login,
3396 	   max_enr_group,
3397            max_ovr_group
3398           )
3399           VALUES
3400           (igs_ps_uso_cm_grp_s.NEXTVAL,
3401           p_uso_cm_grp_rec.class_meet_group_name,
3402           l_c_cal_type,
3403           l_n_seq_num,
3404 	  g_n_user_id,
3405           SYSDATE,
3406           g_n_user_id,
3407           SYSDATE,
3408           g_n_login_id,
3409 	  p_uso_cm_grp_rec.max_enr_group,
3410 	  p_uso_cm_grp_rec.max_ovr_group
3411           ) RETURNING class_meet_group_id INTO l_n_class_meet_group_id;
3412 
3413 
3414          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3415 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.Record_Inserted',
3416 	   'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3417 	   ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3418 	   p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name);
3419          END IF;
3420 
3421         ELSE --update
3422 	  UPDATE igs_ps_uso_cm_grp
3423 	  SET max_enr_group=p_uso_cm_grp_rec.max_enr_group,
3424 	  max_ovr_group=p_uso_cm_grp_rec.max_ovr_group,
3425 	  last_updated_by = g_n_user_id,
3426 	  last_update_date = SYSDATE,
3427 	  last_update_login = g_n_login_id
3428 	  WHERE class_meet_group_name =p_uso_cm_grp_rec.class_meet_group_name
3429 	  AND cal_type = l_c_cal_type
3430 	  AND ci_sequence_number =l_n_seq_num;
3431 
3432           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3433 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.Record_Updated',
3434 	    'Unit code:'||p_uso_cm_grp_rec.unit_cd||'  '||'Version number:'||p_uso_cm_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
3435 	    ||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_cm_grp_rec.location_cd||'  '||'Unit Class:'||
3436 	    p_uso_cm_grp_rec.unit_class||'  '||'Class meet group name:'||p_uso_cm_grp_rec.class_meet_group_name);
3437          END IF;
3438         END IF;
3439 
3440 
3441 	--populate the plsql table with unique cmgids
3442 	IF class_meet_tab.count = 0 THEN
3443 	  l_n_tbl_cnt :=class_meet_tab.count+1;
3444 	  class_meet_tab(l_n_tbl_cnt).class_meet_group_name:= class_meet_rec.class_meet_group_name;
3445 	  class_meet_tab(l_n_tbl_cnt).class_meet_group_id :=l_n_class_meet_group_id;
3446 	  class_meet_tab(l_n_tbl_cnt).old_max_enr_group:=class_meet_rec.old_max_enr_group;
3447 	ELSE
3448 	  IF NOT ifexists(l_n_class_meet_group_id,class_meet_rec.old_max_enr_group) THEN
3449 	    l_n_tbl_cnt :=class_meet_tab.count+1;
3450 	    class_meet_tab(l_n_tbl_cnt).class_meet_group_name:= class_meet_rec.class_meet_group_name;
3451 	    class_meet_tab(l_n_tbl_cnt).class_meet_group_id :=l_n_class_meet_group_id;
3452 	    class_meet_tab(l_n_tbl_cnt).old_max_enr_group:=class_meet_rec.old_max_enr_group;
3453 	  END IF;
3454 	END IF;
3455 
3456         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3457 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.Count_unique cmgids',
3458 	  'teach_cal_alternate_code:'||p_uso_cm_grp_rec.teach_cal_alternate_code||'  '||'Class meet group name'
3459 	  ||p_uso_cm_grp_rec.class_meet_group_name||'  '||'Count:'||class_meet_tab.count);
3460         END IF;
3461 
3462 
3463       END IF;
3464 
3465     END create_uso_cm_grp;
3466 
3467     PROCEDURE create_uso_clas_meet( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) AS
3468 
3469       PROCEDURE validate_parameters_item ( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) AS
3470       BEGIN
3471 
3472 	/* Check for Mandatory Parameters */
3473 	IF p_uso_clas_meet_rec.unit_cd IS NULL OR p_uso_clas_meet_rec.unit_cd = FND_API.G_MISS_CHAR THEN
3474 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
3475 	  p_uso_clas_meet_rec.status := 'E';
3476 	END IF;
3477 	IF p_uso_clas_meet_rec.version_number IS NULL OR p_uso_clas_meet_rec.version_number = FND_API.G_MISS_NUM  THEN
3478 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
3479 	  p_uso_clas_meet_rec.status := 'E';
3480 	END IF;
3481 	IF p_uso_clas_meet_rec.teach_cal_alternate_code IS NULL OR p_uso_clas_meet_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
3482 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3483 	  p_uso_clas_meet_rec.status := 'E';
3484 	END IF;
3485 	IF p_uso_clas_meet_rec.location_cd IS NULL  OR p_uso_clas_meet_rec.location_cd = FND_API.G_MISS_CHAR THEN
3486 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
3487 	  p_uso_clas_meet_rec.status := 'E';
3488 	END IF;
3489 	IF p_uso_clas_meet_rec.unit_class IS NULL OR p_uso_clas_meet_rec.unit_class = FND_API.G_MISS_CHAR  THEN
3490 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
3491 	  p_uso_clas_meet_rec.status := 'E';
3492 	END IF;
3493 	IF p_uso_clas_meet_rec.host IS NULL  OR p_uso_clas_meet_rec.host = FND_API.G_MISS_CHAR  THEN
3494 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'HOST', 'LEGACY_TOKENS', FALSE);
3495 	  p_uso_clas_meet_rec.status := 'E';
3496 	END IF;
3497 
3498       END validate_parameters_item;
3499 
3500       -- Check for Update
3501       FUNCTION check_insert_update_item ( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type ) RETURN VARCHAR2 IS
3502 	CURSOR c_uso_clas_meet(cp_n_uoo_id NUMBER) IS
3503 	SELECT 'X'
3504 	FROM igs_ps_uso_clas_meet
3505 	WHERE uoo_id = cp_n_uoo_id;
3506 
3507 	c_uso_clas_meet_rec c_uso_clas_meet%ROWTYPE;
3508       BEGIN
3509 	OPEN c_uso_clas_meet(l_n_uoo_id);
3510 	FETCH c_uso_clas_meet INTO c_uso_clas_meet_rec;
3511 	IF c_uso_clas_meet%NOTFOUND THEN
3512 	  CLOSE c_uso_clas_meet;
3513 	  RETURN 'I';
3514 	ELSE
3515 	  CLOSE c_uso_clas_meet;
3516 	  RETURN 'U';
3517 	END IF;
3518 
3519       END check_insert_update_item;
3520 
3521       -- Carry out derivations and validate them
3522       PROCEDURE validate_derivations_item ( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type) AS
3523 
3524 	l_c_message  VARCHAR2(30);
3525 
3526       BEGIN
3527 
3528 	-- Derive uoo_id
3529 	l_c_message := NULL;
3530 	igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_uso_clas_meet_rec.unit_cd,
3531 					      p_ver_num    => p_uso_clas_meet_rec.version_number,
3532 					      p_cal_type   => l_c_cal_type,
3533 					      p_seq_num    => l_n_seq_num,
3534 					      p_loc_cd     => p_uso_clas_meet_rec.location_cd,
3535 					      p_unit_class => p_uso_clas_meet_rec.unit_class,
3536 					      p_uoo_id     => l_n_uoo_id,
3537 					      p_message    => l_c_message );
3538 	IF ( l_c_message IS NOT NULL ) THEN
3539 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
3540 	  p_uso_clas_meet_rec.status := 'E';
3541 	END IF;
3542 
3543       END validate_derivations_item;
3544 
3545 
3546       -- Validate Database Constraints
3547       PROCEDURE validate_db_cons_cm ( p_uso_clas_meet_rec IN OUT NOCOPY igs_ps_generic_pub.usec_meet_with_rec_type,p_insert_update VARCHAR2 ) AS
3548       BEGIN
3549 	IF (p_insert_update = 'I') THEN
3550 	/* Unique Key Validation */
3551 	  IF igs_ps_uso_clas_meet_pkg.get_uk_for_validation (x_uoo_id =>l_n_uoo_id) THEN
3552 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
3553 	    p_uso_clas_meet_rec.status := 'W';
3554 	    RETURN;
3555 	  END IF;
3556 	END IF;
3557 
3558         /* Check constraint */
3559 	IF p_uso_clas_meet_rec.host NOT IN ('Y','N') THEN
3560 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'HOST', 'LEGACY_TOKENS', FALSE);
3561 	  p_uso_clas_meet_rec.status := 'E';
3562 	END IF;
3563 
3564 	  /* Validate FK Constraints */
3565 	IF NOT igs_ps_uso_cm_grp_pkg.get_pk_for_validation ( l_n_class_meet_group_id ) THEN
3566 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_MEET_WITH_CLASS_GROUP', 'LEGACY_TOKENS', FALSE);
3567 	    p_uso_clas_meet_rec.status := 'E';
3568 	END IF;
3569 
3570 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
3571 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
3572 	    p_uso_clas_meet_rec.status := 'E';
3573 	END IF;
3574 
3575       END validate_db_cons_cm;
3576 
3577     -- Main section for meet with group child.
3578     BEGIN
3579 
3580 
3581       IF p_uso_clas_meet_rec.status = 'S' THEN
3582 	validate_parameters_item(p_uso_clas_meet_rec);
3583 
3584 	 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3585 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_validate_parameters_item',
3586 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3587 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3588 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||'  '||'Status:'|| p_uso_clas_meet_rec.status);
3589          END IF;
3590       END IF;
3591 
3592 
3593       IF p_uso_clas_meet_rec.status = 'S' THEN
3594 	validate_derivations_item(p_uso_clas_meet_rec);
3595 
3596         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3597 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_validate_derivations_item',
3598 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3599 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3600 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||' '||'Status:'|| p_uso_clas_meet_rec.status);
3601         END IF;
3602 
3603       END IF;
3604 
3605       l_insert_update:='I';
3606 
3607       --Find out whether it is insert/update of record
3608       IF p_uso_clas_meet_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
3609         l_insert_update:= check_insert_update_item(p_uso_clas_meet_rec);
3610 
3611         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3612 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_check_insert_update_item',
3613 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3614 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3615 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||'  '||'Status:'|| p_uso_clas_meet_rec.status);
3616         END IF;
3617 
3618       END IF;
3619 
3620       IF p_uso_clas_meet_rec.status = 'S' AND p_calling_context = 'S' THEN
3621         IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
3622 	  fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
3623 	  fnd_msg_pub.add;
3624 	  p_uso_clas_meet_rec.status := 'A';
3625         END IF;
3626 
3627         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3628 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_check_import_allowed',
3629 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3630 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3631 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||'  '||'Status:'|| p_uso_clas_meet_rec.status);
3632         END IF;
3633 
3634       END IF;
3635 
3636       IF p_uso_clas_meet_rec.status = 'S' THEN
3637         validate_db_cons_cm(p_uso_clas_meet_rec,l_insert_update);
3638 
3639         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3640 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_validate_db_cons_cm',
3641 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3642 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3643 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||'  '||'Status:'|| p_uso_clas_meet_rec.status);
3644         END IF;
3645 
3646       END IF;
3647 
3648 
3649       IF p_uso_clas_meet_rec.status = 'S' THEN
3650         igs_ps_validate_generic_pkg.validate_uso_clas_meet(p_uso_clas_meet_rec,l_n_uoo_id,l_n_class_meet_group_id,l_c_cal_type,l_n_seq_num);
3651 
3652         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3653 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_Business_validation',
3654 	   'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3655 	   ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3656 	   p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name||'  '||'Status:'|| p_uso_clas_meet_rec.status);
3657         END IF;
3658 
3659       END IF;
3660 
3661       IF p_uso_clas_meet_rec.status = 'S' THEN
3662         IF l_insert_update = 'I' THEN
3663 	  /* Insert Record */
3664 	  INSERT INTO igs_ps_uso_clas_meet
3665 	  ( class_meet_id,
3666 	   class_meet_group_id,
3667 	   host,
3668 	   created_by,
3669 	   creation_date,
3670 	   last_updated_by,
3671 	   last_update_date,
3672 	   last_update_login,
3673 	   uoo_id
3674 	  )
3675 	  VALUES
3676 	  (igs_ps_uso_clas_meet_s.NEXTVAL,
3677 	  l_n_class_meet_group_id,
3678 	  p_uso_clas_meet_rec.host,
3679 	  g_n_user_id,
3680 	  SYSDATE,
3681 	  g_n_user_id,
3682 	  SYSDATE,
3683 	  g_n_login_id,
3684 	  l_n_uoo_id
3685 	  );
3686 
3687            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3688 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.Record_Inserted',
3689 	     'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3690 	     ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3691 	     p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name);
3692            END IF;
3693 
3694         ELSE --update
3695 	  UPDATE igs_ps_uso_clas_meet
3696 	  SET host = p_uso_clas_meet_rec.host,
3697 	  last_updated_by = g_n_user_id,
3698 	  last_update_date = SYSDATE,
3699 	  last_update_login = g_n_login_id
3700 	  WHERE uoo_id = l_n_uoo_id;
3701 
3702 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3703 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.Record_Updated',
3704 	     'Unit code:'||p_uso_clas_meet_rec.unit_cd||'  '||'Version number:'||p_uso_clas_meet_rec.version_number||'  '||'teach_cal_alternate_code:'
3705 	     ||p_uso_clas_meet_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_uso_clas_meet_rec.location_cd||'  '||'Unit Class:'||
3706 	     p_uso_clas_meet_rec.unit_class||'  '||'Class meet group name:'||p_uso_clas_meet_rec.class_meet_group_name);
3707           END IF;
3708 
3709         END IF;
3710       END IF;
3711 
3712     END create_uso_clas_meet;
3713 
3714 
3715   /* Main Meet-With Unit Section  group  Sub Process */
3716   BEGIN
3717 
3718     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3719       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.start_logging_for',
3720                       'Meet-With Unit Section ');
3721     END IF;
3722 
3723     p_c_rec_status := 'S';
3724     FOR I in 1..p_usec_meet_with_tbl.LAST LOOP
3725       l_c_cal_type:=NULL;
3726       l_n_seq_num:=NULL;
3727       l_n_uoo_id:= NULL;
3728       l_n_class_meet_group_id:= NULL;
3729 
3730       IF p_usec_meet_with_tbl.EXISTS(I) THEN
3731         p_usec_meet_with_tbl(I).status := 'S';
3732         p_usec_meet_with_tbl(I).msg_from := fnd_msg_pub.count_msg;
3733         trim_values(p_usec_meet_with_tbl(I) );
3734 
3735 
3736 	-- create meet with class group
3737 	IF  p_usec_meet_with_tbl(I).status = 'S' THEN
3738 
3739 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3740 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.call',
3741 	     'Unit code:'||p_usec_meet_with_tbl(I).unit_cd||'  '||'Version number:'||p_usec_meet_with_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3742 	     ||p_usec_meet_with_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_meet_with_tbl(I).location_cd||'  '||'Unit Class:'||
3743 	     p_usec_meet_with_tbl(I).unit_class||'  '||'Class meet group name:'||p_usec_meet_with_tbl(I).class_meet_group_name);
3744           END IF;
3745 
3746 	  create_uso_cm_grp(p_usec_meet_with_tbl(I));
3747 
3748 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3749 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_cm_grp.status_after_creating_group_record',
3750 	     'Unit code:'||p_usec_meet_with_tbl(I).unit_cd||'  '||'Version number:'||p_usec_meet_with_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3751 	     ||p_usec_meet_with_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_meet_with_tbl(I).location_cd||'  '||'Unit Class:'||
3752 	     p_usec_meet_with_tbl(I).unit_class||'  '||'Class meet group name:'||p_usec_meet_with_tbl(I).class_meet_group_name
3753 	     ||'  '||'Status:'|| p_usec_meet_with_tbl(I).status);
3754           END IF;
3755 
3756 	END IF;
3757 
3758 	-- Create child
3759 	IF  p_usec_meet_with_tbl(I).status = 'S' THEN
3760 	  IF p_usec_meet_with_tbl(I).unit_cd IS NOT NULL THEN
3761 
3762           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3763 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.call',
3764 	     'Unit code:'||p_usec_meet_with_tbl(I).unit_cd||'  '||'Version number:'||p_usec_meet_with_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3765 	     ||p_usec_meet_with_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_meet_with_tbl(I).location_cd||'  '||'Unit Class:'||
3766 	     p_usec_meet_with_tbl(I).unit_class||'  '||'Class meet group name:'||p_usec_meet_with_tbl(I).class_meet_group_name);
3767           END IF;
3768 
3769             create_uso_clas_meet(p_usec_meet_with_tbl(I));
3770 
3771           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3772 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.create_uso_clas_meet.status_after_creating_item_record',
3773 	     'Unit code:'||p_usec_meet_with_tbl(I).unit_cd||'  '||'Version number:'||p_usec_meet_with_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
3774 	     ||p_usec_meet_with_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_meet_with_tbl(I).location_cd||'  '||'Unit Class:'||
3775 	     p_usec_meet_with_tbl(I).unit_class||'  '||'Class meet group name:'||p_usec_meet_with_tbl(I).class_meet_group_name
3776 	     ||'  '||'Status:'|| p_usec_meet_with_tbl(I).status);
3777           END IF;
3778 
3779           END IF;
3780 	END IF;
3781 
3782         IF  p_usec_meet_with_tbl(I).status = 'S' THEN
3783           p_usec_meet_with_tbl(I).msg_from := NULL;
3784           p_usec_meet_with_tbl(I).msg_to := NULL;
3785         ELSIF  p_usec_meet_with_tbl(I).status = 'A' THEN
3786 	  p_usec_meet_with_tbl(I).msg_from  := p_usec_meet_with_tbl(I).msg_from + 1;
3787 	  p_usec_meet_with_tbl(I).msg_to := fnd_msg_pub.count_msg;
3788 	ELSE
3789           p_c_rec_status :=  p_usec_meet_with_tbl(I).status;
3790           p_usec_meet_with_tbl(I).msg_from :=  p_usec_meet_with_tbl(I).msg_from + 1;
3791           p_usec_meet_with_tbl(I).msg_to := fnd_msg_pub.count_msg;
3792           IF p_c_rec_status = 'E' THEN
3793             RETURN;
3794           END IF;
3795         END IF;
3796       END IF;--exists
3797     END LOOP;
3798 
3799 
3800     /* Post Insert/Update Checks */
3801     IF NOT igs_ps_validate_generic_pkg.post_usec_meet_with(p_usec_meet_with_tbl,class_meet_tab) THEN
3802       p_c_rec_status := 'E';
3803     END IF;
3804 
3805     class_meet_tab.DELETE;
3806 
3807     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3808       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_meet_with.after_import_status',p_c_rec_status);
3809     END IF;
3810 
3811   END create_usec_meet_with;
3812 
3813   --This procedure is a sub process to import records of Cross-listed Unit Section Group .
3814   PROCEDURE create_usec_cross_group(
3815           p_usec_cross_group_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_tbl_type,
3816           p_c_rec_status OUT NOCOPY VARCHAR2,
3817 	  p_calling_context  IN VARCHAR2
3818   )   AS
3819   /***********************************************************************************************
3820     Created By     :  SOMMUKHE
3821     Date Created By:  17-Jun-2005
3822     Purpose        :  This procedure is a sub process to import records of Cross-listed Unit Section Group.
3823 
3824     Known limitations,enhancements,remarks:
3825     Change History (in reverse chronological order)
3826     Who         When            What
3827   ********************************************************************************************** */
3828 
3829     l_n_usec_x_listed_group_id  igs_ps_usec_x_grp.usec_x_listed_group_id%type;
3830     l_n_uoo_id                  igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
3831     l_c_cal_type                igs_ps_unit_ofr_opt_all.cal_type%TYPE;
3832     l_n_seq_num                 igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
3833     l_insert_update             VARCHAR2(1);
3834 
3835     FUNCTION ifexists(p_n_usec_x_listed_group_id igs_ps_usec_x_grp.usec_x_listed_group_id%type,
3836                    p_old_max_enr_group igs_ps_usec_x_grp.max_enr_group%TYPE) RETURN BOOLEAN AS
3837     BEGIN
3838       FOR I in 1..cross_group_tab.count LOOP
3839 
3840          IF p_n_usec_x_listed_group_id = cross_group_tab(i).usec_x_listed_group_id THEN
3841            cross_group_tab(i).old_max_enr_group:= p_old_max_enr_group;
3842 	   RETURN TRUE;
3843          END IF;
3844       END LOOP;
3845       RETURN FALSE;
3846     END ifexists;
3847 
3848 
3849     /* Private Procedures for create_usec_grd_sch */
3850     PROCEDURE trim_values ( p_usec_cross_group_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) AS
3851     BEGIN
3852       p_usec_cross_group_rec.unit_cd := trim(p_usec_cross_group_rec.unit_cd);
3853       p_usec_cross_group_rec.version_number := trim(p_usec_cross_group_rec.version_number);
3854       p_usec_cross_group_rec.teach_cal_alternate_code := trim(p_usec_cross_group_rec.teach_cal_alternate_code);
3855       p_usec_cross_group_rec.location_cd := trim(p_usec_cross_group_rec.location_cd);
3856       p_usec_cross_group_rec.unit_class := trim(p_usec_cross_group_rec.unit_class);
3857       p_usec_cross_group_rec.usec_x_listed_group_name := trim(p_usec_cross_group_rec.usec_x_listed_group_name);
3858       p_usec_cross_group_rec.location_inheritance := trim(p_usec_cross_group_rec.location_inheritance);
3859       p_usec_cross_group_rec.max_enr_group := trim(p_usec_cross_group_rec.max_enr_group);
3860       p_usec_cross_group_rec.max_ovr_group := trim(p_usec_cross_group_rec.max_ovr_group);
3861       p_usec_cross_group_rec.parent := trim(p_usec_cross_group_rec.parent);
3862 
3863     END trim_values;
3864 
3865 
3866     PROCEDURE create_usec_x_grp( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) AS
3867 
3868       l_n_tbl_cnt NUMBER;
3869 
3870       PROCEDURE validate_parameters ( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) AS
3871       BEGIN
3872 
3873 	/* Check for Mandatory Parameters */
3874 	IF p_usec_x_grp_rec.teach_cal_alternate_code IS NULL OR p_usec_x_grp_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
3875 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3876 	  p_usec_x_grp_rec.status := 'E';
3877 	END IF;
3878 
3879 	IF p_usec_x_grp_rec.usec_x_listed_group_name IS NULL  OR p_usec_x_grp_rec.usec_x_listed_group_name = FND_API.G_MISS_CHAR  THEN
3880 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'GROUP_NAME', 'LEGACY_TOKENS', FALSE);
3881 	  p_usec_x_grp_rec.status := 'E';
3882 	END IF;
3883 
3884       END validate_parameters;
3885 
3886       -- Check for Update
3887       FUNCTION check_insert_update ( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) RETURN VARCHAR2 IS
3888 	CURSOR c_usec_x_grp(cp_x_grp_name VARCHAR2) IS
3889 	SELECT 'X'
3890 	FROM   igs_ps_usec_x_grp
3891 	WHERE  usec_x_listed_group_name = cp_x_grp_name
3892 	AND    cal_type = l_c_cal_type
3893 	AND    ci_sequence_number = l_n_seq_num;
3894 	c_usec_x_grp_rec c_usec_x_grp%ROWTYPE;
3895       BEGIN
3896 	  OPEN c_usec_x_grp( p_usec_x_grp_rec.usec_x_listed_group_name);
3897 	  FETCH c_usec_x_grp INTO c_usec_x_grp_rec;
3898 	  IF c_usec_x_grp%NOTFOUND THEN
3899 	    CLOSE c_usec_x_grp;
3900 	    RETURN 'I';
3901 	  ELSE
3902 	    CLOSE c_usec_x_grp;
3903 	    RETURN 'U';
3904 	  END IF;
3905       END check_insert_update;
3906 
3907       -- Carry out derivations and validate them
3908       PROCEDURE validate_derivations ( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type) AS
3909 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
3910 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
3911 	l_c_message  VARCHAR2(30);
3912       BEGIN
3913 
3914 	-- Derive Calander Type and Sequence Number
3915 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_x_grp_rec.teach_cal_alternate_code,
3916 					       p_cal_type           => l_c_cal_type,
3917 					       p_ci_sequence_number => l_n_seq_num,
3918 					       p_start_dt           => l_d_start_dt,
3919 					       p_end_dt             => l_d_end_dt,
3920 					       p_return_status      => l_c_message );
3921 	IF ( l_c_message <> 'SINGLE' ) THEN
3922 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
3923 	  p_usec_x_grp_rec.status := 'E';
3924 	END IF;
3925 
3926 
3927       END validate_derivations;
3928 
3929       PROCEDURE Assign_default( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type,p_insert_update VARCHAR2 ) AS
3930 
3931         CURSOR c_usec_x_grp(cp_x_grp_name VARCHAR2) IS
3932 	SELECT *
3933 	FROM   igs_ps_usec_x_grp
3934 	WHERE  usec_x_listed_group_name =cp_x_grp_name
3935 	AND    cal_type=l_c_cal_type
3936 	AND    ci_sequence_number=l_n_seq_num;
3937 
3938 	c_usec_x_grp_rec c_usec_x_grp%ROWTYPE;
3939 
3940       BEGIN
3941 
3942 	IF p_insert_update = 'U' THEN
3943 	   OPEN c_usec_x_grp(p_usec_x_grp_rec.usec_x_listed_group_name);
3944 	   FETCH c_usec_x_grp INTO c_usec_x_grp_rec;
3945 	   CLOSE c_usec_x_grp;
3946 	   l_n_usec_x_listed_group_id:= c_usec_x_grp_rec.usec_x_listed_group_id;
3947 
3948 	   IF p_usec_x_grp_rec.max_enr_group IS NULL  THEN
3949 	      p_usec_x_grp_rec.max_enr_group := c_usec_x_grp_rec.max_enr_group;
3950 	   ELSIF  p_usec_x_grp_rec.max_enr_group = FND_API.G_MISS_NUM THEN
3951 	      p_usec_x_grp_rec.max_enr_group :=NULL;
3952 	   END IF;
3953 
3954 	   IF p_usec_x_grp_rec.max_ovr_group IS NULL THEN
3955 	     p_usec_x_grp_rec.max_ovr_group := c_usec_x_grp_rec.max_ovr_group;
3956 	   ELSIF p_usec_x_grp_rec.max_ovr_group = FND_API.G_MISS_NUM THEN
3957 	     p_usec_x_grp_rec.max_ovr_group :=NULL;
3958 	   END IF;
3959 
3960    	   IF p_usec_x_grp_rec.location_inheritance IS NULL THEN
3961 	     p_usec_x_grp_rec.location_inheritance := c_usec_x_grp_rec.location_inheritance;
3962 	   ELSIF p_usec_x_grp_rec.location_inheritance = FND_API.G_MISS_CHAR THEN
3963 	     p_usec_x_grp_rec.location_inheritance :='N';
3964 	   END IF;
3965 	END IF;
3966 
3967       END Assign_default;
3968 
3969       -- Validate Database Constraints
3970       PROCEDURE validate_db_cons ( p_usec_x_grp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type,p_insert_update VARCHAR2 ) AS
3971       BEGIN
3972 	IF (p_insert_update = 'I') THEN
3973 	  /* Unique Key Validation */
3974 	  IF igs_ps_usec_x_grp_pkg.get_uk_for_validation (x_usec_x_listed_group_name=>p_usec_x_grp_rec.usec_x_listed_group_name,
3975 							  x_cal_type=>l_c_cal_type,
3976 							  x_ci_sequence_number=>l_n_seq_num) THEN
3977 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_CROSS_LIST_GROUP', 'LEGACY_TOKENS', FALSE);
3978 	    p_usec_x_grp_rec.status := 'W';
3979 	    RETURN;
3980 	  END IF;
3981 	END IF;
3982 
3983         --Check constraint
3984 	IF p_usec_x_grp_rec.max_enr_group IS NOT NULL THEN
3985 	  IF p_usec_x_grp_rec.max_enr_group <1 OR p_usec_x_grp_rec.max_enr_group >999999 THEN
3986 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_ENR_GROUP', 'LEGACY_TOKENS', FALSE);
3987 	    p_usec_x_grp_rec.status := 'E';
3988 	  END IF;
3989 
3990 	  --Format mask validation
3991 	  IF p_usec_x_grp_rec.status <> 'E' THEN
3992 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_usec_x_grp_rec.max_enr_group,6,0) THEN
3993 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_ENR_GROUP', 'LEGACY_TOKENS', FALSE);
3994 		p_usec_x_grp_rec.status :='E';
3995 	    END IF;
3996 	  END IF;
3997 
3998 	END IF;
3999 
4000 
4001 	IF p_usec_x_grp_rec.max_ovr_group IS NOT NULL THEN
4002 	  IF p_usec_x_grp_rec.max_ovr_group <1 OR p_usec_x_grp_rec.max_ovr_group >999999 THEN
4003 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_OVR_GROUP', 'LEGACY_TOKENS', FALSE);
4004 	    p_usec_x_grp_rec.status := 'E';
4005 	  END IF;
4006 
4007 	  --Format mask validation
4008 	  IF p_usec_x_grp_rec.status <> 'E' THEN
4009 	    IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_usec_x_grp_rec.max_ovr_group,6,0) THEN
4010 	        igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_1_999999', 'MAX_OVR_GROUP', 'LEGACY_TOKENS', FALSE);
4011 		p_usec_x_grp_rec.status :='E';
4012 	    END IF;
4013 	  END IF;
4014 
4015 	END IF;
4016 
4017 	/* Validate FK Constraints*/
4018 	IF NOT igs_ca_inst_pkg.get_pk_for_validation (x_cal_type =>l_c_cal_type,
4019 						      x_sequence_number =>l_n_seq_num) THEN
4020 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
4021 	  p_usec_x_grp_rec.status := 'E';
4022 	END IF;
4023 
4024 
4025       END validate_db_cons;
4026 
4027     -- Main section for assesment item group.
4028     BEGIN
4029 
4030        IF p_usec_x_grp_rec.status = 'S' THEN
4031           validate_parameters(p_usec_x_grp_rec);
4032 
4033            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4034 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_validate_parameters',
4035              'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4036 	     ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4037 	     p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4038 	     ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4039           END IF;
4040 
4041        END IF;
4042 
4043        IF p_usec_x_grp_rec.status = 'S' THEN
4044           validate_derivations(p_usec_x_grp_rec);
4045 
4046 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4047 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_validate_derivations',
4048              'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4049 	     ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4050 	     p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4051 	     ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4052           END IF;
4053 
4054        END IF;
4055 
4056        --Find out whether it is insert/update of record
4057        l_insert_update:='I';
4058        IF p_usec_x_grp_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
4059            l_insert_update:= check_insert_update(p_usec_x_grp_rec);
4060 
4061 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4062 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_check_insert_update',
4063              'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4064 	     ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4065 	     p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4066 	     ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4067            END IF;
4068 
4069 
4070        END IF;
4071 
4072        -- Find out whether record can go for import in context of cancelled/aborted
4073        IF p_usec_x_grp_rec.status = 'S' AND p_calling_context = 'S' THEN
4074 	 IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
4075 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
4076 	    fnd_msg_pub.add;
4077 	    p_usec_x_grp_rec.status := 'A';
4078 	 END IF;
4079 
4080          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4081 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_check_import_allowed',
4082 	   'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4083 	   ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4084 	   p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4085 	   ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4086          END IF;
4087 
4088 
4089        END IF;
4090 
4091        IF p_usec_x_grp_rec.status = 'S' THEN
4092 	  Assign_default(p_usec_x_grp_rec,l_insert_update);
4093 
4094 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4095 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_Assign_default',
4096 	    'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4097 	    ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4098 	    p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4099 	    ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4100           END IF;
4101 
4102        END IF;
4103 
4104        IF p_usec_x_grp_rec.status = 'S' THEN
4105           validate_db_cons(p_usec_x_grp_rec,l_insert_update);
4106 
4107           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4108 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_validate_db_cons',
4109 	    'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4110 	    ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4111 	    p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4112 	    ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4113           END IF;
4114 
4115        END IF;
4116 
4117        IF p_usec_x_grp_rec.status = 'S' THEN
4118          igs_ps_validate_generic_pkg.validate_usec_x_grp(p_usec_x_grp_rec, l_c_cal_type,l_n_seq_num,l_insert_update,cross_group_rec);
4119 
4120          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4121 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_Business_validation',
4122 	    'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4123 	    ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4124 	    p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4125 	    ||'  '||'Status:'|| p_usec_x_grp_rec.status);
4126           END IF;
4127 
4128        END IF;
4129 
4130        IF p_usec_x_grp_rec.status = 'S' THEN
4131 	 IF l_insert_update = 'I' THEN
4132            /* Insert Record */
4133            INSERT INTO igs_ps_usec_x_grp
4134            (usec_x_listed_group_id,
4135            usec_x_listed_group_name,
4136 	   location_inheritance,
4137            cal_type,
4138            ci_sequence_number ,
4139            created_by,
4140            creation_date,
4141            last_updated_by,
4142            last_update_date,
4143            last_update_login,
4144 	   max_enr_group,
4145            max_ovr_group
4146            )
4147            VALUES
4148            (igs_ps_usec_x_grp_s.NEXTVAL,
4149            p_usec_x_grp_rec.usec_x_listed_group_name,
4150 	   NVL(p_usec_x_grp_rec.location_inheritance,'Y'),
4151            l_c_cal_type,
4152            l_n_seq_num,
4153 	   g_n_user_id,
4154            SYSDATE,
4155            g_n_user_id,
4156            SYSDATE,
4157            g_n_login_id,
4158 	   p_usec_x_grp_rec.max_enr_group,
4159 	   p_usec_x_grp_rec.max_ovr_group
4160            ) RETURNING usec_x_listed_group_id INTO l_n_usec_x_listed_group_id;
4161 
4162           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4163 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.Record_Inserted',
4164 	    'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4165 	    ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4166 	    p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name);
4167           END IF;
4168 
4169          ELSE --update
4170 	   UPDATE igs_ps_usec_x_grp
4171 	   SET max_enr_group=p_usec_x_grp_rec.max_enr_group,
4172 	   max_ovr_group=p_usec_x_grp_rec.max_ovr_group,
4173 	   last_updated_by = g_n_user_id,
4174 	   last_update_date = SYSDATE,
4175 	   last_update_login = g_n_login_id
4176 	   WHERE usec_x_listed_group_name =p_usec_x_grp_rec.usec_x_listed_group_name
4177 	   AND cal_type = l_c_cal_type
4178 	   AND ci_sequence_number =l_n_seq_num;
4179 
4180            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4181 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.Record_Updated',
4182 	     'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4183 	     ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4184 	     p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name);
4185            END IF;
4186 
4187          END IF;
4188 
4189 	 --populate the plsql table with unique cmgids
4190 	 IF cross_group_tab.count = 0 THEN
4191 	   l_n_tbl_cnt :=cross_group_tab.count+1;
4192 	   cross_group_tab(l_n_tbl_cnt).usec_x_listed_group_name:= cross_group_rec.usec_x_listed_group_name;
4193 	   cross_group_tab(l_n_tbl_cnt).usec_x_listed_group_id :=l_n_usec_x_listed_group_id;
4194 	   cross_group_tab(l_n_tbl_cnt).old_max_enr_group:=cross_group_rec.old_max_enr_group;
4195 	 ELSE
4196 	   IF NOT ifexists(l_n_usec_x_listed_group_id,cross_group_rec.old_max_enr_group) THEN
4197 	     l_n_tbl_cnt :=cross_group_tab.count+1;
4198 	     cross_group_tab(l_n_tbl_cnt).usec_x_listed_group_name:= cross_group_rec.usec_x_listed_group_name;
4199 	     cross_group_tab(l_n_tbl_cnt).usec_x_listed_group_id :=l_n_usec_x_listed_group_id;
4200 	     cross_group_tab(l_n_tbl_cnt).old_max_enr_group:=cross_group_rec.old_max_enr_group;
4201 	   END IF;
4202 	 END IF;
4203 
4204          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4205 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.Count_unique_xgids',
4206 	   'Unit code:'||p_usec_x_grp_rec.unit_cd||'  '||'Version number:'||p_usec_x_grp_rec.version_number||'  '||'teach_cal_alternate_code:'
4207 	   ||p_usec_x_grp_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grp_rec.location_cd||'  '||'Unit Class:'||
4208 	   p_usec_x_grp_rec.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grp_rec.usec_x_listed_group_name
4209 	   ||'  '||'Count:'||cross_group_tab.count);
4210          END IF;
4211 
4212 
4213        END IF;
4214 
4215     END create_usec_x_grp;
4216 
4217     PROCEDURE create_usec_x_grpmem( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) AS
4218 
4219 
4220 
4221 
4222 
4223       PROCEDURE validate_parameters_item ( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) AS
4224       BEGIN
4225 
4226 	/* Check for Mandatory Parameters */
4227 	IF p_usec_x_grpmem.unit_cd IS NULL OR p_usec_x_grpmem.unit_cd = FND_API.G_MISS_CHAR THEN
4228 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
4229 	  p_usec_x_grpmem.status := 'E';
4230 	END IF;
4231 	IF p_usec_x_grpmem.version_number IS NULL OR p_usec_x_grpmem.version_number = FND_API.G_MISS_NUM  THEN
4232 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
4233 	  p_usec_x_grpmem.status := 'E';
4234 	END IF;
4235 	IF p_usec_x_grpmem.teach_cal_alternate_code IS NULL OR p_usec_x_grpmem.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
4236 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
4237 	  p_usec_x_grpmem.status := 'E';
4238 	END IF;
4239 	IF p_usec_x_grpmem.location_cd IS NULL  OR p_usec_x_grpmem.location_cd = FND_API.G_MISS_CHAR THEN
4240 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
4241 	  p_usec_x_grpmem.status := 'E';
4242 	END IF;
4243 	IF p_usec_x_grpmem.unit_class IS NULL OR p_usec_x_grpmem.unit_class = FND_API.G_MISS_CHAR  THEN
4244 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
4245 	  p_usec_x_grpmem.status := 'E';
4246 	END IF;
4247 	IF p_usec_x_grpmem.parent IS NULL  OR p_usec_x_grpmem.parent = FND_API.G_MISS_CHAR  THEN
4248 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PARENT', 'LEGACY_TOKENS', FALSE);
4249 	  p_usec_x_grpmem.status := 'E';
4250 	END IF;
4251 
4252       END validate_parameters_item;
4253 
4254       -- Check for Update
4255       FUNCTION check_insert_update_item ( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type ) RETURN VARCHAR2 IS
4256 	CURSOR c_usec_x_grpmem(cp_n_uoo_id NUMBER) IS
4257 	SELECT 'X'
4258 	FROM   igs_ps_usec_x_grpmem
4259 	WHERE  uoo_id = cp_n_uoo_id;
4260 
4261 	c_usec_x_grpmem_rec c_usec_x_grpmem%ROWTYPE;
4262       BEGIN
4263 	OPEN c_usec_x_grpmem(l_n_uoo_id);
4264 	FETCH c_usec_x_grpmem INTO c_usec_x_grpmem_rec;
4265 	IF c_usec_x_grpmem%NOTFOUND THEN
4266 	  CLOSE c_usec_x_grpmem;
4267 	  RETURN 'I';
4268 	ELSE
4269 	  CLOSE c_usec_x_grpmem;
4270 	  RETURN 'U';
4271 	END IF;
4272 
4273       END check_insert_update_item;
4274 
4275       -- Carry out derivations and validate them
4276       PROCEDURE validate_derivations_item ( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type) AS
4277 
4278 	  l_c_message  VARCHAR2(30);
4279 
4280       BEGIN
4281 
4282 	-- Derive uoo_id
4283 	l_c_message := NULL;
4284 	igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_x_grpmem.unit_cd,
4285 					      p_ver_num    => p_usec_x_grpmem.version_number,
4286 					      p_cal_type   => l_c_cal_type,
4287 					      p_seq_num    => l_n_seq_num,
4288 					      p_loc_cd     => p_usec_x_grpmem.location_cd,
4289 					      p_unit_class => p_usec_x_grpmem.unit_class,
4290 					      p_uoo_id     => l_n_uoo_id,
4291 					      p_message    => l_c_message );
4292 	IF ( l_c_message IS NOT NULL ) THEN
4293 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4294 	  p_usec_x_grpmem.status := 'E';
4295 	END IF;
4296 
4297       END validate_derivations_item;
4298 
4299 
4300       -- Validate Database Constraints
4301       PROCEDURE validate_db_cons_cm ( p_usec_x_grpmem IN OUT NOCOPY igs_ps_generic_pub.usec_cross_group_rec_type,p_insert_update VARCHAR2 ) AS
4302       BEGIN
4303 
4304 	IF (p_insert_update = 'I') THEN
4305 	/* Unique Key Validation */
4306 	  IF igs_ps_usec_x_grpmem_pkg.get_uk_for_validation (x_uoo_id =>l_n_uoo_id) THEN
4307 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4308 	    p_usec_x_grpmem.status := 'W';
4309 	    RETURN;
4310 	  END IF;
4311 	END IF;
4312 
4313         /* Check constraint */
4314 	IF p_usec_x_grpmem.parent NOT IN ('Y','N') THEN
4315 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N', 'PARENT', 'LEGACY_TOKENS', FALSE);
4316 	  p_usec_x_grpmem.status := 'E';
4317 	END IF;
4318 
4319 	  /* Validate FK Constraints */
4320 	IF NOT igs_ps_usec_x_grp_pkg.get_pk_for_validation ( l_n_usec_x_listed_group_id ) THEN
4321 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_CROSS_LIST_GROUP', 'LEGACY_TOKENS', FALSE);
4322 	  p_usec_x_grpmem.status := 'E';
4323 	END IF;
4324 
4325 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4326 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4327 	  p_usec_x_grpmem.status := 'E';
4328 	END IF;
4329 
4330 
4331       END validate_db_cons_cm;
4332 
4333     -- Main section for assesment item group.
4334     BEGIN
4335 
4336       IF p_usec_x_grpmem.status = 'S' THEN
4337          validate_parameters_item(p_usec_x_grpmem);
4338 
4339          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4340 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_validate_parameters_item',
4341 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4342 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4343 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4344 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4345          END IF;
4346 
4347       END IF;
4348 
4349       IF p_usec_x_grpmem.status = 'S' THEN
4350 	validate_derivations_item(p_usec_x_grpmem);
4351 
4352          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4353 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_validate_derivations_item',
4354 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4355 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4356 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4357 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4358          END IF;
4359 
4360       END IF;
4361 
4362       l_insert_update:='I';
4363       --Find out whether it is insert/update of record
4364       IF p_usec_x_grpmem.status = 'S' AND p_calling_context IN ('G','S') THEN
4365 	l_insert_update:= check_insert_update_item(p_usec_x_grpmem);
4366 
4367 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4368 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_check_insert_update_item',
4369 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4370 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4371 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4372 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4373         END IF;
4374 
4375       END IF;
4376 
4377       IF p_usec_x_grpmem.status = 'S' AND p_calling_context = 'S' THEN
4378 	IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
4379 	  fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
4380 	  fnd_msg_pub.add;
4381 	  p_usec_x_grpmem.status := 'A';
4382 	END IF;
4383 
4384         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4385 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_check_import_allowed',
4386 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4387 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4388 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4389 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4390         END IF;
4391 
4392       END IF;
4393 
4394       IF p_usec_x_grpmem.status = 'S' THEN
4395 	validate_db_cons_cm(p_usec_x_grpmem,l_insert_update);
4396 
4397 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4398 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_validate_db_cons_cm',
4399 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4400 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4401 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4402 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4403         END IF;
4404 
4405       END IF;
4406 
4407       IF p_usec_x_grpmem.status = 'S' THEN
4408 	igs_ps_validate_generic_pkg.validate_usec_x_grpmem(p_usec_x_grpmem,l_n_uoo_id,l_n_usec_x_listed_group_id,l_c_cal_type,l_n_seq_num);
4409 
4410 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4411 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_Business_validation',
4412 	   'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4413 	   ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4414 	   p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name
4415 	   ||'  '||'Status:'|| p_usec_x_grpmem.status);
4416         END IF;
4417 
4418       END IF;
4419 
4420       IF p_usec_x_grpmem.status = 'S' THEN
4421 	IF l_insert_update = 'I' THEN
4422 	  /* Insert Record */
4423 	  INSERT INTO igs_ps_usec_x_grpmem
4424 	  ( usec_x_listed_group_mem_id,
4425 	   usec_x_listed_group_id,
4426 	   parent,
4427 	   created_by,
4428 	   creation_date,
4429 	   last_updated_by,
4430 	   last_update_date,
4431 	   last_update_login,
4432 	   uoo_id
4433 	  )
4434 	  VALUES
4435 	  (igs_ps_usec_x_grpmem_s.NEXTVAL,
4436 	  l_n_usec_x_listed_group_id,
4437 	  p_usec_x_grpmem.parent,
4438 	  g_n_user_id,
4439 	  SYSDATE,
4440 	  g_n_user_id,
4441 	  SYSDATE,
4442 	  g_n_login_id,
4443 	  l_n_uoo_id
4444 	  );
4445 
4446 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4447 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.Record_Inserted',
4448 	    'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4449 	    ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4450 	    p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name);
4451           END IF;
4452 
4453 	ELSE --update
4454 	  UPDATE igs_ps_usec_x_grpmem
4455 	  SET parent = p_usec_x_grpmem.parent,
4456 	  last_updated_by = g_n_user_id,
4457 	  last_update_date = SYSDATE,
4458           last_update_login = g_n_login_id
4459 	  WHERE uoo_id = l_n_uoo_id;
4460 
4461           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4462 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.Record_updated',
4463 	    'Unit code:'||p_usec_x_grpmem.unit_cd||'  '||'Version number:'||p_usec_x_grpmem.version_number||'  '||'teach_cal_alternate_code:'
4464 	    ||p_usec_x_grpmem.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_x_grpmem.location_cd||'  '||'Unit Class:'||
4465 	    p_usec_x_grpmem.unit_class||'  '||'usec_x_listed_group_name:'||p_usec_x_grpmem.usec_x_listed_group_name);
4466           END IF;
4467 
4468 	END IF;
4469       END IF;
4470 
4471     END create_usec_x_grpmem;
4472 
4473 
4474   /* Main Unit Section meet with class group  Sub Process */
4475   BEGIN
4476 
4477     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
4478       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.start_logging_for',
4479                     'Unit Section meet with class group');
4480     END IF;
4481 
4482     p_c_rec_status := 'S';
4483     FOR I in 1..p_usec_cross_group_tbl.LAST LOOP
4484       l_c_cal_type:=NULL;
4485       l_n_seq_num:=NULL;
4486       l_n_uoo_id:= NULL;
4487       l_n_usec_x_listed_group_id :=NULL;
4488 
4489       IF p_usec_cross_group_tbl.EXISTS(I) THEN
4490         p_usec_cross_group_tbl(I).status := 'S';
4491         p_usec_cross_group_tbl(I).msg_from := fnd_msg_pub.count_msg;
4492         trim_values(p_usec_cross_group_tbl(I) );
4493 
4494 
4495 	-- create crosslisted group
4496 	 IF  p_usec_cross_group_tbl(I).status = 'S' THEN
4497 
4498            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4499 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.call',
4500 	     'Unit code:'||p_usec_cross_group_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cross_group_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
4501 	     ||p_usec_cross_group_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cross_group_tbl(I).location_cd||'  '||'Unit Class:'||
4502 	     p_usec_cross_group_tbl(I).unit_class||'  '||'usec_x_listed_group_name:'||p_usec_cross_group_tbl(I).usec_x_listed_group_name);
4503            END IF;
4504 
4505 	   create_usec_x_grp(p_usec_cross_group_tbl(I));
4506 
4507            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4508 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grp.status_after_creating_group_record',
4509              'Unit code:'||p_usec_cross_group_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cross_group_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
4510 	     ||p_usec_cross_group_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cross_group_tbl(I).location_cd||'  '||'Unit Class:'||
4511 	     p_usec_cross_group_tbl(I).unit_class||'  '||'usec_x_listed_group_name:'||p_usec_cross_group_tbl(I).usec_x_listed_group_name
4512 	     ||'  '||'Status:'|| p_usec_cross_group_tbl(I).status);
4513           END IF;
4514 
4515 	 END IF;
4516 
4517 	-- create crosslisted group member
4518 	IF  p_usec_cross_group_tbl(I).status = 'S' THEN
4519 	   IF  p_usec_cross_group_tbl(I).unit_cd IS NOT NULL THEN
4520 
4521 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4522 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.call',
4523 	     'Unit code:'||p_usec_cross_group_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cross_group_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
4524 	     ||p_usec_cross_group_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cross_group_tbl(I).location_cd||'  '||'Unit Class:'||
4525 	     p_usec_cross_group_tbl(I).unit_class||'  '||'usec_x_listed_group_name:'||p_usec_cross_group_tbl(I).usec_x_listed_group_name);
4526            END IF;
4527 
4528               create_usec_x_grpmem(p_usec_cross_group_tbl(I));
4529 
4530           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4531 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.create_usec_x_grpmem.status_after_creating_item_record',
4532              'Unit code:'||p_usec_cross_group_tbl(I).unit_cd||'  '||'Version number:'||p_usec_cross_group_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
4533 	     ||p_usec_cross_group_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_cross_group_tbl(I).location_cd||'  '||'Unit Class:'||
4534 	     p_usec_cross_group_tbl(I).unit_class||'  '||'usec_x_listed_group_name:'||p_usec_cross_group_tbl(I).usec_x_listed_group_name
4535 	     ||'  '||'Status:'|| p_usec_cross_group_tbl(I).status);
4536           END IF;
4537 
4538            END IF;
4539 	END IF;
4540 
4541          IF  p_usec_cross_group_tbl(I).status = 'S' THEN
4542            p_usec_cross_group_tbl(I).msg_from := NULL;
4543            p_usec_cross_group_tbl(I).msg_to := NULL;
4544         ELSIF  p_usec_cross_group_tbl(I).status = 'A' THEN
4545 	   p_usec_cross_group_tbl(I).msg_from  := p_usec_cross_group_tbl(I).msg_from + 1;
4546 	   p_usec_cross_group_tbl(I).msg_to := fnd_msg_pub.count_msg;
4547 	ELSE
4548            p_c_rec_status :=  p_usec_cross_group_tbl(I).status;
4549            p_usec_cross_group_tbl(I).msg_from :=  p_usec_cross_group_tbl(I).msg_from + 1;
4550            p_usec_cross_group_tbl(I).msg_to := fnd_msg_pub.count_msg;
4551           IF p_c_rec_status = 'E' THEN
4552             RETURN;
4553           END IF;
4554         END IF;
4555       END IF;--exists
4556     END LOOP;
4557 
4558     /* Post Insert/Update Checks */
4559     IF NOT igs_ps_validate_generic_pkg.post_usec_cross_group(p_usec_cross_group_tbl,cross_group_tab) THEN
4560       p_c_rec_status := 'E';
4561     END IF;
4562 
4563     cross_group_tab.DELETE;
4564 
4565     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
4566       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_cross_group.after_import_status',p_c_rec_status);
4567     END IF;
4568 
4569   END create_usec_cross_group;
4570 
4571 
4572 --Unit Section Waitlist
4573 PROCEDURE create_usec_waitlist(
4574           p_usec_waitlist_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_tbl_type,
4575           p_c_rec_status      OUT NOCOPY VARCHAR2,
4576 	  p_calling_context   IN VARCHAR2
4577   ) AS
4578   /***********************************************************************************************
4579     Created By     :  Sommukhe
4580     Date Created By:  18-Jun-2005
4581     Purpose        :  This procedure is a sub process to insert records of Unit Section Waitlist priority and preference.
4582 
4583     Known limitations,enhancements,remarks:
4584     Change History (in reverse chronological order)
4585     Who         When            What
4586     --sommukhe    12-AUG-2005     Bug#4377818,changed the cursor cur_hzp, included table igs_pe_hz_parties in
4587     --                            FROM clause and modified the WHERE clause by joining HZ_PARTIES and IGS_PE_HZ_PARTIES
4588     --                            using party_id and org unit being compared with oss_org_unit_cd of IGS_PE_HZ_PARTIES.
4589   ********************************************************************************************** */
4590 
4591     l_insert_update       VARCHAR2(1);
4592     l_n_uoo_id            igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
4593     l_n_wlst_usec_pri_id  igs_ps_usec_wlst_pri.unit_sec_waitlist_priority_id%type;
4594     l_tbl_uoo             igs_ps_create_generic_pkg.uoo_tbl_type;
4595 
4596     /* Private Procedures for create_usec_waitlist */
4597     PROCEDURE trim_values ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type ) AS
4598     BEGIN
4599       p_usec_wlst_rec.unit_cd := trim(p_usec_wlst_rec.unit_cd);
4600       p_usec_wlst_rec.version_number := trim(p_usec_wlst_rec.version_number);
4601       p_usec_wlst_rec.teach_cal_alternate_code := trim(p_usec_wlst_rec.teach_cal_alternate_code);
4602       p_usec_wlst_rec.location_cd := trim(p_usec_wlst_rec.location_cd);
4603       p_usec_wlst_rec.unit_class := trim(p_usec_wlst_rec.unit_class);
4604       p_usec_wlst_rec.priority_number := trim(p_usec_wlst_rec.priority_number);
4605       p_usec_wlst_rec.priority_value := trim(p_usec_wlst_rec.priority_value);
4606       p_usec_wlst_rec.preference_order := trim(p_usec_wlst_rec.preference_order);
4607       p_usec_wlst_rec.preference_code := trim(p_usec_wlst_rec.preference_code);
4608       p_usec_wlst_rec.preference_version := trim(p_usec_wlst_rec.preference_version);
4609 
4610     END trim_values;
4611 
4612     PROCEDURE create_wlstpri( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type ) AS
4613 
4614       -- validate parameters passed waitlist Priority
4615       PROCEDURE validate_parameters( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type ) AS
4616       BEGIN
4617 
4618 	/* Check for Mandatory Parameters */
4619 	IF p_usec_wlst_rec.unit_cd IS NULL OR p_usec_wlst_rec.unit_cd = FND_API.G_MISS_CHAR THEN
4620 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
4621 	  p_usec_wlst_rec.status := 'E';
4622 	END IF;
4623 	IF p_usec_wlst_rec.version_number IS NULL OR p_usec_wlst_rec.version_number = FND_API.G_MISS_NUM THEN
4624 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
4625 	  p_usec_wlst_rec.status := 'E';
4626 	END IF;
4627 	IF p_usec_wlst_rec.teach_cal_alternate_code IS NULL OR p_usec_wlst_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
4628 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
4629 	  p_usec_wlst_rec.status := 'E';
4630 	END IF;
4631 	IF p_usec_wlst_rec.location_cd IS NULL OR p_usec_wlst_rec.location_cd = FND_API.G_MISS_CHAR THEN
4632 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
4633 	  p_usec_wlst_rec.status := 'E';
4634 	END IF;
4635 	IF p_usec_wlst_rec.unit_class IS NULL OR p_usec_wlst_rec.unit_class = FND_API.G_MISS_CHAR THEN
4636 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
4637 	  p_usec_wlst_rec.status := 'E';
4638 	END IF;
4639 	IF p_usec_wlst_rec.priority_value IS NULL OR p_usec_wlst_rec.priority_value = FND_API.G_MISS_CHAR THEN
4640 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_VALUE', 'LEGACY_TOKENS', FALSE);
4641 	  p_usec_wlst_rec.status := 'E';
4642 	END IF;
4643 
4644       END validate_parameters ;
4645 
4646 
4647       --Validate the derivations
4648       PROCEDURE validate_derivations_pri ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_insert_update VARCHAR2 ) AS
4649 	l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
4650 	l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
4651 	l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
4652 	l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
4653 	l_c_message  VARCHAR2(30);
4654 
4655       BEGIN
4656 	-- Derive Calander Type and Sequence Number
4657 	igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_wlst_rec.teach_cal_alternate_code,
4658 					       p_cal_type           => l_c_cal_type,
4659 					       p_ci_sequence_number => l_n_seq_num,
4660 					       p_start_dt           => l_d_start_dt,
4661 					       p_end_dt             => l_d_end_dt,
4662 					       p_return_status      => l_c_message );
4663 	IF ( l_c_message <> 'SINGLE' ) THEN
4664 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
4665 	  p_usec_wlst_rec.status := 'E';
4666 	END IF;
4667 	-- Derive uoo_id
4668 	l_c_message := NULL;
4669 	igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_wlst_rec.unit_cd,
4670 					      p_ver_num    => p_usec_wlst_rec.version_number,
4671 					      p_cal_type   => l_c_cal_type,
4672 					      p_seq_num    => l_n_seq_num,
4673 					      p_loc_cd     => p_usec_wlst_rec.location_cd,
4674 					      p_unit_class => p_usec_wlst_rec.unit_class,
4675 					      p_uoo_id     => l_n_uoo_id,
4676 					      p_message    => l_c_message );
4677 	IF ( l_c_message IS NOT NULL ) THEN
4678 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4679 	  p_usec_wlst_rec.status := 'E';
4680 	END IF;
4681       END validate_derivations_pri;
4682 
4683       -- Check for Update
4684       FUNCTION check_insert_update ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_n_wlst_usec_pri_id NUMBER) RETURN VARCHAR2 IS
4685         CURSOR c_usec_wlst_pri(cp_n_uoo_id NUMBER,cp_priority_value VARCHAR2) IS
4686         SELECT 'X'
4687 	FROM   igs_ps_usec_wlst_pri
4688         WHERE  uoo_id = cp_n_uoo_id
4689         AND    priority_value = cp_priority_value;
4690 
4691         c_usec_wlst_pri_rec c_usec_wlst_pri%ROWTYPE;
4692 
4693       BEGIN
4694 	OPEN c_usec_wlst_pri( l_n_uoo_id,p_usec_wlst_rec.priority_value);
4695 	FETCH c_usec_wlst_pri INTO c_usec_wlst_pri_rec;
4696 	IF c_usec_wlst_pri%NOTFOUND THEN
4697 	  CLOSE c_usec_wlst_pri;
4698 	  RETURN 'I';
4699 	ELSE
4700 	  CLOSE c_usec_wlst_pri;
4701 	  RETURN 'U';
4702 	END IF;
4703 
4704       END check_insert_update;
4705 
4706       PROCEDURE Assign_default(p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_insert_update VARCHAR2 ) AS
4707 
4708         CURSOR c_usprv(cp_n_uoo_id NUMBER,cp_priority_value VARCHAR2) IS
4709 	SELECT priority_number
4710 	FROM   igs_ps_usec_wlst_pri
4711 	WHERE  uoo_id = cp_n_uoo_id
4712 	AND    priority_value    = cp_priority_value;
4713 
4714 	rec_usprv  c_usprv%ROWTYPE;
4715 
4716       BEGIN
4717 	IF p_insert_update = 'U' THEN
4718 	   OPEN c_usprv( l_n_uoo_id,p_usec_wlst_rec.priority_value);
4719 	   FETCH c_usprv INTO rec_usprv;
4720 	   CLOSE c_usprv;
4721 
4722 	   IF p_usec_wlst_rec.priority_number IS NULL  THEN
4723 	      p_usec_wlst_rec.priority_number:= rec_usprv.priority_number;
4724            ELSIF p_usec_wlst_rec.priority_number = FND_API.G_MISS_NUM THEN
4725 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PRIORITY_NUMBER', 'LEGACY_TOKENS', FALSE);
4726               p_usec_wlst_rec.status := 'E';
4727 	   END IF;
4728 
4729 	 END IF;
4730       END Assign_default;
4731 
4732       -- Validate Database Constraints for Waitlist seating priority.
4733       PROCEDURE validate_db_cons_wlstpri ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_insert_update VARCHAR2 ) AS
4734       BEGIN
4735 	IF(p_insert_update = 'I') THEN
4736 	  /* Unique Key Validation */
4737 	  IF igs_ps_usec_wlst_pri_pkg.get_uk_for_validation ( x_priority_value =>p_usec_wlst_rec.priority_value,
4738 							      x_uoo_id => l_n_uoo_id) THEN
4739 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_WLST_PRI', 'LEGACY_TOKENS', FALSE);
4740 	    p_usec_wlst_rec.status := 'W';
4741 	    RETURN;
4742 	  END IF;
4743 	END IF;
4744 	 /* Validate FK Constraints */
4745 
4746 	IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
4747 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
4748 	  p_usec_wlst_rec.status := 'E';
4749 	END IF;
4750 
4751 	IF NOT igs_lookups_view_pkg.get_pk_for_validation('UNIT_WAITLIST', p_usec_wlst_rec.priority_value) THEN
4752 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'PRIORITY_VALUE', 'LEGACY_TOKENS', FALSE);
4753 	  p_usec_wlst_rec.status := 'E';
4754 	END IF;
4755       END validate_db_cons_wlstpri;
4756 
4757     BEGIN
4758 
4759       IF p_usec_wlst_rec.status = 'S' THEN
4760          validate_parameters(p_usec_wlst_rec);
4761 
4762           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4763 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_validate_parameters',
4764 	    'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4765 	    ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4766 	    p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4767 	    ||p_usec_wlst_rec.status);
4768           END IF;
4769 
4770       END IF;
4771 
4772       IF p_usec_wlst_rec.status = 'S' THEN
4773          validate_derivations_pri(p_usec_wlst_rec,l_insert_update);
4774 
4775          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4776 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_validate_derivations_pri',
4777 	    'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4778 	    ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4779 	    p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4780 	    ||p_usec_wlst_rec.status);
4781           END IF;
4782 
4783       END IF;
4784 
4785       --Find out whether it is insert/update of record
4786       l_insert_update:='I';
4787       IF p_usec_wlst_rec.status = 'S' AND p_calling_context IN ('G','S') THEN
4788         l_insert_update:= check_insert_update(p_usec_wlst_rec,l_n_wlst_usec_pri_id);
4789 
4790         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4791 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_check_insert_update',
4792 	  'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4793 	  ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4794 	  p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4795 	  ||p_usec_wlst_rec.status);
4796         END IF;
4797 
4798       END IF;
4799 
4800       IF p_usec_wlst_rec.status = 'S' AND p_calling_context ='S' THEN
4801         IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
4802           fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
4803           fnd_msg_pub.add;
4804           p_usec_wlst_rec.status := 'A';
4805         END IF;
4806 
4807         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4808 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_check_import_allowed',
4809 	  'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4810 	  ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4811 	  p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4812 	  ||p_usec_wlst_rec.status);
4813         END IF;
4814 
4815       END IF;
4816 
4817       IF p_usec_wlst_rec.status = 'S' THEN
4818 	 Assign_default(p_usec_wlst_rec,l_insert_update);
4819 
4820          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4821 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_Assign_default',
4822 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4823 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4824 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4825 	   ||p_usec_wlst_rec.status);
4826          END IF;
4827 
4828       END IF;
4829 
4830       IF l_tbl_uoo.count = 0 THEN
4831          l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
4832       ELSE
4833 	IF NOT igs_ps_validate_lgcy_pkg.isExists(l_n_uoo_id,l_tbl_uoo) THEN
4834 	   l_tbl_uoo(l_tbl_uoo.count+1) :=l_n_uoo_id;
4835 	END IF;
4836       END IF;
4837 
4838       IF p_usec_wlst_rec.status = 'S' THEN
4839         validate_db_cons_wlstpri(p_usec_wlst_rec,l_insert_update);
4840 
4841          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4842 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_validate_db_cons_wlstpri',
4843 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4844 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4845 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||'Status:'
4846 	   ||p_usec_wlst_rec.status);
4847          END IF;
4848 
4849       END IF;
4850 
4851       IF p_usec_wlst_rec.status = 'S' THEN
4852         igs_ps_validate_generic_pkg.validate_usec_wlstpri (p_usec_wlst_rec,l_n_uoo_id,l_insert_update);
4853       END IF;
4854 
4855       IF p_usec_wlst_rec.status = 'S' THEN
4856 	IF l_insert_update = 'I' THEN
4857            /* Insert Record */
4858            INSERT INTO igs_ps_usec_wlst_pri
4859            ( unit_sec_waitlist_priority_id,
4860             priority_number,
4861             priority_value,
4862             created_by,
4863             creation_date,
4864             last_updated_by,
4865             last_update_date,
4866             last_update_login,
4867 	    uoo_id
4868            )
4869 	   VALUES
4870 	   (
4871 	    igs_ps_usec_wlst_pri_s.nextval,
4872 	    p_usec_wlst_rec.priority_number,
4873 	    p_usec_wlst_rec.priority_value,
4874 	    g_n_user_id,
4875 	    sysdate,
4876 	    g_n_user_id,
4877 	    sysdate,
4878 	    g_n_login_id,
4879 	    l_n_uoo_id
4880            );
4881 
4882            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4883 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.Record_Inserted',
4884 	     'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4885 	     ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4886 	     p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value);
4887            END IF;
4888 
4889         ELSE --update
4890 	   UPDATE igs_ps_usec_wlst_pri SET
4891            priority_number= p_usec_wlst_rec.priority_number,
4892            last_updated_by = g_n_user_id,
4893            last_update_date= SYSDATE ,
4894            last_update_login= g_n_login_id
4895 	   WHERE uoo_id =l_n_uoo_id AND priority_value = p_usec_wlst_rec.priority_value;
4896 
4897            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4898 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.Record_updated',
4899 	     'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
4900 	     ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
4901 	     p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value);
4902            END IF;
4903 
4904         END IF;
4905       END IF;
4906 
4907     END create_wlstpri;
4908 
4909     PROCEDURE create_wlstprf( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type ) AS
4910 
4911       -- validate parameters passed waitlist Priority
4912       PROCEDURE validate_parameters( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type ) AS
4913       BEGIN
4914 
4915 	/* Check for Mandatory Parameters */
4916 	IF p_usec_wlst_rec.preference_order IS NULL OR p_usec_wlst_rec.preference_order = FND_API.G_MISS_NUM THEN
4917 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_ORDER', 'LEGACY_TOKENS', FALSE);
4918 	   p_usec_wlst_rec.status := 'E';
4919 	END IF;
4920 	IF p_usec_wlst_rec.preference_code IS NULL OR p_usec_wlst_rec.preference_code = FND_API.G_MISS_CHAR THEN
4921 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_CODE', 'LEGACY_TOKENS', FALSE);
4922 	   p_usec_wlst_rec.status := 'E';
4923 	END IF;
4924 
4925 	IF p_usec_wlst_rec.priority_value IS NOT NULL AND p_usec_wlst_rec.priority_value IN ('PROGRAM','UNIT_SET') THEN
4926 	  IF p_usec_wlst_rec.preference_version IS NULL OR p_usec_wlst_rec.preference_version = FND_API.G_MISS_NUM THEN
4927 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'PREFERENCE_VERSION', 'LEGACY_TOKENS', FALSE);
4928 	    p_usec_wlst_rec.status := 'E';
4929 	  END IF;
4930 	ELSIF p_usec_wlst_rec.priority_value IS NOT NULL AND p_usec_wlst_rec.priority_value NOT IN ('PROGRAM','UNIT_SET') THEN
4931 	  IF p_usec_wlst_rec.preference_version IS NOT NULL THEN
4932 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'PREFERENCE_VERSION', 'LEGACY_TOKENS', FALSE);
4933 	    p_usec_wlst_rec.status := 'E';
4934 	  END IF;
4935 	END IF;
4936 
4937       END validate_parameters ;
4938 
4939 
4940       -- Carry out derivations and validate them
4941       PROCEDURE validate_derivations_prf ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_insert_update VARCHAR2 ) AS
4942 
4943 	CURSOR c_pri_id(cp_uoo_id NUMBER, cp_priority_value igs_ps_usec_wlst_pri.priority_value%type) IS
4944 	SELECT unit_sec_waitlist_priority_id
4945 	FROM igs_ps_usec_wlst_pri
4946 	WHERE uoo_id = cp_uoo_id
4947 	AND priority_value = cp_priority_value;
4948 
4949       BEGIN
4950         OPEN c_pri_id(l_n_uoo_id,p_usec_wlst_rec.priority_value);
4951 	FETCH c_pri_id INTO l_n_wlst_usec_pri_id;
4952 	CLOSE c_pri_id;
4953       END validate_derivations_prf;
4954 
4955 
4956       FUNCTION check_insert_update ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_n_wlst_usec_pri_id NUMBER) RETURN VARCHAR2 IS
4957 
4958         CURSOR c_usec_wlst_prf(cp_n_wlst_usec_pri_id NUMBER,cp_preference_code VARCHAR2) IS
4959         SELECT 'X'
4960 	FROM   igs_ps_usec_wlst_prf
4961         WHERE  unit_sec_waitlist_priority_id = cp_n_wlst_usec_pri_id
4962         AND    preference_code = cp_preference_code;
4963 
4964         c_usec_wlst_prf_rec c_usec_wlst_prf%ROWTYPE;
4965 
4966         CURSOR c_usec_wlst_prf1(cp_n_wlst_usec_pri_id NUMBER,
4967                                 cp_preference_code VARCHAR2,
4968   	 		        cp_preference_version VARCHAR2) IS
4969         SELECT 'X'
4970 	FROM   igs_ps_usec_wlst_prf
4971         WHERE  unit_sec_waitlist_priority_id = cp_n_wlst_usec_pri_id
4972         AND    preference_code = cp_preference_code
4973         AND    preference_version = cp_preference_version;
4974         c_usec_wlst_prf1_rec c_usec_wlst_prf1%ROWTYPE;
4975 
4976       BEGIN
4977 	IF p_usec_wlst_rec.priority_value IN ('PROGRAM', 'UNIT_SET') THEN
4978 	  OPEN c_usec_wlst_prf1(l_n_wlst_usec_pri_id,p_usec_wlst_rec.preference_code,p_usec_wlst_rec.preference_version );
4979 	  FETCH c_usec_wlst_prf1 INTO c_usec_wlst_prf1_rec;
4980 	  IF c_usec_wlst_prf1%NOTFOUND THEN
4981 	    CLOSE c_usec_wlst_prf1;
4982 	    RETURN 'I';
4983 	  ELSE
4984 	    CLOSE c_usec_wlst_prf1;
4985 	    RETURN 'U';
4986 	  END IF;
4987 	ELSE
4988 	  OPEN c_usec_wlst_prf(l_n_wlst_usec_pri_id,p_usec_wlst_rec.preference_code );
4989 	  FETCH c_usec_wlst_prf INTO c_usec_wlst_prf_rec;
4990 	  IF c_usec_wlst_prf%NOTFOUND THEN
4991 	    CLOSE c_usec_wlst_prf;
4992 	    RETURN 'I';
4993 	  ELSE
4994 	    CLOSE c_usec_wlst_prf;
4995 	    RETURN 'U';
4996 	  END IF;
4997 	END IF;
4998       END check_insert_update;
4999 
5000 
5001       -- Validate Database Constraints for waitlist preference.
5002       PROCEDURE validate_db_cons_wlstprf ( p_usec_wlst_rec IN OUT NOCOPY igs_ps_generic_pub.usec_waitlist_rec_type,p_insert_update VARCHAR2 ) AS
5003       CURSOR cur_hzp(cp_preference_code VARCHAR2) IS
5004       SELECT 'x'
5005       FROM   hz_parties hp, igs_pe_hz_parties pe
5006       WHERE  hp.party_id = pe.party_id
5007       AND pe.oss_org_unit_cd =cp_preference_code;
5008 
5009       cur_hzp_rec cur_hzp%ROWTYPE;
5010       BEGIN
5011 
5012 	IF(p_insert_update = 'I') THEN
5013 	  /* Unique Key Validation */
5014 	  IF igs_ps_usec_wlst_prf_pkg.get_uk_for_validation(x_preference_code =>p_usec_wlst_rec.preference_code,
5015 							    x_preference_version=>p_usec_wlst_rec.preference_version,
5016 							    x_unit_sec_wlst_priority_id =>l_n_wlst_usec_pri_id) THEN
5017 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5018 	    p_usec_wlst_rec.status := 'W';
5019 
5020 	    RETURN;
5021 	  END IF;
5022 	END IF;
5023 
5024 	 /* Validate FK Constraints */
5025 	IF (p_usec_wlst_rec.priority_value = 'PROGRAM') THEN
5026 	  IF NOT igs_ps_ver_pkg.get_pk_for_validation (p_usec_wlst_rec.preference_code,p_usec_wlst_rec.preference_version  ) THEN
5027 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5028 	    p_usec_wlst_rec.status := 'E';
5029 
5030 	   END IF;
5031 	END IF;
5032 
5033 	IF (p_usec_wlst_rec.priority_value = 'UNIT_SET') THEN
5034 	  IF NOT igs_en_unit_set_pkg.get_pk_for_validation (p_usec_wlst_rec.preference_code,p_usec_wlst_rec.preference_version) THEN
5035 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5036 	    p_usec_wlst_rec.status := 'E';
5037 	  END IF;
5038 	END IF;
5039 
5040 	IF (p_usec_wlst_rec.priority_value = 'CLASS_STD' ) THEN
5041 	  IF NOT igs_pr_class_std_pkg.get_uk_for_validation (p_usec_wlst_rec.preference_code  ) THEN
5042 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5043 	    p_usec_wlst_rec.status := 'E';
5044 	  END IF;
5045 	END IF;
5046 
5047 	IF (p_usec_wlst_rec.priority_value = 'PROGRAM_STAGE') THEN
5048 	  IF NOT igs_ps_stage_type_pkg.get_pk_for_validation (p_usec_wlst_rec.preference_code  ) THEN
5049 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5050 	    p_usec_wlst_rec.status := 'E';
5051 	  END IF;
5052 	END IF;
5053 
5054 	IF (p_usec_wlst_rec.priority_value = 'ORG_UNIT') THEN
5055 	  OPEN  cur_hzp(p_usec_wlst_rec.preference_code );
5056 	  FETCH cur_hzp INTO cur_hzp_rec;
5057 	  IF cur_hzp%NOTFOUND THEN
5058 	    igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'USEC_WLST_PRF', 'LEGACY_TOKENS', FALSE);
5059 	    p_usec_wlst_rec.status := 'E';
5060 	  END IF;
5061 	  CLOSE cur_hzp;
5062 	END IF;
5063 
5064       END validate_db_cons_wlstprf;
5065 
5066     BEGIN
5067 
5068       IF p_usec_wlst_rec.status = 'S' THEN
5069         validate_parameters(p_usec_wlst_rec);
5070 
5071          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5072 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_validate_parameters',
5073 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5074 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5075 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5076 	   'Preference Code:'||p_usec_wlst_rec.preference_code||' '||'Status:'||p_usec_wlst_rec.status);
5077          END IF;
5078 
5079       END IF;
5080 
5081       IF p_usec_wlst_rec.status = 'S' THEN
5082         validate_derivations_prf(p_usec_wlst_rec,l_insert_update);
5083 
5084         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5085 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_validate_derivations_prf',
5086 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5087 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5088 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5089 	   'Preference Code:'||p_usec_wlst_rec.preference_code||' '||'Status:'||p_usec_wlst_rec.status);
5090          END IF;
5091 
5092       END IF;
5093 
5094       --Find out whether it is insert/update of record
5095       l_insert_update:='I';
5096       IF p_usec_wlst_rec.status = 'S' AND p_calling_context IN ('G', 'S') THEN
5097         l_insert_update:= check_insert_update(p_usec_wlst_rec,l_n_wlst_usec_pri_id);
5098 
5099         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5100 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_check_insert_update',
5101 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5102 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5103 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5104 	   'Preference Code:'||p_usec_wlst_rec.preference_code||' '||'Status:'||p_usec_wlst_rec.status);
5105         END IF;
5106 
5107       END IF;
5108 
5109 
5110       IF p_usec_wlst_rec.status = 'S' THEN
5111          validate_db_cons_wlstprf(p_usec_wlst_rec,l_insert_update);
5112 
5113          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5114 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_validate_db_cons_wlstprf',
5115 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5116 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5117 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5118 	   'Preference Code:'||p_usec_wlst_rec.preference_code||' '||'Status:'||p_usec_wlst_rec.status);
5119          END IF;
5120 
5121       END IF;
5122 
5123       IF p_usec_wlst_rec.status = 'S' THEN
5124          igs_ps_validate_generic_pkg.validate_usec_wlstprf(p_usec_wlst_rec,l_insert_update);
5125 
5126           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5127 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_Business_validation',
5128 	   'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5129 	   ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5130 	   p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5131 	   'Preference Code:'||p_usec_wlst_rec.preference_code||' '||'Status:'||p_usec_wlst_rec.status);
5132          END IF;
5133 
5134       END IF;
5135 
5136 
5137 
5138       IF p_usec_wlst_rec.status = 'S' THEN
5139 	IF l_insert_update = 'I' THEN
5140           /* Insert Record */
5141           INSERT INTO igs_ps_usec_wlst_prf
5142           ( unit_sec_waitlist_pref_id,
5143             unit_sec_waitlist_priority_id,
5144             preference_order,
5145             preference_code,
5146             preference_version,
5147             created_by,
5148             creation_date,
5149             last_updated_by,
5150             last_update_date,
5151             last_update_login
5152           )
5153 	  VALUES
5154 	  (
5155             igs_ps_usec_wlst_prf_s.nextval,
5156             l_n_wlst_usec_pri_id,
5157             p_usec_wlst_rec.preference_order,
5158             p_usec_wlst_rec.preference_code,
5159 	    p_usec_wlst_rec.preference_version,
5160             g_n_user_id,
5161             sysdate,
5162             g_n_user_id,
5163             sysdate,
5164             g_n_login_id
5165           );
5166 
5167            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5168 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.Record_Inserted',
5169 	     'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5170 	     ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5171 	     p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5172 	     'Preference Code:'||p_usec_wlst_rec.preference_code);
5173            END IF;
5174 
5175         ELSE ---update
5176 	  UPDATE igs_ps_usec_wlst_prf SET
5177           preference_order= p_usec_wlst_rec.preference_order,
5178           preference_version=p_usec_wlst_rec.preference_version,
5179           last_updated_by = g_n_user_id,
5180           last_update_date= SYSDATE ,
5181           last_update_login= g_n_login_id
5182 	  WHERE unit_sec_waitlist_priority_id  =l_n_wlst_usec_pri_id AND preference_code = p_usec_wlst_rec.preference_code;
5183 
5184           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5185 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.Record_Updated',
5186 	     'Unit code:'||p_usec_wlst_rec.unit_cd||'  '||'Version number:'||p_usec_wlst_rec.version_number||'  '||'teach_cal_alternate_code:'
5187 	     ||p_usec_wlst_rec.teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_wlst_rec.location_cd||'  '||'Unit Class:'||
5188 	     p_usec_wlst_rec.unit_class||'  '||'Priority Value:'||p_usec_wlst_rec.priority_value||'  '||
5189 	     'Preference Code:'||p_usec_wlst_rec.preference_code);
5190           END IF;
5191 
5192         END IF;
5193       END IF;
5194 
5195     END create_wlstprf;
5196 
5197   /* Main Unit Section waitlist Sub Process */
5198   BEGIN
5199 
5200     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5201       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.start_logging_for',
5202                     'Unit Section Waitlist ');
5203     END IF;
5204 
5205     p_c_rec_status := 'S';
5206     FOR I in 1..p_usec_waitlist_tbl.LAST LOOP
5207       l_n_uoo_id:= NULL;
5208       l_n_wlst_usec_pri_id:=NULL;
5209       IF p_usec_waitlist_tbl.EXISTS(I) THEN
5210         p_usec_waitlist_tbl(I).status := 'S';
5211         p_usec_waitlist_tbl(I).msg_from := fnd_msg_pub.count_msg;
5212         trim_values(p_usec_waitlist_tbl(I));
5213 
5214 	--create reserved seating priority
5215 	IF p_usec_waitlist_tbl(I).status = 'S' THEN
5216 
5217            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5218 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.call',
5219 	    'Unit code:'||p_usec_waitlist_tbl(I).unit_cd||'  '||'Version number:'||p_usec_waitlist_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5220 	    ||p_usec_waitlist_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_waitlist_tbl(I).location_cd||'  '||'Unit Class:'||
5221 	    p_usec_waitlist_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_waitlist_tbl(I).priority_value);
5222           END IF;
5223 
5224 	  create_wlstpri(p_usec_waitlist_tbl(I));
5225 
5226 
5227           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5228 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstpri.status_after_creating_priority_record',
5229 	    'Unit code:'||p_usec_waitlist_tbl(I).unit_cd||'  '||'Version number:'||p_usec_waitlist_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5230 	    ||p_usec_waitlist_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_waitlist_tbl(I).location_cd||'  '||'Unit Class:'||
5231 	    p_usec_waitlist_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_waitlist_tbl(I).priority_value||'  '||'Status:'
5232 	    ||p_usec_waitlist_tbl(I).status);
5233           END IF;
5234 
5235         END IF;
5236 
5237 	-- Create reserved seating preference
5238         IF p_usec_waitlist_tbl(I).status = 'S' THEN
5239 	  IF p_usec_waitlist_tbl(I).preference_code IS NOT NULL THEN
5240 
5241             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5242 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.call',
5243 	      'Unit code:'||p_usec_waitlist_tbl(I).unit_cd||'  '||'Version number:'||p_usec_waitlist_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5244 	      ||p_usec_waitlist_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_waitlist_tbl(I).location_cd||'  '||'Unit Class:'||
5245 	      p_usec_waitlist_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_waitlist_tbl(I).priority_value||' '||
5246 	      'Preference Code:'||p_usec_waitlist_tbl(I).preference_code);
5247             END IF;
5248 
5249             create_wlstprf(p_usec_waitlist_tbl(I));
5250 
5251             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5252 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.create_wlstprf.status_after_creating_prefenrence_record',
5253 	      'Unit code:'||p_usec_waitlist_tbl(I).unit_cd||'  '||'Version number:'||p_usec_waitlist_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5254 	      ||p_usec_waitlist_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_waitlist_tbl(I).location_cd||'  '||'Unit Class:'||
5255 	      p_usec_waitlist_tbl(I).unit_class||'  '||'Priority Value:'||p_usec_waitlist_tbl(I).priority_value||'  '||
5256 	      'Preference Code:'||p_usec_waitlist_tbl(I).preference_code||' '||'Status:'||p_usec_waitlist_tbl(I).status);
5257             END IF;
5258 
5259           END IF;
5260 	END IF;
5261 
5262         IF p_usec_waitlist_tbl(I).status = 'S' THEN
5263            p_usec_waitlist_tbl(I).msg_from := NULL;
5264            p_usec_waitlist_tbl(I).msg_to := NULL;
5265         ELSIF  p_usec_waitlist_tbl(I).status = 'A' THEN
5266 	   p_usec_waitlist_tbl(I).msg_from  := p_usec_waitlist_tbl(I).msg_from + 1;
5267 	   p_usec_waitlist_tbl(I).msg_to := fnd_msg_pub.count_msg;
5268 	ELSE
5269            p_c_rec_status :=  p_usec_waitlist_tbl(I).status;
5270            p_usec_waitlist_tbl(I).msg_from :=  p_usec_waitlist_tbl(I).msg_from + 1;
5271            p_usec_waitlist_tbl(I).msg_to := fnd_msg_pub.count_msg;
5272           IF p_c_rec_status = 'E' THEN
5273             RETURN;
5274           END IF;
5275         END IF;
5276 
5277       END IF;--exists
5278     END LOOP;
5279 
5280     /* Post Insert/Update Checks */
5281     IF NOT igs_ps_validate_generic_pkg.post_usec_wlst(p_usec_waitlist_tbl,l_tbl_uoo) THEN
5282       p_c_rec_status := 'E';
5283     END IF;
5284     l_tbl_uoo.DELETE;
5285 
5286     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5287       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_waitlist.after_import_status',p_c_rec_status);
5288     END IF;
5289 
5290   END create_usec_waitlist;
5291 
5292 
5293   --Unit Section Notes
5294   PROCEDURE create_usec_notes(
5295           p_usec_notes_tbl  IN OUT NOCOPY igs_ps_generic_pub.usec_notes_tbl_type,
5296           p_c_rec_status    OUT NOCOPY VARCHAR2,
5297 	  p_calling_context IN VARCHAR2
5298   ) AS
5299   /***********************************************************************************************
5300     Created By     :  Sommukhe
5301     Date Created By: 17-Jun-2005
5302     Purpose        :  This procedure is a sub process to import records of Unit Section Notes.
5303 
5304     Known limitations,enhancements,remarks:
5305     Change History (in reverse chronological order)
5306     Who         When            What
5307   ********************************************************************************************** */
5308      l_insert_update      VARCHAR2(1);
5309      l_n_uoo_id           igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
5310      l_n_reference_number igs_ge_note.reference_number%TYPE;
5311      l_c_cal_type         igs_ps_unit_ofr_opt_all.cal_type%TYPE;
5312      l_n_seq_num          igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
5313 
5314     /* Private Procedures for create_usec_notes */
5315     PROCEDURE trim_values ( p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type ) AS
5316     BEGIN
5317       p_usec_notes_rec.unit_cd := trim(p_usec_notes_rec.unit_cd);
5318       p_usec_notes_rec.version_number := trim(p_usec_notes_rec.version_number);
5319       p_usec_notes_rec.teach_cal_alternate_code := trim(p_usec_notes_rec.teach_cal_alternate_code);
5320       p_usec_notes_rec.location_cd := trim(p_usec_notes_rec.location_cd);
5321       p_usec_notes_rec.unit_class := trim(p_usec_notes_rec.unit_class);
5322       p_usec_notes_rec.reference_number := trim(p_usec_notes_rec.reference_number);
5323       p_usec_notes_rec.crs_note_type := trim(p_usec_notes_rec.crs_note_type);
5324       p_usec_notes_rec.note_text := trim(p_usec_notes_rec.note_text);
5325 
5326     END trim_values;
5327 
5328     -- validate parameters passed.
5329     PROCEDURE validate_parameters ( p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type ) AS
5330     BEGIN
5331 
5332       /* Check for Mandatory Parameters */
5333       IF p_usec_notes_rec.unit_cd IS NULL OR p_usec_notes_rec.unit_cd = FND_API.G_MISS_CHAR THEN
5334         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
5335         p_usec_notes_rec.status := 'E';
5336       END IF;
5337       IF p_usec_notes_rec.version_number IS NULL OR p_usec_notes_rec.version_number = FND_API.G_MISS_NUM THEN
5338         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
5339         p_usec_notes_rec.status := 'E';
5340       END IF;
5341       IF p_usec_notes_rec.teach_cal_alternate_code IS NULL OR p_usec_notes_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
5342         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5343         p_usec_notes_rec.status := 'E';
5344       END IF;
5345       IF p_usec_notes_rec.location_cd IS NULL  OR p_usec_notes_rec.location_cd= FND_API.G_MISS_CHAR THEN
5346         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
5347         p_usec_notes_rec.status := 'E';
5348       END IF;
5349       IF p_usec_notes_rec.unit_class IS NULL OR p_usec_notes_rec.unit_class = FND_API.G_MISS_CHAR THEN
5350         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
5351         p_usec_notes_rec.status := 'E';
5352       END IF;
5353       IF p_usec_notes_rec.crs_note_type IS NULL  OR p_usec_notes_rec.crs_note_type = FND_API.G_MISS_CHAR  THEN
5354         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'CRS_NOTE_TYPE', 'LEGACY_TOKENS', FALSE);
5355         p_usec_notes_rec.status := 'E';
5356       END IF;
5357 
5358     END validate_parameters;
5359 
5360 
5361     -- Check for Update
5362     FUNCTION check_insert_update ( p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type ) RETURN VARCHAR2 IS
5363 
5364     BEGIN
5365 
5366       IF p_usec_notes_rec.reference_number IS NULL THEN
5367 	RETURN 'I';
5368       ELSE
5369 	RETURN 'U';
5370       END IF;
5371     END check_insert_update;
5372 
5373     -- Carry out derivations and validate them
5374     PROCEDURE validate_derivations ( p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type ) AS
5375       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
5376       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
5377       l_c_message  VARCHAR2(30);
5378     BEGIN
5379 
5380 
5381       -- Derive Calander Type and Sequence Number
5382       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_notes_rec.teach_cal_alternate_code,
5383                                              p_cal_type           => l_c_cal_type,
5384                                              p_ci_sequence_number => l_n_seq_num,
5385                                              p_start_dt           => l_d_start_dt,
5386                                              p_end_dt             => l_d_end_dt,
5387                                              p_return_status      => l_c_message );
5388       IF ( l_c_message <> 'SINGLE' ) THEN
5389         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5390         p_usec_notes_rec.status := 'E';
5391       END IF;
5392 
5393 
5394       -- Derive uoo_id
5395       l_c_message := NULL;
5396       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_notes_rec.unit_cd,
5397                                             p_ver_num    => p_usec_notes_rec.version_number,
5398                                             p_cal_type   => l_c_cal_type,
5399                                             p_seq_num    => l_n_seq_num,
5400                                             p_loc_cd     => p_usec_notes_rec.location_cd,
5401                                             p_unit_class => p_usec_notes_rec.unit_class,
5402                                             p_uoo_id     => l_n_uoo_id,
5403                                             p_message    => l_c_message );
5404       IF ( l_c_message IS NOT NULL ) THEN
5405         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5406         p_usec_notes_rec.status := 'E';
5407       END IF;
5408 
5409 
5410     END validate_derivations;
5411 
5412     -- Validate Database Constraints
5413     PROCEDURE validate_db_cons ( p_usec_notes_rec IN OUT NOCOPY igs_ps_generic_pub.usec_notes_rec_type,p_insert_update VARCHAR2 ) AS
5414       CURSOR cur_ref_num(cp_uoo_id igs_ps_unt_ofr_opt_n.uoo_id%TYPE,
5415                          cp_reference_number igs_ps_unt_ofr_opt_n.reference_number%TYPE) IS
5416       SELECT b.note_text
5417       FROM   igs_ps_unt_ofr_opt_n a,igs_ge_note b
5418       WHERE  a.uoo_id=cp_uoo_id
5419       AND    a.reference_number=cp_reference_number
5420       AND    a.reference_number=b.reference_number;
5421       l_cur_ref_num  cur_ref_num%ROWTYPE;
5422 
5423     BEGIN
5424       IF (p_insert_update = 'U') THEN
5425 
5426 	/* While update check if the reference number belong to the passed unit section */
5427 	OPEN cur_ref_num(l_n_uoo_id, p_usec_notes_rec.reference_number);
5428 	FETCH cur_ref_num INTO l_cur_ref_num;
5429 	IF cur_ref_num%NOTFOUND THEN
5430 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'REFERENCE_NUMBER', 'LEGACY_TOKENS', FALSE);
5431 	  p_usec_notes_rec.status := 'E';
5432         ELSE
5433 	  IF  p_usec_notes_rec.note_text = FND_API.G_MISS_CHAR THEN
5434 	      p_usec_notes_rec.note_text :=NULL;
5435           ELSIF p_usec_notes_rec.note_text IS NULL THEN
5436 	      p_usec_notes_rec.note_text :=l_cur_ref_num.note_text;
5437 	  END IF;
5438         END IF;
5439         CLOSE cur_ref_num;
5440 
5441       END IF;
5442 
5443 
5444       /* Validate FK Constraints */
5445       IF NOT igs_ps_note_type_pkg.get_pk_for_validation ( p_usec_notes_rec.crs_note_type) THEN
5446         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'CRS_NOTE_TYPE', 'LEGACY_TOKENS', FALSE);
5447         p_usec_notes_rec.status := 'E';
5448       END IF;
5449 
5450       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
5451         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5452         p_usec_notes_rec.status := 'E';
5453       END IF;
5454 
5455     END validate_db_cons;
5456 
5457   /* Main Unit Section Notes Sub Process */
5458   BEGIN
5459 
5460     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5461       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.start_logging_for',
5462                     'Unit Section Notes');
5463     END IF;
5464 
5465     p_c_rec_status := 'S';
5466     FOR I in 1..p_usec_notes_tbl.LAST LOOP
5467 
5468       IF p_usec_notes_tbl.EXISTS(I) THEN
5469         l_n_uoo_id := NULL;
5470 	l_c_cal_type  := NULL;
5471         l_n_seq_num   := NULL;
5472         p_usec_notes_tbl(I).status := 'S';
5473         p_usec_notes_tbl(I).msg_from := fnd_msg_pub.count_msg;
5474         trim_values(p_usec_notes_tbl(I) );
5475 
5476         validate_parameters ( p_usec_notes_tbl(I) );
5477 
5478 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5479 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_after_validate_parameters',
5480 	 'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5481 	  ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5482 	  p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5483 	  'Status:'||p_usec_notes_tbl(I).status);
5484         END IF;
5485 
5486 	IF p_usec_notes_tbl(I).status = 'S' THEN
5487           validate_derivations ( p_usec_notes_tbl(I));
5488 
5489           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5490 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_after_validate_derivations',
5491 	   'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5492 	    ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5493 	    p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5494 	    'Status:'||p_usec_notes_tbl(I).status);
5495           END IF;
5496 
5497         END IF;
5498 
5499 	--Find out whether it is insert/update of record
5500         l_insert_update:='I';
5501         IF p_usec_notes_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
5502             l_insert_update:= check_insert_update(p_usec_notes_tbl(I));
5503 
5504             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5505 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_check_insert_update',
5506 	     'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5507 	      ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5508 	      p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5509 	      'Status:'||p_usec_notes_tbl(I).status);
5510             END IF;
5511 
5512         END IF;
5513 
5514 	-- Find out whether record can go for import in context of cancelled/aborted
5515 	IF  p_usec_notes_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
5516 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
5517 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
5518 	    fnd_msg_pub.add;
5519 	    p_usec_notes_tbl(I).status := 'A';
5520 	  END IF;
5521 
5522           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5523 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_after_check_import_allowed',
5524 	   'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5525 	    ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5526 	    p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5527 	    'Status:'||p_usec_notes_tbl(I).status);
5528           END IF;
5529 
5530 	END IF;
5531 
5532 	IF p_usec_notes_tbl(I).status = 'S' THEN
5533           validate_db_cons ( p_usec_notes_tbl(I),l_insert_update );
5534 
5535           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5536 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_after_validate_db_cons',
5537 	   'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5538 	    ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5539 	    p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5540 	    'Status:'||p_usec_notes_tbl(I).status);
5541           END IF;
5542 
5543         END IF;
5544 
5545 	/* Business Validations */
5546         /* Proceed with business validations only if the status is Success, 'S' */
5547         IF p_usec_notes_tbl(I).status = 'S' THEN
5548           igs_ps_validate_generic_pkg.validate_usec_notes ( p_usec_notes_tbl(I),l_n_uoo_id );
5549 
5550           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5551 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.status_after_validate_usec_notes',
5552 	   'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5553 	    ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5554 	    p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type||'  '||
5555 	    'Status:'||p_usec_notes_tbl(I).status);
5556           END IF;
5557 
5558         END IF;
5559 
5560         IF p_usec_notes_tbl(I).status = 'S'  THEN
5561 	  IF l_insert_update = 'I' THEN
5562              /* Insert Record */
5563              INSERT INTO IGS_GE_NOTE
5564              (reference_number,
5565               s_note_format_type,
5566               note_text,
5567               created_by,
5568               creation_date,
5569               last_updated_by,
5570               last_update_date,
5571               last_update_login
5572              )
5573              VALUES
5574              (IGS_GE_NOTE_RF_NUM_S.nextval,
5575 	     'TEXT',
5576              p_usec_notes_tbl(I).note_text,
5577              g_n_user_id,
5578              SYSDATE,
5579              g_n_user_id,
5580              SYSDATE,
5581              g_n_login_id
5582              )RETURNING reference_number INTO l_n_reference_number;
5583 
5584              INSERT INTO igs_ps_unt_ofr_opt_n
5585              (unit_cd,
5586              version_number,
5587              cal_type,
5588              ci_sequence_number,
5589              location_cd,
5590              unit_class,
5591              reference_number,
5592              uoo_id,
5593              crs_note_type,
5594              created_by,
5595              creation_date,
5596              last_updated_by,
5597              last_update_date,
5598              last_update_login
5599              )
5600              VALUES
5601              (p_usec_notes_tbl(I).unit_cd,
5602 	     p_usec_notes_tbl(I).version_number,
5603              l_c_cal_type,
5604              l_n_seq_num,
5605 	     p_usec_notes_tbl(I).location_cd,
5606 	     p_usec_notes_tbl(I).unit_class,
5607              l_n_reference_number,
5608 	     l_n_uoo_id,
5609              p_usec_notes_tbl(I).crs_note_type,
5610              g_n_user_id,
5611              SYSDATE,
5612              g_n_user_id,
5613              SYSDATE,
5614              g_n_login_id
5615              );
5616 
5617 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5618 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.Record_Inserted',
5619 	      'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5620 	       ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5621 	       p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type);
5622              END IF;
5623 
5624          ELSE
5625 	      /*Update record*/
5626               UPDATE igs_ps_unt_ofr_opt_n
5627 	      SET crs_note_type = p_usec_notes_tbl(I).crs_note_type,
5628 	      last_updated_by = g_n_user_id,
5629 	      last_update_date = SYSDATE,
5630 	      last_update_login = g_n_login_id
5631 	      WHERE reference_number = p_usec_notes_tbl(I).reference_number;
5632 
5633               UPDATE igs_ge_note
5634 	      SET note_text = p_usec_notes_tbl(I).note_text,
5635 	      last_updated_by = g_n_user_id,
5636 	      last_update_date = SYSDATE,
5637 	      last_update_login = g_n_login_id
5638 	      WHERE reference_number = p_usec_notes_tbl(I).reference_number;
5639 
5640               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5641 	        fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.Record_updated',
5642 	       'Unit code:'||p_usec_notes_tbl(I).unit_cd||'  '||'Version number:'||p_usec_notes_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
5643 	        ||p_usec_notes_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_notes_tbl(I).location_cd||'  '||'Unit Class:'||
5644 	        p_usec_notes_tbl(I).unit_class||'  '||'Crs Note Type:'||p_usec_notes_tbl(I).crs_note_type);
5645               END IF;
5646 
5647 	 END IF;
5648        END IF;--insert/update
5649 
5650        IF  p_usec_notes_tbl(I).status = 'S' THEN
5651 	 p_usec_notes_tbl(I).msg_from := NULL;
5652 	 p_usec_notes_tbl(I).msg_to := NULL;
5653        ELSIF   p_usec_notes_tbl(I).status = 'A' THEN
5654 	 p_usec_notes_tbl(I).msg_from  :=  p_usec_notes_tbl(I).msg_from + 1;
5655 	 p_usec_notes_tbl(I).msg_to := fnd_msg_pub.count_msg;
5656        ELSE
5657 	 p_c_rec_status := p_usec_notes_tbl(I).status;
5658 	 p_usec_notes_tbl(I).msg_from := p_usec_notes_tbl(I).msg_from+1;
5659 	 p_usec_notes_tbl(I).msg_to := fnd_msg_pub.count_msg;
5660 	 IF p_usec_notes_tbl(I).status = 'E' THEN
5661 	   RETURN;
5662 	 END IF;
5663        END IF;
5664 
5665      END IF;--exists
5666    END LOOP;
5667 
5668    IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5669      fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_notes.after_import_status',p_c_rec_status);
5670    END IF;
5671 
5672  END create_usec_notes;
5673 
5674  ---Unit section assesment
5675  PROCEDURE create_usec_assmnt(
5676           p_usec_assmnt_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_tbl_type,
5677           p_c_rec_status    OUT NOCOPY VARCHAR2,
5678 	  p_calling_context IN VARCHAR2
5679   )AS
5680 
5681   /***********************************************************************************************
5682     Created By     :  Sommukhe
5683     Date Created By: 17-Jun-2005
5684     Purpose        :  This procedure is a sub process to import records of Unit Section Assessment(Exam).
5685 
5686     Known limitations,enhancements,remarks:
5687     Change History (in reverse chronological order)
5688     Who         When            What
5689   ***********************************************************************************************/
5690      l_insert_update      VARCHAR2(1);
5691      l_n_uoo_id           igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
5692      l_n_building_id      NUMBER;
5693      l_n_room_id          NUMBER;
5694      l_d_exam_start_time  igs_ps_usec_as.exam_start_time%TYPE;
5695      l_d_exam_end_time	  igs_ps_usec_as.exam_end_time%TYPE;
5696 
5697     /* Private Procedures for create_usec_assmnt */
5698     PROCEDURE trim_values ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type ) AS
5699     BEGIN
5700 
5701       p_usec_assmnt_rec.unit_cd := trim(p_usec_assmnt_rec.unit_cd);
5702       p_usec_assmnt_rec.version_number := trim(p_usec_assmnt_rec.version_number);
5703       p_usec_assmnt_rec.teach_cal_alternate_code := trim(p_usec_assmnt_rec.teach_cal_alternate_code);
5704       p_usec_assmnt_rec.location_cd := trim(p_usec_assmnt_rec.location_cd);
5705       p_usec_assmnt_rec.unit_class := trim(p_usec_assmnt_rec.unit_class);
5706       p_usec_assmnt_rec.final_exam_date := TRUNC(p_usec_assmnt_rec.final_exam_date);
5707       p_usec_assmnt_rec.exam_start_time := trim(p_usec_assmnt_rec.exam_start_time);
5708       p_usec_assmnt_rec.exam_end_time := trim(p_usec_assmnt_rec.exam_end_time);
5709       p_usec_assmnt_rec.exam_location_cd := trim(p_usec_assmnt_rec.exam_location_cd);
5710       p_usec_assmnt_rec.building_code := trim(p_usec_assmnt_rec.building_code);
5711       p_usec_assmnt_rec.room_code := trim(p_usec_assmnt_rec.room_code);
5712 
5713     END trim_values;
5714 
5715     -- validate parameters passed.
5716     PROCEDURE validate_parameters ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type ) AS
5717     BEGIN
5718 
5719       /* Check for Mandatory Parameters */
5720       IF p_usec_assmnt_rec.unit_cd IS NULL OR p_usec_assmnt_rec.unit_cd = FND_API.G_MISS_CHAR THEN
5721         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CD', 'LEGACY_TOKENS', FALSE);
5722         p_usec_assmnt_rec.status := 'E';
5723       END IF;
5724       IF p_usec_assmnt_rec.version_number IS NULL OR p_usec_assmnt_rec.version_number = FND_API.G_MISS_NUM THEN
5725         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_VER_NUM', 'LEGACY_TOKENS', FALSE);
5726         p_usec_assmnt_rec.status := 'E';
5727       END IF;
5728       IF p_usec_assmnt_rec.teach_cal_alternate_code IS NULL OR p_usec_assmnt_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
5729         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5730         p_usec_assmnt_rec.status := 'E';
5731       END IF;
5732       IF p_usec_assmnt_rec.location_cd IS NULL  OR p_usec_assmnt_rec.location_cd= FND_API.G_MISS_CHAR THEN
5733         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD', 'LEGACY_TOKENS', FALSE);
5734         p_usec_assmnt_rec.status := 'E';
5735       END IF;
5736       IF p_usec_assmnt_rec.unit_class IS NULL OR p_usec_assmnt_rec.unit_class = FND_API.G_MISS_CHAR THEN
5737         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'UNIT_CLASS', 'LEGACY_TOKENS', FALSE);
5738         p_usec_assmnt_rec.status := 'E';
5739       END IF;
5740       IF p_usec_assmnt_rec.final_exam_date IS NULL  OR p_usec_assmnt_rec.final_exam_date = FND_API.G_MISS_DATE  THEN
5741         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'FINAL_EXAM_DATE', 'LEGACY_TOKENS', FALSE);
5742         p_usec_assmnt_rec.status := 'E';
5743       END IF;
5744       IF p_usec_assmnt_rec.exam_start_time IS NULL  OR p_usec_assmnt_rec.exam_start_time = FND_API.G_MISS_CHAR  THEN
5745         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'EXAM_START_TIME', 'LEGACY_TOKENS', FALSE);
5746         p_usec_assmnt_rec.status := 'E';
5747       END IF;
5748       IF p_usec_assmnt_rec.exam_end_time IS NULL  OR p_usec_assmnt_rec.exam_end_time = FND_API.G_MISS_CHAR  THEN
5749         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'EXAM_END_TIME', 'LEGACY_TOKENS', FALSE);
5750         p_usec_assmnt_rec.status := 'E';
5751       END IF;
5752       IF p_usec_assmnt_rec.exam_location_cd IS NULL  OR p_usec_assmnt_rec.exam_location_cd = FND_API.G_MISS_CHAR  THEN
5753         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'EXAM_LOCATION_CD', 'LEGACY_TOKENS', FALSE);
5754         p_usec_assmnt_rec.status := 'E';
5755       END IF;
5756 
5757     END validate_parameters;
5758 
5759 
5760     -- Check for Update
5761     FUNCTION check_insert_update ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type ) RETURN VARCHAR2 IS
5762     CURSOR c_usec_as(cp_n_uoo_id NUMBER) IS
5763     SELECT 'X'
5764     FROM igs_ps_usec_as
5765     WHERE uoo_id = cp_n_uoo_id;
5766 
5767     c_usec_as_rec c_usec_as%ROWTYPE;
5768     BEGIN
5769       OPEN c_usec_as(l_n_uoo_id);
5770       FETCH c_usec_as INTO c_usec_as_rec;
5771       IF c_usec_as%NOTFOUND THEN
5772         CLOSE c_usec_as;
5773         RETURN 'I';
5774       ELSE
5775         CLOSE c_usec_as;
5776         RETURN 'U';
5777       END IF;
5778     END check_insert_update;
5779 
5780     -- Carry out derivations and validate them
5781     PROCEDURE validate_derivations ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type ) AS
5782 
5783       CURSOR c_bld_id ( cp_building_cd igs_ad_building_all.building_cd%TYPE,
5784 			cp_location_cd igs_ad_building_all.location_cd%TYPE ) IS
5785       SELECT building_id
5786       FROM   igs_ad_building_all
5787       WHERE  building_cd = cp_building_cd
5788       AND    location_cd = cp_location_cd;
5789 
5790       CURSOR c_room_id ( cp_building_id igs_ad_building_all.building_id%TYPE,
5791 			 cp_room_cd igs_ad_room_all.room_cd%TYPE ) IS
5792       SELECT room_id
5793       FROM   igs_ad_room_all
5794       WHERE  room_cd = cp_room_cd
5795       AND    building_id = cp_building_id;
5796 
5797 
5798       l_c_cal_type igs_ps_unit_ofr_opt_all.cal_type%TYPE;
5799       l_n_seq_num  igs_ps_unit_ofr_opt_all.ci_sequence_number%TYPE;
5800       l_d_start_dt igs_ca_inst_all.start_dt%TYPE;
5801       l_d_end_dt   igs_ca_inst_all.end_dt%TYPE;
5802       l_c_message  VARCHAR2(30);
5803     BEGIN
5804 
5805 
5806       -- Derive Calander Type and Sequence Number
5807       igs_ge_gen_003.get_calendar_instance ( p_alternate_cd       => p_usec_assmnt_rec.teach_cal_alternate_code,
5808                                              p_cal_type           => l_c_cal_type,
5809                                              p_ci_sequence_number => l_n_seq_num,
5810                                              p_start_dt           => l_d_start_dt,
5811                                              p_end_dt             => l_d_end_dt,
5812                                              p_return_status      => l_c_message );
5813       IF ( l_c_message <> 'SINGLE' ) THEN
5814         igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD', 'LEGACY_TOKENS', FALSE);
5815         p_usec_assmnt_rec.status := 'E';
5816       END IF;
5817 
5818 
5819       -- Derive uoo_id
5820       l_c_message := NULL;
5821       igs_ps_validate_lgcy_pkg.get_uoo_id ( p_unit_cd    => p_usec_assmnt_rec.unit_cd,
5822                                             p_ver_num    => p_usec_assmnt_rec.version_number,
5823                                             p_cal_type   => l_c_cal_type,
5824                                             p_seq_num    => l_n_seq_num,
5825                                             p_loc_cd     => p_usec_assmnt_rec.location_cd,
5826                                             p_unit_class => p_usec_assmnt_rec.unit_class,
5827                                             p_uoo_id     => l_n_uoo_id,
5828                                             p_message    => l_c_message );
5829       IF ( l_c_message IS NOT NULL ) THEN
5830         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5831         p_usec_assmnt_rec.status := 'E';
5832       END IF;
5833 
5834 
5835       -- Derive Building Identifier and associated Room Identifier.
5836       IF p_usec_assmnt_rec.building_code IS NOT NULL AND p_usec_assmnt_rec.building_code <> FND_API.G_MISS_CHAR THEN
5837         OPEN c_bld_id ( p_usec_assmnt_rec.building_code, p_usec_assmnt_rec.exam_location_cd );
5838         FETCH c_bld_id INTO l_n_building_id;
5839         IF ( c_bld_id%NOTFOUND ) THEN
5840           igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
5841            p_usec_assmnt_rec.status := 'E';
5842         END IF;
5843         CLOSE c_bld_id;
5844 
5845         -- Derive Room Identifier
5846         IF p_usec_assmnt_rec.room_code IS NOT NULL AND p_usec_assmnt_rec.room_code <> FND_API.G_MISS_CHAR THEN
5847           OPEN c_room_id ( l_n_building_id, p_usec_assmnt_rec.room_code );
5848           FETCH c_room_id INTO l_n_room_id;
5849           IF ( c_room_id%NOTFOUND ) THEN
5850             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
5851             p_usec_assmnt_rec.status := 'E';
5852           END IF;
5853           CLOSE c_room_id;
5854         END IF;
5855       END IF;
5856 
5857 
5858       --validate/derive date fields with time comp
5859       -- exam_sart_time in proper format
5860 
5861       BEGIN
5862         IF (p_usec_assmnt_rec.exam_start_time IS NOT NULL) THEN
5863           l_d_exam_start_time:= TO_DATE ('1900/01/01'||p_usec_assmnt_rec.exam_start_time, 'YYYY/MM/DD HH24:MI');
5864 	  p_usec_assmnt_rec.exam_start_time := TO_CHAR(l_d_exam_start_time,'HH24:MI');
5865         END IF;
5866      EXCEPTION
5867      WHEN OTHERS THEN
5868         FND_MESSAGE.set_name ('IGS','IGS_GE_INVALID_DATE_FORMAT');
5869         fnd_msg_pub.add;
5870         p_usec_assmnt_rec.status := 'E';
5871      END;
5872 
5873      --exam end time in proper format
5874      BEGIN
5875        IF (p_usec_assmnt_rec.exam_end_time IS NOT NULL) THEN
5876           l_d_exam_end_time:= TO_DATE ('1900/01/01'||p_usec_assmnt_rec.exam_end_time, 'YYYY/MM/DD HH24:MI');
5877          p_usec_assmnt_rec.exam_end_time := TO_CHAR(l_d_exam_end_time,'HH24:MI');
5878 
5879        END IF;
5880      EXCEPTION
5881      WHEN OTHERS THEN
5882         FND_MESSAGE.set_name ('IGS','IGS_GE_INVALID_DATE_FORMAT');
5883         fnd_msg_pub.add;
5884         p_usec_assmnt_rec.status := 'E';
5885      END;
5886 
5887     END validate_derivations;
5888 
5889 
5890     PROCEDURE assign_defaults ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type, p_insert IN VARCHAR2) IS
5891      CURSOR cur_usec_exam ( cp_uoo_id IN NUMBER) IS
5892      SELECT *
5893      FROM   igs_ps_usec_as
5894      WHERE  uoo_id = cp_uoo_id;
5895      l_cur_usec_exam cur_usec_exam%ROWTYPE;
5896 
5897      CURSOR cur_room (cp_building_id IN NUMBER, cp_room_cd IN VARCHAR2) IS
5898      SELECT room_id
5899      FROM   igs_ad_room
5900      WHERE  room_cd=cp_room_cd
5901      AND    building_id=cp_building_id;
5902 
5903     BEGIN
5904 
5905       IF p_insert = 'U' THEN
5906 
5907         OPEN cur_usec_exam(l_n_uoo_id);
5908 	FETCH cur_usec_exam INTO l_cur_usec_exam;
5909 	CLOSE cur_usec_exam;
5910 
5911 	IF p_usec_assmnt_rec.building_code IS NULL THEN
5912 	  l_n_building_id := l_cur_usec_exam.building_code;
5913         ELSIF  p_usec_assmnt_rec.building_code = FND_API.G_MISS_CHAR THEN
5914 	  l_n_building_id := NULL;
5915 	END IF;
5916 
5917 	IF p_usec_assmnt_rec.room_code IS NULL THEN
5918 	   l_n_room_id := l_cur_usec_exam.room_code;
5919         ELSIF  p_usec_assmnt_rec.room_code = FND_API.G_MISS_CHAR THEN
5920 	  l_n_room_id := NULL;
5921         ELSIF p_usec_assmnt_rec.room_code IS NOT NULL THEN
5922           OPEN cur_room(l_n_building_id,p_usec_assmnt_rec.room_code);
5923 	  FETCH cur_room INTO l_n_room_id;
5924 	  IF cur_room%NOTFOUND THEN
5925             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
5926             p_usec_assmnt_rec.status := 'E';
5927 	  END IF;
5928           CLOSE cur_room;
5929 	END IF;
5930 
5931       END IF;
5932 
5933     END assign_defaults;
5934 
5935     -- Validate Database Constraints
5936     PROCEDURE validate_db_cons ( p_usec_assmnt_rec IN OUT NOCOPY igs_ps_generic_pub.usec_assmnt_rec_type,p_insert_update VARCHAR2 ) AS
5937     CURSOR c_loc_cd(cp_location_cd igs_ad_location_all.location_cd%TYPE) IS
5938     SELECT 'X'
5939     FROM   igs_ad_location_all
5940     WHERE  location_cd = cp_location_cd
5941     AND    closed_ind = 'N';
5942 
5943     c_loc_cd_rec c_loc_cd%ROWTYPE;
5944 
5945     BEGIN
5946       IF (p_insert_update = 'I') THEN
5947 	/* Unique Key Validation */
5948 	IF igs_ps_usec_as_pkg.get_uk_for_validation (x_building_code =>l_n_building_id,
5949 						     x_final_exam_date =>p_usec_assmnt_rec.final_exam_date,
5950 						     x_location_cd =>p_usec_assmnt_rec.exam_location_cd,
5951 						     x_room_code =>l_n_room_id,
5952 						     x_uoo_id =>l_n_uoo_id) THEN
5953 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'USEC_ASSMNT', 'LEGACY_TOKENS', FALSE);
5954 	  p_usec_assmnt_rec.status := 'W';
5955 	  RETURN;
5956 	END IF;
5957       END IF;
5958 
5959 
5960       /* Validate FK Constraints */
5961       OPEN c_loc_cd(p_usec_assmnt_rec.exam_location_cd);
5962       FETCH c_loc_cd INTO c_loc_cd_rec;
5963       IF c_loc_cd%NOTFOUND THEN
5964         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'EXAM_LOCATION_CD', 'LEGACY_TOKENS', FALSE);
5965         p_usec_assmnt_rec.status := 'E';
5966       END IF;
5967       CLOSE c_loc_cd;
5968 
5969 
5970       -- Check for the existence of Buildings
5971       IF  l_n_building_id IS NOT NULL THEN
5972         IF NOT igs_ad_building_pkg.get_pk_for_validation ( l_n_building_id ) THEN
5973           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
5974           p_usec_assmnt_rec.status := 'E';
5975         END IF;
5976       END IF;
5977 
5978       -- Check for the existence of Rooms
5979       IF l_n_room_id IS NOT NULL THEN
5980         IF NOT igs_ad_room_pkg.get_pk_for_validation ( l_n_room_id ) THEN
5981           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
5982           p_usec_assmnt_rec.status := 'E';
5983         END IF;
5984       END IF;
5985 
5986 
5987       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation ( l_n_uoo_id ) THEN
5988         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
5989         p_usec_assmnt_rec.status := 'E';
5990       END IF;
5991 
5992     END validate_db_cons;
5993 
5994   /* Main Unit Section Assessment Sub Process */
5995   BEGIN
5996 
5997     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5998     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.start_logging_for',
5999                     'Unit Section Assessment');
6000     END IF;
6001 
6002     p_c_rec_status := 'S';
6003     FOR I in 1..p_usec_assmnt_tbl.LAST LOOP
6004 
6005 
6006       IF p_usec_assmnt_tbl.EXISTS(I) THEN
6007         l_n_uoo_id := NULL;
6008 	l_d_exam_start_time:=NULL;
6009         l_d_exam_end_time :=NULL;
6010 	l_n_building_id :=NULL;
6011         l_n_room_id  :=NULL;
6012 	p_usec_assmnt_tbl(I).status := 'S';
6013         p_usec_assmnt_tbl(I).msg_from := fnd_msg_pub.count_msg;
6014 	trim_values(p_usec_assmnt_tbl(I) );
6015 
6016         validate_parameters ( p_usec_assmnt_tbl(I) );
6017 
6018         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6019 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_validate_parameters',
6020 	 'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6021 	  ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6022 	  p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6023         END IF;
6024 
6025 	IF p_usec_assmnt_tbl(I).status = 'S' THEN
6026           validate_derivations ( p_usec_assmnt_tbl(I));
6027 
6028           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6029 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_validate_derivations',
6030 	   'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6031 	    ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6032 	    p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6033           END IF;
6034 
6035         END IF;
6036 
6037 	--Find out whether it is insert/update of record
6038         l_insert_update:='I';
6039         IF p_usec_assmnt_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
6040            l_insert_update:= check_insert_update(p_usec_assmnt_tbl(I));
6041 
6042            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6043 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_check_insert_update',
6044 	     'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6045 	      ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6046 	      p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6047            END IF;
6048 
6049         END IF;
6050 
6051 	-- Find out whether record can go for import in context of cancelled/aborted
6052 	IF  p_usec_assmnt_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
6053 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
6054 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
6055 	    fnd_msg_pub.add;
6056 	    p_usec_assmnt_tbl(I).status := 'A';
6057 	  END IF;
6058 
6059            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6060 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_check_import_allowed',
6061 	     'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6062 	      ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6063 	      p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6064            END IF;
6065 
6066 	END IF;
6067 
6068         --Defaulting depending upon insert or update
6069 	IF p_usec_assmnt_tbl(I).status = 'S' THEN
6070 	  assign_defaults(p_usec_assmnt_tbl(I),l_insert_update);
6071 
6072           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6073 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_assign_defaults',
6074 	   'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6075 	    ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6076 	    p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6077           END IF;
6078 
6079 	END IF;
6080 
6081 	IF p_usec_assmnt_tbl(I).status = 'S' THEN
6082           validate_db_cons ( p_usec_assmnt_tbl(I),l_insert_update );
6083 
6084           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6085 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_validate_db_cons',
6086 	   'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6087 	    ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6088 	    p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6089           END IF;
6090 
6091         END IF;
6092 
6093         /* Business Validations */
6094         /* Proceed with business validations only if the status is Success, 'S' */
6095         IF p_usec_assmnt_tbl(I).status = 'S' THEN
6096           igs_ps_validate_generic_pkg.validate_usec_assmnt ( p_usec_assmnt_tbl(I),l_n_uoo_id,l_d_exam_start_time,l_d_exam_end_time,l_n_building_id,l_n_room_id,l_insert_update);
6097 
6098           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6099 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.status_after_Business_validation',
6100 	   'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6101 	    ||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6102 	    p_usec_assmnt_tbl(I).unit_class||'  '||'Status:'||p_usec_assmnt_tbl(I).status);
6103           END IF;
6104 
6105         END IF;
6106 
6107         IF p_usec_assmnt_tbl(I).status = 'S'  THEN
6108 	  IF l_insert_update = 'I' THEN
6109              /* Insert Record */
6110 
6111              INSERT INTO igs_ps_usec_as
6112              (unit_section_assessment_id,
6113              uoo_id,
6114              final_exam_date,
6115              exam_start_time,
6116              exam_end_time,
6117              location_cd,
6118              building_code,
6119              room_code,
6120              created_by,
6121              creation_date,
6122              last_updated_by,
6123              last_update_date,
6124              last_update_login
6125              )
6126              VALUES
6127              (igs_ps_usec_as_s.nextval,
6128 	     l_n_uoo_id,
6129 	     p_usec_assmnt_tbl(I).final_exam_date,
6130 	     l_d_exam_start_time,--p_usec_assmnt_tbl(I).final_exam_date,
6131 	     l_d_exam_end_time,--p_usec_assmnt_tbl(I).exam_start_time,
6132              p_usec_assmnt_tbl(I).exam_location_cd,
6133 	     l_n_building_id,
6134 	     l_n_room_id,
6135              g_n_user_id,
6136              SYSDATE,
6137              g_n_user_id,
6138              SYSDATE,
6139              g_n_login_id
6140              );
6141 
6142               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6143 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.Record_inserted',
6144 	       'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6145 		||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6146 		p_usec_assmnt_tbl(I).unit_class);
6147               END IF;
6148 
6149 
6150          ELSE
6151 
6152 	      /*Update record*/
6153               UPDATE igs_ps_usec_as
6154 	      SET final_exam_date = p_usec_assmnt_tbl(I).final_exam_date,
6155 	      exam_start_time=l_d_exam_start_time,--p_usec_assmnt_tbl(I).exam_start_time,
6156 	      exam_end_time=l_d_exam_end_time,--p_usec_assmnt_tbl(I).exam_end_time,
6157 	      location_cd=p_usec_assmnt_tbl(I).exam_location_cd,
6158 	      building_code=l_n_building_id,
6159 	      room_code=l_n_room_id,
6160 	      last_updated_by = g_n_user_id,
6161 	      last_update_date = SYSDATE,
6162               last_update_login = g_n_login_id
6163 	      WHERE uoo_id = l_n_uoo_id;
6164 
6165 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6166 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.Record_updated',
6167 	       'Unit code:'||p_usec_assmnt_tbl(I).unit_cd||'  '||'Version number:'||p_usec_assmnt_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
6168 		||p_usec_assmnt_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_assmnt_tbl(I).location_cd||'  '||'Unit Class:'||
6169 		p_usec_assmnt_tbl(I).unit_class);
6170               END IF;
6171 	 END IF;
6172        END IF;--insert/update
6173 
6174        IF  p_usec_assmnt_tbl(I).status = 'S' THEN
6175 	 p_usec_assmnt_tbl(I).msg_from := NULL;
6176 	 p_usec_assmnt_tbl(I).msg_to := NULL;
6177        ELSIF   p_usec_assmnt_tbl(I).status = 'A' THEN
6178 	 p_usec_assmnt_tbl(I).msg_from  :=  p_usec_assmnt_tbl(I).msg_from + 1;
6179 	 p_usec_assmnt_tbl(I).msg_to := fnd_msg_pub.count_msg;
6180        ELSE
6181 	 p_c_rec_status := p_usec_assmnt_tbl(I).status;
6182 	 p_usec_assmnt_tbl(I).msg_from := p_usec_assmnt_tbl(I).msg_from+1;
6183 	 p_usec_assmnt_tbl(I).msg_to := fnd_msg_pub.count_msg;
6184 	 IF p_usec_assmnt_tbl(I).status = 'E' THEN
6185 	   RETURN;
6186 	 END IF;
6187        END IF;
6188      END IF;--exists
6189    END LOOP;
6190 
6191    IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6192      fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_assmnt.after_import_status',p_c_rec_status);
6193    END IF;
6194 
6195 
6196  END create_usec_assmnt;
6197 
6198 
6199 PROCEDURE create_uso_ins_ovrd(p_tab_uso_ins IN OUT NOCOPY igs_ps_generic_pub.uso_ins_tbl_type
6200                               ,p_c_rec_status OUT NOCOPY VARCHAR2
6201 			      ,p_calling_context IN VARCHAR2) IS
6202     /***********************************************************************************************
6203 
6204     Created By:         sarakshi
6205     Date Created By:    31-May-2005
6206     Purpose:            This procedure imports(override) unit section occurrence instructor.
6207 
6208     Known limitations,enhancements,remarks:
6209     Change History
6210     Who       When         What
6211     ***********************************************************************************************/
6212 
6213     l_n_ins_id            igs_ps_uso_instrctrs.instructor_id%TYPE;
6214     l_n_uso_id            igs_ps_uso_instrctrs.unit_section_occurrence_id%TYPE;
6215     l_n_uoo_id            igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
6216     l_d_start_dt          igs_ps_usec_occurs_all.start_date%TYPE;
6217     l_d_end_dt            igs_ps_usec_occurs_all.end_date%TYPE;
6218     l_insert_status       BOOLEAN;
6219     l_delete_status       BOOLEAN;
6220     l_message_name        VARCHAR2(30);
6221 
6222     PROCEDURE trim_values ( p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
6223     BEGIN
6224       p_uso_ins_rec.instructor_person_number := TRIM(p_uso_ins_rec.instructor_person_number);
6225       p_uso_ins_rec.production_uso_id := TRIM(p_uso_ins_rec.production_uso_id);
6226       p_uso_ins_rec.unit_cd := TRIM(p_uso_ins_rec.unit_cd);
6227       p_uso_ins_rec.version_number := TRIM(p_uso_ins_rec.version_number);
6228       p_uso_ins_rec.teach_cal_alternate_code := TRIM(p_uso_ins_rec.teach_cal_alternate_code);
6229       p_uso_ins_rec.location_cd := TRIM(p_uso_ins_rec.location_cd);
6230       p_uso_ins_rec.unit_class := TRIM(p_uso_ins_rec.unit_class);
6231       p_uso_ins_rec.occurrence_identifier := TRIM(p_uso_ins_rec.occurrence_identifier);
6232       p_uso_ins_rec.confirmed_flag := TRIM(p_uso_ins_rec.confirmed_flag);
6233       p_uso_ins_rec.wl_percentage_allocation := TRIM(p_uso_ins_rec.wl_percentage_allocation);
6234       p_uso_ins_rec.instructional_load_lecture := TRIM(p_uso_ins_rec.instructional_load_lecture);
6235       p_uso_ins_rec.instructional_load_laboratory :=  TRIM(p_uso_ins_rec.instructional_load_laboratory);
6236       p_uso_ins_rec.instructional_load_other :=  TRIM(p_uso_ins_rec.instructional_load_other);
6237       p_uso_ins_rec.lead_instructor_flag := TRIM(p_uso_ins_rec.lead_instructor_flag);
6238 
6239     END trim_values;
6240 
6241     PROCEDURE validate_parameters(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
6242     /***********************************************************************************************
6243 
6244     Created By:         smvk
6245     Date Created By:    20-May-2003
6246     Purpose:            This procedure validates all mandatory parameter required for the unit section occurrence
6247                         instructor process to proceed.
6248 
6249     Known limitations,enhancements,remarks:
6250     Change History
6251     Who       When         What
6252     ***********************************************************************************************/
6253 
6254     BEGIN
6255       p_uso_ins_rec.status:='S';
6256 
6257       -- Checking for the mandatory existence of Unit Code, verison  number, instructor person number parameter in the record.
6258       IF p_uso_ins_rec.instructor_person_number IS NULL OR p_uso_ins_rec.instructor_person_number = FND_API.G_MISS_CHAR THEN
6259          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6260          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY',fnd_message.get,NULL,FALSE);
6261          p_uso_ins_rec.status := 'E';
6262       END IF;
6263 
6264       IF p_uso_ins_rec.unit_cd IS NULL OR p_uso_ins_rec.unit_cd = FND_API.G_MISS_CHAR THEN
6265          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
6266          p_uso_ins_rec.status := 'E';
6267       END IF;
6268 
6269       IF p_uso_ins_rec.version_number IS NULL OR p_uso_ins_rec.version_number = FND_API.G_MISS_NUM THEN
6270          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
6271          p_uso_ins_rec.status := 'E';
6272       END IF;
6273 
6274       -- if the production USO id is not provided then Teching calendar alternate code, location code and
6275       -- unit class are required.
6276       IF p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM THEN
6277          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
6278             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
6279             p_uso_ins_rec.status := 'E';
6280          END IF;
6281          IF p_uso_ins_rec.location_cd IS NULL OR p_uso_ins_rec.location_cd = FND_API.G_MISS_CHAR THEN
6282             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
6283             p_uso_ins_rec.status := 'E';
6284          END IF;
6285          IF p_uso_ins_rec.unit_class IS NULL OR p_uso_ins_rec.unit_class = FND_API.G_MISS_CHAR THEN
6286             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
6287           p_uso_ins_rec.status := 'E';
6288          END IF;
6289       END IF;
6290 
6291       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
6292          (p_uso_ins_rec.location_cd IS NULL OR p_uso_ins_rec.location_cd = FND_API.G_MISS_CHAR ) AND
6293          (p_uso_ins_rec.unit_class IS NULL OR p_uso_ins_rec.unit_class = FND_API.G_MISS_CHAR) THEN
6294          IF p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM THEN
6295             fnd_message.set_name('IGS','IGS_PS_PRODUCTION_USO_ID');
6296             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY',fnd_message.get,NULL,FALSE);
6297             p_uso_ins_rec.status := 'E';
6298          END IF;
6299       END IF;
6300 
6301       IF (p_uso_ins_rec.production_uso_id IS NULL OR p_uso_ins_rec.production_uso_id = FND_API.G_MISS_NUM ) AND
6302           (p_uso_ins_rec.occurrence_identifier IS NULL OR p_uso_ins_rec.occurrence_identifier = FND_API.G_MISS_CHAR) THEN
6303          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'USEC_OCCRS_ID','IGS_PS_LOG_PARAMETERS', FALSE);
6304          p_uso_ins_rec.status := 'E';
6305       END IF;
6306 
6307 
6308     END validate_parameters;
6309 
6310     PROCEDURE validate_derivation(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
6311     /***********************************************************************************************
6312 
6313     Created By:         smvk
6314     Date Created By:    20-May-2003
6315     Purpose:            This procedure derives the values required for creation of unit section occurrence instructor in production table.
6316 
6317     Known limitations,enhancements,remarks:
6318     Change History
6319     Who       When         What
6320     smvk      28-Jul-2004  Bug # 3793580. Coded to call get_uso_id procedure and removed
6321                            cursors used to derive USO id.
6322     jbegum    5-June-2003  Bug#2972950
6323                            For the PSP Scheduling Enhancements TD:
6324                            Modified the two cursors c_tba_count,c_tba_uso_id
6325     ***********************************************************************************************/
6326 
6327 
6328       CURSOR c_uoo_id (cp_n_uso_id IN igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
6329         SELECT A.uoo_id
6330         FROM   igs_ps_usec_occurs_all A
6331         WHERE  A.unit_section_occurrence_id = cp_n_uso_id;
6332 
6333       l_c_cal_type    igs_ca_inst_all.cal_type%TYPE;
6334       l_n_seq_num     igs_ca_inst_all.sequence_number%TYPE;
6335       l_d_start       igs_ca_inst_all.start_dt%TYPE;
6336       l_d_end         igs_ca_inst_all.end_dt%TYPE;
6337       l_c_ret_status  VARCHAR2(30);
6338       l_c_msg         VARCHAR2(30);
6339 
6340     BEGIN
6341       -- Initialize the variable use to store the derived values.
6342       l_n_ins_id := NULL;
6343       l_n_uso_id := NULL;
6344       l_n_uoo_id := NULL;
6345 
6346       -- Derive the Instructor identifier
6347       igs_ps_validate_lgcy_pkg.get_party_id(p_uso_ins_rec.instructor_person_number, l_n_ins_id);
6348       IF l_n_ins_id IS NULL THEN
6349          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6350          igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
6351          p_uso_ins_rec.status := 'E';
6352       END IF;
6353 
6354       -- if the production unit section occurrence identifier is provided then validate it
6355       -- otherwise derive the production unit section occurrence identifier.
6356       IF p_uso_ins_rec.production_uso_id IS NOT NULL THEN
6357          IF igs_ps_usec_occurs_pkg.get_pk_for_validation(p_uso_ins_rec.production_uso_id) THEN
6358             l_n_uso_id := p_uso_ins_rec.production_uso_id;
6359             -- Also derive the unit section identifier uoo_id for the the unit section occurrence identifier
6360             OPEN  c_uoo_id(l_n_uso_id);
6361             FETCH c_uoo_id INTO l_n_uoo_id;
6362             CLOSE c_uoo_id;
6363          ELSE
6364             fnd_message.set_name('IGS','IGS_PS_PRODUCTION_USO_ID');
6365             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
6366             p_uso_ins_rec.status := 'E';
6367          END IF;
6368       ELSE
6369          -- Deriving the value of Unit section Occurrence identifier
6370 
6371          -- Deriving the Calendar Type and Calendar Sequence Number
6372          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);
6373          IF l_c_ret_status <> 'SINGLE' THEN
6374             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
6375              p_uso_ins_rec.status := 'E';
6376          END IF;
6377          -- Deriving the Unit Offering Option Identifier
6378          l_c_ret_status := NULL;
6379          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);
6380          IF l_c_ret_status IS NOT NULL THEN
6381             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
6382             p_uso_ins_rec.status := 'E';
6383          END IF;
6384 
6385 
6386 	 --Derive the unit section occurrence id
6387 	 l_c_msg := NULL;
6388 	 igs_ps_validate_lgcy_pkg.get_uso_id( p_uoo_id                => l_n_uoo_id,
6389 					      p_occurrence_identifier => p_uso_ins_rec.occurrence_identifier,
6390 					      p_uso_id                => l_n_uso_id,
6391 					      p_message               => l_c_msg
6392 					    );
6393 	 IF l_c_msg IS NOT NULL THEN
6394 	    fnd_message.set_name('IGS',l_c_msg);
6395 	    fnd_msg_pub.add;
6396 	    p_uso_ins_rec.status := 'E';
6397 	 END IF;
6398 
6399       END IF;
6400     END validate_derivation;
6401 
6402     PROCEDURE validate_db_cons(p_uso_ins_rec IN OUT NOCOPY igs_ps_generic_pub.uso_ins_rec_type) AS
6403        CURSOR c_unit_ver (cp_n_uso_id igs_ps_usec_occurs_all.unit_section_occurrence_id%TYPE) IS
6404           SELECT  a.unit_cd, a.version_number
6405           FROM    igs_ps_unit_ofr_opt_all a, igs_ps_usec_occurs_all b
6406           WHERE   a.uoo_id = b.uoo_id
6407           AND     b.unit_section_occurrence_id = cp_n_uso_id;
6408 
6409           rec_unit_ver c_unit_ver%ROWTYPE;
6410 
6411     BEGIN
6412       -- Check uniqueness validation should not be done as it is override, after delete only it should be done
6413 
6414 
6415       -- Check Constraints
6416       BEGIN
6417         igs_ps_unit_ver_pkg.check_constraints( 'UNIT_CD',p_uso_ins_rec.unit_cd);
6418       EXCEPTION
6419         WHEN OTHERS THEN
6420             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_CD','LEGACY_TOKENS',TRUE);
6421             p_uso_ins_rec.status :='E';
6422       END;
6423 
6424       BEGIN
6425         igs_ps_unit_ver_pkg.check_constraints('VERSION_NUMBER',p_uso_ins_rec.version_number);
6426       EXCEPTION
6427         WHEN OTHERS THEN
6428           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VER_NUM_1_999',NULL,NULL,TRUE);
6429           p_uso_ins_rec.status :='E';
6430       END;
6431 
6432       -- Foreign Key Checking
6433       IF NOT igs_pe_person_pkg.get_pk_for_validation(l_n_ins_id ) THEN
6434          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6435          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', fnd_message.get, NULL, FALSE);
6436          p_uso_ins_rec.status := 'E';
6437       END IF;
6438       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
6439          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
6440          p_uso_ins_rec.status := 'E';
6441       END IF;
6442 
6443       IF p_uso_ins_rec.production_uso_id IS NOT NULL THEN
6444 
6445          -- validate the production USO ID with unit_cd, version_number
6446          OPEN  c_unit_ver(p_uso_ins_rec.production_uso_id);
6447          FETCH c_unit_ver INTO rec_unit_ver;
6448          IF c_unit_ver%FOUND THEN
6449             IF p_uso_ins_rec.unit_cd <> rec_unit_ver.unit_cd  OR
6450                p_uso_ins_rec.version_number <> rec_unit_ver.version_number THEN
6451                fnd_message.set_name('IGS','IGS_PS_LGCY_UNIT_VER_NOT_USO');
6452                fnd_msg_pub.add;
6453                p_uso_ins_rec.status :='E';
6454             END IF;
6455          ELSE
6456             fnd_message.set_name('IGS','IGS_PS_LGCY_UNIT_VER_NOT_USO');
6457             fnd_msg_pub.add;
6458             p_uso_ins_rec.status :='E';
6459          END IF;
6460          CLOSE c_unit_ver;
6461 
6462       END IF;
6463 
6464     END validate_db_cons;
6465 
6466    PROCEDURE delete_records(p_delete_status OUT NOCOPY BOOLEAN) IS
6467      CURSOR cur_ins_exists(cp_uso_id IN NUMBER) IS
6468      SELECT 'X'
6469      FROM   igs_ps_uso_instrctrs
6470      WHERE  unit_section_occurrence_id =cp_uso_id;
6471 
6472      CURSOR cur_resp_exists(cp_uoo_id IN NUMBER,cp_ins_id IN NUMBER) IS
6473      SELECT 'X'
6474      FROM   igs_ps_usec_tch_resp
6475      WHERE  uoo_id =cp_uoo_id
6476      AND    instructor_id=cp_ins_id
6477      AND    NOT EXISTS (SELECT 'X' FROM igs_ps_uso_instrctrs a,igs_ps_usec_occurs_all b
6478                         WHERE a.unit_section_occurrence_id=b.unit_section_occurrence_id
6479 			AND   b.uoo_id=cp_uoo_id
6480 			AND   a.instructor_id=cp_ins_id);
6481 
6482      CURSOR cur_enr(cp_uoo_id IN NUMBER) IS
6483      SELECT 'X'
6484      FROM igs_ps_unit_ofr_opt_all
6485      WHERE uoo_id= cp_uoo_id
6486      AND ENROLLMENT_ACTUAL > 0;
6487 
6488      l_c_var VARCHAR2(1);
6489    BEGIN
6490      p_delete_status:= TRUE;
6491 
6492      FOR I in 1..p_tab_uso_ins.LAST LOOP
6493          IF p_tab_uso_ins.EXISTS(I) AND p_tab_uso_ins(I).status = 'S' THEN
6494            p_tab_uso_ins(I).msg_from := fnd_msg_pub.count_msg;
6495 
6496 	   OPEN cur_ins_exists(p_tab_uso_ins(I).system_uso_id);
6497 	   FETCH cur_ins_exists INTO l_c_var;
6498 	   IF cur_ins_exists%FOUND THEN
6499              DELETE igs_ps_uso_instrctrs WHERE unit_section_occurrence_id=p_tab_uso_ins(I).system_uso_id ;
6500            END IF;
6501            CLOSE cur_ins_exists;
6502 
6503 	   OPEN cur_resp_exists(p_tab_uso_ins(I).system_uoo_id,p_tab_uso_ins(I).system_instructor_id);
6504 	   FETCH cur_resp_exists INTO l_c_var;
6505 	   IF cur_resp_exists%FOUND THEN
6506 
6507 	      OPEN cur_enr(p_tab_uso_ins(I).system_uoo_id);
6508 	      FETCH cur_enr INTO l_c_var;
6509 	      IF cur_enr%FOUND THEN
6510 		fnd_message.set_name('IGS','IGS_PS_ENR_EXISTS_NO_IMPORT');
6511   	        fnd_msg_pub.add;
6512 		p_tab_uso_ins(I).status := 'E';
6513 		p_c_rec_status := p_tab_uso_ins(I).status;
6514 		p_tab_uso_ins(I).msg_from := p_tab_uso_ins(I).msg_from+1;
6515 		p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
6516 		p_delete_status:= FALSE;
6517 		RETURN;
6518 	      ELSE
6519 		DELETE igs_ps_usec_tch_resp WHERE instructor_id=p_tab_uso_ins(I).system_instructor_id AND
6520 		uoo_id = p_tab_uso_ins(I).system_uoo_id ;
6521 
6522                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6523 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.Delete_for_IGS_PS_USO_INSTRCTRS',
6524 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6525 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6526 		  ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6527 		  ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6528 		  ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id);
6529 	        END IF;
6530 
6531 	      END IF;
6532               CLOSE cur_enr;
6533 
6534 	   END IF;
6535            CLOSE cur_resp_exists;
6536 
6537 	 END IF;
6538      END LOOP;
6539 
6540    END delete_records;
6541 
6542    PROCEDURE insert_instructors(p_insert_status OUT NOCOPY BOOLEAN) IS
6543 
6544    BEGIN
6545      p_insert_status:= TRUE;
6546      FOR I in 1..p_tab_uso_ins.LAST LOOP
6547         IF p_tab_uso_ins.EXISTS(I) AND  p_tab_uso_ins(I).status = 'S' THEN
6548           p_tab_uso_ins(I).msg_from := fnd_msg_pub.count_msg;
6549 
6550           -- Check uniqueness validation
6551           IF igs_ps_uso_instrctrs_pkg.get_uk_for_validation(p_tab_uso_ins(I).system_uso_id, p_tab_uso_ins(I).system_instructor_id) THEN
6552             p_tab_uso_ins(I).status :='E';
6553             fnd_message.set_name('IGS','IGS_PS_USO_INS');
6554             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', fnd_message.get, NULL, FALSE);
6555 	    p_c_rec_status := p_tab_uso_ins(I).status;
6556             p_tab_uso_ins(I).msg_from := p_tab_uso_ins(I).msg_from+1;
6557             p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
6558             p_insert_status:= FALSE;
6559             RETURN;
6560           ELSE
6561 
6562 	    INSERT INTO IGS_PS_USO_INSTRCTRS (
6563 					  USO_INSTRUCTOR_ID,
6564 					  UNIT_SECTION_OCCURRENCE_ID,
6565 					  INSTRUCTOR_ID,
6566 					  CREATED_BY ,
6567 					  CREATION_DATE,
6568 					  LAST_UPDATED_BY,
6569 					  LAST_UPDATE_DATE ,
6570 					  LAST_UPDATE_LOGIN
6571 					) VALUES (
6572 					  igs_ps_uso_instrctrs_s.nextval,
6573 					  p_tab_uso_ins(I).system_uso_id,
6574 					  p_tab_uso_ins(I).system_instructor_id,
6575 					  g_n_user_id,
6576 					  sysdate,
6577 					  g_n_user_id,
6578 					  sysdate,
6579 					  g_n_login_id
6580 					);
6581              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6582 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.Insert_for_IGS_PS_USO_INSTRCTRS',
6583 		'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6584 		'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6585 		||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6586 		||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6587 		||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id);
6588 	     END IF;
6589 
6590                igs_ps_validate_lgcy_pkg.post_uso_ins(p_tab_uso_ins(I).system_instructor_id,
6591 	                                             p_tab_uso_ins(I).system_uoo_id,
6592 						     p_tab_uso_ins(I),I);
6593 
6594                IF p_tab_uso_ins(I).status <> 'S' THEN
6595 		  p_c_rec_status := p_tab_uso_ins(I).status;
6596 		  p_tab_uso_ins(I).msg_from := p_tab_uso_ins(I).msg_from+1;
6597 		  p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
6598 		  p_insert_status:= FALSE;
6599 	          RETURN;
6600 	       END IF;
6601           END IF;
6602 
6603 	END IF;
6604      END LOOP;
6605 
6606    END insert_instructors;
6607 
6608 BEGIN
6609 
6610   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6611     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.start_logging_for',
6612                     'Unit Section Occurrence Instructor Ovrd');
6613   END IF;
6614 
6615   IF p_calling_context = 'G' THEN
6616     igs_ps_unit_lgcy_pkg.create_uso_ins( p_tab_uso_ins  => p_tab_uso_ins,
6617                                          p_c_rec_status => p_c_rec_status );
6618 
6619   ELSE
6620      p_c_rec_status := 'S';
6621      FOR I in 1..p_tab_uso_ins.LAST LOOP
6622          IF p_tab_uso_ins.EXISTS(I) THEN
6623             p_tab_uso_ins(I).status := 'S';
6624             p_tab_uso_ins(I).msg_from := fnd_msg_pub.count_msg;
6625             trim_values(p_tab_uso_ins(I));
6626             validate_parameters(p_tab_uso_ins(I));
6627 
6628 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6629 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.status_after_validate_parameters',
6630 	      'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6631 	      'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6632 	      ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6633 	      ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6634 	      ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
6635 	    END IF;
6636 
6637             IF p_tab_uso_ins(I).status = 'S' THEN
6638                validate_derivation(p_tab_uso_ins(I));
6639             END IF;
6640 
6641             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6642 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.status_after_validate_derivation',
6643 	      'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6644 	      'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6645 	      ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6646 	      ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6647 	      ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
6648 	    END IF;
6649 
6650             IF p_tab_uso_ins(I).status = 'S' THEN
6651                validate_db_cons ( p_tab_uso_ins(I) );
6652 
6653 	       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6654 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.status_after_validate_db_cons',
6655 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6656 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6657 		  ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6658 		  ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6659 		  ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
6660 	       END IF;
6661 
6662             END IF;
6663 
6664 	    IF p_tab_uso_ins(I).status = 'S' THEN
6665     	      IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,l_n_uso_id) = FALSE THEN
6666                 fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
6667                 fnd_msg_pub.add;
6668                 p_tab_uso_ins(I).status := 'A';
6669 	      END IF;
6670 
6671               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6672 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.status_after_check_import_allowed',
6673 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6674 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6675 		  ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6676 		  ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6677 		  ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
6678 	       END IF;
6679 
6680             END IF;
6681 
6682             --Business validations
6683             IF p_tab_uso_ins(I).status = 'S' THEN
6684 	      --Check if the unit is INACTIVE, then do not allow to import
6685 	      IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_tab_uso_ins(I).unit_cd, p_tab_uso_ins(I).version_number,l_message_name)=FALSE THEN
6686 		    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
6687 		    fnd_msg_pub.add;
6688 		    p_tab_uso_ins(I).status := 'E';
6689 	      END IF;
6690 
6691 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6692 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.status_after_check_import_allowed',
6693 		  'Unit code:'||p_tab_uso_ins(I).unit_cd||'  '||'Version number:'||p_tab_uso_ins(I).version_number||'  '||
6694 		  'teach_cal_alternate_code:'||p_tab_uso_ins(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_tab_uso_ins(I).location_cd
6695 		  ||'  '||'Unit Class:'||p_tab_uso_ins(I).unit_class||'  '||'instructor_person_number:'||p_tab_uso_ins(I).instructor_person_number
6696 		  ||'  '||'occurrence_identifier'||p_tab_uso_ins(I).occurrence_identifier
6697 		  ||'  '||'production_uso_id:'||p_tab_uso_ins(I).production_uso_id||'  '||'Status:'|| p_tab_uso_ins(I).status);
6698 	       END IF;
6699 
6700             END IF;
6701 
6702             IF p_tab_uso_ins(I).status = 'S' THEN
6703 	         p_tab_uso_ins(I).system_uoo_id:=l_n_uoo_id;
6704 	         p_tab_uso_ins(I).system_uso_id:=l_n_uso_id;
6705 	         p_tab_uso_ins(I).system_instructor_id:=l_n_ins_id;
6706 
6707 		 --Insert is done in insert_instructors
6708             END IF;
6709 
6710             --Post validation is also done at insert_instructors
6711 
6712             IF p_tab_uso_ins(I).status = 'S' THEN
6713                p_tab_uso_ins(I).msg_from := NULL;
6714                p_tab_uso_ins(I).msg_to := NULL;
6715 	    ELSIF  p_tab_uso_ins(I).status = 'A' THEN
6716 	       p_tab_uso_ins(I).msg_from  := p_tab_uso_ins(I).msg_from + 1;
6717 	       p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
6718             ELSE
6719                p_c_rec_status := p_tab_uso_ins(I).status;
6720                p_tab_uso_ins(I).msg_from := p_tab_uso_ins(I).msg_from+1;
6721                p_tab_uso_ins(I).msg_to := fnd_msg_pub.count_msg;
6722                IF p_tab_uso_ins(I).status = 'E' THEN
6723                   RETURN;
6724                END IF;
6725             END IF;
6726 
6727          END IF;
6728      END LOOP;
6729 
6730      --Delete the existing records
6731      delete_records(l_delete_status);
6732 
6733      IF l_delete_status = FALSE THEN
6734         RETURN;
6735      END IF;
6736      --Insert the instructors
6737      insert_instructors(l_insert_status);
6738      IF l_insert_status = FALSE THEN
6739         RETURN;
6740      END IF;
6741 
6742 
6743      IF NOT igs_ps_validate_lgcy_pkg.post_uso_ins_busi(p_tab_uso_ins) THEN
6744         p_c_rec_status :=  'E';
6745      END IF;
6746 
6747   END IF; --Scheduling
6748 
6749   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6750     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_uso_ins_ovrd.after_import_status',p_c_rec_status);
6751   END IF;
6752 
6753 
6754 END create_uso_ins_ovrd;
6755 
6756 PROCEDURE create_usec_teach_resp(p_usec_teach_resp_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_tbl_type
6757                                 ,p_c_rec_status OUT NOCOPY VARCHAR2
6758 			        ,p_calling_context IN VARCHAR2) IS
6759 /***********************************************************************************************
6760 
6761 Created By:         sarakshi
6762 Date Created By:    31-May-2005
6763 Purpose:            This procedure imports(Updates) unit section Teaching Responsibilities.
6764 
6765 Known limitations,enhancements,remarks:
6766 Change History
6767 Who       When         What
6768 ***********************************************************************************************/
6769     l_n_ins_id            igs_ps_uso_instrctrs.instructor_id%TYPE;
6770     l_n_uoo_id            igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
6771     l_d_start_dt          igs_ps_usec_occurs_all.start_date%TYPE;
6772     l_d_end_dt            igs_ps_usec_occurs_all.end_date%TYPE;
6773     l_message_name        VARCHAR2(30);
6774 
6775 
6776   -- for doing certain validation at unit section level while importing unit section occurrence of instructors
6777   TYPE usec_sr_rectype IS RECORD( uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE,
6778                                   instr_index NUMBER);
6779   TYPE usec_sr_tbltype IS TABLE OF usec_sr_rectype INDEX BY BINARY_INTEGER;
6780   v_tab_usec_sr usec_sr_tbltype;
6781 
6782     PROCEDURE trim_values ( p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
6783     BEGIN
6784       p_usec_teach_resp_rec.instructor_person_number := TRIM(p_usec_teach_resp_rec.instructor_person_number);
6785       p_usec_teach_resp_rec.unit_cd := TRIM(p_usec_teach_resp_rec.unit_cd);
6786       p_usec_teach_resp_rec.version_number := TRIM(p_usec_teach_resp_rec.version_number);
6787       p_usec_teach_resp_rec.teach_cal_alternate_code := TRIM(p_usec_teach_resp_rec.teach_cal_alternate_code);
6788       p_usec_teach_resp_rec.location_cd := TRIM(p_usec_teach_resp_rec.location_cd);
6789       p_usec_teach_resp_rec.unit_class := TRIM(p_usec_teach_resp_rec.unit_class);
6790       p_usec_teach_resp_rec.confirmed_flag := TRIM(p_usec_teach_resp_rec.confirmed_flag);
6791       p_usec_teach_resp_rec.wl_percentage_allocation := TRIM(p_usec_teach_resp_rec.wl_percentage_allocation);
6792       p_usec_teach_resp_rec.instructional_load_lecture := TRIM(p_usec_teach_resp_rec.instructional_load_lecture);
6793       p_usec_teach_resp_rec.instructional_load_laboratory :=  TRIM(p_usec_teach_resp_rec.instructional_load_laboratory);
6794       p_usec_teach_resp_rec.instructional_load_other :=  TRIM(p_usec_teach_resp_rec.instructional_load_other);
6795       p_usec_teach_resp_rec.lead_instructor_flag := TRIM(p_usec_teach_resp_rec.lead_instructor_flag);
6796 
6797     END trim_values;
6798 
6799     PROCEDURE validate_parameters(p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
6800 
6801     BEGIN
6802       p_usec_teach_resp_rec.status:='S';
6803 
6804       -- Checking for the mandatory existence of Unit Code, verison  number, instructor person number parameter in the record.
6805       IF p_usec_teach_resp_rec.instructor_person_number IS NULL OR p_usec_teach_resp_rec.instructor_person_number = FND_API.G_MISS_CHAR THEN
6806          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6807          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY',fnd_message.get,NULL,FALSE);
6808          p_usec_teach_resp_rec.status := 'E';
6809       END IF;
6810 
6811       IF p_usec_teach_resp_rec.unit_cd IS NULL OR p_usec_teach_resp_rec.unit_cd = FND_API.G_MISS_CHAR THEN
6812          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
6813          p_usec_teach_resp_rec.status := 'E';
6814       END IF;
6815 
6816       IF p_usec_teach_resp_rec.version_number IS NULL OR p_usec_teach_resp_rec.version_number = FND_API.G_MISS_NUM THEN
6817          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
6818          p_usec_teach_resp_rec.status := 'E';
6819       END IF;
6820 
6821       IF p_usec_teach_resp_rec.teach_cal_alternate_code IS NULL OR p_usec_teach_resp_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
6822 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
6823 	 p_usec_teach_resp_rec.status := 'E';
6824       END IF;
6825 
6826       IF p_usec_teach_resp_rec.location_cd IS NULL OR p_usec_teach_resp_rec.location_cd = FND_API.G_MISS_CHAR THEN
6827 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
6828 	 p_usec_teach_resp_rec.status := 'E';
6829       END IF;
6830 
6831       IF p_usec_teach_resp_rec.unit_class IS NULL OR p_usec_teach_resp_rec.unit_class = FND_API.G_MISS_CHAR THEN
6832         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
6833 	p_usec_teach_resp_rec.status := 'E';
6834       END IF;
6835 
6836     END validate_parameters;
6837 
6838     PROCEDURE validate_derivation(p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
6839 
6840       l_c_cal_type    igs_ca_inst_all.cal_type%TYPE;
6841       l_n_seq_num     igs_ca_inst_all.sequence_number%TYPE;
6842       l_d_start       igs_ca_inst_all.start_dt%TYPE;
6843       l_d_end         igs_ca_inst_all.end_dt%TYPE;
6844       l_c_ret_status  VARCHAR2(30);
6845 
6846     BEGIN
6847       -- Initialize the variable use to store the derived values.
6848       l_n_ins_id := NULL;
6849       l_n_uoo_id := NULL;
6850 
6851       -- Derive the Instructor identifier
6852       igs_ps_validate_lgcy_pkg.get_party_id(p_usec_teach_resp_rec.instructor_person_number, l_n_ins_id);
6853       IF l_n_ins_id IS NULL THEN
6854          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6855          igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
6856          p_usec_teach_resp_rec.status := 'E';
6857       END IF;
6858 
6859 
6860        -- Deriving the Calendar Type and Calendar Sequence Number
6861        igs_ge_gen_003.get_calendar_instance(p_usec_teach_resp_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
6862        IF l_c_ret_status <> 'SINGLE' THEN
6863 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
6864 	   p_usec_teach_resp_rec.status := 'E';
6865        END IF;
6866 
6867        -- Deriving the Unit Offering Option Identifier
6868        l_c_ret_status := NULL;
6869        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_teach_resp_rec.unit_cd, p_usec_teach_resp_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_teach_resp_rec.location_cd, p_usec_teach_resp_rec.unit_class, l_n_uoo_id, l_c_ret_status);
6870        IF l_c_ret_status IS NOT NULL THEN
6871 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
6872 	  p_usec_teach_resp_rec.status := 'E';
6873        END IF;
6874 
6875     END validate_derivation;
6876 
6877     PROCEDURE validate_db_cons(p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
6878 
6879     BEGIN
6880 
6881       -- Check Constraints
6882       BEGIN
6883         igs_ps_unit_ver_pkg.check_constraints( 'UNIT_CD',p_usec_teach_resp_rec.unit_cd);
6884       EXCEPTION
6885         WHEN OTHERS THEN
6886             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_CD','LEGACY_TOKENS',TRUE);
6887             p_usec_teach_resp_rec.status :='E';
6888       END;
6889 
6890       BEGIN
6891         igs_ps_unit_ver_pkg.check_constraints('VERSION_NUMBER',p_usec_teach_resp_rec.version_number);
6892       EXCEPTION
6893         WHEN OTHERS THEN
6894           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VER_NUM_1_999',NULL,NULL,TRUE);
6895           p_usec_teach_resp_rec.status :='E';
6896       END;
6897 
6898       BEGIN
6899           igs_ps_usec_tch_resp_pkg.check_constraints('LEAD_INSTRUCTOR_FLAG', p_usec_teach_resp_rec.lead_instructor_flag);
6900       EXCEPTION
6901           WHEN OTHERS THEN
6902              fnd_message.set_name('IGS','IGS_PS_LEAD_INSTRUCTOR_FLAG');
6903              igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N',fnd_message.get, NULL,TRUE);
6904              p_usec_teach_resp_rec.status :='E';
6905       END;
6906 
6907       BEGIN
6908           igs_ps_usec_tch_resp_pkg.check_constraints('CONFIRMED_FLAG', p_usec_teach_resp_rec.confirmed_flag);
6909       EXCEPTION
6910          WHEN OTHERS THEN
6911              fnd_message.set_name('IGS','IGS_PS_CONFIRMED_FLAG');
6912              igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N',fnd_message.get, NULL,TRUE);
6913              p_usec_teach_resp_rec.status :='E';
6914       END;
6915 
6916        IF p_usec_teach_resp_rec.wl_percentage_allocation IS NOT NULL THEN
6917           BEGIN
6918              igs_ps_usec_tch_resp_pkg.check_constraints('PERCENTAGE_ALLOCATION', p_usec_teach_resp_rec.wl_percentage_allocation);
6919           EXCEPTION
6920              WHEN OTHERS THEN
6921                 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_PTS_RANGE_0_999','PERCENTAGE','LEGACY_TOKENS',TRUE);
6922                 p_usec_teach_resp_rec.status :='E';
6923           END;
6924        END IF;
6925 
6926        IF p_usec_teach_resp_rec.instructional_load_lecture IS NOT NULL THEN
6927           BEGIN
6928              igs_ps_usec_tch_resp_pkg.check_constraints('INSTRUCTIONAL_LOAD_LECTURE', p_usec_teach_resp_rec.instructional_load_lecture);
6929           EXCEPTION
6930              WHEN OTHERS THEN
6931                fnd_message.set_name('IGS','IGS_PS_INS_LOAD_LECTURE');
6932                igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_9999D99',fnd_message.get, NULL,TRUE);
6933                p_usec_teach_resp_rec.status :='E';
6934           END;
6935        END IF;
6936 
6937        IF p_usec_teach_resp_rec.instructional_load_laboratory IS NOT NULL THEN
6938           BEGIN
6939              igs_ps_usec_tch_resp_pkg.check_constraints('INSTRUCTIONAL_LOAD_LAB', p_usec_teach_resp_rec.instructional_load_laboratory);
6940           EXCEPTION
6941              WHEN OTHERS THEN
6942                 fnd_message.set_name('IGS','IGS_PS_INS_LOAD_LAB');
6943                 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_9999D99',fnd_message.get,NULL,TRUE);
6944                 p_usec_teach_resp_rec.status :='E';
6945           END;
6946        END IF;
6947 
6948        IF p_usec_teach_resp_rec.instructional_load_other IS NOT NULL THEN
6949           BEGIN
6950              igs_ps_usec_tch_resp_pkg.check_constraints('INSTRUCTIONAL_LOAD', p_usec_teach_resp_rec.instructional_load_other);
6951           EXCEPTION
6952              WHEN OTHERS THEN
6953                 fnd_message.set_name('IGS','IGS_PS_INS_LOAD_OTHER');
6954                 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_9999D99',fnd_message.get,NULL,TRUE);
6955                 p_usec_teach_resp_rec.status :='E';
6956           END;
6957        END IF;
6958 
6959       -- Foreign Key Checking
6960       IF NOT igs_pe_person_pkg.get_pk_for_validation(l_n_ins_id ) THEN
6961          fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
6962          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', fnd_message.get, NULL, FALSE);
6963          p_usec_teach_resp_rec.status := 'E';
6964       END IF;
6965 
6966       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
6967          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
6968          p_usec_teach_resp_rec.status := 'E';
6969       END IF;
6970 
6971     END validate_db_cons;
6972 
6973     PROCEDURE Assign_default(p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
6974       CURSOR cur_resp(cp_n_uoo_id IN NUMBER,cp_n_ins_id IN NUMBER) IS
6975       SELECT *
6976       FROM   igs_ps_usec_tch_resp
6977       WHERE  instructor_id = cp_n_ins_id
6978       AND    uoo_id = cp_n_uoo_id;
6979       l_cur_resp cur_resp%ROWTYPE;
6980 
6981     BEGIN
6982 
6983       OPEN cur_resp(l_n_uoo_id,l_n_ins_id);
6984       FETCH cur_resp into l_cur_resp;
6985       IF cur_resp%FOUND THEN
6986 
6987 	IF p_usec_teach_resp_rec.confirmed_flag IS NULL THEN
6988 	  p_usec_teach_resp_rec.confirmed_flag  := l_cur_resp.confirmed_flag;
6989         ELSIF p_usec_teach_resp_rec.confirmed_flag = FND_API.G_MISS_CHAR THEN
6990 	  p_usec_teach_resp_rec.confirmed_flag  := 'N';
6991 	END IF;
6992 
6993 	IF p_usec_teach_resp_rec.lead_instructor_flag IS NULL THEN
6994 	  p_usec_teach_resp_rec.lead_instructor_flag  := l_cur_resp.lead_instructor_flag;
6995         ELSIF p_usec_teach_resp_rec.lead_instructor_flag = FND_API.G_MISS_CHAR THEN
6996 	  p_usec_teach_resp_rec.lead_instructor_flag  := 'N';
6997 	END IF;
6998 
6999 	IF p_usec_teach_resp_rec.wl_percentage_allocation IS NULL THEN
7000   	  p_usec_teach_resp_rec.wl_percentage_allocation      := l_cur_resp.percentage_allocation;
7001         ELSIF p_usec_teach_resp_rec.wl_percentage_allocation = FND_API.G_MISS_NUM THEN
7002   	  p_usec_teach_resp_rec.wl_percentage_allocation      := NULL;
7003 	END IF;
7004 
7005 	IF p_usec_teach_resp_rec.instructional_load_lecture IS NULL THEN
7006 	  p_usec_teach_resp_rec.instructional_load_lecture    := l_cur_resp.instructional_load_lecture;
7007         ELSIF p_usec_teach_resp_rec.instructional_load_lecture = FND_API.G_MISS_NUM THEN
7008 	  p_usec_teach_resp_rec.instructional_load_lecture    := NULL;
7009 	END IF;
7010 
7011 	IF p_usec_teach_resp_rec.instructional_load_laboratory IS NULL THEN
7012 	  p_usec_teach_resp_rec.instructional_load_laboratory    := l_cur_resp.instructional_load_lab;
7013         ELSIF p_usec_teach_resp_rec.instructional_load_laboratory = FND_API.G_MISS_NUM THEN
7014 	  p_usec_teach_resp_rec.instructional_load_laboratory    := NULL;
7015 	END IF;
7016 
7017 	IF p_usec_teach_resp_rec.instructional_load_other IS NULL THEN
7018 	  p_usec_teach_resp_rec.instructional_load_other    := l_cur_resp.instructional_load;
7019         ELSIF p_usec_teach_resp_rec.instructional_load_other = FND_API.G_MISS_NUM THEN
7020 	  p_usec_teach_resp_rec.instructional_load_other    := NULL;
7021 	END IF;
7022 
7023       ELSE
7024         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'TEACHING_RESPONSIBILITY', 'LEGACY_TOKENS', FALSE);
7025         p_usec_teach_resp_rec.status := 'E';
7026       END IF;
7027       CLOSE cur_resp;
7028 
7029     END Assign_default;
7030 
7031     PROCEDURE Business_validation(p_usec_teach_resp_rec IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_rec_type) AS
7032        CURSOR c_lead_cnd (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%type) IS
7033 	 SELECT COUNT(*)
7034 	 FROM   IGS_PS_USEC_TCH_RESP
7035 	 WHERE  lead_instructor_flag='Y'
7036 	 AND    uoo_id = cp_n_uoo_id
7037 	 AND    ROWNUM = 1;
7038 
7039        CURSOR c_cal_inst (cp_n_uoo_id IN NUMBER) IS
7040 	 SELECT A.cal_type,
7041 		A.ci_sequence_number,
7042 		A.unit_section_status
7043 	 FROM   IGS_PS_UNIT_OFR_OPT_ALL A
7044 	 WHERE  A.uoo_id  =  cp_n_uoo_id;
7045 
7046        CURSOR c_cal_setup IS
7047 	 SELECT 'x'
7048 	 FROM   IGS_PS_EXP_WL
7049 	 WHERE  ROWNUM=1;
7050 
7051        rec_cal_inst c_cal_inst%ROWTYPE;
7052 
7053        l_n_t_lecture        igs_ps_usec_tch_resp.instructional_load_lecture%TYPE :=0;
7054        l_n_t_lab            igs_ps_usec_tch_resp.instructional_load_lab%TYPE :=0;
7055        l_n_t_other          igs_ps_usec_tch_resp.instructional_load%TYPE :=0;
7056        l_n_total_wl         NUMBER(10,2);
7057        l_n_exp_wl           NUMBER(6,2);
7058        l_n_tot_fac_wl       NUMBER(10,2);
7059        l_c_cal              VARCHAR2(1);
7060        l_n_no_of_instructor NUMBER;
7061        l_n_count            NUMBER;
7062     BEGIN
7063       --Check if the unit is INACTIVE, then do not allow to import
7064       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_teach_resp_rec.unit_cd, p_usec_teach_resp_rec.version_number,l_message_name)=FALSE THEN
7065 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
7066 	    fnd_msg_pub.add;
7067 	    p_usec_teach_resp_rec.status := 'E';
7068       END IF;
7069 
7070       -- Validation : Either percentage allocation or workload value should be provided. Both cannot be null
7071       -- Presently coded the mandatory validation for confirmed records.
7072       IF p_usec_teach_resp_rec.confirmed_flag = 'Y' AND
7073          p_usec_teach_resp_rec.wl_percentage_allocation IS NULL AND
7074          p_usec_teach_resp_rec.instructional_load_lecture IS NULL AND
7075          p_usec_teach_resp_rec.instructional_load_laboratory IS NULL AND
7076          p_usec_teach_resp_rec.instructional_load_other IS NULL THEN
7077            fnd_message.set_name('IGS','IGS_PS_PERCENT_WKLD_MANDATORY');
7078            fnd_msg_pub.add;
7079            p_usec_teach_resp_rec.status := 'E';
7080       END IF;
7081 
7082 
7083       --Instructor should be staff or faculty
7084       IF igs_ps_validate_lgcy_pkg.validate_staff_faculty (p_person_id => l_n_ins_id) = FALSE THEN
7085              p_usec_teach_resp_rec.status :='E';
7086              fnd_message.set_name('IGS','IGS_PS_INST_NOT_FACULTY_STAFF');
7087              fnd_msg_pub.add;
7088       END IF;
7089 
7090       -- if workload percentage is provided need to dervie the lecture /lab / other workloads.
7091       IF p_usec_teach_resp_rec.wl_percentage_allocation IS NOT NULL AND
7092           p_usec_teach_resp_rec.instructional_load_lecture IS NULL AND
7093           p_usec_teach_resp_rec.instructional_load_laboratory IS NULL AND
7094           p_usec_teach_resp_rec.instructional_load_other IS NULL THEN
7095 
7096           igs_ps_fac_credt_wrkload.calculate_teach_work_load(l_n_uoo_id, p_usec_teach_resp_rec.wl_percentage_allocation, l_n_t_lab , l_n_t_lecture, l_n_t_other);
7097              p_usec_teach_resp_rec.instructional_load_lecture := l_n_t_lecture;
7098              p_usec_teach_resp_rec.instructional_load_laboratory := l_n_t_lab;
7099              p_usec_teach_resp_rec.instructional_load_other := l_n_t_other;
7100       END IF;
7101 
7102 
7103       IF p_usec_teach_resp_rec.confirmed_flag = 'Y' THEN
7104           OPEN c_cal_setup;
7105           FETCH c_cal_setup INTO l_c_cal;
7106           CLOSE c_cal_setup;
7107           IF l_c_cal IS NULL THEN
7108              p_usec_teach_resp_rec.status :='E';
7109              fnd_message.set_name('IGS','IGS_PS_NO_CAL_CAT_SETUP');
7110              fnd_msg_pub.add;
7111           ELSIF l_c_cal = 'x' THEN
7112              l_n_total_wl := NVL(p_usec_teach_resp_rec.instructional_load_lecture,0) +
7113                              NVL(p_usec_teach_resp_rec.instructional_load_laboratory,0) +
7114                              NVL(p_usec_teach_resp_rec.instructional_load_other,0);
7115 
7116              OPEN c_cal_inst(l_n_uoo_id);
7117              FETCH c_cal_inst INTO rec_cal_inst;
7118              IF c_cal_inst%FOUND THEN
7119                 IF rec_cal_inst.unit_section_status NOT IN ('CANCELLED','NOT_OFFERED') THEN
7120                    IF igs_ps_gen_001.teach_fac_wl (rec_cal_inst.cal_type,
7121                                                    rec_cal_inst.ci_sequence_number,
7122                                                    l_n_ins_id,
7123                                                    l_n_total_wl,
7124                                                    l_n_tot_fac_wl,
7125                                                    l_n_exp_wl
7126                                                    ) THEN
7127                       p_usec_teach_resp_rec.status :='E';
7128                       fnd_message.set_name('IGS','IGS_PS_FAC_EXCEED_EXP_WL');
7129                       fnd_msg_pub.add;
7130                    END IF;
7131                    IF l_n_exp_wl IS NULL OR l_n_exp_wl = 0 THEN
7132                       p_usec_teach_resp_rec.status :='E';
7133                       fnd_message.set_name('IGS','IGS_PS_NO_SETUP_FAC_EXCEED');
7134                       fnd_msg_pub.add;
7135                    END IF;
7136                 END IF;
7137              END IF;
7138              CLOSE c_cal_inst;
7139           END IF;
7140       END IF;
7141 
7142 
7143     END Business_validation;
7144 
7145  FUNCTION post_uso_resp_busi (p_usec_teach_resp_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_teach_resp_tbl_type) RETURN BOOLEAN AS
7146 
7147 
7148    l_tab_uoo igs_ps_create_generic_pkg.uoo_tbl_type;
7149 
7150    CURSOR c_count_lead (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
7151      SELECT count(*)
7152      FROM   IGS_PS_USEC_TCH_RESP
7153      WHERE  uoo_id = cp_n_uoo_id
7154       AND   lead_instructor_flag = 'Y';
7155 
7156    CURSOR c_count_percent(cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
7157      SELECT SUM(PERCENTAGE_ALLOCATION)
7158      FROM   IGS_PS_USEC_TCH_RESP
7159      WHERE  confirmed_flag = 'Y'
7160      AND    uoo_id = cp_n_uoo_id;
7161 
7162    CURSOR c_unit_dtls (cp_n_uoo_id igs_ps_unit_ofr_opt_all.uoo_id%TYPE) IS
7163      SELECT unit_cd,
7164             version_number
7165      FROM   igs_ps_unit_ofr_opt_all
7166      WHERE  uoo_id = cp_n_uoo_id
7167      AND    ROWNUM < 2;
7168 
7169    CURSOR c_null IS
7170    SELECT message_text
7171    FROM   fnd_new_messages
7172    WHERE  message_name = 'IGS_PS_NULL'
7173    AND    application_id = 8405
7174    AND    LANGUAGE_CODE = USERENV('LANG');
7175 
7176    l_c_null  fnd_new_messages.message_text%TYPE;
7177 
7178    l_n_count NUMBER;
7179    l_n_from NUMBER;
7180    l_n_to NUMBER;
7181    l_b_validation BOOLEAN;
7182    l_b_status BOOLEAN;
7183    l_b_wl_validation BOOLEAN;
7184    l_n_tot_lec NUMBER;
7185    l_n_tot_lab NUMBER;
7186    l_n_tot_oth NUMBER;
7187    rec_unit_dtls c_unit_dtls%ROWTYPE;
7188    l_c_validation_type igs_ps_unit_ver_all.workload_val_code%TYPE;
7189 
7190 
7191  BEGIN
7192    l_b_validation := TRUE;
7193    l_b_status :=TRUE;
7194    l_b_wl_validation := TRUE;
7195 
7196    IF v_tab_usec_sr.EXISTS(1) THEN
7197       l_tab_uoo(1) := v_tab_usec_sr(1).uoo_id;
7198 
7199      FOR I in 2.. v_tab_usec_sr.COUNT LOOP
7200          IF NOT igs_ps_validate_lgcy_pkg.isExists(v_tab_usec_sr(I).uoo_id,l_tab_uoo) THEN
7201            l_tab_uoo(l_tab_uoo.count+1) := v_tab_usec_sr(I).uoo_id;
7202          END IF;
7203      END LOOP;
7204 
7205      -- Get the parent unit version.
7206      OPEN c_unit_dtls (l_tab_uoo(1));
7207      FETCH c_unit_dtls INTO rec_unit_dtls;
7208      CLOSE c_unit_dtls;
7209 
7210      -- Get the workload validation type
7211      l_c_validation_type := igs_ps_fac_credt_wrkload.get_validation_type (rec_unit_dtls.unit_cd, rec_unit_dtls.version_number);
7212 
7213      FOR I in 1.. l_tab_uoo.count LOOP
7214 
7215         l_n_from := fnd_msg_pub.count_msg;
7216         l_b_validation := TRUE;
7217         l_b_wl_validation := TRUE;
7218         OPEN c_count_lead(l_tab_uoo(I));
7219         FETCH c_count_lead INTO l_n_count;
7220         CLOSE c_count_lead;
7221         IF l_n_count < 1 THEN
7222              fnd_message.set_name('IGS','IGS_PS_ATLST_ONE_LD_INSTRCTR');
7223              fnd_msg_pub.add;
7224              l_b_validation :=FALSE;
7225         ELSIF l_n_count > 1 THEN
7226              fnd_message.set_name ('IGS','IGS_PS_LEAD_INSTRUCTOR_ONE');
7227              fnd_msg_pub.add;
7228              l_b_validation :=FALSE;
7229         END IF;
7230 
7231         IF l_c_validation_type <> 'NONE' THEN
7232            OPEN c_count_percent(l_tab_uoo(I));
7233            FETCH c_count_percent INTO l_n_count;
7234            CLOSE c_count_percent;
7235 
7236            IF l_n_count <> 100 THEN
7237               fnd_message.set_name('IGS', 'IGS_PS_US_TCHRESP_NOTTOTAL_100');
7238               fnd_msg_pub.add;
7239               l_b_wl_validation :=FALSE;
7240            END IF;
7241 
7242            IF NOT igs_ps_fac_credt_wrkload.validate_workload(l_tab_uoo(I),l_n_tot_lec,l_n_tot_lab,l_n_tot_oth) THEN
7243               fnd_message.set_name('IGS','IGS_PS_WKLOAD_VALIDATION');
7244 	      OPEN c_null;
7245 	      FETCH c_null INTO l_c_null;
7246 	      CLOSE c_null;
7247 
7248               IF l_n_tot_lec = -999 THEN
7249                 fnd_message.set_token('WKLOAD_LECTURE',l_c_null);
7250               ELSE
7251                 fnd_message.set_token('WKLOAD_LECTURE',l_n_tot_lec);
7252               END IF;
7253 
7254               IF l_n_tot_lab = -999 THEN
7255                 fnd_message.set_token('WKLOAD_LAB',l_c_null);
7256               ELSE
7257                 fnd_message.set_token('WKLOAD_LAB',l_n_tot_lab);
7258               END IF;
7259 
7260               IF l_n_tot_oth = -999 THEN
7261                 fnd_message.set_token('WKLOAD_OTHER',l_c_null);
7262               ELSE
7263                 fnd_message.set_token('WKLOAD_OTHER',l_n_tot_oth);
7264               END IF;
7265 
7266 	      fnd_msg_pub.add;
7267               l_b_wl_validation :=FALSE;  -- modified as a part of Bug # 3568858.
7268            END IF;
7269         END IF;
7270 
7271         IF NOT (l_b_validation AND l_b_wl_validation) THEN
7272            l_n_to := fnd_msg_pub.count_msg;
7273            FOR j in 1.. v_tab_usec_sr.COUNT LOOP
7274                IF l_tab_uoo(I) = v_tab_usec_sr(j).uoo_id AND p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).status = 'S' THEN
7275                   -- Setting the status of the record properly
7276                   -- Set the status of records as error and return status (l_b_status) as error when
7277                   -- 1) if the lead instructor validation is fails
7278                   -- 2) if the percentage allocation or workload validation fails, when the workload validation type is 'DENY'.
7279                   -- Set the status of record as warning
7280                   -- 1) if the percentage allocation or workload validation fails, when the workload validation type is 'WARN'.
7281                   IF NOT l_b_validation THEN
7282                      -- Failure of lead instructor validation.
7283                      p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).status := 'E';
7284                      l_b_status :=FALSE;
7285                   ELSE
7286                       -- when workload validation type is not equal to NONE
7287                       IF l_c_validation_type = 'WARN' THEN
7288                          -- setting the status as warning for the record and not setting the value for l_b_status.
7289                          p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).status := 'W';
7290                       ELSE  -- workload workload validation type is DENY
7291                          -- setting the status of the record and l_b_status as error.
7292                          p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).status := 'E';
7293                          l_b_status :=FALSE;
7294                       END IF;
7295                    END IF;
7296 
7297                    p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).msg_from := l_n_from +1;
7298                    p_usec_teach_resp_tbl(v_tab_usec_sr(j).instr_index).msg_to := l_n_to;
7299                END IF;
7300            END LOOP;
7301         END IF;
7302 
7303      END LOOP;
7304 
7305      v_tab_usec_sr.delete;
7306      return l_b_status;
7307    ELSE
7308 
7309       RETURN TRUE;
7310    END IF;
7311  END post_uso_resp_busi;
7312 
7313 BEGIN
7314 
7315   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7316     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.start_logging_for',
7317                     'Unit Section ');
7318   END IF;
7319 
7320   p_c_rec_status := 'S';
7321   FOR I in 1..p_usec_teach_resp_tbl.LAST LOOP
7322      IF p_usec_teach_resp_tbl.EXISTS(I) THEN
7323 	p_usec_teach_resp_tbl(I).status := 'S';
7324 	p_usec_teach_resp_tbl(I).msg_from := fnd_msg_pub.count_msg;
7325 	trim_values(p_usec_teach_resp_tbl(I));
7326 	validate_parameters(p_usec_teach_resp_tbl(I));
7327 
7328         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7329 	   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_validate_parameters',
7330 	   'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7331 	   ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7332 	   p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7333 	   ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7334         END IF;
7335 
7336 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7337 	   validate_derivation(p_usec_teach_resp_tbl(I));
7338 
7339 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7340 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_validate_derivation',
7341 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7342 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7343 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7344 	     ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7345            END IF;
7346 
7347 	END IF;
7348 
7349 
7350 	IF p_usec_teach_resp_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
7351 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
7352 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
7353 	    fnd_msg_pub.add;
7354 	    p_usec_teach_resp_tbl(I).status := 'A';
7355 	  END IF;
7356 
7357 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7358 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_check_import_allowed',
7359 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7360 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7361 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7362 	     ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7363           END IF;
7364 
7365 	END IF;
7366 
7367 
7368 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7369 	   Assign_default(p_usec_teach_resp_tbl(I));
7370 
7371 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7372 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_Assign_default',
7373 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7374 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7375 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7376 	     ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7377            END IF;
7378 
7379 	END IF;
7380 
7381 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7382 	   validate_db_cons ( p_usec_teach_resp_tbl(I) );
7383 
7384 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7385 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_validate_db_cons',
7386 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7387 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7388 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7389 	     ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7390            END IF;
7391 
7392 	END IF;
7393 
7394 
7395 	--Business validations
7396 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7397 	  Business_validation(p_usec_teach_resp_tbl(I));
7398 
7399 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7400 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.status_after_Business_validation',
7401 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7402 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7403 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number
7404 	     ||'  '||'Status:'|| p_usec_teach_resp_tbl(I).status);
7405            END IF;
7406 	END IF;
7407 
7408 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7409 
7410 	   UPDATE IGS_PS_USEC_TCH_RESP SET
7411            confirmed_flag = p_usec_teach_resp_tbl(I).confirmed_flag ,
7412 	   lead_instructor_flag = p_usec_teach_resp_tbl(I).lead_instructor_flag,
7413 	   instructional_load = p_usec_teach_resp_tbl(I).instructional_load_other,
7414 	   instructional_load_lab = p_usec_teach_resp_tbl(I).instructional_load_laboratory,
7415 	   instructional_load_lecture = p_usec_teach_resp_tbl(I).instructional_load_lecture,
7416 	   percentage_allocation = p_usec_teach_resp_tbl(I).wl_percentage_allocation,
7417 	   last_updated_by = g_n_user_id ,
7418 	   last_update_date = sysdate ,
7419 	   last_update_login = g_n_login_id
7420 	   WHERE uoo_id=l_n_uoo_id AND instructor_id=l_n_ins_id;
7421 
7422            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7423 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.Record_updated',
7424 	     'Unit code:'||p_usec_teach_resp_tbl(I).unit_cd||'  '||'Version number:'||p_usec_teach_resp_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7425 	     ||p_usec_teach_resp_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_teach_resp_tbl(I).location_cd||'  '||'Unit Class:'||
7426 	     p_usec_teach_resp_tbl(I).unit_class||'  '||'instructor_person_number:'||p_usec_teach_resp_tbl(I).instructor_person_number);
7427            END IF;
7428 
7429 	   v_tab_usec_sr(v_tab_usec_sr.count +1).uoo_id := l_n_uoo_id;
7430            v_tab_usec_sr(v_tab_usec_sr.count).instr_index := I;
7431 
7432 	END IF;
7433 
7434 
7435 	IF p_usec_teach_resp_tbl(I).status = 'S' THEN
7436 	   p_usec_teach_resp_tbl(I).msg_from := NULL;
7437 	   p_usec_teach_resp_tbl(I).msg_to := NULL;
7438 	ELSIF  p_usec_teach_resp_tbl(I).status = 'A' THEN
7439 	   p_usec_teach_resp_tbl(I).msg_from  := p_usec_teach_resp_tbl(I).msg_from + 1;
7440 	   p_usec_teach_resp_tbl(I).msg_to := fnd_msg_pub.count_msg;
7441 	ELSE
7442 	   p_c_rec_status := p_usec_teach_resp_tbl(I).status;
7443 	   p_usec_teach_resp_tbl(I).msg_from := p_usec_teach_resp_tbl(I).msg_from+1;
7444 	   p_usec_teach_resp_tbl(I).msg_to := fnd_msg_pub.count_msg;
7445 	   IF p_usec_teach_resp_tbl(I).status = 'E' THEN
7446 	      RETURN;
7447 	   END IF;
7448 	END IF;
7449 
7450      END IF;
7451   END LOOP;
7452 
7453   IF NOT post_uso_resp_busi(p_usec_teach_resp_tbl) THEN
7454 	  p_c_rec_status :=  'E';
7455   END IF;
7456 
7457   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7458     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_teach_resp.after_import_status',p_c_rec_status);
7459   END IF;
7460 
7461 END create_usec_teach_resp;
7462 
7463 
7464 PROCEDURE create_usec_sp_fee(p_usec_sp_fee_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_tbl_type
7465                              ,p_c_rec_status OUT NOCOPY VARCHAR2
7466 			     ,p_calling_context IN VARCHAR2) IS
7467 /***********************************************************************************************
7468 
7469 Created By:         sarakshi
7470 Date Created By:    31-May-2005
7471 Purpose:            This procedure imports unit section special Fees.
7472 
7473 Known limitations,enhancements,remarks:
7474 Change History
7475 Who        When          What
7476 abshriva  12-May-2006   Bug #5217319, added the call to precision method to get the correct precision value
7477                        on insert and update, removed the hard coded format checks.
7478 sommukhe   18-Jan-2006  Bug#4926548, modified cursorc_fee_type_exists to address the performance issue.
7479                         Created local procedures and functions.
7480 ***********************************************************************************************/
7481     l_c_cal_type    igs_ca_inst_all.cal_type%TYPE;
7482     l_n_seq_num     igs_ca_inst_all.sequence_number%TYPE;
7483     l_n_uoo_id      igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
7484     l_insert_update  VARCHAR2(1);
7485 
7486     PROCEDURE trim_values ( p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type) AS
7487     BEGIN
7488 
7489       p_usec_sp_fee_rec.unit_cd := TRIM(p_usec_sp_fee_rec.unit_cd);
7490       p_usec_sp_fee_rec.version_number := TRIM(p_usec_sp_fee_rec.version_number);
7491       p_usec_sp_fee_rec.teach_cal_alternate_code := TRIM(p_usec_sp_fee_rec.teach_cal_alternate_code);
7492       p_usec_sp_fee_rec.location_cd := TRIM(p_usec_sp_fee_rec.location_cd);
7493       p_usec_sp_fee_rec.unit_class := TRIM(p_usec_sp_fee_rec.unit_class);
7494       p_usec_sp_fee_rec.fee_type := TRIM(p_usec_sp_fee_rec.fee_type);
7495       p_usec_sp_fee_rec.sp_fee_amt := TRIM(p_usec_sp_fee_rec.sp_fee_amt);
7496       p_usec_sp_fee_rec.closed_flag := TRIM(p_usec_sp_fee_rec.closed_flag);
7497 
7498     END trim_values;
7499 
7500     PROCEDURE validate_parameters(p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type) AS
7501 
7502     BEGIN
7503       p_usec_sp_fee_rec.status:='S';
7504 
7505 
7506       IF p_usec_sp_fee_rec.unit_cd IS NULL OR p_usec_sp_fee_rec.unit_cd = FND_API.G_MISS_CHAR THEN
7507          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
7508          p_usec_sp_fee_rec.status := 'E';
7509       END IF;
7510 
7511       IF p_usec_sp_fee_rec.version_number IS NULL OR p_usec_sp_fee_rec.version_number = FND_API.G_MISS_NUM THEN
7512          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
7513          p_usec_sp_fee_rec.status := 'E';
7514       END IF;
7515 
7516       IF p_usec_sp_fee_rec.teach_cal_alternate_code IS NULL OR p_usec_sp_fee_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
7517 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
7518 	 p_usec_sp_fee_rec.status := 'E';
7519       END IF;
7520 
7521       IF p_usec_sp_fee_rec.location_cd IS NULL OR p_usec_sp_fee_rec.location_cd = FND_API.G_MISS_CHAR THEN
7522 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
7523 	 p_usec_sp_fee_rec.status := 'E';
7524       END IF;
7525 
7526       IF p_usec_sp_fee_rec.unit_class IS NULL OR p_usec_sp_fee_rec.unit_class = FND_API.G_MISS_CHAR THEN
7527         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
7528 	p_usec_sp_fee_rec.status := 'E';
7529       END IF;
7530 
7531       IF p_usec_sp_fee_rec.fee_type IS NULL OR p_usec_sp_fee_rec.fee_type = FND_API.G_MISS_CHAR THEN
7532         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FEE_TYPE','IGS_FI_LOCKBOX',FALSE);
7533 	p_usec_sp_fee_rec.status := 'E';
7534       END IF;
7535 
7536       IF p_usec_sp_fee_rec.sp_fee_amt IS NULL OR p_usec_sp_fee_rec.sp_fee_amt = FND_API.G_MISS_NUM THEN
7537         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FEE_AMOUNT','LEGACY_TOKENS',FALSE);
7538 	p_usec_sp_fee_rec.status := 'E';
7539       END IF;
7540 
7541     END validate_parameters;
7542 
7543     PROCEDURE validate_derivation(p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type) AS
7544 
7545       l_d_start       igs_ca_inst_all.start_dt%TYPE;
7546       l_d_end         igs_ca_inst_all.end_dt%TYPE;
7547       l_c_ret_status  VARCHAR2(30);
7548 
7549     BEGIN
7550 
7551        -- Deriving the Calendar Type and Calendar Sequence Number
7552        igs_ge_gen_003.get_calendar_instance(p_usec_sp_fee_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
7553        IF l_c_ret_status <> 'SINGLE' THEN
7554 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
7555 	   p_usec_sp_fee_rec.status := 'E';
7556        END IF;
7557 
7558        -- Deriving the Unit Offering Option Identifier
7559        l_c_ret_status := NULL;
7560        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_sp_fee_rec.unit_cd, p_usec_sp_fee_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_sp_fee_rec.location_cd, p_usec_sp_fee_rec.unit_class, l_n_uoo_id, l_c_ret_status);
7561        IF l_c_ret_status IS NOT NULL THEN
7562 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
7563 	  p_usec_sp_fee_rec.status := 'E';
7564        END IF;
7565 
7566     END validate_derivation;
7567 
7568     PROCEDURE validate_db_cons(p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type,p_insert_update IN VARCHAR2) AS
7569 
7570     BEGIN
7571 
7572       IF p_insert_update = 'I' THEN
7573 	/* Unique Key Validation */
7574 	IF igs_ps_usec_sp_fees_pkg.get_uk_for_validation (  x_fee_type => p_usec_sp_fee_rec.fee_type,
7575 							    x_uoo_id => l_n_uoo_id ) THEN
7576 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'FEE_TYPE', 'IGS_FI_LOCKBOX', FALSE);
7577 	  p_usec_sp_fee_rec.status := 'W';
7578 	  RETURN;
7579 	END IF;
7580       END IF;
7581 
7582       -- Check Constraints
7583       BEGIN
7584         igs_ps_unit_ver_pkg.check_constraints( 'UNIT_CD',p_usec_sp_fee_rec.unit_cd);
7585       EXCEPTION
7586         WHEN OTHERS THEN
7587             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_UPPER_CASE','UNIT_CD','LEGACY_TOKENS',TRUE);
7588             p_usec_sp_fee_rec.status :='E';
7589       END;
7590 
7591       BEGIN
7592         igs_ps_unit_ver_pkg.check_constraints('VERSION_NUMBER',p_usec_sp_fee_rec.version_number);
7593       EXCEPTION
7594         WHEN OTHERS THEN
7595           igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VER_NUM_1_999',NULL,NULL,TRUE);
7596           p_usec_sp_fee_rec.status :='E';
7597       END;
7598 
7599       BEGIN
7600           igs_ps_usec_sp_fees_pkg.check_constraints('CLOSED_FLAG', p_usec_sp_fee_rec.closed_flag);
7601       EXCEPTION
7602           WHEN OTHERS THEN
7603              igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_Y_OR_N','CLOSED_FLAG','LEGACY_TOKENS',TRUE);
7604              p_usec_sp_fee_rec.status :='E';
7605       END;
7606 
7607       BEGIN
7608          igs_ps_usec_sp_fees_pkg.check_constraints('SP_FEE_AMT', p_usec_sp_fee_rec.sp_fee_amt);
7609       EXCEPTION
7610          WHEN OTHERS THEN
7611             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_9999D99','FEE_AMOUNT','LEGACY_TOKENS',TRUE);
7612             p_usec_sp_fee_rec.status :='E';
7613       END;
7614 
7615 
7616       -- Foreign Key Checking
7617 
7618       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
7619          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
7620          p_usec_sp_fee_rec.status := 'E';
7621       END IF;
7622 
7623       IF NOT igs_fi_fee_type_pkg.get_pk_for_validation (p_usec_sp_fee_rec.fee_type ) THEN
7624          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'FEE_TYPE', 'IGS_FI_LOCKBOX', FALSE);
7625          p_usec_sp_fee_rec.status := 'E';
7626       END IF;
7627 
7628     END validate_db_cons;
7629 
7630     -- Check for Update/Insert
7631     FUNCTION check_insert_update ( p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type) RETURN VARCHAR2 IS
7632 
7633       CURSOR c_sp_fee IS
7634       SELECT 'X'
7635       FROM  igs_ps_usec_sp_fees
7636       WHERE uoo_id = l_n_uoo_id
7637       AND   fee_type =p_usec_sp_fee_rec.fee_type;
7638 
7639       l_c_sp_fee c_sp_fee%ROWTYPE;
7640 
7641     BEGIN
7642 
7643        OPEN c_sp_fee;
7644        FETCH c_sp_fee INTO l_c_sp_fee;
7645        IF c_sp_fee%FOUND THEN
7646 	 CLOSE c_sp_fee;
7647 	 RETURN 'U';
7648        ELSE
7649 	 CLOSE c_sp_fee;
7650 	 RETURN 'I';
7651        END IF;
7652 
7653     END check_insert_update;
7654 
7655     PROCEDURE Assign_default(p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type,p_insert_update IN VARCHAR2) AS
7656       CURSOR cur_sp_fees(cp_n_uoo_id IN NUMBER,cp_c_fee_type IN VARCHAR2) IS
7657       SELECT *
7658       FROM   igs_ps_usec_sp_fees
7659       WHERE  uoo_id = cp_n_uoo_id
7660       AND    fee_type = cp_c_fee_type;
7661 
7662       l_cur_sp_fees cur_sp_fees%ROWTYPE;
7663 
7664     BEGIN
7665        IF p_insert_update = 'I' THEN
7666 
7667          IF p_usec_sp_fee_rec.closed_flag IS NULL THEN
7668            p_usec_sp_fee_rec.closed_flag := 'N';
7669 	 END IF;
7670 
7671        ELSE
7672 
7673          OPEN cur_sp_fees(l_n_uoo_id,p_usec_sp_fee_rec.fee_type);
7674          FETCH cur_sp_fees into l_cur_sp_fees;
7675          CLOSE cur_sp_fees;
7676 
7677  	 IF p_usec_sp_fee_rec.closed_flag IS NULL THEN
7678 	   p_usec_sp_fee_rec.closed_flag  := l_cur_sp_fees.closed_flag;
7679          ELSIF p_usec_sp_fee_rec.closed_flag = FND_API.G_MISS_CHAR THEN
7680 	   p_usec_sp_fee_rec.closed_flag  := 'N';
7681 	 END IF;
7682 
7683        END IF;
7684 
7685     END Assign_default;
7686 
7687     PROCEDURE Business_validation(p_usec_sp_fee_rec IN OUT NOCOPY igs_ps_generic_pub.usec_sp_fee_rec_type,p_insert_update IN VARCHAR2) AS
7688 
7689       CURSOR c_fee_type_exists(cp_source_fee_type      igs_fi_fee_type.fee_type%TYPE) IS
7690       SELECT ci.cal_type cal_type,ci.sequence_number sequence_number
7691       FROM  igs_fi_fee_type ft,
7692             igs_fi_f_typ_ca_inst ftci,
7693 	    igs_ca_inst ci,
7694 	    igs_ca_type ct,
7695 	    igs_ca_stat cs
7696       WHERE ft.s_fee_type = 'SPECIAL'
7697       AND   ft.closed_ind = 'N'
7698       AND   ft.fee_type = ftci.fee_type
7699       AND   ft.fee_type = cp_source_fee_type
7700       AND   ftci.fee_cal_type = ci.cal_type
7701       AND   ftci.fee_ci_sequence_number = ci.sequence_number
7702       AND   ci.cal_type = ct.cal_type
7703       AND   ct.s_cal_cat = 'FEE'
7704       AND   ci.cal_status = cs.cal_status
7705       AND   cs.s_cal_status = 'ACTIVE' ;
7706 
7707       c_fee_type_exists_rec c_fee_type_exists%ROWTYPE;
7708 
7709       l_message_name VARCHAR2(30);
7710       l_c_var VARCHAR2(1);
7711 
7712       TYPE teach_cal_rec IS RECORD(
7713 				 cal_type igs_ca_inst_all.cal_type%TYPE,
7714 				 sequence_number igs_ca_inst_all.sequence_number%TYPE
7715 				 );
7716       TYPE teachCalendar IS TABLE OF teach_cal_rec INDEX BY BINARY_INTEGER;
7717       teachCalendar_tbl teachCalendar;
7718       l_n_counter NUMBER(10);
7719       l_c_proceed BOOLEAN ;
7720 
7721 
7722       PROCEDURE createCalendar  IS
7723 
7724       CURSOR cur_cal_teach(cp_load_cal igs_ca_teach_to_load_v.load_cal_type%TYPE,
7725 			   cp_load_seq igs_ca_teach_to_load_v.load_ci_sequence_number%TYPE) IS
7726       SELECT sup_cal_type,sup_ci_sequence_number
7727       FROM   igs_ca_inst_rel
7728       WHERE sub_cal_type = cp_load_cal
7729       AND sub_ci_sequence_number = cp_load_seq;
7730 
7731       CURSOR cur_cal_load IS
7732       SELECT load_cal_type,load_ci_sequence_number
7733       FROM   igs_ca_teach_to_load_v
7734       WHERE  teach_cal_type=l_c_cal_type
7735       AND    teach_ci_sequence_number=l_n_seq_num;
7736 
7737       BEGIN
7738 	 --populate the pl-sql table with the superior calendar's by mapping the teach calendars.
7739 	 l_n_counter :=1;
7740 	 FOR rec_cur_cal_load IN cur_cal_load LOOP
7741 	     FOR rec_cur_cal_teach IN cur_cal_teach(rec_cur_cal_load.load_cal_type ,rec_cur_cal_load.load_ci_sequence_number) LOOP
7742 		teachCalendar_tbl(l_n_counter).cal_type :=rec_cur_cal_teach.sup_cal_type;
7743 		teachCalendar_tbl(l_n_counter).sequence_number :=rec_cur_cal_teach.sup_ci_sequence_number;
7744 		l_n_counter:=l_n_counter+1;
7745 	     END LOOP;
7746 	 END LOOP;
7747 
7748       END createCalendar;
7749 
7750       FUNCTION testCalendar(cp_cal_type igs_ca_inst_all.cal_type%TYPE,
7751 			    cp_sequence_number igs_ca_inst_all.sequence_number%TYPE)  RETURN BOOLEAN AS
7752       BEGIN
7753 	IF teachCalendar_tbl.EXISTS(1) THEN
7754 	  FOR i IN 1..teachCalendar_tbl.last LOOP
7755 	       IF cp_cal_type=teachCalendar_tbl(i).cal_type AND
7756 		  cp_sequence_number=teachCalendar_tbl(i).sequence_number THEN
7757 		  RETURN TRUE;
7758 	       END IF;
7759 	  END LOOP;
7760 	END IF;
7761 	RETURN FALSE;
7762       END testCalendar;
7763 
7764 
7765     BEGIN
7766 
7767     --Store the superior calendars in a pl-sql tables for the input teaching calendars
7768     createCalendar;
7769       --Check if the unit is INACTIVE, then do not allow to import
7770       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_sp_fee_rec.unit_cd, p_usec_sp_fee_rec.version_number,l_message_name)=FALSE THEN
7771 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
7772 	    fnd_msg_pub.add;
7773 	    p_usec_sp_fee_rec.status := 'E';
7774       END IF;
7775 
7776       --If enrollment exists for this unit section then insert/update
7777       IF igs_ps_gen_003.enrollment_for_uoo_check(l_n_uoo_id) = TRUE THEN
7778 	    fnd_message.set_name ( 'IGS', 'IGS_PS_US_FEE_TYP_USED_ENROLL' );
7779 	    fnd_msg_pub.add;
7780 	    p_usec_sp_fee_rec.status := 'E';
7781       END IF;
7782 
7783       IF p_insert_update = 'I' THEN
7784 	l_c_proceed:= FALSE;
7785 	  FOR rec_c_fee_type_exists IN c_fee_type_exists(p_usec_sp_fee_rec.fee_type) LOOP
7786 	    IF testCalendar(rec_c_fee_type_exists.cal_type ,rec_c_fee_type_exists.sequence_number ) THEN
7787 	      l_c_proceed:= TRUE;
7788 	      EXIT;
7789 	    END IF;
7790           END LOOP;
7791 
7792 	  IF l_c_proceed = FALSE THEN
7793             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FEE_TYPE', 'IGS_FI_LOCKBOX', FALSE);
7794 	    p_usec_sp_fee_rec.status := 'E';
7795 	  END IF;
7796       END IF;
7797 
7798     IF teachCalendar_tbl.EXISTS(1) THEN
7799       teachCalendar_tbl.DELETE;
7800     END IF;
7801 
7802 
7803     END Business_validation;
7804 
7805 BEGIN
7806 
7807   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7808     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.start_logging_for',
7809                     'Unit Section Special Fees');
7810   END IF;
7811 
7812   p_c_rec_status := 'S';
7813   FOR I in 1..p_usec_sp_fee_tbl.LAST LOOP
7814      IF p_usec_sp_fee_tbl.EXISTS(I) THEN
7815 	-- Initialize the variable use to store the derived values.
7816 	l_n_uoo_id  := NULL;
7817 	l_c_cal_type:= NULL;
7818 	l_n_seq_num := NULL;
7819 	p_usec_sp_fee_tbl(I).status := 'S';
7820 	p_usec_sp_fee_tbl(I).msg_from := fnd_msg_pub.count_msg;
7821 	trim_values(p_usec_sp_fee_tbl(I));
7822 	validate_parameters(p_usec_sp_fee_tbl(I));
7823 
7824 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7825 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_validate_parameters',
7826 	  'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7827 	  ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7828 	  p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type||'  '||'Status:'||
7829 	  p_usec_sp_fee_tbl(I).status);
7830         END IF;
7831 
7832 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7833 	   validate_derivation(p_usec_sp_fee_tbl(I));
7834 
7835            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7836 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_validate_derivation',
7837 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7838 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7839 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7840 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7841            END IF;
7842 
7843 	END IF;
7844 
7845 	--Find out whether it is insert/update of record
7846 	l_insert_update:='I';
7847 	IF p_usec_sp_fee_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
7848 	  l_insert_update:= check_insert_update(p_usec_sp_fee_tbl(I));
7849 
7850           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7851 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_check_insert_update',
7852 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7853 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7854 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7855 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7856            END IF;
7857 
7858 	END IF;
7859 
7860 	IF p_usec_sp_fee_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
7861 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
7862 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
7863 	    fnd_msg_pub.add;
7864 	    p_usec_sp_fee_tbl(I).status := 'A';
7865 	  END IF;
7866 
7867 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7868 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_check_import_allowed',
7869 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7870 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7871 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7872 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7873           END IF;
7874 
7875 	END IF;
7876 
7877 
7878 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7879 	   Assign_default(p_usec_sp_fee_tbl(I),l_insert_update);
7880 
7881            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7882 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_Assign_default',
7883 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7884 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7885 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7886 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7887            END IF;
7888 
7889 	END IF;
7890 
7891 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7892 	   validate_db_cons ( p_usec_sp_fee_tbl(I),l_insert_update);
7893 
7894            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7895 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_validate_db_cons',
7896 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7897 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7898 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7899 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7900            END IF;
7901 
7902 	END IF;
7903 
7904 
7905 	--Business validations
7906 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7907 	  Business_validation(p_usec_sp_fee_tbl(I),l_insert_update);
7908 
7909            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7910 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.status_after_Business_validation',
7911 	     'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7912 	     ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7913 	     p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type
7914 	     ||'  '||'Status:'||p_usec_sp_fee_tbl(I).status);
7915            END IF;
7916 
7917 	END IF;
7918 
7919 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7920           p_usec_sp_fee_tbl(I).sp_fee_amt :=igs_fi_gen_gl.get_formatted_amount(p_usec_sp_fee_tbl(I).sp_fee_amt);
7921           IF l_insert_update = 'I' THEN
7922 	    INSERT INTO IGS_PS_USEC_SP_FEES(
7923 	      USEC_SP_FEES_ID,
7924 	      UOO_ID,
7925 	      FEE_TYPE,
7926 	      SP_FEE_AMT,
7927 	      CLOSED_FLAG,
7928 	      CREATED_BY,
7929 	      CREATION_DATE,
7930 	      LAST_UPDATED_BY,
7931 	      LAST_UPDATE_DATE,
7932 	      LAST_UPDATE_LOGIN )
7933 	    VALUES (
7934 	       igs_ps_usec_sp_fees_s.NEXTVAL,
7935 	       l_n_uoo_id,
7936 	       p_usec_sp_fee_tbl(I).fee_type,
7937 	       p_usec_sp_fee_tbl(I).sp_fee_amt,
7938 	       p_usec_sp_fee_tbl(I).closed_flag,
7939 	       g_n_user_id,
7940 	       SYSDATE,
7941 	       g_n_user_id,
7942 	       SYSDATE,
7943 	       g_n_login_id);
7944 
7945                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7946 		 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.Record_Inserted',
7947 		 'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7948 		 ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7949 		 p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type);
7950                END IF;
7951 
7952           ELSE
7953             UPDATE IGS_PS_USEC_SP_FEES SET
7954             SP_FEE_AMT = p_usec_sp_fee_tbl(I).sp_fee_amt,
7955             CLOSED_FLAG = p_usec_sp_fee_tbl(I).closed_flag,
7956 	    last_updated_by = g_n_user_id ,
7957 	    last_update_date = sysdate ,
7958 	    last_update_login = g_n_login_id
7959 	    WHERE uoo_id=l_n_uoo_id AND fee_type=p_usec_sp_fee_tbl(I).fee_type;
7960 
7961             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7962 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.Record_Updated',
7963 	       'Unit code:'||p_usec_sp_fee_tbl(I).unit_cd||'  '||'Version number:'||p_usec_sp_fee_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
7964 	       ||p_usec_sp_fee_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_sp_fee_tbl(I).location_cd||'  '||'Unit Class:'||
7965 	       p_usec_sp_fee_tbl(I).unit_class||'  '||'Fee type:'||p_usec_sp_fee_tbl(I).fee_type);
7966             END IF;
7967 
7968           END IF;
7969 
7970 	END IF;
7971 
7972 
7973 	IF p_usec_sp_fee_tbl(I).status = 'S' THEN
7974 	   p_usec_sp_fee_tbl(I).msg_from := NULL;
7975 	   p_usec_sp_fee_tbl(I).msg_to := NULL;
7976 	ELSIF  p_usec_sp_fee_tbl(I).status = 'A' THEN
7977 	   p_usec_sp_fee_tbl(I).msg_from  := p_usec_sp_fee_tbl(I).msg_from + 1;
7978 	   p_usec_sp_fee_tbl(I).msg_to := fnd_msg_pub.count_msg;
7979 	ELSE
7980 	   p_c_rec_status := p_usec_sp_fee_tbl(I).status;
7981 	   p_usec_sp_fee_tbl(I).msg_from := p_usec_sp_fee_tbl(I).msg_from+1;
7982 	   p_usec_sp_fee_tbl(I).msg_to := fnd_msg_pub.count_msg;
7983 	   IF p_usec_sp_fee_tbl(I).status = 'E' THEN
7984 	      RETURN;
7985 	   END IF;
7986 	END IF;
7987 
7988      END IF;
7989   END LOOP;
7990 
7991   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7992     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_sp_fee.after_import_status',p_c_rec_status);
7993   END IF;
7994 
7995 
7996 END create_usec_sp_fee;
7997 
7998 PROCEDURE create_usec_plus_hr(p_usec_plus_hr_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_tbl_type
7999                               ,p_c_rec_status OUT NOCOPY VARCHAR2
8000  			      ,p_calling_context IN VARCHAR2) IS
8001 /***********************************************************************************************
8002 
8003 Created By:         sarakshi
8004 Date Created By:    01-Jun-2005
8005 Purpose:            This procedure imports unit section Plus Hours.
8006 
8007 Known limitations,enhancements,remarks:
8008 Change History
8009 Who       When         What
8010 ***********************************************************************************************/
8011 
8012 	l_n_uoo_id      NUMBER;
8013         l_n_activity_id NUMBER;
8014         l_n_building_id NUMBER;
8015         l_n_room_id     NUMBER;
8016         l_n_ins_id      NUMBER;
8017         l_insert_update VARCHAR2(1);
8018 
8019     PROCEDURE trim_values ( p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type) AS
8020     BEGIN
8021 
8022       p_usec_plus_hr_rec.unit_cd := TRIM(p_usec_plus_hr_rec.unit_cd);
8023       p_usec_plus_hr_rec.version_number := TRIM(p_usec_plus_hr_rec.version_number);
8024       p_usec_plus_hr_rec.teach_cal_alternate_code := TRIM(p_usec_plus_hr_rec.teach_cal_alternate_code);
8025       p_usec_plus_hr_rec.location_cd := TRIM(p_usec_plus_hr_rec.location_cd);
8026       p_usec_plus_hr_rec.unit_class := TRIM(p_usec_plus_hr_rec.unit_class);
8027       p_usec_plus_hr_rec.activity_type_code := TRIM(p_usec_plus_hr_rec.activity_type_code);
8028       p_usec_plus_hr_rec.activity_location_cd := TRIM(p_usec_plus_hr_rec.activity_location_cd);
8029       p_usec_plus_hr_rec.building_cd := TRIM(p_usec_plus_hr_rec.building_cd);
8030       p_usec_plus_hr_rec.room_cd := TRIM(p_usec_plus_hr_rec.room_cd);
8031       p_usec_plus_hr_rec.number_of_students := TRIM(p_usec_plus_hr_rec.number_of_students);
8032       p_usec_plus_hr_rec.hours_per_student := TRIM(p_usec_plus_hr_rec.hours_per_student);
8033       p_usec_plus_hr_rec.hours_per_faculty := TRIM(p_usec_plus_hr_rec.hours_per_faculty);
8034       p_usec_plus_hr_rec.instructor_number := TRIM(p_usec_plus_hr_rec.instructor_number);
8035 
8036     END trim_values;
8037 
8038     PROCEDURE validate_parameters(p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type) AS
8039 
8040     BEGIN
8041       p_usec_plus_hr_rec.status:='S';
8042 
8043 
8044       IF p_usec_plus_hr_rec.unit_cd IS NULL OR p_usec_plus_hr_rec.unit_cd = FND_API.G_MISS_CHAR THEN
8045          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
8046          p_usec_plus_hr_rec.status := 'E';
8047       END IF;
8048 
8049       IF p_usec_plus_hr_rec.version_number IS NULL OR p_usec_plus_hr_rec.version_number = FND_API.G_MISS_NUM THEN
8050          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
8051          p_usec_plus_hr_rec.status := 'E';
8052       END IF;
8053 
8054       IF p_usec_plus_hr_rec.teach_cal_alternate_code IS NULL OR p_usec_plus_hr_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
8055 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
8056 	 p_usec_plus_hr_rec.status := 'E';
8057       END IF;
8058 
8059       IF p_usec_plus_hr_rec.location_cd IS NULL OR p_usec_plus_hr_rec.location_cd = FND_API.G_MISS_CHAR THEN
8060 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
8061 	 p_usec_plus_hr_rec.status := 'E';
8062       END IF;
8063 
8064       IF p_usec_plus_hr_rec.unit_class IS NULL OR p_usec_plus_hr_rec.unit_class = FND_API.G_MISS_CHAR THEN
8065         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
8066 	p_usec_plus_hr_rec.status := 'E';
8067       END IF;
8068 
8069       IF p_usec_plus_hr_rec.activity_type_code IS NULL OR p_usec_plus_hr_rec.activity_type_code = FND_API.G_MISS_CHAR THEN
8070         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ACTIVITY_TYPE_CODE','LEGACY_TOKENS',FALSE);
8071 	p_usec_plus_hr_rec.status := 'E';
8072       END IF;
8073 
8074       IF p_usec_plus_hr_rec.activity_location_cd IS NULL OR p_usec_plus_hr_rec.activity_location_cd = FND_API.G_MISS_CHAR THEN
8075         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ACTIVITY_LOCATION_CD','LEGACY_TOKENS',FALSE);
8076 	p_usec_plus_hr_rec.status := 'E';
8077       END IF;
8078 
8079       IF p_usec_plus_hr_rec.building_cd IS NULL OR p_usec_plus_hr_rec.building_cd = FND_API.G_MISS_CHAR THEN
8080         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','BUILDING_CODE','LEGACY_TOKENS',FALSE);
8081 	p_usec_plus_hr_rec.status := 'E';
8082       END IF;
8083 
8084       IF p_usec_plus_hr_rec.room_cd IS NULL OR p_usec_plus_hr_rec.room_cd = FND_API.G_MISS_CHAR THEN
8085         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ROOM_CODE','LEGACY_TOKENS',FALSE);
8086 	p_usec_plus_hr_rec.status := 'E';
8087       END IF;
8088 
8089       IF p_usec_plus_hr_rec.number_of_students IS NULL OR p_usec_plus_hr_rec.number_of_students = FND_API.G_MISS_NUM THEN
8090         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','NUMBER_OF_STUDENTS','LEGACY_TOKENS',FALSE);
8091 	p_usec_plus_hr_rec.status := 'E';
8092       END IF;
8093 
8094       IF p_usec_plus_hr_rec.hours_per_student IS NULL OR p_usec_plus_hr_rec.hours_per_student = FND_API.G_MISS_NUM THEN
8095         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','HOURS_PER_STUDENT','LEGACY_TOKENS',FALSE);
8096 	p_usec_plus_hr_rec.status := 'E';
8097       END IF;
8098 
8099       IF p_usec_plus_hr_rec.hours_per_faculty IS NULL OR p_usec_plus_hr_rec.hours_per_faculty = FND_API.G_MISS_NUM THEN
8100         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','HOURS_PER_FACULTY','LEGACY_TOKENS',FALSE);
8101 	p_usec_plus_hr_rec.status := 'E';
8102       END IF;
8103 
8104 
8105     END validate_parameters;
8106 
8107     PROCEDURE validate_derivation(p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type) AS
8108       l_c_cal_type    VARCHAR2(10);
8109       l_n_seq_num     NUMBER;
8110       l_d_start       igs_ca_inst_all.start_dt%TYPE;
8111       l_d_end         igs_ca_inst_all.end_dt%TYPE;
8112       l_c_ret_status  VARCHAR2(30);
8113 
8114       CURSOR cur_activity_cd(cp_activity_type_code IN VARCHAR2) IS
8115       SELECT activity_type_id
8116       FROM   igs_ps_usec_act_type
8117       WHERE activity_type_code=cp_activity_type_code;
8118 
8119       CURSOR cur_building(cp_location_cd IN VARCHAR2,cp_building_code IN VARCHAR2) IS
8120       SELECT building_id
8121       FROM   igs_ad_building
8122       WHERE  location_cd = cp_location_cd
8123       AND    building_cd=cp_building_code;
8124 
8125       CURSOR cur_room(cp_building_id IN VARCHAR2,cp_room_cd IN VARCHAR2) IS
8126       SELECT room_id
8127       FROM   igs_ad_room
8128       WHERE  building_id=cp_building_id
8129       AND    room_cd= cp_room_cd;
8130 
8131     BEGIN
8132 
8133        -- Deriving the Calendar Type and Calendar Sequence Number
8134        igs_ge_gen_003.get_calendar_instance(p_usec_plus_hr_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
8135        IF l_c_ret_status <> 'SINGLE' THEN
8136 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
8137 	   p_usec_plus_hr_rec.status := 'E';
8138        END IF;
8139 
8140        -- Deriving the Unit Offering Option Identifier
8141        l_c_ret_status := NULL;
8142        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_plus_hr_rec.unit_cd, p_usec_plus_hr_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_plus_hr_rec.location_cd, p_usec_plus_hr_rec.unit_class, l_n_uoo_id, l_c_ret_status);
8143        IF l_c_ret_status IS NOT NULL THEN
8144 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
8145 	  p_usec_plus_hr_rec.status := 'E';
8146        END IF;
8147 
8148        --Derive the activity id
8149        OPEN cur_activity_cd(p_usec_plus_hr_rec.activity_type_code);
8150        FETCH cur_activity_cd INTO l_n_activity_id;
8151        CLOSE cur_activity_cd;
8152 
8153        --Derive the building code
8154        OPEN cur_building(p_usec_plus_hr_rec.activity_location_cd,p_usec_plus_hr_rec.building_cd);
8155        FETCH cur_building INTO l_n_building_id;
8156        IF cur_building%NOTFOUND THEN
8157 	     igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','BUILDING_CODE' ,'LEGACY_TOKENS', FALSE);
8158 	     p_usec_plus_hr_rec.status := 'E';
8159        END IF;
8160        CLOSE cur_building;
8161 
8162        --Derive the room code
8163        OPEN cur_room(l_n_building_id,p_usec_plus_hr_rec.room_cd);
8164        FETCH cur_room INTO l_n_room_id;
8165        IF cur_room%NOTFOUND THEN
8166 	     igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','ROOM_CODE' ,'LEGACY_TOKENS', FALSE);
8167 	     p_usec_plus_hr_rec.status := 'E';
8168        END IF;
8169        CLOSE cur_room;
8170 
8171        -- Derive the Instructor identifier
8172        IF p_usec_plus_hr_rec.instructor_number IS NOT NULL AND p_usec_plus_hr_rec.instructor_number <> FND_API.G_MISS_CHAR THEN
8173 	  igs_ps_validate_lgcy_pkg.get_party_id(p_usec_plus_hr_rec.instructor_number, l_n_ins_id);
8174 	  IF l_n_ins_id IS NULL THEN
8175 	     fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
8176 	     igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', fnd_message.get,NULL, FALSE);
8177 	     p_usec_plus_hr_rec.status := 'E';
8178 	  END IF;
8179        END IF;
8180 
8181 
8182     END validate_derivation;
8183 
8184     PROCEDURE validate_db_cons(p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type,p_insert_update IN VARCHAR2) AS
8185 
8186     BEGIN
8187 
8188       IF p_insert_update = 'I' THEN
8189 	-- Unique Key Validation
8190 	IF igs_ps_us_unsched_cl_pkg.get_uk_for_validation ( x_uoo_id           => l_n_uoo_id,
8191 							    x_activity_type_id => l_n_activity_id,
8192 							    x_location_cd      => p_usec_plus_hr_rec.activity_location_cd,
8193 							    x_building_id      => l_n_building_id,
8194 							    x_room_id          => l_n_room_id    ) THEN
8195 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'PLUS_HOUR', 'LEGACY_TOKENS', FALSE);
8196 	  p_usec_plus_hr_rec.status := 'W';
8197 	  RETURN;
8198 	END IF;
8199       END IF;
8200 
8201       -- Check Constraints
8202 
8203       BEGIN
8204          igs_ps_us_unsched_cl_pkg.check_constraints('NUMBER_OF_STUDENTS', p_usec_plus_hr_rec.number_of_students);
8205       EXCEPTION
8206          WHEN OTHERS THEN
8207             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_9999999999','NUMBER_OF_STUDENTS','LEGACY_TOKENS',TRUE);
8208             p_usec_plus_hr_rec.status :='E';
8209       END;
8210 
8211       BEGIN
8212          igs_ps_us_unsched_cl_pkg.check_constraints('HOURS_PER_STUDENT', p_usec_plus_hr_rec.hours_per_student);
8213       EXCEPTION
8214          WHEN OTHERS THEN
8215             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','HOURS_PER_STUDENT','LEGACY_TOKENS',TRUE);
8216             p_usec_plus_hr_rec.status :='E';
8217       END;
8218 
8219       BEGIN
8220          igs_ps_us_unsched_cl_pkg.check_constraints('HOURS_PER_FACULTY', p_usec_plus_hr_rec.hours_per_faculty);
8221       EXCEPTION
8222          WHEN OTHERS THEN
8223             igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_VAL_0_999D99','HOURS_PER_FACULTY','LEGACY_TOKENS',TRUE);
8224             p_usec_plus_hr_rec.status :='E';
8225       END;
8226 
8227       -- Foreign Key Checking
8228       --Check for the existence of the unit section
8229       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
8230          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
8231          p_usec_plus_hr_rec.status := 'E';
8232       END IF;
8233 
8234       -- Check for existence of Activity Code
8235       IF NOT  igs_ps_usec_act_type_pkg.get_pk_for_validation ( l_n_activity_id ) THEN
8236         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ACTIVITY_TYPE_CODE', 'LEGACY_TOKENS', FALSE);
8237         p_usec_plus_hr_rec.status := 'E';
8238       END IF;
8239 
8240       -- Check for existence of Activity Location Code
8241       IF NOT igs_ad_location_pkg.get_pk_for_validation ( p_usec_plus_hr_rec.activity_location_cd ) THEN
8242         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ACTIVITY_LOCATION_CD', 'LEGACY_TOKENS', FALSE);
8243         p_usec_plus_hr_rec.status := 'E';
8244       END IF;
8245 
8246       -- Check for existence of Building Code Code
8247       IF NOT igs_ad_building_pkg.get_pk_for_validation ( l_n_building_id ) THEN
8248         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'BUILDING_CODE', 'LEGACY_TOKENS', FALSE);
8249         p_usec_plus_hr_rec.status := 'E';
8250       END IF;
8251 
8252       -- Check for existence of Room Code Code
8253       IF NOT igs_ad_room_pkg.get_pk_for_validation ( l_n_room_id ) THEN
8254         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ROOM_CODE', 'LEGACY_TOKENS', FALSE);
8255         p_usec_plus_hr_rec.status := 'E';
8256       END IF;
8257 
8258       -- Check for existence of instructor number
8259       IF l_n_ins_id IS NOT NULL THEN
8260 	IF NOT igs_pe_person_pkg.get_pk_for_validation(l_n_ins_id ) THEN
8261 	   fnd_message.set_name('IGS','IGS_PS_INS_PERSON_NUMBER');
8262 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', fnd_message.get, NULL, FALSE);
8263 	   p_usec_plus_hr_rec.status := 'E';
8264 	END IF;
8265       END IF;
8266 
8267     END validate_db_cons;
8268 
8269     -- Check for Update/Insert
8270     FUNCTION check_insert_update ( p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type) RETURN VARCHAR2 IS
8271 
8272       CURSOR c_plus_hr IS
8273       SELECT 'X'
8274       FROM   igs_ps_us_unsched_cl
8275       WHERE  uoo_id =   l_n_uoo_id
8276       AND    activity_type_id = l_n_activity_id
8277       AND    location_cd = p_usec_plus_hr_rec.activity_location_cd
8278       AND    building_id = l_n_building_id
8279       AND    room_id = l_n_room_id;
8280 
8281 
8282       l_c_plus_hr c_plus_hr%ROWTYPE;
8283 
8284     BEGIN
8285 
8286        OPEN c_plus_hr;
8287        FETCH c_plus_hr INTO l_c_plus_hr;
8288        IF c_plus_hr%FOUND THEN
8289 	 CLOSE c_plus_hr;
8290 	 RETURN 'U';
8291        ELSE
8292 	 CLOSE c_plus_hr;
8293 	 RETURN 'I';
8294        END IF;
8295 
8296     END check_insert_update;
8297 
8298     PROCEDURE Assign_default(p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type,p_insert_update IN VARCHAR2) AS
8299       CURSOR cur_plus_hr IS
8300       SELECT *
8301       FROM   IGS_PS_US_UNSCHED_CL
8302       WHERE  uoo_id =   l_n_uoo_id
8303       AND    activity_type_id = l_n_activity_id
8304       AND    location_cd = p_usec_plus_hr_rec.activity_location_cd
8305       AND    building_id = l_n_building_id
8306       AND    room_id = l_n_room_id;
8307 
8308       l_cur_plus_hr cur_plus_hr%ROWTYPE;
8309 
8310     BEGIN
8311        IF p_insert_update = 'I' THEN
8312 
8313          IF p_usec_plus_hr_rec.instructor_number IS NULL THEN
8314            l_n_ins_id := NULL;
8315 	 END IF;
8316 
8317        ELSE
8318 
8319          OPEN cur_plus_hr;
8320          FETCH cur_plus_hr INTO l_cur_plus_hr;
8321          CLOSE cur_plus_hr;
8322 
8323  	 IF p_usec_plus_hr_rec.instructor_number IS NULL THEN
8324 	   l_n_ins_id := l_cur_plus_hr.instructor_id;
8325          ELSIF p_usec_plus_hr_rec.instructor_number = FND_API.G_MISS_CHAR THEN
8326 	   l_n_ins_id  := NULL;
8327 	 END IF;
8328 
8329        END IF;
8330 
8331     END Assign_default;
8332 
8333     PROCEDURE Business_validation(p_usec_plus_hr_rec IN OUT NOCOPY igs_ps_generic_pub.usec_plus_hr_rec_type) AS
8334 
8335       l_message_name VARCHAR2(30);
8336       l_preferred_name igs_pe_person.preferred_name%TYPE;
8337     BEGIN
8338       --Check if the unit is INACTIVE, then do not allow to import
8339       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_plus_hr_rec.unit_cd, p_usec_plus_hr_rec.version_number,l_message_name)=FALSE THEN
8340 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
8341 	    fnd_msg_pub.add;
8342 	    p_usec_plus_hr_rec.status := 'E';
8343       END IF;
8344 
8345       --Instructor should be staff
8346       IF l_n_ins_id IS NOT NULL THEN
8347 	IF igs_ge_mnt_sdtt.pid_val_staff (p_person_id => l_n_ins_id,p_preferred_name=>l_preferred_name) = FALSE THEN
8348 	       p_usec_plus_hr_rec.status :='E';
8349 	       fnd_message.set_name('IGS','IGS_PS_INST_NOT_STAFF');
8350 	       fnd_msg_pub.add;
8351 	END IF;
8352       END IF;
8353 
8354     END Business_validation;
8355 
8356 
8357 BEGIN
8358 
8359   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8360     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.start_logging_for',
8361                     'Unit Section Plus Hours');
8362   END IF;
8363 
8364   p_c_rec_status := 'S';
8365   FOR I in 1..p_usec_plus_hr_tbl.LAST LOOP
8366      IF p_usec_plus_hr_tbl.EXISTS(I) THEN
8367 	-- Initialize the variable use to store the derived values.
8368 	l_n_uoo_id      := NULL;
8369         l_n_activity_id := NULL;
8370         l_n_building_id := NULL;
8371         l_n_room_id     := NULL;
8372         l_n_ins_id      := NULL;
8373 
8374 	p_usec_plus_hr_tbl(I).status := 'S';
8375 	p_usec_plus_hr_tbl(I).msg_from := fnd_msg_pub.count_msg;
8376 	trim_values(p_usec_plus_hr_tbl(I));
8377 	validate_parameters(p_usec_plus_hr_tbl(I));
8378 
8379         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8380 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_validate_parameters',
8381 	  'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8382 	  ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8383 	  p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_type_code:'||p_usec_plus_hr_tbl(I).activity_type_code
8384 	  ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_cd:'||p_usec_plus_hr_tbl(I).building_cd
8385 	  ||'  '||'room_cd:'||p_usec_plus_hr_tbl(I).room_cd||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8386         END IF;
8387 
8388 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8389 	   validate_derivation(p_usec_plus_hr_tbl(I));
8390 
8391 	   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8392 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_validate_derivation',
8393 	      'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8394 	      ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8395 	      p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8396 	      ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8397 	      ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8398            END IF;
8399 
8400 	END IF;
8401 
8402 	--Find out whether it is insert/update of record
8403 	l_insert_update:='I';
8404 	IF p_usec_plus_hr_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
8405 	  l_insert_update:= check_insert_update(p_usec_plus_hr_tbl(I));
8406 
8407           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8408 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_check_insert_update',
8409 	    'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8410 	    ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8411 	    p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8412 	    ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8413 	    ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8414           END IF;
8415 
8416 	END IF;
8417 
8418 	IF p_usec_plus_hr_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
8419 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
8420 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
8421 	    fnd_msg_pub.add;
8422 	    p_usec_plus_hr_tbl(I).status := 'A';
8423 	  END IF;
8424 
8425 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8426 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_check_import_allowed',
8427 	    'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8428 	    ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8429 	    p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8430 	    ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8431 	    ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8432           END IF;
8433 
8434 	END IF;
8435 
8436 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8437 	   Assign_default(p_usec_plus_hr_tbl(I),l_insert_update);
8438 
8439             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8440 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_Assign_default',
8441 	      'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8442 	      ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8443 	      p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8444 	      ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8445 	      ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8446             END IF;
8447 
8448 	END IF;
8449 
8450 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8451 	   validate_db_cons ( p_usec_plus_hr_tbl(I),l_insert_update);
8452 
8453            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8454 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_validate_db_cons',
8455 	      'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8456 	      ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8457 	      p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8458 	      ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8459 	      ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8460             END IF;
8461 
8462 	END IF;
8463 
8464 	--Business validations
8465 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8466 	  Business_validation(p_usec_plus_hr_tbl(I));
8467 
8468           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8469 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.status_after_Business_validation',
8470 	    'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8471 	    ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8472 	    p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8473 	    ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8474 	    ||'  '||'room_id:'||l_n_room_id||'  '||'Status:'|| p_usec_plus_hr_tbl(I).status);
8475           END IF;
8476 
8477 	END IF;
8478 
8479 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8480 
8481           IF l_insert_update = 'I' THEN
8482 	    INSERT INTO IGS_PS_US_UNSCHED_CL(
8483 	      us_unscheduled_cl_id,
8484 	      uoo_id,
8485 	      activity_type_id,
8486 	      location_cd,
8487 	      building_id,
8488 	      room_id,
8489 	      number_of_students,
8490 	      hours_per_student,
8491 	      hours_per_faculty,
8492 	      instructor_id,
8493 	      created_by,
8494 	      creation_date,
8495 	      last_updated_by,
8496 	      last_update_date,
8497 	      last_update_login )
8498 	    VALUES (
8499 	       igs_ps_us_unsched_cl_s.NEXTVAL,
8500 	       l_n_uoo_id,
8501 	       l_n_activity_id,
8502        	       p_usec_plus_hr_tbl(I).activity_location_cd,
8503 	       l_n_building_id,
8504 	       l_n_room_id,
8505        	       p_usec_plus_hr_tbl(I).number_of_students,
8506 	       p_usec_plus_hr_tbl(I).hours_per_student,
8507 	       p_usec_plus_hr_tbl(I).hours_per_faculty,
8508 	       l_n_ins_id,
8509 	       g_n_user_id,
8510 	       SYSDATE,
8511 	       g_n_user_id,
8512 	       SYSDATE,
8513 	       g_n_login_id);
8514 
8515 
8516 		IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8517 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.Record_Inserted',
8518 		  'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8519 		  ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8520 		  p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8521 		  ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8522 		  ||'  '||'room_id:'||l_n_room_id);
8523 		END IF;
8524 
8525           ELSE
8526 
8527             UPDATE IGS_PS_US_UNSCHED_CL SET
8528 	    number_of_students = p_usec_plus_hr_tbl(I).number_of_students,
8529 	    hours_per_student = p_usec_plus_hr_tbl(I).hours_per_student,
8530 	    hours_per_faculty = p_usec_plus_hr_tbl(I).hours_per_faculty,
8531 	    instructor_id = l_n_ins_id,
8532 	    last_updated_by = g_n_user_id ,
8533 	    last_update_date = sysdate ,
8534 	    last_update_login = g_n_login_id
8535 	    WHERE uoo_id=l_n_uoo_id AND activity_type_id=l_n_activity_id AND location_cd= p_usec_plus_hr_tbl(I).activity_location_cd
8536 	    AND   building_id = l_n_building_id AND room_id = l_n_room_id;
8537 
8538 	    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8539 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.Record_Updated',
8540 	      'Unit code:'||p_usec_plus_hr_tbl(I).unit_cd||'  '||'Version number:'||p_usec_plus_hr_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8541 	      ||p_usec_plus_hr_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_plus_hr_tbl(I).location_cd||'  '||'Unit Class:'||
8542 	      p_usec_plus_hr_tbl(I).unit_class||'  '||'Activity_id:'||l_n_activity_id
8543 	      ||'  '||'activity_location_cd:'||p_usec_plus_hr_tbl(I).activity_location_cd||'  '||'building_id:'||l_n_building_id
8544 	      ||'  '||'room_id:'||l_n_room_id);
8545 	   END IF;
8546 
8547           END IF;
8548 
8549 	END IF;
8550 
8551 
8552 	IF p_usec_plus_hr_tbl(I).status = 'S' THEN
8553 	   p_usec_plus_hr_tbl(I).msg_from := NULL;
8554 	   p_usec_plus_hr_tbl(I).msg_to := NULL;
8555 	ELSIF  p_usec_plus_hr_tbl(I).status = 'A' THEN
8556 	   p_usec_plus_hr_tbl(I).msg_from  := p_usec_plus_hr_tbl(I).msg_from + 1;
8557 	   p_usec_plus_hr_tbl(I).msg_to := fnd_msg_pub.count_msg;
8558 	ELSE
8559 	   p_c_rec_status := p_usec_plus_hr_tbl(I).status;
8560 	   p_usec_plus_hr_tbl(I).msg_from := p_usec_plus_hr_tbl(I).msg_from+1;
8561 	   p_usec_plus_hr_tbl(I).msg_to := fnd_msg_pub.count_msg;
8562 	   IF p_usec_plus_hr_tbl(I).status = 'E' THEN
8563 	      RETURN;
8564 	   END IF;
8565 	END IF;
8566 
8567      END IF;
8568   END LOOP;
8569 
8570   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8571     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_plus_hr.after_import_status',p_c_rec_status);
8572   END IF;
8573 
8574 END create_usec_plus_hr;
8575 
8576 PROCEDURE create_usec_rule(p_usec_rule_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_rule_tbl_type,
8577                            p_c_rec_status OUT NOCOPY VARCHAR2,
8578        	                   p_calling_context IN VARCHAR2) IS
8579 /***********************************************************************************************
8580 
8581 Created By:         sarakshi
8582 Date Created By:    01-Jun-2005
8583 Purpose:            This procedure imports unit section Rules.
8584 
8585 Known limitations,enhancements,remarks:
8586 Change History
8587 Who       When         What
8588 ***********************************************************************************************/
8589 
8590 	l_n_uoo_id           NUMBER;
8591         l_n_select_group     NUMBER;
8592 	l_c_rule_desc        igs_ru_description.rule_description%TYPE;
8593 	l_n_rule_number      NUMBER;
8594 	l_success            BOOLEAN;
8595 	l_c_rule_unprocessed VARCHAR2(4500);
8596 	l_n_lov_number       NUMBER;
8597 	l_insert_update      VARCHAR2(1);
8598 
8599     PROCEDURE trim_values ( p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type) AS
8600     BEGIN
8601 
8602       p_usec_rule_rec.unit_cd := TRIM(p_usec_rule_rec.unit_cd);
8603       p_usec_rule_rec.version_number := TRIM(p_usec_rule_rec.version_number);
8604       p_usec_rule_rec.teach_cal_alternate_code := TRIM(p_usec_rule_rec.teach_cal_alternate_code);
8605       p_usec_rule_rec.location_cd := TRIM(p_usec_rule_rec.location_cd);
8606       p_usec_rule_rec.unit_class := TRIM(p_usec_rule_rec.unit_class);
8607       p_usec_rule_rec.s_rule_call_cd := TRIM(p_usec_rule_rec.s_rule_call_cd);
8608       p_usec_rule_rec.rule_text := TRIM(p_usec_rule_rec.rule_text);
8609 
8610     END trim_values;
8611 
8612     PROCEDURE validate_parameters(p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type) AS
8613 
8614     BEGIN
8615       p_usec_rule_rec.status:='S';
8616 
8617 
8618       IF p_usec_rule_rec.unit_cd IS NULL OR p_usec_rule_rec.unit_cd = FND_API.G_MISS_CHAR THEN
8619          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
8620          p_usec_rule_rec.status := 'E';
8621       END IF;
8622 
8623       IF p_usec_rule_rec.version_number IS NULL OR p_usec_rule_rec.version_number = FND_API.G_MISS_NUM THEN
8624          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
8625          p_usec_rule_rec.status := 'E';
8626       END IF;
8627 
8628       IF p_usec_rule_rec.teach_cal_alternate_code IS NULL OR p_usec_rule_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
8629 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
8630 	 p_usec_rule_rec.status := 'E';
8631       END IF;
8632 
8633       IF p_usec_rule_rec.location_cd IS NULL OR p_usec_rule_rec.location_cd = FND_API.G_MISS_CHAR THEN
8634 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
8635 	 p_usec_rule_rec.status := 'E';
8636       END IF;
8637 
8638       IF p_usec_rule_rec.unit_class IS NULL OR p_usec_rule_rec.unit_class = FND_API.G_MISS_CHAR THEN
8639         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
8640 	p_usec_rule_rec.status := 'E';
8641       END IF;
8642 
8643       IF p_usec_rule_rec.s_rule_call_cd IS NULL OR p_usec_rule_rec.s_rule_call_cd = FND_API.G_MISS_CHAR THEN
8644         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','S_RULE_CALL_CD','LEGACY_TOKENS',FALSE);
8645 	p_usec_rule_rec.status := 'E';
8646       END IF;
8647 
8648       IF p_usec_rule_rec.rule_text IS NULL OR p_usec_rule_rec.rule_text = FND_API.G_MISS_CHAR THEN
8649         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','RULE_TEXT','LEGACY_TOKENS',FALSE);
8650 	p_usec_rule_rec.status := 'E';
8651       END IF;
8652 
8653     END validate_parameters;
8654 
8655     PROCEDURE validate_derivation(p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type) AS
8656       l_c_cal_type    VARCHAR2(10);
8657       l_n_seq_num     NUMBER;
8658       l_d_start       igs_ca_inst_all.start_dt%TYPE;
8659       l_d_end         igs_ca_inst_all.end_dt%TYPE;
8660       l_c_ret_status  VARCHAR2(30);
8661 
8662 
8663     BEGIN
8664 
8665        -- Deriving the Calendar Type and Calendar Sequence Number
8666        igs_ge_gen_003.get_calendar_instance(p_usec_rule_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
8667        IF l_c_ret_status <> 'SINGLE' THEN
8668 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
8669 	   p_usec_rule_rec.status := 'E';
8670        END IF;
8671 
8672        -- Deriving the Unit Offering Option Identifier
8673        l_c_ret_status := NULL;
8674        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_rule_rec.unit_cd, p_usec_rule_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_rule_rec.location_cd, p_usec_rule_rec.unit_class, l_n_uoo_id, l_c_ret_status);
8675        IF l_c_ret_status IS NOT NULL THEN
8676 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
8677 	  p_usec_rule_rec.status := 'E';
8678        END IF;
8679 
8680 
8681     END validate_derivation;
8682 
8683     PROCEDURE validate_db_cons(p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type,p_insert_update IN VARCHAR2) AS
8684 
8685     BEGIN
8686 
8687       IF p_insert_update = 'I' THEN
8688 	-- Unique Key Validation
8689 	IF igs_ps_usec_ru_pkg.get_uk_for_validation ( x_uoo_id           => l_n_uoo_id,
8690 						      x_s_rule_call_cd   => p_usec_rule_rec.s_rule_call_cd ) THEN
8691 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'RULE', 'LEGACY_TOKENS', FALSE);
8692 	  p_usec_rule_rec.status := 'W';
8693 	  RETURN;
8694 	END IF;
8695       END IF;
8696 
8697       -- Foreign Key Checking
8698       --Check for the existence of the unit section
8699       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
8700          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
8701          p_usec_rule_rec.status := 'E';
8702       END IF;
8703 
8704       IF NOT igs_ru_call_pkg.get_pk_for_validation (p_usec_rule_rec.s_rule_call_cd ) THEN
8705          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'S_RULE_CALL_CD', 'LEGACY_TOKENS', FALSE);
8706          p_usec_rule_rec.status := 'E';
8707       END IF;
8708 
8709 
8710     END validate_db_cons;
8711 
8712     -- Check for Update/Insert
8713     FUNCTION check_insert_update ( p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type) RETURN VARCHAR2 IS
8714 
8715       CURSOR c_rule IS
8716       SELECT rul_sequence_number
8717       FROM   igs_ps_usec_ru
8718       WHERE  uoo_id = l_n_uoo_id
8719       AND    s_rule_call_cd = p_usec_rule_rec.s_rule_call_cd;
8720 
8721     BEGIN
8722 
8723        OPEN c_rule;
8724        FETCH c_rule INTO l_n_rule_number;
8725        IF c_rule%FOUND THEN
8726 	 CLOSE c_rule;
8727 	 RETURN 'U';
8728        ELSE
8729 	 CLOSE c_rule;
8730 	 RETURN 'I';
8731        END IF;
8732 
8733     END check_insert_update;
8734 
8735 
8736     PROCEDURE Business_validation(p_usec_rule_rec IN OUT NOCOPY igs_ps_generic_pub.usec_rule_rec_type) AS
8737 
8738       CURSOR cur_rule_check IS
8739       SELECT rc.select_group,rd.rule_description
8740       FROM   igs_ru_call rc,igs_ru_description rd
8741       WHERE  rc.s_rule_type_cd = 'USEC'
8742       AND    rc.s_rule_call_cd = p_usec_rule_rec.s_rule_call_cd
8743       AND    rc.rud_sequence_number = rd.sequence_number;
8744 
8745       l_message_name VARCHAR2(30);
8746       l_c_var VARCHAR2(1);
8747 
8748     BEGIN
8749       --Check if the unit is INACTIVE, then do not allow to import
8750       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_rule_rec.unit_cd, p_usec_rule_rec.version_number,l_message_name)=FALSE THEN
8751 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
8752 	    fnd_msg_pub.add;
8753 	    p_usec_rule_rec.status := 'E';
8754       END IF;
8755 
8756       -- s_rule_call_cd must exists in igs_ru_call with S_RULE_TYPE_CD='USEC'
8757       --Valid values  of S_RULE_CALL_CD are 'USECCOREQ' and 'USECPREREQ'
8758       OPEN cur_rule_check;
8759       FETCH cur_rule_check INTO l_n_select_group,l_c_rule_desc;
8760       IF cur_rule_check%NOTFOUND THEN
8761 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'S_RULE_CALL_CD','LEGACY_TOKENS', FALSE);
8762 	  p_usec_rule_rec.status := 'E';
8763       END IF;
8764       CLOSE cur_rule_check;
8765 
8766     END Business_validation;
8767 
8768 BEGIN
8769 
8770   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8771     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.start_logging_for',
8772                     'Unit Section Rules');
8773   END IF;
8774 
8775   p_c_rec_status := 'S';
8776   FOR I in 1..p_usec_rule_tbl.LAST LOOP
8777      IF p_usec_rule_tbl.EXISTS(I) THEN
8778 	-- Initialize the variable use to store the derived values.
8779 	l_n_uoo_id           := NULL;
8780         l_n_select_group     := NULL;
8781 	l_c_rule_desc        := NULL;
8782         l_n_rule_number      := NULL;
8783 	l_success            := FALSE;
8784 	l_c_rule_unprocessed := NULL;
8785         l_n_lov_number       := NULL;
8786 
8787 
8788 	p_usec_rule_tbl(I).status := 'S';
8789 	p_usec_rule_tbl(I).msg_from := fnd_msg_pub.count_msg;
8790 	trim_values(p_usec_rule_tbl(I));
8791 	validate_parameters(p_usec_rule_tbl(I));
8792 
8793         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8794 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_validate_parameters',
8795 	  'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8796 	  ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8797 	  p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8798 	  p_usec_rule_tbl(I).status);
8799         END IF;
8800 
8801 	IF p_usec_rule_tbl(I).status = 'S' THEN
8802 	   validate_derivation(p_usec_rule_tbl(I));
8803 
8804            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8805 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_validate_derivation',
8806 	      'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8807 	      ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8808 	      p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8809 	      p_usec_rule_tbl(I).status);
8810            END IF;
8811 
8812 	END IF;
8813 
8814 	--Find out whether it is insert/update of record
8815 	l_insert_update:='I';
8816 	IF p_usec_rule_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
8817 	  l_insert_update:= check_insert_update(p_usec_rule_tbl(I));
8818 
8819           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8820 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_check_insert_update',
8821 	    'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8822 	    ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8823 	    p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8824 	    p_usec_rule_tbl(I).status);
8825           END IF;
8826 
8827 	END IF;
8828 
8829 	IF p_usec_rule_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
8830 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
8831 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
8832 	    fnd_msg_pub.add;
8833 	    p_usec_rule_tbl(I).status := 'A';
8834 	  END IF;
8835 
8836           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8837 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_check_import_allowed',
8838 	    'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8839 	    ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8840 	    p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8841 	    p_usec_rule_tbl(I).status);
8842           END IF;
8843 
8844 	END IF;
8845 
8846 
8847 
8848 	IF p_usec_rule_tbl(I).status = 'S' THEN
8849 	   validate_db_cons ( p_usec_rule_tbl(I),l_insert_update);
8850 
8851            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8852 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_validate_db_cons',
8853 	     'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8854 	     ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8855 	     p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8856 	     p_usec_rule_tbl(I).status);
8857            END IF;
8858 
8859 	END IF;
8860 
8861 
8862 	--Business validations
8863 	IF p_usec_rule_tbl(I).status = 'S' THEN
8864 	  Business_validation(p_usec_rule_tbl(I));
8865 
8866           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8867 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.status_after_Business_validation',
8868 	     'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8869 	     ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8870 	     p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd||'  '||'Status:'||
8871 	     p_usec_rule_tbl(I).status);
8872           END IF;
8873 
8874 	END IF;
8875 
8876 	IF p_usec_rule_tbl(I).status = 'S' THEN
8877 
8878 	  l_success:=  igs_ru_gen_002.rulp_ins_parser (
8879 		 p_group            =>  l_n_select_group,            -- 8 for Unit Co-requisite,2 for Unit Pre-requisite
8880 		 p_return_type      => 'BOOLEAN',                    -- pass BOOLEAN
8881 		 p_rule_description => l_c_rule_desc,                -- <Unit Co-requisite/Unit Pre-requisite>
8882 		 p_rule_processed   => p_usec_rule_tbl(I).rule_text, -- Pass the rule_text
8883 		 p_rule_unprocessed => l_c_rule_unprocessed,         -- id column out parameter
8884 		 p_generate_rule    => TRUE,                         -- pass TRUE
8885 		 p_rule_number      => l_n_rule_number,              -- id column out parameter
8886 		 p_lov_number       => l_n_lov_number );             -- id column out parameter
8887 
8888           IF l_success THEN
8889 
8890 	    IF l_insert_update = 'I' THEN
8891 	      INSERT INTO IGS_PS_USEC_RU(
8892 		usecru_id,
8893 		uoo_id,
8894 		s_rule_call_cd,
8895 		rul_sequence_number,
8896 		created_by,
8897 		creation_date,
8898 		last_updated_by,
8899 		last_update_date,
8900 		last_update_login )
8901 	      VALUES (
8902 		 igs_ps_usec_ru_s.NEXTVAL,
8903 		 l_n_uoo_id,
8904 		 p_usec_rule_tbl(I).s_rule_call_cd,
8905 		 l_n_rule_number,
8906 		 g_n_user_id,
8907 		 SYSDATE,
8908 		 g_n_user_id,
8909 		 SYSDATE,
8910 		 g_n_login_id);
8911 
8912                  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
8913 		   fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.Record_Inserted',
8914 		   'Unit code:'||p_usec_rule_tbl(I).unit_cd||'  '||'Version number:'||p_usec_rule_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
8915 		   ||p_usec_rule_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_rule_tbl(I).location_cd||'  '||'Unit Class:'||
8916 		   p_usec_rule_tbl(I).unit_class||'  '||'s_rule_call_cd:'||p_usec_rule_tbl(I).s_rule_call_cd);
8917 		 END IF;
8918 		 --Note: Update is not required as it does not update the base table, only rule table,
8919 		 --which is getting done by igs_ru_gen_002.rulp_ins_parse function
8920 
8921 	    END IF;
8922 
8923           ELSE
8924  	    --Error in Rule Text cannot import
8925 	    fnd_message.set_name ( 'IGS', 'IGS_PS_INCORRECT_RULE' );
8926 	    fnd_msg_pub.add;
8927 	    p_usec_rule_tbl(I).status := 'E';
8928           END IF; --If l_success
8929 
8930 	END IF;
8931 
8932 
8933 	IF p_usec_rule_tbl(I).status = 'S' THEN
8934 	   p_usec_rule_tbl(I).msg_from := NULL;
8935 	   p_usec_rule_tbl(I).msg_to := NULL;
8936 	ELSIF  p_usec_rule_tbl(I).status = 'A' THEN
8937 	   p_usec_rule_tbl(I).msg_from  := p_usec_rule_tbl(I).msg_from + 1;
8938 	   p_usec_rule_tbl(I).msg_to := fnd_msg_pub.count_msg;
8939 	ELSE
8940 	   p_c_rec_status := p_usec_rule_tbl(I).status;
8941 	   p_usec_rule_tbl(I).msg_from := p_usec_rule_tbl(I).msg_from+1;
8942 	   p_usec_rule_tbl(I).msg_to := fnd_msg_pub.count_msg;
8943 	   IF p_usec_rule_tbl(I).status = 'E' THEN
8944 	      RETURN;
8945 	   END IF;
8946 	END IF;
8947 
8948      END IF;
8949   END LOOP;
8950 
8951   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
8952     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_rule.after_import_status',p_c_rec_status);
8953   END IF;
8954 
8955 END create_usec_rule;
8956 
8957 
8958 PROCEDURE create_usec_enr_dead(p_usec_enr_dead_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_tbl_type,
8959 			         p_c_rec_status OUT NOCOPY VARCHAR2,
8960 			         p_calling_context IN VARCHAR2) IS
8961 /***********************************************************************************************
8962 
8963 Created By:         sarakshi
8964 Date Created By:    01-Jun-2005
8965 Purpose:            This procedure imports unit section Enrollment Deadline.
8966 
8967 Known limitations,enhancements,remarks:
8968 Change History
8969 Who       When         What
8970 Sommukhe  13-Jan-2006  Bug #4926548 replaced igs_en_nsu_dlstp with igs_en_nsu_dlstp_all for cursor cur_dead_details
8971                        in  proccedure Assign_defaults
8972 ***********************************************************************************************/
8973     l_n_uoo_id                igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
8974     l_n_non_std_usec_dls_id   igs_en_nsu_dlstp.non_std_usec_dls_id%TYPE;
8975     l_c_org_unit_code         igs_en_nsu_dlstp.org_unit_code%TYPE;
8976     l_c_definition_code       igs_en_nsu_dlstp.definition_code%TYPE;
8977     l_c_formula_method        igs_en_nsu_dlstp.formula_method%TYPE;
8978     l_c_round_method          igs_en_nsu_dlstp.round_method%TYPE;
8979     l_n_offset_duration       igs_en_nsu_dlstp.offset_duration%TYPE;
8980     l_c_offset_dt_code        igs_en_nsu_dlstp.offset_dt_code%TYPE;
8981     l_n_duration_days         igs_en_nstd_usec_dl.enr_dl_total_days%TYPE;
8982     l_n_offset_days           igs_en_nstd_usec_dl.enr_dl_offset_days%TYPE;
8983     l_d_enr_dl_date           igs_en_nstd_usec_dl.enr_dl_date%TYPE;
8984     l_insert_update           VARCHAR2(1);
8985 
8986     PROCEDURE trim_values ( p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type) AS
8987     BEGIN
8988 
8989       p_usec_enr_dead_rec.unit_cd := TRIM(p_usec_enr_dead_rec.unit_cd);
8990       p_usec_enr_dead_rec.version_number := TRIM(p_usec_enr_dead_rec.version_number);
8991       p_usec_enr_dead_rec.teach_cal_alternate_code := TRIM(p_usec_enr_dead_rec.teach_cal_alternate_code);
8992       p_usec_enr_dead_rec.location_cd := TRIM(p_usec_enr_dead_rec.location_cd);
8993       p_usec_enr_dead_rec.unit_class := TRIM(p_usec_enr_dead_rec.unit_class);
8994       p_usec_enr_dead_rec.function_name := TRIM(p_usec_enr_dead_rec.function_name);
8995       p_usec_enr_dead_rec.enr_dl_date := TRUNC(p_usec_enr_dead_rec.enr_dl_date);
8996 
8997     END trim_values;
8998 
8999     PROCEDURE validate_parameters( p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type) AS
9000 
9001     BEGIN
9002       p_usec_enr_dead_rec.status:='S';
9003 
9004 
9005       IF p_usec_enr_dead_rec.unit_cd IS NULL OR p_usec_enr_dead_rec.unit_cd = FND_API.G_MISS_CHAR THEN
9006          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
9007          p_usec_enr_dead_rec.status := 'E';
9008       END IF;
9009 
9010       IF p_usec_enr_dead_rec.version_number IS NULL OR p_usec_enr_dead_rec.version_number = FND_API.G_MISS_NUM THEN
9011          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
9012          p_usec_enr_dead_rec.status := 'E';
9013       END IF;
9014 
9015       IF p_usec_enr_dead_rec.teach_cal_alternate_code IS NULL OR p_usec_enr_dead_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
9016 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
9017 	 p_usec_enr_dead_rec.status := 'E';
9018       END IF;
9019 
9020       IF p_usec_enr_dead_rec.location_cd IS NULL OR p_usec_enr_dead_rec.location_cd = FND_API.G_MISS_CHAR THEN
9021 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
9022 	 p_usec_enr_dead_rec.status := 'E';
9023       END IF;
9024 
9025       IF p_usec_enr_dead_rec.unit_class IS NULL OR p_usec_enr_dead_rec.unit_class = FND_API.G_MISS_CHAR THEN
9026         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
9027 	p_usec_enr_dead_rec.status := 'E';
9028       END IF;
9029 
9030       IF p_usec_enr_dead_rec.function_name IS NULL OR p_usec_enr_dead_rec.function_name = FND_API.G_MISS_CHAR THEN
9031         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FUNCTION_NAME','LEGACY_TOKENS',FALSE);
9032 	p_usec_enr_dead_rec.status := 'E';
9033       END IF;
9034 
9035       -- Function name should be one among 'GRADING_SCHEMA' ,'RECORD_CUTOFF' ,'VARIATION_CUTOFF'
9036       IF p_usec_enr_dead_rec.function_name NOT IN ('GRADING_SCHEMA' ,'RECORD_CUTOFF' ,'VARIATION_CUTOFF') THEN
9037 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FUNCTION_NAME','LEGACY_TOKENS', FALSE);
9038 	  p_usec_enr_dead_rec.status := 'E';
9039       END IF;
9040 
9041     END validate_parameters;
9042 
9043     PROCEDURE validate_derivation(p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type) AS
9044 
9045       l_c_cal_type    VARCHAR2(10);
9046       l_n_seq_num     NUMBER;
9047       l_d_start       igs_ca_inst_all.start_dt%TYPE;
9048       l_d_end         igs_ca_inst_all.end_dt%TYPE;
9049       l_c_ret_status  VARCHAR2(30);
9050 
9051 
9052     BEGIN
9053 
9054        -- Deriving the Calendar Type and Calendar Sequence Number
9055        igs_ge_gen_003.get_calendar_instance(p_usec_enr_dead_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
9056        IF l_c_ret_status <> 'SINGLE' THEN
9057 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
9058 	   p_usec_enr_dead_rec.status := 'E';
9059        END IF;
9060 
9061        -- Deriving the Unit Offering Option Identifier
9062        l_c_ret_status := NULL;
9063        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_enr_dead_rec.unit_cd, p_usec_enr_dead_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_enr_dead_rec.location_cd, p_usec_enr_dead_rec.unit_class, l_n_uoo_id, l_c_ret_status);
9064        IF l_c_ret_status IS NOT NULL THEN
9065 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
9066 	  p_usec_enr_dead_rec.status := 'E';
9067        END IF;
9068 
9069     END validate_derivation;
9070 
9071     PROCEDURE validate_db_cons(p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type,p_insert_update IN VARCHAR2) AS
9072 
9073     BEGIN
9074 
9075       IF p_insert_update = 'I' THEN
9076 	-- Unique Key Validation
9077 	IF igs_en_nstd_usec_dl_pkg.get_uk_for_validation ( x_uoo_id           => l_n_uoo_id,
9078 						           x_function_name    => p_usec_enr_dead_rec.function_name ) THEN
9079 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'ENR_DEADLINE', 'LEGACY_TOKENS', FALSE);
9080 	  p_usec_enr_dead_rec.status := 'W';
9081 	  RETURN;
9082 	END IF;
9083       END IF;
9084 
9085       -- Foreign Key Checking
9086       --Check for the existence of the unit section
9087       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
9088          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
9089          p_usec_enr_dead_rec.status := 'E';
9090       END IF;
9091 
9092 
9093       IF l_n_non_std_usec_dls_id IS NOT NULL THEN
9094 	IF NOT igs_en_nsu_dlstp_pkg.get_pk_for_validation ( l_n_non_std_usec_dls_id) THEN
9095 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'NON_STD_USEC_DLS_ID', 'LEGACY_TOKENS', FALSE);
9096 	   p_usec_enr_dead_rec.status := 'E';
9097 	END IF;
9098       END IF;
9099 
9100     END validate_db_cons;
9101 
9102     -- Check for Update/Insert
9103     FUNCTION check_insert_update ( p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type) RETURN VARCHAR2 IS
9104 
9105       CURSOR c_enr_dead IS
9106       SELECT 'X'
9107       FROM   igs_en_nstd_usec_dl
9108       WHERE  uoo_id = l_n_uoo_id
9109       AND    function_name = p_usec_enr_dead_rec.function_name;
9110       l_c_var  VARCHAR2(1);
9111 
9112     BEGIN
9113 
9114        OPEN c_enr_dead;
9115        FETCH c_enr_dead INTO l_c_var;
9116        IF c_enr_dead%FOUND THEN
9117 	 CLOSE c_enr_dead;
9118 	 RETURN 'U';
9119        ELSE
9120 	 CLOSE c_enr_dead;
9121 	 RETURN 'I';
9122        END IF;
9123 
9124     END check_insert_update;
9125 
9126     PROCEDURE Assign_defaults (p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type,p_insert_update IN VARCHAR2) AS
9127 
9128       CURSOR cur_usec(cp_uoo_id IN NUMBER) IS
9129       SELECT owner_org_unit_cd
9130       FROM   igs_ps_unit_ofr_opt_all
9131       WHERE  uoo_id=cp_uoo_id;
9132       l_c_org_unit_cd   igs_ps_unit_ofr_opt_all.owner_org_unit_cd%TYPE;
9133 
9134       CURSOR cur_dead_details (cp_org_unit_cd IN VARCHAR2,cp_function_name IN VARCHAR2) IS
9135       SELECT formula_method,round_method,offset_duration,non_std_usec_dls_id,offset_dt_code,org_unit_code,definition_code
9136       FROM igs_en_nsu_dlstp_all
9137       WHERE ((org_unit_code = cp_org_unit_cd AND definition_code = 'ORGANIZATIONAL_UNIT') OR definition_code = 'INSTITUTION')
9138       AND function_name = cp_function_name;
9139       l_cur_dead_details   cur_dead_details%ROWTYPE;
9140 
9141       CURSOR c_enr_dead IS
9142       SELECT *
9143       FROM   igs_en_nstd_usec_dl
9144       WHERE  uoo_id = l_n_uoo_id
9145       AND    function_name = p_usec_enr_dead_rec.function_name;
9146       l_c_enr_dead c_enr_dead%ROWTYPE;
9147 
9148       l_c_message     VARCHAR2(30);
9149 
9150     BEGIN
9151       IF p_insert_update = 'I' THEN
9152 	   -- Dervie the attributes from the org/institution level table
9153 	   OPEN cur_usec(l_n_uoo_id);
9154 	   FETCH cur_usec INTO l_c_org_unit_cd;
9155 	   CLOSE cur_usec;
9156 
9157 
9158 	   OPEN cur_dead_details(l_c_org_unit_cd,p_usec_enr_dead_rec.function_name);
9159 	   FETCH cur_dead_details INTO  l_cur_dead_details;
9160 	   IF cur_dead_details%FOUND THEN
9161 
9162 
9163 	     l_n_non_std_usec_dls_id :=l_cur_dead_details.non_std_usec_dls_id;
9164 	     l_c_org_unit_code := l_cur_dead_details.org_unit_code;
9165 	     l_c_definition_code := l_cur_dead_details.definition_code;
9166 	     l_c_formula_method := l_cur_dead_details.formula_method;
9167 	     l_c_round_method := l_cur_dead_details.round_method;
9168 	     l_n_offset_duration := l_cur_dead_details.offset_duration;
9169 	     l_c_offset_dt_code := l_cur_dead_details.offset_dt_code;
9170 
9171 	     l_d_enr_dl_date:= igs_ps_gen_004.recal_dl_date (
9172 					   p_v_uoo_id        =>l_n_uoo_id,
9173 					   p_formula_method  =>l_cur_dead_details.formula_method,
9174 					   p_durationdays    =>l_n_duration_days,--out
9175 					   p_round_method    =>l_cur_dead_details.round_method,
9176 					   p_OffsetDuration  =>l_cur_dead_details.offset_duration,
9177 					   p_OffsetDays      =>l_n_offset_days,--out
9178 					   p_function_name   =>p_usec_enr_dead_rec.function_name,
9179 					   p_setup_id        =>l_cur_dead_details.non_std_usec_dls_id,
9180 					   p_offset_dt_code  =>l_cur_dead_details.offset_dt_code,
9181 					   p_msg 	     =>l_c_message  --out
9182 					   );
9183 	      IF p_usec_enr_dead_rec.enr_dl_date IS NOT NULL THEN
9184 		l_d_enr_dl_date := p_usec_enr_dead_rec.enr_dl_date;
9185 	      END IF;
9186            ELSE
9187 	     IF p_usec_enr_dead_rec.enr_dl_date IS NULL THEN
9188 		igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ENR_DEAD_DATE','LEGACY_TOKENS',FALSE);
9189 		p_usec_enr_dead_rec.status := 'E';
9190              ELSE
9191 	        l_d_enr_dl_date := p_usec_enr_dead_rec.enr_dl_date;
9192              END IF;
9193 	   END IF;
9194            CLOSE cur_dead_details;
9195 
9196       ELSE --update
9197 
9198         OPEN c_enr_dead;
9199         FETCH c_enr_dead INTO l_c_enr_dead;
9200 	CLOSE c_enr_dead;
9201 
9202          --Set the values to the databse values
9203 	 l_n_non_std_usec_dls_id :=l_c_enr_dead.non_std_usec_dls_id;
9204 	 l_c_org_unit_code := l_c_enr_dead.org_unit_code;
9205 	 l_c_definition_code := l_c_enr_dead.definition_code;
9206 	 l_c_formula_method := l_c_enr_dead.formula_method;
9207 	 l_c_round_method := l_c_enr_dead.round_method;
9208 	 l_n_offset_duration := l_c_enr_dead.offset_duration;
9209 	 l_c_offset_dt_code := l_c_enr_dead.offset_dt_code;
9210 	 l_n_duration_days :=  l_c_enr_dead.enr_dl_total_days;
9211 	 l_n_offset_days :=    l_c_enr_dead.enr_dl_offset_days;
9212 
9213         IF l_c_enr_dead.non_std_usec_dls_id IS NOT NULL THEN
9214 	   -- Dervie the attributes from the org/institution level table
9215 	   OPEN cur_usec(l_n_uoo_id);
9216 	   FETCH cur_usec INTO l_c_org_unit_cd;
9217 	   CLOSE cur_usec;
9218 
9219 
9220 	   OPEN cur_dead_details(l_c_org_unit_cd,p_usec_enr_dead_rec.function_name);
9221 	   FETCH cur_dead_details INTO  l_cur_dead_details;
9222            IF cur_dead_details%FOUND THEN
9223 	     IF (l_c_enr_dead.formula_method  <>  l_cur_dead_details.formula_method OR
9224 		 l_c_enr_dead.round_method    <>  l_cur_dead_details.round_method   OR
9225 		 l_c_enr_dead.offset_dt_code  <>  l_cur_dead_details.offset_dt_code OR
9226 		 l_c_enr_dead.offset_duration <> l_cur_dead_details.offset_duration ) THEN
9227 
9228 		   l_n_non_std_usec_dls_id :=l_cur_dead_details.non_std_usec_dls_id;
9229 		   l_c_org_unit_code := l_cur_dead_details.org_unit_code;
9230 		   l_c_definition_code := l_cur_dead_details.definition_code;
9231 		   l_c_formula_method := l_cur_dead_details.formula_method;
9232 		   l_c_round_method := l_cur_dead_details.round_method;
9233 		   l_n_offset_duration := l_cur_dead_details.offset_duration;
9234 		   l_c_offset_dt_code := l_cur_dead_details.offset_dt_code;
9235 
9236 		   l_d_enr_dl_date:= igs_ps_gen_004.recal_dl_date (
9237 						 p_v_uoo_id        =>l_n_uoo_id,
9238 						 p_formula_method  =>l_cur_dead_details.formula_method,
9239 						 p_durationdays    =>l_n_duration_days,--out
9240 						 p_round_method    =>l_cur_dead_details.round_method,
9241 						 p_OffsetDuration  =>l_cur_dead_details.offset_duration,
9242 						 p_OffsetDays      =>l_n_offset_days,--out
9243 						 p_function_name   =>p_usec_enr_dead_rec.function_name,
9244 						 p_setup_id        =>l_cur_dead_details.non_std_usec_dls_id,
9245 						 p_offset_dt_code  =>l_cur_dead_details.offset_dt_code,
9246 						 p_msg 	           =>l_c_message  --out
9247 						 );
9248 
9249 	     END IF;
9250            END IF;
9251    	   CLOSE cur_dead_details;
9252 
9253         END IF;
9254 
9255 	IF p_usec_enr_dead_rec.enr_dl_date IS NOT NULL THEN
9256 	  l_d_enr_dl_date := p_usec_enr_dead_rec.enr_dl_date;
9257 	ELSE
9258 	  l_d_enr_dl_date := l_c_enr_dead.enr_dl_date;
9259 	END IF;
9260 
9261       END IF; --insert/update
9262 
9263     END Assign_defaults;
9264 
9265     PROCEDURE Business_validation(p_usec_enr_dead_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dead_rec_type) AS
9266       CURSOR cur_check_ns_usec(cp_n_uoo_id  IN NUMBER) IS
9267       SELECT 'X'
9268       FROM igs_ps_unit_ofr_opt_all
9269       WHERE uoo_id = cp_n_uoo_id
9270       AND non_std_usec_ind = 'Y';
9271       l_c_var    VARCHAR2(1);
9272 
9273       l_message_name VARCHAR2(30);
9274 
9275     BEGIN
9276       --Check if the unit is INACTIVE, then do not allow to import
9277       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_enr_dead_rec.unit_cd, p_usec_enr_dead_rec.version_number,l_message_name)=FALSE THEN
9278 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
9279 	    fnd_msg_pub.add;
9280 	    p_usec_enr_dead_rec.status := 'E';
9281       END IF;
9282 
9283       --Check if the Unit Scetion is not Not standard then insert/update is not allowed
9284       OPEN cur_check_ns_usec(l_n_uoo_id);
9285       FETCH cur_check_ns_usec INTO l_c_var;
9286       IF cur_check_ns_usec%NOTFOUND THEN
9287         fnd_message.set_name ( 'IGS', 'IGS_PS_NON_STD_USEC_NOT_IMP' );
9288 	fnd_message.set_token('RECORD',igs_ps_validate_lgcy_pkg.get_lkup_meaning('ENR_DEADLINE','LEGACY_TOKENS'));
9289         fnd_msg_pub.add;
9290   	/*igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_NON_STD_USEC_NOT_IMP','ENR_DEADLINE','LEGACY_TOKENS',FALSE);*/
9291 	p_usec_enr_dead_rec.status := 'E';
9292       END IF;
9293       CLOSE cur_check_ns_usec;
9294 
9295     END Business_validation;
9296 
9297 BEGIN
9298 
9299   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9300     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.start_logging_for',
9301                     'Unit Section Enrollment Deadline ');
9302   END IF;
9303 
9304   p_c_rec_status := 'S';
9305   FOR I in 1..p_usec_enr_dead_tbl.LAST LOOP
9306      IF p_usec_enr_dead_tbl.EXISTS(I) THEN
9307 	-- Initialize the variable use to store the derived values.
9308 	l_n_uoo_id := NULL;
9309         l_n_non_std_usec_dls_id :=NULL;
9310         l_c_org_unit_code :=NULL;
9311         l_c_definition_code :=NULL;
9312         l_c_formula_method :=NULL;
9313         l_c_round_method :=NULL;
9314         l_n_offset_duration :=NULL;
9315         l_c_offset_dt_code :=NULL;
9316         l_n_duration_days :=NULL;
9317         l_n_offset_days :=NULL;
9318         l_d_enr_dl_date :=NULL;
9319 
9320 	p_usec_enr_dead_tbl(I).status := 'S';
9321 	p_usec_enr_dead_tbl(I).msg_from := fnd_msg_pub.count_msg;
9322 	trim_values(p_usec_enr_dead_tbl(I));
9323 
9324 	validate_parameters(p_usec_enr_dead_tbl(I));
9325 
9326 
9327 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9328 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_validate_parameters',
9329 	  'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9330 	  ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9331 	  p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9332 	  p_usec_enr_dead_tbl(I).status);
9333         END IF;
9334 
9335 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9336 	   validate_derivation(p_usec_enr_dead_tbl(I));
9337 
9338            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9339 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_validate_derivation',
9340 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9341 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9342 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9343 	      p_usec_enr_dead_tbl(I).status);
9344            END IF;
9345 
9346 	END IF;
9347 
9348 	--Find out whether it is insert/update of record
9349 	l_insert_update:='I';
9350 	IF p_usec_enr_dead_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
9351 	  l_insert_update:= check_insert_update(p_usec_enr_dead_tbl(I));
9352 
9353            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9354 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_check_insert_update',
9355 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9356 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9357 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9358 	      p_usec_enr_dead_tbl(I).status);
9359            END IF;
9360 
9361 
9362 	END IF;
9363 
9364 	IF p_usec_enr_dead_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
9365 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
9366 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
9367 	    fnd_msg_pub.add;
9368 	    p_usec_enr_dead_tbl(I).status := 'A';
9369 	  END IF;
9370 
9371            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9372 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_check_import_allowed',
9373 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9374 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9375 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9376 	      p_usec_enr_dead_tbl(I).status);
9377            END IF;
9378 
9379 	END IF;
9380 
9381 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9382 	  assign_defaults(p_usec_enr_dead_tbl(I),l_insert_update);
9383 
9384            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9385 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_assign_defaults',
9386 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9387 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9388 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9389 	      p_usec_enr_dead_tbl(I).status);
9390            END IF;
9391 
9392 	END IF;
9393 
9394 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9395 	   validate_db_cons ( p_usec_enr_dead_tbl(I),l_insert_update);
9396 
9397            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9398 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_validate_db_cons',
9399 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9400 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9401 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9402 	      p_usec_enr_dead_tbl(I).status);
9403            END IF;
9404 
9405 	END IF;
9406 
9407 
9408 	--Business validations
9409 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9410 	  Business_validation(p_usec_enr_dead_tbl(I));
9411 
9412           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9413 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.status_after_Business_validation',
9414 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9415 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9416 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name||'  '||'Status:'||
9417 	      p_usec_enr_dead_tbl(I).status);
9418            END IF;
9419 
9420 	END IF;
9421 
9422 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9423 
9424 	  IF l_insert_update = 'I' THEN
9425 	    INSERT INTO IGS_EN_NSTD_USEC_DL(
9426 	      nstd_usec_dl_id        ,
9427 	      non_std_usec_dls_id    ,
9428 	      function_name          ,
9429 	      definition_code        ,
9430 	      org_unit_code          ,
9431 	      formula_method         ,
9432 	      round_method           ,
9433 	      offset_dt_code         ,
9434 	      offset_duration        ,
9435 	      uoo_id                 ,
9436 	      enr_dl_date            ,
9437 	      enr_dl_total_days      ,
9438 	      enr_dl_offset_days     ,
9439 	      created_by,
9440 	      creation_date,
9441 	      last_updated_by,
9442 	      last_update_date,
9443 	      last_update_login )
9444 	    VALUES (
9445 	      igs_en_nstd_usec_dl_s.NEXTVAL,
9446               l_n_non_std_usec_dls_id,
9447               p_usec_enr_dead_tbl(I).function_name,
9448  	      l_c_definition_code,
9449 	      l_c_org_unit_code,
9450 	      l_c_formula_method,
9451 	      l_c_round_method,
9452 	      l_c_offset_dt_code,
9453 	      l_n_offset_duration,
9454 	      l_n_uoo_id,
9455 	      l_d_enr_dl_date,
9456 	      l_n_duration_days,
9457 	      l_n_offset_days,
9458 	      g_n_user_id,
9459 	      SYSDATE,
9460 	      g_n_user_id,
9461 	      SYSDATE,
9462 	      g_n_login_id);
9463 
9464 	       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9465 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.Record_Inserted',
9466 		  'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9467 		  ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9468 		  p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name);
9469                END IF;
9470 
9471           ELSE
9472             UPDATE IGS_EN_NSTD_USEC_DL SET
9473               non_std_usec_dls_id    = l_n_non_std_usec_dls_id,
9474 	      definition_code        = l_c_definition_code,
9475 	      org_unit_code          = l_c_org_unit_code,
9476 	      formula_method         = l_c_formula_method,
9477 	      round_method           = l_c_round_method,
9478 	      offset_dt_code         = l_c_offset_dt_code,
9479 	      offset_duration        = l_n_offset_duration,
9480 	      enr_dl_date            = l_d_enr_dl_date,
9481 	      enr_dl_total_days      = l_n_duration_days,
9482 	      enr_dl_offset_days     = l_n_offset_days,
9483    	      last_updated_by        = g_n_user_id ,
9484 	      last_update_date       = sysdate ,
9485 	      last_update_login      = g_n_login_id
9486 	    WHERE uoo_id=l_n_uoo_id AND function_name=p_usec_enr_dead_tbl(I).function_name;
9487 
9488             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9489 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.Record_Updated',
9490 	      'Unit code:'||p_usec_enr_dead_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dead_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9491 	      ||p_usec_enr_dead_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dead_tbl(I).location_cd||'  '||'Unit Class:'||
9492 	      p_usec_enr_dead_tbl(I).unit_class||'  '||'function_name:'||p_usec_enr_dead_tbl(I).function_name);
9493             END IF;
9494 
9495 	  END IF;
9496 
9497 
9498 	END IF;
9499 
9500 
9501 	IF p_usec_enr_dead_tbl(I).status = 'S' THEN
9502 	   p_usec_enr_dead_tbl(I).msg_from := NULL;
9503 	   p_usec_enr_dead_tbl(I).msg_to := NULL;
9504 	ELSIF  p_usec_enr_dead_tbl(I).status = 'A' THEN
9505 	   p_usec_enr_dead_tbl(I).msg_from  := p_usec_enr_dead_tbl(I).msg_from + 1;
9506 	   p_usec_enr_dead_tbl(I).msg_to := fnd_msg_pub.count_msg;
9507 	ELSE
9508 	   p_c_rec_status := p_usec_enr_dead_tbl(I).status;
9509 	   p_usec_enr_dead_tbl(I).msg_from := p_usec_enr_dead_tbl(I).msg_from+1;
9510 	   p_usec_enr_dead_tbl(I).msg_to := fnd_msg_pub.count_msg;
9511 	   IF p_usec_enr_dead_tbl(I).status = 'E' THEN
9512 	      RETURN;
9513 	   END IF;
9514 	END IF;
9515 
9516      END IF;
9517   END LOOP;
9518 
9519    IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9520      fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dead.after_import_status',p_c_rec_status);
9521    END IF;
9522 
9523 END create_usec_enr_dead;
9524 
9525 PROCEDURE create_usec_enr_dis(p_usec_enr_dis_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_tbl_type,
9526  	                      p_c_rec_status OUT NOCOPY VARCHAR2,
9527 			      p_calling_context IN VARCHAR2) IS
9528 
9529 /***********************************************************************************************
9530 
9531 Created By:         sarakshi
9532 Date Created By:    01-Jun-2005
9533 Purpose:            This procedure imports unit section Enrollment Discontinuation.
9534 
9535 Known limitations,enhancements,remarks:
9536 Change History
9537 Who       When         What
9538 Sommukhe  13-Jan-2006  Bug #4926548 replaced igs_en_nsd_dlstp with igs_en_nsd_dlstp_all for cursor cur_disc_details
9539                        in  proccedure Assign_defaults
9540 ***********************************************************************************************/
9541     l_n_uoo_id                   igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
9542     l_n_non_std_disc_dl_stp_id   igs_en_nsu_dlstp.non_std_usec_dls_id%TYPE;
9543     l_c_org_unit_code            igs_en_nsu_dlstp.org_unit_code%TYPE;
9544     l_c_definition_code          igs_en_nsu_dlstp.definition_code%TYPE;
9545     l_c_formula_method           igs_en_nsu_dlstp.formula_method%TYPE;
9546     l_c_round_method             igs_en_nsu_dlstp.round_method%TYPE;
9547     l_n_offset_duration          igs_en_nsu_dlstp.offset_duration%TYPE;
9548     l_c_offset_dt_code           igs_en_nsu_dlstp.offset_dt_code%TYPE;
9549     l_n_duration_days            igs_en_nstd_usec_dl.enr_dl_total_days%TYPE;
9550     l_n_offset_days              igs_en_nstd_usec_dl.enr_dl_offset_days%TYPE;
9551     l_d_enr_dl_date              igs_en_nstd_usec_dl.enr_dl_date%TYPE;
9552     l_insert_update              VARCHAR2(1);
9553 
9554     PROCEDURE trim_values ( p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type) AS
9555     BEGIN
9556 
9557       p_usec_enr_dis_rec.unit_cd := TRIM(p_usec_enr_dis_rec.unit_cd);
9558       p_usec_enr_dis_rec.version_number := TRIM(p_usec_enr_dis_rec.version_number);
9559       p_usec_enr_dis_rec.teach_cal_alternate_code := TRIM(p_usec_enr_dis_rec.teach_cal_alternate_code);
9560       p_usec_enr_dis_rec.location_cd := TRIM(p_usec_enr_dis_rec.location_cd);
9561       p_usec_enr_dis_rec.unit_class := TRIM(p_usec_enr_dis_rec.unit_class);
9562       p_usec_enr_dis_rec.administrative_unit_status := TRIM(p_usec_enr_dis_rec.administrative_unit_status);
9563       p_usec_enr_dis_rec.usec_disc_dl_date := TRUNC(p_usec_enr_dis_rec.usec_disc_dl_date);
9564 
9565     END trim_values;
9566 
9567     PROCEDURE validate_parameters( p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type) AS
9568 
9569     BEGIN
9570       p_usec_enr_dis_rec.status:='S';
9571 
9572 
9573       IF p_usec_enr_dis_rec.unit_cd IS NULL OR p_usec_enr_dis_rec.unit_cd = FND_API.G_MISS_CHAR THEN
9574          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
9575          p_usec_enr_dis_rec.status := 'E';
9576       END IF;
9577 
9578       IF p_usec_enr_dis_rec.version_number IS NULL OR p_usec_enr_dis_rec.version_number = FND_API.G_MISS_NUM THEN
9579          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
9580          p_usec_enr_dis_rec.status := 'E';
9581       END IF;
9582 
9583       IF p_usec_enr_dis_rec.teach_cal_alternate_code IS NULL OR p_usec_enr_dis_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
9584 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
9585 	 p_usec_enr_dis_rec.status := 'E';
9586       END IF;
9587 
9588       IF p_usec_enr_dis_rec.location_cd IS NULL OR p_usec_enr_dis_rec.location_cd = FND_API.G_MISS_CHAR THEN
9589 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
9590 	 p_usec_enr_dis_rec.status := 'E';
9591       END IF;
9592 
9593       IF p_usec_enr_dis_rec.unit_class IS NULL OR p_usec_enr_dis_rec.unit_class = FND_API.G_MISS_CHAR THEN
9594         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
9595 	p_usec_enr_dis_rec.status := 'E';
9596       END IF;
9597 
9598       IF p_usec_enr_dis_rec.administrative_unit_status IS NULL OR p_usec_enr_dis_rec.administrative_unit_status = FND_API.G_MISS_CHAR THEN
9599         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ADMINISTRATIVE_UNIT_STATUS','LEGACY_TOKENS',FALSE);
9600 	p_usec_enr_dis_rec.status := 'E';
9601       END IF;
9602 
9603 
9604     END validate_parameters;
9605 
9606     PROCEDURE validate_derivation(p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type) AS
9607 
9608       l_c_cal_type    VARCHAR2(10);
9609       l_n_seq_num     NUMBER;
9610       l_d_start       igs_ca_inst_all.start_dt%TYPE;
9611       l_d_end         igs_ca_inst_all.end_dt%TYPE;
9612       l_c_ret_status  VARCHAR2(30);
9613 
9614 
9615     BEGIN
9616 
9617        -- Deriving the Calendar Type and Calendar Sequence Number
9618        igs_ge_gen_003.get_calendar_instance(p_usec_enr_dis_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
9619        IF l_c_ret_status <> 'SINGLE' THEN
9620 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
9621 	   p_usec_enr_dis_rec.status := 'E';
9622        END IF;
9623 
9624        -- Deriving the Unit Offering Option Identifier
9625        l_c_ret_status := NULL;
9626        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_enr_dis_rec.unit_cd, p_usec_enr_dis_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_enr_dis_rec.location_cd, p_usec_enr_dis_rec.unit_class, l_n_uoo_id, l_c_ret_status);
9627        IF l_c_ret_status IS NOT NULL THEN
9628 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
9629 	  p_usec_enr_dis_rec.status := 'E';
9630        END IF;
9631 
9632     END validate_derivation;
9633 
9634     PROCEDURE validate_db_cons(p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type,p_insert_update IN VARCHAR2) AS
9635       CURSOR cur_amd_unit_stat(cp_administrative_unit_status IN igs_ad_adm_unit_stat.administrative_unit_status%TYPE) IS
9636       SELECT 'X'
9637       FROM  igs_ad_adm_unit_stat aus
9638       WHERE aus.administrative_unit_status = cp_administrative_unit_status
9639       AND aus.unit_attempt_status='DISCONTIN'
9640       AND aus.closed_ind ='N';
9641       l_c_var    VARCHAR2(1);
9642 
9643     BEGIN
9644 
9645       IF p_insert_update = 'I' THEN
9646 	-- Unique Key Validation
9647 	IF igs_en_usec_disc_dl_pkg.get_uk_for_validation ( x_uoo_id           => l_n_uoo_id,
9648 						           x_administrative_unit_status => p_usec_enr_dis_rec.administrative_unit_status ) THEN
9649 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'ENR_DISCONTINUATION', 'LEGACY_TOKENS', FALSE);
9650 	  p_usec_enr_dis_rec.status := 'W';
9651 	  RETURN;
9652 	END IF;
9653 
9654 	--Administrative unit status validation (Fk)
9655 	OPEN cur_amd_unit_stat(p_usec_enr_dis_rec.administrative_unit_status);
9656 	FETCH cur_amd_unit_stat INTO l_c_var;
9657 	IF cur_amd_unit_stat%NOTFOUND THEN
9658          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'ADMINISTRATIVE_UNIT_STATUS', 'LEGACY_TOKENS', FALSE);
9659          p_usec_enr_dis_rec.status := 'E';
9660 	END IF;
9661 
9662       END IF;
9663 
9664       -- Foreign Key Checking
9665       --Check for the existence of the unit section
9666       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
9667          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
9668          p_usec_enr_dis_rec.status := 'E';
9669       END IF;
9670 
9671 
9672       IF l_n_non_std_disc_dl_stp_id IS NOT NULL THEN
9673 	IF NOT igs_en_nsd_dlstp_pkg.get_pk_for_validation ( l_n_non_std_disc_dl_stp_id) THEN
9674 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'NON_STD_DISC_DL_STP_ID', 'LEGACY_TOKENS', FALSE);
9675 	   p_usec_enr_dis_rec.status := 'E';
9676 	END IF;
9677       END IF;
9678 
9679     END validate_db_cons;
9680 
9681     -- Check for Update/Insert
9682     FUNCTION check_insert_update ( p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type) RETURN VARCHAR2 IS
9683 
9684       CURSOR c_enr_disc IS
9685       SELECT 'X'
9686       FROM igs_en_usec_disc_dl
9687       WHERE uoo_id = l_n_uoo_id
9688       AND administrative_unit_status = p_usec_enr_dis_rec.administrative_unit_status;
9689 
9690       l_c_var  VARCHAR2(1);
9691 
9692     BEGIN
9693 
9694        OPEN c_enr_disc;
9695        FETCH c_enr_disc INTO l_c_var;
9696        IF c_enr_disc%FOUND THEN
9697 	 CLOSE c_enr_disc;
9698 	 RETURN 'U';
9699        ELSE
9700 	 CLOSE c_enr_disc;
9701 	 RETURN 'I';
9702        END IF;
9703 
9704     END check_insert_update;
9705 
9706     PROCEDURE Assign_defaults ( p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type,p_insert_update IN VARCHAR2) AS
9707 
9708       CURSOR cur_usec(cp_uoo_id IN NUMBER) IS
9709       SELECT owner_org_unit_cd
9710       FROM   igs_ps_unit_ofr_opt_all
9711       WHERE  uoo_id=cp_uoo_id;
9712       l_c_org_unit_cd   igs_ps_unit_ofr_opt_all.owner_org_unit_cd%TYPE;
9713 
9714       CURSOR cur_disc_details (cp_org_unit_cd IN VARCHAR2,cp_administrative_unit_status IN VARCHAR2) IS
9715       SELECT formula_method,round_method,offset_duration,non_std_disc_dl_stp_id,offset_dt_code,org_unit_code,definition_code
9716       FROM igs_en_nsd_dlstp_all
9717       WHERE ((org_unit_code = cp_org_unit_cd AND definition_code = 'ORGANIZATIONAL_UNIT') OR definition_code = 'INSTITUTION')
9718       AND administrative_unit_status = cp_administrative_unit_status;
9719       l_cur_disc_details   cur_disc_details%ROWTYPE;
9720 
9721       CURSOR c_enr_disc IS
9722       SELECT *
9723       FROM igs_en_usec_disc_dl
9724       WHERE uoo_id = l_n_uoo_id
9725       AND administrative_unit_status = p_usec_enr_dis_rec.administrative_unit_status;
9726       l_c_enr_disc c_enr_disc%ROWTYPE;
9727 
9728       l_c_message     VARCHAR2(30);
9729 
9730     BEGIN
9731 
9732       IF p_insert_update = 'I' THEN
9733 	   -- Dervie the attributes from the org/institution level table
9734 	   OPEN cur_usec(l_n_uoo_id);
9735 	   FETCH cur_usec INTO l_c_org_unit_cd;
9736 	   CLOSE cur_usec;
9737 
9738 
9739 	   OPEN cur_disc_details(l_c_org_unit_cd,p_usec_enr_dis_rec.administrative_unit_status);
9740 	   FETCH cur_disc_details INTO  l_cur_disc_details;
9741 	   IF cur_disc_details%FOUND THEN
9742 
9743 
9744 	     l_n_non_std_disc_dl_stp_id :=l_cur_disc_details.non_std_disc_dl_stp_id;
9745 	     l_c_org_unit_code := l_cur_disc_details.org_unit_code;
9746 	     l_c_definition_code := l_cur_disc_details.definition_code;
9747 	     l_c_formula_method := l_cur_disc_details.formula_method;
9748 	     l_c_round_method := l_cur_disc_details.round_method;
9749 	     l_n_offset_duration := l_cur_disc_details.offset_duration;
9750 	     l_c_offset_dt_code := l_cur_disc_details.offset_dt_code;
9751 
9752 	     l_d_enr_dl_date:= igs_ps_gen_004.recal_dl_date (
9753 					   p_v_uoo_id        =>l_n_uoo_id,
9754 					   p_formula_method  =>l_cur_disc_details.formula_method,
9755 					   p_durationdays    =>l_n_duration_days,--out
9756 					   p_round_method    =>l_cur_disc_details.round_method,
9757 					   p_OffsetDuration  =>l_cur_disc_details.offset_duration,
9758 					   p_OffsetDays      =>l_n_offset_days,--out
9759 					   p_function_name   =>NULL,
9760 					   p_setup_id        =>l_cur_disc_details.non_std_disc_dl_stp_id,
9761 					   p_offset_dt_code  =>l_cur_disc_details.offset_dt_code,
9762 					   p_msg 	     =>l_c_message  --out
9763 					   );
9764 	      IF p_usec_enr_dis_rec.usec_disc_dl_date IS NOT NULL THEN
9765 		l_d_enr_dl_date := p_usec_enr_dis_rec.usec_disc_dl_date;
9766 	      END IF;
9767            ELSE
9768 	     IF p_usec_enr_dis_rec.usec_disc_dl_date IS NULL THEN
9769 		igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ENR_DISC_DATE','LEGACY_TOKENS',FALSE);
9770 		p_usec_enr_dis_rec.status := 'E';
9771              ELSE
9772 	        l_d_enr_dl_date := p_usec_enr_dis_rec.usec_disc_dl_date;
9773              END IF;
9774 	   END IF;
9775            CLOSE cur_disc_details;
9776 
9777       ELSE --update
9778 
9779         OPEN c_enr_disc;
9780         FETCH c_enr_disc INTO l_c_enr_disc;
9781 	CLOSE c_enr_disc;
9782 
9783          --Set the values to the databse values
9784 	 l_n_non_std_disc_dl_stp_id :=l_c_enr_disc.non_std_disc_dl_stp_id;
9785 	 l_c_org_unit_code := l_c_enr_disc.org_unit_code;
9786 	 l_c_definition_code := l_c_enr_disc.definition_code;
9787 	 l_c_formula_method := l_c_enr_disc.formula_method;
9788 	 l_c_round_method := l_c_enr_disc.round_method;
9789 	 l_n_offset_duration := l_c_enr_disc.offset_duration;
9790 	 l_c_offset_dt_code := l_c_enr_disc.offset_dt_code;
9791 	 l_n_duration_days :=  l_c_enr_disc.usec_disc_total_days;
9792 	 l_n_offset_days :=    l_c_enr_disc.usec_disc_offset_days;
9793 
9794         IF l_c_enr_disc.non_std_disc_dl_stp_id IS NOT NULL THEN
9795 	   -- Dervie the attributes from the org/institution level table
9796 	   OPEN cur_usec(l_n_uoo_id);
9797 	   FETCH cur_usec INTO l_c_org_unit_cd;
9798 	   CLOSE cur_usec;
9799 
9800 
9801 	   OPEN cur_disc_details(l_c_org_unit_cd,p_usec_enr_dis_rec.administrative_unit_status);
9802 	   FETCH cur_disc_details INTO  l_cur_disc_details;
9803            IF cur_disc_details%FOUND THEN
9804 	     IF (l_c_enr_disc.formula_method  <>  l_cur_disc_details.formula_method OR
9805 		 l_c_enr_disc.round_method    <>  l_cur_disc_details.round_method   OR
9806 		 l_c_enr_disc.offset_dt_code  <>  l_cur_disc_details.offset_dt_code OR
9807 		 l_c_enr_disc.offset_duration <> l_cur_disc_details.offset_duration ) THEN
9808 
9809 		   l_n_non_std_disc_dl_stp_id :=l_cur_disc_details.non_std_disc_dl_stp_id;
9810 		   l_c_org_unit_code := l_cur_disc_details.org_unit_code;
9811 		   l_c_definition_code := l_cur_disc_details.definition_code;
9812 		   l_c_formula_method := l_cur_disc_details.formula_method;
9813 		   l_c_round_method := l_cur_disc_details.round_method;
9814 		   l_n_offset_duration := l_cur_disc_details.offset_duration;
9815 		   l_c_offset_dt_code := l_cur_disc_details.offset_dt_code;
9816 
9817 		   l_d_enr_dl_date:= igs_ps_gen_004.recal_dl_date (
9818 						 p_v_uoo_id        =>l_n_uoo_id,
9819 						 p_formula_method  =>l_cur_disc_details.formula_method,
9820 						 p_durationdays    =>l_n_duration_days,--out
9821 						 p_round_method    =>l_cur_disc_details.round_method,
9822 						 p_OffsetDuration  =>l_cur_disc_details.offset_duration,
9823 						 p_OffsetDays      =>l_n_offset_days,--out
9824 						 p_function_name   =>NULL,
9825 						 p_setup_id        =>l_cur_disc_details.non_std_disc_dl_stp_id,
9826 						 p_offset_dt_code  =>l_cur_disc_details.offset_dt_code,
9827 						 p_msg 	           =>l_c_message  --out
9828 						 );
9829 
9830 	     END IF;
9831            END IF;
9832    	   CLOSE cur_disc_details;
9833 
9834         END IF;
9835 
9836 	IF p_usec_enr_dis_rec.usec_disc_dl_date IS NOT NULL THEN
9837 	  l_d_enr_dl_date := p_usec_enr_dis_rec.usec_disc_dl_date;
9838 	ELSE
9839 	  l_d_enr_dl_date := l_c_enr_disc.usec_disc_dl_date;
9840 	END IF;
9841 
9842       END IF; --insert/update
9843 
9844     END Assign_defaults;
9845 
9846     PROCEDURE Business_validation(p_usec_enr_dis_rec IN OUT NOCOPY igs_ps_generic_pub.usec_enr_dis_rec_type) AS
9847       CURSOR cur_check_ns_usec(cp_n_uoo_id  IN NUMBER) IS
9848       SELECT 'X'
9849       FROM igs_ps_unit_ofr_opt_all
9850       WHERE uoo_id = cp_n_uoo_id
9851       AND non_std_usec_ind = 'Y';
9852       l_c_var    VARCHAR2(1);
9853 
9854       l_message_name VARCHAR2(30);
9855 
9856     BEGIN
9857       --Check if the unit is INACTIVE, then do not allow to import
9858       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_enr_dis_rec.unit_cd, p_usec_enr_dis_rec.version_number,l_message_name)=FALSE THEN
9859 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
9860 	    fnd_msg_pub.add;
9861 	    p_usec_enr_dis_rec.status := 'E';
9862       END IF;
9863 
9864       --Check if the Unit Scetion is not Not standard then insert/update is not allowed
9865       OPEN cur_check_ns_usec(l_n_uoo_id);
9866       FETCH cur_check_ns_usec INTO l_c_var;
9867       IF cur_check_ns_usec%NOTFOUND THEN
9868         fnd_message.set_name ( 'IGS', 'IGS_PS_NON_STD_USEC_NOT_IMP' );
9869 	fnd_message.set_token('RECORD',igs_ps_validate_lgcy_pkg.get_lkup_meaning('ENR_DISCONTINUATION','LEGACY_TOKENS'));
9870         fnd_msg_pub.add;
9871       	/*igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_NON_STD_USEC_NOT_IMP','ENR_DISCONTINUATION','LEGACY_TOKENS',FALSE);*/
9872         p_usec_enr_dis_rec.status := 'E';
9873       END IF;
9874       CLOSE cur_check_ns_usec;
9875 
9876     END Business_validation;
9877 
9878 BEGIN
9879 
9880   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9881     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.start_logging_for',
9882                     'Unit Section Enrollment Discontinuation');
9883   END IF;
9884 
9885   p_c_rec_status := 'S';
9886   FOR I in 1..p_usec_enr_dis_tbl.LAST LOOP
9887      IF p_usec_enr_dis_tbl.EXISTS(I) THEN
9888 	-- Initialize the variable use to store the derived values.
9889 	l_n_uoo_id := NULL;
9890         l_n_non_std_disc_dl_stp_id :=NULL;
9891         l_c_org_unit_code :=NULL;
9892         l_c_definition_code :=NULL;
9893         l_c_formula_method :=NULL;
9894         l_c_round_method :=NULL;
9895         l_n_offset_duration :=NULL;
9896         l_c_offset_dt_code :=NULL;
9897         l_n_duration_days :=NULL;
9898         l_n_offset_days :=NULL;
9899         l_d_enr_dl_date :=NULL;
9900 
9901 	p_usec_enr_dis_tbl(I).status := 'S';
9902 	p_usec_enr_dis_tbl(I).msg_from := fnd_msg_pub.count_msg;
9903 	trim_values(p_usec_enr_dis_tbl(I));
9904 	validate_parameters(p_usec_enr_dis_tbl(I));
9905 
9906 	IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9907 	  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_validate_parameters',
9908 	  'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9909 	  ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9910 	  p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9911 	  p_usec_enr_dis_tbl(I).status);
9912         END IF;
9913 
9914 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
9915 	   validate_derivation(p_usec_enr_dis_tbl(I));
9916 
9917             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9918 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_validate_derivation',
9919 	      'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9920 	      ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9921 	      p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9922 	      p_usec_enr_dis_tbl(I).status);
9923             END IF;
9924 
9925 	END IF;
9926 
9927 	--Find out whether it is insert/update of record
9928 	l_insert_update:='I';
9929 	IF p_usec_enr_dis_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
9930 	  l_insert_update:= check_insert_update(p_usec_enr_dis_tbl(I));
9931 
9932           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9933 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_check_insert_update',
9934 	    'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9935 	    ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9936 	    p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9937 	    p_usec_enr_dis_tbl(I).status);
9938           END IF;
9939 
9940 	END IF;
9941 
9942 	IF p_usec_enr_dis_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
9943 	  IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
9944 	    fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
9945 	    fnd_msg_pub.add;
9946 	    p_usec_enr_dis_tbl(I).status := 'A';
9947 	  END IF;
9948 
9949           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9950 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_check_import_allowed',
9951 	    'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9952 	    ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9953 	    p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9954 	    p_usec_enr_dis_tbl(I).status);
9955           END IF;
9956 
9957 	END IF;
9958 
9959 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
9960 	  assign_defaults(p_usec_enr_dis_tbl(I),l_insert_update);
9961 
9962           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9963 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_assign_defaults',
9964 	    'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9965 	    ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9966 	    p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9967 	    p_usec_enr_dis_tbl(I).status);
9968           END IF;
9969 
9970 	END IF;
9971 
9972 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
9973 	   validate_db_cons ( p_usec_enr_dis_tbl(I),l_insert_update);
9974 
9975            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9976 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_validate_db_cons',
9977 	     'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9978 	     ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9979 	     p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9980 	     p_usec_enr_dis_tbl(I).status);
9981            END IF;
9982 
9983 	END IF;
9984 
9985 
9986 	--Business validations
9987 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
9988 	  Business_validation(p_usec_enr_dis_tbl(I));
9989 
9990           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
9991 	     fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.status_after_Business_validation',
9992 	     'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
9993 	     ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
9994 	     p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status||'  '||'Status:'||
9995 	     p_usec_enr_dis_tbl(I).status);
9996           END IF;
9997 
9998 	END IF;
9999 
10000 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
10001 
10002 	  IF l_insert_update = 'I' THEN
10003 	    INSERT INTO IGS_EN_USEC_DISC_DL(
10004 	      usec_disc_dl_id        ,
10005 	      non_std_disc_dl_stp_id ,
10006 	      administrative_unit_status,
10007 	      definition_code        ,
10008 	      org_unit_code          ,
10009 	      formula_method         ,
10010 	      round_method           ,
10011 	      offset_dt_code         ,
10012 	      offset_duration        ,
10013 	      uoo_id                 ,
10014 	      usec_disc_dl_date      ,
10015 	      usec_disc_total_days   ,
10016 	      usec_disc_offset_days  ,
10017 	      created_by,
10018 	      creation_date,
10019 	      last_updated_by,
10020 	      last_update_date,
10021 	      last_update_login )
10022 	    VALUES (
10023 	      igs_en_usec_disc_dl_s.NEXTVAL,
10024               l_n_non_std_disc_dl_stp_id,
10025               p_usec_enr_dis_tbl(I).administrative_unit_status,
10026  	      l_c_definition_code,
10027 	      l_c_org_unit_code,
10028 	      l_c_formula_method,
10029 	      l_c_round_method,
10030 	      l_c_offset_dt_code,
10031 	      l_n_offset_duration,
10032 	      l_n_uoo_id,
10033 	      l_d_enr_dl_date,
10034 	      l_n_duration_days,
10035 	      l_n_offset_days,
10036 	      g_n_user_id,
10037 	      SYSDATE,
10038 	      g_n_user_id,
10039 	      SYSDATE,
10040 	      g_n_login_id);
10041 
10042               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10043 		 fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.Record_Inserted',
10044 		 'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10045 		 ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
10046 		 p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status);
10047               END IF;
10048 
10049           ELSE
10050             UPDATE IGS_EN_USEC_DISC_DL SET
10051               non_std_disc_dl_stp_id = l_n_non_std_disc_dl_stp_id,
10052 	      definition_code        = l_c_definition_code,
10053 	      org_unit_code          = l_c_org_unit_code,
10054 	      formula_method         = l_c_formula_method,
10055 	      round_method           = l_c_round_method,
10056 	      offset_dt_code         = l_c_offset_dt_code,
10057 	      offset_duration        = l_n_offset_duration,
10058 	      usec_disc_dl_date      = l_d_enr_dl_date,
10059 	      usec_disc_total_days   = l_n_duration_days,
10060 	      usec_disc_offset_days  = l_n_offset_days,
10061    	      last_updated_by        = g_n_user_id ,
10062 	      last_update_date       = sysdate ,
10063 	      last_update_login      = g_n_login_id
10064 	    WHERE uoo_id=l_n_uoo_id AND administrative_unit_status=p_usec_enr_dis_tbl(I).administrative_unit_status;
10065 
10066             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10067 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.Record_Updated',
10068 	       'Unit code:'||p_usec_enr_dis_tbl(I).unit_cd||'  '||'Version number:'||p_usec_enr_dis_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10069 	       ||p_usec_enr_dis_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_enr_dis_tbl(I).location_cd||'  '||'Unit Class:'||
10070 	       p_usec_enr_dis_tbl(I).unit_class||'  '||'Administrative_unit_status:'||p_usec_enr_dis_tbl(I).administrative_unit_status);
10071             END IF;
10072 
10073 	  END IF;
10074 
10075 
10076 	END IF;
10077 
10078 
10079 	IF p_usec_enr_dis_tbl(I).status = 'S' THEN
10080 	   p_usec_enr_dis_tbl(I).msg_from := NULL;
10081 	   p_usec_enr_dis_tbl(I).msg_to := NULL;
10082 	ELSIF  p_usec_enr_dis_tbl(I).status = 'A' THEN
10083 	   p_usec_enr_dis_tbl(I).msg_from  := p_usec_enr_dis_tbl(I).msg_from + 1;
10084 	   p_usec_enr_dis_tbl(I).msg_to := fnd_msg_pub.count_msg;
10085 	ELSE
10086 	   p_c_rec_status := p_usec_enr_dis_tbl(I).status;
10087 	   p_usec_enr_dis_tbl(I).msg_from := p_usec_enr_dis_tbl(I).msg_from+1;
10088 	   p_usec_enr_dis_tbl(I).msg_to := fnd_msg_pub.count_msg;
10089 	   IF p_usec_enr_dis_tbl(I).status = 'E' THEN
10090 	      RETURN;
10091 	   END IF;
10092 	END IF;
10093 
10094      END IF;
10095   END LOOP;
10096 
10097 
10098   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
10099     fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_enr_dis.after_import_status',p_c_rec_status);
10100   END IF;
10101 
10102 END create_usec_enr_dis;
10103 
10104 
10105   PROCEDURE create_usec_ret(p_usec_ret_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_ret_tbl_type,
10106 			    p_c_rec_status OUT NOCOPY VARCHAR2,
10107 			    p_calling_context IN VARCHAR2) IS
10108   /***********************************************************************************************
10109 
10110   Created By:         sarakshi
10111   Date Created By:    01-Jun-2005
10112   Purpose:            This procedure imports unit section Retention.
10113 
10114   Known limitations,enhancements,remarks:
10115   Change History
10116   Who        When         What
10117   sommukhe   18-Jan-2006  Bug#4926548, modified cur_fee to address the performance issue. Created local procedures and functions.
10118   ***********************************************************************************************/
10119     l_c_cal_type    VARCHAR2(10);
10120     l_n_seq_num     NUMBER;
10121     l_n_uoo_id      igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
10122     l_n_non_std_usec_rtn_id   NUMBER;
10123     l_insert_update VARCHAR2(1);
10124 
10125     PROCEDURE trim_values ( p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type) AS
10126     BEGIN
10127 
10128       p_usec_ret_rec.unit_cd := TRIM(p_usec_ret_rec.unit_cd);
10129       p_usec_ret_rec.version_number := TRIM(p_usec_ret_rec.version_number);
10130       p_usec_ret_rec.teach_cal_alternate_code := TRIM(p_usec_ret_rec.teach_cal_alternate_code);
10131       p_usec_ret_rec.location_cd := TRIM(p_usec_ret_rec.location_cd);
10132       p_usec_ret_rec.unit_class := TRIM(p_usec_ret_rec.unit_class);
10133       p_usec_ret_rec.definition_level := TRIM(p_usec_ret_rec.definition_level);
10134       p_usec_ret_rec.fee_type := TRIM(p_usec_ret_rec.fee_type);
10135       p_usec_ret_rec.formula_method := TRIM(p_usec_ret_rec.formula_method);
10136       p_usec_ret_rec.round_method := TRIM(p_usec_ret_rec.round_method);
10137       p_usec_ret_rec.incl_wkend_duration_flag := TRIM(p_usec_ret_rec.incl_wkend_duration_flag);
10138 
10139     END trim_values;
10140 
10141     PROCEDURE validate_parameters( p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type) AS
10142 
10143     BEGIN
10144       p_usec_ret_rec.status:='S';
10145 
10146 
10147       IF p_usec_ret_rec.unit_cd IS NULL OR p_usec_ret_rec.unit_cd = FND_API.G_MISS_CHAR THEN
10148          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
10149          p_usec_ret_rec.status := 'E';
10150       END IF;
10151 
10152       IF p_usec_ret_rec.version_number IS NULL OR p_usec_ret_rec.version_number = FND_API.G_MISS_NUM THEN
10153          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
10154          p_usec_ret_rec.status := 'E';
10155       END IF;
10156 
10157       IF p_usec_ret_rec.teach_cal_alternate_code IS NULL OR p_usec_ret_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
10158 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
10159 	 p_usec_ret_rec.status := 'E';
10160       END IF;
10161 
10162       IF p_usec_ret_rec.location_cd IS NULL OR p_usec_ret_rec.location_cd = FND_API.G_MISS_CHAR THEN
10163 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
10164 	 p_usec_ret_rec.status := 'E';
10165       END IF;
10166 
10167       IF p_usec_ret_rec.unit_class IS NULL OR p_usec_ret_rec.unit_class = FND_API.G_MISS_CHAR THEN
10168         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
10169 	p_usec_ret_rec.status := 'E';
10170       END IF;
10171 
10172       IF p_usec_ret_rec.definition_level IS NULL OR p_usec_ret_rec.definition_level = FND_API.G_MISS_CHAR THEN
10173         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','DEFINITION_LEVEL','LEGACY_TOKENS',FALSE);
10174 	p_usec_ret_rec.status := 'E';
10175       END IF;
10176 
10177       IF (p_usec_ret_rec.fee_type IS NULL OR p_usec_ret_rec.fee_type = FND_API.G_MISS_CHAR) AND p_usec_ret_rec.definition_level='UNIT_SECTION_FEE_TYPE' THEN
10178         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FEE_TYPE','IGS_FI_LOCKBOX',FALSE);
10179 	p_usec_ret_rec.status := 'E';
10180       END IF;
10181 
10182       IF p_usec_ret_rec.formula_method IS NULL OR p_usec_ret_rec.formula_method = FND_API.G_MISS_CHAR THEN
10183         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FORMULA_METHOD','LEGACY_TOKENS',FALSE);
10184 	p_usec_ret_rec.status := 'E';
10185       END IF;
10186 
10187       IF p_usec_ret_rec.round_method IS NULL OR p_usec_ret_rec.round_method = FND_API.G_MISS_CHAR THEN
10188         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','ROUND_METHOD','LEGACY_TOKENS',FALSE);
10189 	p_usec_ret_rec.status := 'E';
10190       END IF;
10191 
10192       IF p_usec_ret_rec.incl_wkend_duration_flag IS NULL OR p_usec_ret_rec.incl_wkend_duration_flag = FND_API.G_MISS_CHAR THEN
10193         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','INCL_WKEND_DURATION_FLAG','LEGACY_TOKENS',FALSE);
10194 	p_usec_ret_rec.status := 'E';
10195       END IF;
10196 
10197       -- valid values of definition_level is 'UNIT_SECTION_FEE_TYPE' , 'UNIT_SECTION'
10198       IF  p_usec_ret_rec.definition_level NOT IN  ('UNIT_SECTION_FEE_TYPE' , 'UNIT_SECTION') THEN
10199             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','DEFINITION_LEVEL','LEGACY_TOKENS',FALSE);
10200             p_usec_ret_rec.status :='E';
10201       END IF;
10202 
10203       --Fee type should not be there for definition_level = UNIT_SECTION
10204       IF  p_usec_ret_rec.definition_level = 'UNIT_SECTION' AND  p_usec_ret_rec.fee_type IS NOT NULL THEN
10205             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','FEE_TYPE','IGS_FI_LOCKBOX',FALSE);
10206             p_usec_ret_rec.status :='E';
10207       END IF;
10208 
10209     END validate_parameters;
10210 
10211     PROCEDURE validate_derivation(p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type) AS
10212 
10213       l_d_start       igs_ca_inst_all.start_dt%TYPE;
10214       l_d_end         igs_ca_inst_all.end_dt%TYPE;
10215       l_c_ret_status  VARCHAR2(30);
10216 
10217 
10218     BEGIN
10219 
10220        -- Deriving the Calendar Type and Calendar Sequence Number
10221        igs_ge_gen_003.get_calendar_instance(p_usec_ret_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
10222        IF l_c_ret_status <> 'SINGLE' THEN
10223 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
10224 	   p_usec_ret_rec.status := 'E';
10225        END IF;
10226 
10227        -- Deriving the Unit Offering Option Identifier
10228        l_c_ret_status := NULL;
10229        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_ret_rec.unit_cd, p_usec_ret_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_ret_rec.location_cd, p_usec_ret_rec.unit_class, l_n_uoo_id, l_c_ret_status);
10230        IF l_c_ret_status IS NOT NULL THEN
10231 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
10232 	  p_usec_ret_rec.status := 'E';
10233        END IF;
10234 
10235     END validate_derivation;
10236 
10237     PROCEDURE validate_db_cons(p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type,p_insert_update IN VARCHAR2) AS
10238 
10239     BEGIN
10240 
10241       IF p_insert_update = 'I' AND p_usec_ret_rec.definition_level='UNIT_SECTION_FEE_TYPE' THEN
10242 	-- Unique Key Validation
10243 	IF igs_ps_nsus_rtn_pkg.get_uk_for_validation ( x_uoo_id   => l_n_uoo_id,
10244 						       x_fee_type => p_usec_ret_rec.fee_type ) THEN
10245 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'RETENTION', 'LEGACY_TOKENS', FALSE);
10246 	  p_usec_ret_rec.status := 'W';
10247 	  RETURN;
10248 	END IF;
10249 
10250 	--Check for the existence of the Fee Type
10251 	IF NOT igs_fi_fee_type_pkg.get_pk_for_validation (p_usec_ret_rec.fee_type ) THEN
10252 	   igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'FEE_TYPE', 'IGS_FI_LOCKBOX', FALSE);
10253 	   p_usec_ret_rec.status := 'E';
10254 	END IF;
10255 
10256       END IF;
10257 
10258 
10259       --Check constraint
10260       BEGIN
10261          igs_ps_nsus_rtn_pkg.check_constraints('FORMULA_METHOD', p_usec_ret_rec.formula_method);
10262       EXCEPTION
10263          WHEN OTHERS THEN
10264             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','FORMULA_METHOD','LEGACY_TOKENS',TRUE);
10265             p_usec_ret_rec.status :='E';
10266       END;
10267 
10268       BEGIN
10269          igs_ps_nsus_rtn_pkg.check_constraints('ROUND_METHOD', p_usec_ret_rec.round_method);
10270       EXCEPTION
10271          WHEN OTHERS THEN
10272             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','ROUND_METHOD','LEGACY_TOKENS',TRUE);
10273             p_usec_ret_rec.status :='E';
10274       END;
10275 
10276       BEGIN
10277          igs_ps_nsus_rtn_pkg.check_constraints('INCL_WKEND_DURATION_FLAG', p_usec_ret_rec.incl_wkend_duration_flag);
10278       EXCEPTION
10279          WHEN OTHERS THEN
10280             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','INCL_WKEND_DURATION_FLAG','LEGACY_TOKENS',TRUE);
10281             p_usec_ret_rec.status :='E';
10282       END;
10283 
10284 
10285       -- Foreign Key Checking
10286       --Check for the existence of the unit section
10287       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
10288          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
10289          p_usec_ret_rec.status := 'E';
10290       END IF;
10291 
10292 
10293 
10294     END validate_db_cons;
10295 
10296     -- Check for Update/Insert
10297     FUNCTION check_insert_update ( p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type) RETURN VARCHAR2 IS
10298 
10299       CURSOR c_ret_usec IS
10300       SELECT non_std_usec_rtn_id
10301       FROM igs_ps_nsus_rtn
10302       WHERE uoo_id = l_n_uoo_id
10303       AND   definition_code='UNIT_SECTION';
10304 
10305       CURSOR c_ret_usec_fee IS
10306       SELECT non_std_usec_rtn_id
10307       FROM igs_ps_nsus_rtn
10308       WHERE uoo_id = l_n_uoo_id
10309       AND   fee_type = p_usec_ret_rec.fee_type;
10310 
10311     BEGIN
10312 
10313        IF p_usec_ret_rec.definition_level='UNIT_SECTION' THEN
10314 	 OPEN c_ret_usec;
10315 	 FETCH c_ret_usec INTO l_n_non_std_usec_rtn_id;
10316 	 IF c_ret_usec%FOUND THEN
10317 	   CLOSE c_ret_usec;
10318 	   RETURN 'U';
10319 	 ELSE
10320 	   CLOSE c_ret_usec;
10321 	   RETURN 'I';
10322 	 END IF;
10323       ELSE
10324 	 OPEN c_ret_usec_fee;
10325 	 FETCH c_ret_usec_fee INTO l_n_non_std_usec_rtn_id;
10326 	 IF c_ret_usec_fee%FOUND THEN
10327 	   CLOSE c_ret_usec_fee;
10328 	   RETURN 'U';
10329 	 ELSE
10330 	   CLOSE c_ret_usec_fee;
10331 	   RETURN 'I';
10332 	 END IF;
10333       END IF;
10334 
10335     END check_insert_update;
10336 
10337     PROCEDURE Business_validation(p_usec_ret_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_rec_type,p_insert_update IN VARCHAR2) AS
10338       CURSOR cur_check_ns_usec(cp_n_uoo_id  IN NUMBER) IS
10339       SELECT 'X'
10340       FROM igs_ps_unit_ofr_opt_all
10341       WHERE uoo_id = cp_n_uoo_id
10342       AND non_std_usec_ind = 'Y';
10343       l_c_var    VARCHAR2(1);
10344 
10345       l_message_name VARCHAR2(30);
10346 
10347       CURSOR cur_fee(cp_fee_type IN VARCHAR2) IS
10348       SELECT ci.cal_type cal_type,ci.sequence_number sequence_number
10349       FROM  igs_fi_fee_type ft,
10350             igs_fi_f_typ_ca_inst ftci,
10351 	    igs_ca_inst ci,
10352 	    igs_ca_type ct,
10353 	    igs_ca_stat cs
10354       WHERE ft.s_fee_type IN ('TUTNFEE', 'OTHER', 'SPECIAL', 'AUDIT')
10355       AND   ft.closed_ind = 'N'
10356       AND   ft.fee_type = ftci.fee_type
10357       AND   ft.fee_type = cp_fee_type
10358       AND   ftci.fee_cal_type = ci.cal_type
10359       AND   ftci.fee_ci_sequence_number = ci.sequence_number
10360       AND   ci.cal_type = ct.cal_type
10361       AND   ct.s_cal_cat = 'FEE'
10362       AND   ci.cal_status = cs.cal_status
10363       AND   cs.s_cal_status = 'ACTIVE';
10364       cur_fee_rec cur_fee%ROWTYPE;
10365 
10366       CURSOR cur_check_formula (cp_non_std_usec_rtn_id IN NUMBER) IS
10367       SELECT 'X'
10368       FROM   igs_ps_nsus_rtn nr,
10369              igs_ps_nsus_rtn_dtl nrd
10370       WHERE  nr.non_std_usec_rtn_id = nrd.non_std_usec_rtn_id
10371       AND    nr.non_std_usec_rtn_id = cp_non_std_usec_rtn_id
10372       AND    p_usec_ret_rec.formula_method IN ('P','M')
10373       AND    nrd.offset_value > 100;
10374 
10375       CURSOR c_cur(cp_non_std_usec_rtn_id igs_ps_nsus_rtn_dtl.non_std_usec_rtn_id%TYPE) IS
10376       SELECT *
10377       FROM   igs_ps_nsus_rtn_dtl a
10378       WHERE  non_std_usec_rtn_id = cp_non_std_usec_rtn_id
10379       AND    override_date_flag  = 'N';
10380       l_offset_date DATE;
10381 
10382        TYPE teach_cal_rec IS RECORD(
10383 				 cal_type igs_ca_inst_all.cal_type%TYPE,
10384 				 sequence_number igs_ca_inst_all.sequence_number%TYPE
10385 				 );
10386       TYPE teachCalendar IS TABLE OF teach_cal_rec INDEX BY BINARY_INTEGER;
10387       teachCalendar_tbl teachCalendar;
10388       l_n_counter NUMBER(10);
10389       l_c_proceed BOOLEAN ;
10390 
10391 
10392       PROCEDURE createCalendar  IS
10393 
10394       CURSOR cur_cal_teach(cp_load_cal igs_ca_teach_to_load_v.load_cal_type%TYPE,
10395 			   cp_load_seq igs_ca_teach_to_load_v.load_ci_sequence_number%TYPE) IS
10396       SELECT sup_cal_type,sup_ci_sequence_number
10397       FROM   igs_ca_inst_rel
10398       WHERE sub_cal_type = cp_load_cal
10399       AND sub_ci_sequence_number = cp_load_seq;
10400 
10401       CURSOR cur_cal_load IS
10402       SELECT load_cal_type,load_ci_sequence_number
10403       FROM   igs_ca_teach_to_load_v
10404       WHERE  teach_cal_type=l_c_cal_type
10405       AND    teach_ci_sequence_number=l_n_seq_num;
10406 
10407       BEGIN
10408 	 --populate the pl-sql table with the superior calendar's by mapping the teach calendars.
10409 	 l_n_counter :=1;
10410 	 FOR rec_cur_cal_load IN cur_cal_load LOOP
10411 	     FOR rec_cur_cal_teach IN cur_cal_teach(rec_cur_cal_load.load_cal_type ,rec_cur_cal_load.load_ci_sequence_number) LOOP
10412 		teachCalendar_tbl(l_n_counter).cal_type :=rec_cur_cal_teach.sup_cal_type;
10413 		teachCalendar_tbl(l_n_counter).sequence_number :=rec_cur_cal_teach.sup_ci_sequence_number;
10414 		l_n_counter:=l_n_counter+1;
10415 	     END LOOP;
10416 	 END LOOP;
10417 
10418       END createCalendar;
10419 
10420       FUNCTION testCalendar(cp_cal_type igs_ca_inst_all.cal_type%TYPE,
10421 			    cp_sequence_number igs_ca_inst_all.sequence_number%TYPE)  RETURN BOOLEAN AS
10422       BEGIN
10423 	IF teachCalendar_tbl.EXISTS(1) THEN
10424 	  FOR i IN 1..teachCalendar_tbl.last LOOP
10425 	       IF cp_cal_type=teachCalendar_tbl(i).cal_type AND
10426 		  cp_sequence_number=teachCalendar_tbl(i).sequence_number THEN
10427 		  RETURN TRUE;
10428 	       END IF;
10429 	  END LOOP;
10430 	END IF;
10431 	RETURN FALSE;
10432       END testCalendar;
10433 
10434     BEGIN
10435        --Store the superior calendars in a pl-sql tables for the input teaching calendars
10436        createCalendar;
10437       --Check if the unit is INACTIVE, then do not allow to import
10438       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_ret_rec.unit_cd, p_usec_ret_rec.version_number,l_message_name)=FALSE THEN
10439 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
10440 	    fnd_msg_pub.add;
10441 	    p_usec_ret_rec.status := 'E';
10442       END IF;
10443 
10444       --Check if the Unit Section is not Not standard then insert/update is not allowed
10445       OPEN cur_check_ns_usec(l_n_uoo_id);
10446       FETCH cur_check_ns_usec INTO l_c_var;
10447       IF cur_check_ns_usec%NOTFOUND THEN
10448         fnd_message.set_name ( 'IGS', 'IGS_PS_NON_STD_USEC_NOT_IMP' );
10449 	fnd_message.set_token('RECORD',igs_ps_validate_lgcy_pkg.get_lkup_meaning('RETENTION','LEGACY_TOKENS'));
10450         fnd_msg_pub.add;
10451 	/*igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_NON_STD_USEC_NOT_IMP','RETENTION','LEGACY_TOKENS',FALSE);*/
10452 	p_usec_ret_rec.status := 'E';
10453       END IF;
10454       CLOSE cur_check_ns_usec;
10455 
10456       IF p_insert_update = 'I' THEN
10457 
10458 	IF p_usec_ret_rec.fee_type IS NOT NULL THEN
10459   	  l_c_proceed:= FALSE;
10460 	  FOR rec_cur_fee IN cur_fee(p_usec_ret_rec.fee_type) LOOP
10461 	    IF testCalendar(rec_cur_fee.cal_type ,rec_cur_fee.sequence_number ) THEN
10462 	      l_c_proceed:= TRUE;
10463 	      EXIT;
10464 	    END IF;
10465           END LOOP;
10466 
10467 	  IF l_c_proceed = FALSE THEN
10468             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'FEE_TYPE', 'IGS_FI_LOCKBOX', FALSE);
10469 	    p_usec_ret_rec.status := 'E';
10470 	  END IF;
10471         END IF;
10472 
10473       END IF;
10474 
10475       IF teachCalendar_tbl.EXISTS(1) THEN
10476         teachCalendar_tbl.DELETE;
10477       END IF;
10478 
10479 
10480       IF p_insert_update = 'U' THEN
10481         --If formula method is 'P'/'M' and any details exists such that offset is greater than 100 then it is an error condition
10482 	OPEN cur_check_formula(l_n_non_std_usec_rtn_id);
10483 	FETCH cur_check_formula INTO l_c_var;
10484 	IF cur_check_formula%FOUND THEN
10485 	  fnd_message.set_name ( 'IGS', 'IGS_PS_RTN_FORMULA_INVALID' );
10486 	  fnd_msg_pub.add;
10487 	  p_usec_ret_rec.status := 'E';
10488 	END IF;
10489 	CLOSE cur_check_formula;
10490 
10491         IF p_usec_ret_rec.status = 'S' THEN
10492           --update the offset date for the child records
10493 
10494 	  FOR l_c_rec IN c_cur( l_n_non_std_usec_rtn_id) LOOP
10495 	    l_offset_date := igs_ps_gen_004.f_retention_offset_date(
10496 			      p_n_uoo_id              => l_n_uoo_id,
10497                               p_c_formula_method      => p_usec_ret_rec.formula_method,
10498 			      p_c_round_method        => p_usec_ret_rec.round_method,
10499 			      p_c_incl_wkend_duration => p_usec_ret_rec.incl_wkend_duration_flag,
10500 		              p_n_offset_value        => l_c_rec.offset_value
10501 			    );
10502 
10503 
10504 	    UPDATE igs_ps_nsus_rtn_dtl SET
10505 	      offset_date            = l_offset_date,
10506 	      last_updated_by        = g_n_user_id ,
10507 	      last_update_date       = sysdate ,
10508 	      last_update_login      = g_n_login_id
10509 	    WHERE non_std_usec_rtn_dtl_id = l_c_rec.non_std_usec_rtn_dtl_id;
10510 
10511           END LOOP;
10512         END IF;
10513 
10514       END IF;
10515 
10516     END Business_validation;
10517 
10518   BEGIN
10519 
10520     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
10521       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.start_logging_for',
10522                     'Unit Section Retention ');
10523     END IF;
10524 
10525     p_c_rec_status := 'S';
10526     FOR I in 1..p_usec_ret_tbl.LAST LOOP
10527        IF p_usec_ret_tbl.EXISTS(I) THEN
10528 	  -- Initialize the variable use to store the derived values.
10529 	  l_c_cal_type :=NULL;
10530 	  l_n_seq_num :=NULL;
10531 	  l_n_uoo_id := NULL;
10532           l_n_non_std_usec_rtn_id :=NULL;
10533 
10534 	  p_usec_ret_tbl(I).status := 'S';
10535 	  p_usec_ret_tbl(I).msg_from := fnd_msg_pub.count_msg;
10536 	  trim_values(p_usec_ret_tbl(I));
10537 	  validate_parameters(p_usec_ret_tbl(I));
10538 
10539           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10540 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_validate_parameters',
10541 	    'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10542 	    ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10543 	    p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10544 	    ||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10545           END IF;
10546 
10547 
10548 	  IF p_usec_ret_tbl(I).status = 'S' THEN
10549 	     validate_derivation(p_usec_ret_tbl(I));
10550 
10551 	      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10552 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_validate_derivation',
10553 		'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10554 		||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10555 		p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10556 		||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10557 	      END IF;
10558 
10559 	  END IF;
10560 
10561 	  --Find out whether it is insert/update of record
10562 	  l_insert_update:='I';
10563 	  IF p_usec_ret_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
10564 	    l_insert_update:= check_insert_update(p_usec_ret_tbl(I));
10565 
10566             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10567 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_check_insert_update',
10568 	      'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10569 	      ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10570 	      p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10571 	      ||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10572 	    END IF;
10573 
10574 	  END IF;
10575 
10576 	  IF p_usec_ret_tbl(I).status = 'S' AND p_calling_context = 'S'  THEN
10577 	    IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
10578 	      fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
10579 	      fnd_msg_pub.add;
10580 	      p_usec_ret_tbl(I).status := 'A';
10581 	    END IF;
10582 
10583             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10584 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_check_import_allowed',
10585 	      'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10586 	      ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10587 	      p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10588 	      ||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10589 	    END IF;
10590 
10591 	  END IF;
10592 
10593 
10594 	  IF p_usec_ret_tbl(I).status = 'S' THEN
10595 	     validate_db_cons ( p_usec_ret_tbl(I),l_insert_update);
10596 
10597              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10598 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_validate_db_cons',
10599 	       'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10600 	       ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10601 	       p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10602 	       ||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10603 	     END IF;
10604 
10605 	  END IF;
10606 
10607 
10608 	  --Business validations
10609 	  IF p_usec_ret_tbl(I).status = 'S' THEN
10610 	    Business_validation(p_usec_ret_tbl(I),l_insert_update);
10611 
10612             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10613 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.status_after_Business_validation',
10614 	       'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10615 	       ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10616 	       p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10617 	       ||p_usec_ret_tbl(I).definition_level||'  '||'Status:'||p_usec_ret_tbl(I).status);
10618 	     END IF;
10619 
10620 	  END IF;
10621 
10622 	  IF p_usec_ret_tbl(I).status = 'S' THEN
10623 
10624 	    IF l_insert_update = 'I' THEN
10625 	      INSERT INTO IGS_PS_NSUS_RTN(
10626 		non_std_usec_rtn_id,
10627 		uoo_id,
10628 		fee_type,
10629 		definition_code,
10630 		formula_method,
10631 		round_method,
10632 		incl_wkend_duration_flag,
10633                 created_by,
10634 		creation_date,
10635 		last_updated_by,
10636 		last_update_date,
10637 		last_update_login )
10638 	      VALUES (
10639                 igs_ps_nsus_rtn_s.NEXTVAL,
10640 		l_n_uoo_id,
10641 		p_usec_ret_tbl(I).fee_type,
10642 		p_usec_ret_tbl(I).definition_level,
10643 		p_usec_ret_tbl(I).formula_method,
10644 		p_usec_ret_tbl(I).round_method,
10645 		p_usec_ret_tbl(I).incl_wkend_duration_flag,
10646 		g_n_user_id,
10647 		SYSDATE,
10648 		g_n_user_id,
10649 		SYSDATE,
10650 		g_n_login_id);
10651 
10652                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10653 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.Record_Inserted',
10654 		  'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10655 		  ||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10656 		  p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10657 		  ||p_usec_ret_tbl(I).definition_level);
10658 	        END IF;
10659 
10660 
10661 	    ELSE
10662 	      UPDATE IGS_PS_NSUS_RTN SET
10663 		formula_method = p_usec_ret_tbl(I).formula_method,
10664 		round_method = p_usec_ret_tbl(I).round_method,
10665 		incl_wkend_duration_flag = p_usec_ret_tbl(I).incl_wkend_duration_flag,
10666 		last_updated_by        = g_n_user_id ,
10667 		last_update_date       = sysdate ,
10668 		last_update_login      = g_n_login_id
10669 	      WHERE non_std_usec_rtn_id=l_n_non_std_usec_rtn_id;
10670 
10671               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
10672 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.Record_Updated',
10673 		'Unit code:'||p_usec_ret_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
10674 		||p_usec_ret_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_tbl(I).location_cd||'  '||'Unit Class:'||
10675 		p_usec_ret_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_tbl(I).fee_type||'  '||'definition_level:'
10676 		||p_usec_ret_tbl(I).definition_level);
10677 	      END IF;
10678 
10679 	    END IF;
10680 
10681 
10682 	  END IF;
10683 
10684 
10685 	  IF p_usec_ret_tbl(I).status = 'S' THEN
10686 	     p_usec_ret_tbl(I).msg_from := NULL;
10687 	     p_usec_ret_tbl(I).msg_to := NULL;
10688 	  ELSIF  p_usec_ret_tbl(I).status = 'A' THEN
10689 	     p_usec_ret_tbl(I).msg_from  := p_usec_ret_tbl(I).msg_from + 1;
10690 	     p_usec_ret_tbl(I).msg_to := fnd_msg_pub.count_msg;
10691 	  ELSE
10692 	     p_c_rec_status := p_usec_ret_tbl(I).status;
10693 	     p_usec_ret_tbl(I).msg_from := p_usec_ret_tbl(I).msg_from+1;
10694 	     p_usec_ret_tbl(I).msg_to := fnd_msg_pub.count_msg;
10695 	     IF p_usec_ret_tbl(I).status = 'E' THEN
10696 		RETURN;
10697 	     END IF;
10698 	  END IF;
10699 
10700        END IF;
10701     END LOOP;
10702 
10703     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
10704       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret.after_import_status',p_c_rec_status);
10705     END IF;
10706 
10707   END create_usec_ret;
10708 
10709   PROCEDURE create_usec_ret_dtl(p_usec_ret_dtl_tbl IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_tbl_type,
10710 			        p_c_rec_status OUT NOCOPY VARCHAR2,
10711 			        p_calling_context IN VARCHAR2) IS
10712   /***********************************************************************************************
10713 
10714   Created By:         sarakshi
10715   Date Created By:    01-Jun-2005
10716   Purpose:            This procedure imports unit section Retention Deatils.
10717 
10718   Known limitations,enhancements,remarks:
10719   Change History
10720   Who       When         What
10721   ***********************************************************************************************/
10722     l_n_uoo_id      igs_ps_unit_ofr_opt_all.uoo_id%TYPE;
10723     l_n_non_std_usec_rtn_id   NUMBER;
10724     l_d_offset_date           DATE;
10725     l_insert_update VARCHAR2(1);
10726 
10727     PROCEDURE trim_values ( p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type) AS
10728     BEGIN
10729 
10730       p_usec_ret_dtl_rec.unit_cd := TRIM(p_usec_ret_dtl_rec.unit_cd);
10731       p_usec_ret_dtl_rec.version_number := TRIM(p_usec_ret_dtl_rec.version_number);
10732       p_usec_ret_dtl_rec.teach_cal_alternate_code := TRIM(p_usec_ret_dtl_rec.teach_cal_alternate_code);
10733       p_usec_ret_dtl_rec.location_cd := TRIM(p_usec_ret_dtl_rec.location_cd);
10734       p_usec_ret_dtl_rec.unit_class := TRIM(p_usec_ret_dtl_rec.unit_class);
10735       p_usec_ret_dtl_rec.definition_level := TRIM(p_usec_ret_dtl_rec.definition_level);
10736       p_usec_ret_dtl_rec.fee_type := TRIM(p_usec_ret_dtl_rec.fee_type);
10737       p_usec_ret_dtl_rec.offset_value := TRIM(p_usec_ret_dtl_rec.offset_value);
10738       p_usec_ret_dtl_rec.retention_percent := TRIM(p_usec_ret_dtl_rec.retention_percent);
10739       p_usec_ret_dtl_rec.retention_amount := TRIM(p_usec_ret_dtl_rec.retention_amount);
10740       p_usec_ret_dtl_rec.override_date_flag := TRIM(p_usec_ret_dtl_rec.override_date_flag);
10741       p_usec_ret_dtl_rec.offset_date := TRUNC(p_usec_ret_dtl_rec.offset_date);
10742 
10743     END trim_values;
10744 
10745     PROCEDURE validate_parameters( p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type) AS
10746 
10747     BEGIN
10748       p_usec_ret_dtl_rec.status:='S';
10749 
10750 
10751       IF p_usec_ret_dtl_rec.unit_cd IS NULL OR p_usec_ret_dtl_rec.unit_cd = FND_API.G_MISS_CHAR THEN
10752          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CD','LEGACY_TOKENS',FALSE);
10753          p_usec_ret_dtl_rec.status := 'E';
10754       END IF;
10755 
10756       IF p_usec_ret_dtl_rec.version_number IS NULL OR p_usec_ret_dtl_rec.version_number = FND_API.G_MISS_NUM THEN
10757          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_VER_NUM','LEGACY_TOKENS',FALSE);
10758          p_usec_ret_dtl_rec.status := 'E';
10759       END IF;
10760 
10761       IF p_usec_ret_dtl_rec.teach_cal_alternate_code IS NULL OR p_usec_ret_dtl_rec.teach_cal_alternate_code = FND_API.G_MISS_CHAR THEN
10762 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS',FALSE);
10763 	 p_usec_ret_dtl_rec.status := 'E';
10764       END IF;
10765 
10766       IF p_usec_ret_dtl_rec.location_cd IS NULL OR p_usec_ret_dtl_rec.location_cd = FND_API.G_MISS_CHAR THEN
10767 	 igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY', 'LOCATION_CD','LEGACY_TOKENS',FALSE);
10768 	 p_usec_ret_dtl_rec.status := 'E';
10769       END IF;
10770 
10771       IF p_usec_ret_dtl_rec.unit_class IS NULL OR p_usec_ret_dtl_rec.unit_class = FND_API.G_MISS_CHAR THEN
10772         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','UNIT_CLASS','LEGACY_TOKENS',FALSE);
10773 	p_usec_ret_dtl_rec.status := 'E';
10774       END IF;
10775 
10776       IF p_usec_ret_dtl_rec.definition_level IS NULL OR p_usec_ret_dtl_rec.definition_level = FND_API.G_MISS_CHAR THEN
10777         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','DEFINITION_LEVEL','LEGACY_TOKENS',FALSE);
10778 	p_usec_ret_dtl_rec.status := 'E';
10779       END IF;
10780 
10781       IF (p_usec_ret_dtl_rec.fee_type IS NULL OR p_usec_ret_dtl_rec.fee_type = FND_API.G_MISS_CHAR) AND p_usec_ret_dtl_rec.definition_level='UNIT_SECTION_FEE_TYPE' THEN
10782         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','FEE_TYPE','IGS_FI_LOCKBOX',FALSE);
10783 	p_usec_ret_dtl_rec.status := 'E';
10784       END IF;
10785 
10786       IF p_usec_ret_dtl_rec.offset_value IS NULL OR p_usec_ret_dtl_rec.offset_value = FND_API.G_MISS_NUM THEN
10787         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','OFFSET_VALUE','LEGACY_TOKENS',FALSE);
10788 	p_usec_ret_dtl_rec.status := 'E';
10789       END IF;
10790 
10791 
10792       --Offset date is mandatory when override date flag is set to 'Y'
10793       IF (p_usec_ret_dtl_rec.offset_date IS NULL OR p_usec_ret_dtl_rec.offset_date = FND_API.G_MISS_DATE) AND
10794           p_usec_ret_dtl_rec.override_date_flag ='Y'  THEN
10795 	    fnd_message.set_name ( 'IGS', 'IGS_PS_OFFSET_DATE_MANDATORY' );
10796 	    fnd_msg_pub.add;
10797 	    p_usec_ret_dtl_rec.status := 'E';
10798       END IF;
10799 
10800 
10801       IF p_usec_ret_dtl_rec.override_date_flag IS NULL OR p_usec_ret_dtl_rec.override_date_flag = FND_API.G_MISS_CHAR THEN
10802         igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_MANDATORY','OVERRIDE_DATE_FLAG','LEGACY_TOKENS',FALSE);
10803 	p_usec_ret_dtl_rec.status := 'E';
10804       END IF;
10805 
10806       -- valid values of definition_level is 'UNIT_SECTION_FEE_TYPE' , 'UNIT_SECTION'
10807       IF  p_usec_ret_dtl_rec.definition_level NOT IN  ('UNIT_SECTION_FEE_TYPE' , 'UNIT_SECTION') THEN
10808             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','DEFINITION_LEVEL','LEGACY_TOKENS',FALSE);
10809             p_usec_ret_dtl_rec.status :='E';
10810       END IF;
10811 
10812       --Fee type should not be there for definition_level = UNIT_SECTION
10813       IF  p_usec_ret_dtl_rec.definition_level = 'UNIT_SECTION' AND  p_usec_ret_dtl_rec.fee_type IS NOT NULL THEN
10814             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','FEE_TYPE','IGS_FI_LOCKBOX',FALSE);
10815             p_usec_ret_dtl_rec.status :='E';
10816       END IF;
10817 
10818     END validate_parameters;
10819 
10820     PROCEDURE validate_derivation(p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type) AS
10821       l_c_cal_type    VARCHAR2(10);
10822       l_n_seq_num     NUMBER;
10823       l_d_start       igs_ca_inst_all.start_dt%TYPE;
10824       l_d_end         igs_ca_inst_all.end_dt%TYPE;
10825       l_c_ret_status  VARCHAR2(30);
10826 
10827       CURSOR c_ret_usec IS
10828       SELECT non_std_usec_rtn_id,formula_method,round_method,incl_wkend_duration_flag
10829       FROM igs_ps_nsus_rtn
10830       WHERE uoo_id = l_n_uoo_id
10831       AND   definition_code='UNIT_SECTION';
10832 
10833       CURSOR c_ret_usec_fee IS
10834       SELECT non_std_usec_rtn_id,formula_method,round_method,incl_wkend_duration_flag
10835       FROM igs_ps_nsus_rtn
10836       WHERE uoo_id = l_n_uoo_id
10837       AND   fee_type = p_usec_ret_dtl_rec.fee_type;
10838 
10839       l_c_formula_method VARCHAR2(1);
10840       l_c_round_method   VARCHAR2(1);
10841       l_c_incl_wkend_duration_flag VARCHAR2(1);
10842 
10843 
10844     BEGIN
10845 
10846        -- Deriving the Calendar Type and Calendar Sequence Number
10847        igs_ge_gen_003.get_calendar_instance(p_usec_ret_dtl_rec.teach_cal_alternate_code,'''TEACHING''',  l_c_cal_type, l_n_seq_num, l_d_start, l_d_end, l_c_ret_status);
10848        IF l_c_ret_status <> 'SINGLE' THEN
10849 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV', 'TEACH_CAL_ALTERNATE_CD','LEGACY_TOKENS', FALSE);
10850 	   p_usec_ret_dtl_rec.status := 'E';
10851        END IF;
10852 
10853        -- Deriving the Unit Offering Option Identifier
10854        l_c_ret_status := NULL;
10855        igs_ps_validate_lgcy_pkg.get_uoo_id(p_usec_ret_dtl_rec.unit_cd, p_usec_ret_dtl_rec.version_number, l_c_cal_type, l_n_seq_num, p_usec_ret_dtl_rec.location_cd, p_usec_ret_dtl_rec.unit_class, l_n_uoo_id, l_c_ret_status);
10856        IF l_c_ret_status IS NOT NULL THEN
10857 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','UNIT_SECTION','LEGACY_TOKENS', FALSE);
10858 	  p_usec_ret_dtl_rec.status := 'E';
10859        END IF;
10860 
10861        --Derive the Master retention id
10862        IF p_usec_ret_dtl_rec.definition_level='UNIT_SECTION' THEN
10863 	 OPEN c_ret_usec;
10864 	 FETCH c_ret_usec INTO l_n_non_std_usec_rtn_id,l_c_formula_method,l_c_round_method,l_c_incl_wkend_duration_flag;
10865          CLOSE c_ret_usec;
10866        ELSE
10867 	 OPEN c_ret_usec_fee;
10868 	 FETCH c_ret_usec_fee INTO l_n_non_std_usec_rtn_id,l_c_formula_method,l_c_round_method,l_c_incl_wkend_duration_flag;
10869          CLOSE c_ret_usec_fee;
10870        END IF;
10871 
10872        IF l_n_non_std_usec_rtn_id IS NULL THEN
10873 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS','RETENTION','LEGACY_TOKENS', FALSE);
10874 	  p_usec_ret_dtl_rec.status := 'E';
10875        ELSE
10876          --Derive the offset date
10877          IF p_usec_ret_dtl_rec.status = 'S' THEN
10878 	    IF p_usec_ret_dtl_rec.override_date_flag ='Y' THEN
10879               l_d_offset_date := p_usec_ret_dtl_rec.offset_date;
10880 	    ELSE
10881 	      l_d_offset_date := igs_ps_gen_004.f_retention_offset_date(
10882 		  	      p_n_uoo_id              => l_n_uoo_id,
10883                               p_c_formula_method      => l_c_formula_method,
10884 			      p_c_round_method        => l_c_round_method,
10885 			      p_c_incl_wkend_duration => l_c_incl_wkend_duration_flag,
10886 		              p_n_offset_value        => p_usec_ret_dtl_rec.offset_value
10887 			    );
10888             END IF;
10889          END IF;
10890        END IF;
10891 
10892     END validate_derivation;
10893 
10894     PROCEDURE validate_db_cons(p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type,p_insert_update IN VARCHAR2) AS
10895 
10896     BEGIN
10897 
10898       IF p_insert_update = 'I'  THEN
10899 	-- Unique Key Validation
10900 	IF igs_ps_nsus_rtn_dtl_pkg.get_uk_for_validation ( x_non_std_usec_rtn_id   => l_n_non_std_usec_rtn_id,
10901 						           x_offset_value => p_usec_ret_dtl_rec.offset_value ) THEN
10902 	  igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_EXISTS', 'RETENTION', 'LEGACY_TOKENS', FALSE);
10903 	  p_usec_ret_dtl_rec.status := 'W';
10904 	  RETURN;
10905 	END IF;
10906 
10907       END IF;
10908 
10909 
10910       --Check constraint
10911       BEGIN
10912          igs_ps_nsus_rtn_dtl_pkg.check_constraints('OFFSET_VALUE', p_usec_ret_dtl_rec.offset_value);
10913       EXCEPTION
10914          WHEN OTHERS THEN
10915             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','OFFSET_VALUE','LEGACY_TOKENS',TRUE);
10916             p_usec_ret_dtl_rec.status :='E';
10917       END;
10918 
10919       BEGIN
10920          igs_ps_nsus_rtn_dtl_pkg.check_constraints('RETENTION_PERCENT', p_usec_ret_dtl_rec.retention_percent);
10921       EXCEPTION
10922          WHEN OTHERS THEN
10923             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','RETENTION_PERCENT','LEGACY_TOKENS',TRUE);
10924             p_usec_ret_dtl_rec.status :='E';
10925       END;
10926 
10927       BEGIN
10928          igs_ps_nsus_rtn_dtl_pkg.check_constraints('RETENTION_AMOUNT', p_usec_ret_dtl_rec.retention_amount);
10929       EXCEPTION
10930          WHEN OTHERS THEN
10931             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','RETENTION_AMOUNT','LEGACY_TOKENS',TRUE);
10932             p_usec_ret_dtl_rec.status :='E';
10933       END;
10934 
10935       --Format mask check
10936       IF p_usec_ret_dtl_rec.retention_percent IS NOT NULL THEN
10937 	IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_usec_ret_dtl_rec.retention_percent,3,2) THEN
10938 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','RETENTION_PERCENT','LEGACY_TOKENS',FALSE);
10939 	      p_usec_ret_dtl_rec.status :='E';
10940 	END IF;
10941       END IF;
10942 
10943       --Format mask check
10944       IF p_usec_ret_dtl_rec.retention_amount IS NOT NULL THEN
10945 	IF NOT igs_ps_validate_lgcy_pkg.boundary_check_number(p_usec_ret_dtl_rec.retention_amount,6,2) THEN
10946 	      igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','RETENTION_AMOUNT','LEGACY_TOKENS',FALSE);
10947 	      p_usec_ret_dtl_rec.status :='E';
10948 	END IF;
10949       END IF;
10950 
10951       IF p_usec_ret_dtl_rec.override_date_flag NOT IN ('Y','N') THEN
10952             igs_ps_validate_lgcy_pkg.set_msg('IGS_EN_INV','OVERRIDE_DATE_FLAG','LEGACY_TOKENS',FALSE);
10953             p_usec_ret_dtl_rec.status :='E';
10954       END IF;
10955 
10956       -- Foreign Key Checking
10957       --Check for the existence of the unit section
10958       IF NOT igs_ps_unit_ofr_opt_pkg.get_uk_for_validation (l_n_uoo_id ) THEN
10959          igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_LGCY_REC_NOT_EXISTS', 'UNIT_SECTION', 'LEGACY_TOKENS', FALSE);
10960          p_usec_ret_dtl_rec.status := 'E';
10961       END IF;
10962 
10963 
10964 
10965     END validate_db_cons;
10966 
10967     -- Check for Update/Insert
10968     FUNCTION check_insert_update ( p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type) RETURN VARCHAR2 IS
10969 
10970       CURSOR c_ret_det_usec IS
10971       SELECT 'X'
10972       FROM igs_ps_nsus_rtn_dtl
10973       WHERE non_std_usec_rtn_id = l_n_non_std_usec_rtn_id
10974       AND   offset_value = p_usec_ret_dtl_rec.offset_value;
10975 
10976       l_c_var   VARCHAR2(1);
10977 
10978     BEGIN
10979 
10980        OPEN c_ret_det_usec;
10981        FETCH c_ret_det_usec INTO l_c_var;
10982        IF c_ret_det_usec%FOUND THEN
10983 	 CLOSE c_ret_det_usec;
10984 	 RETURN 'U';
10985        ELSE
10986 	 CLOSE c_ret_det_usec;
10987 	 RETURN 'I';
10988        END IF;
10989 
10990     END check_insert_update;
10991 
10992     PROCEDURE Assign_defaults(p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type,p_insert_update IN VARCHAR2) AS
10993       CURSOR cur_ret_det IS
10994       SELECT *
10995       FROM  igs_ps_nsus_rtn_dtl
10996       WHERE non_std_usec_rtn_id = l_n_non_std_usec_rtn_id
10997       AND   offset_value = p_usec_ret_dtl_rec.offset_value;
10998 
10999       l_cur_ret_det cur_ret_det%ROWTYPE;
11000 
11001     BEGIN
11002        IF p_insert_update = 'U' THEN
11003 
11004          OPEN cur_ret_det;
11005          FETCH cur_ret_det into l_cur_ret_det;
11006          CLOSE cur_ret_det;
11007 
11008  	 IF p_usec_ret_dtl_rec.retention_percent IS NULL THEN
11009 	   p_usec_ret_dtl_rec.retention_percent  := l_cur_ret_det.retention_percent;
11010          ELSIF p_usec_ret_dtl_rec.retention_percent = FND_API.G_MISS_NUM THEN
11011 	   p_usec_ret_dtl_rec.retention_percent  := NULL;
11012 	 END IF;
11013 
11014  	 IF p_usec_ret_dtl_rec.retention_amount IS NULL THEN
11015 	   p_usec_ret_dtl_rec.retention_amount  := l_cur_ret_det.retention_amount;
11016          ELSIF p_usec_ret_dtl_rec.retention_amount = FND_API.G_MISS_NUM THEN
11017 	   p_usec_ret_dtl_rec.retention_amount  := NULL;
11018 	 END IF;
11019 
11020        END IF;
11021 
11022     END Assign_defaults;
11023 
11024     PROCEDURE Business_validation(p_usec_ret_dtl_rec IN OUT NOCOPY igs_ps_generic_pub.usec_ret_dtl_rec_type,p_insert_update IN VARCHAR2) AS
11025       CURSOR cur_check_ns_usec(cp_n_uoo_id  IN NUMBER) IS
11026       SELECT 'X'
11027       FROM igs_ps_unit_ofr_opt_all
11028       WHERE uoo_id = cp_n_uoo_id
11029       AND non_std_usec_ind = 'Y';
11030       l_c_var    VARCHAR2(1);
11031 
11032       l_message_name VARCHAR2(30);
11033 
11034       CURSOR cur_check_formula (cp_non_std_usec_rtn_id IN NUMBER) IS
11035       SELECT 'X'
11036       FROM   igs_ps_nsus_rtn nr
11037       WHERE  nr.non_std_usec_rtn_id = cp_non_std_usec_rtn_id
11038       AND    nr.formula_method IN ('P','M')
11039       AND    p_usec_ret_dtl_rec.offset_value > 100;
11040 
11041 
11042     BEGIN
11043       --Check if the unit is INACTIVE, then do not allow to import
11044       IF igs_ps_val_unit.crsp_val_iud_uv_dtl(p_usec_ret_dtl_rec.unit_cd, p_usec_ret_dtl_rec.version_number,l_message_name)=FALSE THEN
11045 	    fnd_message.set_name ( 'IGS', 'IGS_PS_NOCHG_UNITVER_DETAILS' );
11046 	    fnd_msg_pub.add;
11047 	    p_usec_ret_dtl_rec.status := 'E';
11048       END IF;
11049 
11050       --Check if the Unit Section is not Not standard then insert/update is not allowed
11051       OPEN cur_check_ns_usec(l_n_uoo_id);
11052       FETCH cur_check_ns_usec INTO l_c_var;
11053       IF cur_check_ns_usec%NOTFOUND THEN
11054         fnd_message.set_name ( 'IGS', 'IGS_PS_NON_STD_USEC_NOT_IMP' );
11055 	fnd_message.set_token('RECORD',igs_ps_validate_lgcy_pkg.get_lkup_meaning('RETENTION','LEGACY_TOKENS'));
11056         fnd_msg_pub.add;
11057 	/*igs_ps_validate_lgcy_pkg.set_msg('IGS_PS_NON_STD_USEC_NOT_IMP','RETENTION','LEGACY_TOKENS',FALSE);*/
11058 	p_usec_ret_dtl_rec.status := 'E';
11059       END IF;
11060       CLOSE cur_check_ns_usec;
11061 
11062 
11063       --If formula method is 'P'/'M' and  offset is greater than 100 then it is an error condition
11064       OPEN cur_check_formula(l_n_non_std_usec_rtn_id);
11065       FETCH cur_check_formula INTO l_c_var;
11066       IF cur_check_formula%FOUND THEN
11067 	fnd_message.set_name ( 'IGS', 'IGS_PS_RTN_OFFSET_INVALID' );
11068 	fnd_msg_pub.add;
11069 	p_usec_ret_dtl_rec.status := 'E';
11070       END IF;
11071       CLOSE cur_check_formula;
11072 
11073       --Either retention percent or retention amount can be provided not both
11074       IF p_usec_ret_dtl_rec.retention_percent IS NOT NULL AND p_usec_ret_dtl_rec.retention_amount IS NOT NULL THEN
11075 	fnd_message.set_name ( 'IGS', 'IGS_PS_PER_AMT_BOTH_NOT_ALLOW' );
11076 	fnd_msg_pub.add;
11077 	p_usec_ret_dtl_rec.status := 'E';
11078       END IF;
11079 
11080       --Either retention amount or percent are mandatory
11081       IF p_usec_ret_dtl_rec.retention_percent IS NULL  AND p_usec_ret_dtl_rec.retention_amount IS NULL   THEN
11082 	    fnd_message.set_name ( 'IGS', 'IGS_PS_PER_OR_AMT_MANDATORY' );
11083 	    fnd_msg_pub.add;
11084 	    p_usec_ret_dtl_rec.status := 'E';
11085       END IF;
11086 
11087     END Business_validation;
11088 
11089   BEGIN
11090 
11091     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
11092        fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.start_logging_for',
11093                     'Unit Section Retention Details');
11094     END IF;
11095 
11096     p_c_rec_status := 'S';
11097     FOR I in 1..p_usec_ret_dtl_tbl.LAST LOOP
11098        IF p_usec_ret_dtl_tbl.EXISTS(I) THEN
11099 	  -- Initialize the variable use to store the derived values.
11100 	  l_n_uoo_id := NULL;
11101           l_n_non_std_usec_rtn_id :=NULL;
11102           l_d_offset_date :=NULL;
11103 
11104 	  p_usec_ret_dtl_tbl(I).status := 'S';
11105 	  p_usec_ret_dtl_tbl(I).msg_from := fnd_msg_pub.count_msg;
11106 	  trim_values(p_usec_ret_dtl_tbl(I));
11107 	  validate_parameters(p_usec_ret_dtl_tbl(I));
11108 
11109           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11110 	    fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_validate_parameters',
11111 	    'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11112 	    ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11113 	    p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11114 	    ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11115 	    ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11116           END IF;
11117 
11118 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11119 	     validate_derivation(p_usec_ret_dtl_tbl(I));
11120 
11121              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11122 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_validate_derivation',
11123 		'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11124 		||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11125 		p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11126 		||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11127 		||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11128              END IF;
11129 
11130 	  END IF;
11131 
11132 	  --Find out whether it is insert/update of record
11133 	  l_insert_update:='I';
11134 	  IF p_usec_ret_dtl_tbl(I).status = 'S' AND p_calling_context IN ('G','S') THEN
11135 	    l_insert_update:= check_insert_update(p_usec_ret_dtl_tbl(I));
11136 
11137             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11138 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_check_insert_update',
11139 	      'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11140 	      ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11141 	      p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11142 	      ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11143 	      ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11144             END IF;
11145 
11146 	  END IF;
11147 
11148 	  IF p_usec_ret_dtl_tbl(I).status = 'S' AND p_calling_context = 'S' THEN
11149 	    IF igs_ps_validate_lgcy_pkg.check_import_allowed( l_n_uoo_id,NULL) = FALSE THEN
11150 	      fnd_message.set_name ( 'IGS', 'IGS_PS_REC_ABORTED_CANCELLED' );
11151 	      fnd_msg_pub.add;
11152 	      p_usec_ret_dtl_tbl(I).status := 'A';
11153 	    END IF;
11154 
11155             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11156 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_check_import_allowed',
11157 	      'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11158 	      ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11159 	      p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11160 	      ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11161 	      ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11162             END IF;
11163 
11164 	  END IF;
11165 
11166 	  --Defaulting depending upon insert or update
11167 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11168 	    assign_defaults(p_usec_ret_dtl_tbl(I),l_insert_update);
11169 
11170             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11171 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_assign_defaults',
11172 	      'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11173 	      ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11174 	      p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11175 	      ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11176 	      ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11177             END IF;
11178 
11179 	  END IF;
11180 
11181 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11182 	     validate_db_cons ( p_usec_ret_dtl_tbl(I),l_insert_update);
11183 
11184              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11185 	       fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_validate_db_cons',
11186 	       'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11187 	       ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11188 	       p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11189 	       ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11190 	       ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11191              END IF;
11192 
11193 	  END IF;
11194 
11195 
11196 	  --Business validations
11197 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11198 	    Business_validation(p_usec_ret_dtl_tbl(I),l_insert_update);
11199 
11200             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11201 	      fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.status_after_Business_validation',
11202 	      'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11203 	      ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11204 	      p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11205 	      ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value
11206 	      ||'  '||'Status:'||p_usec_ret_dtl_tbl(I).status);
11207             END IF;
11208 
11209 	  END IF;
11210 
11211 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11212 
11213 	    IF l_insert_update = 'I' THEN
11214 	      INSERT INTO IGS_PS_NSUS_RTN_DTL(
11215 		non_std_usec_rtn_dtl_id,
11216 		non_std_usec_rtn_id,
11217 		offset_value,
11218 		retention_percent,
11219 		retention_amount,
11220 		offset_date,
11221 		override_date_flag,
11222                 created_by,
11223 		creation_date,
11224 		last_updated_by,
11225 		last_update_date,
11226 		last_update_login )
11227 	      VALUES (
11228                 igs_ps_nsus_rtn_dtl_s.NEXTVAL,
11229 		l_n_non_std_usec_rtn_id,
11230 		p_usec_ret_dtl_tbl(I).offset_value,
11231 		p_usec_ret_dtl_tbl(I).retention_percent,
11232 		p_usec_ret_dtl_tbl(I).retention_amount,
11233 		l_d_offset_date,
11234 		p_usec_ret_dtl_tbl(I).override_date_flag,
11235 		g_n_user_id,
11236 		SYSDATE,
11237 		g_n_user_id,
11238 		SYSDATE,
11239 		g_n_login_id);
11240 
11241 		IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11242 		  fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.Record_Inserted',
11243 		  'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11244 		  ||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11245 		  p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11246 		  ||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value);
11247 		END IF;
11248 
11249 	    ELSE
11250 	      UPDATE IGS_PS_NSUS_RTN_DTL SET
11251 		retention_percent      = p_usec_ret_dtl_tbl(I).retention_percent,
11252 		retention_amount       = p_usec_ret_dtl_tbl(I).retention_amount,
11253 		offset_date            = l_d_offset_date,
11254 		override_date_flag     = p_usec_ret_dtl_tbl(I).override_date_flag,
11255 		last_updated_by        = g_n_user_id ,
11256 		last_update_date       = sysdate ,
11257 		last_update_login      = g_n_login_id
11258 	      WHERE non_std_usec_rtn_id = l_n_non_std_usec_rtn_id AND offset_value = p_usec_ret_dtl_tbl(I).offset_value ;
11259 
11260               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
11261 		fnd_log.string( fnd_log.level_statement, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.Record_updated',
11262 		'Unit code:'||p_usec_ret_dtl_tbl(I).unit_cd||'  '||'Version number:'||p_usec_ret_dtl_tbl(I).version_number||'  '||'teach_cal_alternate_code:'
11263 		||p_usec_ret_dtl_tbl(I).teach_cal_alternate_code||'  '||'Location_cd:'||p_usec_ret_dtl_tbl(I).location_cd||'  '||'Unit Class:'||
11264 		p_usec_ret_dtl_tbl(I).unit_class||'  '||'Fee type:'||p_usec_ret_dtl_tbl(I).fee_type||'  '||'definition_level:'
11265 		||p_usec_ret_dtl_tbl(I).definition_level||'  '||'Offset Value:'||p_usec_ret_dtl_tbl(I).offset_value);
11266 	      END IF;
11267 
11268 	    END IF;
11269 
11270 
11271 	  END IF;
11272 
11273 
11274 	  IF p_usec_ret_dtl_tbl(I).status = 'S' THEN
11275 	     p_usec_ret_dtl_tbl(I).msg_from := NULL;
11276 	     p_usec_ret_dtl_tbl(I).msg_to := NULL;
11277 	  ELSIF  p_usec_ret_dtl_tbl(I).status = 'A' THEN
11278 	     p_usec_ret_dtl_tbl(I).msg_from  := p_usec_ret_dtl_tbl(I).msg_from + 1;
11279 	     p_usec_ret_dtl_tbl(I).msg_to := fnd_msg_pub.count_msg;
11280 	  ELSE
11281 	     p_c_rec_status := p_usec_ret_dtl_tbl(I).status;
11282 	     p_usec_ret_dtl_tbl(I).msg_from := p_usec_ret_dtl_tbl(I).msg_from+1;
11283 	     p_usec_ret_dtl_tbl(I).msg_to := fnd_msg_pub.count_msg;
11284 	     IF p_usec_ret_dtl_tbl(I).status = 'E' THEN
11285 		RETURN;
11286 	     END IF;
11287 	  END IF;
11288 
11289        END IF;
11290     END LOOP;
11291 
11292     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
11293       fnd_log.string( fnd_log.level_procedure, 'igs.plsql.igs_ps_create_generic_pkg.create_usec_ret_dtl.after_import_status',p_c_rec_status);
11294     END IF;
11295 
11296   END create_usec_ret_dtl;
11297 
11298 
11299 END igs_ps_create_generic_pkg;