DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGF_AP_PERSON_MATCH_PKG

Source


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