DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_FI_VAL_CFAR

Source


1 PACKAGE BODY IGS_FI_VAL_CFAR AS
2 /* $Header: IGSFI12B.pls 120.0 2005/06/01 22:43:45 appldev noship $ */
3 /*----------------------------------------------------------------------------
4   ||  Created By :
5   ||  Created On :
6   ||  Purpose :
7   ||  Known limitations, enhancements or remarks :
8   ||  Change History :
9   ||  Who             When            What
10   ||  (reverse chronological order - newest change first)
11   ||  vvutukur        28-Jan-2004   Enh#3167098.FICR112 Build.Modified finp_val_cfar_ins.
12   ||  vvutukur        20-May-2002   modified findp_val_cfar_ins,finp_val_ft_closed
13   ||                                to remove upper check on fee_type.bug#2344826.
14   ----------------------------------------------------------------------------*/
15   --
16   -- Ensure  S_FEE_TYPE is 'OTHER' and S_FEE_TRIGGER_CAT is not 'INSTITUTN'
17   FUNCTION finp_val_cfar_ins(
18   p_person_id IN NUMBER ,
19   p_course_cd IN VARCHAR2 ,
20   p_fee_type IN VARCHAR2 ,
21   p_message_name OUT NOCOPY VARCHAR2 )
22   RETURN BOOLEAN AS
23   /*----------------------------------------------------------------------------
24   ||  Created By :
25   ||  Created On :
26   ||  Purpose :
27   ||  Known limitations, enhancements or remarks :
28   ||  Change History :
29   ||  Who             When            What
30   ||  (reverse chronological order - newest change first)
31   ||  vvutukur    28-Jan-2004  Enh#3167098.FICR112.Modified cursor c_sca to consider
32   ||                           the student term records also.
33   ||  vvutukur        20-May-2002   removed upper check constraint on fee_type column
34   ||                                in c_ft cursor.bug#2344826.
35   ----------------------------------------------------------------------------*/
36         gv_other_detail         VARCHAR2(255);
37   BEGIN
38   DECLARE
39         CURSOR c_ft IS
40                 SELECT  ft.s_fee_type,
41                         ft.s_fee_trigger_cat
42                 FROM    IGS_FI_FEE_TYPE ft
43                 WHERE   ft.fee_type = p_fee_type;
44         CURSOR c_sca IS
45                SELECT   'X'
46                FROM     igs_en_stdnt_ps_att sca,
47                         igs_fi_f_cat_fee_lbl fcfl,
48                         igs_fi_fee_str_stat fsst
49                WHERE    sca.person_id = p_person_id
50                AND      sca.course_cd = p_course_cd
51                AND      fcfl.fee_type = p_fee_type
52                AND      fcfl.fee_cat = sca.fee_cat
53                AND      fcfl.fee_liability_status = fsst.fee_structure_status
54                AND      fsst.s_fee_structure_status = 'ACTIVE'
55                UNION ALL
56                SELECT   'X'
57                FROM     igs_en_spa_terms spa,
58                         igs_fi_f_cat_fee_lbl fcfl,
59                         igs_fi_fee_str_stat fsst
60                WHERE    spa.person_id = p_person_id
61                AND      spa.program_cd = p_course_cd
62                AND      fcfl.fee_type = p_fee_type
63                AND      fcfl.fee_cat = spa.fee_cat
64                AND      fcfl.fee_liability_status = fsst.fee_structure_status
65                AND      fsst.s_fee_structure_status = 'ACTIVE';
66 
67         v_s_fee_type            IGS_FI_FEE_TYPE.s_fee_type%TYPE;
68         v_s_fee_trigger_cat     IGS_FI_FEE_TYPE.s_fee_trigger_cat%TYPE;
69         v_dummy                 VARCHAR2(1);
70         CST_OTHER               IGS_FI_FEE_TYPE.s_fee_type%TYPE := 'OTHER';
71         CST_TUITION             IGS_FI_FEE_TYPE.s_fee_type%TYPE := 'TUITION';
72         CST_TUTNFEE             IGS_FI_FEE_TYPE.s_fee_type%TYPE := 'TUTNFEE';
73         CST_INSTITUTN           IGS_FI_FEE_TYPE.s_fee_trigger_cat%TYPE := 'INSTITUTN';
74   BEGIN
75         -- Validate the IGS_FI_FEE_AS_RT can only be defined for
76         -- fee types with s_fee_type = 'OTHER'or 'TUTNFEE' or 'TUITION' and
77         -- s_fee_trigger_cat not 'INSTITUTN'.
78         -- Set the default message number
79         p_message_name := Null;
80         OPEN c_ft;
81         FETCH c_ft into v_s_fee_type, v_s_fee_trigger_cat;
82         IF c_ft%NOTFOUND THEN           -- if no record is found
83                 CLOSE c_ft;
84                 RETURN TRUE;
85         END IF;
86         CLOSE c_ft;
87         -- Check the system fee type
88         IF v_s_fee_type <> CST_OTHER
89            AND v_s_fee_type <> CST_TUTNFEE
90                 AND v_s_fee_type <> CST_TUITION THEN
91                 p_message_name := 'IGS_FI_ASSRATES_OTHER_TUTUION';
92                 RETURN FALSE;
93         END IF;
94         -- Check the system fee trigger category
95         IF v_s_fee_trigger_cat = CST_INSTITUTN THEN
96                 p_message_name := 'IGS_FI_FEEASS_NOT_INSTITN';
97                 RETURN FALSE;
98         END IF;
99         OPEN c_sca;
100         FETCH c_sca INTO v_dummy;
101         IF c_sca%NOTFOUND THEN
102                 CLOSE c_sca;
103                 p_message_name := 'IGS_FI_FEETYPE_NOT_ACTIVE';
104                 RETURN FALSE;
105         END IF;
106         CLOSE c_sca;
107         -- Execution Complete
108         RETURN TRUE;
109   END;
110   END finp_val_cfar_ins;
111   --
112   -- Ensure the start and end dates don't overlap with other records.
113   FUNCTION finp_val_cfar_ovrlp(
114   p_person_id IN NUMBER ,
115   p_course_cd IN VARCHAR2 ,
116   p_fee_type IN VARCHAR2 ,
117   p_start_dt IN DATE ,
118   p_end_dt IN DATE ,
119   p_message_name OUT NOCOPY VARCHAR2 )
120   RETURN BOOLEAN AS
121         gv_other_detail         VARCHAR2(255);
122   BEGIN
123   DECLARE
124         CURSOR c_cfar IS
125                 SELECT  cfar.start_dt,
126                         cfar.end_dt
127                 FROM    IGS_FI_FEE_AS_RT        cfar
128                 WHERE   cfar.person_id = p_person_id AND
129                         cfar.course_cd = p_course_cd AND
130                         cfar.fee_type = p_fee_type AND
131                         cfar.start_dt <> p_start_dt;
132   BEGIN
133         -- Validate the contract_fee+ass_rate (cfar) table to ensure that for
134         -- records with the same person_id, course_cd and fee_type that the date ranges
135         -- don't overlap.
136         --- Set the default message number
137         p_message_name := Null;
138         FOR v_cfar_rec IN c_cfar LOOP
139                 IF (v_cfar_rec.end_dt IS NOT NULL) THEN
140                         IF (p_start_dt BETWEEN v_cfar_rec.start_dt AND v_cfar_rec.end_dt) THEN
141                                 p_message_name := 'IGS_FI_STDT_BTWN_STDT_ENDDT';
142                                 RETURN FALSE;
143                         END IF;
144                         IF (p_end_dt IS NOT NULL) THEN
145                                 IF (p_end_dt BETWEEN v_cfar_rec.start_dt AND v_cfar_rec.end_dt) THEN
146                                         p_message_name := 'IGS_FI_ENDDT_BTWN_STDT_ENDDT';
147                                         RETURN FALSE;
148                                 END IF;
149                                 IF (p_start_dt <= v_cfar_rec.start_dt AND
150                                                 p_end_dt >= v_cfar_rec.end_dt) THEN
151                                         p_message_name := 'IGS_FI_STDT_ENDDT_ENCOMPASS';
152                                         RETURN FALSE;
153                                 END IF;
154                         ELSE
155                                 IF (p_start_dt <= v_cfar_rec.start_dt) THEN
156                                         p_message_name := 'IGS_FI_OPEN_DATE_RANGE';
157                                         RETURN FALSE;
158                                 END IF;
159                         END IF;
160                 ELSE
161                         IF (p_start_dt >= v_cfar_rec.start_dt OR
162                                         p_end_dt >= v_cfar_rec.start_dt) THEN
163                                 p_message_name := 'IGS_FI_DATES_OVERLAP_STDT';
164                                 RETURN FALSE;
165                         END IF;
166                 END IF;
167         END LOOP;
168         RETURN TRUE;
169   END;
170   END finp_val_cfar_ovrlp;
171   --
172   -- Validate that only one record has an open end date.
173   FUNCTION finp_val_cfar_open(
174   p_person_id IN NUMBER ,
175   p_course_cd IN VARCHAR2 ,
176   p_fee_type IN VARCHAR2 ,
177   p_start_dt IN DATE ,
178   p_message_name OUT NOCOPY VARCHAR2 )
179   RETURN BOOLEAN AS
180         gv_other_detail         VARCHAR2(255);
181   BEGIN
182   DECLARE
183         v_person_id             IGS_FI_FEE_AS_RT.person_id%TYPE;
184         CURSOR c_cfar IS
185                 SELECT  cfar.person_id
186                 FROM    IGS_FI_FEE_AS_RT        cfar
187                 WHERE   cfar.person_id = p_person_id AND
188                         cfar.course_cd = p_course_cd AND
189                         cfar.fee_type = p_fee_type AND
190                         cfar.start_dt <> p_start_dt AND
191                         cfar.end_dt IS NULL;
192   BEGIN
193         -- Validate the IGS_FI_FEE_AS_RT (cfar) table to ensure that
194         -- for records with the same person_id, course_cd, and fee_type
195         -- that only one record has a NULL end_dt.
196         OPEN    c_cfar;
197         FETCH   c_cfar  INTO    v_person_id;
198         IF (c_cfar%FOUND) THEN
199                 CLOSE   c_cfar;
200                 p_message_name := 'IGS_FI_CONTRACT_FEEASS_RATE';
201                 RETURN FALSE;
202         END IF;
203         CLOSE   c_cfar;
204         p_message_name := Null;
205         RETURN TRUE;
206   END;
207   END finp_val_cfar_open;
208   --
209   -- Validate that end date is null or >= start date.
210   FUNCTION finp_val_cfar_end_dt(
211   p_start_dt IN DATE ,
212   p_end_dt IN DATE ,
213   p_message_name OUT NOCOPY VARCHAR2 )
214   RETURN BOOLEAN AS
215         gv_other_detail         VARCHAR2(255);
216   BEGIN
217         -- Validates the IGS_FI_FEE_AS_RT (cfar) table to ensure that if the
218         -- end_dt is NOT NULL and it is greater than or equal to the start_dt.
219         IF (p_end_dt IS NOT NULL) AND
220                         (p_end_dt < p_start_dt) THEN
221                 -- The end date must be greater than or equal to the start date.
222                 p_message_name := 'IGS_GE_END_DT_GE_ST_DATE';
223                 RETURN FALSE;
224         END IF;
225         p_message_name := Null;
226         RETURN TRUE;
227   END finp_val_cfar_end_dt;
228   --
229   -- Validate the Attendance Mode closed indicator
230   FUNCTION finp_val_am_closed(
231   p_attendance_mode IN IGS_EN_ATD_MODE_ALL.attendance_mode%TYPE ,
232   p_message_name OUT NOCOPY VARCHAR2)
233   RETURN BOOLEAN AS
234         gv_other_detail         VARCHAR2(255);
235   BEGIN --finp_val_am_closed
236         --Validate if IGS_EN_ATD_MODE.attendance_mode is closed
237   DECLARE
238         v_closed_ind    VARCHAR2(1);
239         CURSOR c_am IS
240                 SELECT  am.closed_ind
241                 FROM    IGS_EN_ATD_MODE am
242                 WHERE   am.attendance_mode = p_attendance_mode;
243   BEGIN
244         --set default message_number
245         p_message_name := Null;
246         OPEN c_am;
247         FETCH c_am INTO v_closed_ind;
248         IF (c_am%FOUND) THEN
249                 IF (v_closed_ind = 'Y') THEN
250                         CLOSE c_am;
251                         p_message_name := 'IGS_PS_ATTEND_MODE_CLOSED';
252                         RETURN FALSE;
253                 END IF;
254         END IF;
255         CLOSE c_am;
256         RETURN TRUE;
257   END;
258   END finp_val_am_closed;
259   --
260   -- Validate the Attendance Type closed indicator
261   FUNCTION finp_val_att_closed(
262   p_attendance_type IN IGS_EN_ATD_TYPE_ALL.attendance_type%TYPE ,
263   p_message_name OUT NOCOPY VARCHAR2)
264   RETURN BOOLEAN AS
265         gv_other_detail         VARCHAR2(255);
266   BEGIN --finp_val_att_closed
267         --Validate if IGS_EN_ATD_TYPE.attendance_type is closed
268   DECLARE
269         v_closed_ind    VARCHAR2(1);
270         CURSOR c_att IS
271                 SELECT  att.closed_ind
272                 FROM    IGS_EN_ATD_TYPE att
273                 WHERE   att.attendance_type = p_attendance_type;
274   BEGIN
275         --set default message_number
276         p_message_name := Null;
277         OPEN c_att;
278         FETCH c_att INTO v_closed_ind;
279         IF (c_att%FOUND) THEN
280                 IF (v_closed_ind = 'Y') THEN
281                         CLOSE c_att;
282                         p_message_name := 'IGS_PS_ATTEND_TYPE_CLOSED';
283                         RETURN FALSE;
284                 END IF;
285         END IF;
286         CLOSE c_att;
287         RETURN TRUE;
288   END;
289   END finp_val_att_closed;
290   --
291   -- Validate the Location closed indicator
292   FUNCTION finp_val_loc_closed(
293   p_location_cd IN IGS_AD_LOCATION_ALL.location_cd%TYPE ,
294   p_message_name OUT NOCOPY VARCHAR2)
295   RETURN BOOLEAN AS
296         gv_other_detail         VARCHAR2(255);
297   BEGIN --finp_val_loc_closed
298         --Validate if IGS_EN_ATD_TYPE.attendance_type is closed
299   DECLARE
300         v_closed_ind    VARCHAR2(1);
301         v_location_type igs_lookups_view.lookup_code%TYPE;
302         CURSOR c_loc IS
303                 SELECT  loc.closed_ind,
304                         loc.location_type
305                 FROM    IGS_AD_LOCATION loc
306                 WHERE   loc.location_cd = p_location_cd;
307   BEGIN
308         --set default message_number
309         p_message_name := Null;
310         OPEN c_loc;
311         FETCH c_loc INTO v_closed_ind, v_location_type;
312         IF (c_loc%FOUND) THEN
313                 IF (v_closed_ind = 'Y') THEN
314                         CLOSE c_loc;
315                         p_message_name := 'IGS_FI_LOCATION_CLOSED';
316                         RETURN FALSE;
317                 END IF;
318                 IF (v_location_type <> 'CAMPUS') THEN
319                         CLOSE c_loc;
320                         p_message_name := 'IGS_PS_LOC_NOT_TYPE_CAMPUS';
321                         RETURN FALSE;
322                 END IF;
323         END IF;
324         CLOSE c_loc;
325         RETURN TRUE;
326   END;
327   END finp_val_loc_closed;
328   --
329   -- Validate the fee_type in the fee_type_account is not closed.
330   FUNCTION finp_val_ft_closed(
331   p_fee_type IN VARCHAR2 ,
332   p_message_name OUT NOCOPY VARCHAR2 )
333   RETURN BOOLEAN AS
334   /*----------------------------------------------------------------------------
335   ||  Created By :
336   ||  Created On :
337   ||  Purpose :
338   ||  Known limitations, enhancements or remarks :
339   ||  Change History :
340   ||  Who             When            What
341   ||  (reverse chronological order - newest change first)
342   ||  vvutukur        20-May-2002   removed upper check constraint on fee_type column
343   ||                                in c_ft cursor.bug#2344826.
344   ----------------------------------------------------------------------------*/
345         gv_other_detail         VARCHAR2(255);
346   BEGIN
347   DECLARE
348         CURSOR c_ft IS
349                 SELECT  ft.closed_ind
350                 FROM    IGS_FI_FEE_TYPE ft
351                 WHERE   ft.fee_type = p_fee_type;
352         v_fee_type      IGS_FI_FEE_TYPE.closed_ind%TYPE;
353   BEGIN         -- finp_val_ft_closed
354         -- Validate that the fee type is not closed
355         -- Set the default message number
356         p_message_name := Null;
357         OPEN c_ft;
358         FETCH c_ft into v_fee_type;
359         IF c_ft%NOTFOUND THEN       -- If a record is not found
360                 CLOSE c_ft;
361                 RETURN TRUE;
362         END IF;
363         CLOSE c_ft;
364         IF v_fee_type = 'Y' then
365                 p_message_name := 'IGS_FI_FEETYPE_CLOSED';
366                 RETURN FALSE;
367         END IF;
368         -- Return the default value
369         RETURN TRUE;
370   END;
371   END finp_val_ft_closed;
372 END IGS_FI_VAL_CFAR;