DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_APLINS_ADMREQ_PKG

Source


1 PACKAGE BODY igs_ad_aplins_admreq_pkg AS
2 /* $Header: IGSAIE6B.pls 120.3 2005/10/03 08:23:34 appldev ship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references igs_ad_aplins_admreq%ROWTYPE;
6   new_references igs_ad_aplins_admreq%ROWTYPE;
7 
8   PROCEDURE set_column_values (
9     p_action                            IN     VARCHAR2,
10     x_rowid                             IN     VARCHAR2    ,
11     x_aplins_admreq_id                  IN     NUMBER      ,
12     x_person_id                         IN     NUMBER      ,
13     x_admission_appl_number             IN     NUMBER      ,
14     x_course_cd                         IN     VARCHAR2    ,
15     x_sequence_number                   IN     NUMBER      ,
16     x_tracking_id                       IN     NUMBER      ,
17     x_creation_date                     IN     DATE        ,
18     x_created_by                        IN     NUMBER      ,
19     x_last_update_date                  IN     DATE        ,
20     x_last_updated_by                   IN     NUMBER      ,
21     x_last_update_login                 IN     NUMBER
22   ) AS
23   /*
24   ||  Created By : [email protected]
25   ||  Created On : 22-JUL-2001
26   ||  Purpose : Initialises the Old and New references for the columns of the table.
27   ||  Known limitations, enhancements or remarks :
28   ||  Change History :
29   ||  Who             When            What
30   ||  (reverse chronological order - newest change first)
31   */
32 
33     CURSOR cur_old_ref_values IS
34       SELECT   *
35       FROM     IGS_AD_APLINS_ADMREQ
36       WHERE    rowid = x_rowid;
37 
38   BEGIN
39 
40     l_rowid := x_rowid;
41 
42     -- Code for setting the Old and New Reference Values.
43     -- Populate Old Values.
44     OPEN cur_old_ref_values;
45     FETCH cur_old_ref_values INTO old_references;
46     IF ((cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT'))) THEN
47       CLOSE cur_old_ref_values;
48       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
49       igs_ge_msg_stack.add;
50       app_exception.raise_exception;
51       RETURN;
52     END IF;
53     CLOSE cur_old_ref_values;
54 
55     -- Populate New Values.
56     new_references.aplins_admreq_id                  := x_aplins_admreq_id;
57     new_references.person_id                         := x_person_id;
58     new_references.admission_appl_number             := x_admission_appl_number;
59     new_references.course_cd                         := x_course_cd;
60     new_references.sequence_number                   := x_sequence_number;
61     new_references.tracking_id                       := x_tracking_id;
62 
63     IF (p_action = 'UPDATE') THEN
64       new_references.creation_date                   := old_references.creation_date;
65       new_references.created_by                      := old_references.created_by;
66     ELSE
67       new_references.creation_date                   := x_creation_date;
68       new_references.created_by                      := x_created_by;
69     END IF;
70 
71     new_references.last_update_date                  := x_last_update_date;
72     new_references.last_updated_by                   := x_last_updated_by;
73     new_references.last_update_login                 := x_last_update_login;
74 
75   END set_column_values;
76 
77 
78   PROCEDURE check_uniqueness AS
79   /*
80   ||  Created By : [email protected]
81   ||  Created On : 22-JUL-2001
82   ||  Purpose : Handles the Unique Constraint logic defined for the columns.
83   ||  Known limitations, enhancements or remarks :
84   ||  Change History :
85   ||  Who             When            What
86   ||  (reverse chronological order - newest change first)
87   */
88   BEGIN
89 
90     IF ( get_uk_for_validation (
91            new_references.admission_appl_number,
92            new_references.course_cd,
93            new_references.person_id,
94            new_references.sequence_number,
95            new_references.tracking_id
96          )
97        ) THEN
98       fnd_message.set_name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
99       igs_ge_msg_stack.add;
100       app_exception.raise_exception;
101     END IF;
102 
103   END check_uniqueness;
104 
105 
106   PROCEDURE check_parent_existance AS
107   /*
108   ||  Created By : [email protected]
109   ||  Created On : 22-JUL-2001
110   ||  Purpose : Checks for the existance of Parent records.
111   ||  Known limitations, enhancements or remarks :
112   ||  Change History :
113   ||  Who             When            What
114   ||  (reverse chronological order - newest change first)
115   */
116   BEGIN
117 
118     IF (((old_references.person_id = new_references.person_id) AND
119          (old_references.admission_appl_number = new_references.admission_appl_number) AND
120          (old_references.course_cd = new_references.course_cd) AND
121          (old_references.sequence_number = new_references.sequence_number)) OR
122         ((new_references.person_id IS NULL) OR
123          (new_references.admission_appl_number IS NULL) OR
124          (new_references.course_cd IS NULL) OR
125          (new_references.sequence_number IS NULL))) THEN
126       NULL;
127     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
128                 new_references.person_id, 									      -- Igs_Ad_Ps_Appl_Inst_Pkg.Get_PKNolock_For_Validation (For Bug 2760811 - ADCR061
129                 new_references.admission_appl_number, 					      -- locking issues -- rghosh )
130                 new_references.course_cd,
131                 new_references.sequence_number
132               ) THEN
133       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
134       igs_ge_msg_stack.add;
135       app_exception.raise_exception;
136     END IF;
137 
138     IF (((old_references.tracking_id = new_references.tracking_id)) OR
139         ((new_references.tracking_id IS NULL))) THEN
140       NULL;
141     ELSIF NOT igs_tr_item_pkg.get_pk_for_validation (
142                 new_references.tracking_id
143               ) THEN
144       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
145       igs_ge_msg_stack.add;
146       app_exception.raise_exception;
147     END IF;
148 
149   END check_parent_existance;
150 
151 
152   FUNCTION get_pk_for_validation (
153     x_aplins_admreq_id                  IN     NUMBER
154   ) RETURN BOOLEAN AS
155   /*
156   ||  Created By : [email protected]
157   ||  Created On : 22-JUL-2001
158   ||  Purpose : Validates the Primary Key of the table.
159   ||  Known limitations, enhancements or remarks :
160   ||  Change History :
161   ||  Who             When            What
162   ||  (reverse chronological order - newest change first)
163   */
164     CURSOR cur_rowid IS
165       SELECT   rowid
166       FROM     igs_ad_aplins_admreq
167       WHERE    aplins_admreq_id = x_aplins_admreq_id
168       FOR UPDATE NOWAIT;
169 
170     lv_rowid cur_rowid%RowType;
171 
172   BEGIN
173 
174     OPEN cur_rowid;
175     FETCH cur_rowid INTO lv_rowid;
176     IF (cur_rowid%FOUND) THEN
177       CLOSE cur_rowid;
178       RETURN(TRUE);
179     ELSE
180       CLOSE cur_rowid;
181       RETURN(FALSE);
182     END IF;
183 
184   END get_pk_for_validation;
185 
186 
187   FUNCTION get_uk_for_validation (
188     x_admission_appl_number             IN     NUMBER,
189     x_course_cd                         IN     VARCHAR2,
190     x_person_id                         IN     NUMBER,
191     x_sequence_number                   IN     NUMBER,
192     x_tracking_id                       IN     NUMBER
193   ) RETURN BOOLEAN AS
194   /*
195   ||  Created By : [email protected]
196   ||  Created On : 22-JUL-2001
197   ||  Purpose : Validates the Unique Keys of the table.
198   ||  Known limitations, enhancements or remarks :
199   ||  Change History :
200   ||  Who             When            What
201   ||  (reverse chronological order - newest change first)
202   */
203     CURSOR cur_rowid IS
204       SELECT   rowid
205       FROM     igs_ad_aplins_admreq
206       WHERE    admission_appl_number = x_admission_appl_number
207       AND      course_cd = x_course_cd
208       AND      person_id = x_person_id
209       AND      sequence_number = x_sequence_number
210       AND      tracking_id = x_tracking_id
211       AND      ((l_rowid IS NULL) OR (rowid <> l_rowid));
212 
213     lv_rowid cur_rowid%RowType;
214 
215   BEGIN
216 
217     OPEN cur_rowid;
218     FETCH cur_rowid INTO lv_rowid;
219     IF (cur_rowid%FOUND) THEN
220       CLOSE cur_rowid;
221         RETURN (true);
222         ELSE
223        CLOSE cur_rowid;
224       RETURN(FALSE);
225     END IF;
226 
227   END get_uk_for_validation ;
228 
229 
230   PROCEDURE get_fk_igs_ad_ps_appl_inst_all (
231     x_person_id                         IN     NUMBER,
232     x_admission_appl_number             IN     NUMBER,
233     x_nominated_course_cd               IN     VARCHAR2,
234     x_sequence_number                   IN     NUMBER
235   ) AS
236   /*
237   ||  Created By : [email protected]
238   ||  Created On : 22-JUL-2001
239   ||  Purpose : Validates the Foreign Keys for the table.
240   ||  Known limitations, enhancements or remarks :
241   ||  Change History :
242   ||  Who             When            What
243   ||  rghosh	      08-nov-2002    changed the message name in the
244   ||                                 procedure get_fk_igs_ad_ps_appl_inst_all (bug #2619603)
245   ||  (reverse chronological order - newest change first)
246   */
247     CURSOR cur_rowid IS
248       SELECT   rowid
249       FROM     igs_ad_aplins_admreq
250       WHERE   ((admission_appl_number = x_admission_appl_number) AND
251                (course_cd = x_nominated_course_cd) AND
252                (person_id = x_person_id) AND
253                (sequence_number = x_sequence_number));
254 
255     lv_rowid cur_rowid%RowType;
256 
257   BEGIN
258 
259     OPEN cur_rowid;
260     FETCH cur_rowid INTO lv_rowid;
261     IF (cur_rowid%FOUND) THEN
262       CLOSE cur_rowid;
263       --changed the message name -rghosh (bug #2619603)
264       fnd_message.set_name ('IGS', 'IGS_AD_APLINS_ACAI_FK');
265       igs_ge_msg_stack.add;
266       app_exception.raise_exception;
267       RETURN;
268     END IF;
269     CLOSE cur_rowid;
270 
271   END get_fk_igs_ad_ps_appl_inst_all;
272 
273 
274   PROCEDURE get_fk_igs_tr_item_all (
275     x_tracking_id                       IN     NUMBER
276   ) AS
277   /*
278   ||  Created By : [email protected]
279   ||  Created On : 22-JUL-2001
280   ||  Purpose : Validates the Foreign Keys for the table.
281   ||  Known limitations, enhancements or remarks :
282   ||  Change History :
283   ||  Who             When            What
284   ||  (reverse chronological order - newest change first)
285   */
286     CURSOR cur_rowid IS
287       SELECT   rowid
288       FROM     igs_ad_aplins_admreq
289       WHERE   ((tracking_id = x_tracking_id));
290 
291     lv_rowid cur_rowid%RowType;
292 
293   BEGIN
294 
295     OPEN cur_rowid;
296     FETCH cur_rowid INTO lv_rowid;
297     IF (cur_rowid%FOUND) THEN
298       CLOSE cur_rowid;
299       fnd_message.set_name ('IGS', 'IGS_FOREIGN_KEY_REFERENCE');
300       igs_ge_msg_stack.add;
301       app_exception.raise_exception;
302       RETURN;
303     END IF;
304     CLOSE cur_rowid;
305 
306   END get_fk_igs_tr_item_all;
307 
308   PROCEDURE check_appl_compl_stat (
309                 x_tracking_id IN NUMBER,
310                 x_person_id IN NUMBER,
311                 x_admission_appl_number IN NUMBER,
312                 x_course_cd IN VARCHAR2 ,
313                 x_sequence_number IN NUMBER
314               ) IS
315   /*************************************************************
316   Created By : rghosh
317   Date Created By : 20-Feb-2003
318   Purpose : When a record is getting created , the requirements do not get added after the
319                     application completion status is set to SATISFIED for an application instance
320   Know limitations, enhancements or remarks
321   Change History
322   Who             When            What
323 
324   (reverse chronological order - newest change first)
325   ***************************************************************/
326            CURSOR c_get_adm_doc_status (
327                                                   p_person_id igs_ad_ps_appl_inst_all.person_id%TYPE,
328                                                   p_admission_appl_number igs_ad_ps_appl_inst_all.admission_appl_number%TYPE,
329 						  p_nominated_course_cd igs_ad_ps_appl_inst_all.nominated_course_cd%TYPE,
330 						  p_sequence_number igs_ad_ps_appl_inst_all.sequence_number%TYPE ) IS
331               SELECT  'X'
332               FROM igs_ad_ps_appl_inst_all
333               WHERE person_id = p_person_id
334               AND admission_appl_number = p_admission_appl_number
335               AND nominated_course_cd = p_nominated_course_cd
336               AND sequence_number = p_sequence_number
337               AND  IGS_AD_GEN_007.ADMP_GET_SADS (adm_doc_status) = 'SATISFIED';
338 
339 	   CURSOR c_not_post_adm (cp_tracking_id igs_tr_item.tracking_id%TYPE) IS
340 	      SELECT 'X'
341               FROM  igs_tr_item a,
342                     igs_tr_type b
343               WHERE a.tracking_id   = cp_tracking_id
344               AND   b.tracking_type = a.tracking_type
345               AND   b.S_TRACKING_TYPE <> 'POST_ADMISSION' ;
346 
347 	  l_get_adm_doc_status VARCHAR2(1);
348 	  l_not_post_adm        VARCHAR2(1);
349 
350 BEGIN
351 
352            OPEN c_get_adm_doc_status (
353                          x_person_id,
354                          x_admission_appl_number,
355                          x_course_cd,
356                          x_sequence_number  );
357 	 FETCH c_get_adm_doc_status INTO l_get_adm_doc_status;
358 	  OPEN c_not_post_adm (x_tracking_id) ;
359 	 FETCH c_not_post_adm INTO l_not_post_adm ;
360          IF c_get_adm_doc_status % FOUND AND c_not_post_adm%FOUND THEN
361 	    Fnd_Message.Set_name('IGS','IGS_AD_NOT_INST_UPD_REQ_DOC');
362             IGS_GE_MSG_STACK.ADD;
363             CLOSE c_get_adm_doc_status;
364             CLOSE c_not_post_adm;
365 	    App_Exception.Raise_Exception;
366 	 END IF;
367          CLOSE c_get_adm_doc_status;
368          CLOSE c_not_post_adm;
369 
370 END  check_appl_compl_stat;
371 
372 
373   PROCEDURE before_dml (
374     p_action                            IN     VARCHAR2,
375     x_rowid                             IN     VARCHAR2	   ,
376     x_aplins_admreq_id                  IN     NUMBER      ,
377     x_person_id                         IN     NUMBER      ,
378     x_admission_appl_number             IN     NUMBER      ,
379     x_course_cd                         IN     VARCHAR2    ,
380     x_sequence_number                   IN     NUMBER      ,
381     x_tracking_id                       IN     NUMBER      ,
382     x_creation_date                     IN     DATE        ,
383     x_created_by                        IN     NUMBER      ,
384     x_last_update_date                  IN     DATE        ,
385     x_last_updated_by                   IN     NUMBER      ,
386     x_last_update_login                 IN     NUMBER
387   ) AS
388   /*
389   ||  Created By : [email protected]
390   ||  Created On : 22-JUL-2001
391   ||  Purpose : Initialises the columns, Checks Constraints, Calls the
392   ||            Trigger Handlers for the table, before any DML operation.
396   ||  (reverse chronological order - newest change first)
393   ||  Known limitations, enhancements or remarks :
394   ||  Change History :
395   ||  Who             When            What
397   ||  apadegal        2-09-2005      changed teh call for check_adm_appl_inst_stat for IGS.M
398   */
399 
400   --begin apadegal adtd001 igs.m
401   -- cursor to find the System Tracking type of the given Tracking item
402   CURSOR c_track_type (cp_tracking_id igs_tr_item.tracking_id%TYPE) IS
403   SELECT ttype.S_TRACKING_TYPE
404   FROM  igs_tr_item  titem, igs_tr_type ttype
405   WHERE titem.tracking_id   = cp_tracking_id  AND
406         titem.tracking_type = ttype.tracking_type;
407 
408   lv_tracking_type IGS_TR_TYPE.S_TRACKING_TYPE%TYPE;
409 
410     --end  apadegal adtd001 igs.m
411   BEGIN
412 
413     set_column_values (
414       p_action,
415       x_rowid,
416       x_aplins_admreq_id,
417       x_person_id,
418       x_admission_appl_number,
419       x_course_cd,
420       x_sequence_number,
421       x_tracking_id,
422       x_creation_date,
423       x_created_by,
424       x_last_update_date,
425       x_last_updated_by,
426       x_last_update_login
427     );
428 
429 
430    OPEN c_track_type(x_tracking_id);
431    FETCH c_track_type INTO lv_tracking_type;
432    CLOSE c_track_type;
433 
434    -- BEGIN APADEGAL adtd001 igs.m
435 
436     IF 	lv_tracking_type ='ADM_PROCESSING'
437     THEN
438 	    igs_ad_gen_002.check_adm_appl_inst_stat(
439 	      nvl(x_person_id,old_references.person_id),
440 	      nvl(x_admission_appl_number,old_references.admission_appl_number),
441 	      nvl(x_course_cd,old_references.course_cd),
442 	      nvl(x_sequence_number,old_references.sequence_number),
443 	      'N'		 -- reconsider phase, (cannot assign admission processing requirements in proceed phase);
444 	    );
445     END IF;
446     IF 	lv_tracking_type ='POST_ADMISSION'
447     THEN
448 	    igs_ad_gen_002.check_adm_appl_inst_stat(
449 	      nvl(x_person_id,old_references.person_id),
450 	      nvl(x_admission_appl_number,old_references.admission_appl_number),
451 	      nvl(x_course_cd,old_references.course_cd),
452 	      nvl(x_sequence_number,old_references.sequence_number),
453 	      'Y'	      -- proceed phase, (cann assign post admission  requirements in proceed phase);
454 	    );
455     END IF;
456 
457    -- END APADEGAL adtd001 igs.m
458     IF (p_action = 'INSERT') THEN
459       -- Call all the procedures related to Before Insert.
460       IF ( get_pk_for_validation(
461              new_references.aplins_admreq_id
462            )
463          ) THEN
464         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
465         igs_ge_msg_stack.add;
466         app_exception.raise_exception;
467       END IF;
468       check_uniqueness;
469       check_parent_existance;
470       check_appl_compl_stat  (
471                          new_references.tracking_id,
472                          new_references.person_id,
473                          new_references.admission_appl_number,
474                          new_references.course_cd,
475                          new_references.sequence_number  );
476     ELSIF (p_action = 'UPDATE') THEN
477       -- Call all the procedures related to Before Update.
478       check_uniqueness;
479       check_parent_existance;
480       check_appl_compl_stat  (
481                          new_references.tracking_id,
482                          new_references.person_id,
483                          new_references.admission_appl_number,
484                          new_references.course_cd,
485                          new_references.sequence_number  );
486     ELSIF (p_action = 'VALIDATE_INSERT') THEN
487       -- Call all the procedures related to Before Insert.
488       IF ( get_pk_for_validation (
489              new_references.aplins_admreq_id
490            )
491          ) THEN
492         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
493         igs_ge_msg_stack.add;
494         app_exception.raise_exception;
495       END IF;
496       check_uniqueness;
497       check_appl_compl_stat  (
498                          new_references.tracking_id,
499                          new_references.person_id,
500                          new_references.admission_appl_number,
501                          new_references.course_cd,
502                          new_references.sequence_number  );
503     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
504       check_uniqueness;
505       check_appl_compl_stat  (
506                          new_references.tracking_id,
507                          new_references.person_id,
508                          new_references.admission_appl_number,
509                          new_references.course_cd,
510                          new_references.sequence_number  );
511     END IF;
512     l_rowid := NULL; --Bug:2863832
513   END before_dml;
514 
515 
516   PROCEDURE insert_row (
517     x_rowid                             IN OUT NOCOPY VARCHAR2,
518     x_aplins_admreq_id                  IN OUT NOCOPY NUMBER,
519     x_person_id                         IN     NUMBER,
520     x_admission_appl_number             IN     NUMBER,
521     x_course_cd                         IN     VARCHAR2,
522     x_sequence_number                   IN     NUMBER,
526   /*
523     x_tracking_id                       IN     NUMBER,
524     x_mode                              IN     VARCHAR2
525   ) AS
527   ||  Created By : [email protected]
528   ||  Created On : 22-JUL-2001
529   ||  Purpose : Handles the INSERT DML logic for the table.
530   ||  Known limitations, enhancements or remarks :
531   ||  Change History :
532   ||  Who             When            What
533   ||  (reverse chronological order - newest change first)
534   ||  ravishar      05/30/05        Security related changes
535   */
536     CURSOR c IS
537       SELECT   rowid
538       FROM     igs_ad_aplins_admreq
539       WHERE    aplins_admreq_id                  = x_aplins_admreq_id;
540 
541     x_last_update_date           DATE;
542     x_last_updated_by            NUMBER;
543     x_last_update_login          NUMBER;
544     x_request_id                 NUMBER;
545     x_program_id                 NUMBER;
546     x_program_application_id     NUMBER;
547     x_program_update_date        DATE;
548 
549   BEGIN
550 
551     x_last_update_date := SYSDATE;
552     IF (x_mode = 'I') THEN
553       x_last_updated_by := 1;
554       x_last_update_login := 0;
555     ELSIF (X_MODE IN ('R', 'S')) THEN
556       x_last_updated_by := fnd_global.user_id;
557       IF (x_last_updated_by IS NULL) THEN
558         x_last_updated_by := -1;
559       END IF;
560       x_last_update_login := fnd_global.login_id;
561       IF (x_last_update_login IS NULL) THEN
562         x_last_update_login := -1;
563       END IF;
564       x_request_id             := fnd_global.conc_request_id;
565       x_program_id             := fnd_global.conc_program_id;
566       x_program_application_id := fnd_global.prog_appl_id;
567 
568       IF (x_request_id = -1) THEN
569         x_request_id             := NULL;
570         x_program_id             := NULL;
571         x_program_application_id := NULL;
572         x_program_update_date    := NULL;
573       ELSE
574         x_program_update_date    := SYSDATE;
575       END IF;
576     ELSE
577       fnd_message.set_name ('FND', 'SYSTEM-INVALID ARGS');
578       igs_ge_msg_stack.add;
579       app_exception.raise_exception;
580     END IF;
581 
582     x_aplins_admreq_id := -1;
583     before_dml(
584       p_action                            => 'INSERT',
585       x_rowid                             => x_rowid,
586       x_aplins_admreq_id                  => x_aplins_admreq_id,
587       x_person_id                         => x_person_id,
588       x_admission_appl_number             => x_admission_appl_number,
589       x_course_cd                         => x_course_cd,
590       x_sequence_number                   => x_sequence_number,
591       x_tracking_id                       => x_tracking_id,
592       x_creation_date                     => x_last_update_date,
593       x_created_by                        => x_last_updated_by,
594       x_last_update_date                  => x_last_update_date,
595       x_last_updated_by                   => x_last_updated_by,
596       x_last_update_login                 => x_last_update_login
597     );
598 
599   IF (x_mode = 'S') THEN
600      igs_sc_gen_001.set_ctx('R');
601   END IF;
602  INSERT INTO igs_ad_aplins_admreq (
603       aplins_admreq_id,
604       person_id,
605       admission_appl_number,
606       course_cd,
607       sequence_number,
608       tracking_id,
609       creation_date,
610       created_by,
611       last_update_date,
612       last_updated_by,
613       last_update_login,
614       request_id,
615       program_id,
616       program_application_id,
617       program_update_date
618     ) VALUES (
619       igs_ad_aplins_admreq_s.NEXTVAL,
620       new_references.person_id,
621       new_references.admission_appl_number,
622       new_references.course_cd,
623       new_references.sequence_number,
624       new_references.tracking_id,
625       x_last_update_date,
626       x_last_updated_by,
627       x_last_update_date,
628       x_last_updated_by,
629       x_last_update_login ,
630       x_request_id,
631       x_program_id,
632       x_program_application_id,
633       x_program_update_date
634     )RETURNING aplins_admreq_id INTO x_aplins_admreq_id;
635   IF (x_mode = 'S') THEN
636     igs_sc_gen_001.unset_ctx('R');
637   END IF;
638 
639 
640     OPEN c;
641     FETCH c INTO x_rowid;
642     IF (c%NOTFOUND) THEN
643       CLOSE c;
644       RAISE NO_DATA_FOUND;
645     END IF;
646     CLOSE c;
647 
648 EXCEPTION
649   WHEN OTHERS THEN
650   IF (x_mode = 'S') THEN
651     igs_sc_gen_001.unset_ctx('R');
652   END IF;
653     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
654       -- Code to handle Security Policy error raised
655       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
656       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
657       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
661       IGS_GE_MSG_STACK.ADD;
658       --    that the ownerof policy function does not have privilege to access.
659       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
660       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
662       app_exception.raise_exception;
663     ELSE
664       RAISE;
665     END IF;
666  END insert_row;
667 
668 
669   PROCEDURE lock_row (
670     x_rowid                             IN     VARCHAR2,
671     x_aplins_admreq_id                  IN     NUMBER,
672     x_person_id                         IN     NUMBER,
673     x_admission_appl_number             IN     NUMBER,
674     x_course_cd                         IN     VARCHAR2,
675     x_sequence_number                   IN     NUMBER,
676     x_tracking_id                       IN     NUMBER
677   ) AS
678   /*
679   ||  Created By : [email protected]
680   ||  Created On : 22-JUL-2001
681   ||  Purpose : Handles the LOCK mechanism for the table.
682   ||  Known limitations, enhancements or remarks :
683   ||  Change History :
684   ||  Who             When            What
685   ||  (reverse chronological order - newest change first)
686   */
687     CURSOR c1 IS
688       SELECT
689         person_id,
690         admission_appl_number,
691         course_cd,
692         sequence_number,
693         tracking_id
694       FROM  igs_ad_aplins_admreq
695       WHERE rowid = x_rowid
696       FOR UPDATE NOWAIT;
697 
698     tlinfo c1%ROWTYPE;
699 
700   BEGIN
701 
702     OPEN c1;
703     FETCH c1 INTO tlinfo;
704     IF (c1%notfound) THEN
705       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
706       igs_ge_msg_stack.add;
707       CLOSE c1;
708       app_exception.raise_exception;
709       RETURN;
710     END IF;
711     CLOSE c1;
712 
713     IF (
714         (tlinfo.person_id = x_person_id)
715         AND (tlinfo.admission_appl_number = x_admission_appl_number)
716         AND (tlinfo.course_cd = x_course_cd)
717         AND (tlinfo.sequence_number = x_sequence_number)
718         AND (tlinfo.tracking_id = x_tracking_id)
719        ) THEN
720       NULL;
721     ELSE
722       fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
723       igs_ge_msg_stack.add;
724       app_exception.raise_exception;
725     END IF;
726 
727     RETURN;
728 
729   END lock_row;
730 
731 
732   PROCEDURE update_row (
733     x_rowid                             IN     VARCHAR2,
734     x_aplins_admreq_id                  IN     NUMBER,
735     x_person_id                         IN     NUMBER,
736     x_admission_appl_number             IN     NUMBER,
737     x_course_cd                         IN     VARCHAR2,
738     x_sequence_number                   IN     NUMBER,
739     x_tracking_id                       IN     NUMBER,
740     x_mode                              IN     VARCHAR2
741   ) AS
742   /*
743   ||  Created By : [email protected]
744   ||  Created On : 22-JUL-2001
745   ||  Purpose : Handles the UPDATE DML logic for the table.
746   ||  Known limitations, enhancements or remarks :
747   ||  Change History :
748   ||  Who             When            What
749   ||  ravishar      05/27/05        Security related changes
750   ||  (reverse chronological order - newest change first)
751   */
752     x_last_update_date           DATE ;
753     x_last_updated_by            NUMBER;
754     x_last_update_login          NUMBER;
755     x_request_id                 NUMBER;
756     x_program_id                 NUMBER;
757     x_program_application_id     NUMBER;
758     x_program_update_date        DATE;
759 
760   BEGIN
761 
762     x_last_update_date := SYSDATE;
763     IF (X_MODE = 'I') THEN
764       x_last_updated_by := 1;
765       x_last_update_login := 0;
766     ELSIF (X_MODE IN ('R', 'S')) THEN
767       x_last_updated_by := fnd_global.user_id;
768       IF x_last_updated_by IS NULL THEN
769         x_last_updated_by := -1;
770       END IF;
771       x_last_update_login := fnd_global.login_id;
772       IF (x_last_update_login IS NULL) THEN
773         x_last_update_login := -1;
774       END IF;
775     ELSE
776       fnd_message.set_name( 'FND', 'SYSTEM-INVALID ARGS');
777       igs_ge_msg_stack.add;
778       app_exception.raise_exception;
779     END IF;
780 
781     before_dml(
782       p_action                            => 'UPDATE',
783       x_rowid                             => x_rowid,
784       x_aplins_admreq_id                  => x_aplins_admreq_id,
785       x_person_id                         => x_person_id,
786       x_admission_appl_number             => x_admission_appl_number,
787       x_course_cd                         => x_course_cd,
788       x_sequence_number                   => x_sequence_number,
789       x_tracking_id                       => x_tracking_id,
790       x_creation_date                     => x_last_update_date,
791       x_created_by                        => x_last_updated_by,
792       x_last_update_date                  => x_last_update_date,
793       x_last_updated_by                   => x_last_updated_by,
794       x_last_update_login                 => x_last_update_login
795     );
796 
797     IF (X_MODE IN ('R', 'S')) THEN
801       IF (x_request_id =  -1) THEN
798       x_request_id := fnd_global.conc_request_id;
799       x_program_id := fnd_global.conc_program_id;
800       x_program_application_id := fnd_global.prog_appl_id;
802         x_request_id := old_references.request_id;
803         x_program_id := old_references.program_id;
804         x_program_application_id := old_references.program_application_id;
805         x_program_update_date := old_references.program_update_date;
806       ELSE
807         x_program_update_date := SYSDATE;
808       END IF;
809     END IF;
810 
811   IF (x_mode = 'S') THEN
812     igs_sc_gen_001.set_ctx('R');
813   END IF;
814  UPDATE igs_ad_aplins_admreq
815       SET
816         person_id                         = new_references.person_id,
817         admission_appl_number             = new_references.admission_appl_number,
818         course_cd                         = new_references.course_cd,
819         sequence_number                   = new_references.sequence_number,
820         tracking_id                       = new_references.tracking_id,
821         last_update_date                  = x_last_update_date,
822         last_updated_by                   = x_last_updated_by,
823         last_update_login                 = x_last_update_login ,
824         request_id                        = x_request_id,
825         program_id                        = x_program_id,
826         program_application_id            = x_program_application_id,
827         program_update_date               = x_program_update_date
828       WHERE rowid = x_rowid;
829 
830     IF (SQL%NOTFOUND) THEN
831      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
832      igs_ge_msg_stack.add;
833      IF (x_mode = 'S') THEN
834        igs_sc_gen_001.set_ctx('R');
835      END IF;
836      app_exception.raise_exception;
837  END IF;
838  IF (x_mode = 'S') THEN
839     igs_sc_gen_001.unset_ctx('R');
840  END IF;
841 
842 
843 EXCEPTION
844   WHEN OTHERS THEN
845   IF (x_mode = 'S') THEN
846     igs_sc_gen_001.set_ctx('R');
847   END IF;
848     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
849       -- Code to handle Security Policy error raised
850       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
851       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
852       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
853       --    that the ownerof policy function does not have privilege to access.
854       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
855       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
856       IGS_GE_MSG_STACK.ADD;
857       app_exception.raise_exception;
858     ELSE
859       RAISE;
860     END IF;
861   END update_row;
862 
863 
864   PROCEDURE add_row (
865     x_rowid                             IN OUT NOCOPY VARCHAR2,
866     x_aplins_admreq_id                  IN OUT NOCOPY NUMBER,
867     x_person_id                         IN     NUMBER,
868     x_admission_appl_number             IN     NUMBER,
869     x_course_cd                         IN     VARCHAR2,
870     x_sequence_number                   IN     NUMBER,
871     x_tracking_id                       IN     NUMBER,
872     x_mode                              IN     VARCHAR2
873   ) AS
874   /*
875   ||  Created By : [email protected]
876   ||  Created On : 22-JUL-2001
877   ||  Purpose : Adds a row if there is no existing row, otherwise updates existing row in the table.
878   ||  Known limitations, enhancements or remarks :
879   ||  Change History :
880   ||  Who             When            What
881   ||  (reverse chronological order - newest change first)
882   */
883     CURSOR c1 IS
884       SELECT   rowid
885       FROM     igs_ad_aplins_admreq
886       WHERE    aplins_admreq_id                  = x_aplins_admreq_id;
887 
888   BEGIN
889 
890     OPEN c1;
891     FETCH c1 INTO x_rowid;
892     IF (c1%NOTFOUND) THEN
893       CLOSE c1;
894 
895       insert_row (
896         x_rowid,
897         x_aplins_admreq_id,
898         x_person_id,
899         x_admission_appl_number,
900         x_course_cd,
901         x_sequence_number,
902         x_tracking_id,
903         x_mode
904       );
905       RETURN;
906     END IF;
907     CLOSE c1;
908 
909     update_row (
910       x_rowid,
911       x_aplins_admreq_id,
912       x_person_id,
913       x_admission_appl_number,
914       x_course_cd,
915       x_sequence_number,
916       x_tracking_id,
917       x_mode
918     );
919 
920   END add_row;
921 
922 
923   PROCEDURE delete_row (
924     x_rowid IN VARCHAR2,
925   x_mode IN VARCHAR2
926   ) AS
927   /*
928   ||  Created By : [email protected]
929   ||  Created On : 22-JUL-2001
930   ||  Purpose : Handles the DELETE DML logic for the table.
931   ||  Known limitations, enhancements or remarks :
932   ||  Change History :
933   ||  Who             When            What
934   ||  ravishar      05/27/05        Security related changes
935   ||  (reverse chronological order - newest change first)
936   */
937   BEGIN
938 
939     before_dml (
940       p_action => 'DELETE',
941       x_rowid => x_rowid
942     );
943 
944   IF (x_mode = 'S') THEN
945     igs_sc_gen_001.set_ctx('R');
946   END IF;
947  DELETE FROM igs_ad_aplins_admreq
948     WHERE rowid = x_rowid;
949 
950     IF (SQL%NOTFOUND) THEN
951      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
952      igs_ge_msg_stack.add;
953      IF (x_mode = 'S') THEN
954        igs_sc_gen_001.set_ctx('R');
955      END IF;
956      app_exception.raise_exception;
957  END IF;
958  IF (x_mode = 'S') THEN
959     igs_sc_gen_001.unset_ctx('R');
960  END IF;
961 
962 
963 EXCEPTION
964   WHEN OTHERS THEN
965    IF (x_mode = 'S') THEN
966       igs_sc_gen_001.unset_ctx('R');
967    END IF;
968     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
969       -- Code to handle Security Policy error raised
970       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
971       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
972       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
973       --    that the ownerof policy function does not have privilege to access.
974       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
975       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
976       IGS_GE_MSG_STACK.ADD;
977       app_exception.raise_exception;
978     ELSE
979       RAISE;
980     END IF;
981   END delete_row;
982 
983 
984 END igs_ad_aplins_admreq_pkg;