DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_ANON_ID_PS_PKG

Source


1 PACKAGE BODY igs_as_anon_id_ps_pkg AS
2 /* $Header: IGSDI64B.pls 115.1 2002/11/28 23:27:01 nsidana noship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references igs_as_anon_id_ps%ROWTYPE;
6   new_references igs_as_anon_id_ps%ROWTYPE;
7 
8   PROCEDURE set_column_values (
9     p_action                            IN     VARCHAR2,
10     x_rowid                             IN     VARCHAR2    DEFAULT NULL,
11     x_person_id                         IN     NUMBER      DEFAULT NULL,
12     x_anonymous_id                      IN     VARCHAR2    DEFAULT NULL,
13     x_system_generated_ind              IN     VARCHAR2    DEFAULT NULL,
14     x_course_cd                         IN     VARCHAR2    DEFAULT NULL,
15     x_creation_date                     IN     DATE        DEFAULT NULL,
16     x_created_by                        IN     NUMBER      DEFAULT NULL,
17     x_last_update_date                  IN     DATE        DEFAULT NULL,
18     x_last_updated_by                   IN     NUMBER      DEFAULT NULL,
19     x_last_update_login                 IN     NUMBER      DEFAULT NULL
20   ) AS
21   /*
22   ||  Created By : cdcruz
23   ||  Created On : 29-JAN-2002
24   ||  Purpose : Initialises the Old and New references for the columns of the table.
25   ||  Known limitations, enhancements or remarks :
26   ||  Change History :
27   ||  Who             When            What
28   ||  (reverse chronological order - newest change first)
29   */
30 
31     CURSOR cur_old_ref_values IS
32       SELECT   *
33       FROM     igs_as_anon_id_ps
34       WHERE    rowid = x_rowid;
35 
36   BEGIN
37 
38     l_rowid := x_rowid;
39 
40     -- Code for setting the Old and New Reference Values.
41     -- Populate Old Values.
42     OPEN cur_old_ref_values;
43     FETCH cur_old_ref_values INTO old_references;
44     IF ((cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT'))) THEN
45       CLOSE cur_old_ref_values;
46       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
47       igs_ge_msg_stack.add;
48       app_exception.raise_exception;
49       RETURN;
50     END IF;
51     CLOSE cur_old_ref_values;
52 
53     -- Populate New Values.
54     new_references.person_id                         := x_person_id;
55     new_references.anonymous_id                      := x_anonymous_id;
56     new_references.system_generated_ind              := x_system_generated_ind;
57     new_references.course_cd                         := x_course_cd;
58 
59     IF (p_action = 'UPDATE') THEN
60       new_references.creation_date                   := old_references.creation_date;
61       new_references.created_by                      := old_references.created_by;
62     ELSE
63       new_references.creation_date                   := x_creation_date;
64       new_references.created_by                      := x_created_by;
65     END IF;
66 
67     new_references.last_update_date                  := x_last_update_date;
68     new_references.last_updated_by                   := x_last_updated_by;
69     new_references.last_update_login                 := x_last_update_login;
70 
71   END set_column_values;
72 
73   FUNCTION get_uk_for_validation (
74     x_anonymous_id                      IN     VARCHAR2
75   ) RETURN BOOLEAN AS
76   /*
77   ||  Created By : cdcruz
78   ||  Created On : 29-JAN-2002
79   ||  Purpose : Validates the Unique Keys of the table.
80   ||  Known limitations, enhancements or remarks :
81   ||  Change History :
82   ||  Who             When            What
83   ||  (reverse chronological order - newest change first)
84   */
85     CURSOR cur_rowid IS
86       SELECT   rowid
87       FROM     igs_as_anon_id_ps
88       WHERE    anonymous_id = x_anonymous_id
89       AND      ((l_rowid IS NULL) OR (rowid <> l_rowid));
90 
91     lv_rowid cur_rowid%RowType;
92 
93   BEGIN
94 
95     OPEN cur_rowid;
96     FETCH cur_rowid INTO lv_rowid;
97     IF (cur_rowid%FOUND) THEN
98       CLOSE cur_rowid;
99         RETURN (true);
100         ELSE
101        CLOSE cur_rowid;
102       RETURN(FALSE);
103     END IF;
104 
105   END get_uk_for_validation ;
106 
107   PROCEDURE check_uniqueness AS
108   /*
109   ||  Created By : cdcruz
110   ||  Created On : 29-JAN-2002
111   ||  Purpose : Handles the Unique Constraint logic defined for the columns.
112   ||  Known limitations, enhancements or remarks :
113   ||  Change History :
114   ||  Who             When            What
115   ||  (reverse chronological order - newest change first)
116   */
117   BEGIN
118 
119     IF ( get_uk_for_validation (
120            new_references.anonymous_id
121          )
122        ) THEN
123       fnd_message.set_name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
124       igs_ge_msg_stack.add;
125       app_exception.raise_exception;
126     END IF;
127 
128   END check_uniqueness;
129 
130 
131   PROCEDURE check_parent_existance AS
132   /*
133   ||  Created By : cdcruz
134   ||  Created On : 29-JAN-2002
135   ||  Purpose : Checks for the existance of Parent records.
136   ||  Known limitations, enhancements or remarks :
137   ||  Change History :
138   ||  Who             When            What
139   ||  (reverse chronological order - newest change first)
140   */
141   BEGIN
142 
143     IF (((old_references.person_id = new_references.person_id) AND
144          (old_references.course_cd = new_references.course_cd)) OR
145         ((new_references.person_id IS NULL) OR
146          (new_references.course_cd IS NULL))) THEN
147       NULL;
148     ELSIF NOT igs_en_stdnt_ps_att_pkg.get_pk_for_validation (
149                 new_references.person_id,
150                 new_references.course_cd
151               ) 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   END check_parent_existance;
158 
159 
160   FUNCTION get_pk_for_validation (
161     x_person_id                         IN     NUMBER,
162     x_course_cd                         IN     VARCHAR2
163   ) RETURN BOOLEAN AS
164   /*
165   ||  Created By : cdcruz
166   ||  Created On : 29-JAN-2002
167   ||  Purpose : Validates the Primary Key of the table.
168   ||  Known limitations, enhancements or remarks :
169   ||  Change History :
170   ||  Who             When            What
171   ||  (reverse chronological order - newest change first)
172   */
173     CURSOR cur_rowid IS
174       SELECT   rowid
175       FROM     igs_as_anon_id_ps
176       WHERE    person_id = x_person_id
177       AND      course_cd = x_course_cd
178       FOR UPDATE NOWAIT;
179 
180     lv_rowid cur_rowid%RowType;
181 
182   BEGIN
183 
184     OPEN cur_rowid;
185     FETCH cur_rowid INTO lv_rowid;
186     IF (cur_rowid%FOUND) THEN
187       CLOSE cur_rowid;
188       RETURN(TRUE);
189     ELSE
190       CLOSE cur_rowid;
191       RETURN(FALSE);
192     END IF;
193 
194   END get_pk_for_validation;
195 
196 
197 
198   PROCEDURE get_fk_igs_en_stdnt_ps_att (
199     x_person_id                         IN     NUMBER,
200     x_course_cd                         IN     VARCHAR2
201   ) AS
202   /*
203   ||  Created By : cdcruz
204   ||  Created On : 29-JAN-2002
205   ||  Purpose : Validates the Foreign Keys for the table.
206   ||  Known limitations, enhancements or remarks :
207   ||  Change History :
208   ||  Who             When            What
209   ||  (reverse chronological order - newest change first)
210   */
211     CURSOR cur_rowid IS
212       SELECT   rowid
213       FROM     igs_as_anon_id_ps
214       WHERE   ((course_cd = x_course_cd) AND
215                (person_id = x_person_id));
216 
217     lv_rowid cur_rowid%RowType;
218 
219   BEGIN
220 
221     OPEN cur_rowid;
222     FETCH cur_rowid INTO lv_rowid;
223     IF (cur_rowid%FOUND) THEN
224       CLOSE cur_rowid;
225       fnd_message.set_name ('IGS', 'IGS_AS_APS_SCA_FK');
226       igs_ge_msg_stack.add;
227       app_exception.raise_exception;
228       RETURN;
229     END IF;
230     CLOSE cur_rowid;
231 
232   END get_fk_igs_en_stdnt_ps_att;
233 
234 
235   PROCEDURE before_dml (
236     p_action                            IN     VARCHAR2,
237     x_rowid                             IN     VARCHAR2    DEFAULT NULL,
238     x_person_id                         IN     NUMBER      DEFAULT NULL,
239     x_anonymous_id                      IN     VARCHAR2    DEFAULT NULL,
240     x_system_generated_ind              IN     VARCHAR2    DEFAULT NULL,
241     x_course_cd                         IN     VARCHAR2    DEFAULT NULL,
242     x_creation_date                     IN     DATE        DEFAULT NULL,
243     x_created_by                        IN     NUMBER      DEFAULT NULL,
244     x_last_update_date                  IN     DATE        DEFAULT NULL,
245     x_last_updated_by                   IN     NUMBER      DEFAULT NULL,
246     x_last_update_login                 IN     NUMBER      DEFAULT NULL
247   ) AS
248   /*
249   ||  Created By : cdcruz
250   ||  Created On : 29-JAN-2002
251   ||  Purpose : Initialises the columns, Checks Constraints, Calls the
252   ||            Trigger Handlers for the table, before any DML operation.
253   ||  Known limitations, enhancements or remarks :
254   ||  Change History :
255   ||  Who             When            What
256   ||  (reverse chronological order - newest change first)
257   */
258   BEGIN
259 
260     set_column_values (
261       p_action,
262       x_rowid,
263       x_person_id,
264       x_anonymous_id,
265       x_system_generated_ind,
266       x_course_cd,
267       x_creation_date,
268       x_created_by,
269       x_last_update_date,
270       x_last_updated_by,
271       x_last_update_login
272     );
273 
274     IF (p_action = 'INSERT') THEN
275       -- Call all the procedures related to Before Insert.
276       IF ( get_pk_for_validation(
277              new_references.person_id,
278              new_references.course_cd
279            )
280          ) THEN
281         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
282         igs_ge_msg_stack.add;
283         app_exception.raise_exception;
284       END IF;
285       check_uniqueness;
286       check_parent_existance;
287     ELSIF (p_action = 'UPDATE') THEN
288       -- Call all the procedures related to Before Update.
289       check_uniqueness;
290       check_parent_existance;
291     ELSIF (p_action = 'VALIDATE_INSERT') THEN
292       -- Call all the procedures related to Before Insert.
293       IF ( get_pk_for_validation (
294              new_references.person_id,
295              new_references.course_cd
296            )
297          ) THEN
298         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
299         igs_ge_msg_stack.add;
300         app_exception.raise_exception;
301       END IF;
302       check_uniqueness;
303     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
304       check_uniqueness;
305     END IF;
306 
307   END before_dml;
308 
309 
310   PROCEDURE insert_row (
311     x_rowid                             IN OUT NOCOPY VARCHAR2,
312     x_person_id                         IN     NUMBER,
313     x_anonymous_id                      IN     VARCHAR2,
314     x_system_generated_ind              IN     VARCHAR2,
315     x_course_cd                         IN     VARCHAR2,
316     x_mode                              IN     VARCHAR2 DEFAULT 'R'
317   ) AS
318   /*
319   ||  Created By : cdcruz
320   ||  Created On : 29-JAN-2002
321   ||  Purpose : Handles the INSERT DML logic for the table.
322   ||  Known limitations, enhancements or remarks :
323   ||  Change History :
324   ||  Who             When            What
325   ||  (reverse chronological order - newest change first)
326   */
327     CURSOR c IS
328       SELECT   rowid
329       FROM     igs_as_anon_id_ps
330       WHERE    person_id                         = x_person_id
331       AND      course_cd                         = x_course_cd;
332 
333     x_last_update_date           DATE;
334     x_last_updated_by            NUMBER;
335     x_last_update_login          NUMBER;
336     x_request_id                 NUMBER;
337     x_program_id                 NUMBER;
338     x_program_application_id     NUMBER;
339     x_program_update_date        DATE;
340 
341   BEGIN
342 
343     x_last_update_date := SYSDATE;
344     IF (x_mode = 'I') THEN
345       x_last_updated_by := 1;
346       x_last_update_login := 0;
347     ELSIF (x_mode = 'R') THEN
348       x_last_updated_by := fnd_global.user_id;
349       IF (x_last_updated_by IS NULL) THEN
350         x_last_updated_by := -1;
351       END IF;
352       x_last_update_login := fnd_global.login_id;
353       IF (x_last_update_login IS NULL) THEN
354         x_last_update_login := -1;
355       END IF;
356       x_request_id             := fnd_global.conc_request_id;
357       x_program_id             := fnd_global.conc_program_id;
358       x_program_application_id := fnd_global.prog_appl_id;
359 
360       IF (x_request_id = -1) THEN
361         x_request_id             := NULL;
362         x_program_id             := NULL;
363         x_program_application_id := NULL;
364         x_program_update_date    := NULL;
365       ELSE
366         x_program_update_date    := SYSDATE;
367       END IF;
368     ELSE
369       fnd_message.set_name ('FND', 'SYSTEM-INVALID ARGS');
370       igs_ge_msg_stack.add;
371       app_exception.raise_exception;
372     END IF;
373 
374     before_dml(
375       p_action                            => 'INSERT',
376       x_rowid                             => x_rowid,
377       x_person_id                         => x_person_id,
378       x_anonymous_id                      => x_anonymous_id,
379       x_system_generated_ind              => x_system_generated_ind,
380       x_course_cd                         => x_course_cd,
381       x_creation_date                     => x_last_update_date,
382       x_created_by                        => x_last_updated_by,
383       x_last_update_date                  => x_last_update_date,
384       x_last_updated_by                   => x_last_updated_by,
385       x_last_update_login                 => x_last_update_login
386     );
387 
388     INSERT INTO igs_as_anon_id_ps (
389       person_id,
390       anonymous_id,
391       system_generated_ind,
392       course_cd,
393       creation_date,
394       created_by,
395       last_update_date,
396       last_updated_by,
397       last_update_login,
398       request_id,
399       program_id,
400       program_application_id,
401       program_update_date
402     ) VALUES (
403       new_references.person_id,
404       new_references.anonymous_id,
405       new_references.system_generated_ind,
406       new_references.course_cd,
407       x_last_update_date,
408       x_last_updated_by,
409       x_last_update_date,
410       x_last_updated_by,
411       x_last_update_login ,
412       x_request_id,
413       x_program_id,
414       x_program_application_id,
415       x_program_update_date
416     );
417 
418     OPEN c;
419     FETCH c INTO x_rowid;
420     IF (c%NOTFOUND) THEN
421       CLOSE c;
422       RAISE NO_DATA_FOUND;
423     END IF;
424     CLOSE c;
425 
426   END insert_row;
427 
428 
429   PROCEDURE lock_row (
430     x_rowid                             IN     VARCHAR2,
431     x_person_id                         IN     NUMBER,
432     x_anonymous_id                      IN     VARCHAR2,
433     x_system_generated_ind              IN     VARCHAR2,
434     x_course_cd                         IN     VARCHAR2
435   ) AS
436   /*
437   ||  Created By : cdcruz
438   ||  Created On : 29-JAN-2002
439   ||  Purpose : Handles the LOCK mechanism for the table.
440   ||  Known limitations, enhancements or remarks :
441   ||  Change History :
442   ||  Who             When            What
443   ||  (reverse chronological order - newest change first)
444   */
445     CURSOR c1 IS
446       SELECT
447         anonymous_id,
448         system_generated_ind
449       FROM  igs_as_anon_id_ps
450       WHERE rowid = x_rowid
451       FOR UPDATE NOWAIT;
452 
453     tlinfo c1%ROWTYPE;
454 
455   BEGIN
456 
457     OPEN c1;
458     FETCH c1 INTO tlinfo;
459     IF (c1%notfound) THEN
460       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
461       igs_ge_msg_stack.add;
462       CLOSE c1;
463       app_exception.raise_exception;
464       RETURN;
465     END IF;
466     CLOSE c1;
467 
468     IF (
469         (tlinfo.anonymous_id = x_anonymous_id)
470         AND (tlinfo.system_generated_ind = x_system_generated_ind)
471        ) THEN
472       NULL;
473     ELSE
474       fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
475       igs_ge_msg_stack.add;
476       app_exception.raise_exception;
477     END IF;
478 
479     RETURN;
480 
481   END lock_row;
482 
483 
484   PROCEDURE update_row (
485     x_rowid                             IN     VARCHAR2,
486     x_person_id                         IN     NUMBER,
487     x_anonymous_id                      IN     VARCHAR2,
488     x_system_generated_ind              IN     VARCHAR2,
489     x_course_cd                         IN     VARCHAR2,
490     x_mode                              IN     VARCHAR2 DEFAULT 'R'
491   ) AS
492   /*
493   ||  Created By : cdcruz
494   ||  Created On : 29-JAN-2002
495   ||  Purpose : Handles the UPDATE DML logic for the table.
496   ||  Known limitations, enhancements or remarks :
497   ||  Change History :
498   ||  Who             When            What
499   ||  (reverse chronological order - newest change first)
500   */
501     x_last_update_date           DATE ;
502     x_last_updated_by            NUMBER;
503     x_last_update_login          NUMBER;
504     x_request_id                 NUMBER;
505     x_program_id                 NUMBER;
506     x_program_application_id     NUMBER;
507     x_program_update_date        DATE;
508 
509   BEGIN
510 
511     x_last_update_date := SYSDATE;
512     IF (X_MODE = 'I') THEN
513       x_last_updated_by := 1;
514       x_last_update_login := 0;
515     ELSIF (x_mode = 'R') THEN
516       x_last_updated_by := fnd_global.user_id;
517       IF x_last_updated_by IS NULL THEN
518         x_last_updated_by := -1;
519       END IF;
520       x_last_update_login := fnd_global.login_id;
521       IF (x_last_update_login IS NULL) THEN
522         x_last_update_login := -1;
523       END IF;
524     ELSE
525       fnd_message.set_name( 'FND', 'SYSTEM-INVALID ARGS');
526       igs_ge_msg_stack.add;
527       app_exception.raise_exception;
528     END IF;
529 
530     before_dml(
531       p_action                            => 'UPDATE',
532       x_rowid                             => x_rowid,
533       x_person_id                         => x_person_id,
534       x_anonymous_id                      => x_anonymous_id,
535       x_system_generated_ind              => x_system_generated_ind,
536       x_course_cd                         => x_course_cd,
537       x_creation_date                     => x_last_update_date,
538       x_created_by                        => x_last_updated_by,
539       x_last_update_date                  => x_last_update_date,
540       x_last_updated_by                   => x_last_updated_by,
541       x_last_update_login                 => x_last_update_login
542     );
543 
544     IF (x_mode = 'R') THEN
545       x_request_id := fnd_global.conc_request_id;
546       x_program_id := fnd_global.conc_program_id;
547       x_program_application_id := fnd_global.prog_appl_id;
548       IF (x_request_id =  -1) THEN
549         x_request_id := old_references.request_id;
550         x_program_id := old_references.program_id;
551         x_program_application_id := old_references.program_application_id;
552         x_program_update_date := old_references.program_update_date;
553       ELSE
554         x_program_update_date := SYSDATE;
555       END IF;
556     END IF;
557 
558     UPDATE igs_as_anon_id_ps
559       SET
560         anonymous_id                      = new_references.anonymous_id,
561         system_generated_ind              = new_references.system_generated_ind,
562         last_update_date                  = x_last_update_date,
563         last_updated_by                   = x_last_updated_by,
564         last_update_login                 = x_last_update_login ,
565         request_id                        = x_request_id,
566         program_id                        = x_program_id,
567         program_application_id            = x_program_application_id,
568         program_update_date               = x_program_update_date
569       WHERE rowid = x_rowid;
570 
571     IF (SQL%NOTFOUND) THEN
572       RAISE NO_DATA_FOUND;
573     END IF;
574 
575   END update_row;
576 
577 
578   PROCEDURE add_row (
579     x_rowid                             IN OUT NOCOPY VARCHAR2,
580     x_person_id                         IN     NUMBER,
581     x_anonymous_id                      IN     VARCHAR2,
582     x_system_generated_ind              IN     VARCHAR2,
583     x_course_cd                         IN     VARCHAR2,
584     x_mode                              IN     VARCHAR2 DEFAULT 'R'
585   ) AS
586   /*
587   ||  Created By : cdcruz
588   ||  Created On : 29-JAN-2002
589   ||  Purpose : Adds a row if there is no existing row, otherwise updates existing row in the table.
590   ||  Known limitations, enhancements or remarks :
591   ||  Change History :
592   ||  Who             When            What
593   ||  (reverse chronological order - newest change first)
594   */
595     CURSOR c1 IS
596       SELECT   rowid
597       FROM     igs_as_anon_id_ps
598       WHERE    person_id                         = x_person_id
599       AND      course_cd                         = x_course_cd;
600 
601   BEGIN
602 
603     OPEN c1;
604     FETCH c1 INTO x_rowid;
605     IF (c1%NOTFOUND) THEN
606       CLOSE c1;
607 
608       insert_row (
609         x_rowid,
610         x_person_id,
611         x_anonymous_id,
612         x_system_generated_ind,
613         x_course_cd,
614         x_mode
615       );
616       RETURN;
617     END IF;
618     CLOSE c1;
619 
620     update_row (
621       x_rowid,
622       x_person_id,
623       x_anonymous_id,
624       x_system_generated_ind,
625       x_course_cd,
626       x_mode
627     );
628 
629   END add_row;
630 
631 
632   PROCEDURE delete_row (
633     x_rowid IN VARCHAR2
634   ) AS
635   /*
636   ||  Created By : cdcruz
637   ||  Created On : 29-JAN-2002
638   ||  Purpose : Handles the DELETE DML logic for the table.
639   ||  Known limitations, enhancements or remarks :
640   ||  Change History :
641   ||  Who             When            What
642   ||  (reverse chronological order - newest change first)
643   */
644   BEGIN
645 
646     before_dml (
647       p_action => 'DELETE',
648       x_rowid => x_rowid
649     );
650 
651     DELETE FROM igs_as_anon_id_ps
652     WHERE rowid = x_rowid;
653 
654     IF (SQL%NOTFOUND) THEN
655       RAISE NO_DATA_FOUND;
656     END IF;
657 
658   END delete_row;
659 
660 
661 END igs_as_anon_id_ps_pkg;