DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_APPL_EVAL_PKG

Source


1 PACKAGE BODY igs_ad_appl_eval_pkg AS
2 /* $Header: IGSAIA4B.pls 120.4 2006/07/31 13:28:15 rbezawad ship $ */
3   l_rowid VARCHAR2(25);
4   old_references igs_ad_appl_eval%RowType;
5   new_references igs_ad_appl_eval%RowType;
6 
7   PROCEDURE Set_Column_Values (
8     p_action IN VARCHAR2,
9     x_rowid IN VARCHAR2 DEFAULT NULL,
10     x_appl_eval_id IN NUMBER DEFAULT NULL,
11     x_person_id IN NUMBER DEFAULT NULL,
12     x_admission_appl_number IN NUMBER DEFAULT NULL,
13     x_nominated_course_cd IN VARCHAR2 DEFAULT NULL,
14     x_sequence_number IN NUMBER DEFAULT NULL,
15     x_evaluator_id IN NUMBER DEFAULT NULL,
16     x_assign_type IN VARCHAR2 DEFAULT NULL,
17     x_assign_date IN DATE DEFAULT NULL,
18     x_evaluation_date IN DATE DEFAULT NULL,
19     x_rating_type_id IN NUMBER DEFAULT NULL,
20     x_rating_values_id IN NUMBER DEFAULT NULL,
21     x_rating_notes IN VARCHAR2 DEFAULT NULL,
22     x_creation_date IN DATE DEFAULT NULL,
23     x_created_by IN NUMBER DEFAULT NULL,
24     x_last_update_date IN DATE DEFAULT NULL,
25     x_last_updated_by IN NUMBER DEFAULT NULL,
26     x_last_update_login IN NUMBER DEFAULT NULL,
27     x_evaluation_sequence IN NUMBER DEFAULT NULL,
28     x_rating_scale_id IN NUMBER DEFAULT NULL,
29     x_closed_ind IN VARCHAR2
30   ) AS
31 
32   /*************************************************************
33   Created By :
34   Date Created By :
35   Purpose :
36   Know limitations, enhancements or remarks
37   Change History
38   Who             When            What
39 
40   (reverse chronological order - newest change first)
41   ***************************************************************/
42 
43     CURSOR cur_old_ref_values IS
44       SELECT   *
45       FROM     IGS_AD_APPL_EVAL
46       WHERE    rowid = x_rowid;
47 
48   BEGIN
49 
50     l_rowid := x_rowid;
51 
52     -- Code for setting the Old and New Reference Values.
53     -- Populate Old Values.
54     Open cur_old_ref_values;
55     Fetch cur_old_ref_values INTO old_references;
56     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
57       Close cur_old_ref_values;
58       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
59       IGS_GE_MSG_STACK.ADD;
60       App_Exception.Raise_Exception;
61       Return;
62     END IF;
63     Close cur_old_ref_values;
64 
65     -- Populate New Values.
66     new_references.appl_eval_id := x_appl_eval_id;
67     new_references.person_id := x_person_id;
68     new_references.admission_appl_number := x_admission_appl_number;
69     new_references.nominated_course_cd := x_nominated_course_cd;
70     new_references.sequence_number := x_sequence_number;
71     new_references.evaluator_id := x_evaluator_id;
72     new_references.assign_type := x_assign_type;
73     new_references.assign_date := TRUNC(x_assign_date);
74     new_references.evaluation_date := TRUNC(x_evaluation_date);
75     new_references.rating_type_id := x_rating_type_id;
76     new_references.rating_values_id := x_rating_values_id;
77     new_references.rating_notes := x_rating_notes;
78     new_references.evaluation_sequence := x_evaluation_sequence;
79     new_references.rating_scale_id := x_rating_scale_id;
80     new_references.closed_ind := x_closed_ind;
81     IF (p_action = 'UPDATE') THEN
82       new_references.creation_date := old_references.creation_date;
83       new_references.created_by := old_references.created_by;
84     ELSE
85       new_references.creation_date := x_creation_date;
86       new_references.created_by := x_created_by;
87     END IF;
88     new_references.last_update_date := x_last_update_date;
89     new_references.last_updated_by := x_last_updated_by;
90     new_references.last_update_login := x_last_update_login;
91 
92   END Set_Column_Values;
93 
94   PROCEDURE Check_Constraints (
95                  Column_Name IN VARCHAR2  DEFAULT NULL,
96                  Column_Value IN VARCHAR2  DEFAULT NULL ) AS
97   /*************************************************************
98   Created By :
99   Date Created By :
100   Purpose :
101   Know limitations, enhancements or remarks
102   Change History
103   Who             When            What
104 
105   (reverse chronological order - newest change first)
106   ***************************************************************/
107 
108   BEGIN
109 
110       IF column_name IS NULL THEN
111         NULL;
112       ELSIF  UPPER(column_name) = 'ASSIGN_TYPE'  THEN
113         new_references.assign_type := column_value;
114         NULL;
115       END IF;
116 
117 
118 
119     -- The following code checks for check constraints on the Columns.
120       IF Upper(Column_Name) = 'ASSIGN_TYPE' OR
121         Column_Name IS NULL THEN
122         IF NOT (new_references.assign_type IN ('M','A'))  THEN
123            Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
124       IGS_GE_MSG_STACK.ADD;
125            App_Exception.Raise_Exception;
126         END IF;
127       END IF;
128 
129 
130   END Check_Constraints;
131 
132   PROCEDURE Check_Parent_Existance AS
133   /*************************************************************
134   Created By :
135   Date Created By :
136   Purpose :
137   Know limitations, enhancements or remarks
138   Change History
139   Who             When            What
140 
141   (reverse chronological order - newest change first)
142   ***************************************************************/
143 
144   BEGIN
145 
146     IF (((old_references.rating_values_id = new_references.rating_values_id)) OR
147         ((new_references.rating_values_id IS NULL))) THEN
148       NULL;
149     ELSIF NOT Igs_Ad_Rs_Values_Pkg.Get_PK_For_Validation (
150               new_references.rating_values_id ,
151               'N' )  THEN
152          Fnd_Message.Set_Name ('FND','FORM_RECORD_DELETED');
153       IGS_GE_MSG_STACK.ADD;
154          App_Exception.Raise_Exception;
155     END IF;
156 
157     IF (((old_references.rating_type_id = new_references.rating_type_id)) OR
158         ((new_references.rating_type_id IS NULL))) THEN
159       NULL;
160     ELSIF NOT Igs_Ad_Code_Classes_Pkg.Get_UK2_For_Validation (
161               new_references.rating_type_id,
162               'RATING_TYPE',
163               'N' )  THEN
164          Fnd_Message.Set_Name ('FND','FORM_RECORD_DELETED');
165       IGS_GE_MSG_STACK.ADD;
166          App_Exception.Raise_Exception;
167     END IF;
168 
169     IF (((old_references.person_id = new_references.person_id) AND
170          (old_references.admission_appl_number = new_references.admission_appl_number) AND
171          (old_references.nominated_course_cd = new_references.nominated_course_cd) AND
172          (old_references.sequence_number = new_references.sequence_number)) OR
173         ((new_references.person_id IS NULL) OR
174          (new_references.admission_appl_number IS NULL) OR
175          (new_references.nominated_course_cd IS NULL) OR
176          (new_references.sequence_number IS NULL))) THEN
177       NULL;
178     ELSIF NOT Igs_Ad_Ps_Appl_Inst_Pkg.Get_PKNolock_For_Validation (    -- changed the function call from  Igs_Ad_Ps_Appl_Inst_Pkg.Get_PK_For_Validation to
179                          new_references.person_id,                                                                 -- Igs_Ad_Ps_Appl_Inst_Pkg.Get_PKNolock_For_Validation (For Bug 2760811 - ADCR061
180                          new_references.admission_appl_number,                                    -- locking issues -- rghosh )
181                          new_references.nominated_course_cd,
182                          new_references.sequence_number
183         )  THEN
184          Fnd_Message.Set_Name ('FND','FORM_RECORD_DELETED');
185       IGS_GE_MSG_STACK.ADD;
186          App_Exception.Raise_Exception;
187     END IF;
188 
189     IF (((old_references.evaluator_id = new_references.evaluator_id)) OR
190         ((new_references.evaluator_id IS NULL))) THEN
191       NULL;
192     ELSIF NOT Igs_Pe_Person_Pkg.Get_PK_For_Validation (
193                         new_references.evaluator_id
194         )  THEN
195          Fnd_Message.Set_Name ('FND','FORM_RECORD_DELETED');
196       IGS_GE_MSG_STACK.ADD;
197          App_Exception.Raise_Exception;
198     END IF;
199 
200   END Check_Parent_Existance;
201 
202   FUNCTION Get_PK_For_Validation (
203     x_appl_eval_id IN NUMBER,
204     x_closed_ind IN VARCHAR2
205     ) RETURN BOOLEAN AS
206 
207   /*************************************************************
208   Created By :
209   Date Created By :
210   Purpose :
211   Know limitations, enhancements or remarks
212   Change History
213   Who             When            What
214 
215   (reverse chronological order - newest change first)
216   ***************************************************************/
217 
218     CURSOR cur_rowid IS
219       SELECT   rowid
220       FROM     igs_ad_appl_eval
221       WHERE    appl_eval_id = x_appl_eval_id AND
222                NVL(closed_ind,'N') = DECODE(closed_ind,NULL,'N',NVL(x_closed_ind,closed_ind))
223       FOR UPDATE NOWAIT;
224 
225     lv_rowid cur_rowid%RowType;
226 
227   BEGIN
228 
229     Open cur_rowid;
230     Fetch cur_rowid INTO lv_rowid;
231     IF (cur_rowid%FOUND) THEN
232       Close cur_rowid;
233       Return(TRUE);
234     ELSE
235       Close cur_rowid;
236       Return(FALSE);
237     END IF;
238   END Get_PK_For_Validation;
239 
240   PROCEDURE Get_FK_Igs_Ad_Rs_Values (
241     x_rating_values_id IN NUMBER
242     ) AS
243 
244   /*************************************************************
245   Created By :
246   Date Created By :
247   Purpose :
248   Know limitations, enhancements or remarks
249   Change History
250   Who             When            What
251 
252   (reverse chronological order - newest change first)
253   ***************************************************************/
254 
255     CURSOR cur_rowid IS
256       SELECT   rowid
257       FROM     igs_ad_appl_eval
258       WHERE    rating_values_id = x_rating_values_id ;
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       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AAE_ARV_FK');
269       IGS_GE_MSG_STACK.ADD;
270       App_Exception.Raise_Exception;
271       Return;
272     END IF;
273     Close cur_rowid;
274 
275   END Get_FK_Igs_Ad_Rs_Values;
276 
277   PROCEDURE Get_FK_Igs_Ad_Code_Classes (
278     x_code_id IN NUMBER
279     ) AS
280 
281   /*************************************************************
282   Created By :
283   Date Created By :
284   Purpose :
285   Know limitations, enhancements or remarks
286   Change History
287   Who             When            What
288 
289   (reverse chronological order - newest change first)
290   ***************************************************************/
291 
292     CURSOR cur_rowid IS
293       SELECT   rowid
294       FROM     igs_ad_appl_eval
295       WHERE    rating_type_id = x_code_id ;
296 
297     lv_rowid cur_rowid%RowType;
298 
299   BEGIN
300 
301     Open cur_rowid;
302     Fetch cur_rowid INTO lv_rowid;
303     IF (cur_rowid%FOUND) THEN
304       Close cur_rowid;
305       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AAE_ACDC_FK');
306       IGS_GE_MSG_STACK.ADD;
307       App_Exception.Raise_Exception;
308       Return;
309     END IF;
310     Close cur_rowid;
311 
312   END Get_FK_Igs_Ad_Code_Classes;
313 
314   PROCEDURE Get_FK_Igs_Ad_Ps_Appl_Inst (
315     x_person_id IN NUMBER,
316     x_admission_appl_number IN NUMBER,
317     x_nominated_course_cd IN VARCHAR2,
318     x_sequence_number IN NUMBER
319     ) AS
320 
321   /*************************************************************
322   Created By :
323   Date Created By :
324   Purpose :
325   Know limitations, enhancements or remarks
326   Change History
327   Who             When            What
328 
329   (reverse chronological order - newest change first)
330   ***************************************************************/
331 
332     CURSOR cur_rowid IS
333       SELECT   rowid
334       FROM     igs_ad_appl_eval
335       WHERE    person_id = x_person_id
336       AND      admission_appl_number = x_admission_appl_number
337       AND      nominated_course_cd = x_nominated_course_cd
338       AND      sequence_number = x_sequence_number ;
339 
340     lv_rowid cur_rowid%RowType;
341 
342   BEGIN
343 
344     Open cur_rowid;
345     Fetch cur_rowid INTO lv_rowid;
346     IF (cur_rowid%FOUND) THEN
347       Close cur_rowid;
348       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AAE_ACAI_FK');
349       IGS_GE_MSG_STACK.ADD;
350       App_Exception.Raise_Exception;
351       Return;
352     END IF;
353     Close cur_rowid;
354 
355   END Get_FK_Igs_Ad_Ps_Appl_Inst;
356 
357   PROCEDURE Get_FK_Igs_Pe_Person (
358     x_person_id IN NUMBER
359     ) AS
360 
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 
372     CURSOR cur_rowid IS
373       SELECT   rowid
374       FROM     igs_ad_appl_eval
375       WHERE    evaluator_id = x_person_id ;
376 
377     lv_rowid cur_rowid%RowType;
378 
379   BEGIN
380 
381     Open cur_rowid;
382     Fetch cur_rowid INTO lv_rowid;
383     IF (cur_rowid%FOUND) THEN
384       Close cur_rowid;
385       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AAE_PE_FK');
386       IGS_GE_MSG_STACK.ADD;
387       App_Exception.Raise_Exception;
388       Return;
389     END IF;
390     Close cur_rowid;
391 
392   END Get_FK_Igs_Pe_Person;
393 
394   PROCEDURE Get_FK_Igs_Ad_Rating_Scales (
395     x_rating_scale_id IN NUMBER
396     ) AS
397 
398   /*************************************************************
399   Created By : rboddu
400   Date Created By : 16-NOV-2001
401   Purpose :
402   Know limitations, enhancements or remarks
403   Change History
404   Who             When            What
405 
406   (reverse chronological order - newest change first)
407   ***************************************************************/
408 
409     CURSOR cur_rowid IS
410       SELECT   rowid
411       FROM     igs_ad_appl_eval
412       WHERE    rating_scale_id = x_rating_scale_id ;
413 
414     lv_rowid cur_rowid%RowType;
415 
416   BEGIN
417 
418     Open cur_rowid;
419     Fetch cur_rowid INTO lv_rowid;
420     IF (cur_rowid%FOUND) THEN
421       Close cur_rowid;
422       Fnd_Message.Set_Name ('IGS', 'IGS_AD_AAE_ARS_FK');
423       IGS_GE_MSG_STACK.ADD;
424       App_Exception.Raise_Exception;
425       Return;
426     END IF;
427     Close cur_rowid;
428 
429   END Get_FK_Igs_Ad_Rating_Scales;
430 
431   PROCEDURE Check_Outcome_Status (
432     x_person_id IN NUMBER,
433     x_admission_appl_number IN NUMBER,
434     x_nominated_course_cd IN VARCHAR2,
435     x_sequence_number IN NUMBER
436     ) IS
437      /*************************************************************
438   Created By : rghosh
439   Date Created By : 20-Feb-2003
440   Purpose : Insert and Update is not allowed if  system outcome status is in
441                      ('VOIDED','WITHDRAWN','NO-QUOTA','OFFER','OFFER-FUTURE-TERM')
442 		     or the system outcome status  is REJECTED and the
443 		     req_for_reconsideration_ind is set to 'N'
444   Know limitations, enhancements or remarks
445   Change History
446   Who             When            What
447 
448   (reverse chronological order - newest change first)
449   ***************************************************************/
450     CURSOR c_get_outcome_status ( p_person_id igs_ad_ps_appl_inst_all.person_id%TYPE,
451                                                                     p_admission_appl_number igs_ad_ps_appl_inst_all.admission_appl_number%TYPE,
452 								    p_nominated_course_cd igs_ad_ps_appl_inst_all.nominated_course_cd%TYPE,
453 								    p_sequence_number igs_ad_ps_appl_inst_all.sequence_number%TYPE ) IS
454       SELECT a.adm_outcome_status, b.req_for_reconsideration_ind
455       FROM igs_ad_ps_appl_inst_all a, igs_ad_ps_appl b
456       WHERE a.person_id = p_person_id
457       AND a.admission_appl_number = p_admission_appl_number
458       AND a.nominated_course_cd = p_nominated_course_cd
459       AND a.sequence_number = p_sequence_number
460       AND a.person_id = b.person_id
461       AND a.admission_appl_number = b.admission_appl_number
462       AND a.nominated_course_cd = b.nominated_course_cd;
463 
464      c_get_outcome_status_rec c_get_outcome_status%ROWTYPE;
465 
466    BEGIN
467 
468      OPEN c_get_outcome_status (
469                          x_person_id,
470                          x_admission_appl_number,
471                          x_nominated_course_cd,
472                          x_sequence_number  );
473      FETCH c_get_outcome_status INTO c_get_outcome_status_rec;
474      IF IGS_AD_GEN_008.ADMP_GET_SAOS(c_get_outcome_status_rec.adm_outcome_status) IN ('VOIDED','WITHDRAWN','NO-QUOTA','OFFER','OFFER-FUTURE-TERM') THEN
475        Fnd_Message.Set_name('IGS','IGS_AD_NOT_INS_UPD_EVAL_OUT');
476        IGS_GE_MSG_STACK.ADD;
477        CLOSE c_get_outcome_status;
478        App_Exception.Raise_Exception;
479      ELSIF IGS_AD_GEN_008.ADMP_GET_SAOS(c_get_outcome_status_rec.adm_outcome_status) = 'REJECTED' AND c_get_outcome_status_rec.req_for_reconsideration_ind = 'N' THEN
480        Fnd_Message.Set_name('IGS','IGS_AD_NOT_INS_UPD_EVAL_REQ');
481        IGS_GE_MSG_STACK.ADD;
482        CLOSE c_get_outcome_status;
483        App_Exception.Raise_Exception;
484      END IF;
485      CLOSE c_get_outcome_status;
486 
487   END Check_Outcome_Status;
488 
489 
490   PROCEDURE Before_DML (
491     p_action IN VARCHAR2,
492     x_rowid IN VARCHAR2 DEFAULT NULL,
493     x_appl_eval_id IN NUMBER DEFAULT NULL,
494     x_person_id IN NUMBER DEFAULT NULL,
495     x_admission_appl_number IN NUMBER DEFAULT NULL,
496     x_nominated_course_cd IN VARCHAR2 DEFAULT NULL,
497     x_sequence_number IN NUMBER DEFAULT NULL,
498     x_evaluator_id IN NUMBER DEFAULT NULL,
499     x_assign_type IN VARCHAR2 DEFAULT NULL,
500     x_assign_date IN DATE DEFAULT NULL,
501     x_evaluation_date IN DATE DEFAULT NULL,
502     x_rating_type_id IN NUMBER DEFAULT NULL,
503     x_rating_values_id IN NUMBER DEFAULT NULL,
504     x_rating_notes IN VARCHAR2 DEFAULT NULL,
505     x_creation_date IN DATE DEFAULT NULL,
506     x_created_by IN NUMBER DEFAULT NULL,
507     x_last_update_date IN DATE DEFAULT NULL,
508     x_last_updated_by IN NUMBER DEFAULT NULL,
509     x_last_update_login IN NUMBER DEFAULT NULL,
510     x_evaluation_sequence IN NUMBER DEFAULT NULL,
511     x_rating_scale_id IN NUMBER DEFAULT NULL,
512     x_closed_ind IN VARCHAR2 DEFAULT NULL
513   ) AS
514   /*************************************************************
515   Created By :
516   Date Created By :
517   Purpose :
518   Know limitations, enhancements or remarks
519   Change History
520   Who             When            What
521 
522   (reverse chronological order - newest change first)
523   ***************************************************************/
524 
525   BEGIN
526 
527     Set_Column_Values (
528       p_action,
529       x_rowid,
530       x_appl_eval_id,
531       x_person_id,
532       x_admission_appl_number,
533       x_nominated_course_cd,
534       x_sequence_number,
535       x_evaluator_id,
536       x_assign_type,
537       x_assign_date,
538       x_evaluation_date,
539       x_rating_type_id,
540       x_rating_values_id,
541       x_rating_notes,
542       x_creation_date,
543       x_created_by,
544       x_last_update_date,
545       x_last_updated_by,
546       x_last_update_login,
547       x_evaluation_sequence,
548       x_rating_scale_id,
549       x_closed_ind
550     );
551 
552     igs_ad_gen_002.check_adm_appl_inst_stat(
553       nvl(x_person_id,old_references.person_id),
554       nvl(x_admission_appl_number,old_references.admission_appl_number),
555       nvl(x_nominated_course_cd,old_references.nominated_course_cd),
556       nvl(x_sequence_number,old_references.sequence_number)
557       );
558 
559     IF (p_action = 'INSERT') THEN
560       -- Call all the procedures related to Before Insert.
561       Null;
562              IF Get_Pk_For_Validation(
563                 new_references.appl_eval_id)  THEN
564                Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
565       IGS_GE_MSG_STACK.ADD;
566                App_Exception.Raise_Exception;
567              END IF;
568       Check_Constraints;
569       Check_Parent_Existance;
570       Check_Outcome_Status  (
571                          new_references.person_id,
572                          new_references.admission_appl_number,
573                          new_references.nominated_course_cd,
574                          new_references.sequence_number  );
575     ELSIF (p_action = 'UPDATE') THEN
576       -- Call all the procedures related to Before Update.
577       Null;
578       Check_Constraints;
579       Check_Parent_Existance;
580       Check_Outcome_Status  (
581                          new_references.person_id,
582                          new_references.admission_appl_number,
583                          new_references.nominated_course_cd,
584                          new_references.sequence_number  );
585     ELSIF (p_action = 'DELETE') THEN
586       -- Call all the procedures related to Before Delete.
587       Null;
588     ELSIF (p_action = 'VALIDATE_INSERT') THEN
589          -- Call all the procedures related to Before Insert.
590       IF Get_PK_For_Validation (
591                 new_references.appl_eval_id)  THEN
592                Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
593       IGS_GE_MSG_STACK.ADD;
594                App_Exception.Raise_Exception;
595              END IF;
596       Check_Constraints;
597       Check_Outcome_Status  (
598                          new_references.person_id,
599                          new_references.admission_appl_number,
600                          new_references.nominated_course_cd,
601                          new_references.sequence_number  );
602     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
603       Check_Constraints;
604       Check_Outcome_Status  (
605                          new_references.person_id,
606                          new_references.admission_appl_number,
607                          new_references.nominated_course_cd,
608                          new_references.sequence_number  );
609     ELSIF (p_action = 'VALIDATE_DELETE') THEN
610       Null;
611     END IF;
612 
613   END Before_DML;
614 
615   PROCEDURE After_DML (
616     p_action IN VARCHAR2,
617     x_rowid IN VARCHAR2
618   ) IS
619   /*************************************************************
620   Created By :
621   Date Created By :
622   Purpose :
623   Know limitations, enhancements or remarks
624   Change History
625   Who             When            What
626 
627   (reverse chronological order - newest change first)
628   ***************************************************************/
629 
630   BEGIN
631 
632     l_rowid := x_rowid;
633 
634     IF (p_action = 'INSERT') THEN
635       -- Call all the procedures related to After Insert.
636       Null;
637     ELSIF (p_action = 'UPDATE') THEN
638       -- Call all the procedures related to After Update.
639       Null;
640     ELSIF (p_action = 'DELETE') THEN
641       -- Call all the procedures related to After Delete.
642       Null;
643     END IF;
644 
645    l_rowid:=NULL;
646    END After_DML;
647 
648 /* New procedure to findout the person id for the next set of evaluators */
649 
650 FUNCTION find_next_eval (
651         x_person_id             IN      NUMBER,
652         x_admission_appl_number IN      NUMBER,
653         x_NOMINATED_COURSE_CD   IN      VARCHAR2,
654         x_SEQUENCE_NUMBER       IN      NUMBER,
655         x_eval_seq              IN      NUMBER
656         ) RETURN NUMBER AS
657 
658 /* Given an evaluation sequence this function is used to find out the next evaluator person id */
659 
660         cursor c_next_eval IS
661         select evaluation_sequence
662         from igs_ad_appl_eval
663         where person_id = x_person_id
664         and admission_appl_number = x_admission_appl_number
665         and nominated_course_cd = x_nominated_course_cd
666         and sequence_number = x_sequence_number
667         and evaluation_sequence > x_eval_seq
668         order by evaluation_sequence;
669 
670         cursor c_next_person_id(cp_eval_seq number) is
671 		Select
672 	        distinct EVALUATOR_ID
673                 From IGS_AD_APPL_EVAL
674                 Where EVALUATION_SEQUENCE = cp_eval_seq
675 		and person_id = x_person_id
676 		and admission_appl_number = x_admission_appl_number
677 		and nominated_course_cd = x_nominated_course_cd
678 		and sequence_number = x_sequence_number;
679 
680 l_next_eval_seq NUMBER;
681 l_next_person_id NUMBER;
682 
683 BEGIN
684         OPEN c_next_eval;
685         FETCH c_next_eval INTO l_next_eval_seq;
686         IF c_next_eval%NOTFOUND THEN
687            CLOSE c_next_eval;
688            RETURN 0;
689         ELSE
690            CLOSE c_next_eval;
691 	END IF;
692 
693 	OPEN c_next_person_id(l_next_eval_seq);
694 	FETCH c_next_person_id INTO l_next_person_id;
695 	CLOSE c_next_person_id;
696 
697 	RETURN l_next_person_id;
698 END;
699 
700 
701 
702 /************** New Procedure for sending notification to evaluators: bug 2864696 ******************/
703 
704 PROCEDURE wf_evaluator_validation (
705         x_person_id             IN      NUMBER,
706         x_admission_appl_number IN      NUMBER,
707         x_NOMINATED_COURSE_CD   IN      VARCHAR2,
708         x_SEQUENCE_NUMBER       IN      NUMBER,
709         x_eval_seq              IN      NUMBER
710         ) IS
711 
712 Cursor c_appl_revprof IS
713                 SELECT
714                 a.appl_rev_profile_id,
715                 a.appl_revprof_revgr_id,
716                 r.SEQUENTIAL_CONCURRENT_IND
717                 FROM    igs_ad_appl_arp a,  igs_ad_apl_rev_prf_all r
718                 WHERE   a.person_id = x_person_id
719                 AND     a.admission_appl_number = x_admission_appl_number
720                 And     a.nominated_course_cd = x_nominated_course_cd
721                 And     a.sequence_number = x_sequence_number
722                 AND     a.appl_rev_profile_id = r.appl_rev_profile_id;
723 
724 Cursor c_eval_num IS
725 		SELECT  'X'					--bug 3709285 arvsrini
726                 FROM    IGS_AD_APPL_EVAL
727                 WHERE   EVALUATION_SEQUENCE = x_eval_seq
728                 AND     rating_type_ID is NOT NULL
729                 AND     rating_scale_id IS NOT NULL
730                 AND     EVALUATION_DATE IS NULL
731                 AND     rating_values_id IS NULL
732 		AND	PERSON_ID = x_person_id
733 		AND	ADMISSION_APPL_NUMBER = x_admission_appl_number
734 		AND	NOMINATED_COURSE_CD = x_nominated_course_cd
735 		AND	SEQUENCE_NUMBER = x_sequence_number;
736 
737 
738         /*        SELECT  count(rowid)
739                 FROM    IGS_AD_APPL_EVAL
740                 WHERE   EVALUATION_SEQUENCE = x_eval_seq
741                 AND     rating_type_ID is NOT NULL
742                 AND     rating_scale_id IS NOT NULL
743                 AND     EVALUATION_DATE IS NOT NULL
744                 AND     rating_values_id  IS NOT NULL;
745 	*/
746 
747 
748 l_eval_num  NUMBER := 0;
749 l_appl_revprof_id igs_ad_apl_rev_prf_all.appl_rev_profile_id%TYPE;
750 l_appl_revprof_revgr_id igs_ad_appl_arp.APPL_REVPROF_REVGR_ID%TYPE;
751 l_seq_conc_ind igs_ad_apl_rev_prf_all.SEQUENTIAL_CONCURRENT_IND%TYPE;
752 
753 l_person_id NUMBER;
754 l_person_name VARCHAR2(320);
755 l_full_name VARCHAR2(1000);
756 l_display_name VARCHAR2(360);
757 
758 
759 BEGIN
760 
761         OPEN c_appl_revprof;
762         FETCH c_appl_revprof INTO l_appl_revprof_id, l_appl_revprof_revgr_id, l_seq_conc_ind;
763         IF c_appl_revprof%NOTFOUND THEN
764                 CLOSE c_appl_revprof;
765                 Return;
766         ELSE
767              IF l_seq_conc_ind = 'S' THEN
768                 IF g_dns_ind = 'N' THEN
769 
770                         OPEN c_eval_num;
771 
772                         FETCH c_eval_num INTO l_eval_num;
773 	--			IF C_EVAL_NUM%NOTFOUND THEN		-- bug 3709285
774 				IF C_EVAL_NUM%FOUND THEN		-- If there exists any un eveluated record for this sequence number then do not send notification to next evaluator
775                                         RETURN;
776                         ELSE
777 
778 /* Added this function call to take care of evaluation sequence gaps caused by delete on this table */
779                                 l_person_id := find_next_eval(
780                                         x_person_id,
781                                         x_admission_appl_number,
782                                         x_NOMINATED_COURSE_CD,
783                                         x_SEQUENCE_NUMBER,
784                                         x_eval_seq );
785 
786          /*             Select
787 	                distinct person_id
788                         Into l_person_id
789                         From IGS_AD_APPL_EVAL
790                         Where EVALUATION_SEQUENCE = x_eval_seq + 1;  */
791 
792                         Wf_Directory.GetRoleName('HZ_PARTY', l_person_id, l_person_name, l_full_name);
793 
794                                 IF l_person_name IS NOT NULL THEN
795 
796                                 FND_FILE.PUT_LINE (FND_FILE.LOG, '');
797                                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AD_APNTF6');
798                                 FND_MESSAGE.SET_TOKEN ('PNAME', l_full_name);
799                                 FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET());
800 
801                                 IGS_AD_ASSIGN_EVAL_AI_PKG.Wf_Inform_Evaluator_Appl (l_person_id, l_person_name,l_full_name);
802 
803                                 ELSE
804                                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AD_APNTF4');
805                                 FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET());
806 
807                                 END IF ; /* l_person_name */
808 
809                         END IF; /* c_eval_num */
810 
811                 END IF; /* p_dns_ind */
812 
813             END IF; /* seq_conc_ind */
814 
815         END IF; /* c_appl_revprof */
816 
817   EXCEPTION
818      WHEN OTHERS THEN
819        IGS_GE_MSG_STACK.CONC_EXCEPTION_HNDL;
820 
821    IF c_appl_revprof%ISOPEN THEN
822       CLOSE c_appl_revprof;
823    END IF;
824    IF c_eval_num%ISOPEN THEN
825       CLOSE c_eval_num;
826    END IF;
827 
828 END wf_evaluator_validation;
829 /***************************/
830 
831 
832  PROCEDURE insert_row (
833        x_rowid IN OUT NOCOPY VARCHAR2,
834        x_appl_eval_id IN OUT NOCOPY 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_evaluator_id IN NUMBER,
840        x_assign_type IN VARCHAR2,
841        x_assign_date IN DATE,
842        x_evaluation_date IN DATE,
843        x_rating_type_id IN NUMBER,
844        x_rating_values_id IN NUMBER,
845        x_rating_notes IN VARCHAR2,
846        x_mode IN VARCHAR2,
847        x_evaluation_sequence IN NUMBER DEFAULT NULL,
848        x_rating_scale_id IN NUMBER DEFAULT NULL,
849        x_closed_ind IN VARCHAR2
850   ) AS
851   /*************************************************************
852   Created By :
853   Date Created By :
854   Purpose :
855   Know limitations, enhancements or remarks
856   Change History
857   Who             When            What
858   ravishar      5/30/2005        Security related changes
859 
860   (reverse chronological order - newest change first)
861   ***************************************************************/
862 
863     cursor C is select ROWID from IGS_AD_APPL_EVAL
864              where                 APPL_EVAL_ID= X_APPL_EVAL_ID
865 ;
866      X_LAST_UPDATE_DATE DATE ;
867      X_LAST_UPDATED_BY NUMBER ;
868      X_LAST_UPDATE_LOGIN NUMBER ;
869      X_REQUEST_ID NUMBER;
870      X_PROGRAM_ID NUMBER;
871      X_PROGRAM_APPLICATION_ID NUMBER;
872      X_PROGRAM_UPDATE_DATE DATE;
873  begin
874     X_LAST_UPDATE_DATE := SYSDATE;
875     if(X_MODE = 'I') then
876       X_LAST_UPDATED_BY := 1;
877       X_LAST_UPDATE_LOGIN := 0;
878     elsif (X_MODE IN ('R', 'S')) then
879       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
880       if X_LAST_UPDATED_BY is NULL then
881         X_LAST_UPDATED_BY := -1;
882       end if;
883       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
884       if X_LAST_UPDATE_LOGIN is NULL then
885         X_LAST_UPDATE_LOGIN := -1;
886       end if;
887       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
888       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
889       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
890       if (X_REQUEST_ID =  -1) then
891         X_REQUEST_ID := NULL;
892         X_PROGRAM_ID := NULL;
893         X_PROGRAM_APPLICATION_ID := NULL;
894         X_PROGRAM_UPDATE_DATE := NULL;
895       else
896         X_PROGRAM_UPDATE_DATE := SYSDATE;
897       end if;
898     else
899       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
900       IGS_GE_MSG_STACK.ADD;
901       app_exception.raise_exception;
902     end if;
903 
904    X_APPL_EVAL_ID := -1;
905    Before_DML(
906                 p_action=>'INSERT',
907                 x_rowid=>X_ROWID,
908                x_appl_eval_id=>X_APPL_EVAL_ID,
909                x_person_id=>X_PERSON_ID,
910                x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
911                x_nominated_course_cd=>X_NOMINATED_COURSE_CD,
912                x_sequence_number=>X_SEQUENCE_NUMBER,
913                x_evaluator_id=>X_EVALUATOR_ID,
914                x_assign_type=>X_ASSIGN_TYPE,
915                x_assign_date=>X_ASSIGN_DATE,
916                x_evaluation_date=>X_EVALUATION_DATE,
917                x_rating_type_id=>X_RATING_TYPE_ID,
918                x_rating_values_id=>X_RATING_VALUES_ID,
919                x_rating_notes=>X_RATING_NOTES,
920                x_creation_date=>X_LAST_UPDATE_DATE,
921                x_created_by=>X_LAST_UPDATED_BY,
922                x_last_update_date=>X_LAST_UPDATE_DATE,
923                x_last_updated_by=>X_LAST_UPDATED_BY,
924                x_last_update_login=>X_LAST_UPDATE_LOGIN,
925                x_evaluation_sequence=>X_EVALUATION_SEQUENCE,
926                x_rating_scale_id=>X_RATING_SCALE_ID,
927 	       x_closed_ind => X_CLOSED_IND);
928   IF (x_mode = 'S') THEN
929     igs_sc_gen_001.set_ctx('R');
930   END IF;
931  INSERT INTO igs_ad_appl_eval (
932                 appl_eval_id
933                 ,person_id
934                 ,admission_appl_number
935                 ,nominated_course_cd
936                 ,sequence_number
937                 ,evaluator_id
938                 ,assign_type
939                 ,assign_date
940                 ,evaluation_date
941                 ,rating_type_id
942                 ,rating_values_id
943                 ,rating_notes
944                 ,creation_date
945                 ,created_by
946                 ,last_update_date
947                 ,last_updated_by
948                 ,last_update_login
949                 ,request_id
950                 ,program_id
951                 ,program_application_id
952                 ,program_update_date
953                 ,evaluation_sequence
954                 ,rating_scale_id
955                 ,closed_ind
956         ) VALUES  (
957                 igs_ad_appl_eval_s.NEXTVAL
958                 ,new_references.person_id
959                 ,new_references.admission_appl_number
960                 ,new_references.nominated_course_cd
961                 ,new_references.sequence_number
962                 ,new_references.evaluator_id
963                 ,new_references.assign_type
964                 ,new_references.assign_date
965                 ,new_references.evaluation_date
966                 ,new_references.rating_type_id
967                 ,new_references.rating_values_id
968                 ,new_references.rating_notes
969                 ,x_last_update_date
970                 ,x_last_updated_by
971                 ,x_last_update_date
972                 ,x_last_updated_by
973                 ,x_last_update_login
974                 ,x_request_id
975                 ,x_program_id
976                 ,x_program_application_id
977                 ,x_program_update_date
978                 ,x_evaluation_sequence
979                 ,x_rating_scale_id
980 		,x_closed_ind
981 )RETURNING appl_eval_id INTO x_appl_eval_id;
982   IF (x_mode = 'S') THEN
983     igs_sc_gen_001.unset_ctx('R');
984   END IF;
985 
986                 OPEN c;
987                  FETCH c INTO x_rowid;
988                 IF (c%NOTFOUND) THEN
989                   CLOSE c;
990                   RAISE no_data_found;
991                 END IF;
992                 CLOSE c;
993     After_DML (
994                 p_action => 'INSERT' ,
995                 x_rowid => X_ROWID );
996 EXCEPTION
997   WHEN OTHERS THEN
998     IF (x_mode = 'S') THEN
999       igs_sc_gen_001.unset_ctx('R');
1000     END IF;
1001     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
1002       -- Code to handle Security Policy error raised
1003       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
1004       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
1005       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
1006       --    that the ownerof policy function does not have privilege to access.
1007       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
1008       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
1009       IGS_GE_MSG_STACK.ADD;
1010       app_exception.raise_exception;
1011     ELSE
1012       RAISE;
1013     END IF;
1014 END insert_row;
1015 
1016   PROCEDURE lock_row (
1017     x_rowid                             IN     VARCHAR2,
1018     x_appl_eval_id                      IN     NUMBER,
1019     x_person_id                         IN     NUMBER,
1020     x_admission_appl_number             IN     NUMBER,
1021     x_nominated_course_cd               IN     VARCHAR2,
1022     x_sequence_number                   IN     NUMBER,
1023     x_evaluator_id                      IN     NUMBER,
1024     x_assign_type                       IN     VARCHAR2,
1025     x_assign_date                       IN     DATE,
1026     x_evaluation_date                   IN     DATE,
1027     x_rating_type_id                    IN     NUMBER,
1028     x_rating_values_id                  IN     NUMBER,
1029     x_rating_notes                      IN     VARCHAR2,
1030     x_evaluation_sequence               IN     NUMBER,
1031     x_rating_scale_id                   IN     NUMBER,
1032     x_closed_ind IN VARCHAR2
1033   ) AS
1034   /*
1035   ||  Created By : kamohan
1036   ||  Created On : 06-FEB-2002
1037   ||  Purpose : Handles the LOCK mechanism for the table.
1038   ||  Known limitations, enhancements or remarks :
1039   ||  Change History :
1040   ||  Who             When            What
1041   ||  (reverse chronological order - newest change first)
1042   */
1043     CURSOR c1 IS
1044       SELECT
1045         person_id,
1046         admission_appl_number,
1047         nominated_course_cd,
1048         sequence_number,
1049         evaluator_id,
1050         assign_type,
1051         assign_date,
1052         evaluation_date,
1053         rating_type_id,
1054         rating_values_id,
1055         rating_notes,
1056         evaluation_sequence,
1057         rating_scale_id,
1058         closed_ind
1059       FROM  igs_ad_appl_eval
1060       WHERE rowid = x_rowid
1061       FOR UPDATE NOWAIT;
1062 
1063     tlinfo c1%ROWTYPE;
1064 
1065   BEGIN
1066 
1067     OPEN c1;
1068     FETCH c1 INTO tlinfo;
1069     IF (c1%notfound) THEN
1070       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
1071       igs_ge_msg_stack.add;
1072       CLOSE c1;
1073       app_exception.raise_exception;
1074       RETURN;
1075     END IF;
1076     CLOSE c1;
1077 
1078     IF (
1079         (tlinfo.person_id = x_person_id)
1080         AND (tlinfo.admission_appl_number = x_admission_appl_number)
1081         AND (tlinfo.nominated_course_cd = x_nominated_course_cd)
1082         AND (tlinfo.sequence_number = x_sequence_number)
1083         AND (tlinfo.evaluator_id = x_evaluator_id)
1084         AND (tlinfo.assign_type = x_assign_type)
1085         AND (trunc(tlinfo.assign_date) = trunc(x_assign_date))
1086         AND ((trunc(tlinfo.evaluation_date) = trunc(x_evaluation_date)) OR ((tlinfo.evaluation_date IS NULL) AND (X_evaluation_date IS NULL)))
1087         AND ((tlinfo.rating_type_id = x_rating_type_id) OR ((tlinfo.rating_type_id IS NULL) AND (X_rating_type_id IS NULL)))
1088         AND ((tlinfo.rating_values_id = x_rating_values_id) OR ((tlinfo.rating_values_id IS NULL) AND (X_rating_values_id IS NULL)))
1089         AND ((tlinfo.rating_notes = x_rating_notes) OR ((tlinfo.rating_notes IS NULL) AND (X_rating_notes IS NULL)))
1090         AND ((tlinfo.evaluation_sequence = x_evaluation_sequence) OR ((tlinfo.evaluation_sequence IS NULL) AND (X_evaluation_sequence IS NULL)))
1091         AND ((tlinfo.rating_scale_id = x_rating_scale_id) OR ((tlinfo.rating_scale_id IS NULL) AND (X_rating_scale_id IS NULL)))
1092 	AND ((tlinfo.closed_ind = x_closed_ind) OR ((tlinfo.closed_ind IS NULL) AND (X_closed_ind IS NULL)))
1093        ) THEN
1094       NULL;
1095     ELSE
1096       fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
1097       igs_ge_msg_stack.add;
1098       app_exception.raise_exception;
1099     END IF;
1100 
1101     RETURN;
1102 
1103   END lock_row;
1104 
1105  PROCEDURE update_row (
1106        x_rowid IN  VARCHAR2,
1107        x_appl_eval_id IN NUMBER,
1108        x_person_id IN NUMBER,
1109        x_admission_appl_number IN NUMBER,
1110        x_nominated_course_cd IN VARCHAR2,
1111        x_sequence_number IN NUMBER,
1112        x_evaluator_id IN NUMBER,
1113        x_assign_type IN VARCHAR2,
1114        x_assign_date IN DATE,
1115        x_evaluation_date IN DATE,
1116        x_rating_type_id IN NUMBER,
1117        x_rating_values_id IN NUMBER,
1118        x_rating_notes IN VARCHAR2,
1119        x_mode IN VARCHAR2,
1120        x_evaluation_sequence IN NUMBER DEFAULT NULL,
1121        x_rating_scale_id IN NUMBER DEFAULT NULL,
1122        x_closed_ind IN VARCHAR2
1123   ) AS
1124   /*************************************************************
1125   Created By :
1126   Date Created By :
1127   Purpose :
1128   Know limitations, enhancements or remarks
1129   Change History
1130   Who             When            What
1131   ravishar      05/27/05        Security related changes
1132 
1133   (reverse chronological order - newest change first)
1134   ***************************************************************/
1135 
1136      X_LAST_UPDATE_DATE DATE ;
1137      X_LAST_UPDATED_BY NUMBER ;
1138      X_LAST_UPDATE_LOGIN NUMBER ;
1139      X_REQUEST_ID NUMBER;
1140      X_PROGRAM_ID NUMBER;
1141      X_PROGRAM_APPLICATION_ID NUMBER;
1142      X_PROGRAM_UPDATE_DATE DATE;
1143  begin
1144     X_LAST_UPDATE_DATE := SYSDATE;
1145     if(X_MODE = 'I') then
1146       X_LAST_UPDATED_BY := 1;
1147       X_LAST_UPDATE_LOGIN := 0;
1148     elsif (X_MODE IN ('R', 'S')) then
1149       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1150       if X_LAST_UPDATED_BY is NULL then
1151         X_LAST_UPDATED_BY := -1;
1152       end if;
1153       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
1154       if X_LAST_UPDATE_LOGIN is NULL then
1155         X_LAST_UPDATE_LOGIN := -1;
1156       end if;
1157     else
1158       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
1159       IGS_GE_MSG_STACK.ADD;
1160       app_exception.raise_exception;
1161     end if;
1162    Before_DML(
1163                 p_action=>'UPDATE',
1164                 x_rowid=>X_ROWID,
1165                x_appl_eval_id=>X_APPL_EVAL_ID,
1166                x_person_id=>X_PERSON_ID,
1167                x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
1168                x_nominated_course_cd=>X_NOMINATED_COURSE_CD,
1169                x_sequence_number=>X_SEQUENCE_NUMBER,
1170                x_evaluator_id=>X_EVALUATOR_ID,
1171                x_assign_type=>X_ASSIGN_TYPE,
1172                x_assign_date=>X_ASSIGN_DATE,
1173                x_evaluation_date=>X_EVALUATION_DATE,
1174                x_rating_type_id=>X_RATING_TYPE_ID,
1175                x_rating_values_id=>X_RATING_VALUES_ID,
1176                x_rating_notes=>X_RATING_NOTES,
1177                x_creation_date=>X_LAST_UPDATE_DATE,
1178                x_created_by=>X_LAST_UPDATED_BY,
1179                x_last_update_date=>X_LAST_UPDATE_DATE,
1180                x_last_updated_by=>X_LAST_UPDATED_BY,
1181                x_last_update_login=>X_LAST_UPDATE_LOGIN,
1182                x_evaluation_sequence=>X_EVALUATION_SEQUENCE,
1183                x_rating_scale_id=>X_RATING_SCALE_ID,
1184 	       x_closed_ind => X_CLOSED_IND );
1185 
1186     if (X_MODE IN ('R', 'S')) then
1187       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
1188       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
1189       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
1190       if (X_REQUEST_ID = -1) then
1191         X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
1192         X_PROGRAM_ID := OLD_REFERENCES. PROGRAM_ID;
1193         X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
1194         X_PROGRAM_UPDATE_DATE := OLD_REFERENCES.PROGRAM_UPDATE_DATE;
1195       else
1196         X_PROGRAM_UPDATE_DATE := SYSDATE;
1197       end if;
1198     end if;
1199 
1200   IF (x_mode = 'S') THEN
1201     igs_sc_gen_001.set_ctx('R');
1202   END IF;
1203  UPDATE igs_ad_appl_eval SET
1204       person_id =  new_references.person_id,
1205       admission_appl_number =  new_references.admission_appl_number,
1206       nominated_course_cd =  new_references.nominated_course_cd,
1207       sequence_number =  new_references.sequence_number,
1208       evaluator_id =  new_references.evaluator_id,
1209       assign_type =  new_references.assign_type,
1210       assign_date =  new_references.assign_date,
1211       evaluation_date =  new_references.evaluation_date,
1212       rating_type_id =  new_references.rating_type_id,
1213       rating_values_id =  new_references.rating_values_id,
1214       rating_notes =  new_references.rating_notes,
1215       evaluation_sequence = new_references.evaluation_sequence,
1216       rating_scale_id = new_references.rating_scale_id,
1217       last_update_date = x_last_update_date,
1218       last_updated_by = x_last_updated_by,
1219       last_update_login = x_last_update_login,
1220       request_id = x_request_id,
1221       program_id = x_program_id,
1222       program_application_id = program_application_id,
1223       program_update_date = x_program_update_date,
1224       closed_ind = x_closed_ind
1225    WHERE rowid = x_rowid;
1226    IF (sql%NOTFOUND) THEN
1227      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
1228      igs_ge_msg_stack.add;
1229      IF (x_mode = 'S') THEN
1230        igs_sc_gen_001.unset_ctx('R');
1231      END IF;
1232      app_exception.raise_exception;
1233  END IF;
1234  IF (x_mode = 'S') THEN
1235     igs_sc_gen_001.unset_ctx('R');
1236  END IF;
1237 
1238 
1239  After_DML (
1240         p_action => 'UPDATE' ,
1241         x_rowid => X_ROWID
1242         );
1243 
1244 /* Added this if clause to take of closed indicator */
1245 
1246 IF x_closed_ind = 'N' and old_references.evaluation_date IS NULL and
1247                 old_references.rating_values_id IS NULL THEN
1248 
1249 wf_evaluator_validation (
1250         x_person_id             => x_person_id,
1251         x_admission_appl_number => x_admission_appl_number,
1252         x_NOMINATED_COURSE_CD   => x_NOMINATED_COURSE_CD,
1253         x_SEQUENCE_NUMBER       => x_SEQUENCE_NUMBER,
1254         x_eval_seq              => x_EVALUATION_SEQUENCE
1255         );
1256 END IF;
1257 
1258 EXCEPTION
1259   WHEN OTHERS THEN
1260     IF (x_mode = 'S') THEN
1261        igs_sc_gen_001.unset_ctx('R');
1262     END IF;
1263     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
1264       -- Code to handle Security Policy error raised
1265       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
1266       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
1267       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
1268       --    that the ownerof policy function does not have privilege to access.
1269       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
1270       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
1271       IGS_GE_MSG_STACK.ADD;
1272       app_exception.raise_exception;
1273     ELSE
1274       RAISE;
1275     END IF;
1276 END update_row;
1277 
1278  PROCEDURE add_row (
1279        x_rowid IN OUT NOCOPY VARCHAR2,
1280        x_appl_eval_id IN OUT NOCOPY NUMBER,
1281        x_person_id IN NUMBER,
1282        x_admission_appl_number IN NUMBER,
1283        x_nominated_course_cd IN VARCHAR2,
1284        x_sequence_number IN NUMBER,
1285        x_evaluator_id IN NUMBER,
1286        x_assign_type IN VARCHAR2,
1287        x_assign_date IN DATE,
1288        x_evaluation_date IN DATE,
1289        x_rating_type_id IN NUMBER,
1290        x_rating_values_id IN NUMBER,
1291        x_rating_notes IN VARCHAR2,
1292        x_mode IN VARCHAR2,
1293        x_evaluation_sequence IN NUMBER DEFAULT NULL,
1294        x_rating_scale_id IN NUMBER  DEFAULT NULL ,
1295        x_closed_ind IN VARCHAR2
1296   ) AS
1297   /*************************************************************
1298   Created By :
1299   Date Created By :
1300   Purpose :
1301   Know limitations, enhancements or remarks
1302   Change History
1303   Who             When            What
1304 
1305   (reverse chronological order - newest change first)
1306   ***************************************************************/
1307 
1308     CURSOR c1 IS
1309       SELECT rowid FROM igs_ad_appl_eval
1310       WHERE     appl_eval_id= x_appl_eval_id;
1311 
1312 BEGIN
1313         OPEN c1;
1314         FETCH c1 INTO x_rowid;
1315         IF (c1%NOTFOUND) THEN
1316           CLOSE c1;
1317           insert_row (
1318             x_rowid,
1319              x_appl_eval_id,
1320              x_person_id,
1321              x_admission_appl_number,
1322              x_nominated_course_cd,
1323              x_sequence_number,
1324              x_evaluator_id,
1325              x_assign_type,
1326              x_assign_date,
1327              x_evaluation_date,
1328              x_rating_type_id,
1329              x_rating_values_id,
1330              x_rating_notes,
1331              x_mode,
1332              x_evaluation_sequence,
1333              x_rating_scale_id,
1334              x_closed_ind );
1335           RETURN;
1336         END IF;
1337         CLOSE c1;
1338 update_row (
1339       x_rowid,
1340        x_appl_eval_id,
1341        x_person_id,
1342        x_admission_appl_number,
1343        x_nominated_course_cd,
1344        x_sequence_number,
1345        x_evaluator_id,
1346        x_assign_type,
1347        x_assign_date,
1348        x_evaluation_date,
1349        x_rating_type_id,
1350        x_rating_values_id,
1351        x_rating_notes,
1352        x_mode,
1353        x_evaluation_sequence,
1354        x_rating_scale_id,
1355        x_closed_ind );
1356 END add_row;
1357 
1358 function find_prev_seq_number(
1359         x_person_id             IN      NUMBER,
1360         x_admission_appl_number IN      NUMBER,
1361         x_NOMINATED_COURSE_CD   IN      VARCHAR2,
1362         x_SEQUENCE_NUMBER       IN      NUMBER,
1363         x_eval_seq              IN      NUMBER
1364 ) RETURN NUMBER AS
1365 
1366 /* Given an evaluation sequence this function is used to find out the previous evaluation sequence number */
1367         cursor c_prev_eval IS
1368         select evaluation_sequence
1369         from igs_ad_appl_eval
1370         where person_id = x_person_id
1371         and admission_appl_number = x_admission_appl_number
1372         and nominated_course_cd = x_nominated_course_cd
1373         and sequence_number = x_sequence_number
1374         and evaluation_sequence < x_eval_seq
1375         order by evaluation_sequence desc;
1376 l_prev_eval_seq NUMBER;
1377 
1378 BEGIN
1379         OPEN c_prev_eval;
1380         FETCH c_prev_eval INTO l_prev_eval_seq;
1381         IF c_prev_eval%NOTFOUND THEN
1382            CLOSE c_prev_eval;
1383            RETURN 0;
1384         ELSE
1385            CLOSE c_prev_eval;
1386            RETURN  l_prev_eval_seq;
1387         END IF;
1388 
1389 END;
1390 
1391 procedure Notification_On_Delete(
1392         x_person_id             IN      NUMBER,
1393         x_admission_appl_number IN      NUMBER,
1394         x_NOMINATED_COURSE_CD   IN      VARCHAR2,
1395         x_SEQUENCE_NUMBER       IN      NUMBER,
1396         x_eval_seq              IN      NUMBER
1397 ) AS
1398 
1399 /* This procedure is used to sent notification to the next personid in the sequence provided all records in the current sequence is del
1400 eted and the evaluation has been completed for the prevous sequence */
1401 
1402 /* Cursor to find out if there are still some records for the evaluation sequence that is getting deleted */
1403 
1404         cursor c_seq_exists IS
1405         SELECT evaluation_sequence
1406         FROM IGS_AD_APPL_EVAL
1407         WHERE person_id = x_person_id
1408         AND admission_appl_number = x_admission_appl_number
1409         AND nominated_course_cd = x_nominated_course_cd
1410         AND sequence_number = x_sequence_number
1411         and evaluation_sequence = x_eval_seq;
1412 
1413 /* Cursor to find out if the previous evaluation sequence has been completed or not */
1414 
1415         cursor c_prev_seq_compl (cp_prev_seq_number IN NUMBER) IS
1416         SELECT evaluation_sequence
1417         FROM IGS_AD_APPL_EVAL
1418         WHERE person_id = x_person_id
1419         AND admission_appl_number = x_admission_appl_number
1420         AND nominated_course_cd = x_nominated_course_cd
1421         AND sequence_number = x_sequence_number
1422         and evaluation_sequence = cp_prev_seq_number
1423         and evaluation_date IS NULL
1424         AND rating_values_id IS NULL;
1425 
1426 l_seq_exists NUMBER;
1427 l_prev_seq_number NUMBER;
1428 l_prev_seq_compl NUMBER;
1429 l_next_seq_person_id NUMBER;
1430 
1431 BEGIN
1432 
1433      OPEN c_seq_exists;
1434      FETCH c_seq_exists INTO l_seq_exists;
1435      IF c_seq_exists%FOUND THEN
1436         CLOSE c_seq_exists;
1437      ELSE
1438         CLOSE c_seq_exists;
1439         l_prev_seq_number := find_prev_seq_number (
1440                                         x_person_id,
1441                                         x_admission_appl_number,
1442                                         x_NOMINATED_COURSE_CD,
1443                                         x_SEQUENCE_NUMBER,
1444                                         x_eval_seq );
1445         IF l_prev_seq_number > 0 THEN
1446                 OPEN c_prev_seq_compl(l_prev_seq_number);
1447                 FETCH c_prev_seq_compl INTO l_prev_seq_compl;
1448                 IF c_prev_seq_compl%NOTFOUND THEN
1449                         close c_prev_seq_compl;
1450                         l_next_seq_person_id := find_next_eval(
1451                                         x_person_id,
1452                                         x_admission_appl_number,
1453                                         x_NOMINATED_COURSE_CD,
1454                                         x_SEQUENCE_NUMBER,
1455                                         x_eval_seq );
1456                         IF l_next_seq_person_id <> 0 THEN
1457 
1458                         /*   send notification to this person  */
1459 
1460                         wf_evaluator_validation (
1461                         x_person_id             => x_person_id,
1462                         x_admission_appl_number => x_admission_appl_number,
1463                         x_NOMINATED_COURSE_CD   => x_NOMINATED_COURSE_CD,
1464                         x_SEQUENCE_NUMBER       => x_SEQUENCE_NUMBER,
1465                         x_eval_seq              => x_EVAL_SEQ
1466                         );
1467 
1468                         END IF;
1469                 ELSE
1470                         CLOSE c_prev_seq_compl;
1471                END IF;
1472        END IF; /* l_prev_seq_number */
1473      END IF;
1474 
1475 END;
1476 
1477 PROCEDURE delete_row (
1478   x_rowid IN VARCHAR2,
1479   x_mode IN VARCHAR2
1480 ) AS
1481   /*************************************************************
1482   Created By :
1483   Date Created By :
1484   Purpose :
1485   Know limitations, enhancements or remarks
1486   Change History
1487   Who             When            What
1488   ravishar      5/30/2005       Security related changes
1489 
1490   (reverse chronological order - newest change first)
1491   ***************************************************************/
1492 
1493         cursor c_del_appl_eval IS
1494         SELECT person_id,
1495                 admission_appl_number,
1496                 nominated_course_cd,
1497                 sequence_number,
1498                 evaluator_id,
1499                 evaluation_sequence
1500         FROM igs_ad_appl_eval
1501         WHERE rowid = x_rowid;
1502 
1503 l_del_appl_eval c_del_appl_eval%ROWTYPE;
1504 --
1505 
1506 BEGIN
1507 Before_DML (
1508 p_action => 'DELETE',
1509 x_rowid => X_ROWID
1510 );
1511 
1512         OPEN c_del_appl_eval;
1513         FETCH c_del_appl_eval INTO l_del_appl_eval;
1514         CLOSE c_del_appl_eval;
1515 
1516   IF (x_mode = 'S') THEN
1517     igs_sc_gen_001.set_ctx('R');
1518   END IF;
1519  DELETE FROM igs_ad_appl_eval
1520  WHERE rowid = x_rowid;
1521   IF (sql%NOTFOUND) THEN
1522      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
1523      igs_ge_msg_stack.add;
1524      IF (x_mode = 'S') THEN
1525        igs_sc_gen_001.unset_ctx('R');
1526      END IF;
1527      app_exception.raise_exception;
1528  END IF;
1529  IF (x_mode = 'S') THEN
1530     igs_sc_gen_001.unset_ctx('R');
1531  END IF;
1532 
1533 After_DML (
1534  p_action => 'DELETE',
1535  x_rowid => X_ROWID
1536 );
1537 
1538 Notification_On_Delete(
1539         l_del_appl_eval.person_id,
1540         l_del_appl_eval.admission_appl_number,
1541         l_del_appl_eval.NOMINATED_COURSE_CD,
1542         l_del_appl_eval.SEQUENCE_NUMBER,
1543         l_del_appl_eval.evaluation_sequence
1544 );
1545 
1546 EXCEPTION
1547   WHEN OTHERS THEN
1548     IF (x_mode = 'S') THEN
1549        igs_sc_gen_001.unset_ctx('R');
1550     END IF;
1551     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
1552       -- Code to handle Security Policy error raised
1553       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
1554       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
1555       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
1556       --    that the ownerof policy function does not have privilege to access.
1557       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
1558       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
1559       IGS_GE_MSG_STACK.ADD;
1560       app_exception.raise_exception;
1561     ELSE
1562       RAISE;
1563     END IF;
1564 END delete_row;
1565 
1566 END igs_ad_appl_eval_pkg;