DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_HE_POOUS_OU_CC_PKG

Source


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