DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_SU_ATTEMPT_PKG

Source


1 PACKAGE BODY Igs_En_Su_Attempt_Pkg AS
2 /* $Header: IGSEI36B.pls 120.22 2006/03/02 03:30:18 bdeviset ship $ */
3 
4   l_rowid          VARCHAR2(25);
5   old_references   IGS_EN_SU_ATTEMPT_ALL%ROWTYPE;
6   new_references   IGS_EN_SU_ATTEMPT_ALL%ROWTYPE;
7   l_old_cp         NUMBER(10);
8   l_new_cp         NUMBER(10);
9   l_load_cal_type  IGS_CA_INST.CAL_TYPE%TYPE;
10   l_load_seq_num   IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
11 
12    -- Cursor to update the enrollment actual column
13    -- The field enrollment_actual needs to be updated by 1
14    -- if the unit attempt is successful.
15    -- decrement by 1 if the unit attempt is discontinued or deleted
16   PROCEDURE update_reserved_seat( p_action IN VARCHAR2);
17 
18   PROCEDURE Set_Column_Values (
19     p_action IN VARCHAR2,
20     x_rowid IN VARCHAR2 ,
21     x_uoo_id IN NUMBER ,
22     x_enrolled_dt IN DATE ,
23     x_unit_attempt_status IN VARCHAR2 ,
24     x_administrative_unit_status IN VARCHAR2,
25     x_discontinued_dt IN DATE ,
26     x_rule_waived_dt IN DATE ,
27     x_rule_waived_person_id IN NUMBER,
28     x_no_assessment_ind IN VARCHAR2 ,
29     x_sup_unit_cd IN VARCHAR2,
30     x_sup_version_number IN NUMBER,
31     x_exam_location_cd IN VARCHAR2,
32     x_alternative_title IN VARCHAR2,
33     x_override_enrolled_cp IN NUMBER,
34     x_override_eftsu IN NUMBER,
35     x_override_achievable_cp IN NUMBER,
36     x_override_outcome_due_dt IN DATE,
37     x_override_credit_reason IN VARCHAR2,
38     x_person_id IN NUMBER,
39     x_course_cd IN VARCHAR2,
40     x_unit_cd IN VARCHAR2,
41     x_version_number IN NUMBER,
42     x_cal_type IN VARCHAR2 ,
43     x_ci_sequence_number IN NUMBER ,
44     x_location_cd IN VARCHAR2 ,
45     x_unit_class IN VARCHAR2 ,
46     x_ci_start_dt IN DATE ,
47     x_ci_end_dt IN DATE ,
48     x_administrative_priority IN NUMBER ,
49     x_waitlist_dt   IN DATE ,
50     x_dcnt_reason_cd IN VARCHAR2 ,
51     x_creation_date IN DATE ,
52     x_created_by IN NUMBER,
53     x_last_update_date IN DATE,
54     x_last_updated_by IN NUMBER,
55     x_last_update_login IN NUMBER,
56     x_org_id IN NUMBER,
57     x_gs_version_number IN NUMBER,
58     x_enr_method_type   IN VARCHAR2 ,
59     x_failed_unit_rule  IN VARCHAR2 ,
60     x_cart              IN VARCHAR2 ,
61     x_rsv_seat_ext_id   IN NUMBER   ,
62     x_org_unit_cd       IN VARCHAR2 ,
63     x_grading_schema_code IN VARCHAR2,
64     x_subtitle           IN VARCHAR2 ,
65     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
66     x_session_id         IN NUMBER ,
67     x_deg_aud_detail_id  IN NUMBER ,
68     x_student_career_transcript IN VARCHAR2,
69     x_student_career_statistics IN VARCHAR2,
70     x_waitlist_manual_ind  IN VARCHAR2,--Bug ID: 2554109  added by adhawan
71     x_attribute_category IN VARCHAR2 ,
72     x_attribute1 IN VARCHAR2 ,
73     x_attribute2 IN VARCHAR2 ,
74     x_attribute3 IN VARCHAR2 ,
75     x_attribute4 IN VARCHAR2 ,
76     x_attribute5 IN VARCHAR2 ,
77     x_attribute6 IN VARCHAR2 ,
78     x_attribute7 IN VARCHAR2 ,
79     x_attribute8 IN VARCHAR2 ,
80     x_attribute9 IN VARCHAR2 ,
81     x_attribute10 IN VARCHAR2,
82     x_attribute11 IN VARCHAR2,
83     x_attribute12 IN VARCHAR2,
84     x_attribute13 IN VARCHAR2,
85     x_attribute14 IN VARCHAR2,
86     x_attribute15 IN VARCHAR2,
87     x_attribute16 IN VARCHAR2,
88     x_attribute17 IN VARCHAR2,
89     x_attribute18 IN VARCHAR2,
90     x_attribute19 IN VARCHAR2,
91     x_attribute20 IN VARCHAR2,
92     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
93     x_wlst_priority_weight_num IN NUMBER,
94     x_wlst_preference_weight_num IN NUMBER,
95     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
96     x_core_indicator_code IN VARCHAR2,
97     X_UPD_AUDIT_FLAG      IN VARCHAR2 DEFAULT 'N',
98     X_SS_SOURCE_IND       IN VARCHAR2 DEFAULT 'N'
99   ) AS
100     CURSOR cur_old_ref_values IS
101       SELECT   *
102       FROM     IGS_EN_SU_ATTEMPT_ALL
103       WHERE    ROWID = x_rowid;
104   BEGIN
105     l_rowid := x_rowid;
106      -- initialising the global variables for bug#5020285
107       old_references := NULL;
108       new_references := NULL;
109 
110     -- Code for setting the Old and New Reference Values.
111     -- Populate Old Values.
112     OPEN cur_old_ref_values;
113     FETCH cur_old_ref_values INTO old_references;
114     IF (cur_old_ref_values%NOTFOUND) AND (p_action  NOT IN ('INSERT','VALIDATE_INSERT')) THEN
115       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
116       IGS_GE_MSG_STACK.ADD;
117                CLOSE cur_old_ref_values;
118       APP_EXCEPTION.RAISE_EXCEPTION;
119       RETURN;
120     END IF;
121     CLOSE cur_old_ref_values;
122 
123     /** TRUNCATING the following date fields to remove the hours,minutes and seconds attributes from
124         date fields to overcome the lock row and comparison problems w.r.t.2321858 by kkillams **/
125       old_references.enrolled_dt     := TRUNC(old_references.enrolled_dt);
126       old_references.discontinued_dt := TRUNC(old_references.discontinued_dt);
127       old_references.rule_waived_dt  := TRUNC(old_references.rule_waived_dt);
128       -- Truncating the following Date fields for the bug fix : 2397855
129       old_references.override_outcome_due_dt := TRUNC(old_references.override_outcome_due_dt);
130       old_references.waitlist_dt := old_references.waitlist_dt;
131 
132     /*************************************************************************/
133 
134     -- Populate New Values.
135     new_references.uoo_id := x_uoo_id;
136     new_references.unit_attempt_status := x_unit_attempt_status;
137     new_references.administrative_unit_status:= x_administrative_unit_status;
138     IF (old_references.unit_attempt_status IS NULL OR (old_references.unit_attempt_status <> new_references.unit_attempt_status))
139 	AND  new_references.unit_attempt_status = 'ENROLLED' THEN
140 	new_references.enrolled_dt := TO_DATE(TO_CHAR(x_enrolled_dt,'DD-MM-YYYY') || ' ' || TO_CHAR(sysdate,'HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS');
141     ELSE
142 	new_references.enrolled_dt := x_enrolled_dt;
143     END IF;
144     IF (old_references.unit_attempt_status is null OR (old_references.unit_attempt_status <> new_references.unit_attempt_status))
145         AND  new_references.unit_attempt_status IN ('DROPPED','DISCONTIN') THEN
146           new_references.discontinued_dt := TO_DATE(TO_CHAR(x_discontinued_dt,'DD-MM-YYYY') || ' ' || TO_CHAR(sysdate,'HH24:MI:SS'),'DD-MM-YYYY HH24:MI:SS');
147     ELSE
148 	  new_references.discontinued_dt := x_discontinued_dt;
149     END IF;
150 
151     new_references.rule_waived_dt := TRUNC(x_rule_waived_dt);
152     new_references.rule_waived_person_id := x_rule_waived_person_id;
153     new_references.no_assessment_ind := x_no_assessment_ind;
154     new_references.sup_unit_cd := x_sup_unit_cd;
155     new_references.sup_version_number := x_sup_version_number;
156     new_references.exam_location_cd := x_exam_location_cd;
157     new_references.alternative_title := x_alternative_title;
158         -- As part of ENCR013 DLD
159     IF p_action = 'INSERT' THEN
160       -- If the user is override the Value then don't populate the default value
161        new_references.override_enrolled_cp := NVL(IGS_EN_GEN_015.enrp_get_appr_cr_pt(x_person_id,x_uoo_id), x_override_enrolled_cp);
162        -- Modified as a part of EN317 build.
163        new_references.override_achievable_cp := NVL( IGS_EN_GEN_015.enrp_get_appr_cr_pt(x_person_id,x_uoo_id),x_override_achievable_cp);
164     ELSE
165         new_references.override_enrolled_cp := x_override_enrolled_cp;
166         new_references.override_achievable_cp := x_override_achievable_cp;
167     END IF;
168 
169     new_references.override_eftsu := x_override_eftsu;
170     new_references.override_outcome_due_dt := TRUNC(x_override_outcome_due_dt);
171     new_references.override_credit_reason := x_override_credit_reason;
172     new_references.person_id := x_person_id;
173     new_references.course_cd := x_course_cd;
174     new_references.unit_cd := x_unit_cd;
175     new_references.version_number := x_version_number;
176     new_references.cal_type:= x_cal_type;
177     new_references.ci_sequence_number := x_ci_sequence_number;
178     new_references.location_cd := x_location_cd;
179     new_references.unit_class:= x_unit_class;
180     new_references.ci_start_dt := x_ci_start_dt;
181     new_references.ci_end_dt := x_ci_end_dt;
182     new_references.administrative_priority := x_administrative_priority;
183     new_references.waitlist_dt := x_waitlist_dt;
184     new_references.dcnt_reason_cd := x_dcnt_reason_cd;
185     new_references.org_unit_cd := x_org_unit_cd;
186     IF (p_action = 'UPDATE') THEN
187       new_references.creation_date := old_references.creation_date;
188       new_references.created_by := old_references.created_by;
189     ELSE
190       new_references.creation_date := x_creation_date;
191       new_references.created_by := x_created_by;
192     END IF;
193     new_references.last_update_date    := x_last_update_date ;
194     new_references.last_updated_by     := x_last_updated_by  ;
195     new_references.last_update_login   := x_last_update_login;
196     new_references.org_id              := x_org_id           ;
197     new_references.gs_version_number   := x_gs_version_number;
198     new_references.enr_method_type     := x_enr_method_type  ;
199     new_references.failed_unit_rule    := x_failed_unit_rule ;
200     new_references.cart                := x_cart             ;
201     new_references.rsv_seat_ext_id     := x_rsv_seat_ext_id  ;
202     new_references.grading_schema_code := x_grading_schema_code;
203     new_references.subtitle            := x_subtitle;
204     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
205     new_references.session_id          := x_session_id;
206     new_references.deg_aud_detail_id   := x_deg_aud_detail_id;
207     new_references.student_career_transcript  := x_student_career_transcript;
208     new_references.student_career_statistics  := x_student_career_statistics;
209     new_references.waitlist_manual_ind := x_waitlist_manual_ind; --Bug ID: 2554109  added by adhawan
210     new_references.attribute_category := x_attribute_category;
211     new_references.attribute1 := x_attribute1;
212     new_references.attribute2 := x_attribute2;
213     new_references.attribute3 := x_attribute3;
214     new_references.attribute4 := x_attribute4;
215     new_references.attribute5 := x_attribute5;
216     new_references.attribute6 := x_attribute6;
217     new_references.attribute7 := x_attribute7;
218     new_references.attribute8 := x_attribute8;
219     new_references.attribute9 := x_attribute9;
220     new_references.attribute10 := x_attribute10;
221     new_references.attribute11 := x_attribute11;
222     new_references.attribute12 := x_attribute12;
223     new_references.attribute13 := x_attribute13;
224     new_references.attribute14 := x_attribute14;
225     new_references.attribute15 := x_attribute15;
226     new_references.attribute16 := x_attribute16;
227     new_references.attribute17 := x_attribute17;
228     new_references.attribute18 := x_attribute18;
229     new_references.attribute19 := x_attribute19;
230     new_references.attribute20 := x_attribute20;
231     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
232     new_references.wlst_priority_weight_num := x_wlst_priority_weight_num;
233     new_references.wlst_preference_weight_num := x_wlst_preference_weight_num;
234     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
235     new_references.core_indicator_code := x_core_indicator_code;
236     new_references.UPD_AUDIT_FLAG :=  X_UPD_AUDIT_FLAG;
237     new_references.SS_SOURCE_IND :=  X_SS_SOURCE_IND;
238   END Set_Column_Values;
239 
240 
241 --For bug 2121602
242 --Checking whether attempting unit is precluded or not
243 --added by kkillams,08-MAY-2002
244 PROCEDURE chk_precluded_unit AS
245 CURSOR c_adv IS
246         SELECT  'x'
247         FROM    IGS_AV_STND_UNIT         asu
248         WHERE   asu.person_id                   =new_references.person_id       AND
249                 asu.as_course_cd                =new_references.course_cd       AND
250                 asu.unit_cd                     =new_references.unit_cd         AND
251                 asu.version_number              =new_references.version_number  AND
252                 asu.s_adv_stnd_granting_status IN ('APPROVED','GRANTED')        AND
253                 asu.s_adv_stnd_recognition_type = 'PRECLUSION';
254 v_adv_exists    VARCHAR2(1);
255 BEGIN
256       OPEN c_adv;
257       FETCH c_adv INTO v_adv_exists;
258       IF c_adv%FOUND THEN
259       CLOSE c_adv;
260           FND_MESSAGE.SET_NAME('IGS','IGS_EN_CANNOT_ATT_PRE_UNIT');
261           FND_MESSAGE.SET_TOKEN('UNIT',new_references.unit_cd);
262           IGS_GE_MSG_STACK.ADD;
263           APP_EXCEPTION.RAISE_EXCEPTION;
264       END IF;
265       CLOSE c_adv;
266 END chk_precluded_unit;
267 
268 --
269 -- For Enhancement Bug 1287292
270 -- Local Procedure added to check enrollment maximum
271 -- Called in Before DML
272 --
273 PROCEDURE chk_enrollment_max
274 AS
275 -- Local variables
276  p_uoo_id     NUMBER;
277  p_unit_cd    VARCHAR2(10);
278  p_version_number NUMBER(3);
279  l_actual_enr  NUMBER;
280  l_maximum_enr NUMBER;
281  l_lvl_unit    VARCHAR2(1);
282 -- Unit Section Level Cursor
283    CURSOR usec_enr_max(p_uoo_id NUMBER) IS
284    SELECT NVL(enrollment_maximum,0)
285    FROM igs_ps_usec_lim_wlst
286    WHERE uoo_id = p_uoo_id;
287 -- Unit Level Cursor
288    CURSOR unit_enr_max ( p_unit_cd VARCHAR2,
289                          p_version_number NUMBER ) IS
290                     /******************Enhancement  bug no 1517114 -- NVL from 0 made to 999999***********/
291    SELECT NVL(enrollment_maximum,999999)
292    FROM   igs_ps_unit_ver
293    WHERE  unit_cd = p_unit_cd AND
294           version_number = p_version_number;
295                    /******************Enhancement  bug no 1517114 -- NVL from 0 made to 999999***********/
296 --
297 -- Cursor to count the actual enrollment - Unit Section Level
298 --
299 -- Bug 19055975
300 -- previous the cursor was doing a select count(*) from igs_en_su_attempt
301 -- now changed it to use the enrollment actual from the unit section table
302    CURSOR  usec_enr_act(p_uoo_id NUMBER) IS
303    SELECT ENROLLMENT_ACTUAL
304    FROM  igs_ps_unit_ofr_opt
305    WHERE uoo_id = p_uoo_id;
306 BEGIN
307  -- This procedure checks the maximum enrollment for the unit section and
308  -- Raises a error message.
309  -- When user attempts to confirm a unit attempt for which the maximum enrollment
310  -- has been reached, deliver an error message: "Can not confirm enrollment in
311  -- unit attempt  UNIT CODE  and VERSION NUMBER.  Maximum enrollment has
312  -- been reached."
313  -- The enrollment maximum IS SET up IN unit details OR modified IN
314  -- unit section details. The system looks first TO unit section details, AND IF
315  -- no VALUES are stored AT that LEVEL, THEN looks TO unit details.
316  --
317  -- Check only if the status is ENROLLED
318  IF new_references.unit_attempt_status = 'ENROLLED' AND
319     new_references.unit_attempt_status <> NVL(old_references.unit_attempt_status,'Unknown') THEN
320  --Intialize the variables from the new references.
321                          p_uoo_id := new_references.uoo_id;
322                          p_unit_cd := new_references.unit_cd;
323                          p_version_number := new_references.version_number;
324  -- 1.Get the maximum enroolment values
325      l_maximum_enr := 0;
326    -- Check in unit section level
327    OPEN usec_enr_max(p_uoo_id);
328    FETCH usec_enr_max INTO l_maximum_enr;
329    CLOSE usec_enr_max;
330    -- Check in unit level
331    IF l_maximum_enr = 0   THEN
332          OPEN  unit_enr_max(p_unit_cd,p_version_number);
333      FETCH unit_enr_max INTO l_maximum_enr;
334      CLOSE unit_enr_max;
335    END IF;
336 
337  -- 2.Get the count of actual enrollment
338             OPEN  usec_enr_act(p_uoo_id);
339             FETCH usec_enr_act INTO l_actual_enr;
340             CLOSE usec_enr_act;
341       -- Check and raise the Error Message
342        IF l_actual_enr >= l_maximum_enr THEN
343                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_MAX_ENR_REACHED');
344                    FND_MESSAGE.SET_TOKEN('UNIT_CODE',p_unit_cd );
345                    APP_EXCEPTION.RAISE_EXCEPTION;
346        END IF;
347  END IF;
348  -- 3.End of the Procedure
349 END chk_enrollment_max;
350 
351   -- Trigger description :-
352   -- "OSS_TST".trg_sua_br_iud
353   -- BEFORE INSERT OR DELETE OR UPDATE
354   -- ON IGS_EN_SU_ATTEMPT_ALL
355   -- FOR EACH ROW
356   PROCEDURE BeforeRowInsertUpdateDelete1(
357     p_inserting IN BOOLEAN ,
358     p_updating IN BOOLEAN ,
359     p_deleting IN BOOLEAN
360     ) AS
361    /*  WHO       WHEN        WHAT
362      pradhakr   20-Jan-2003  Added a parameter no_assessment_ind to the procedue call IGS_EN_VAL_SUA.enrp_val_sua_ovrd_cp
363                              as part of ENCR26 build.
364      prraj       22-Oct-2002 Added condition  to check new_references.no_assessment_ind <> 'Y'
365 |                            in the if clause of the call to IGS_EN_VAL_SUA.enrp_val_sua_ovrd_cp for Audit Build(Bug# )
366      pmarada   02-sep-2002   bug 2526021, Assigning the waitlist positions to the waitlisted students, and clearing
367                              the ADMINISTRATIVE_PRIORITY value to null when unit attempt status is changed from waitlist to any other status
368      ayedubat   02-JUL-2002  Removed the Variation Window Validation added in the previous version and moved to IGSEN04B.pls
369                              for the same bug fix:2423605
370      ayedubat   26-JUN-2002  Added a new validation to check the Variation Window Cutoff Date for the bug Fix:2423605
371      ayedubat   30-MAY-2002  Added a new parameter,p_message_name to the Function:Enrp_Get_Rec_Window
372                              call and dsiplaying the returning message for the bug fix:2337161.
373      ayedubat   19-APR-2002  Changed the message names in the app_exception call from 'IGS_GE_RECORD_ALREADY_EXISTS'
374                              to 'IGS_EN_SUA_NOTENR_RECENR_WIN' while validating the record cutoff date and in the remaining
375                              places to the message returned by the calling function as part of the bug fix:2332137
376      Sudhir 23-MAY-2002 To   show token for the new message in calling the procedure IGS_EN_VAL_SUA.enrp_val_discont_aus
377      svanukur  29-APR-03     Passing uoo_id to  IGS_EN_GEN_010.ENRP_INS_SUAO_DISCON as part of MUS build # 2829262
378       myoganat  21-MAY-03    Set override enrolled and override achievable CP to zero for a unit section attempt that is being audited and
379                              when the record is an audit attempt record the procedure IGS_EN_VAL_SUA.ENRP_VAL_SUA_OVRD_CP will not get called.
380                              - as part of the build ENCR032 - Audit Attempt Credit Points. Bug  #2855870
381      kkillams   25-07-2003   New cursor c_unit_opt added to lock the unit oferring option table for a uoo_id, to avoid duplicate
382                              administrative priorities w.r.t. 2865921.
383      ptandon    03-SEP-2003  Modified the logic as per Waitlist Enhancements Build - Bug# 3052426
384 
385      ckasu      27-NOV-2005  Added logic inorder to perform/by pass validations when this was called from
386                              add_units_api for Calling Object as 'PLAN' as a part of bug#4666102
387 
388    */
389             --Getting the max administrative priority value, bug 2526021
390           CURSOR c_admin_priority (cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
391           SELECT max(ADMINISTRATIVE_PRIORITY) FROM igs_en_su_attempt
392           WHERE uoo_id = cp_uoo_id;
393 
394           CURSOR c_unit_opt (cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
395           SELECT 1 FROM igs_ps_unit_ofr_opt
396                    WHERE uoo_id = cp_uoo_id FOR UPDATE;
397           CURSOR cur_load(cp_teach_cal_type          IGS_CA_INST.CAL_TYPE%TYPE,
398                           cp_teach_ci_sequence_num   IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
399           SELECT load_cal_type, load_ci_sequence_number FROM igs_ca_teach_to_load_v
400                                                         WHERE teach_cal_type = cp_teach_cal_type
401                                                         AND   teach_ci_sequence_number = cp_teach_ci_sequence_num
402                                                         ORDER BY load_start_dt ASC;
403 
404           CURSOR cur_sub_uoo IS
405           SELECT sup.unit_cd, sup.version_number
406           FROM igs_ps_unit_ofr_opt sub, igs_ps_unit_ofr_opt sup
407           WHERE sub.uoo_id = new_references.uoo_id
408           AND sub.relation_type = 'SUBORDINATE'
409           AND sub.sup_uoo_id = sup.uoo_id;
410 
411           CURSOR cur_placement_unit IS
412           SELECT 1
413           FROM igs_ps_unit_ver
414           WHERE unit_cd = new_references.unit_cd
415           AND version_number = new_references.version_number
416           AND practical_ind = 'Y';
417           l_sup_unit_cd igs_ps_unit_ofr_opt.unit_cd%TYPE;
418           l_sup_ver igs_ps_unit_ofr_opt.version_number%TYPE;
419           l_placement_unit NUMBER;
420 
421         l_admin_priority                igs_en_su_attempt.administrative_priority%TYPE;
422         v_message_name                  VARCHAR2(30);
423         v_message_token                 VARCHAR2(2000);
424         v_rule_waived_person_id         IGS_EN_SU_ATTEMPT_ALL.rule_waived_person_id%TYPE;
425         v_effective_dt                  DATE;
426         v_unit_attempt_status           IGS_EN_SU_ATTEMPT_ALL.unit_attempt_status%TYPE;
427         v_return_val                    IGS_PE_STD_TODO.sequence_number%TYPE;
428         v_old_unit_attempt_status       IGS_EN_SU_ATTEMPT_ALL.unit_attempt_status%TYPE;
429         v_old_location_cd               IGS_EN_SU_ATTEMPT_ALL.location_cd%TYPE;
430         v_old_unit_class                IGS_EN_SU_ATTEMPT_ALL.unit_class%TYPE;
431         cst_duplicate                   CONSTANT  VARCHAR2(10) := 'DUPLICATE';
432         cst_completed                   CONSTANT  VARCHAR2(10) := 'COMPLETED';
433         cst_discontin                   CONSTANT  VARCHAR2(10) := 'DISCONTIN';
434         p_duplicate_course_cd           VARCHAR2(30);
435         l_dummy                         NUMBER;
436         l_pri_weight                    NUMBER;
437         l_pref_weight                   NUMBER;
438         l_dummy_value                   NUMBER;
439   BEGIN
440 
441 
442     --For bug No : 2121602, by kkillams
443     --Checking the unit whether unit is precluded or not in advance standing
444     IF p_inserting THEN
445         chk_precluded_unit;
446         -- set override enrolled and override achievable CP to zero for a unit section
447         --attempt that is being audited
448         IF (new_references.no_assessment_ind = 'Y') THEN
449             new_references.override_enrolled_cp := 0;
450             new_references.override_achievable_cp := 0;
451         END IF;
452 
453     END IF;
454 
455     IF p_updating THEN
456       --set override enrolled and override achievable CP to zero
457       --for a unit section attempt that is
458       --being audited
459       IF old_references.no_assessment_ind = 'N'   AND new_references.no_assessment_ind = 'Y' THEN
460          new_references.override_enrolled_cp := 0;
461          new_references.override_achievable_cp := 0;
462       END IF;
463     END IF;
464 
465     -- If trigger has not been disabled, perform required processing
466     --IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_EN_SU_ATTEMPT_ALL') THEN
467     -- Set audit details and discontinuation details
468     IF p_inserting THEN
469             -- Validate that the IGS_PS_UNIT offering option is being offered.
470             IF IGS_EN_VAL_SUA.enrp_val_sua_uoo(
471                     new_references.unit_cd,
472                     new_references.version_number,
473                     new_references.cal_type,
474                     new_references.ci_sequence_number,
475                     new_references.location_cd,
476                     new_references.unit_class,
477                     v_message_name,
478                 'N' ) = FALSE THEN
479                     IF (new_references.unit_attempt_status IN (cst_duplicate, cst_discontin, cst_completed)) THEN
480                             -- Bypass IGS_PS_UNIT version must be active and offered error for duplicates.
481                             NULL;
482                     ELSE
483                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
484                             IGS_GE_MSG_STACK.ADD;
485                 APP_EXCEPTION.RAISE_EXCEPTION;
486                     END IF;
487             END IF;
488 
489     END IF;
490 IF p_inserting OR p_updating THEN
491 
492  IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
493 
494             IF p_inserting THEN
495 
496                     -- Validate that discontinued date is not entered when p_inserting
497                     -- This is temporary code
498                     IF new_references.discontinued_dt IS NOT NULL AND
499                             (new_references.unit_attempt_status NOT IN (cst_duplicate,cst_discontin)) THEN
500                             FND_MESSAGE.SET_NAME('IGS','IGS_GE_INVALID_OPER');
501                             IGS_GE_MSG_STACK.ADD;
502                             APP_EXCEPTION.RAISE_EXCEPTION;
503                     END IF;
504 
505             END IF;
506 
507 
508                     IF p_updating THEN
509 
510                        -- Validate that update is allowed
511                        IF IGS_EN_VAL_SUA.enrp_val_sua_update(
512                                new_references.person_id,
513                                new_references.course_cd,
514                                new_references.unit_cd,
515                                new_references.cal_type,
516                                new_references.ci_sequence_number,
517                                new_references.unit_attempt_status,
518                                new_references.version_number,
519                                new_references.location_cd,
520                                new_references.unit_class,
521                                TRUNC(new_references.enrolled_dt),
522                                TRUNC(new_references.discontinued_dt),
523                                new_references.administrative_unit_status,
524                                TRUNC(new_references.rule_waived_dt),
525                                new_references.rule_waived_person_id,
526                                new_references.no_assessment_ind,
527                                new_references.sup_unit_cd,
528                                new_references.sup_version_number,
529                                new_references.exam_location_cd,
530                                old_references.version_number,
531                                old_references.location_cd,
532                                old_references.unit_class,
533                                TRUNC(old_references.enrolled_dt),
534                                TRUNC(old_references.discontinued_dt),
535                                old_references.administrative_unit_status,
536                                TRUNC(old_references.rule_waived_dt),
537                                old_references.rule_waived_person_id,
538                                old_references.no_assessment_ind,
539                                old_references.sup_unit_cd,
540                                old_references.sup_version_number,
541                                old_references.exam_location_cd,
542                                v_message_name,
543                                new_references.uoo_id) = FALSE THEN
544                                FND_MESSAGE.SET_NAME('IGS',v_message_name);
545                                IGS_GE_MSG_STACK.ADD;
546                                APP_EXCEPTION.RAISE_EXCEPTION;
547                        END IF;
548                     END IF;
549 
550                     -- Validate that insert or update is in the variation
551                     -- of enrolments window
552                     IF p_inserting THEN
553                             IF new_references.enrolled_dt IS NULL THEN
554                                     v_effective_dt := SYSDATE;
555                             ELSE
556                                     v_effective_dt := new_references.enrolled_dt;
557                             END IF;
558                     ELSE
559                             v_effective_dt := SYSDATE;
560                     END IF;
561                     -- Set IGS_PS_UNIT_OFR_OPT key.
562                     IGS_PS_GEN_006.CRSP_GET_UOO_KEY (
563                             new_references.unit_cd,
564                             new_references.version_number,
565                             new_references.cal_type,
566                             new_references.ci_sequence_number,
567                             new_references.location_cd,
568                             new_references.UNIT_CLASS,
569                             new_references.uoo_id);
570                     -- Validate enrolled date
571 
572                     IF IGS_EN_VAL_SUA.enrp_val_sua_enr_dt(
573                             new_references.person_id,
574                             new_references.course_cd,
575                             new_references.enrolled_dt,
576                             new_references.unit_attempt_status,
577                             new_references.ci_end_dt,
578                             '',
579                             v_message_name , 'N' ) = FALSE THEN
580                              FND_MESSAGE.SET_NAME('IGS',v_message_name);
581                             IGS_GE_MSG_STACK.ADD;
582                             APP_EXCEPTION.RAISE_EXCEPTION;
583                     END IF;
584 
585                     -- Validate that student IGS_PS_UNIT attempt can only be confirmed or
586                     -- unconfirmed in the record enrolments timeframe.
587                     IF (new_references.enrolled_dt IS NULL AND
588                          old_references.enrolled_dt IS NOT NULL AND
589                          old_references.unit_attempt_status <> 'DROPPED') OR
590                         (new_references.enrolled_dt IS NOT NULL AND
591                          old_references.enrolled_dt IS NULL) THEN
592                             IF new_references.enrolled_dt IS NULL THEN
593                                     v_effective_dt := SYSDATE;
594                             ELSE
595                                     v_effective_dt := new_references.enrolled_dt;
596                             END IF;
597                             IF IGS_EN_GEN_004.ENRP_GET_REC_WINDOW(
598                                     new_references.CAL_TYPE,
599                                     new_references.ci_sequence_number,
600                                     v_effective_dt,
601                                   new_references.uoo_id,
602                                   v_message_name) = FALSE THEN
603                                     FND_MESSAGE.SET_NAME('IGS',v_message_name);
604                                     IGS_GE_MSG_STACK.ADD;
605                                     APP_EXCEPTION.RAISE_EXCEPTION;
606                             END IF;
607                     END IF;
608                     -- Validate IGS_RU_RULE waived date
609 
610                     IF IGS_EN_VAL_SUA.enrp_val_sua_rule_wv(
611                             new_references.rule_waived_dt,
612                             new_references.enrolled_dt,
613                             v_rule_waived_person_id,
614                             v_message_name) = FALSE THEN
615                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
616                             IGS_GE_MSG_STACK.ADD;
617                                     APP_EXCEPTION.RAISE_EXCEPTION;
618                     ELSE
619                             -- Set IGS_RU_RULE waived IGS_PE_PERSON id from oracle username
620                             IF new_references.rule_waived_person_id IS NULL THEN
621                                     new_references.rule_waived_person_id := v_rule_waived_person_id;
622                             END IF;
623                     END IF;
624 
625 
626                     -- Validate discontinued date
627                     IF   (p_updating AND
628                             ( new_references.discontinued_dt IS NULL AND
629                             old_references.discontinued_dt IS NOT NULL) OR
630                             ( new_references.discontinued_dt IS NOT NULL AND
631                             TRUNC(new_references.discontinued_dt) <> TRUNC(old_references.discontinued_dt))) THEN
632                             IF IGS_EN_VAL_SUA.enrp_val_sua_discont(
633                                     new_references.person_id,
634                                     new_references.course_cd,
635                                     new_references.unit_cd,
636                                     new_references.version_number,
637                                     new_references.ci_start_dt,
638                                     new_references.enrolled_dt,
639                                     new_references.administrative_unit_status,
640                                     new_references.unit_attempt_status,
641                                     new_references.discontinued_dt,
642                                     v_message_name,'N') = FALSE THEN
643                                     FND_MESSAGE.SET_NAME('IGS',v_message_name);
644                                     IGS_GE_MSG_STACK.ADD;
645                                     APP_EXCEPTION.RAISE_EXCEPTION;
646 
647                             END IF;
648                     END IF;
649                     -- Validate administrative IGS_PS_UNIT status
650                     --
651                     IF p_updating THEN
652                             IF (new_references.administrative_unit_status IS NULL AND
653                              ((new_references.discontinued_dt IS NOT NULL) OR
654                                (old_references.administrative_unit_status IS NOT NULL))) OR
655                              (new_references.administrative_unit_status IS NOT NULL AND
656                               (old_references.administrative_unit_status IS NULL OR
657                               (old_references.administrative_unit_status<> new_references.administrative_unit_status)))
658                             THEN
659                                     IF IGS_EN_VAL_SUA.enrp_val_discont_aus(
660                                             new_references.administrative_unit_status,
661                                             new_references.discontinued_dt,
662                                             new_references.cal_type,
663                                             new_references.ci_sequence_number,
664                                             v_message_name,
665                                             new_references.uoo_id,
666                                             v_message_token ,
667                                             'N' ) = FALSE THEN
668                                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
669                                             IF v_message_name = 'IGS_SS_EN_INVLD_ADMIN_UNITST' THEN
670                                                FND_MESSAGE.SET_TOKEN('LIST',v_message_token);
671                                             END IF;
672                                             IGS_GE_MSG_STACK.ADD;
673                                             APP_EXCEPTION.RAISE_EXCEPTION;
674                                     END IF;
675                             END IF;
676                     END IF;
677                     -- Validate the teaching period against any intermission. This is performed
678                     -- on insert and on removal of the discontinuation date.
679                     IF p_inserting OR
680                          (p_updating AND old_references.discontinued_dt IS NOT NULL AND
681                                     new_references.discontinued_dt IS NULL) THEN
682                             IF IGS_EN_VAL_SUA.enrp_val_sua_intrmt(
683                                     new_references.person_id,
684                                     new_references.course_cd,
685                                     new_references.cal_type,
686                                     new_references.ci_sequence_number,
687                                     v_message_name) = FALSE THEN
688                                     FND_MESSAGE.SET_NAME('IGS',v_message_name);
689                                     IGS_GE_MSG_STACK.ADD;
690                                     APP_EXCEPTION.RAISE_EXCEPTION;
691                             END IF;
692                     END IF;
693                     -- validate research units being inserted or confirmed.
694                     IF(p_inserting OR
695                         (p_updating AND
696                          ((old_references.discontinued_dt IS NOT NULL AND
697                                              new_references.discontinued_dt IS NULL) OR
698                            (old_references.enrolled_dt IS NULL AND
699                                             new_references.enrolled_dt IS NOT NULL) OR
700                            (old_references.rule_waived_dt IS NULL AND
701                             old_references.unit_attempt_status = 'INVALID' AND
702                                              new_references.rule_waived_dt IS NOT NULL)))) AND
703                          (new_references.enrolled_dt IS NOT NULL AND new_references.discontinued_dt IS NULL) THEN
704                             IF IGS_EN_VAL_SUA.resp_val_sua_cnfrm(
705                                                     new_references.person_id,
706                                                     new_references.course_cd,
707                                                     new_references.unit_cd,
708                                                     new_references.version_number,
709                                                     new_references.cal_type,
710                                                     new_references.ci_sequence_number,
711                                                     v_message_name ,
712                                                    'N' ) = FALSE THEN
713                                     FND_MESSAGE.SET_NAME('IGS',v_message_name);
714                                     IGS_GE_MSG_STACK.ADD;
715                                     APP_EXCEPTION.RAISE_EXCEPTION;
716                             END IF;
717                     END IF;
718 
719    END IF; --IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
720 
721   -- Validate that advanced standing does not already exist
722   IF p_inserting OR
723       (p_updating AND
724       (new_references.enrolled_dt IS NOT NULL AND
725        old_references.enrolled_dt IS NULL) OR
726       (new_references.discontinued_dt IS  NULL AND
727        old_references.discontinued_dt IS NOT NULL) OR
728        (new_references.rule_waived_dt IS NOT NULL AND
729        old_references.rule_waived_dt IS NULL AND
730        old_references.unit_attempt_status = 'INVALID')) THEN
731 
732                     IF IGS_EN_VAL_SUA.enrp_val_sua_advstnd(
733                             new_references.person_id,
734                             new_references.course_cd,
735                             '',
736                             new_references.unit_cd,
737                             new_references.version_number,
738                             v_message_name,'N' ) = FALSE THEN
739                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
740                             IGS_GE_MSG_STACK.ADD;
741                                             APP_EXCEPTION.RAISE_EXCEPTION;
742                     END IF;
743   END IF;
744 
745   IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
746 
747             -- Set IGS_PS_UNIT attempt status
748             IF new_references.unit_attempt_status IS NULL THEN
749                     v_unit_attempt_status := 'Unknown';
750             ELSE
751                     v_unit_attempt_status := new_references.unit_attempt_status;
752             END IF;
753             --
754             -- Added as per the Bug# 2335455.
755             -- If the Unit Attempt Status is changing from 'Waitlist' to
756             -- any other status then make the 'Waitlisted date' as NULL.
757             --
758 
759             -- Modified as per Bug# 3052426 - Waitlists Enhancements Build
760             -- Modified the If condition and assigned NULL to WLST_PRIORITY_WEIGHT_NUM and
761             -- WLST_PREFERENCE_WEIGHT_NUM columns also if Unit Attempt Status is changed from 'Waitlisted' - ptandon
762             IF p_updating THEN
763               IF NVL(old_references.unit_attempt_status,'Unknown') = 'WAITLISTED' AND
764                  NVL(NEW_REFERENCES.unit_attempt_status,'Unknown') IN ('DROPPED','ENROLLED')
765               THEN
766                NEW_REFERENCES.waitlist_dt := NULL;
767                NEW_REFERENCES.ADMINISTRATIVE_PRIORITY := NULL;                            -- clearing waitlist position, pmarada, bug 2526021
768                NEW_REFERENCES.WAITLIST_MANUAL_IND     :='N';                              --Bug ID 2554109 adhawan
769                NEW_REFERENCES.WLST_PRIORITY_WEIGHT_NUM := NULL;
770                NEW_REFERENCES.WLST_PREFERENCE_WEIGHT_NUM := NULL;
771               END IF;
772             END IF;
773             --
774             -- End of the new code - added as per the Bug# 2335455.
775             --
776           -- Assigning waitlist positions for waitlisted students. bug 2526021, pmarada
777 
778             -- Modified as per Bug# 3052426 - Waitlists Enhancements Build
779             -- Modified so that if waitlist priorities/preferences exist then system should calculate
780             -- the waitlist position based on the priority/preference weightage otherwise student would
781             -- be put at the end of the waitlist queue (FIFO) - ptandon
782 
783           IF p_inserting  OR p_updating THEN
784             IF (new_references.UNIT_ATTEMPT_STATUS = 'WAITLISTED'
785               AND NVL(old_references.unit_attempt_status,'UNCONFIRM') <>  new_references.unit_attempt_status
786               AND new_references.waitlist_dt IS NOT NULL
787               AND new_references.administrative_priority IS NULL
788               AND new_references.wlst_priority_weight_num IS NULL) THEN
789                  Igs_En_Wlst_Gen_Proc.enrp_wlst_pri_pref_calc(new_references.person_id,
790                                                               new_references.course_cd,
791                                                               new_references.uoo_id,
792                                                               l_pri_weight,
793                                                               l_pref_weight);
794 
795                  IF l_pri_weight IS NOT NULL AND l_pref_weight IS NOT NULL THEN
796                     NEW_REFERENCES.WLST_PRIORITY_WEIGHT_NUM := l_pri_weight;
797                     NEW_REFERENCES.WLST_PREFERENCE_WEIGHT_NUM := l_pref_weight;
798                  ELSE
799                     OPEN c_unit_opt(new_references.uoo_id); -- Locking the unit offerring option table for the given uoo_id to avoid duplicate administrative priorities.
800                     FETCH c_unit_opt INTO l_dummy;
801                     OPEN c_admin_priority(new_references.uoo_id);
802                     FETCH c_admin_priority INTO l_admin_priority;
803                     CLOSE c_admin_priority;
804                     CLOSE c_unit_opt;
805                     NEW_REFERENCES.ADMINISTRATIVE_PRIORITY := NVL(l_admin_priority,0) + 1;
806                     NEW_REFERENCES.WLST_PRIORITY_WEIGHT_NUM := NULL;
807                     NEW_REFERENCES.WLST_PREFERENCE_WEIGHT_NUM := NULL;
808                  END IF;
809              END IF;
810           END IF;
811        --End of the code added as part of bug 2526021
812 
813             new_references.unit_attempt_status := IGS_EN_GEN_007.ENRP_GET_SUA_STATUS(
814                     new_references.person_id,
815                     new_references.course_cd,
816                     new_references.unit_cd,
817                     new_references.version_number,
818                     new_references.cal_type,
819                     new_references.ci_sequence_number,
820                     v_unit_attempt_status,
821                     new_references.enrolled_dt,
822                     new_references.rule_waived_dt,
823                     new_references.discontinued_dt,
824                     new_references.waitlist_dt,
825                     new_references.uoo_id); -- Added waitlist_dt parameter to call IGS_EN_GEN_007.ENRP_GET_SUA_STATUS.
826                                                  -- This is as per the Bug# 2335455.
827             IF p_inserting THEN
828                     -- Validate against IGS_PS_COURSE attempt status
829                     IF IGS_EN_VAL_SUA.enrp_val_sua_insert(
830                             new_references.person_id,
831                             new_references.course_cd,
832                             new_references.unit_attempt_status,
833                             v_message_name) = FALSE THEN
834                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
835                             IGS_GE_MSG_STACK.ADD;
836                                             APP_EXCEPTION.RAISE_EXCEPTION;
837                     END IF;
838                     -- Validate that teaching period is not prior to commencement date
839                     -- with the exception of DUPLICATE IGS_PS_UNIT attempts
840             END IF;
841 
842   END IF; -- IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
843 
844   IF p_inserting THEN
845      IF IGS_EN_VAL_SUA.enrp_val_sua_ci(
846                             new_references.person_id,
847                             new_references.course_cd,
848                             new_references.cal_type,
849                             new_references.ci_sequence_number,
850                             new_references.unit_attempt_status,
851                             NULL,
852                             'T', -- Validation called from trigger
853                             v_message_name) = FALSE THEN
854                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
855                             IGS_GE_MSG_STACK.ADD;
856                                             APP_EXCEPTION.RAISE_EXCEPTION;
857      END IF;
858   END IF;
859 
860   -- Save details when IGS_PS_UNIT attempt status is set to ENROLLED
861   -- to validate for duplicates across all student IGS_PS_UNIT attempts
862   IF (p_inserting OR
863      (p_updating AND
864       new_references.unit_attempt_status <> old_references.unit_attempt_status)) THEN
865       IF IGS_EN_VAL_SUA.enrp_val_sua_dupl(
866             new_references.person_id,
867             new_references.course_cd,
868             new_references.unit_cd,
869             new_references.version_number,
870             new_references.cal_type,
871             new_references.ci_sequence_number,
872             new_references.unit_attempt_status,
873             --The column duplicate_course_cd has been changed to course_cd
874             p_duplicate_course_cd,
875             v_message_name,
876             new_references.uoo_id) = FALSE THEN
877             FND_MESSAGE.SET_NAME('IGS',v_message_name);
878             IGS_GE_MSG_STACK.ADD;
879                                             APP_EXCEPTION.RAISE_EXCEPTION;
880       END IF;
881   END IF;
882 
883 
884   IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
885             -- Save rowid and old discontinuation date
886             -- if discontinuation details change
887 
888             IF p_updating THEN
889                     IF (old_references.discontinued_dt IS NOT NULL AND
890                        new_references.discontinued_dt IS NULL) OR    -- clear discontinuation details
891                       (new_references.discontinued_dt IS NOT NULL AND
892                        old_references.discontinued_dt IS NULL) OR      -- add  discontinuation details
893                       ((old_references.discontinued_dt IS NOT NULL AND
894                          new_references.discontinued_dt IS NOT NULL) AND
895                        (TRUNC(old_references.discontinued_dt) <> TRUNC(new_references.discontinued_dt))) THEN
896                           IF old_references.discontinued_dt IS NOT NULL THEN
897                              IGS_EN_GEN_001.ENRP_DEL_SUAO_DISCON(
898                                 old_references.person_id,
899                                 old_references.course_cd,
900                                 old_references.unit_cd,
901                                 old_references.cal_type,
902                                 old_references.ci_sequence_number,
903                                 old_references.discontinued_dt,
904                                 old_references.uoo_id);
905                           END IF;
906                           -- Insert student unit attempt outcome
907                           IF new_references.discontinued_dt IS NOT NULL THEN
908                              IF IGS_EN_GEN_010.ENRP_INS_SUAO_DISCON(
909                                    new_references.person_id,
910                                    new_references.course_cd,
911                                    new_references.unit_cd,
912                                    new_references.cal_type,
913                                    new_references.ci_sequence_number,
914                                    new_references.ci_start_dt,
915                                    new_references.ci_end_dt,
916                                    new_references.discontinued_dt,
917                                    new_references.administrative_unit_status,
918                                    v_message_name,
919                                    new_references.uoo_id) = FALSE THEN
920                                    FND_MESSAGE.SET_NAME('IGS',v_message_name);
921                                    IGS_GE_MSG_STACK.ADD;
922                                    APP_EXCEPTION.RAISE_EXCEPTION;
923                              END IF;
924                           END IF;
925                     ELSE
926                           IF (old_references.administrative_unit_status IS NOT NULL AND
927                             new_references.administrative_unit_status IS NULL) OR
928                               (new_references.administrative_unit_status IS NOT NULL AND
929                                old_references.administrative_unit_status IS NULL) OR
930                             ((old_references.administrative_unit_status IS NOT NULL AND
931                                new_references.administrative_unit_status IS NOT NULL) AND
932                               (old_references.administrative_unit_status <> new_references.administrative_unit_status))
933                           THEN
934                                  IF old_references.discontinued_dt IS NOT NULL THEN
935                                     IGS_EN_GEN_001.ENRP_DEL_SUAO_DISCON(
936                                        old_references.person_id,
937                                        old_references.course_cd,
938                                        old_references.unit_cd,
939                                        old_references.cal_type,
940                                        old_references.ci_sequence_number,
941                                        old_references.discontinued_dt,
942                                        old_references.uoo_id);
943                                  END IF;
944                                  -- Insert student unit attempt outcome
945                                  IF new_references.discontinued_dt IS NOT NULL THEN
946                                          IF IGS_EN_GEN_010.ENRP_INS_SUAO_DISCON(
947                                                  new_references.person_id,
948                                                  new_references.course_cd,
949                                                  new_references.unit_cd,
950                                                  new_references.cal_type,
951                                                  new_references.ci_sequence_number,
952                                                  new_references.ci_start_dt,
953                                                  new_references.ci_end_dt,
954                                                  new_references.discontinued_dt,
955                                                  new_references.administrative_unit_status,
956                                                  v_message_name,
957                                                  new_references.uoo_id) = FALSE THEN
958                                                     FND_MESSAGE.SET_NAME('IGS',v_message_name);
959                                                     IGS_GE_MSG_STACK.ADD;
960                                                     APP_EXCEPTION.RAISE_EXCEPTION;
961                                          END IF;
962                                  END IF;
963                           END IF;
964                     END IF;
965             END IF;
966 
967 	    -- Validate alternative IGS_PE_TITLE
968             IF (p_inserting AND
969                     new_references.unit_attempt_status NOT IN (cst_duplicate,cst_discontin,cst_completed)) OR
970                     (p_updating AND
971                      ((new_references.alternative_title IS  NULL AND
972                     old_references.alternative_title IS NOT NULL) OR
973                      (new_references.alternative_title IS NOT NULL AND
974                     old_references.alternative_title IS NULL))) THEN
975                     IF IGS_EN_VAL_SUA.enrp_val_sua_alt_ttl(
976                             new_references.unit_cd,
977                             new_references.version_number,
978                             new_references.alternative_title,
979                             v_message_name) = FALSE THEN
980                             FND_MESSAGE.SET_NAME('IGS',v_message_name);
981                             IGS_GE_MSG_STACK.ADD;
982                                             APP_EXCEPTION.RAISE_EXCEPTION;
983                     END IF;
984             END IF;
985   END IF; --IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
986 
987   -- Validate override enrolled and achievable credit points
988   IF  new_references.no_assessment_ind <> 'Y'   THEN
989       --skip validation of override enrolled and achievable credit points for audited record
990 
991                                 IF (p_inserting AND
992                                         new_references.unit_attempt_status NOT IN (cst_duplicate,cst_discontin,cst_completed) AND
993                                          new_references.override_enrolled_cp IS  NULL) OR
994                                         (p_updating AND
995                                         (new_references.override_enrolled_cp IS  NULL AND
996                                         old_references.override_enrolled_cp IS NOT NULL) OR
997                                         (new_references.override_enrolled_cp IS NOT NULL AND
998                                         (old_references.override_enrolled_cp IS NULL OR
999                                         old_references.override_enrolled_cp <> new_references.override_enrolled_cp)) OR
1000                                         (((new_references.override_achievable_cp IS  NULL AND
1001                                         old_references.override_achievable_cp IS NOT NULL) OR
1002                                         (new_references.override_achievable_cp IS NOT NULL AND
1003                                         (old_references.override_achievable_cp IS NULL OR
1004                                         old_references.override_achievable_cp <> new_references.override_achievable_cp)))) OR
1005                                         (new_references.override_eftsu IS  NULL AND
1006                                         old_references.override_eftsu IS NOT NULL) OR
1007                                         (new_references.override_eftsu IS NOT NULL AND
1008                                         (old_references.override_eftsu IS NULL OR
1009                                         old_references.override_eftsu <> new_references.override_eftsu)))
1010                                         THEN
1011                                         IF IGS_EN_GEN_015.enrp_get_appr_cr_pt(new_references.person_id,new_references.uoo_id) IS NULL AND
1012                                            IGS_EN_VAL_SUA.enrp_val_sua_ovrd_cp(
1013                                                 new_references.unit_cd,
1014                                                 new_references.version_number,
1015                                                 new_references.override_enrolled_cp,
1016                                                 new_references.override_achievable_cp,
1017                                                 new_references.override_eftsu,
1018                                                 v_message_name,
1019                                                 new_references.uoo_id, --New parameter uoo_id is added w.r.t. 2375757 by kkillams
1020                                                 new_references.no_assessment_ind) = FALSE THEN
1021                                                 FND_MESSAGE.SET_NAME('IGS',v_message_name);
1022                                                 IGS_GE_MSG_STACK.ADD;
1023                                                APP_EXCEPTION.RAISE_EXCEPTION;
1024                                         END IF;
1025                                 END IF;
1026   END IF; -- IF  new_references.no_assessment_ind <> 'Y'   THEN
1027 
1028   -- Validate override credit reason
1029   IF IGS_EN_VAL_SUA.enrp_val_sua_cp_rsn(
1030                                 new_references.override_enrolled_cp,
1031                                 new_references.override_achievable_cp,
1032                                 new_references.override_credit_reason,
1033                                 v_message_name) = FALSE THEN
1034                                 FND_MESSAGE.SET_NAME('IGS',v_message_name);
1035                                 IGS_GE_MSG_STACK.ADD;
1036                                 APP_EXCEPTION.RAISE_EXCEPTION;
1037   END IF;
1038 
1039   --ading the following validations as part of placement build to populate the
1040   --sup unit cd and sup version number if context unit is a subordinate unit
1041 
1042   IF p_inserting  OR p_updating THEN
1043 
1044      OPEN cur_sub_uoo ;
1045      FETCH cur_sub_uoo INTO l_sup_unit_cd, l_sup_ver;
1046      IF cur_sub_uoo%FOUND THEN
1047         new_references.sup_unit_cd := l_sup_unit_cd;
1048         new_references.sup_version_number := l_sup_ver;
1049      END IF;
1050      CLOSE cur_sub_uoo;
1051 
1052   END IF;
1053 
1054   IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
1055 
1056                         -- If required add a todo entry to forced the re-checking of the IGS_PS_UNIT IGS_RU_RULEs
1057                         -- for the student. This is done in insert of a new ENROLLED/INVALID IGS_PS_UNIT
1058                         -- attempt, on the confirmation of a IGS_PS_UNIT attempt or on lifting of a
1059                         -- discontinuation of a IGS_PS_UNIT attempt.
1060                         IF new_references.unit_attempt_status = 'ENROLLED' OR
1061                             new_references.unit_attempt_status = 'INVALID' THEN
1062                                 IF p_inserting OR
1063                                      (p_updating AND
1064                                       ((old_references.enrolled_dt IS NULL AND
1065                                          new_references.enrolled_dt IS NOT NULL) OR
1066                                         (old_references.enrolled_dt IS NOT NULL AND
1067                                          new_references.enrolled_dt IS NULL) OR
1068                                         (old_references.discontinued_dt IS NOT NULL AND
1069                                           new_references.discontinued_dt IS NULL) OR
1070                                          (old_references.discontinued_dt IS NULL AND
1071                                            new_references.discontinued_dt IS NOT NULL) OR
1072                                          (new_references.rule_waived_dt IS NOT NULL AND
1073                                           old_references.rule_waived_dt IS NULL) OR
1074                                          (old_references.rule_waived_dt IS NOT NULL AND
1075                                           new_references.rule_waived_dt IS NULL))) THEN
1076                                         v_return_val := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(new_references.person_id,
1077                                                 'UNIT-RULES',
1078                                                 NULL,
1079                                                 'Y');
1080                                 END IF;
1081                         END IF;
1082                         -- If a IGS_PS_UNIT attempt was unconfirmed from being enrolled, add a todo entry
1083                         -- to force a re-checking of the students IGS_PS_UNIT rules.
1084                         IF p_updating AND
1085                              new_references.unit_attempt_status = 'UNCONFIRM' AND
1086                              old_references.unit_attempt_status = 'ENROLLED' THEN
1087                                 v_return_val := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(new_references.person_id,
1088                                         'UNIT-RULES',
1089                                         NULL,
1090                                         'Y');
1091                         END IF;
1092                         -- If required, add a todo entry to forced the maintenance of default
1093                         -- stdnt_unit_atmpt_ass_items for the student.
1094                         -- The todo entry is created for students that have:
1095                         --      1. have just enrolled
1096                         --      2. had their enrolment status changed
1097                         --      3. had their IGS_AD_LOCATION and class details changed
1098                         IF (p_inserting AND
1099                              new_references.unit_attempt_status = 'ENROLLED') OR
1100                                      (p_updating AND
1101                                       ((old_references.unit_attempt_status <>
1102                                         new_references.unit_attempt_status) OR
1103                                       (old_references.location_cd <>
1104                                        new_references.location_cd) OR
1105                                       (old_references.unit_class<>
1106                                        new_references.unit_class))) THEN
1107                                 IF p_inserting THEN
1108                                         v_old_unit_attempt_status       := NULL;
1109                                         v_old_location_cd               := NULL;
1110                                         v_old_unit_class                := NULL;
1111                                 ELSE
1112                                         v_old_unit_attempt_status       := old_references.unit_attempt_status;
1113                                         v_old_location_cd               := old_references.location_cd;
1114                                         v_old_unit_class                := old_references.unit_class;
1115                                 END IF;
1116                                 IGS_AS_GEN_007.ASSP_INS_SUAAI_TODO(
1117                                         new_references.person_id,
1118                                         new_references.course_cd,
1119                                         new_references.unit_cd,
1120                                         new_references.cal_type,
1121                                         new_references.ci_sequence_number,
1122                                         v_old_unit_attempt_status,
1123                                         new_references.unit_attempt_status,
1124                                         v_old_location_cd,
1125                                         new_references.location_cd,
1126                                         v_old_unit_class,
1127                                         new_references.unit_class,
1128                                         new_references.uoo_id);
1129                         END IF;
1130 
1131                   IF p_updating THEN
1132                    IF (old_references.unit_attempt_status <> new_references.unit_attempt_status) AND
1133                       (new_references.unit_attempt_status IN ('DROPPED', 'DISCONTIN')) THEN
1134                       l_old_cp := NULL;
1135                       l_load_cal_type := NULL;
1136                       l_load_seq_num := NULL;
1137                       OPEN cur_load(new_references.cal_type, new_references.ci_sequence_number);
1138                       FETCH cur_load INTO l_load_cal_type, l_load_seq_num;
1139                       IF cur_load%FOUND THEN
1140                             IGS_EN_PRC_LOAD.enrp_get_prg_eftsu_cp(
1141                                         p_person_id       =>new_references.person_id,
1142                                         p_course_cd       =>new_references.course_cd,
1143                                         p_cal_type        =>l_load_cal_type,
1144                                         p_sequence_number =>l_load_seq_num,
1145                                         p_eftsu_total     =>l_dummy_value,
1146                                         p_credit_points   => l_old_cp);
1147                       END IF;
1148                       CLOSE cur_load;
1149                    END IF;
1150                 END IF;
1151 
1152              IF p_updating THEN
1153                 IF (old_references.unit_attempt_status <> new_references.unit_attempt_status) AND
1154                   (new_references.unit_attempt_status = 'ENROLLED') THEN
1155                   OPEN cur_placement_unit;
1156                 FETCH cur_placement_unit INTO l_placement_unit;
1157                 IF cur_placement_unit%FOUND THEN
1158                    IGS_EN_WORKFLOW.student_placement_event (
1159                         P_person_id => new_references.person_id,
1160                         P_program_cd => new_references.course_cd,
1161                         P_unit_cd => new_references.unit_cd,
1162                         P_unit_class => new_references.unit_class,
1163                         P_location_cd => new_references.location_cd,
1164                         p_uoo_id => new_references.uoo_id);
1165                 END IF;
1166             CLOSE cur_placement_unit;
1167             END IF;
1168            END IF;
1169   END IF; -- IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
1170 
1171  END IF; -- IF p_inserting OR p_updating THEN
1172   IF p_deleting THEN
1173 
1174                         -- Validate  student IGS_PS_UNIT attempt
1175                         IF IGS_EN_VAL_SUA.enrp_val_sua_delete(
1176                                 old_references.person_id,
1177                                 old_references.course_cd,
1178                                 old_references.unit_cd,
1179                                 'T', -- indicates trigger validation
1180                                 old_references.unit_attempt_status,
1181                                 old_references.cal_type,
1182                                 old_references.ci_sequence_number,
1183                                 old_references.discontinued_dt,
1184                                 SYSDATE,
1185                                 v_message_name,
1186                                 old_references.uoo_id) = FALSE THEN
1187                                 FND_MESSAGE.SET_NAME('IGS',v_message_name);
1188                                 IGS_GE_MSG_STACK.ADD;
1189                                                         APP_EXCEPTION.RAISE_EXCEPTION;
1190                         END IF;
1191                         -- Save student IGS_PS_COURSE attempt details in package table information
1192                         -- so that IGS_PS_COURSE attempt status can be updated in
1193                         -- after statement trigger
1194                         IF IGS_EN_GEN_012.ENRP_UPD_SCA_STATUS(
1195                                 old_references.person_id,
1196                                 old_references.course_cd,
1197                                 v_message_name) = FALSE THEN
1198                                 FND_MESSAGE.SET_NAME('IGS',v_message_name);
1199                                 IGS_GE_MSG_STACK.ADD;
1200                                 APP_EXCEPTION.RAISE_EXCEPTION;
1201                         END IF;
1202                         -- Save student IGS_PS_COURSE attempt details in package table information
1203                         -- so that student IGS_PS_UNIT transfer detail can be deleted  in an
1204                         -- after statement trigger
1205                         IF IGS_EN_GEN_001.ENRP_DEL_SUA_SUT(
1206                                 old_references.person_id,
1207                                 old_references.course_cd,
1208                                 old_references.unit_cd,
1209                                 old_references.cal_type,
1210                                 old_references.ci_sequence_number,
1211                                 old_references.unit_attempt_status,
1212                                 v_message_name,
1213                                 old_references.uoo_id) = FALSE THEN
1214                                 FND_MESSAGE.SET_NAME('IGS',v_message_name);
1215                                 IGS_GE_MSG_STACK.ADD;
1216                                 APP_EXCEPTION.RAISE_EXCEPTION;
1217                         END IF;
1218                         IF old_references.unit_attempt_status = 'ENROLLED' THEN
1219                                 v_return_val := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(old_references.person_id,
1220                                         'UNIT-RULES',
1221                                         NULL,
1222                                         'Y');
1223                         END IF;
1224                         IF NOT IGS_EN_SUA_API.chk_sup_del_alwd( old_references.person_id,
1225                                            old_references.course_cd,
1226                                            old_references.uoo_id) THEN
1227                                 FND_MESSAGE.SET_NAME('IGS','IGS_EN_SUP_DEL_NOTALWD');
1228                                 IGS_GE_MSG_STACK.ADD;
1229                                 APP_EXCEPTION.RAISE_EXCEPTION;
1230                         END IF;
1231 
1232   END IF; --   IF p_deleting THEN
1233 
1234 
1235   END BeforeRowInsertUpdateDelete1;
1236 -- Procedure for checking the uniqueness
1237 PROCEDURE Check_Uniqueness AS
1238 -- The Unique key has been commented as part of the bug fix 2554109
1239 -- The uniqueness will be validated by the the new function igs_en_wlst_gen_proc.enrp_resequence_wlst();
1240 BEGIN
1241 
1242   /*This Uk check was added as part of MUS build, # 2829262*/
1243   IF Get_Uk_For_Validation(x_unit_cd                 => new_references.unit_cd,
1244                            x_cal_type                => new_references.cal_type,
1245                            x_ci_sequence_number      => new_references.ci_sequence_number,
1246                            x_location_cd             => new_references.location_cd,
1247                            x_unit_class              => new_references.unit_class,
1248                            x_person_id               => new_references.person_id,
1249                            x_course_cd               => new_references.course_cd,
1250                            x_version_number          => new_references.version_number
1251                            ) THEN
1252     FND_MESSAGE.SET_NAME('IGS','IGS_GE_MULTI_ORG_DUP_REC');
1253     IGS_GE_MSG_STACK.ADD;
1254     APP_EXCEPTION.RAISE_EXCEPTION;
1255   END IF;
1256 
1257 END Check_Uniqueness;
1258 
1259   -- Trigger description :-
1260   -- "OSS_TST".trg_sua_br_iud_fin
1261   -- BEFORE INSERT OR DELETE OR UPDATE
1262   -- ON IGS_EN_SU_ATTEMPT_ALL
1263   -- FOR EACH ROW
1264   PROCEDURE BeforeRowInsertUpdateDelete2(
1265     p_inserting IN BOOLEAN,
1266     p_updating IN BOOLEAN ,
1267     p_deleting IN BOOLEAN
1268     ) AS
1269         v_sequence_number       NUMBER;
1270         l_special_fee           NUMBER;
1271         l_apply_spl_fee         BOOLEAN;
1272         l_load_ci_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
1273         l_load_cal_type           IGS_CA_INST.CAL_TYPE%TYPE;
1274 
1275    CURSOR cur_special_fee IS
1276           SELECT count(*)
1277             FROM IGS_PS_USEC_SP_FEES
1278            WHERE uoo_id = NVL(old_references.uoo_id, new_references.uoo_id)
1279              AND closed_flag = 'N';
1280 
1281    CURSOR cur_cal_info IS
1282         SELECT load_ci_sequence_number, load_cal_type
1283           FROM igs_ca_teach_to_load_v
1284          WHERE teach_cal_type = NVL(old_references.cal_type, new_references.cal_type)
1285            AND teach_ci_sequence_number = NVL(old_references.ci_sequence_number,new_references.ci_sequence_number)
1286            ORDER BY load_start_dt ASC;
1287 
1288    CURSOR  cur_sua_ref_cds IS
1289         Select sref.rowid,sref.*
1290         From IGS_AS_SUA_REF_CDS sref
1291         Where sref.person_id = old_references.person_id
1292         And sref.course_cd = old_references.course_cd
1293         And sref.uoo_id = old_references.uoo_id
1294         And sref.deleted_date is null;
1295 
1296   BEGIN
1297         -- anilk, Audit special fee build
1298         OPEN cur_special_fee;
1299         FETCH cur_special_fee INTO l_special_fee;
1300         CLOSE cur_special_fee;
1301 
1302         IF l_special_fee = 0 THEN
1303           l_apply_spl_fee := FALSE;
1304         ELSE
1305           l_apply_spl_fee := TRUE;
1306         END IF;
1307 
1308         IF l_apply_spl_fee THEN
1309          IF p_inserting THEN
1310              l_apply_spl_fee := TRUE;
1311          ELSIF p_updating AND new_references.unit_attempt_status <> old_references.unit_attempt_status THEN
1312              l_apply_spl_fee := TRUE;
1313          ELSIF p_deleting THEN
1314              l_apply_spl_fee := TRUE;
1315          ELSE
1316              l_apply_spl_fee := FALSE;
1317          END IF;
1318         END IF;
1319 
1320         IF l_apply_spl_fee THEN
1321 
1322           OPEN cur_cal_info;
1323           FETCH cur_cal_info INTO  l_load_ci_sequence_number, l_load_cal_type;
1324           CLOSE cur_cal_info;
1325 
1326           v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
1327             NVL(old_references.person_id, new_references.person_id),
1328             'SPECIAL_FEE',
1329             SYSDATE,
1330             'Y');
1331 
1332           IGS_GE_GEN_003.GENP_INS_TODO_REF(
1333             NVL(old_references.person_id,new_references.person_id),
1334             'SPECIAL_FEE',
1335             v_sequence_number,
1336             l_load_cal_type,
1337             l_load_ci_sequence_number,
1338             NVL(old_references.course_cd, new_references.course_cd),
1339             NVL(old_references.unit_cd, new_references.unit_cd),
1340             NULL,
1341             NVL(old_references.uoo_id, new_references.uoo_id));
1342         END IF;
1343         -- END, anilk, Audit special fee build
1344 
1345         -- Log an entry in the IGS_PE_STD_TODO table, indicating that a fee re-assessment
1346         -- is required.
1347         IF p_inserting OR p_updating THEN
1348                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
1349                                         new_references.person_id,
1350                                         'FEE_RECALC',
1351                                         SYSDATE,
1352                                         'Y');
1353         ELSE
1354                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
1355                                         old_references.person_id,
1356                                         'FEE_RECALC',
1357                                         SYSDATE,
1358                                         'Y');
1359         END IF;
1360 
1361         --logic for marking unit attempt reference codes as dropped
1362         --when the unit attempt is being dropped
1363         IF p_updating AND
1364            old_references.unit_attempt_status <> 'DROPPED' AND
1365            new_references.unit_attempt_status = 'DROPPED' THEN
1366 
1367             FOR v_cur_sua_ref_cds IN cur_sua_ref_cds LOOP
1368               igs_as_sua_ref_cds_pkg.update_row (
1369                    x_rowid                 => v_cur_sua_ref_cds.rowid,
1370                    x_suar_id               => v_cur_sua_ref_cds.suar_id,
1371                    x_person_id             => v_cur_sua_ref_cds.person_id,
1372                    x_course_cd             => v_cur_sua_ref_cds.course_cd,
1373                    x_uoo_id                => v_cur_sua_ref_cds.uoo_id,
1374                    x_reference_code_id     => v_cur_sua_ref_cds.reference_code_id,
1375                    x_reference_cd_type     => v_cur_sua_ref_cds.reference_cd_type,
1376                    x_reference_cd          => v_cur_sua_ref_cds.reference_cd,
1377                    x_applied_course_cd     => v_cur_sua_ref_cds.applied_course_cd,
1378                    x_deleted_date          => SYSDATE,
1379                    x_mode                  => 'R' );
1380             END LOOP;
1381 
1382         END IF;
1383 
1384   END BeforeRowInsertUpdateDelete2;
1385 
1386 
1387 
1388   -- Trigger description :-
1389   -- "OSS_TST".trg_sua_ar_iud
1390   -- AFTER INSERT OR DELETE OR UPDATE
1391   -- ON IGS_EN_SU_ATTEMPT_ALL
1392   -- FOR EACH ROW
1393   PROCEDURE AfterRowInsertUpdateDelete3(
1394     p_inserting IN BOOLEAN,
1395     p_updating IN BOOLEAN ,
1396     p_deleting IN BOOLEAN
1397     ) AS
1398         v_message_name          VARCHAR2(30);
1399         v_rowid_saved           BOOLEAN := FALSE;
1400   BEGIN
1401         -- If trigger has not been disabled, perform required processing
1402 --      IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_EN_SU_ATTEMPT_ALL') THEN
1403                 IF(p_updating AND
1404                     old_references.unit_attempt_status <> new_references.unit_attempt_status) OR
1405                    p_inserting THEN
1406                         -- update of student IGS_PS_COURSE attempt after student IGS_PS_UNIT attempt is posted
1407                         -- to the database
1408                         IF v_rowid_saved = FALSE  THEN
1409                                  -- Save the rowid of the current row.
1410                            IF v_rowid_saved = FALSE    THEN
1411                              IF IGS_EN_GEN_012.ENRP_UPD_SCA_STATUS(
1412                                 new_references.person_id,
1413                                 new_references.course_cd,
1414                                 v_message_name) = FALSE THEN
1415                                       FND_MESSAGE.SET_NAME('IGS',v_message_name);
1416                                       IGS_GE_MSG_STACK.ADD;
1417                                       APP_EXCEPTION.RAISE_EXCEPTION;
1418                               END IF;
1419                               v_rowid_saved := TRUE;
1420                           END IF;
1421                         END IF;
1422                 END IF;
1423 --      END IF;
1424   END AfterRowInsertUpdateDelete3;
1425 
1426   -- Trigger description :-
1427   -- "OSS_TST".trg_sua_ar_u_hist
1428   -- AFTER UPDATE
1429   -- ON IGS_EN_SU_ATTEMPT_ALL
1430   -- FOR EACH ROW
1431   PROCEDURE AfterRowUpdate4(
1432     p_inserting IN BOOLEAN,
1433     p_updating IN BOOLEAN ,
1434     p_deleting IN BOOLEAN
1435     ) AS
1436   BEGIN
1437         -- create a history
1438         IGS_EN_GEN_010.ENRP_INS_SUA_HIST( old_references.person_id,
1439                 old_references.course_cd,
1440                 old_references.unit_cd,
1441                 old_references.cal_type,
1442                 old_references.ci_sequence_number,
1443                 new_references.version_number,
1444                 old_references.version_number,
1445                 new_references.location_cd,
1446                 old_references.location_cd,
1447                 new_references.unit_class,
1448                 old_references.unit_class,
1449                 new_references.enrolled_dt,
1450                 old_references.enrolled_dt,
1451                 new_references.unit_attempt_status,
1452                 old_references.unit_attempt_status,
1453                 new_references.administrative_unit_status,
1454                 old_references.administrative_unit_status,
1455                 new_references.discontinued_dt,
1456                 old_references.discontinued_dt,
1457                 new_references.rule_waived_dt,
1458                 old_references.rule_waived_dt,
1459                 new_references.rule_waived_person_id,
1460                 old_references.rule_waived_person_id,
1461                 new_references.no_assessment_ind,
1462                 old_references.no_assessment_ind,
1463                 new_references.exam_location_cd,
1464                 old_references.exam_location_cd,
1465                 new_references.sup_unit_cd,
1466                 old_references.sup_unit_cd,
1467                 new_references.sup_version_number,
1468                 old_references.sup_version_number,
1469                 new_references.alternative_title,
1470                 old_references.alternative_title,
1471                 new_references.override_enrolled_cp,
1472                 old_references.override_enrolled_cp,
1473                 new_references.override_eftsu,
1474                 old_references.override_eftsu,
1475                 new_references.override_achievable_cp,
1476                 old_references.override_achievable_cp,
1477                 new_references.override_outcome_due_dt,
1478                 old_references.override_outcome_due_dt,
1479                 new_references.override_credit_reason,
1480                 old_references.override_credit_reason,
1481                 new_references.last_updated_by,
1482                 old_references.last_updated_by,
1483                 new_references.last_update_date,
1484                 old_references.last_update_date,
1485                 new_references.dcnt_reason_cd,
1486                 old_references.dcnt_reason_Cd,
1487                 old_references.uoo_id,
1488                 new_references.core_indicator_code,
1489                 old_references.core_indicator_code);
1490   END AfterRowUpdate4;
1491   -- Trigger description :-
1492   -- "OSS_TST".trg_sua_as_iud
1493   -- AFTER INSERT OR DELETE OR UPDATE
1494   -- ON IGS_EN_SU_ATTEMPT_ALL
1495 
1496 
1497   PROCEDURE Check_Parent_Existance AS
1498   BEGIN
1499 
1500    /*  WHO         WHEN            WHAT
1501        ckasu       27-NOV-2005     Added logic inorder toby pass validation IGS_LOOKUPS_VIEW_PKG.GET_PK_FOR_VALIDATION
1502                                    when IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop = 'PLAN' since Plaaning Sheet Records
1503                                    are created in 'PLANNED' Status which is not a looup value as a part of bug#4666102
1504 
1505    */
1506 
1507     IF igs_en_su_attempt_pkg.pkg_source_of_drop  = 'SWAP' THEN
1508        RETURN;
1509     END IF;
1510     IF (((old_references.administrative_unit_status= new_references.administrative_unit_status)) OR
1511         ((new_references.administrative_unit_status IS NULL))) THEN
1512       NULL;
1513     ELSIF NOT IGS_AD_ADM_UNIT_STAT_PKG.Get_PK_For_Validation (
1514         new_references.administrative_unit_status,'N')      THEN
1515             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1516             IGS_GE_MSG_STACK.ADD;
1517             APP_EXCEPTION.RAISE_EXCEPTION;
1518     END IF;
1519 
1520     -- Check whether Grading schema code and gs_version_number are present in the master table IGS_AS_GRD_SCHEMA
1521     IF (
1522          (
1523            (old_references.grading_schema_code = new_references.grading_schema_code) AND
1524            (old_references.gs_version_number = new_references.gs_version_number    )
1525          )
1526          OR
1527          (
1528            (new_references.grading_schema_code IS NULL) OR
1529            (new_references.gs_version_number IS NULL)
1530          )
1531        ) THEN
1532       NULL;
1533     ELSIF NOT IGS_AS_GRD_SCHEMA_PKG.Get_PK_For_Validation (
1534            new_references.grading_schema_code,
1535            new_references.gs_version_number ) THEN
1536          Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1537          IGS_GE_MSG_STACK.ADD;
1538          APP_EXCEPTION.RAISE_EXCEPTION;
1539     END IF;
1540 
1541     IF (((old_references.CAL_TYPE = new_references.cal_type) AND
1542          (old_references.ci_sequence_number = new_references.ci_sequence_number) AND
1543          (old_references.ci_start_dt = new_references.ci_start_dt) AND
1544          (old_references.ci_end_dt = new_references.ci_end_dt)) OR
1545         ((new_references.cal_type IS NULL) OR
1546          (new_references.ci_sequence_number IS NULL) OR
1547          (new_references.ci_start_dt IS NULL) OR
1548          (new_references.ci_end_dt IS NULL))) THEN
1549       NULL;
1550     ELSIF NOT IGS_CA_INST_PKG.Get_UK_For_Validation (
1551         new_references.cal_type,
1552         new_references.ci_sequence_number,
1553         new_references.ci_start_dt,
1554         new_references.ci_end_dt  )     THEN
1555             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1556             IGS_GE_MSG_STACK.ADD;
1557             APP_EXCEPTION.RAISE_EXCEPTION;
1558     END IF;
1559 
1560     IF (((old_references.exam_location_cd = new_references.exam_location_cd)) OR
1561         ((new_references.exam_location_cd IS NULL))) THEN
1562       NULL;
1563     ELSIF NOT IGS_AD_LOCATION_PKG.Get_PK_For_Validation (
1564         new_references.exam_location_cd,'N'
1565         )       THEN
1566             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1567             IGS_GE_MSG_STACK.ADD;
1568             APP_EXCEPTION.RAISE_EXCEPTION;
1569     END IF;
1570     IF (((old_references.rule_waived_person_id = new_references.rule_waived_person_id)) OR
1571         ((new_references.rule_waived_person_id IS NULL))) THEN
1572       NULL;
1573     ELSIF NOT IGS_PE_PERSON_PKG.Get_PK_For_Validation (
1574         new_references.rule_waived_person_id         )  THEN
1575             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1576             IGS_GE_MSG_STACK.ADD;
1577             APP_EXCEPTION.RAISE_EXCEPTION;
1578     END IF;
1579     IF (((old_references.person_id = new_references.person_id) AND
1580          (old_references.course_cd = new_references.course_cd)) OR
1581         ((new_references.person_id IS NULL) OR
1582          (new_references.course_cd IS NULL))) THEN
1583       NULL;
1584     ELSIF NOT IGS_EN_STDNT_PS_ATT_PKG.Get_PK_For_Validation (
1585         new_references.person_id,
1586         new_references.course_cd
1587         )       THEN
1588             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1589             IGS_GE_MSG_STACK.ADD;
1590             APP_EXCEPTION.RAISE_EXCEPTION;
1591     END IF;
1592     IF (((old_references.unit_attempt_status = new_references.unit_attempt_status)) OR
1593         ((new_references.unit_attempt_status IS NULL)) OR (IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NOT NULL
1594           AND IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop = 'PLAN') ) THEN
1595       NULL;
1596     ELSIF NOT IGS_LOOKUPS_VIEW_PKG.GET_PK_FOR_VALIDATION('UNIT_ATTEMPT_STATUS',
1597                                                         new_references.unit_attempt_status) THEN
1598             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1599             IGS_GE_MSG_STACK.ADD;
1600             APP_EXCEPTION.RAISE_EXCEPTION;
1601     END IF;
1602     IF (((old_references.sup_unit_cd = new_references.sup_unit_cd) AND
1603          (old_references.sup_version_number = new_references.sup_version_number)) OR
1604         ((new_references.sup_unit_cd IS NULL) OR
1605          (new_references.sup_version_number IS NULL))) THEN
1606       NULL;
1607     ELSIF NOT IGS_PS_UNIT_VER_PKG.Get_PK_For_Validation (
1608         new_references.sup_unit_cd,
1609         new_references.sup_version_number
1610         )       THEN
1611             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1612             IGS_GE_MSG_STACK.ADD;
1613             APP_EXCEPTION.RAISE_EXCEPTION;
1614     END IF;
1615     IF (((old_references.unit_cd = new_references.unit_cd) AND
1616          (old_references.version_number = new_references.version_number) AND
1617          (old_references.cal_type= new_references.cal_type) AND
1618          (old_references.ci_sequence_number = new_references.ci_sequence_number) AND
1619          (old_references.location_cd = new_references.location_cd) AND
1620          (old_references.unit_class= new_references.unit_class)) OR
1621         ((new_references.unit_cd IS NULL) OR
1622          (new_references.version_number IS NULL) OR
1623          (new_references.cal_type IS NULL) OR
1624          (new_references.ci_sequence_number IS NULL) OR
1625          (new_references.location_cd IS NULL) OR
1626          (new_references.unit_class IS NULL))) THEN
1627       NULL;
1628     ELSIF NOT IGS_PS_UNIT_OFR_OPT_PKG.Get_PK_For_Validation (
1629         new_references.unit_cd,
1630         new_references.version_number,
1631         new_references.cal_type,
1632         new_references.ci_sequence_number,
1633         new_references.location_cd,
1634         new_references.unit_class
1635         )       THEN
1636             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1637             IGS_GE_MSG_STACK.ADD;
1638             APP_EXCEPTION.RAISE_EXCEPTION;
1639     END IF;
1640     IF ( (old_references.dcnt_reason_cd = new_references.dcnt_reason_cd) OR
1641           (new_references.dcnt_reason_Cd IS NULL ) ) THEN
1642       NULL;
1643     ELSIF NOT IGS_EN_DCNT_REASONCD_PKG.Get_PK_For_Validation (
1644          new_references.dcnt_reason_cd
1645         )       THEN
1646             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1647             IGS_GE_MSG_STACK.ADD;
1648             APP_EXCEPTION.RAISE_EXCEPTION;
1649     END IF;
1650 
1651     IF ( (old_references.rsv_seat_ext_id = new_references.rsv_seat_ext_id) OR
1652           (new_references.rsv_seat_ext_id IS NULL ) ) THEN
1653       NULL;
1654     ELSIF NOT IGS_PS_RSV_EXT_PKG.Get_PK_For_Validation (
1655          new_references.rsv_seat_ext_id
1656         )       THEN
1657             Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1658             IGS_GE_MSG_STACK.ADD;
1659             APP_EXCEPTION.RAISE_EXCEPTION;
1660     END IF;
1661 
1662 
1663     IF (((old_references.grading_schema_code = new_references.grading_schema_code) AND
1664          (old_references.gs_version_number = new_references.gs_version_number) AND
1665          (old_references.uoo_id = new_references.uoo_id)) OR
1666         ((new_references.grading_schema_code IS NULL) OR
1667          (new_references.gs_version_number IS NULL) OR
1668          (new_references.uoo_id IS NULL) )) THEN
1669        NULL;
1670     ELSIF NOT IGS_PS_USEC_GRD_SCHM_PKG.Get_UK_For_Validation ( new_references.grading_schema_code,
1671                                                                new_references.gs_version_number,
1672                                                                new_references.uoo_id
1673                                                              )  THEN
1674 
1675             IF (((old_references.version_number = new_references.version_number) AND
1676                  (old_references.grading_schema_code = new_references.grading_schema_code) AND
1677                  (old_references.gs_version_number = new_references.gs_version_number) AND
1678                  (old_references.unit_cd = new_references.unit_cd)) OR
1679                ((new_references.version_number IS NULL) OR
1680                 (new_references.grading_schema_code IS NULL) OR
1681                 (new_references.gs_version_number IS NULL) OR
1682                 (new_references.unit_cd IS NULL) )) THEN
1683               NULL;
1684             ELSIF NOT IGS_PS_UNIT_GRD_SCHM_PKG.Get_UK_For_Validation ( new_references.version_number,
1685                                                                        new_references.grading_schema_code,
1686                                                                        new_references.gs_version_number,
1687                                                                        new_references.unit_cd
1688                                                                      )  THEN
1689 
1690                  Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
1691                  IGS_GE_MSG_STACK.ADD;
1692                  APP_EXCEPTION.RAISE_EXCEPTION;
1693             END IF;
1694     END IF;
1695 
1696   END Check_Parent_Existance;
1697 
1698 
1699   PROCEDURE Check_Child_Existance AS
1700   CURSOR CUR_IGS_AS_SU_ATMPT_ITM IS
1701      SELECT ROWID
1702      FROM   IGS_AS_SU_ATMPT_ITM
1703      WHERE  person_id = old_references.person_id
1704      AND    course_cd = old_references.course_cd
1705      AND    uoo_id = old_references.uoo_id;
1706 
1707      CURSOR CUR_IGS_EN_SU_ATTEMPT_H IS
1708      SELECT ROWID
1709      FROM   IGS_EN_SU_ATTEMPT_H_ALL
1710      WHERE  person_id = old_references.person_id
1711      AND    course_cd = old_references.course_cd
1712      AND    uoo_id = old_references.uoo_id;
1713   BEGIN
1714     IGS_AS_MSHT_SU_ATMPT_PKG.GET_FK_IGS_EN_SU_ATTEMPT (
1715       old_references.person_id,
1716       old_references.course_cd,
1717       old_references.uoo_id
1718          );
1719      /*deleting the history record*/
1720      FOR IGS_EN_SU_ATTEMPT_H_REC IN CUR_IGS_EN_SU_ATTEMPT_H LOOP
1721         IGS_EN_SU_ATTEMPT_H_PKG.DELETE_ROW(X_ROWID => IGS_EN_SU_ATTEMPT_H_REC.ROWID);
1722      END LOOP;
1723      FOR IGS_AS_SU_ATMPT_ITM_REC IN CUR_IGS_AS_SU_ATMPT_ITM LOOP
1724         IGS_AS_SU_ATMPT_ITM_PKG.DELETE_ROW(X_ROWID => IGS_AS_SU_ATMPT_ITM_REC.ROWID);
1725      END LOOP;
1726     IGS_AS_SU_STMPTOUT_PKG.GET_FK_IGS_EN_SU_ATTEMPT (
1727       old_references.person_id,
1728       old_references.course_cd,
1729       old_references.uoo_id
1730         );
1731     IGS_PS_STDNT_UNT_TRN_PKG.GET_FK_IGS_EN_SU_ATTEMPT (
1732       old_references.person_id,
1733       old_references.course_cd,
1734       old_references.uoo_id
1735            );
1736 
1737     IGS_AS_ANON_ID_US_PKG.GET_FK_IGS_EN_SU_ATTEMPT (
1738       old_references.person_id,
1739       old_references.course_cd,
1740       old_references.uoo_id
1741         );
1742   --Bug 3199686
1743    IGS_AS_SUA_SES_ATTS_pkg.GET_FK_IGS_EN_SU_ATTEMPT(
1744       old_references.person_id,
1745       old_references.course_cd,
1746       old_references.uoo_id
1747         );
1748 
1749   END Check_Child_Existance;
1750  -------------------------------------------------------------------------------------------
1751   --Change History:
1752   --Who         When            What
1753   --svanukur    29-APR-03    changed the PK columns as part of MUS build, # 2829262
1754   -------------------------------------------------------------------------------------------
1755   FUNCTION Get_PK_For_Validation (
1756     x_person_id IN NUMBER,
1757     x_course_cd IN VARCHAR2,
1758     x_uoo_id IN NUMBER
1759        ) RETURN BOOLEAN AS
1760     CURSOR cur_rowid IS
1761       SELECT   ROWID
1762       FROM     IGS_EN_SU_ATTEMPT_ALL
1763       WHERE    person_id = x_person_id
1764       AND      course_cd = x_course_cd
1765       AND      uoo_id = x_uoo_id
1766       FOR UPDATE NOWAIT;
1767     lv_rowid cur_rowid%ROWTYPE;
1768   BEGIN
1769     OPEN cur_rowid;
1770     FETCH cur_rowid INTO lv_rowid;
1771         IF (cur_rowid%FOUND) THEN
1772               CLOSE cur_rowid;
1773               RETURN (TRUE);
1774         ELSE
1775               CLOSE cur_rowid;
1776               RETURN (FALSE);
1777         END IF;
1778   END Get_PK_For_Validation;
1779 
1780   PROCEDURE GET_UFK_IGS_CA_INST (
1781     x_cal_type IN VARCHAR2,
1782     x_sequence_number IN NUMBER,
1783     x_start_dt IN DATE,
1784     x_end_dt IN DATE
1785     ) AS
1786     CURSOR cur_rowid IS
1787       SELECT   ROWID
1788       FROM     IGS_EN_SU_ATTEMPT_ALL
1789       WHERE    cal_type= x_cal_type
1790       AND      ci_sequence_number = x_sequence_number
1791       AND      ci_start_dt = x_start_dt
1792       AND      ci_end_dt = x_end_dt ;
1793     lv_rowid cur_rowid%ROWTYPE;
1794   BEGIN
1795     OPEN cur_rowid;
1796     FETCH cur_rowid INTO lv_rowid;
1797     IF (cur_rowid%FOUND) THEN
1798       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_CI_UFK');
1799       IGS_GE_MSG_STACK.ADD;
1800                 CLOSE cur_rowid;
1801       APP_EXCEPTION.RAISE_EXCEPTION;
1802       RETURN;
1803     END IF;
1804     CLOSE cur_rowid;
1805   END GET_UFK_IGS_CA_INST;
1806 
1807   PROCEDURE GET_FK_IGS_AD_LOCATION (
1808     x_location_cd IN VARCHAR2
1809     ) AS
1810     CURSOR cur_rowid IS
1811       SELECT   ROWID
1812       FROM     IGS_EN_SU_ATTEMPT_ALL
1813       WHERE    exam_location_cd = x_location_cd ;
1814     lv_rowid cur_rowid%ROWTYPE;
1815   BEGIN
1816     OPEN cur_rowid;
1817     FETCH cur_rowid INTO lv_rowid;
1818     IF (cur_rowid%FOUND) THEN
1819       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_LOC_FK');
1820       IGS_GE_MSG_STACK.ADD;
1821                 CLOSE cur_rowid;
1822       APP_EXCEPTION.RAISE_EXCEPTION;
1823       RETURN;
1824     END IF;
1825     CLOSE cur_rowid;
1826   END GET_FK_IGS_AD_LOCATION;
1827 
1828   PROCEDURE GET_FK_IGS_AS_GRD_SCH_GRADE (
1829     x_grading_schema_code IN VARCHAR2 ,
1830     x_gs_version_number   IN NUMBER
1831     ) AS
1832      CURSOR cur_rowid IS
1833       SELECT   ROWID
1834       FROM     IGS_EN_SU_ATTEMPT_ALL
1835       WHERE    grading_schema_code = x_grading_schema_code
1836                AND
1837                gs_version_number =  x_gs_version_number ;
1838 
1839     lv_rowid cur_rowid%ROWTYPE;
1840   BEGIN
1841     OPEN cur_rowid;
1842     FETCH cur_rowid INTO lv_rowid;
1843     IF (cur_rowid%FOUND) THEN
1844       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_GS_FK');
1845       IGS_GE_MSG_STACK.ADD;
1846                 CLOSE cur_rowid;
1847       APP_EXCEPTION.RAISE_EXCEPTION;
1848       RETURN;
1849     END IF;
1850     CLOSE cur_rowid;
1851     END GET_FK_IGS_AS_GRD_SCH_GRADE;
1852 
1853   PROCEDURE GET_FK_IGS_PE_PERSON (
1854     x_person_id IN NUMBER
1855     ) AS
1856     CURSOR cur_rowid IS
1857       SELECT   ROWID
1858       FROM     IGS_EN_SU_ATTEMPT_ALL
1859       WHERE    rule_waived_person_id = x_person_id ;
1860     lv_rowid cur_rowid%ROWTYPE;
1861   BEGIN
1862     OPEN cur_rowid;
1863     FETCH cur_rowid INTO lv_rowid;
1864     IF (cur_rowid%FOUND) THEN
1865       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_PE_FK');
1866       IGS_GE_MSG_STACK.ADD;
1867                 CLOSE cur_rowid;
1868       APP_EXCEPTION.RAISE_EXCEPTION;
1869       RETURN;
1870     END IF;
1871     CLOSE cur_rowid;
1872   END GET_FK_IGS_PE_PERSON;
1873 
1874   PROCEDURE GET_FK_IGS_EN_STDNT_PS_ATT (
1875     x_person_id IN NUMBER,
1876     x_course_cd IN VARCHAR2
1877     ) AS
1878     CURSOR cur_rowid IS
1879       SELECT   ROWID
1880       FROM     IGS_EN_SU_ATTEMPT_ALL
1881       WHERE    person_id = x_person_id
1882       AND      course_cd = x_course_cd ;
1883     lv_rowid cur_rowid%ROWTYPE;
1884   BEGIN
1885     OPEN cur_rowid;
1886     FETCH cur_rowid INTO lv_rowid;
1887     IF (cur_rowid%FOUND) THEN
1888       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_SCA_FK');
1889       IGS_GE_MSG_STACK.ADD;
1890                 CLOSE cur_rowid;
1891       APP_EXCEPTION.RAISE_EXCEPTION;
1892       RETURN;
1893     END IF;
1894     CLOSE cur_rowid;
1895   END GET_FK_IGS_EN_STDNT_PS_ATT;
1896 
1897   PROCEDURE GET_FK_IGS_LOOKUPS_VIEW (
1898     x_unit_attempt_status IN VARCHAR2
1899     ) AS
1900     CURSOR cur_rowid IS
1901       SELECT   ROWID
1902       FROM     IGS_EN_SU_ATTEMPT_ALL
1903       WHERE    unit_attempt_status = x_unit_attempt_status ;
1904     lv_rowid cur_rowid%ROWTYPE;
1905   BEGIN
1906     OPEN cur_rowid;
1907     FETCH cur_rowid INTO lv_rowid;
1908     IF (cur_rowid%FOUND) THEN
1909       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_LKUPV_FK');
1910       IGS_GE_MSG_STACK.ADD;
1911                 CLOSE cur_rowid;
1912       APP_EXCEPTION.RAISE_EXCEPTION;
1913       RETURN;
1914     END IF;
1915     CLOSE cur_rowid;
1916   END GET_FK_IGS_LOOKUPS_VIEW;
1917 
1918   PROCEDURE GET_FK_IGS_PS_UNIT_VER (
1919     x_unit_cd IN VARCHAR2,
1920     x_version_number IN NUMBER
1921     ) AS
1922     CURSOR cur_rowid IS
1923       SELECT   ROWID
1924       FROM     IGS_EN_SU_ATTEMPT_ALL
1925       WHERE    sup_unit_cd = x_unit_cd
1926       AND      sup_version_number = x_version_number
1927       OR       (unit_cd = x_unit_cd
1928       AND      version_number = x_version_number )  ;
1929     lv_rowid cur_rowid%ROWTYPE;
1930   BEGIN
1931     OPEN cur_rowid;
1932     FETCH cur_rowid INTO lv_rowid;
1933     IF (cur_rowid%FOUND) THEN
1934       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_SUP_UV_FK');
1935       IGS_GE_MSG_STACK.ADD;
1936                 CLOSE cur_rowid;
1937       APP_EXCEPTION.RAISE_EXCEPTION;
1938       RETURN;
1939     END IF;
1940     CLOSE cur_rowid;
1941   END GET_FK_IGS_PS_UNIT_VER;
1942 
1943   PROCEDURE GET_FK_IGS_PS_UNIT (
1944     x_unit_cd IN VARCHAR2
1945     ) AS
1946     CURSOR cur_rowid IS
1947       SELECT   ROWID
1948       FROM     IGS_EN_SU_ATTEMPT_ALL
1949       WHERE    unit_cd = x_unit_cd ;
1950     lv_rowid cur_rowid%ROWTYPE;
1951   BEGIN
1952     OPEN cur_rowid;
1953     FETCH cur_rowid INTO lv_rowid;
1954     IF (cur_rowid%FOUND) THEN
1955       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_UN_FK');
1956       IGS_GE_MSG_STACK.ADD;
1957                 CLOSE cur_rowid;
1958       APP_EXCEPTION.RAISE_EXCEPTION;
1959       RETURN;
1960     END IF;
1961     CLOSE cur_rowid;
1962   END GET_FK_IGS_PS_UNIT;
1963 
1964   PROCEDURE GET_FK_IGS_PS_UNIT_OFR_OPT (
1965     x_unit_cd IN VARCHAR2,
1966     x_version_number IN NUMBER,
1967     x_cal_type IN VARCHAR2,
1968     x_ci_sequence_number IN NUMBER,
1969     x_location_cd IN VARCHAR2,
1970     x_unit_class IN VARCHAR2
1971     ) AS
1972     CURSOR cur_rowid IS
1973       SELECT   ROWID
1974       FROM     IGS_EN_SU_ATTEMPT_ALL
1975       WHERE    unit_cd = x_unit_cd
1976       AND      version_number = x_version_number
1977       AND      cal_type= x_cal_type
1978       AND      ci_sequence_number = x_ci_sequence_number
1979       AND      location_cd = x_location_cd
1980       AND      unit_class= x_unit_class ;
1981     lv_rowid cur_rowid%ROWTYPE;
1982   BEGIN
1983     OPEN cur_rowid;
1984     FETCH cur_rowid INTO lv_rowid;
1985     IF (cur_rowid%FOUND) THEN
1986       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_UOO_UFK');
1987       IGS_GE_MSG_STACK.ADD;
1988                 CLOSE cur_rowid;
1989       APP_EXCEPTION.RAISE_EXCEPTION;
1990       RETURN;
1991     END IF;
1992     CLOSE cur_rowid;
1993   END GET_FK_IGS_PS_UNIT_OFR_OPT;
1994 
1995   PROCEDURE GET_UFK_IGS_PS_UNIT_OFR_OPT (
1996     x_uoo_id IN NUMBER
1997     ) AS
1998     CURSOR cur_rowid IS
1999       SELECT   ROWID
2000       FROM     IGS_EN_SU_ATTEMPT_ALL
2001       WHERE    uoo_id = x_uoo_id ;
2002     lv_rowid cur_rowid%ROWTYPE;
2003   BEGIN
2004     OPEN cur_rowid;
2005     FETCH cur_rowid INTO lv_rowid;
2006     IF (cur_rowid%FOUND) THEN
2007       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUA_UOO_UFK');
2008       IGS_GE_MSG_STACK.ADD;
2009                 CLOSE cur_rowid;
2010       APP_EXCEPTION.RAISE_EXCEPTION;
2011       RETURN;
2012     END IF;
2013     CLOSE cur_rowid;
2014   END GET_UFK_IGS_PS_UNIT_OFR_OPT;
2015 
2016  PROCEDURE  GET_UFK_IGS_PS_UNIT_GRD_SCHM ( x_version_number IN NUMBER,
2017                                           x_grading_schema_code IN VARCHAR2,
2018                                           x_gs_version_number IN NUMBER,
2019                                           x_unit_cd IN VARCHAR2
2020                                         )  AS
2021   CURSOR cur_rowid IS
2022       SELECT   ROWID
2023       FROM     IGS_EN_SU_ATTEMPT_ALL
2024       WHERE    version_number = x_version_number
2025       AND      grading_schema_code = x_grading_schema_code
2026       AND      gs_version_number = x_gs_version_number
2027       AND      unit_cd = x_unit_cd ;
2028 
2029   lv_rowid   cur_rowid%ROWTYPE;
2030  BEGIN
2031    OPEN cur_rowid;
2032     FETCH cur_rowid INTO lv_rowid;
2033     IF (cur_rowid%FOUND) THEN
2034       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SUA_GRD_FK');
2035       IGS_GE_MSG_STACK.ADD;
2036       CLOSE cur_rowid;
2037       APP_EXCEPTION.RAISE_EXCEPTION;
2038       RETURN;
2039     END IF;
2040     CLOSE cur_rowid;
2041  END GET_UFK_IGS_PS_UNIT_GRD_SCHM;
2042 
2043 
2044  PROCEDURE  GET_UFK_IGS_PS_USEC_GRD_SCHM ( x_grading_schema_code IN VARCHAR2,
2045                                           x_gs_version_number IN NUMBER,
2046                                           x_uoo_id IN NUMBER
2047                                         )  AS
2048  CURSOR cur_rowid IS
2049       SELECT   ROWID
2050       FROM     IGS_EN_SU_ATTEMPT_ALL
2051       WHERE    grading_schema_code = x_grading_schema_code
2052       AND      gs_version_number = x_gs_version_number
2053       AND      uoo_id = x_uoo_id ;
2054 
2055   lv_rowid   cur_rowid%ROWTYPE;
2056  BEGIN
2057    OPEN cur_rowid;
2058     FETCH cur_rowid INTO lv_rowid;
2059     IF (cur_rowid%FOUND) THEN
2060       Fnd_Message.Set_Name ('IGS', 'IGS_EN_SUA_GRD_FK');
2061       IGS_GE_MSG_STACK.ADD;
2062       CLOSE cur_rowid;
2063       APP_EXCEPTION.RAISE_EXCEPTION;
2064       RETURN;
2065     END IF;
2066     CLOSE cur_rowid;
2067  END GET_UFK_IGS_PS_USEC_GRD_SCHM;
2068 
2069 
2070 
2071 
2072   PROCEDURE Before_DML (
2073     p_action IN VARCHAR2,
2074     x_rowid IN VARCHAR2,
2075     x_uoo_id IN NUMBER ,
2076     x_enrolled_dt IN DATE ,
2077     x_unit_attempt_status IN VARCHAR2,
2078     x_administrative_unit_status IN VARCHAR2 ,
2079     x_discontinued_dt IN DATE ,
2080     x_rule_waived_dt IN DATE ,
2081     x_rule_waived_person_id IN NUMBER,
2082     x_no_assessment_ind IN VARCHAR2 ,
2083     x_sup_unit_cd IN VARCHAR2,
2084     x_sup_version_number IN NUMBER,
2085     x_exam_location_cd IN VARCHAR2,
2086     x_alternative_title IN VARCHAR2 ,
2087     x_override_enrolled_cp IN NUMBER,
2088     x_override_eftsu IN NUMBER,
2089     x_override_achievable_cp IN NUMBER ,
2090     x_override_outcome_due_dt IN DATE ,
2091     x_override_credit_reason IN VARCHAR2,
2092     x_person_id IN NUMBER,
2093     x_course_cd IN VARCHAR2 ,
2094     x_unit_cd IN VARCHAR2 ,
2095     x_version_number IN NUMBER ,
2096     x_cal_type IN VARCHAR2,
2097     x_ci_sequence_number IN NUMBER ,
2098     x_location_cd IN VARCHAR2 ,
2099     x_unit_class IN VARCHAR2 ,
2100     x_ci_start_dt IN DATE ,
2101     x_ci_end_dt IN DATE ,
2102     x_administrative_priority IN NUMBER ,
2103     x_waitlist_dt IN DATE ,
2104     x_dcnt_reason_cd IN VARCHAR2 ,
2105     x_creation_date IN DATE ,
2106     x_created_by IN NUMBER ,
2107     x_last_update_date IN DATE ,
2108     x_last_updated_by IN NUMBER,
2109     x_last_update_login IN NUMBER,
2110     x_org_id            IN NUMBER,
2111     x_gs_version_number IN NUMBER,
2112     x_enr_method_type   IN VARCHAR2,
2113     x_failed_unit_rule  IN VARCHAR2,
2114     x_cart              IN VARCHAR2,
2115     x_rsv_seat_ext_id   IN NUMBER  ,
2116     x_org_unit_cd       IN VARCHAR2,
2117     x_grading_schema_code IN VARCHAR2,
2118     x_subtitle            IN VARCHAR2,
2119     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
2120     x_session_id          IN NUMBER ,
2121     x_deg_aud_detail_id   IN NUMBER ,
2122     x_student_career_transcript IN VARCHAR2,
2123     x_student_career_statistics IN VARCHAR2,
2124     x_waitlist_manual_ind IN VARCHAR2 ,--Bug ID: 2554109  added by adhawan
2125     x_attribute_category IN VARCHAR2 ,
2126     x_attribute1 IN VARCHAR2 ,
2127     x_attribute2 IN VARCHAR2 ,
2128     x_attribute3 IN VARCHAR2 ,
2129     x_attribute4 IN VARCHAR2 ,
2130     x_attribute5 IN VARCHAR2 ,
2131     x_attribute6 IN VARCHAR2 ,
2132     x_attribute7 IN VARCHAR2 ,
2133     x_attribute8 IN VARCHAR2 ,
2134     x_attribute9 IN VARCHAR2 ,
2135     x_attribute10 IN VARCHAR2 ,
2136     x_attribute11 IN VARCHAR2 ,
2137     x_attribute12 IN VARCHAR2 ,
2138     x_attribute13 IN VARCHAR2 ,
2139     x_attribute14 IN VARCHAR2 ,
2140     x_attribute15 IN VARCHAR2 ,
2141     x_attribute16 IN VARCHAR2 ,
2142     x_attribute17 IN VARCHAR2 ,
2143     x_attribute18 IN VARCHAR2 ,
2144     x_attribute19 IN VARCHAR2 ,
2145     x_attribute20 IN VARCHAR2 ,
2146     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
2147     x_wlst_priority_weight_num IN NUMBER ,
2148     x_wlst_preference_weight_num IN NUMBER,
2149     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
2150     x_core_indicator_code IN VARCHAR2,
2151     X_UPD_AUDIT_FLAG      IN VARCHAR2 ,
2152     X_SS_SOURCE_IND       IN VARCHAR2
2153   ) AS
2154   -------------------------------------------------------------------------------------
2155   --who           when            what
2156   --smadathi      25-jul-2001     Call to Igs_En_Gen_015.validation_step_is_overridden added
2157   --                              to check for unit section status, if it is CLOSED, check whether
2158   --                              that has been overriden or not
2159   --kkillams      27-Mar-03       Modified usec_cur Cursor, replaced * with unit_section_status
2160   --                              w.r.t. bug 2749648
2161   --svanukur      29-APR-2003     Created cursor c_same_section to prevent students from enrolling in
2162   --                              multiple versions of same unit in the same teaching period and also
2163   --                              changed the where clauses to pass uoo_id as part of MUS build
2164   --svanukur      23-May-2003     Redefined l_step_override_limit to refer to igs_en_elgb_ovr_uoo
2165   --                                as part of Deny/War behaviour build # 2829272
2166   --svanukur      13-Jun-03       Checking for the unit section status of 'Not_offered' as part of
2167   --                                validation Impact CR bug#2881385
2168   --svanukur      13-jun-03       The check for cancelled/planned unit section status was done only while
2169  --                               inserting the unit attempt record but was not checking while
2170  --                               updating a dropped or discontinued unit attempt.
2171  --                               Now the check is being done for both for updation and insertion for bug #2980069.
2172    --rvivekan     16-Jun-2003     Added handling for same_teaching_period (MUS) checkbox in unit_Section level
2173   --                              as a part of Repeat and reenrollment build #2881363
2174  --rvivekan   9-sep-2003       PSP integration build#3052433. modified behavior and declarations of
2175  --                            repeatable_ind in the igs_ps_unit_ver table and the column name of
2176  --                            same_teaching_period flag in igs_ps_unit_oft_opt to not_multiple_section_flag.
2177  -- svanukur    14-jan-2004     Added teh code for MUS validations in case of update for bug 3368048
2178  -- rvangala    25-Feb-2004     Change cursors c_mus_allowed and c_mus_participate to ensure that
2179  --                             unit attempts not in discontinued status are considered, Bug #3456893
2180  -- bdeviset    22-NOV-2005     Moved mutiple section validtion to IGS_EN_VAL_SUA procedure and
2181  --                             Bypassed MUS validation when ss_source_ind is SWAP for bug# 4676023
2182  -- ckasu       27-NOV-2005     Added logic inorder to perform/by pass validations when this was called from
2183  --                             add_units_api for Calling Object as 'PLAN' as a part of bug#4666102
2184   ------------------------------------------------------------------------------------
2185      CURSOR cur_rowid  IS
2186       SELECT   ROWID
2187       FROM     IGS_EN_SU_ATTEMPT_ALL
2188       WHERE    person_id = x_person_id
2189       AND      course_cd = x_course_cd
2190       AND      uoo_id = x_uoo_id
2191       AND unit_attempt_status = 'DROPPED';
2192       l_rowid VARCHAR2(25);
2193       l_step_override_limit  IGS_EN_ELGB_OVR_UOO.step_override_limit%TYPE ;
2194       l_result               BOOLEAN ;
2195 
2196      CURSOR  usec_cur(p_uoo_id NUMBER) IS
2197        SELECT unit_section_status
2198        FROM   igs_ps_unit_ofr_opt uoo
2199        WHERE uoo_id = p_uoo_id;
2200 
2201      usec_cur_row usec_cur%ROWTYPE;
2202 
2203   BEGIN
2204   l_result :=FALSE;
2205   l_step_override_limit := 0;
2206     Set_Column_Values (
2207       p_action,
2208       x_rowid,
2209       x_uoo_id,
2210       x_enrolled_dt,
2211       x_unit_attempt_status,
2212       x_administrative_unit_status,
2213       x_discontinued_dt,
2214       x_rule_waived_dt,
2215       x_rule_waived_person_id,
2216       x_no_assessment_ind,
2217       x_sup_unit_cd,
2218       x_sup_version_number,
2219       x_exam_location_cd,
2220       x_alternative_title,
2221       x_override_enrolled_cp,
2222       x_override_eftsu,
2223       x_override_achievable_cp,
2224       x_override_outcome_due_dt,
2225       x_override_credit_reason,
2226       x_person_id,
2227       x_course_cd,
2228       x_unit_cd,
2229       x_version_number,
2230       x_cal_type,
2231       x_ci_sequence_number,
2232       x_location_cd,
2233       x_unit_class,
2234       x_ci_start_dt,
2235       x_ci_end_dt,
2236       x_administrative_priority,
2237       x_waitlist_dt,
2238       x_dcnt_reason_cd,
2239       x_creation_date,
2240       x_created_by,
2241       x_last_update_date,
2242       x_last_updated_by,
2243       x_last_update_login,
2244       x_org_id,
2245       x_gs_version_number,
2246       x_enr_method_type  ,
2247       x_failed_unit_rule ,
2248       x_cart             ,
2249       x_rsv_seat_ext_id,
2250       x_org_unit_cd ,
2251       x_grading_schema_code,
2252       x_subtitle,
2253     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
2254       x_session_id,
2255       x_deg_aud_detail_id,
2256       x_student_career_transcript,
2257       x_student_career_statistics,
2258       x_waitlist_manual_ind ,  --Bug ID: 2554109  added by adhawan
2259       x_attribute_category,
2260       x_attribute1,
2261       x_attribute2,
2262       x_attribute3,
2263       x_attribute4,
2264       x_attribute5,
2265       x_attribute6,
2266       x_attribute7,
2267       x_attribute8,
2268       x_attribute9,
2269       x_attribute10,
2270       x_attribute11,
2271       x_attribute12,
2272       x_attribute13,
2273       x_attribute14,
2274       x_attribute15,
2275       x_attribute16,
2276       x_attribute17,
2277       x_attribute18,
2278       x_attribute19,
2279       x_attribute20,
2280       -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
2281       x_wlst_priority_weight_num,
2282       x_wlst_preference_weight_num,
2283       -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
2284       x_core_indicator_code,
2285       X_UPD_AUDIT_FLAG,
2286       X_SS_SOURCE_IND
2287     );
2288     IF (p_action = 'INSERT')
2289         OR
2290        (
2291          p_action = 'UPDATE' AND
2292          old_references.unit_attempt_status IN ('DROPPED','DISCONTIN') AND
2293          old_references.unit_attempt_status <> new_references.unit_attempt_status
2294        ) THEN
2295 
2296 
2297 
2298          -- Enhancement in response to the bug 1552624
2299          -- This piece of code does NOT allow enrollment into a unit attempt
2300          -- if the unit section status is NOT open.
2301          OPEN usec_cur(new_references.uoo_id);
2302          FETCH usec_cur INTO usec_cur_row;
2303          CLOSE usec_cur;
2304          --
2305          -- check for unit section status, if it is CLOSED, check whether
2306          -- that has been overriden or not
2307          -- if not, display error
2308          -- Also display error if it is PLANNED or CANCELLED
2309          --added on 25-jul-2001 by smadathi
2310 
2311          -- removed the closed section override code added by smadathi
2312          -- this will now be checked in IGS_EN_GEN_015.get_usec_status
2313          -- amuthu 02-Jul-2002
2314 
2315          IF (USEC_CUR_ROW.UNIT_SECTION_STATUS IN ('CANCELLED','PLANNED','NOT_OFFERED') ) THEN
2316                  FND_MESSAGE.SET_NAME('IGS','IGS_EN_SS_CANNOT_WAITLIST');
2317                  IGS_GE_MSG_STACK.ADD;
2318                  APP_EXCEPTION.RAISE_EXCEPTION;
2319          END IF;
2320 
2321          -- multiple unit sections validation is performed for SWAP in add units api
2322          -- and it should not be done here as this is done in a autonomus txn.
2323          IF NVL(X_SS_SOURCE_IND,'N') <> 'S' THEN
2324 
2325            /*checking for multiple versions of same unit section, if exists raise an exception*/
2326            --processing for same_teaching_period at unit section level added as a part of Repeat and Reeenrollment build
2327            IGS_EN_VAL_SUA.validate_mus(p_person_id             => x_person_id,
2328                                        p_course_cd             => x_course_cd,
2329                                        p_uoo_id                => x_uoo_id);
2330 
2331 
2332          END IF; --  IF NVL(X_SS_SOURCE_IND,'N') <> 'S' OR (IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NOT NULL AND IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop = 'PLAN') THEN
2333     END IF;
2334 
2335     IF (p_action = 'INSERT') THEN
2336       -- Call all the procedures related to Before Insert.
2337 
2338       BeforeRowInsertUpdateDelete1 ( p_inserting => TRUE,
2339                                      p_updating => FALSE,
2340                                      p_deleting => FALSE );
2341 
2342       IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2343 
2344               BeforeRowInsertUpdateDelete2 ( p_inserting => TRUE,
2345                                              p_updating => FALSE,
2346                                              p_deleting => FALSE);
2347 
2348       END IF; --IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2349 
2350       IF  Get_PK_For_Validation (
2351                 NEW_REFERENCES.person_id,
2352                 NEW_REFERENCES.course_cd,
2353                 NEW_REFERENCES.uoo_id
2354                 ) THEN
2355         Fnd_Message.Set_Name ('IGS', 'IGS_GE_MULTI_ORG_DUP_REC');
2356         IGS_GE_MSG_STACK.ADD;
2357         APP_EXCEPTION.RAISE_EXCEPTION;
2358       END IF;
2359 
2360       Check_Constraints;
2361       Check_Parent_Existance;
2362       Check_Uniqueness;
2363       -- For Enhancement Bug 1287292
2364       -- Commented the call for the bug Fix:2366438
2365       -- chk_enrollment_max;
2366 
2367 
2368     ELSIF (p_action = 'UPDATE') THEN
2369 
2370       -- Call all the procedures related to Before Update.
2371       BeforeRowInsertUpdateDelete1 ( p_inserting => FALSE,
2372                                      p_updating => TRUE,
2373                                      p_deleting => FALSE);
2374       IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2375 
2376               BeforeRowInsertUpdateDelete2 ( p_inserting => FALSE,
2377                                              p_updating => TRUE ,
2378                                              p_deleting => FALSE);
2379       END IF;--IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2380 
2381       Check_Constraints;
2382       Check_Parent_Existance;
2383       Check_Uniqueness;
2384       -- For Enhancement Bug 1287292
2385       -- Commented the call for the bug Fix:2366438
2386       --chk_enrollment_max;
2387 
2388 
2389 
2390     ELSIF (p_action = 'DELETE') THEN
2391       -- Call all the procedures related to Before Delete.
2392       BeforeRowInsertUpdateDelete1 ( p_inserting => FALSE,
2393                                      p_updating => FALSE ,
2394                                      p_deleting => TRUE );
2395       BeforeRowInsertUpdateDelete2 ( p_inserting => FALSE,
2396                                      p_updating => FALSE ,
2397                                      p_deleting => TRUE );
2398       Check_Child_Existance;
2399     ELSIF (p_action = 'VALIDATE_INSERT') THEN
2400        OPEN cur_rowid;
2401        FETCH cur_rowid INTO l_rowid;
2402        -- for Bug 1575677
2403        IF cur_rowid%NOTFOUND THEN
2404              IF  Get_PK_For_Validation (
2405                   NEW_REFERENCES.person_id,
2406                   NEW_REFERENCES.course_cd,
2407                   NEW_REFERENCES.uoo_id
2408                   ) THEN
2409                   Fnd_Message.Set_Name ('IGS', 'IGS_GE_MULTI_ORG_DUP_REC');
2410                   IGS_GE_MSG_STACK.ADD;
2411                   APP_EXCEPTION.RAISE_EXCEPTION;
2412              END IF;
2413              Check_Constraints;
2414              Check_Uniqueness;
2415        END IF;
2416        CLOSE cur_rowid;
2417     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
2418        Check_Constraints;
2419        Check_Uniqueness;
2420     ELSIF (p_action = 'VALIDATE_DELETE') THEN
2421       Check_Child_Existance;
2422     END IF;
2423 
2424   END Before_DML;
2425 
2426 
2427   PROCEDURE After_DML (
2428     p_action IN VARCHAR2,
2429     x_rowid IN VARCHAR2
2430   ) AS
2431     -- Getting the sua details for all waitlisted students, pmarada bug 2526021
2432     -- ptandon          03-SEP-2003             Added logic to re-sequence the waitlisted
2433     --                                          students when waitlist priorities/preferences
2434     --                                          are defined in the system.
2435     -- stutta          17-NOV-2003             Added code to create a term record, if one doesn't
2436     --                                         already exist, when a student enrolls or waitlists
2437     --                                          for a unit. Part of Term Records Build
2438     --  vkarthik       13-Feb-04               Waitlist position re-sequencing logic was not present
2439     --                                          in 'Insert' action, added as part bug 3433446
2440     --  stutta         10-MAR-2004       Added call to igs_en_gen_015.get_academic_cal to get acad cal
2441     --                                   instance and pass it to c_teach_to_load cursor. BUG# 3481403
2442     --  stutta         16-Mar-2004      Passing new parameter p_update_rec in call
2443     --                                   to igs_en_spa_terms_api.create_update_term_rec. Bug # 3421436
2444     --  stutta         11-Jan-2004        Modified c_teach_to_load to allow term record creation for terms
2445     --                                   which are subordinate to any instance of the academic cal type.
2446     --                                   Bug #4016319
2447     -- ckasu           27-NOV-2005      Added logic inorder to perform/by pass validations when this was called from
2448     --                                  add_units_api for Calling Object as 'PLAN' as a part of bug#4666102
2449     -- bdeviset        02-Mar-2006      Modifed cursor c_spa_terms for bug# 5073761
2450 
2451     CURSOR c_sua_details(cp_uoo_id  igs_en_su_attempt.uoo_id%TYPE) IS
2452     SELECT * FROM igs_en_su_attempt
2453     WHERE uoo_id = cp_uoo_id AND
2454          unit_attempt_status = 'WAITLISTED'
2455          ORDER BY administrative_priority ASC;
2456 
2457     -- Cursor to lock parent unit section record. Bug# 3052426 - ptandon
2458     CURSOR  c_unit_sec_lock(cp_uoo_id  igs_ps_unit_ofr_opt.uoo_id%TYPE) IS
2459     SELECT  uoo_id
2460     FROM    igs_ps_unit_ofr_opt
2461     WHERE   uoo_id = cp_uoo_id
2462     FOR UPDATE;
2463 
2464     CURSOR c_repeatable_unit (cp_unit_cd igs_ps_unit_ver.unit_cd%TYPE,
2465                               cp_uv_version_number igs_ps_unit_ver.version_number%TYPE) IS
2466     SELECT  uv.repeatable_ind
2467     FROM    igs_ps_unit_ver uv
2468     WHERE   uv.unit_cd              = cp_unit_cd AND
2469             uv.version_number       = cp_uv_version_number;
2470     CURSOR c_renrollcheck(cp_person_id igs_en_su_attempt.person_id%TYPE,
2471                            cp_uoo_id igs_en_su_attempt.uoo_id%TYPE,
2472                            cp_course_cd igs_en_su_attempt.course_cd%TYPE) IS
2473     SELECT 'x'
2474     FROM igs_en_su_attempt sua
2475     WHERE person_id=cp_person_id
2476     AND   uoo_id=cp_uoo_id
2477     AND   unit_attempt_status ='COMPLETED'
2478     AND   course_cd <> cp_course_cd
2479     AND EXISTS  (SELECT 'x'
2480                              FROM IGS_PS_STDNT_UNT_TRN sut
2481                              WHERE sut.person_id = cp_person_id
2482                              AND sut.uoo_id = cp_uoo_id
2483                              AND sut.transfer_course_cd = cp_course_cd
2484                              AND sut.course_cd = sua.course_cd
2485                   ) ;
2486 
2487     CURSOR c_conflict_suas (cp_person_id igs_en_su_attempt.person_id%TYPE,
2488                            cp_uoo_id igs_en_su_attempt.uoo_id%TYPE,
2489                            cp_unit_cd igs_en_su_attempt.unit_cd%TYPE,
2490                            cp_version_number igs_en_su_attempt.version_number%TYPE,
2491                            cp_course_cd igs_en_su_attempt.course_cd%TYPE) IS
2492 
2493     SELECT 'x'
2494     FROM igs_en_su_attempt sua
2495     WHERE person_id=cp_person_id
2496     AND   unit_cd=cp_unit_cd
2497     AND   version_number=cp_version_number
2498     AND   unit_attempt_status IN ('ENROLLED','DUPLICATE','COMPLETED','DISCONTIN')
2499     AND   (
2500             (course_cd <> cp_course_cd
2501              AND NOT EXISTS (SELECT 'x'
2502                              FROM IGS_PS_STDNT_UNT_TRN sut
2503                              WHERE sut.person_id = cp_person_id
2504                              and sut.uoo_id = cp_uoo_id
2505                              AND sut.transfer_course_cd = sua.course_cd
2506                              AND sut.course_cd = cp_course_cd)
2507              )
2508            OR
2509           (course_cd = cp_course_cd AND uoo_id<>cp_uoo_id)); --so that the newly added sua is not counted
2510 
2511    -- find all term calendars assiciated with the teach calendar of the unit and subordinate to any instance
2512    -- of the academic calendar of the student program attempt.
2513 CURSOR c_teach_to_load(cp_acad_cal_type VARCHAR2) IS
2514    SELECT ttl.load_cal_type, ttl.load_ci_sequence_number
2515    FROM IGS_CA_TEACH_TO_LOAD_V ttl,
2516         IGS_EN_STDNT_PS_ATT spa,
2517         IGS_CA_INST_REL cir
2518    WHERE ttl.teach_cal_type= new_references.cal_type
2519    AND ttl.teach_ci_sequence_number = new_references.ci_sequence_number
2520    AND spa.person_id = new_references.person_id
2521    AND spa.course_cd = new_references.course_cd
2522    AND spa.cal_type = cp_acad_cal_type
2523    AND cir.sup_cal_type = spa.cal_type
2524    AND cir.sub_cal_type = ttl.load_cal_type
2525    AND cir.sub_ci_sequence_number = ttl.load_ci_sequence_number;
2526 
2527    CURSOR c_term (p_person_id number, p_course_cd varchar2,
2528                 p_term_cal_type varchar2, p_term_ci_sequence_number number) IS
2529    SELECT 'x'
2530    FROM igs_en_spa_terms spat,  igs_en_stdnt_ps_att curspa,  igs_ps_ver curcv,
2531                                 igs_en_stdnt_ps_att spa,     igs_ps_ver cv
2532    WHERE spat.person_id = p_person_id
2533    AND   term_cal_type = p_term_cal_type    AND term_sequence_number = p_term_ci_sequence_number
2534    AND   curspa.person_id=spat.person_id    AND curspa.course_cd=p_course_Cd
2535    AND   curcv.course_Cd=curspa.course_cd   AND curcv.version_number=curspa.version_number
2536    AND   spa.person_id=spat.person_id       AND spat.program_cd=spa.course_cd
2537    AND   cv.course_Cd=spa.course_cd         AND cv.version_number=spa.version_number
2538    AND   cv.course_type = curcv.course_type
2539    AND   (NVL(fnd_profile.value('CAREER_MODEL_ENABLED'),'N') = 'Y'  OR  spat.program_cd = p_course_cd );
2540 
2541 
2542    CURSOR c_sca IS
2543    SELECT attendance_type, attendance_mode, key_program, fee_cat, igs_pr_class_std_id,
2544               cal_type, location_cd, coo_id, version_number, student_confirmed_ind
2545    FROM IGS_EN_STDNT_PS_ATT
2546    WHERE person_id = new_references.person_id
2547    AND course_cd = new_references.course_cd;
2548 
2549    rec_sca c_sca%ROWTYPE;
2550    l_message_name VARCHAR2(200);
2551 
2552     CURSOR c_other_key_recs ( cp_person_id IGS_EN_SPA_TERMS.PERSON_ID%TYPE,
2553                       cp_term_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
2554                       cp_term_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE,
2555                       cp_program_cd IGS_PS_VER.COURSE_CD%TYPE,
2556                       cp_acad_cal_type IGS_EN_SPA_TERMS.ACAD_CAL_TYPE%TYPE) IS
2557         SELECT 'X'
2558         FROM  IGS_EN_SPA_TERMS
2559         WHERE person_id            = cp_person_id
2560         AND   program_cd           <> cp_program_cd
2561         AND   term_cal_type        = cp_term_cal_type
2562         AND   term_sequence_number = cp_term_sequence_number
2563         AND   acad_cal_type        = cp_acad_cal_type
2564         AND   key_program_flag     = 'Y';
2565 
2566    CURSOR c_spa_terms (p_person_id IN number, p_course_cd IN varchar2,
2567                 p_cal_type IN varchar2, p_ci_sequence_number IN number) IS
2568    SELECT spat.ROWID ROW_ID, spat.*
2569    FROM igs_en_spa_terms spat
2570    WHERE spat.person_id = p_person_id
2571    AND   program_cd=p_course_cd AND plan_sht_status IN ('PLAN', 'NONE')
2572    AND  EXISTS
2573    (SELECT load_cal_type,load_ci_sequence_number FROM igs_ca_load_to_teach_v ltCal
2574     WHERE ltCal.teach_cal_type = p_cal_type AND ltCal.teach_ci_sequence_number = p_ci_sequence_number
2575     AND ltCal.load_cal_type = spat.term_cal_type AND ltCal.load_ci_sequence_number = spat.term_sequence_number) ;
2576 
2577    v_dummy c_other_key_recs%ROWTYPE;
2578 
2579 
2580    l_sua_details  c_sua_details%ROWTYPE;
2581    l_cnt  igs_en_su_attempt.administrative_priority%TYPE;
2582    l_repeatable_unit igs_ps_unit_ver.repeatable_ind%TYPE;
2583    l_act_enr NUMBER;
2584    l_dummy          VARCHAR2(10);
2585    l_dummy_value    NUMBER;
2586    l_return_status  VARCHAR2(100);
2587    l_sup_sub_unit_status igs_en_su_attempt.unit_attempt_status%TYPE;
2588 
2589   BEGIN
2590 
2591 
2592     IF (p_action = 'UPDATE') THEN
2593       -- Call all the procedures related to After Update.
2594       --  AfterRowInsertUpdate5( p_updating => TRUE ); Removed the this procedure from the tbh in the 115.73 version of the file,
2595       --  the validation moved to the igsss09b.pls at the time of enrolling a unit. pmarada, 2385096
2596       --adding the call to  ENR_SUA_SUP_SUB_VAL to validate the superior subordinate unit attempt status
2597 
2598       IF old_references.unit_attempt_status <> new_references.unit_attempt_status THEN
2599 
2600         IF NOT IGS_EN_SUA_API.ENR_SUA_SUP_SUB_VAL(new_references.person_id,
2601                                            new_references.course_cd,
2602                                            new_references.uoo_id,
2603                                            new_references.unit_attempt_status,
2604                                            l_sup_sub_unit_status) THEN
2605 
2606              IF l_sup_sub_unit_status IS NOT NULL THEN
2607                 FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_INVALID_SUP_SUB');
2608                 FND_MESSAGE.SET_TOKEN ('CONSTAT', new_references.unit_attempt_status);
2609                 FND_MESSAGE.SET_TOKEN ('SSTAT',l_sup_sub_unit_status);
2610               ELSE
2611                 FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_INVALID_SUP');
2612               END IF;
2613              IGS_GE_MSG_STACK.ADD;
2614              APP_EXCEPTION.RAISE_EXCEPTION;
2615           END IF;
2616 
2617       END IF; --IF old_references.unit_attempt_status <> new_references.unit_attempt_status THEN
2618 
2619     END IF; -- end of IF (p_action = 'UPDATE') THEN
2620 
2621     IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2622 
2623 
2624     l_rowid := x_rowid;
2625         IF (p_action = 'INSERT') THEN
2626             -- Call all the procedures related to After Insert.
2627             -- AfterRowInsertUpdate5( p_inserting => TRUE );   Removed the this procedure from the tbh in the 115.73 version of the file,
2628             --  the validation moved to the igsss09b.pls at the time of enrolling a unit.,pmarada, 2385096
2629 
2630            IF NOT IGS_EN_SUA_API.ENR_SUA_SUP_SUB_VAL(new_references.person_id,
2631                                                      new_references.course_cd,
2632                                                      new_references.uoo_id,
2633                                                      new_references.unit_attempt_status,
2634                                                      l_sup_sub_unit_status) THEN
2635               IF l_sup_sub_unit_status IS NOT NULL THEN
2636                 FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_INVALID_SUP_SUB');
2637                 FND_MESSAGE.SET_TOKEN ('CONSTAT', new_references.unit_attempt_status);
2638                 FND_MESSAGE.SET_TOKEN ('SSTAT',l_sup_sub_unit_status);
2639               ELSE
2640                 FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_INVALID_SUP');
2641               END IF;
2642              IGS_GE_MSG_STACK.ADD;
2643              APP_EXCEPTION.RAISE_EXCEPTION;
2644 
2645            END IF;
2646            AfterRowInsertUpdateDelete3 ( p_inserting => TRUE,
2647                                     p_updating => FALSE,
2648                                     p_deleting => FALSE);
2649 
2650            --For enhancement 2043044,making a call to UPD_MAT_MRADM_CAT_TERMS procedure
2651            IGS_EN_GEN_003.UPD_MAT_MRADM_CAT_TERMS(new_references.person_id,
2652                                              new_references.course_cd,
2653                                              new_references.unit_attempt_status,
2654                                              new_references.cal_type,
2655                                              new_references.ci_sequence_number
2656                                              ) ;
2657            -- Code added as part of Waitlist Enhancements Build Bug# 3052426
2658            -- To re-sequence th students after calculating priority/preference weightages
2659            -- of the students in context - ptandon
2660            IF  new_references.wlst_priority_weight_num IS NOT NULL
2661            AND new_references.wlst_preference_weight_num IS NOT NULL
2662            AND new_references.unit_attempt_status = 'WAITLISTED'
2663            AND new_references.administrative_priority IS NULL
2664            THEN
2665                Igs_En_Wlst_Gen_proc.enrp_wlst_assign_pos(new_references.person_id,new_references.course_cd,new_references.uoo_id);
2666            END IF;
2667 
2668     ELSIF (p_action = 'UPDATE') THEN
2669 
2670 	-- modified this condition to include DROP also for bug#4864437
2671     -- this code is being commented here but will be replicated in swap page and Drop page
2672     -- SwapAMImpl.java :swapSubmit , StdDropAMImpl.java:dropSubmit
2673 	IF NVL(igs_en_su_attempt_pkg.pkg_source_of_drop,'NULL')  NOT IN ( 'SWAP','DROP') THEN
2674 
2675            AfterRowInsertUpdateDelete3 ( p_inserting => FALSE,
2676                                          p_updating => TRUE,
2677                                          p_deleting => FALSE );
2678 
2679 
2680            --enrollment processes build bug#1832130, pg No:24 s1a version of DLD
2681            update_reserved_seat('UPDATE');
2682 
2683            --For enhancement 2043044,making a call to UPD_MAT_MRADM_CAT_TERMS procedure
2684            IGS_EN_GEN_003.UPD_MAT_MRADM_CAT_TERMS(new_references.person_id,
2685                                                   new_references.course_cd,
2686                                                   new_references.unit_attempt_status,
2687                                                   new_references.cal_type,
2688                                                   new_references.ci_sequence_number
2689                                                  ) ;
2690 
2691         END IF;
2692 
2693         AfterRowUpdate4 ( p_inserting => FALSE,
2694                           p_updating => TRUE,
2695                           p_deleting => FALSE);
2696 
2697        -- when a waitlisted student is enrolled/dropped from the unit section then
2698      -- Re-sequence the waitlisted positions for the succeeding waitlisted students. pmarada, bug 2526021
2699       IF (OLD_REFERENCES.UNIT_ATTEMPT_STATUS = 'WAITLISTED' AND
2700          NVL(old_references.unit_attempt_status,'WAITLISTED') <> new_references.unit_attempt_status) THEN
2701            -- Lock the parent unit section record before updating unit attempt records - Bug# 3052426
2702            OPEN c_unit_sec_lock(new_references.uoo_id);
2703 
2704            l_cnt := 1;
2705            -- For each uoo_id updating the sua with administrative_priority
2706           FOR l_sua_details IN c_sua_details(new_references.uoo_id) LOOP
2707             IF l_cnt <> NVL(l_sua_details.administrative_priority,0) THEN
2708               l_sua_details.administrative_priority := l_cnt;
2709               BEGIN
2710                 igs_en_su_attempt_pkg.update_row(
2711                         X_ROWID                        =>     l_sua_details.row_id                        ,
2712                         X_PERSON_ID                    =>     l_sua_details.person_id                      ,
2713                         X_COURSE_CD                    =>     l_sua_details.course_cd                      ,
2714                         X_UNIT_CD                      =>     l_sua_details.unit_cd                        ,
2715                         X_CAL_TYPE                     =>     l_sua_details.cal_type                       ,
2716                         X_CI_SEQUENCE_NUMBER           =>     l_sua_details.ci_sequence_number             ,
2717                         X_VERSION_NUMBER               =>     l_sua_details.version_number                 ,
2718                         X_LOCATION_CD                  =>     l_sua_details.location_cd                    ,
2719                         X_UNIT_CLASS                   =>     l_sua_details.unit_class                     ,
2720                         X_CI_START_DT                  =>     l_sua_details.ci_start_dt                    ,
2721                         X_CI_END_DT                    =>     l_sua_details.ci_end_dt                      ,
2722                         X_UOO_ID                       =>     l_sua_details.uoo_id                         ,
2723                         X_ENROLLED_DT                  =>     l_sua_details.enrolled_dt                    ,
2724                         X_UNIT_ATTEMPT_STATUS          =>     l_sua_details.unit_attempt_status            ,
2725                         X_ADMINISTRATIVE_UNIT_STATUS   =>     l_sua_details.administrative_unit_status     ,
2726                         X_DISCONTINUED_DT              =>     l_sua_details.discontinued_dt                ,
2727                         X_RULE_WAIVED_DT               =>     l_sua_details.rule_waived_dt                 ,
2728                         X_RULE_WAIVED_PERSON_ID        =>     l_sua_details.rule_waived_person_id          ,
2729                         X_NO_ASSESSMENT_IND            =>     l_sua_details.no_assessment_ind              ,
2730                         X_SUP_UNIT_CD                  =>     l_sua_details.sup_unit_cd                    ,
2731                         X_SUP_VERSION_NUMBER           =>     l_sua_details.sup_version_number             ,
2732                         X_EXAM_LOCATION_CD             =>     l_sua_details.exam_location_cd               ,
2733                         X_ALTERNATIVE_TITLE            =>     l_sua_details.alternative_title              ,
2734                         X_OVERRIDE_ENROLLED_CP         =>     l_sua_details.override_enrolled_cp           ,
2735                         X_OVERRIDE_EFTSU               =>     l_sua_details.override_eftsu                 ,
2736                         X_OVERRIDE_ACHIEVABLE_CP       =>     l_sua_details.override_achievable_cp         ,
2737                         X_OVERRIDE_OUTCOME_DUE_DT      =>     l_sua_details.override_outcome_due_dt        ,
2738                         X_OVERRIDE_CREDIT_REASON       =>     l_sua_details.override_credit_reason         ,
2739                         X_ADMINISTRATIVE_PRIORITY      =>     l_sua_details.administrative_priority        ,
2740                         X_WAITLIST_DT                  =>     l_sua_details.waitlist_dt                    ,
2741                         X_DCNT_REASON_CD               =>     l_sua_details.dcnt_reason_cd                 ,
2742                         X_MODE                         =>     'R'                                          ,
2743                         X_GS_VERSION_NUMBER            =>     l_sua_details.gs_version_number              ,
2744                         X_ENR_METHOD_TYPE              =>     l_sua_details.enr_method_type                ,
2745                         X_FAILED_UNIT_RULE             =>     l_sua_details.failed_unit_rule               ,
2746                         X_CART                         =>     l_sua_details.cart                           ,
2747                         X_RSV_SEAT_EXT_ID              =>     l_sua_details.rsv_seat_ext_id                ,
2748                         X_ORG_UNIT_CD                  =>     l_sua_details.org_unit_cd                    ,
2749                         X_SESSION_ID                   =>     l_sua_details.session_id,
2750                         X_GRADING_SCHEMA_CODE          =>     l_sua_details.grading_schema_code            ,
2751                         X_DEG_AUD_DETAIL_ID            =>     l_sua_details.deg_aud_detail_id    ,
2752                         X_STUDENT_CAREER_TRANSCRIPT    =>     l_sua_details.student_career_transcript,
2753                         X_STUDENT_CAREER_STATISTICS    =>     l_sua_details.student_career_statistics,
2754                         x_waitlist_manual_ind          =>     'N',  --Bug ID: 2554109  added by adhawan
2755                         X_ATTRIBUTE_CATEGORY           =>     l_sua_details.attribute_category,
2756                         X_ATTRIBUTE1                   =>     l_sua_details.attribute1,
2757                         X_ATTRIBUTE2                   =>     l_sua_details.attribute2,
2758                         X_ATTRIBUTE3                   =>     l_sua_details.attribute3,
2759                         X_ATTRIBUTE4                   =>     l_sua_details.attribute4,
2760                         X_ATTRIBUTE5                   =>     l_sua_details.attribute5,
2761                         X_ATTRIBUTE6                   =>     l_sua_details.attribute6,
2762                         X_ATTRIBUTE7                   =>     l_sua_details.attribute7,
2763                         X_ATTRIBUTE8                   =>     l_sua_details.attribute8,
2764                         X_ATTRIBUTE9                   =>     l_sua_details.attribute9,
2765                         X_ATTRIBUTE10                  =>     l_sua_details.attribute10,
2766                         X_ATTRIBUTE11                  =>     l_sua_details.attribute11,
2767                         X_ATTRIBUTE12                  =>     l_sua_details.attribute12,
2768                         X_ATTRIBUTE13                  =>     l_sua_details.attribute13,
2769                         X_ATTRIBUTE14                  =>     l_sua_details.attribute14,
2770                         X_ATTRIBUTE15                  =>     l_sua_details.attribute15,
2771                         X_ATTRIBUTE16                  =>     l_sua_details.attribute16,
2772                         X_ATTRIBUTE17                  =>     l_sua_details.attribute17,
2773                         X_ATTRIBUTE18                  =>     l_sua_details.attribute18,
2774                         X_ATTRIBUTE19                  =>     l_sua_details.attribute19,
2775                         X_ATTRIBUTE20                  =>     l_sua_details.attribute20,
2776                         -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
2777                         X_WLST_PRIORITY_WEIGHT_NUM     =>     l_sua_details.wlst_priority_weight_num,
2778                         X_WLST_PREFERENCE_WEIGHT_NUM   =>     l_sua_details.wlst_preference_weight_num,
2779                         -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
2780                         X_CORE_INDICATOR_CODE          =>     l_sua_details.core_indicator_code,
2781                         X_UPD_AUDIT_FLAG               =>     l_sua_details.UPD_AUDIT_FLAG ,
2782                         X_SS_SOURCE_IND                =>     l_sua_details.SS_SOURCE_IND
2783                       );
2784               END;
2785             END IF;
2786              l_cnt := l_cnt + 1;
2787           END LOOP;
2788           CLOSE c_unit_sec_lock;
2789       END IF;
2790       -- end of the code added as part of the bug 2526021
2791 
2792       -- Code added as part of Waitlist Enhancements Build Bug# 3052426
2793       -- To re-sequence th students after calculating priority/preference weightages
2794       -- of the students in context - ptandon
2795       IF  new_references.wlst_priority_weight_num IS NOT NULL
2796       AND new_references.wlst_preference_weight_num IS NOT NULL
2797       AND new_references.unit_attempt_status = 'WAITLISTED'
2798       AND new_references.administrative_priority IS NULL
2799       THEN
2800           Igs_En_Wlst_Gen_proc.enrp_wlst_assign_pos(new_references.person_id,new_references.course_cd,new_references.uoo_id);
2801       END IF;
2802 
2803     END IF;
2804 
2805   END IF; --IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2806 
2807     IF (p_action = 'DELETE') THEN
2808       -- Call all the procedures related to After Delete.
2809       AfterRowInsertUpdateDelete3 ( p_inserting => FALSE,
2810                                     p_updating => FALSE,
2811                                     p_deleting => TRUE );
2812       update_reserved_seat('DELETE');
2813           -- This block of code is included to ensure that the counter gets
2814           -- decremented even if an enrolled unit attempt is deleted from the
2815           -- unit attempt window. This works as an additional enhancement for
2816           -- the bug #1525863
2817             IF ( (old_references.unit_attempt_status IN ('ENROLLED', 'UNCONFIRM')) AND
2818                  p_action = 'DELETE'  ) THEN
2819 
2820                   igs_en_sua_api.upd_enrollment_counts( 'DELETE',
2821                                                          old_references,
2822                                                          new_references
2823                                                       );
2824             END IF;
2825 
2826     END IF; -- IF (p_action = 'DELETE') THEN
2827 
2828     --validate newly enrolled units and check if the person has any active
2829     --unit attempts in diff. unit sections of the same unit across program/careers
2830     IF new_references.unit_attempt_status ='ENROLLED' THEN
2831       OPEN c_repeatable_unit(new_references.unit_cd,new_references.version_number);
2832       FETCH c_repeatable_unit INTO l_repeatable_unit;
2833       CLOSE c_repeatable_unit;
2834       IF l_repeatable_unit='X' THEN
2835 
2836       OPEN c_renrollcheck(new_references.person_id,new_references.uoo_id,new_references.course_cd);
2837        FETCH c_renrollcheck INTO l_dummy;
2838         IF  c_renrollcheck%FOUND THEN
2839 
2840               CLOSE  c_renrollcheck;
2841         ELSE
2842               CLOSE  c_renrollcheck;
2843 
2844               OPEN c_conflict_suas(new_references.person_id,new_references.uoo_id,new_references.unit_cd,
2845                              new_references.version_number,new_references.course_cd);
2846               FETCH c_conflict_suas INTO l_dummy;
2847               IF c_conflict_suas%FOUND THEN
2848                 CLOSE c_conflict_suas;
2849                 fnd_message.set_name('IGS', 'IGS_EN_REP_REENR_NOT_ALWD');
2850                 IGS_GE_MSG_STACK.ADD;
2851                 APP_EXCEPTION.RAISE_EXCEPTION;
2852               END IF;
2853               CLOSE c_conflict_suas;
2854          END IF; --renroll check
2855        END IF; --l_repeatable_unit
2856     END IF;
2857 
2858   IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2859 
2860     IF (p_action = 'UPDATE') THEN
2861        IF (old_references.unit_attempt_status <> new_references.unit_attempt_status) AND
2862           (new_references.unit_attempt_status IN ('DROPPED', 'DISCONTIN')) THEN
2863           l_new_cp := NULL;
2864           IF l_load_cal_type IS NOT NULL THEN
2865                 --Get the total enrolled cp after unit section got discontinue.
2866                 IGS_EN_PRC_LOAD.enrp_get_prg_eftsu_cp(
2867                             p_person_id       =>new_references.person_id,
2868                             p_course_cd       =>new_references.course_cd,
2869                             p_cal_type        =>l_load_cal_type,
2870                             p_sequence_number =>l_load_seq_num,
2871                             p_eftsu_total     =>l_dummy_value,
2872                             p_credit_points   => l_new_cp);
2873                 --Api Raises the drop business event.
2874                 igs_ss_en_wrappers.drop_all_workflow(
2875                             p_uoo_idS                =>new_references.uoo_id,
2876                             p_person_id              =>new_references.person_id,
2877                             p_load_cal_type          =>l_load_cal_type,
2878                             p_load_sequence_number   =>l_load_seq_num,
2879                             p_program_cd             =>new_references.course_cd,
2880                             p_return_status          =>l_return_status,
2881                             p_drop_date              =>new_references.discontinued_dt,
2882                             p_old_cp                 =>l_old_cp,
2883                             p_new_cp                 =>l_new_cp);
2884           END IF;
2885        END IF;
2886     END IF;
2887 
2888    IF new_references.unit_attempt_status IN ('WAITLISTED', 'ENROLLED','UNCONFIRM') THEN
2889       OPEN c_sca;
2890       FETCH c_sca into rec_sca;
2891       CLOSE c_sca;
2892       IF (rec_sca.student_confirmed_ind = 'Y')   THEN
2893 		  FOR rec_tl in c_teach_to_load(rec_sca.cal_type)
2894 		  LOOP
2895 		  IF  NVL(fnd_profile.value('CAREER_MODEL_ENABLED'),'N') = 'N' OR
2896 			  ('PRIMARY'=igs_en_spa_terms_api.get_spat_primary_prg (new_references.person_id, new_references.course_cd,
2897 				rec_tl.load_cal_type, rec_tl.load_ci_sequence_number)) THEN
2898 
2899 			OPEN c_term (new_references.person_id, new_references.course_cd,
2900 						   rec_tl.load_cal_type, rec_tl.load_ci_sequence_number);
2901 			FETCH c_term INTO l_dummy;
2902 			l_message_name := NULL;
2903 
2904 			IF c_term%NOTFOUND THEN
2905 					igs_en_spa_terms_api.create_update_term_rec (
2906 							p_person_id => new_references.person_id,
2907 							p_program_cd => new_references.course_cd,
2908 							p_term_cal_type => rec_tl.load_cal_type ,
2909 							p_term_sequence_number => rec_tl.load_ci_sequence_number ,
2910 							p_ripple_frwrd => FALSE, -- ripple forward
2911 							p_message_name => l_message_name,
2912 							p_update_rec => TRUE);
2913 			END IF;
2914 			CLOSE c_term;
2915 			IF l_message_name IS NOT NULL THEN
2916 					fnd_message.set_name('IGS', l_message_name);
2917 					IGS_GE_MSG_STACK.ADD;
2918 					app_exception.raise_exception;
2919 			END IF;
2920 		  END IF;
2921 		  END LOOP;
2922 	  END IF;
2923    END IF;
2924 
2925   IF p_action in ('INSERT','UPDATE') AND
2926     old_references.unit_attempt_status <> new_references.unit_attempt_status AND
2927     new_references.unit_attempt_status IN ('ENROLLED','WAITLISTED') THEN
2928 
2929     FOR rec_spa_terms IN
2930      c_spa_terms(new_references.person_id, new_references.course_cd, new_references.cal_type , new_references.ci_sequence_number)
2931      LOOP
2932           igs_en_spa_terms_pkg.update_row(
2933                  x_rowid                =>rec_spa_terms.row_id,
2934                  x_term_record_id       =>rec_spa_terms.term_record_id,
2935                  x_person_id            =>rec_spa_terms.person_id,
2936                  x_program_cd           =>rec_spa_terms.program_cd,
2937                  x_program_version      =>rec_spa_terms.program_version,
2938                  x_acad_cal_type        =>rec_spa_terms.acad_cal_type,
2939                  x_term_cal_type        =>rec_spa_terms.term_cal_type,
2940                  x_term_sequence_number =>rec_spa_terms.term_sequence_number,
2941                  x_key_program_flag     =>rec_spa_terms.key_program_flag,
2942                  x_location_cd          =>rec_spa_terms.location_cd,
2943                  x_attendance_mode      =>rec_spa_terms.attendance_mode,
2944                  x_attendance_type      =>rec_spa_terms.attendance_type,
2945                  x_fee_cat              =>rec_spa_terms.fee_cat,
2946                  x_coo_id               =>rec_spa_terms.coo_id,
2947                  x_class_standing_id    =>rec_spa_terms.class_standing_id,
2948                  x_attribute_category   =>rec_spa_terms.attribute_category,
2949                  x_attribute1           =>rec_spa_terms.attribute1,
2950                  x_attribute2           =>rec_spa_terms.attribute2,
2951                  x_attribute3           =>rec_spa_terms.attribute3,
2952                  x_attribute4           =>rec_spa_terms.attribute4,
2953                  x_attribute5           =>rec_spa_terms.attribute5,
2954                  x_attribute6           =>rec_spa_terms.attribute6,
2955                  x_attribute7           =>rec_spa_terms.attribute7,
2956                  x_attribute8           =>rec_spa_terms.attribute8,
2957                  x_attribute9           =>rec_spa_terms.attribute9,
2958                  x_attribute10          =>rec_spa_terms.attribute10,
2959                  x_attribute11          =>rec_spa_terms.attribute11,
2960                  x_attribute12          =>rec_spa_terms.attribute12,
2961                  x_attribute13          =>rec_spa_terms.attribute13,
2962                  x_attribute14          =>rec_spa_terms.attribute14,
2963                  x_attribute15          =>rec_spa_terms.attribute15,
2964                  x_attribute16          =>rec_spa_terms.attribute16,
2965                  x_attribute17          =>rec_spa_terms.attribute17,
2966                  x_attribute18          =>rec_spa_terms.attribute18,
2967                  x_attribute19          =>rec_spa_terms.attribute19,
2968                  x_attribute20          =>rec_spa_terms.attribute20,
2969                  x_mode                 =>'R',
2970                  x_plan_sht_status      =>'SKIP');
2971      END LOOP;
2972    END IF;
2973 
2974   END IF; -- IF IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop IS NULL OR IGS_EN_SU_ATTEMPT_PKG.pkg_source_of_drop <> 'PLAN' THEN
2975 
2976   END After_DML;
2977 --
2978 PROCEDURE INSERT_ROW (
2979   X_ROWID IN OUT NOCOPY VARCHAR2,
2980   X_PERSON_ID IN NUMBER,
2981   X_COURSE_CD IN VARCHAR2,
2982   X_UNIT_CD IN VARCHAR2,
2983   X_CAL_TYPE IN VARCHAR2,
2984   X_CI_SEQUENCE_NUMBER IN NUMBER,
2985   X_VERSION_NUMBER IN NUMBER,
2986   X_LOCATION_CD IN VARCHAR2,
2987   X_UNIT_CLASS IN VARCHAR2,
2988   X_CI_START_DT IN DATE,
2989   X_CI_END_DT IN DATE,
2990   X_UOO_ID IN NUMBER,
2991   X_ENROLLED_DT IN DATE,
2992   X_UNIT_ATTEMPT_STATUS IN VARCHAR2,
2993   X_ADMINISTRATIVE_UNIT_STATUS IN VARCHAR2,
2994   X_DISCONTINUED_DT IN DATE,
2995   X_RULE_WAIVED_DT IN DATE,
2996   X_RULE_WAIVED_PERSON_ID IN NUMBER,
2997   X_NO_ASSESSMENT_IND IN VARCHAR2,
2998   X_SUP_UNIT_CD IN VARCHAR2,
2999   X_SUP_VERSION_NUMBER IN NUMBER,
3000   X_EXAM_LOCATION_CD IN VARCHAR2,
3001   X_ALTERNATIVE_TITLE IN VARCHAR2,
3002   X_OVERRIDE_ENROLLED_CP IN NUMBER,
3003   X_OVERRIDE_EFTSU IN NUMBER,
3004   X_OVERRIDE_ACHIEVABLE_CP IN NUMBER,
3005   X_OVERRIDE_OUTCOME_DUE_DT IN DATE,
3006   X_OVERRIDE_CREDIT_REASON IN VARCHAR2,
3007   X_ADMINISTRATIVE_PRIORITY IN NUMBER,
3008   X_WAITLIST_DT IN DATE,
3009   X_DCNT_REASON_CD IN VARCHAR2,
3010   X_MODE IN VARCHAR2 ,
3011   x_org_id IN NUMBER,
3012   X_GS_VERSION_NUMBER IN NUMBER    ,
3013   X_ENR_METHOD_TYPE   IN VARCHAR2  ,
3014   X_FAILED_UNIT_RULE  IN VARCHAR2  ,
3015   X_CART              IN VARCHAR2 ,
3016   X_RSV_SEAT_EXT_ID   IN NUMBER   ,
3017   X_org_unit_cd       IN VARCHAR2 ,
3018   X_GRADING_SCHEMA_CODE IN VARCHAR2 ,
3019   x_subtitle            IN VARCHAR2 ,
3020   -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3021   x_session_id          IN NUMBER ,
3022   x_deg_aud_detail_id   IN NUMBER ,
3023   x_student_career_transcript IN VARCHAR2 ,
3024   x_student_career_statistics IN VARCHAR2 ,
3025   X_WAITLIST_MANUAL_IND    IN VARCHAR2,--Bug ID: 2554109  added by adhawan
3026   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
3027   X_ATTRIBUTE1 IN VARCHAR2 ,
3028   X_ATTRIBUTE2 IN VARCHAR2 ,
3029   X_ATTRIBUTE3 IN VARCHAR2 ,
3030   X_ATTRIBUTE4 IN VARCHAR2 ,
3031   X_ATTRIBUTE5 IN VARCHAR2 ,
3032   X_ATTRIBUTE6 IN VARCHAR2 ,
3033   X_ATTRIBUTE7 IN VARCHAR2 ,
3034   X_ATTRIBUTE8 IN VARCHAR2 ,
3035   X_ATTRIBUTE9 IN VARCHAR2 ,
3036   X_ATTRIBUTE10 IN VARCHAR2 ,
3037   X_ATTRIBUTE11 IN VARCHAR2 ,
3038   X_ATTRIBUTE12 IN VARCHAR2 ,
3039   X_ATTRIBUTE13 IN VARCHAR2 ,
3040   X_ATTRIBUTE14 IN VARCHAR2 ,
3041   X_ATTRIBUTE15 IN VARCHAR2 ,
3042   X_ATTRIBUTE16 IN VARCHAR2 ,
3043   X_ATTRIBUTE17 IN VARCHAR2 ,
3044   X_ATTRIBUTE18 IN VARCHAR2 ,
3045   X_ATTRIBUTE19 IN VARCHAR2 ,
3046   x_ATTRIBUTE20 IN VARCHAR2 ,
3047   -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3048   X_WLST_PRIORITY_WEIGHT_NUM IN NUMBER ,
3049   X_WLST_PREFERENCE_WEIGHT_NUM IN NUMBER ,
3050   -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3051   X_CORE_INDICATOR_CODE IN VARCHAR2,
3052   X_UPD_AUDIT_FLAG      IN VARCHAR2,
3053   X_SS_SOURCE_IND       IN VARCHAR2
3054   ) AS
3055   /*------------------------------------------------------------------------------------------------------------------------------------------
3056    knaraset   10-Jul-2003    Added unique key along with pk to check existance of Dropped units
3057    svanukur   28-APR-03      changed the where clauses to reflect teh new Primary key
3058                              as part of MUS build, # 2829262
3059    sbaliga    13-feb-2002    assigned igs_ge_gen_003.get_org_id to x_org_id in call to before_dml
3060                              as part of SWCR006 build.
3061 ---------------------------------------------------------------------------------------*/
3062 -- Changing the parameters X_UNIT_CD, X_CAL_TYPE, X_CI_SEQUENCE_NUMBER TO NEW_REFERENCES
3063 -- in response to the bug 1766230. For further detils please refer to version 115.19 of IGSEI36B.pls
3064 
3065     CURSOR C IS SELECT ROWID FROM IGS_EN_SU_ATTEMPT_ALL
3066       WHERE PERSON_ID = X_PERSON_ID
3067       AND COURSE_CD = X_COURSE_CD
3068       AND UOO_ID = X_UOO_ID;
3069 
3070 
3071      CURSOR cur_rowid  IS
3072       SELECT   ROWID
3073       FROM     IGS_EN_SU_ATTEMPT_ALL
3074       WHERE    person_id = x_person_id
3075       AND      course_cd = x_course_cd
3076       AND unit_attempt_status = 'DROPPED'
3077       AND ( uoo_id = x_uoo_id
3078            OR ( unit_cd = x_unit_cd AND
3079                 version_number = x_version_number AND
3080                 cal_type = x_cal_type AND
3081                 ci_sequence_number = x_ci_sequence_number AND
3082                 location_cd = x_location_cd AND
3083                 unit_class = x_unit_class
3084                 ));
3085 
3086     X_LAST_UPDATE_DATE DATE;
3087     X_LAST_UPDATED_BY NUMBER;
3088     X_LAST_UPDATE_LOGIN NUMBER;
3089     X_REQUEST_ID NUMBER;
3090     X_PROGRAM_ID NUMBER;
3091     X_PROGRAM_APPLICATION_ID NUMBER;
3092     X_PROGRAM_UPDATE_DATE DATE;
3093 
3094     resource_busy  EXCEPTION;
3095     PRAGMA EXCEPTION_INIT(resource_busy,-00054);
3096 
3097 BEGIN
3098 
3099 OPEN cur_rowid;
3100 FETCH cur_rowid INTO x_rowid;
3101 -- for Bug 1575677
3102 IF cur_rowid%FOUND THEN
3103 UPDATE_ROW (
3104    x_ROWID,
3105    X_PERSON_ID,
3106    X_COURSE_CD,
3107    X_UNIT_CD,
3108    X_CAL_TYPE,
3109    X_CI_SEQUENCE_NUMBER,
3110    X_VERSION_NUMBER,
3111    X_LOCATION_CD,
3112    X_UNIT_CLASS,
3113    X_CI_START_DT,
3114    X_CI_END_DT,
3115    X_UOO_ID,
3116    X_ENROLLED_DT,
3117    X_UNIT_ATTEMPT_STATUS,
3118    X_ADMINISTRATIVE_UNIT_STATUS,
3119    X_DISCONTINUED_DT,
3120    X_RULE_WAIVED_DT,
3121    X_RULE_WAIVED_PERSON_ID,
3122    X_NO_ASSESSMENT_IND,
3123    X_SUP_UNIT_CD,
3124    X_SUP_VERSION_NUMBER,
3125    X_EXAM_LOCATION_CD,
3126    X_ALTERNATIVE_TITLE,
3127    X_OVERRIDE_ENROLLED_CP,
3128    X_OVERRIDE_EFTSU,
3129    X_OVERRIDE_ACHIEVABLE_CP,
3130    X_OVERRIDE_OUTCOME_DUE_DT,
3131    X_OVERRIDE_CREDIT_REASON,
3132    X_ADMINISTRATIVE_PRIORITY,
3133    X_WAITLIST_DT,
3134    X_DCNT_REASON_CD,
3135    X_MODE,
3136    X_GS_VERSION_NUMBER ,
3137    X_ENR_METHOD_TYPE   ,
3138    X_FAILED_UNIT_RULE  ,
3139    X_CART              ,
3140    X_RSV_SEAT_EXT_ID    ,
3141    X_org_unit_cd        ,
3142    X_GRADING_SCHEMA_CODE,
3143    x_subtitle,
3144    -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3145    x_session_id,
3146    x_deg_aud_detail_id,
3147    x_student_career_transcript,
3148    x_student_career_statistics,
3149    x_waitlist_manual_ind  ,--Bug ID: 2554109  added by adhawan
3150    X_ATTRIBUTE_CATEGORY,
3151    X_ATTRIBUTE1,
3152    X_ATTRIBUTE2,
3153    X_ATTRIBUTE3,
3154    X_ATTRIBUTE4,
3155    X_ATTRIBUTE5,
3156    X_ATTRIBUTE6,
3157    X_ATTRIBUTE7,
3158    X_ATTRIBUTE8,
3159    X_ATTRIBUTE9,
3160    X_ATTRIBUTE10,
3161    X_ATTRIBUTE11,
3162    X_ATTRIBUTE12,
3163    X_ATTRIBUTE13,
3164    X_ATTRIBUTE14,
3165    X_ATTRIBUTE15,
3166    X_ATTRIBUTE16,
3167    X_ATTRIBUTE17,
3168    X_ATTRIBUTE18,
3169    X_ATTRIBUTE19,
3170    X_ATTRIBUTE20,
3171    -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3172    X_WLST_PRIORITY_WEIGHT_NUM,
3173    X_WLST_PREFERENCE_WEIGHT_NUM,
3174    -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3175    X_CORE_INDICATOR_CODE,
3176    X_UPD_AUDIT_FLAG,
3177    X_SS_SOURCE_IND
3178 );
3179 ELSE
3180   X_LAST_UPDATE_DATE := SYSDATE;
3181   IF(X_MODE = 'I') THEN
3182     X_LAST_UPDATED_BY := 1;
3183     X_LAST_UPDATE_LOGIN := 0;
3184 ELSIF (X_MODE IN ('R', 'S')) THEN
3185     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
3186     IF X_LAST_UPDATED_BY IS NULL THEN
3187       X_LAST_UPDATED_BY := -1;
3188     END IF;
3189     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
3190     IF X_LAST_UPDATE_LOGIN IS NULL THEN
3191       X_LAST_UPDATE_LOGIN := -1;
3192    END IF;
3193    X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3194    X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3195    X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3196   IF (X_REQUEST_ID = -1) THEN
3197      X_REQUEST_ID := NULL;
3198      X_PROGRAM_ID := NULL;
3199      X_PROGRAM_APPLICATION_ID := NULL;
3200      X_PROGRAM_UPDATE_DATE := NULL;
3201  ELSE
3202      X_PROGRAM_UPDATE_DATE := SYSDATE;
3203  END IF;
3204   ELSE
3205     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
3206     IGS_GE_MSG_STACK.ADD;
3207     APP_EXCEPTION.RAISE_EXCEPTION;
3208   END IF;
3209 --
3210    Before_DML(
3211     p_action=>'INSERT',
3212     x_rowid=>NULL,
3213     x_administrative_unit_status=>X_ADMINISTRATIVE_UNIT_STATUS,
3214     x_alternative_title=>X_ALTERNATIVE_TITLE,
3215     x_cal_type=>X_CAL_TYPE,
3216     x_ci_end_dt=>X_CI_END_DT,
3217     x_ci_sequence_number=>X_CI_SEQUENCE_NUMBER,
3218     x_ci_start_dt=>X_CI_START_DT,
3219     x_course_cd=>X_COURSE_CD,
3220     x_discontinued_dt=>X_DISCONTINUED_DT,
3221     x_enrolled_dt=>X_ENROLLED_DT,
3222     x_exam_location_cd=>X_EXAM_LOCATION_CD,
3223     x_location_cd=>X_LOCATION_CD,
3224     x_no_assessment_ind=> NVL(X_NO_ASSESSMENT_IND,'N'),
3225     x_override_achievable_cp=>X_OVERRIDE_ACHIEVABLE_CP,
3226     x_override_credit_reason=>X_OVERRIDE_CREDIT_REASON,
3227     x_override_eftsu=>X_OVERRIDE_EFTSU,
3228     x_override_enrolled_cp=>X_OVERRIDE_ENROLLED_CP,
3229     x_override_outcome_due_dt=>X_OVERRIDE_OUTCOME_DUE_DT,
3230     x_person_id=>X_PERSON_ID,
3231     x_rule_waived_dt=>X_RULE_WAIVED_DT,
3232     x_rule_waived_person_id=>X_RULE_WAIVED_PERSON_ID,
3233     x_sup_unit_cd=>X_SUP_UNIT_CD,
3234     x_sup_version_number=>X_SUP_VERSION_NUMBER,
3235     x_unit_attempt_status=>X_UNIT_ATTEMPT_STATUS,
3236     x_unit_cd=>X_UNIT_CD,
3237     x_unit_class=>X_UNIT_CLASS,
3238     x_uoo_id=>X_UOO_ID,
3239     x_version_number=>X_VERSION_NUMBER,
3240     x_administrative_priority=>X_ADMINISTRATIVE_PRIORITY,
3241     x_waitlist_dt=>X_WAITLIST_DT,
3242     x_dcnt_reason_cd => X_DCNT_REASON_CD,
3243     x_creation_date=>X_LAST_UPDATE_DATE,
3244     x_created_by=>X_LAST_UPDATED_BY,
3245     x_last_update_date=>X_LAST_UPDATE_DATE,
3246     x_last_updated_by=>X_LAST_UPDATED_BY,
3247     x_last_update_login=>X_LAST_UPDATE_LOGIN,
3248     x_org_id  => igs_ge_gen_003.get_org_id,
3249     x_gs_version_number => X_GS_VERSION_NUMBER,
3250     x_enr_method_type   => X_ENR_METHOD_TYPE  ,
3251     x_failed_unit_rule  => X_FAILED_UNIT_RULE ,
3252     x_cart              => X_CART             ,
3253     x_rsv_seat_ext_id   => X_RSV_SEAT_EXT_ID,
3254     x_org_unit_cd=>X_ORG_UNIT_CD              ,
3255     x_grading_schema_code => X_GRADING_SCHEMA_CODE,
3256     x_subtitle            => x_subtitle,
3257     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3258     x_session_id          => x_session_id,
3259     x_deg_aud_detail_id   => x_deg_aud_detail_id,
3260     x_student_career_transcript   =>  x_student_career_transcript,
3261     x_student_career_statistics    =>  x_student_career_statistics,
3262     x_waitlist_manual_ind   =>   x_waitlist_manual_ind ,--Bug ID: 2554109  added by adhawan
3263     x_attribute_category=>X_ATTRIBUTE_CATEGORY,
3264     x_attribute1=>X_ATTRIBUTE1,
3265     x_attribute2=>X_ATTRIBUTE2,
3266     x_attribute3=>X_ATTRIBUTE3,
3267     x_attribute4=>X_ATTRIBUTE4,
3268     x_attribute5=>X_ATTRIBUTE5,
3269     x_attribute6=>X_ATTRIBUTE6,
3270      x_attribute7=>X_ATTRIBUTE7,
3271     x_attribute8=>X_ATTRIBUTE8,
3272     x_attribute9=>X_ATTRIBUTE9,
3273      x_attribute10=>X_ATTRIBUTE10,
3274      x_attribute11=>X_ATTRIBUTE11,
3275      x_attribute12=>X_ATTRIBUTE12,
3276      x_attribute13=>X_ATTRIBUTE13,
3277      x_attribute14=>X_ATTRIBUTE14,
3278      x_attribute15=>X_ATTRIBUTE15,
3279      x_attribute16=>X_ATTRIBUTE16,
3280      x_attribute17=>X_ATTRIBUTE17,
3281      x_attribute18=>X_ATTRIBUTE18,
3282     x_attribute19=>X_ATTRIBUTE19,
3283     x_attribute20=>X_ATTRIBUTE20,
3284     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3285     x_wlst_priority_weight_num=>X_WLST_PRIORITY_WEIGHT_NUM,
3286     x_wlst_preference_weight_num=>X_WLST_PREFERENCE_WEIGHT_NUM,
3287     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3288     x_core_indicator_code=>X_CORE_INDICATOR_CODE,
3289     X_UPD_AUDIT_FLAG     =>X_UPD_AUDIT_FLAG,
3290     X_SS_SOURCE_IND      =>  X_SS_SOURCE_IND
3291     );
3292 --
3293   IF (x_mode = 'S') THEN
3294     igs_sc_gen_001.set_ctx('R');
3295   END IF;
3296   INSERT INTO IGS_EN_SU_ATTEMPT_ALL (
3297     PERSON_ID,
3298     COURSE_CD,
3299     UNIT_CD,
3300     VERSION_NUMBER,
3301     CAL_TYPE,
3302     CI_SEQUENCE_NUMBER,
3303     LOCATION_CD,
3304     UNIT_CLASS,
3305     CI_START_DT,
3306     CI_END_DT,
3307     UOO_ID,
3308     ENROLLED_DT,
3309     UNIT_ATTEMPT_STATUS,
3310     ADMINISTRATIVE_UNIT_STATUS,
3311     DISCONTINUED_DT,
3312     RULE_WAIVED_DT,
3313     RULE_WAIVED_PERSON_ID,
3314     NO_ASSESSMENT_IND,
3315     SUP_UNIT_CD,
3316     SUP_VERSION_NUMBER,
3317     EXAM_LOCATION_CD,
3318     ALTERNATIVE_TITLE,
3319     OVERRIDE_ENROLLED_CP,
3320     OVERRIDE_EFTSU,
3321     OVERRIDE_ACHIEVABLE_CP,
3322     OVERRIDE_OUTCOME_DUE_DT,
3323     OVERRIDE_CREDIT_REASON,
3324     ADMINISTRATIVE_PRIORITY,
3325     WAITLIST_DT,
3326     DCNT_REASON_CD,
3327     CREATION_DATE,
3328     CREATED_BY,
3329     LAST_UPDATE_DATE,
3330     LAST_UPDATED_BY,
3331     LAST_UPDATE_LOGIN,
3332     REQUEST_ID,
3333     PROGRAM_ID,
3334     PROGRAM_APPLICATION_ID,
3335     PROGRAM_UPDATE_DATE,
3336     org_id,
3337     GS_VERSION_NUMBER,
3338     ENR_METHOD_TYPE  ,
3339     FAILED_UNIT_RULE ,
3340     CART             ,
3341     RSV_SEAT_EXT_ID   ,
3342     ORG_UNIT_CD      ,
3343     GRADING_SCHEMA_CODE ,
3344     subtitle,
3345     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3346     session_id,
3347     deg_aud_detail_id,
3348     student_career_transcript,
3349     student_career_statistics,
3350     waitlist_manual_ind ,--Bug ID: 2554109  added by adhawan
3351     ATTRIBUTE_CATEGORY,
3352     ATTRIBUTE1,
3353     ATTRIBUTE2,
3354     ATTRIBUTE3,
3355     ATTRIBUTE4,
3356     ATTRIBUTE5,
3357     ATTRIBUTE6,
3358     ATTRIBUTE7,
3359     ATTRIBUTE8,
3360     ATTRIBUTE9,
3361     ATTRIBUTE10,
3362     ATTRIBUTE11,
3363     ATTRIBUTE12,
3364     ATTRIBUTE13,
3365     ATTRIBUTE14,
3366     ATTRIBUTE15,
3367     ATTRIBUTE16,
3368     ATTRIBUTE17,
3369     ATTRIBUTE18,
3370     ATTRIBUTE19,
3371     ATTRIBUTE20,
3372     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3373     WLST_PRIORITY_WEIGHT_NUM,
3374     WLST_PREFERENCE_WEIGHT_NUM,
3375     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3376     CORE_INDICATOR_CODE,
3377     UPD_AUDIT_FLAG,
3378     SS_SOURCE_IND ) VALUES (
3379     NEW_REFERENCES.PERSON_ID,
3380     NEW_REFERENCES.COURSE_CD,
3381     NEW_REFERENCES.UNIT_CD,
3382     NEW_REFERENCES.VERSION_NUMBER,
3383     NEW_REFERENCES.CAL_TYPE,
3384     NEW_REFERENCES.CI_SEQUENCE_NUMBER,
3385     NEW_REFERENCES.LOCATION_CD,
3386     NEW_REFERENCES.UNIT_CLASS,
3387     NEW_REFERENCES.CI_START_DT,
3388     NEW_REFERENCES.CI_END_DT,
3389     NEW_REFERENCES.UOO_ID,
3390     NEW_REFERENCES.ENROLLED_DT,
3391     NEW_REFERENCES.UNIT_ATTEMPT_STATUS,
3392     NEW_REFERENCES.ADMINISTRATIVE_UNIT_STATUS,
3393     NEW_REFERENCES.DISCONTINUED_DT,
3394     TRUNC(NEW_REFERENCES.RULE_WAIVED_DT),
3395     NEW_REFERENCES.RULE_WAIVED_PERSON_ID,
3396     NEW_REFERENCES.NO_ASSESSMENT_IND,
3397     NEW_REFERENCES.SUP_UNIT_CD,
3398     NEW_REFERENCES.SUP_VERSION_NUMBER,
3399     NEW_REFERENCES.EXAM_LOCATION_CD,
3400     NEW_REFERENCES.ALTERNATIVE_TITLE,
3401     NEW_REFERENCES.OVERRIDE_ENROLLED_CP,
3402     NEW_REFERENCES.OVERRIDE_EFTSU,
3403     NEW_REFERENCES.OVERRIDE_ACHIEVABLE_CP,
3404     NEW_REFERENCES.OVERRIDE_OUTCOME_DUE_DT,
3405     NEW_REFERENCES.OVERRIDE_CREDIT_REASON,
3406     NEW_REFERENCES.ADMINISTRATIVE_PRIORITY,
3407     NEW_REFERENCES.WAITLIST_DT,
3408     NEW_REFERENCES.DCNT_REASON_CD,
3409     X_LAST_UPDATE_DATE,
3410     X_LAST_UPDATED_BY,
3411     X_LAST_UPDATE_DATE,
3412     X_LAST_UPDATED_BY,
3413     X_LAST_UPDATE_LOGIN,
3414     X_REQUEST_ID,
3415     X_PROGRAM_ID,
3416     X_PROGRAM_APPLICATION_ID,
3417     X_PROGRAM_UPDATE_DATE,
3418     NEW_REFERENCES.org_id,
3419     NEW_REFERENCES.GS_VERSION_NUMBER,
3420     NEW_REFERENCES.ENR_METHOD_TYPE,
3421     NEW_REFERENCES.FAILED_UNIT_RULE,
3422     NEW_REFERENCES.CART             ,
3423     NEW_REFERENCES.RSV_SEAT_EXT_ID       ,
3424     NEW_REFERENCES.ORG_UNIT_CD       ,
3425     NEW_REFERENCES.GRADING_SCHEMA_CODE ,
3426     new_references.subtitle,
3427     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3428     new_references.session_id,
3429     new_references.deg_aud_detail_id ,
3430     new_references.student_career_transcript,
3431     new_references.student_career_statistics,
3432     new_references.waitlist_manual_ind ,--Bug ID: 2554109  added by adhawan
3433     NEW_REFERENCES.ATTRIBUTE_CATEGORY,
3434     NEW_REFERENCES.ATTRIBUTE1,
3435     NEW_REFERENCES.ATTRIBUTE2,
3436     NEW_REFERENCES.ATTRIBUTE3,
3437     NEW_REFERENCES.ATTRIBUTE4,
3438     NEW_REFERENCES.ATTRIBUTE5,
3439     NEW_REFERENCES.ATTRIBUTE6,
3440     NEW_REFERENCES.ATTRIBUTE7,
3441     NEW_REFERENCES.ATTRIBUTE8,
3442     NEW_REFERENCES.ATTRIBUTE9,
3443     NEW_REFERENCES.ATTRIBUTE10,
3444     NEW_REFERENCES.ATTRIBUTE11,
3445     NEW_REFERENCES.ATTRIBUTE12,
3446     NEW_REFERENCES.ATTRIBUTE13,
3447     NEW_REFERENCES.ATTRIBUTE14,
3448     NEW_REFERENCES.ATTRIBUTE15,
3449     NEW_REFERENCES.ATTRIBUTE16,
3450     NEW_REFERENCES.ATTRIBUTE17,
3451     NEW_REFERENCES.ATTRIBUTE18,
3452     NEW_REFERENCES.ATTRIBUTE19,
3453     NEW_REFERENCES.ATTRIBUTE20,
3454     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3455     NEW_REFERENCES.WLST_PRIORITY_WEIGHT_NUM,
3456     NEW_REFERENCES.WLST_PREFERENCE_WEIGHT_NUM,
3457     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3458     NEW_REFERENCES.CORE_INDICATOR_CODE,
3459       NEW_REFERENCES.UPD_AUDIT_FLAG,
3460       NEW_REFERENCES.SS_SOURCE_IND      );
3461  IF (x_mode = 'S') THEN
3462     igs_sc_gen_001.unset_ctx('R');
3463   END IF;
3464 
3465   OPEN c;
3466   FETCH c INTO X_ROWID;
3467   IF (c%NOTFOUND) THEN
3468     CLOSE c;
3469     RAISE NO_DATA_FOUND;
3470   END IF;
3471   CLOSE c;
3472 --
3473  After_DML(
3474   p_action => 'INSERT',
3475   x_rowid => X_ROWID
3476   );
3477 --
3478 END IF;
3479 CLOSE cur_rowid;
3480 
3481 EXCEPTION
3482   WHEN resource_busy THEN
3483     fnd_message.set_name('FND', 'FND_LOCK_RECORD_ERROR');
3484     IGS_GE_MSG_STACK.ADD;
3485     APP_EXCEPTION.RAISE_EXCEPTION;
3486 
3487   WHEN OTHERS THEN
3488     IF (SQLCODE IN (-28115, -28113, -28111)) THEN
3489       fnd_message.set_name ('IGS', 'IGS_SC_POLICY_EXCEPTION');
3490       fnd_message.set_token ('ERR_CD', SQLCODE);
3491       igs_ge_msg_stack.add;
3492       igs_sc_gen_001.unset_ctx('R');
3493       app_exception.raise_exception;
3494     ELSE
3495       igs_sc_gen_001.unset_ctx('R');
3496       RAISE;
3497     END IF;
3498 
3499 END INSERT_ROW;
3500 
3501 PROCEDURE LOCK_ROW (
3502   X_ROWID IN  VARCHAR2,
3503   X_PERSON_ID IN NUMBER,
3504   X_COURSE_CD IN VARCHAR2,
3505   X_UNIT_CD IN VARCHAR2,
3506   X_CAL_TYPE IN VARCHAR2,
3507   X_CI_SEQUENCE_NUMBER IN NUMBER,
3508   X_VERSION_NUMBER IN NUMBER,
3509   X_LOCATION_CD IN VARCHAR2,
3510   X_UNIT_CLASS IN VARCHAR2,
3511   X_CI_START_DT IN DATE,
3512   X_CI_END_DT IN DATE,
3513   X_UOO_ID IN NUMBER,
3514   X_ENROLLED_DT IN DATE,
3515   X_UNIT_ATTEMPT_STATUS IN VARCHAR2,
3516   X_ADMINISTRATIVE_UNIT_STATUS IN VARCHAR2,
3517   X_DISCONTINUED_DT IN DATE,
3518   X_RULE_WAIVED_DT IN DATE,
3519   X_RULE_WAIVED_PERSON_ID IN NUMBER,
3520   X_NO_ASSESSMENT_IND IN VARCHAR2,
3521   X_SUP_UNIT_CD IN VARCHAR2,
3522   X_SUP_VERSION_NUMBER IN NUMBER,
3523   X_EXAM_LOCATION_CD IN VARCHAR2,
3524   X_ALTERNATIVE_TITLE IN VARCHAR2,
3525   X_OVERRIDE_ENROLLED_CP IN NUMBER,
3526   X_OVERRIDE_EFTSU IN NUMBER,
3527   X_OVERRIDE_ACHIEVABLE_CP IN NUMBER,
3528   X_OVERRIDE_OUTCOME_DUE_DT IN DATE,
3529   X_OVERRIDE_CREDIT_REASON IN VARCHAR2,
3530   X_ADMINISTRATIVE_PRIORITY IN NUMBER,
3531   X_WAITLIST_DT IN DATE,
3532   X_DCNT_REASON_CD IN VARCHAR2,
3533   X_GS_VERSION_NUMBER IN NUMBER  ,
3534   X_ENR_METHOD_TYPE   IN VARCHAR2,
3535   X_FAILED_UNIT_RULE  IN VARCHAR2,
3536   X_CART              IN VARCHAR2,
3537   X_RSV_SEAT_EXT_ID   IN NUMBER  ,
3538   X_ORG_UNIT_CD IN VARCHAR2 ,
3539   X_GRADING_SCHEMA_CODE IN VARCHAR2 ,
3540   x_subtitle            IN VARCHAR2 ,
3541   -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3542   x_session_id          IN NUMBER ,
3543   X_deg_aud_detail_id   IN NUMBER ,
3544   x_student_career_transcript IN VARCHAR2 ,
3545   x_student_career_statistics IN VARCHAR2 ,
3546   x_waitlist_manual_ind    IN VARCHAR2,--Bug ID: 2554109  added by adhawan
3547   X_ATTRIBUTE_CATEGORY IN VARCHAR2,
3548   X_ATTRIBUTE1 IN VARCHAR2 ,
3549   X_ATTRIBUTE2 IN VARCHAR2 ,
3550   X_ATTRIBUTE3 IN VARCHAR2 ,
3551   X_ATTRIBUTE4 IN VARCHAR2 ,
3552   X_ATTRIBUTE5 IN VARCHAR2 ,
3553   X_ATTRIBUTE6 IN VARCHAR2 ,
3554   X_ATTRIBUTE7 IN VARCHAR2 ,
3555   X_ATTRIBUTE8 IN VARCHAR2 ,
3556   X_ATTRIBUTE9 IN VARCHAR2 ,
3557   X_ATTRIBUTE10 IN VARCHAR2,
3558   X_ATTRIBUTE11 IN VARCHAR2,
3559   X_ATTRIBUTE12 IN VARCHAR2,
3560   X_ATTRIBUTE13 IN VARCHAR2,
3561   X_ATTRIBUTE14 IN VARCHAR2,
3562   X_ATTRIBUTE15 IN VARCHAR2,
3563   X_ATTRIBUTE16 IN VARCHAR2,
3564   X_ATTRIBUTE17 IN VARCHAR2,
3565   X_ATTRIBUTE18 IN VARCHAR2,
3566   X_ATTRIBUTE19 IN VARCHAR2,
3567   x_ATTRIBUTE20 IN VARCHAR2,
3568   -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3569   X_WLST_PRIORITY_WEIGHT_NUM IN NUMBER,
3570   X_WLST_PREFERENCE_WEIGHT_NUM IN NUMBER,
3571   -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3572   X_CORE_INDICATOR_CODE IN VARCHAR2,
3573   X_UPD_AUDIT_FLAG      IN VARCHAR2,
3574   X_SS_SOURCE_IND       IN VARCHAR2
3575 ) AS
3576   CURSOR c1 IS SELECT
3577       VERSION_NUMBER,
3578       LOCATION_CD,
3579       UNIT_CLASS,
3580       CI_START_DT,
3581       CI_END_DT,
3582       UOO_ID,
3583       ENROLLED_DT,
3584       UNIT_ATTEMPT_STATUS,
3585       ADMINISTRATIVE_UNIT_STATUS,
3586       DISCONTINUED_DT,
3587       RULE_WAIVED_DT,
3588       RULE_WAIVED_PERSON_ID,
3589       NO_ASSESSMENT_IND,
3590       SUP_UNIT_CD,
3591       SUP_VERSION_NUMBER,
3592       EXAM_LOCATION_CD,
3593       ALTERNATIVE_TITLE,
3594       OVERRIDE_ENROLLED_CP,
3595       OVERRIDE_EFTSU,
3596       OVERRIDE_ACHIEVABLE_CP,
3597       OVERRIDE_OUTCOME_DUE_DT,
3598       OVERRIDE_CREDIT_REASON,
3599       ADMINISTRATIVE_PRIORITY,
3600       WAITLIST_DT,
3601       dcnt_reason_cd,
3602       GS_VERSION_NUMBER,
3603       ENR_METHOD_TYPE  ,
3604       FAILED_UNIT_RULE ,
3605       CART             ,
3606       RSV_SEAT_EXT_ID ,
3607       ORG_UNIT_CD     ,
3608       GRADING_SCHEMA_CODE,
3609       subtitle,
3610     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3611       session_id,
3612      deg_aud_detail_id,
3613      student_career_transcript,
3614      student_career_statistics,
3615      waitlist_manual_ind ,--Bug ID: 2554109  added by adhawan
3616      ATTRIBUTE_CATEGORY,
3617      ATTRIBUTE1,
3618      ATTRIBUTE2,
3619      ATTRIBUTE3,
3620      ATTRIBUTE4,
3621      ATTRIBUTE5,
3622      ATTRIBUTE6,
3623      ATTRIBUTE7,
3624      ATTRIBUTE8,
3625      ATTRIBUTE9,
3626      ATTRIBUTE10,
3627      ATTRIBUTE11,
3628      ATTRIBUTE12,
3629      ATTRIBUTE13,
3630      ATTRIBUTE14,
3631      ATTRIBUTE15,
3632      ATTRIBUTE16,
3633      ATTRIBUTE17,
3634      ATTRIBUTE18,
3635      ATTRIBUTE19,
3636      ATTRIBUTE20,
3637      -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3638      WLST_PRIORITY_WEIGHT_NUM,
3639      WLST_PREFERENCE_WEIGHT_NUM,
3640      -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3641      CORE_INDICATOR_CODE,
3642      UPD_AUDIT_FLAG,
3643      SS_SOURCE_IND
3644    FROM IGS_EN_SU_ATTEMPT_ALL
3645     WHERE ROWID = X_ROWID  FOR UPDATE  NOWAIT;
3646   tlinfo c1%ROWTYPE;
3647 BEGIN
3648   OPEN c1;
3649   FETCH c1 INTO tlinfo;
3650   IF (c1%NOTFOUND) THEN
3651     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
3652     IGS_GE_MSG_STACK.ADD;
3653     APP_EXCEPTION.RAISE_EXCEPTION;
3654     CLOSE c1;
3655     RETURN;
3656   END IF;
3657   CLOSE c1;
3658   IF ( (tlinfo.VERSION_NUMBER = X_VERSION_NUMBER)
3659       AND (tlinfo.LOCATION_CD = X_LOCATION_CD)
3660       AND (tlinfo.UNIT_CLASS = X_UNIT_CLASS)
3661       AND (tlinfo.CI_START_DT = X_CI_START_DT)
3662       AND (tlinfo.CI_END_DT = X_CI_END_DT)
3663       AND (tlinfo.UOO_ID = X_UOO_ID)
3664       AND (( TRUNC(tlinfo.ENROLLED_DT) = TRUNC(X_ENROLLED_DT) )
3665            OR ((tlinfo.ENROLLED_DT IS NULL)
3666                AND (X_ENROLLED_DT IS NULL)))
3667       AND (tlinfo.UNIT_ATTEMPT_STATUS = X_UNIT_ATTEMPT_STATUS)
3668       AND ((tlinfo.ADMINISTRATIVE_UNIT_STATUS = X_ADMINISTRATIVE_UNIT_STATUS)
3669            OR ((tlinfo.ADMINISTRATIVE_UNIT_STATUS IS NULL)
3670                AND (X_ADMINISTRATIVE_UNIT_STATUS IS NULL)))
3671       AND (( TRUNC(tlinfo.DISCONTINUED_DT) = TRUNC(X_DISCONTINUED_DT) )
3672            OR ((tlinfo.DISCONTINUED_DT IS NULL)
3673                AND (X_DISCONTINUED_DT IS NULL)))
3674       AND (( TRUNC(tlinfo.RULE_WAIVED_DT) = TRUNC(X_RULE_WAIVED_DT))
3675            OR ((tlinfo.RULE_WAIVED_DT IS NULL)
3676                AND (X_RULE_WAIVED_DT IS NULL)))
3677       AND ((tlinfo.RULE_WAIVED_PERSON_ID = X_RULE_WAIVED_PERSON_ID)
3678            OR ((tlinfo.RULE_WAIVED_PERSON_ID IS NULL)
3679                AND (X_RULE_WAIVED_PERSON_ID IS NULL)))
3680       AND (tlinfo.NO_ASSESSMENT_IND = X_NO_ASSESSMENT_IND)
3681       AND ((tlinfo.SUP_UNIT_CD = X_SUP_UNIT_CD)
3682            OR ((tlinfo.SUP_UNIT_CD IS NULL)
3683                AND (X_SUP_UNIT_CD IS NULL)))
3684       AND ((tlinfo.SUP_VERSION_NUMBER = X_SUP_VERSION_NUMBER)
3685            OR ((tlinfo.SUP_VERSION_NUMBER IS NULL)
3686                AND (X_SUP_VERSION_NUMBER IS NULL)))
3687       AND ((tlinfo.EXAM_LOCATION_CD = X_EXAM_LOCATION_CD)
3688            OR ((tlinfo.EXAM_LOCATION_CD IS NULL)
3689                AND (X_EXAM_LOCATION_CD IS NULL)))
3690       AND ((tlinfo.ALTERNATIVE_TITLE = X_ALTERNATIVE_TITLE)
3691            OR ((tlinfo.ALTERNATIVE_TITLE IS NULL)
3692                AND (X_ALTERNATIVE_TITLE IS NULL)))
3693       AND ((tlinfo.OVERRIDE_ENROLLED_CP = X_OVERRIDE_ENROLLED_CP)
3694            OR ((tlinfo.OVERRIDE_ENROLLED_CP IS NULL)
3695                AND (X_OVERRIDE_ENROLLED_CP IS NULL)))
3696       AND ((tlinfo.OVERRIDE_EFTSU = X_OVERRIDE_EFTSU)
3697            OR ((tlinfo.OVERRIDE_EFTSU IS NULL)
3698                AND (X_OVERRIDE_EFTSU IS NULL)))
3699       AND ((tlinfo.OVERRIDE_ACHIEVABLE_CP = X_OVERRIDE_ACHIEVABLE_CP)
3700            OR ((tlinfo.OVERRIDE_ACHIEVABLE_CP IS NULL)
3701                AND (X_OVERRIDE_ACHIEVABLE_CP IS NULL)))
3702       AND (( TRUNC(tlinfo.OVERRIDE_OUTCOME_DUE_DT) = TRUNC(X_OVERRIDE_OUTCOME_DUE_DT))
3703            OR ((tlinfo.OVERRIDE_OUTCOME_DUE_DT IS NULL)
3704                AND (X_OVERRIDE_OUTCOME_DUE_DT IS NULL)))
3705       AND ((tlinfo.OVERRIDE_CREDIT_REASON = X_OVERRIDE_CREDIT_REASON)
3706            OR ((tlinfo.OVERRIDE_CREDIT_REASON IS NULL)
3707                AND (X_OVERRIDE_CREDIT_REASON IS NULL)))
3708       AND ((tlinfo.dcnt_reason_cd = X_dcnt_reason_Cd)
3709            OR ((tlinfo.dcnt_reason_cd IS NULL)
3710                AND (X_dcnt_reason_cd IS NULL)))
3711       AND ((tlinfo.GS_VERSION_NUMBER = X_GS_VERSION_NUMBER)
3712            OR ((tlinfo.GS_VERSION_NUMBER IS NULL)
3713                AND (X_GS_VERSION_NUMBER IS NULL)))
3714       AND ((tlinfo.ENR_METHOD_TYPE = X_ENR_METHOD_TYPE)
3715            OR ((tlinfo.ENR_METHOD_TYPE IS NULL)
3716                AND (X_ENR_METHOD_TYPE IS NULL)))
3717       AND ((tlinfo.FAILED_UNIT_RULE = X_FAILED_UNIT_RULE)
3718            OR ((tlinfo.FAILED_UNIT_RULE IS NULL)
3719                AND (X_FAILED_UNIT_RULE IS NULL)))
3720       AND ((tlinfo.CART = X_CART)
3721            OR ((tlinfo.CART IS NULL)
3722                AND (X_CART IS NULL)))
3723       AND ((tlinfo.RSV_SEAT_EXT_ID = X_RSV_SEAT_EXT_ID)
3724            OR ((tlinfo.RSV_SEAT_EXT_ID IS NULL)
3725                AND (X_RSV_SEAT_EXT_ID IS NULL)))
3726       AND ((tlinfo.ORG_UNIT_CD = X_ORG_UNIT_CD)
3727            OR ((tlinfo.ORG_UNIT_CD IS NULL)
3728                AND (X_ORG_UNIT_CD IS NULL)))
3729       AND ((tlinfo.GRADING_SCHEMA_CODE = X_GRADING_SCHEMA_CODE)
3730            OR ((tlinfo.GRADING_SCHEMA_CODE IS NULL)
3731                AND (X_GRADING_SCHEMA_CODE IS NULL)))
3732       AND ((tlinfo.subtitle= X_subtitle)
3733            OR ((tlinfo.subtitle  IS NULL)
3734                AND (X_subtitle IS NULL)))
3735     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3736       AND ((tlinfo.session_id = x_session_id)
3737            OR ((tlinfo.session_id  IS NULL)
3738                AND (x_session_id IS NULL)))
3739       AND ((tlinfo.deg_aud_detail_id = X_deg_aud_detail_id)
3740            OR ((tlinfo.deg_aud_detail_id  IS NULL)
3741                AND (X_deg_aud_detail_id IS NULL)))
3742       AND ((tlinfo.student_career_transcript = X_student_career_transcript)
3743            OR ((tlinfo.student_career_transcript  IS NULL)
3744                AND (X_student_career_transcript IS NULL)))
3745 
3746       AND ((tlinfo.student_career_statistics = X_student_career_statistics)
3747            OR ((tlinfo.student_career_statistics  IS NULL)
3748                AND (X_student_career_statistics IS NULL)))
3749 
3750 --Bug ID: 2554109  added by adhawan
3751       AND   ((tlinfo.waitlist_manual_ind = X_waitlist_manual_ind)
3752                OR (( tlinfo.waitlist_manual_ind IS NULL )
3753                AND (X_WAITLIST_MANUAL_IND IS NULL)))
3754 
3755       AND ((tlinfo.ATTRIBUTE_CATEGORY = X_ATTRIBUTE_CATEGORY)
3756            OR ((tlinfo.ATTRIBUTE_CATEGORY IS NULL)
3757                AND (X_ATTRIBUTE_CATEGORY IS NULL)))
3758       AND ((tlinfo.ATTRIBUTE1 = X_ATTRIBUTE1)
3759            OR ((tlinfo.ATTRIBUTE1 IS NULL)
3760                AND (X_ATTRIBUTE1 IS NULL)))
3761       AND ((tlinfo.ATTRIBUTE2 = X_ATTRIBUTE2)
3762            OR ((tlinfo.ATTRIBUTE2 IS NULL)
3763                AND (X_ATTRIBUTE2 IS NULL)))
3764       AND ((tlinfo.ATTRIBUTE3 = X_ATTRIBUTE3)
3765            OR ((tlinfo.ATTRIBUTE3 IS NULL)
3766                AND (X_ATTRIBUTE3 IS NULL)))
3767       AND ((tlinfo.ATTRIBUTE4 = X_ATTRIBUTE4)
3768            OR ((tlinfo.ATTRIBUTE4 IS NULL)
3769                AND (X_ATTRIBUTE4 IS NULL)))
3770       AND ((tlinfo.ATTRIBUTE5 = X_ATTRIBUTE5)
3771            OR ((tlinfo.ATTRIBUTE5 IS NULL)
3772                AND (X_ATTRIBUTE5 IS NULL)))
3773       AND ((tlinfo.ATTRIBUTE6 = X_ATTRIBUTE6)
3774            OR ((tlinfo.ATTRIBUTE6 IS NULL)
3775                AND (X_ATTRIBUTE6 IS NULL)))
3776       AND ((tlinfo.ATTRIBUTE7 = X_ATTRIBUTE7)
3777            OR ((tlinfo.ATTRIBUTE7 IS NULL)
3778                AND (X_ATTRIBUTE7 IS NULL)))
3779       AND ((tlinfo.ATTRIBUTE8 = X_ATTRIBUTE8)
3780            OR ((tlinfo.ATTRIBUTE8 IS NULL)
3781                AND (X_ATTRIBUTE8 IS NULL)))
3782       AND ((tlinfo.ATTRIBUTE9 = X_ATTRIBUTE9)
3783            OR ((tlinfo.ATTRIBUTE9 IS NULL)
3784                AND (X_ATTRIBUTE9 IS NULL)))
3785       AND ((tlinfo.ATTRIBUTE10 = X_ATTRIBUTE10)
3786            OR ((tlinfo.ATTRIBUTE10 IS NULL)
3787                AND (X_ATTRIBUTE10 IS NULL)))
3788       AND ((tlinfo.ATTRIBUTE11 = X_ATTRIBUTE11)
3789            OR ((tlinfo.ATTRIBUTE11 IS NULL)
3790                AND (X_ATTRIBUTE11 IS NULL)))
3791       AND ((tlinfo.ATTRIBUTE12 = X_ATTRIBUTE12)
3792            OR ((tlinfo.ATTRIBUTE12 IS NULL)
3793                AND (X_ATTRIBUTE12 IS NULL)))
3794       AND ((tlinfo.ATTRIBUTE13 = X_ATTRIBUTE13)
3795            OR ((tlinfo.ATTRIBUTE13 IS NULL)
3796                AND (X_ATTRIBUTE13 IS NULL)))
3797       AND ((tlinfo.ATTRIBUTE14 = X_ATTRIBUTE14)
3798            OR ((tlinfo.ATTRIBUTE14 IS NULL)
3799                AND (X_ATTRIBUTE14 IS NULL)))
3800       AND ((tlinfo.ATTRIBUTE15 = X_ATTRIBUTE15)
3801            OR ((tlinfo.ATTRIBUTE15 IS NULL)
3802                AND (X_ATTRIBUTE15 IS NULL)))
3803       AND ((tlinfo.ATTRIBUTE16 = X_ATTRIBUTE16)
3804            OR ((tlinfo.ATTRIBUTE16 IS NULL)
3805                AND (X_ATTRIBUTE16 IS NULL)))
3806       AND ((tlinfo.ATTRIBUTE17 = X_ATTRIBUTE17)
3807            OR ((tlinfo.ATTRIBUTE17 IS NULL)
3808                AND (X_ATTRIBUTE17 IS NULL)))
3809       AND ((tlinfo.ATTRIBUTE18 = X_ATTRIBUTE18)
3810            OR ((tlinfo.ATTRIBUTE18 IS NULL)
3811                AND (X_ATTRIBUTE18 IS NULL)))
3812       AND ((tlinfo.ATTRIBUTE19 = X_ATTRIBUTE19)
3813            OR ((tlinfo.ATTRIBUTE19 IS NULL)
3814                AND (X_ATTRIBUTE19 IS NULL)))
3815       AND ((tlinfo.ATTRIBUTE20 = X_ATTRIBUTE20)
3816           OR ((tlinfo.ATTRIBUTE20 IS NULL)
3817                AND (X_ATTRIBUTE20 IS NULL)))
3818       AND ((tlinfo.ADMINISTRATIVE_PRIORITY = X_ADMINISTRATIVE_PRIORITY)
3819            OR ((tlinfo.ADMINISTRATIVE_PRIORITY IS NULL)
3820                AND (X_ADMINISTRATIVE_PRIORITY IS NULL)))
3821       AND (( TRUNC(tlinfo.WAITLIST_DT) = TRUNC(X_WAITLIST_DT) )
3822            OR ((tlinfo.WAITLIST_DT IS NULL)
3823                AND (X_WAITLIST_DT IS NULL)))
3824       -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3825       AND   ((tlinfo.wlst_priority_weight_num = X_wlst_priority_weight_num)
3826                OR (( tlinfo.wlst_priority_weight_num IS NULL )
3827                AND (X_WLST_PRIORITY_WEIGHT_NUM IS NULL)))
3828       AND   ((tlinfo.wlst_preference_weight_num = X_wlst_preference_weight_num)
3829                OR (( tlinfo.wlst_preference_weight_num IS NULL )
3830                AND (X_WLST_PREFERENCE_WEIGHT_NUM IS NULL)))
3831       -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3832       AND   ((tlinfo.core_indicator_code = X_core_indicator_code)
3833                OR (( tlinfo.core_indicator_code IS NULL )
3834                AND (X_CORE_INDICATOR_CODE IS NULL)))
3835       AND (tlinfo.UPD_AUDIT_FLAG = X_UPD_AUDIT_FLAG)
3836       AND (tlinfo.SS_SOURCE_IND = X_SS_SOURCE_IND)
3837   ) THEN
3838     NULL;
3839   ELSE
3840     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
3841     IGS_GE_MSG_STACK.ADD;
3842     APP_EXCEPTION.RAISE_EXCEPTION;
3843   END IF;
3844   RETURN;
3845 END LOCK_ROW;
3846 
3847 /*------------------------------------------------------------------------------------------------------------------------------------------
3848    svanukur             28-APR-03          Not allowing the update of uoo_id as it is now part of Pk
3849    --                                      as part of MUS build, # 2829262
3850 ---------------------------------------------------------------------------------------*/
3851 PROCEDURE UPDATE_ROW (
3852   X_ROWID IN  VARCHAR2,
3853   X_PERSON_ID IN NUMBER,
3854   X_COURSE_CD IN VARCHAR2,
3855   X_UNIT_CD IN VARCHAR2,
3856   X_CAL_TYPE IN VARCHAR2,
3857   X_CI_SEQUENCE_NUMBER IN NUMBER,
3858   X_VERSION_NUMBER IN NUMBER,
3859   X_LOCATION_CD IN VARCHAR2,
3860   X_UNIT_CLASS IN VARCHAR2,
3861   X_CI_START_DT IN DATE,
3862   X_CI_END_DT IN DATE,
3863   X_UOO_ID IN NUMBER,
3864   X_ENROLLED_DT IN DATE,
3865   X_UNIT_ATTEMPT_STATUS IN VARCHAR2,
3866   X_ADMINISTRATIVE_UNIT_STATUS IN VARCHAR2,
3867   X_DISCONTINUED_DT IN DATE,
3868   X_RULE_WAIVED_DT IN DATE,
3869   X_RULE_WAIVED_PERSON_ID IN NUMBER,
3870   X_NO_ASSESSMENT_IND IN VARCHAR2,
3871   X_SUP_UNIT_CD IN VARCHAR2,
3872   X_SUP_VERSION_NUMBER IN NUMBER,
3873   X_EXAM_LOCATION_CD IN VARCHAR2,
3874   X_ALTERNATIVE_TITLE IN VARCHAR2,
3875   X_OVERRIDE_ENROLLED_CP IN NUMBER,
3876   X_OVERRIDE_EFTSU IN NUMBER,
3877   X_OVERRIDE_ACHIEVABLE_CP IN NUMBER,
3878   X_OVERRIDE_OUTCOME_DUE_DT IN DATE,
3879   X_OVERRIDE_CREDIT_REASON IN VARCHAR2,
3880   X_ADMINISTRATIVE_PRIORITY IN NUMBER,
3881   X_WAITLIST_DT IN DATE,
3882   x_dcnt_reason_cd IN VARCHAR2,
3883   X_MODE IN VARCHAR2 ,
3884   X_GS_VERSION_NUMBER IN NUMBER  ,
3885   X_ENR_METHOD_TYPE   IN VARCHAR2,
3886   X_FAILED_UNIT_RULE  IN VARCHAR2,
3887   X_CART              IN VARCHAR2,
3888   X_RSV_SEAT_EXT_ID   IN NUMBER  ,
3889   X_ORG_UNIT_CD          IN VARCHAR2 ,
3890   X_GRADING_SCHEMA_CODE  IN VARCHAR2 ,
3891   x_subtitle             IN VARCHAR2 ,
3892   -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
3893   x_session_id           IN NUMBER ,
3894   x_deg_aud_detail_id   IN NUMBER ,
3895   x_student_career_transcript IN VARCHAR2 ,
3896   x_student_career_statistics IN VARCHAR2 ,
3897   x_waitlist_manual_ind  IN VARCHAR2,--Bug ID: 2554109  added by adhawan
3898   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
3899   X_ATTRIBUTE1 IN VARCHAR2 ,
3900   X_ATTRIBUTE2 IN VARCHAR2 ,
3901   X_ATTRIBUTE3 IN VARCHAR2 ,
3902   X_ATTRIBUTE4 IN VARCHAR2 ,
3903   X_ATTRIBUTE5 IN VARCHAR2 ,
3904   X_ATTRIBUTE6 IN VARCHAR2 ,
3905   X_ATTRIBUTE7 IN VARCHAR2 ,
3906   X_ATTRIBUTE8 IN VARCHAR2 ,
3907   X_ATTRIBUTE9 IN VARCHAR2 ,
3908   X_ATTRIBUTE10 IN VARCHAR2 ,
3909   X_ATTRIBUTE11 IN VARCHAR2 ,
3910   X_ATTRIBUTE12 IN VARCHAR2 ,
3911   X_ATTRIBUTE13 IN VARCHAR2 ,
3912   X_ATTRIBUTE14 IN VARCHAR2 ,
3913   X_ATTRIBUTE15 IN VARCHAR2 ,
3914   X_ATTRIBUTE16 IN VARCHAR2 ,
3915   X_ATTRIBUTE17 IN VARCHAR2 ,
3916   X_ATTRIBUTE18 IN VARCHAR2 ,
3917   X_ATTRIBUTE19 IN VARCHAR2 ,
3918   x_ATTRIBUTE20 IN VARCHAR2 ,
3919   -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
3920   X_WLST_PRIORITY_WEIGHT_NUM IN NUMBER ,
3921   X_WLST_PREFERENCE_WEIGHT_NUM IN NUMBER ,
3922   -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
3923   X_CORE_INDICATOR_CODE IN VARCHAR2,
3924   X_UPD_AUDIT_FLAG      IN VARCHAR2 ,
3925   X_SS_SOURCE_IND       IN VARCHAR2
3926   ) AS
3927     X_LAST_UPDATE_DATE DATE;
3928     X_LAST_UPDATED_BY NUMBER;
3929     X_LAST_UPDATE_LOGIN NUMBER;
3930     X_REQUEST_ID NUMBER;
3931     X_PROGRAM_ID NUMBER;
3932     X_PROGRAM_APPLICATION_ID NUMBER;
3933     X_PROGRAM_UPDATE_DATE DATE;
3934 
3935     resource_busy  EXCEPTION;
3936     PRAGMA EXCEPTION_INIT(resource_busy,-00054);
3937 
3938 BEGIN
3939   X_LAST_UPDATE_DATE := SYSDATE;
3940   IF(X_MODE = 'I') THEN
3941     X_LAST_UPDATED_BY := 1;
3942     X_LAST_UPDATE_LOGIN := 0;
3943   ELSIF (X_MODE IN ('R', 'S')) THEN
3944     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
3945     IF X_LAST_UPDATED_BY IS NULL THEN
3946       X_LAST_UPDATED_BY := -1;
3947     END IF;
3948     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
3949     IF X_LAST_UPDATE_LOGIN IS NULL THEN
3950       X_LAST_UPDATE_LOGIN := -1;
3951     END IF;
3952   ELSE
3953     FND_MESSAGE.SET_NAME('FND', 'SYSTEM-INVALID ARGS');
3954     IGS_GE_MSG_STACK.ADD;
3955     APP_EXCEPTION.RAISE_EXCEPTION;
3956   END IF;
3957 
3958 Before_DML(
3959     p_action=>'UPDATE',
3960     x_rowid=>X_ROWID,
3961     x_administrative_unit_status=>X_ADMINISTRATIVE_UNIT_STATUS,
3962     x_alternative_title=>X_ALTERNATIVE_TITLE,
3963     x_cal_type=>X_CAL_TYPE,
3964     x_ci_end_dt=>X_CI_END_DT,
3965     x_ci_sequence_number=>X_CI_SEQUENCE_NUMBER,
3966     x_ci_start_dt=>X_CI_START_DT,
3967     x_course_cd=>X_COURSE_CD,
3968     x_discontinued_dt=>X_DISCONTINUED_DT,
3969     x_enrolled_dt=>X_ENROLLED_DT,
3970     x_exam_location_cd=>X_EXAM_LOCATION_CD,
3971     x_location_cd=>X_LOCATION_CD,
3972     x_no_assessment_ind=>NVL(X_NO_ASSESSMENT_IND,'N'),
3973     x_override_achievable_cp=>X_OVERRIDE_ACHIEVABLE_CP,
3974     x_override_credit_reason=>X_OVERRIDE_CREDIT_REASON,
3975     x_override_eftsu=>X_OVERRIDE_EFTSU,
3976     x_override_enrolled_cp=>X_OVERRIDE_ENROLLED_CP,
3977     x_override_outcome_due_dt=>X_OVERRIDE_OUTCOME_DUE_DT,
3978     x_person_id=>X_PERSON_ID,
3979     x_rule_waived_dt=>X_RULE_WAIVED_DT,
3980     x_rule_waived_person_id=>X_RULE_WAIVED_PERSON_ID,
3981     x_sup_unit_cd=>X_SUP_UNIT_CD,
3982     x_sup_version_number=>X_SUP_VERSION_NUMBER,
3983     x_unit_attempt_status=>X_UNIT_ATTEMPT_STATUS,
3984     x_unit_cd=>X_UNIT_CD,
3985     x_unit_class=>X_UNIT_CLASS,
3986     x_uoo_id=>X_UOO_ID,
3987     x_version_number=>X_VERSION_NUMBER,
3988     x_administrative_priority=>X_ADMINISTRATIVE_PRIORITY,
3989     x_waitlist_dt=>X_WAITLIST_DT,
3990     x_dcnt_reason_cd => x_dcnt_reason_cd,
3991     x_creation_date=>X_LAST_UPDATE_DATE,
3992     x_created_by=>X_LAST_UPDATED_BY,
3993     x_last_update_date=>X_LAST_UPDATE_DATE,
3994     x_last_updated_by=>X_LAST_UPDATED_BY,
3995     x_last_update_login=>X_LAST_UPDATE_LOGIN,
3996     x_gs_version_number=>X_GS_VERSION_NUMBER,
3997     x_enr_method_type=>X_ENR_METHOD_TYPE,
3998     x_failed_unit_rule=>X_FAILED_UNIT_RULE,
3999     x_cart            => X_CART,
4000     x_rsv_seat_ext_id => X_RSV_SEAT_EXT_ID,
4001     x_org_unit_cd => X_ORG_UNIT_CD   ,
4002     x_grading_schema_code => X_GRADING_SCHEMA_CODE ,
4003     x_subtitle            => x_subtitle,
4004     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4005     x_session_id          => x_session_id,
4006     x_deg_aud_detail_id   => x_deg_aud_detail_id,
4007     x_student_career_transcript   =>  x_student_career_transcript,
4008     x_student_career_statistics    =>  x_student_career_statistics,
4009     x_waitlist_manual_ind => x_waitlist_manual_ind,--Bug ID: 2554109  added by adhawan
4010     x_attribute_category=>X_ATTRIBUTE_CATEGORY,
4011     x_attribute1=>X_ATTRIBUTE1,
4012     x_attribute2=>X_ATTRIBUTE2,
4013     x_attribute3=>X_ATTRIBUTE3,
4014     x_attribute4=>X_ATTRIBUTE4,
4015     x_attribute5=>X_ATTRIBUTE5,
4016     x_attribute6=>X_ATTRIBUTE6,
4017     x_attribute7=>X_ATTRIBUTE7,
4018     x_attribute8=>X_ATTRIBUTE8,
4019     x_attribute9=>X_ATTRIBUTE9,
4020     x_attribute10=>X_ATTRIBUTE10,
4021     x_attribute11=>X_ATTRIBUTE11,
4022     x_attribute12=>X_ATTRIBUTE12,
4023     x_attribute13=>X_ATTRIBUTE13,
4024     x_attribute14=>X_ATTRIBUTE14,
4025     x_attribute15=>X_ATTRIBUTE15,
4026     x_attribute16=>X_ATTRIBUTE16,
4027     x_attribute17=>X_ATTRIBUTE17,
4028     x_attribute18=>X_ATTRIBUTE18,
4029     x_attribute19=>X_ATTRIBUTE19,
4030     x_attribute20=>X_ATTRIBUTE20,
4031     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4032     x_wlst_priority_weight_num=>X_WLST_PRIORITY_WEIGHT_NUM,
4033     x_wlst_preference_weight_num=>X_WLST_PREFERENCE_WEIGHT_NUM,
4034     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
4035     x_core_indicator_code=>X_CORE_INDICATOR_CODE,
4036     X_UPD_AUDIT_FLAG => X_UPD_AUDIT_FLAG,
4037     X_SS_SOURCE_IND  => X_SS_SOURCE_IND
4038     );
4039  IF (X_MODE IN ('R', 'S')) THEN
4040    X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4041    X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4042    X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4043   IF (X_REQUEST_ID = -1) THEN
4044      X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
4045      X_PROGRAM_ID := OLD_REFERENCES. PROGRAM_ID;
4046      X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
4047      X_PROGRAM_UPDATE_DATE := OLD_REFERENCES.PROGRAM_UPDATE_DATE;
4048  ELSE
4049      X_PROGRAM_UPDATE_DATE := SYSDATE;
4050  END IF;
4051 --Before_DML(
4052 --
4053 END IF;
4054 
4055   IF (x_mode = 'S') THEN
4056     igs_sc_gen_001.set_ctx('R');
4057   END IF;
4058   UPDATE IGS_EN_SU_ATTEMPT_ALL SET
4059     VERSION_NUMBER = NEW_REFERENCES.VERSION_NUMBER,
4060     LOCATION_CD = NEW_REFERENCES.LOCATION_CD,
4061     UNIT_CLASS = NEW_REFERENCES.UNIT_CLASS,
4062     CI_START_DT = NEW_REFERENCES.CI_START_DT,
4063     CI_END_DT = NEW_REFERENCES.CI_END_DT,
4064     ENROLLED_DT = NEW_REFERENCES.ENROLLED_DT,
4065     UNIT_ATTEMPT_STATUS = NEW_REFERENCES.UNIT_ATTEMPT_STATUS,
4066     ADMINISTRATIVE_UNIT_STATUS = NEW_REFERENCES.ADMINISTRATIVE_UNIT_STATUS,
4067     DISCONTINUED_DT = NEW_REFERENCES.DISCONTINUED_DT,
4068     RULE_WAIVED_DT = TRUNC(NEW_REFERENCES.RULE_WAIVED_DT),
4069     RULE_WAIVED_PERSON_ID = NEW_REFERENCES.RULE_WAIVED_PERSON_ID,
4070     NO_ASSESSMENT_IND = NEW_REFERENCES.NO_ASSESSMENT_IND,
4071     SUP_UNIT_CD = NEW_REFERENCES.SUP_UNIT_CD,
4072     SUP_VERSION_NUMBER = NEW_REFERENCES.SUP_VERSION_NUMBER,
4073     EXAM_LOCATION_CD = NEW_REFERENCES.EXAM_LOCATION_CD,
4074     ALTERNATIVE_TITLE = NEW_REFERENCES.ALTERNATIVE_TITLE,
4075     OVERRIDE_ENROLLED_CP = NEW_REFERENCES.OVERRIDE_ENROLLED_CP,
4076     OVERRIDE_EFTSU = NEW_REFERENCES.OVERRIDE_EFTSU,
4077     OVERRIDE_ACHIEVABLE_CP = NEW_REFERENCES.OVERRIDE_ACHIEVABLE_CP,
4078     OVERRIDE_OUTCOME_DUE_DT = NEW_REFERENCES.OVERRIDE_OUTCOME_DUE_DT,
4079     OVERRIDE_CREDIT_REASON = NEW_REFERENCES.OVERRIDE_CREDIT_REASON,
4080     ADMINISTRATIVE_PRIORITY = NEW_REFERENCES.ADMINISTRATIVE_PRIORITY,
4081     WAITLIST_DT = NEW_REFERENCES.WAITLIST_DT,
4082     DCNT_REASON_CD = new_references.DCNT_REASON_CD,
4083     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
4084     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
4085     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
4086     REQUEST_ID = X_REQUEST_ID,
4087     PROGRAM_ID = X_PROGRAM_ID,
4088     PROGRAM_APPLICATION_ID = X_PROGRAM_APPLICATION_ID,
4089     PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE,
4090     GS_VERSION_NUMBER   = NEW_REFERENCES.GS_VERSION_NUMBER,
4091     ENR_METHOD_TYPE     = NEW_REFERENCES.ENR_METHOD_TYPE  ,
4092     FAILED_UNIT_RULE    = NEW_REFERENCES.FAILED_UNIT_RULE ,
4093     CART                = NEW_REFERENCES.CART             ,
4094     RSV_SEAT_EXT_ID     = NEW_REFERENCES.RSV_SEAT_EXT_ID,
4095     ORG_UNIT_CD         = NEW_REFERENCES.ORG_UNIT_CD           ,
4096     GRADING_SCHEMA_CODE = NEW_REFERENCES.GRADING_SCHEMA_CODE,
4097     subtitle            = new_references.subtitle,
4098     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4099     session_id          = new_references.session_id,
4100     deg_aud_detail_id   = new_references.deg_aud_detail_id  ,
4101     student_career_transcript = new_references.student_career_transcript,
4102     student_career_statistics =  new_references.student_career_statistics,
4103     waitlist_manual_ind =  new_references.waitlist_manual_ind,--Bug ID: 2554109  added by adhawan
4104     ATTRIBUTE_CATEGORY =  NEW_REFERENCES.ATTRIBUTE_CATEGORY,
4105     ATTRIBUTE1 =  NEW_REFERENCES.ATTRIBUTE1,
4106     ATTRIBUTE2 =  NEW_REFERENCES.ATTRIBUTE2,
4107     ATTRIBUTE3 =  NEW_REFERENCES.ATTRIBUTE3,
4108     ATTRIBUTE4 =  NEW_REFERENCES.ATTRIBUTE4,
4109     ATTRIBUTE5 =  NEW_REFERENCES.ATTRIBUTE5,
4110     ATTRIBUTE6 =  NEW_REFERENCES.ATTRIBUTE6,
4111     ATTRIBUTE7 =  NEW_REFERENCES.ATTRIBUTE7,
4112     ATTRIBUTE8 =  NEW_REFERENCES.ATTRIBUTE8,
4113     ATTRIBUTE9 =  NEW_REFERENCES.ATTRIBUTE9,
4114     ATTRIBUTE10 =  NEW_REFERENCES.ATTRIBUTE10,
4115     ATTRIBUTE11 =  NEW_REFERENCES.ATTRIBUTE11,
4116     ATTRIBUTE12 =  NEW_REFERENCES.ATTRIBUTE12,
4117     ATTRIBUTE13 =  NEW_REFERENCES.ATTRIBUTE13,
4118     ATTRIBUTE14 =  NEW_REFERENCES.ATTRIBUTE14,
4119     ATTRIBUTE15 =  NEW_REFERENCES.ATTRIBUTE15,
4120     ATTRIBUTE16 =  NEW_REFERENCES.ATTRIBUTE16,
4121     ATTRIBUTE17 =  NEW_REFERENCES.ATTRIBUTE17,
4122     ATTRIBUTE18 =  NEW_REFERENCES.ATTRIBUTE18,
4123     ATTRIBUTE19 =  NEW_REFERENCES.ATTRIBUTE19,
4124     ATTRIBUTE20 =  NEW_REFERENCES.ATTRIBUTE20,
4125     -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4126     WLST_PRIORITY_WEIGHT_NUM = NEW_REFERENCES.WLST_PRIORITY_WEIGHT_NUM,
4127     WLST_PREFERENCE_WEIGHT_NUM = NEW_REFERENCES.WLST_PREFERENCE_WEIGHT_NUM,
4128     -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
4129     CORE_INDICATOR_CODE = NEW_REFERENCES.CORE_INDICATOR_CODE,
4130     UPD_AUDIT_FLAG      = NEW_REFERENCES.UPD_AUDIT_FLAG ,
4131     SS_SOURCE_IND       = NEW_REFERENCES. SS_SOURCE_IND
4132   WHERE ROWID = X_ROWID;
4133   IF (SQL%NOTFOUND) THEN
4134      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
4135      igs_ge_msg_stack.add;
4136      igs_sc_gen_001.unset_ctx('R');
4137      app_exception.raise_exception;
4138  END IF;
4139  IF (x_mode = 'S') THEN
4140     igs_sc_gen_001.unset_ctx('R');
4141   END IF;
4142 
4143 --
4144 After_DML(
4145   p_action => 'UPDATE',
4146   x_rowid => X_ROWID
4147   );
4148 --
4149 EXCEPTION
4150   WHEN resource_busy THEN
4151     fnd_message.set_name('FND', 'FND_LOCK_RECORD_ERROR');
4152     IGS_GE_MSG_STACK.ADD;
4153     APP_EXCEPTION.RAISE_EXCEPTION;
4154 
4155   WHEN OTHERS THEN
4156     IF (SQLCODE = (-28115)) THEN
4157       fnd_message.set_name ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
4158       fnd_message.set_token ('ERR_CD', SQLCODE);
4159       igs_ge_msg_stack.add;
4160       igs_sc_gen_001.unset_ctx('R');
4161       app_exception.raise_exception;
4162     ELSE
4163       igs_sc_gen_001.unset_ctx('R');
4164       RAISE;
4165     END IF;
4166 
4167 END UPDATE_ROW;
4168 PROCEDURE ADD_ROW (
4169   X_ROWID IN OUT NOCOPY VARCHAR2,
4170   X_PERSON_ID IN NUMBER,
4171   X_COURSE_CD IN VARCHAR2,
4172   X_UNIT_CD IN VARCHAR2,
4173   X_CAL_TYPE IN VARCHAR2,
4174   X_CI_SEQUENCE_NUMBER IN NUMBER,
4175   X_VERSION_NUMBER IN NUMBER,
4176   X_LOCATION_CD IN VARCHAR2,
4177   X_UNIT_CLASS IN VARCHAR2,
4178   X_CI_START_DT IN DATE,
4179   X_CI_END_DT IN DATE,
4180   X_UOO_ID IN NUMBER,
4181   X_ENROLLED_DT IN DATE,
4182   X_UNIT_ATTEMPT_STATUS IN VARCHAR2,
4183   X_ADMINISTRATIVE_UNIT_STATUS IN VARCHAR2,
4184   X_DISCONTINUED_DT IN DATE,
4185   X_RULE_WAIVED_DT IN DATE,
4186   X_RULE_WAIVED_PERSON_ID IN NUMBER,
4187   X_NO_ASSESSMENT_IND IN VARCHAR2,
4188   X_SUP_UNIT_CD IN VARCHAR2,
4189   X_SUP_VERSION_NUMBER IN NUMBER,
4190   X_EXAM_LOCATION_CD IN VARCHAR2,
4191   X_ALTERNATIVE_TITLE IN VARCHAR2,
4192   X_OVERRIDE_ENROLLED_CP IN NUMBER,
4193   X_OVERRIDE_EFTSU IN NUMBER,
4194   X_OVERRIDE_ACHIEVABLE_CP IN NUMBER,
4195   X_OVERRIDE_OUTCOME_DUE_DT IN DATE,
4196   X_OVERRIDE_CREDIT_REASON IN VARCHAR2,
4197   X_ADMINISTRATIVE_PRIORITY IN NUMBER,
4198   X_WAITLIST_DT IN DATE,
4199   x_dcnt_reason_cd IN VARCHAR2,
4200   X_MODE IN VARCHAR2 ,
4201   x_org_id IN NUMBER,
4202   X_GS_VERSION_NUMBER IN NUMBER   ,
4203   X_ENR_METHOD_TYPE   IN VARCHAR2 ,
4204   X_FAILED_UNIT_RULE  IN VARCHAR2 ,
4205   X_CART              IN VARCHAR2 ,
4206   X_RSV_SEAT_EXT_ID   IN NUMBER   ,
4207   X_ORG_UNIT_CD  IN VARCHAR2 ,
4208   X_GRADING_SCHEMA_CODE IN VARCHAR2 ,
4209   x_subtitle            IN VARCHAR2 ,
4210   -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4211   x_session_id          IN NUMBER   ,
4212   X_deg_aud_detail_id   IN NUMBER   ,
4213   x_student_career_transcript IN VARCHAR2 ,
4214   x_student_career_statistics IN VARCHAR2 ,
4215   x_waitlist_manual_ind  IN VARCHAR2,--Bug ID: 2554109  added by adhawan
4216   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
4217   X_ATTRIBUTE1 IN VARCHAR2 ,
4218   X_ATTRIBUTE2 IN VARCHAR2 ,
4219   X_ATTRIBUTE3 IN VARCHAR2 ,
4220   X_ATTRIBUTE4 IN VARCHAR2 ,
4221   X_ATTRIBUTE5 IN VARCHAR2 ,
4222   X_ATTRIBUTE6 IN VARCHAR2 ,
4223   X_ATTRIBUTE7 IN VARCHAR2 ,
4224   X_ATTRIBUTE8 IN VARCHAR2 ,
4225   X_ATTRIBUTE9 IN VARCHAR2 ,
4226   X_ATTRIBUTE10 IN VARCHAR2 ,
4227   X_ATTRIBUTE11 IN VARCHAR2 ,
4228   X_ATTRIBUTE12 IN VARCHAR2 ,
4229   X_ATTRIBUTE13 IN VARCHAR2 ,
4230   X_ATTRIBUTE14 IN VARCHAR2 ,
4231   X_ATTRIBUTE15 IN VARCHAR2 ,
4232   X_ATTRIBUTE16 IN VARCHAR2 ,
4233   X_ATTRIBUTE17 IN VARCHAR2 ,
4234   X_ATTRIBUTE18 IN VARCHAR2 ,
4235   X_ATTRIBUTE19 IN VARCHAR2 ,
4236   x_ATTRIBUTE20 IN VARCHAR2 ,
4237   -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4238   X_WLST_PRIORITY_WEIGHT_NUM IN NUMBER ,
4239   X_WLST_PREFERENCE_WEIGHT_NUM IN NUMBER ,
4240   -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
4241   X_CORE_INDICATOR_CODE IN VARCHAR2,
4242   X_UPD_AUDIT_FLAG      IN VARCHAR2 ,
4243   X_SS_SOURCE_IND       IN VARCHAR2
4244   ) AS
4245   CURSOR c1 IS SELECT ROWID FROM IGS_EN_SU_ATTEMPT_ALL
4246      WHERE PERSON_ID = X_PERSON_ID
4247      AND COURSE_CD = X_COURSE_CD
4248      AND UOO_ID = X_UOO_ID
4249 
4250   ;
4251 BEGIN
4252   OPEN c1;
4253   FETCH c1 INTO X_ROWID;
4254   IF (c1%NOTFOUND) THEN
4255     CLOSE c1;
4256     INSERT_ROW (
4257      X_ROWID,
4258      X_PERSON_ID,
4259      X_COURSE_CD,
4260      X_UNIT_CD,
4261      X_CAL_TYPE,
4262      X_CI_SEQUENCE_NUMBER,
4263      X_VERSION_NUMBER,
4264      X_LOCATION_CD,
4265      X_UNIT_CLASS,
4266      X_CI_START_DT,
4267      X_CI_END_DT,
4268      X_UOO_ID,
4269      X_ENROLLED_DT,
4270      X_UNIT_ATTEMPT_STATUS,
4271      X_ADMINISTRATIVE_UNIT_STATUS,
4272      X_DISCONTINUED_DT,
4273      X_RULE_WAIVED_DT,
4274      X_RULE_WAIVED_PERSON_ID,
4275      X_NO_ASSESSMENT_IND,
4276      X_SUP_UNIT_CD,
4277      X_SUP_VERSION_NUMBER,
4278      X_EXAM_LOCATION_CD,
4279      X_ALTERNATIVE_TITLE,
4280      X_OVERRIDE_ENROLLED_CP,
4281      X_OVERRIDE_EFTSU,
4282      X_OVERRIDE_ACHIEVABLE_CP,
4283      X_OVERRIDE_OUTCOME_DUE_DT,
4284      X_OVERRIDE_CREDIT_REASON,
4285      X_ADMINISTRATIVE_PRIORITY,
4286      X_WAITLIST_DT,
4287      X_DCNT_REASON_CD,
4288      X_MODE,
4289      x_org_id ,
4290      X_GS_VERSION_NUMBER  ,
4291      X_ENR_METHOD_TYPE    ,
4292      X_FAILED_UNIT_RULE   ,
4293      X_CART               ,
4294      X_RSV_SEAT_EXT_ID ,
4295      X_ORG_UNIT_CD    ,
4296      X_GRADING_SCHEMA_CODE ,
4297      X_subtitle,
4298     -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4299      x_session_id,
4300      X_deg_aud_detail_id  ,
4301      x_student_career_transcript,
4302      x_student_career_statistics,
4303      X_waitlist_manual_ind,--Bug ID: 2554109  added by adhawan
4304      X_ATTRIBUTE_CATEGORY,
4305      X_ATTRIBUTE1,
4306      X_ATTRIBUTE2,
4307      X_ATTRIBUTE3,
4308      X_ATTRIBUTE4,
4309      X_ATTRIBUTE5,
4310      X_ATTRIBUTE6,
4311      X_ATTRIBUTE7,
4312      X_ATTRIBUTE8,
4313      X_ATTRIBUTE9,
4314      X_ATTRIBUTE10,
4315      X_ATTRIBUTE11,
4316      X_ATTRIBUTE12,
4317      X_ATTRIBUTE13,
4318      X_ATTRIBUTE14,
4319      X_ATTRIBUTE15,
4320      X_ATTRIBUTE16,
4321      X_ATTRIBUTE17,
4322      X_ATTRIBUTE18,
4323      X_ATTRIBUTE19,
4324      X_ATTRIBUTE20,
4325      -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4326      X_WLST_PRIORITY_WEIGHT_NUM,
4327      X_WLST_PREFERENCE_WEIGHT_NUM,
4328      -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
4329      X_CORE_INDICATOR_CODE,
4330      X_UPD_AUDIT_FLAG,
4331      X_SS_SOURCE_IND
4332   );
4333     RETURN;
4334   END IF;
4335   CLOSE c1;
4336   UPDATE_ROW (
4337    X_ROWID,
4338    X_PERSON_ID,
4339    X_COURSE_CD,
4340    X_UNIT_CD,
4341    X_CAL_TYPE,
4342    X_CI_SEQUENCE_NUMBER,
4343    X_VERSION_NUMBER,
4344    X_LOCATION_CD,
4345    X_UNIT_CLASS,
4346    X_CI_START_DT,
4347    X_CI_END_DT,
4348    X_UOO_ID,
4349    X_ENROLLED_DT,
4350    X_UNIT_ATTEMPT_STATUS,
4351    X_ADMINISTRATIVE_UNIT_STATUS,
4352    X_DISCONTINUED_DT,
4353    X_RULE_WAIVED_DT,
4354    X_RULE_WAIVED_PERSON_ID,
4355    X_NO_ASSESSMENT_IND,
4356    X_SUP_UNIT_CD,
4357    X_SUP_VERSION_NUMBER,
4358    X_EXAM_LOCATION_CD,
4359    X_ALTERNATIVE_TITLE,
4360    X_OVERRIDE_ENROLLED_CP,
4361    X_OVERRIDE_EFTSU,
4362    X_OVERRIDE_ACHIEVABLE_CP,
4363    X_OVERRIDE_OUTCOME_DUE_DT,
4364    X_OVERRIDE_CREDIT_REASON,
4365    X_ADMINISTRATIVE_PRIORITY,
4366    X_WAITLIST_DT,
4367    X_DCNT_REASON_CD,
4368    X_MODE,
4369    X_GS_VERSION_NUMBER,
4370    X_ENR_METHOD_TYPE,
4371    X_FAILED_UNIT_RULE,
4372    X_CART               ,
4373    X_RSV_SEAT_EXT_ID ,
4374    X_ORG_UNIT_CD,
4375    X_GRADING_SCHEMA_CODE ,
4376    X_subtitle,
4377    -- session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4378    x_session_id,
4379    X_deg_aud_detail_id  ,
4380    x_student_career_transcript,
4381    x_student_career_statistics,
4382    X_waitlist_manual_ind,--Bug ID: 2554109  added by adhawan
4383    X_ATTRIBUTE_CATEGORY,
4384    X_ATTRIBUTE1,
4385    X_ATTRIBUTE2,
4386    X_ATTRIBUTE3,
4387    X_ATTRIBUTE4,
4388    X_ATTRIBUTE5,
4389    X_ATTRIBUTE6,
4390    X_ATTRIBUTE7,
4391    X_ATTRIBUTE8,
4392    X_ATTRIBUTE9,
4393    X_ATTRIBUTE10,
4394    X_ATTRIBUTE11,
4395    X_ATTRIBUTE12,
4396    X_ATTRIBUTE13,
4397    X_ATTRIBUTE14,
4398    X_ATTRIBUTE15,
4399    X_ATTRIBUTE16,
4400    X_ATTRIBUTE17,
4401    X_ATTRIBUTE18,
4402    X_ATTRIBUTE19,
4403    X_ATTRIBUTE20,
4404    -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4405    X_WLST_PRIORITY_WEIGHT_NUM,
4406    X_WLST_PREFERENCE_WEIGHT_NUM,
4407    -- CORE_INDICATOR_CODE added by ptandon 30-SEP-2003. Enh Bug# 3052432
4408    X_CORE_INDICATOR_CODE,
4409    X_UPD_AUDIT_FLAG,
4410    X_SS_SOURCE_IND
4411   );
4412 END ADD_ROW;
4413 PROCEDURE DELETE_ROW (
4414   X_ROWID IN VARCHAR2,
4415   x_mode IN VARCHAR2) AS
4416 
4417     /* Cursor to get the unit attempt attempts attributes, bug 3000742*/
4418     CURSOR cur_sua (cp_rowid VARCHAR2) IS
4419     SELECT *
4420     FROM igs_en_su_attempt
4421     WHERE row_id = cp_rowid;
4422 
4423     /* Cursor to check whether the unit attempt status before adding to cart is DROPPED, bug 3000742*/
4424     CURSOR cur_sua_hist (cp_person_id NUMBER,cp_course_cd VARCHAR2, cp_uoo_id NUMBER) IS
4425     SELECT unit_attempt_status
4426     FROM igs_en_su_attempt_h
4427     WHERE person_id = cp_person_id
4428     AND   course_cd = cp_course_cd
4429     AND   uoo_id = cp_uoo_id
4430     ORDER BY hist_end_dt DESC;
4431 
4432     l_cur_sua_rec cur_sua%ROWTYPE;
4433     l_sua_status igs_en_su_attempt.unit_attempt_status%TYPE;
4434 
4435 BEGIN
4436 
4437 OPEN cur_sua(X_ROWID);
4438 FETCH cur_sua INTO l_cur_sua_rec;
4439 CLOSE cur_sua;
4440 --
4441   OPEN cur_sua_hist(l_cur_sua_rec.person_id,l_cur_sua_rec.course_cd,l_cur_sua_rec.uoo_id );
4442   FETCH cur_sua_hist INTO l_sua_status;
4443   CLOSE cur_sua_hist;
4444   --
4445   -- If the unit attempt status before adding to cart was DROPPED then while cleaning the cart move back the unit
4446   -- to DROPPED status.
4447   --
4448   IF l_sua_status='DROPPED' THEN
4449       igs_en_sua_api.update_unit_attempt(
4450              X_ROWID                          => X_ROWID,
4451              X_PERSON_ID                      => l_cur_sua_rec.PERSON_ID,
4452              X_COURSE_CD                      => l_cur_sua_rec.COURSE_CD ,
4453              X_UNIT_CD                        => l_cur_sua_rec.UNIT_CD,
4454              X_CAL_TYPE                       => l_cur_sua_rec.CAL_TYPE,
4455              X_CI_SEQUENCE_NUMBER             => l_cur_sua_rec.CI_SEQUENCE_NUMBER ,
4456              X_VERSION_NUMBER                 => l_cur_sua_rec.version_number ,
4457              X_LOCATION_CD                    => l_cur_sua_rec.location_cd,
4458              X_UNIT_CLASS                     => l_cur_sua_rec.unit_class,
4459              X_CI_START_DT                    => l_cur_sua_rec.CI_START_DT,
4460              X_CI_END_DT                      => l_cur_sua_rec.CI_END_DT,
4461              X_UOO_ID                         => l_cur_sua_rec.uoo_id,
4462              X_ENROLLED_DT                    => l_cur_sua_rec.ENROLLED_DT,
4463              X_UNIT_ATTEMPT_STATUS            => 'DROPPED',
4464              X_ADMINISTRATIVE_UNIT_STATUS     => l_cur_sua_rec.administrative_unit_status,
4465              X_ADMINISTRATIVE_PRIORITY        => l_cur_sua_rec.administrative_priority,
4466              X_DISCONTINUED_DT                => nvl(l_cur_sua_rec.discontinued_dt,SYSDATE),
4467              X_DCNT_REASON_CD                 => l_cur_sua_rec.DCNT_REASON_CD ,
4468              X_RULE_WAIVED_DT                 => l_cur_sua_rec.RULE_WAIVED_DT ,
4469              X_RULE_WAIVED_PERSON_ID          => l_cur_sua_rec.RULE_WAIVED_PERSON_ID ,
4470              X_NO_ASSESSMENT_IND              => l_cur_sua_rec.NO_ASSESSMENT_IND,
4471              X_SUP_UNIT_CD                    => l_cur_sua_rec.SUP_UNIT_CD ,
4472              X_SUP_VERSION_NUMBER             => l_cur_sua_rec.SUP_VERSION_NUMBER,
4473              X_EXAM_LOCATION_CD               => l_cur_sua_rec.EXAM_LOCATION_CD,
4474              X_ALTERNATIVE_TITLE              => l_cur_sua_rec.ALTERNATIVE_TITLE ,
4475              X_OVERRIDE_ENROLLED_CP           => l_cur_sua_rec.OVERRIDE_ENROLLED_CP,
4476              X_OVERRIDE_EFTSU                 => l_cur_sua_rec.OVERRIDE_EFTSU ,
4477              X_OVERRIDE_ACHIEVABLE_CP         => l_cur_sua_rec.OVERRIDE_ACHIEVABLE_CP,
4478              X_OVERRIDE_OUTCOME_DUE_DT        => l_cur_sua_rec.OVERRIDE_OUTCOME_DUE_DT,
4479              X_OVERRIDE_CREDIT_REASON         => l_cur_sua_rec.OVERRIDE_CREDIT_REASON,
4480              X_WAITLIST_DT                    => l_cur_sua_rec.waitlist_dt,
4481              X_MODE                           =>  'R' ,
4482              X_GS_VERSION_NUMBER              => l_cur_sua_rec.gs_version_number,
4483              X_ENR_METHOD_TYPE                => l_cur_sua_rec.enr_method_type,
4484              X_FAILED_UNIT_RULE               => l_cur_sua_rec.failed_unit_rule ,
4485              X_CART                           => l_cur_sua_rec.cart ,
4486              X_RSV_SEAT_EXT_ID                => l_cur_sua_rec.rsv_seat_ext_id,
4487              X_ORG_UNIT_CD                    => l_cur_sua_rec.org_unit_cd,
4488              X_SESSION_ID                     => l_cur_sua_rec.session_id,
4489              X_GRADING_SCHEMA_CODE            => l_cur_sua_rec.grading_schema_code,
4490              X_DEG_AUD_DETAIL_ID              => l_cur_sua_rec.deg_aud_detail_id,
4491              X_SUBTITLE                       => l_cur_sua_rec.subtitle,
4492              X_STUDENT_CAREER_TRANSCRIPT      => l_cur_sua_rec.student_career_transcript ,
4493              X_STUDENT_CAREER_STATISTICS      => l_cur_sua_rec.student_career_statistics,
4494              X_ATTRIBUTE_CATEGORY             => l_cur_sua_rec.attribute_category,
4495              X_ATTRIBUTE1                     => l_cur_sua_rec.attribute1,
4496              X_ATTRIBUTE2                     => l_cur_sua_rec.attribute2,
4497              X_ATTRIBUTE3                     => l_cur_sua_rec.attribute3,
4498              X_ATTRIBUTE4                     => l_cur_sua_rec.attribute4,
4499              X_ATTRIBUTE5                     => l_cur_sua_rec.attribute5,
4500              X_ATTRIBUTE6                     => l_cur_sua_rec.attribute6,
4501              X_ATTRIBUTE7                     => l_cur_sua_rec.attribute7,
4502              X_ATTRIBUTE8                     => l_cur_sua_rec.attribute8,
4503              X_ATTRIBUTE9                     => l_cur_sua_rec.attribute9,
4504              X_ATTRIBUTE10                    => l_cur_sua_rec.attribute10,
4505              X_ATTRIBUTE11                    => l_cur_sua_rec.attribute11,
4506              X_ATTRIBUTE12                    => l_cur_sua_rec.attribute12,
4507              X_ATTRIBUTE13                    => l_cur_sua_rec.attribute13,
4508              X_ATTRIBUTE14                    => l_cur_sua_rec.attribute14,
4509              X_ATTRIBUTE15                    => l_cur_sua_rec.attribute15,
4510              X_ATTRIBUTE16                    => l_cur_sua_rec.attribute16,
4511              X_ATTRIBUTE17                    => l_cur_sua_rec.attribute17,
4512              X_ATTRIBUTE18                    => l_cur_sua_rec.attribute18,
4513              X_ATTRIBUTE19                    => l_cur_sua_rec.attribute19,
4514              X_ATTRIBUTE20                    => l_cur_sua_rec.attribute20,
4515              X_WAITLIST_MANUAL_IND            => l_cur_sua_rec.waitlist_manual_ind,
4516              -- WLST_PRIORITY_WEIGHT_NUM and WLST_PREFERENCE_WEIGHT_NUM added by ptandon 1-SEP-2003. Enh Bug# 3052426
4517              X_WLST_PRIORITY_WEIGHT_NUM       => l_cur_sua_rec.wlst_priority_weight_num,
4518              X_WLST_PREFERENCE_WEIGHT_NUM     => l_cur_sua_rec.wlst_preference_weight_num,
4519              -- CORE_INDICATOR_CODE added by ptandon 01-OCT-2003. Enh Bug# 3052432
4520              X_CORE_INDICATOR_CODE            => l_cur_sua_rec.core_indicator_code/*,
4521              X_UPD_AUDIT_FLAG                 => l_cur_sua_rec.UPD_AUDIT_FLAG ,
4522              X_SS_SOURCE_IND                  => l_cur_sua_rec.SS_SOURCE_IND    */
4523   );
4524   ELSE
4525      --
4526 
4527      Before_DML(
4528        p_action => 'DELETE',
4529        x_rowid => X_ROWID
4530        );
4531 
4532      IF (x_mode = 'S') THEN
4533     igs_sc_gen_001.set_ctx('R');
4534   END IF;
4535   DELETE FROM IGS_EN_SU_ATTEMPT_ALL
4536      WHERE ROWID = X_ROWID;
4537 
4538      IF (SQL%NOTFOUND) THEN
4539      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
4540      igs_ge_msg_stack.add;
4541      igs_sc_gen_001.unset_ctx('R');
4542      app_exception.raise_exception;
4543  END IF;
4544  IF (x_mode = 'S') THEN
4545     igs_sc_gen_001.unset_ctx('R');
4546   END IF;
4547 
4548      --
4549      After_DML(
4550          p_action => 'DELETE',
4551          x_rowid => X_ROWID
4552          );
4553      --
4554   END IF;
4555 
4556 END DELETE_ROW;
4557 PROCEDURE Check_Constraints (
4558 Column_Name     IN      VARCHAR2,
4559 Column_Value    IN      VARCHAR2
4560 )
4561 AS
4562 BEGIN
4563 IF  column_name IS NULL THEN
4564     NULL;
4565 ELSIF UPPER(Column_name) = 'ADMINISTRATIVE_UNIT_STATUS' THEN
4566     new_references.ADMINISTRATIVE_UNIT_STATUS := column_value;
4567  ELSIF UPPER(Column_name) = 'ALTERNATIVE_TITLE' THEN
4568     new_references.ALTERNATIVE_TITLE := column_value;
4569   ELSIF UPPER(Column_name) = 'CAL_TYPE' THEN
4570     new_references.CAL_TYPE := column_value;
4571   ELSIF UPPER(Column_name) = 'COURSE_CD' THEN
4572     new_references.COURSE_CD := column_value;
4573       ELSIF UPPER(Column_name) = 'EXAM_LOCATION_CD' THEN
4574     new_references.EXAM_LOCATION_CD := column_value;
4575       ELSIF UPPER(Column_name) = 'LOCATION_CD' THEN
4576     new_references.LOCATION_CD := column_value;
4577       ELSIF UPPER(Column_name) = 'NO_ASSESSMENT_IND' THEN
4578     new_references.NO_ASSESSMENT_IND := column_value;
4579       ELSIF UPPER(Column_name) = 'SUP_UNIT_CD' THEN
4580     new_references.SUP_UNIT_CD := column_value;
4581       ELSIF UPPER(Column_name) = 'UNIT_ATTEMPT_STATUS' THEN
4582     new_references.UNIT_ATTEMPT_STATUS := column_value;
4583       ELSIF UPPER(Column_name) = 'UNIT_CD' THEN
4584     new_references.UNIT_CD := column_value;
4585       ELSIF UPPER(Column_name) = 'UNIT_CLASS' THEN
4586     new_references.UNIT_CLASS := column_value;
4587       ELSIF UPPER(Column_name) = 'OVERRIDE_EFTSU' THEN
4588     new_references.OVERRIDE_EFTSU := igs_ge_number.to_num(column_value);
4589       ELSIF UPPER(Column_name) = 'OVERRIDE_ENROLLED_CP' THEN
4590     new_references.OVERRIDE_ENROLLED_CP := igs_ge_number.to_num(column_value);
4591       ELSIF UPPER(Column_name) = 'NO_ASSESSMENT_IND' THEN
4592     new_references.NO_ASSESSMENT_IND := column_value;
4593       ELSIF UPPER(Column_name) = 'OVERRIDE_ACHIEVABLE_CP' THEN
4594     new_references.OVERRIDE_ACHIEVABLE_CP := igs_ge_number.to_num(column_value);
4595       ELSIF UPPER(Column_name) = 'DCNT_REASON_CD' THEN
4596     new_references.DCNT_REASON_CD := column_value;
4597       END IF;
4598       IF UPPER(column_name) = 'ADMINISTRATIVE_UNIT_STATUS' OR
4599        column_name IS NULL THEN
4600      IF new_references.ADMINISTRATIVE_UNIT_STATUS <> UPPER(new_references.ADMINISTRATIVE_UNIT_STATUS) THEN
4601        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4602        IGS_GE_MSG_STACK.ADD;
4603        APP_EXCEPTION.RAISE_EXCEPTION;
4604                    END IF;
4605               END IF;
4606      IF UPPER(column_name) = 'ALTERNATIVE_TITLE' OR
4607      column_name IS NULL THEN
4608      IF new_references.ALTERNATIVE_TITLE <> UPPER(new_references.ALTERNATIVE_TITLE) THEN
4609        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4610        IGS_GE_MSG_STACK.ADD;
4611        APP_EXCEPTION.RAISE_EXCEPTION;
4612                    END IF;
4613               END IF;
4614  IF UPPER(column_name) = 'CAL_TYPE' OR
4615      column_name IS NULL THEN
4616      IF new_references.CAL_TYPE <> UPPER(new_references.CAL_TYPE) THEN
4617        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4618        IGS_GE_MSG_STACK.ADD;
4619        APP_EXCEPTION.RAISE_EXCEPTION;
4620                    END IF;
4621               END IF;
4622  IF UPPER(column_name) = 'COURSE_CD' OR
4623      column_name IS NULL THEN
4624      IF new_references.COURSE_CD <> UPPER(new_references.COURSE_CD) THEN
4625        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4626        IGS_GE_MSG_STACK.ADD;
4627        APP_EXCEPTION.RAISE_EXCEPTION;
4628                    END IF;
4629               END IF;
4630      IF UPPER(column_name) = 'EXAM_LOCATION_CD' OR
4631      column_name IS NULL THEN
4632      IF new_references.EXAM_LOCATION_CD <> UPPER(new_references.EXAM_LOCATION_CD) THEN
4633        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4634        IGS_GE_MSG_STACK.ADD;
4635        APP_EXCEPTION.RAISE_EXCEPTION;
4636                    END IF;
4637               END IF;
4638      IF UPPER(column_name) = 'LOCATION_CD' OR
4639      column_name IS NULL THEN
4640      IF new_references.LOCATION_CD <> UPPER(new_references.LOCATION_CD) THEN
4641        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4642        IGS_GE_MSG_STACK.ADD;
4643        APP_EXCEPTION.RAISE_EXCEPTION;
4644                    END IF;
4645               END IF;
4646      IF UPPER(column_name) = 'NO_ASSESSMENT_IND' OR
4647      column_name IS NULL THEN
4648      IF new_references.NO_ASSESSMENT_IND <> UPPER(new_references.NO_ASSESSMENT_IND) THEN
4649        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4650        IGS_GE_MSG_STACK.ADD;
4651        APP_EXCEPTION.RAISE_EXCEPTION;
4652                    END IF;
4653               END IF;
4654      IF UPPER(column_name) = 'SUP_UNIT_CD' OR
4655      column_name IS NULL THEN
4656      IF new_references.SUP_UNIT_CD <> UPPER(new_references.SUP_UNIT_CD) THEN
4657        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4658        IGS_GE_MSG_STACK.ADD;
4659        APP_EXCEPTION.RAISE_EXCEPTION;
4660                    END IF;
4661               END IF;
4662      IF UPPER(column_name) = 'UNIT_ATTEMPT_STATUS' OR
4663      column_name IS NULL THEN
4664      IF new_references.UNIT_ATTEMPT_STATUS <> UPPER(new_references.UNIT_ATTEMPT_STATUS) THEN
4665        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4666        IGS_GE_MSG_STACK.ADD;
4667        APP_EXCEPTION.RAISE_EXCEPTION;
4668                    END IF;
4669               END IF;
4670      IF UPPER(column_name) = 'UNIT_CD' OR
4671      column_name IS NULL THEN
4672      IF new_references.UNIT_CD <> UPPER(new_references.UNIT_CD) THEN
4673        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4674        IGS_GE_MSG_STACK.ADD;
4675        APP_EXCEPTION.RAISE_EXCEPTION;
4676                    END IF;
4677               END IF;
4678      IF UPPER(column_name) = 'UNIT_CLASS' OR
4679      column_name IS NULL THEN
4680      IF new_references.UNIT_CLASS <> UPPER(new_references.UNIT_CLASS) THEN
4681        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4682        IGS_GE_MSG_STACK.ADD;
4683        APP_EXCEPTION.RAISE_EXCEPTION;
4684                    END IF;
4685               END IF;
4686      IF UPPER(column_name) = 'OVERRIDE_EFTSU' OR
4687      column_name IS NULL THEN
4688      IF new_references.OVERRIDE_EFTSU < 0 OR  new_references.OVERRIDE_EFTSU > 9999.999 THEN
4689        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4690        IGS_GE_MSG_STACK.ADD;
4691        APP_EXCEPTION.RAISE_EXCEPTION;
4692                    END IF;
4693               END IF;
4694      IF UPPER(column_name) = 'OVERRIDE_ENROLLED_CP' OR
4695      column_name IS NULL THEN
4696      IF new_references.OVERRIDE_ENROLLED_CP < 0 OR  new_references.OVERRIDE_ENROLLED_CP> 999.999 THEN
4697        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4698        IGS_GE_MSG_STACK.ADD;
4699        APP_EXCEPTION.RAISE_EXCEPTION;
4700                    END IF;
4701               END IF;
4702      IF UPPER(column_name) = 'NO_ASSESSMENT_IND' OR
4703      column_name IS NULL THEN
4704      IF new_references.NO_ASSESSMENT_IND NOT IN ('Y','N') THEN
4705        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4706        IGS_GE_MSG_STACK.ADD;
4707        APP_EXCEPTION.RAISE_EXCEPTION;
4708                    END IF;
4709               END IF;
4710      IF UPPER(column_name) = 'OVERRIDE_ACHIEVABLE_CP' OR
4711      column_name IS NULL THEN
4712      IF new_references.OVERRIDE_ACHIEVABLE_CP < 0 OR new_references.OVERRIDE_ACHIEVABLE_CP > 999.999 THEN
4713        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4714        IGS_GE_MSG_STACK.ADD;
4715        APP_EXCEPTION.RAISE_EXCEPTION;
4716                    END IF;
4717               END IF;
4718      IF UPPER(column_name) = 'DCNT_REASON_CD' OR
4719      column_name IS NULL THEN
4720      IF new_references.DCNT_REASON_CD <> UPPER(new_references.DCNT_REASON_CD) THEN
4721        Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
4722        IGS_GE_MSG_STACK.ADD;
4723         APP_EXCEPTION.RAISE_EXCEPTION;
4724      END IF;
4725 
4726 END IF;
4727         END Check_Constraints;
4728 -- Function for getting the UK
4729 -- If the record exists for the parameters passed, then it returns TRUE
4730 -- Else it returns false
4731 --changed the UK columns as part of MUS build, # 2829262
4732 
4733  FUNCTION Get_Uk_For_Validation (
4734     x_unit_cd   IN  VARCHAR2,
4735     x_cal_type  IN  VARCHAR2,
4736     x_ci_sequence_number IN NUMBER,
4737     x_location_cd  IN VARCHAR2,
4738     x_unit_class   IN VARCHAR2,
4739     x_person_id IN NUMBER,
4740     x_course_cd IN VARCHAR2,
4741     x_version_number IN NUMBER
4742     ) RETURN BOOLEAN AS
4743   CURSOR cur_sua IS
4744     SELECT ROWID
4745     FROM   IGS_EN_SU_ATTEMPT_ALL
4746     WHERE  unit_cd                 = x_unit_cd
4747     AND    cal_type                = x_cal_type
4748     AND    ci_sequence_number      = x_ci_sequence_number
4749     AND    location_cd             = x_location_cd
4750     AND    unit_class              = x_unit_class
4751     AND    person_id               = x_person_id
4752     AND    course_cd              = x_course_cd
4753     AND    version_number          = x_version_number
4754     AND    ((l_rowid IS NULL) OR (rowid <> l_rowid));
4755   lv_row_id     cur_sua%ROWTYPE;
4756  BEGIN
4757   /*IF x_administrative_priority IN (NULL,0) THEN
4758     RETURN (FALSE);
4759   ELSE*/
4760     OPEN cur_sua;
4761     FETCH cur_sua INTO lv_row_id;
4762     IF cur_sua%FOUND THEN
4763       CLOSE cur_sua;
4764       RETURN(TRUE);
4765     ELSE
4766       CLOSE cur_sua;
4767       RETURN(FALSE);
4768     END IF;
4769 
4770  END Get_Uk_For_Validation;
4771 
4772   PROCEDURE update_reserved_seat( p_action IN VARCHAR2)
4773   AS
4774   --
4775 -- For Enhancement Bug 1832830
4776 -- Local Procedure added to decrement actual_seat_enrolled once the
4777 -- unit administrative status changes from ENROLLED/INVALID to DROPPED/DISCCONTIN
4778 -- Called in After DML
4779 --
4780 -- 25-Jun-2002  pmarada  Added the code when the unit deleting from the su_attempt, decreasing the
4781 --                       actual enrollment. bug 2423787
4782 
4783     CURSOR cur_igs_ps_rsv_ext (cp_rsv_ext_id igs_ps_rsv_ext.rsv_ext_id%TYPE)
4784     IS
4785     SELECT rsv.ROWID row_id, rsv.*
4786     FROM   igs_ps_rsv_ext rsv
4787     WHERE  rsv_ext_id = cp_rsv_ext_id;
4788 
4789     l_cur_igs_ps_rsv_ext  cur_igs_ps_rsv_ext%ROWTYPE;
4790     l_rsv_ext_id          igs_ps_rsv_ext.rsv_ext_id%TYPE;
4791 
4792   BEGIN
4793     IF ( p_action = 'UPDATE') THEN
4794       -- checking if the unit attempt status has been changed from ENROLLED/INVALID to DROPPED/DISCONTIN
4795       IF  (old_references.unit_attempt_status IN ('ENROLLED','INVALID')
4796            AND (new_references.unit_attempt_status IN ('DROPPED','DISCONTIN'))) THEN
4797         IF ( old_references.rsv_seat_ext_id =  new_references.rsv_seat_ext_id ) THEN
4798            l_rsv_ext_id := old_references.rsv_seat_ext_id;
4799         ELSE
4800            l_rsv_ext_id := new_references.rsv_seat_ext_id;
4801         END IF;
4802 
4803         OPEN  cur_igs_ps_rsv_ext(l_rsv_ext_id);
4804         FETCH cur_igs_ps_rsv_ext INTO l_cur_igs_ps_rsv_ext;
4805         CLOSE cur_igs_ps_rsv_ext;
4806 
4807 
4808         -- If the unit attempt status is changed then the actual seats enrolled column has to be decreased by one
4809         IF ((l_cur_igs_ps_rsv_ext.actual_seat_enrolled -1) >= 0) THEN
4810             igs_ps_rsv_ext_pkg.update_row( x_rowid                => l_cur_igs_ps_rsv_ext.row_id,
4811                                            x_rsv_ext_id           => l_cur_igs_ps_rsv_ext.rsv_ext_id,
4812                                            x_uoo_id               => l_cur_igs_ps_rsv_ext.uoo_id,
4813                                            x_priority_id          => l_cur_igs_ps_rsv_ext.priority_id,
4814                                            x_preference_id        => l_cur_igs_ps_rsv_ext.preference_id,
4815                                            x_rsv_level            => l_cur_igs_ps_rsv_ext.rsv_level,
4816                                            x_actual_seat_enrolled => l_cur_igs_ps_rsv_ext.actual_seat_enrolled -1,
4817                                            x_mode                 => 'R'
4818                                          );
4819         END IF;
4820       END IF;
4821     ELSIF p_action ='DELETE' THEN
4822     -- While deleting the su attempt record, if record exists in the reserve extension table with this reserve extension id decreasing the
4823     -- actual seat enrollment.
4824     -- Suppose user added the unit to cart and closed the browser or timeout, the actual enrollment is matching.
4825     -- while user login into SS, decrementing the actual seat enrollment., pmarada, bug 2423787
4826 
4827        IF old_references.rsv_seat_ext_id IS NOT NULL THEN
4828           OPEN  cur_igs_ps_rsv_ext(old_references.rsv_seat_ext_id);
4829           FETCH cur_igs_ps_rsv_ext INTO l_cur_igs_ps_rsv_ext;
4830           CLOSE cur_igs_ps_rsv_ext;
4831           IF ((l_cur_igs_ps_rsv_ext.actual_seat_enrolled -1) >= 0) THEN
4832              igs_ps_rsv_ext_pkg.update_row( x_rowid                => l_cur_igs_ps_rsv_ext.row_id,
4833                                            x_rsv_ext_id           => l_cur_igs_ps_rsv_ext.rsv_ext_id,
4834                                            x_uoo_id               => l_cur_igs_ps_rsv_ext.uoo_id,
4835                                            x_priority_id          => l_cur_igs_ps_rsv_ext.priority_id,
4836                                            x_preference_id        => l_cur_igs_ps_rsv_ext.preference_id,
4837                                            x_rsv_level            => l_cur_igs_ps_rsv_ext.rsv_level,
4838                                            x_actual_seat_enrolled => l_cur_igs_ps_rsv_ext.actual_seat_enrolled -1,
4839                                            x_mode                 => 'R'
4840                                          );
4841           END IF;
4842        END IF;
4843     END IF;
4844   END update_reserved_seat;
4845 
4846 END Igs_En_Su_Attempt_Pkg;