DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_SU_SETATMPT_PKG

Source


1 PACKAGE BODY IGS_AS_SU_SETATMPT_PKG AS
2 /* $Header: IGSDI29B.pls 120.2 2006/05/29 07:53:01 sarakshi noship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references IGS_AS_SU_SETATMPT%ROWTYPE;
6   new_references IGS_AS_SU_SETATMPT%ROWTYPE;
7   PROCEDURE Set_Column_Values (
8     p_action IN VARCHAR2,
9     x_rowid IN VARCHAR2 ,
10     x_person_id IN NUMBER ,
11     x_course_cd IN VARCHAR2 ,
12     x_unit_set_cd IN VARCHAR2 ,
13     x_us_version_number IN NUMBER ,
14     x_sequence_number IN NUMBER ,
15     x_selection_dt IN DATE ,
16     x_student_confirmed_ind IN VARCHAR2 ,
17     x_end_dt IN DATE ,
18     x_parent_unit_set_cd IN VARCHAR2 ,
19     x_parent_sequence_number IN NUMBER ,
20     x_primary_set_ind IN VARCHAR2 ,
21     x_voluntary_end_ind IN VARCHAR2 ,
22     x_authorised_person_id IN NUMBER ,
23     x_authorised_on IN DATE ,
24     x_override_title IN VARCHAR2 ,
25     x_rqrmnts_complete_ind IN VARCHAR2 ,
26     x_rqrmnts_complete_dt IN DATE ,
27     x_s_completed_source_type IN VARCHAR2 ,
28     x_catalog_cal_type IN VARCHAR2 ,
29     x_catalog_seq_num IN NUMBER ,
30     x_attribute_category IN VARCHAR2 ,
31     x_attribute1 IN VARCHAR2 ,
32     x_attribute2 IN VARCHAR2 ,
33     x_attribute3 IN VARCHAR2 ,
34     x_attribute4 IN VARCHAR2 ,
35     x_attribute5 IN VARCHAR2 ,
36     x_attribute6 IN VARCHAR2 ,
37     x_attribute7 IN VARCHAR2 ,
38     x_attribute8 IN VARCHAR2 ,
39     x_attribute9 IN VARCHAR2 ,
40     x_attribute10 IN VARCHAR2 ,
41     x_attribute11 IN VARCHAR2 ,
42     x_attribute12 IN VARCHAR2 ,
43     x_attribute13 IN VARCHAR2 ,
44     x_attribute14 IN VARCHAR2 ,
45     x_attribute15 IN VARCHAR2 ,
46     x_attribute16 IN VARCHAR2 ,
47     x_attribute17 IN VARCHAR2 ,
48     x_attribute18 IN VARCHAR2 ,
49     x_attribute19 IN VARCHAR2 ,
50     x_attribute20 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   ) AS
57     CURSOR cur_old_ref_values IS
58       SELECT   *
59       FROM     IGS_AS_SU_SETATMPT
60       WHERE    ROWID = x_rowid;
61   BEGIN
62     l_rowid := x_rowid;
63     -- Code for setting the Old and New Reference Values.
64     -- Populate Old Values.
65     OPEN cur_old_ref_values;
66     FETCH cur_old_ref_values INTO old_references;
67     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
68       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
69       CLOSE cur_old_ref_values;
70       App_Exception.Raise_Exception;
71       RETURN;
72     END IF;
73     CLOSE cur_old_ref_values;
74     -- Populate New Values.
75     new_references.person_id := x_person_id;
76     new_references.course_cd := x_course_cd;
77     new_references.unit_set_cd := x_unit_set_cd;
78     new_references.us_version_number := x_us_version_number;
79     new_references.sequence_number := x_sequence_number;
80     new_references.selection_dt := x_selection_dt;
81     new_references.student_confirmed_ind := x_student_confirmed_ind;
82     new_references.end_dt := x_end_dt;
83     new_references.parent_unit_set_cd := x_parent_unit_set_cd;
84     new_references.parent_sequence_number := x_parent_sequence_number;
85     new_references.primary_set_ind := x_primary_set_ind;
86     new_references.voluntary_end_ind := x_voluntary_end_ind;
87     new_references.authorised_person_id := x_authorised_person_id;
88     new_references.authorised_on := x_authorised_on;
89     new_references.override_title := x_override_title;
90     new_references.rqrmnts_complete_ind := x_rqrmnts_complete_ind;
91     new_references.rqrmnts_complete_dt := x_rqrmnts_complete_dt;
92     new_references.s_completed_source_type := x_s_completed_source_type;
93     new_references.catalog_cal_type := x_catalog_cal_type;
94     new_references.catalog_seq_num := x_catalog_seq_num;
95     new_references.attribute_category:= x_attribute_category;
96     new_references.attribute1:= x_attribute1;
97     new_references.attribute2:= x_attribute2;
98     new_references.attribute3:= x_attribute3;
99     new_references.attribute4:= x_attribute4;
100     new_references.attribute5:= x_attribute5;
101     new_references.attribute6:= x_attribute6;
102     new_references.attribute7:= x_attribute7;
103     new_references.attribute8:= x_attribute8;
104     new_references.attribute9:= x_attribute9;
105     new_references.attribute10:= x_attribute10;
106     new_references.attribute11:= x_attribute11;
107     new_references.attribute12:= x_attribute12;
108     new_references.attribute13:= x_attribute13;
109     new_references.attribute14:= x_attribute14;
110     new_references.attribute15:= x_attribute15;
111     new_references.attribute16:= x_attribute16;
112     new_references.attribute17:= x_attribute17;
113     new_references.attribute18:= x_attribute18;
114     new_references.attribute19:= x_attribute19;
115     new_references.attribute20:= x_attribute20;
116     IF (p_action = 'UPDATE') THEN
117       new_references.creation_date := old_references.creation_date;
118       new_references.created_by := old_references.created_by;
119     ELSE
120       new_references.creation_date := x_creation_date;
121       new_references.created_by := x_created_by;
122     END IF;
123     new_references.last_update_date := x_last_update_date;
124     new_references.last_updated_by := x_last_updated_by;
125     new_references.last_update_login := x_last_update_login;
126   END Set_Column_Values;
127   -- Trigger description :-
128   -- "OSS_TST".trg_susa_br_iud
129   -- BEFORE INSERT OR DELETE OR UPDATE
130   -- ON IGS_AS_SU_SETATMPT
131   -- FOR EACH ROW
132   PROCEDURE BeforeRowInsertUpdateDelete1(
133     p_inserting IN BOOLEAN ,
134     p_updating IN BOOLEAN ,
135     p_deleting IN BOOLEAN
136     ) AS
137     -- check whether the unit set is a valid one for the prorgam offering option
138    CURSOR c_us_valid IS
139      SELECT 'x'
140        FROM IGS_PS_OFR_OPT_UNIT_SET_V usoo,
141  	   IGS_EN_STDNT_PS_ATT spa
142       WHERE spa.person_id = new_references.person_id
143         AND spa.course_cd = new_references.course_cd
144         AND usoo.unit_set_cd = new_references.unit_set_cd
145         AND usoo.us_version_number = new_references.us_version_number
146         AND usoo.coo_id = spa.coo_id;
147 
148    l_dummy VARCHAR2(1);
149 
150    v_message_name  VARCHAR2(30);
151   BEGIN
152     -- verify if this unit set is a valid unit set for the program offering option
153  	IF p_updating THEN
154  		OPEN c_us_valid;
155  		FETCH c_us_valid INTO l_dummy;
156  		IF c_us_valid%NOTFOUND THEN
157  	            CLOSE c_us_valid;
158          	    Fnd_Message.Set_Name('IGS', 'IGS_EN_UNIT_SETNOT_PERMITTED');
159                      IGS_GE_MSG_STACK.ADD;
160                      App_Exception.Raise_Exception;
161  		END IF;
162  		CLOSE c_us_valid;
163  	END IF;
164 
165         -- If trigger has not been disabled, perform required processing
166         -- Warning: disabling has been done for IGS_EN_GEN_013.ENRP_UPD_SUSA_END_DT and
167         -- IGS_EN_GEN_013.ENRP_UPD_SUSA_SCI processing which occurs within the after statment
168         -- trigger. If wishing to disable the triggers, use a different table name as
169         -- an identifier eg. 'STUDENT_UNIT_SET_ATTEMPT2'
170         -- IGS_GE_NOTE: Any alterations to susa triggers should be applied to module
171         -- enrp_val_susa.
172         IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_AS_SU_SETATMPT') THEN
173                 IF p_inserting THEN
174                         -- Validate the the IGS_PS_UNIT set is able to be created.
175                         -- against the student IGS_PS_COURSE attempt.
176                         IF IGS_EN_VAL_SUSA.enrp_val_susa_sca(
177                                                 new_references.person_id,
178                                                 new_references.course_cd,
179                                                    v_message_name ) = FALSE THEN
180                      Fnd_Message.Set_Name('IGS', v_message_name);
181                      IGS_GE_MSG_STACK.ADD;
182                      App_Exception.Raise_Exception;
183                         END IF;
184                         -- Validate the the IGS_PS_UNIT set is able to be created.
185                         -- The student cannot have completed it previously,
186                         -- no encumbrances must exist and it must be applicable
187                         -- to the IGS_PS_COURSE offering.
188                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
189                         IF IGS_EN_VAL_SUSA.enrp_val_susa_ins(
190                                                 new_references.person_id,
191                                                 new_references.course_cd,
192                                                 new_references.unit_set_cd,
193                                                 new_references.sequence_number,
194                                                 new_references.us_version_number,
195                                                 v_message_name,
196                                                 'N') = FALSE THEN
197                      Fnd_Message.Set_Name('IGS', v_message_name);
198                      IGS_GE_MSG_STACK.ADD;
199                      App_Exception.Raise_Exception;
200                         END IF;
201                 END IF;
202                 -- Validate that the authorisation fields can only be set when end date is set
203                 -- or the IGS_PS_UNIT set cd requires authorisation (IGS_EN_UNIT_SET.authorisation_ind =
204                 -- 'Y')
205                 IF p_inserting OR
206                   (p_updating AND
207                    ((NVL(new_references.authorised_person_id, 0) <>
208                                 NVL(old_references.authorised_person_id, 0)) OR
209                     (NVL(new_references.authorised_on,IGS_GE_DATE.IGSDATE('1900/01/01'))
210                          <> NVL(old_references.authorised_on, IGS_GE_DATE.IGSDATE('1900/01/01'))))) THEN
211 
212                          -- p_legacy value passed as 'N' as function is called in non-legacy mode
213                         IF IGS_EN_VAL_SUSA.enrp_val_susa_auth(
214                                         new_references.unit_set_cd,
215                                         new_references.us_version_number,
216                                         new_references.end_dt,
217                                         new_references.authorised_person_id,
218                                         new_references.authorised_on,
219                                         v_message_name,
220                                         'N') = FALSE THEN
221                      Fnd_Message.Set_Name('IGS', v_message_name);
222                      IGS_GE_MSG_STACK.ADD;
223                      App_Exception.Raise_Exception;
224                         END IF;
225                 END IF;
226                 IF p_inserting OR
227                   (p_updating AND
228                    ((NVL(new_references.authorised_person_id, 0) <>
229                                 NVL(old_references.authorised_person_id, 0)) OR
230                     (new_references.student_confirmed_ind <> old_references.student_confirmed_ind) OR
231                     (NVL(new_references.authorised_on,IGS_GE_DATE.IGSDATE('1900/01/01'))
232                          <> NVL(old_references.authorised_on, IGS_GE_DATE.IGSDATE('1900/01/01'))))) THEN
233                         -- Validate that the authorisation fields must be set when
234                         -- the IGS_PS_UNIT set cd requires authorisation (IGS_EN_UNIT_SET.authorisation_ind = 'Y')
235                         -- Check required only when the IGS_PS_UNIT set is confirmed.
236                         IF (new_references.student_confirmed_ind = 'Y') THEN
237                                 IF IGS_EN_VAL_SUSA.enrp_val_susa_us_ath(
238                                                 new_references.unit_set_cd,
239                                                 new_references.us_version_number,
240                                                 new_references.authorised_person_id,
241                                                 new_references.authorised_on,
242                                                 v_message_name ) = FALSE THEN
243                      Fnd_Message.Set_Name('IGS', v_message_name);
244                      IGS_GE_MSG_STACK.ADD;
245                      App_Exception.Raise_Exception;
246                                 END IF;
247                         END IF;
248                 END IF;
249                 -- Validate that the completion fields can only be set when IGS_PS_UNIT set is
250                 -- confirmed
251                 IF p_inserting OR
252                   (p_updating AND
253                    ((NVL(new_references.rqrmnts_complete_ind, 'x')
254                         <> NVL(old_references.rqrmnts_complete_ind, 'x')) OR
255                     (NVL(new_references.rqrmnts_complete_dt,IGS_GE_DATE.IGSDATE('1900/01/01'))
256                          <> NVL(old_references.rqrmnts_complete_dt,
257                                 IGS_GE_DATE.IGSDATE('1900/01/01')))))THEN
258 
259                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
260                         IF IGS_EN_VAL_SUSA.enrp_val_susa_cmplt(
261                                         new_references.rqrmnts_complete_dt,
262                                         new_references.rqrmnts_complete_ind,
263                                         new_references.student_confirmed_ind,
264                                         v_message_name,
265                                         'N') = FALSE THEN
266                      Fnd_Message.Set_Name('IGS', v_message_name);
267                      IGS_GE_MSG_STACK.ADD;
268                      App_Exception.Raise_Exception;
269                         END IF;
270                 END IF;
271                 -- Validate that the system competed source type field can only be
272                 -- set when completion fields are set.
273                 IF p_inserting OR
274                   (p_updating AND
275                    ((NVL(new_references.rqrmnts_complete_ind, 'x')
276                         <> NVL(old_references.rqrmnts_complete_ind, 'x')) OR
277                     (NVL(new_references.s_completed_source_type, 'x')
278                         <> NVL(old_references.s_completed_source_type, 'x')) OR
279                     (NVL(new_references.rqrmnts_complete_dt,IGS_GE_DATE.IGSDATE('1900/01/01'))
280                          <> NVL(old_references.rqrmnts_complete_dt,
281                                 IGS_GE_DATE.IGSDATE('1900/01/01')))))THEN
282                         IF IGS_EN_VAL_SUSA.enrp_val_susa_scst(
283                                         new_references.rqrmnts_complete_dt,
284                                         new_references.rqrmnts_complete_ind,
285                                         new_references.s_completed_source_type,
286                                         v_message_name ) = FALSE THEN
287                      Fnd_Message.Set_Name('IGS', v_message_name);
288                      IGS_GE_MSG_STACK.ADD;
289                      App_Exception.Raise_Exception;
290                         END IF;
291                 END IF;
292                 -- The peice of code was existing here to Validate the date fields. Which got removed in UK Enhancement Build.
293                 -- Enh Bug#2580731. The code was raising exception if the Selection_dt, end_dt or rqrmnts_complete_dt is more than sysdate.
294 
295                 -- Validate that the selection date can only be set/unset when IGS_PS_UNIT set is
296                 -- confirmed/unconfirmed
297                 IF p_inserting OR
298                   (p_updating AND
299                    ((new_references.student_confirmed_ind <> old_references.student_confirmed_ind) OR
300                     (NVL(new_references.selection_dt,IGS_GE_DATE.IGSDATE('1900/01/01'))
301                          <> NVL(old_references.selection_dt, IGS_GE_DATE.IGSDATE('1900/01/01'))))) THEN
302 
303                          -- p_legacy value passed as 'N' as function is called in non-legacy mode
304                         IF IGS_EN_VAL_SUSA.enrp_val_susa_sci_sd(
305                                         new_references.student_confirmed_ind,
306                                         new_references.selection_dt,
307                                         v_message_name,
308                                         'N') = FALSE THEN
309                      Fnd_Message.Set_Name('IGS', v_message_name);
310                      IGS_GE_MSG_STACK.ADD;
311                      App_Exception.Raise_Exception;
312                         END IF;
313                 END IF;
314                 -- Validate that the voluntary_end_ind can only be set when the end date is
315                 -- set.
316                 IF p_inserting OR
317                   (p_updating AND
318                    ((new_references.voluntary_end_ind <> old_references.voluntary_end_ind) OR
319                     (NVL(new_references.end_dt,IGS_GE_DATE.IGSDATE('1900/01/01'))
320                          <> NVL(old_references.end_dt, IGS_GE_DATE.IGSDATE('1900/01/01'))))) THEN
321                         IF IGS_EN_VAL_SUSA.enrp_val_susa_end_vi(
322                                         new_references.voluntary_end_ind,
323                                         new_references.end_dt,
324                                         v_message_name ) = FALSE THEN
325                      Fnd_Message.Set_Name('IGS', v_message_name);
326                      IGS_GE_MSG_STACK.ADD;
327                      App_Exception.Raise_Exception;
328                         END IF;
329                 END IF;
330                 -- Validate that the IGS_PS_UNIT set version number cannot be updated.
331                 IF (p_updating AND
332                    (new_references.us_version_number <> old_references.us_version_number)) THEN
333                      Fnd_Message.Set_Name('IGS', 'IGS_EN_UNIT_SET_VERNUM_NOTUPD');
334                      IGS_GE_MSG_STACK.ADD;
335                      App_Exception.Raise_Exception;
336                 END IF;
337                 IF p_deleting THEN
338                         -- Validate that the records can be deleted.
339                         IF IGS_EN_VAL_SUSA.enrp_val_susa_del(
340                                                 old_references.person_id,
341                                                 old_references.course_cd,
342                                                 old_references.unit_set_cd,
343                                                 old_references.sequence_number,
344                                                 old_references.us_version_number,
345                                                 old_references.end_dt,
346                                                 old_references.rqrmnts_complete_ind,
347                                                 'Y', -- indicating this is called from db trigger.
348                                                 v_message_name ) = FALSE THEN
349                      Fnd_Message.Set_Name('IGS', v_message_name);
350                      IGS_GE_MSG_STACK.ADD;
351                      App_Exception.Raise_Exception;
352                         END IF;
353                 END IF;
354         END IF;
355   END BeforeRowInsertUpdateDelete1;
356   PROCEDURE RowValMutation(
357     p_inserting IN BOOLEAN ,
358     p_updating IN BOOLEAN ,
359     p_deleting IN BOOLEAN ,
360     p_parent_unit_set_cd IN VARCHAR2 ,
361     p_end_dt IN DATE ,
362     p_student_confirmed_ind IN VARCHAR2 ,
363     p_primary_set_ind IN VARCHAR2
364     ) AS
365         v_insert                BOOLEAN;
366         v_update                BOOLEAN;
367         v_delete                BOOLEAN;
368         cst_error               CONSTANT        CHAR := 'E';
369    v_message_name  VARCHAR2(30);
370   BEGIN
371         IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_AS_SU_SETATMPT') THEN
372                 IF p_inserting THEN
373                         -- Validate the the unit set is able to be created
374                         -- with the unit set status being valid and the
375                         -- expiry date not set. If set then person must have
376                         -- previously selected it.
377                         IF IGS_EN_VAL_SUSA.enrp_val_susa_us_act(
378                                         new_references.person_id,
379                                         new_references.course_cd,
380                                         new_references.unit_set_cd,
381                                         new_references.sequence_number,
382                                         new_references.us_version_number,
383                                         v_message_name) = FALSE THEN
384                      Fnd_Message.Set_Name('IGS', v_message_name);
385                      IGS_GE_MSG_STACK.ADD;
386                      App_Exception.Raise_Exception;
387                         END IF;
388                 END IF;
389                 IF (p_inserting OR p_updating) AND
390                    p_parent_unit_set_cd  IS NOT NULL THEN
391                         -- Validate if the unit set is to be defined as a subordinate or if
392                         -- relationship specified, that it is valid within the course offering.
393                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
394                         IF IGS_EN_VAL_SUSA.enrp_val_susa_cousr(
395                                         new_references.person_id,
396                                         new_references.course_cd,
397                                         new_references.unit_set_cd,
398                                         new_references.us_version_number,
399                                         new_references.parent_unit_set_cd,
400                                         new_references.parent_sequence_number,
401                                         cst_error,
402                                         v_message_name,
403                                         'N') = FALSE THEN
404                      Fnd_Message.Set_Name('IGS', v_message_name);
405                      IGS_GE_MSG_STACK.ADD;
406                      App_Exception.Raise_Exception;
407                         END IF;
408                         -- Validate if the parent unit set has a null end date, unit set is
409                         -- not being linked to itself (directly or indirectly). Cannot be
410                         -- confirmed if parent is unconfirmed.
411                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
412                         IF IGS_EN_VAL_SUSA.enrp_val_susa_parent(
413                                         new_references.person_id,
414                                         new_references.course_cd,
415                                         new_references.unit_set_cd,
416                                         new_references.sequence_number,
417                                         new_references.parent_unit_set_cd,
418                                         new_references.parent_sequence_number,
419                                         new_references.student_confirmed_ind,
420                                         v_message_name,
421                                         'N') = FALSE THEN
422                      Fnd_Message.Set_Name('IGS', v_message_name);
423                      IGS_GE_MSG_STACK.ADD;
424                      App_Exception.Raise_Exception;
425                         END IF;
426                 END IF;
427                 IF (p_inserting OR p_updating) AND
428                    p_end_dt IS NOT NULL THEN
429                         -- Validate the end date, check if the authorisation details
430                         -- need to be set or if more than one open end dated instance
431                         -- of the unit set exists. Also cannot be cleared if parent ended.
432                         -- If part of the admissions offer, authorisation required to end
433                         -- the unit set.
434                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
435                         IF IGS_EN_VAL_SUSA.enrp_val_susa_end_dt(
436                                         new_references.person_id,
437                                         new_references.course_cd,
438                                         new_references.unit_set_cd,
439                                         new_references.sequence_number,
440                                         new_references.us_version_number,
441                                         new_references.end_dt,
442                                         new_references.authorised_person_id,
443                                         new_references.authorised_on,
444                                         new_references.parent_unit_set_cd,
445                                         new_references.parent_sequence_number,
446                                         cst_error,
447                                         v_message_name,
448                                         'N') = FALSE THEN
449                                 -- Check if warning message returned.
450                                 IF v_message_name <> 'IGS_EN_UNITSET_REQ_AUTHORISAT' THEN
451                                      Fnd_Message.Set_Name('IGS', v_message_name);
452                                      IGS_GE_MSG_STACK.ADD;
453                                      App_Exception.Raise_Exception;
454                                 END IF;
455                         END IF;
456                         -- If updating and the end date has been set, cascade the end date
457                         -- through to any descendant unit sets (Inserted records cannot have
458                         -- children at that point).
459                         IF p_updating AND
460                             new_references.end_dt IS NOT NULL THEN
461                                 IF IGS_EN_GEN_013.ENRP_UPD_SUSA_END_DT(
462                                                 new_references.person_id,
463                                                 new_references.course_cd,
464                                                 new_references.unit_set_cd,
465                                                 new_references.sequence_number,
466                                                 new_references.end_dt,
467                                                 new_references.voluntary_end_ind,
468                                                 new_references.authorised_person_id,
469                                                 new_references.authorised_on,
470                                                 v_message_name) = FALSE THEN
471                      Fnd_Message.Set_Name('IGS', v_message_name);
472                      IGS_GE_MSG_STACK.ADD;
473                      App_Exception.Raise_Exception;
474                                 END IF;
475                         END IF;
476                 END IF;
477                 IF (p_inserting OR p_updating) AND
478                    p_student_confirmed_ind IS NOT NULL THEN
479                         -- Validate that the unit set is not confirmed when the student course
480                         -- attempt is unconfirmed.
481                         -- Also check that not unset one end date or complete date set. Cannot be
482                         -- confirmed and linked to a parent that is unconfirmed. Cannot be
483                         -- confirmed if encumbrances exist.
484                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
485                         IF IGS_EN_VAL_SUSA.enrp_val_susa_sci(
486                                         new_references.person_id,
487                                         new_references.course_cd,
488                                         new_references.unit_set_cd,
489                                         new_references.sequence_number,
490                                         new_references.us_version_number,
491                                         new_references.parent_unit_set_cd,
492                                         new_references.parent_sequence_number,
493                                         new_references.student_confirmed_ind,
494                                         new_references.selection_dt,
495                                         new_references.end_dt,
496                                         new_references.rqrmnts_complete_ind,
497                                         v_message_name,
498                                         'N') = FALSE THEN
499                      Fnd_Message.Set_Name('IGS', v_message_name);
500                      IGS_GE_MSG_STACK.ADD;
501                      App_Exception.Raise_Exception;
502                         END IF;
503                         -- If updating and the student confirmed indicator is being unset,
504                         -- then unset any descendant unit sets. (Only concerned with update
505                         -- as unit set cannot have descendant at the point of creation).
506                         IF p_updating AND
507                             new_references.student_confirmed_ind = 'N' THEN
508                                 IF IGS_EN_GEN_013.ENRP_UPD_SUSA_SCI(
509                                                 new_references.person_id,
510                                                 new_references.course_cd,
511                                                 new_references.unit_set_cd,
512                                                 new_references.sequence_number,
513                                                 new_references.student_confirmed_ind,
514                                                 v_message_name) = FALSE THEN
515                      Fnd_Message.Set_Name('IGS', v_message_name);
516                      IGS_GE_MSG_STACK.ADD;
517                      App_Exception.Raise_Exception;
518                                 END IF;
519                         END IF;
520                 END IF;
521                 IF (p_inserting OR p_updating) AND
522                    p_primary_set_ind  IS NOT NULL THEN
523                         -- Validate the primary set indicator is only set for
524                         -- non-administrative sets and that there does not already
525                         -- exist a unit set that has a higher rank.
526                         -- p_legacy value passed as 'N' as function is called in non-legacy mode
527                         IF IGS_EN_VAL_SUSA.enrp_val_susa_prmry(
528                                         new_references.person_id,
529                                         new_references.course_cd,
530                                         new_references.unit_set_cd,
531                                         new_references.us_version_number,
532                                         new_references.primary_set_ind,
533                                         v_message_name,
534                                         'N') = FALSE THEN
535                              Fnd_Message.Set_Name('IGS', v_message_name);
536                              IGS_GE_MSG_STACK.ADD;
537                              App_Exception.Raise_Exception;
538                         END IF;
539                 END IF;
540         END IF;
541   END RowValMutation;
542   -- Trigger description :-
543   -- "OSS_TST".trg_susa_ar_iu
544   -- AFTER INSERT OR UPDATE
545   -- ON IGS_AS_SU_SETATMPT
546   -- FOR EACH ROW
547   PROCEDURE AfterRowInsertUpdate2(
548     p_inserting IN BOOLEAN,
549     p_updating IN BOOLEAN,
550     p_deleting IN BOOLEAN
551     ) AS
552   ------------------------------------------------------------------------------
553   -- Change History:
554   -- Who         When            What
555   -- SVANUKUR    27-NOV-2003      added logic to create a TODO record of the TODO type FEE_RECALC
556   --                              If a record is being inserted/updated/deleted
557   ------------------------------------------------------------------------------
558         v_tmp_end_dt    DATE;
559         v_sequence_number NUMBER;
560         v_unit_set VARCHAR2(1);
561 
562         --check if the unit set attempt being inserted/update/deleted is
563         --of type 'PRE-ENROLL'
564         CURSOR c_unit_set(cp_unit_set_cd IGS_EN_UNIT_SET.unit_set_cd%TYPE) IS
565         SELECT 'X'
566         FROM IGS_EN_UNIT_SET us,
567              IGS_EN_UNIT_SET_CAT usc
568         WHERE us.unit_set_cd = cp_unit_set_cd
569         AND us.unit_set_cat = usc.unit_set_cat
570         AND usc.unit_set_cat = 'PRE-ENROLL';
571 
572 
573 
574   BEGIN
575         -- If trigger has not been disabled, perform required processing
576         -- Warning: disabling has been done for IGS_EN_GEN_013.ENRP_UPD_SUSA_END_DT and
577         -- IGS_EN_GEN_013.ENRP_UPD_SUSA_SCI processing which occurs within the after statment
578         -- trigger. If wishing to disable the triggers, use a different table name as
579         -- an identifier eg. 'STUDENT_UNIT_SET_ATTEMPT2'
580         IF igs_as_val_suaap.genp_val_sdtt_sess('IGS_AS_SU_SETATMPT') THEN
581                 -- Validate the the IGS_PS_UNIT set is able to be created
582                 -- with the IGS_PS_UNIT set status being valid and the
583                 -- expiry date not set. If set then IGS_PE_PERSON must have
584                 -- previously selected it.
585                 IF p_inserting THEN
586                         -- Validate the the IGS_PS_UNIT set is able to be created
587                         -- with the IGS_PS_UNIT set status being valid and the
588                         -- expiry date not set. If set then IGS_PE_PERSON must have
589                         -- previously selected it. (IGS_EN_VAL_SUSA.enrp_val_susa_us_act)
590                         -- Cannot call modules because trigger will be mutating.
591                         -- Save the rowid of the current row.
592                         RowValMutation(
593                                 p_inserting ,
594                                 p_updating ,
595                                 p_deleting ,
596                                 NULL ,
597                                 NULL ,
598                                 'N',
599                                 'N'
600                                 );
601                 END IF;
602                 -- Validate if the IGS_PS_UNIT set parent relationship.
603                 IF p_inserting OR
604                   (p_updating AND
605                    ((NVL(new_references.parent_unit_set_cd, 'NULL')
606                         <> NVL(old_references.parent_unit_set_cd, 'NULL')) OR
607                    (NVL(new_references.parent_sequence_number, 0)
608                         <> NVL(old_references.parent_sequence_number, 0)))) THEN
609                         -- Validate if the IGS_PS_UNIT set is to be defined as a subordinate or if
610                         -- relationship specified, that it is valid within the IGS_PS_COURSE offering
611                         -- (IGS_EN_VAL_SUSA.enrp_val_susa_cousr).
612                         -- Validate if the parent IGS_PS_UNIT set has a null end date, IGS_PS_UNIT set is
613                         -- not being linked to itself (directly or indirectly). Cannot be
614                         -- confirmed if parent is unconfirmed (IGS_EN_VAL_SUSA.enrp_val_susa_parent).
615                         -- Cannot call modules because trigger will be mutating.
616                         -- Save the rowid of the current row setting the parent IGS_PS_UNIT set field to
617                         -- indicate to perform parent IGS_PS_UNIT set code validation
618                         RowValMutation(
619                                 p_inserting ,
620                                 p_updating ,
621                                 p_deleting ,
622                                 new_references.parent_unit_set_cd ,
623                                 NULL ,
624                                 'N',
625                                 'N'
626                                 );
627                 END IF;
628                 -- Validate the end date, check if the authorisation details
629                 -- need to be set or if more than one open end dated instance
630                 -- of the IGS_PS_UNIT set exists. Also cannot be cleared if parent ended.
631                 -- If part of the admissions offer, authorisation required to end
632                 -- the IGS_PS_UNIT set.
633                 IF p_inserting OR
634                     (NVL(new_references.end_dt,IGS_GE_DATE.IGSDATE('1900/01/01'))
635                          <> NVL(old_references.end_dt, IGS_GE_DATE.IGSDATE('1900/01/01'))) THEN
636                         -- Store away the rowid as the validation will cause a mutating trigger.
637                         -- Set the end date field to indicate validation required for end date.
638                         -- If p_inserting, validation is still to occur. If end_is null then set it
639                         -- such that validation will happen in the after statement trigger.
640                         IF p_inserting AND
641                            (NVL(new_references.end_dt, IGS_GE_DATE.IGSDATE('1900/01/01'))
642                                          = IGS_GE_DATE.IGSDATE('1900/01/01')) THEN
643                                 v_tmp_end_dt := IGS_GE_DATE.IGSDATE('1900/01/01');
644                         ELSE
645                                 v_tmp_end_dt := new_references.end_dt;
646                         END IF;
647                         RowValMutation(
648                                 p_inserting ,
649                                 p_updating ,
650                                 p_deleting ,
651                                 NULL ,
652                                 v_tmp_end_dt,
653                                 'N',
654                                 'N'
655                                 );
656                 END IF;
657                 -- Validate if the IGS_PS_UNIT set parent relationship.
658                 IF (p_inserting AND new_references.student_confirmed_ind = 'Y') OR
659                   (p_updating AND
660                    (new_references.student_confirmed_ind  <> old_references.student_confirmed_ind)) THEN
661                         -- Validate that the IGS_PS_UNIT set is not confirmed when the student IGS_PS_COURSE
662                         -- attempt is unconfirmed.
663                         -- Also check that not unset one end date or complete date set. Cannot be
664                         -- confirmed and linked to a parent that is unconfirmed. Cannot be
665                         -- confirmed if encumbrances exist.
666                         -- Cannot call modules because trigger will be mutating.
667                         -- Save the rowid of the current row setting the student confirmed field to
668                         -- indicate to perform student_confirmed_ind validation
669                         RowValMutation(
670                                 p_inserting ,
671                                 p_updating ,
672                                 p_deleting ,
673                                 NULL ,
674                                 NULL,
675                                 new_references.student_confirmed_ind,
676                                 'N'
677                                 );
678                 END IF;
679                 -- Validate if the primary set indicator.
680                 IF p_inserting OR
681                   (p_updating AND
682                    (new_references.primary_set_ind  <> old_references.primary_set_ind)) THEN
683                         -- Validate the primary set indicator is only set for
684                         -- non-administrative sets and that there does not already
685                         -- exist a IGS_PS_UNIT set that has a higher rank.
686                         -- Cannot call modules because trigger will be mutating.
687                         -- Save the rowid of the current row setting the primary_set field to
688                         -- indicate to perform primary_set_ind validation
689                         RowValMutation(
690                                 p_inserting ,
691                                 p_updating ,
692                                 p_deleting ,
693                                 NULL ,
694                                 NULL,
695                                 'N',
696                                 new_references.primary_set_ind
697                                 );
698                 END IF;
699         END IF;
700         IF p_inserting OR p_updating THEN
701            v_unit_set := NULL;
702            OPEN c_unit_set(new_references.unit_set_cd);
703            FETCH c_unit_set INTO v_unit_set;
704            CLOSE c_unit_set;
705            IF v_unit_set IS NOT NULL THEN
706                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
707                                         new_references.person_id,
708                                         'FEE_RECALC',
709                                         SYSDATE,
710                                         'Y');
711            END IF;
712         ELSE
713            v_unit_set := NULL;
714            OPEN c_unit_set(old_references.unit_set_cd);
715            FETCH c_unit_set INTO v_unit_set;
716            CLOSE c_unit_set;
717            IF v_unit_set IS NOT NULL THEN
718                 v_sequence_number := IGS_GE_GEN_003.GENP_INS_STDNT_TODO(
719                                         old_references.person_id,
720                                         'FEE_RECALC',
721                                         SYSDATE,
722                                         'Y');
723            END IF;
724         END IF;
725   END AfterRowInsertUpdate2;
726   -- Trigger description :-
727   -- "OSS_TST".trg_susa_ar_ud_hist
728   -- AFTER DELETE OR UPDATE
729   -- ON IGS_AS_SU_SETATMPT
730   -- FOR EACH ROW
731   PROCEDURE AfterRowUpdateDelete3(
732     p_inserting IN BOOLEAN,
733     p_updating IN BOOLEAN,
734     p_deleting IN BOOLEAN
735     ) AS
736         v_message_name  VARCHAR2(30);
737   BEGIN
738         IF p_updating THEN
739                 -- Create IGS_AS_SU_SETATMPT history record.
740                 IGS_EN_GEN_010.ENRP_INS_SUSA_HIST (
741                         new_references.person_id,
742                         new_references.course_cd,
743                         new_references.unit_set_cd,
744                         new_references.sequence_number,
745                         new_references.us_version_number,
746                         old_references.us_version_number ,
747                         new_references.selection_dt,
748                         old_references.selection_dt,
749                         new_references.student_confirmed_ind,
750                         old_references.student_confirmed_ind,
751                         new_references.end_dt,
752                         old_references.end_dt,
753                         new_references.parent_unit_set_cd,
754                         old_references.parent_unit_set_cd,
755                         new_references.parent_sequence_number,
756                         old_references.parent_sequence_number,
757                         new_references.primary_set_ind,
758                         old_references.primary_set_ind,
759                         new_references.voluntary_end_ind,
760                         old_references.voluntary_end_ind,
761                         new_references.authorised_person_id,
762                         old_references.authorised_person_id,
763                         new_references.authorised_on,
764                         old_references.authorised_on,
765                         new_references.override_title,
766                         old_references.override_title,
767                         new_references.rqrmnts_complete_ind,
768                         old_references.rqrmnts_complete_ind,
769                         new_references.rqrmnts_complete_dt,
770                         old_references.rqrmnts_complete_dt,
771                         new_references.s_completed_source_type,
772                         old_references.s_completed_source_type,
773                         new_references.catalog_cal_type ,
774                         old_references.catalog_cal_type ,
775                         new_references.catalog_seq_num ,
776                         old_references.catalog_seq_num ,
777                         new_references.last_updated_by,
778                         old_references.last_updated_by,
779                         new_references.last_update_date,
780                         old_references.last_update_date);
781         END IF;
782         IF p_deleting THEN
783                 -- Delete IGS_AS_SU_SETATMPT history records.
784                 IF IGS_EN_GEN_001.ENRP_DEL_SUSA_HIST (
785                                 old_references.person_id,
786                                 old_references.course_cd,
787                                 old_references.unit_set_cd,
788                                 old_references.sequence_number,
789                                 v_message_name) = FALSE THEN
790                      Fnd_Message.Set_Name('IGS', v_message_name);
791                      IGS_GE_MSG_STACK.ADD;
792                      App_Exception.Raise_Exception;
793                 END IF;
794         END IF;
795   END AfterRowUpdateDelete3;
796   -- Trigger description :-
797   -- "OSS_TST".trg_susa_as_iu
798   -- AFTER INSERT OR UPDATE
799   -- ON IGS_AS_SU_SETATMPT
800 
801   PROCEDURE Check_Parent_Existance AS
802 
803     -- check if the parent unit set is a valid one
804     CURSOR c_parent_rel_exists IS
805 
806     SELECT	'x'
807    		FROM	IGS_PS_OF_UNT_SET_RL cousr,
808  			IGS_AS_SU_SETATMPT susa,
809  			IGS_EN_STDNT_PS_ATT spa
810    		WHERE	spa.person_id = susa.person_id AND
811  			spa.course_cd = susa.course_cd AND
812  			susa.person_id = new_references.person_id AND
813  			susa.course_cd = new_references.course_cd AND
814  			susa.unit_set_cd = new_references.parent_unit_set_cd AND
815  			susa.sequence_number = new_references.parent_sequence_number AND
816  			cousr.course_cd 		= spa.course_cd			AND
817    			cousr.crv_version_number	= spa.version_number		AND
818    			cousr.cal_type			= spa.cal_type			AND
819    			cousr.sub_unit_set_cd		= new_references.unit_set_cd			AND
820    			cousr.sub_us_version_number 	= new_references.us_version_number		AND
821    			cousr.sup_unit_set_cd		= susa.unit_set_cd		AND
822    			cousr.sup_us_version_number	= susa.us_version_number;
823    l_dummy VARCHAR2(1);
824 
825   BEGIN
826 
827      IF (new_references.parent_unit_set_cd IS NOT NULL AND
828          new_references.parent_sequence_number IS NOT NULL) THEN
829        OPEN c_parent_rel_exists;
830        FETCH c_parent_rel_exists INTO l_dummy;
831        IF c_parent_rel_exists%NOTFOUND THEN
832          CLOSE c_parent_rel_exists;
833      	Fnd_Message.Set_Name ('IGS', 'IGS_EN_UNIT_SET_RELATIONSHIP');
834          IGS_GE_MSG_STACK.ADD;
835          App_Exception.Raise_Exception;
836        END IF;
837        CLOSE c_parent_rel_exists;
838      END IF;
839 
840 
841     IF (((old_references.person_id = new_references.person_id) AND
842          (old_references.course_cd = new_references.course_cd)) OR
843         (new_references.person_id IS NULL) OR
844         (new_references.course_cd IS NULL)) THEN
845       NULL;
846     ELSE
847        IF  NOT IGS_EN_STDNT_PS_ATT_PKG.Get_PK_For_Validation (
848         new_references.person_id,
849         new_references.course_cd
850         ) THEN
851           Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
852           IGS_GE_MSG_STACK.ADD;
853           App_Exception.Raise_Exception;
854        END IF;
855     END IF;
856     IF (((old_references.person_id = new_references.person_id) AND
857          (old_references.course_cd = new_references.course_cd) AND
858          (old_references.parent_unit_set_cd = new_references.parent_unit_set_cd) AND
859          (old_references.parent_sequence_number = new_references.parent_sequence_number)) OR
860         (new_references.person_id IS NULL) OR
861         (new_references.course_cd IS NULL) OR
862         (new_references.parent_unit_set_cd IS NULL) OR
863         (new_references.parent_sequence_number IS NULL)) THEN
864       NULL;
865     ELSE
866       IF  NOT IGS_AS_SU_SETATMPT_PKG.Get_PK_For_Validation (
867         new_references.person_id,
868         new_references.course_cd,
869         new_references.parent_unit_set_cd,
870         new_references.parent_sequence_number
871         )THEN
872          Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
873          IGS_GE_MSG_STACK.ADD;
874          App_Exception.Raise_Exception;
875       END IF;
876     END IF;
877     IF (((old_references.unit_set_cd = new_references.unit_set_cd) AND
878          (old_references.us_version_number = new_references.us_version_number)) OR
879         (new_references.unit_set_cd IS NULL) OR
880         (new_references.us_version_number IS NULL)) THEN
881       NULL;
882     ELSE
883       IF  NOT IGS_EN_UNIT_SET_PKG.Get_PK_For_Validation (
884         new_references.unit_set_cd,
885         new_references.us_version_number
886         )THEN
887          Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
888          IGS_GE_MSG_STACK.ADD;
889          App_Exception.Raise_Exception;
890       END IF;
891     END IF;
892   END Check_Parent_Existance;
893 
894 PROCEDURE Check_Constraints (
895  Column_Name    IN      VARCHAR2        ,
896  Column_Value   IN      VARCHAR2
897  )
898  AS
899  BEGIN
900 
901       IF  column_name IS NULL THEN
902          NULL;
903       ELSIF UPPER(Column_name) = 'AUTHORISED_PERSON_ID' THEN
904          new_references.authorised_person_id:= column_value;
905       ELSIF UPPER(Column_name) = 'COURSE_CD' THEN
906          new_references.course_cd:= column_value;
907       ELSIF UPPER(Column_name) = 'OVERRIDE_TITLE' THEN
908          new_references.override_title:= column_value;
909       ELSIF UPPER(Column_name) = 'PARENT_SEQUENCE_NUMBER' THEN
910          new_references.parent_sequence_number:= igs_ge_number.to_num(column_value);
911       ELSIF UPPER(Column_name) = 'PARENT_UNIT_SET_CD' THEN
912          new_references.parent_unit_set_cd:= column_value;
913       ELSIF UPPER(Column_name) = 'PRIMARY_SET_IND' THEN
914          new_references.primary_set_ind:= column_value;
915       ELSIF UPPER(Column_name) = 'RQRMNTS_COMPLETE_IND' THEN
916          new_references.rqrmnts_complete_ind:= column_value;
917       ELSIF UPPER(Column_name) = 'S_COMPLETED_SOURCE_TYPE' THEN
918          new_references.s_completed_source_type:= column_value;
919       ELSIF UPPER(Column_name) = 'SEQUENCE_NUMBER' THEN
920          new_references.sequence_number:= column_value;
921       ELSIF UPPER(Column_name) = 'STUDENT_CONFIRMED_IND' THEN
922          new_references.student_confirmed_ind:= column_value;
923       ELSIF UPPER(Column_name) = 'UNIT_SET_CD' THEN
924          new_references.unit_set_cd:= column_value;
925       ELSIF UPPER(Column_name) = 'VOLUNTARY_END_IND' THEN
926          new_references.voluntary_end_ind:= column_value;
927       END IF;
928 
929      IF UPPER(column_name) = 'AUTHORISED_PERSON_ID' OR
930         column_name IS NULL THEN
931         IF (new_references.authorised_person_id  < 0  AND   new_references.authorised_person_id  > 9999999999)  THEN
932           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
933           IGS_GE_MSG_STACK.ADD;
934           App_Exception.Raise_Exception;
935         END IF;
936      END IF;
937 
938      IF UPPER(column_name) = 'COURSE_CD' OR
939         column_name IS NULL THEN
940         IF new_references.course_cd <> UPPER(new_references.course_cd) THEN
941           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
942           IGS_GE_MSG_STACK.ADD;
943           App_Exception.Raise_Exception;
944         END IF;
945      END IF;
946 
947      IF UPPER(column_name) = 'PARENT_SEQUENCE_NUMBER' OR
948         column_name IS NULL THEN
949         IF  new_references.parent_sequence_number < 1  AND   new_references.parent_sequence_number > 999999  THEN
950           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
951           IGS_GE_MSG_STACK.ADD;
952           App_Exception.Raise_Exception;
953         END IF;
954      END IF;
955      IF UPPER(column_name) = 'PARENT_UNIT_SET_CD' OR
956         column_name IS NULL THEN
957         IF new_references.parent_unit_set_cd <> UPPER(new_references.parent_unit_set_cd) THEN
958           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
959           IGS_GE_MSG_STACK.ADD;
960           App_Exception.Raise_Exception;
961         END IF;
962      END IF;
963      IF UPPER(column_name) = 'PRIMARY_SET_IND' OR
964         column_name IS NULL THEN
965         IF new_references.primary_set_ind <> UPPER(new_references.primary_set_ind) OR new_references.primary_set_ind  NOT IN ( 'Y' , 'N' )  THEN
966           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
967           IGS_GE_MSG_STACK.ADD;
968           App_Exception.Raise_Exception;
969         END IF;
970      END IF;
971      IF UPPER(column_name) = 'RQRMNTS_COMPLETE_IND' OR
972         column_name IS NULL THEN
973         IF new_references.rqrmnts_complete_ind <> UPPER(new_references.rqrmnts_complete_ind) OR new_references.rqrmnts_complete_ind NOT IN ( 'Y' , 'N' ) THEN
974           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
975           IGS_GE_MSG_STACK.ADD;
976           App_Exception.Raise_Exception;
977         END IF;
978      END IF;
979      IF UPPER(column_name) = 'S_COMPLETED_SOURCE_TYPE' OR
980         column_name IS NULL THEN
981         IF new_references.s_completed_source_type <> UPPER(new_references.s_completed_source_type) OR (new_references.s_completed_source_type NOT IN ( 'SYSTEM' , 'MANUAL' )) THEN
982           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
983           IGS_GE_MSG_STACK.ADD;
984           App_Exception.Raise_Exception;
985         END IF;
986      END IF;
987      IF UPPER(column_name) = 'SEQUENCE_NUMBER' OR
988         column_name IS NULL THEN
989         IF  new_references.sequence_number < 1  AND   new_references.sequence_number > 999999  THEN
990           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
991           IGS_GE_MSG_STACK.ADD;
992           App_Exception.Raise_Exception;
993         END IF;
994      END IF;
995      IF UPPER(column_name) = 'STUDENT_CONFIRMED_IND' OR
996         column_name IS NULL THEN
997         IF new_references.student_confirmed_ind <> UPPER(new_references.student_confirmed_ind) OR new_references.student_confirmed_ind NOT IN ( 'Y' , 'N' ) THEN
998           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
999           IGS_GE_MSG_STACK.ADD;
1000           App_Exception.Raise_Exception;
1001         END IF;
1002      END IF;
1003      IF UPPER(column_name) = 'UNIT_SET_CD' OR
1004         column_name IS NULL THEN
1005         IF new_references.unit_set_cd <> UPPER(new_references.unit_set_cd) THEN
1006           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
1007           IGS_GE_MSG_STACK.ADD;
1008           App_Exception.Raise_Exception;
1009         END IF;
1010      END IF;
1011      IF UPPER(column_name) = 'VOLUNTARY_END_IND' OR
1012         column_name IS NULL THEN
1013         IF new_references.voluntary_end_ind <> UPPER(new_references.voluntary_end_ind) OR new_references.voluntary_end_ind NOT IN ( 'Y' , 'N' ) THEN
1014           Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
1015           IGS_GE_MSG_STACK.ADD;
1016           App_Exception.Raise_Exception;
1017         END IF;
1018      END IF;
1019  END Check_Constraints;
1020 
1021 
1022   PROCEDURE Check_Child_Existance AS
1023   BEGIN
1024     IGS_AS_SU_SETATMPT_PKG.GET_FK_IGS_AS_SU_SETATMPT (
1025       OLD_references.person_id,
1026       OLD_references.course_cd,
1027       OLD_references.unit_set_cd,
1028       OLD_references.sequence_number
1029       );
1030   END Check_Child_Existance;
1031 FUNCTION Get_PK_For_Validation (
1032     x_person_id IN NUMBER,
1033     x_course_cd IN VARCHAR2,
1034     x_unit_set_cd IN VARCHAR2,
1035     x_sequence_number IN NUMBER
1036     ) RETURN BOOLEAN AS
1037     CURSOR cur_rowid IS
1038       SELECT   ROWID
1039       FROM     IGS_AS_SU_SETATMPT
1040       WHERE    person_id = x_person_id
1041       AND      course_cd = x_course_cd
1042       AND      unit_set_cd = x_unit_set_cd
1043       AND      sequence_number = x_sequence_number
1044       FOR UPDATE NOWAIT;
1045     lv_rowid cur_rowid%ROWTYPE;
1046   BEGIN
1047     OPEN cur_rowid;
1048     FETCH cur_rowid INTO lv_rowid;
1049  IF (cur_rowid%FOUND) THEN
1050        CLOSE cur_rowid;
1051        RETURN (TRUE);
1052  ELSE
1053        CLOSE cur_rowid;
1054        RETURN (FALSE);
1055  END IF;
1056   END Get_PK_For_Validation;
1057   PROCEDURE GET_FK_IGS_EN_STDNT_PS_ATT (
1058     x_person_id IN NUMBER,
1059     x_course_cd IN VARCHAR2
1060     ) AS
1061     CURSOR cur_rowid IS
1062       SELECT   ROWID
1063       FROM     IGS_AS_SU_SETATMPT
1064       WHERE    person_id = x_person_id
1065       AND      course_cd = x_course_cd ;
1066     lv_rowid cur_rowid%ROWTYPE;
1067   BEGIN
1068     OPEN cur_rowid;
1069     FETCH cur_rowid INTO lv_rowid;
1070     IF (cur_rowid%FOUND) THEN
1071       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUSA_SCA_FK');
1072       IGS_GE_MSG_STACK.ADD;
1073       CLOSE cur_rowid;
1074       App_Exception.Raise_Exception;
1075 
1076       RETURN;
1077     END IF;
1078     CLOSE cur_rowid;
1079   END GET_FK_IGS_EN_STDNT_PS_ATT;
1080   PROCEDURE GET_FK_IGS_AS_SU_SETATMPT (
1081     x_person_id IN NUMBER,
1082     x_course_cd IN VARCHAR2,
1083     x_unit_set_cd IN VARCHAR2,
1084     x_sequence_number IN NUMBER
1085     ) AS
1086     CURSOR cur_rowid IS
1087       SELECT   ROWID
1088       FROM     IGS_AS_SU_SETATMPT
1089       WHERE    person_id = x_person_id
1090       AND      course_cd = x_course_cd
1091       AND      parent_unit_set_cd = x_unit_set_cd
1092       AND      parent_sequence_number = x_sequence_number ;
1093     lv_rowid cur_rowid%ROWTYPE;
1094   BEGIN
1095     OPEN cur_rowid;
1096     FETCH cur_rowid INTO lv_rowid;
1097     IF (cur_rowid%FOUND) THEN
1098       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUSA_SUSA_PRNT_FK');
1099       IGS_GE_MSG_STACK.ADD;
1100       CLOSE cur_rowid;
1101       App_Exception.Raise_Exception;
1102 
1103       RETURN;
1104     END IF;
1105     CLOSE cur_rowid;
1106   END GET_FK_IGS_AS_SU_SETATMPT;
1107   PROCEDURE GET_FK_IGS_EN_UNIT_SET (
1108     x_unit_set_cd IN VARCHAR2,
1109     x_version_number IN NUMBER
1110     ) AS
1111     CURSOR cur_rowid IS
1112       SELECT   ROWID
1113       FROM     IGS_AS_SU_SETATMPT
1114       WHERE    unit_set_cd = x_unit_set_cd
1115       AND      us_version_number = x_version_number ;
1116     lv_rowid cur_rowid%ROWTYPE;
1117   BEGIN
1118     OPEN cur_rowid;
1119     FETCH cur_rowid INTO lv_rowid;
1120     IF (cur_rowid%FOUND) THEN
1121       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUSA_US_FK');
1122       IGS_GE_MSG_STACK.ADD;
1123       CLOSE cur_rowid;
1124       App_Exception.Raise_Exception;
1125 
1126       RETURN;
1127     END IF;
1128     CLOSE cur_rowid;
1129   END GET_FK_IGS_EN_UNIT_SET;
1130 
1131 
1132 
1133   PROCEDURE GET_FK_IGS_CA_INST (
1134     X_CATALOG_CAL_TYPE IN VARCHAR2,
1135     X_CATALOG_SEQ_NUM IN NUMBER
1136     ) AS
1137     CURSOR cur_rowid IS
1138       SELECT ROWID
1139       FROM   IGS_AS_SU_SETATMPT
1140       WHERE  CATALOG_CAL_TYPE = X_CATALOG_CAL_TYPE
1141             AND  CATALOG_SEQ_NUM = X_CATALOG_SEQ_NUM
1142           ;
1143 
1144     lv_rowid cur_rowid%ROWTYPE;
1145 
1146   BEGIN
1147     OPEN cur_rowid;
1148     FETCH cur_rowid INTO lv_rowid;
1149     IF (cur_rowid%FOUND) THEN
1150       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUSA_CI_FK');
1151       Igs_Ge_Msg_Stack.ADD;
1152       CLOSE cur_rowid;
1153       App_Exception.Raise_Exception;
1154       RETURN;
1155     END IF;
1156     CLOSE cur_rowid;
1157   END GET_FK_IGS_CA_INST;
1158 
1159   PROCEDURE GET_FK_IGS_PS_OFR_UNIT_SET (
1160     x_course_cd IN VARCHAR2,
1161     x_version_number IN NUMBER,
1162     x_cal_type IN VARCHAR2,
1163     x_unit_set_cd IN VARCHAR2,
1164     x_us_version_number IN NUMBER
1165     ) AS
1166   /*************************************************************
1167   Created By :sarakshi
1168   Date Created By :29-May-2006
1169   Purpose :
1170   Know limitations, enhancements or remarks
1171   Change History
1172   Who             When            What
1173 
1174   (reverse chronological order - newest change first)
1175   ***************************************************************/
1176     CURSOR cur_rowid IS
1177     SELECT   a.rowid
1178     FROM   igs_as_su_setatmpt a, igs_en_stdnt_ps_att b
1179     WHERE  a.course_cd=b.course_cd
1180     AND    a.person_id=b.person_id
1181     AND    b.course_cd=x_course_cd
1182     AND    b.version_number=x_version_number
1183     AND    b.cal_type = x_cal_type
1184     AND    a.unit_set_cd = x_unit_set_cd
1185     AND    a.us_version_number = x_us_version_number ;
1186 
1187     lv_rowid cur_rowid%RowType;
1188 
1189   BEGIN
1190 
1191     Open cur_rowid;
1192     Fetch cur_rowid INTO lv_rowid;
1193     IF (cur_rowid%FOUND) THEN
1194       Close cur_rowid;
1195       Fnd_Message.Set_Name ('IGS', 'IGS_AS_SUSA_US_FK');
1196       IGS_GE_MSG_STACK.ADD;
1197       App_Exception.Raise_Exception;
1198       Return;
1199     END IF;
1200     Close cur_rowid;
1201 
1202   END GET_FK_IGS_PS_OFR_UNIT_SET;
1203 
1204   PROCEDURE Before_DML (
1205     p_action IN VARCHAR2,
1206     x_rowid IN VARCHAR2 ,
1207     x_person_id IN NUMBER ,
1208     x_course_cd IN VARCHAR2 ,
1209     x_unit_set_cd IN VARCHAR2 ,
1210     x_us_version_number IN NUMBER ,
1211     x_sequence_number IN NUMBER ,
1212     x_selection_dt IN DATE ,
1213     x_student_confirmed_ind IN VARCHAR2 ,
1214     x_end_dt IN DATE ,
1215     x_parent_unit_set_cd IN VARCHAR2 ,
1216     x_parent_sequence_number IN NUMBER ,
1217     x_primary_set_ind IN VARCHAR2 ,
1218     x_voluntary_end_ind IN VARCHAR2 ,
1219     x_authorised_person_id IN NUMBER ,
1220     x_authorised_on IN DATE ,
1221     x_override_title IN VARCHAR2 ,
1222     x_rqrmnts_complete_ind IN VARCHAR2 ,
1223     x_rqrmnts_complete_dt IN DATE ,
1224     x_s_completed_source_type IN VARCHAR2 ,
1225     x_creation_date IN DATE ,
1226     x_created_by IN NUMBER ,
1227     x_last_update_date IN DATE ,
1228     x_last_updated_by IN NUMBER ,
1229     x_last_update_login IN NUMBER ,
1230     x_catalog_cal_type IN VARCHAR2 ,
1231     x_catalog_seq_num IN NUMBER ,
1232     x_attribute_category IN VARCHAR2 ,
1233     x_attribute1 IN VARCHAR2 ,
1234     x_attribute2 IN VARCHAR2 ,
1235     x_attribute3 IN VARCHAR2 ,
1236     x_attribute4 IN VARCHAR2 ,
1237     x_attribute5 IN VARCHAR2 ,
1238     x_attribute6 IN VARCHAR2 ,
1239     x_attribute7 IN VARCHAR2 ,
1240     x_attribute8 IN VARCHAR2 ,
1241     x_attribute9 IN VARCHAR2 ,
1242     x_attribute10 IN VARCHAR2 ,
1243     x_attribute11 IN VARCHAR2 ,
1244     x_attribute12 IN VARCHAR2 ,
1245     x_attribute13 IN VARCHAR2 ,
1246     x_attribute14 IN VARCHAR2 ,
1247     x_attribute15 IN VARCHAR2 ,
1248     x_attribute16 IN VARCHAR2 ,
1249     x_attribute17 IN VARCHAR2 ,
1250     x_attribute18 IN VARCHAR2 ,
1251     x_attribute19 IN VARCHAR2 ,
1252     x_attribute20 IN VARCHAR2
1253   ) AS
1254   BEGIN
1255     Set_Column_Values (
1256       p_action,
1257       x_rowid,
1258       x_person_id,
1259       x_course_cd,
1260       x_unit_set_cd,
1261       x_us_version_number,
1262       x_sequence_number,
1263       x_selection_dt,
1264       x_student_confirmed_ind,
1265       x_end_dt,
1266       x_parent_unit_set_cd,
1267       x_parent_sequence_number,
1268       x_primary_set_ind,
1269       x_voluntary_end_ind,
1270       x_authorised_person_id,
1271       x_authorised_on,
1272       x_override_title,
1273       x_rqrmnts_complete_ind,
1274       x_rqrmnts_complete_dt,
1275       x_s_completed_source_type,
1276       x_catalog_cal_type,
1277       x_catalog_seq_num,
1278       x_attribute_category,
1279       x_attribute1,
1280       x_attribute2,
1281       x_attribute3,
1282       x_attribute4,
1283       x_attribute5,
1284       x_attribute6,
1285       x_attribute7,
1286       x_attribute8,
1287       x_attribute9,
1288       x_attribute10,
1289       x_attribute11,
1290       x_attribute12,
1291       x_attribute13,
1292       x_attribute14,
1293       x_attribute15,
1294       x_attribute16,
1295       x_attribute17,
1296       x_attribute18,
1297       x_attribute19,
1298       x_attribute20,
1299       x_creation_date,
1300       x_created_by,
1301       x_last_update_date,
1302       x_last_updated_by,
1303       x_last_update_login
1304     );
1305 
1306  IF (p_action = 'INSERT') THEN
1307        -- Call all the procedures related to Before Insert.
1308       BeforeRowInsertUpdateDelete1 ( p_inserting => TRUE, p_updating=> FALSE,  p_deleting=> FALSE );
1309       IF  Get_PK_For_Validation (
1310              new_references.person_id,
1311              new_references.course_cd,
1312              new_references.unit_set_cd,
1313              new_references.sequence_number
1314            ) THEN
1315          Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
1316          IGS_GE_MSG_STACK.ADD;
1317           App_Exception.Raise_Exception;
1318       END IF;
1319       Check_Constraints;
1320       Check_Parent_Existance;
1321  ELSIF (p_action = 'UPDATE') THEN
1322        -- Call all the procedures related to Before Update.
1323       BeforeRowInsertUpdateDelete1 ( p_inserting => FALSE, p_updating=> TRUE,  p_deleting=> FALSE );
1324        Check_Constraints; -- if procedure present
1325        Check_Parent_Existance; -- if procedure present
1326  ELSIF (p_action = 'DELETE') THEN
1327        -- Call all the procedures related to Before Delete.
1328       BeforeRowInsertUpdateDelete1 ( p_inserting => FALSE, p_updating=> FALSE,  p_deleting=> TRUE );
1329        Check_Child_Existance; -- if procedure present
1330     ELSIF (p_action = 'VALIDATE_INSERT') THEN
1331       IF  Get_PK_For_Validation (
1332              new_references.person_id,
1333              new_references.course_cd,
1334              new_references.unit_set_cd,
1335              new_references.sequence_number
1336            ) THEN
1337          Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
1338          IGS_GE_MSG_STACK.ADD;
1339           App_Exception.Raise_Exception;
1340       END IF;
1341                 Check_Constraints;
1342     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
1343                 Check_Constraints;
1344     ELSIF (p_action = 'VALIDATE_DELETE') THEN
1345               Check_Child_Existance;
1346 
1347  END IF;
1348 
1349   END Before_DML;
1350 
1351 
1352   PROCEDURE After_DML (
1353     p_action IN VARCHAR2,
1354     x_rowid IN VARCHAR2
1355   ) AS
1356   ------------------------------------------------------------------------------
1357   -- Change History:
1358   -- Who         When            What
1359   -- svanukur    27-NOV-2003     added call to AfterRowInsertUpdate2 if p_action=delete
1360   ------------------------------------------------------------------------------
1361   BEGIN
1362     l_rowid := x_rowid;
1363     IF (p_action = 'INSERT') THEN
1364       -- Call all the procedures related to After Insert.
1365       AfterRowInsertUpdate2 ( p_inserting => TRUE, p_updating => FALSE, p_deleting => FALSE);
1366     ELSIF (p_action = 'UPDATE') THEN
1367       -- Call all the procedures related to After Update.
1368       AfterRowInsertUpdate2 ( p_inserting => FALSE, p_updating => TRUE, p_deleting => FALSE);
1369       AfterRowUpdateDelete3 ( p_inserting => FALSE, p_updating => TRUE, p_deleting => FALSE);
1370     ELSIF (p_action = 'DELETE') THEN
1371       -- Call all the procedures related to After Delete.
1372       AfterRowUpdateDelete3 ( p_inserting => FALSE, p_updating => FALSE, p_deleting => TRUE);
1373       AfterRowInsertUpdate2 ( p_inserting => FALSE, p_updating => FALSE, p_deleting => TRUE);
1374     END IF;
1375   END After_DML;
1376 --
1377 PROCEDURE INSERT_ROW (
1378   X_ROWID IN OUT NOCOPY VARCHAR2,
1379   X_PERSON_ID IN NUMBER,
1380   X_COURSE_CD IN VARCHAR2,
1381   X_UNIT_SET_CD IN VARCHAR2,
1382   X_SEQUENCE_NUMBER IN NUMBER,
1383   X_US_VERSION_NUMBER IN NUMBER,
1384   X_SELECTION_DT IN DATE,
1385   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
1386   X_END_DT IN DATE,
1387   X_PARENT_UNIT_SET_CD IN VARCHAR2,
1388   X_PARENT_SEQUENCE_NUMBER IN NUMBER,
1389   X_PRIMARY_SET_IND IN VARCHAR2,
1390   X_VOLUNTARY_END_IND IN VARCHAR2,
1391   X_AUTHORISED_PERSON_ID IN NUMBER,
1392   X_AUTHORISED_ON IN DATE,
1393   X_OVERRIDE_TITLE IN VARCHAR2,
1394   X_RQRMNTS_COMPLETE_IND IN VARCHAR2,
1395   X_RQRMNTS_COMPLETE_DT IN DATE,
1396   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
1397   X_CATALOG_CAL_TYPE IN VARCHAR2 ,
1398   X_CATALOG_SEQ_NUM IN NUMBER ,
1399   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
1400   X_ATTRIBUTE1 IN VARCHAR2 ,
1401   X_ATTRIBUTE2 IN VARCHAR2 ,
1402   X_ATTRIBUTE3 IN VARCHAR2 ,
1403   X_ATTRIBUTE4 IN VARCHAR2 ,
1404   X_ATTRIBUTE5 IN VARCHAR2 ,
1405   X_ATTRIBUTE6 IN VARCHAR2 ,
1406   X_ATTRIBUTE7 IN VARCHAR2 ,
1407   X_ATTRIBUTE8 IN VARCHAR2 ,
1408   X_ATTRIBUTE9 IN VARCHAR2 ,
1409   X_ATTRIBUTE10 IN VARCHAR2 ,
1410   X_ATTRIBUTE11 IN VARCHAR2 ,
1411   X_ATTRIBUTE12 IN VARCHAR2 ,
1412   X_ATTRIBUTE13 IN VARCHAR2 ,
1413   X_ATTRIBUTE14 IN VARCHAR2 ,
1414   X_ATTRIBUTE15 IN VARCHAR2 ,
1415   X_ATTRIBUTE16 IN VARCHAR2 ,
1416   X_ATTRIBUTE17 IN VARCHAR2 ,
1417   X_ATTRIBUTE18 IN VARCHAR2 ,
1418   X_ATTRIBUTE19 IN VARCHAR2 ,
1419   X_ATTRIBUTE20 IN VARCHAR2 ,
1420   X_MODE IN VARCHAR2
1421   ) AS
1422     CURSOR C IS SELECT ROWID FROM IGS_AS_SU_SETATMPT
1423       WHERE PERSON_ID = X_PERSON_ID
1424       AND COURSE_CD = X_COURSE_CD
1425       AND UNIT_SET_CD = X_UNIT_SET_CD
1426       AND SEQUENCE_NUMBER = X_SEQUENCE_NUMBER;
1427     X_LAST_UPDATE_DATE DATE;
1428     X_LAST_UPDATED_BY NUMBER;
1429     X_LAST_UPDATE_LOGIN NUMBER;
1430     X_REQUEST_ID NUMBER;
1431     X_PROGRAM_ID NUMBER;
1432     X_PROGRAM_APPLICATION_ID NUMBER;
1433     X_PROGRAM_UPDATE_DATE DATE;
1434 BEGIN
1435   X_LAST_UPDATE_DATE := SYSDATE;
1436   IF(X_MODE = 'I') THEN
1437     X_LAST_UPDATED_BY := 1;
1438     X_LAST_UPDATE_LOGIN := 0;
1439 ELSIF (X_MODE IN ('R', 'S')) THEN
1440     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1441     IF X_LAST_UPDATED_BY IS NULL THEN
1442       X_LAST_UPDATED_BY := -1;
1443     END IF;
1444     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
1445     IF X_LAST_UPDATE_LOGIN IS NULL THEN
1446       X_LAST_UPDATE_LOGIN := -1;
1447    END IF;
1448    X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
1449    X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
1450    X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
1451   IF (X_REQUEST_ID = -1) THEN
1452      X_REQUEST_ID := NULL;
1453      X_PROGRAM_ID := NULL;
1454      X_PROGRAM_APPLICATION_ID := NULL;
1455      X_PROGRAM_UPDATE_DATE := NULL;
1456  ELSE
1457      X_PROGRAM_UPDATE_DATE := SYSDATE;
1458  END IF;
1459   ELSE
1460     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
1461     IGS_GE_MSG_STACK.ADD;
1462     app_exception.raise_exception;
1463   END IF;
1464 --
1465    Before_DML(
1466     p_action=>'INSERT',
1467     x_rowid=>X_ROWID,
1468     x_authorised_on=>X_AUTHORISED_ON,
1469     x_authorised_person_id=>X_AUTHORISED_PERSON_ID,
1470     x_course_cd=>X_COURSE_CD,
1471     x_end_dt=>X_END_DT,
1472     x_override_title=>X_OVERRIDE_TITLE,
1473     x_parent_sequence_number=>X_PARENT_SEQUENCE_NUMBER,
1474     x_parent_unit_set_cd=>X_PARENT_UNIT_SET_CD,
1475     x_person_id=>X_PERSON_ID,
1476     x_primary_set_ind=> NVL(X_PRIMARY_SET_IND,'N'),
1477     x_rqrmnts_complete_dt=>X_RQRMNTS_COMPLETE_DT,
1478     x_rqrmnts_complete_ind=> NVL(X_RQRMNTS_COMPLETE_IND,'N'),
1479     x_s_completed_source_type=>X_S_COMPLETED_SOURCE_TYPE,
1480     x_selection_dt=>X_SELECTION_DT,
1481     x_sequence_number=>X_SEQUENCE_NUMBER,
1482     x_student_confirmed_ind=>X_STUDENT_CONFIRMED_IND,
1483     x_unit_set_cd=>X_UNIT_SET_CD,
1484     x_us_version_number=>X_US_VERSION_NUMBER,
1485     x_voluntary_end_ind=> NVL(X_VOLUNTARY_END_IND,'N'),
1486     x_creation_date=>X_LAST_UPDATE_DATE,
1487     x_created_by=>X_LAST_UPDATED_BY,
1488     x_last_update_date=>X_LAST_UPDATE_DATE,
1489     x_last_updated_by=>X_LAST_UPDATED_BY,
1490     x_last_update_login=>X_LAST_UPDATE_LOGIN,
1491     x_catalog_cal_type => X_CATALOG_CAL_TYPE,
1492     x_catalog_seq_num => X_CATALOG_SEQ_NUM,
1493     x_attribute_category=> X_ATTRIBUTE_CATEGORY,
1494     x_attribute1=>  X_ATTRIBUTE1,
1495     x_attribute2=>  X_ATTRIBUTE2,
1496     x_attribute3=>  X_ATTRIBUTE3,
1497     x_attribute4=>  X_ATTRIBUTE4,
1498     x_attribute5=>  X_ATTRIBUTE5,
1499     x_attribute6=>  X_ATTRIBUTE6,
1500     x_attribute7=>  X_ATTRIBUTE7,
1501     x_attribute8=>  X_ATTRIBUTE8,
1502     x_attribute9=>  X_ATTRIBUTE9,
1503     x_attribute10=>X_ATTRIBUTE10,
1504     x_attribute11=>X_ATTRIBUTE11,
1505     x_attribute12=>X_ATTRIBUTE12,
1506     x_attribute13=>X_ATTRIBUTE13,
1507     x_attribute14=>X_ATTRIBUTE14,
1508     x_attribute15=>X_ATTRIBUTE15,
1509     x_attribute16=>X_ATTRIBUTE16,
1510     x_attribute17=>X_ATTRIBUTE17,
1511     x_attribute18=>X_ATTRIBUTE18,
1512     x_attribute19=>X_ATTRIBUTE19,
1513     x_attribute20=>X_ATTRIBUTE20
1514    );
1515 --
1516   IF (x_mode = 'S') THEN
1517     igs_sc_gen_001.set_ctx('R');
1518   END IF;
1519   INSERT INTO IGS_AS_SU_SETATMPT (
1520     PERSON_ID,
1521     COURSE_CD,
1522     UNIT_SET_CD,
1523     US_VERSION_NUMBER,
1524     SEQUENCE_NUMBER,
1525     SELECTION_DT,
1526     STUDENT_CONFIRMED_IND,
1527     END_DT,
1528     PARENT_UNIT_SET_CD,
1529     PARENT_SEQUENCE_NUMBER,
1530     PRIMARY_SET_IND,
1531     VOLUNTARY_END_IND,
1532     AUTHORISED_PERSON_ID,
1533     AUTHORISED_ON,
1534     OVERRIDE_TITLE,
1535     RQRMNTS_COMPLETE_IND,
1536     RQRMNTS_COMPLETE_DT,
1537     S_COMPLETED_SOURCE_TYPE,
1538     CATALOG_CAL_TYPE,
1539     CATALOG_SEQ_NUM,
1540     CREATION_DATE,
1541     CREATED_BY,
1542     LAST_UPDATE_DATE,
1543     LAST_UPDATED_BY,
1544     LAST_UPDATE_LOGIN,
1545     REQUEST_ID,
1546     PROGRAM_ID,
1547     PROGRAM_APPLICATION_ID,
1548     PROGRAM_UPDATE_DATE,
1549     ATTRIBUTE_CATEGORY,
1550     ATTRIBUTE1,
1551     ATTRIBUTE2,
1552     ATTRIBUTE3,
1553     ATTRIBUTE4,
1554     ATTRIBUTE5,
1555     ATTRIBUTE6,
1556     ATTRIBUTE7,
1557     ATTRIBUTE8,
1558     ATTRIBUTE9,
1559     ATTRIBUTE10,
1560    ATTRIBUTE11,
1561    ATTRIBUTE12,
1562    ATTRIBUTE13,
1563    ATTRIBUTE14,
1564    ATTRIBUTE15,
1565    ATTRIBUTE16,
1566    ATTRIBUTE17,
1567    ATTRIBUTE18,
1568   ATTRIBUTE19,
1569   ATTRIBUTE20
1570   ) VALUES (
1571     NEW_REFERENCES.PERSON_ID,
1572     NEW_REFERENCES.COURSE_CD,
1573     NEW_REFERENCES.UNIT_SET_CD,
1574     NEW_REFERENCES.US_VERSION_NUMBER,
1575     NEW_REFERENCES.SEQUENCE_NUMBER,
1576     NEW_REFERENCES.SELECTION_DT,
1577     NEW_REFERENCES.STUDENT_CONFIRMED_IND,
1578     NEW_REFERENCES.END_DT,
1579     NEW_REFERENCES.PARENT_UNIT_SET_CD,
1580     NEW_REFERENCES.PARENT_SEQUENCE_NUMBER,
1581     NEW_REFERENCES.PRIMARY_SET_IND,
1582     NEW_REFERENCES.VOLUNTARY_END_IND,
1583     NEW_REFERENCES.AUTHORISED_PERSON_ID,
1584     NEW_REFERENCES.AUTHORISED_ON,
1585     NEW_REFERENCES.OVERRIDE_TITLE,
1586     NEW_REFERENCES.RQRMNTS_COMPLETE_IND,
1587     NEW_REFERENCES.RQRMNTS_COMPLETE_DT,
1588     NEW_REFERENCES.S_COMPLETED_SOURCE_TYPE,
1589     NEW_REFERENCES.CATALOG_CAL_TYPE,
1590     NEW_REFERENCES.CATALOG_SEQ_NUM,
1591     X_LAST_UPDATE_DATE,
1592     X_LAST_UPDATED_BY,
1593     X_LAST_UPDATE_DATE,
1594     X_LAST_UPDATED_BY,
1595     X_LAST_UPDATE_LOGIN,
1596     X_REQUEST_ID,
1597     X_PROGRAM_ID,
1598     X_PROGRAM_APPLICATION_ID,
1599     X_PROGRAM_UPDATE_DATE,
1600     NEW_REFERENCES.ATTRIBUTE_CATEGORY,
1601     NEW_REFERENCES.ATTRIBUTE1,
1602     NEW_REFERENCES.ATTRIBUTE2,
1603     NEW_REFERENCES.ATTRIBUTE3,
1604     NEW_REFERENCES.ATTRIBUTE4,
1605     NEW_REFERENCES.ATTRIBUTE5,
1606     NEW_REFERENCES.ATTRIBUTE6,
1607     NEW_REFERENCES.ATTRIBUTE7,
1608     NEW_REFERENCES.ATTRIBUTE8,
1609     NEW_REFERENCES.ATTRIBUTE9,
1610     NEW_REFERENCES.ATTRIBUTE10,
1611     NEW_REFERENCES.ATTRIBUTE11,
1612     NEW_REFERENCES.ATTRIBUTE12,
1613     NEW_REFERENCES.ATTRIBUTE13,
1614     NEW_REFERENCES.ATTRIBUTE14,
1615     NEW_REFERENCES.ATTRIBUTE15,
1616     NEW_REFERENCES.ATTRIBUTE16,
1617     NEW_REFERENCES.ATTRIBUTE17,
1618     NEW_REFERENCES.ATTRIBUTE18,
1619     NEW_REFERENCES.ATTRIBUTE19,
1620     NEW_REFERENCES.ATTRIBUTE20
1621   );
1622  IF (x_mode = 'S') THEN
1623     igs_sc_gen_001.unset_ctx('R');
1624   END IF;
1625 
1626   OPEN c;
1627   FETCH c INTO X_ROWID;
1628   IF (c%NOTFOUND) THEN
1629     CLOSE c;
1630     RAISE NO_DATA_FOUND;
1631   END IF;
1632   CLOSE c;
1633 --
1634  After_DML(
1635   p_action => 'INSERT',
1636   x_rowid => X_ROWID
1637   );
1638 --
1639 EXCEPTION
1640   WHEN OTHERS THEN
1641     IF (SQLCODE IN (-28115, -28113, -28111)) THEN
1642       fnd_message.set_name ('IGS', 'IGS_SC_POLICY_EXCEPTION');
1643       fnd_message.set_token ('ERR_CD', SQLCODE);
1644       igs_ge_msg_stack.add;
1645       igs_sc_gen_001.unset_ctx('R');
1646       app_exception.raise_exception;
1647     ELSE
1648       igs_sc_gen_001.unset_ctx('R');
1649       RAISE;
1650     END IF;
1651 
1652 END INSERT_ROW;
1653 PROCEDURE LOCK_ROW (
1654   X_ROWID IN  VARCHAR2,
1655   X_PERSON_ID IN NUMBER,
1656   X_COURSE_CD IN VARCHAR2,
1657   X_UNIT_SET_CD IN VARCHAR2,
1658   X_SEQUENCE_NUMBER IN NUMBER,
1659   X_US_VERSION_NUMBER IN NUMBER,
1660   X_SELECTION_DT IN DATE,
1661   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
1662   X_END_DT IN DATE,
1663   X_PARENT_UNIT_SET_CD IN VARCHAR2,
1664   X_PARENT_SEQUENCE_NUMBER IN NUMBER,
1665   X_PRIMARY_SET_IND IN VARCHAR2,
1666   X_VOLUNTARY_END_IND IN VARCHAR2,
1667   X_AUTHORISED_PERSON_ID IN NUMBER,
1668   X_AUTHORISED_ON IN DATE,
1669   X_OVERRIDE_TITLE IN VARCHAR2,
1670   X_RQRMNTS_COMPLETE_IND IN VARCHAR2,
1671   X_RQRMNTS_COMPLETE_DT IN DATE,
1672   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
1673   X_CATALOG_CAL_TYPE IN VARCHAR2 ,
1674   X_CATALOG_SEQ_NUM IN NUMBER ,
1675   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
1676   X_ATTRIBUTE1 IN VARCHAR2 ,
1677   X_ATTRIBUTE2 IN VARCHAR2 ,
1678   X_ATTRIBUTE3 IN VARCHAR2 ,
1679   X_ATTRIBUTE4 IN VARCHAR2 ,
1680   X_ATTRIBUTE5 IN VARCHAR2 ,
1681   X_ATTRIBUTE6 IN VARCHAR2 ,
1682   X_ATTRIBUTE7 IN VARCHAR2 ,
1683   X_ATTRIBUTE8 IN VARCHAR2 ,
1684   X_ATTRIBUTE9 IN VARCHAR2 ,
1685   X_ATTRIBUTE10 IN VARCHAR2 ,
1686   X_ATTRIBUTE11 IN VARCHAR2 ,
1687   X_ATTRIBUTE12 IN VARCHAR2 ,
1688   X_ATTRIBUTE13 IN VARCHAR2 ,
1689   X_ATTRIBUTE14 IN VARCHAR2 ,
1690   X_ATTRIBUTE15 IN VARCHAR2 ,
1691   X_ATTRIBUTE16 IN VARCHAR2 ,
1692   X_ATTRIBUTE17 IN VARCHAR2 ,
1693   X_ATTRIBUTE18 IN VARCHAR2 ,
1694   X_ATTRIBUTE19 IN VARCHAR2 ,
1695   X_ATTRIBUTE20 IN VARCHAR2
1696 ) AS
1697   CURSOR c1 IS SELECT
1698       US_VERSION_NUMBER,
1699       SELECTION_DT,
1700       STUDENT_CONFIRMED_IND,
1701       END_DT,
1702       PARENT_UNIT_SET_CD,
1703       PARENT_SEQUENCE_NUMBER,
1704       PRIMARY_SET_IND,
1705       VOLUNTARY_END_IND,
1706       AUTHORISED_PERSON_ID,
1707       AUTHORISED_ON,
1708       OVERRIDE_TITLE,
1709       RQRMNTS_COMPLETE_IND,
1710       RQRMNTS_COMPLETE_DT,
1711       S_COMPLETED_SOURCE_TYPE,
1712       CATALOG_CAL_TYPE,
1713       CATALOG_SEQ_NUM,
1714       ATTRIBUTE_CATEGORY,
1715       ATTRIBUTE1,
1716       ATTRIBUTE2,
1717       ATTRIBUTE3,
1718       ATTRIBUTE4,
1719       ATTRIBUTE5,
1720       ATTRIBUTE6,
1721       ATTRIBUTE7,
1722       ATTRIBUTE8,
1723       ATTRIBUTE9,
1724       ATTRIBUTE10,
1725       ATTRIBUTE11,
1726       ATTRIBUTE12,
1727       ATTRIBUTE13,
1728       ATTRIBUTE14,
1729       ATTRIBUTE15,
1730       ATTRIBUTE16,
1731       ATTRIBUTE17,
1732       ATTRIBUTE18,
1733       ATTRIBUTE19,
1734       ATTRIBUTE20
1735     FROM IGS_AS_SU_SETATMPT
1736     WHERE ROWID = X_ROWID  FOR UPDATE  NOWAIT;
1737   tlinfo c1%ROWTYPE;
1738 BEGIN
1739   OPEN c1;
1740   FETCH c1 INTO tlinfo;
1741   IF (c1%NOTFOUND) THEN
1742     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
1743     IGS_GE_MSG_STACK.ADD;
1744     CLOSE c1;
1745     app_exception.raise_exception;
1746 
1747     RETURN;
1748   END IF;
1749   CLOSE c1;
1750   IF ( (tlinfo.US_VERSION_NUMBER = X_US_VERSION_NUMBER)
1751       AND ((trunc(tlinfo.SELECTION_DT) = trunc(X_SELECTION_DT))
1752            OR ((tlinfo.SELECTION_DT IS NULL)
1753                AND (X_SELECTION_DT IS NULL)))
1754       AND (tlinfo.STUDENT_CONFIRMED_IND = X_STUDENT_CONFIRMED_IND)
1755       AND ((trunc(tlinfo.END_DT) = trunc(X_END_DT))
1756            OR ((tlinfo.END_DT IS NULL)
1757                AND (X_END_DT IS NULL)))
1758       AND ((tlinfo.PARENT_UNIT_SET_CD = X_PARENT_UNIT_SET_CD)
1759            OR ((tlinfo.PARENT_UNIT_SET_CD IS NULL)
1760                AND (X_PARENT_UNIT_SET_CD IS NULL)))
1761       AND ((tlinfo.PARENT_SEQUENCE_NUMBER = X_PARENT_SEQUENCE_NUMBER)
1762            OR ((tlinfo.PARENT_SEQUENCE_NUMBER IS NULL)
1763                AND (X_PARENT_SEQUENCE_NUMBER IS NULL)))
1764       AND (tlinfo.PRIMARY_SET_IND = X_PRIMARY_SET_IND)
1765       AND (tlinfo.VOLUNTARY_END_IND = X_VOLUNTARY_END_IND)
1766       AND ((tlinfo.AUTHORISED_PERSON_ID = X_AUTHORISED_PERSON_ID)
1767            OR ((tlinfo.AUTHORISED_PERSON_ID IS NULL)
1768                AND (X_AUTHORISED_PERSON_ID IS NULL)))
1769       AND ((tlinfo.AUTHORISED_ON = X_AUTHORISED_ON)
1770            OR ((tlinfo.AUTHORISED_ON IS NULL)
1771                AND (X_AUTHORISED_ON IS NULL)))
1772       AND ((tlinfo.OVERRIDE_TITLE = X_OVERRIDE_TITLE)
1773            OR ((tlinfo.OVERRIDE_TITLE IS NULL)
1774                AND (X_OVERRIDE_TITLE IS NULL)))
1775       AND (tlinfo.RQRMNTS_COMPLETE_IND = X_RQRMNTS_COMPLETE_IND)
1776       AND ((trunc(tlinfo.RQRMNTS_COMPLETE_DT) = trunc(X_RQRMNTS_COMPLETE_DT))
1777            OR ((tlinfo.RQRMNTS_COMPLETE_DT IS NULL)
1778                AND (X_RQRMNTS_COMPLETE_DT IS NULL)))
1779       AND ((tlinfo.S_COMPLETED_SOURCE_TYPE = X_S_COMPLETED_SOURCE_TYPE)
1780            OR ((tlinfo.S_COMPLETED_SOURCE_TYPE IS NULL)
1781                AND (X_S_COMPLETED_SOURCE_TYPE IS NULL)))
1782       AND ((tlinfo.CATALOG_CAL_TYPE = X_CATALOG_CAL_TYPE)
1783            OR ((tlinfo.CATALOG_CAL_TYPE IS NULL)
1784                AND (X_CATALOG_CAL_TYPE IS NULL)))
1785       AND ((tlinfo.CATALOG_SEQ_NUM = X_CATALOG_SEQ_NUM)
1786            OR ((tlinfo.CATALOG_SEQ_NUM IS NULL)
1787                AND (X_CATALOG_SEQ_NUM IS NULL)))
1788            AND ((tlinfo.ATTRIBUTE_CATEGORY = X_ATTRIBUTE_CATEGORY)
1789            OR ((tlinfo.ATTRIBUTE_CATEGORY IS NULL)
1790            AND (X_ATTRIBUTE_CATEGORY IS NULL)))
1791       AND ((tlinfo.ATTRIBUTE1= X_ATTRIBUTE1)
1792            OR ((tlinfo.ATTRIBUTE1 IS NULL)
1793            AND (X_ATTRIBUTE1 IS NULL)))
1794      AND ((tlinfo.ATTRIBUTE2= X_ATTRIBUTE2)
1795            OR ((tlinfo.ATTRIBUTE2 IS NULL)
1796            AND (X_ATTRIBUTE2 IS NULL)))
1797      AND ((tlinfo.ATTRIBUTE3= X_ATTRIBUTE3)
1798            OR ((tlinfo.ATTRIBUTE3 IS NULL)
1799            AND (X_ATTRIBUTE3 IS NULL)))
1800      AND ((tlinfo.ATTRIBUTE4= X_ATTRIBUTE4)
1801            OR ((tlinfo.ATTRIBUTE4 IS NULL)
1802            AND (X_ATTRIBUTE4 IS NULL)))
1803      AND ((tlinfo.ATTRIBUTE5= X_ATTRIBUTE5)
1804            OR ((tlinfo.ATTRIBUTE5 IS NULL)
1805            AND (X_ATTRIBUTE5 IS NULL)))
1806      AND ((tlinfo.ATTRIBUTE6= X_ATTRIBUTE6)
1807            OR ((tlinfo.ATTRIBUTE6 IS NULL)
1808            AND (X_ATTRIBUTE6 IS NULL)))
1809      AND ((tlinfo.ATTRIBUTE7= X_ATTRIBUTE7)
1810            OR ((tlinfo.ATTRIBUTE7 IS NULL)
1811            AND (X_ATTRIBUTE7 IS NULL)))
1812      AND ((tlinfo.ATTRIBUTE8= X_ATTRIBUTE8)
1813            OR ((tlinfo.ATTRIBUTE8 IS NULL)
1814            AND (X_ATTRIBUTE8 IS NULL)))
1815      AND ((tlinfo.ATTRIBUTE9= X_ATTRIBUTE9)
1816            OR ((tlinfo.ATTRIBUTE9 IS NULL)
1817            AND (X_ATTRIBUTE9 IS NULL)))
1818      AND ((tlinfo.ATTRIBUTE10= X_ATTRIBUTE10)
1819            OR ((tlinfo.ATTRIBUTE10 IS NULL)
1820            AND (X_ATTRIBUTE10 IS NULL)))
1821      AND ((tlinfo.ATTRIBUTE11= X_ATTRIBUTE11)
1822            OR ((tlinfo.ATTRIBUTE11 IS NULL)
1823            AND (X_ATTRIBUTE11 IS NULL)))
1824      AND ((tlinfo.ATTRIBUTE12= X_ATTRIBUTE12)
1825            OR ((tlinfo.ATTRIBUTE12 IS NULL)
1826            AND (X_ATTRIBUTE12 IS NULL)))
1827      AND ((tlinfo.ATTRIBUTE13= X_ATTRIBUTE13)
1828            OR ((tlinfo.ATTRIBUTE13 IS NULL)
1829            AND (X_ATTRIBUTE13 IS NULL)))
1830      AND ((tlinfo.ATTRIBUTE14= X_ATTRIBUTE14)
1831            OR ((tlinfo.ATTRIBUTE14 IS NULL)
1832            AND (X_ATTRIBUTE14 IS NULL)))
1833      AND ((tlinfo.ATTRIBUTE15= X_ATTRIBUTE15)
1834            OR ((tlinfo.ATTRIBUTE15 IS NULL)
1835            AND (X_ATTRIBUTE15 IS NULL)))
1836      AND ((tlinfo.ATTRIBUTE16= X_ATTRIBUTE16)
1837            OR ((tlinfo.ATTRIBUTE16 IS NULL)
1838            AND (X_ATTRIBUTE16 IS NULL)))
1839      AND ((tlinfo.ATTRIBUTE17= X_ATTRIBUTE17)
1840            OR ((tlinfo.ATTRIBUTE17 IS NULL)
1841            AND (X_ATTRIBUTE17 IS NULL)))
1842      AND ((tlinfo.ATTRIBUTE18= X_ATTRIBUTE18)
1843            OR ((tlinfo.ATTRIBUTE18 IS NULL)
1844            AND (X_ATTRIBUTE18 IS NULL)))
1845      AND ((tlinfo.ATTRIBUTE19= X_ATTRIBUTE19)
1846            OR ((tlinfo.ATTRIBUTE19 IS NULL)
1847            AND (X_ATTRIBUTE19 IS NULL)))
1848      AND ((tlinfo.ATTRIBUTE20= X_ATTRIBUTE20)
1849            OR ((tlinfo.ATTRIBUTE20 IS NULL)
1850            AND (X_ATTRIBUTE20 IS NULL)))
1851   ) THEN
1852     NULL;
1853   ELSE
1854     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
1855     IGS_GE_MSG_STACK.ADD;
1856     app_exception.raise_exception;
1857   END IF;
1858   RETURN;
1859 END LOCK_ROW;
1860 PROCEDURE UPDATE_ROW (
1861   X_ROWID IN  VARCHAR2,
1862   X_PERSON_ID IN NUMBER,
1863   X_COURSE_CD IN VARCHAR2,
1864   X_UNIT_SET_CD IN VARCHAR2,
1865   X_SEQUENCE_NUMBER IN NUMBER,
1866   X_US_VERSION_NUMBER IN NUMBER,
1867   X_SELECTION_DT IN DATE,
1868   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
1869   X_END_DT IN DATE,
1870   X_PARENT_UNIT_SET_CD IN VARCHAR2,
1871   X_PARENT_SEQUENCE_NUMBER IN NUMBER,
1872   X_PRIMARY_SET_IND IN VARCHAR2,
1873   X_VOLUNTARY_END_IND IN VARCHAR2,
1874   X_AUTHORISED_PERSON_ID IN NUMBER,
1875   X_AUTHORISED_ON IN DATE,
1876   X_OVERRIDE_TITLE IN VARCHAR2,
1877   X_RQRMNTS_COMPLETE_IND IN VARCHAR2,
1878   X_RQRMNTS_COMPLETE_DT IN DATE,
1879   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
1880   X_CATALOG_CAL_TYPE IN VARCHAR2 ,
1881   X_CATALOG_SEQ_NUM IN NUMBER ,
1882   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
1883   X_ATTRIBUTE1 IN VARCHAR2 ,
1884   X_ATTRIBUTE2 IN VARCHAR2 ,
1885   X_ATTRIBUTE3 IN VARCHAR2 ,
1886   X_ATTRIBUTE4 IN VARCHAR2 ,
1887   X_ATTRIBUTE5 IN VARCHAR2 ,
1888   X_ATTRIBUTE6 IN VARCHAR2 ,
1889   X_ATTRIBUTE7 IN VARCHAR2 ,
1890   X_ATTRIBUTE8 IN VARCHAR2 ,
1891   X_ATTRIBUTE9 IN VARCHAR2 ,
1892   X_ATTRIBUTE10 IN VARCHAR2 ,
1893   X_ATTRIBUTE11 IN VARCHAR2 ,
1894   X_ATTRIBUTE12 IN VARCHAR2 ,
1895   X_ATTRIBUTE13 IN VARCHAR2 ,
1896   X_ATTRIBUTE14 IN VARCHAR2 ,
1897   X_ATTRIBUTE15 IN VARCHAR2 ,
1898   X_ATTRIBUTE16 IN VARCHAR2 ,
1899   X_ATTRIBUTE17 IN VARCHAR2 ,
1900   X_ATTRIBUTE18 IN VARCHAR2 ,
1901   X_ATTRIBUTE19 IN VARCHAR2 ,
1902   X_ATTRIBUTE20 IN VARCHAR2 ,
1903   X_MODE IN VARCHAR2
1904   ) AS
1905     X_LAST_UPDATE_DATE DATE;
1906     X_LAST_UPDATED_BY NUMBER;
1907     X_LAST_UPDATE_LOGIN NUMBER;
1908     X_REQUEST_ID NUMBER;
1909     X_PROGRAM_ID NUMBER;
1910     X_PROGRAM_APPLICATION_ID NUMBER;
1911     X_PROGRAM_UPDATE_DATE DATE;
1912 BEGIN
1913   X_LAST_UPDATE_DATE := SYSDATE;
1914   IF(X_MODE = 'I') THEN
1915     X_LAST_UPDATED_BY := 1;
1916     X_LAST_UPDATE_LOGIN := 0;
1917   ELSIF (X_MODE IN ('R', 'S')) THEN
1918     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1919     IF X_LAST_UPDATED_BY IS NULL THEN
1920       X_LAST_UPDATED_BY := -1;
1921     END IF;
1922     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
1923     IF X_LAST_UPDATE_LOGIN IS NULL THEN
1924       X_LAST_UPDATE_LOGIN := -1;
1925     END IF;
1926   ELSE
1927     FND_MESSAGE.SET_NAME('FND', 'SYSTEM-INVALID ARGS');
1928     IGS_GE_MSG_STACK.ADD;
1929     app_exception.raise_exception;
1930   END IF;
1931 Before_DML(
1932     p_action=>'UPDATE',
1933     x_rowid=>X_ROWID,
1934     x_authorised_on=>X_AUTHORISED_ON,
1935     x_authorised_person_id=>X_AUTHORISED_PERSON_ID,
1936     x_course_cd=>X_COURSE_CD,
1937     x_end_dt=>X_END_DT,
1938     x_override_title=>X_OVERRIDE_TITLE,
1939     x_parent_sequence_number=>X_PARENT_SEQUENCE_NUMBER,
1940     x_parent_unit_set_cd=>X_PARENT_UNIT_SET_CD,
1941     x_person_id=>X_PERSON_ID,
1942     x_primary_set_ind=>X_PRIMARY_SET_IND,
1943     x_rqrmnts_complete_dt=>X_RQRMNTS_COMPLETE_DT,
1944     x_rqrmnts_complete_ind=>X_RQRMNTS_COMPLETE_IND,
1945     x_s_completed_source_type=>X_S_COMPLETED_SOURCE_TYPE,
1946     x_selection_dt=>X_SELECTION_DT,
1947     x_sequence_number=>X_SEQUENCE_NUMBER,
1948     x_student_confirmed_ind=>X_STUDENT_CONFIRMED_IND,
1949     x_unit_set_cd=>X_UNIT_SET_CD,
1950     x_us_version_number=>X_US_VERSION_NUMBER,
1951     x_voluntary_end_ind=>X_VOLUNTARY_END_IND,
1952     x_creation_date=>X_LAST_UPDATE_DATE,
1953     x_created_by=>X_LAST_UPDATED_BY,
1954     x_last_update_date=>X_LAST_UPDATE_DATE,
1955     x_last_updated_by=>X_LAST_UPDATED_BY,
1956     x_last_update_login=>X_LAST_UPDATE_LOGIN,
1957     x_catalog_cal_type => X_CATALOG_CAL_TYPE,
1958     x_catalog_seq_num => X_CATALOG_SEQ_NUM,
1959     x_attribute_category=> X_ATTRIBUTE_CATEGORY,
1960     x_attribute1=>  X_ATTRIBUTE1,
1961     x_attribute2=>  X_ATTRIBUTE2,
1962     x_attribute3=>  X_ATTRIBUTE3,
1963     x_attribute4=>  X_ATTRIBUTE4,
1964     x_attribute5=>  X_ATTRIBUTE5,
1965     x_attribute6=>  X_ATTRIBUTE6,
1966     x_attribute7=>  X_ATTRIBUTE7,
1967     x_attribute8=>  X_ATTRIBUTE8,
1968     x_attribute9=>  X_ATTRIBUTE9,
1969     x_attribute10=>X_ATTRIBUTE10,
1970     x_attribute11=>X_ATTRIBUTE11,
1971     x_attribute12=>X_ATTRIBUTE12,
1972     x_attribute13=>X_ATTRIBUTE13,
1973     x_attribute14=>X_ATTRIBUTE14,
1974     x_attribute15=>X_ATTRIBUTE15,
1975     x_attribute16=>X_ATTRIBUTE16,
1976     x_attribute17=>X_ATTRIBUTE17,
1977     x_attribute18=>X_ATTRIBUTE18,
1978     x_attribute19=>X_ATTRIBUTE19,
1979     x_attribute20=>X_ATTRIBUTE20
1980    );
1981  IF (X_MODE IN ('R', 'S')) THEN
1982    X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
1983    X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
1984    X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
1985   IF (X_REQUEST_ID = -1) THEN
1986      X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
1987      X_PROGRAM_ID := OLD_REFERENCES. PROGRAM_ID;
1988      X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
1989      X_PROGRAM_UPDATE_DATE := OLD_REFERENCES.PROGRAM_UPDATE_DATE;
1990  ELSE
1991      X_PROGRAM_UPDATE_DATE := SYSDATE;
1992  END IF;
1993 --
1994 --
1995 END IF;
1996   IF (x_mode = 'S') THEN
1997     igs_sc_gen_001.set_ctx('R');
1998   END IF;
1999   UPDATE IGS_AS_SU_SETATMPT SET
2000     US_VERSION_NUMBER = NEW_REFERENCES.US_VERSION_NUMBER,
2001     SELECTION_DT = NEW_REFERENCES.SELECTION_DT,
2002     STUDENT_CONFIRMED_IND = NEW_REFERENCES.STUDENT_CONFIRMED_IND,
2003     END_DT = NEW_REFERENCES.END_DT,
2004     PARENT_UNIT_SET_CD = NEW_REFERENCES.PARENT_UNIT_SET_CD,
2005     PARENT_SEQUENCE_NUMBER = NEW_REFERENCES.PARENT_SEQUENCE_NUMBER,
2006     PRIMARY_SET_IND = NEW_REFERENCES.PRIMARY_SET_IND,
2007     VOLUNTARY_END_IND = NEW_REFERENCES.VOLUNTARY_END_IND,
2008     AUTHORISED_PERSON_ID = NEW_REFERENCES.AUTHORISED_PERSON_ID,
2009     AUTHORISED_ON = NEW_REFERENCES.AUTHORISED_ON,
2010     OVERRIDE_TITLE = NEW_REFERENCES.OVERRIDE_TITLE,
2011     RQRMNTS_COMPLETE_IND = NEW_REFERENCES.RQRMNTS_COMPLETE_IND,
2012     RQRMNTS_COMPLETE_DT = NEW_REFERENCES.RQRMNTS_COMPLETE_DT,
2013     S_COMPLETED_SOURCE_TYPE = NEW_REFERENCES.S_COMPLETED_SOURCE_TYPE,
2014     CATALOG_CAL_TYPE = NEW_REFERENCES.CATALOG_CAL_TYPE,
2015     CATALOG_SEQ_NUM = NEW_REFERENCES.CATALOG_SEQ_NUM,
2016     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
2017     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
2018     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
2019     REQUEST_ID = X_REQUEST_ID,
2020     PROGRAM_ID = X_PROGRAM_ID,
2021     PROGRAM_APPLICATION_ID = X_PROGRAM_APPLICATION_ID,
2022     PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE,
2023    ATTRIBUTE_CATEGORY=X_ATTRIBUTE_CATEGORY,
2024    ATTRIBUTE1=NEW_REFERENCES.ATTRIBUTE1,
2025    ATTRIBUTE2=NEW_REFERENCES.ATTRIBUTE2,
2026    ATTRIBUTE3=NEW_REFERENCES.ATTRIBUTE3,
2027    ATTRIBUTE4=NEW_REFERENCES.ATTRIBUTE4,
2028    ATTRIBUTE5=NEW_REFERENCES.ATTRIBUTE5,
2029    ATTRIBUTE6=NEW_REFERENCES.ATTRIBUTE6,
2030    ATTRIBUTE7=NEW_REFERENCES.ATTRIBUTE7,
2031    ATTRIBUTE8=NEW_REFERENCES.ATTRIBUTE8,
2032    ATTRIBUTE9=NEW_REFERENCES.ATTRIBUTE9,
2033    ATTRIBUTE10=NEW_REFERENCES.ATTRIBUTE10,
2034    ATTRIBUTE11=NEW_REFERENCES.ATTRIBUTE11,
2035    ATTRIBUTE12=NEW_REFERENCES.ATTRIBUTE12,
2036    ATTRIBUTE13=NEW_REFERENCES.ATTRIBUTE13,
2037    ATTRIBUTE14=NEW_REFERENCES.ATTRIBUTE14,
2038    ATTRIBUTE15=NEW_REFERENCES.ATTRIBUTE15,
2039    ATTRIBUTE16=NEW_REFERENCES.ATTRIBUTE16,
2040    ATTRIBUTE17=NEW_REFERENCES.ATTRIBUTE17,
2041    ATTRIBUTE18=NEW_REFERENCES.ATTRIBUTE18,
2042    ATTRIBUTE19=NEW_REFERENCES.ATTRIBUTE19,
2043    ATTRIBUTE20=NEW_REFERENCES.ATTRIBUTE20
2044    WHERE ROWID = X_ROWID;
2045    IF (SQL%NOTFOUND) THEN
2046      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
2047      igs_ge_msg_stack.add;
2048      igs_sc_gen_001.unset_ctx('R');
2049      app_exception.raise_exception;
2050  END IF;
2051  IF (x_mode = 'S') THEN
2052     igs_sc_gen_001.unset_ctx('R');
2053   END IF;
2054 
2055 --
2056  After_DML(
2057   p_action => 'UPDATE',
2058   x_rowid => X_ROWID
2059   );
2060 --
2061 EXCEPTION
2062   WHEN OTHERS THEN
2063     IF (SQLCODE = (-28115)) THEN
2064       fnd_message.set_name ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
2065       fnd_message.set_token ('ERR_CD', SQLCODE);
2066       igs_ge_msg_stack.add;
2067       igs_sc_gen_001.unset_ctx('R');
2068       app_exception.raise_exception;
2069     ELSE
2070       igs_sc_gen_001.unset_ctx('R');
2071       RAISE;
2072     END IF;
2073 
2074 END UPDATE_ROW;
2075 PROCEDURE ADD_ROW (
2076   X_ROWID IN OUT NOCOPY VARCHAR2,
2077   X_PERSON_ID IN NUMBER,
2078   X_COURSE_CD IN VARCHAR2,
2079   X_UNIT_SET_CD IN VARCHAR2,
2080   X_SEQUENCE_NUMBER IN NUMBER,
2081   X_US_VERSION_NUMBER IN NUMBER,
2082   X_SELECTION_DT IN DATE,
2083   X_STUDENT_CONFIRMED_IND IN VARCHAR2,
2084   X_END_DT IN DATE,
2085   X_PARENT_UNIT_SET_CD IN VARCHAR2,
2086   X_PARENT_SEQUENCE_NUMBER IN NUMBER,
2087   X_PRIMARY_SET_IND IN VARCHAR2,
2088   X_VOLUNTARY_END_IND IN VARCHAR2,
2089   X_AUTHORISED_PERSON_ID IN NUMBER,
2090   X_AUTHORISED_ON IN DATE,
2091   X_OVERRIDE_TITLE IN VARCHAR2,
2092   X_RQRMNTS_COMPLETE_IND IN VARCHAR2,
2093   X_RQRMNTS_COMPLETE_DT IN DATE,
2094   X_S_COMPLETED_SOURCE_TYPE IN VARCHAR2,
2095   X_CATALOG_CAL_TYPE IN VARCHAR2 ,
2096   X_CATALOG_SEQ_NUM IN NUMBER ,
2097   X_ATTRIBUTE_CATEGORY IN VARCHAR2 ,
2098   X_ATTRIBUTE1 IN VARCHAR2 ,
2099   X_ATTRIBUTE2 IN VARCHAR2 ,
2100   X_ATTRIBUTE3 IN VARCHAR2 ,
2101   X_ATTRIBUTE4 IN VARCHAR2 ,
2102   X_ATTRIBUTE5 IN VARCHAR2 ,
2103   X_ATTRIBUTE6 IN VARCHAR2 ,
2104   X_ATTRIBUTE7 IN VARCHAR2 ,
2105   X_ATTRIBUTE8 IN VARCHAR2 ,
2106   X_ATTRIBUTE9 IN VARCHAR2 ,
2107   X_ATTRIBUTE10 IN VARCHAR2 ,
2108   X_ATTRIBUTE11 IN VARCHAR2 ,
2109   X_ATTRIBUTE12 IN VARCHAR2 ,
2110   X_ATTRIBUTE13 IN VARCHAR2 ,
2111   X_ATTRIBUTE14 IN VARCHAR2 ,
2112   X_ATTRIBUTE15 IN VARCHAR2 ,
2113   X_ATTRIBUTE16 IN VARCHAR2 ,
2114   X_ATTRIBUTE17 IN VARCHAR2 ,
2115   X_ATTRIBUTE18 IN VARCHAR2 ,
2116   X_ATTRIBUTE19 IN VARCHAR2 ,
2117   X_ATTRIBUTE20 IN VARCHAR2 ,
2118   X_MODE IN VARCHAR2
2119   ) AS
2120   CURSOR c1 IS SELECT ROWID FROM IGS_AS_SU_SETATMPT
2121      WHERE PERSON_ID = X_PERSON_ID
2122      AND COURSE_CD = X_COURSE_CD
2123      AND UNIT_SET_CD = X_UNIT_SET_CD
2124      AND SEQUENCE_NUMBER = X_SEQUENCE_NUMBER
2125   ;
2126 BEGIN
2127   OPEN c1;
2128   FETCH c1 INTO X_ROWID;
2129   IF (c1%NOTFOUND) THEN
2130     CLOSE c1;
2131     INSERT_ROW (
2132      X_ROWID,
2133      X_PERSON_ID,
2134      X_COURSE_CD,
2135      X_UNIT_SET_CD,
2136      X_SEQUENCE_NUMBER,
2137      X_US_VERSION_NUMBER,
2138      X_SELECTION_DT,
2139      X_STUDENT_CONFIRMED_IND,
2140      X_END_DT,
2141      X_PARENT_UNIT_SET_CD,
2142      X_PARENT_SEQUENCE_NUMBER,
2143      X_PRIMARY_SET_IND,
2144      X_VOLUNTARY_END_IND,
2145      X_AUTHORISED_PERSON_ID,
2146      X_AUTHORISED_ON,
2147      X_OVERRIDE_TITLE,
2148      X_RQRMNTS_COMPLETE_IND,
2149      X_RQRMNTS_COMPLETE_DT,
2150      X_S_COMPLETED_SOURCE_TYPE,
2151      X_CATALOG_CAL_TYPE,
2152      X_CATALOG_SEQ_NUM,
2153     X_ATTRIBUTE_CATEGORY,
2154     X_ATTRIBUTE1,
2155     X_ATTRIBUTE2,
2156     X_ATTRIBUTE3,
2157     X_ATTRIBUTE4,
2158     X_ATTRIBUTE5,
2159     X_ATTRIBUTE6,
2160     X_ATTRIBUTE7,
2161     X_ATTRIBUTE8,
2162     X_ATTRIBUTE9,
2163     X_ATTRIBUTE10,
2164     X_ATTRIBUTE11,
2165     X_ATTRIBUTE12,
2166     X_ATTRIBUTE13,
2167     X_ATTRIBUTE14,
2168     X_ATTRIBUTE15,
2169     X_ATTRIBUTE16,
2170     X_ATTRIBUTE17,
2171     X_ATTRIBUTE18,
2172     X_ATTRIBUTE19,
2173     X_ATTRIBUTE20,
2174      X_MODE);
2175     RETURN;
2176   END IF;
2177   CLOSE c1;
2178   UPDATE_ROW (
2179    X_ROWID,
2180    X_PERSON_ID,
2181    X_COURSE_CD,
2182    X_UNIT_SET_CD,
2183    X_SEQUENCE_NUMBER,
2184    X_US_VERSION_NUMBER,
2185    X_SELECTION_DT,
2186    X_STUDENT_CONFIRMED_IND,
2187    X_END_DT,
2188    X_PARENT_UNIT_SET_CD,
2189    X_PARENT_SEQUENCE_NUMBER,
2190    X_PRIMARY_SET_IND,
2191    X_VOLUNTARY_END_IND,
2192    X_AUTHORISED_PERSON_ID,
2193    X_AUTHORISED_ON,
2194    X_OVERRIDE_TITLE,
2195    X_RQRMNTS_COMPLETE_IND,
2196    X_RQRMNTS_COMPLETE_DT,
2197    X_S_COMPLETED_SOURCE_TYPE,
2198    X_CATALOG_CAL_TYPE,
2199    X_CATALOG_SEQ_NUM,
2200    X_ATTRIBUTE_CATEGORY,
2201    X_ATTRIBUTE1,
2202    X_ATTRIBUTE2,
2203    X_ATTRIBUTE3,
2204    X_ATTRIBUTE4,
2205    X_ATTRIBUTE5,
2206    X_ATTRIBUTE6,
2207    X_ATTRIBUTE7,
2208    X_ATTRIBUTE8,
2209    X_ATTRIBUTE9,
2210    X_ATTRIBUTE10,
2211    X_ATTRIBUTE11,
2212    X_ATTRIBUTE12,
2213    X_ATTRIBUTE13,
2214    X_ATTRIBUTE14,
2215    X_ATTRIBUTE15,
2216    X_ATTRIBUTE16,
2217    X_ATTRIBUTE17,
2218    X_ATTRIBUTE18,
2219    X_ATTRIBUTE19,
2220    X_ATTRIBUTE20,
2221    X_MODE);
2222 END ADD_ROW;
2223 PROCEDURE DELETE_ROW (
2224   X_ROWID IN VARCHAR2,
2225   x_mode IN VARCHAR2) AS
2226 BEGIN
2227 --
2228  Before_DML(
2229   p_action => 'DELETE',
2230   x_rowid => X_ROWID
2231   );
2232 --
2233   IF (x_mode = 'S') THEN
2234     igs_sc_gen_001.set_ctx('R');
2235   END IF;
2236   DELETE FROM IGS_AS_SU_SETATMPT
2237  WHERE ROWID = X_ROWID;
2238   IF (SQL%NOTFOUND) THEN
2239      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
2240      igs_ge_msg_stack.add;
2241      igs_sc_gen_001.unset_ctx('R');
2242      app_exception.raise_exception;
2243  END IF;
2244  IF (x_mode = 'S') THEN
2245     igs_sc_gen_001.unset_ctx('R');
2246   END IF;
2247 
2248 --
2249  After_DML(
2250   p_action => 'DELETE',
2251   x_rowid => X_ROWID
2252   );
2253 --
2254 END DELETE_ROW;
2255 END IGS_AS_SU_SETATMPT_PKG;