DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_FI_TP_RET_SCHD_PKG

Source


1 PACKAGE BODY igs_fi_tp_ret_schd_pkg AS
2 /* $Header: IGSSIE7B.pls 120.0 2005/06/02 04:20:06 appldev noship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references igs_fi_tp_ret_schd%ROWTYPE;
6   new_references igs_fi_tp_ret_schd%ROWTYPE;
7 
8   PROCEDURE set_column_values (
9     p_action                            IN     VARCHAR2,
10     x_rowid                             IN     VARCHAR2,
11     x_ftci_teach_retention_id           IN     NUMBER,
12     x_teach_cal_type                    IN     VARCHAR2,
13     x_teach_ci_sequence_number          IN     NUMBER,
14     x_fee_cal_type                      IN     VARCHAR2,
15     x_fee_ci_sequence_number            IN     NUMBER,
16     x_fee_type                          IN     VARCHAR2,
17     x_dt_alias                          IN     VARCHAR2,
18     x_dai_sequence_number               IN     NUMBER,
19     x_ret_percentage                    IN     NUMBER,
20     x_ret_amount                        IN     NUMBER,
21     x_creation_date                     IN     DATE,
22     x_created_by                        IN     NUMBER,
23     x_last_update_date                  IN     DATE,
24     x_last_updated_by                   IN     NUMBER,
25     x_last_update_login                 IN     NUMBER
26   ) AS
27   /*
28   ||  Created By : [email protected]
29   ||  Created On : 02-SEP-2004
30   ||  Purpose : Initialises the Old and New references for the columns of the table.
31   ||  Known limitations, enhancements or remarks :
32   ||  Change History :
33   ||  Who             When            What
34   ||  (reverse chronological order - newest change first)
35   */
36 
37     CURSOR cur_old_ref_values IS
38       SELECT   *
39       FROM     igs_fi_tp_ret_schd
40       WHERE    rowid = x_rowid;
41 
42   BEGIN
43 
44     l_rowid := x_rowid;
45 
46     -- Code for setting the Old and New Reference Values.
47     -- Populate Old Values.
48     OPEN cur_old_ref_values;
49     FETCH cur_old_ref_values INTO old_references;
50     IF ((cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT'))) THEN
51       CLOSE cur_old_ref_values;
52       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
53       igs_ge_msg_stack.add;
54       app_exception.raise_exception;
55       RETURN;
56     END IF;
57     CLOSE cur_old_ref_values;
58 
59     -- Populate New Values.
60     new_references.ftci_teach_retention_id           := x_ftci_teach_retention_id;
61     new_references.teach_cal_type                    := x_teach_cal_type;
62     new_references.teach_ci_sequence_number          := x_teach_ci_sequence_number;
63     new_references.fee_cal_type                      := x_fee_cal_type;
64     new_references.fee_ci_sequence_number            := x_fee_ci_sequence_number;
65     new_references.fee_type                          := x_fee_type;
66     new_references.dt_alias                          := x_dt_alias;
67     new_references.dai_sequence_number               := x_dai_sequence_number;
68     new_references.ret_percentage                    := x_ret_percentage;
69     new_references.ret_amount                        := x_ret_amount;
70 
71     IF (p_action = 'UPDATE') THEN
72       new_references.creation_date                   := old_references.creation_date;
73       new_references.created_by                      := old_references.created_by;
74     ELSE
75       new_references.creation_date                   := x_creation_date;
76       new_references.created_by                      := x_created_by;
77     END IF;
78 
79     new_references.last_update_date                  := x_last_update_date;
80     new_references.last_updated_by                   := x_last_updated_by;
81     new_references.last_update_login                 := x_last_update_login;
82 
83   END set_column_values;
84 
85 
86   PROCEDURE check_uniqueness AS
87   /*
88   ||  Created By : [email protected]
89   ||  Created On : 02-SEP-2004
90   ||  Purpose : Handles the Unique Constraint logic defined for the columns.
91   ||  Known limitations, enhancements or remarks :
92   ||  Change History :
93   ||  Who             When            What
94   ||  (reverse chronological order - newest change first)
95   */
96   BEGIN
97 
98     IF ( get_uk_for_validation (
99            new_references.teach_cal_type,
100            new_references.teach_ci_sequence_number,
101            new_references.fee_cal_type,
102            new_references.fee_ci_sequence_number,
103            new_references.fee_type,
104            new_references.dt_alias,
105            new_references.dai_sequence_number
106          )
107        ) THEN
108       fnd_message.set_name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
109       igs_ge_msg_stack.add;
110       app_exception.raise_exception;
111     END IF;
112 
113   END check_uniqueness;
114 
115   PROCEDURE check_parent_existance AS
116   /*
117   ||  Created By : [email protected]
118   ||  Created On : 13-SEP-2004
119   ||  Purpose : Checks for the existance of Parent records.
120   ||  Known limitations, enhancements or remarks :
121   ||  Change History :
122   ||  Who             When            What
123   ||  (reverse chronological order - newest change first)
124   */
125   BEGIN
126      IF ((old_references.fee_type = new_references.fee_type) AND
127          (old_references.fee_cal_type = new_references.fee_cal_type) AND
128 	 (old_references.fee_ci_sequence_number = new_references.fee_ci_sequence_number)
129 	)
130 	OR
131 	((new_references.fee_type IS NULL) OR
132 	 (new_references.fee_cal_type IS NULL) OR
133 	 (new_references.fee_ci_sequence_number IS NULL)) THEN
134 
135 	NULL;
136      ELSIF NOT igs_fi_f_typ_ca_inst_pkg.get_pk_for_validation (
137 		 x_fee_type => new_references.fee_type,
138 		 x_fee_cal_type => new_references.fee_cal_type,
139 		 x_fee_ci_sequence_number => new_references.fee_ci_sequence_number
140 		)  THEN
141         fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
142         igs_ge_msg_stack.add;
143         app_exception.raise_exception;
144      END IF;
145 
146      IF ((old_references.dt_alias = new_references.dt_alias) AND
147          (old_references.dai_sequence_number = new_references.dai_sequence_number) AND
148 	 (old_references.teach_cal_type = new_references.teach_cal_type) AND
149 	 (old_references.teach_ci_sequence_number = new_references.teach_ci_sequence_number)
150 	) OR
151 	((new_references.dt_alias IS NULL) OR
152 	 (new_references.dai_sequence_number IS NULL) OR
153 	 (new_references.teach_cal_type IS NULL) OR
154 	 (new_references.teach_ci_sequence_number IS NULL)) THEN
155 
156 	NULL;
157      ELSIF NOT igs_ca_da_inst_pkg.get_pk_for_validation (
158 			x_dt_alias => new_references.dt_alias,
159 			x_sequence_number => new_references.dai_sequence_number,
160 			x_cal_type => new_references.teach_cal_type,
161 			x_ci_sequence_number => new_references.teach_ci_sequence_number) THEN
162         fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
163         igs_ge_msg_stack.add;
164         app_exception.raise_exception;
165      END IF;
166 
167   END check_parent_existance;
168 
169   FUNCTION get_pk_for_validation (
170     x_ftci_teach_retention_id           IN     NUMBER
171   ) RETURN BOOLEAN AS
172   /*
173   ||  Created By : [email protected]
174   ||  Created On : 02-SEP-2004
175   ||  Purpose : Validates the Primary Key of the table.
176   ||  Known limitations, enhancements or remarks :
177   ||  Change History :
178   ||  Who             When            What
179   ||  (reverse chronological order - newest change first)
180   */
181     CURSOR cur_rowid IS
182       SELECT   rowid
183       FROM     igs_fi_tp_ret_schd
184       WHERE    ftci_teach_retention_id = x_ftci_teach_retention_id
185       FOR UPDATE NOWAIT;
186 
187     lv_rowid cur_rowid%RowType;
188 
189   BEGIN
190 
191     OPEN cur_rowid;
192     FETCH cur_rowid INTO lv_rowid;
193     IF (cur_rowid%FOUND) THEN
194       CLOSE cur_rowid;
195       RETURN(TRUE);
196     ELSE
197       CLOSE cur_rowid;
198       RETURN(FALSE);
199     END IF;
200 
201   END get_pk_for_validation;
202 
203 
204   FUNCTION get_uk_for_validation (
205     x_teach_cal_type                    IN     VARCHAR2,
206     x_teach_ci_sequence_number          IN     NUMBER,
207     x_fee_cal_type                      IN     VARCHAR2,
208     x_fee_ci_sequence_number            IN     NUMBER,
209     x_fee_type                          IN     VARCHAR2,
210     x_dt_alias                          IN     VARCHAR2,
211     x_dai_sequence_number               IN     NUMBER
212   ) RETURN BOOLEAN AS
213   /*
214   ||  Created By : [email protected]
215   ||  Created On : 02-SEP-2004
216   ||  Purpose : Validates the Unique Keys of the table.
217   ||  Known limitations, enhancements or remarks :
218   ||  Change History :
219   ||  Who             When            What
220   ||  (reverse chronological order - newest change first)
221   */
222     CURSOR cur_rowid IS
223       SELECT   rowid
224       FROM     igs_fi_tp_ret_schd
225       WHERE    teach_cal_type = x_teach_cal_type
226       AND      teach_ci_sequence_number = x_teach_ci_sequence_number
227       AND      ((fee_cal_type = x_fee_cal_type) OR (fee_cal_type IS NULL AND x_fee_cal_type IS NULL))
228       AND      ((fee_ci_sequence_number = x_fee_ci_sequence_number) OR (fee_ci_sequence_number IS NULL AND x_fee_ci_sequence_number IS NULL))
229       AND      ((fee_type = x_fee_type) OR (fee_type IS NULL AND x_fee_type IS NULL))
230       AND      dt_alias = x_dt_alias
231       AND      dai_sequence_number = x_dai_sequence_number
232       AND      ((l_rowid IS NULL) OR (rowid <> l_rowid));
233 
234     lv_rowid cur_rowid%RowType;
235 
236   BEGIN
237 
238     OPEN cur_rowid;
239     FETCH cur_rowid INTO lv_rowid;
240     IF (cur_rowid%FOUND) THEN
241       CLOSE cur_rowid;
242         RETURN (true);
243         ELSE
244        CLOSE cur_rowid;
245       RETURN(FALSE);
246     END IF;
247 
248   END get_uk_for_validation ;
249 
250   PROCEDURE BeforeRowInsertUpdateDelete1(
251     p_inserting IN BOOLEAN DEFAULT FALSE,
252     p_updating IN BOOLEAN DEFAULT FALSE,
253     p_deleting IN BOOLEAN DEFAULT FALSE
254     ) AS
255   /*
256   ||  Created By : [email protected]
257   ||  Created On : 20-SEP-2004
258   ||  Purpose :
259   ||  Known limitations, enhancements or remarks :
260   ||  Change History :
261   ||  Who             When            What
262   ||  (reverse chronological order - newest change first)
263   */
264   BEGIN
265       IF (p_inserting OR p_updating) THEN
266           IF (new_references.ret_percentage IS NULL AND new_references.ret_amount IS NULL) THEN
267               fnd_message.set_name('IGS','IGS_FI_RETAMT_OR_PER_MAND');
268 	      igs_ge_msg_stack.add;
269               App_Exception.Raise_Exception;
270 	  ELSIF (new_references.ret_percentage IS NOT NULL AND new_references.ret_amount IS NOT NULL) THEN
271               fnd_message.set_name('IGS','IGS_FI_ONE_RETAMT_OR_RETPREC');
272 	      igs_ge_msg_stack.add;
273               App_Exception.Raise_Exception;
274 	  END IF;
275       END IF;
276   END BeforeRowInsertUpdateDelete1;
277 
278 
279   PROCEDURE before_dml (
280     p_action                            IN     VARCHAR2,
281     x_rowid                             IN     VARCHAR2,
282     x_ftci_teach_retention_id           IN     NUMBER,
283     x_teach_cal_type                    IN     VARCHAR2,
284     x_teach_ci_sequence_number          IN     NUMBER,
285     x_fee_cal_type                      IN     VARCHAR2,
286     x_fee_ci_sequence_number            IN     NUMBER,
287     x_fee_type                          IN     VARCHAR2,
288     x_dt_alias                          IN     VARCHAR2,
289     x_dai_sequence_number               IN     NUMBER,
290     x_ret_percentage                    IN     NUMBER,
291     x_ret_amount                        IN     NUMBER,
292     x_creation_date                     IN     DATE,
293     x_created_by                        IN     NUMBER,
294     x_last_update_date                  IN     DATE,
295     x_last_updated_by                   IN     NUMBER,
296     x_last_update_login                 IN     NUMBER
297   ) AS
298   /*
299   ||  Created By : [email protected]
300   ||  Created On : 02-SEP-2004
301   ||  Purpose : Initialises the columns, Checks Constraints, Calls the
302   ||            Trigger Handlers for the table, before any DML operation.
303   ||  Known limitations, enhancements or remarks :
304   ||  Change History :
305   ||  Who             When            What
306   ||  (reverse chronological order - newest change first)
307   */
308   BEGIN
309 
310     set_column_values (
311       p_action,
312       x_rowid,
313       x_ftci_teach_retention_id,
314       x_teach_cal_type,
315       x_teach_ci_sequence_number,
316       x_fee_cal_type,
317       x_fee_ci_sequence_number,
318       x_fee_type,
319       x_dt_alias,
320       x_dai_sequence_number,
321       x_ret_percentage,
322       x_ret_amount,
323       x_creation_date,
324       x_created_by,
325       x_last_update_date,
326       x_last_updated_by,
327       x_last_update_login
328     );
329 
330     IF (p_action = 'INSERT') THEN
331       -- Call all the procedures related to Before Insert.
332       BeforeRowInsertUpdateDelete1 ( p_inserting => TRUE );
333       IF ( get_pk_for_validation(
334              new_references.ftci_teach_retention_id
335            )
336          ) THEN
337         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
338         igs_ge_msg_stack.add;
339         app_exception.raise_exception;
340       END IF;
341       check_uniqueness;
342       Check_Constraints;
343       check_parent_existance;
344     ELSIF (p_action = 'UPDATE') THEN
345       -- Call all the procedures related to Before Update.
346       BeforeRowInsertUpdateDelete1 ( p_updating => TRUE );
347       check_uniqueness;
348       Check_Constraints;
349       check_parent_existance;
350     ELSIF (p_action = 'VALIDATE_INSERT') THEN
351       -- Call all the procedures related to Before Insert.
352       IF ( get_pk_for_validation (
353              new_references.ftci_teach_retention_id
354            )
355          ) THEN
356         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
357         igs_ge_msg_stack.add;
358         app_exception.raise_exception;
359       END IF;
360       check_uniqueness;
361     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
362       check_uniqueness;
363     END IF;
364     l_rowid := NULL;
365   END before_dml;
366 
367 
368   PROCEDURE insert_row (
369     x_rowid                             IN OUT NOCOPY VARCHAR2,
370     x_ftci_teach_retention_id           IN OUT NOCOPY NUMBER,
371     x_teach_cal_type                    IN     VARCHAR2,
372     x_teach_ci_sequence_number          IN     NUMBER,
373     x_fee_cal_type                      IN     VARCHAR2,
374     x_fee_ci_sequence_number            IN     NUMBER,
375     x_fee_type                          IN     VARCHAR2,
376     x_dt_alias                          IN     VARCHAR2,
377     x_dai_sequence_number               IN     NUMBER,
378     x_ret_percentage                    IN     NUMBER,
379     x_ret_amount                        IN     NUMBER,
380     x_mode                              IN     VARCHAR2
381   ) AS
382   /*
383   ||  Created By : [email protected]
384   ||  Created On : 02-SEP-2004
385   ||  Purpose : Handles the INSERT DML logic for the table.
386   ||  Known limitations, enhancements or remarks :
387   ||  Change History :
388   ||  Who             When            What
389   ||  (reverse chronological order - newest change first)
390   */
391 
392     x_last_update_date           DATE;
393     x_last_updated_by            NUMBER;
394     x_last_update_login          NUMBER;
395     x_request_id                 NUMBER;
396     x_program_id                 NUMBER;
397     x_program_application_id     NUMBER;
398     x_program_update_date        DATE;
399 
400   BEGIN
401 
402     x_last_update_date := SYSDATE;
403     IF (x_mode = 'I') THEN
404       x_last_updated_by := 1;
405       x_last_update_login := 0;
406     ELSIF (x_mode = 'R') THEN
407       x_last_updated_by := fnd_global.user_id;
408       IF (x_last_updated_by IS NULL) THEN
409         x_last_updated_by := -1;
410       END IF;
411       x_last_update_login := fnd_global.login_id;
412       IF (x_last_update_login IS NULL) THEN
413         x_last_update_login := -1;
414       END IF;
415       x_request_id             := fnd_global.conc_request_id;
416       x_program_id             := fnd_global.conc_program_id;
417       x_program_application_id := fnd_global.prog_appl_id;
418 
419       IF (x_request_id = -1) THEN
420         x_request_id             := NULL;
421         x_program_id             := NULL;
422         x_program_application_id := NULL;
423         x_program_update_date    := NULL;
424       ELSE
425         x_program_update_date    := SYSDATE;
426       END IF;
427     ELSE
428       fnd_message.set_name ('FND', 'SYSTEM-INVALID ARGS');
429       fnd_message.set_token ('ROUTINE', 'IGS_FI_TP_RET_SCHD_PKG.INSERT_ROW');
430       igs_ge_msg_stack.add;
431       app_exception.raise_exception;
432     END IF;
433 
434     x_ftci_teach_retention_id := NULL;
435 
436     before_dml(
437       p_action                            => 'INSERT',
438       x_rowid                             => x_rowid,
439       x_ftci_teach_retention_id           => x_ftci_teach_retention_id,
440       x_teach_cal_type                    => x_teach_cal_type,
441       x_teach_ci_sequence_number          => x_teach_ci_sequence_number,
442       x_fee_cal_type                      => x_fee_cal_type,
443       x_fee_ci_sequence_number            => x_fee_ci_sequence_number,
444       x_fee_type                          => x_fee_type,
445       x_dt_alias                          => x_dt_alias,
446       x_dai_sequence_number               => x_dai_sequence_number,
447       x_ret_percentage                    => x_ret_percentage,
448       x_ret_amount                        => x_ret_amount,
449       x_creation_date                     => x_last_update_date,
450       x_created_by                        => x_last_updated_by,
451       x_last_update_date                  => x_last_update_date,
452       x_last_updated_by                   => x_last_updated_by,
453       x_last_update_login                 => x_last_update_login
454     );
455 
456     INSERT INTO igs_fi_tp_ret_schd (
457       ftci_teach_retention_id,
458       teach_cal_type,
459       teach_ci_sequence_number,
460       fee_cal_type,
461       fee_ci_sequence_number,
462       fee_type,
463       dt_alias,
464       dai_sequence_number,
465       ret_percentage,
466       ret_amount,
467       creation_date,
468       created_by,
469       last_update_date,
470       last_updated_by,
471       last_update_login,
472       request_id,
473       program_id,
474       program_application_id,
475       program_update_date
476     ) VALUES (
477       igs_fi_tp_ret_schd_s.NEXTVAL,
478       new_references.teach_cal_type,
479       new_references.teach_ci_sequence_number,
480       new_references.fee_cal_type,
481       new_references.fee_ci_sequence_number,
482       new_references.fee_type,
483       new_references.dt_alias,
484       new_references.dai_sequence_number,
485       new_references.ret_percentage,
486       new_references.ret_amount,
487       x_last_update_date,
488       x_last_updated_by,
489       x_last_update_date,
490       x_last_updated_by,
491       x_last_update_login,
492       x_request_id,
493       x_program_id,
494       x_program_application_id,
495       x_program_update_date
496     ) RETURNING ROWID, ftci_teach_retention_id INTO x_rowid, x_ftci_teach_retention_id;
497 
498   END insert_row;
499 
500 
501   PROCEDURE lock_row (
502     x_rowid                             IN     VARCHAR2,
503     x_ftci_teach_retention_id           IN     NUMBER,
504     x_teach_cal_type                    IN     VARCHAR2,
505     x_teach_ci_sequence_number          IN     NUMBER,
506     x_fee_cal_type                      IN     VARCHAR2,
507     x_fee_ci_sequence_number            IN     NUMBER,
508     x_fee_type                          IN     VARCHAR2,
509     x_dt_alias                          IN     VARCHAR2,
510     x_dai_sequence_number               IN     NUMBER,
511     x_ret_percentage                    IN     NUMBER,
512     x_ret_amount                        IN     NUMBER
513   ) AS
514   /*
515   ||  Created By : [email protected]
516   ||  Created On : 02-SEP-2004
517   ||  Purpose : Handles the LOCK mechanism for the table.
518   ||  Known limitations, enhancements or remarks :
519   ||  Change History :
520   ||  Who             When            What
521   ||  (reverse chronological order - newest change first)
522   */
523     CURSOR c1 IS
524       SELECT
525         teach_cal_type,
526         teach_ci_sequence_number,
527         fee_cal_type,
528         fee_ci_sequence_number,
529         fee_type,
530         dt_alias,
531         dai_sequence_number,
532         ret_percentage,
533         ret_amount
534       FROM  igs_fi_tp_ret_schd
535       WHERE rowid = x_rowid
536       FOR UPDATE NOWAIT;
537 
538     tlinfo c1%ROWTYPE;
539 
540   BEGIN
541 
542     OPEN c1;
543     FETCH c1 INTO tlinfo;
544     IF (c1%notfound) THEN
545       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
546       igs_ge_msg_stack.add;
547       CLOSE c1;
548       app_exception.raise_exception;
549       RETURN;
550     END IF;
551     CLOSE c1;
552 
553     IF (
554         (tlinfo.teach_cal_type = x_teach_cal_type)
555         AND (tlinfo.teach_ci_sequence_number = x_teach_ci_sequence_number)
556         AND ((tlinfo.fee_cal_type = x_fee_cal_type) OR ((tlinfo.fee_cal_type IS NULL) AND (X_fee_cal_type IS NULL)))
557         AND ((tlinfo.fee_ci_sequence_number = x_fee_ci_sequence_number) OR ((tlinfo.fee_ci_sequence_number IS NULL) AND (X_fee_ci_sequence_number IS NULL)))
558         AND ((tlinfo.fee_type = x_fee_type) OR ((tlinfo.fee_type IS NULL) AND (X_fee_type IS NULL)))
559         AND (tlinfo.dt_alias = x_dt_alias)
560         AND (tlinfo.dai_sequence_number = x_dai_sequence_number)
561         AND ((tlinfo.ret_percentage = x_ret_percentage) OR ((tlinfo.ret_percentage IS NULL) AND (X_ret_percentage IS NULL)))
562         AND ((tlinfo.ret_amount = x_ret_amount) OR ((tlinfo.ret_amount IS NULL) AND (X_ret_amount IS NULL)))
563        ) THEN
564       NULL;
565     ELSE
566       fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
567       igs_ge_msg_stack.add;
568       app_exception.raise_exception;
569     END IF;
570 
571     RETURN;
572 
573   END lock_row;
574 
575 
576   PROCEDURE update_row (
577     x_rowid                             IN     VARCHAR2,
578     x_ftci_teach_retention_id           IN     NUMBER,
579     x_teach_cal_type                    IN     VARCHAR2,
580     x_teach_ci_sequence_number          IN     NUMBER,
581     x_fee_cal_type                      IN     VARCHAR2,
582     x_fee_ci_sequence_number            IN     NUMBER,
583     x_fee_type                          IN     VARCHAR2,
584     x_dt_alias                          IN     VARCHAR2,
585     x_dai_sequence_number               IN     NUMBER,
586     x_ret_percentage                    IN     NUMBER,
587     x_ret_amount                        IN     NUMBER,
588     x_mode                              IN     VARCHAR2
589   ) AS
590   /*
591   ||  Created By : [email protected]
592   ||  Created On : 02-SEP-2004
593   ||  Purpose : Handles the UPDATE DML logic for the table.
594   ||  Known limitations, enhancements or remarks :
595   ||  Change History :
596   ||  Who             When            What
597   ||  (reverse chronological order - newest change first)
598   */
599     x_last_update_date           DATE ;
600     x_last_updated_by            NUMBER;
601     x_last_update_login          NUMBER;
602     x_request_id                 NUMBER;
603     x_program_id                 NUMBER;
604     x_program_application_id     NUMBER;
605     x_program_update_date        DATE;
606   BEGIN
607 
608     x_last_update_date := SYSDATE;
609     IF (X_MODE = 'I') THEN
610       x_last_updated_by := 1;
611       x_last_update_login := 0;
612     ELSIF (x_mode = 'R') THEN
613       x_last_updated_by := fnd_global.user_id;
614       IF x_last_updated_by IS NULL THEN
615         x_last_updated_by := -1;
616       END IF;
617       x_last_update_login := fnd_global.login_id;
618       IF (x_last_update_login IS NULL) THEN
619         x_last_update_login := -1;
620       END IF;
621     ELSE
622       fnd_message.set_name( 'FND', 'SYSTEM-INVALID ARGS');
623       fnd_message.set_token ('ROUTINE', 'IGS_FI_TP_RET_SCHD_PKG.UPDATE_ROW');
624       igs_ge_msg_stack.add;
625       app_exception.raise_exception;
626     END IF;
627 
628     before_dml(
629       p_action                            => 'UPDATE',
630       x_rowid                             => x_rowid,
631       x_ftci_teach_retention_id           => x_ftci_teach_retention_id,
632       x_teach_cal_type                    => x_teach_cal_type,
633       x_teach_ci_sequence_number          => x_teach_ci_sequence_number,
634       x_fee_cal_type                      => x_fee_cal_type,
635       x_fee_ci_sequence_number            => x_fee_ci_sequence_number,
636       x_fee_type                          => x_fee_type,
637       x_dt_alias                          => x_dt_alias,
638       x_dai_sequence_number               => x_dai_sequence_number,
639       x_ret_percentage                    => x_ret_percentage,
640       x_ret_amount                        => x_ret_amount,
641       x_creation_date                     => x_last_update_date,
642       x_created_by                        => x_last_updated_by,
643       x_last_update_date                  => x_last_update_date,
644       x_last_updated_by                   => x_last_updated_by,
645       x_last_update_login                 => x_last_update_login
646     );
647 
648     IF (x_mode = 'R') THEN
649       x_request_id := fnd_global.conc_request_id;
650       x_program_id := fnd_global.conc_program_id;
651       x_program_application_id := fnd_global.prog_appl_id;
652       IF (x_request_id =  -1) THEN
653         x_request_id := old_references.request_id;
654         x_program_id := old_references.program_id;
655         x_program_application_id := old_references.program_application_id;
656         x_program_update_date := old_references.program_update_date;
657       ELSE
658         x_program_update_date := SYSDATE;
659       END IF;
660     END IF;
661 
662     UPDATE igs_fi_tp_ret_schd
663       SET
664         teach_cal_type                    = new_references.teach_cal_type,
665         teach_ci_sequence_number          = new_references.teach_ci_sequence_number,
666         fee_cal_type                      = new_references.fee_cal_type,
667         fee_ci_sequence_number            = new_references.fee_ci_sequence_number,
668         fee_type                          = new_references.fee_type,
669         dt_alias                          = new_references.dt_alias,
670         dai_sequence_number               = new_references.dai_sequence_number,
671         ret_percentage                    = new_references.ret_percentage,
672         ret_amount                        = new_references.ret_amount,
673         last_update_date                  = x_last_update_date,
674         last_updated_by                   = x_last_updated_by,
675         last_update_login                 = x_last_update_login,
676         request_id                        = x_request_id,
677         program_id                        = x_program_id,
678         program_application_id            = x_program_application_id,
679         program_update_date               = x_program_update_date
680       WHERE rowid = x_rowid;
681 
682     IF (SQL%NOTFOUND) THEN
683       RAISE NO_DATA_FOUND;
684     END IF;
685 
686   END update_row;
687 
688 
689   PROCEDURE add_row (
690     x_rowid                             IN OUT NOCOPY VARCHAR2,
691     x_ftci_teach_retention_id           IN OUT NOCOPY NUMBER,
692     x_teach_cal_type                    IN     VARCHAR2,
693     x_teach_ci_sequence_number          IN     NUMBER,
694     x_fee_cal_type                      IN     VARCHAR2,
695     x_fee_ci_sequence_number            IN     NUMBER,
696     x_fee_type                          IN     VARCHAR2,
697     x_dt_alias                          IN     VARCHAR2,
698     x_dai_sequence_number               IN     NUMBER,
699     x_ret_percentage                    IN     NUMBER,
700     x_ret_amount                        IN     NUMBER,
701     x_mode                              IN     VARCHAR2
702   ) AS
703   /*
704   ||  Created By : [email protected]
705   ||  Created On : 02-SEP-2004
706   ||  Purpose : Adds a row if there is no existing row, otherwise updates existing row in the table.
707   ||  Known limitations, enhancements or remarks :
708   ||  Change History :
709   ||  Who             When            What
710   ||  (reverse chronological order - newest change first)
711   */
712     CURSOR c1 IS
713       SELECT   rowid
714       FROM     igs_fi_tp_ret_schd
715       WHERE    ftci_teach_retention_id           = x_ftci_teach_retention_id;
716 
717   BEGIN
718 
719     OPEN c1;
720     FETCH c1 INTO x_rowid;
721     IF (c1%NOTFOUND) THEN
722       CLOSE c1;
723 
724       insert_row (
725         x_rowid,
726         x_ftci_teach_retention_id,
727         x_teach_cal_type,
728         x_teach_ci_sequence_number,
729         x_fee_cal_type,
730         x_fee_ci_sequence_number,
731         x_fee_type,
732         x_dt_alias,
733         x_dai_sequence_number,
734         x_ret_percentage,
735         x_ret_amount,
736         x_mode
737       );
738       RETURN;
739     END IF;
740     CLOSE c1;
741 
742     update_row (
743       x_rowid,
744       x_ftci_teach_retention_id,
745       x_teach_cal_type,
746       x_teach_ci_sequence_number,
747       x_fee_cal_type,
748       x_fee_ci_sequence_number,
749       x_fee_type,
750       x_dt_alias,
751       x_dai_sequence_number,
752       x_ret_percentage,
753       x_ret_amount,
754       x_mode
755     );
756 
757   END add_row;
758 
759   PROCEDURE get_fk_igs_ca_da_inst (
760     x_dt_alias                          IN     VARCHAR2,
761     x_dai_sequence_number               IN     NUMBER,
762     x_teach_cal_type                    IN     VARCHAR2,
763     x_teach_ci_sequence_number          IN     NUMBER
764   ) AS
765     /*
766   ||  Created By : rmaddipa
767   ||  Created On : 02-SEP-04
768   ||  Purpose : Validates the Foreign Keys for the table.
769   ||  Known limitations, enhancements or remarks :
770   ||  Change History :
771   ||  Who             When            What
772   ||  (reverse chronological order - newest change first)
773   */
774     CURSOR cur_rowid IS
775       SELECT   rowid
776       FROM     igs_fi_tp_ret_schd
777       WHERE   ((dt_alias = x_dt_alias ) AND
778                (dai_sequence_number = x_dai_sequence_number) AND
779 	       (teach_cal_type = x_teach_cal_type) AND
780 	       (teach_ci_sequence_number = x_teach_ci_sequence_number));
781 
782     lv_rowid cur_rowid%RowType;
783 
784   BEGIN
785     OPEN cur_rowid;
786     FETCH cur_rowid INTO lv_rowid;
787     IF (cur_rowid%FOUND) THEN
788       CLOSE cur_rowid;
789       fnd_message.set_name ('IGS', 'IGS_FI_TPRS_DAI_FK');
790       igs_ge_msg_stack.add;
791       app_exception.raise_exception;
792       RETURN;
793     END IF;
794     CLOSE cur_rowid;
795   END get_fk_igs_ca_da_inst;
796 
797 
798   PROCEDURE delete_row (
799     x_rowid IN VARCHAR2
800   ) AS
801   /*
802   ||  Created By : [email protected]
803   ||  Created On : 08-SEP-2004
804   ||  Purpose : Handles the DELETE DML logic for the table.
805   ||  Known limitations, enhancements or remarks :
806   ||  Change History :
807   ||  Who             When            What
808   ||  (reverse chronological order - newest change first)
809   */
810   BEGIN
811 
812     before_dml (
813       p_action => 'DELETE',
814       x_rowid => x_rowid
815     );
816 
817     DELETE FROM igs_fi_tp_ret_schd
818     WHERE rowid = x_rowid;
819 
820     IF (SQL%NOTFOUND) THEN
821       RAISE NO_DATA_FOUND;
822     END IF;
823 
824   END delete_row;
825 
826 
827   PROCEDURE Check_Constraints (
828    	 Column_Name	IN	VARCHAR2	DEFAULT NULL,
829 	 Column_Value 	IN	VARCHAR2	DEFAULT NULL
830   ) AS
831   /*
832   ||  Created By : [email protected]
833   ||  Created On : 20-SEP-2004
834   ||  Purpose :
835   ||  Known limitations, enhancements or remarks :
836   ||  Change History :
837   ||  Who             When            What
838   ||  (reverse chronological order - newest change first)
839   */
840 
841   BEGIN
842     IF Column_Name is NULL THEN
843        	NULL;
844     ELSIF Upper(Column_Name) = 'RET_PERCENTAGE' THEN
845         new_references.ret_percentage := igs_ge_number.to_num (column_value);
846     ELSIF Upper(Column_Name) = 'RET_AMOUNT' THEN
847         new_references.ret_amount := igs_ge_number.to_num (column_value);
848     END IF;
849 
850     IF (Upper(Column_Name) = 'RET_PERCENTAGE' OR Column_Name IS NULL) THEN
851         IF (new_references.ret_percentage <= 0 OR new_references.ret_percentage > 100) THEN
852 	     fnd_message.set_name('IGS','IGS_FI_RET_PERCENT_GT_ZERO');
853 	     igs_ge_msg_stack.add;
854              App_Exception.Raise_Exception;
855         END IF;
856     END IF;
857 
858     IF (Upper(Column_Name) = 'RET_AMOUNT' OR Column_Name IS NULL) THEN
859         IF (new_references.ret_amount <= 0) THEN
860              fnd_message.set_name('IGS','IGS_FI_RET_AMT_GT_ZERO');
861 	     igs_ge_msg_stack.add;
862              App_Exception.Raise_Exception;
863         END IF;
864     END IF;
865 
866   END Check_Constraints;
867 END igs_fi_tp_ret_schd_pkg;