DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_STDNT_PS_ATT_PKG

Source


1 PACKAGE BODY Igs_En_Stdnt_Ps_Att_Pkg AS
2 /* $Header: IGSEI24B.pls 120.11 2006/06/29 09:58:09 shimitta ship $ */
3     l_rowid VARCHAR2(25);
4   old_references IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE;
5   new_references IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE;
6 
7   TYPE g_prim_prg_record_type IS RECORD(career igs_ps_ver.course_type%TYPE,program_cd igs_ps_ver.course_cd%TYPE);
8   TYPE g_prim_prg_rec_table_type IS TABLE OF g_prim_prg_record_type INDEX BY BINARY_INTEGER;
9   g_primary_prg_rec g_prim_prg_rec_table_type;
10   g_old_key_prg igs_ps_ver.course_cd%TYPE;
11   g_primary_prg_rec_count NUMBER;
12   g_sec_to_prim_first BOOLEAN;
13 
14   PROCEDURE beforerowdelete;
15   PROCEDURE AfterRowInsertUpdate5(
16       p_inserting IN BOOLEAN,
17       p_updating IN BOOLEAN,
18       p_deleting IN BOOLEAN
19       ) ;
20   PROCEDURE enrp_ins_upd_term_rec(P_ACTION IN VARCHAR2);
21 
22   PROCEDURE Set_Column_Values (
23     p_action IN VARCHAR2,
24     x_rowid IN VARCHAR2,
25     x_org_id IN NUMBER,
26     x_person_id IN NUMBER,
27     x_course_cd IN VARCHAR2,
28     x_version_number IN NUMBER,
29     x_cal_type IN VARCHAR2,
30     x_location_cd IN VARCHAR2,
31     x_attendance_mode IN VARCHAR2,
32     x_attendance_type IN VARCHAR2,
33     x_coo_id IN NUMBER,
34     x_student_confirmed_ind IN VARCHAR2,
35     x_commencement_dt IN DATE,
36     x_course_attempt_status IN VARCHAR2,
37     x_progression_status IN VARCHAR2,
38     x_derived_att_type IN VARCHAR2,
39     x_derived_att_mode IN VARCHAR2,
40     x_provisional_ind IN VARCHAR2,
41     x_discontinued_dt IN DATE,
42     x_discontinuation_reason_cd IN VARCHAR2,
43     x_lapsed_dt IN DATE,
44     x_funding_source IN VARCHAR2,
45     x_exam_location_cd IN VARCHAR2,
46     x_derived_completion_yr IN NUMBER,
47     x_derived_completion_perd IN VARCHAR2,
48     x_nominated_completion_yr IN NUMBER,
49     x_nominated_completion_perd IN VARCHAR2,
50     x_rule_check_ind IN VARCHAR2,
51     x_waive_option_check_ind IN VARCHAR2,
52     x_last_rule_check_dt IN DATE,
53     x_publish_outcomes_ind IN VARCHAR2,
54     x_course_rqrmnt_complete_ind IN VARCHAR2,
55     x_course_rqrmnts_complete_dt IN DATE,
56     x_s_completed_source_type IN VARCHAR2,
57     x_override_time_limitation IN NUMBER,
58     x_advanced_standing_ind IN VARCHAR2,
59     x_fee_cat IN VARCHAR2,
60     x_correspondence_cat IN VARCHAR2,
61     x_self_help_group_ind IN VARCHAR2,
62     x_logical_delete_dt IN DATE,
63     x_adm_admission_appl_number IN NUMBER,
64     x_adm_nominated_course_cd IN VARCHAR2,
65     x_adm_sequence_number IN NUMBER,
66     x_creation_date IN DATE,
67     x_created_by IN NUMBER,
68     x_last_update_date IN DATE,
69     x_last_updated_by IN NUMBER,
70     x_last_update_login IN NUMBER,
71     x_last_date_of_attendance IN DATE,
72     x_dropped_by    IN VARCHAR2,
73     x_igs_pr_class_std_id IN NUMBER,
74     x_primary_program_type IN VARCHAR2,
75     x_primary_prog_type_source IN VARCHAR2,
76     x_catalog_cal_type IN VARCHAR2,
77     x_catalog_seq_num  IN NUMBER  ,
78     x_key_program      IN VARCHAR2,
79     x_manual_ovr_cmpl_dt_ind IN VARCHAR2,
80     x_override_cmpl_dt       IN DATE    ,
81     x_attribute_category IN VARCHAR2,
82     x_attribute1 IN VARCHAR2,
83     x_attribute2 IN VARCHAR2,
84     x_attribute3 IN VARCHAR2,
85     x_attribute4 IN VARCHAR2,
86     x_attribute5 IN VARCHAR2,
87     x_attribute6 IN VARCHAR2,
88     x_attribute7 IN VARCHAR2,
89     x_attribute8 IN VARCHAR2,
90     x_attribute9 IN VARCHAR2,
91     x_attribute10 IN VARCHAR2,
92     x_attribute11 IN VARCHAR2,
93     x_attribute12 IN VARCHAR2,
94     x_attribute13 IN VARCHAR2,
95     x_attribute14 IN VARCHAR2,
96     x_attribute15 IN VARCHAR2,
97     x_attribute16 IN VARCHAR2,
98     x_attribute17 IN VARCHAR2,
99     x_attribute18 IN VARCHAR2,
100     x_attribute19 IN VARCHAR2,
101     x_attribute20 IN VARCHAR2,
102     x_future_dated_trans_flag In VARCHAR2
103   ) AS
104     CURSOR cur_old_ref_values IS
105       SELECT   *
106       FROM     IGS_EN_STDNT_PS_ATT_ALL
107       WHERE    ROWID = x_rowid;
108   BEGIN
109 
110     l_rowid := x_rowid;
111     -- Code for setting the Old and New Reference Values.
112     -- Populate Old Values.
113     OPEN cur_old_ref_values;
114     FETCH cur_old_ref_values INTO old_references;
115     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
116       CLOSE cur_old_ref_values;
117       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
118       IGS_GE_MSG_STACK.ADD;
119       App_Exception.Raise_Exception;
120       RETURN;
121     END IF;
122     CLOSE cur_old_ref_values;
123 
124     /**********************************************************************************************/
125     old_references.commencement_dt            := TRUNC(old_references.commencement_dt);
126     old_references.discontinued_dt            := TRUNC(old_references.discontinued_dt);
127     old_references.lapsed_dt                  := TRUNC(old_references.lapsed_dt);
128     old_references.last_rule_check_dt         := TRUNC(old_references.last_rule_check_dt);
129     old_references.course_rqrmnts_complete_dt := TRUNC(old_references.course_rqrmnts_complete_dt);
130     old_references.logical_delete_dt          := TRUNC(old_references.logical_delete_dt);
131     old_references.override_cmpl_dt           := TRUNC(old_references.override_cmpl_dt);
132     old_references.last_date_of_attendance    := TRUNC(old_references.last_date_of_attendance);
133     /************************************************************************************************/
134 
135     -- Populate New Values.
136     -- Populate New Values.
137         -- When the update row of the TBH is called the org_id column is not passed as parameter
138         -- and the before_dml procedure accpets the parameter as default hence it comes into this
139         -- procedure as null. The new_references.org_id is passed to the
140         -- igs_pe_typ_instances_pkg.insert_row call ( which null and not correct)
141         -- Hence modified the condition to pick up the old_references.org_id value if the
142         -- action was update and the x_org_id parameter value is null
143         -- amuthu
144         IF p_action = 'UPDATE' AND x_org_id IS NULL THEN
145           new_references.org_id := old_references.org_id;
146         ELSE
147          new_references.org_id := x_org_id;
148         END IF;
149         new_references.person_id := x_person_id;
150     new_references.course_cd := x_course_cd;
151     new_references.version_number := x_version_number;
152     new_references.cal_type := x_cal_type;
153     new_references.location_cd := x_location_cd;
154     new_references.attendance_mode := x_attendance_mode;
155     new_references.attendance_type := x_attendance_type;
156     new_references.coo_id := x_coo_id;
157     new_references.student_confirmed_ind := x_student_confirmed_ind;
158     new_references.commencement_dt := TRUNC(x_commencement_dt);
159     new_references.course_attempt_status := x_course_attempt_status;
160     new_references.progression_status := x_progression_status;
161     new_references.derived_att_type := x_derived_att_type;
162     new_references.derived_att_mode := x_derived_att_mode;
163     new_references.provisional_ind := x_provisional_ind;
164     new_references.discontinued_dt := TRUNC(x_discontinued_dt);
165     new_references.discontinuation_reason_cd := x_discontinuation_reason_cd;
166     new_references.lapsed_dt := TRUNC(x_lapsed_dt);
167     new_references.funding_source := x_funding_source;
168     new_references.exam_location_cd := x_exam_location_cd;
169     new_references.derived_completion_yr := x_derived_completion_yr;
170     new_references.derived_completion_perd := x_derived_completion_perd;
171     new_references.nominated_completion_yr := x_nominated_completion_yr;
172     new_references.nominated_completion_perd := x_nominated_completion_perd;
173     new_references.rule_check_ind := x_rule_check_ind;
174     new_references.waive_option_check_ind := x_waive_option_check_ind;
175     new_references.last_rule_check_dt := TRUNC(x_last_rule_check_dt);
176     new_references.publish_outcomes_ind := x_publish_outcomes_ind;
177     new_references.course_rqrmnt_complete_ind := x_course_rqrmnt_complete_ind;
178     new_references.course_rqrmnts_complete_dt := TRUNC(x_course_rqrmnts_complete_dt);
179     new_references.s_completed_source_type := x_s_completed_source_type;
180     new_references.override_time_limitation := x_override_time_limitation;
181     new_references.advanced_standing_ind := x_advanced_standing_ind;
182     new_references.fee_cat := x_fee_cat;
183     new_references.correspondence_cat := x_correspondence_cat;
184     new_references.self_help_group_ind := x_self_help_group_ind;
185     new_references.logical_delete_dt := TRUNC(x_logical_delete_dt);
186     new_references.adm_admission_appl_number := x_adm_admission_appl_number;
187     new_references.adm_nominated_course_cd := x_adm_nominated_course_cd;
188     new_references.adm_sequence_number := x_adm_sequence_number;
189     new_references.attribute_category := x_attribute_category;
190     new_references.future_dated_trans_flag := x_future_dated_trans_flag;
191     new_references.attribute1 := x_attribute1;
192     new_references.attribute2 := x_attribute2;
193     new_references.attribute3 := x_attribute3;
194     new_references.attribute4 := x_attribute4;
195     new_references.attribute5 := x_attribute5;
196     new_references.attribute6 := x_attribute6;
197     new_references.attribute7 := x_attribute7;
198     new_references.attribute8 := x_attribute8;
199     new_references.attribute9 := x_attribute9;
200     new_references.attribute10 := x_attribute10;
201     new_references.attribute11 := x_attribute11;
202     new_references.attribute12 := x_attribute12;
203     new_references.attribute13 := x_attribute13;
204     new_references.attribute14 := x_attribute14;
205     new_references.attribute15 := x_attribute15;
206     new_references.attribute16 := x_attribute16;
207     new_references.attribute17 := x_attribute17;
208     new_references.attribute18 := x_attribute18;
209     new_references.attribute19 := x_attribute19;
210     new_references.attribute20 := x_attribute20;
211     IF (p_action = 'UPDATE') THEN
212       new_references.creation_date := old_references.creation_date;
213       new_references.created_by := old_references.created_by;
214     ELSE
215       new_references.creation_date := x_creation_date;
216       new_references.created_by := x_created_by;
217     END IF;
218     new_references.last_update_date := x_last_update_date;
219     new_references.last_updated_by := x_last_updated_by;
220     new_references.last_update_login := x_last_update_login;
221     new_references.last_date_of_attendance:=TRUNC(x_last_date_of_attendance);
222     new_references.dropped_by:=x_dropped_by;
223     new_references.IGS_PR_CLASS_STD_ID := X_IGS_PR_CLASS_STD_ID;
224 
225     --added by amuthu for career impact dld
226     -- smaddali modified the logic for populating primary_program_type and source for bug#4240694
227     -- In program mode these two fields should be populated with NULL
228     IF FND_PROFILE.VALUE('CAREER_MODEL_ENABLED') = 'Y' THEN
229         new_references.primary_program_type := X_PRIMARY_PROGRAM_TYPE;
230         new_references.primary_prog_type_source := X_PRIMARY_PROG_TYPE_SOURCE;
231     ELSE
232         new_references.primary_program_type := NULL;
233         new_references.primary_prog_type_source := NULL;
234     END IF;
235 
236     new_references.catalog_cal_type := X_CATALOG_CAL_TYPE;
237     new_references.catalog_seq_num := X_CATALOG_SEQ_NUM;
238     new_references.key_program := NVL(X_KEY_PROGRAM,'N');
239     -- added by ayedubat for ENCR015 DLD
240     new_references.manual_ovr_cmpl_dt_ind := X_MANUAL_OVR_CMPL_DT_IND;
241     new_references.override_cmpl_dt := TRUNC(X_OVERRIDE_CMPL_DT);
242 
243   END Set_Column_Values;
244 
245 
246   -- Created By : jbegum
247   -- Created for : Enhancement Bug #1832130
248   -- This procedure gets the last date of attendance
249   -- Last date of attendance is date till which student has active unit attempts associated with that program attempt
250 
251   PROCEDURE Get_Last_Dt_Of_Att (
252     x_person_id IN NUMBER,
253     x_course_cd IN VARCHAR2,
254     x_last_date_of_attendance OUT NOCOPY DATE
255     ) AS
256 
257     CURSOR cur_unit_atmpt_dis IS
258       SELECT   cal_type,ci_sequence_number,discontinued_dt
259       FROM     IGS_EN_SU_ATTEMPT
260       WHERE    person_id = x_person_id
261       AND      course_cd = x_course_cd
262       AND      discontinued_dt IS NOT NULL
263       ORDER BY discontinued_dt DESC;
264 
265     CURSOR cur_term_cal(p_cal_type VARCHAR2,p_ci_sequence_number NUMBER, p_discontinued_dt DATE) IS
266       SELECT   *
267       FROM     IGS_CA_TEACH_TO_LOAD_V
268       WHERE    teach_cal_type = p_cal_type
269       AND      teach_ci_sequence_number = p_ci_sequence_number
270       AND      load_start_dt <= TRUNC(p_discontinued_dt)
271       ORDER BY load_start_dt DESC;
272 
273     CURSOR cur_unit_atmpt_grd IS
274       SELECT   cal_type,ci_sequence_number
275       FROM     IGS_EN_SU_ATTEMPT
276       WHERE    person_id = x_person_id
277       AND      course_cd = x_course_cd
278       AND      unit_attempt_status='COMPLETED';
279 
280 
281     CURSOR cur_term_cal_grd(p_cal_type VARCHAR2,p_ci_sequence_number NUMBER) IS
282       SELECT   *
283       FROM     IGS_CA_TEACH_TO_LOAD_V
284       WHERE    teach_cal_type = p_cal_type
285       AND      teach_ci_sequence_number = p_ci_sequence_number
286       ORDER BY load_end_dt DESC;
287 
288     lv_cal_type IGS_CA_TEACH_TO_LOAD_V.teach_cal_type%TYPE;
289     lv_ci_sequence_number IGS_CA_TEACH_TO_LOAD_V.teach_ci_sequence_number%TYPE;
290     lv_discontinued_dt IGS_EN_SU_ATTEMPT.discontinued_dt%TYPE;
291 
292     cur_unit_atmpt_dis_rec cur_unit_atmpt_dis%ROWTYPE;
293     cur_term_cal_rec cur_term_cal%ROWTYPE;
294     cur_unit_atmpt_grd_rec cur_unit_atmpt_grd%ROWTYPE;
295     cur_term_cal_grd_rec cur_term_cal_grd%ROWTYPE;
296 
297   BEGIN
298 
299     OPEN cur_unit_atmpt_dis;
300     FETCH cur_unit_atmpt_dis INTO cur_unit_atmpt_dis_rec;
301 
302     IF cur_unit_atmpt_dis%FOUND THEN
303 
304          lv_cal_type := cur_unit_atmpt_dis_rec.cal_type;
305          lv_ci_sequence_number := cur_unit_atmpt_dis_rec.ci_sequence_number;
306          lv_discontinued_dt := cur_unit_atmpt_dis_rec.discontinued_dt;
307          CLOSE cur_unit_atmpt_dis;
308 
309 
310          OPEN cur_term_cal(lv_cal_type,lv_ci_sequence_number,lv_discontinued_dt);
311          FETCH cur_term_cal INTO cur_term_cal_rec;
312          IF (cur_term_cal%FOUND) THEN
313 
314              x_last_date_of_attendance := lv_discontinued_dt;
315              CLOSE cur_term_cal;
316          ELSE
317              CLOSE cur_term_cal;
318              lv_discontinued_dt := NULL;
319 
320              FOR cur_unit_atmpt_grd_rec IN cur_unit_atmpt_grd
321              LOOP
322 
323                   OPEN cur_term_cal_grd(cur_unit_atmpt_grd_rec.cal_type,cur_unit_atmpt_grd_rec.ci_sequence_number);
324                   FETCH cur_term_cal_grd INTO cur_term_cal_grd_rec;
325 
326                   IF (cur_term_cal_grd%FOUND) THEN
327 
328                         IF lv_discontinued_dt IS NULL THEN
329                              lv_discontinued_dt := cur_term_cal_grd_rec.load_end_dt;
330                         ELSIF lv_discontinued_dt < cur_term_cal_grd_rec.load_end_dt THEN
331                              lv_discontinued_dt := cur_term_cal_grd_rec.load_end_dt;
332                         END IF;
333                   END IF;
334                   CLOSE cur_term_cal_grd;
335               END LOOP;
336 
337               x_last_date_of_attendance := lv_discontinued_dt;
338          END IF;
339 
340     ELSE
341 
342         CLOSE cur_unit_atmpt_dis;
343         lv_discontinued_dt := NULL;
344 
345         FOR cur_unit_atmpt_grd_rec IN cur_unit_atmpt_grd
346         LOOP
347 
348            OPEN cur_term_cal_grd(cur_unit_atmpt_grd_rec.cal_type,cur_unit_atmpt_grd_rec.ci_sequence_number);
349            FETCH cur_term_cal_grd INTO cur_term_cal_grd_rec;
350 
351            IF (cur_term_cal_grd%FOUND) THEN
352 
353               IF lv_discontinued_dt IS NULL THEN
354                  lv_discontinued_dt := cur_term_cal_grd_rec.load_end_dt;
355               ELSIF lv_discontinued_dt < cur_term_cal_grd_rec.load_end_dt THEN
356                  lv_discontinued_dt := cur_term_cal_grd_rec.load_end_dt;
357               END IF;
358 
359               CLOSE cur_term_cal_grd;
360 
361            END IF;
362 
363          END LOOP;
364 
365          x_last_date_of_attendance := lv_discontinued_dt;
366 
367 
368     END IF;
369 
370   END Get_Last_Dt_Of_Att;
371 
372   -- Created By : jbegum
373   -- Created for : Enhancement Bug #1832130
374   -- This procedure gets the dropped by value
375   -- Dropped by is the person type of the person who discontinued the last enrolled unit attempt associated with that program attempt
376 
377   PROCEDURE Get_Dropped_By (
378   x_course_cd IN VARCHAR2,
379   x_dropped_by OUT NOCOPY VARCHAR2
380   ) AS
381 
382   CURSOR cur_per_type IS
383 
384       SELECT   person_type_code
385       FROM     IGS_PE_PERSON_TYPES_V
386       WHERE    system_type = 'STAFF';
387 
388   BEGIN
389 
390     x_dropped_by := igs_en_gen_008.enrp_get_person_type(x_course_cd);
391 
392     IF x_dropped_by IS NULL THEN
393        OPEN cur_per_type;
394        FETCH cur_per_type INTO x_dropped_by;
395        CLOSE cur_per_type;
396     END IF;
397 
398   END Get_Dropped_By;
399 
400   -- Trigger description :-
401   -- "OSS_TST".trg_sca_br_iu
402   -- BEFORE INSERT OR UPDATE
403   -- ON IGS_EN_STDNT_PS_ATT
404   -- FOR EACH ROW
405 
406   PROCEDURE BeforeRowInsertUpdate1(
407     p_inserting IN BOOLEAN,
408     p_updating IN BOOLEAN,
409     p_deleting IN BOOLEAN
410     ) AS
411         v_message_name                VARCHAR2(30);
412         v_course_attempt_status   IGS_EN_STDNT_PS_ATT_ALL.course_attempt_status%TYPE;
413         l_last_date_of_attendance IGS_EN_STDNT_PS_ATT_ALL.last_date_of_attendance%TYPE;
414         l_dropped_by              IGS_EN_STDNT_PS_ATT_ALL.dropped_by%TYPE;
415         v_course_type             IGS_PS_TYPE.COURSE_TYPE%TYPE;
416 
417     CURSOR c_course_type IS
418           SELECT crv.course_type
419           FROM igs_ps_ver crv
420           WHERE course_cd = new_references.course_cd
421           and version_number = new_references.version_number;
422 
423   BEGIN
424 
425         -- If trigger has not been disabled, perform required processing
426         IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_EN_STDNT_PS_ATT_ALL') THEN
427                 -- Set course_offering_option key.
428                 IF p_inserting THEN
429                         IGS_PS_GEN_003.CRSP_GET_COO_KEY (
430                                 new_references.coo_id,
431                                 new_references.course_cd,
432                                 new_references.version_number,
433                                 new_references.cal_type,
434                                 new_references.location_cd,
435                                 new_references.attendance_mode,
436                                 new_references.attendance_type);
437                 END IF;
438                 IF p_updating AND
439                   ( (old_references.lapsed_dt IS NOT NULL AND
440                       new_references.lapsed_dt IS NULL) OR
441                     (old_references.lapsed_dt IS NULL AND
442                      new_references.lapsed_dt IS NOT NULL) OR
443                     (old_references.lapsed_dt <> new_references.lapsed_dt)) THEN
444                         -- Validate the lapsed date against the course attempt status and the
445                         -- permitted dates.
446 
447                         IF Igs_En_Val_Sca.enrp_val_sca_lapse(
448                                         new_references.course_attempt_status,
449                                         new_references.lapsed_dt,
450                                         v_message_name,
451                                         'N') = FALSE THEN
452                                 fnd_message.set_name('IGS',v_message_name);
453                                 IGS_GE_MSG_STACK.ADD;
454                                 app_exception.raise_exception;
455                         END IF;
456 
457                 END IF;
458                 IF p_updating THEN
459                         IF  (old_references.attendance_type <> new_references.attendance_type) AND
460                              (old_references.student_confirmed_ind = new_references.student_confirmed_ind)
461                         THEN
462                                 -- Save the rowid so that candidature attendance history can be inserted
463                                 -- for change of attendance type
464                                 IF IGS_EN_GEN_009.ENRP_INS_SCA_CAH(
465                                 OLD_references.person_id,
466                                 OLD_references.course_cd,
467                                 OLD_references.student_confirmed_ind,
468                                 OLD_references.commencement_dt,
469                                 OLD_references.attendance_type,
470                                 v_message_name) = FALSE THEN
471                                 fnd_message.set_name('IGS',v_message_name);
472                                 IGS_GE_MSG_STACK.ADD;
473                                 app_exception.raise_exception;
474                         END IF;
475                 END IF;
476 
477         END IF;
478                 IF p_inserting OR p_updating THEN
479                                                 -- Validate confirming an admission course transfer
480                         IF p_inserting OR
481                           (p_updating AND
482                            new_references.student_confirmed_ind <> old_references.student_confirmed_ind) THEN
483                                 IF Igs_En_Val_Sca.enrp_val_trnsfr_acpt(
484                                         neW_references.person_id,
485                                         new_references.course_cd,
486                                         new_references.student_confirmed_ind,
487                                         new_references.adm_admission_appl_number,
488                                         new_references.adm_nominated_course_cd,
489                                         NULL,
490                                         v_message_name) = FALSE THEN
491                                 fnd_message.set_name('IGS',v_message_name);
492                                 IGS_GE_MSG_STACK.ADD;
493                                 app_exception.raise_exception;
494                                 END IF;
495                         END IF;
496                         -- Validate discontinuation details
497                         IF p_inserting OR
498                            (p_updating AND
499                            ((new_references.discontinued_dt IS NULL AND
500                               old_references.discontinued_dt IS NOT NULL) OR
501                             (new_references.discontinued_dt IS NOT NULL AND
502                              old_references.discontinued_dt IS NULL) OR
503                             (new_references.discontinued_dt IS NOT NULL AND
504                              old_references.discontinued_dt <>new_references.discontinued_dt))) THEN
505                                 IF Igs_En_Val_Sca.enrp_val_sca_discont(
506                                         new_references.person_id,
507                                         new_references.course_cd,
508                                         new_references.version_number,
509                                         new_references.course_attempt_status,
510                                         new_references.discontinuation_reason_cd,
511                                         new_references.discontinued_dt,
512                                         new_references.commencement_dt,
513                                         v_message_name,
514                                         'N') = FALSE THEN
515                                 fnd_message.set_name('IGS',v_message_name);
516                                 IGS_GE_MSG_STACK.ADD;
517                                 app_exception.raise_exception;
518                                 END IF;
519                         END IF;
520                         -- Validate discontinuation reason code
521                         IF p_inserting OR
522                            (p_updating AND
523                            ((new_references.discontinuation_reason_cd  IS NULL AND
524                               old_references.discontinuation_reason_cd  IS NOT NULL) OR
525                             (new_references.discontinuation_reason_cd  IS NOT NULL AND
526                              old_references.discontinuation_reason_cd  IS NULL) OR
527                             (new_references.discontinuation_reason_cd  IS NOT NULL AND
528                              old_references.discontinuation_reason_cd <> new_references.discontinuation_reason_cd))) THEN
529                                 IF Igs_En_Val_Sca.enrp_val_sca_dr(
530                                         new_references.person_id,
531                                         new_references.course_cd,
532                                         new_references.discontinuation_reason_cd,
533                                         new_references.discontinued_dt,
534                                         v_message_name,
535                                         'N') = FALSE THEN
536                                 fnd_message.set_name('IGS',v_message_name);
537                                 IGS_GE_MSG_STACK.ADD;
538                                 app_exception.raise_exception;
539                                 END IF;
540                         END IF;
541                         -- Validate completing the course
542                         IF p_inserting OR
543                           (p_updating AND
544                            new_references.course_rqrmnt_complete_ind <> old_references.course_rqrmnt_complete_ind) THEN
545                               IF new_references.course_rqrmnt_complete_ind = 'Y' THEN
546                                 -- Validate that SCA Status is not 'COMPLETED' or 'UNCONFIRM'.
547                                 IF new_references.course_attempt_status IN ('COMPLETED','UNCONFIRM') THEN
548                                         Fnd_Message.set_name('IGS','IGS_PR_CANNOT_SET_COMPL_IND');
549                                         IGS_GE_MSG_STACK.ADD;
550                                         App_Exception.Raise_exception;
551                                 END IF;
552                                 -- Validate that no unit sets are incomplete or un-ended.
553                                 IF IGS_PR_VAL_SCA.prgp_val_susa_cmplt (
554                                         new_references.person_id,
555                                         new_references.course_cd,
556                                         v_message_name) = FALSE THEN
557                                 fnd_message.set_name('IGS',v_message_name);
558                                 IGS_GE_MSG_STACK.ADD;
559                                 app_exception.raise_exception;
560                                 END IF;
561 
562 
563                                 -- Validate that status is not DISCONTIN, INTERMIT or LAPSED.  If so, the
564                                 -- course requirements complete indicator cannot be set.
565                                 IF new_references.course_attempt_status = 'DISCONTIN' THEN
566                                         Fnd_Message.set_name('IGS','IGS_PR_DISCON_DT_BE_LIFTED');
567                                         IGS_GE_MSG_STACK.ADD;
568                                         App_Exception.Raise_exception;
569                                 ELSIF new_references.course_attempt_status = 'LAPSED' THEN
570                                         Fnd_Message.set_name('IGS','IGS_PR_LAPSED_DT_BE_LIFTED');
571                                         IGS_GE_MSG_STACK.ADD;
572                                         App_Exception.Raise_exception;
573                                 ELSIF new_references.course_attempt_status = 'INTERMIT' THEN
574                                         Fnd_Message.set_name('IGS','IGS_PR_INTERMISSION_BE_LIFTED');
575                                         IGS_GE_MSG_STACK.ADD;
576                                         App_Exception.Raise_exception;
577                                 END IF;
578                               ELSE
579                                 -- Check that associated IGS_GR_GRADUAND record does not have a status
580                                 -- of 'GRADUATED' or 'SURRENDER'.
581                                 IF IGS_PR_VAL_SCA.prgp_val_undo_cmpltn (
582                                         new_references.person_id,
583                                         new_references.course_cd,
584                                         new_references.version_number,
585                                         NULL,
586                                         NULL,
587                                         v_message_name) = FALSE THEN
588                                 fnd_message.set_name('IGS',v_message_name);
589                                 IGS_GE_MSG_STACK.ADD;
590                                 app_exception.raise_exception;
591                                 END IF;
592                             END IF;
593                         END IF;
594                         -- Validate the IGS_EN_STDNT_PS_ATT_ALL.course_rqrmnts_complete_dt
595                         IF p_inserting OR
596                           (p_updating AND
597                            ((new_references.course_rqrmnts_complete_dt  IS NULL AND
598                               old_references.course_rqrmnts_complete_dt  IS NOT NULL) OR
599                             (new_references.course_rqrmnts_complete_dt  IS NOT NULL AND
600                              old_references.course_rqrmnts_complete_dt  IS NULL) OR
601                             (new_references.course_rqrmnts_complete_dt  IS NOT NULL AND
602                            new_references.course_rqrmnts_complete_dt <> old_references.course_rqrmnts_complete_dt))) THEN
603                                 IF IGS_PR_VAL_SCA.prgp_val_sca_cmpl_dt (
604                                                 new_references.person_id,
605                                                 new_references.course_cd,
606                                                 new_references.commencement_dt,
607                                                 new_references.course_rqrmnts_complete_dt,
608                                                 v_message_name,
609                                                 'N') = FALSE THEN
610                                 fnd_message.set_name('IGS',v_message_name);
611                                 IGS_GE_MSG_STACK.ADD;
612                                 app_exception.raise_exception;
613                                 END IF;
614                         END IF;
615                         -- Validate fee category is open
616                         IF p_inserting OR
617                           (p_updating AND
618                            new_references.fee_cat <> old_references.fee_cat) THEN
619                                 IF Igs_ad_Val_fcm.finp_val_fc_closed(
620                                         new_references.fee_cat,
621                                         v_message_name) = FALSE THEN
622                                 fnd_message.set_name('IGS',v_message_name);
623                                 IGS_GE_MSG_STACK.ADD;
624                                 app_exception.raise_exception;
625                                 END IF;
626                         END IF;
627                         -- Set course attempt status
628                         IF new_references.course_attempt_status IS NULL THEN
629                                 v_course_attempt_status  := 'UNKNOWN';
630                         ELSE
631                                 v_course_attempt_status := new_references.course_attempt_status;
632                         END IF;
633 
634                       IF (NOT IGS_EN_STDNT_PS_ATT_PKG.skip_before_after_dml)    THEN
635                         IF NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N') = 'N'
636                             OR new_references.primary_program_type = 'PRIMARY' THEN
637                              new_references.course_attempt_status :=
638                                        IGS_EN_GEN_006.ENRP_GET_SCA_STATUS(
639                                         new_references.person_id,
640                                         new_references.course_cd,
641                                         v_course_attempt_status,
642                                         new_references.student_confirmed_ind,
643                                         new_references.discontinued_dt,
644                                         new_references.lapsed_dt,
645                                         new_references.course_rqrmnt_complete_ind,
646                                         new_references.logical_delete_dt);
647                         ELSIF new_references.course_attempt_status IN ('INACTIVE','ENROLLED','LAPSED','INTERMIT') THEN
648                                OPEN c_course_type;
649                                FETCH c_course_type INTO v_course_type;
650                                CLOSE c_course_type;
651                                                new_references.course_attempt_status :=
652                                                 igs_en_career_model.enrp_get_sec_sca_status( new_references.person_id ,
653                                                                     new_references.course_cd ,
654                                                                     new_references.course_attempt_status,
655                                                                     new_references.primary_program_type ,
656                                                                     new_references.primary_prog_type_source,
657                                                                         v_course_type ,
658                                                                         NULL);
659                                IF new_references.course_attempt_status IS NULL THEN
660                                       new_references.course_attempt_status :=
661                                         IGS_EN_GEN_006.ENRP_GET_SCA_STATUS(
662                                           new_references.person_id,
663                                           new_references.course_cd,
664                                           v_course_attempt_status,
665                                           new_references.student_confirmed_ind,
666                                           new_references.discontinued_dt,
667                                           new_references.lapsed_dt,
668                                           new_references.course_rqrmnt_complete_ind,
669                                           new_references.logical_delete_dt);
670                                            END IF;
671                            ELSE
672                                                    new_references.course_attempt_status :=
673                                         IGS_EN_GEN_006.ENRP_GET_SCA_STATUS(
674                                           new_references.person_id,
675                                           new_references.course_cd,
676                                           v_course_attempt_status,
677                                           new_references.student_confirmed_ind,
678                                           new_references.discontinued_dt,
679                                           new_references.lapsed_dt,
680                                           new_references.course_rqrmnt_complete_ind,
681                                           new_references.logical_delete_dt);
682 
683                 END IF;
684                END IF;
685 
686                 END IF;
687         END IF;
688 
689         -- Created By : jbegum
690         -- Created for : Enhancement Bug #1832130
691         -- When the program attempt status changes from ENROLLED to INACTIVE , INTERMIT , LAPSED , DISCONTIN
692         -- Compute values for fields Last_date_of_attendance and dropped_by before updating the record in the
693         -- table IGS_EN_STDNT_PS_ATT_ALL
694 
695         IF p_updating AND old_references.course_attempt_status= 'ENROLLED'
696                       AND new_references.course_attempt_status IN ('INACTIVE','INTERMIT','LAPSED','DISCONTIN') THEN
697 
698            Get_Last_Dt_Of_Att (new_references.person_id,new_references.course_cd,l_last_date_of_attendance);
699            Get_Dropped_By (new_references.course_cd,l_dropped_by);
700 
701            new_references.last_date_of_attendance := l_last_date_of_attendance;
702            new_references.dropped_by := l_dropped_by;
703 
704 
705         END IF;
706 
707         --sanity check to ensure that the course_attempt_status is never null.
708 
709         IF p_inserting OR p_updating THEN
710            IF new_references.course_attempt_status IS NULL THEN
711                                       new_references.course_attempt_status :=
712                                         IGS_EN_GEN_006.ENRP_GET_SCA_STATUS(
713                                           new_references.person_id,
714                                           new_references.course_cd,
715                                           v_course_attempt_status,
716                                           new_references.student_confirmed_ind,
717                                           new_references.discontinued_dt,
718                                           new_references.lapsed_dt,
719                                           new_references.course_rqrmnt_complete_ind,
720                                           new_references.logical_delete_dt);
721             END IF;
722          END IF;
723   END BeforeRowInsertUpdate1;
724   -- Trigger description :-
725   -- "OSS_TST".trg_sca_br_iud_fin
726   -- BEFORE INSERT OR DELETE OR UPDATE
727   -- ON IGS_EN_STDNT_PS_ATT
728   -- FOR EACH ROW
729   PROCEDURE BeforeRowInsertUpdateDelete2(
730     p_inserting IN BOOLEAN,
731     p_updating IN BOOLEAN,
732     p_deleting IN BOOLEAN
733     ) AS
734         v_sequence_number       NUMBER;
735   BEGIN
736         -- Log an entry in the IGS_PE_STD_TODO table, indicating that a fee re-assessment
737         -- is required.
738         IF p_inserting OR p_updating THEN
739                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
740                                         new_references.person_id,
741                                         'FEE_RECALC',
742                                         SYSDATE,
743                                         'Y');
744         ELSE
745                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
746                                         old_references.person_id,
747                                         'FEE_RECALC',
748                                         SYSDATE,
749                                         'Y');
750         END IF;
751 
752         IF p_updating THEN
753            IF new_references.student_confirmed_ind = 'Y'
754              AND old_references.future_dated_trans_flag = 'C'
755              AND new_references.future_dated_trans_flag NOT IN ('Y','S' )THEN
756                         new_references.future_dated_trans_flag := 'N';
757            END IF;
758         END IF;
759 
760   END BeforeRowInsertUpdateDelete2;
761 
762   -- Trigger description :-
763   -- "OSS_TST".trg_sca_ar_iu
764   -- AFTER INSERT OR UPDATE
765   -- ON IGS_EN_STDNT_PS_ATT
766   -- FOR EACH ROW
767   PROCEDURE AfterRowInsertUpdate3(
768     p_inserting IN BOOLEAN,
769     p_updating IN BOOLEAN,
770     p_deleting IN BOOLEAN
771     ) AS
772         v_message_name          VARCHAR2(30);
773         v_save_row              BOOLEAN := FALSE;
774         r_sca                   IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE;
775   BEGIN
776         -- mutating table validations / end of processing activities
777         -- If trigger has not been disabled, perform required processing
778         IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_EN_STDNT_PS_ATT_ALL') THEN
779                 IF(p_updating AND
780                     old_references.student_confirmed_ind = 'N' AND
781                     new_references.student_confirmed_ind = 'Y') OR
782                    (p_inserting AND
783                     new_references.student_confirmed_ind = 'Y') THEN
784                         -- update of application response status on confirming the offer
785                         v_save_row := TRUE;
786                         r_sca.student_confirmed_ind := old_references.student_confirmed_ind;
787                 END IF;
788                 -- validate fee category
789                 IF p_inserting OR
790                         (p_updating AND
791                         new_references.fee_cat <> old_references.fee_cat) THEN
792                         v_save_row := TRUE;
793                         r_sca.fee_cat := old_references.fee_cat;
794             END IF;
795               IF v_save_row = TRUE THEN
796                         r_sca.person_id := new_references.person_id;
797                         r_sca.course_cd := new_references.course_cd;
798 
799                 -- a validation to check whether the fee category which is being updated is used for any fee assessment.
800                 -- in case assessment record exists for this program attempt then the fee categoryu could not be changed
801                 -- removed call to procedure Igs_En_Val_Sca.enrp_val_sca_fc.
802                 -- this validation has been removed as a requirement for the fee calc build (bug# 1851586)
803 
804 
805                 -- Update the offer response status/date
806                 IF(p_updating AND
807                     old_references.student_confirmed_ind = 'N' AND
808                     new_references.student_confirmed_ind = 'Y') OR
809                    (p_inserting AND
810                     new_references.student_confirmed_ind = 'Y') THEN
811                         IF Igs_En_Gen_011.ENRP_UPD_ACAI_ACCEPT(
812                                         new_references.person_id,
813                                         new_references.course_cd,
814                                         new_references.adm_admission_appl_number,
815                                         new_references.adm_nominated_course_cd,
816                                         new_references.adm_sequence_number,
817                                         v_message_name) = FALSE THEN
818                                 fnd_message.set_name('IGS',v_message_name);
819                                 IGS_GE_MSG_STACK.ADD;
820                                 app_exception.raise_exception;
821                        END IF;
822                 END IF;
823               END IF;
824           END IF;
825 
826   END AfterRowInsertUpdate3;
827 
828    PROCEDURE AfterRowInsertUpdate5(
829       p_inserting IN BOOLEAN,
830       p_updating IN BOOLEAN,
831       p_deleting IN BOOLEAN
832       ) AS
833 
834     BEGIN
835 
836     -- Bug # 2829275 . UK Correspondence. The TBH needs to be modified to so that the program discontinuation event is raised when the program attempt is changed .
837 
838 
839      IF ( p_updating
840          AND ((new_references.location_cd <> old_references.location_cd)
841            OR (new_references.attendance_mode <> old_references.attendance_mode)
842            OR (new_references.attendance_type <> old_references.attendance_type)
843            OR (new_references.cal_type <> old_references.cal_type))) THEN
844 
845 
846                igs_en_workflow.progofropt_event (
847                                 p_personid          => new_references.person_id,
848                                 p_programcd         => new_references.course_cd,
849                                 p_locationcd        => new_references.location_cd,
850                                 p_prev_location_cd  => old_references.location_cd,
851                                 p_attndmode         => new_references.attendance_mode,
852                                 p_prev_attndmode    => old_references.attendance_mode,
853                                 p_attndtype         => new_references.attendance_type,
854                                 p_prev_attndtype    => old_references.attendance_type
855 
856                             ) ;
857 
858      END IF;
859 
860      IF (( (new_references.location_cd <> old_references.location_cd)
861       OR (new_references.attendance_mode <> old_references.attendance_mode)
862       OR (new_references.attendance_type <> old_references.attendance_type))
863       AND (new_references.key_program = old_references.key_program)
864       AND (new_references.key_program = 'Y' ) ) THEN
865         igf_aw_coa_gen.ins_coa_todo(p_person_id => new_references.person_id ,
866                                      p_calling_module => 'IGSEI24B',
867                                      p_program_code => new_references.course_cd,
868                                      p_version_number=>new_references.version_number) ;
869      END IF;
870 
871     END AfterRowInsertUpdate5;
872 
873    -- This has been added for bug# 1516605
874    -- Changing the Person Type Based on The Program Attempt Status
875 
876 
877    PROCEDURE AfterRowInsertUpdate4(
878     p_inserting IN BOOLEAN,
879     p_updating IN BOOLEAN,
880     p_deleting IN BOOLEAN
881     ) AS
882    /*  HISTORY
883     -- who              when                  what
884     --ayedubat         09-JUL-2002     Added a new cursor,cur_pe_typ_inst to consider the active person type records
885     --                                 of a student program which are mapped to a closed system type.
886     --                                 Check whenther the cursor is fetching a record whenever a person type record of a particular
887     --                                 system type should be end dated and if found, call the TBH to end date the record for the bug:2389552
888     --ayedubat        2nd MAY 2002     Added the code for p_inseting = TRUE as part of the bug fix:2344079
889     --                                 This will change the Person_Type from Applicant to Student during the pre_enrollment process
890     --                                 through admissions subsystem.
891     --shimitta          29 JUNE 2006 Modified l_method acording as bug# 2691653
892    */
893    --modified cursor for perf bug 3696781
894       CURSOR cur_typ_id_inst(p_PERSON_ID NUMBER,p_COURSE_CD VARCHAR2,p_PERSON_TYPE_CODE VARCHAR2) IS
895         SELECT pti.*
896         FROM igs_pe_typ_instances_all  pti
897         WHERE pti.PERSON_ID = p_PERSON_ID AND
898               pti.COURSE_CD = p_COURSE_CD AND
899               pti.PERSON_TYPE_CODE = p_PERSON_TYPE_CODE AND
900               pti.END_DATE IS NULL;
901 
902       CURSOR cur_pers_type(p_system_type varchar2) IS
903         SELECT PERSON_TYPE_CODE
904         FROM igs_pe_person_types
905         WHERE SYSTEM_TYPE = p_system_type AND
906               CLOSED_IND = 'N';
907 
908       -- Cursor used to fetch the Person Type Instance record which is being opened
909       -- irrespective of the system person type is closed or not.
910       -- Cursor is being created for the bug fix: 2389552
911       CURSOR cur_pe_typ_inst( p_person_id   igs_pe_typ_instances.PERSON_ID%TYPE,
912                               p_course_cd   igs_pe_typ_instances.course_cd%TYPE,
913                               p_system_type igs_pe_person_types.SYSTEM_TYPE%TYPE) IS
914         SELECT pti.rowid row_id ,pti.*
915         FROM  igs_pe_typ_instances_all pti,
916               igs_pe_person_types  pty
917         WHERE pti.person_id = p_person_id AND
918               pti.course_cd = p_course_cd AND
919               pti.end_date IS NULL        AND
920               pty.person_type_code = pti.person_type_code AND
921               pty.system_type = p_system_type;
922 
923        CURSOR cur_find_interm(cp_perosn_id igs_pe_person.person_id%TYPE,
924                                cp_course_cd igs_ps_ver.course_cd%TYPE) IS
925             SELECT  sci.person_id,sci.course_cd,start_dt, sci.end_dt, sci.voluntary_ind,sci.comments ,sci.created_by ,sci.creation_date ,
926                    sci.last_updated_by ,sci.last_update_date , sci.last_update_login , sci.intermission_type , sci.approved ,sci.institution_name,
927                    sci.max_credit_pts, sci.max_terms, sci.anticipated_credit_points, sci.approver_id
928             FROM  igs_en_stdnt_ps_intm sci,
929                   igs_en_intm_types eit
930             WHERE sci.course_cd = cp_course_cd
931             AND   sci.person_id = cp_perosn_id
932             AND   sci.approved  = eit.appr_reqd_ind
933             AND   eit.intermission_type = sci.intermission_type
934             AND   sci.logical_delete_date = TO_DATE ('31-12-4712','DD-MM-YYYY');
935 
936 
937 
938       CURSOR cur_re_canditure(cp_person_id igs_pe_person.person_id%TYPE,
939                               cp_course_cd igs_ps_ver.course_cd%TYPE) IS
940             SELECT  1
941             FROM  igs_re_candidature
942             WHERE sca_course_cd = cp_course_cd
943             AND   person_id = cp_person_id ;
944 
945 
946 
947       cur_pe_typ_inst_rec cur_pe_typ_inst%ROWTYPE;
948 
949             v_message_name              VARCHAR2(30);
950         v_save_row              BOOLEAN := FALSE;
951         r_sca                   IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE;
952         l_method         igs_pe_typ_instances.CREATE_METHOD%TYPE;
953         l_person_type igs_pe_person_types.PERSON_TYPE_CODE%TYPE;
954       l_rowid  VARCHAR2(25);
955       l_TYPE_INSTANCE_ID  igs_pe_typ_instances.TYPE_INSTANCE_ID%TYPE;
956       cur_typ_id_inst_rec cur_typ_id_inst%ROWTYPE;
957       l_cur_find_interm cur_find_interm%ROWTYPE;
958       ln_cur_re_canditure NUMBER;
959 
960     BEGIN
961 
962       IF p_inserting THEN
963 
964         IF new_references.course_attempt_status = 'INACTIVE' THEN
965 
966            l_person_type := NULL;
967            -- Select Person type Code for the System type FORMER_STUDENT
968            OPEN cur_pers_type('APPLICANT');
969            FETCH cur_pers_type INTO l_person_type;
970            CLOSE cur_pers_type;
971            IF l_person_type IS NULL THEN
972               Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
973               IGS_GE_MSG_STACK.ADD;
974               App_Exception.Raise_Exception;
975            END IF;
976 
977            l_method := 'PERSON_ENROL_UNIT_SECT';
978 
979            -- Check any active record found for this student program, with System Person Type,APPLICANT
980            -- This should be considered the active applicants(i.e not end dated) whose system person type is closed
981            OPEN cur_pe_typ_inst( new_references.person_id,
982                                  new_references.course_cd,
983                                  'APPLICANT' );
984            FETCH cur_pe_typ_inst INTO cur_pe_typ_inst_rec;
985            IF cur_pe_typ_inst%FOUND THEN
986 
987               igs_pe_typ_instances_pkg.update_row(
988                 X_ROWID                 => cur_pe_typ_inst_rec.ROW_ID,
989                 X_PERSON_ID             => cur_pe_typ_inst_rec.PERSON_ID,
990                 X_COURSE_CD             => cur_pe_typ_inst_rec.COURSE_CD,
991                 X_TYPE_INSTANCE_ID      => cur_pe_typ_inst_rec.TYPE_INSTANCE_ID,
992                 X_PERSON_TYPE_CODE      => cur_pe_typ_inst_rec.PERSON_TYPE_CODE,
993                 X_CC_VERSION_NUMBER     => cur_pe_typ_inst_rec.CC_VERSION_NUMBER,
994                 X_FUNNEL_STATUS         => cur_pe_typ_inst_rec.FUNNEL_STATUS,
995                 X_ADMISSION_APPL_NUMBER => cur_pe_typ_inst_rec.ADMISSION_APPL_NUMBER,
996                 X_NOMINATED_COURSE_CD   => cur_pe_typ_inst_rec.NOMINATED_COURSE_CD,
997                 X_NCC_VERSION_NUMBER    => cur_pe_typ_inst_rec.NCC_VERSION_NUMBER,
998                 X_SEQUENCE_NUMBER       => cur_pe_typ_inst_rec.SEQUENCE_NUMBER,
999                 X_START_DATE            => cur_pe_typ_inst_rec.START_DATE,
1000                 X_END_DATE              => SYSDATE,
1001                 X_CREATE_METHOD         => cur_pe_typ_inst_rec.CREATE_METHOD,
1002                 X_ENDED_BY              => cur_pe_typ_inst_rec.ENDED_BY,
1003                 X_END_METHOD            => l_method,
1004                 X_MODE                  => 'R' ,
1005                 X_EMPLMNT_CATEGORY_CODE => cur_pe_typ_inst_rec.emplmnt_category_code );
1006 
1007            END IF;
1008            CLOSE cur_pe_typ_inst;
1009 
1010            l_person_type := NULL;
1011            -- Select Person type Code for the System type STUDENT
1012            OPEN cur_pers_type('STUDENT');
1013            FETCH cur_pers_type INTO l_person_type;
1014            CLOSE cur_pers_type;
1015            IF l_person_type IS NULL THEN
1016               Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
1017               IGS_GE_MSG_STACK.ADD;
1018               App_Exception.Raise_Exception;
1019            END IF;
1020 
1021            OPEN cur_typ_id_inst(new_references.PERSON_ID,new_references.COURSE_CD,l_person_type);
1022            FETCH cur_typ_id_inst INTO cur_typ_id_inst_rec;
1023            IF cur_typ_id_inst%NOTFOUND THEN
1024               igs_pe_typ_instances_pkg.insert_row(
1025                 X_ROWID  => l_ROWID,
1026                 X_PERSON_ID => new_references.PERSON_ID,
1027                 X_COURSE_CD => new_references.COURSE_CD,
1028                 X_TYPE_INSTANCE_ID => l_TYPE_INSTANCE_ID,
1029                 X_PERSON_TYPE_CODE => l_person_type,
1030                 X_CC_VERSION_NUMBER => NULL,
1031                 X_FUNNEL_STATUS => NULL,
1032                 X_ADMISSION_APPL_NUMBER => NULL,
1033                 X_NOMINATED_COURSE_CD => NULL,
1034                 X_NCC_VERSION_NUMBER => NULL,
1035                 X_SEQUENCE_NUMBER => NULL,
1036                 X_START_DATE => SYSDATE,
1037                 X_END_DATE => NULL,
1038                 X_CREATE_METHOD => l_method,
1039                 X_ENDED_BY => NULL,
1040                 X_END_METHOD => NULL,
1041                 X_MODE => 'R',
1042                 X_ORG_ID => new_references.ORG_ID                ,
1043                 X_EMPLMNT_CATEGORY_CODE => NULL
1044                         );
1045            END IF;
1046            CLOSE cur_typ_id_inst;
1047 
1048         END IF;
1049 
1050 
1051       ELSIF p_updating THEN
1052 
1053         IF new_references.course_attempt_status IN ('ENROLLED','INACTIVE') AND
1054            new_references.course_attempt_status <> old_references.course_attempt_status THEN
1055 
1056              l_person_type := NULL;
1057 
1058              -- Select Person type Code for the System type FORMER_STUDENT
1059              OPEN cur_pers_type('FORMER_STUDENT');
1060              FETCH cur_pers_type INTO l_person_type;
1061              CLOSE cur_pers_type;
1062              IF l_person_type IS NULL THEN
1063                 Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
1064                 IGS_GE_MSG_STACK.ADD;
1065                 App_Exception.Raise_Exception;
1066              END IF;
1067 
1068              l_method := 'PERSON_ENROL_UNIT_SECT';
1069 
1070            -- Check any active record found for this student program, with System Person Type,FORMER_STUDENT
1071            -- This should be considered the active former students (i.e not end dated) whose system person type is closed
1072            OPEN cur_pe_typ_inst( new_references.person_id,
1073                                  new_references.COURSE_CD,
1074                                  'FORMER_STUDENT');
1075 
1076            FETCH cur_pe_typ_inst INTO cur_pe_typ_inst_rec;
1077 
1078            IF cur_pe_typ_inst%FOUND THEN
1079 
1080              l_method := 'PERSON_ENROLL_PRG';
1081 
1082              igs_pe_typ_instances_pkg.update_row(
1083                 X_ROWID                 => cur_pe_typ_inst_rec.ROW_ID,
1084                 X_PERSON_ID             => cur_pe_typ_inst_rec.PERSON_ID,
1085                 X_COURSE_CD             => cur_pe_typ_inst_rec.COURSE_CD,
1086                 X_TYPE_INSTANCE_ID      => cur_pe_typ_inst_rec.TYPE_INSTANCE_ID,
1087                 X_PERSON_TYPE_CODE      => cur_pe_typ_inst_rec.PERSON_TYPE_CODE,
1088                 X_CC_VERSION_NUMBER     => cur_pe_typ_inst_rec.CC_VERSION_NUMBER,
1089                 X_FUNNEL_STATUS         => cur_pe_typ_inst_rec.FUNNEL_STATUS,
1090                 X_ADMISSION_APPL_NUMBER => cur_pe_typ_inst_rec.ADMISSION_APPL_NUMBER,
1091                 X_NOMINATED_COURSE_CD   => cur_pe_typ_inst_rec.NOMINATED_COURSE_CD,
1092                 X_NCC_VERSION_NUMBER    => cur_pe_typ_inst_rec.NCC_VERSION_NUMBER,
1093                 X_SEQUENCE_NUMBER       => cur_pe_typ_inst_rec.SEQUENCE_NUMBER,
1094                 X_START_DATE            => cur_pe_typ_inst_rec.START_DATE,
1095                 X_END_DATE              => SYSDATE,
1096                 X_CREATE_METHOD         => cur_pe_typ_inst_rec.CREATE_METHOD,
1097                 X_ENDED_BY              => cur_pe_typ_inst_rec.ENDED_BY,
1098                 X_END_METHOD            => l_method,
1099                 X_MODE                  => 'R' ,
1100                 X_EMPLMNT_CATEGORY_CODE => cur_pe_typ_inst_rec.emplmnt_category_code);
1101            END IF;
1102            CLOSE cur_pe_typ_inst;
1103 
1104            l_person_type := NULL;
1105            -- Select Person type Code for the System type STUDENT
1106            OPEN cur_pers_type('STUDENT');
1107            FETCH cur_pers_type INTO l_person_type;
1108            CLOSE cur_pers_type;
1109            IF l_person_type IS NULL THEN
1110                 Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
1111                 IGS_GE_MSG_STACK.ADD;
1112                 App_Exception.Raise_Exception;
1113              END IF;
1114 
1115              OPEN cur_typ_id_inst(new_references.PERSON_ID,new_references.COURSE_CD,l_person_type);
1116              FETCH cur_typ_id_inst INTO cur_typ_id_inst_rec;
1117              IF cur_typ_id_inst%NOTFOUND THEN
1118                  igs_pe_typ_instances_pkg.insert_row(
1119                                                 X_ROWID  => l_ROWID,
1120                                                 X_PERSON_ID => new_references.PERSON_ID,
1121                                                 X_COURSE_CD => new_references.COURSE_CD,
1122                                                 X_TYPE_INSTANCE_ID => l_TYPE_INSTANCE_ID,
1123                                                 X_PERSON_TYPE_CODE => l_person_type,
1124                                                 X_CC_VERSION_NUMBER => NULL,
1125                                                 X_FUNNEL_STATUS => NULL,
1126                                                 X_ADMISSION_APPL_NUMBER => NULL,
1127                                                 X_NOMINATED_COURSE_CD => NULL,
1128                                                 X_NCC_VERSION_NUMBER => NULL,
1129                                                 X_SEQUENCE_NUMBER => NULL,
1130                                                 X_START_DATE => SYSDATE,
1131                                                 X_END_DATE => NULL,
1132                                                 X_CREATE_METHOD => l_method,
1133                                                 X_ENDED_BY => NULL,
1134                                                 X_END_METHOD => NULL,
1135                                                 X_MODE => 'R',
1136                                                 X_ORG_ID => new_references.ORG_ID,
1137                                                 X_EMPLMNT_CATEGORY_CODE => NULL
1138                                                 );
1139            END IF;
1140            CLOSE cur_typ_id_inst;
1141 
1142         ELSIF old_references.course_attempt_status IN ('ENROLLED','INACTIVE') AND
1143               new_references.course_attempt_status IN ('LAPSED','COMPLETED','DISCONTIN') THEN
1144                 IF new_references.course_attempt_status = 'LAPSED' THEN
1145                    l_method := 'PRG_ATTMPT_ST_LAPSED';
1146                 ELSIF new_references.course_attempt_status = 'DISCONTIN' THEN
1147                    l_method := 'PERSON_DISCONTINUE_PRG';
1148 --                ElsIf new_references.course_attempt_status = 'COMPLETED' Then
1149 --                   l_method := '';
1150                 END IF;
1151 
1152              l_person_type := NULL;
1153              -- Select Person type Code for the System type STUDENT
1154              OPEN cur_pers_type('STUDENT');
1155              FETCH cur_pers_type INTO l_person_type;
1156              CLOSE cur_pers_type;
1157              IF l_person_type IS NULL THEN
1158                 Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
1159                 IGS_GE_MSG_STACK.ADD;
1160                 App_Exception.Raise_Exception;
1161                    END IF;
1162 
1163              -- Check any active record found for this student program, with System Person Type,STUDENT
1164              -- This should be considered the active students (i.e not end dated) whose system person type is closed
1165              OPEN cur_pe_typ_inst( new_references.person_id,
1166                                    new_references.COURSE_CD,
1167                                    'STUDENT' );
1168              FETCH cur_pe_typ_inst INTO cur_pe_typ_inst_rec;
1169              IF cur_pe_typ_inst%FOUND THEN
1170 
1171                l_method := 'PERSON_NO_ENROLL_PRG';
1172 
1173                igs_pe_typ_instances_pkg.update_row(
1174                   X_ROWID                 => cur_pe_typ_inst_rec.ROW_ID,
1175                   X_PERSON_ID             => cur_pe_typ_inst_rec.PERSON_ID,
1176                   X_COURSE_CD             => cur_pe_typ_inst_rec.COURSE_CD,
1177                   X_TYPE_INSTANCE_ID      => cur_pe_typ_inst_rec.TYPE_INSTANCE_ID,
1178                   X_PERSON_TYPE_CODE      => cur_pe_typ_inst_rec.PERSON_TYPE_CODE,
1179                   X_CC_VERSION_NUMBER     => cur_pe_typ_inst_rec.CC_VERSION_NUMBER,
1180                   X_FUNNEL_STATUS         => cur_pe_typ_inst_rec.FUNNEL_STATUS,
1181                   X_ADMISSION_APPL_NUMBER => cur_pe_typ_inst_rec.ADMISSION_APPL_NUMBER,
1182                   X_NOMINATED_COURSE_CD   => cur_pe_typ_inst_rec.NOMINATED_COURSE_CD,
1183                   X_NCC_VERSION_NUMBER    => cur_pe_typ_inst_rec.NCC_VERSION_NUMBER,
1184                   X_SEQUENCE_NUMBER       => cur_pe_typ_inst_rec.SEQUENCE_NUMBER,
1185                   X_START_DATE            => cur_pe_typ_inst_rec.START_DATE,
1186                   X_END_DATE              => SYSDATE,
1187                   X_CREATE_METHOD         => cur_pe_typ_inst_rec.CREATE_METHOD,
1188                   X_ENDED_BY              => cur_pe_typ_inst_rec.ENDED_BY,
1189                   X_END_METHOD            => l_method,
1190                   X_MODE                  => 'R' ,
1191                   X_EMPLMNT_CATEGORY_CODE => cur_pe_typ_inst_rec.emplmnt_category_code);
1192              END IF;
1193              CLOSE cur_pe_typ_inst;
1194 
1195              l_person_type := NULL;
1196              -- Select Person type Code for the System type FORMER_STUDENT
1197              OPEN cur_pers_type('FORMER_STUDENT');
1198              FETCH cur_pers_type INTO l_person_type;
1199              CLOSE cur_pers_type;
1200              IF l_person_type IS NULL THEN
1201                 Fnd_Message.Set_Name ('IGS', 'IGS_EN_PERSON_TYPE_NOT_DEF');
1202                 IGS_GE_MSG_STACK.ADD;
1203                 App_Exception.Raise_Exception;
1204              END IF;
1205 
1206              OPEN cur_typ_id_inst(new_references.PERSON_ID,new_references.COURSE_CD,l_person_type);
1207              FETCH cur_typ_id_inst INTO cur_typ_id_inst_rec;
1208              IF cur_typ_id_inst%NOTFOUND THEN
1209                 igs_pe_typ_instances_pkg.insert_row(
1210                                                 X_ROWID  => l_ROWID,
1211                                                 X_PERSON_ID => new_references.PERSON_ID,
1212                                                 X_COURSE_CD => new_references.COURSE_CD,
1213                                                 X_TYPE_INSTANCE_ID => l_TYPE_INSTANCE_ID,
1214                                                 X_PERSON_TYPE_CODE => l_person_type,
1215                                                 X_CC_VERSION_NUMBER => NULL,
1216                                                 X_FUNNEL_STATUS => NULL,
1217                                                 X_ADMISSION_APPL_NUMBER => NULL,
1218                                                 X_NOMINATED_COURSE_CD => NULL,
1219                                                 X_NCC_VERSION_NUMBER => NULL,
1220                                                 X_SEQUENCE_NUMBER => NULL,
1221                                                 X_START_DATE => SYSDATE,
1222                                                 X_END_DATE => NULL,
1223                                                 X_CREATE_METHOD => l_method,
1224                                                 X_ENDED_BY => NULL,
1225                                                 X_END_METHOD => NULL,
1226                                                 X_MODE => 'R',
1227                                                 X_ORG_ID => new_references.ORG_ID,
1228                                                 X_EMPLMNT_CATEGORY_CODE => NULL
1229                                                 );
1230              END IF;
1231              CLOSE cur_typ_id_inst;
1232         END IF;
1233 
1234    -- Bug # 2829275 . UK Correspondence. The business event is raised when the program is DISCONTINUED.
1235 
1236           IF ( new_references.course_attempt_status <> old_references.course_attempt_status AND  new_references.course_attempt_status = 'DISCONTIN') THEN
1237 
1238            igs_en_workflow.progdiscont_event(
1239                                 p_personid      => new_references.person_id ,
1240                                 p_programcd     => new_references.course_cd ,
1241                                 p_discontindt   => new_references.discontinued_dt,
1242                                 p_discontincd   => new_references.discontinuation_reason_cd
1243                                    );
1244            IF NVL(old_references.key_program,'N') = 'Y' THEN
1245               igf_aw_coa_gen.ins_coa_todo(
1246                           p_person_id => new_references.person_id ,
1247                           p_calling_module => 'IGSEI24B_D',
1248                           p_program_code => new_references.course_cd,
1249                           p_version_number => new_references.version_number) ;
1250            END IF;
1251 
1252           END IF;
1253 
1254   -- Bug # 2829275 . UK Correspondence. The business event is raised when the program is DISCONTINUED.
1255 
1256           IF ( new_references.course_attempt_status <> old_references.course_attempt_status AND  new_references.course_attempt_status = 'INTERMIT') THEN
1257 
1258 
1259              OPEN cur_find_interm(new_references.person_id,new_references.course_cd);
1260              FETCH cur_find_interm INTO l_cur_find_interm;
1261              CLOSE cur_find_interm;
1262 
1263              IF ( l_cur_find_interm.start_dt <> SYSDATE AND l_cur_find_interm.creation_date <> SYSDATE ) THEN
1264 
1265               igs_en_workflow.intermission_event(
1266                                  p_personid         => l_cur_find_interm.person_id,
1267                                  p_program_cd       => l_cur_find_interm.course_cd,
1268                                  p_intmtype         => l_cur_find_interm.intermission_type,
1269                                  p_startdt          => l_cur_find_interm.start_dt,
1270                                  p_enddt            => l_cur_find_interm.end_dt ,
1271                                  p_inst_name        => l_cur_find_interm.institution_name,
1272                                  p_max_cp           => l_cur_find_interm.max_credit_pts ,
1273                                  p_max_term         => l_cur_find_interm.max_terms ,
1274                                  p_anti_cp          => l_cur_find_interm.anticipated_credit_points ,
1275                                  p_approver         => l_cur_find_interm.approver_id
1276                                           );
1277 
1278             END IF;
1279        END IF;
1280 
1281   -- The changes are done as per the Enrollments Notifications TD Bug # 3052429
1282   -- Workflow notification is send if :
1283   -- 1. The program status changed from UNCONFIRM to INACTIVE
1284   -- 2. If there is a corresponding record exist in IGS_RE_CANDIDATURE
1285 
1286 
1287          IF (     new_references.course_attempt_status <> old_references.course_attempt_status
1288              AND  new_references.course_attempt_status ='INACTIVE' AND old_references.course_attempt_status = 'UNCONFIRM') THEN
1289 
1290               OPEN cur_re_canditure(new_references.person_id,new_references.course_cd);
1291               FETCH cur_re_canditure INTO ln_cur_re_canditure;
1292               CLOSE cur_re_canditure;
1293 
1294               IF ( ln_cur_re_canditure = 1 ) THEN
1295 
1296                  igs_re_workflow.confirm_reg_event (
1297                             p_personid     =>  new_references.person_id ,
1298                             p_programcd    =>  new_references.course_cd ,
1299                             p_spa_start_dt =>  new_references.commencement_dt ,
1300                             p_prog_attempt_stat => new_references.course_attempt_status
1301                              );
1302 
1303               END IF;
1304           END IF;
1305       END IF;
1306 END AfterRowInsertUpdate4;
1307 
1308   -- Trigger description :-
1309   -- "OSS_TST".trg_sca_ar_u_hist
1310   -- AFTER UPDATE
1311   -- ON IGS_EN_STDNT_PS_ATT
1312   -- FOR EACH ROW
1313 
1314   -- Modified By : jbegum
1315   -- Modified for : Enhancement Bug #1832130
1316   -- Added four new parameters to the function call IGS_EN_GEN_009.ENRP_INS_SCA_HIST
1317   -- new_references.last_date_of_attendance,
1318   -- old_references.last_date_of_attendance,
1319   -- new_references.dropped_by,
1320   -- old_references.dropped_by
1321 
1322   --bdeviset     09-NOV-2004	Bug#4000939 Modified AfterRowUpdate4.
1323 
1324   PROCEDURE AfterRowUpdate4(
1325     p_inserting IN BOOLEAN,
1326     p_updating IN BOOLEAN,
1327     p_deleting IN BOOLEAN
1328     ) AS
1329 
1330 
1331   BEGIN
1332         -- create a history
1333         IGS_EN_GEN_009.ENRP_INS_SCA_HIST(
1334                 old_references.person_id,
1335                 old_references.course_cd,
1336                 new_references.version_number,
1337                 old_references.version_number,
1338                 new_references.cal_type,
1339                 old_references.cal_type,
1340                 new_references.location_cd,
1341                 old_references.location_cd,
1342                 new_references.attendance_mode,
1343                 old_references.attendance_mode,
1344                 new_references.attendance_type,
1345                 old_references.attendance_type,
1346                 new_references.student_confirmed_ind,
1347                 old_references.student_confirmed_ind,
1348                 new_references.commencement_dt,
1349                 old_references.commencement_dt,
1350                 new_references.course_attempt_status,
1351                 old_references.course_attempt_status,
1352                 new_references.progression_status,
1353                 old_references.progression_status,
1354                 new_references.derived_att_type,
1355                 old_references.derived_att_type,
1356                 new_references.derived_att_mode,
1357                 old_references.derived_att_mode,
1358                 new_references.provisional_ind,
1359                 old_references.provisional_ind,
1360                 new_references.discontinued_dt,
1361                 old_references.discontinued_dt,
1362                 new_references.discontinuation_reason_cd,
1363                 old_references.discontinuation_reason_cd,
1364                 new_references.lapsed_dt,
1365                 old_references.lapsed_dt,
1366                 new_references.funding_source,
1367                 old_references.funding_source,
1368                 new_references.exam_location_cd,
1369                 old_references.exam_location_cd,
1370                 new_references.derived_completion_yr,
1371                 old_references.derived_completion_yr,
1372                 new_references.derived_completion_perd,
1373                 old_references.derived_completion_perd,
1374                 new_references.nominated_completion_yr,
1375                 old_references.nominated_completion_yr,
1376                 new_references.nominated_completion_perd,
1377                 old_references.nominated_completion_perd,
1378                 new_references.rule_check_ind,
1379                 old_references.rule_check_ind,
1380                 new_references.waive_option_check_ind,
1381                 old_references.waive_option_check_ind,
1382                 new_references.last_rule_check_dt,
1383                 old_references.last_rule_check_dt,
1384                 new_references.publish_outcomes_ind,
1385                 old_references.publish_outcomes_ind,
1386                 new_references.course_rqrmnt_complete_ind,
1387                 old_references.course_rqrmnt_complete_ind,
1388                 new_references.course_rqrmnts_complete_dt,
1389                 old_references.course_rqrmnts_complete_dt,
1390                 new_references.s_completed_source_type,
1391                 old_references.s_completed_source_type,
1392                 new_references.override_time_limitation,
1393                 old_references.override_time_limitation,
1394                 new_references.advanced_standing_ind,
1395                 old_references.advanced_standing_ind,
1396                 new_references.fee_cat,
1397                 old_references.fee_cat,
1398                 new_references.self_help_group_ind,
1399                 old_references.self_help_group_ind,
1400                 new_references.correspondence_cat,
1401                 old_references.correspondence_cat,
1402                 new_references.adm_admission_appl_number,
1403                 old_references.adm_admission_appl_number,
1404                 new_references.adm_nominated_course_cd,
1405                 old_references.adm_nominated_course_cd,
1406                 new_references.adm_sequence_number,
1407                 old_references.adm_sequence_number,
1408                 new_references.last_updated_by,
1409                 old_references.last_updated_by,
1410                 new_references.last_update_date,
1411                 old_references.last_update_date,
1412                 new_references.last_date_of_attendance,
1413                 old_references.last_date_of_attendance,
1414                 new_references.dropped_by,
1415                 old_references.dropped_by ,
1416                 new_references.primary_program_type ,
1417                 old_references.primary_program_type  ,
1418                 new_references.primary_prog_type_source ,
1419                 old_references.primary_prog_type_source  ,
1420                 new_references.catalog_cal_type ,
1421                 old_references.catalog_cal_type ,
1422                 new_references.catalog_seq_num ,
1423                 old_references.catalog_seq_num  ,
1424                 new_references.key_program ,
1425                 old_references.key_program,
1426                 new_references.override_cmpl_dt,
1427                 old_references.override_cmpl_dt,
1428                 new_references.manual_ovr_cmpl_dt_ind,
1429                 old_references.manual_ovr_cmpl_dt_ind,
1430                 new_references.coo_id,
1431                 old_references.coo_id,
1432                 new_references.igs_pr_class_std_id,
1433                 old_references.igs_pr_class_std_id);
1434 
1435 
1436 
1437 
1438   END AfterRowUpdate4;
1439 
1440   -- Trigger description :-
1441   -- "OSS_TST".trg_sca_as_iu
1442   -- AFTER INSERT OR UPDATE
1443   -- ON IGS_EN_STDNT_PS_ATT
1444   PROCEDURE Check_Constraints(
1445         Column_name IN VARCHAR2,
1446         Column_Value IN VARCHAR2
1447   ) AS
1448   /*----------------------------------------------------------------------------
1449   ||  Created By :
1450   ||  Created On :
1451   ||  Purpose :
1452   ||  Known limitations, enhancements or remarks :
1453   ||  Change History :
1454   ||  Who             When            What
1455   ||  (reverse chronological order - newest change first)
1456   ||  vvutukur        19-May-2002   removed upper check constraint on fee_cat column.bug#2344826.
1457   ||  kkillams        08-11-2002    Added check constraints for key_program,primary_program_type and
1458   ||                                primary_prog_type_source columns. Legacy Build Bug no: 2661533
1459   ----------------------------------------------------------------------------*/
1460   BEGIN
1461         IF column_name IS NULL THEN
1462               NULL;
1463         ELSIF UPPER(column_name) = 'NOMINATED_COMPLETION_YR' THEN
1464               new_references.nominated_completion_yr := igs_ge_number.to_num(column_value);
1465         ELSIF UPPER(column_name) = 'DERIVED_COMPLETION_PERD' THEN
1466               new_references.derived_completion_perd := column_value;
1467         ELSIF UPPER(column_name) = 'DERIVED_COMPLETION_YR' THEN
1468               new_references.derived_completion_yr := igs_ge_number.to_num(column_value);
1469         ELSIF UPPER(column_name) = 'PROVISIONAL_IND' THEN
1470               new_references.provisional_ind := column_value;
1471         ELSIF UPPER(column_name) = 'STUDENT_CONFIRMED_IND' THEN
1472               new_references.student_confirmed_ind := column_value;
1473         ELSIF UPPER(column_name) = 'ADM_NOMINATED_COURSE_CD' THEN
1474               new_references.adm_nominated_course_cd := column_value;
1475         ELSIF UPPER(column_name) = 'ADVANCED_STANDING_IND' THEN
1476               new_references.advanced_standing_ind := column_value;
1477         ELSIF UPPER(column_name) = 'ATTENDANCE_MODE' THEN
1478               new_references.attendance_mode := column_value;
1479         ELSIF UPPER(column_name) = 'ATTENDANCE_TYPE' THEN
1480               new_references.attendance_type := column_value;
1481         ELSIF UPPER(column_name) = 'CAL_TYPE' THEN
1482               new_references.cal_type := column_value;
1483         ELSIF UPPER(column_name) = 'CORRESPONDENCE_CAT' THEN
1484               new_references.correspondence_cat := column_value;
1485         ELSIF UPPER(column_name) = 'COURSE_ATTEMPT_STATUS' THEN
1486               new_references.course_attempt_status := column_value;
1487         ELSIF UPPER(column_name) = 'COURSE_CD' THEN
1488               new_references.course_cd := column_value;
1489         ELSIF UPPER(column_name) = 'COURSE_RQRMNT_COMPLETE_IND' THEN
1490               new_references.course_rqrmnt_complete_ind := column_value;
1491         ELSIF UPPER(column_name) = 'DERIVED_ATT_MODE' THEN
1492               new_references.derived_att_mode := column_value;
1493         ELSIF UPPER(column_name) = 'DERIVED_ATT_TYPE' THEN
1494               new_references.derived_att_type := column_value;
1495         ELSIF UPPER(column_name) = 'DERIVED_COMPLETION_PERD' THEN
1496               new_references.derived_completion_perd := column_value;
1497         ELSIF UPPER(column_name) = 'DISCONTINUATION_REASON_CD' THEN
1498               new_references.discontinuation_reason_cd := column_value;
1499         ELSIF UPPER(column_name) = 'EXAM_LOCATION_CD' THEN
1500               new_references.exam_location_cd := column_value;
1501         ELSIF UPPER(column_name) = 'FUNDING_SOURCE' THEN
1502               new_references.funding_source := column_value;
1503         ELSIF UPPER(column_name) = 'LOCATION_CD' THEN
1504               new_references.location_cd := column_value;
1505         ELSIF UPPER(column_name) = 'NOMINATED_COMPLETION_PERD' THEN
1506               new_references.nominated_completion_perd := column_value;
1507         ELSIF UPPER(column_name) = 'PUBLISH_OUTCOMES_IND' THEN
1508               new_references.publish_outcomes_ind := column_value;
1509         ELSIF UPPER(column_name) = 'RULE_CHECK_IND' THEN
1510               new_references.rule_check_ind := column_value;
1511         ELSIF UPPER(column_name) = 'SELF_HELP_GROUP_IND' THEN
1512               new_references.self_help_group_ind := column_value;
1513         ELSIF UPPER(column_name) = 'LOCATION_CD' THEN
1514               new_references.location_cd := column_value;
1515         ELSIF UPPER(column_name) = 'WAIVE_OPTION_CHECK_IND' THEN
1516               new_references.waive_option_check_ind := column_value;
1517         ELSIF UPPER(column_name) = 'ADM_SEQUENCE_NUMBER' THEN
1518               new_references.adm_sequence_number := igs_ge_number.to_num(column_value);
1519         ELSIF UPPER(column_name) = 'S_COMPLETED_SOURCE_TYPE' THEN
1520               new_references.s_completed_source_type := column_value;
1521         ELSIF UPPER(column_name) = 'PRIMARY_PROGRAM_TYPE' THEN
1522               new_references.primary_program_type := column_value;
1523         ELSIF UPPER(column_name) = 'OVERRIDE_TIME_LIMITATION' THEN
1524               new_references.override_time_limitation := igs_ge_number.to_num(column_value);
1525         ELSIF UPPER(column_name) = 'MANUAL_OVR_CMPL_DT_IND' THEN
1526               new_references.manual_ovr_cmpl_dt_ind := column_value;
1527         ELSIF UPPER(column_name) = 'KEY_PROGRAM' THEN
1528               new_references.key_program := column_value;
1529         ELSIF UPPER(column_name) = 'PRIMARY_PROG_TYPE_SOURCE' THEN
1530               new_references.primary_prog_type_source := column_value;
1531         END IF;
1532 
1533         IF UPPER(column_name) = 'KEY_PROGRAM' OR
1534                Column_name IS NULL THEN
1535                IF new_references.key_program   NOT  IN ( 'Y' , 'N')   THEN
1536                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1537                       IGS_GE_MSG_STACK.ADD;
1538                       App_Exception.Raise_Exception;
1539                END IF;
1540         END IF;
1541         IF UPPER(column_name) = 'PRIMARY_PROG_TYPE_SOURCE' OR
1542                Column_name IS NULL THEN
1543                IF new_references.primary_prog_type_source   NOT  IN ( 'MANUAL' , 'SYSTEM')   THEN
1544                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1545                       IGS_GE_MSG_STACK.ADD;
1546                       App_Exception.Raise_Exception;
1547                END IF;
1548         END IF;
1549         IF UPPER(column_name) = 'PRIMARY_PROGRAM_TYPE' OR
1550                Column_name IS NULL THEN
1551                IF new_references.primary_program_type   NOT  IN ( 'PRIMARY' , 'SECONDARY')   THEN
1552                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1553                       IGS_GE_MSG_STACK.ADD;
1554                       App_Exception.Raise_Exception;
1555                END IF;
1556         END IF;
1557 
1558         IF UPPER(column_name) = 'NOMINATED_COMPLETION_YR' OR
1559                Column_name IS NULL THEN
1560                IF new_references.nominated_completion_yr  NOT BETWEEN 0 AND 9999  THEN
1561                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1562                       IGS_GE_MSG_STACK.ADD;
1563                       App_Exception.Raise_Exception;
1564                END IF;
1565         END IF;
1566         IF UPPER(column_name) = 'DERIVED_COMPLETION_PERD' OR
1567                Column_name IS NULL THEN
1568                IF new_references.derived_completion_perd NOT IN ( 'M' , 'E' , 'S' )  THEN
1569                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1570                       IGS_GE_MSG_STACK.ADD;
1571                       App_Exception.Raise_Exception;
1572                END IF;
1573         END IF;
1574         IF UPPER(column_name) = 'DERIVED_COMPLETION_YR' OR
1575                Column_name IS NULL THEN
1576                IF new_references.derived_completion_yr NOT BETWEEN 0 AND 9999  THEN
1577                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1578                       IGS_GE_MSG_STACK.ADD;
1579                       App_Exception.Raise_Exception;
1580                END IF;
1581         END IF;
1582         IF UPPER(column_name) = 'PROVISIONAL_IND' OR
1583                Column_name IS NULL THEN
1584                IF new_references.provisional_ind NOT IN ( 'Y' , 'N' )  THEN
1585                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1586                       IGS_GE_MSG_STACK.ADD;
1587                       App_Exception.Raise_Exception;
1588                END IF;
1589         END IF;
1590         IF UPPER(column_name) = 'STUDENT_CONFIRMED_IND' OR
1591                Column_name IS NULL THEN
1592                IF new_references.student_confirmed_ind NOT IN ( 'Y' , 'N' )  THEN
1593                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1594                       IGS_GE_MSG_STACK.ADD;
1595                       App_Exception.Raise_Exception;
1596                END IF;
1597         END IF;
1598         IF UPPER(column_name) = 'ADM_NOMINATED_COURSE_CD' OR
1599                Column_name IS NULL THEN
1600                IF new_references.adm_nominated_course_cd <>
1601                             UPPER(new_references.adm_nominated_course_cd)  THEN
1602                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1603                       IGS_GE_MSG_STACK.ADD;
1604                       App_Exception.Raise_Exception;
1605                END IF;
1606         END IF;
1607         IF UPPER(column_name) = 'ADVANCED_STANDING_IND' OR
1608                Column_name IS NULL THEN
1609                IF new_references.advanced_standing_ind NOT IN ( 'Y' , 'N' )  THEN
1610                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1611                       IGS_GE_MSG_STACK.ADD;
1612                       App_Exception.Raise_Exception;
1613                END IF;
1614         END IF;
1615         IF UPPER(column_name) = 'ATTENDANCE_MODE' OR
1616                Column_name IS NULL THEN
1617                IF new_references.attendance_mode <>
1618                             UPPER(new_references.attendance_mode)  THEN
1619                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1620                       IGS_GE_MSG_STACK.ADD;
1621                       App_Exception.Raise_Exception;
1622                END IF;
1623         END IF;
1624         IF UPPER(column_name) = 'ATTENDANCE_TYPE' OR
1625                Column_name IS NULL THEN
1626                IF new_references.attendance_type <>
1627                             UPPER(new_references.attendance_type)  THEN
1628                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1629                       IGS_GE_MSG_STACK.ADD;
1630                       App_Exception.Raise_Exception;
1631                END IF;
1632         END IF;
1633         IF UPPER(column_name) = 'CAL_TYPE' OR
1634                Column_name IS NULL THEN
1635                IF new_references.cal_type <>
1636                             UPPER(new_references.cal_type)  THEN
1637                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1638                       IGS_GE_MSG_STACK.ADD;
1639                       App_Exception.Raise_Exception;
1640                END IF;
1641         END IF;
1642         IF UPPER(column_name) = 'CORRESPONDENCE_CAT' OR
1643                Column_name IS NULL THEN
1644                IF new_references.correspondence_cat <>
1645                             UPPER(new_references.correspondence_cat)  THEN
1646                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1647                       IGS_GE_MSG_STACK.ADD;
1648                       App_Exception.Raise_Exception;
1649                END IF;
1650         END IF;
1651         IF UPPER(column_name) = 'COURSE_ATTEMPT_STATUS' OR
1652                Column_name IS NULL THEN
1653                IF new_references.course_attempt_status <>
1654                             UPPER(new_references.course_attempt_status)  THEN
1655                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1656                       IGS_GE_MSG_STACK.ADD;
1657                       App_Exception.Raise_Exception;
1658                END IF;
1659         END IF;
1660         IF UPPER(column_name) = 'COURSE_CD' OR
1661                Column_name IS NULL THEN
1662                IF new_references.course_cd <>
1663                             UPPER(new_references.course_cd)  THEN
1664                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1665                       IGS_GE_MSG_STACK.ADD;
1666                       App_Exception.Raise_Exception;
1667                END IF;
1668         END IF;
1669         IF UPPER(column_name) = 'COURSE_RQRMNT_COMPLETE_IND' OR
1670                Column_name IS NULL THEN
1671                IF new_references.course_rqrmnt_complete_ind NOT IN ( 'Y' , 'N' )  THEN
1672                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1673                       IGS_GE_MSG_STACK.ADD;
1674                       App_Exception.Raise_Exception;
1675                END IF;
1676         END IF;
1677         IF UPPER(column_name) = 'DERIVED_ATT_MODE' OR
1678                Column_name IS NULL THEN
1679                IF new_references.derived_att_mode <>
1680                             UPPER(new_references.derived_att_mode)  THEN
1681                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1682                       IGS_GE_MSG_STACK.ADD;
1683                       App_Exception.Raise_Exception;
1684                END IF;
1685         END IF;
1686         IF UPPER(column_name) = 'DERIVED_ATT_TYPE' OR
1687                Column_name IS NULL THEN
1688                IF new_references.derived_att_type <>
1689                             UPPER(new_references.derived_att_type)  THEN
1690                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1691                       IGS_GE_MSG_STACK.ADD;
1692                       App_Exception.Raise_Exception;
1693                END IF;
1694         END IF;
1695         IF UPPER(column_name) = 'DERIVED_COMPLETION_PERD' OR
1696                Column_name IS NULL THEN
1697                IF new_references.derived_completion_perd <>
1698                             UPPER(new_references.derived_completion_perd)  THEN
1699                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1700                       IGS_GE_MSG_STACK.ADD;
1701                       App_Exception.Raise_Exception;
1702                END IF;
1703         END IF;
1704         IF UPPER(column_name) = 'DISCONTINUATION_REASON_CD' OR
1705                Column_name IS NULL THEN
1706                IF new_references.discontinuation_reason_cd <>
1707                             UPPER(new_references.discontinuation_reason_cd)  THEN
1708                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1709                       IGS_GE_MSG_STACK.ADD;
1710                       App_Exception.Raise_Exception;
1711                END IF;
1712         END IF;
1713         IF UPPER(column_name) = 'EXAM_LOCATION_CD' OR
1714                Column_name IS NULL THEN
1715                IF new_references.exam_location_cd <>
1716                             UPPER(new_references.exam_location_cd)  THEN
1717                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1718                       IGS_GE_MSG_STACK.ADD;
1719                       App_Exception.Raise_Exception;
1720                END IF;
1721         END IF;
1722         IF UPPER(column_name) = 'FUNDING_SOURCE' OR
1723                Column_name IS NULL THEN
1724                IF new_references.funding_source <>
1725                             UPPER(new_references.funding_source)  THEN
1726                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1727                       IGS_GE_MSG_STACK.ADD;
1728                       App_Exception.Raise_Exception;
1729                END IF;
1730         END IF;
1731         IF UPPER(column_name) = 'LOCATION_CD' OR
1732                Column_name IS NULL THEN
1733                IF new_references.location_cd <>
1734                             UPPER(new_references.location_cd)  THEN
1735                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1736                       IGS_GE_MSG_STACK.ADD;
1737                       App_Exception.Raise_Exception;
1738                END IF;
1739         END IF;
1740         /* IF UPPER(column_name) = 'NOMINATED_COMPLETION_PERD' OR
1741                Column_name IS NULL THEN
1742                IF new_references.nominated_completion_perd NOT IN ( 'M' , 'E' , 'S' )  THEN
1743                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1744                       IGS_GE_MSG_STACK.ADD;
1745                       App_Exception.Raise_Exception;
1746                END IF;
1747         END IF;  */
1748         IF UPPER(column_name) = 'PUBLISH_OUTCOMES_IND' OR
1749                Column_name IS NULL THEN
1750                IF new_references.publish_outcomes_ind NOT IN ( 'Y' , 'N' )  THEN
1751                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1752                       IGS_GE_MSG_STACK.ADD;
1753                       App_Exception.Raise_Exception;
1754                END IF;
1755         END IF;
1756         IF UPPER(column_name) = 'RULE_CHECK_IND' OR
1757                Column_name IS NULL THEN
1758                IF new_references.rule_check_ind NOT IN ( 'Y' , 'N' )  THEN
1759                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1760                       IGS_GE_MSG_STACK.ADD;
1761                       App_Exception.Raise_Exception;
1762                END IF;
1763         END IF;
1764         IF UPPER(column_name) = 'SELF_HELP_GROUP_IND' OR
1765                Column_name IS NULL THEN
1766                IF new_references.self_help_group_ind NOT IN ( 'Y' , 'N' )  THEN
1767                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1768                       IGS_GE_MSG_STACK.ADD;
1769                       App_Exception.Raise_Exception;
1770                END IF;
1771         END IF;
1772         IF UPPER(column_name) = 'LOCATION_CD' OR
1773                Column_name IS NULL THEN
1774                IF new_references.location_cd <>
1775                             UPPER(new_references.location_cd)  THEN
1776                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1777                       IGS_GE_MSG_STACK.ADD;
1778                       App_Exception.Raise_Exception;
1779                END IF;
1780         END IF;
1781         IF UPPER(column_name) = 'WAIVE_OPTION_CHECK_IND' OR
1782                Column_name IS NULL THEN
1783                IF new_references.waive_option_check_ind NOT IN ( 'Y' , 'N' )  THEN
1784                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1785                       IGS_GE_MSG_STACK.ADD;
1786                       App_Exception.Raise_Exception;
1787                END IF;
1788         END IF;
1789         IF UPPER(column_name) = 'ADM_SEQUENCE_NUMBER' OR
1790                Column_name IS NULL THEN
1791                IF new_references.adm_sequence_number  NOT BETWEEN 1
1792               AND 999999  THEN
1793                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1794                       IGS_GE_MSG_STACK.ADD;
1795                       App_Exception.Raise_Exception;
1796                END IF;
1797         END IF;
1798         IF UPPER(column_name) = 'S_COMPLETED_SOURCE_TYPE ' OR
1799                Column_name IS NULL THEN
1800                IF new_references.s_completed_source_type   NOT  IN ( 'MANUAL' , 'SYSTEM')   THEN
1801                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1802                       IGS_GE_MSG_STACK.ADD;
1803                       App_Exception.Raise_Exception;
1804                END IF;
1805         END IF;
1806         IF UPPER(column_name) = 'OVERRIDE_TIME_LIMITATION' OR
1807                Column_name IS NULL THEN
1808                IF new_references.override_time_limitation  NOT  BETWEEN 0 AND 9999  THEN
1809                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1810           IGS_GE_MSG_STACK.ADD;
1811                       App_Exception.Raise_Exception;
1812                END IF;
1813         END IF;
1814         IF UPPER(column_name) = 'MANUAL_OVR_CMPL_DT_IND' OR
1815                Column_name IS NULL THEN
1816                IF new_references.manual_ovr_cmpl_dt_ind NOT IN ( 'Y' , 'N' )  THEN
1817                        Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
1818            IGS_GE_MSG_STACK.ADD;
1819                        App_Exception.Raise_Exception;
1820                END IF;
1821         END IF;
1822 
1823   END Check_Constraints;
1824 
1825   PROCEDURE Check_Parent_Existance AS
1826   /*----------------------------------------------------------------------------
1827   ||  Created By :
1828   ||  Created On :
1829   ||  Purpose :
1830   ||  Known limitations, enhancements or remarks :
1831   ||  Change History :
1832   ||  Who             When            What
1833   ||  amuthu          07-JAN-03       Added check for Nominated Completion Period
1834   ----------------------------------------------------------------------------*/
1835   BEGIN
1836     IF (((old_references.progression_status = new_references.progression_status)) OR
1837         ((new_references.progression_status IS NULL))) THEN
1838       NULL;
1839     ELSE
1840       IF NOT IGS_LOOKUPS_VIEW_Pkg.Get_PK_For_Validation (
1841         'PROGRESSION_STATUS',
1842         new_references.progression_status
1843         ) THEN
1844         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1845 IGS_GE_MSG_STACK.ADD;
1846         App_Exception.Raise_Exception;
1847       END IF;
1848     END IF;
1849     IF (((old_references.derived_att_mode = new_references.derived_att_mode)) OR
1850         ((new_references.derived_att_mode IS NULL))) THEN
1851       NULL;
1852     ELSE
1853       IF NOT IGS_EN_ATD_MODE_PKG.Get_PK_For_Validation (
1854         new_references.derived_att_mode
1855         ) THEN
1856         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1857 IGS_GE_MSG_STACK.ADD;
1858         App_Exception.Raise_Exception;
1859       END IF;
1860     END IF;
1861     IF (((old_references.course_attempt_status = new_references.course_attempt_status)) OR
1862         ((new_references.course_attempt_status IS NULL))) THEN
1863       NULL;
1864     ELSE
1865       IF NOT IGS_LOOKUPS_VIEW_Pkg.Get_PK_For_Validation (
1866         'CRS_ATTEMPT_STATUS',
1867         new_references.course_attempt_status
1868         ) THEN
1869         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1870 IGS_GE_MSG_STACK.ADD;
1871         App_Exception.Raise_Exception;
1872       END IF;
1873     END IF;
1874     IF (((old_references.person_id = new_references.person_id) AND
1875          (old_references.adm_admission_appl_number = new_references.adm_admission_appl_number) AND
1876          (old_references.adm_nominated_course_cd = new_references.adm_nominated_course_cd) AND
1877          (old_references.adm_sequence_number = new_references.adm_sequence_number)) OR
1878         ((new_references.person_id IS NULL) OR
1879          (new_references.adm_admission_appl_number IS NULL) OR
1880          (new_references.adm_nominated_course_cd IS NULL) OR
1881          (new_references.adm_sequence_number IS NULL))) THEN
1882       NULL;
1883     ELSE
1884       IF NOT IGS_AD_PS_APPL_INST_PKG.Get_PK_For_Validation (
1885         new_references.person_id,
1886         new_references.adm_admission_appl_number,
1887         new_references.adm_nominated_course_cd,
1888         new_references.adm_sequence_number
1889         ) THEN
1890         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1891 IGS_GE_MSG_STACK.ADD;
1892         App_Exception.Raise_Exception;
1893       END IF;
1894     END IF;
1895     IF (((old_references.derived_att_type = new_references.derived_att_type)) OR
1896         ((new_references.derived_att_type IS NULL))) THEN
1897       NULL;
1898     ELSE
1899       IF NOT IGS_EN_ATD_TYPE_PKG.Get_PK_For_Validation (
1900         new_references.derived_att_type
1901         ) THEN
1902         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1903 IGS_GE_MSG_STACK.ADD;
1904         App_Exception.Raise_Exception;
1905       END IF  ;
1906     END IF;
1907 
1908 
1909     IF (((old_references.correspondence_cat = new_references.correspondence_cat)) OR
1910         ((new_references.correspondence_cat IS NULL))) THEN
1911       NULL;
1912     ELSE
1913       IF NOT IGS_CO_CAT_PKG.Get_PK_For_Validation (
1914         new_references.correspondence_cat
1915         ) THEN
1916         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1917 IGS_GE_MSG_STACK.ADD;
1918         App_Exception.Raise_Exception;
1919        END IF;
1920     END IF;
1921 
1922 
1923     IF (((old_references.course_cd = new_references.course_cd) AND
1924          (old_references.version_number = new_references.version_number) AND
1925          (old_references.cal_type = new_references.cal_type) AND
1926          (old_references.location_cd = new_references.location_cd) AND
1927          (old_references.attendance_mode = new_references.attendance_mode) AND
1928          (old_references.attendance_type = new_references.attendance_type)) OR
1929         ((new_references.course_cd IS NULL) OR
1930          (new_references.version_number IS NULL) OR
1931          (new_references.cal_type IS NULL) OR
1932          (new_references.location_cd IS NULL) OR
1933          (new_references.attendance_mode IS NULL) OR
1934          (new_references.attendance_type IS NULL))) THEN
1935       NULL;
1936     ELSE
1937 
1938       IF NOT IGS_PS_OFR_OPT_PKG.Get_PK_For_Validation (
1939         new_references.course_cd,
1940         new_references.version_number,
1941         new_references.cal_type,
1942         new_references.location_cd,
1943         new_references.attendance_mode,
1944         new_references.attendance_type
1945         ) THEN
1946 
1947               Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1948         IGS_GE_MSG_STACK.ADD;
1949               App_Exception.Raise_Exception;
1950       END IF;
1951 
1952     END IF;
1953 
1954     -- prgoyal 21st May Bug 2383185
1955     IF (((old_references.coo_id = new_references.coo_id)) OR
1956           ((new_references.coo_id IS NULL))) THEN
1957         NULL;
1958       ELSE
1959         IF NOT  IGS_PS_OFR_OPT_PKG.Get_UK_For_Validation (
1960           new_references.coo_id
1961         ) THEN
1962                 Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1963           IGS_GE_MSG_STACK.ADD;
1964                 App_Exception.Raise_Exception;
1965        END IF;
1966     END IF;
1967 
1968     IF (((old_references.discontinuation_reason_cd = new_references.discontinuation_reason_cd)) OR
1969         ((new_references.discontinuation_reason_cd IS NULL))) THEN
1970       NULL;
1971     ELSE
1972       IF NOT IGS_EN_DCNT_REASONCD_PKG.Get_PK_For_Validation (
1973         new_references.discontinuation_reason_cd
1974         ) THEN
1975         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1976         IGS_GE_MSG_STACK.ADD;
1977         App_Exception.Raise_Exception;
1978       END IF;
1979     END IF;
1980     IF (((old_references.fee_cat = new_references.fee_cat)) OR
1981         ((new_references.fee_cat IS NULL))) THEN
1982       NULL;
1983     ELSE
1984       IF NOT IGS_FI_FEE_CAT_PKG.Get_PK_For_Validation (
1985         new_references.fee_cat
1986         ) THEN
1987         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1988 IGS_GE_MSG_STACK.ADD;
1989         App_Exception.Raise_Exception;
1990       END IF  ;
1991     END IF;
1992     IF (((old_references.funding_source = new_references.funding_source)) OR
1993         ((new_references.funding_source IS NULL))) THEN
1994       NULL;
1995     ELSE
1996       IF NOT IGS_FI_FUND_SRC_PKG.Get_PK_For_Validation (
1997         new_references.funding_source
1998         ) THEN
1999         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2000 IGS_GE_MSG_STACK.ADD;
2001         App_Exception.Raise_Exception;
2002       END IF;
2003     END IF;
2004     IF (((old_references.exam_location_cd = new_references.exam_location_cd)) OR
2005         ((new_references.exam_location_cd IS NULL))) THEN
2006       NULL;
2007     ELSE
2008       IF NOT IGS_AD_LOCATION_PKG.Get_PK_For_Validation (
2009         new_references.exam_location_cd,
2010         'N'
2011         ) THEN
2012         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2013 IGS_GE_MSG_STACK.ADD;
2014         App_Exception.Raise_Exception;
2015       END IF;
2016     END IF;
2017     IF (((old_references.person_id = new_references.person_id)) OR
2018         ((new_references.person_id IS NULL))) THEN
2019       NULL;
2020     ELSE
2021       IF NOT IGS_PE_PERSON_PKG.Get_PK_For_Validation (
2022         new_references.person_id
2023         ) THEN
2024         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2025 IGS_GE_MSG_STACK.ADD;
2026         App_Exception.Raise_Exception;
2027       END IF;
2028     END IF;
2029 
2030     IF ((old_references.IGS_PR_CLASS_STD_ID = new_references.IGS_PR_CLASS_STD_ID)OR
2031         (new_references.IGS_PR_CLASS_STD_ID IS NULL)) THEN
2032       NULL;
2033     ELSE
2034       IF NOT IGS_PR_CLASS_STD_PKG.Get_PK_For_Validation (
2035        new_references.IGS_PR_CLASS_STD_ID
2036        ) THEN
2037             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2038         IGS_GE_MSG_STACK.ADD;
2039         App_Exception.Raise_Exception;
2040       END IF ;
2041     END IF;
2042 
2043     IF ((old_references.NOMINATED_COMPLETION_PERD = new_references.NOMINATED_COMPLETION_PERD)OR
2044         (new_references.NOMINATED_COMPLETION_PERD IS NULL)) THEN
2045       NULL;
2046     ELSE
2047       IF NOT IGS_EN_NOM_CMPL_PRD_PKG.Get_PK_For_Validation (
2048        new_references.NOMINATED_COMPLETION_PERD
2049        ) THEN
2050             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2051         IGS_GE_MSG_STACK.ADD;
2052         App_Exception.Raise_Exception;
2053       END IF ;
2054     END IF;
2055 
2056     IF (((old_references.PRIMARY_PROG_TYPE_SOURCE = new_references.PRIMARY_PROG_TYPE_SOURCE)) OR
2057         ((new_references.PRIMARY_PROG_TYPE_SOURCE IS NULL))) THEN
2058       NULL;
2059     ELSE
2060       IF NOT IGS_LOOKUPS_VIEW_Pkg.Get_PK_For_Validation (
2061         'IGS_EN_PP_SOURCE',
2062         new_references.PRIMARY_PROG_TYPE_SOURCE
2063         ) THEN
2064         Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
2065 IGS_GE_MSG_STACK.ADD;
2066         App_Exception.Raise_Exception;
2067       END IF;
2068      END IF;
2069 
2070     IF (((old_references.CATALOG_CAL_TYPE = new_references.CATALOG_CAL_TYPE) AND
2071          (old_references.CATALOG_SEQ_NUM = new_references.CATALOG_SEQ_NUM)) OR
2072         ((new_references.CATALOG_CAL_TYPE IS NULL) OR
2073          (new_references.CATALOG_SEQ_NUM IS NULL))) THEN
2074       NULL;
2075     ELSIF NOT Igs_Ca_Inst_Pkg.Get_PK_For_Validation (
2076                         new_references.CATALOG_CAL_TYPE,
2077                          new_references.CATALOG_SEQ_NUM
2078         )  THEN
2079          Fnd_Message.Set_Name ('FND','FORM_RECORD_DELETED');
2080       IGS_GE_MSG_STACK.ADD;
2081          App_Exception.Raise_Exception;
2082     END IF;
2083 
2084   END Check_Parent_Existance;
2085 
2086 
2087   PROCEDURE Check_Child_Existance AS
2088   ------------------------------------------------------------------
2089   --Change History:
2090   --Who         When            What
2091   --vchappid   25-Apr-2002     Bug#2329407, removed the call to IGS_FI_DSB_DTL_ALC_PKG.GET_FK_IGS_EN_STDNT_PS_ATT
2092   --                           as table IGS_FI_DSB_DTL_ALC is obsolete in the current fix
2093   --smadathi   22-Jan-2002     Bug No. 2170429.Removed references to IGS_FI_CRS_AT_F_SPN_PKG.GET_FK_IGS_EN_STDNT_PS_ATT
2094   --                           call as part of sponsorship DLD
2095   --pmarada   13-feb-2002      Added IGS_HE_ST_SPA_ALL_PKG.GET_UFK_IGS_EN_ST_PS_ATT_AL for HESA requirment.
2096   --nmankodi  04-Nov-2002      Added for Posting External Results TD
2097   --ckasu     04-Dec-2003      Added IGS_EN_SPA_TERMS_PKG.GET_FK_IGS_EN_STDNT_PS_ATT for Term Records Build
2098   -------------------------------------------------------------------
2099 
2100 
2101   BEGIN
2102     IGS_AD_PS_APPL_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2103       old_references.person_id,
2104       old_references.course_cd
2105       );
2106     IGS_RE_CANDIDATURE_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2107       old_references.person_id,
2108       old_references.course_cd
2109       );
2110     IGS_FI_FEE_AS_RT_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2111       old_references.person_id,
2112       old_references.course_cd
2113       );
2114     IGS_GR_GRADUAND_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2115       old_references.person_id,
2116       old_references.course_cd
2117       );
2118     IGS_PR_RU_APPL_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2119       old_references.person_id,
2120       old_references.course_cd
2121       );
2122     IGS_GR_SPECIAL_AWARD_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2123       old_references.person_id,
2124       old_references.course_cd
2125       );
2126     IGS_EN_STDNTPSHECSOP_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2127       old_references.person_id,
2128       old_references.course_cd
2129       );
2130     IGS_EN_STDNT_PS_INTM_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2131       old_references.person_id,
2132       old_references.course_cd
2133       );
2134     IGS_PS_STDNT_TRN_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2135       old_references.person_id,
2136       old_references.course_cd
2137       );
2138     IGS_PS_STDNT_APV_ALT_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2139       old_references.person_id,
2140       old_references.course_cd
2141       );
2142     IGS_AS_SC_ATMPT_ENR_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2143       old_references.person_id,
2144       old_references.course_cd
2145       );
2146     IGS_AS_SC_ATMPT_NOTE_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2147       old_references.person_id,
2148       old_references.course_cd
2149       );
2150     IGS_PR_SDT_PS_PR_MSR_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2151       old_references.person_id,
2152       old_references.course_cd
2153       );
2154     IGS_PS_STDNT_SPL_REQ_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2155       old_references.person_id,
2156       old_references.course_cd
2157       );
2158     IGS_PR_STDNT_PR_CK_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2159       old_references.person_id,
2160       old_references.course_cd
2161       );
2162     IGS_EN_SU_ATTEMPT_H_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2163       old_references.person_id,
2164       old_references.course_cd
2165       );
2166     IGS_EN_SU_ATTEMPT_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2167       old_references.person_id,
2168       old_references.course_cd
2169       );
2170     IGS_AS_SU_SETATMPT_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2171       old_references.person_id,
2172       old_references.course_cd
2173       );
2174     --Added as the following one as part of Term Record Build
2175     --Bug No# 2829263
2176     IGS_EN_SPA_TERMS_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2177       old_references.person_id,
2178       old_references.course_cd
2179       );
2180     --
2181     --  Next call added as per the UK Award Aims DLD.
2182     --
2183     igs_en_spa_awd_aim_pkg.get_fk_igs_en_stdnt_ps_att (
2184       old_references.person_id,
2185       old_references.course_cd
2186     );
2187     --
2188     --  Next call added as per the class Rank Build.
2189     --  Bug# 2639109
2190 
2191     igs_pr_cohinst_rank_pkg.get_fk_igs_en_stdnt_ps_att (
2192       old_references.person_id,
2193       old_references.course_cd
2194       );
2195 
2196     IGS_AS_ANON_ID_PS_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2197       old_references.person_id,
2198       old_references.course_cd
2199       );
2200 
2201     IGS_AS_ANON_ID_US_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2202       old_references.person_id,
2203       old_references.course_cd
2204       );
2205 
2206      -- Added the following check chaild existance for the HESA requirment, pmarada
2207     IGS_HE_ST_SPA_ALL_PKG.GET_FK_IGS_EN_STDNT_PS_ATT_ALL(
2208     old_references.person_id,
2209     old_references.course_cd);
2210 
2211 
2212      IGS_PR_STU_ACAD_STAT_PKG.GET_FK_IGS_EN_STDNT_PS_ATT (
2213       old_references.person_id,
2214       old_references.course_cd
2215       );
2216      IGS_EN_PLAN_UNITS_PKG.GET_FK_IGS_EN_STDNT_PS_ATT(
2217      old_references.person_id,
2218      old_references.course_cd
2219      );
2220 
2221   END Check_Child_Existance;
2222 
2223 
2224   FUNCTION Get_PK_For_Validation (
2225     x_person_id IN NUMBER,
2226     x_course_cd IN VARCHAR2
2227     ) RETURN BOOLEAN AS
2228 
2229   -- This function does the check to see whether the record for the
2230   -- mentioned PK exists. No lock is done on a record with a status
2231   -- other than that of status 'UNCONFIRM' since it is not deletable
2232   -- records with status UNCONFIRM deletable and hence they would
2233   -- need to be locked. Since this is the PK hence these columns
2234   -- cannot be updated.
2235 
2236     CURSOR cur_rec_exist IS
2237       SELECT course_attempt_status
2238       FROM igs_en_stdnt_ps_att_all
2239       WHERE person_id = x_person_id
2240       AND course_cd = x_course_cd;
2241 
2242     CURSOR cur_rowid IS
2243       SELECT   ROWID
2244       FROM     IGS_EN_STDNT_PS_ATT_ALL
2245       WHERE    person_id = x_person_id
2246       AND      course_cd = x_course_cd
2247       FOR UPDATE NOWAIT;
2248 
2249     lv_rowid cur_rowid%ROWTYPE;
2250     lv_crs_att_status igs_en_stdnt_ps_att_all.course_attempt_status%TYPE;
2251 
2252   BEGIN
2253 
2254     -- Check whether a record exists for the mentioned PK and get
2255     -- ps attempt status.
2256     OPEN cur_rec_exist;
2257     FETCH cur_rec_exist INTO lv_crs_att_status;
2258 
2259     IF cur_rec_exist%FOUND THEN
2260     -- in this case the record exists for the mentioned PK
2261 
2262       IF lv_crs_att_status = 'UNCONFIRM' THEN
2263 
2264         -- In case the status is unconfirm then a lock is
2265         -- required on the record.
2266         OPEN cur_rowid;
2267         FETCH cur_rowid INTO lv_rowid;
2268         IF (cur_rowid%FOUND) THEN
2269           CLOSE cur_rowid;
2270           CLOSE cur_rec_exist;
2271           RETURN(TRUE);
2272         ELSE
2273           CLOSE cur_rowid;
2274           CLOSE cur_rec_exist;
2275           RETURN(FALSE);
2276         END IF;
2277 
2278       ELSE
2279         CLOSE cur_rec_exist;
2280         RETURN(TRUE);
2281       END IF;
2282 
2283     ELSE
2284       CLOSE cur_rec_exist;
2285       RETURN(FALSE);
2286     END IF;
2287 
2288   END Get_PK_For_Validation;
2289 
2290 
2291   PROCEDURE GET_FK_IGS_LOOKUPS_VIEW_Prog (
2292     x_progression_status IN VARCHAR2
2293     ) AS
2294     CURSOR cur_rowid IS
2295       SELECT   ROWID
2296       FROM     IGS_EN_STDNT_PS_ATT_ALL
2297       WHERE    progression_status = x_progression_status ;
2298     lv_rowid cur_rowid%ROWTYPE;
2299   BEGIN
2300     OPEN cur_rowid;
2301     FETCH cur_rowid INTO lv_rowid;
2302     IF (cur_rowid%FOUND) THEN
2303       CLOSE cur_rowid;
2304       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_LKUPV_FK');
2305 IGS_GE_MSG_STACK.ADD;
2306       App_Exception.Raise_Exception;
2307       RETURN;
2308     END IF;
2309     CLOSE cur_rowid;
2310   END GET_FK_IGS_LOOKUPS_VIEW_Prog;
2311 
2312   PROCEDURE GET_FK_IGS_EN_ATD_MODE (
2313     x_attendance_mode IN VARCHAR2
2314     ) AS
2315     CURSOR cur_rowid IS
2316       SELECT   ROWID
2317       FROM     IGS_EN_STDNT_PS_ATT_ALL
2318       WHERE    derived_att_mode = x_attendance_mode ;
2319     lv_rowid cur_rowid%ROWTYPE;
2320   BEGIN
2321     OPEN cur_rowid;
2322     FETCH cur_rowid INTO lv_rowid;
2323     IF (cur_rowid%FOUND) THEN
2324       CLOSE cur_rowid;
2325       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_AM_FK');
2326 IGS_GE_MSG_STACK.ADD;
2327       App_Exception.Raise_Exception;
2328       RETURN;
2329     END IF;
2330     CLOSE cur_rowid;
2331   END GET_FK_IGS_EN_ATD_MODE;
2332 
2333   PROCEDURE GET_FK_IGS_LOOKUPS_VIEW_CAS (
2334     x_course_attempt_status IN VARCHAR2
2335     ) AS
2336     CURSOR cur_rowid IS
2337       SELECT   ROWID
2338       FROM     IGS_EN_STDNT_PS_ATT_ALL
2339       WHERE    course_attempt_status = x_course_attempt_status ;
2340     lv_rowid cur_rowid%ROWTYPE;
2341   BEGIN
2342     OPEN cur_rowid;
2343     FETCH cur_rowid INTO lv_rowid;
2344     IF (cur_rowid%FOUND) THEN
2345       CLOSE cur_rowid;
2346       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_LKUPV_FK');
2347       IGS_GE_MSG_STACK.ADD;
2348       App_Exception.Raise_Exception;
2349       RETURN;
2350     END IF;
2351     CLOSE cur_rowid;
2352   END GET_FK_IGS_LOOKUPS_VIEW_CAS;
2353 
2354   PROCEDURE GET_FK_IGS_AD_PS_APPL_INST (
2355     x_person_id IN NUMBER,
2356     x_admission_appl_number IN NUMBER,
2357     x_nominated_course_cd IN VARCHAR2,
2358     x_sequence_number IN NUMBER
2359     ) AS
2360     CURSOR cur_rowid IS
2361       SELECT   ROWID
2362       FROM     IGS_EN_STDNT_PS_ATT_ALL
2363       WHERE    person_id = x_person_id
2364       AND      adm_admission_appl_number = x_admission_appl_number
2365       AND      adm_nominated_course_cd = x_nominated_course_cd
2366       AND      adm_sequence_number = x_sequence_number ;
2367     lv_rowid cur_rowid%ROWTYPE;
2368   BEGIN
2369     OPEN cur_rowid;
2370     FETCH cur_rowid INTO lv_rowid;
2371     IF (cur_rowid%FOUND) THEN
2372       CLOSE cur_rowid;
2373       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_ACAI_FK');
2374       IGS_GE_MSG_STACK.ADD;
2375       App_Exception.Raise_Exception;
2376       RETURN;
2377     END IF;
2378     CLOSE cur_rowid;
2379   END GET_FK_IGS_AD_PS_APPL_INST;
2380 
2381   PROCEDURE GET_FK_IGS_EN_ATD_TYPE (
2382     x_attendance_type IN VARCHAR2
2383     ) AS
2384     CURSOR cur_rowid IS
2385       SELECT   ROWID
2386       FROM     IGS_EN_STDNT_PS_ATT_ALL
2387       WHERE    derived_att_type = x_attendance_type ;
2388     lv_rowid cur_rowid%ROWTYPE;
2389   BEGIN
2390     OPEN cur_rowid;
2391     FETCH cur_rowid INTO lv_rowid;
2392     IF (cur_rowid%FOUND) THEN
2393       CLOSE cur_rowid;
2394       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_ATT_FK');
2395 IGS_GE_MSG_STACK.ADD;
2396       App_Exception.Raise_Exception;
2397       RETURN;
2398     END IF;
2399     CLOSE cur_rowid;
2400   END GET_FK_IGS_EN_ATD_TYPE;
2401 
2402   PROCEDURE GET_FK_IGS_CO_CAT (
2403     x_correspondence_cat IN VARCHAR2
2404     ) AS
2405     CURSOR cur_rowid IS
2406       SELECT   ROWID
2407       FROM     IGS_EN_STDNT_PS_ATT_ALL
2408       WHERE    correspondence_cat = x_correspondence_cat ;
2409     lv_rowid cur_rowid%ROWTYPE;
2410   BEGIN
2411     OPEN cur_rowid;
2412     FETCH cur_rowid INTO lv_rowid;
2413     IF (cur_rowid%FOUND) THEN
2414       CLOSE cur_rowid;
2415       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_CC_FK');
2416 IGS_GE_MSG_STACK.ADD;
2417       App_Exception.Raise_Exception;
2418       RETURN;
2419     END IF;
2420     CLOSE cur_rowid;
2421   END GET_FK_IGS_CO_CAT;
2422 
2423   PROCEDURE GET_FK_IGS_PS_OFR_OPT (
2424     x_course_cd IN VARCHAR2,
2425     x_version_number IN NUMBER,
2426     x_cal_type IN VARCHAR2,
2427     x_location_cd IN VARCHAR2,
2428     x_attendance_mode IN VARCHAR2,
2429     x_attendance_type IN VARCHAR2
2430     ) AS
2431     CURSOR cur_rowid IS
2432       SELECT   ROWID
2433       FROM     IGS_EN_STDNT_PS_ATT_ALL
2434       WHERE    course_cd = x_course_cd
2435       AND      version_number = x_version_number
2436       AND      cal_type = x_cal_type
2437       AND      location_cd = x_location_cd
2438       AND      attendance_mode = x_attendance_mode
2439       AND      attendance_type = x_attendance_type ;
2440     lv_rowid cur_rowid%ROWTYPE;
2441   BEGIN
2442     OPEN cur_rowid;
2443     FETCH cur_rowid INTO lv_rowid;
2444     IF (cur_rowid%FOUND) THEN
2445       CLOSE cur_rowid;
2446       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_COO_FK');
2447 IGS_GE_MSG_STACK.ADD;
2448       App_Exception.Raise_Exception;
2449       RETURN;
2450     END IF;
2451     CLOSE cur_rowid;
2452   END GET_FK_IGS_PS_OFR_OPT;
2453 
2454   PROCEDURE GET_UFK_IGS_PS_OFR_OPT (
2455     x_coo_id IN NUMBER
2456     ) AS
2457     CURSOR cur_rowid IS
2458       SELECT   ROWID
2459       FROM     IGS_EN_STDNT_PS_ATT_ALL
2460       WHERE    coo_id = x_coo_id;
2461     lv_rowid cur_rowid%ROWTYPE;
2462   BEGIN
2463     OPEN cur_rowid;
2464     FETCH cur_rowid INTO lv_rowid;
2465     IF (cur_rowid%FOUND) THEN
2466       CLOSE cur_rowid;
2467 -- code modified by Nishikant - 13JUN2002 - as per bug#2413811
2468 -- set the message IGS_EN_SCA_COO_FK instead of IGS_EN_SCA_COO_UFK
2469       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_COO_FK');
2470 IGS_GE_MSG_STACK.ADD;
2471       App_Exception.Raise_Exception;
2472       RETURN;
2473     END IF;
2474     CLOSE cur_rowid;
2475   END GET_UFK_IGS_PS_OFR_OPT;
2476 
2477    PROCEDURE GET_FK_IGS_PS_COURSE (
2478     x_course_cd IN VARCHAR2
2479     ) AS
2480     CURSOR cur_rowid IS
2481       SELECT   ROWID
2482       FROM     IGS_EN_STDNT_PS_ATT_ALL
2483       WHERE    course_cd = x_course_cd ;
2484     lv_rowid cur_rowid%ROWTYPE;
2485   BEGIN
2486     OPEN cur_rowid;
2487     FETCH cur_rowid INTO lv_rowid;
2488     IF (cur_rowid%FOUND) THEN
2489       CLOSE cur_rowid;
2490       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_CRS_FK');
2491 IGS_GE_MSG_STACK.ADD;
2492       App_Exception.Raise_Exception;
2493       RETURN;
2494     END IF;
2495     CLOSE cur_rowid;
2496   END GET_FK_IGS_PS_COURSE;
2497 
2498   PROCEDURE GET_FK_IGS_PS_VER (
2499     x_course_cd IN VARCHAR2,
2500     x_version_number IN NUMBER
2501     ) AS
2502     CURSOR cur_rowid IS
2503       SELECT   ROWID
2504       FROM     IGS_EN_STDNT_PS_ATT_ALL
2505       WHERE    course_cd = x_course_cd
2506       AND      version_number = x_version_number ;
2507     lv_rowid cur_rowid%ROWTYPE;
2508   BEGIN
2509     OPEN cur_rowid;
2510     FETCH cur_rowid INTO lv_rowid;
2511     IF (cur_rowid%FOUND) THEN
2512       CLOSE cur_rowid;
2513       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_CRV_FK');
2514 IGS_GE_MSG_STACK.ADD;
2515       App_Exception.Raise_Exception;
2516       RETURN;
2517     END IF;
2518     CLOSE cur_rowid;
2519   END GET_FK_IGS_PS_VER;
2520 
2521 
2522   PROCEDURE GET_FK_IGS_FI_FEE_CAT (
2523     x_fee_cat IN VARCHAR2
2524     ) AS
2525     CURSOR cur_rowid IS
2526       SELECT   ROWID
2527       FROM     IGS_EN_STDNT_PS_ATT_ALL
2528       WHERE    fee_cat = x_fee_cat ;
2529     lv_rowid cur_rowid%ROWTYPE;
2530   BEGIN
2531     OPEN cur_rowid;
2532     FETCH cur_rowid INTO lv_rowid;
2533     IF (cur_rowid%FOUND) THEN
2534       CLOSE cur_rowid;
2535       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_FC_FK');
2536 IGS_GE_MSG_STACK.ADD;
2537       App_Exception.Raise_Exception;
2538       RETURN;
2539     END IF;
2540     CLOSE cur_rowid;
2541   END GET_FK_IGS_FI_FEE_CAT;
2542 
2543   PROCEDURE GET_FK_IGS_FI_FUND_SRC (
2544     x_funding_source IN VARCHAR2
2545     ) AS
2546     CURSOR cur_rowid IS
2547       SELECT   ROWID
2548       FROM     IGS_EN_STDNT_PS_ATT_ALL
2549       WHERE    funding_source = x_funding_source ;
2550     lv_rowid cur_rowid%ROWTYPE;
2551   BEGIN
2552     OPEN cur_rowid;
2553     FETCH cur_rowid INTO lv_rowid;
2554     IF (cur_rowid%FOUND) THEN
2555       CLOSE cur_rowid;
2556       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_FS_FK');
2557 IGS_GE_MSG_STACK.ADD;
2558       App_Exception.Raise_Exception;
2559       RETURN;
2560     END IF;
2561     CLOSE cur_rowid;
2562   END GET_FK_IGS_FI_FUND_SRC;
2563 
2564   PROCEDURE GET_FK_IGS_AD_LOCATION (
2565     x_location_cd IN VARCHAR2
2566     ) AS
2567     CURSOR cur_rowid IS
2568       SELECT   ROWID
2569       FROM     IGS_EN_STDNT_PS_ATT_ALL
2570       WHERE    exam_location_cd = x_location_cd ;
2571     lv_rowid cur_rowid%ROWTYPE;
2572   BEGIN
2573     OPEN cur_rowid;
2574     FETCH cur_rowid INTO lv_rowid;
2575     IF (cur_rowid%FOUND) THEN
2576       CLOSE cur_rowid;
2577       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_LOC_FK');
2578 IGS_GE_MSG_STACK.ADD;
2579       App_Exception.Raise_Exception;
2580       RETURN;
2581     END IF;
2582     CLOSE cur_rowid;
2583   END GET_FK_IGS_AD_LOCATION;
2584 
2585   PROCEDURE GET_FK_IGS_PE_PERSON (
2586     x_person_id IN NUMBER
2587     ) AS
2588     CURSOR cur_rowid IS
2589       SELECT   ROWID
2590       FROM     IGS_EN_STDNT_PS_ATT_ALL
2591       WHERE    person_id = x_person_id ;
2592     lv_rowid cur_rowid%ROWTYPE;
2593   BEGIN
2594     OPEN cur_rowid;
2595     FETCH cur_rowid INTO lv_rowid;
2596     IF (cur_rowid%FOUND) THEN
2597       CLOSE cur_rowid;
2598       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_PE_FK');
2599 IGS_GE_MSG_STACK.ADD;
2600       App_Exception.Raise_Exception;
2601       RETURN;
2602     END IF;
2603     CLOSE cur_rowid;
2604   END GET_FK_IGS_PE_PERSON;
2605 
2606 -- added as part of Enroll process Build for class standing dld
2607 -- amuthu 30-JUL-2001
2608   PROCEDURE GET_FK_IGS_PR_CLASS_STD(
2609     X_IGS_PR_CLASS_STD_ID IN NUMBER
2610   ) AS
2611     CURSOR cur_rowid IS
2612       SELECT   ROWID
2613       FROM IGS_EN_STDNT_PS_ATT_ALL
2614           WHERE IGS_PR_CLASS_STD_ID = X_IGS_PR_CLASS_STD_ID;
2615 
2616         lv_cur cur_rowid%ROWTYPE;
2617 
2618   BEGIN
2619     OPEN cur_rowid;
2620     FETCH cur_rowid INTO lv_cur;
2621     IF (cur_rowid%FOUND) THEN
2622       CLOSE cur_rowid;
2623       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_PCS_FK');
2624       IGS_GE_MSG_STACK.ADD;
2625       App_Exception.Raise_Exception;
2626       RETURN;
2627     END IF;
2628     CLOSE cur_rowid;
2629   END GET_FK_IGS_PR_CLASS_STD;
2630 
2631 
2632   PROCEDURE GET_FK_IGS_CA_INST (
2633     X_CATALOG_CAL_TYPE IN VARCHAR2,
2634     X_CATALOG_SEQ_NUM IN NUMBER
2635     ) AS
2636     CURSOR cur_rowid IS
2637       SELECT ROWID
2638       FROM   IGS_EN_STDNT_PS_ATT_ALL
2639       WHERE  CATALOG_CAL_TYPE = X_CATALOG_CAL_TYPE
2640             AND  CATALOG_SEQ_NUM = X_CATALOG_SEQ_NUM  ;
2641     lv_rowid cur_rowid%ROWTYPE;
2642 
2643   BEGIN
2644     OPEN cur_rowid;
2645     FETCH cur_rowid INTO lv_rowid;
2646     IF (cur_rowid%FOUND) THEN
2647       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SCA_CI_FK');
2648       Igs_Ge_Msg_Stack.ADD;
2649       CLOSE cur_rowid;
2650       App_Exception.Raise_Exception;
2651       RETURN;
2652     END IF;
2653     CLOSE cur_rowid;
2654   END GET_FK_IGS_CA_INST;
2655 
2656 
2657   PROCEDURE Before_DML (
2658     p_action IN VARCHAR2,
2659     x_rowid IN VARCHAR2,
2660     x_org_id IN NUMBER,
2661     x_person_id IN NUMBER,
2662     x_course_cd IN VARCHAR2,
2663     x_version_number IN NUMBER,
2664     x_cal_type IN VARCHAR2,
2665     x_location_cd IN VARCHAR2,
2666     x_attendance_mode IN VARCHAR2,
2667     x_attendance_type IN VARCHAR2,
2668     x_coo_id IN NUMBER,
2669     x_student_confirmed_ind IN VARCHAR2,
2670     x_commencement_dt IN DATE,
2671     x_course_attempt_status IN VARCHAR2,
2672     x_progression_status IN VARCHAR2,
2673     x_derived_att_type IN VARCHAR2,
2674     x_derived_att_mode IN VARCHAR2,
2675     x_provisional_ind IN VARCHAR2,
2676     x_discontinued_dt IN DATE,
2677     x_discontinuation_reason_cd IN VARCHAR2,
2678     x_lapsed_dt IN DATE,
2679     x_funding_source IN VARCHAR2,
2680     x_exam_location_cd IN VARCHAR2,
2681     x_derived_completion_yr IN NUMBER,
2682     x_derived_completion_perd IN VARCHAR2,
2683     x_nominated_completion_yr IN NUMBER,
2684     x_nominated_completion_perd IN VARCHAR2,
2685     x_rule_check_ind IN VARCHAR2,
2686     x_waive_option_check_ind IN VARCHAR2,
2687     x_last_rule_check_dt IN DATE,
2688     x_publish_outcomes_ind IN VARCHAR2,
2689     x_course_rqrmnt_complete_ind IN VARCHAR2,
2690     x_course_rqrmnts_complete_dt IN DATE,
2691     x_s_completed_source_type IN VARCHAR2,
2692     x_override_time_limitation IN NUMBER,
2693     x_advanced_standing_ind IN VARCHAR2,
2694     x_fee_cat IN VARCHAR2,
2695     x_correspondence_cat IN VARCHAR2,
2696     x_self_help_group_ind IN VARCHAR2,
2697     x_logical_delete_dt IN DATE,
2698     x_adm_admission_appl_number IN NUMBER,
2699     x_adm_nominated_course_cd IN VARCHAR2,
2700     x_adm_sequence_number IN NUMBER,
2701     x_creation_date IN DATE,
2702     x_created_by IN NUMBER,
2703     x_last_update_date IN DATE,
2704     x_last_updated_by IN NUMBER,
2705     x_last_update_login IN NUMBER,
2706     x_last_date_of_attendance IN DATE,
2707     x_dropped_by  IN VARCHAR2,
2708     x_igs_pr_class_std_id IN NUMBER,
2709     x_primary_program_type IN VARCHAR2,
2710     x_primary_prog_type_source IN VARCHAR2,
2711     x_catalog_cal_type IN VARCHAR2,
2712     x_catalog_seq_num IN NUMBER,
2713     x_key_program IN VARCHAR2,
2714     x_manual_ovr_cmpl_dt_ind IN VARCHAR2,
2715     x_override_cmpl_dt IN DATE,
2716     x_attribute_category IN VARCHAR2,
2717     x_attribute1 IN VARCHAR2,
2718     x_attribute2 IN VARCHAR2,
2719     x_attribute3 IN VARCHAR2,
2720     x_attribute4 IN VARCHAR2,
2721     x_attribute5 IN VARCHAR2,
2722     x_attribute6 IN VARCHAR2,
2723     x_attribute7 IN VARCHAR2,
2724     x_attribute8 IN VARCHAR2,
2725     x_attribute9 IN VARCHAR2,
2726     x_attribute10 IN VARCHAR2,
2727     x_attribute11 IN VARCHAR2,
2728     x_attribute12 IN VARCHAR2,
2729     x_attribute13 IN VARCHAR2,
2730     x_attribute14 IN VARCHAR2,
2731     x_attribute15 IN VARCHAR2,
2732     x_attribute16 IN VARCHAR2,
2733     x_attribute17 IN VARCHAR2,
2734     x_attribute18 IN VARCHAR2,
2735     x_attribute19 IN VARCHAR2,
2736     x_attribute20 IN VARCHAR2,
2737     x_future_dated_trans_flag In VARCHAR2
2738   ) AS
2739   BEGIN
2740     Set_Column_Values (
2741       p_action,
2742       x_rowid,
2743       x_org_id,
2744       x_person_id,
2745       x_course_cd,
2746       x_version_number,
2747       x_cal_type,
2748       x_location_cd,
2749       x_attendance_mode,
2750       x_attendance_type,
2751       x_coo_id,
2752       x_student_confirmed_ind,
2753       x_commencement_dt,
2754       x_course_attempt_status,
2755       x_progression_status,
2756       x_derived_att_type,
2757       x_derived_att_mode,
2758       x_provisional_ind,
2759       x_discontinued_dt,
2760       x_discontinuation_reason_cd,
2761       x_lapsed_dt,
2762       x_funding_source,
2763       x_exam_location_cd,
2764       x_derived_completion_yr,
2765       x_derived_completion_perd,
2766       x_nominated_completion_yr,
2767       x_nominated_completion_perd,
2768       x_rule_check_ind,
2769       x_waive_option_check_ind,
2770       x_last_rule_check_dt,
2771       x_publish_outcomes_ind,
2772       x_course_rqrmnt_complete_ind,
2773       x_course_rqrmnts_complete_dt,
2774       x_s_completed_source_type,
2775       x_override_time_limitation,
2776       x_advanced_standing_ind,
2777       x_fee_cat,
2778       x_correspondence_cat,
2779       x_self_help_group_ind,
2780       x_logical_delete_dt,
2781       x_adm_admission_appl_number,
2782       x_adm_nominated_course_cd,
2783       x_adm_sequence_number,
2784       x_creation_date,
2785       x_created_by,
2786       x_last_update_date,
2787       x_last_updated_by,
2788       x_last_update_login,
2789       x_last_date_of_attendance,
2790       x_dropped_by,
2791       X_IGS_PR_CLASS_STD_ID,
2792       x_primary_program_type,
2793       x_primary_prog_type_source,
2794       x_catalog_cal_type,
2795       x_catalog_seq_num,
2796       x_key_program,
2797       x_manual_ovr_cmpl_dt_ind,
2798       x_override_cmpl_dt,
2799       x_attribute_category,
2800       x_attribute1,
2801       x_attribute2,
2802       x_attribute3,
2803       x_attribute4,
2804       x_attribute5,
2805       x_attribute6,
2806       x_attribute7,
2807       x_attribute8,
2808       x_attribute9,
2809       x_attribute10,
2810       x_attribute11,
2811       x_attribute12,
2812       x_attribute13,
2813       x_attribute14,
2814       x_attribute15,
2815       x_attribute16,
2816       x_attribute17,
2817       x_attribute18,
2818       x_attribute19,
2819       x_attribute20,
2820       x_future_dated_trans_flag
2821     );
2822 
2823     IF (p_action = 'INSERT') THEN
2824       -- Call all the procedures related to Before Insert.
2825       BeforeRowInsertUpdate1 ( p_inserting => TRUE,
2826                                p_updating  => FALSE,
2827                                p_deleting  => FALSE);
2828 
2829       BeforeRowInsertUpdateDelete2 ( p_inserting => TRUE,
2830                                      p_updating  => FALSE,
2831                                      p_deleting  => FALSE);
2832       IF Get_PK_For_Validation(
2833         new_references.person_id ,
2834         new_references.course_cd
2835          ) THEN
2836          FND_Message.Set_Name('IGS','IGS_GE_MULTI_ORG_DUP_REC');
2837                 IGS_GE_MSG_STACK.ADD;
2838          App_Exception.Raise_Exception;
2839       END IF;
2840       Check_Constraints;
2841       Check_Parent_Existance;
2842     ELSIF (p_action = 'UPDATE') THEN
2843       -- Call all the procedures related to Before Update.
2844 
2845       BeforeRowInsertUpdate1 ( p_inserting => FALSE,
2846                                p_updating  => TRUE,
2847                                p_deleting  => FALSE);
2848 
2849       BeforeRowInsertUpdateDelete2( p_inserting => FALSE,
2850                                p_updating  => TRUE,
2851                                p_deleting  => FALSE);
2852 
2853       Check_Constraints;
2854       Check_Parent_Existance;
2855     ELSIF (p_action = 'DELETE') THEN
2856       -- Call all the procedures related to Before Delete.
2857       beforerowdelete;
2858       BeforeRowInsertUpdateDelete2  ( p_inserting => FALSE,
2859                                       p_updating  => FALSE,
2860                                       p_deleting  => TRUE);
2861       Check_Child_Existance;
2862     ELSIF (p_action = 'VALIDATE_INSERT') THEN
2863       IF Get_PK_For_Validation(
2864         new_references.person_id ,
2865         new_references.course_cd
2866          ) THEN
2867          FND_Message.Set_Name('IGS','IGS_GE_MULTI_ORG_DUP_REC');
2868          IGS_GE_MSG_STACK.ADD;
2869          App_Exception.Raise_Exception;
2870       END IF;
2871       Check_constraints;
2872     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
2873       Check_constraints;
2874     ELSIF (p_action = 'VALIDATE_DELETE') THEN
2875       Check_Child_Existance;
2876     END IF;
2877 
2878     -- call the before dml of igs_en_career_model package only if the global variable skip_before_after_dml
2879     -- is false . This variable will be made true in the after dml procedure of igs_en_career_model package
2880     -- to avoid calling before and after dml procedures during recursion of UPDATE_ROW call in the career package
2881     -- donot remove this condition ( included in career_impcat dld)
2882     IF (p_action in ('INSERT','UPDATE'))  AND  (NOT IGS_EN_STDNT_PS_ATT_PKG.skip_before_after_dml) THEN
2883 
2884 
2885       IGS_EN_CAREER_MODEL.SCA_TBH_BEFORE_DML(
2886         p_person_id => new_references.person_id,
2887         p_course_cd => new_references.course_cd,
2888         p_version_number => new_references.version_number,
2889         p_old_course_attempt_status => old_references.course_attempt_status ,
2890         p_new_course_attempt_status => new_references.course_attempt_status ,
2891         p_primary_program_type => new_references.primary_program_type,
2892         p_primary_prog_type_source => new_references.primary_prog_type_source,
2893         p_new_key_program    => new_references.key_program
2894       );
2895 
2896         END IF;
2897 
2898   END Before_DML;
2899 
2900 
2901 PROCEDURE AFTER_DML_RECURSIVE_CALLS(p_old_references        IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE,
2902                                     p_new_references        IGS_EN_STDNT_PS_ATT_ALL%ROWTYPE,
2903                                     p_action                VARCHAR2,
2904                                     p_skip_before_after_dml BOOLEAN DEFAULT FALSE) IS
2905 
2906 CURSOR cur_fut_dt_trnsf(cp_person_id     IGS_PS_STDNT_TRN.person_id%TYPE,
2907                         cp_program_cd    IGS_PS_STDNT_TRN.transfer_course_cd%TYPE) IS
2908 			SELECT sct.course_cd,sct.effective_term_cal_type,sct.effective_term_sequence_num
2909 			FROM   IGS_PS_STDNT_TRN sct, IGS_EN_STDNT_PS_ATT sca
2910 			WHERE  sct.person_id = cp_person_id
2911 			AND    sct.transfer_course_cd = cp_program_cd
2912 			AND    sct.course_cd = sca.course_cd
2913 			AND    sct.person_id = sca.person_id
2914 			AND    sca.future_dated_trans_flag = 'Y';
2915 
2916 v_eff_term_cal_type  IGS_PS_STDNT_TRN.effective_term_cal_type%TYPE;
2917 v_eff_term_seq_num   IGS_PS_STDNT_TRN.effective_term_sequence_num%TYPE;
2918 v_course_cd	     IGS_EN_STDNT_PS_ATT.course_cd%TYPE;
2919 v_errbuf VARCHAR2(20);
2920 
2921 BEGIN
2922 
2923     IF p_action = 'UPDATE' THEN
2924 
2925         -- When a program attempt is intermitted/discontinued/lapsed/unconfirmed and it is the source program for
2926         -- future dated program transfer then the future dated program transfer must be deleted
2927         IF (p_old_references.course_attempt_status IN ('ENROLLED','INACTIVE') AND
2928             p_new_references.course_attempt_status IN ('INTERMIT','DISCONTIN','LAPSED','UNCONFIRM')) THEN
2929 
2930     	   OPEN cur_fut_dt_trnsf(p_new_references.person_id, p_new_references.course_cd);
2931 
2932 	       FETCH cur_fut_dt_trnsf INTO v_course_cd,v_eff_term_cal_type,v_eff_term_seq_num;
2933 
2934            IF cur_fut_dt_trnsf%FOUND THEN
2935 
2936         		IGS_EN_FUTURE_DT_TRANS.cleanup_dest_program (
2937                                      p_new_references.person_id,
2938 	                                   v_course_cd,
2939                                  	   v_eff_term_cal_type,
2940                                      v_eff_term_seq_num,
2941                         					  'CLEANUP'
2942                     	     				  );
2943 
2944         		IGS_EN_FUTURE_DT_TRANS.cleanup_dest_program (
2945                                      p_new_references.person_id,
2946                                      v_course_cd,
2947                                      v_eff_term_cal_type,
2948                                      v_eff_term_seq_num,
2949                                      'DELETE'
2950                       				      );
2951 
2952 
2953            END IF;
2954 
2955 	       CLOSE cur_fut_dt_trnsf;
2956 
2957         END IF;
2958 
2959     END IF;
2960 
2961     -- call the after dml of igs_en_career_model package only if the global variable skip_before_after_dml
2962     -- is false . This variable will be made true in the after dml procedure of igs_en_career_model package
2963     -- to avoid calling before and after dml procedures during recursion of UPDATE_ROW call in the career package
2964     -- donot remove this condition ( included in career_impcat dld)
2965     IF (p_action in ('INSERT','UPDATE'))   AND  (NOT p_skip_before_after_dml) THEN
2966 
2967             IGS_EN_CAREER_MODEL.SCA_TBH_AFTER_DML(
2968                         p_person_id => p_new_references.person_id,
2969                         p_course_cd => p_new_references.course_cd,
2970                         p_version_number => p_new_references.version_number,
2971                         p_old_course_attempt_status => p_old_references.course_attempt_status ,
2972                         p_new_course_attempt_status => p_new_references.course_attempt_status ,
2973                         p_primary_prog_type_source => p_new_references.primary_prog_type_source,
2974                         p_old_pri_prog_type => p_old_references.primary_program_type,
2975                         p_new_pri_prog_type => p_new_references.primary_program_type,
2976                         p_old_key_program  => p_old_references.key_program
2977                      );
2978 
2979     END IF;
2980 
2981 END AFTER_DML_RECURSIVE_CALLS;
2982 
2983 
2984 PROCEDURE After_DML (
2985     p_action         IN VARCHAR2,
2986     x_rowid          IN VARCHAR2
2987   ) AS
2988   -------------------------------------------------------------------------------
2989   -- Bug ID : UK AWARDS AIM DLD  (1366899)
2990   -- who              when                  what
2991   -- ayedubat        2nd MAY 2002           Added the call,AfterRowInsertUpdate4 while inserting a record as part of the bug fix:2344079
2992   --
2993   -- ayedubat        26th,Nov,2001          This procedure is modified to add a call
2994   --                                        to IGS_EN_GEN_009.ENRP_INS_AWARD_AIM Procedure
2995   --
2996   -- Prajeesh        11-Jun-2002            Added the Award Aim insert call in Both Insertrow and updaterow (2364445)
2997   -------------------------------------------------------------------------------
2998   -- Bug ID : 1818617
2999   -- who              when                  what
3000   -- sjadhav          jun 28,2001           this procedure is modified to trigger
3001   --                                        a Concurrent Request (IGFAPJ10) which
3002   --                                        will create a new record in IGF To
3003   --                                        Do table
3004   -- ptandon          28-Nov-2003           Included call to the enrp_ins_upd_term_rec
3005   --                                        procedure and modified the logic related to
3006   --                                        invocation of business event procedure.
3007   --                                        As per Term Based Fee Calc build.
3008   --                                        Enh. Bug# 2829263.
3009   -------------------------------------------------------------------------------
3010 
3011   -- Cursor to get the old key program for a student.
3012   CURSOR cur_get_course_cd_key(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
3013                                cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE)
3014   IS
3015   SELECT course_cd
3016   FROM   igs_en_stdnt_ps_att
3017   WHERE  person_id = cp_person_id AND
3018          course_cd <> cp_course_cd AND
3019          key_program = 'Y';
3020 
3021   -- Cursor to get the Program Type/Career of a program version.
3022   CURSOR cur_get_prog_type(cp_course_cd igs_ps_ver.course_cd%TYPE,
3023                            cp_version_num igs_ps_ver.version_number%TYPE)
3024   IS
3025   SELECT course_type
3026   FROM   igs_ps_ver
3027   WHERE  course_cd = cp_course_cd AND
3028          version_number = cp_version_num;
3029 
3030   -- Cursor to get the old primary program in a given career for a student.
3031   CURSOR cur_get_course_cd_prim(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
3032                                 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE,
3033                                 cp_version_number igs_en_stdnt_ps_att.version_number%TYPE,
3034                                 cp_course_type igs_ps_ver.course_type%TYPE)
3035   IS
3036   SELECT spa.course_cd
3037   FROM   igs_en_stdnt_ps_att spa,
3038          igs_ps_ver pv
3039   WHERE  spa.person_id = cp_person_id AND
3040          spa.course_cd <> cp_course_cd AND
3041          spa.primary_program_type = 'PRIMARY' AND
3042          spa.course_cd = pv.course_cd AND
3043          spa.version_number = pv.version_number AND
3044          pv.course_type = cp_course_type;
3045 
3046   -- bmerugu added for build 319 to get the secondary program attemps for student.
3047   CURSOR cur_pattempts(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE, cp_course_type igs_ps_ver.course_type%TYPE)
3048   IS
3049   SELECT spa.person_id, spa.course_cd
3050   FROM   igs_en_stdnt_ps_att spa,
3051 	 igs_ps_ver pv
3052   WHERE	 spa.person_id = cp_person_id AND
3053 	 spa.primary_program_type = 'SECONDARY' AND
3054 	 spa.course_cd = pv.course_cd AND
3055 	 spa.version_number = pv.version_number AND
3056 	 pv.course_type = cp_course_type;
3057   cur_pattempts_rec cur_pattempts%ROWTYPE;
3058 
3059   CURSOR cur_sua_uooid(cp_person_id igs_en_su_attempt_all.person_id%TYPE, cp_course_cd igs_en_su_attempt_all.course_cd%TYPE)
3060   IS
3061   SELECT sua.uoo_id
3062   FROM   igs_en_su_attempt_all sua
3063   WHERE	 sua.person_id = cp_person_id AND
3064 	 sua.course_cd = cp_course_cd AND
3065 	 sua.unit_attempt_status = 'UNCONFIRM';
3066   cur_sua_uooid_rec cur_sua_uooid%ROWTYPE;
3067 
3068   l_prog_type igs_ps_ver.course_type%TYPE;
3069   l_old_key_prg igs_ps_ver.course_cd%TYPE := NULL;
3070   l_old_prim_prog_cd igs_ps_ver.course_cd%TYPE;
3071   l_spa_term_cal_type igs_ca_inst.cal_type%TYPE;
3072   l_spa_term_sequence_number igs_ca_inst.sequence_number%TYPE;
3073   l_flag BOOLEAN;
3074   --bmerugu added for build 319 dummy variable to call del_sua_for_reopen
3075   l_delflag BOOLEAN;
3076   BEGIN
3077 
3078     l_rowid := x_rowid;
3079     IF (p_action = 'INSERT') THEN
3080       AfterRowInsertUpdate3 ( p_inserting => TRUE,
3081                               p_updating  => FALSE,
3082                               p_deleting  => FALSE);
3083 
3084       AfterRowInsertUpdate4 ( p_inserting => TRUE,
3085                               p_updating  => FALSE,
3086                               p_deleting  => FALSE);
3087       --
3088       -- This Code is added as part of the 'UK AWARD AIMS' DLD.
3089       --
3090       -- Call to the Procedure ENRP_INS_AWARD_AIM of the Package IGS_EN_GEN_009
3091       -- to insert a record in Student Program Attempt Award Aim for each default Program Award found.
3092       IF NEW_REFERENCES.COMMENCEMENT_DT IS NOT NULL THEN
3093        IGS_EN_GEN_009.ENRP_INS_AWARD_AIM (
3094          p_person_id => NEW_REFERENCES.PERSON_ID,
3095          p_course_cd => NEW_REFERENCES.COURSE_CD,
3096          p_version_number => NEW_REFERENCES.VERSION_NUMBER,
3097          p_start_dt       =>nvl( NEW_REFERENCES.COMMENCEMENT_DT,sysdate)
3098         );
3099       END IF;
3100       --
3101       -- End of the Code added.
3102 
3103       enrp_ins_upd_term_rec(p_action);
3104 
3105     ELSIF (p_action = 'UPDATE') THEN
3106       -- Call all the procedures related to After Update.
3107 
3108       AfterRowInsertUpdate3 ( p_inserting => FALSE,
3109                               p_updating  => TRUE,
3110                               p_deleting  => FALSE);
3111 
3112       AfterRowInsertUpdate4 ( p_inserting => FALSE,
3113                               p_updating  => TRUE,
3114                               p_deleting  => FALSE);
3115 
3116       AfterRowUpdate4 ( p_inserting => FALSE,
3117                         p_updating  => TRUE,
3118                         p_deleting  => FALSE);
3119 
3120       IF NEW_REFERENCES.COMMENCEMENT_DT IS NOT NULL THEN
3121         IGS_EN_GEN_009.ENRP_INS_AWARD_AIM (
3122          p_person_id => NEW_REFERENCES.PERSON_ID,
3123          p_course_cd => NEW_REFERENCES.COURSE_CD,
3124          p_version_number => NEW_REFERENCES.VERSION_NUMBER,
3125          p_start_dt       =>nvl( NEW_REFERENCES.COMMENCEMENT_DT,sysdate)
3126          );
3127       END IF;
3128 
3129 
3130      AfterRowInsertUpdate5 ( p_inserting => FALSE,
3131                               p_updating  => TRUE,
3132                               p_deleting  => FALSE);
3133 
3134     ELSIF (p_action = 'DELETE') THEN
3135       -- Call all the procedures related to After Delete.
3136       NULL;
3137     END IF;
3138 
3139     IF (p_action = 'UPDATE') THEN
3140 
3141       l_spa_term_cal_type := igs_en_spa_terms_api.g_spa_term_cal_type;
3142       l_spa_term_sequence_number := igs_en_spa_terms_api.g_spa_term_sequence_number;
3143 
3144       -- Invoke the procedure to check whether to create/update the term record.
3145       enrp_ins_upd_term_rec(p_action);
3146 
3147       -- If an update is happening to the key program.
3148       IF NVL(new_references.key_program,'N') <> NVL(old_references.key_program,'N') THEN
3149 
3150          -- If the program attempt is being set as key.
3151          IF NVL(new_references.key_program,'N') = 'Y' AND NVL(old_references.key_program,'N') = 'N' THEN
3152 
3153             l_flag := FALSE;
3154             IF g_old_key_prg IS NULL THEN
3155                -- Get the old key program into g_old_key_prg global variable.
3156                OPEN cur_get_course_cd_key(new_references.person_id,new_references.course_cd);
3157                FETCH cur_get_course_cd_key INTO g_old_key_prg;
3158                CLOSE cur_get_course_cd_key;
3159                l_flag := TRUE;
3160             END IF;
3161             l_old_key_prg := g_old_key_prg;
3162 
3163             -- Raise the business event.
3164             IGS_EN_WLST_GEN_PROC.wf_inform_stud
3165                (p_person_id => new_references.person_id,
3166                 p_program_cd => new_references.course_cd,
3167                 p_version_number => new_references.version_number,
3168                 p_program_attempt_status => new_references.course_attempt_status,
3169                 p_org_id => new_references.org_id,
3170                 p_old_key_program => g_old_key_prg,
3171                 p_old_prim_program => NULL,
3172                 p_load_cal_type => l_spa_term_cal_type,
3173                 p_load_ci_seq_num => l_spa_term_sequence_number
3174                );
3175 
3176             -- Resetting the global variable.
3177             IF l_flag = TRUE THEN
3178                g_old_key_prg := '*';
3179             ELSE
3180                g_old_key_prg := NULL;
3181             END IF;
3182 
3183          -- The program attempt is being modified to not to be the key any longer then set the
3184          -- value of program code in the global variable g_old_key_prg.
3185          ELSE
3186             IF g_old_key_prg = '*' THEN
3187                g_old_key_prg := NULL;
3188             ELSE
3189                g_old_key_prg := new_references.course_cd;
3190                l_old_key_prg := g_old_key_prg;
3191             END IF;
3192          END IF;
3193 
3194        igf_aw_coa_gen.ins_coa_todo(
3195                     p_person_id => new_references.person_id ,
3196  		            p_calling_module => 'IGSEI24B',
3197                     p_program_code => new_references.course_cd,
3198                     p_version_number=> new_references.version_number) ;
3199 
3200       END IF;
3201 
3202       -- If an update is happening to the primary program type column.
3203       IF NVL(new_references.primary_program_type,'SECONDARY') <> NVL(old_references.primary_program_type,'SECONDARY') THEN
3204 
3205          -- Get the Program Type/Career for the program version.
3206          OPEN cur_get_prog_type(new_references.course_cd,new_references.version_number);
3207          FETCH cur_get_prog_type INTO l_prog_type;
3208          CLOSE cur_get_prog_type;
3209 
3210          IF g_primary_prg_rec_count IS NULL THEN
3211             g_primary_prg_rec_count := 0;
3212          END IF;
3213 
3214          -- If the program attempt is being set as Primary.
3215          IF NVL(new_references.primary_program_type,'SECONDARY') = 'PRIMARY' AND
3216             NVL(old_references.primary_program_type,'SECONDARY') = 'SECONDARY' THEN
3217 
3218             l_old_prim_prog_cd := NULL;
3219 
3220             -- Identify the old primary program by looping through the pl/sql table.
3221             FOR i IN 1..g_primary_prg_rec_count LOOP
3222                 IF g_primary_prg_rec.exists(i) THEN
3223                    IF g_primary_prg_rec(i).career = l_prog_type THEN
3224                       l_old_prim_prog_cd := g_primary_prg_rec(i).program_cd;
3225                    END IF;
3226                 END IF;
3227             END LOOP;
3228 
3229             l_flag := FALSE;
3230             -- If no matching record is found.
3231             IF l_old_prim_prog_cd IS NULL THEN
3232                -- Get the old primary program.
3233                OPEN cur_get_course_cd_prim(new_references.person_id,new_references.course_cd,new_references.version_number,l_prog_type);
3234                FETCH cur_get_course_cd_prim INTO l_old_prim_prog_cd;
3235                CLOSE cur_get_course_cd_prim;
3236                l_flag := TRUE;
3237             END IF;
3238 
3239             -- Raise the business event.
3240             IGS_EN_WLST_GEN_PROC.wf_inform_stud
3241                (p_person_id => new_references.person_id,
3242                 p_program_cd => new_references.course_cd,
3243                 p_version_number => new_references.version_number,
3244                 p_program_attempt_status => new_references.course_attempt_status,
3245                 p_org_id => new_references.org_id,
3246                 p_old_key_program => l_old_key_prg,
3247                 p_old_prim_program => l_old_prim_prog_cd,
3248                 p_load_cal_type => l_spa_term_cal_type,
3249                 p_load_ci_seq_num => l_spa_term_sequence_number
3250                );
3251 
3252            IF l_flag = TRUE THEN
3253               g_sec_to_prim_first := TRUE;
3254            ELSE
3255 
3256               FOR i IN 1..g_primary_prg_rec_count LOOP
3257                 IF g_primary_prg_rec.exists(i) THEN
3258                    IF g_primary_prg_rec(i).career = l_prog_type THEN
3259                       g_primary_prg_rec.delete(i);
3260                    END IF;
3261                 END IF;
3262               END LOOP;
3263 
3264            END IF;
3265 
3266          -- If the program attempt is being modified to not to be primary any longer then store the
3267          -- value of the program code in the global pl/sql table g_primary_prg_rec.
3268          ELSE
3269 
3270                IF g_sec_to_prim_first = TRUE THEN
3271                   g_sec_to_prim_first := FALSE;
3272                ELSE
3273                   g_primary_prg_rec_count := g_primary_prg_rec_count + 1;
3274                   g_primary_prg_rec(g_primary_prg_rec_count).career := l_prog_type;
3275                   g_primary_prg_rec(g_primary_prg_rec_count).program_cd := new_references.course_cd;
3276                END IF;
3277 
3278          END IF;
3279 
3280       END IF;
3281 
3282     END IF;
3283 
3284 -- check to ensure that course attempt status is never null
3285              IF (p_action = 'UPDATE') THEN
3286                IF new_references.course_attempt_status IS NULL THEN
3287                       Fnd_Message.Set_Name ('IGS','IGS_GE_INVALID_VALUE');
3288                       IGS_GE_MSG_STACK.ADD;
3289                       App_Exception.Raise_Exception;
3290                END IF;
3291             END IF;
3292 
3293 	     IF p_action = 'INSERT' AND NVL(new_references.key_program,'N') = 'Y' THEN
3294                igf_aw_coa_gen.ins_coa_todo(
3295                         p_person_id => new_references.person_id ,
3296                         p_calling_module => 'IGSEI24B',
3297                         p_program_code => new_references.course_cd,
3298                         p_version_number=> new_references.version_number) ;
3299 	     END IF;
3300 
3301 	     IF p_action = 'DELETE' AND NVL(old_references.key_program,'N') = 'Y' THEN
3302               igf_aw_coa_gen. ins_coa_todo(
3303                     p_person_id => old_references.person_id ,
3304  		    p_calling_module => 'IGSEI24B_D',
3305                     p_program_code => old_references.course_cd,
3306                     p_version_number=> old_references.version_number) ;
3307 	      END IF;
3308 
3309      --bmerugu added for build 319
3310      IF (p_action='INSERT' OR p_action='UPDATE') THEN
3311 	IF (NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N')='Y') THEN
3312 	   IF (NVL(new_references.primary_program_type,'SECONDARY')='PRIMARY'  AND
3313 		new_references.student_confirmed_ind='Y') THEN
3314 	      BEGIN
3315 		 -- Get the Program Type/Career for the program version.
3316 		 OPEN cur_get_prog_type(new_references.course_cd,new_references.version_number);
3317 		 FETCH cur_get_prog_type INTO l_prog_type;
3318 		 CLOSE cur_get_prog_type;
3319 		 FOR cur_pattempts_rec IN cur_pattempts(new_references.person_id,l_prog_type) LOOP
3320 			FOR cur_sua_uooid_rec IN cur_sua_uooid(cur_pattempts_rec.person_id,cur_pattempts_rec.course_cd) LOOP
3321 				--call to delete the unit attemps
3322 				l_delflag := IGS_EN_FUTURE_DT_TRANS.del_sua_for_reopen(cur_pattempts_rec.person_id,
3323 								  cur_pattempts_rec.course_cd,
3324 								  cur_sua_uooid_rec.uoo_id);
3325 			END LOOP;
3326 		 END LOOP;
3327 	      END;
3328 	   END IF; -- end of check if current program is primary
3329 	END IF; -- end of career_mode check
3330      END IF; -- end of p_action check
3331 
3332 
3333     /**********************************************************************************************************/
3334 
3335     /* Please don't add any code after the call to IGS_EN_CAREER_MODEL.SCA_TBH_AFTER_DML as this procedure    */
3336     /* recursively calls update_row resetting the package variable new_references which might result in some  */
3337     /* unexpected behaviour. So, add any new code before this call.                                           */
3338 
3339     /**********************************************************************************************************/
3340 
3341      AFTER_DML_RECURSIVE_CALLS(p_old_references         => old_references,
3342                                p_new_references         => new_references,
3343                                p_action                 => p_action,
3344                                p_skip_before_after_dml  => IGS_EN_STDNT_PS_ATT_PKG.skip_before_after_dml);
3345 
3346   END After_DML;
3347 
3348 
3349 
3350 PROCEDURE INSERT_ROW (
3351   X_ROWID IN OUT NOCOPY VARCHAR2,
3352   X_ORG_ID IN NUMBER,
3353   X_PERSON_ID IN NUMBER,
3354   X_COURSE_CD IN VARCHAR2,
3355   X_ADVANCED_STANDING_IND IN VARCHAR2,
3356   X_FEE_CAT IN VARCHAR2,
3357   X_CORRESPONDENCE_CAT IN VARCHAR2,
3358   X_SELF_HELP_GROUP_IND IN VARCHAR2,
3359   X_LOGICAL_DELETE_DT IN DATE,
3360   X_ADM_ADMISSION_APPL_NUMBER IN NUMBER,
3361   X_ADM_NOMINATED_COURSE_CD IN VARCHAR2,
3362   X_ADM_SEQUENCE_NUMBER IN NUMBER,
3363   X_VERSION_NUMBER IN NUMBER,
3364   X_CAL_TYPE IN VARCHAR2,
3365   X_LOCATION_CD IN VARCHAR2,
3366   X_ATTENDANCE_MODE IN VARCHAR2,
3367   X_ATTENDANCE_TYPE IN VARCHAR2,
3368   X_COO_ID IN NUMBER,
3369   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
3370   X_COMMENCEMENT_DT IN DATE,
3371   X_COURSE_ATTEMPT_STATUS IN VARCHAR2,
3372   X_PROGRESSION_STATUS IN VARCHAR2,
3373   X_DERIVED_ATT_TYPE IN VARCHAR2,
3374   X_DERIVED_ATT_MODE IN VARCHAR2,
3375   X_PROVISIONAL_IND IN VARCHAR2,
3376   X_DISCONTINUED_DT IN DATE,
3377   X_DISCONTINUATION_REASON_CD IN VARCHAR2,
3378   X_LAPSED_DT IN DATE,
3379   X_FUNDING_SOURCE IN VARCHAR2,
3380   X_EXAM_LOCATION_CD IN VARCHAR2,
3381   X_DERIVED_COMPLETION_YR IN NUMBER,
3382   X_DERIVED_COMPLETION_PERD IN VARCHAR2,
3383   X_NOMINATED_COMPLETION_YR IN NUMBER,
3384   X_NOMINATED_COMPLETION_PERD IN VARCHAR2,
3385   X_RULE_CHECK_IND IN VARCHAR2,
3386   X_WAIVE_OPTION_CHECK_IND IN VARCHAR2,
3387   X_LAST_RULE_CHECK_DT IN DATE,
3388   X_PUBLISH_OUTCOMES_IND IN VARCHAR2,
3389   X_COURSE_RQRMNT_COMPLETE_IND IN VARCHAR2,
3390   X_COURSE_RQRMNTS_COMPLETE_DT IN DATE,
3391   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
3392   X_OVERRIDE_TIME_LIMITATION IN NUMBER,
3393   X_MODE IN VARCHAR2 ,
3394   X_LAST_DATE_OF_ATTENDANCE IN DATE,
3395   X_DROPPED_BY IN VARCHAR2,
3396   X_IGS_PR_CLASS_STD_ID IN NUMBER,
3397   X_PRIMARY_PROGRAM_TYPE IN VARCHAR2,
3398   X_PRIMARY_PROG_TYPE_SOURCE IN VARCHAR2,
3399   X_CATALOG_CAL_TYPE IN VARCHAR2,
3400   X_CATALOG_SEQ_NUM IN NUMBER,
3401   X_KEY_PROGRAM IN VARCHAR2,
3402   X_MANUAL_OVR_CMPL_DT_IND IN VARCHAR2,
3403   X_OVERRIDE_CMPL_DT       IN DATE    ,
3404   X_ATTRIBUTE_CATEGORY IN VARCHAR2,
3405   X_ATTRIBUTE1 IN VARCHAR2,
3406   X_ATTRIBUTE2 IN VARCHAR2,
3407   X_ATTRIBUTE3 IN VARCHAR2,
3408   X_ATTRIBUTE4 IN VARCHAR2,
3409   X_ATTRIBUTE5 IN VARCHAR2,
3410   X_ATTRIBUTE6 IN VARCHAR2,
3411   X_ATTRIBUTE7 IN VARCHAR2,
3412   X_ATTRIBUTE8 IN VARCHAR2,
3413   X_ATTRIBUTE9 IN VARCHAR2,
3414   X_ATTRIBUTE10 IN VARCHAR2,
3415   X_ATTRIBUTE11 IN VARCHAR2,
3416   X_ATTRIBUTE12 IN VARCHAR2,
3417   X_ATTRIBUTE13 IN VARCHAR2,
3418   X_ATTRIBUTE14 IN VARCHAR2,
3419   X_ATTRIBUTE15 IN VARCHAR2,
3420   X_ATTRIBUTE16 IN VARCHAR2,
3421   X_ATTRIBUTE17 IN VARCHAR2,
3422   X_ATTRIBUTE18 IN VARCHAR2,
3423   X_ATTRIBUTE19 IN VARCHAR2,
3424   x_ATTRIBUTE20 IN VARCHAR2,
3425   X_FUTURE_DATED_TRANS_FLAG IN VARCHAR2
3426   ) AS
3427   /*--------------------------------------------------------------------------------------------
3428   --Change History
3429   --Who                 When                    What
3430   --sbaliga             13-feb-2002             Assigned igs_ge_gen_003.get_org_id to x_org_id
3431   --                                            in call to before_dml as part of SWCR006 build.
3432   -----------------------------------------------------------------------------------------------*/
3433   CURSOR C IS
3434       SELECT ROWID FROM IGS_EN_STDNT_PS_ATT_ALL
3435       WHERE PERSON_ID = X_PERSON_ID
3436       AND COURSE_CD = X_COURSE_CD;
3437     X_LAST_UPDATE_DATE DATE;
3438     X_LAST_UPDATED_BY NUMBER;
3439     X_LAST_UPDATE_LOGIN NUMBER;
3440     X_REQUEST_ID NUMBER;
3441     X_PROGRAM_ID NUMBER;
3442     X_PROGRAM_APPLICATION_ID NUMBER;
3443     X_PROGRAM_UPDATE_DATE DATE;
3444 BEGIN
3445   X_LAST_UPDATE_DATE := SYSDATE;
3446   IF(X_MODE = 'I') THEN
3447     X_LAST_UPDATED_BY := 1;
3448     X_LAST_UPDATE_LOGIN := 0;
3449   ELSIF (X_MODE IN ('R', 'S')) THEN
3450     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
3451     IF X_LAST_UPDATED_BY IS NULL THEN
3452       X_LAST_UPDATED_BY := -1;
3453     END IF;
3454     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
3455     IF X_LAST_UPDATE_LOGIN IS NULL THEN
3456       X_LAST_UPDATE_LOGIN := -1;
3457     END IF;
3458     X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3459     X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3460     X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3461     IF (X_REQUEST_ID = -1) THEN
3462        X_REQUEST_ID := NULL;
3463        X_PROGRAM_ID := NULL;
3464        X_PROGRAM_APPLICATION_ID := NULL;
3465        X_PROGRAM_UPDATE_DATE := NULL;
3466     ELSE
3467        X_PROGRAM_UPDATE_DATE := SYSDATE;
3468     END IF;
3469   ELSE
3470     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
3471     IGS_GE_MSG_STACK.ADD;
3472     app_exception.raise_exception;
3473   END IF;
3474 
3475 
3476   Before_DML (
3477     p_action => 'INSERT',
3478     x_rowid =>   X_ROWID,
3479     x_org_id => igs_ge_gen_003.get_org_id,
3480     x_person_id => X_PERSON_ID,
3481     x_course_cd => X_COURSE_CD,
3482     x_advanced_standing_ind => NVL(X_ADVANCED_STANDING_IND,'N'),
3483     x_fee_cat => X_FEE_CAT,
3484     x_correspondence_cat => X_CORRESPONDENCE_CAT,
3485     x_self_help_group_ind => NVL(X_SELF_HELP_GROUP_IND,'N'),
3486     x_logical_delete_dt => X_LOGICAL_DELETE_DT,
3487     x_adm_admission_appl_number => X_ADM_ADMISSION_APPL_NUMBER,
3488     x_adm_nominated_course_cd => X_ADM_NOMINATED_COURSE_CD,
3489     x_adm_sequence_number => X_ADM_SEQUENCE_NUMBER,
3490     x_version_number => X_VERSION_NUMBER,
3491     x_cal_type => X_CAL_TYPE,
3492     x_location_cd => X_LOCATION_CD,
3493     x_attendance_mode => X_ATTENDANCE_MODE,
3494     x_attendance_type => X_ATTENDANCE_TYPE,
3495     x_coo_id => X_COO_ID,
3496     x_student_confirmed_ind => NVL(X_STUDENT_CONFIRMED_IND,'N'),
3497     x_commencement_dt => X_COMMENCEMENT_DT,
3498     x_course_attempt_status => X_COURSE_ATTEMPT_STATUS,
3499     x_progression_status => NVL(X_PROGRESSION_STATUS,'GOODSTAND'),
3500     x_derived_att_type => X_DERIVED_ATT_TYPE,
3501     x_derived_att_mode => X_DERIVED_ATT_MODE,
3502     x_provisional_ind => NVL(X_PROVISIONAL_IND,'N'),
3503     x_discontinued_dt => X_DISCONTINUED_DT,
3504     x_discontinuation_reason_cd => X_DISCONTINUATION_REASON_CD,
3505     x_lapsed_dt => X_LAPSED_DT,
3506     x_funding_source => X_FUNDING_SOURCE,
3507     x_exam_location_cd => X_EXAM_LOCATION_CD,
3508     x_derived_completion_yr => X_DERIVED_COMPLETION_YR,
3509     x_derived_completion_perd => X_DERIVED_COMPLETION_PERD,
3510     x_nominated_completion_yr => X_NOMINATED_COMPLETION_YR,
3511     x_nominated_completion_perd => X_NOMINATED_COMPLETION_PERD,
3512     x_rule_check_ind => NVL(X_RULE_CHECK_IND,'Y'),
3513     x_waive_option_check_ind => NVL(X_WAIVE_OPTION_CHECK_IND,'N'),
3514     x_last_rule_check_dt => X_LAST_RULE_CHECK_DT,
3515     x_publish_outcomes_ind => NVL(X_PUBLISH_OUTCOMES_IND,'Y'),
3516     x_course_rqrmnt_complete_ind => NVL(X_COURSE_RQRMNT_COMPLETE_IND,'N'),
3517     x_course_rqrmnts_complete_dt => X_COURSE_RQRMNTS_COMPLETE_DT,
3518     x_s_completed_source_type => NVL(X_S_COMPLETED_SOURCE_TYPE,'MANUAL'),
3519     x_override_time_limitation => X_OVERRIDE_TIME_LIMITATION,
3520     x_creation_date => X_LAST_UPDATE_DATE,
3521     x_created_by => X_LAST_UPDATED_BY,
3522     x_last_update_date => X_LAST_UPDATE_DATE,
3523     x_last_updated_by => X_LAST_UPDATED_BY,
3524     x_last_update_login => X_LAST_UPDATE_LOGIN,
3525     x_last_date_of_attendance =>X_LAST_DATE_OF_ATTENDANCE,
3526     x_dropped_by => X_DROPPED_BY,
3527     X_IGS_PR_CLASS_STD_ID => X_IGS_PR_CLASS_STD_ID,
3528     x_primary_program_type => X_PRIMARY_PROGRAM_TYPE,
3529     x_primary_prog_type_source => X_PRIMARY_PROG_TYPE_SOURCE,
3530     x_catalog_cal_type => X_CATALOG_CAL_TYPE,
3531     x_catalog_seq_num => X_CATALOG_SEQ_NUM,
3532     x_key_program => NVL(X_KEY_PROGRAM,'N'),
3533     x_manual_ovr_cmpl_dt_ind => X_MANUAL_OVR_CMPL_DT_IND,
3534     x_override_cmpl_dt       => X_OVERRIDE_CMPL_DT,
3535    x_attribute_category=>X_ATTRIBUTE_CATEGORY,
3536    x_future_dated_trans_flag => NVL(X_FUTURE_DATED_TRANS_FLAG,'N'),
3537    x_attribute1=>X_ATTRIBUTE1,
3538    x_attribute2=>X_ATTRIBUTE2,
3539    x_attribute3=>X_ATTRIBUTE3,
3540    x_attribute4=>X_ATTRIBUTE4,
3541    x_attribute5=>X_ATTRIBUTE5,
3542    x_attribute6=>X_ATTRIBUTE6,
3543    x_attribute7=>X_ATTRIBUTE7,
3544    x_attribute8=>X_ATTRIBUTE8,
3545    x_attribute9=>X_ATTRIBUTE9,
3546    x_attribute10=>X_ATTRIBUTE10,
3547    x_attribute11=>X_ATTRIBUTE11,
3548    x_attribute12=>X_ATTRIBUTE12,
3549    x_attribute13=>X_ATTRIBUTE13,
3550    x_attribute14=>X_ATTRIBUTE14,
3551    x_attribute15=>X_ATTRIBUTE15,
3552    x_attribute16=>X_ATTRIBUTE16,
3553    x_attribute17=>X_ATTRIBUTE17,
3554    x_attribute18=>X_ATTRIBUTE18,
3555    x_attribute19=>X_ATTRIBUTE19,
3556    x_attribute20=>X_ATTRIBUTE20
3557   );
3558 
3559 
3560   IF (x_mode = 'S') THEN
3561     igs_sc_gen_001.set_ctx('R');
3562   END IF;
3563   INSERT INTO IGS_EN_STDNT_PS_ATT_ALL (
3564     org_id,
3565     ADVANCED_STANDING_IND,
3566     FEE_CAT,
3567     CORRESPONDENCE_CAT,
3568     SELF_HELP_GROUP_IND,
3569     LOGICAL_DELETE_DT,
3570     ADM_ADMISSION_APPL_NUMBER,
3571     ADM_NOMINATED_COURSE_CD,
3572     ADM_SEQUENCE_NUMBER,
3573     PERSON_ID,
3574     COURSE_CD,
3575     VERSION_NUMBER,
3576     CAL_TYPE,
3577     LOCATION_CD,
3578     ATTENDANCE_MODE,
3579     ATTENDANCE_TYPE,
3580     COO_ID,
3581     STUDENT_CONFIRMED_IND,
3582     COMMENCEMENT_DT,
3583     COURSE_ATTEMPT_STATUS,
3584     PROGRESSION_STATUS,
3585     DERIVED_ATT_TYPE,
3586     DERIVED_ATT_MODE,
3587     PROVISIONAL_IND,
3588     DISCONTINUED_DT,
3589     DISCONTINUATION_REASON_CD,
3590     LAPSED_DT,
3591     FUNDING_SOURCE,
3592     EXAM_LOCATION_CD,
3593     DERIVED_COMPLETION_YR,
3594     DERIVED_COMPLETION_PERD,
3595     NOMINATED_COMPLETION_YR,
3596     NOMINATED_COMPLETION_PERD,
3597     RULE_CHECK_IND,
3598     WAIVE_OPTION_CHECK_IND,
3599     LAST_RULE_CHECK_DT,
3600     PUBLISH_OUTCOMES_IND,
3601     COURSE_RQRMNT_COMPLETE_IND,
3602     COURSE_RQRMNTS_COMPLETE_DT,
3603     S_COMPLETED_SOURCE_TYPE,
3604     OVERRIDE_TIME_LIMITATION,
3605     CREATION_DATE,
3606     CREATED_BY,
3607     LAST_UPDATE_DATE,
3608     LAST_UPDATED_BY,
3609     LAST_UPDATE_LOGIN,
3610     REQUEST_ID,
3611     PROGRAM_ID,
3612     PROGRAM_APPLICATION_ID,
3613     PROGRAM_UPDATE_DATE,
3614     LAST_DATE_OF_ATTENDANCE,
3615     DROPPED_BY,
3616     IGS_PR_CLASS_STD_ID,
3617     PRIMARY_PROGRAM_TYPE,
3618     PRIMARY_PROG_TYPE_SOURCE,
3619     CATALOG_CAL_TYPE,
3620     CATALOG_SEQ_NUM,
3621     KEY_PROGRAM,
3622     MANUAL_OVR_CMPL_DT_IND,
3623     OVERRIDE_CMPL_DT,
3624     ATTRIBUTE_CATEGORY,
3625     FUTURE_DATED_TRANS_FLAG,
3626     ATTRIBUTE1,
3627     ATTRIBUTE2,
3628     ATTRIBUTE3,
3629     ATTRIBUTE4,
3630     ATTRIBUTE5,
3631     ATTRIBUTE6,
3632     ATTRIBUTE7,
3633     ATTRIBUTE8,
3634     ATTRIBUTE9,
3635     ATTRIBUTE10,
3636     ATTRIBUTE11,
3637     ATTRIBUTE12,
3638     ATTRIBUTE13,
3639     ATTRIBUTE14,
3640     ATTRIBUTE15,
3641     ATTRIBUTE16,
3642     ATTRIBUTE17,
3643     ATTRIBUTE18,
3644     ATTRIBUTE19,
3645     ATTRIBUTE20
3646     ) VALUES (
3647     NEW_REFERENCES.ORG_ID,
3648     NEW_REFERENCES.ADVANCED_STANDING_IND,
3649     NEW_REFERENCES.FEE_CAT,
3650     NEW_REFERENCES.CORRESPONDENCE_CAT,
3651     NEW_REFERENCES.SELF_HELP_GROUP_IND,
3652     NEW_REFERENCES.LOGICAL_DELETE_DT,
3653     NEW_REFERENCES.ADM_ADMISSION_APPL_NUMBER,
3654     NEW_REFERENCES.ADM_NOMINATED_COURSE_CD,
3655     NEW_REFERENCES.ADM_SEQUENCE_NUMBER,
3656     NEW_REFERENCES.PERSON_ID,
3657     NEW_REFERENCES.COURSE_CD,
3658     NEW_REFERENCES.VERSION_NUMBER,
3659     NEW_REFERENCES.CAL_TYPE,
3660     NEW_REFERENCES.LOCATION_CD,
3661     NEW_REFERENCES.ATTENDANCE_MODE,
3662     NEW_REFERENCES.ATTENDANCE_TYPE,
3663     NEW_REFERENCES.COO_ID,
3664     NEW_REFERENCES.STUDENT_CONFIRMED_IND,
3665     NEW_REFERENCES.COMMENCEMENT_DT,
3666     NEW_REFERENCES.COURSE_ATTEMPT_STATUS,
3667     NEW_REFERENCES.PROGRESSION_STATUS,
3668     NEW_REFERENCES.DERIVED_ATT_TYPE,
3669     NEW_REFERENCES.DERIVED_ATT_MODE,
3670     NEW_REFERENCES.PROVISIONAL_IND,
3671     NEW_REFERENCES.DISCONTINUED_DT,
3672     NEW_REFERENCES.DISCONTINUATION_REASON_CD,
3673     NEW_REFERENCES.LAPSED_DT,
3674     NEW_REFERENCES.FUNDING_SOURCE,
3675     NEW_REFERENCES.EXAM_LOCATION_CD,
3676     NEW_REFERENCES.DERIVED_COMPLETION_YR,
3677     NEW_REFERENCES.DERIVED_COMPLETION_PERD,
3678     NEW_REFERENCES.NOMINATED_COMPLETION_YR,
3679     NEW_REFERENCES.NOMINATED_COMPLETION_PERD,
3680     NEW_REFERENCES.RULE_CHECK_IND,
3681     NEW_REFERENCES.WAIVE_OPTION_CHECK_IND,
3682     NEW_REFERENCES.LAST_RULE_CHECK_DT,
3683     NEW_REFERENCES.PUBLISH_OUTCOMES_IND,
3684     NEW_REFERENCES.COURSE_RQRMNT_COMPLETE_IND,
3685     NEW_REFERENCES.COURSE_RQRMNTS_COMPLETE_DT,
3686     NEW_REFERENCES.S_COMPLETED_SOURCE_TYPE,
3687     NEW_REFERENCES.OVERRIDE_TIME_LIMITATION,
3688     X_LAST_UPDATE_DATE,
3689     X_LAST_UPDATED_BY,
3690     X_LAST_UPDATE_DATE,
3691     X_LAST_UPDATED_BY,
3692     X_LAST_UPDATE_LOGIN,
3693     X_REQUEST_ID,
3694     X_PROGRAM_ID,
3695     X_PROGRAM_APPLICATION_ID,
3696     X_PROGRAM_UPDATE_DATE,
3697     NEW_REFERENCES.LAST_DATE_OF_ATTENDANCE,
3698     NEW_REFERENCES.DROPPED_BY,
3699     NEW_REFERENCES.IGS_PR_CLASS_STD_ID,
3700     NEW_REFERENCES.PRIMARY_PROGRAM_TYPE,
3701     NEW_REFERENCES.PRIMARY_PROG_TYPE_SOURCE,
3702     NEW_REFERENCES.CATALOG_CAL_TYPE,
3703     NEW_REFERENCES.CATALOG_SEQ_NUM,
3704     NEW_REFERENCES.KEY_PROGRAM,
3705     NEW_REFERENCES.MANUAL_OVR_CMPL_DT_IND,
3706     NEW_REFERENCES.OVERRIDE_CMPL_DT,
3707     NEW_REFERENCES.ATTRIBUTE_CATEGORY,
3708     NEW_REFERENCES.FUTURE_DATED_TRANS_FLAG,
3709     NEW_REFERENCES.ATTRIBUTE1,
3710     NEW_REFERENCES.ATTRIBUTE2,
3711     NEW_REFERENCES.ATTRIBUTE3,
3712     NEW_REFERENCES.ATTRIBUTE4,
3713     NEW_REFERENCES.ATTRIBUTE5,
3714     NEW_REFERENCES.ATTRIBUTE6,
3715     NEW_REFERENCES.ATTRIBUTE7,
3716     NEW_REFERENCES.ATTRIBUTE8,
3717     NEW_REFERENCES.ATTRIBUTE9,
3718     NEW_REFERENCES.ATTRIBUTE10,
3719     NEW_REFERENCES.ATTRIBUTE11,
3720     NEW_REFERENCES.ATTRIBUTE12,
3721     NEW_REFERENCES.ATTRIBUTE13,
3722     NEW_REFERENCES.ATTRIBUTE14,
3723     NEW_REFERENCES.ATTRIBUTE15,
3724     NEW_REFERENCES.ATTRIBUTE16,
3725     NEW_REFERENCES.ATTRIBUTE17,
3726     NEW_REFERENCES.ATTRIBUTE18,
3727     NEW_REFERENCES.ATTRIBUTE19,
3728     NEW_REFERENCES.ATTRIBUTE20
3729   );
3730  IF (x_mode = 'S') THEN
3731     igs_sc_gen_001.unset_ctx('R');
3732   END IF;
3733 
3734 
3735   OPEN c;
3736   FETCH c INTO X_ROWID;
3737   IF (c%NOTFOUND) THEN
3738     CLOSE c;
3739     RAISE NO_DATA_FOUND;
3740   END IF;
3741   CLOSE c;
3742 
3743 
3744    After_DML (
3745             p_action     => 'INSERT',
3746             x_rowid      =>  X_ROWID
3747   );
3748 
3749 EXCEPTION
3750   WHEN OTHERS THEN
3751     IF (SQLCODE IN (-28115, -28113, -28111)) THEN
3752       fnd_message.set_name ('IGS', 'IGS_SC_POLICY_EXCEPTION');
3753       fnd_message.set_token ('ERR_CD', SQLCODE);
3754       igs_ge_msg_stack.add;
3755       igs_sc_gen_001.unset_ctx('R');
3756       app_exception.raise_exception;
3757     ELSE
3758       igs_sc_gen_001.unset_ctx('R');
3759       RAISE;
3760     END IF;
3761 
3762 END INSERT_ROW;
3763 
3764 PROCEDURE LOCK_ROW (
3765   X_ROWID IN VARCHAR2,
3766   X_PERSON_ID IN NUMBER,
3767   X_COURSE_CD IN VARCHAR2,
3768   X_ADVANCED_STANDING_IND IN VARCHAR2,
3769   X_FEE_CAT IN VARCHAR2,
3770   X_CORRESPONDENCE_CAT IN VARCHAR2,
3771   X_SELF_HELP_GROUP_IND IN VARCHAR2,
3772   X_LOGICAL_DELETE_DT IN DATE,
3773   X_ADM_ADMISSION_APPL_NUMBER IN NUMBER,
3774   X_ADM_NOMINATED_COURSE_CD IN VARCHAR2,
3775   X_ADM_SEQUENCE_NUMBER IN NUMBER,
3776   X_VERSION_NUMBER IN NUMBER,
3777   X_CAL_TYPE IN VARCHAR2,
3778   X_LOCATION_CD IN VARCHAR2,
3779   X_ATTENDANCE_MODE IN VARCHAR2,
3780   X_ATTENDANCE_TYPE IN VARCHAR2,
3781   X_COO_ID IN NUMBER,
3782   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
3783   X_COMMENCEMENT_DT IN DATE,
3784   X_COURSE_ATTEMPT_STATUS IN VARCHAR2,
3785   X_PROGRESSION_STATUS IN VARCHAR2,
3786   X_DERIVED_ATT_TYPE IN VARCHAR2,
3787   X_DERIVED_ATT_MODE IN VARCHAR2,
3788   X_PROVISIONAL_IND IN VARCHAR2,
3789   X_DISCONTINUED_DT IN DATE,
3790   X_DISCONTINUATION_REASON_CD IN VARCHAR2,
3791   X_LAPSED_DT IN DATE,
3792   X_FUNDING_SOURCE IN VARCHAR2,
3793   X_EXAM_LOCATION_CD IN VARCHAR2,
3794   X_DERIVED_COMPLETION_YR IN NUMBER,
3795   X_DERIVED_COMPLETION_PERD IN VARCHAR2,
3796   X_NOMINATED_COMPLETION_YR IN NUMBER,
3797   X_NOMINATED_COMPLETION_PERD IN VARCHAR2,
3798   X_RULE_CHECK_IND IN VARCHAR2,
3799   X_WAIVE_OPTION_CHECK_IND IN VARCHAR2,
3800   X_LAST_RULE_CHECK_DT IN DATE,
3801   X_PUBLISH_OUTCOMES_IND IN VARCHAR2,
3802   X_COURSE_RQRMNT_COMPLETE_IND IN VARCHAR2,
3803   X_COURSE_RQRMNTS_COMPLETE_DT IN DATE,
3804   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
3805   X_OVERRIDE_TIME_LIMITATION IN NUMBER,
3806   X_LAST_DATE_OF_ATTENDANCE IN DATE,
3807   X_DROPPED_BY IN VARCHAR2,
3808   X_IGS_PR_CLASS_STD_ID IN NUMBER,
3809   X_PRIMARY_PROGRAM_TYPE IN VARCHAR2,
3810   X_PRIMARY_PROG_TYPE_SOURCE IN VARCHAR2,
3811   X_CATALOG_CAL_TYPE IN VARCHAR2,
3812   X_CATALOG_SEQ_NUM IN NUMBER ,
3813   X_KEY_PROGRAM IN VARCHAR2,
3814   X_MANUAL_OVR_CMPL_DT_IND IN VARCHAR2,
3815   X_OVERRIDE_CMPL_DT IN DATE,
3816   X_ATTRIBUTE_CATEGORY IN VARCHAR2,
3817   X_ATTRIBUTE1 IN VARCHAR2,
3818   X_ATTRIBUTE2 IN VARCHAR2,
3819   X_ATTRIBUTE3 IN VARCHAR2,
3820   X_ATTRIBUTE4 IN VARCHAR2,
3821   X_ATTRIBUTE5 IN VARCHAR2,
3822   X_ATTRIBUTE6 IN VARCHAR2,
3823   X_ATTRIBUTE7 IN VARCHAR2,
3824   X_ATTRIBUTE8 IN VARCHAR2,
3825   X_ATTRIBUTE9 IN VARCHAR2,
3826   X_ATTRIBUTE10 IN VARCHAR2,
3827   X_ATTRIBUTE11 IN VARCHAR2,
3828   X_ATTRIBUTE12 IN VARCHAR2,
3829   X_ATTRIBUTE13 IN VARCHAR2,
3830   X_ATTRIBUTE14 IN VARCHAR2,
3831   X_ATTRIBUTE15 IN VARCHAR2,
3832   X_ATTRIBUTE16 IN VARCHAR2,
3833   X_ATTRIBUTE17 IN VARCHAR2,
3834   X_ATTRIBUTE18 IN VARCHAR2,
3835   X_ATTRIBUTE19 IN VARCHAR2,
3836   x_ATTRIBUTE20 IN VARCHAR2,
3837   X_FUTURE_DATED_TRANS_FLAG IN VARCHAR2
3838 ) AS
3839   CURSOR c1 IS SELECT
3840       org_id,
3841       ADVANCED_STANDING_IND,
3842       FEE_CAT,
3843       CORRESPONDENCE_CAT,
3844       SELF_HELP_GROUP_IND,
3845       LOGICAL_DELETE_DT,
3846       ADM_ADMISSION_APPL_NUMBER,
3847       ADM_NOMINATED_COURSE_CD,
3848       ADM_SEQUENCE_NUMBER,
3849       VERSION_NUMBER,
3850       CAL_TYPE,
3851       LOCATION_CD,
3852       ATTENDANCE_MODE,
3853       ATTENDANCE_TYPE,
3854       COO_ID,
3855       STUDENT_CONFIRMED_IND,
3856       COMMENCEMENT_DT,
3857       COURSE_ATTEMPT_STATUS,
3858       PROGRESSION_STATUS,
3859       DERIVED_ATT_TYPE,
3860       DERIVED_ATT_MODE,
3861       PROVISIONAL_IND,
3862       DISCONTINUED_DT,
3863       DISCONTINUATION_REASON_CD,
3864       LAPSED_DT,
3865       FUNDING_SOURCE,
3866       EXAM_LOCATION_CD,
3867       DERIVED_COMPLETION_YR,
3868       DERIVED_COMPLETION_PERD,
3869       NOMINATED_COMPLETION_YR,
3870       NOMINATED_COMPLETION_PERD,
3871       RULE_CHECK_IND,
3872       WAIVE_OPTION_CHECK_IND,
3873       LAST_RULE_CHECK_DT,
3874       PUBLISH_OUTCOMES_IND,
3875       COURSE_RQRMNT_COMPLETE_IND,
3876       COURSE_RQRMNTS_COMPLETE_DT,
3877       S_COMPLETED_SOURCE_TYPE,
3878       OVERRIDE_TIME_LIMITATION,
3879       LAST_DATE_OF_ATTENDANCE,
3880       DROPPED_BY,
3881       IGS_PR_CLASS_STD_ID,
3882       PRIMARY_PROGRAM_TYPE,
3883       PRIMARY_PROG_TYPE_SOURCE,
3884       CATALOG_CAL_TYPE,
3885       CATALOG_SEQ_NUM,
3886       KEY_PROGRAM,
3887       MANUAL_OVR_CMPL_DT_IND,
3888       OVERRIDE_CMPL_DT,
3889       ATTRIBUTE_CATEGORY,
3890       FUTURE_DATED_TRANS_FLAG,
3891       ATTRIBUTE1,
3892       ATTRIBUTE2,
3893       ATTRIBUTE3,
3894       ATTRIBUTE4,
3895       ATTRIBUTE5,
3896       ATTRIBUTE6,
3897       ATTRIBUTE7,
3898       ATTRIBUTE8,
3899       ATTRIBUTE9,
3900       ATTRIBUTE10,
3901       ATTRIBUTE11,
3902       ATTRIBUTE12,
3903       ATTRIBUTE13,
3904       ATTRIBUTE14,
3905       ATTRIBUTE15,
3906       ATTRIBUTE16,
3907       ATTRIBUTE17,
3908       ATTRIBUTE18,
3909       ATTRIBUTE19,
3910       ATTRIBUTE20
3911     FROM IGS_EN_STDNT_PS_ATT_ALL
3912     WHERE ROWID = X_ROWID FOR UPDATE NOWAIT;
3913   tlinfo c1%ROWTYPE;
3914 BEGIN
3915   OPEN c1;
3916   FETCH c1 INTO tlinfo;
3917   IF (c1%NOTFOUND) THEN
3918     CLOSE c1;
3919     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
3920     IGS_GE_MSG_STACK.ADD;
3921     app_exception.raise_exception;
3922     RETURN;
3923   END IF;
3924   CLOSE c1;
3925   IF ( (tlinfo.ADVANCED_STANDING_IND = X_ADVANCED_STANDING_IND)
3926       AND ((tlinfo.FEE_CAT = X_FEE_CAT)
3927            OR ((tlinfo.FEE_CAT IS NULL)
3928                AND (X_FEE_CAT IS NULL)))
3929       AND ((tlinfo.CORRESPONDENCE_CAT = X_CORRESPONDENCE_CAT)
3930            OR ((tlinfo.CORRESPONDENCE_CAT IS NULL)
3931                AND (X_CORRESPONDENCE_CAT IS NULL)))
3932       AND (tlinfo.SELF_HELP_GROUP_IND = X_SELF_HELP_GROUP_IND)
3933       AND ((TRUNC(tlinfo.LOGICAL_DELETE_DT) = TRUNC(X_LOGICAL_DELETE_DT))
3934            OR ((tlinfo.LOGICAL_DELETE_DT IS NULL)
3935                AND (X_LOGICAL_DELETE_DT IS NULL)))
3936       AND ((tlinfo.ADM_ADMISSION_APPL_NUMBER = X_ADM_ADMISSION_APPL_NUMBER)
3937            OR ((tlinfo.ADM_ADMISSION_APPL_NUMBER IS NULL)
3938                AND (X_ADM_ADMISSION_APPL_NUMBER IS NULL)))
3939       AND ((tlinfo.ADM_NOMINATED_COURSE_CD = X_ADM_NOMINATED_COURSE_CD)
3940            OR ((tlinfo.ADM_NOMINATED_COURSE_CD IS NULL)
3941                AND (X_ADM_NOMINATED_COURSE_CD IS NULL)))
3942       AND ((tlinfo.ADM_SEQUENCE_NUMBER = X_ADM_SEQUENCE_NUMBER)
3943            OR ((tlinfo.ADM_SEQUENCE_NUMBER IS NULL)
3944                AND (X_ADM_SEQUENCE_NUMBER IS NULL)))
3945       AND (tlinfo.VERSION_NUMBER = X_VERSION_NUMBER)
3946       AND (tlinfo.CAL_TYPE = X_CAL_TYPE)
3947       AND (tlinfo.LOCATION_CD = X_LOCATION_CD)
3948       AND (tlinfo.ATTENDANCE_MODE = X_ATTENDANCE_MODE)
3949       AND (tlinfo.ATTENDANCE_TYPE = X_ATTENDANCE_TYPE)
3950       AND (tlinfo.COO_ID = X_COO_ID)
3951       AND (tlinfo.STUDENT_CONFIRMED_IND = X_STUDENT_CONFIRMED_IND)
3952       AND ((TRUNC(tlinfo.COMMENCEMENT_DT) = TRUNC(X_COMMENCEMENT_DT))
3953            OR ((tlinfo.COMMENCEMENT_DT IS NULL)
3954                AND (X_COMMENCEMENT_DT IS NULL)))
3955       AND ((tlinfo.COURSE_ATTEMPT_STATUS = X_COURSE_ATTEMPT_STATUS)
3956            OR ((tlinfo.COURSE_ATTEMPT_STATUS IS NULL)
3957                AND (X_COURSE_ATTEMPT_STATUS IS NULL)))
3958       AND ((tlinfo.PROGRESSION_STATUS = X_PROGRESSION_STATUS)
3959            OR ((tlinfo.PROGRESSION_STATUS IS NULL)
3960                AND (X_PROGRESSION_STATUS IS NULL)))
3961       AND ((tlinfo.DERIVED_ATT_TYPE = X_DERIVED_ATT_TYPE)
3962            OR ((tlinfo.DERIVED_ATT_TYPE IS NULL)
3963                AND (X_DERIVED_ATT_TYPE IS NULL)))
3964       AND ((tlinfo.DERIVED_ATT_MODE = X_DERIVED_ATT_MODE)
3965            OR ((tlinfo.DERIVED_ATT_MODE IS NULL)
3966                AND (X_DERIVED_ATT_MODE IS NULL)))
3967       AND (tlinfo.PROVISIONAL_IND = X_PROVISIONAL_IND)
3968       AND ((TRUNC(tlinfo.DISCONTINUED_DT) = TRUNC(X_DISCONTINUED_DT))
3969            OR ((tlinfo.DISCONTINUED_DT IS NULL)
3970                AND (X_DISCONTINUED_DT IS NULL)))
3971       AND ((tlinfo.DISCONTINUATION_REASON_CD = X_DISCONTINUATION_REASON_CD)
3972            OR ((tlinfo.DISCONTINUATION_REASON_CD IS NULL)
3973                AND (X_DISCONTINUATION_REASON_CD IS NULL)))
3974       AND ((TRUNC(tlinfo.LAPSED_DT) = TRUNC(X_LAPSED_DT))
3975            OR ((tlinfo.LAPSED_DT IS NULL)
3976                AND (X_LAPSED_DT IS NULL)))
3977       AND ((tlinfo.FUNDING_SOURCE = X_FUNDING_SOURCE)
3978            OR ((tlinfo.FUNDING_SOURCE IS NULL)
3979                AND (X_FUNDING_SOURCE IS NULL)))
3980       AND ((tlinfo.EXAM_LOCATION_CD = X_EXAM_LOCATION_CD)
3981            OR ((tlinfo.EXAM_LOCATION_CD IS NULL)
3982                AND (X_EXAM_LOCATION_CD IS NULL)))
3983       AND ((tlinfo.DERIVED_COMPLETION_YR = X_DERIVED_COMPLETION_YR)
3984            OR ((tlinfo.DERIVED_COMPLETION_YR IS NULL)
3985                AND (X_DERIVED_COMPLETION_YR IS NULL)))
3986       AND ((tlinfo.DERIVED_COMPLETION_PERD = X_DERIVED_COMPLETION_PERD)
3987            OR ((tlinfo.DERIVED_COMPLETION_PERD IS NULL)
3988                AND (X_DERIVED_COMPLETION_PERD IS NULL)))
3989       AND ((tlinfo.NOMINATED_COMPLETION_YR = X_NOMINATED_COMPLETION_YR)
3990            OR ((tlinfo.NOMINATED_COMPLETION_YR IS NULL)
3991                AND (X_NOMINATED_COMPLETION_YR IS NULL)))
3992       AND ((tlinfo.NOMINATED_COMPLETION_PERD = X_NOMINATED_COMPLETION_PERD)
3993            OR ((tlinfo.NOMINATED_COMPLETION_PERD IS NULL)
3994                AND (X_NOMINATED_COMPLETION_PERD IS NULL)))
3995       AND (tlinfo.RULE_CHECK_IND = X_RULE_CHECK_IND)
3996       AND (tlinfo.WAIVE_OPTION_CHECK_IND = X_WAIVE_OPTION_CHECK_IND)
3997       AND ((TRUNC(tlinfo.LAST_RULE_CHECK_DT) = TRUNC(X_LAST_RULE_CHECK_DT))
3998            OR ((tlinfo.LAST_RULE_CHECK_DT IS NULL)
3999                AND (X_LAST_RULE_CHECK_DT IS NULL)))
4000       AND (tlinfo.PUBLISH_OUTCOMES_IND = X_PUBLISH_OUTCOMES_IND)
4001       AND (tlinfo.COURSE_RQRMNT_COMPLETE_IND = X_COURSE_RQRMNT_COMPLETE_IND)
4002       AND ((TRUNC(tlinfo.COURSE_RQRMNTS_COMPLETE_DT) = TRUNC(X_COURSE_RQRMNTS_COMPLETE_DT))
4003            OR ((tlinfo.COURSE_RQRMNTS_COMPLETE_DT IS NULL)
4004                AND (X_COURSE_RQRMNTS_COMPLETE_DT IS NULL)))
4005       AND ((tlinfo.S_COMPLETED_SOURCE_TYPE = X_S_COMPLETED_SOURCE_TYPE)
4006            OR ((tlinfo.S_COMPLETED_SOURCE_TYPE IS NULL)
4007                AND (X_S_COMPLETED_SOURCE_TYPE IS NULL)))
4008       AND ((tlinfo.OVERRIDE_TIME_LIMITATION = X_OVERRIDE_TIME_LIMITATION)
4009            OR ((tlinfo.OVERRIDE_TIME_LIMITATION IS NULL)
4010                AND (X_OVERRIDE_TIME_LIMITATION IS NULL)))
4011       AND ((TRUNC(tlinfo.LAST_DATE_OF_ATTENDANCE) = TRUNC(X_LAST_DATE_OF_ATTENDANCE))
4012            OR ((tlinfo.LAST_DATE_OF_ATTENDANCE IS NULL)
4013                AND (X_LAST_DATE_OF_ATTENDANCE IS NULL)))
4014       AND ((tlinfo.DROPPED_BY = X_DROPPED_BY)
4015            OR ((tlinfo.DROPPED_BY IS NULL)
4016                AND (X_DROPPED_BY IS NULL)))
4017       AND ((tlinfo.IGS_PR_CLASS_STD_ID = X_IGS_PR_CLASS_STD_ID)
4018            OR ((tlinfo.IGS_PR_CLASS_STD_ID IS NULL)
4019                AND (X_IGS_PR_CLASS_STD_ID IS NULL)))
4020       AND ((tlinfo.PRIMARY_PROGRAM_TYPE = X_PRIMARY_PROGRAM_TYPE)
4021            OR ((tlinfo.PRIMARY_PROGRAM_TYPE IS NULL)
4022                AND (X_PRIMARY_PROGRAM_TYPE IS NULL)))
4023       AND ((tlinfo.PRIMARY_PROG_TYPE_SOURCE = X_PRIMARY_PROG_TYPE_SOURCE)
4024            OR ((tlinfo.PRIMARY_PROG_TYPE_SOURCE IS NULL)
4025                AND (X_PRIMARY_PROG_TYPE_SOURCE IS NULL)))
4026       AND ((tlinfo.CATALOG_CAL_TYPE = X_CATALOG_CAL_TYPE)
4027            OR ((tlinfo.CATALOG_CAL_TYPE IS NULL)
4028                AND (X_CATALOG_CAL_TYPE IS NULL)))
4029       AND ((tlinfo.CATALOG_SEQ_NUM = X_CATALOG_SEQ_NUM)
4030            OR ((tlinfo.CATALOG_SEQ_NUM IS NULL)
4031                AND (X_CATALOG_SEQ_NUM IS NULL)))
4032       AND ((tlinfo.KEY_PROGRAM = X_KEY_PROGRAM)
4033            OR ((tlinfo.KEY_PROGRAM IS NULL)
4034                AND (X_KEY_PROGRAM IS NULL)))
4035       AND ((tlinfo.MANUAL_OVR_CMPL_DT_IND = X_MANUAL_OVR_CMPL_DT_IND)
4036            OR ((tlinfo.MANUAL_OVR_CMPL_DT_IND IS NULL)
4037                AND (X_MANUAL_OVR_CMPL_DT_IND IS NULL)))
4038       AND ((TRUNC(tlinfo.OVERRIDE_CMPL_DT) = TRUNC(X_OVERRIDE_CMPL_DT))
4039            OR ((tlinfo.OVERRIDE_CMPL_DT IS NULL)
4040                AND (X_OVERRIDE_CMPL_DT IS NULL)))
4041       AND ((tlinfo.ATTRIBUTE_CATEGORY = X_ATTRIBUTE_CATEGORY)
4042            OR ((tlinfo.ATTRIBUTE_CATEGORY IS NULL)
4043                AND (X_ATTRIBUTE_CATEGORY IS NULL)))
4044       AND ((tlinfo.FUTURE_DATED_TRANS_FLAG = X_FUTURE_DATED_TRANS_FLAG)
4045            OR ((tlinfo.FUTURE_DATED_TRANS_FLAG IS NULL)
4046                AND (X_FUTURE_DATED_TRANS_FLAG IS NULL)))
4047       AND ((tlinfo.ATTRIBUTE1 = X_ATTRIBUTE1)
4048            OR ((tlinfo.ATTRIBUTE1 IS NULL)
4049                AND (X_ATTRIBUTE1 IS NULL)))
4050       AND ((tlinfo.ATTRIBUTE2 = X_ATTRIBUTE2)
4051            OR ((tlinfo.ATTRIBUTE2 IS NULL)
4052                AND (X_ATTRIBUTE2 IS NULL)))
4053       AND ((tlinfo.ATTRIBUTE3 = X_ATTRIBUTE3)
4054            OR ((tlinfo.ATTRIBUTE3 IS NULL)
4055                AND (X_ATTRIBUTE3 IS NULL)))
4056       AND ((tlinfo.ATTRIBUTE4 = X_ATTRIBUTE4)
4057            OR ((tlinfo.ATTRIBUTE4 IS NULL)
4058                AND (X_ATTRIBUTE4 IS NULL)))
4059       AND ((tlinfo.ATTRIBUTE5 = X_ATTRIBUTE5)
4060            OR ((tlinfo.ATTRIBUTE5 IS NULL)
4061                AND (X_ATTRIBUTE5 IS NULL)))
4062       AND ((tlinfo.ATTRIBUTE6 = X_ATTRIBUTE6)
4063            OR ((tlinfo.ATTRIBUTE6 IS NULL)
4064                AND (X_ATTRIBUTE6 IS NULL)))
4065       AND ((tlinfo.ATTRIBUTE7 = X_ATTRIBUTE7)
4066            OR ((tlinfo.ATTRIBUTE7 IS NULL)
4067                AND (X_ATTRIBUTE7 IS NULL)))
4068       AND ((tlinfo.ATTRIBUTE8 = X_ATTRIBUTE8)
4069            OR ((tlinfo.ATTRIBUTE8 IS NULL)
4070                AND (X_ATTRIBUTE8 IS NULL)))
4071       AND ((tlinfo.ATTRIBUTE9 = X_ATTRIBUTE9)
4072            OR ((tlinfo.ATTRIBUTE9 IS NULL)
4073                AND (X_ATTRIBUTE9 IS NULL)))
4074       AND ((tlinfo.ATTRIBUTE10 = X_ATTRIBUTE10)
4075            OR ((tlinfo.ATTRIBUTE10 IS NULL)
4076                AND (X_ATTRIBUTE10 IS NULL)))
4077       AND ((tlinfo.ATTRIBUTE11 = X_ATTRIBUTE11)
4078            OR ((tlinfo.ATTRIBUTE11 IS NULL)
4079                AND (X_ATTRIBUTE11 IS NULL)))
4080       AND ((tlinfo.ATTRIBUTE12 = X_ATTRIBUTE12)
4081            OR ((tlinfo.ATTRIBUTE12 IS NULL)
4082                AND (X_ATTRIBUTE12 IS NULL)))
4083       AND ((tlinfo.ATTRIBUTE13 = X_ATTRIBUTE13)
4084            OR ((tlinfo.ATTRIBUTE13 IS NULL)
4085                AND (X_ATTRIBUTE13 IS NULL)))
4086       AND ((tlinfo.ATTRIBUTE14 = X_ATTRIBUTE14)
4087            OR ((tlinfo.ATTRIBUTE14 IS NULL)
4088                AND (X_ATTRIBUTE14 IS NULL)))
4089       AND ((tlinfo.ATTRIBUTE15 = X_ATTRIBUTE15)
4090            OR ((tlinfo.ATTRIBUTE15 IS NULL)
4091                AND (X_ATTRIBUTE15 IS NULL)))
4092       AND ((tlinfo.ATTRIBUTE16 = X_ATTRIBUTE16)
4093            OR ((tlinfo.ATTRIBUTE16 IS NULL)
4094                AND (X_ATTRIBUTE16 IS NULL)))
4095       AND ((tlinfo.ATTRIBUTE17 = X_ATTRIBUTE17)
4096            OR ((tlinfo.ATTRIBUTE17 IS NULL)
4097                AND (X_ATTRIBUTE17 IS NULL)))
4098       AND ((tlinfo.ATTRIBUTE18 = X_ATTRIBUTE18)
4099            OR ((tlinfo.ATTRIBUTE18 IS NULL)
4100                AND (X_ATTRIBUTE18 IS NULL)))
4101       AND ((tlinfo.ATTRIBUTE19 = X_ATTRIBUTE19)
4102            OR ((tlinfo.ATTRIBUTE19 IS NULL)
4103                AND (X_ATTRIBUTE19 IS NULL)))
4104       AND ((tlinfo.ATTRIBUTE20 = X_ATTRIBUTE20)
4105            OR ((tlinfo.ATTRIBUTE20 IS NULL)
4106               AND (X_ATTRIBUTE20 IS NULL)))
4107   ) THEN
4108     NULL;
4109   ELSE
4110 
4111     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
4112     IGS_GE_MSG_STACK.ADD;
4113     app_exception.raise_exception;
4114 
4115   END IF;
4116   RETURN;
4117 END LOCK_ROW;
4118 
4119 PROCEDURE UPDATE_ROW (
4120   X_ROWID IN VARCHAR2,
4121   X_PERSON_ID IN NUMBER,
4122   X_COURSE_CD IN VARCHAR2,
4123   X_ADVANCED_STANDING_IND IN VARCHAR2,
4124   X_FEE_CAT IN VARCHAR2,
4125   X_CORRESPONDENCE_CAT IN VARCHAR2,
4126   X_SELF_HELP_GROUP_IND IN VARCHAR2,
4127   X_LOGICAL_DELETE_DT IN DATE,
4128   X_ADM_ADMISSION_APPL_NUMBER IN NUMBER,
4129   X_ADM_NOMINATED_COURSE_CD IN VARCHAR2,
4130   X_ADM_SEQUENCE_NUMBER IN NUMBER,
4131   X_VERSION_NUMBER IN NUMBER,
4132   X_CAL_TYPE IN VARCHAR2,
4133   X_LOCATION_CD IN VARCHAR2,
4134   X_ATTENDANCE_MODE IN VARCHAR2,
4135   X_ATTENDANCE_TYPE IN VARCHAR2,
4136   X_COO_ID IN NUMBER,
4137   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
4138   X_COMMENCEMENT_DT IN DATE,
4139   X_COURSE_ATTEMPT_STATUS IN VARCHAR2,
4140   X_PROGRESSION_STATUS IN VARCHAR2,
4141   X_DERIVED_ATT_TYPE IN VARCHAR2,
4142   X_DERIVED_ATT_MODE IN VARCHAR2,
4143   X_PROVISIONAL_IND IN VARCHAR2,
4144   X_DISCONTINUED_DT IN DATE,
4145   X_DISCONTINUATION_REASON_CD IN VARCHAR2,
4146   X_LAPSED_DT IN DATE,
4147   X_FUNDING_SOURCE IN VARCHAR2,
4148   X_EXAM_LOCATION_CD IN VARCHAR2,
4149   X_DERIVED_COMPLETION_YR IN NUMBER,
4150   X_DERIVED_COMPLETION_PERD IN VARCHAR2,
4151   X_NOMINATED_COMPLETION_YR IN NUMBER,
4152   X_NOMINATED_COMPLETION_PERD IN VARCHAR2,
4153   X_RULE_CHECK_IND IN VARCHAR2,
4154   X_WAIVE_OPTION_CHECK_IND IN VARCHAR2,
4155   X_LAST_RULE_CHECK_DT IN DATE,
4156   X_PUBLISH_OUTCOMES_IND IN VARCHAR2,
4157   X_COURSE_RQRMNT_COMPLETE_IND IN VARCHAR2,
4158   X_COURSE_RQRMNTS_COMPLETE_DT IN DATE,
4159   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
4160   X_OVERRIDE_TIME_LIMITATION IN NUMBER,
4161   X_MODE IN VARCHAR2,
4162   X_LAST_DATE_OF_ATTENDANCE IN DATE,
4163   X_DROPPED_BY IN VARCHAR2,
4164   X_IGS_PR_CLASS_STD_ID IN NUMBER,
4165   X_PRIMARY_PROGRAM_TYPE IN VARCHAR2,
4166   X_PRIMARY_PROG_TYPE_SOURCE IN VARCHAR2,
4167   X_CATALOG_CAL_TYPE IN VARCHAR2,
4168   X_CATALOG_SEQ_NUM IN NUMBER,
4169   X_KEY_PROGRAM  IN VARCHAR2,
4170   X_MANUAL_OVR_CMPL_DT_IND IN VARCHAR2,
4171   X_OVERRIDE_CMPL_DT IN DATE,
4172   X_ATTRIBUTE_CATEGORY IN VARCHAR2,
4173   X_ATTRIBUTE1 IN VARCHAR2,
4174   X_ATTRIBUTE2 IN VARCHAR2,
4175   X_ATTRIBUTE3 IN VARCHAR2,
4176   X_ATTRIBUTE4 IN VARCHAR2,
4177   X_ATTRIBUTE5 IN VARCHAR2,
4178   X_ATTRIBUTE6 IN VARCHAR2,
4179   X_ATTRIBUTE7 IN VARCHAR2,
4180   X_ATTRIBUTE8 IN VARCHAR2,
4181   X_ATTRIBUTE9 IN VARCHAR2,
4182   X_ATTRIBUTE10 IN VARCHAR2,
4183   X_ATTRIBUTE11 IN VARCHAR2,
4184   X_ATTRIBUTE12 IN VARCHAR2,
4185   X_ATTRIBUTE13 IN VARCHAR2,
4186   X_ATTRIBUTE14 IN VARCHAR2,
4187   X_ATTRIBUTE15 IN VARCHAR2,
4188   X_ATTRIBUTE16 IN VARCHAR2,
4189   X_ATTRIBUTE17 IN VARCHAR2,
4190   X_ATTRIBUTE18 IN VARCHAR2,
4191   X_ATTRIBUTE19 IN VARCHAR2,
4192   x_ATTRIBUTE20 IN VARCHAR2,
4193   X_FUTURE_DATED_TRANS_FLAG IN VARCHAR2
4194   ) AS
4195     X_LAST_UPDATE_DATE DATE;
4196     X_LAST_UPDATED_BY NUMBER;
4197     X_LAST_UPDATE_LOGIN NUMBER;
4198     X_REQUEST_ID NUMBER;
4199     X_PROGRAM_ID NUMBER;
4200     X_PROGRAM_APPLICATION_ID NUMBER;
4201     X_PROGRAM_UPDATE_DATE DATE;
4202 BEGIN
4203 
4204   X_LAST_UPDATE_DATE := SYSDATE;
4205   IF(X_MODE = 'I') THEN
4206     X_LAST_UPDATED_BY := 1;
4207     X_LAST_UPDATE_LOGIN := 0;
4208   ELSIF (X_MODE IN ('R', 'S')) THEN
4209     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
4210     IF X_LAST_UPDATED_BY IS NULL THEN
4211       X_LAST_UPDATED_BY := -1;
4212     END IF;
4213     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
4214     IF X_LAST_UPDATE_LOGIN IS NULL THEN
4215       X_LAST_UPDATE_LOGIN := -1;
4216     END IF;
4217   ELSE
4218     FND_MESSAGE.SET_NAME('FND', 'SYSTEM-INVALID ARGS');
4219     IGS_GE_MSG_STACK.ADD;
4220     app_exception.raise_exception;
4221   END IF;
4222 
4223   Before_DML (
4224     p_action => 'UPDATE',
4225     x_rowid =>   X_ROWID,
4226     x_person_id => X_PERSON_ID,
4227     x_course_cd => X_COURSE_CD,
4228     x_advanced_standing_ind => X_ADVANCED_STANDING_IND,
4229     x_fee_cat => X_FEE_CAT,
4230     x_correspondence_cat => X_CORRESPONDENCE_CAT,
4231     x_self_help_group_ind => X_SELF_HELP_GROUP_IND,
4232     x_logical_delete_dt => X_LOGICAL_DELETE_DT,
4233     x_adm_admission_appl_number => X_ADM_ADMISSION_APPL_NUMBER,
4234     x_adm_nominated_course_cd => X_ADM_NOMINATED_COURSE_CD,
4235     x_adm_sequence_number => X_ADM_SEQUENCE_NUMBER,
4236     x_version_number => X_VERSION_NUMBER,
4237     x_cal_type => X_CAL_TYPE,
4238     x_location_cd => X_LOCATION_CD,
4239     x_attendance_mode => X_ATTENDANCE_MODE,
4240     x_attendance_type => X_ATTENDANCE_TYPE,
4241     x_coo_id => X_COO_ID,
4242     x_student_confirmed_ind => X_STUDENT_CONFIRMED_IND,
4243     x_commencement_dt => X_COMMENCEMENT_DT,
4244     x_course_attempt_status => X_COURSE_ATTEMPT_STATUS,
4245     x_progression_status => NVL(X_PROGRESSION_STATUS,'GOODSTAND'),
4246     x_derived_att_type => X_DERIVED_ATT_TYPE,
4247     x_derived_att_mode => X_DERIVED_ATT_MODE,
4248     x_provisional_ind => X_PROVISIONAL_IND,
4249     x_discontinued_dt => X_DISCONTINUED_DT,
4250     x_discontinuation_reason_cd => X_DISCONTINUATION_REASON_CD,
4251     x_lapsed_dt => X_LAPSED_DT,
4252     x_funding_source => X_FUNDING_SOURCE,
4253     x_exam_location_cd => X_EXAM_LOCATION_CD,
4254     x_derived_completion_yr => X_DERIVED_COMPLETION_YR,
4255     x_derived_completion_perd => X_DERIVED_COMPLETION_PERD,
4256     x_nominated_completion_yr => X_NOMINATED_COMPLETION_YR,
4257     x_nominated_completion_perd => X_NOMINATED_COMPLETION_PERD,
4258     x_rule_check_ind => X_RULE_CHECK_IND,
4259     x_waive_option_check_ind => X_WAIVE_OPTION_CHECK_IND,
4260     x_last_rule_check_dt => X_LAST_RULE_CHECK_DT,
4261     x_publish_outcomes_ind => X_PUBLISH_OUTCOMES_IND,
4262     x_course_rqrmnt_complete_ind => X_COURSE_RQRMNT_COMPLETE_IND,
4263     x_course_rqrmnts_complete_dt => X_COURSE_RQRMNTS_COMPLETE_DT,
4264     x_s_completed_source_type => X_S_COMPLETED_SOURCE_TYPE,
4265     x_override_time_limitation => X_OVERRIDE_TIME_LIMITATION,
4266     x_creation_date => X_LAST_UPDATE_DATE,
4267     x_created_by => X_LAST_UPDATED_BY,
4268     x_last_update_date => X_LAST_UPDATE_DATE,
4269     x_last_updated_by => X_LAST_UPDATED_BY,
4270     x_last_update_login => X_LAST_UPDATE_LOGIN ,
4271     x_last_date_of_attendance =>X_LAST_DATE_OF_ATTENDANCE,
4272     x_dropped_by => X_DROPPED_BY,
4273    X_IGS_PR_CLASS_STD_ID => X_IGS_PR_CLASS_STD_ID,
4274   x_primary_program_type => X_PRIMARY_PROGRAM_TYPE,
4275     x_primary_prog_type_source => X_PRIMARY_PROG_TYPE_SOURCE,
4276     x_catalog_cal_type => X_CATALOG_CAL_TYPE,
4277     x_catalog_seq_num => X_CATALOG_SEQ_NUM ,
4278     x_key_program   => X_KEY_PROGRAM,
4279     x_manual_ovr_cmpl_dt_ind => X_MANUAL_OVR_CMPL_DT_IND,
4280     x_override_cmpl_dt       => X_OVERRIDE_CMPL_DT,
4281     x_attribute_category=>X_ATTRIBUTE_CATEGORY,
4282     x_future_dated_trans_flag => NVL(X_FUTURE_DATED_TRANS_FLAG,'N'),
4283     x_attribute1=>X_ATTRIBUTE1,
4284     x_attribute2=>X_ATTRIBUTE2,
4285     x_attribute3=>X_ATTRIBUTE3,
4286     x_attribute4=>X_ATTRIBUTE4,
4287     x_attribute5=>X_ATTRIBUTE5,
4288     x_attribute6=>X_ATTRIBUTE6,
4289     x_attribute7=>X_ATTRIBUTE7,
4290     x_attribute8=>X_ATTRIBUTE8,
4291     x_attribute9=>X_ATTRIBUTE9,
4292     x_attribute10=>X_ATTRIBUTE10,
4293     x_attribute11=>X_ATTRIBUTE11,
4294     x_attribute12=>X_ATTRIBUTE12,
4295     x_attribute13=>X_ATTRIBUTE13,
4296     x_attribute14=>X_ATTRIBUTE14,
4297     x_attribute15=>X_ATTRIBUTE15,
4298      x_attribute16=>X_ATTRIBUTE16,
4299     x_attribute17=>X_ATTRIBUTE17,
4300     x_attribute18=>X_ATTRIBUTE18,
4301     x_attribute19=>X_ATTRIBUTE19,
4302     x_attribute20=>X_ATTRIBUTE20
4303   );
4304 
4305    IF(X_MODE = 'R') THEN
4306     X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4307     X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4308     X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4309     IF(X_REQUEST_ID=-1) THEN
4310      X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
4311      X_PROGRAM_ID := OLD_REFERENCES.PROGRAM_ID;
4312      X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
4313     ELSE
4314      X_PROGRAM_UPDATE_DATE := SYSDATE;
4315     END IF;
4316    END IF;
4317 
4318   IF (x_mode = 'S') THEN
4319     igs_sc_gen_001.set_ctx('R');
4320   END IF;
4321   UPDATE IGS_EN_STDNT_PS_ATT_ALL SET
4322     ADVANCED_STANDING_IND = NEW_REFERENCES.ADVANCED_STANDING_IND,
4323     FEE_CAT = NEW_REFERENCES.FEE_CAT,
4324     CORRESPONDENCE_CAT = NEW_REFERENCES.CORRESPONDENCE_CAT,
4325     SELF_HELP_GROUP_IND = NEW_REFERENCES.SELF_HELP_GROUP_IND,
4326     LOGICAL_DELETE_DT = NEW_REFERENCES.LOGICAL_DELETE_DT,
4327     ADM_ADMISSION_APPL_NUMBER = NEW_REFERENCES.ADM_ADMISSION_APPL_NUMBER,
4328     ADM_NOMINATED_COURSE_CD = NEW_REFERENCES.ADM_NOMINATED_COURSE_CD,
4329     ADM_SEQUENCE_NUMBER = NEW_REFERENCES.ADM_SEQUENCE_NUMBER,
4330     VERSION_NUMBER = NEW_REFERENCES.VERSION_NUMBER,
4331     CAL_TYPE = NEW_REFERENCES.CAL_TYPE,
4332     LOCATION_CD = NEW_REFERENCES.LOCATION_CD,
4333     ATTENDANCE_MODE = NEW_REFERENCES.ATTENDANCE_MODE,
4334     ATTENDANCE_TYPE = NEW_REFERENCES.ATTENDANCE_TYPE,
4335     COO_ID = NEW_REFERENCES.COO_ID,
4336     STUDENT_CONFIRMED_IND = NEW_REFERENCES.STUDENT_CONFIRMED_IND,
4337     COMMENCEMENT_DT = NEW_REFERENCES.COMMENCEMENT_DT,
4338     COURSE_ATTEMPT_STATUS = NEW_REFERENCES.COURSE_ATTEMPT_STATUS,
4339     PROGRESSION_STATUS = NEW_REFERENCES.PROGRESSION_STATUS,
4340     DERIVED_ATT_TYPE = NEW_REFERENCES.DERIVED_ATT_TYPE,
4341     DERIVED_ATT_MODE = NEW_REFERENCES.DERIVED_ATT_MODE,
4342     PROVISIONAL_IND = NEW_REFERENCES.PROVISIONAL_IND,
4343     DISCONTINUED_DT = NEW_REFERENCES.DISCONTINUED_DT,
4344     DISCONTINUATION_REASON_CD = NEW_REFERENCES.DISCONTINUATION_REASON_CD,
4345     LAPSED_DT = NEW_REFERENCES.LAPSED_DT,
4346     FUNDING_SOURCE = NEW_REFERENCES.FUNDING_SOURCE,
4347     EXAM_LOCATION_CD = NEW_REFERENCES.EXAM_LOCATION_CD,
4348     DERIVED_COMPLETION_YR = NEW_REFERENCES.DERIVED_COMPLETION_YR,
4349     DERIVED_COMPLETION_PERD = NEW_REFERENCES.DERIVED_COMPLETION_PERD,
4350     NOMINATED_COMPLETION_YR = NEW_REFERENCES.NOMINATED_COMPLETION_YR,
4351     NOMINATED_COMPLETION_PERD = NEW_REFERENCES.NOMINATED_COMPLETION_PERD,
4352     RULE_CHECK_IND = NEW_REFERENCES.RULE_CHECK_IND,
4353     WAIVE_OPTION_CHECK_IND = NEW_REFERENCES.WAIVE_OPTION_CHECK_IND,
4354     LAST_RULE_CHECK_DT = NEW_REFERENCES.LAST_RULE_CHECK_DT,
4355     PUBLISH_OUTCOMES_IND = NEW_REFERENCES.PUBLISH_OUTCOMES_IND,
4356     COURSE_RQRMNT_COMPLETE_IND = NEW_REFERENCES.COURSE_RQRMNT_COMPLETE_IND,
4357     COURSE_RQRMNTS_COMPLETE_DT = NEW_REFERENCES.COURSE_RQRMNTS_COMPLETE_DT,
4358     S_COMPLETED_SOURCE_TYPE = NEW_REFERENCES.S_COMPLETED_SOURCE_TYPE,
4359     OVERRIDE_TIME_LIMITATION = NEW_REFERENCES.OVERRIDE_TIME_LIMITATION,
4360     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
4361     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
4362     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
4363     REQUEST_ID = X_REQUEST_ID,
4364     PROGRAM_ID = X_PROGRAM_ID,
4365     PROGRAM_APPLICATION_ID = X_PROGRAM_APPLICATION_ID,
4366     PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE,
4367     LAST_DATE_OF_ATTENDANCE = NEW_REFERENCES.LAST_DATE_OF_ATTENDANCE,
4368     DROPPED_BY = NEW_REFERENCES.DROPPED_BY,
4369   IGS_PR_CLASS_STD_ID = NEW_REFERENCES.IGS_PR_CLASS_STD_ID,
4370   PRIMARY_PROGRAM_TYPE = NEW_REFERENCES.PRIMARY_PROGRAM_TYPE,
4371     PRIMARY_PROG_TYPE_SOURCE = NEW_REFERENCES.PRIMARY_PROG_TYPE_SOURCE,
4372     CATALOG_CAL_TYPE = NEW_REFERENCES.CATALOG_CAL_TYPE,
4373     CATALOG_SEQ_NUM = NEW_REFERENCES.CATALOG_SEQ_NUM,
4374     KEY_PROGRAM   = NEW_REFERENCES.KEY_PROGRAM,
4375     MANUAL_OVR_CMPL_DT_IND = NEW_REFERENCES.MANUAL_OVR_CMPL_DT_IND,
4376     OVERRIDE_CMPL_DT = NEW_REFERENCES.OVERRIDE_CMPL_DT,
4377     ATTRIBUTE_CATEGORY =  NEW_REFERENCES.ATTRIBUTE_CATEGORY,
4378     FUTURE_DATED_TRANS_FLAG = NEW_REFERENCES.FUTURE_DATED_TRANS_FLAG,
4379     ATTRIBUTE1 =  NEW_REFERENCES.ATTRIBUTE1,
4380     ATTRIBUTE2 =  NEW_REFERENCES.ATTRIBUTE2,
4381     ATTRIBUTE3 =  NEW_REFERENCES.ATTRIBUTE3,
4382     ATTRIBUTE4 =  NEW_REFERENCES.ATTRIBUTE4,
4383     ATTRIBUTE5 =  NEW_REFERENCES.ATTRIBUTE5,
4384     ATTRIBUTE6 =  NEW_REFERENCES.ATTRIBUTE6,
4385     ATTRIBUTE7 =  NEW_REFERENCES.ATTRIBUTE7,
4386     ATTRIBUTE8 =  NEW_REFERENCES.ATTRIBUTE8,
4387     ATTRIBUTE9 =  NEW_REFERENCES.ATTRIBUTE9,
4388     ATTRIBUTE10 =  NEW_REFERENCES.ATTRIBUTE10,
4389     ATTRIBUTE11 =  NEW_REFERENCES.ATTRIBUTE11,
4390     ATTRIBUTE12 =  NEW_REFERENCES.ATTRIBUTE12,
4391     ATTRIBUTE13 =  NEW_REFERENCES.ATTRIBUTE13,
4392     ATTRIBUTE14 =  NEW_REFERENCES.ATTRIBUTE14,
4393     ATTRIBUTE15 =  NEW_REFERENCES.ATTRIBUTE15,
4394     ATTRIBUTE16 =  NEW_REFERENCES.ATTRIBUTE16,
4395     ATTRIBUTE17 =  NEW_REFERENCES.ATTRIBUTE17,
4396     ATTRIBUTE18 =  NEW_REFERENCES.ATTRIBUTE18,
4397     ATTRIBUTE19 =  NEW_REFERENCES.ATTRIBUTE19,
4398     ATTRIBUTE20 =  NEW_REFERENCES.ATTRIBUTE20
4399   WHERE ROWID = X_ROWID;
4400   IF (SQL%NOTFOUND) THEN
4401      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
4402      igs_ge_msg_stack.add;
4403      igs_sc_gen_001.unset_ctx('R');
4404      app_exception.raise_exception;
4405  END IF;
4406  IF (x_mode = 'S') THEN
4407     igs_sc_gen_001.unset_ctx('R');
4408   END IF;
4409 
4410 
4411   After_DML (
4412             p_action     => 'UPDATE',
4413             x_rowid      =>  X_ROWID
4414             );
4415 
4416 
4417 EXCEPTION
4418   WHEN OTHERS THEN
4419     IF (SQLCODE = (-28115)) THEN
4420       fnd_message.set_name ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
4421       fnd_message.set_token ('ERR_CD', SQLCODE);
4422       igs_ge_msg_stack.add;
4423       igs_sc_gen_001.unset_ctx('R');
4424       app_exception.raise_exception;
4425     ELSE
4426       igs_sc_gen_001.unset_ctx('R');
4427       RAISE;
4428     END IF;
4429 
4430 END UPDATE_ROW;
4431 
4432 PROCEDURE ADD_ROW (
4433   X_ROWID IN OUT NOCOPY VARCHAR2,
4434   X_ORG_ID IN NUMBER,
4435   X_PERSON_ID IN NUMBER,
4436   X_COURSE_CD IN VARCHAR2,
4437   X_ADVANCED_STANDING_IND IN VARCHAR2,
4438   X_FEE_CAT IN VARCHAR2,
4439   X_CORRESPONDENCE_CAT IN VARCHAR2,
4440   X_SELF_HELP_GROUP_IND IN VARCHAR2,
4441   X_LOGICAL_DELETE_DT IN DATE,
4442   X_ADM_ADMISSION_APPL_NUMBER IN NUMBER,
4443   X_ADM_NOMINATED_COURSE_CD IN VARCHAR2,
4444   X_ADM_SEQUENCE_NUMBER IN NUMBER,
4445   X_VERSION_NUMBER IN NUMBER,
4446   X_CAL_TYPE IN VARCHAR2,
4447   X_LOCATION_CD IN VARCHAR2,
4448   X_ATTENDANCE_MODE IN VARCHAR2,
4449   X_ATTENDANCE_TYPE IN VARCHAR2,
4450   X_COO_ID IN NUMBER,
4451   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
4452   X_COMMENCEMENT_DT IN DATE,
4453   X_COURSE_ATTEMPT_STATUS IN VARCHAR2,
4454   X_PROGRESSION_STATUS IN VARCHAR2,
4455   X_DERIVED_ATT_TYPE IN VARCHAR2,
4456   X_DERIVED_ATT_MODE IN VARCHAR2,
4457   X_PROVISIONAL_IND IN VARCHAR2,
4458   X_DISCONTINUED_DT IN DATE,
4459   X_DISCONTINUATION_REASON_CD IN VARCHAR2,
4460   X_LAPSED_DT IN DATE,
4461   X_FUNDING_SOURCE IN VARCHAR2,
4462   X_EXAM_LOCATION_CD IN VARCHAR2,
4463   X_DERIVED_COMPLETION_YR IN NUMBER,
4464   X_DERIVED_COMPLETION_PERD IN VARCHAR2,
4465   X_NOMINATED_COMPLETION_YR IN NUMBER,
4466   X_NOMINATED_COMPLETION_PERD IN VARCHAR2,
4467   X_RULE_CHECK_IND IN VARCHAR2,
4468   X_WAIVE_OPTION_CHECK_IND IN VARCHAR2,
4469   X_LAST_RULE_CHECK_DT IN DATE,
4470   X_PUBLISH_OUTCOMES_IND IN VARCHAR2,
4471   X_COURSE_RQRMNT_COMPLETE_IND IN VARCHAR2,
4472   X_COURSE_RQRMNTS_COMPLETE_DT IN DATE,
4473   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
4474   X_OVERRIDE_TIME_LIMITATION IN NUMBER,
4475   X_MODE IN VARCHAR2,
4476   X_LAST_DATE_OF_ATTENDANCE IN DATE,
4477   X_DROPPED_BY IN VARCHAR2,
4478   X_IGS_PR_CLASS_STD_ID IN NUMBER,
4479   X_PRIMARY_PROGRAM_TYPE IN VARCHAR2,
4480   X_PRIMARY_PROG_TYPE_SOURCE IN VARCHAR2,
4481   X_CATALOG_CAL_TYPE IN VARCHAR2,
4482   X_CATALOG_SEQ_NUM IN NUMBER ,
4483   X_KEY_PROGRAM  IN VARCHAR2,
4484   X_MANUAL_OVR_CMPL_DT_IND IN VARCHAR2,
4485   X_OVERRIDE_CMPL_DT IN DATE,
4486   X_ATTRIBUTE_CATEGORY IN VARCHAR2,
4487   X_ATTRIBUTE1 IN VARCHAR2,
4488   X_ATTRIBUTE2 IN VARCHAR2,
4489   X_ATTRIBUTE3 IN VARCHAR2,
4490   X_ATTRIBUTE4 IN VARCHAR2,
4491   X_ATTRIBUTE5 IN VARCHAR2,
4492   X_ATTRIBUTE6 IN VARCHAR2,
4493   X_ATTRIBUTE7 IN VARCHAR2,
4494   X_ATTRIBUTE8 IN VARCHAR2,
4495   X_ATTRIBUTE9 IN VARCHAR2,
4496   X_ATTRIBUTE10 IN VARCHAR2,
4497   X_ATTRIBUTE11 IN VARCHAR2,
4498   X_ATTRIBUTE12 IN VARCHAR2,
4499   X_ATTRIBUTE13 IN VARCHAR2,
4500   X_ATTRIBUTE14 IN VARCHAR2,
4501   X_ATTRIBUTE15 IN VARCHAR2,
4502   X_ATTRIBUTE16 IN VARCHAR2,
4503   X_ATTRIBUTE17 IN VARCHAR2,
4504   X_ATTRIBUTE18 IN VARCHAR2,
4505   X_ATTRIBUTE19 IN VARCHAR2,
4506   x_ATTRIBUTE20 IN VARCHAR2,
4507   X_FUTURE_DATED_TRANS_FLAG IN VARCHAR2
4508   ) AS
4509   CURSOR c1 IS SELECT ROWID FROM IGS_EN_STDNT_PS_ATT_ALL
4510      WHERE PERSON_ID = X_PERSON_ID
4511      AND COURSE_CD = X_COURSE_CD;
4512 BEGIN
4513   OPEN c1;
4514   FETCH c1 INTO X_ROWID;
4515   IF (c1%NOTFOUND) THEN
4516     CLOSE c1;
4517     INSERT_ROW (
4518      X_ROWID,
4519      x_org_id,
4520      X_PERSON_ID,
4521      X_COURSE_CD,
4522      X_ADVANCED_STANDING_IND,
4523      X_FEE_CAT,
4524      X_CORRESPONDENCE_CAT,
4525      X_SELF_HELP_GROUP_IND,
4526      X_LOGICAL_DELETE_DT,
4527      X_ADM_ADMISSION_APPL_NUMBER,
4528      X_ADM_NOMINATED_COURSE_CD,
4529      X_ADM_SEQUENCE_NUMBER,
4530      X_VERSION_NUMBER,
4531      X_CAL_TYPE,
4532      X_LOCATION_CD,
4533      X_ATTENDANCE_MODE,
4534      X_ATTENDANCE_TYPE,
4535      X_COO_ID,
4536      X_STUDENT_CONFIRMED_IND,
4537      X_COMMENCEMENT_DT,
4538      X_COURSE_ATTEMPT_STATUS,
4539      X_PROGRESSION_STATUS,
4540      X_DERIVED_ATT_TYPE,
4541      X_DERIVED_ATT_MODE,
4542      X_PROVISIONAL_IND,
4543      X_DISCONTINUED_DT,
4544      X_DISCONTINUATION_REASON_CD,
4545      X_LAPSED_DT,
4546      X_FUNDING_SOURCE,
4547      X_EXAM_LOCATION_CD,
4548      X_DERIVED_COMPLETION_YR,
4549      X_DERIVED_COMPLETION_PERD,
4550      X_NOMINATED_COMPLETION_YR,
4551      X_NOMINATED_COMPLETION_PERD,
4552      X_RULE_CHECK_IND,
4553      X_WAIVE_OPTION_CHECK_IND,
4554      X_LAST_RULE_CHECK_DT,
4555      X_PUBLISH_OUTCOMES_IND,
4556      X_COURSE_RQRMNT_COMPLETE_IND,
4557      X_COURSE_RQRMNTS_COMPLETE_DT,
4558      X_S_COMPLETED_SOURCE_TYPE,
4559      X_OVERRIDE_TIME_LIMITATION,
4560      X_MODE,
4561      X_LAST_DATE_OF_ATTENDANCE,
4562      X_DROPPED_BY,
4563      X_IGS_PR_CLASS_STD_ID,
4564      X_PRIMARY_PROGRAM_TYPE,
4565      X_PRIMARY_PROG_TYPE_SOURCE,
4566      X_CATALOG_CAL_TYPE,
4567      X_CATALOG_SEQ_NUM,
4568      X_KEY_PROGRAM  ,
4569      X_MANUAL_OVR_CMPL_DT_IND,
4570      X_OVERRIDE_CMPL_DT,
4571      X_ATTRIBUTE_CATEGORY,
4572      X_FUTURE_DATED_TRANS_FLAG,
4573      X_ATTRIBUTE1,
4574      X_ATTRIBUTE2,
4575      X_ATTRIBUTE3,
4576      X_ATTRIBUTE4,
4577      X_ATTRIBUTE5,
4578      X_ATTRIBUTE6,
4579      X_ATTRIBUTE7,
4580      X_ATTRIBUTE8,
4581      X_ATTRIBUTE9,
4582      X_ATTRIBUTE10,
4583      X_ATTRIBUTE11,
4584      X_ATTRIBUTE12,
4585      X_ATTRIBUTE13,
4586      X_ATTRIBUTE14,
4587      X_ATTRIBUTE15,
4588      X_ATTRIBUTE16,
4589      X_ATTRIBUTE17,
4590      X_ATTRIBUTE18,
4591      X_ATTRIBUTE19,
4592      X_ATTRIBUTE20
4593     );
4594     RETURN;
4595   END IF;
4596   CLOSE c1;
4597 
4598   UPDATE_ROW (
4599    X_ROWID,
4600    X_PERSON_ID,
4601    X_COURSE_CD,
4602    X_ADVANCED_STANDING_IND,
4603    X_FEE_CAT,
4604    X_CORRESPONDENCE_CAT,
4605    X_SELF_HELP_GROUP_IND,
4606    X_LOGICAL_DELETE_DT,
4607    X_ADM_ADMISSION_APPL_NUMBER,
4608    X_ADM_NOMINATED_COURSE_CD,
4609    X_ADM_SEQUENCE_NUMBER,
4610    X_VERSION_NUMBER,
4611    X_CAL_TYPE,
4612    X_LOCATION_CD,
4613    X_ATTENDANCE_MODE,
4614    X_ATTENDANCE_TYPE,
4615    X_COO_ID,
4616    X_STUDENT_CONFIRMED_IND,
4617    X_COMMENCEMENT_DT,
4618    X_COURSE_ATTEMPT_STATUS,
4619    X_PROGRESSION_STATUS,
4620    X_DERIVED_ATT_TYPE,
4621    X_DERIVED_ATT_MODE,
4622    X_PROVISIONAL_IND,
4623    X_DISCONTINUED_DT,
4624    X_DISCONTINUATION_REASON_CD,
4625    X_LAPSED_DT,
4626    X_FUNDING_SOURCE,
4627    X_EXAM_LOCATION_CD,
4628    X_DERIVED_COMPLETION_YR,
4629    X_DERIVED_COMPLETION_PERD,
4630    X_NOMINATED_COMPLETION_YR,
4631    X_NOMINATED_COMPLETION_PERD,
4632    X_RULE_CHECK_IND,
4633    X_WAIVE_OPTION_CHECK_IND,
4634    X_LAST_RULE_CHECK_DT,
4635    X_PUBLISH_OUTCOMES_IND,
4636    X_COURSE_RQRMNT_COMPLETE_IND,
4637    X_COURSE_RQRMNTS_COMPLETE_DT,
4638    X_S_COMPLETED_SOURCE_TYPE,
4639    X_OVERRIDE_TIME_LIMITATION,
4640    X_MODE,
4641    X_LAST_DATE_OF_ATTENDANCE,
4642    X_DROPPED_BY,
4643    X_IGS_PR_CLASS_STD_ID,
4644    X_PRIMARY_PROGRAM_TYPE,
4645    X_PRIMARY_PROG_TYPE_SOURCE,
4646    X_CATALOG_CAL_TYPE,
4647    X_CATALOG_SEQ_NUM,
4648    X_KEY_PROGRAM,
4649    X_MANUAL_OVR_CMPL_DT_IND,
4650    X_OVERRIDE_CMPL_DT,
4651    X_ATTRIBUTE_CATEGORY,
4652    X_FUTURE_DATED_TRANS_FLAG,
4653    X_ATTRIBUTE1,
4654    X_ATTRIBUTE2,
4655    X_ATTRIBUTE3,
4656    X_ATTRIBUTE4,
4657    X_ATTRIBUTE5,
4658    X_ATTRIBUTE6,
4659    X_ATTRIBUTE7,
4660    X_ATTRIBUTE8,
4661    X_ATTRIBUTE9,
4662    X_ATTRIBUTE10,
4663    X_ATTRIBUTE11,
4664    X_ATTRIBUTE12,
4665    X_ATTRIBUTE13,
4666    X_ATTRIBUTE14,
4667     X_ATTRIBUTE15,
4668    X_ATTRIBUTE16,
4669    X_ATTRIBUTE17,
4670    X_ATTRIBUTE18,
4671    X_ATTRIBUTE19,
4672     X_ATTRIBUTE20
4673   );
4674 END ADD_ROW;
4675 
4676 PROCEDURE DELETE_ROW (X_ROWID IN VARCHAR2,
4677   x_mode IN VARCHAR2)
4678  AS
4679 BEGIN
4680   Before_DML (
4681     p_action => 'DELETE',
4682     x_rowid =>   X_ROWID
4683   );
4684   IF (x_mode = 'S') THEN
4685     igs_sc_gen_001.set_ctx('R');
4686   END IF;
4687   DELETE FROM IGS_EN_STDNT_PS_ATT_ALL
4688   WHERE ROWID = X_ROWID;
4689   IF (SQL%NOTFOUND) THEN
4690      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
4691      igs_ge_msg_stack.add;
4692      igs_sc_gen_001.unset_ctx('R');
4693      app_exception.raise_exception;
4694  END IF;
4695  IF (x_mode = 'S') THEN
4696     igs_sc_gen_001.unset_ctx('R');
4697   END IF;
4698 
4699 
4700     After_DML (
4701             p_action     => 'DELETE',
4702             x_rowid      =>  X_ROWID
4703             );
4704 
4705 END DELETE_ROW;
4706 
4707 PROCEDURE beforerowdelete AS
4708   ------------------------------------------------------------------
4709   --Created by  : rnirwani
4710   --Date created: 03-Jan-03
4711   --
4712   --Purpose: Validation to ensure that delation is not allowed
4713   --
4714   --
4715   --Known limitations/enhancements and/or remarks:
4716   --
4717   --Change History:
4718   --Who         When            What
4719   -------------------------------------------------------------------
4720 
4721   CURSOR c_spa_stat (cp_person_id igs_en_stdnt_ps_att_all.person_id%TYPE,
4722                      cp_course_cd igs_en_stdnt_ps_att_all.course_cd%TYPE) IS
4723   SELECT course_attempt_status
4724     FROM igs_en_stdnt_ps_att_all
4725    WHERE person_id = cp_person_id
4726      AND course_cd = cp_course_cd;
4727 
4728   lv_crs_attmpt_stat igs_en_stdnt_ps_att_all.course_attempt_status%TYPE;
4729 BEGIN
4730 
4731 -- Deletion is allowed only in case the record has an attempt status of UNCONFIRM.
4732 
4733   OPEN c_spa_stat (old_references.person_id,old_references.course_cd);
4734   FETCH c_spa_stat INTO lv_crs_attmpt_stat;
4735   CLOSE c_spa_stat;
4736 
4737   IF lv_crs_attmpt_stat <> 'UNCONFIRM' THEN
4738     FND_MESSAGE.SET_NAME('IGS','IGS_EN_CANDEL_UNCNFRM_SPA');
4739     igs_ge_msg_stack.add;
4740     APP_EXCEPTION.RAISE_EXCEPTION;
4741   END IF;
4742 
4743 END beforerowdelete;
4744 
4745 PROCEDURE enrp_ins_upd_term_rec( P_ACTION IN VARCHAR2)
4746 IS
4747   ------------------------------------------------------------------
4748   --Created by  : ptandon , Oracle India
4749   --Date created: 28-NOV-2003
4750   --
4751   --Purpose: This procedure checks whether to create/update term
4752   --         records.
4753   --
4754   --
4755   --Known limitations/enhancements and/or remarks:
4756   --
4757   --Change History:
4758   --Who         When            What
4759   --stutta    16-Mar-2004   Passing new parameter p_update_rec in call
4760   --                        to igs_en_spa_terms_api.create_update_term_rec.
4761   --                        Bug # 3421436
4762   --stutta    7-Jan-2005    Allow term record creation whether any attributes
4763   --                        change or not if called from PROGRAM_TRANSFER
4764   --stutta    1-Dec-2005    Delete terms when Unconfirming program irrespective
4765   --                        of whether its a PRIMARY program or not.Bug#4752409
4766   -------------------------------------------------------------------
4767 
4768 -- Cursor to get the effective term calendar.
4769 CURSOR cur_get_effective_term(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
4770                               cp_program_cd igs_en_stdnt_ps_att.course_cd%TYPE,
4771                               cp_prg_completion_dt igs_en_stdnt_ps_att.course_rqrmnts_complete_dt%TYPE) IS
4772    SELECT ci.cal_type, ci.sequence_number
4773    FROM   igs_ca_inst ci,
4774           igs_ca_inst_rel cir,
4775           igs_ca_type ct,
4776           igs_en_stdnt_ps_att sca,
4777           igs_ca_stat cs
4778    WHERE  sca.person_id = cp_person_id AND
4779           sca.course_cd = cp_program_cd AND
4780           cir.sup_cal_type = sca.cal_type AND
4781           ci.cal_type = cir.sub_cal_type AND
4782           ci.sequence_number = cir.sub_ci_sequence_number AND
4783           ct.cal_type = ci.cal_type AND
4784           ct.s_cal_cat = 'LOAD' AND
4785           cs.cal_status = ci.cal_status AND
4786           cs.s_cal_status = 'ACTIVE' AND
4787           igs_en_gen_015.get_effective_census_date(ci.cal_type,ci.sequence_number,NULL,NULL) > cp_prg_completion_dt
4788           ORDER BY ci.start_dt;
4789 
4790    l_message_name          VARCHAR2(100);
4791    l_create_update_term    BOOLEAN;
4792    l_prg_completion_date   igs_en_stdnt_ps_att_all.course_rqrmnts_complete_dt%TYPE;
4793    l_term_cal_type         igs_ca_inst.cal_type%TYPE;
4794    l_term_ci_seq_num       igs_ca_inst.sequence_number%TYPE;
4795 
4796 BEGIN
4797 
4798   -- If the system is in program model or the program attempt is primary.
4799   IF NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N') = 'N' OR new_references.primary_program_type = 'PRIMARY' THEN
4800 
4801            l_term_cal_type := NULL;
4802            l_term_ci_seq_num := NULL;
4803            l_create_update_term := FALSE;
4804 
4805            IF (P_ACTION = 'UPDATE') THEN
4806                 IF (new_references.course_attempt_status = 'COMPLETED' AND new_references.primary_program_type = 'PRIMARY') THEN
4807                                 OPEN cur_get_effective_term(new_references.person_id,
4808                                              new_references.course_cd,
4809                                              new_references.course_rqrmnts_complete_dt);
4810                          FETCH cur_get_effective_term INTO l_term_cal_type,l_term_ci_seq_num;
4811                          CLOSE cur_get_effective_term;
4812                          IF (l_term_cal_type IS NOT NULL AND l_term_ci_seq_num IS NOT NULL) THEN
4813 						igs_en_spa_terms_api.create_update_term_rec(
4814                                                         p_person_id => new_references.person_id,
4815                                                         p_program_cd => new_references.course_cd,
4816                                                         p_term_cal_type => l_term_cal_type,
4817                                                         p_term_sequence_number => l_term_ci_seq_num,
4818                                                         p_ripple_frwrd => FALSE, -- ripple forward
4819                                                         p_message_name => l_message_name,
4820                                                         p_update_rec => TRUE);
4821                          END IF;
4822 
4823                END IF;
4824            END IF;
4825    END IF;
4826 
4827     -- if course attempt status is changing (updated) to UNCONFIRM
4828   IF (new_references.course_attempt_status = 'UNCONFIRM' AND old_references.course_attempt_status IS NOT NULL
4829       AND old_references.course_attempt_status <> new_references.course_attempt_status ) THEN
4830                                 -- For a term which is moving from a confirmed status to an unconfirmed status
4831                                 -- Delete all future term records from the current term for an unconfirmed program.
4832                                 igs_en_spa_terms_api.delete_terms_for_program(
4833                                                 p_person_id => new_references.person_id,
4834                                                 p_program_cd => new_references.course_cd);
4835    END IF;
4836 
4837 
4838 
4839 END enrp_ins_upd_term_rec;
4840 
4841 END Igs_En_Stdnt_Ps_Att_Pkg;