DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_FI_GEN_001

Source


1 PACKAGE BODY igs_fi_gen_001 AS
2 /* $Header: IGSFI01B.pls 120.3 2006/02/23 20:50:48 skharida noship $ */
3 
4 /******************************************************************
5   Change History
6   Who                 When                 What
7   skharida      23-Feb-2006      After Code Review: Modified finpl_val_trig_group() Bug# 5018036,
8   skharida      15-Feb-2006      Modified finpl_val_trig_group() Bug# 5018036, (version 12.1)
9   uudyapr       06-Jan-2004      ENh#3167098 Added the function CHECK_STDNT_PRG_ATT_LIABLE .
10   uudayapr      12-dec-2003      Bug#3080983 Modified the Functions finp_get_hecs_fee  and finp_get_tuition_fee
11   uudayapr      16-oct-2003      Enh#3117341 audit and special fees built. Modification done in
12                                  function finp_get_fee_trigger.
13   vvutukur      15-Jul-2003      Enh#3038511.FICR106 Build. Modified procedure finp_get_total_planned_credits.
14   vvutukur       1-Dec-2002      Enh#2584986.Modifications done in function finp_get_currency,finp_get_fps_start_dt.
15   SMVK           13-Sep-2002     Bug#2531390. Restored the functions finp_get_fps_end_dt,FINP_GET_FDF_END_DT,
16                                  FINP_GET_FDF_ST_DT and finp_get_fps_start_dt which are obsolete as the part of same bug.
17                                  The functions have been modified to return null to make the views which are using to compile
18   vvutukur       02-Sep-2002     Bug#2531390.Removed function finp_get_fps_end_dt,as this is not used
19                                  anywhere in the system.(resulted in as impact of modification done
20                                  in IGSFI31B.pls as part of this bug 2531390.
21   smvk           28-Aug-2002     Bug#2531390.Removed the functions FINP_GET_FDF_END_DT, FINP_GET_FDF_ST_DT (SFCR005_Cleanup_Build)
22   vvutukur       26-Aug-2002     Bug#2531390.Removed the function finp_get_fps_start_dt.
23   jbegum         26-Aug-2002     As part of Enh Bug#2531390 the procedure finp_get_overdue_dtl was removed.
24   rnirwani       06-May-02       Bug# 2345570
25                                  When selecting from view IGS_FI_FEE_TRG_GRP_V, replacing column trigger_type with trigger_type_code.
26                                  This change has been made in the procedure finpl_val_trig_group
27   rnirwani       25-Apr-02       Obsoleting the procedure finp_get_dj_totals,
28                                    since this is not being used.
29                                  Bug# 2329407
30 
31    SYkrishn      02-APR-2002     Bug 2293676
32                                  Added functions finp_get_planned_credits_ind and
33                                  finp_get_total_planned_credits
34 
35   schodava         21-Jan-2002         Enh # 2187247
36                                  Added functions FINP_GET_LFCI_RELN
37                                  and FINP_CHK_LFCI_RELN
38                                  Modified functions finp_get_hecs_amt_pd,
39                                  finp_get_hecs_fee, finp_get_tuition_fee
40 
41 
42 ******************************************************************/
43 FUNCTION check_stdnt_prg_att_liable(
44             p_n_person_id IN PLS_INTEGER,
45             p_v_course_cd IN VARCHAR2,
46             p_n_course_version IN PLS_INTEGER,
47             p_v_fee_cat IN VARCHAR2,
48             p_v_fee_type IN VARCHAR2,
49             p_v_s_fee_trigger_cat IN VARCHAR2,
50             p_v_fee_cal_type IN VARCHAR2,
51             p_n_fee_ci_seq_number IN PLS_INTEGER,
52             p_n_adm_appl_number IN NUMBER,
53             p_v_adm_nom_course_cd IN VARCHAR2,
54             p_n_adm_seq_number IN NUMBER,
55             p_d_commencement_dt IN DATE,
56             p_d_disc_dt IN DATE,
57             p_v_cal_type IN VARCHAR2,
58             p_v_location_cd IN VARCHAR2,
59             p_v_attendance_mode IN VARCHAR2,
60             p_v_attendance_type IN VARCHAR2
61 ) RETURN VARCHAR2 AS
62 /*----------------------------------------------------------------------------
63 ||  Created By : UMESH UDAYAPRAKASH
64 ||  Created On : 06-JAN-2004
65 ||  Purpose :Function To Identify Whther A Student Program Attempt Is Liable
66 ||           For A Fee Category Fee Liability
67 ||  Known limitations, enhancements or remarks :
68 ||  Change History :
69 ||  Who             When            What
70 ||  (reverse chronological order - newest change first)
71 ----------------------------------------------------------------------------*/
72 CURSOR c_fcfldate IS
73   SELECT TRUNC(da1.alias_val) start_dt_alias_val,
74          TRUNC(da2.alias_val) end_dt_alias_val
75   FROM igs_fi_f_cat_fee_lbl_v fcflv,
76        igs_ca_da_inst_v da1,
77        igs_ca_da_inst_v da2
78   WHERE da1.dt_alias = fcflv.start_dt_alias
79   AND da1.sequence_number = fcflv.start_dai_sequence_number
80   AND da1.cal_type = fcflv.fee_cal_type
81   AND da1.ci_sequence_number = fcflv.fee_ci_sequence_number
82   AND da1.alias_val IS NOT NULL
83   AND da2.dt_alias = fcflv.end_dt_alias
84   AND da2.sequence_number = fcflv.end_dai_sequence_number
85   AND da2.cal_type = fcflv.fee_cal_type
86   AND da2.ci_sequence_number = fcflv.fee_ci_sequence_number
87   AND da2.alias_val IS NOT NULL
88   AND fcflv.fee_cat = p_v_fee_cat
89   AND fcflv.fee_type = p_v_fee_type
90   AND fcflv.fee_cal_type = p_v_fee_cal_type
91   AND fcflv.fee_ci_sequence_number = p_n_fee_ci_seq_number;
92 
93 l_c_fcfldate c_fcfldate%ROWTYPE;
94 l_d_start_dt DATE;
95 l_d_end_dt DATE;
96 l_d_commencement_dt DATE;
97 l_v_trigger_fired igs_fi_fee_type_all.s_fee_trigger_cat%TYPE;
98 BEGIN
99   IF (p_n_person_id IS NULL OR
100       p_v_course_cd IS NULL OR
101       p_n_course_version IS NULL OR
102       p_v_fee_cat IS NULL OR
103       p_v_fee_type IS NULL OR
104       p_v_s_fee_trigger_cat IS NULL OR
105       p_v_fee_cal_type IS NULL  OR
106       p_n_fee_ci_seq_number IS NULL OR
107       p_v_cal_type IS NULL OR
108       p_v_location_cd IS NULL OR
109       p_v_attendance_mode IS NULL OR
110       p_v_attendance_type IS NULL )THEN
111 
112     RETURN 'FALSE'; -- If Mandatory Parameter Are Not Provided Return False
113   ELSE
114     OPEN c_fcfldate;
115     FETCH c_fcfldate INTO l_c_fcfldate;
116     --If No Matching FCFL records are found then return from the Function.
117     IF (c_fcfldate%NOTFOUND) THEN
118       CLOSE c_fcfldate;
119       RETURN 'FALSE';
120     END IF;
121     CLOSE c_fcfldate;
122     l_d_commencement_dt := p_d_commencement_dt;
123     IF p_d_commencement_dt IS NULL THEN
124        --Derive the Commencement Date if commencement date Parameter is Not Provided.
125         l_d_commencement_dt := igs_en_gen_002.enrp_get_acad_comm( p_acad_cal_type             => NULL,
126                                                                   p_acad_ci_sequence_number   => NULL,
127                                                                   p_person_id                 => p_n_person_id,
128                                                                   p_course_cd                 => p_v_course_cd,
129                                                                   p_adm_admission_appl_number => p_n_adm_appl_number,
130                                                                   p_adm_nominated_course_cd   => p_v_adm_nom_course_cd,
131                                                                   p_adm_sequence_number       => p_n_adm_seq_number,
132                                                                   p_chk_adm_prpsd_comm_ind    => 'Y');
133        IF l_d_commencement_dt IS NULL THEN
134          RETURN 'FALSE';
135        END IF;
136     END IF; --End Of Commencement Date Is Null Check
137 
138     IF l_d_commencement_dt > SYSDATE THEN
139      l_d_commencement_dt := TRUNC(l_d_commencement_dt);
140      IF NOT ((l_d_commencement_dt >= l_c_fcfldate.start_dt_alias_val) AND (l_d_commencement_dt <= l_c_fcfldate.end_dt_alias_val)) THEN
141       RETURN 'FALSE';
142      END IF;
143     END IF; --END OF SYSDATE COMPARISION.
144 
145     IF p_d_disc_dt IS NOT NULL THEN
146       IF NOT ((TRUNC(p_d_disc_dt) >= l_c_fcfldate.start_dt_alias_val) AND (TRUNC(p_d_disc_dt) <= l_c_fcfldate.end_dt_alias_val)) THEN
147         RETURN 'FALSE';
148       END IF;
149     END IF; -- END OF p_d_disc_dt CHECK.
150     IF p_v_s_fee_trigger_cat = 'INSTITUTN' THEN
151       RETURN 'TRUE'; -- If the FeeTrigger Category is Institution then Return True.
152     ELSE
153      --Call finp_get_fee_trigger function with the Input PArameter it will Return the Trigger Fired.
154      l_v_trigger_fired :=  igs_fi_gen_001.finp_get_fee_trigger(  p_fee_cat                    => p_v_fee_cat,
155                                                                      p_fee_cal_type           => p_v_fee_cal_type,
156                                                                      p_fee_ci_sequence_number => p_n_fee_ci_seq_number,
157                                                                      p_fee_type               => p_v_fee_type,
158                                                                      p_s_fee_trigger_cat      => p_v_s_fee_trigger_cat,
159                                                                      p_person_id              => p_n_person_id,
160                                                                      p_course_cd              => p_v_course_cd,
161                                                                      p_version_number         => p_n_course_version,
162                                                                      p_cal_type               => p_v_cal_type,
163                                                                      p_location_cd            => p_v_location_cd,
164                                                                      p_attendance_mode        => p_v_attendance_mode,
165                                                                      p_attendance_type        => p_v_attendance_type);
166 
167      --If No Trigger Has Been Fired then Return False
168      IF l_v_trigger_fired  IS NULL THEN
169        RETURN 'FALSE';
170      ELSE
171        RETURN 'TRUE';
172      END IF;
173     END IF;
174   END IF; -- END OF THE PARAMETER VALIDATION.
175 END check_stdnt_prg_att_liable;
176 
177 
178 FUNCTION finp_get_currency(
179   p_fee_cal_type IN IGS_CA_TYPE.CAL_TYPE%TYPE ,
180   p_fee_ci_sequence_num IN igs_fi_f_typ_ca_inst.fee_ci_sequence_number%TYPE ,
181   p_s_relation_type IN VARCHAR2,
182   p_fee_type IN IGS_FI_FEE_TYPE_ALL.FEE_TYPE%TYPE ,
183   p_fee_category IN IGS_FI_FEE_CAT_ALL.FEE_CAT%TYPE )
184 RETURN VARCHAR2 AS
185 /*----------------------------------------------------------------------------
186 ||  Created By :
187 ||  Created On :
188 ||  Purpose :
189 ||  Known limitations, enhancements or remarks :
190 ||  Change History :
191 ||  Who             When            What
192 ||  (reverse chronological order - newest change first)
193 || vvutukur       1-Dec-2002 Enh#2584986.Removed the references to igs_fi_cur. Instead referenced the currency
194 ||                           that is set up in System Options Form.Also removed the references to igs_fi_fee_pay_schd
195 ||                           as the same had been obsoleted.
196 ----------------------------------------------------------------------------*/
197 
198 BEGIN
199 DECLARE
200         --Cursor to fetch the currency code that is setup in System Options Form.
201         CURSOR cur_ctrl  IS
202         SELECT currency_cd
203         FROM   igs_fi_control;
204 
205         --Cursor to fetch the currency code value for a fee category
206         CURSOR c_fc (cp_fee_cat  IGS_FI_FEE_CAT.FEE_CAT%TYPE) IS
207                 SELECT        currency_cd
208                 FROM        IGS_FI_FEE_CAT fc
209                 WHERE        FEE_CAT = cp_fee_cat;
210         -- this cursor finds the relation type value for a fee ass rate
211         CURSOR c_far (        cp_fee_type          IGS_FI_FEE_AS_RATE.FEE_TYPE%TYPE,
212                         cp_fee_cal_type        IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
213                         cp_fee_ci_seq_num
214                                         IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
215                         cp_fee_cat  IGS_FI_FEE_CAT.FEE_CAT%TYPE) IS
216                 SELECT DISTINCT
217                         s_relation_type
218                 FROM        IGS_FI_FEE_AS_RATE
219                 WHERE        FEE_TYPE = cp_fee_type AND
220                         fee_cal_type = cp_fee_cal_type AND
221                         fee_ci_sequence_number = cp_fee_ci_seq_num AND
222                         NVL(FEE_CAT, cp_fee_cat) = cp_fee_cat;
223 
224 v_currency_cd                  igs_fi_control.currency_cd%TYPE;
225 v_s_relation_type        IGS_FI_FEE_AS_RATE.s_relation_type%TYPE;
226 l_ctrl_currency         igs_fi_control.currency_cd%TYPE;
227 
228 BEGIN
229   OPEN cur_ctrl;
230   FETCH cur_ctrl INTO l_ctrl_currency;
231   CLOSE cur_ctrl;
232 
233         -- Determine where to source the currency code
234         IF NVL(p_s_relation_type, 'NULL') <> 'NULL' THEN
235                 IF p_s_relation_type = 'FTCI' THEN
236                  --Return the currency code value that is set up in System Options Form.
237                         RETURN l_ctrl_currency;
238                 ELSE
239                         IF NVL(p_fee_category, 'NULL') <> 'NULL' THEN
240                                 -- get fee category currency.
241                                 OPEN c_fc (p_fee_category);
242                                 FETCH c_fc INTO v_currency_cd;
243                                 CLOSE c_fc;
244                                 IF v_currency_cd IS NULL THEN
245                                 --Return the currency code value that is set up in System Options Form.
246                                   RETURN l_ctrl_currency;
247                                 END IF;
248                                 RETURN v_currency_cd;
249                         ELSE
250                           --Return the currency code value that is set up in System Options Form.
251                           RETURN l_ctrl_currency;
252                         END IF;
253                 END IF;
254         ELSE
255                 IF NVL(p_fee_cal_type, 'NULL') <> 'NULL' AND
256                         NVL(p_fee_ci_sequence_num, 0) <> 0 AND
257                         NVL(p_fee_type, 'NULL') <> 'NULL' AND
258                         NVL(p_fee_category, 'NULL') <> 'NULL' THEN
259                         OPEN c_far (        p_fee_type,
260                                         p_fee_cal_type,
261                                         p_fee_ci_sequence_num,
262                                         p_fee_category);
263                         FETCH c_far INTO v_s_relation_type;
264                         CLOSE c_far;
265                         IF v_s_relation_type = 'FTCI' THEN
266                           --Return the currency code value that is set up in System Options Form.
267                           RETURN l_ctrl_currency;
268                         ELSE
269                                 -- get fee category currency.
270                                 OPEN c_fc (p_fee_category);
271                                 FETCH c_fc INTO v_currency_cd;
272                                 CLOSE c_fc;
273                                 IF v_currency_cd IS NULL THEN
274                                   --Return the currency code value that is set up in System Options Form.
275                                   RETURN l_ctrl_currency;
276                                 END IF;
277                                 RETURN v_currency_cd;
278                         END IF;
279                 ELSE
280                         IF NVL(p_fee_category, 'NULL') <> 'NULL' THEN
281                                 -- get fee category currency.
282                                 OPEN c_fc (p_fee_category);
283                                 FETCH c_fc INTO v_currency_cd;
284                                 CLOSE c_fc;
285                                 IF v_currency_cd IS NULL THEN
286                                   --Return the currency code value that is set up in System Options Form.
287                                   RETURN l_ctrl_currency;
288                                 END IF;
289                                 RETURN v_currency_cd;
290                         ELSE
291                           --Return the currency code value that is set up in System Options Form.
292                           RETURN l_ctrl_currency;
293                         END IF;
294                 END IF;
295         END IF;
296 END;
297 END finp_get_currency;
298 --
299 --
300 FUNCTION finp_get_fas_man_ind(
301   p_person_id IN NUMBER ,
302   p_fee_type IN VARCHAR2 ,
303   p_fee_cal_type IN VARCHAR2 ,
304   p_fee_ci_sequence_number IN NUMBER ,
305   p_fee_cat IN VARCHAR2 ,
306   p_course_cd IN IGS_PS_COURSE.course_cd%TYPE ,
307   p_transaction_cat IN VARCHAR2 )
308 RETURN VARCHAR2 AS
309 
310 BEGIN
311 DECLARE
312         CURSOR c_fee_ass (cp_person_id                        IGS_FI_FEE_AS.person_id%TYPE,
313                         cp_fee_type                        IGS_FI_FEE_AS.FEE_TYPE%TYPE,
314                         cp_fee_cal_type                        IGS_FI_FEE_AS.fee_cal_type%TYPE,
315                         cp_fee_ci_sequence_number        IGS_FI_FEE_AS.fee_ci_sequence_number%TYPE,
316                         cp_fee_cat                        IGS_FI_FEE_AS.FEE_CAT%TYPE,
317                         cp_course_cd                        IGS_FI_FEE_AS.course_cd%TYPE,
318                         cp_transaction_cat                IGS_LOOKUPS_view.transaction_cat%TYPE) IS
319                 SELECT        fas.s_transaction_type
320                 FROM        IGS_FI_FEE_AS fas,
321                         IGS_LOOKUPS_view        strty
322                 WHERE        fas.person_id = cp_person_id AND
323                         fas.fee_type = cp_fee_type AND
324                         fas.fee_cal_type = cp_fee_cal_type AND
325                         NVL(fas.FEE_CAT, ' ') = NVL(cp_fee_cat, ' ') AND
326                         NVL(fas.course_cd, ' ') = NVL(cp_course_cd, ' ') AND
327                         fas.logical_delete_dt IS NULL AND
328                         fas.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
329                         strty.lookup_code = fas.s_transaction_type AND
330                         strty.lookup_type = 'TRANSACTION_TYPE' AND
331                         strty.transaction_cat = cp_transaction_cat AND
332                         strty.system_generated_ind = 'N';
333         v_transaction_type        IGS_FI_FEE_AS.S_TRANSACTION_TYPE%TYPE;
334         BEGIN
335                 -- attempt to find manual entry transactions
336                 OPEN        c_fee_ass(p_person_id,
337                                 p_fee_type,
338                                 p_fee_cal_type,
339                                 p_fee_ci_sequence_number,
340                                 p_fee_cat,
341                                 p_course_cd,
342                                 p_transaction_cat);
343                 LOOP
344                         FETCH        c_fee_ass        INTO        v_transaction_type;
345                         IF (c_fee_ass%NOTFOUND) THEN
346                                 CLOSE c_fee_ass;
347                                 RETURN 'N';
348                         ELSE
349                                 CLOSE c_fee_ass;
350                                 RETURN 'Y';
351                         END IF;
352                 END LOOP;
353         END;
354 END finp_get_fas_man_ind;
355 --
356 FUNCTION finp_get_fcfl_dai(
357   p_dt_alias_column_name IN VARCHAR2 ,
358   p_dai_seq_num_column_name IN VARCHAR2 ,
359   p_get_column_name IN VARCHAR2 ,
360   p_fee_cat IN IGS_FI_F_CAT_FEE_LBL_ALL.FEE_CAT%TYPE ,
361   p_fee_cal_type IN IGS_FI_F_CAT_FEE_LBL_ALL.fee_cal_type%TYPE ,
362   p_fee_ci_sequence_number IN IGS_FI_F_CAT_FEE_LBL_ALL.fee_ci_sequence_number%TYPE ,
363   p_fee_type IN IGS_FI_F_CAT_FEE_LBL_ALL.FEE_TYPE%TYPE )
364 RETURN VARCHAR2 AS
365 
366 BEGIN
367 DECLARE
368         -- cursor to get dt alias's for the fee type calendar instance
369         CURSOR c_ftci_dai (cp_dt_alias_column_name                user_tab_columns.column_name%TYPE,
370                         cp_dai_seq_num_column_name        user_tab_columns.column_name%TYPE,
371                         cp_fee_cal_type                        IGS_FI_F_CAT_FEE_LBL.fee_cal_type%TYPE ,
372                         cp_fee_ci_sequence_number        IGS_FI_F_CAT_FEE_LBL.fee_ci_sequence_number%TYPE,
373                           cp_fee_type                        IGS_FI_F_CAT_FEE_LBL.FEE_TYPE%TYPE ) IS
374                 SELECT        DECODE(cp_dt_alias_column_name,
375                                         'START_DT_ALIAS', ftci.start_dt_alias,
376                                         'END_DT_ALIAS', ftci.end_dt_alias,
377                                         'RETRO_DT_ALIAS', ftci.retro_dt_alias),
378                         DECODE(cp_dai_seq_num_column_name,
379                                         'START_DAI_SEQUENCE_NUMBER', ftci.start_dai_sequence_number,
380                                         'END_DAI_SEQUENCE_NUMBER', ftci.end_dai_sequence_number,
381                                         'RETRO_DAI_SEQUENCE_NUMBER', ftci.retro_dai_sequence_number)
382                 FROM        IGS_FI_F_TYP_CA_INST        ftci
383                 WHERE        ftci.FEE_TYPE = cp_fee_type AND
384                         ftci.fee_cal_type = cp_fee_cal_type AND
385                         ftci.fee_ci_sequence_number = cp_fee_ci_sequence_number;
386         -- cursor to get dt alias's for the fee category calendar instance
387         CURSOR c_fcci_dai (cp_dt_alias_column_name                user_tab_columns.column_name%TYPE,
388                         cp_dai_seq_num_column_name        user_tab_columns.column_name%TYPE,
389                         cp_fee_cat                         IGS_FI_F_CAT_FEE_LBL.FEE_CAT%TYPE ,
390                         cp_fee_cal_type                        IGS_FI_F_CAT_FEE_LBL.fee_cal_type%TYPE ,
391                         cp_fee_ci_sequence_number
392                                 IGS_FI_F_CAT_FEE_LBL.fee_ci_sequence_number%TYPE) IS
393                 SELECT        DECODE(cp_dt_alias_column_name,
394                                         'START_DT_ALIAS', fcci.start_dt_alias,
395                                         'END_DT_ALIAS', fcci.end_dt_alias,
396                                         'RETRO_DT_ALIAS', fcci.retro_dt_alias),
397                         DECODE(cp_dai_seq_num_column_name,
398                                         'START_DAI_SEQUENCE_NUMBER', fcci.start_dai_sequence_number,
399                                         'END_DAI_SEQUENCE_NUMBER', fcci.end_dai_sequence_number,
400                                         'RETRO_DAI_SEQUENCE_NUMBER', fcci.retro_dai_sequence_number)
401                 FROM        IGS_FI_F_CAT_CA_INST        fcci
402                 WHERE        fcci.FEE_CAT = cp_fee_cat AND
403                         fcci.fee_cal_type = cp_fee_cal_type AND
404                         fcci.fee_ci_sequence_number = cp_fee_ci_sequence_number;
405         v_ftci_alias_value        IGS_CA_DA_INST_V.alias_val%TYPE;
406         v_ftci_dt_alias                IGS_CA_DA.DT_ALIAS%TYPE;
407         v_ftci_dai_seq_num        IGS_CA_DA_INST.sequence_number%TYPE;
408         v_fcci_alias_value        IGS_CA_DA_INST_V.alias_val%TYPE;
409         v_fcci_dt_alias                IGS_CA_DA.DT_ALIAS%TYPE;
410         v_fcci_dai_seq_num        IGS_CA_DA_INST.sequence_number%TYPE;
411         BEGIN
412                 -- get the required dt alias from the fee type calendar instance
413                 OPEN        c_ftci_dai (p_dt_alias_column_name,
414                                 p_dai_seq_num_column_name,
415                                 p_fee_cal_type,
416                                 p_fee_ci_sequence_number,
417                                 p_fee_type);
418                 FETCH        c_ftci_dai         INTO        v_ftci_dt_alias,
419                                                 v_ftci_dai_seq_num;
420                 CLOSE c_ftci_dai;
421                 IF v_ftci_dt_alias IS NOT NULL THEN
422                 v_ftci_alias_value := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(
423                                                 v_ftci_dt_alias,
424                                                 v_ftci_dai_seq_num,
425                                                 p_fee_cal_type,
426                                                 p_fee_ci_sequence_number);
427                 ELSE
428                         v_ftci_alias_value := NULL;
429                 END IF;
430                 -- get the required dt alias from the fee category calendar instance
431                 OPEN        c_fcci_dai (p_dt_alias_column_name,
432                                 p_dai_seq_num_column_name,
433                                 p_fee_cat,
434                                 p_fee_cal_type,
435                                 p_fee_ci_sequence_number);
436                 FETCH        c_fcci_dai         INTO        v_fcci_dt_alias,
437                                                 v_fcci_dai_seq_num;
438                 CLOSE c_fcci_dai;
439                 IF v_fcci_dt_alias IS NOT NULL THEN
440                         v_fcci_alias_value := IGS_CA_GEN_001.CALP_GET_ALIAS_VAL(v_fcci_dt_alias,
441                                                         v_fcci_dai_seq_num,
442                                                         p_fee_cal_type,
443                                                         p_fee_ci_sequence_number);
444                 ELSE
445                         v_ftci_alias_value := NULL;
446                 END IF;
447                 IF p_dt_alias_column_name = 'START_DT_ALIAS' THEN
448                         -- return the latest start dt alias detail
449                         IF v_ftci_alias_value > v_fcci_alias_value THEN
450                                   IF p_get_column_name = p_dt_alias_column_name THEN
451                                         RETURN v_ftci_dt_alias;
452                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
453                                         RETURN TO_CHAR(v_ftci_dai_seq_num);
454                                 END IF;
455                         ELSE
456                                 IF p_get_column_name = p_dt_alias_column_name THEN
457                                         RETURN v_fcci_dt_alias;
458                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
459                                         RETURN TO_CHAR(v_fcci_dai_seq_num);
460                                 END IF;
461                         END IF;
462                 ELSIF p_dt_alias_column_name = 'END_DT_ALIAS' THEN
463                         -- return the earlist end dt alias detail
464                         IF v_ftci_alias_value < v_fcci_alias_value THEN
465                                   IF p_get_column_name = p_dt_alias_column_name THEN
466                                         RETURN v_ftci_dt_alias;
467                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
468                                         RETURN TO_CHAR(v_ftci_dai_seq_num);
469                                 END IF;
470                         ELSE
471                                 IF p_get_column_name = p_dt_alias_column_name THEN
472                                         RETURN v_fcci_dt_alias;
473                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
474                                         RETURN TO_CHAR(v_fcci_dai_seq_num);
475                                 END IF;
476                         END IF;
477                 ELSIF p_dt_alias_column_name = 'RETRO_DT_ALIAS' THEN
478                         -- return the earliest retro dt alias detail defined
479                         IF v_ftci_alias_value IS NULL AND
480                            v_fcci_alias_value IS NULL THEN
481                                 RETURN NULL;
482                         END IF;
483                         IF NVL(v_ftci_alias_value, v_fcci_alias_value) <
484                                         NVL(v_fcci_alias_value, v_ftci_alias_value) THEN
485                                   IF p_get_column_name = p_dt_alias_column_name THEN
486                                         RETURN NVL(v_ftci_dt_alias, v_fcci_dt_alias);
487                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
488                                         RETURN TO_CHAR(NVL(v_ftci_dai_seq_num, v_fcci_dai_seq_num));
489                                 END IF;
490                         ELSE
491                                 IF p_get_column_name = p_dt_alias_column_name THEN
492                                         RETURN NVL(v_fcci_dt_alias, v_ftci_dt_alias);
493                                 ELSIF p_get_column_name = p_dai_seq_num_column_name THEN
494                                         RETURN TO_CHAR(NVL(v_fcci_dai_seq_num, v_ftci_dai_seq_num));
495                                 END IF;
496                         END IF;
497                 END IF;
498                 RETURN NULL;
499         END;
500 END finp_get_fcfl_dai;
501 --
502 FUNCTION finp_get_fdf_end_dt(
503   p_fee_type IN VARCHAR2 ,
504   p_fee_cal_type IN VARCHAR2 ,
505   p_fee_ci_sequence_number IN NUMBER ,
506   p_override_formula IN NUMBER ,
507   p_fee_cat IN VARCHAR2 )
508 RETURN DATE AS
509 
510 BEGIN
511  return NULL;
512 END finp_get_fdf_end_dt;
513 
514 --
515 FUNCTION finp_get_fdf_st_dt(
516   p_fee_type IN VARCHAR2 ,
517   p_fee_cal_type IN VARCHAR2 ,
518   p_fee_ci_sequence_number IN NUMBER ,
519   p_override_formula IN NUMBER ,
520   p_fee_cat IN VARCHAR2 )
521 RETURN DATE AS
522 
523 BEGIN
524  return NULL;
525 END finp_get_fdf_st_dt;
526 --
527 FUNCTION finp_get_fee_trigger(
528   p_fee_cat IN IGS_FI_F_CAT_CA_INST.FEE_CAT%TYPE ,
529   p_fee_cal_type IN IGS_FI_F_CAT_CA_INST.fee_cal_type%TYPE ,
530   p_fee_ci_sequence_number IN IGS_FI_F_CAT_CA_INST.fee_ci_sequence_number%TYPE ,
531   p_fee_type IN IGS_FI_F_CAT_FEE_LBL_ALL.FEE_TYPE%TYPE ,
532   p_s_fee_trigger_cat IN IGS_FI_FEE_TYPE_ALL.s_fee_trigger_cat%TYPE ,
533   p_person_id IN IGS_EN_STDNT_PS_ATT_ALL.person_id%TYPE ,
534   p_course_cd IN IGS_EN_STDNT_PS_ATT_ALL.course_cd%TYPE ,
535   p_version_number IN IGS_EN_STDNT_PS_ATT_ALL.version_number%TYPE ,
536   p_cal_type IN IGS_EN_STDNT_PS_ATT_ALL.CAL_TYPE%TYPE ,
537   p_location_cd IN IGS_EN_STDNT_PS_ATT_ALL.location_cd%TYPE ,
538   p_attendance_mode IN IGS_EN_STDNT_PS_ATT_ALL.ATTENDANCE_MODE%TYPE ,
539   p_attendance_type IN IGS_EN_STDNT_PS_ATT_ALL.ATTENDANCE_TYPE%TYPE )
540 RETURN VARCHAR2 AS
541 
542 BEGIN
543         DECLARE
544                 CURSOR c_ft IS
545                         SELECT        ft.s_fee_trigger_cat
546                         FROM        IGS_FI_FEE_TYPE        ft
547                         WHERE        ft.FEE_TYPE = p_fee_type;
548                 CURSOR c_ctft IS
549                         SELECT        ctft.COURSE_TYPE
550                         FROM        IGS_PS_TYPE_FEE_TRG        ctft,
551                                 IGS_PS_VER                cv
552                         WHERE        ctft.FEE_CAT = p_fee_cat AND
553                                 ctft.fee_cal_type = p_fee_cal_type AND
554                                 ctft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
555                                 ctft.FEE_TYPE = p_fee_type AND
556                                 cv.course_cd = p_course_cd AND
557                                 cv.version_number = p_version_number AND
558                                 cv.COURSE_TYPE = ctft.COURSE_TYPE AND
559                                 ctft.logical_delete_dt IS NULL;
560                 CURSOR c_cgft IS
561                         SELECT        cgft.course_group_cd
562                         FROM        IGS_PS_GRP_FEE_TRG        cgft,
563                                 IGS_PS_GRP_MBR        cgm
564                         WHERE        cgft.FEE_CAT = p_fee_cat AND
565                                 cgft.fee_cal_type = p_fee_cal_type AND
566                                 cgft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
567                                 cgft.FEE_TYPE = p_fee_type AND
568                                 cgm.course_cd = p_course_cd AND
569                                 cgm.version_number = p_version_number AND
570                                 cgm.course_group_cd = cgft.course_group_cd AND
571                                 cgft.logical_delete_dt IS NULL;
572                 CURSOR c_cft IS
573                         SELECT        cft.fee_trigger_group_number
574                         FROM        IGS_PS_FEE_TRG                cft
575                         WHERE        cft.FEE_CAT = p_fee_cat AND
576                                 cft.fee_cal_type = p_fee_cal_type AND
577                                 cft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
578                                 cft.FEE_TYPE = p_fee_type AND
579                                 cft.course_cd = p_course_cd AND
580                                 (cft.version_number IS NULL OR
581                                 cft.version_number = p_version_number) AND
582                                 p_cal_type LIKE NVL(cft.CAL_TYPE, '%') AND
583                                 p_location_cd LIKE NVL(cft.location_cd, '%') AND
584                                 p_attendance_mode LIKE NVL(cft.ATTENDANCE_MODE, '%') AND
585                                 p_attendance_type LIKE NVL(cft.ATTENDANCE_TYPE, '%') AND
586                                 cft.logical_delete_dt IS NULL;
587                 CURSOR c_uft        IS
588                         SELECT        uft.unit_cd,
589                                 uft.version_number,
590                                 uft.CAL_TYPE,
591                                 uft.ci_sequence_number,
592                                 uft.location_cd,
593                                 uft.UNIT_CLASS,
594                                 uft.fee_trigger_group_number
595                         FROM        IGS_FI_UNIT_FEE_TRG                uft
596                         WHERE        uft.FEE_CAT = p_fee_cat AND
597                                 uft.fee_cal_type = p_fee_cal_type AND
598                                 uft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
599                                 uft.FEE_TYPE = p_fee_type AND
600                                 uft.logical_delete_dt IS NULL;
601                 CURSOR c_sua        (cp_unit_cd        IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
602                                 cp_version_number
603                                                 IGS_EN_SU_ATTEMPT.version_number%TYPE,
604                                 cp_cal_type        IGS_EN_SU_ATTEMPT.CAL_TYPE%TYPE,
605                                 cp_ci_sequence_number
606                                                 IGS_EN_SU_ATTEMPT.ci_sequence_number%TYPE,
607                                 cp_location_cd        IGS_EN_SU_ATTEMPT.location_cd%TYPE,
608                                 cp_unit_class        IGS_EN_SU_ATTEMPT.UNIT_CLASS%TYPE) IS
609                         SELECT        'X'
610                         FROM        IGS_EN_SU_ATTEMPT        sua,
611                                 IGS_LOOKUPS_view        suas
612                         WHERE        sua.person_id = p_person_id AND
613                                 sua.course_cd = p_course_cd AND
614                                 sua.unit_cd = cp_unit_cd AND
615                                 (cp_version_number IS NULL OR
616                                 sua.version_number = cp_version_number) AND
617                                 (cp_cal_type IS NULL OR
618                                 sua.CAL_TYPE = cp_cal_type) AND
619                                 (cp_ci_sequence_number IS NULL OR
620                                 sua.ci_sequence_number = cp_ci_sequence_number) AND
621                                 (cp_location_cd IS NULL OR
622                                 sua.location_cd = cp_location_cd) AND
623                                 (cp_unit_class IS NULL OR
624                                 sua.UNIT_CLASS = cp_unit_class) AND
625                                 suas.lookup_code = sua.unit_attempt_status AND
626                                 suas.lookup_type = 'UNIT_ATTEMPT_STATUS' AND
627                                 suas.fee_ass_ind = 'Y';
628                 CURSOR c_usft        IS
629                         SELECT        usft.unit_set_cd,
630                                 usft.version_number,
631                                 usft.fee_trigger_group_number
632                         FROM        IGS_EN_UNITSETFEETRG                usft
633                         WHERE        usft.FEE_CAT = p_fee_cat AND
634                                 usft.fee_cal_type = p_fee_cal_type AND
635                                 usft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
636                                 usft.FEE_TYPE = p_fee_type AND
637                                 usft.logical_delete_dt IS NULL;
638                 CURSOR c_susa        (cp_unit_set_cd                IGS_AS_SU_SETATMPT.unit_set_cd%TYPE,
639                                 cp_version_number        IGS_AS_SU_SETATMPT.us_version_number%TYPE) IS
640                         SELECT        'X'
641                         FROM        IGS_AS_SU_SETATMPT        susa
642                         WHERE        susa.person_id = p_person_id AND
643                                 susa.course_cd = p_course_cd AND
644                                 susa.unit_set_cd = cp_unit_set_cd AND
645                                 susa.us_version_number = cp_version_number AND
646                                 susa.student_confirmed_ind = 'Y' AND
647                                 (susa.selection_dt IS NOT NULL AND
648                                 TRUNC(SYSDATE) >= TRUNC(susa.selection_dt)) AND
649                                 (susa.end_dt IS NULL OR
650                                 TRUNC(SYSDATE) <= TRUNC(susa.end_dt)) AND
651                                 (susa.rqrmnts_complete_dt IS NULL OR
652                                 TRUNC(SYSDATE) <= TRUNC(susa.rqrmnts_complete_dt));
653                 v_s_fee_trigger_cat        IGS_FI_FEE_TYPE.s_fee_trigger_cat%TYPE;
654                 v_check                        CHAR(1);
655 --------------------------------------------------------------------------------
656         FUNCTION finpl_val_trig_group (p_fee_trigger_group_number
657                                 IGS_FI_FEE_TRG_GRP.fee_trigger_group_number%TYPE)
658         RETURN BOOLEAN AS
659         BEGIN
660                 -- validate the fee trigger group members match the student
661         DECLARE
662                 CURSOR c_ftgv_course   IS
663                         SELECT          lkp.lookup_code trigger_type_code,
664                                 cft.course_cd code,
665                                 cft.version_number
666                         FROM            IGS_PS_FEE_TRG  cft,
667                                 IGS_PS_VER  crv,
668                                 IGS_LOOKUP_VALUES lkp
669                         WHERE           cft.FEE_CAT = p_fee_cat AND
670                                 cft.fee_cal_type = p_fee_cal_type AND
671                                 cft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
672                                 cft.FEE_TYPE = p_fee_type AND
673                                 cft.fee_trigger_group_number = p_fee_trigger_group_number AND
674                                 lkp.lookup_type = 'IGS_FI_TRIGGER_GROUP' AND
675                                 lkp.lookup_code = 'COURSE' AND
676                                 cft.fee_trigger_group_number IS NOT NULL AND
677                                 cft.logical_delete_dt IS NULL AND
678                                 cft.course_cd = crv.course_cd AND
679                                 (cft.version_number = crv.version_number OR
680                                 (cft.version_number IS NULL AND
681                                 crv.version_number = ( SELECT  MAX(crv2.version_number)
682                                                        FROM IGS_PS_VER crv2
683                                                        WHERE   crv2.course_cd = crv.course_cd)));
684                 CURSOR c_ftgv_unit   IS
685                         SELECT          lkp.lookup_code trigger_type_code,
686                                 uft.unit_cd code,
687                                 uft.version_number
688                         FROM            IGS_FI_UNIT_FEE_TRG     uft,
689                                 IGS_PS_UNIT_VER         uv,
690                                 IGS_LOOKUP_VALUES       lkp
691                         WHERE           uft.FEE_CAT = p_fee_cat AND
692                                 uft.fee_cal_type = p_fee_cal_type AND
693                                 uft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
694                                 uft.FEE_TYPE = p_fee_type AND
695                                 uft.fee_trigger_group_number = p_fee_trigger_group_number AND
696                                 lkp.lookup_type = 'IGS_FI_TRIGGER_GROUP' AND
697                                 lkp.lookup_code = 'UNIT' AND
698                                 uft.fee_trigger_group_number IS NOT NULL AND
699                                 uft.logical_delete_dt IS NULL AND
700                                 uft.unit_cd = uv.unit_cd AND
701                                 (uft.version_number = uv.version_number OR
702                                 (uft.version_number IS NULL AND
703                                 uv.version_number = (   SELECT  MAX(uv2.version_number)
704                                                         FROM    IGS_PS_UNIT_VER uv2
705                                                         WHERE   uv2.unit_cd = uv.unit_cd)));
706                 CURSOR c_ftgv_unitset   IS
707                         SELECT          usft.unit_set_cd code,   usft.version_number,
708                                 lkp.lookup_code trigger_type_code
709                         FROM            IGS_EN_UNITSETFEETRG    usft,
710                                 IGS_EN_UNIT_SET         us,
711                                 IGS_LOOKUP_VALUES       lkp
712                         WHERE           usft.FEE_CAT = p_fee_cat AND
713                                 usft.fee_cal_type = p_fee_cal_type AND
714                                 usft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
715                                 usft.FEE_TYPE = p_fee_type AND
716                                 usft.fee_trigger_group_number = p_fee_trigger_group_number AND
717                                 lkp.lookup_type = 'IGS_FI_TRIGGER_GROUP' AND
718                                 lkp.lookup_code = 'UNITSET' AND
719                                 usft.fee_trigger_group_number IS NOT NULL AND
720                                 usft.logical_delete_dt IS NULL AND
721                                 usft.unit_set_cd = us.unit_set_cd AND
722                                 usft.version_number = us.version_number;
723 
724                 CURSOR c_ftg_uft        (
725                                         cp_unit_cd        IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
726                                         cp_version_number
727                                                         IGS_EN_SU_ATTEMPT.version_number%TYPE)IS
728                         SELECT        uft.unit_cd,
729                                 uft.version_number,
730                                 uft.CAL_TYPE,
731                                 uft.ci_sequence_number,
732                                 uft.location_cd,
733                                 uft.UNIT_CLASS,
734                                 uft.fee_trigger_group_number
735                         FROM        IGS_FI_UNIT_FEE_TRG                uft
736                         WHERE        uft.FEE_CAT = p_fee_cat AND
737                                 uft.fee_cal_type = p_fee_cal_type AND
738                                 uft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
739                                 uft.FEE_TYPE = p_fee_type AND
740                                 uft.unit_cd = cp_unit_cd AND
741                                 (uft.version_number IS NULL OR
742                                 uft.version_number = cp_version_number) AND
743                                 uft.logical_delete_dt IS NULL;
744                 CURSOR c_ftg_usft        (
745                                         cp_unit_set_cd
746                                                 IGS_AS_SU_SETATMPT.unit_set_cd%TYPE,
747                                         cp_version_number
748                                                 IGS_AS_SU_SETATMPT.us_version_number%TYPE) IS
749                         SELECT        usft.unit_set_cd,
750                                 usft.version_number,
751                                 usft.fee_trigger_group_number
752                         FROM        IGS_EN_UNITSETFEETRG                usft
753                         WHERE        usft.FEE_CAT = p_fee_cat AND
754                                 usft.fee_cal_type = p_fee_cal_type AND
755                                 usft.fee_ci_sequence_number = p_fee_ci_sequence_number AND
756                                 usft.FEE_TYPE = p_fee_type AND
757                                 usft.unit_set_cd = cp_unit_set_cd AND
758                                 usft.version_number = cp_version_number AND
759                                 usft.logical_delete_dt IS NULL;
760                 v_trigger_group_fired        BOOLEAN;
761         BEGIN
762                 -- check the fee trigger group members
763                 v_trigger_group_fired := TRUE;
764                 FOR v_ftgv_rec IN c_ftgv_course LOOP
765                 -- check for matching student IGS_PS_COURSE attempt
766                         IF (v_ftgv_rec.code <> p_course_cd OR
767                                 NVL(v_ftgv_rec.version_number, p_version_number) <>
768                                                                 p_version_number) THEN
769                                 v_trigger_group_fired := FALSE;
770                                 RETURN v_trigger_group_fired;
771                         END IF;
772                 END LOOP;
773                 FOR v_ftgv_rec IN c_ftgv_unit LOOP
774                         FOR v_ftg_uft_rec IN c_ftg_uft (   v_ftgv_rec.code,
775                                                            v_ftgv_rec.version_number) LOOP
776                         -- check for matching student IGS_PS_UNIT attempt
777                                 OPEN c_sua (        v_ftg_uft_rec.unit_cd,
778                                                         v_ftg_uft_rec.version_number,
779                                                         v_ftg_uft_rec.CAL_TYPE,
780                                                         v_ftg_uft_rec.ci_sequence_number,
781                                                         v_ftg_uft_rec.location_cd,
782                                                         v_ftg_uft_rec.UNIT_CLASS);
783                                 FETCH c_sua INTO v_check;
784                                 IF (c_sua%NOTFOUND) THEN
785                                         CLOSE c_sua;
786                                         v_trigger_group_fired := FALSE;
787                                         RETURN v_trigger_group_fired;
788                                 END IF;
789                                 CLOSE c_sua;
790                         END LOOP;
791                 END LOOP;
792                 FOR v_ftgv_rec IN c_ftgv_unitset LOOP
793                         FOR v_ftg_usft_rec IN c_ftg_usft (   v_ftgv_rec.code,
794                                                              v_ftgv_rec.version_number) LOOP
795                         -- check for matching student IGS_PS_UNIT set attempt
796                                 OPEN c_susa (        v_ftg_usft_rec.unit_set_cd,
797                                                      v_ftg_usft_rec.version_number);
798                                 FETCH c_susa INTO v_check;
799                                 IF (c_susa%NOTFOUND) THEN
800                                         CLOSE c_susa;
801                                         v_trigger_group_fired := FALSE;
802                                         RETURN v_trigger_group_fired;
803                                 END IF;
804                                 CLOSE c_susa;
805                         END LOOP;
806                 END LOOP;
807                 RETURN v_trigger_group_fired;
808         END;
809         END finpl_val_trig_group;
810 --------------------------------------------------------------------------------
811         BEGIN        -- finp_get_fee_trigger
812                 -- This routine checks the students enrolment details to test
813                 -- for matching a fee trigger.
814                 IF p_s_fee_trigger_cat IS NULL THEN
815                         OPEN        c_ft;
816                         FETCH        c_ft        INTO        v_s_fee_trigger_cat;
817                         CLOSE        c_ft;
818                 ELSE
819                         v_s_fee_trigger_cat := p_s_fee_trigger_cat;
820                 END IF;
821                 -- added AUDIT and SPECIAL In the If condition.
822                 IF (v_s_fee_trigger_cat = 'INSTITUTN') THEN
823                         -- IGS_GE_NOTE, IGS_OR_INSTITUTION fees have no triggers - they always apply.
824                         -- Trigger Fired
825                         RETURN 'INSTITUTN';
826                 ELSIF (v_s_fee_trigger_cat = 'COURSE') THEN
827                         FOR v_ctft_rec IN c_ctft LOOP
828                                 -- Trigger Fired
829                                 RETURN 'CTFT';
830                         END LOOP;
831                         FOR v_cgft_rec IN c_cgft LOOP
832                                 -- Trigger Fired
833                                 RETURN 'CGFT';
834                         END LOOP;
835                         FOR v_cft_rec IN c_cft LOOP
836                                 -- Trigger Fired
837                                 RETURN 'CFT';
838                         END LOOP;
839                     -- added AUDIT In the If condition.
840                 ELSIF (v_s_fee_trigger_cat IN ('UNIT','AUDIT')) THEN
841                         FOR v_uft_rec IN c_uft LOOP
842                                 OPEN c_sua (    v_uft_rec.unit_cd,
843                                                 v_uft_rec.version_number,
844                                                 v_uft_rec.CAL_TYPE,
845                                                 v_uft_rec.ci_sequence_number,
846                                                 v_uft_rec.location_cd,
847                                                 v_uft_rec.UNIT_CLASS);
848                                 FETCH c_sua INTO v_check;
849                                 IF (c_sua%FOUND) THEN
850                                         CLOSE c_sua;
851                                         -- Trigger Fired
852                                         IF(v_s_fee_trigger_cat = 'UNIT') THEN
853                                           RETURN 'UFT';
854                                         ELSE
855                                           RETURN 'AUDIT';
856                                         END IF;
857                                 END IF;
858                                 CLOSE c_sua;
859                         END LOOP;
860                 ELSIF (v_s_fee_trigger_cat = 'UNITSET') THEN
861                         FOR v_usft_rec IN c_usft LOOP
862                                 OPEN c_susa (        v_usft_rec.unit_set_cd,
863                                                 v_usft_rec.version_number);
864                                 FETCH c_susa INTO v_check;
865                                 IF (c_susa%FOUND) THEN
866                                         CLOSE c_susa;
867                                         -- Trigger Fired
868                                         RETURN 'USFT';
869                                 END IF;
870                                 CLOSE c_susa;
871                         END LOOP;
872                 ELSIF (v_s_fee_trigger_cat = 'COMPOSITE') THEN
873                         -- check IGS_PS_COURSE fee triggers
874                         FOR v_cft_rec IN c_cft LOOP
875                                 IF (v_cft_rec.fee_trigger_group_number IS NULL) THEN
876                                         -- Trigger Fired
877                                         RETURN 'CFT';
878                                 ELSE
879                                         -- check the fee trigger group members
880                                         IF (finpl_val_trig_group(v_cft_rec.fee_trigger_group_number) = TRUE) THEN
881                                                 -- Trigger Fired
882                                                 RETURN 'COMPOSITE';
883                                         END IF;
884                                 END IF;
885                         END LOOP;
886                         -- check IGS_PS_UNIT fee triggers
887                         FOR v_uft_rec IN c_uft LOOP
888                                 IF (v_uft_rec.fee_trigger_group_number IS NOT NULL) THEN
889                                         -- check the fee trigger group members
890                                         IF (finpl_val_trig_group(v_uft_rec.fee_trigger_group_number) = TRUE) THEN
891                                                 -- Trigger Fired
892                                                 RETURN 'COMPOSITE';
893                                         END IF;
894                                 ELSE
895                                         OPEN c_sua        (v_uft_rec.unit_cd,
896                                                         v_uft_rec.version_number,
897                                                         v_uft_rec.CAL_TYPE,
898                                                         v_uft_rec.ci_sequence_number,
899                                                         v_uft_rec.location_cd,
900                                                         v_uft_rec.UNIT_CLASS);
901                                         FETCH c_sua INTO v_check;
902                                         IF (c_sua%FOUND) THEN
903                                                 CLOSE c_sua;
904                                                 -- Trigger Fired
905                                                 RETURN 'UFT';
906                                         END IF;
907                                         CLOSE c_sua;
908                                 END IF;
909                         END LOOP;
910                         -- check IGS_PS_UNIT set fee triggers
911                         FOR v_usft_rec IN c_usft LOOP
912                                 IF (v_usft_rec.fee_trigger_group_number IS NOT NULL) THEN
913                                         -- check the fee trigger group members
914                                         IF (finpl_val_trig_group(v_usft_rec.fee_trigger_group_number) = TRUE) THEN
915                                                 -- Trigger Fired
916                                                 RETURN 'COMPOSITE';
917                                         END IF;
918                                 ELSE
919                                         OPEN c_susa (        v_usft_rec.unit_set_cd,
920                                                         v_usft_rec.version_number);
921                                         FETCH c_susa INTO v_check;
922                                         IF (c_susa%FOUND) THEN
923                                                 CLOSE c_susa;
924                                                 -- Trigger Fired
925                                                 RETURN 'USFT';
926                                         END IF;
927                                         CLOSE c_susa;
928                                 END IF;
929                         END LOOP;
930                 END IF;
931                 -- Trigger did not fire
932                 RETURN NULL;
933         END;
934         END finp_get_fee_trigger;
935 --
936 --
937 
938 FUNCTION finp_get_fps_end_dt(
939   p_fee_cal_type IN IGS_FI_F_TYP_CA_INST_ALL.fee_cal_type%TYPE,
940   p_fee_ci_sequence_num IN IGS_FI_F_TYP_CA_INST_ALL.fee_ci_sequence_number%TYPE,
941   p_s_relation_type IN VARCHAR2 ,
942   p_fee_type IN IGS_FI_F_TYP_CA_INST_ALL.FEE_TYPE%TYPE,
943   p_fee_cat IN IGS_FI_FEE_CAT_ALL.FEE_CAT%TYPE  ,
944   p_schedule_number IN NUMBER,
945   p_dt_alias IN  IGS_FI_F_TYP_CA_INST_ALL.START_DT_ALIAS%TYPE,
946   p_dai_sequence_num IN NUMBER )
947 RETURN DATE AS
948 
949 BEGIN
950  return NULL;
951 END finp_get_fps_end_dt;
952 --
953 --
954 
955 FUNCTION finp_get_fps_start_dt(
956   p_fee_cal_type IN IGS_FI_F_TYP_CA_INST_ALL.fee_cal_type%TYPE,
957   p_fee_ci_sequence_num IN IGS_FI_F_TYP_CA_INST_ALL.fee_ci_sequence_number%TYPE,
958   p_s_relation_type IN VARCHAR2 ,
959   p_fee_type IN IGS_FI_F_TYP_CA_INST_ALL.FEE_TYPE%TYPE,
960   p_fee_cat IN IGS_FI_FEE_CAT_ALL.FEE_CAT%TYPE,
961   p_schedule_number IN NUMBER,
962   p_dt_alias IN IGS_FI_F_TYP_CA_INST_ALL.START_DT_ALIAS%TYPE,
963   p_dai_sequence_num IN NUMBER )
964 RETURN DATE AS
965 /*----------------------------------------------------------------------------
966 ||  Created By :
967 ||  Created On :
968 ||  Purpose :
969 ||  Known limitations, enhancements or remarks :
970 ||  Change History :
971 ||  Who             When            What
972 ||  (reverse chronological order - newest change first)
973 || VVUTUKUR      1-DEC-2002      Enh#2584986.Removed references to igs_fi_fee_pay_schd.
974   ----------------------------------------------------------------------------*/
975 BEGIN
976  return NULL;
977 END finp_get_fps_start_dt;
978 --
979 FUNCTION finp_get_frtns_end_dt(
980   p_fee_cal_type IN IGS_FI_FEE_RET_SCHD.fee_cal_type%TYPE ,
981   p_fee_ci_sequence_num IN IGS_FI_FEE_RET_SCHD.fee_ci_sequence_number%TYPE ,
982   p_s_relation_type IN IGS_FI_FEE_RET_SCHD.s_relation_type%TYPE ,
983   p_fee_type IN IGS_FI_FEE_RET_SCHD.FEE_TYPE%TYPE ,
984   p_fee_cat IN IGS_FI_FEE_RET_SCHD.FEE_CAT%TYPE ,
985   p_dt_alias IN IGS_FI_FEE_RET_SCHD.DT_ALIAS%TYPE ,
986   p_dai_sequence_num IN NUMBER )
987 RETURN DATE AS
988 
989 BEGIN
990 DECLARE
991         -- this cursor finds the next retention schedule entry
992         -- date alias instance value
993         CURSOR c_frtns (cp_fee_cal_type                IGS_FI_FEE_RET_SCHD.fee_cal_type%TYPE,
994                         cp_fee_ci_sequence_num        IGS_FI_FEE_RET_SCHD.fee_ci_sequence_number%TYPE,
995                         cp_s_relation_type        IGS_FI_FEE_RET_SCHD.s_relation_type%TYPE,
996                         cp_fee_type                IGS_FI_FEE_RET_SCHD.FEE_TYPE%TYPE,
997                         cp_fee_cat                IGS_FI_FEE_RET_SCHD.FEE_CAT%TYPE,
998                         cp_alias_val                IGS_CA_DA_INST_V.alias_val%TYPE) IS
999                 SELECT        daiv.alias_val
1000                 FROM        IGS_FI_FEE_RET_SCHD        frtns,
1001                         IGS_CA_DA_INST_V        daiv
1002                 WHERE        frtns.fee_cal_type = cp_fee_cal_type AND
1003                         frtns.fee_ci_sequence_number = cp_fee_ci_sequence_num AND
1004                         frtns.s_relation_type = cp_s_relation_type AND
1005                         NVL(frtns.FEE_TYPE,'NULL') = NVL(cp_fee_type,'NULL') AND
1006                         NVL(frtns.FEE_CAT,'NULL') = NVL(cp_fee_cat,'NULL') AND
1007                         daiv.DT_ALIAS =frtns.DT_ALIAS AND
1008                         daiv.sequence_number = frtns.dai_sequence_number AND
1009                         daiv.CAL_TYPE = frtns.fee_cal_type AND
1010                         daiv.ci_sequence_number =frtns.fee_ci_sequence_number AND
1011                         daiv.alias_val > cp_alias_val
1012                 ORDER BY        daiv.alias_val ASC;
1013         v_alias_val                IGS_CA_DA_INST_V.alias_val%TYPE;
1014 -------------------------------------------------------------------------------
1015          FUNCTION finl_get_ass_end_dt(
1016                 p_fee_cal_type                IN IGS_FI_FEE_RET_SCHD.fee_cal_type%TYPE,
1017                 p_fee_ci_sequence_num        IN IGS_FI_FEE_RET_SCHD.fee_ci_sequence_number%TYPE,
1018                 p_s_relation_type                IN IGS_FI_FEE_RET_SCHD.s_relation_type%TYPE,
1019                 p_fee_type                IN IGS_FI_FEE_RET_SCHD.FEE_TYPE%TYPE,
1020                 p_fee_cat                IN IGS_FI_FEE_RET_SCHD.FEE_CAT%TYPE)
1021         RETURN DATE AS
1022         BEGIN
1023         DECLARE
1024                 -- this cursor finds the fee type cal instance end date alias instance value
1025                 CURSOR c_ftci (        cp_fee_type                IGS_FI_F_TYP_CA_INST.FEE_TYPE%TYPE,
1026                                 cp_fee_cal_type                IGS_FI_F_TYP_CA_INST.fee_cal_type%TYPE,
1027                                 cp_fee_ci_sequence_num        IGS_FI_F_TYP_CA_INST.fee_ci_sequence_number%TYPE) IS
1028                         SELECT        daiv.alias_val
1029                         FROM        IGS_CA_DA_INST_V        daiv,
1030                                 IGS_FI_F_TYP_CA_INST        ftci
1031                         WHERE        ftci.FEE_TYPE = cp_fee_type AND
1032                                 ftci.fee_cal_type = cp_fee_cal_type AND
1033                                 ftci.fee_ci_sequence_number = cp_fee_ci_sequence_num AND
1034                                 daiv.DT_ALIAS = ftci.end_dt_alias AND
1035                                 daiv.sequence_number = ftci.end_dai_sequence_number AND
1036                                 daiv.CAL_TYPE = ftci.fee_cal_type AND
1037                                 daiv.ci_sequence_number = ftci.fee_ci_sequence_number;
1038                 -- this cursor finds the fee cat cal instance end date alias instance value
1039                 CURSOR c_fcci (        cp_fee_cat                IGS_FI_F_CAT_CA_INST.FEE_CAT%TYPE,
1040                                 cp_fee_cal_type                IGS_FI_F_CAT_CA_INST.fee_cal_type%TYPE,
1041                                 cp_fee_ci_sequence_num        IGS_FI_F_CAT_CA_INST.fee_ci_sequence_number%TYPE) IS
1042                         SELECT        daiv.alias_val
1043                         FROM        IGS_CA_DA_INST_V        daiv,
1044                                 IGS_FI_F_CAT_CA_INST        fcci
1045                         WHERE        fcci.FEE_CAT = cp_fee_cat AND
1046                                 fcci.fee_cal_type = cp_fee_cal_type AND
1047                                 fcci.fee_ci_sequence_number = cp_fee_ci_sequence_num AND
1048                                 daiv.DT_ALIAS = fcci.end_dt_alias AND
1049                                 daiv.sequence_number = fcci.end_dai_sequence_number AND
1050                                 daiv.CAL_TYPE = fcci.fee_cal_type AND
1051                                 daiv.ci_sequence_number = fcci.fee_ci_sequence_number;
1052                 v_alias_val        IGS_CA_DA_INST_V.alias_val%TYPE;
1053                 BEGIN
1054                         -- check the retention schedule relationship
1055                         IF p_s_relation_type = 'FTCI' THEN
1056                                 -- retention schedule is for a fee type cal instance
1057                                 OPEN        c_ftci(        p_fee_type,
1058                                                 p_fee_cal_type,
1059                                                 p_fee_ci_sequence_num);
1060                                 FETCH        c_ftci        INTO        v_alias_val;
1061                                 CLOSE        c_ftci;
1062                                 RETURN        v_alias_val;
1063                         ELSE
1064                                 -- retention schedule is for a fee cat cal instance or fee cat fee liability
1065                                 OPEN        c_fcci(        p_fee_cat,
1066                                                 p_fee_cal_type,
1067                                                 p_fee_ci_sequence_num);
1068                                 FETCH        c_fcci        INTO        v_alias_val;
1069                                 CLOSE        c_fcci;
1070                                 RETURN        v_alias_val;
1071                         END IF;
1072                 END;
1073         END finl_get_ass_end_dt;
1074 -------------------------------------------------------------------------------
1075         BEGIN
1076                 -- get the alias value for the current schedule
1077                 v_alias_val := IGS_CA_GEN_001.calp_get_alias_val(p_dt_alias,
1078                                         p_dai_sequence_num,
1079                                         p_fee_cal_type,
1080                                         p_fee_ci_sequence_num);
1081                 -- attempt to find the next retention schedule entry
1082                 OPEN        c_frtns(p_fee_cal_type,
1083                                 p_fee_ci_sequence_num,
1084                                 p_s_relation_type,
1085                                 p_fee_type,
1086                                 p_fee_cat,
1087                                 v_alias_val);
1088                 FETCH        c_frtns        INTO        v_alias_val;
1089                 IF (c_frtns%NOTFOUND) THEN
1090                         -- The fee assessment end date is used
1091                         CLOSE        c_frtns;
1092                         RETURN finl_get_ass_end_dt(p_fee_cal_type,
1093                                         p_fee_ci_sequence_num,
1094                                         p_s_relation_type,
1095                                         p_fee_type,
1096                                         p_fee_cat);
1097                 ELSE
1098                         -- end alias value is the day prior to the next schedule
1099                         CLOSE        c_frtns;
1100                         RETURN        (v_alias_val - 1);
1101                 END IF;
1102         END;
1103 END finp_get_frtns_end_dt;
1104 --
1105 FUNCTION finp_get_hecs_amt_pd(
1106   p_load_cal_type IN VARCHAR2 ,
1107   p_load_ci_sequence_number IN NUMBER ,
1108   p_person_id IN NUMBER ,
1109   p_course_cd IN VARCHAR2 )
1110 RETURN NUMBER AS
1111 /******************************************************************
1112   Change History
1113   Who                 When                 What
1114   schodava         21-Jan-2002         Enh # 2187247
1115                                  SFCR021 - LCI-FCI Relation
1116 ******************************************************************/
1117 
1118         -- finp_get_hecs_amt_pd
1119         -- Routine to calculate the HECS amount paid.  DETYA element 381.
1120         -- If no amount has been paid a zero value is returned.
1121 
1122         cst_hecs        CONSTANT        VARCHAR2(10) := 'HECS';
1123         cst_payment        CONSTANT        VARCHAR2(10) := 'PAYMENT';
1124         cst_discount        CONSTANT        VARCHAR2(10) := 'DISCOUNT';
1125         v_fp_total                        NUMBER;
1126         v_fee_cal_type                        igs_ca_inst.cal_type%TYPE;
1127         v_fee_ci_sequence_number        igs_ca_inst.sequence_number%TYPE;
1128         v_message_name                        fnd_new_messages.message_name%TYPE;
1129 
1130         CURSOR c_fp_total(cp_fee_cal_type IN igs_ca_inst.cal_type%TYPE,
1131                           cp_fee_ci_sequence_number IN igs_ca_inst.sequence_number%TYPE) IS
1132                 SELECT        SUM(fas.transaction_amount/fas.exchange_rate)
1133                 FROM        IGS_FI_FEE_TYPE                        ft,
1134                         IGS_FI_FEE_AS                          fas
1135                 WHERE        ft.s_fee_type                        = cst_hecs                AND
1136                         fas.person_id                        = p_person_id                AND
1137                         fas.course_cd                        = p_course_cd                AND
1138                         fas.FEE_TYPE                        = ft.FEE_TYPE                AND
1139                         fas.S_TRANSACTION_TYPE in
1140                          (SELECT        strty.lookup_code
1141                          FROM        IGS_LOOKUPS_view        strty
1142                          WHERE        strty.lookup_code = fas.S_TRANSACTION_TYPE AND
1143                                 strty.lookup_type = 'TRANSACTION_TYPE' AND
1144                                  strty.transaction_cat = cst_payment)                 AND
1145                         fas.S_TRANSACTION_TYPE <> cst_discount                         AND
1146                          fas.logical_delete_dt  IS NULL                                 AND
1147                         fas.fee_cal_type                = cp_fee_cal_type        AND
1148                         fas.fee_ci_sequence_number        = cp_fee_ci_sequence_number;
1149 BEGIN
1150         -- Enh # 2187247
1151         -- Derive the related Fee Calendar Instance for the passed Load
1152         -- Calendar Instance
1153 
1154         IF igs_fi_gen_001.finp_get_lfci_reln(p_load_cal_type,
1155                                           p_load_ci_sequence_number,
1156                                           'LOAD',
1157                                           v_fee_cal_type,
1158                                           v_fee_ci_sequence_number,
1159                                           v_message_name) = TRUE THEN
1160           -- Get the total payments received for fee category fee liability assessments
1161           -- associated with a HECS fee with respect to the load calendar.
1162           OPEN c_fp_total(v_fee_cal_type,
1163                         v_fee_ci_sequence_number);
1164           FETCH c_fp_total INTO v_fp_total;
1165           CLOSE c_fp_total;
1166           IF v_fp_total IS NULL THEN
1167                 -- Record not found
1168                 v_fp_total := 0;
1169           END IF;
1170           RETURN v_fp_total;
1171         ELSE
1172         -- Enh # 2187247
1173         -- The LCI cannot be determined
1174           v_fp_total := 0;
1175         END IF;
1176         RETURN v_fp_total;
1177 EXCEPTION
1178         WHEN OTHERS THEN
1179                 IF c_fp_total%ISOPEN THEN
1180                         CLOSE c_fp_total;
1181                 END IF;
1182                 RAISE;
1183 END finp_get_hecs_amt_pd;
1184 --
1185 FUNCTION finp_get_hecs_fee(
1186   p_load_cal_type IN VARCHAR2 ,
1187   p_load_ci_sequence_number IN NUMBER ,
1188   p_person_id IN NUMBER ,
1189   p_course_cd IN VARCHAR2 )
1190 RETURN NUMBER AS
1191 /******************************************************************
1192   Change History
1193   Who                 When                 What
1194   uudayapr         12-12-2003       bug#3080983 made the modification to the
1195                                     Cursor c_fp_total to point to the table
1196                                     IGS_FI_FEE_AS instead IGS_FI_FEE_ASS_DEBT_V view.
1197   schodava         21-Jan-2002         Enh # 2187247
1198                                  SFCR021 - LCI-FCI Relation
1199 ******************************************************************/
1200         -- finp_get_hecs_fee
1201         -- Routine to determine the HECS Fee assessed for a student IGS_PS_COURSE attempt.
1202 
1203         cst_hecs        CONSTANT        VARCHAR2(4) := 'HECS';
1204         v_fp_total                        NUMBER;
1205         v_fee_cal_type                        igs_ca_inst.cal_type%TYPE;
1206         v_fee_ci_sequence_number        igs_ca_inst.sequence_number%TYPE;
1207         v_message_name                        fnd_new_messages.message_name%TYPE;
1208 --modification to the    Cursor c_fp_total to point to the table  IGS_FI_FEE_AS instead IGS_FI_FEE_ASS_DEBT_V view.
1209           CURSOR c_fp_total(cp_fee_cal_type IN igs_ca_inst.cal_type%TYPE,
1210                             cp_fee_ci_sequence_number IN igs_ca_inst.sequence_number%TYPE) IS
1211           SELECT  SUM(fadv.transaction_amount/fadv.exchange_rate)  local_assessment_amount
1212           FROM    IGS_FI_FEE_TYPE                ft,
1213                   IGS_FI_FEE_AS                  fadv
1214           WHERE   ft.s_fee_type                  = cst_hecs
1215           AND     fadv.person_id                 = p_person_id
1216           AND     ((fadv.course_cd                 = p_course_cd) OR ( fadv.course_cd IS NULL AND  p_course_cd IS NULL))
1217           AND     fadv.FEE_TYPE                  = ft.FEE_TYPE
1218           AND     fadv.fee_cal_type              = cp_fee_cal_type
1219           AND     fadv.fee_ci_sequence_number    = cp_fee_ci_sequence_number
1220           AND     fadv.logical_delete_dt is NULL;
1221 
1222 BEGIN
1223         -- Enh # 2187247
1224         -- Derive the related Fee Calendar Instance for the passed Load
1225         -- Calendar Instance
1226 
1227         IF igs_fi_gen_001.finp_get_lfci_reln(p_load_cal_type,
1228                                           p_load_ci_sequence_number,
1229                                           'LOAD',
1230                                           v_fee_cal_type,
1231                                           v_fee_ci_sequence_number,
1232                                           v_message_name) = TRUE THEN
1233 
1234           -- Get the total assessed for fee category fee liability assessments
1235           -- associated with a HECS fee with respect to the load calendar.
1236           OPEN c_fp_total(v_fee_cal_type,
1237                         v_fee_ci_sequence_number);
1238           FETCH c_fp_total INTO v_fp_total;
1239           CLOSE c_fp_total;
1240           IF v_fp_total IS NULL THEN
1241                 -- Record not found
1242                 v_fp_total := 0;
1243           END IF;
1244           RETURN v_fp_total;
1245         ELSE
1246         -- Enh # 2187247
1247         -- The LCI cannot be determined
1248           v_fp_total := 0;
1249         END IF;
1250         RETURN v_fp_total;
1251 EXCEPTION
1252         WHEN OTHERS THEN
1253                 IF c_fp_total%ISOPEN THEN
1254                         CLOSE c_fp_total;
1255                 END IF;
1256                 RAISE;
1257 END finp_get_hecs_fee;
1258 --
1259 FUNCTION finp_get_hecs_pymnt_optn(
1260   p_person_id IN IGS_EN_STDNT_PS_ATT_ALL.person_id%TYPE ,
1261   p_course_cd IN IGS_EN_STDNT_PS_ATT_ALL.course_cd%TYPE ,
1262   p_effective_dt IN DATE ,
1263   p_fee_cal_type IN IGS_CA_INST_ALL.CAL_TYPE%TYPE ,
1264   p_fee_ci_sequence_number IN IGS_CA_INST_ALL.sequence_number%TYPE ,
1265   p_start_dt_alias IN IGS_FI_F_TYP_CA_INST_ALL.start_dt_alias%TYPE ,
1266   p_start_dai_sequence_number IN IGS_FI_F_TYP_CA_INST_ALL.start_dai_sequence_number%TYPE,
1267   p_end_dt_alias IN IGS_FI_F_TYP_CA_INST_ALL.end_dt_alias%TYPE ,
1268   p_end_dai_sequence_number IN IGS_FI_F_TYP_CA_INST_ALL.end_dai_sequence_number%
1269 TYPE )
1270 
1271 RETURN varchar2 AS
1272 
1273 BEGIN
1274 DECLARE
1275         -- cursor to get student IGS_PS_COURSE HECS payment option details
1276         CURSOR c_scho(
1277                 cp_effective_dt                DATE,
1278                 cp_person_id                IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1279                 cp_course_cd                IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
1280                 SELECT        HECS_PAYMENT_OPTION
1281                 FROM        IGS_EN_STDNTPSHECSOP
1282                 WHERE        person_id                 = cp_person_id AND
1283                         course_cd                 = cp_course_cd AND
1284                         TRUNC(cp_effective_dt)         >= TRUNC(start_dt) AND
1285                         TRUNC(cp_effective_dt)         <= TRUNC(NVL(end_dt, cp_effective_dt));
1286         v_start_dt                DATE;
1287         v_end_dt                DATE;
1288         v_effective_dt                DATE;
1289         v_hecs_payment_option        IGS_EN_STDNTPSHECSOP.HECS_PAYMENT_OPTION%TYPE;
1290 BEGIN        -- finp_get_hecs_pymnt_optn
1291         -- Get HECS payment option relevant to a fee assessment period
1292         -- Check Parameters
1293         IF p_person_id IS NULL OR
1294                 p_course_cd IS NULL OR
1295                 p_effective_dt IS NULL OR
1296                 p_fee_cal_type IS NULL OR
1297                 p_fee_ci_sequence_number IS NULL OR
1298                 p_start_dt_alias IS NULL OR
1299                 p_start_dai_sequence_number IS NULL OR
1300                 p_end_dt_alias IS NULL OR
1301                 p_end_dai_sequence_number IS NULL THEN
1302                 RETURN NULL;
1303         END IF;
1304         v_start_dt := IGS_CA_GEN_001.calp_get_alias_val(
1305                                 p_start_dt_alias,
1306                                      p_start_dai_sequence_number,
1307                                      p_fee_cal_type,
1308                                      p_fee_ci_sequence_number);
1309         IF v_start_dt IS NULL THEN
1310                 RETURN NULL;
1311         END IF;
1312         v_end_dt := IGS_CA_GEN_001.calp_get_alias_val(
1313                                 p_end_dt_alias,
1314                                      p_end_dai_sequence_number,
1315                                      p_fee_cal_type,
1316                                      p_fee_ci_sequence_number);
1317         IF v_end_dt IS NULL THEN
1318                 RETURN NULL;
1319         END IF;
1320         IF v_start_dt > p_effective_dt THEN
1321                 v_effective_dt := v_start_dt;
1322         ELSIF v_end_dt < p_effective_dt THEN
1323                 v_effective_dt := v_end_dt;
1324         ELSE
1325                 v_effective_dt := TRUNC(p_effective_dt);
1326         END IF;
1327         -- Get the HECS payment option matching the effective date.
1328         -- IGS_GE_NOTE, later entries may exist.
1329         OPEN c_scho(
1330                 v_effective_dt,
1331                 p_person_id,
1332                 p_course_cd);
1333         FETCH c_scho INTO v_hecs_payment_option;
1334         IF c_scho%NOTFOUND THEN
1335                 CLOSE c_scho;
1336                 RETURN NULL;
1337         END IF;
1338         CLOSE c_scho;
1339         RETURN v_hecs_payment_option;
1340 END;
1341 END finp_get_hecs_pymnt_optn;
1342 
1343 --
1344 FUNCTION finp_get_tuition_fee(
1345   p_load_cal_type IN VARCHAR2 ,
1346   p_load_ci_sequence_number IN NUMBER ,
1347   p_person_id IN NUMBER ,
1348   p_course_cd IN VARCHAR2 )
1349 RETURN NUMBER AS
1350 /******************************************************************
1351   Change History
1352   Who                 When                 What
1353   uudayapr         12-12-2003       bug#3080983 made the modification to v_loc_ass_amt
1354                                     declartion as number instead
1355                                     IGS_FI_FEE_ASS_DEBT_V.local_assessment_amount%TYPE
1356                                     and the Cursor c_local_ass_amt to point to the table
1357                                     IGS_FI_FEE_AS instead IGS_FI_FEE_ASS_DEBT_V view.
1358                                     Modified teh cst_tuition instialization to TUTNFEE
1359                                     instead of TUITION .
1360 
1361   schodava         21-Jan-2002         Enh # 2187247
1362                                    SFCR021 - LCI-FCI Relation
1363 ******************************************************************/
1364 
1365         cst_tuition                VARCHAR2(7) := 'TUTNFEE';
1366         v_loc_ass_amt                NUMBER;
1367         v_fee_cal_type                        igs_ca_inst.cal_type%TYPE;
1368         v_fee_ci_sequence_number        igs_ca_inst.sequence_number%TYPE;
1369         v_message_name                        fnd_new_messages.message_name%TYPE;
1370 
1371         CURSOR c_local_ass_amt(cp_fee_cal_type IN igs_ca_inst.cal_type%TYPE,
1372                                cp_fee_ci_sequence_number IN igs_ca_inst.sequence_number%TYPE) IS
1373           SELECT SUM(fadv.transaction_amount/fadv.exchange_rate)  local_assessment_amount
1374                   FROM    IGS_FI_FEE_TYPE                ft,
1375                           IGS_FI_FEE_AS                  fadv
1376                   WHERE  ft.s_fee_type                  = cst_tuition
1377                   AND    fadv.person_id                  = p_person_id
1378                   AND    ((fadv.course_cd                  = p_course_cd ) OR (fadv.course_cd IS NULL AND  p_course_cd IS NULL))
1379                   AND    fadv.FEE_TYPE                  = ft.FEE_TYPE
1380                   AND    fadv.fee_cal_type              = cp_fee_cal_type
1381                   AND    fadv.fee_ci_sequence_number    = cp_fee_ci_sequence_number
1382                   AND    fadv.logical_delete_dt is NULL;
1383 BEGIN
1384         -- This module determines the tuition fee (DEETYA Element 391).
1385         -- If a tuition fee is not charged, or the student is in a place
1386         -- fully-funded by an employer, then a 0 value is returned.
1387         -- This routine has been developed for use by the statistics
1388         -- sub-system (STAP_INS_GOVT_SNPSHT).
1389         -- It will need to be re-written when the finance sub-system
1390         -- is developed.  It will require a look up on the IGS_FI_FEE_AS
1391         -- table tuition fee not charged or the student is in a place fully-
1392         -- funded by an employer.
1393         -- Get the total assessed for fee category fee liability assessments
1394         -- associated with a TUITION fee with respect to the load calendar.
1395 
1396         -- Enh # 2187247
1397         -- Derive the related Fee Calendar Instance for the passed Load
1398         -- Calendar Instance
1399         IF igs_fi_gen_001.finp_get_lfci_reln(p_load_cal_type,
1400                                           p_load_ci_sequence_number,
1401                                           'LOAD',
1402                                           v_fee_cal_type,
1403                                           v_fee_ci_sequence_number,
1404                                           v_message_name) = TRUE THEN
1405           OPEN c_local_ass_amt(v_fee_cal_type,
1406                         v_fee_ci_sequence_number);
1407           FETCH c_local_ass_amt INTO v_loc_ass_amt;
1408           IF (c_local_ass_amt%FOUND) THEN
1409                 IF v_loc_ass_amt IS NOT NULL THEN
1410                         CLOSE c_local_ass_amt;
1411                         RETURN v_loc_ass_amt;
1412                 ELSE
1413                         CLOSE c_local_ass_amt;
1414                         RETURN 0;
1415                 END IF;
1416           ELSE
1417                 CLOSE c_local_ass_amt;
1418                 RETURN 0;
1419           END IF;
1420         ELSE
1421           -- Enh # 2187247
1422           -- The LCI cannot be determined
1423           v_loc_ass_amt := 0;
1424         END IF;
1425         RETURN v_loc_ass_amt;
1426 
1427 END finp_get_tuition_fee;
1428 
1429 FUNCTION finp_get_lfci_reln(
1430   /******************************************************************
1431   Created By        : schodava
1432   Date Created By   : 18-Jan-2002
1433   Purpose           : This function is used to identify the LCI in the
1434                       case when FCI is passed and vice versa.
1435                       Enh # 2187247
1436   Known limitations,
1437   enhancements,
1438   remarks            :
1439   Change History
1440   Who      When        What
1441   ******************************************************************/
1442   p_cal_type                        IN igs_ca_inst.cal_type%TYPE,
1443   p_ci_sequence_number                IN igs_ca_inst.sequence_number%TYPE,
1444   p_cal_category                IN igs_ca_type.s_cal_cat%TYPE,
1445   p_ret_cal_type                OUT NOCOPY igs_ca_inst.cal_type%TYPE,
1446   p_ret_ci_sequence_number        OUT NOCOPY igs_ca_inst.sequence_number%TYPE,
1447   p_message_name                OUT NOCOPY FND_NEW_MESSAGES.MESSAGE_NAME%TYPE)
1448   RETURN BOOLEAN AS
1449       -- To derive the subordinate Load Calendar Instance uniquely linked
1450       -- to the passed superior Fee calendar Instance
1451 
1452       CURSOR  c_cal_inst_rel IS
1453       SELECT  sub_cal_type,
1454               sub_ci_sequence_number,
1455               sup_cal_type,
1456               sup_ci_sequence_number
1457       FROM    igs_ca_inst_rel cir,
1458               igs_ca_type ct1,
1459               igs_ca_type ct2
1460       WHERE   cir.sub_cal_type = ct1.cal_type
1461               AND cir.sup_cal_type = ct2.cal_type
1462               AND ct1.s_cal_cat IN ('LOAD','FEE')
1463               AND ct2.s_cal_cat IN ('LOAD','FEE')
1464               AND ((sub_cal_type = p_cal_type
1465               AND sub_ci_sequence_number = p_ci_sequence_number)
1466               OR  (sup_cal_type = p_cal_type
1467               AND sup_ci_sequence_number = p_ci_sequence_number));
1468 
1469   BEGIN
1470 
1471     IF p_cal_category NOT IN ('FEE','LOAD') THEN
1472       p_message_name := 'IGS_AD_INVALID_PARAM_COMB';
1473       RETURN FALSE;
1474     END IF;
1475 
1476     FOR l_c_cal_inst_rel IN c_cal_inst_rel LOOP
1477       IF p_cal_category = 'FEE' AND p_ci_sequence_number <> l_c_cal_inst_rel.sub_ci_sequence_number THEN
1478         p_ret_cal_type                        := l_c_cal_inst_rel.sub_cal_type;
1479         p_ret_ci_sequence_number        := l_c_cal_inst_rel.sub_ci_sequence_number;
1480         p_message_name := NULL;
1481         RETURN TRUE;
1482       ELSIF p_cal_category = 'LOAD' AND p_ci_sequence_number <> l_c_cal_inst_rel.sup_ci_sequence_number THEN
1483         p_ret_cal_type                        := l_c_cal_inst_rel.sup_cal_type;
1484         p_ret_ci_sequence_number        := l_c_cal_inst_rel.sup_ci_sequence_number;
1485         p_message_name := NULL;
1486         RETURN TRUE;
1487       END IF;
1488     END LOOP;
1489     p_message_name := 'IGS_FI_NO_RELN_EXISTS';
1490     RETURN FALSE;
1491   EXCEPTION
1492     WHEN OTHERS THEN
1493       IF c_cal_inst_rel%ISOPEN THEN
1494         CLOSE c_cal_inst_rel;
1495       END IF;
1496       p_message_name := 'IGS_GE_UNHANDLED_EXCEPTION';
1497       RAISE;
1498   END finp_get_lfci_reln;
1499 
1500   FUNCTION finp_chk_lfci_reln(
1501   /******************************************************************
1502   Created By        : schodava
1503   Date Created By   : 18-Jan-2002
1504   Purpose           : This function is used to check if there exists
1505                       a relation between the passed LCI/FCI with
1506                       any FCI/LCI
1507                       (Enh # 2187247)
1508   Known limitations,
1509   enhancements,
1510   remarks            :
1511   Change History
1512   Who      When        What
1513   ******************************************************************/
1514   p_cal_type                IN        igs_ca_inst.cal_type%TYPE,
1515   p_ci_sequence_number        IN        igs_ca_inst.sequence_number%TYPE,
1516   p_cal_category        IN        igs_ca_type.s_cal_cat%TYPE)
1517   RETURN VARCHAR2 AS
1518 
1519   l_cal_type                igs_ca_inst.cal_type%TYPE;
1520   l_ci_sequence_number        igs_ca_inst.sequence_number%TYPE;
1521   l_message_name        FND_NEW_MESSAGES.MESSAGE_NAME%TYPE;
1522 
1523   BEGIN
1524     IF igs_fi_gen_001.FINP_GET_LFCI_RELN(
1525        p_cal_type,
1526        p_ci_sequence_number,
1527        p_cal_category,
1528        l_cal_type,
1529        l_ci_sequence_number,
1530        l_message_name) THEN
1531       RETURN 'TRUE';
1532     ELSE
1533       RETURN 'FALSE';
1534     END IF;
1535   EXCEPTION
1536     WHEN OTHERS THEN
1537       APP_EXCEPTION.RAISE_EXCEPTION;
1538   END finp_chk_lfci_reln;
1539 
1540 FUNCTION finp_get_planned_credits_ind(
1541   p_message_name   OUT NOCOPY fnd_new_messages.message_name%TYPE)
1542 
1543   RETURN VARCHAR2 AS
1544   /******************************************************************
1545   Created By        : SYkrishn
1546   Date Created By   : 02-APR-2002
1547   Purpose           : This function is used to derive the value of Planned_credits_ind
1548                       from the table IGS_FI_CONTROL- Return N if Null
1549                       Enh # 2293676
1550   Known limitations,
1551   enhancements,
1552   remarks            :
1553   Change History
1554   Who      When        What
1555   ******************************************************************/
1556 
1557 --Cursor to get the planned credits indicator
1558     CURSOR  c_pln_credits_ind IS
1559       SELECT  planned_credits_ind
1560       FROM    igs_fi_control;
1561 
1562    l_v_pln_credits_ind igs_fi_control_all.planned_credits_ind%TYPE;
1563 
1564   BEGIN
1565     OPEN c_pln_credits_ind;
1566     FETCH c_pln_credits_ind INTO l_v_pln_credits_ind;
1567 
1568   --IF no record found then return appropriate error
1569     IF c_pln_credits_ind%NOTFOUND THEN
1570         p_message_name := 'IGS_FI_NO_PC_SETUP';
1571       ELSE
1572         p_message_name := NULL;
1573     END IF;
1574     CLOSE c_pln_credits_ind;
1575     RETURN NVL(l_v_pln_credits_ind,'N');
1576   EXCEPTION
1577     WHEN OTHERS THEN
1578       p_message_name := 'IGS_GE_UNHANDLED_EXCEPTION';
1579       RAISE;
1580   END finp_get_planned_credits_ind;
1581 
1582   FUNCTION finp_get_total_planned_credits(
1583 
1584   p_person_id     IN igs_fi_parties_v.person_id%TYPE,
1585   p_start_date    IN DATE,
1586   p_end_date      IN DATE,
1587   p_message_name  OUT NOCOPY fnd_new_messages.message_name%TYPE)
1588 
1589   RETURN NUMBER AS
1590   /******************************************************************
1591   Created By        : SYkrishn
1592   Date Created By   : 02-APR-2002
1593   Purpose           : This function is used to sum up all the planned credits in FA based on the parameters input
1594                       Enh # 2293676
1595   Known limitations,
1596   enhancements,
1597   remarks            :
1598   Change History
1599   Who      When        What
1600   vvutukur 15-Jul-2003 Enh#3038511.FICR106 Build. Modified cursors c_sum_pln_bw_dates,c_sum_pln_till_date
1601                        to exclude the planned credits for which the Award Year status is not OPEN.
1602   sarakshi 23-sep-2002 Enh#2564643,removed the reference of subaccount and all its usage in this function
1603   ******************************************************************/
1604    CURSOR  c_person_id IS
1605     SELECT  person_id
1606     FROM    igs_fi_parties_v
1607     WHERE   person_id = p_person_id;
1608 
1609 
1610    CURSOR c_sum_pln_bw_dates IS
1611      SELECT
1612         SUM(disb.disb_net_amt )
1613      FROM
1614         igf_aw_awd_disb disb,
1615         igf_aw_award   awd,
1616         igf_aw_fund_mast fmast,
1617         igf_ap_fa_base_rec base,
1618         igf_ap_batch_aw_map bm
1619      WHERE  disb.award_id = awd.award_id
1620      AND    awd.fund_id = fmast.fund_id
1621      AND    awd.base_id = base.base_id
1622      AND    fmast.ci_cal_type = bm.ci_cal_type
1623      AND    fmast.ci_sequence_number = bm.ci_sequence_number
1624      AND    awd.award_status ='ACCEPTED'
1625      AND    disb.trans_type   = 'P'
1626      AND    disb.show_on_bill   = 'Y'
1627      AND    base.person_id = p_person_id
1628      AND    TRUNC(disb.disb_date) BETWEEN TRUNC(p_start_date) and TRUNC(p_end_date)
1629      AND    bm.award_year_status_code = 'O';
1630 
1631    CURSOR c_sum_pln_till_date IS
1632      SELECT
1633         SUM(disb.disb_net_amt )
1634      FROM
1635         igf_aw_awd_disb disb,
1636         igf_aw_award   awd,
1637         igf_aw_fund_mast fmast,
1638         igf_ap_fa_base_rec base,
1639         igf_ap_batch_aw_map bm
1640      WHERE  disb.award_id = awd.award_id
1641      AND    awd.fund_id = fmast.fund_id
1642      AND    awd.base_id = base.base_id
1643      AND    fmast.ci_cal_type = bm.ci_cal_type
1644      AND    fmast.ci_sequence_number = bm.ci_sequence_number
1645      AND    awd.award_status ='ACCEPTED'
1646      AND    disb.trans_type   = 'P'
1647      AND    disb.show_on_bill   = 'Y'
1648      AND    base.person_id = p_person_id
1649      AND    TRUNC(disb.disb_date) <= TRUNC(p_end_date)
1650      AND    bm.award_year_status_code = 'O';
1651 
1652    l_n_person_id igs_fi_parties_v.person_id%TYPE;
1653    l_n_sum_pln_credits igf_aw_awd_disb.disb_net_amt%TYPE;
1654 
1655   BEGIN
1656 
1657     IF (p_person_id IS NULL OR p_end_date IS NULL)  THEN
1658           p_message_name := 'IGS_GE_INSUFFICIENT_PARAMETER';
1659           RETURN 0;
1660     END IF;
1661 
1662 
1663     IF TRUNC(p_end_date) > TRUNC(sysdate) THEN
1664         p_message_name := 'IGS_EN_ENDDT_LE_CURR_DT';
1665         RETURN 0;
1666     END IF;
1667 
1668     IF p_start_date IS NOT NULL THEN
1669         IF TRUNC(p_start_date) > TRUNC(p_end_date) THEN
1670           p_message_name := 'IGS_FI_END_DT_LESS_THAN_ST_DT';
1671           RETURN 0;
1672         END IF;
1673     END IF;
1674 
1675     OPEN c_person_id;
1676     FETCH c_person_id INTO l_n_person_id;
1677       IF c_person_id%NOTFOUND THEN
1678           p_message_name := 'IGS_AD_INVALID_PERSON';
1679           CLOSE c_person_id;
1680           RETURN 0;
1681       END IF;
1682     CLOSE c_person_id;
1683 
1684 
1685     IF p_start_date IS NULL THEN
1686        OPEN  c_sum_pln_till_date;
1687        FETCH c_sum_pln_till_date INTO l_n_sum_pln_credits;
1688        CLOSE c_sum_pln_till_date;
1689     ELSE
1690        OPEN  c_sum_pln_bw_dates;
1691        FETCH c_sum_pln_bw_dates INTO l_n_sum_pln_credits;
1692        CLOSE c_sum_pln_bw_dates;
1693     END IF;
1694 
1695     RETURN NVL(l_n_sum_pln_credits,0);
1696 
1697   EXCEPTION
1698     WHEN OTHERS THEN
1699       p_message_name := 'IGS_GE_UNHANDLED_EXCEPTION';
1700       RAISE;
1701   END finp_get_total_planned_credits;
1702 
1703 END igs_fi_gen_001;