DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PR_STDNT_PR_FND_PKG

Source


1 PACKAGE BODY igs_pr_stdnt_pr_fnd_pkg AS
2 /* $Header: IGSQI45B.pls 120.0 2005/07/05 12:15:50 appldev noship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references igs_pr_stdnt_pr_fnd%ROWTYPE;
6   new_references igs_pr_stdnt_pr_fnd%ROWTYPE;
7 
8   PROCEDURE set_column_values (
9     p_action                            IN     VARCHAR2,
10     x_rowid                             IN     VARCHAR2,
11     x_person_id                         IN     NUMBER,
12     x_course_cd                         IN     VARCHAR2,
13     x_spo_sequence_number               IN     NUMBER,
14     x_fund_code                         IN     VARCHAR2,
15     x_creation_date                     IN     DATE,
16     x_created_by                        IN     NUMBER,
17     x_last_update_date                  IN     DATE,
18     x_last_updated_by                   IN     NUMBER,
19     x_last_update_login                 IN     NUMBER
20   ) AS
21   /*
22   ||  Created By : [email protected]
23   ||  Created On : 11-NOV-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_pr_stdnt_pr_fnd
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.course_cd                         := x_course_cd;
56     new_references.spo_sequence_number               := x_spo_sequence_number;
57     new_references.fund_code                         := x_fund_code;
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 
74   PROCEDURE check_parent_existance AS
75   /*
76   ||  Created By : [email protected]
77   ||  Created On : 11-NOV-2002
78   ||  Purpose : Checks for the existance of Parent records.
79   ||  Known limitations, enhancements or remarks :
80   ||  Change History :
81   ||  Who             When            What
82   ||  (reverse chronological order - newest change first)
83   */
84   BEGIN
85 
86     IF (((old_references.person_id = new_references.person_id) AND
87          (old_references.course_cd = new_references.course_cd) AND
88          (old_references.spo_sequence_number = new_references.spo_sequence_number)) OR
89         ((new_references.person_id IS NULL) OR
90          (new_references.course_cd IS NULL) OR
91          (new_references.spo_sequence_number IS NULL))) THEN
92       NULL;
93     ELSIF NOT igs_pr_stdnt_pr_ou_pkg.get_pk_for_validation (
94                 new_references.person_id,
95                 new_references.course_cd,
96                 new_references.spo_sequence_number
97               ) THEN
98       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
99       igs_ge_msg_stack.add;
100       app_exception.raise_exception;
101     END IF;
102 
103     IF (((old_references.fund_code = new_references.fund_code)) OR
104         ((new_references.fund_code IS NULL))) THEN
105       NULL;
106     ELSIF NOT igf_aw_fund_cat_pkg.get_uk_for_validation ( new_references.fund_code ) THEN
107         fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
108         igs_ge_msg_stack.add;
109         app_exception.raise_exception;
110     END IF;
111   END check_parent_existance;
112 
113 
114   FUNCTION get_pk_for_validation (
115     x_person_id                         IN     NUMBER,
116     x_course_cd                         IN     VARCHAR2,
117     x_spo_sequence_number               IN     NUMBER,
118     x_fund_code                         IN     VARCHAR2
119   ) RETURN BOOLEAN AS
120   /*
121   ||  Created By : [email protected]
122   ||  Created On : 11-NOV-2002
123   ||  Purpose : Validates the Primary Key of the table.
124   ||  Known limitations, enhancements or remarks :
125   ||  Change History :
126   ||  Who             When            What
127   ||  (reverse chronological order - newest change first)
128   */
129     CURSOR cur_rowid IS
130       SELECT   rowid
131       FROM     igs_pr_stdnt_pr_fnd
132       WHERE    person_id = x_person_id
133       AND      course_cd = x_course_cd
134       AND      spo_sequence_number = x_spo_sequence_number
135       AND      fund_code = x_fund_code
136       FOR UPDATE NOWAIT;
137 
138     lv_rowid cur_rowid%RowType;
139 
140   BEGIN
141 
142     OPEN cur_rowid;
143     FETCH cur_rowid INTO lv_rowid;
144     IF (cur_rowid%FOUND) THEN
145       CLOSE cur_rowid;
146       RETURN(TRUE);
147     ELSE
148       CLOSE cur_rowid;
149       RETURN(FALSE);
150     END IF;
151 
152   END get_pk_for_validation;
153 
154 
155   PROCEDURE get_fk_igs_pr_stdnt_pr_ou (
156     x_person_id                         IN     NUMBER,
157     x_course_cd                         IN     VARCHAR2,
158     x_sequence_number                   IN     NUMBER
159   ) AS
160   /*
161   ||  Created By : [email protected]
162   ||  Created On : 11-NOV-2002
163   ||  Purpose : Validates the Foreign Keys for the table.
164   ||  Known limitations, enhancements or remarks :
165   ||  Change History :
166   ||  Who             When            What
167   ||  (reverse chronological order - newest change first)
168   */
169     CURSOR cur_rowid IS
170       SELECT   rowid
171       FROM     igs_pr_stdnt_pr_fnd
172       WHERE   ((course_cd = x_course_cd) AND
173                (person_id = x_person_id) AND
174                (spo_sequence_number = x_sequence_number));
175 
176     lv_rowid cur_rowid%RowType;
177 
178   BEGIN
179 
180     OPEN cur_rowid;
181     FETCH cur_rowid INTO lv_rowid;
182     IF (cur_rowid%FOUND) THEN
183       CLOSE cur_rowid;
184       fnd_message.set_name ('IGS', 'IGS_PR_PSEF_PRO_FK');
185       igs_ge_msg_stack.add;
186       app_exception.raise_exception;
187       RETURN;
188     END IF;
189     CLOSE cur_rowid;
190 
191   END get_fk_igs_pr_stdnt_pr_ou;
192 
193 
194   PROCEDURE get_fk_igf_aw_fund_cat (
195     x_fund_code IN VARCHAR2
196   ) AS
197   /*
198   ||  Created By : [email protected]
199   ||  Created On : 11-NOV-2002
200   ||  Purpose : Validates the Foreign Keys for the table.
201   ||  Known limitations, enhancements or remarks :
202   ||  Change History :
203   ||  Who             When            What
204   ||  (reverse chronological order - newest change first)
205   */
206     CURSOR cur_rowid IS
207       SELECT   rowid
208       FROM     igs_pr_stdnt_pr_fnd
209       WHERE   ((fund_code = x_fund_code));
210 
211     lv_rowid cur_rowid%RowType;
212 
213   BEGIN
214 
215     OPEN cur_rowid;
216     FETCH cur_rowid INTO lv_rowid;
217     IF (cur_rowid%FOUND) THEN
218       CLOSE cur_rowid;
219       fnd_message.set_name ('IGS', 'IGS_PR_PSEF_FCAT_FK');
220       igs_ge_msg_stack.add;
221       app_exception.raise_exception;
222       RETURN;
223     END IF;
224     CLOSE cur_rowid;
225 
226   END get_fk_igf_aw_fund_cat;
227 
228 
229   PROCEDURE before_dml (
230     p_action                            IN     VARCHAR2,
231     x_rowid                             IN     VARCHAR2,
232     x_person_id                         IN     NUMBER,
233     x_course_cd                         IN     VARCHAR2,
234     x_spo_sequence_number               IN     NUMBER,
235     x_fund_code                         IN     VARCHAR2,
236     x_creation_date                     IN     DATE,
237     x_created_by                        IN     NUMBER,
238     x_last_update_date                  IN     DATE,
239     x_last_updated_by                   IN     NUMBER,
240     x_last_update_login                 IN     NUMBER
241   ) AS
242   /*
243   ||  Created By : [email protected]
244   ||  Created On : 11-NOV-2002
245   ||  Purpose : Initialises the columns, Checks Constraints, Calls the
246   ||            Trigger Handlers for the table, before any DML operation.
247   ||  Known limitations, enhancements or remarks :
248   ||  Change History :
249   ||  Who             When            What
250   ||  (reverse chronological order - newest change first)
251   */
252   BEGIN
253 
254     set_column_values (
255       p_action,
256       x_rowid,
257       x_person_id,
258       x_course_cd,
259       x_spo_sequence_number,
260       x_fund_code,
261       x_creation_date,
262       x_created_by,
263       x_last_update_date,
264       x_last_updated_by,
265       x_last_update_login
266     );
267 
268     IF (p_action = 'INSERT') THEN
269       -- Call all the procedures related to Before Insert.
270       IF ( get_pk_for_validation(
271              new_references.person_id,
272              new_references.course_cd,
273              new_references.spo_sequence_number,
274              new_references.fund_code
275            )
276          ) THEN
277         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
278         igs_ge_msg_stack.add;
279         app_exception.raise_exception;
280       END IF;
281       check_parent_existance;
282     ELSIF (p_action = 'UPDATE') THEN
283       -- Call all the procedures related to Before Update.
284       check_parent_existance;
285     ELSIF (p_action = 'VALIDATE_INSERT') THEN
286       -- Call all the procedures related to Before Insert.
287       IF ( get_pk_for_validation (
288              new_references.person_id,
289              new_references.course_cd,
290              new_references.spo_sequence_number,
291              new_references.fund_code
292            )
293          ) THEN
294         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
295         igs_ge_msg_stack.add;
296         app_exception.raise_exception;
297       END IF;
298     END IF;
299 
300   END before_dml;
301 
302 
303   PROCEDURE insert_row (
304     x_rowid                             IN OUT NOCOPY VARCHAR2,
305     x_person_id                         IN     NUMBER,
306     x_course_cd                         IN     VARCHAR2,
307     x_spo_sequence_number               IN     NUMBER,
308     x_fund_code                         IN     VARCHAR2,
309     x_mode                              IN     VARCHAR2
310   ) AS
311   /*
312   ||  Created By : [email protected]
313   ||  Created On : 11-NOV-2002
314   ||  Purpose : Handles the INSERT DML logic for the table.
315   ||  Known limitations, enhancements or remarks :
316   ||  Change History :
317   ||  Who             When            What
318   ||  (reverse chronological order - newest change first)
319   */
320 
321     x_last_update_date           DATE;
322     x_last_updated_by            NUMBER;
323     x_last_update_login          NUMBER;
324 
325   BEGIN
326 
327     x_last_update_date := SYSDATE;
328     IF (x_mode = 'I') THEN
329       x_last_updated_by := 1;
330       x_last_update_login := 0;
331     ELSIF (X_MODE IN ('R', 'S')) THEN
332       x_last_updated_by := fnd_global.user_id;
333       IF (x_last_updated_by IS NULL) THEN
334         x_last_updated_by := -1;
335       END IF;
336       x_last_update_login := fnd_global.login_id;
337       IF (x_last_update_login IS NULL) THEN
338         x_last_update_login := -1;
339       END IF;
340     ELSE
341       fnd_message.set_name ('FND', 'SYSTEM-INVALID ARGS');
342       igs_ge_msg_stack.add;
343       app_exception.raise_exception;
344     END IF;
345 
346     before_dml(
347       p_action                            => 'INSERT',
348       x_rowid                             => x_rowid,
349       x_person_id                         => x_person_id,
350       x_course_cd                         => x_course_cd,
351       x_spo_sequence_number               => x_spo_sequence_number,
352       x_fund_code                         => x_fund_code,
353       x_creation_date                     => x_last_update_date,
354       x_created_by                        => x_last_updated_by,
355       x_last_update_date                  => x_last_update_date,
356       x_last_updated_by                   => x_last_updated_by,
357       x_last_update_login                 => x_last_update_login
358     );
359 
360     IF (x_mode = 'S') THEN
361     igs_sc_gen_001.set_ctx('R');
362   END IF;
363   INSERT INTO igs_pr_stdnt_pr_fnd (
364       person_id,
365       course_cd,
366       spo_sequence_number,
367       fund_code,
368       creation_date,
369       created_by,
370       last_update_date,
371       last_updated_by,
372       last_update_login
373     ) VALUES (
374       new_references.person_id,
375       new_references.course_cd,
376       new_references.spo_sequence_number,
377       new_references.fund_code,
378       x_last_update_date,
379       x_last_updated_by,
380       x_last_update_date,
381       x_last_updated_by,
382       x_last_update_login
383     ) RETURNING ROWID INTO x_rowid;
384  IF (x_mode = 'S') THEN
385     igs_sc_gen_001.unset_ctx('R');
386   END IF;
387 
388 EXCEPTION
389   WHEN OTHERS THEN
390     IF (SQLCODE IN (-28115, -28113, -28111)) THEN
391       fnd_message.set_name ('IGS', 'IGS_SC_POLICY_EXCEPTION');
392  IF (x_mode = 'S') THEN
393     igs_sc_gen_001.unset_ctx('R');
394   END IF;
395 
396       fnd_message.set_token ('ERR_CD', SQLCODE);
397       igs_ge_msg_stack.add;
398       igs_sc_gen_001.unset_ctx('R');
399       app_exception.raise_exception;
400     ELSE
401       igs_sc_gen_001.unset_ctx('R');
402       RAISE;
403     END IF;
404  END insert_row;
405 
406 
407   PROCEDURE lock_row (
408     x_rowid                             IN     VARCHAR2,
409     x_person_id                         IN     NUMBER,
410     x_course_cd                         IN     VARCHAR2,
411     x_spo_sequence_number               IN     NUMBER,
412     x_fund_code                         IN     VARCHAR2
413   ) AS
414   /*
415   ||  Created By : [email protected]
416   ||  Created On : 11-NOV-2002
417   ||  Purpose : Handles the LOCK mechanism for the table.
418   ||  Known limitations, enhancements or remarks :
419   ||  Change History :
420   ||  Who             When            What
421   ||  (reverse chronological order - newest change first)
422   */
423     CURSOR c1 IS
424       SELECT
425         rowid
426       FROM  igs_pr_stdnt_pr_fnd
427       WHERE rowid = x_rowid
428       FOR UPDATE NOWAIT;
429 
430     tlinfo c1%ROWTYPE;
431 
432   BEGIN
433 
434     OPEN c1;
435     FETCH c1 INTO tlinfo;
436     IF (c1%notfound) THEN
437       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
438       igs_ge_msg_stack.add;
439       CLOSE c1;
440       app_exception.raise_exception;
441       RETURN;
442     END IF;
443     CLOSE c1;
444 
445 
446     RETURN;
447 
448   END lock_row;
449 
450 
451   PROCEDURE delete_row (
452     x_rowid IN VARCHAR2,
453   x_mode IN VARCHAR2
454   ) AS
455   /*
456   ||  Created By : [email protected]
457   ||  Created On : 11-NOV-2002
458   ||  Purpose : Handles the DELETE DML logic for the table.
459   ||  Known limitations, enhancements or remarks :
460   ||  Change History :
461   ||  Who             When            What
462   ||  (reverse chronological order - newest change first)
463   */
464   BEGIN
465 
466     before_dml (
467       p_action => 'DELETE',
468       x_rowid => x_rowid
469     );
470 
471     IF (x_mode = 'S') THEN
472     igs_sc_gen_001.set_ctx('R');
473   END IF;
474   DELETE FROM igs_pr_stdnt_pr_fnd
475     WHERE rowid = x_rowid;
476 
477     IF (SQL%NOTFOUND) THEN
478      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
479      igs_ge_msg_stack.add;
480      igs_sc_gen_001.unset_ctx('R');
481      app_exception.raise_exception;
482  END IF;
483  IF (x_mode = 'S') THEN
484     igs_sc_gen_001.unset_ctx('R');
485   END IF;
486 
487 
488   END delete_row;
489 
490 
491 END igs_pr_stdnt_pr_fnd_pkg;