DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_FI_VAL_FAS

Source


1 PACKAGE BODY IGS_FI_VAL_FAS AS
2 /* $Header: IGSFI23B.pls 120.2 2006/02/23 21:33:05 skharida noship $ */
3 /* Who                 When                    What
4    skharida            09-feb-2006             Bug# 5018036 - SQL Tuning, changed to IGS_LOOKUPS_VAL instead to IGS_LOOKUPS_VIEW.
5    uudayapr            07-dec-2004             ENH# 3167098, Modified finp_val_fas_ass_ind.
6    shtatiko            24-DEC-2003             Enh# 3167098, Modified finp_val_fas_ass_ind.
7    uudayapr            12-dec-2003             Bug#3080983 Modified the cursor c_fadv in the Function
8                                                finp_val_fas_balance .
9    vvutukur            19-Dec-2002             Bug#2680885. Modified finp_val_fas_balance.
10    masehgal            17-Jan-2002             ENH # 2170429
11                                                Obsoletion of SPONSOR_CD related Parameters and Check from Function FINP_VAL_FAS_UPD
12   schodava         28-NOV-2001         Enh # 2122257 : Implements the CR for 'Fee Category Change'
13                  Change in function finp_val_fas_ass_ind
14    jbegum              26-Nov-2001             As part of bug #2040038
15                                                1)Replaced RAISE NO_DATA_FOUND in code with message IGS_FI_FEE_ASS_DAT
16                                                2)In the procedure finp_val_fas_upd TRUNC function was added in the IF condition
17                                                  checks being done on effective_dt and transaction_dt
18 */
19   --
20   -- Validate fee assessable indicator value.
21   FUNCTION finp_val_fas_ass_ind(
22   p_person_id IN NUMBER ,
23   p_course_cd IN VARCHAR2 ,
24   p_fee_cat IN VARCHAR2 ,
25   p_effective_dt IN DATE ,
26   p_transaction_type IN VARCHAR2 ,
27   p_fee_cal_type IN VARCHAR2 DEFAULT NULL,
28   p_fee_ci_sequence_number IN NUMBER DEFAULT NULL,
29   p_message_name OUT NOCOPY VARCHAR2 )
30   RETURN BOOLEAN AS
31   /*************************************************************
32   Created By :
33   Date Created By :
34   Purpose :
35   Know limitations, enhancements or remarks
36   Change History
37   Who             When            What
38   uudayapr        07-dec-2004     Enh# 3167098, Modified cursor c_sca_scas and added the logic for deriving the
39                                                 Load calendar type and sequence number.
40   shtatiko        24-DEC-2003     Enh# 3167098, Modified cursor c_sca_scas.
41   SCHODAVA    28-NOV-2001     Enh # 2122257
42         (SFCR015 : Change In Fee Category)
43         Changed the signature of this function.
44         Added params fee_cal_type and fee_ci_sequence_number
45   (reverse chronological order - newest change first)
46   ***************************************************************/
47     gv_other_detail    VARCHAR2(255);
48   BEGIN  --finp_val_fas_ass_ind
49     --validate IGS_FI_FEE_AS.course_cd has a course_attempt_status with a fee_ass_ind
50     --of 'Y'
51   DECLARE
52     v_system_generated_ind  IGS_LOOKUPS_VAL.system_generated_ind%TYPE;
53     v_fee_ass_ind    IGS_LOOKUPS_VAL.fee_ass_ind%TYPE;
54     v_course_attempt_status  IGS_LOOKUPS_VAL.lookup_code%TYPE;
55     -- added this variable for stroing the load calendar derived data.
56     l_v_load_cal_type  igs_fi_f_cat_ca_inst.fee_cal_type%TYPE;
57     l_n_load_ci_seq_number igs_fi_f_cat_ca_inst.fee_ci_sequence_number%TYPE;
58     CURSOR  c_strty IS
59       SELECT  strty.system_generated_ind
60       FROM  IGS_LOOKUPS_VAL strty
61       WHERE  strty.lookup_code = p_transaction_type AND
62         strty.lookup_type = 'TRANSACTION_TYPE';
63 
64         -- Enh# 3167098, Removed reference to igs_fi_f_cat_cal_rel and igs_fi_stdnt_ps_att_cat_v
65         -- Modified The Select  Clause Of The Cursor
66   CURSOR c_sca_scas IS
67     SELECT scas.fee_ass_ind,
68            std.course_attempt_status
69     FROM  igs_en_spa_terms   sca,
70           igs_en_stdnt_ps_att std,
71           igs_lookups_view  scas
72     WHERE sca.person_id      = p_person_id
73     AND sca.program_cd = p_course_cd
74     AND sca.term_cal_type = l_v_load_cal_type
75     AND sca.term_sequence_number = l_n_load_ci_seq_number
76     AND sca.person_id = std.person_id
77     AND sca.program_cd = std.course_cd
78     AND ((sca.fee_cat IS NULL AND p_fee_cat IS NULL ) OR ( sca.fee_cat = p_fee_cat))
79     AND scas.lookup_type = 'CRS_ATTEMPT_STATUS'
80     AND scas.lookup_code =  std.course_attempt_status;
81 
82     CURSOR c_scaehv IS
83       SELECT  scas.fee_ass_ind,
84         scaehv.course_attempt_status
85        FROM  IGS_AS_SCAH_EFFECTIVE_H_V   scaehv,
86           IGS_LOOKUPS_VIEW  scas
87        WHERE
88          scaehv.person_id    = p_person_id              AND
89         scaehv.course_cd    = p_course_cd              AND
90       ((scaehv.fee_cat    IS NULL                AND
91       p_fee_cat      IS NULL)              OR
92       (scaehv.fee_cat      = p_fee_cat))              AND
93       scas.lookup_type    = 'CRS_ATTEMPT_STATUS'            AND
94         TRUNC(p_effective_dt)    BETWEEN scaehv.effective_start_dt AND scaehv.effective_end_dt  AND
95         scas.lookup_code    = scaehv.course_attempt_status;
96 
97 
98   BEGIN
99     --Set the default message number
100     p_message_name := NULL;
101     --Validate parameters (all must have values to proceed with validation)
102     IF (p_person_id IS NULL OR
103         p_course_cd    IS NULL OR
104         p_fee_cat    IS NULL OR
105         p_effective_dt    IS NULL OR
106         p_transaction_type  IS NULL OR
107       p_fee_cal_type    IS NULL OR
108       p_fee_ci_sequence_number IS NULL) THEN
109       RETURN TRUE;
110     END IF;
111     OPEN c_strty;
112     FETCH c_strty INTO v_system_generated_ind;
113     CLOSE c_strty;
114     IF (v_system_generated_ind = 'N') THEN
115       -- Get student IGS_PS_COURSE attempt detail
116       IF TRUNC(p_effective_dt) >= TRUNC(SYSDATE) THEN
117       --derive the load calendar from the fee calendar data to be used in
118         IF NOT igs_fi_gen_001.finp_get_lfci_reln  ( p_cal_type              => p_fee_cal_type,
119                                                   p_ci_sequence_number     => p_fee_ci_sequence_number,
120                                                   p_cal_category           => 'FEE',
121                                                   p_ret_cal_type           => l_v_load_cal_type,
122                                                   p_ret_ci_sequence_number => l_n_load_ci_seq_number,
123                                                   p_message_name            =>p_message_name) THEN
124           RETURN FALSE;
125         END IF;
126        -- use current data
127         OPEN c_sca_scas;
128         FETCH c_sca_scas INTO   v_fee_ass_ind,
129               v_course_attempt_status;
130         IF (c_sca_scas%NOTFOUND) THEN
131           CLOSE c_sca_scas;
132           p_message_name := 'IGS_FI_FEE_ASS_DAT';
133           RETURN FALSE;
134         END IF;
135         CLOSE c_sca_scas;
136       ELSE -- look back into history
137         OPEN c_scaehv;
138         FETCH c_scaehv INTO   v_fee_ass_ind,
139               v_course_attempt_status;
140         IF (c_scaehv%NOTFOUND) THEN
141           CLOSE c_scaehv;
142           p_message_name := 'IGS_FI_FEE_ASS_DAT';
143           RETURN FALSE;
144         END IF;
145         CLOSE c_scaehv;
146       END IF;
147       -- Test student IGS_PS_COURSE attempt is fee assessible
148       IF v_fee_ass_ind = 'N' THEN
149         IF v_course_attempt_status <> 'UNCONFIRM' THEN
150           p_message_name := 'IGS_FI_STUD_PRGATTEM_STATUS_Y' ;
151           RETURN FALSE;
152         ELSE
153           p_message_name := 'IGS_FI_STUD_PRGATT_STATUS_Y' ;
154           RETURN TRUE;  -- warning only
155         END IF;
156       END IF;
157     END IF;
158     RETURN TRUE;
159   END;
160   END finp_val_fas_ass_ind;
161   --
162   -- Validate retrospective date of fee assessment period.
163   FUNCTION finp_val_fas_retro(
164   p_fee_type IN VARCHAR2 ,
165   p_fee_cal_type IN VARCHAR2 ,
166   p_fee_ci_sequence_number IN NUMBER ,
167   p_fee_cat IN VARCHAR2 ,
168   p_message_name OUT NOCOPY VARCHAR2 )
169   RETURN BOOLEAN AS
170     gv_other_detail    VARCHAR2(255);
171   BEGIN  --finp_val_fas_retro
172     --validate the current date against any retrospective assessment period
173     --when recording a manual fee assessment.
174     --Current date must be <= IGS_FI_F_CAT_FEE_LBL_V.retro_dt (if specified,
175     --may be null)
176   DECLARE
177     v_alias_val  IGS_CA_DA_INST_V.alias_val%TYPE;
178     CURSOR c_fcflv IS
179       SELECT  daiv.alias_val
180        FROM  IGS_FI_F_CAT_FEE_LBL_V fcflv,
181         IGS_CA_DA_INST_V daiv
182        WHERE
183          fcflv.fee_cal_type    = p_fee_cal_type      AND
184          fcflv.fee_ci_sequence_number   = p_fee_ci_sequence_number   AND
185          fcflv.fee_type       = p_fee_type       AND
186          fcflv.fee_cat       = p_fee_cat       AND
187          fcflv.retro_dt_alias     = daiv.dt_alias     AND
188          fcflv.retro_dai_sequence_number = daiv.sequence_number     AND
189          fcflv.fee_cal_type     = daiv.cal_type     AND
190          fcflv.fee_ci_sequence_number   = daiv.ci_sequence_number  AND
191         daiv.alias_val      < SYSDATE;
192   BEGIN
193     --Set the default message number
194     p_message_name := NULL;
195     --Validate parameters
196     IF (p_fee_type IS NULL OR
197         p_fee_cal_type     IS NULL OR
198         p_fee_ci_sequence_number IS NULL OR
199         p_fee_cat     IS NULL) THEN
200       RETURN TRUE;
201     END IF;
202     --If a record exists then daiv.alias_val > SYSDATE so set p_message_name
203     OPEN c_fcflv;
204     FETCH c_fcflv INTO v_alias_val;
205     IF (c_fcflv%FOUND) THEN
206       p_message_name := 'IGS_FI_RETRO_ASS_DATE';
207       CLOSE c_fcflv;
208       RETURN FALSE;
209     END IF;
210     CLOSE c_fcflv;
211     RETURN TRUE;
212   END;
213   END finp_val_fas_retro;
214   --
215   -- Validate IGS_FI_FEE_AS.SI_FI_S_TRN_TYPE for a manual assessment.
216   FUNCTION finp_val_fas_cat(
217   p_transaction_type IN VARCHAR2 ,
218   p_message_name OUT NOCOPY VARCHAR2 )
219   RETURN BOOLEAN AS
220     gv_other_detail    VARCHAR2(255);
221   BEGIN  --finp_val_fas_cat
222     --This module validates IGS_FI_FEE_AS.SI_FI_S_TRN_TYPE.
223     --SI_FI_S_TRN_TYPE.transaction_cat must equal 'DEBT' and
224     --s_tranaction_type.system_generated_ind must equal 'N'
225   DECLARE
226     v_transaction_cat  IGS_LOOKUPS_VAL.transaction_cat%TYPE;
227     v_sys_generated_ind  IGS_LOOKUPS_VAL.system_generated_ind%TYPE;
228     CURSOR c_strty IS
229       SELECT   strty.transaction_cat,
230         strty.system_generated_ind
231       FROM  IGS_LOOKUPS_VAL strty
232       WHERE  lookup_code = p_transaction_type AND
233         lookup_type = 'TRANSACTION_TYPE';
234   BEGIN
235     --- Set the default message number
236     p_message_name := NULL;
237     --validate parameter
238     IF (p_transaction_type IS NULL) THEN
239       RETURN TRUE;
240     END IF;
241     --Get the system transaction category and system generated indicator
242     --values for the tranaction_type. If not 'DEBT' and 'N' respectively,
243     --return error.
244     OPEN c_strty;
245     FETCH c_strty INTO v_transaction_cat,
246            v_sys_generated_ind;
247     CLOSE c_strty;
248     IF (v_transaction_cat <> 'DEBT') THEN
249       p_message_name := 'IGS_FI_TRANSTYPE_CAT_DEBT';
250       RETURN FALSE;
251     END IF;
252     IF (v_sys_generated_ind <> 'N') THEN
253       p_message_name := 'IGS_FI_TRANSTYPE_SYSIND_N';
254       RETURN FALSE;
255     END IF;
256     RETURN TRUE;
257   END;
258   END finp_val_fas_cat;
259   --
260   -- Check if contract fee assessment rate exists for the student.
261   FUNCTION finp_val_fas_cntrct(
262   p_person_id IN NUMBER ,
263   p_course_cd IN VARCHAR2 ,
264   p_fee_type IN VARCHAR2 ,
265   p_effective_dt IN DATE ,
266   p_message_name OUT NOCOPY VARCHAR2 )
267   RETURN BOOLEAN AS
268     gv_other_detail    VARCHAR2(255);
269   BEGIN  --finp_val_fas_cntrct
270     --This module validates if the student has a contract fee assessment rate
271     --when recording a manual fee assessment. If so issue a warning.
272   DECLARE
273     v_cfar_rec  CHAR;
274     CURSOR c_cfar IS
275       SELECT   'X'
276       FROM  IGS_FI_FEE_AS_RT cfar
277       WHERE  cfar.person_id  = p_person_id  AND
278         cfar.course_cd  = p_course_cd  AND
279         cfar.fee_type  = p_fee_type  AND
280         p_effective_dt  BETWEEN cfar.start_dt AND
281            NVL(cfar.end_dt, igs_ge_date.igsdate('9999/01/01'));
282   BEGIN
283     --- Set the default message number
284     p_message_name := NULL;
285     --validate parameters
286     IF (p_fee_type IS NULL  OR
287         p_course_cd  IS NULL  OR
288         p_fee_type   IS NULL  OR
289         p_effective_dt  IS NULL) THEN
290       RETURN TRUE;
291     END IF;
292     --Determine if a IGS_FI_FEE_AS_RT exists
293     OPEN c_cfar;
294     FETCH c_cfar INTO v_cfar_rec;
295     IF (c_cfar%FOUND) THEN
296       p_message_name := 'IGS_FI_STUD_ACTIVE_CONT_FEEAS';
297       CLOSE c_cfar;
298       RETURN FALSE;
299     END IF;
300     CLOSE c_cfar;
301     RETURN TRUE;
302   END;
303   END finp_val_fas_cntrct;
304   --
305   -- Validate that appropriate optional fields are entered for IGS_FI_FEE_AS.
306   FUNCTION finp_val_fas_create(
307   p_fee_type IN IGS_FI_FEE_TYPE_ALL.fee_type%TYPE ,
308   p_fee_cat IN IGS_FI_FEE_CAT_ALL.fee_cat%TYPE ,
309   p_course_cd IN IGS_PS_COURSE.course_cd%TYPE ,
310   p_message_name OUT NOCOPY VARCHAR2 )
311   RETURN BOOLEAN AS
312     gv_other_detail    VARCHAR2(255);
313   BEGIN  --finp_val_fas_create
314     --This module validates IGS_FI_FEE_AS.IGS_FI_FEE_TYPE with the fee category and
315     -- IGS_PS_COURSE code.
316     --If IGS_FI_FEE_TYPE.s_fee_trigger_cat = 'INSTITUTN',then fee category and
317     --course_cd cannot be specified in the IGS_FI_FEE_AS record. Otherwise they
318     --must be specified
319   DECLARE
320     v_fee_trigger_cat  IGS_FI_FEE_TYPE.s_fee_trigger_cat%TYPE;
321     CURSOR c_ft IS
322       SELECT   ft.s_fee_trigger_cat
323       FROM  IGS_FI_FEE_TYPE ft
324       WHERE  fee_type = p_fee_type;
325 
326     CURSOR c_fee_calc_mthd IS
327       SELECT fee_calc_mthd_code
328       FROM igs_fi_control;
329     l_v_fee_calc_mthd igs_fi_control.fee_calc_mthd_code%TYPE;
330 
331   BEGIN
332     --- Set the default message number
333     p_message_name := NULL;
334     --validate parameters
335     IF (p_fee_type IS NULL) THEN
336       RETURN TRUE;
337     END IF;
338     --Determine the s_fee_trigger_cat
339     OPEN c_ft;
340     FETCH c_ft INTO v_fee_trigger_cat;
341     IF (c_ft%NOTFOUND) THEN
342       CLOSE c_ft;
343       p_message_name := 'IGS_FI_FEE_ASS_DAT';
344             RETURN FALSE;
345     END IF;
346     CLOSE c_ft;
347 
348     OPEN c_fee_calc_mthd;
349     FETCH c_fee_calc_mthd INTO l_v_fee_calc_mthd;
350     CLOSE c_fee_calc_mthd;
351 
352     -- Enh# 3167098, In case of Primary Career, For Institution fee we store Fee category and Course Code (From Key Program).
353     IF (v_fee_trigger_cat = 'INSTITUTN' AND l_v_fee_calc_mthd <> 'PRIMARY_CAREER' AND
354         (p_fee_cat IS NOT NULL OR
355         p_course_cd IS NOT NULL)) THEN
356       p_message_name := 'IGS_FI_PRGCD_CAT_NULL';
357       RETURN FALSE;
358     END IF;
359     IF (v_fee_trigger_cat <> 'INSTITUTN' AND
360         (p_fee_cat IS NULL OR
361         p_course_cd IS NULL)) THEN
362       p_message_name := 'IGS_FI_PRGCD_CAT_INSTITUTN';
363       RETURN FALSE;
364     END IF;
365     RETURN TRUE;
366   END;
367   END finp_val_fas_create;
368   --
369   -- Ensure comment is recorded for a manual fee assessment.
370   FUNCTION finp_val_fas_com(
371   p_transaction_type IN VARCHAR2 ,
372   p_comments IN VARCHAR2 ,
373   p_message_name OUT NOCOPY VARCHAR2 )
374   RETURN BOOLEAN AS
375     gv_other_detail    VARCHAR2(255);
376   BEGIN  --finp_val_fas_com
380   DECLARE
377     --This module validates IGS_FI_FEE_AS.comments.
378     --IGS_FI_FEE_AS.comments cannot be NULL when a manual fee assessment record is
379     --created
381     v_transaction_cat  IGS_LOOKUPS_VAL.transaction_cat%TYPE;
382     v_sys_generated_ind  IGS_LOOKUPS_VAL.system_generated_ind%TYPE;
383     CURSOR c_strty IS
384       SELECT   strty.transaction_cat,
385         strty.system_generated_ind
386         FROM  IGS_LOOKUPS_VAL strty
387       WHERE  lookup_code = p_transaction_type AND
388 	lookup_type = 'TRANSACTION_TYPE';
389   BEGIN
390     --- Set the default message number
391     p_message_name := NULL;
392     --validate parameter
393     IF (p_transaction_type IS NULL) THEN
394       RETURN TRUE;
395     END IF;
396     --Get the system transaction category and system generated indicator
397     --values for the tranaction_type. If the values indicate a manual entry
398     --then verify that comments field is NOT NULL
399     OPEN c_strty;
400     FETCH c_strty INTO v_transaction_cat,
401            v_sys_generated_ind;
402     CLOSE c_strty;
403     IF (v_transaction_cat = 'DEBT' AND
404         v_sys_generated_ind = 'N') THEN
405       IF (p_comments IS NULL) THEN
406         p_message_name := 'IGS_GE_MANDATORY_FLD';
407         RETURN FALSE;
408       END IF;
409     END IF;
410     RETURN TRUE;
411   END;
412   END finp_val_fas_com;
413   --
414   -- Validate effective date of fee assessment.
415   FUNCTION finp_val_fas_eff_dt(
416   p_fee_type IN VARCHAR2 ,
417   p_fee_cal_type IN VARCHAR2 ,
418   p_fee_ci_sequence_number IN NUMBER ,
419   p_fee_cat IN VARCHAR2 ,
420   p_effective_dt IN DATE ,
421   p_s_transaction_type IN VARCHAR2 ,
422   p_message_name OUT NOCOPY VARCHAR2 )
423   RETURN BOOLEAN AS
424   gv_other_detail    VARCHAR2(255);
425   BEGIN  -- finp_val_fas_eff_dt
426     -- This module validates the effective_dt when recording a manual fee
427     -- assessment, effective_dt must be between IGS_FI_F_CAT_FEE_LBL_V.start_dt
428     -- and IGS_FI_F_CAT_FEE_LBL_V.end_dt.
429   DECLARE
430     v_start_dt    IGS_CA_DA_INST_V.alias_val%TYPE;
431     v_end_dt    IGS_CA_DA_INST_V.alias_val%TYPE;
432     v_transaction_cat   IGS_LOOKUPS_VAL.transaction_cat%TYPE;
433     CURSOR c_daiv_sd IS
434       SELECT  daiv.alias_val
435       FROM   IGS_FI_F_CAT_FEE_LBL_V  fcflv,
436         IGS_CA_DA_INST_V  daiv
437       WHERE  fcflv.fee_cal_type    = p_fee_cal_type    AND
438         fcflv.fee_ci_sequence_number  = p_fee_ci_sequence_number  AND
439         fcflv.fee_type      = p_fee_type      AND
440         fcflv.fee_cat    = nvl(p_fee_cat,fcflv.fee_cat)    AND
441         fcflv.start_dt_alias    = daiv.dt_alias      AND
442         fcflv.start_dai_sequence_number  = daiv.sequence_number    AND
443         fcflv.fee_cal_type    = daiv.cal_type      AND
444         fcflv.fee_ci_sequence_number  = daiv.ci_sequence_number;
445     CURSOR c_daiv_ed IS
446       SELECT  daiv.alias_val
447       FROM  IGS_FI_F_CAT_FEE_LBL_V  fcflv,
448         IGS_CA_DA_INST_V  daiv
449       WHERE  fcflv.fee_cal_type    = p_fee_cal_type    AND
450         fcflv.fee_ci_sequence_number  = p_fee_ci_sequence_number  AND
451         fcflv.fee_type      = p_fee_type      AND
452         fcflv.fee_cat    = nvl(p_fee_cat,fcflv.fee_cat)    AND
453         fcflv.end_dt_alias    = daiv.dt_alias      AND
454         fcflv.end_dai_sequence_number  = daiv.sequence_number    AND
455         fcflv.fee_cal_type    = daiv.cal_type      AND
456         fcflv.fee_ci_sequence_number  = daiv.ci_sequence_number;
457     CURSOR c_strty IS
458       SELECT strty.transaction_cat
459     FROM  IGS_LOOKUPS_VAL strty
460     WHERE  strty.lookup_code = p_s_transaction_type
461     AND      strty.lookup_type = 'TRANSACTION_TYPE';
462 
463   BEGIN
464     --- Set the default message number
465     p_message_name := NULL;
466     --- Check what transaction_type maps to: DEBT or PAYMENT
467     --- Payment is not subject to the validation.
468     OPEN c_strty;
469     FETCH c_strty INTO v_transaction_cat;
470     IF (c_strty%NOTFOUND) THEN
471       CLOSE c_strty;
472       p_message_name := 'IGS_FI_FEE_ASS_DAT';
473       RETURN FALSE;
474     END IF;
475     CLOSE c_strty;
476     IF v_transaction_cat = 'PAYMENT' THEN
477       RETURN TRUE;
478     END IF;
479     --validate parameters
480     IF (p_fee_type   IS NULL OR
481         p_fee_cal_type     IS NULL OR
482         p_fee_ci_sequence_number IS NULL OR
483         p_effective_dt     IS NULL) THEN
484       RETURN TRUE;
485     END IF;
486 
487     --Get the start date value of the liability
488     OPEN c_daiv_sd;
489     FETCH c_daiv_sd INTO v_start_dt;
490     IF (c_daiv_sd%NOTFOUND) THEN
491       CLOSE c_daiv_sd;
492       p_message_name := 'IGS_FI_FEE_ASS_DAT';
493       RETURN FALSE;
494     END IF;
495     CLOSE c_daiv_sd;
496     --Get the end date value of the liability
497     OPEN c_daiv_ed;
498     FETCH c_daiv_ed INTO v_end_dt;
499     IF (c_daiv_ed%NOTFOUND) THEN
500       CLOSE c_daiv_ed;
501       p_message_name := 'IGS_FI_FEE_ASS_DAT';
502       RETURN FALSE;
503     END IF;
504     CLOSE c_daiv_ed;
505     --Check that effective date is between the start and end dates
506     IF (TRUNC(p_effective_dt) NOT BETWEEN  TRUNC(v_start_dt) AND
507               TRUNC(v_end_dt)) THEN
508       p_message_name := 'IGS_FI_EFFDT_NOTBE_OUTSIDE';
509       RETURN FALSE;
510     END IF;
511     RETURN TRUE;
512   END;
513   END finp_val_fas_eff_dt;
514   --
515   -- Validate effect of transaction amount on student's balance.
516   FUNCTION finp_val_fas_balance(
517   p_person_id IN NUMBER ,
518   p_fee_type IN VARCHAR2 ,
519   p_fee_cal_type IN VARCHAR2 ,
520   p_fee_ci_sequence_number IN NUMBER ,
521   p_fee_cat IN VARCHAR2 ,
522   p_course_cd IN VARCHAR2 ,
523   p_transaction_amount IN NUMBER ,
524   p_message_name OUT NOCOPY VARCHAR2 )
525   RETURN BOOLEAN AS
526   /*----------------------------------------------------------------------------
527   ||  Created By :
528   ||  Created On :
529   ||  Purpose :
530   ||  Known limitations, enhancements or remarks :
531   ||  Change History :
532   ||  Who             When            What
533   ||  (reverse chronological order - newest change first)
534       uudayapr         12-12-2003   bug#3080983 made the modification to v_total_amount_due
535                                     declartion as number instead
536                                     IGS_FI_FEE_ASS_DEBT_V.local_assessment_amount%TYPE
537                                     and the Cursor c_fadv to point to the table
538                                     IGS_FI_FEE_AS instead IGS_FI_FEE_ASS_DEBT_V view.
539 
540   ||  vvutukur        19-Dec-2002  Bug#2680885.Commented out cursor c_fpv which selects from igs_fi_fee_pay_v, which
541   ||                               is to be dropped.Instead, cursor c_fpv is redefined selecting 0 from dual.
542   ||                               The datatype for v_total_payments variable is also changed to NUMBER after removing
543   ||                               the reference to igs_fi_fee_pay_v.
544   ----------------------------------------------------------------------------*/
545 
546     gv_other_detail  VARCHAR2(255);
547 
548   BEGIN  --finp_val_fas_balance
549     --This module validates that the current manual fee assessment will not
550     --cause the students balance for the liability to be less than zero
551   DECLARE
552     v_total_amount_due  NUMBER;
553     v_total_payments   NUMBER;
554     --Modified the cursor to fetch data from the Base table instead of the view IGS_FI_FEE_ASS_DEBT_V
555     CURSOR c_fadv IS
556       SELECT  SUM(fadv.transaction_amount)
557         FROM   IGS_FI_FEE_AS fadv
558         WHERE  fadv.person_id      = p_person_id
559         AND    fadv.fee_type      = p_fee_type
560         AND    fadv.fee_cal_type    = p_fee_cal_type
561         AND    fadv.fee_ci_sequence_number  = p_fee_ci_sequence_number
562         AND   ((fadv.fee_cat = p_fee_cat) OR(fadv.fee_cat IS NULL AND p_fee_cat IS NULL))
563         AND   ((fadv.course_cd = p_course_cd)  OR (fadv.course_cd IS NULL AND p_course_cd IS NULL))
564         AND   fadv.logical_delete_dt IS NULL;
565 
566         CURSOR c_fpv IS
567           SELECT 0
568           FROM   dual;
569 
570 /*    CURSOR c_fpv IS
571       SELECT  SUM(fpv.payment_amount)
572       FROM  IGS_FI_FEE_PAY_V  fpv
573       WHERE  fpv.person_id      = p_person_id      AND
574         fpv.fee_type      = p_fee_type      AND
575         fpv.fee_cal_type    = p_fee_cal_type    AND
576         fpv.fee_ci_sequence_number  = p_fee_ci_sequence_number  AND
577         NVL(fpv.fee_cat, 'NULL')  = NVL(p_fee_cat, 'NULL')  AND
578         NVL(fpv.course_cd,'NULL')   = NVL(p_course_cd,'NULL');*/
579   BEGIN
580     --- Set the default message number
581     p_message_name := NULL;
582     --validate parameters
583     IF (p_person_id IS NULL  OR
584         p_fee_type      IS NULL OR
585         p_fee_cal_type     IS NULL OR
586         p_fee_ci_sequence_number IS NULL) THEN
587       RETURN TRUE;
588     END IF;
589     --Determine the total amount owing
590     OPEN c_fadv;
591     FETCH c_fadv INTO v_total_amount_due;
592     CLOSE c_fadv;
593     --Determine the total payments
594     OPEN c_fpv;
598     --from the total owing to get the current balance).
595     FETCH c_fpv INTO v_total_payments;
596     CLOSE c_fpv;
597     --Check if the amount owing will be less than zero.(subtract the total payments
599     IF ((NVL(v_total_amount_due, 0) - NVL(v_total_payments, 0))
600       + NVL(p_transaction_amount, 0) < 0) THEN
601       p_message_name := 'IGS_FI_STUDBAL_LT_ZERO';
602       RETURN FALSE;
603     END IF;
604     RETURN TRUE;
605   END;
606   END finp_val_fas_balance;
607   --
608   -- Validate update to columns in the IGS_FI_FEE_AS table.
609 
610 -- Change History
611 -- Who              When           What
612 -- masehgal         17-Jan-2002    ENH # 2170429
613 --                                 Obsoletion of SPONSOR_CD related Parameters from Function FINP_VAL_FAS_UPD
614 
615   FUNCTION finp_val_fas_upd(
616   p_new_person_id  IGS_FI_FEE_AS_ALL.person_id%TYPE ,
617   p_old_person_id  IGS_FI_FEE_AS_ALL.person_id%TYPE ,
618   p_new_transaction_id  IGS_FI_FEE_AS_ALL.transaction_id%TYPE ,
619   p_old_transaction_id  IGS_FI_FEE_AS_ALL.transaction_id%TYPE ,
620   p_new_fee_type  IGS_FI_FEE_AS_ALL.fee_type%TYPE ,
621   p_old_fee_type  IGS_FI_FEE_AS_ALL.fee_type%TYPE ,
622   p_new_fee_cal_type  IGS_FI_FEE_AS_ALL.fee_cal_type%TYPE ,
623   p_old_fee_cal_type  IGS_FI_FEE_AS_ALL.fee_cal_type%TYPE ,
624   p_new_fee_ci_seq_num  IGS_FI_FEE_AS_ALL.fee_ci_sequence_number%TYPE ,
625   p_old_fee_ci_seq_num  IGS_FI_FEE_AS_ALL.fee_ci_sequence_number%TYPE ,
626   p_new_fee_cat  IGS_FI_FEE_AS_ALL.fee_cat%TYPE ,
627   p_old_fee_cat  IGS_FI_FEE_AS_ALL.fee_cat%TYPE ,
628   p_new_transaction_type  IGS_FI_FEE_AS_ALL.s_transaction_type%TYPE ,
629   p_old_transaction_type  IGS_FI_FEE_AS_ALL.s_transaction_type%TYPE ,
630   p_new_transaction_dt  IGS_FI_FEE_AS_ALL.transaction_dt%TYPE ,
631   p_old_transaction_dt  IGS_FI_FEE_AS_ALL.transaction_dt%TYPE ,
632   p_new_transaction_amount  IGS_FI_FEE_AS_ALL.transaction_amount%TYPE ,
633   p_old_transaction_amount  IGS_FI_FEE_AS_ALL.transaction_amount%TYPE ,
634   p_new_currency_cd  IGS_FI_FEE_AS_ALL.currency_cd%TYPE ,
635   p_old_currency_cd  IGS_FI_FEE_AS_ALL.currency_cd%TYPE ,
636   p_new_exchange_rate  IGS_FI_FEE_AS_ALL.exchange_rate%TYPE ,
637   p_old_exchange_rate  IGS_FI_FEE_AS_ALL.exchange_rate%TYPE ,
638   p_new_chg_elements  IGS_FI_FEE_AS_ALL.chg_elements%TYPE ,
639   p_old_chg_elements  IGS_FI_FEE_AS_ALL.chg_elements%TYPE ,
640   p_new_effective_dt  IGS_FI_FEE_AS_ALL.effective_dt%TYPE ,
641   p_old_effective_dt  IGS_FI_FEE_AS_ALL.effective_dt%TYPE ,
642   p_new_course_cd  IGS_FI_FEE_AS_ALL.course_cd%TYPE ,
643   p_old_course_cd  IGS_FI_FEE_AS_ALL.course_cd%TYPE ,
644   p_new_notification_dt  IGS_FI_FEE_AS_ALL.notification_dt%TYPE ,
645   p_old_notification_dt  IGS_FI_FEE_AS_ALL.notification_dt%TYPE ,
646   p_new_logical_delete_dt  IGS_FI_FEE_AS_ALL.logical_delete_dt%TYPE ,
647   p_old_logical_delete_dt  IGS_FI_FEE_AS_ALL.logical_delete_dt%TYPE ,
648   p_message_name OUT NOCOPY VARCHAR2 )
649   RETURN BOOLEAN AS
650     gv_other_detail    VARCHAR2(255);
651   BEGIN  -- finp_val_fas_upd
652     -- This routine validates fields being updated in the IGS_FI_FEE_AS
653     -- table may be changed.
654   BEGIN
655     p_message_name := NULL;
656     -- 1. Check for allowable changes
657 
658 --Change History
659 --Who          When              What
660 --masehgal     17-Jan-2002       Obsoletion of SPONSOR_CD related Check from Function FINP_VAL_FAS_UPD
661 
662     IF p_new_person_id <> p_old_person_id THEN
663       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
664       RETURN FALSE;
665     END IF;
666     IF p_new_transaction_id <> p_old_transaction_id THEN
667       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
668       RETURN FALSE;
669     END IF;
670     IF p_new_fee_type <> p_old_fee_type THEN
671       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
672       RETURN FALSE;
673     END IF;
674     IF p_new_fee_cal_type <> p_old_fee_cal_type THEN
675       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
676       RETURN FALSE;
677     END IF;
678     IF p_new_fee_ci_seq_num <> p_old_fee_ci_seq_num THEN
679       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
680       RETURN FALSE;
681     END IF;
682     IF NVL(p_new_fee_cat,'NULL') <> NVL(p_old_fee_cat,'NULL') THEN
683       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
684       RETURN FALSE;
685     END IF;
686     IF p_new_transaction_type <> p_old_transaction_type THEN
687       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
688       RETURN FALSE;
689     END IF;
690     IF trunc(p_new_transaction_dt) <> trunc(p_old_transaction_dt) THEN
691       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
692       RETURN FALSE;
693     END IF;
694     IF p_new_transaction_amount <> p_old_transaction_amount THEN
695       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
696       RETURN FALSE;
697     END IF;
698     IF p_new_currency_cd <> p_old_currency_cd THEN
699       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
700       RETURN FALSE;
701     END IF;
702     IF NVL(trunc(p_new_effective_dt),igs_ge_date.igsdate('1900/01/01'))
703         <> NVL(trunc(p_old_effective_dt),igs_ge_date.igsdate('1900/01/01')) THEN
704       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
705       RETURN FALSE;
706     END IF;
707     IF p_new_course_cd <> p_old_course_cd THEN
708       p_message_name := 'IGS_FI_DATA_CANNOT_BE_UPDATED';
709       RETURN FALSE;
710     END IF;
711     IF NVL(p_new_logical_delete_dt,igs_ge_date.igsdate('1900/01/01'))
712         <> NVL(p_old_logical_delete_dt,igs_ge_date.igsdate('1900/01/01')) AND
713         p_old_logical_delete_dt IS NOT NULL THEN
714       p_message_name := 'IGS_FI_LOGDEL_DATE_NOT_CLEAR';
715       RETURN FALSE;
716     END IF;
717     -- 2. No error
718     RETURN TRUE;
719   END;
720   END finp_val_fas_upd;
721 END IGS_FI_VAL_FAS;