1 PACKAGE BODY IGS_FI_VAL_FAR AS
2 /* $Header: IGSFI22B.pls 120.2 2005/08/29 02:36:37 appldev ship $ */
3
4 --Who When What
5 --gurprsin 29-Aug-2005 Bug #4564002, modified cursor c_far.
6 -- svuppala 03-Jun-2005 Enh# 3442712 - Modified finp_val_far_unique
7 --pathipat 10-Sep-2003 Enh 3108052 - Add Unit Sets to Rate Table
8 -- Modified finp_val_far_unique() - Added 2 new params
9 -- vvutukur 29-Nov-2002 Enh#2564986.Obsoleted function FINP_VAL_FAR_CUR.
10 -- npalanis 23-OCT-2002 Bug : 2608360
11 -- p_residency_status_id column is changed to p_residency_status_cd of
12 -- datatype varchar2.
13 --
14 --
15 -- npalanis 23-OCT-2002 Bug : 2547368
16 -- Defaulting arguments in funtion and procedure definitions removed
17 -- bug id : 1956374
18 -- sjadhav , 28-aug-2001
19 -- removed FUNCTION enrp_val_att_closed
20 --
21
22 -- Validate fee assessment rate can be created for the relation type.
23 FUNCTION finp_val_far_create(
24 p_fee_type IN VARCHAR2 ,
25 p_fee_cal_type IN VARCHAR2 ,
26 p_fee_ci_sequence_number IN NUMBER ,
27 p_s_relation_type IN VARCHAR2 ,
28 p_message_name OUT NOCOPY VARCHAR2 )
29 RETURN BOOLEAN AS
30 gv_other_detail VARCHAR2(255);
31 BEGIN -- finp_val_far_create
32 -- Validate if IGS_FI_FEE_AS_RATE records can be created.
33 -- When defined at FTCI level, they cannot also be
34 -- defined at FCFL level and vice-versa.
35 DECLARE
36 CURSOR c_far (
37 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE) IS
38 SELECT 'x'
39 FROM IGS_FI_FEE_AS_RATE
40 WHERE fee_type = p_fee_type AND
41 fee_cal_type = p_fee_cal_type AND
42 fee_ci_sequence_number = p_fee_ci_sequence_number AND
43 s_relation_type = cp_s_relation_type AND
44 logical_delete_dt IS NULL;
45 v_fcfl_exists VARCHAR2(1);
46 v_ftci_exists VARCHAR2(1);
47 BEGIN
48 -- Set the default message number
49 p_message_name := Null;
50 -- 1. Check Parameters
51 IF p_fee_type IS NULL OR
52 p_fee_cal_type IS NULL OR
53 p_fee_ci_sequence_number IS NULL OR
54 p_s_relation_type IS NULL THEN
55 RETURN TRUE;
56 END IF;
57 -- 2. If p_s_relation_type = 'FCFL', check if any IGS_FI_FEE_AS_RATE records
58 -- have been defined at the FTCI level. If so, return error.
59 IF p_s_relation_type = 'FCFL' THEN
60 OPEN c_far(
61 'FTCI');
62 FETCH c_far INTO v_ftci_exists;
63 IF c_far%FOUND THEN
64 CLOSE c_far;
65 p_message_name := 'IGS_FI_ASSRATES_NOT_DEFINED';
66 RETURN FALSE;
67 END IF;
68 CLOSE c_far;
69 END IF;
70 -- 3. If p_s_relation_type = 'FTCI', check if any IGS_FI_FEE_AS_RATE records
71 -- have been defined at the FCFL level. If so, return error.
72 IF p_s_relation_type = 'FTCI' THEN
73 OPEN c_far(
74 'FCFL');
75 FETCH c_far INTO v_fcfl_exists;
76 IF c_far%FOUND THEN
77 CLOSE c_far;
78 p_message_name := 'IGS_FI_ASSRATES_NOT_DFNED_FEE';
79 RETURN FALSE;
80 END IF;
81 CLOSE c_far;
82 END IF;
83 RETURN TRUE;
84 END;
85 END finp_val_far_create;
86 --
87 -- Validate IGS_PS_COURSE location code.
88 FUNCTION crsp_val_loc_cd(
89 p_location_cd IN VARCHAR2 ,
90 p_message_name OUT NOCOPY VARCHAR2 )
91 RETURN BOOLEAN AS
92 v_location_closed_ind IGS_AD_LOCATION.closed_ind%TYPE;
93 v_location_type IGS_AD_LOCATION.location_type%TYPE;
94 v_s_location_type IGS_AD_LOCATION_TYPE.s_location_type%TYPE;
95 CURSOR c_location_cd(
96 cp_location_cd IGS_AD_LOCATION.location_cd%TYPE) IS
97 SELECT IGS_AD_LOCATION.closed_ind,
98 location_type
99 FROM IGS_AD_LOCATION
100 WHERE location_cd = cp_location_cd;
101 CURSOR c_location_type(
102 cp_location_type IGS_AD_LOCATION_TYPE.location_type%TYPE) IS
103 SELECT s_location_type
104 FROM IGS_AD_LOCATION_TYPE
105 WHERE location_type = cp_location_type;
106 v_other_detail VARCHAR2(255);
107 BEGIN
108 -- This module based on the parameter performs validations
109 -- for for the location code within the CS and P subsystem
110 p_message_name := Null;
111 v_location_closed_ind := NULL;
112 -- Test the value of closed indicator
113 OPEN c_location_cd(
114 p_location_cd);
115 FETCH c_location_cd INTO v_location_closed_ind,
116 v_location_type;
117 CLOSE c_location_cd;
118 IF (v_location_closed_ind IS NULL) THEN
119 RETURN TRUE;
120 ELSE
121 IF(v_location_closed_ind = 'Y') THEN
122 p_message_name := 'IGS_PS_LOC_CODE_CLOSED';
123 RETURN FALSE;
124 END IF;
125 END IF;
126 -- Test the value of system location type
127 OPEN c_location_type(
128 v_location_type);
129 FETCH c_location_type INTO v_s_location_type;
130 CLOSE c_location_type;
131 IF (NVL(v_s_location_type,'NULL') <> 'CAMPUS') THEN
132 p_message_name := 'IGS_PS_LOC_NOT_TYPE_CAMPUS';
133 RETURN FALSE;
134 END IF;
135 RETURN TRUE;
136 END crsp_val_loc_cd;
137 --
138 -- Ensure govt_hecs_payment_option is specified.
139 FUNCTION finp_val_far_rqrd(
140 p_fee_type IN VARCHAR2 ,
141 p_govt_hecs_payment_option IN VARCHAR2 ,
142 p_message_name OUT NOCOPY VARCHAR2 )
143 RETURN BOOLEAN AS
144 gv_other_detail VARCHAR2(255);
145 BEGIN -- finp_val_far_rqrd
146 -- Validate if IGS_FI_FEE_TYPE.s_fee_type = 'HECS' or 'TUITION',
147 -- then IGS_FI_FEE_AS_RATE.govt_hecs_payment_option must be entered.
148 DECLARE
149 v_dummy VARCHAR2(1);
150 CURSOR c_ft IS
151 SELECT 'x'
152 FROM IGS_FI_FEE_TYPE ft
153 WHERE ft.fee_type = p_fee_type AND
154 ft.s_fee_type IN ('HECS','TUITION');
155 BEGIN
156 -- Set the default message number
157 p_message_name := Null;
158 -- 1. Check parameters :
159 IF (p_fee_type IS NULL) THEN
160 Return TRUE;
161 END IF;
162 -- 2. Determine the IGS_FI_FEE_TYPE.s_fee_type value.
163 OPEN c_ft;
164 FETCH c_ft INTO v_dummy;
165 IF c_ft%FOUND THEN --govt_hecs_payment_option must exist
166 IF (p_govt_hecs_payment_option IS NULL) THEN
167 CLOSE c_ft;
168 -- Government HECS Payment option must be specified for this Fee Type.
169 p_message_name := 'IGS_FI_GOVT_HECS_PYMNT';
170 RETURN FALSE;
171 END IF;
172 END IF;
173 CLOSE c_ft;
174 -- 3. Return no error:
175 RETURN TRUE;
176 EXCEPTION
177 WHEN OTHERS THEN
178 IF c_ft%ISOPEN THEN
179 CLOSE c_ft;
180 END IF;
181 RAISE;
182 END;
183 END finp_val_far_rqrd;
184 --
185 -- Validate fee assessment rate is unqiue.
186 FUNCTION finp_val_far_unique(
187 p_fee_type IN VARCHAR2 ,
188 p_fee_cal_type IN VARCHAR2 ,
189 p_fee_ci_sequence_number IN NUMBER ,
190 p_s_relation_type IN VARCHAR2 ,
191 p_rate_number IN NUMBER ,
192 p_fee_cat IN VARCHAR2 ,
193 p_location_cd IN VARCHAR2 ,
194 p_attendance_type IN VARCHAR2 ,
195 p_attendance_mode IN VARCHAR2 ,
196 p_govt_hecs_payment_option IN VARCHAR2 ,
197 p_govt_hecs_cntrbtn_band IN NUMBER ,
198 p_chg_rate IN NUMBER ,
199 p_unit_class IN VARCHAR2,
200 p_residency_status_cd IN VARCHAR2 ,
201 p_course_cd IN VARCHAR2 ,
202 p_version_number IN NUMBER ,
203 p_org_party_id IN NUMBER ,
204 p_class_standing IN VARCHAR2 ,
205 p_message_name OUT NOCOPY VARCHAR2 ,
206 p_unit_set_cd IN VARCHAR2,
207 p_us_version_number IN NUMBER,
208 p_unit_cd IN VARCHAR2 ,
209 p_unit_version_number IN NUMBER ,
210 p_unit_level IN VARCHAR2 ,
211 p_unit_type_id IN NUMBER ,
212 p_unit_mode IN VARCHAR2
213 ) RETURN BOOLEAN AS
214 /*****************************************************************************/
215 --Change History
216 --Who When What
217 --gurprsin 29-Aug-2005 Bug #4564002, modified cursor c_far
218 --pathipat 10-Sep-2003 Enh 3108052 - Add Unit Sets to Rate Table
219 -- Modified finp_val_far_unique() - Added 2 new params
220 -- Modified cursor c_far
221 /*****************************************************************************/
222 gv_other_detail VARCHAR2(255);
223 BEGIN -- finp_val_far_unique
224 -- Validate if IGS_FI_FEE_AS_RATE.location_cd, IGS_FI_FEE_AS_RATE.attendance_type,
225 -- IGS_FI_FEE_AS_RATE.attendance_mode, IGS_FI_FEE_AS_RATE.govt_hecs_payment_option
226 -- and IGS_FI_FEE_AS_RATE.govt_hecs_cntrbtn_band form a unique combination.
227 -- Required as all five fields are optional.
228 DECLARE
229 v_dummy VARCHAR2(1);
230 CURSOR c_far IS
231 SELECT 'x'
232 FROM igs_fi_fee_as_rate far
233 WHERE far.fee_type = p_fee_type
234 AND far.fee_cal_type = p_fee_cal_type
235 AND far.fee_ci_sequence_number = p_fee_ci_sequence_number
236 AND far.s_relation_type = p_s_relation_type
237 AND far.rate_number <> NVL(p_rate_number,0)
238 AND NVL(far.fee_cat,'NULL') = NVL(p_fee_cat,'NULL')
239 AND NVL(far.location_cd,'NULL') = NVL(p_location_cd,'NULL')
240 AND NVL(far.attendance_type,'NULL') = NVL(p_attendance_type,'NULL')
241 AND NVL(far.attendance_mode,'NULL') = NVL(p_attendance_mode,'NULL')
242 AND NVL(far.govt_hecs_payment_option,'NULL') = NVL(p_govt_hecs_payment_option,'NULL')
243 AND NVL(far.govt_hecs_cntrbtn_band,0) = NVL(p_govt_hecs_cntrbtn_band,0)
244 AND NVL(far.chg_rate,0) = NVL(p_chg_rate,0)
245 -- AND NVL(far.unit_class,'NULL') = NVL(p_unit_class,'NULL')
246 AND far.logical_delete_dt IS NULL
247 AND NVL(far.residency_status_cd,0) = NVL(p_residency_status_cd,0)
248 AND NVL(far.course_cd,'NULL') = NVL(p_course_cd,'NULL')
249 AND NVL(far.version_number,0) = NVL(p_version_number,0)
250 AND NVL(far.org_party_id,0) = NVL(p_org_party_id,0)
251 --Bug #4564002, passed p_class_standing instead of class_standing
252 AND NVL(far.class_standing,'NULL') = NVL(p_class_standing,'NULL')
253 AND NVL(far.unit_set_cd,'NULL') = NVL(p_unit_set_cd,'NULL')
254 AND NVL(far.us_version_number,0) = NVL(p_us_version_number,0)
255 AND NVL(FAR.UNIT_TYPE_ID,0) = NVL(P_UNIT_TYPE_ID,0)
256 AND (( FAR.UNIT_CLASS = P_UNIT_CLASS) OR (FAR.UNIT_CLASS IS NULL AND P_UNIT_CLASS IS NULL))
257 AND ((FAR.UNIT_MODE = P_UNIT_MODE) OR (FAR.UNIT_MODE IS NULL AND P_UNIT_MODE IS NULL))
258 AND ((FAR.UNIT_CD = P_UNIT_CD) OR (FAR.UNIT_CD IS NULL AND P_UNIT_CD IS NULL))
259 AND NVL(FAR.UNIT_VERSION_NUMBER,0) = NVL(P_UNIT_VERSION_NUMBER,0)
260 AND ((FAR.UNIT_LEVEL = P_UNIT_LEVEL) OR (FAR.UNIT_LEVEL IS NULL AND P_UNIT_LEVEL IS NULL))
261 ;
262
263 BEGIN
264 -- Set the default message number
265 p_message_name := Null;
266 -- 1. Check parameters :
267 IF (p_fee_type IS NULL OR
268 p_fee_cal_type IS NULL OR
269 p_fee_ci_sequence_number IS NULL OR
270 p_s_relation_type IS NULL) THEN
271 RETURN TRUE;
272 END IF;
273 -- 2. Validate that the current record is unique.
274 -- Note : rate_number may be passed as a null value if the current
275 -- record has not been committed.
276 OPEN c_far;
277 FETCH c_far INTO v_dummy;
278 IF c_far%FOUND THEN --duplicate condition
279 CLOSE c_far;
280 p_message_name := 'IGS_GE_RECORD_ALREADY_EXISTS';
281 RETURN FALSE;
282 END IF;
283 CLOSE c_far;
284 -- 3. Return no error:
285 RETURN TRUE;
286 EXCEPTION
287 WHEN OTHERS THEN
288 IF c_far%ISOPEN THEN
292 END;
289 CLOSE c_far;
290 END IF;
291 RAISE;
293 END finp_val_far_unique;
294
295 --
296 -- Validate fee assessment rate order of precednce.
297 FUNCTION finp_val_far_order(
298 p_fee_type IN VARCHAR2 ,
299 p_fee_cal_type IN VARCHAR2 ,
300 p_fee_ci_sequence_number IN NUMBER ,
301 p_s_relation_type IN VARCHAR2 ,
302 p_rate_number IN NUMBER ,
303 p_fee_cat IN VARCHAR2 ,
304 p_location_cd IN VARCHAR2 ,
305 p_attendance_type IN VARCHAR2 ,
306 p_attendance_mode IN VARCHAR2 ,
307 p_govt_hecs_payment_option IN VARCHAR2 ,
308 p_govt_hecs_cntrbtn_band IN NUMBER ,
309 p_order_of_precedence IN NUMBER ,
310 p_message_name OUT NOCOPY VARCHAR2 )
311 RETURN BOOLEAN AS
312 gv_other_detail VARCHAR2(255);
313 BEGIN -- finp_val_far_order
314 -- Validate IGS_FI_FEE_AS_RATE.order_of_precedence exists when one or more of
315 -- IGS_FI_FEE_AS_RATE.attendance_type, IGS_FI_FEE_AS_RATE.attendance_mode or
316 -- IGS_FI_FEE_AS_RATE.location_cd are specified, resulting in a non-mutually
317 -- exclusive fee assessment rate.
318 -- The mutually exclusive combinations are :
319 -- only location code is defined across all related rates
320 -- only attendance type is defined across all related rates
321 -- only attendance mode is defined across all related rates
322 -- only location code and attendance type are defined across all related
323 -- rates
324 -- location code, attendance type and attendance mode are defined across
325 -- all related rates
326 -- only location code and attendance mode are defined across all related
327 -- rates
328 -- only attendance type and attendance mode are defined across all
329 -- related rates
330 -- All other combinations may result in non-mutually exclusive fee assessment
331 -- rates, so an order_of_precedence value is required.
332 DECLARE
333 cst_prorata CONSTANT VARCHAR2(8) := 'PRO RATA';
334 v_far_1_rec_found BOOLEAN := FALSE;
335 v_far_2_rec_found BOOLEAN := FALSE;
336 v_far_3_rec_found BOOLEAN := FALSE;
337 v_far_4_rec_found BOOLEAN := FALSE;
338 v_far_5_rec_found BOOLEAN := FALSE;
339 v_far_6_rec_found BOOLEAN := FALSE;
340 v_far_7_rec_found BOOLEAN := FALSE;
341 v_far_8_rec_found BOOLEAN := FALSE;
342 v_far_9_rec_found BOOLEAN := FALSE;
343 CURSOR c_far_1 (
344 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
345 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
346 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
347 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
348 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
349 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
350 SELECT far.order_of_precedence
351 FROM IGS_FI_FEE_AS_RATE far
352 WHERE far.fee_type = cp_fee_type AND
353 far.fee_cal_type = cp_fee_cal_type AND
354 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
355 far.s_relation_type = cp_s_relation_type AND
356 far.rate_number <> cp_rate_number AND
357 far.logical_delete_dt IS NULL AND
358 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
359 ((far.location_cd IS NULL) OR
360 (far.attendance_mode IS NOT NULL OR far.attendance_type IS NOT NULL));
361 CURSOR c_far_2 (
362 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
363 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
364 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
365 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
366 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
367 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
368 SELECT far.order_of_precedence
369 FROM IGS_FI_FEE_AS_RATE far
370 WHERE far.fee_type = cp_fee_type AND
371 far.fee_cal_type = cp_fee_cal_type AND
372 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
373 far.s_relation_type = cp_s_relation_type AND
374 far.rate_number <> cp_rate_number AND
375 far.logical_delete_dt IS NULL AND
376 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
377 ((far.location_cd IS NULL OR far.attendance_mode IS NULL) OR
378 (far.attendance_type IS NOT NULL));
379 CURSOR c_far_3 (
380 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
384 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
381 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
382 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
383 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
385 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
386 SELECT far.order_of_precedence
387 FROM IGS_FI_FEE_AS_RATE far
388 WHERE far.fee_type = cp_fee_type AND
389 far.fee_cal_type = cp_fee_cal_type AND
390 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
391 far.s_relation_type = cp_s_relation_type AND
392 far.rate_number <> cp_rate_number AND
393 far.logical_delete_dt IS NULL AND
394 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
395 ((far.location_cd IS NULL OR far.attendance_type IS NULL) OR
396 (far.attendance_mode IS NOT NULL));
397 CURSOR c_far_4 (
398 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
399 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
400 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
401 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
402 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
403 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
404 SELECT far.order_of_precedence
405 FROM IGS_FI_FEE_AS_RATE far
406 WHERE far.fee_type = cp_fee_type AND
407 far.fee_cal_type = cp_fee_cal_type AND
408 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
409 far.s_relation_type = cp_s_relation_type AND
410 far.rate_number <> cp_rate_number AND
411 far.logical_delete_dt IS NULL AND
412 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
413 ((far.location_cd IS NULL OR
414 far.attendance_mode IS NULL) OR
415 (far.attendance_type IS NULL));
416 CURSOR c_far_5 (
417 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
418 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
419 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
420 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
421 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
422 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
423 SELECT far.order_of_precedence
424 FROM IGS_FI_FEE_AS_RATE far
425 WHERE far.fee_type = cp_fee_type AND
426 far.fee_cal_type = cp_fee_cal_type AND
427 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
428 far.s_relation_type = cp_s_relation_type AND
429 far.rate_number <> cp_rate_number AND
430 far.logical_delete_dt IS NULL AND
431 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
432 ((far.attendance_type IS NULL) OR
433 (far.location_cd IS NOT NULL OR far.attendance_mode IS NOT NULL));
434 CURSOR c_far_6 (
435 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
436 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
437 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
438 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
439 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
440 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
441 SELECT far.order_of_precedence
442 FROM IGS_FI_FEE_AS_RATE far
443 WHERE far.fee_type = cp_fee_type AND
444 far.fee_cal_type = cp_fee_cal_type AND
445 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
446 far.s_relation_type = cp_s_relation_type AND
447 far.rate_number <> cp_rate_number AND
448 far.logical_delete_dt IS NULL AND
449 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
450 ((far.attendance_mode IS NULL OR far.attendance_type IS NULL) OR
451 (far.location_cd IS NOT NULL));
452 CURSOR c_far_7 (
453 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
454 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
458 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE) IS
455 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
456 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
457 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
459 SELECT far.order_of_precedence
460 FROM IGS_FI_FEE_AS_RATE far
461 WHERE far.fee_type = cp_fee_type AND
462 far.fee_cal_type = cp_fee_cal_type AND
463 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
464 far.s_relation_type = cp_s_relation_type AND
465 far.rate_number <> cp_rate_number AND
466 far.logical_delete_dt IS NULL AND
467 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
468 ((far.attendance_mode IS NULL) OR
469 (far.location_cd IS NOT NULL OR far.attendance_type IS NOT NULL));
470 CURSOR c_far_8 (
471 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
472 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
473 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
474 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
475 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
476 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE,
477 cp_order_of_precedence IGS_FI_FEE_AS_RATE.order_of_precedence%TYPE) IS
478 SELECT far.order_of_precedence
479 FROM IGS_FI_FEE_AS_RATE far
480 WHERE far.fee_type = cp_fee_type AND
481 far.fee_cal_type = cp_fee_cal_type AND
482 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
483 far.s_relation_type = cp_s_relation_type AND
484 far.rate_number <> cp_rate_number AND
485 far.logical_delete_dt IS NULL AND
486 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
487 far.order_of_precedence = cp_order_of_precedence;
488 CURSOR c_far_9 (
489 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE,
490 cp_fee_cal_type IGS_FI_FEE_AS_RATE.fee_cal_type%TYPE,
491 cp_fee_ci_sequence_number IGS_FI_FEE_AS_RATE.fee_ci_sequence_number%TYPE,
492 cp_s_relation_type IGS_FI_FEE_AS_RATE.s_relation_type%TYPE,
493 cp_rate_number IGS_FI_FEE_AS_RATE.rate_number%TYPE,
494 cp_fee_cat IGS_FI_FEE_AS_RATE.fee_cat%TYPE,
495 cp_location_cd IGS_FI_FEE_AS_RATE.location_cd%TYPE,
496 cp_attendance_mode IGS_FI_FEE_AS_RATE.attendance_mode%TYPE,
497 cp_attendance_type IGS_FI_FEE_AS_RATE.attendance_type%TYPE,
498 cp_govt_hecs_payment_option IGS_FI_FEE_AS_RATE.govt_hecs_payment_option%TYPE,
499 cp_govt_hecs_cntrbtn_band IGS_FI_FEE_AS_RATE.govt_hecs_cntrbtn_band%TYPE) IS
500 SELECT far.order_of_precedence
501 FROM IGS_FI_FEE_AS_RATE far
502 WHERE far.fee_type = cp_fee_type AND
503 far.fee_cal_type = cp_fee_cal_type AND
504 far.fee_ci_sequence_number = cp_fee_ci_sequence_number AND
505 far.s_relation_type = cp_s_relation_type AND
506 far.rate_number <> cp_rate_number AND
507 far.logical_delete_dt IS NULL AND
508 NVL(far.fee_cat,'NULL') = NVL(cp_fee_cat,'NULL') AND
509 NVL(far.location_cd,'NULL') = NVL(cp_location_cd,'NULL') AND
510 NVL(far.attendance_mode,'NULL') = NVL(cp_attendance_mode,'NULL') AND
511 NVL(far.attendance_type,'NULL') = NVL(cp_attendance_type,'NULL') AND
512 NVL(far.govt_hecs_payment_option,'X') =
513 NVL(cp_govt_hecs_payment_option,'X') AND
514 NVL(far.govt_hecs_cntrbtn_band,0) = nvl(cp_govt_hecs_cntrbtn_band,0);
515 BEGIN
516 p_message_name := Null;
517 -- Check parameters
518 IF(p_fee_type IS NULL OR
519 p_fee_cal_type IS NULL OR
520 p_fee_ci_sequence_number IS NULL OR
521 p_s_relation_type IS NULL OR
522 p_rate_number IS NULL) THEN
523 Return TRUE;
524 END IF;
525 -- Validate that order_of_precedence is specified if required
526 -- (ie. if varying combinations of location_cd, attendance_type and
527 -- attendance_mode have been specified).
528 IF(p_order_of_precedence IS NULL) THEN
529 IF(p_location_cd IS NOT NULL) THEN
530 IF(p_attendance_type IS NULL) THEN
531 IF(p_attendance_mode IS NULL) then
532 -- Check that other records only have location_cd specified.
536 p_fee_cal_type,
533 -- If not, an order of precedence value is required.
534 FOR v_far_1_rec IN c_far_1(
535 p_fee_type,
537 p_fee_ci_sequence_number,
538 p_s_relation_type,
539 p_rate_number,
540 p_fee_cat) LOOP
541 v_far_1_rec_found := TRUE;
542 END LOOP;
543 ELSE -- p_attendance_mode IS NOT NULL
544 -- Check location and mode.
545 -- Check that other records only have location_cd and attendance_mode
546 -- specified. If not, an order of precedence value is required.
547 FOR v_far_2_rec IN c_far_2(
548 p_fee_type,
549 p_fee_cal_type,
550 p_fee_ci_sequence_number,
551 p_s_relation_type,
552 p_rate_number,
553 p_fee_cat) LOOP
554 v_far_2_rec_found := TRUE;
555 END LOOP;
556 END IF;
557 ELSE -- p_attendance_type IS NOT NULL
558 IF(p_attendance_mode IS NULL) THEN
559 -- Check location and type.
560 -- Check that other records only have location_cd and attendance_type
561 -- specified. If not, an order of precedence value is required.
562 FOR v_far_3_rec IN c_far_3(
563 p_fee_type,
564 p_fee_cal_type,
565 p_fee_ci_sequence_number,
566 p_s_relation_type,
567 p_rate_number,
568 p_fee_cat) LOOP
569 v_far_3_rec_found := TRUE;
570 END LOOP;
571 ELSE -- p_attendance_mode IS NOT NULL
572 -- Check_loc_type_and_mode.
573 -- Check that other records all have location_cd, attendance_type
574 -- and attendance_mode specified. If not, an order of precedence value
575 -- is required.
576 FOR v_far_4_rec IN c_far_4(
577 p_fee_type,
578 p_fee_cal_type,
579 p_fee_ci_sequence_number,
580 p_s_relation_type,
581 p_rate_number,
582 p_fee_cat) LOOP
583 v_far_4_rec_found := TRUE;
584 END LOOP;
585 END IF;
586 END IF;
587 ELSE -- p_location_cd IS NULL
588 IF(p_attendance_type IS NOT NULL) THEN
589 IF(p_attendance_mode IS NULL) THEN
590 -- Check_type.
591 -- Check that other records only have attendance_type specified.
592 -- If not, an order of precedence value is required.
593 FOR v_far_5_rec IN c_far_5(
594 p_fee_type,
595 p_fee_cal_type,
596 p_fee_ci_sequence_number,
597 p_s_relation_type,
598 p_rate_number,
599 p_fee_cat) LOOP
600 v_far_5_rec_found := TRUE;
601 END LOOP;
602 ELSE -- p_attendance_mode IS NOT NULL
603 -- Check_type_and_mode.
604 -- Check that other records only have attendance_type and attendance_mode
605 -- specified. If not, an order of precedence value is required.
606 FOR v_far_6_rec IN c_far_6(
607 p_fee_type,
608 p_fee_cal_type,
612 p_fee_cat) LOOP
609 p_fee_ci_sequence_number,
610 p_s_relation_type,
611 p_rate_number,
613 v_far_6_rec_found := TRUE;
614 END LOOP;
615 END IF;
616 ELSE -- p_attendance_type IS NULL
617 IF(p_attendance_mode IS NOT NULL) THEN
618 -- Check_mode.
619 -- Check that other records only have attendance_mode specified.
620 -- If not, an order of precedence value is required.
621 FOR v_far_7_rec IN c_far_7(
622 p_fee_type,
623 p_fee_cal_type,
624 p_fee_ci_sequence_number,
625 p_s_relation_type,
626 p_rate_number,
627 p_fee_cat) LOOP
628 v_far_7_rec_found := TRUE;
629 END LOOP;
630 END IF;
631 END IF;
632 END IF;
633 -- Now validate if order of precedence is required for cases where identical
634 -- records exist, except for the charge rate values.
635 FOR v_far_9_rec IN c_far_9(
636 p_fee_type,
637 p_fee_cal_type,
638 p_fee_ci_sequence_number,
639 p_s_relation_type,
640 p_rate_number,
641 p_fee_cat,
642 p_location_cd,
643 p_attendance_mode,
644 p_attendance_type,
645 p_govt_hecs_payment_option,
646 p_govt_hecs_cntrbtn_band) LOOP
647 v_far_9_rec_found := TRUE;
648 END LOOP;
649 ELSE -- p_order_of_precedence IS NOT NULL
650 -- Check_order_uniqueness.
651 -- As the order_of_precedence has been specified,
652 -- validate that it is unique from other order_of_precedence
653 -- values for matching IGS_FI_FEE_AS_RATE records of the same FTCI/FCFL parent.
654 FOR v_far_8_rec IN c_far_8(
655 p_fee_type,
656 p_fee_cal_type,
657 p_fee_ci_sequence_number,
658 p_s_relation_type,
659 p_rate_number,
660 p_fee_cat,
661 p_order_of_precedence) LOOP
662 v_far_8_rec_found := TRUE;
663 END LOOP;
664 END IF;
665 IF(v_far_1_rec_found = TRUE OR
666 v_far_2_rec_found = TRUE OR
667 v_far_3_rec_found = TRUE OR
668 v_far_4_rec_found = TRUE OR
669 v_far_5_rec_found = TRUE OR
670 v_far_6_rec_found = TRUE OR
671 v_far_7_rec_found = TRUE) THEN
672 p_message_name := 'IGS_FI_ORDER_OF_PREC_SPECIFY';
673 RETURN FALSE;
674 END IF;
675 IF (v_far_9_rec_found = TRUE) THEN
676 p_message_name := 'IGS_FI_ORDEROF_PREC_SPECIFY';
677 RETURN FALSE;
678 END IF;
679 IF(v_far_8_rec_found = TRUE) THEN
680 p_message_name := 'IGS_FI_ORDER_OF_PREC_CONFLICT';
681 RETURN FALSE;
682 END IF;
683 RETURN TRUE;
684 END;
685 END finp_val_far_order;
686 --
687 -- Ensure fee assessment rate fields can be populated.
688 FUNCTION finp_val_far_defntn(
689 p_fee_type IN VARCHAR2 ,
690 p_location_cd IN VARCHAR2 ,
691 p_attendance_type IN VARCHAR2 ,
692 p_attendance_mode IN VARCHAR2 ,
693 p_govt_hecs_payment_option IN VARCHAR2 ,
694 p_govt_hecs_cntrbtn_band IN NUMBER ,
695 p_message_name OUT NOCOPY VARCHAR2 )
696 RETURN BOOLEAN AS
697 gv_other_detail VARCHAR2(255);
698 BEGIN -- finp_val_far_defntn
699 -- Validate if IGS_FI_FEE_AS_RATE.location_cd, IGS_FI_FEE_AS_RATE.attendance_type,
700 -- IGS_FI_FEE_AS_RATE.attendance_mode, IGS_FI_FEE_AS_RATE.govt_hecs_payment_option
701 -- and IGS_FI_FEE_AS_RATE.govt_hecs_cntrbtn_band are allowed to be specified
702 -- or not, depending on fee_type value.
703 DECLARE
704 cst_other CONSTANT VARCHAR2(10) := 'OTHER';
705 cst_tutnfee CONSTANT VARCHAR2(10) := 'TUTNFEE';
706 cst_hecs CONSTANT VARCHAR2(10) := 'HECS';
707 cst_tuition CONSTANT VARCHAR2(10) := 'TUITION';
708 CURSOR c_ft(
709 cp_fee_type IGS_FI_FEE_AS_RATE.fee_type%TYPE) IS
710 SELECT s_fee_type
714 BEGIN
711 FROM IGS_FI_FEE_TYPE
712 WHERE fee_type = cp_fee_type;
713 v_ft_rec c_ft%ROWTYPE;
715 -- Set the default message number
716 p_message_name := Null;
717 -- Check parameters
718 IF p_fee_type IS NULL OR
719 (p_location_cd IS NULL AND
720 p_attendance_type IS NULL AND
721 p_attendance_mode IS NULL AND
722 p_govt_hecs_payment_option IS NULL AND
723 p_govt_hecs_cntrbtn_band IS NULL) THEN
724 RETURN TRUE;
725 END IF;
726 -- Cursor handling
727 OPEN c_ft (p_fee_type);
728 FETCH c_ft INTO v_ft_rec;
729 IF c_ft%NOTFOUND THEN
730 CLOSE c_ft;
731 RETURN TRUE;
732 END IF;
733 CLOSE c_ft;
734 -- Validate the IGS_FI_FEE_TYPE to see if it is permissible for particular values to
735 -- be specified.
736 -- ? When IGS_FI_FEE_TYPE.s_fee_type = ?OTHER?, govt_hecs_payment_option and
737 -- govt_hecs_cntrbtn_band cannot be specified.
738 -- ? When IGS_FI_FEE_TYPE.s_fee_type = ?HECS?, location_cd, attendance_type and
739 -- attendance_mode cannot be specified.
740 -- ? When IGS_FI_FEE_TYPE.s_fee_type = ?TUITION?, govt_hecs_cntrbtn_band
741 -- cannot be specified.
742 IF v_ft_rec.s_fee_type in ( cst_other,cst_tutnfee) THEN
743 IF p_govt_hecs_payment_option IS NOT NULL THEN
744 p_message_name := 'IGS_FI_GOVTHECS_PYMTOP_OTHER';
745 RETURN FALSE;
746 ELSIF p_govt_hecs_cntrbtn_band IS NOT NULL THEN
747 p_message_name := 'IGS_FI_GOVTHECS_BAND_OTHER';
748 RETURN FALSE;
749 END IF;
750 ELSIF v_ft_rec.s_fee_type = cst_hecs THEN
751 IF p_location_cd IS NOT NULL THEN
752 p_message_name := 'IGS_FI_LOCATION_NOTBE_HECS';
753 RETURN FALSE;
754 ELSIF p_attendance_type IS NOT NULL THEN
755 p_message_name := 'IGS_FI_ATTTYPE_FEETYPE_HECS';
756 RETURN FALSE;
757 ELSIF p_attendance_mode IS NOT NULL THEN
758 p_message_name := 'IGS_FI_ATTMODE_FEETYPE_HECS';
759 RETURN FALSE;
760 END IF;
761 ELSIF v_ft_rec.s_fee_type = cst_tuition THEN
762 IF p_govt_hecs_cntrbtn_band IS NOT NULL THEN
763 p_message_name := 'IGS_FI_GOVTHECS_BAND_OTHER';
764 RETURN FALSE;
765 END IF;
766 END IF;
767 -- Return the default value
768 RETURN TRUE;
769 END;
770 END finp_val_far_defntn;
771 --
772 -- Validate the attendance mode closed indicator.
773 FUNCTION enrp_val_am_closed(
774 p_attend_mode IN VARCHAR2 ,
775 p_message_name OUT NOCOPY VARCHAR2 )
776 RETURN BOOLEAN AS
777 BEGIN
778 DECLARE
779 v_other_detail VARCHAR2(255);
780 v_closed_ind CHAR;
781 CURSOR c_attend_mode IS
782 SELECT closed_ind
783 FROM IGS_EN_ATD_MODE
784 WHERE attendance_mode = p_attend_mode;
785 BEGIN
786 -- Check if the attendance_mode is closed
787 p_message_name := Null;
788 OPEN c_attend_mode;
789 FETCH c_attend_mode INTO v_closed_ind;
790 IF (c_attend_mode%NOTFOUND) THEN
791 CLOSE c_attend_mode;
792 RETURN TRUE;
793 END IF;
794 IF (v_closed_ind = 'Y') THEN
795 p_message_name := 'IGS_PS_ATTEND_MODE_CLOSED';
796 CLOSE c_attend_mode;
797 RETURN FALSE;
798 END IF;
799 -- record is not closed
800 CLOSE c_attend_mode;
801 RETURN TRUE;
802 END;
803 END enrp_val_am_closed;
804 --
805 -- Validate if IGS_FI_GOVT_HEC_CNTB.govt_hecs_contrbn_band is closed.
806 FUNCTION finp_val_ghc_closed(
807 p_govt_hecs_cntrbtn_band IN NUMBER ,
808 p_message_name OUT NOCOPY VARCHAR2 )
809 RETURN BOOLEAN AS
810 gv_other_detail VARCHAR2(255);
811 BEGIN -- finp_val_ghc_closed
812 -- Validate if IGS_FI_GOVT_HEC_CNTB.govt_hecs_cntrbtn_band is closed.
813 DECLARE
814 CURSOR c_ghc(
815 cp_govt_hecs_cntrbtn_band
816 IGS_FI_GOVT_HEC_CNTB.govt_hecs_cntrbtn_band%TYPE) IS
817 SELECT closed_ind
818 FROM IGS_FI_GOVT_HEC_CNTB
819 WHERE govt_hecs_cntrbtn_band = cp_govt_hecs_cntrbtn_band;
820 v_ghc_rec c_ghc%ROWTYPE;
821 cst_yes CONSTANT CHAR := 'Y';
822 BEGIN
823 -- Set the default message number
824 p_message_name := Null;
825 -- Cursor handling
826 OPEN c_ghc(p_govt_hecs_cntrbtn_band);
827 FETCH c_ghc INTO v_ghc_rec;
828 IF c_ghc%NOTFOUND THEN
829 CLOSE c_ghc;
830 RETURN TRUE;
831 END IF;
832 CLOSE c_ghc;
833 IF v_ghc_rec.closed_ind = cst_yes THEN
834 p_message_name := 'IGS_FI_GOVTHECS_CONTRIB_CLS';
838 RETURN TRUE;
835 RETURN FALSE;
836 END IF;
837 -- Return the default value
839 END;
840 END finp_val_ghc_closed;
841
842 --
843 -- Validate the unit_class closed indicator.
844 /******************************************************************
845
846 Created By: Lakshmi.Priyadharshini
847
848 Date Created By: 08-09-2000
849
850 Purpose To Calculate Fee at Unit Class level.
851
852 Known limitations,enhancements,remarks:
853
854 Change History
855
856 Who When What
857
858 ******************************************************************/
859
860 FUNCTION unit_class_closed(
861 p_unit_class IN VARCHAR2 ,
862 p_message_name OUT NOCOPY VARCHAR2 )
863 RETURN BOOLEAN AS
864 BEGIN
865 DECLARE
866 v_other_detail VARCHAR2(255);
867 v_closed_ind CHAR;
868 CURSOR c_unit_class IS
869 SELECT closed_ind
870 FROM IGS_AS_UNIT_CLASS
871 WHERE unit_class = p_unit_class;
872 BEGIN
873 -- Check if the unit_class is closed
874 p_message_name := Null;
875 OPEN c_unit_class;
876 FETCH c_unit_class INTO v_closed_ind;
877 IF (c_unit_class%NOTFOUND) THEN
878 CLOSE c_unit_class;
879 RETURN TRUE;
880 END IF;
881 IF (v_closed_ind = 'Y') THEN
882 p_message_name := 'IGS_FI_UNIT_CLASS_CLOSED';
883 CLOSE c_unit_class;
884 RETURN FALSE;
885 END IF;
886 -- record is not closed
887 CLOSE c_unit_class;
888 RETURN TRUE;
889 END;
890 END unit_class_closed;
891 --
892 -- Validate if IGS_FI_GOV_HEC_PA_OP.govt_hecs_payment_opt is closed.
893 FUNCTION finp_val_ghpo_closed(
894 p_govt_hecs_payment_option IN VARCHAR2 ,
895 p_message_name OUT NOCOPY VARCHAR2 )
896 RETURN BOOLEAN AS
897 gv_other_detail VARCHAR2(255);
898 BEGIN -- finp_val_ghpo_closed
899 -- Validate if IGS_FI_GOV_HEC_PA_OP.govt_hecs_payment_option is closed.
900 DECLARE
901 CURSOR c_ghpo(
902 cp_govt_hecs_payment_option
903 IGS_FI_GOV_HEC_PA_OP.govt_hecs_payment_option%TYPE) IS
904 SELECT closed_ind
905 FROM IGS_FI_GOV_HEC_PA_OP
906 WHERE govt_hecs_payment_option = cp_govt_hecs_payment_option;
907 v_ghpo_rec c_ghpo%ROWTYPE;
908 cst_yes CONSTANT CHAR := 'Y';
909 BEGIN
910 -- Set the default message number
911 p_message_name := Null;
912 -- Cursor handling
913 OPEN c_ghpo(p_govt_hecs_payment_option);
914 FETCH c_ghpo INTO v_ghpo_rec;
915 IF c_ghpo%NOTFOUND THEN
916 CLOSE c_ghpo;
917 RETURN TRUE;
918 END IF;
919 CLOSE c_ghpo;
920 IF v_ghpo_rec.closed_ind = cst_yes THEN
921 p_message_name := 'IGS_EN_GOVT_HECS_PAY_OPT_CLOS';
922 RETURN FALSE;
923 END IF;
924 -- Return the default value
925 RETURN TRUE;
926 END;
927 END finp_val_ghpo_closed;
928 --
929 -- Ensure fee assessment rate can be created.
930 FUNCTION finp_val_far_ins(
931 p_fee_type IN VARCHAR2 ,
932 p_message_name OUT NOCOPY VARCHAR2 )
933 RETURN BOOLEAN AS
934 gv_other_detail VARCHAR2(255);
935 BEGIN -- finp_val_far_ins
936 -- Validate IGS_FI_FEE_AS_RATE.fee_type. If IGS_FI_FEE_TYPE.s_fee_trigger_cat = ?INSTITUTN?
937 -- or IGS_FI_FEE_TYPE.s_fee_type = ?HECS?, then assessment rates can only be defined
938 -- against fee_type_cal_instances.
939 DECLARE
940 CURSOR c_ft(
941 cp_fee_type IGS_FI_FEE_TYPE.fee_type%TYPE) IS
942 SELECT s_fee_trigger_cat,
943 s_fee_type
944 FROM IGS_FI_FEE_TYPE
945 WHERE fee_type = cp_fee_type;
946 v_ft_rec c_ft%ROWTYPE;
947 cst_institutn CONSTANT VARCHAR2(10) := 'INSTITUTN';
948 cst_hecs CONSTANT VARCHAR2(5) := 'HECS';
949 BEGIN
950 -- Set the default message number
951 p_message_name := Null;
952 -- Check parameters
953 IF p_fee_type IS NULL THEN
954 RETURN TRUE;
955 END IF;
956 -- Get the system fee trigger category of the fee_type.
957 OPEN c_ft (p_fee_type);
958 FETCH c_ft INTO v_ft_rec;
959 IF c_ft%NOTFOUND THEN
960 CLOSE c_ft;
961 RETURN TRUE;
962 END IF;
963 CLOSE c_ft;
964 IF v_ft_rec.s_fee_trigger_cat = cst_institutn THEN
965 p_message_name := 'IGS_FI_ASSRATE_ND_INSTITUTN';
966 RETURN FALSE;
967 END IF;
968 IF v_ft_rec.s_fee_type = cst_hecs THEN
969 p_message_name := 'IGS_FI_ASSRATE_ND_HECS';
970 RETURN FALSE;
971 END IF;
972 -- Return the default value
973 RETURN TRUE;
974 END;
975 END finp_val_far_ins;
976 --
977
978 --
979 -- Ensure fee ass rate relations are valid.
980 FUNCTION finp_val_far_rltn(
981 p_s_relation_type IN VARCHAR2 ,
982 p_fee_cat IN VARCHAR2 ,
983 p_message_name OUT NOCOPY VARCHAR2 )
984 RETURN BOOLEAN AS
985 gv_other_detail VARCHAR2(255);
986 BEGIN -- finp_val_far_relation
987 -- Validate IGS_FI_FEE_AS_RATE.fee_cat is only specified for the appropriate
988 -- IGS_FI_FEE_AS_RATE.s_relation_type
989 DECLARE
990 BEGIN
991 --- Set the default message number
995 RETURN TRUE;
992 p_message_name := Null;
993 -- Validate parameter values
994 IF p_s_relation_type IS NULL THEN
996 ELSIF p_s_relation_type NOT IN('FTCI','FCFL') THEN
997 p_message_name := 'IGS_FI_FINP_VAL_FAR_RLTN_CALL';
998 RETURN FALSE;
999 END IF;
1000 -- Validate that for relation type FTCI, fee_cat is NULL
1001 IF p_s_relation_type = 'FTCI' THEN
1002 IF p_fee_cat IS NULL THEN
1003 RETURN TRUE;
1004 ELSE
1005 p_message_name := 'IGS_FI_FEECAT_NULL_FEEASSRATE';
1006 RETURN FALSE;
1007 END IF;
1008 END IF;
1009 -- Validate that for relation type 'FCFL', fee_cat is NOT NULL
1010 IF p_s_relation_type = 'FCFL' THEN
1011 IF p_fee_cat IS NOT NULL THEN
1012 RETURN TRUE;
1013 ELSE
1014 p_message_name := 'IGS_FI_FEECAT_SPECIFY_FEEASS';
1015 RETURN FALSE;
1016 END IF;
1017 END IF;
1018 RETURN TRUE;
1019 END;
1020 END finp_val_far_rltn;
1021
1022 END IGS_FI_VAL_FAR;