DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_UNIT_SETS_PKG

Source


1 PACKAGE BODY igs_ad_unit_sets_pkg AS
2 /* $Header: IGSAI98B.pls 120.3 2006/05/30 11:42:19 pbondugu ship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references igs_ad_unit_sets%RowType;
6   new_references igs_ad_unit_sets%RowType;
7 
8   PROCEDURE Set_Column_Values (
9     p_action IN VARCHAR2,
10     x_rowid IN VARCHAR2 DEFAULT NULL,
11     x_unit_set_id IN NUMBER DEFAULT NULL,
12     x_person_id IN NUMBER DEFAULT NULL,
13     x_admission_appl_number IN NUMBER DEFAULT NULL,
14     x_nominated_course_cd IN VARCHAR2 DEFAULT NULL,
15     x_sequence_number IN NUMBER DEFAULT NULL,
16     x_unit_set_cd IN VARCHAR2 DEFAULT NULL,
17     x_version_number IN NUMBER DEFAULT NULL,
18     x_rank IN NUMBER DEFAULT NULL,
19     x_creation_date IN DATE DEFAULT NULL,
20     x_created_by IN NUMBER DEFAULT NULL,
21     x_last_update_date IN DATE DEFAULT NULL,
22     x_last_updated_by IN NUMBER DEFAULT NULL,
23     x_last_update_login IN NUMBER DEFAULT NULL
24   ) AS
25 
26   /*************************************************************
27   Created By :
28   Date Created By :
29   Purpose :
30   Know limitations, enhancements or remarks
31   Change History
32   Who             When            What
33 
34   (reverse chronological order - newest change first)
35   ***************************************************************/
36 
37     CURSOR cur_old_ref_values IS
38       SELECT   *
39       FROM     IGS_AD_UNIT_SETS
40       WHERE    rowid = x_rowid;
41 
42   BEGIN
43 
44     l_rowid := x_rowid;
45 
46     -- Code for setting the Old and New Reference Values.
47     -- Populate Old Values.
48     Open cur_old_ref_values;
49     Fetch cur_old_ref_values INTO old_references;
50     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
51       Close cur_old_ref_values;
52       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
53       IGS_GE_MSG_STACK.ADD;
54       App_Exception.Raise_Exception;
55       Return;
56     END IF;
57     Close cur_old_ref_values;
58 
59     -- Populate New Values.
60     new_references.unit_set_id := x_unit_set_id;
61     new_references.person_id := x_person_id;
62     new_references.admission_appl_number := x_admission_appl_number;
63     new_references.nominated_course_cd := x_nominated_course_cd;
64     new_references.sequence_number := x_sequence_number;
65     new_references.unit_set_cd := x_unit_set_cd;
66     new_references.version_number := x_version_number;
67     new_references.rank := x_rank;
68     IF (p_action = 'UPDATE') THEN
69       new_references.creation_date := old_references.creation_date;
70       new_references.created_by := old_references.created_by;
71     ELSE
72       new_references.creation_date := x_creation_date;
73       new_references.created_by := x_created_by;
74     END IF;
75     new_references.last_update_date := x_last_update_date;
76     new_references.last_updated_by := x_last_updated_by;
77     new_references.last_update_login := x_last_update_login;
78 
79   END Set_Column_Values;
80 
81   PROCEDURE Check_Constraints (
82     Column_Name IN VARCHAR2  DEFAULT NULL,
83     Column_Value IN VARCHAR2  DEFAULT NULL
84   ) AS
85   /*************************************************************
86   Created By :
87   Date Created By :
88   Purpose :
89   Know limitations, enhancements or remarks
90   Change History
91   Who             When            What
92 
93   (reverse chronological order - newest change first)
94   ***************************************************************/
95   BEGIN
96     IF column_name IS NULL THEN
97       NULL;
98     ELSIF  UPPER(column_name) = 'RANK'  THEN
99       new_references.rank := IGS_GE_NUMBER.TO_NUM(column_value);
100       NULL;
101     END IF;
102 
103     -- The following code checks for check constraints on the Columns.
104     IF Upper(Column_Name) = 'RANK' OR
105       Column_Name IS NULL THEN
106       IF NOT (new_references.rank > 0)  THEN
107          FND_MESSAGE.SET_NAME('IGS','IGS_GE_INVALID_VALUE_WITH_CTXT');
108          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('IGS','IGS_SS_DSRD_RANK_NONEGATE'));
109          IGS_GE_MSG_STACK.ADD;
110          App_Exception.Raise_Exception;
111       END IF;
112     END IF;
113   END Check_Constraints;
114 
115   PROCEDURE Check_Uniqueness AS
116   /*************************************************************
117   Created By :
118   Date Created By :
119   Purpose :
120   Know limitations, enhancements or remarks
121   Change History
122   Who             When            What
123 
124   (reverse chronological order - newest change first)
125   ***************************************************************/
126   begin
127     IF Get_Uk_For_Validation (
128     	new_references.sequence_number
129     	,new_references.unit_set_cd
130     	,new_references.version_number
131     	,new_references.admission_appl_number
132     	,new_references.nominated_course_cd
133     	,new_references.person_id
134     	) THEN
135       Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
136       IGS_GE_MSG_STACK.ADD;
137       app_exception.raise_exception;
138     END IF;
139   END Check_Uniqueness ;
140 
141   PROCEDURE Check_Parent_Existance AS
142   /*************************************************************
143   Created By :
144   Date Created By :
145   Purpose :
146   Know limitations, enhancements or remarks
147   Change History
148   Who             When            What
149 
150   (reverse chronological order - newest change first)
151   ***************************************************************/
152 
153   BEGIN
154 
155     IF (((old_references.person_id = new_references.person_id) AND
156          (old_references.admission_appl_number = new_references.admission_appl_number) AND
157          (old_references.nominated_course_cd = new_references.nominated_course_cd) AND
158          (old_references.sequence_number = new_references.sequence_number)) OR
159         ((new_references.person_id IS NULL) OR
160          (new_references.admission_appl_number IS NULL) OR
161          (new_references.nominated_course_cd IS NULL) OR
162          (new_references.sequence_number IS NULL))) THEN
163       NULL;
164     ELSIF NOT Igs_Ad_Ps_Appl_Inst_Pkg.Get_PK_For_Validation (
165         		new_references.person_id,
166          		 new_references.admission_appl_number,
167          		 new_references.nominated_course_cd,
168          		 new_references.sequence_number
169         )  THEN
170          FND_MESSAGE.SET_NAME('IGS','IGS_GE_PK_UK_NOT_FOUND');
171          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('IGS','IGS_AD_PROGRAM_APPL'));
172          IGS_GE_MSG_STACK.ADD;
173          App_Exception.Raise_Exception;
174     END IF;
175 
176     IF (((old_references.unit_set_cd = new_references.unit_set_cd) AND
177          (old_references.version_number = new_references.version_number)) OR
178         ((new_references.unit_set_cd IS NULL) OR
179          (new_references.version_number IS NULL))) THEN
180       NULL;
181     ELSIF NOT Igs_En_Unit_Set_Pkg.Get_PK_For_Validation (
182        		new_references.unit_set_cd,
183        		new_references.version_number
184         )  THEN
185          FND_MESSAGE.SET_NAME('IGS','IGS_GE_PK_UK_NOT_FOUND');
186          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('IGS','IGS_PS_UNIT_SET'));
187          IGS_GE_MSG_STACK.ADD;
188          App_Exception.Raise_Exception;
189     END IF;
190 
191   END Check_Parent_Existance;
192 
193   FUNCTION Get_PK_For_Validation (
194     x_unit_set_id IN NUMBER
195     ) RETURN BOOLEAN AS
196 
197   /*************************************************************
198   Created By :
199   Date Created By :
200   Purpose :
201   Know limitations, enhancements or remarks
202   Change History
203   Who             When            What
204 
205   (reverse chronological order - newest change first)
206   ***************************************************************/
207 
208     CURSOR cur_rowid IS
209       SELECT   rowid
210       FROM     igs_ad_unit_sets
211       WHERE    unit_set_id = x_unit_set_id
212       FOR UPDATE NOWAIT;
213 
214     lv_rowid cur_rowid%RowType;
215 
216   BEGIN
217 
218     Open cur_rowid;
219     Fetch cur_rowid INTO lv_rowid;
220     IF (cur_rowid%FOUND) THEN
221       Close cur_rowid;
222       Return(TRUE);
223     ELSE
224       Close cur_rowid;
225       Return(FALSE);
226     END IF;
227   END Get_PK_For_Validation;
228 
229   FUNCTION Get_UK_For_Validation (
230     x_sequence_number IN NUMBER,
231     x_unit_set_cd IN VARCHAR2,
232     x_version_number IN NUMBER,
233     x_admission_appl_number IN NUMBER,
234     x_nominated_course_cd IN VARCHAR2,
235     x_person_id IN NUMBER
236     ) RETURN BOOLEAN AS
237 
238   /*************************************************************
239   Created By :
240   Date Created By :
241   Purpose :
242   Know limitations, enhancements or remarks
243   Change History
244   Who             When            What
245 
246   (reverse chronological order - newest change first)
247   ***************************************************************/
248 
249     CURSOR cur_rowid IS
250       SELECT   rowid
251       FROM     igs_ad_unit_sets
252       WHERE    sequence_number = x_sequence_number
253       AND      unit_set_cd = x_unit_set_cd
254       AND      version_number = x_version_number
255       AND      admission_appl_number = x_admission_appl_number
256       AND      nominated_course_cd = x_nominated_course_cd
257       AND      person_id = x_person_id 	and      ((l_rowid is null) or (rowid <> l_rowid))
258 
259       ;
260     lv_rowid cur_rowid%RowType;
261 
262   BEGIN
263 
264     Open cur_rowid;
265     Fetch cur_rowid INTO lv_rowid;
266     IF (cur_rowid%FOUND) THEN
267       Close cur_rowid;
268         return (true);
269         ELSE
270        close cur_rowid;
271       return(false);
272     END IF;
273   END Get_UK_For_Validation ;
274 
275   PROCEDURE Get_FK_Igs_Ad_Ps_Appl_Inst (
276     x_person_id IN NUMBER,
277     x_admission_appl_number IN NUMBER,
278     x_nominated_course_cd IN VARCHAR2,
279     x_sequence_number IN NUMBER
280     ) AS
281 
282   /*************************************************************
283   Created By :
284   Date Created By :
285   Purpose :
286   Know limitations, enhancements or remarks
287   Change History
288   Who             When            What
289 
290   (reverse chronological order - newest change first)
291   ***************************************************************/
292 
293     CURSOR cur_rowid IS
294       SELECT   rowid
295       FROM     igs_ad_unit_sets
296       WHERE    person_id = x_person_id
297       AND      admission_appl_number = x_admission_appl_number
298       AND      nominated_course_cd = x_nominated_course_cd
299       AND      sequence_number = x_sequence_number ;
300 
301     lv_rowid cur_rowid%RowType;
302 
303   BEGIN
304 
305     Open cur_rowid;
306     Fetch cur_rowid INTO lv_rowid;
307     IF (cur_rowid%FOUND) THEN
308       Close cur_rowid;
309       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AUTS_ACAI_FK');
310       IGS_GE_MSG_STACK.ADD;
311       App_Exception.Raise_Exception;
312       Return;
313     END IF;
314     Close cur_rowid;
315 
316   END Get_FK_Igs_Ad_Ps_Appl_Inst;
317 
318   PROCEDURE Get_FK_Igs_En_Unit_Set (
319     x_unit_set_cd IN VARCHAR2,
320     x_version_number IN NUMBER
321     ) AS
322   /*************************************************************
323   Created By :
324   Date Created By :
325   Purpose :
326   Know limitations, enhancements or remarks
327   Change History
328   Who             When            What
329 
330   (reverse chronological order - newest change first)
331   ***************************************************************/
332     CURSOR cur_rowid IS
333       SELECT   rowid
334       FROM     igs_ad_unit_sets
335       WHERE    unit_set_cd = x_unit_set_cd
336       AND      version_number = x_version_number ;
337 
338     lv_rowid cur_rowid%RowType;
339 
340   BEGIN
341     Open cur_rowid;
342     Fetch cur_rowid INTO lv_rowid;
343     IF (cur_rowid%FOUND) THEN
344       Close cur_rowid;
345       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AUTS_EUS_FK');
346       IGS_GE_MSG_STACK.ADD;
347       App_Exception.Raise_Exception;
348       Return;
349     END IF;
350     Close cur_rowid;
351 
352   END Get_FK_Igs_En_Unit_Set;
353  -- begin oxford unit set code bug 5194658
354   PROCEDURE GET_FK_IGS_PS_OFR_UNIT_SET (
355     x_unit_set_cd IN VARCHAR2,
356     x_version_number IN NUMBER,
357     x_course_cd VARCHAR2,
358     x_crv_version_number NUMBER,
359     x_acad_cal_type VARCHAR2
360     ) AS
361   /*************************************************************
362   Created By :
363   Date Created By :
364   Purpose :
365   Know limitations, enhancements or remarks
366   Change History
367   Who             When            What
368 
369   (reverse chronological order - newest change first)
370   ***************************************************************/
371     CURSOR cur_rowid IS
372      SELECT   aus.rowid
373       FROM     igs_ad_unit_sets aus, igs_ad_appl_all apl, igs_ad_ps_appl_inst_all inst
374       WHERE    aus.person_id             = apl.person_id
375       AND      aus.admission_appl_number = apl.admission_appl_number
376       AND      aus.person_id             = inst.person_id
377       AND      aus.admission_appl_number = inst.admission_appl_number
378       AND      aus.nominated_course_cd   = inst.nominated_course_cd
379       AND      aus.sequence_number       = inst.sequence_number
380       AND      aus.unit_set_cd           = x_unit_set_cd
381       AND      aus.version_number        = x_version_number
382       AND      aus.nominated_course_cd   = x_course_cd
383       AND      inst.crv_version_number   = x_crv_version_number
384       AND      apl.acad_cal_type         = x_acad_cal_type ;
385 
386     lv_rowid cur_rowid%RowType;
387 
388   BEGIN
389     Open cur_rowid;
390     Fetch cur_rowid INTO lv_rowid;
391     IF (cur_rowid%FOUND) THEN
392       Close cur_rowid;
393       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AUTS_EUS_FK');
394       IGS_GE_MSG_STACK.ADD;
395       App_Exception.Raise_Exception;
396       Return;
397     END IF;
398     Close cur_rowid;
399 
400   END GET_FK_IGS_PS_OFR_UNIT_SET;
401  -- end oxford unit set code bug 5194658
402 
403 FUNCTION Validate_Unit_Set(p_version_number      igs_ad_unit_sets.version_number%TYPE
404                           ,p_unit_set_cd         igs_ad_unit_sets.unit_set_cd%TYPE
405                           ,p_nominated_course_cd igs_ad_ps_appl_inst_all.nominated_course_cd%TYPE
406                           ,p_crv_version_number  igs_ad_ps_appl_inst_all.crv_version_number%TYPE
407                           ,p_admission_cat       igs_ad_appl_all.admission_cat%TYPE
408                           ,p_acad_cal_type       igs_ad_appl_all.acad_cal_type%TYPE
409                           ,p_location_cd         igs_ad_ps_appl_inst_all.location_cd%TYPE
410                           ,p_attendance_mode     igs_ad_ps_appl_inst_all.attendance_mode%TYPE
411                           ,p_attendance_type     igs_ad_ps_appl_inst_all.attendance_type%TYPE)
412 RETURN BOOLEAN
413 IS
414 CURSOR cur_unit_sets IS
415 SELECT  '1'
416 FROM    IGS_PS_OFR_OPT_UNIT_SET_V psusv
417 WHERE   psusv.unit_set_cd       = p_unit_set_cd         -- extra condition,  when compared to unit set lov query on IGSAD097.pld, IGSAD046.pld
418    AND psusv.us_version_number  = p_version_number      -- extra condition,  when compared to unit set lov query on IGSAD097.pld, IGSAD046.pld
419    AND psusv.course_cd          =     p_nominated_course_cd
420    AND psusv.crv_version_number =     p_crv_version_number
421    AND psusv.cal_type           =     p_acad_cal_type
422    AND psusv.location_cd        =  NVL(p_location_cd ,    psusv.location_cd)
423    AND psusv.attendance_mode    =  NVL(p_attendance_mode, psusv.attendance_mode)
424    AND psusv.attendance_type    =  NVL(p_attendance_type, psusv.attendance_type)
425    AND NOT EXISTS
426    (SELECT 1
427    FROM    igs_ps_coo_ad_unit_s psus
428    WHERE   psus.course_cd              = psusv.course_cd
429            AND psus.crv_version_number = psusv.crv_version_number
430            AND psus.cal_type           = psusv.cal_type
431            AND psus.location_cd        = psusv.location_cd
432            AND psus.attendance_mode    = psusv.attendance_mode
433            AND psus.attendance_type    = psusv.attendance_type
434            AND psus.admission_cat      = p_admission_cat
435    )
436    AND psusv.UNIT_SET_STATUS IN
437    (SELECT unit_set_status
438    FROM    igs_en_unit_set_stat uss
439    WHERE   psusv.unit_set_status       = uss.unit_set_status
440            AND uss.s_unit_set_status <> 'INACTIVE'
441    )
442    AND psusv.unit_set_cat IN
443    (SELECT usc.unit_set_cat
444    FROM    igs_en_unit_set_cat usc
445    WHERE   ((fnd_profile.value ('IGS_PS_PRENRL_YEAR_IND') <> 'Y'
446            OR usc.s_unit_set_cat = 'PRENRL_YR'))
447    )
448    AND psusv.expiry_dt IS NULL
449 UNION
450 SELECT  '1'
451 FROM    igs_ps_coo_ad_unit_s psus,
452    igs_en_unit_set us
453 WHERE  psus.unit_set_cd       = p_unit_set_cd         -- extra condition,  when compared to unit set lov query on IGSAD097.pld, IGSAD046.pld
454    AND psus.us_version_number = p_version_number      -- extra condition,  when compared to unit set lov query on IGSAD097.pld, IGSAD046.pld
455    AND us.unit_set_cd          = psus.unit_set_cd
456    AND us.version_number       = psus.us_version_number
457    AND psus.course_cd          = p_nominated_course_cd
458    AND psus.crv_version_number = p_crv_version_number
459    AND psus.cal_type           = p_acad_cal_type
460    AND psus.location_cd        = nvl(p_location_cd ,     psus.location_cd)
461    AND psus.attendance_mode    = nvl(p_attendance_mode,  psus.attendance_mode)
462    AND psus.attendance_type    = nvl(p_attendance_type , psus.attendance_type)
463    AND psus.admission_cat      = p_admission_cat
464    AND us.unit_set_status     IN
465    (SELECT unit_set_status
466    FROM    igs_en_unit_set_stat uss
467    WHERE   us.unit_set_status         = uss.unit_set_status
468            AND uss.s_unit_set_status <> 'INACTIVE'
469    )
470    AND us.unit_set_cat IN
471    (SELECT usc.unit_set_cat
472    FROM    igs_en_unit_set_cat usc
473    WHERE   ((fnd_profile.value ('IGS_PS_PRENRL_YEAR_IND') <> 'Y'
474            OR usc.s_unit_set_cat = 'PRENRL_YR'))
475    )
476    AND us.expiry_dt IS NULL;
477 
478    l_var VARCHAR2(1);
479 BEGIN
480 
481     OPEN cur_unit_sets;
482     FETCH cur_unit_sets INTO l_var;
483     IF cur_unit_sets%NOTFOUND THEN
484        CLOSE cur_unit_sets;
485        RETURN FALSE;
486     END IF;
487     CLOSE cur_unit_sets;
488     RETURN TRUE;
489 END;
490 
491 
492   PROCEDURE Before_DML (
493     p_action IN VARCHAR2,
494     x_rowid IN VARCHAR2 DEFAULT NULL,
495     x_unit_set_id IN NUMBER DEFAULT NULL,
496     x_person_id IN NUMBER DEFAULT NULL,
497     x_admission_appl_number IN NUMBER DEFAULT NULL,
498     x_nominated_course_cd IN VARCHAR2 DEFAULT NULL,
499     x_sequence_number IN NUMBER DEFAULT NULL,
500     x_unit_set_cd IN VARCHAR2 DEFAULT NULL,
501     x_version_number IN NUMBER DEFAULT NULL,
502     x_rank IN NUMBER DEFAULT NULL,
503     x_creation_date IN DATE DEFAULT NULL,
504     x_created_by IN NUMBER DEFAULT NULL,
505     x_last_update_date IN DATE DEFAULT NULL,
506     x_last_updated_by IN NUMBER DEFAULT NULL,
507     x_last_update_login IN NUMBER DEFAULT NULL
508   ) AS
509   /*************************************************************
510   Created By :
511   Date Created By :
512   Purpose :
513   Know limitations, enhancements or remarks
514   Change History
515   Who             When            What
516 
517   (reverse chronological order - newest change first)
518   ***************************************************************/
519         CURSOR c_appl IS
520 	SELECT  appinsti.crv_version_number
521 		,apli.admission_cat
522 		,apli.acad_cal_type
523 		,appinsti.attendance_type
524 		,appinsti.attendance_mode
525 		,appinsti.location_cd
526 	FROM  igs_ad_appl_all apli
527 	      ,igs_ad_ps_appl_inst_all appinsti
528 	WHERE  appinsti.person_id = x_person_id
529                AND appinsti.nominated_course_cd =x_nominated_course_cd
530                AND appinsti.admission_appl_number= x_admission_appl_number
531                AND appinsti.sequence_number = x_sequence_number
532                AND apli.person_id =  appinsti.person_id
533                AND apli.admission_appl_number = appinsti.admission_appl_number;
534   	c_appl_rec  c_appl%ROWTYPE;
535 
536 
537 
538 
539 
540   BEGIN
541 
542     Set_Column_Values (
543       p_action,
544       x_rowid,
545       x_unit_set_id,
546       x_person_id,
547       x_admission_appl_number,
548       x_nominated_course_cd,
549       x_sequence_number,
550       x_unit_set_cd,
551       x_version_number,
552       x_rank,
553       x_creation_date,
554       x_created_by,
555       x_last_update_date,
556       x_last_updated_by,
557       x_last_update_login
558     );
559 
560     igs_ad_gen_002.check_adm_appl_inst_stat(
561       nvl(x_person_id,old_references.person_id),
562       nvl(x_admission_appl_number,old_references.admission_appl_number),
563       nvl(x_nominated_course_cd,old_references.nominated_course_cd),
564       nvl(x_sequence_number,old_references.sequence_number)
565       );
566 
567     OPEN c_appl;
568     FETCH c_appl  INTO c_appl_rec;
569     CLOSE c_appl;
570 
571     IF (p_action = 'INSERT') THEN
572       -- Call all the procedures related to Before Insert.
573      IF Get_Pk_For_Validation(
574 	new_references.unit_set_id)  THEN
575         Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
576         IGS_GE_MSG_STACK.ADD;
577         App_Exception.Raise_Exception;
578      END IF;
579 
580      IF NOT Validate_Unit_Set(
581          new_references.version_number
582 	,new_references.unit_set_cd
583         ,new_references.nominated_course_cd
584         ,c_appl_rec.crv_version_number
585         ,c_appl_rec.admission_cat
586         ,c_appl_rec.acad_cal_type
587         ,c_appl_rec.location_cd
588         ,c_appl_rec.attendance_mode
589         ,c_appl_rec.attendance_type
590         )  THEN
591         Fnd_Message.Set_name('IGS','IGS_AD_PRGOFOP_NOT_VALID');
592         IGS_GE_MSG_STACK.ADD;
593         App_Exception.Raise_Exception;
594      END IF;
595 
596       Check_Uniqueness;
597       Check_Constraints;
598       Check_Parent_Existance;
599     ELSIF (p_action = 'UPDATE') THEN
600       -- Call all the procedures related to Before Update.
601      IF NOT Validate_Unit_Set(
602          new_references.version_number
603 	,new_references.unit_set_cd
604         ,new_references.nominated_course_cd
605         ,c_appl_rec.crv_version_number
606         ,c_appl_rec.admission_cat
607         ,c_appl_rec.acad_cal_type
608         ,c_appl_rec.location_cd
609         ,c_appl_rec.attendance_mode
610         ,c_appl_rec.attendance_type
611         )  THEN
612         Fnd_Message.Set_name('IGS','IGS_AD_PRGOFOP_NOT_VALID');
613         IGS_GE_MSG_STACK.ADD;
614         App_Exception.Raise_Exception;
615      END IF;
616       Check_Uniqueness;
617       Check_Constraints;
618       Check_Parent_Existance;
619     ELSIF (p_action = 'DELETE') THEN
620       -- Call all the procedures related to Before Delete.
621       Null;
622     ELSIF (p_action = 'VALIDATE_INSERT') THEN
623 	 -- Call all the procedures related to Before Insert.
624       IF Get_PK_For_Validation (
625     		new_references.unit_set_id)  THEN
626 	       Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
627       IGS_GE_MSG_STACK.ADD;
628 	       App_Exception.Raise_Exception;
629 	     END IF;
630 
631       Check_Uniqueness;
632       Check_Constraints;
633 
634     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
635 
636       Check_Uniqueness;
637       Check_Constraints;
638     ELSIF (p_action = 'VALIDATE_DELETE') THEN
639       Null;
640     END IF;
641     l_rowid := NULL; --Bug:2863832
642   END Before_DML;
643 
644   PROCEDURE After_DML (
645     p_action IN VARCHAR2,
646     x_rowid IN VARCHAR2
647   ) IS
648   /*************************************************************
649   Created By :
650   Date Created By :
651   Purpose :
652   Know limitations, enhancements or remarks
653   Change History
654   Who             When            What
655 
656   (reverse chronological order - newest change first)
657   ***************************************************************/
658 
659   BEGIN
660 
661     l_rowid := x_rowid;
662 
663     IF (p_action = 'INSERT') THEN
664       -- Call all the procedures related to After Insert.
665       Null;
666     ELSIF (p_action = 'UPDATE') THEN
667       -- Call all the procedures related to After Update.
668       Null;
669     ELSIF (p_action = 'DELETE') THEN
670       -- Call all the procedures related to After Delete.
671       Null;
672     END IF;
673 
674   l_rowid:=NULL;
675   END After_DML;
676 
677  procedure INSERT_ROW (
678       X_ROWID in out NOCOPY VARCHAR2,
679        x_UNIT_SET_ID IN OUT NOCOPY NUMBER,
680        x_PERSON_ID IN NUMBER,
681        x_ADMISSION_APPL_NUMBER IN NUMBER,
682        x_NOMINATED_COURSE_CD IN VARCHAR2,
683        x_SEQUENCE_NUMBER IN NUMBER,
684        x_UNIT_SET_CD IN VARCHAR2,
685        x_VERSION_NUMBER IN NUMBER,
686        x_RANK IN NUMBER,
687       X_MODE in VARCHAR2
688   ) AS
689   /*************************************************************
690   Created By :
691   Date Created By :
692   Purpose :
693   Know limitations, enhancements or remarks
694   Change History
695   Who             When            What
696   ravishar      5/30/2005        Security related changes
697 
698   (reverse chronological order - newest change first)
699   ***************************************************************/
700 
701     cursor C is select ROWID from IGS_AD_UNIT_SETS
702              where                 UNIT_SET_ID= X_UNIT_SET_ID
703 ;
704      X_LAST_UPDATE_DATE DATE ;
705      X_LAST_UPDATED_BY NUMBER ;
706      X_LAST_UPDATE_LOGIN NUMBER ;
707      X_REQUEST_ID NUMBER;
708      X_PROGRAM_ID NUMBER;
709      X_PROGRAM_APPLICATION_ID NUMBER;
710      X_PROGRAM_UPDATE_DATE DATE;
711  begin
712     X_LAST_UPDATE_DATE := SYSDATE;
713     if(X_MODE = 'I') then
714       X_LAST_UPDATED_BY := 1;
715       X_LAST_UPDATE_LOGIN := 0;
716     elsif (X_MODE IN ('R', 'S')) then
717       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
718       if X_LAST_UPDATED_BY is NULL then
719         X_LAST_UPDATED_BY := -1;
720       end if;
721       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
722       if X_LAST_UPDATE_LOGIN is NULL then
723         X_LAST_UPDATE_LOGIN := -1;
724       end if;
725       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
726       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
727       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
728       if (X_REQUEST_ID =  -1) then
729         X_REQUEST_ID := NULL;
730         X_PROGRAM_ID := NULL;
731         X_PROGRAM_APPLICATION_ID := NULL;
732         X_PROGRAM_UPDATE_DATE := NULL;
733       else
734         X_PROGRAM_UPDATE_DATE := SYSDATE;
735       end if;
736     else
737       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
738       IGS_GE_MSG_STACK.ADD;
739       app_exception.raise_exception;
740     end if;
741 
742    X_UNIT_SET_ID := -1;
743    Before_DML(
744  		p_action=>'INSERT',
745  		x_rowid=>X_ROWID,
746  	       x_unit_set_id=>X_UNIT_SET_ID,
747  	       x_person_id=>X_PERSON_ID,
748  	       x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
749  	       x_nominated_course_cd=>X_NOMINATED_COURSE_CD,
750  	       x_sequence_number=>X_SEQUENCE_NUMBER,
751  	       x_unit_set_cd=>X_UNIT_SET_CD,
752  	       x_version_number=>X_VERSION_NUMBER,
753  	       x_rank=>X_RANK,
754 	       x_creation_date=>X_LAST_UPDATE_DATE,
755 	       x_created_by=>X_LAST_UPDATED_BY,
756 	       x_last_update_date=>X_LAST_UPDATE_DATE,
757 	       x_last_updated_by=>X_LAST_UPDATED_BY,
758 	       x_last_update_login=>X_LAST_UPDATE_LOGIN);
759   IF (x_mode = 'S') THEN
760     igs_sc_gen_001.set_ctx('R');
761   END IF;
762  insert into IGS_AD_UNIT_SETS (
763 		UNIT_SET_ID
764 		,PERSON_ID
765 		,ADMISSION_APPL_NUMBER
766 		,NOMINATED_COURSE_CD
767 		,SEQUENCE_NUMBER
768 		,UNIT_SET_CD
769 		,VERSION_NUMBER
770 		,RANK
771 	        ,CREATION_DATE
772 		,CREATED_BY
773 		,LAST_UPDATE_DATE
774 		,LAST_UPDATED_BY
775 		,LAST_UPDATE_LOGIN
776 		,REQUEST_ID
777 		,PROGRAM_ID
778 		,PROGRAM_APPLICATION_ID
779 		,PROGRAM_UPDATE_DATE
780         ) values  (
781 	         IGS_AD_UNIT_SETS_S.NEXTVAL
782 	        ,NEW_REFERENCES.PERSON_ID
783 	        ,NEW_REFERENCES.ADMISSION_APPL_NUMBER
784 	        ,NEW_REFERENCES.NOMINATED_COURSE_CD
785 	        ,NEW_REFERENCES.SEQUENCE_NUMBER
786 	        ,NEW_REFERENCES.UNIT_SET_CD
787 	        ,NEW_REFERENCES.VERSION_NUMBER
788 	        ,NEW_REFERENCES.RANK
789 	        ,X_LAST_UPDATE_DATE
790 		,X_LAST_UPDATED_BY
791 		,X_LAST_UPDATE_DATE
792 		,X_LAST_UPDATED_BY
793 		,X_LAST_UPDATE_LOGIN
794 		,X_REQUEST_ID
795 		,X_PROGRAM_ID
796 		,X_PROGRAM_APPLICATION_ID
797 		,X_PROGRAM_UPDATE_DATE
798 )RETURNING UNIT_SET_ID INTO X_UNIT_SET_ID;
799   IF (x_mode = 'S') THEN
800     igs_sc_gen_001.unset_ctx('R');
801   END IF;
802 
803 		open c;
804 		 fetch c into X_ROWID;
805  		if (c%notfound) then
806 		close c;
807  	     raise no_data_found;
808 		end if;
809  		close c;
810     After_DML (
811 		p_action => 'INSERT' ,
812 		x_rowid => X_ROWID );
813 EXCEPTION
814   WHEN OTHERS THEN
815     IF (x_mode = 'S') THEN
816       igs_sc_gen_001.unset_ctx('R');
817     END IF;
818     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
819       -- Code to handle Security Policy error raised
820       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
821       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
822       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
823       --    that the ownerof policy function does not have privilege to access.
824       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
825       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
826       IGS_GE_MSG_STACK.ADD;
827       app_exception.raise_exception;
828     ELSE
829       RAISE;
830     END IF;
831 end INSERT_ROW;
832  procedure LOCK_ROW (
833       X_ROWID in  VARCHAR2,
834        x_UNIT_SET_ID IN NUMBER,
835        x_PERSON_ID IN NUMBER,
836        x_ADMISSION_APPL_NUMBER IN NUMBER,
837        x_NOMINATED_COURSE_CD IN VARCHAR2,
838        x_SEQUENCE_NUMBER IN NUMBER,
839        x_UNIT_SET_CD IN VARCHAR2,
840        x_VERSION_NUMBER IN NUMBER,
841        x_RANK IN NUMBER  ) AS
842   /*************************************************************
843   Created By :
844   Date Created By :
845   Purpose :
846   Know limitations, enhancements or remarks
847   Change History
848   Who             When            What
849 
850   (reverse chronological order - newest change first)
851   ***************************************************************/
852 
853    cursor c1 is select
854       PERSON_ID
855 ,      ADMISSION_APPL_NUMBER
856 ,      NOMINATED_COURSE_CD
857 ,      SEQUENCE_NUMBER
858 ,      UNIT_SET_CD
859 ,      VERSION_NUMBER
860 ,      RANK
861     from IGS_AD_UNIT_SETS
862     where ROWID = X_ROWID
863     for update nowait;
864      tlinfo c1%rowtype;
865 begin
866   open c1;
867   fetch c1 into tlinfo;
868   if (c1%notfound) then
869     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
870       IGS_GE_MSG_STACK.ADD;
871     close c1;
872     app_exception.raise_exception;
873     return;
874   end if;
875   close c1;
876 if ( (  tlinfo.PERSON_ID = X_PERSON_ID)
877   AND (tlinfo.ADMISSION_APPL_NUMBER = X_ADMISSION_APPL_NUMBER)
878   AND (tlinfo.NOMINATED_COURSE_CD = X_NOMINATED_COURSE_CD)
879   AND (tlinfo.SEQUENCE_NUMBER = X_SEQUENCE_NUMBER)
880   AND (tlinfo.UNIT_SET_CD = X_UNIT_SET_CD)
881   AND (tlinfo.VERSION_NUMBER = X_VERSION_NUMBER)
882   AND (tlinfo.RANK = X_RANK)
883   ) then
884     null;
885   else
886     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
887       IGS_GE_MSG_STACK.ADD;
888     app_exception.raise_exception;
889   end if;
890   return;
891 end LOCK_ROW;
892  Procedure UPDATE_ROW (
893       X_ROWID in  VARCHAR2,
894        x_UNIT_SET_ID IN NUMBER,
895        x_PERSON_ID IN NUMBER,
896        x_ADMISSION_APPL_NUMBER IN NUMBER,
897        x_NOMINATED_COURSE_CD IN VARCHAR2,
898        x_SEQUENCE_NUMBER IN NUMBER,
899        x_UNIT_SET_CD IN VARCHAR2,
900        x_VERSION_NUMBER IN NUMBER,
901        x_RANK IN NUMBER,
902       X_MODE in VARCHAR2
903   ) AS
904   /*************************************************************
905   Created By :
906   Date Created By :
907   Purpose :
908   Know limitations, enhancements or remarks
909   Change History
910   Who             When            What
911   ravishar      5/30/2005        Security related changes
912 
913   (reverse chronological order - newest change first)
914   ***************************************************************/
915 
916      X_LAST_UPDATE_DATE DATE ;
917      X_LAST_UPDATED_BY NUMBER ;
918      X_LAST_UPDATE_LOGIN NUMBER ;
919      X_REQUEST_ID NUMBER;
920      X_PROGRAM_ID NUMBER;
921      X_PROGRAM_APPLICATION_ID NUMBER;
922      X_PROGRAM_UPDATE_DATE DATE;
923  begin
924     X_LAST_UPDATE_DATE := SYSDATE;
925     if(X_MODE = 'I') then
926       X_LAST_UPDATED_BY := 1;
927       X_LAST_UPDATE_LOGIN := 0;
928     elsif (X_MODE IN ('R', 'S')) then
929       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
930       if X_LAST_UPDATED_BY is NULL then
931         X_LAST_UPDATED_BY := -1;
932       end if;
933       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
934       if X_LAST_UPDATE_LOGIN is NULL then
935         X_LAST_UPDATE_LOGIN := -1;
936       end if;
937     else
938       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
939       IGS_GE_MSG_STACK.ADD;
940       app_exception.raise_exception;
941     end if;
942    Before_DML(
943  		p_action=>'UPDATE',
944  		x_rowid=>X_ROWID,
945  	       x_unit_set_id=>X_UNIT_SET_ID,
946  	       x_person_id=>X_PERSON_ID,
947  	       x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
948  	       x_nominated_course_cd=>X_NOMINATED_COURSE_CD,
949  	       x_sequence_number=>X_SEQUENCE_NUMBER,
950  	       x_unit_set_cd=>X_UNIT_SET_CD,
951  	       x_version_number=>X_VERSION_NUMBER,
952  	       x_rank=>X_RANK,
953 	       x_creation_date=>X_LAST_UPDATE_DATE,
954 	       x_created_by=>X_LAST_UPDATED_BY,
955 	       x_last_update_date=>X_LAST_UPDATE_DATE,
956 	       x_last_updated_by=>X_LAST_UPDATED_BY,
957 	       x_last_update_login=>X_LAST_UPDATE_LOGIN);
958 
959     if (X_MODE IN ('R', 'S')) then
960       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
961       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
962       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
963       if (X_REQUEST_ID = -1) then
964         X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
965         X_PROGRAM_ID := OLD_REFERENCES. PROGRAM_ID;
966         X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
967         X_PROGRAM_UPDATE_DATE := OLD_REFERENCES.PROGRAM_UPDATE_DATE;
968       else
969         X_PROGRAM_UPDATE_DATE := SYSDATE;
970       end if;
971     end if;
972 
973   IF (x_mode = 'S') THEN
974     igs_sc_gen_001.set_ctx('R');
975   END IF;
976  update IGS_AD_UNIT_SETS set
977       PERSON_ID =  NEW_REFERENCES.PERSON_ID,
978       ADMISSION_APPL_NUMBER =  NEW_REFERENCES.ADMISSION_APPL_NUMBER,
979       NOMINATED_COURSE_CD =  NEW_REFERENCES.NOMINATED_COURSE_CD,
980       SEQUENCE_NUMBER =  NEW_REFERENCES.SEQUENCE_NUMBER,
981       UNIT_SET_CD =  NEW_REFERENCES.UNIT_SET_CD,
982       VERSION_NUMBER =  NEW_REFERENCES.VERSION_NUMBER,
983       RANK =  NEW_REFERENCES.RANK,
984 	LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
985 	LAST_UPDATED_BY = X_LAST_UPDATED_BY,
986 	LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
987 ,	REQUEST_ID = X_REQUEST_ID,
988 	PROGRAM_ID = X_PROGRAM_ID,
989 	PROGRAM_APPLICATION_ID = PROGRAM_APPLICATION_ID,
990 	PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE
991 	  where ROWID = X_ROWID;
992 	if (sql%notfound) then
993      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
994      igs_ge_msg_stack.add;
995      IF (x_mode = 'S') THEN
996        igs_sc_gen_001.unset_ctx('R');
997      END IF;
998      app_exception.raise_exception;
999 	end if;
1000   IF (x_mode = 'S') THEN
1001     igs_sc_gen_001.unset_ctx('R');
1002   END IF;
1003 
1004 
1005  After_DML (
1006 	p_action => 'UPDATE' ,
1007 	x_rowid => X_ROWID
1008 	);
1009 EXCEPTION
1010   WHEN OTHERS THEN
1011     IF (x_mode = 'S') THEN
1012       igs_sc_gen_001.unset_ctx('R');
1013     END IF;
1014     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
1015       -- Code to handle Security Policy error raised
1016       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
1017       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
1018       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
1019       --    that the ownerof policy function does not have privilege to access.
1020       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
1021       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
1022       IGS_GE_MSG_STACK.ADD;
1023       app_exception.raise_exception;
1024     ELSE
1025       RAISE;
1026     END IF;
1027 end UPDATE_ROW;
1028  procedure ADD_ROW (
1029       X_ROWID in out NOCOPY VARCHAR2,
1030        x_UNIT_SET_ID IN OUT NOCOPY NUMBER,
1031        x_PERSON_ID IN NUMBER,
1032        x_ADMISSION_APPL_NUMBER IN NUMBER,
1033        x_NOMINATED_COURSE_CD IN VARCHAR2,
1034        x_SEQUENCE_NUMBER IN NUMBER,
1035        x_UNIT_SET_CD IN VARCHAR2,
1036        x_VERSION_NUMBER IN NUMBER,
1037        x_RANK IN NUMBER,
1038       X_MODE in VARCHAR2
1039   ) AS
1040   /*************************************************************
1041   Created By :
1042   Date Created By :
1043   Purpose :
1044   Know limitations, enhancements or remarks
1045   Change History
1046   Who             When            What
1047 
1048   (reverse chronological order - newest change first)
1049   ***************************************************************/
1050 
1051     cursor c1 is select ROWID from IGS_AD_UNIT_SETS
1052              where     UNIT_SET_ID= X_UNIT_SET_ID
1053 ;
1054 begin
1055 	open c1;
1056 		fetch c1 into X_ROWID;
1057 	if (c1%notfound) then
1058 	close c1;
1059     INSERT_ROW (
1060       X_ROWID,
1061        X_UNIT_SET_ID,
1062        X_PERSON_ID,
1063        X_ADMISSION_APPL_NUMBER,
1064        X_NOMINATED_COURSE_CD,
1065        X_SEQUENCE_NUMBER,
1066        X_UNIT_SET_CD,
1067        X_VERSION_NUMBER,
1068        X_RANK,
1069       X_MODE );
1070      return;
1071 	end if;
1072 	   close c1;
1073 UPDATE_ROW (
1074       X_ROWID,
1075        X_UNIT_SET_ID,
1076        X_PERSON_ID,
1077        X_ADMISSION_APPL_NUMBER,
1078        X_NOMINATED_COURSE_CD,
1079        X_SEQUENCE_NUMBER,
1080        X_UNIT_SET_CD,
1081        X_VERSION_NUMBER,
1082        X_RANK,
1083       X_MODE );
1084 end ADD_ROW;
1085 procedure DELETE_ROW (
1086   X_ROWID in VARCHAR2,
1087   x_mode IN VARCHAR2
1088 ) AS
1089   /*************************************************************
1090   Created By :
1091   Date Created By :
1092   Purpose :
1093   Know limitations, enhancements or remarks
1094   Change History
1095   Who             When            What
1096   ravishar      5/30/2005        Security related changes
1097 
1098   (reverse chronological order - newest change first)
1099   ***************************************************************/
1100 
1101 begin
1102 Before_DML (
1103 p_action => 'DELETE',
1104 x_rowid => X_ROWID
1105 );
1106   IF (x_mode = 'S') THEN
1107     igs_sc_gen_001.set_ctx('R');
1108   END IF;
1109  delete from IGS_AD_UNIT_SETS
1110  where ROWID = X_ROWID;
1111   if (sql%notfound) then
1112      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
1113      igs_ge_msg_stack.add;
1114      IF (x_mode = 'S') THEN
1115         igs_sc_gen_001.unset_ctx('R');
1116      END IF;
1117      app_exception.raise_exception;
1118  end if;
1119  IF (x_mode = 'S') THEN
1120     igs_sc_gen_001.unset_ctx('R');
1121  END IF;
1122 
1123 After_DML (
1124  p_action => 'DELETE',
1125  x_rowid => X_ROWID
1126 );
1127 EXCEPTION
1128   WHEN OTHERS THEN
1129     IF (x_mode = 'S') THEN
1130        igs_sc_gen_001.unset_ctx('R');
1131     END IF;
1132     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
1133       -- Code to handle Security Policy error raised
1134       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
1135       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
1136       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
1137       --    that the ownerof policy function does not have privilege to access.
1138       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
1139       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
1140       IGS_GE_MSG_STACK.ADD;
1141       app_exception.raise_exception;
1142     ELSE
1143       RAISE;
1144     END IF;
1145 end DELETE_ROW;
1146 
1147 END igs_ad_unit_sets_pkg;