1 PACKAGE BODY IGS_RE_VAL_CAH AS
2 /* $Header: IGSRE06B.pls 120.0 2005/06/02 03:38:22 appldev noship $ */
3 -------------------------------------------------------------------------------------------
4 --Change History:
5 --Who When What
6 --smadathi 25-AUG-2001 Bug No. 1956374 .The function GENP_VAL_SDTT_SESS removed
7 --svanukur 08-apr-2004 BUG no 3453123. Removed default declaration in the body since this is
8 -- a GSCC violation
9 -- Removed procedure resp_val_cah_strt_dt as part of bug
10 -------------------------------------------------------------------------------------------
11 -- Allow for specified IGS_RE_CANDIDATURE trigger validation.
12 PROCEDURE RESP_VAL_CA_TRG(
13 p_table_name IN VARCHAR2 ,
14 p_insert_delete_ind IN VARCHAR2 )
15 AS
16 cst_rsup_perc CONSTANT VARCHAR2(30) := 'RESP_VAL_RSUP_PERC';
17 cst_cah_hist_dt CONSTANT VARCHAR2(30) := 'RESP_VAL_CAH_HIST_DT';
18 cst_insert CONSTANT VARCHAR2(1) := 'I';
19 cst_delete CONSTANT VARCHAR2(1) := 'D';
20 BEGIN
21 DECLARE
22 L_ROWID VARCHAR2(25);
23 BEGIN
24 IF p_table_name IN (cst_rsup_perc, cst_cah_hist_dt) THEN
25 IF p_insert_delete_ind = cst_insert THEN
26 -- Inserts a record into the s_disable_table_trigger
27 -- database table.
28
29 IGS_GE_S_DSB_TAB_TRG_PKG.INSERT_ROW(
30 X_ROWID => L_ROWID ,
31 X_TABLE_NAME =>p_table_name,
32 X_SESSION_ID => userenv('SESSIONID'),
33 x_mode => 'R'
34 );
35
36 ELSIF p_insert_delete_ind = cst_delete THEN
37 -- Inserts a record into the s_disable_table_trigger
38 -- database table.
39 IGS_GE_MNT_SDTT.genp_del_sdtt(p_table_name);
40 END IF;
41 END IF;
42 END;
43 EXCEPTION
44 WHEN OTHERS THEN
45 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
46 IGS_GE_MSG_STACK.ADD;
47 App_Exception.Raise_Exception;
48 END resp_val_ca_trg;
49 --
50 -- Validate IGS_RE_CANDIDATURE attendance history changes prior to census date.
51 FUNCTION resp_val_cah_census(
52 p_person_id IN NUMBER ,
53 p_ca_sequence_number IN NUMBER ,
54 p_effective_dt IN DATE ,
55 p_message_name OUT NOCOPY VARCHAR2 )
56 RETURN BOOLEAN AS
57 BEGIN -- resp_val_cah_census
58 DECLARE
59 v_ca_sca_course_cd IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
60 v_daiv_alias_val IGS_CA_DA_INST_V.alias_val%TYPE;
61 cst_unconfirm CONSTANT
62 IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE := 'UNCONFIRM';
63 cst_duplicate CONSTANT
64 IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE := 'DUPLICATE';
65 CURSOR c_ca IS
66 SELECT ca.sca_course_cd
67 FROM IGS_RE_CANDIDATURE ca
68 WHERE ca.person_id = p_person_id AND
69 ca.sequence_number = p_ca_sequence_number;
70 CURSOR c_sua_uv_daiv_sgcc IS
71 SELECT daiv.alias_val
72 FROM IGS_EN_SU_ATTEMPT sua,
73 IGS_PS_UNIT_VER uv,
74 IGS_CA_DA_INST_V daiv,
75 IGS_GE_S_GEN_CAL_CON sgcc
76 WHERE sua.person_id = p_person_id AND
77 sua.course_cd = v_ca_sca_course_cd AND
78 sua.unit_attempt_status NOT IN (
79 cst_unconfirm,
80 cst_duplicate) AND
81 sua.unit_cd = uv.unit_cd AND
82 sua.version_number = uv.version_number AND
83 uv.research_unit_ind = 'Y' AND
84 sua.cal_type = daiv.cal_type AND
85 sua.ci_sequence_number = daiv.ci_sequence_number AND
86 daiv.dt_alias = sgcc.census_dt_alias AND
87 sgcc.s_control_num = 1 AND
88 p_effective_dt <= daiv.alias_val AND
89 daiv.alias_val < trunc(SYSDATE);
90 BEGIN
91 -- Set the default message number
92 p_message_name := NULL;
93 OPEN c_ca;
94 FETCH c_ca INTO v_ca_sca_course_cd;
95 IF c_ca%NOTFOUND OR
96 v_ca_sca_course_cd IS NULL THEN
97 CLOSE c_ca;
98 RETURN TRUE;
99 END IF;
100 CLOSE c_ca;
101 OPEN c_sua_uv_daiv_sgcc;
102 FETCH c_sua_uv_daiv_sgcc INTO v_daiv_alias_val;
103 IF c_sua_uv_daiv_sgcc%FOUND THEN
104 --Changes are after a census date
105 CLOSE c_sua_uv_daiv_sgcc;
106 p_message_name := 'IGS_RE_CAND_ATT_HIST_CHANGES';
107 RETURN TRUE;
108 END IF;
109 CLOSE c_sua_uv_daiv_sgcc;
110 -- Return the default value
111 RETURN TRUE;
112 EXCEPTION
113 WHEN OTHERS THEN
114 IF c_ca%ISOPEN THEN
115 CLOSE c_ca;
116 END IF;
117 IF c_sua_uv_daiv_sgcc%ISOPEN THEN
118 CLOSE c_sua_uv_daiv_sgcc;
119 END IF;
120 RAISE;
121 END;
122 EXCEPTION
123 WHEN OTHERS THEN
124 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
125 IGS_GE_MSG_STACK.ADD;
126 App_Exception.Raise_Exception;
127 END resp_val_cah_census;
128 --
129 -- Validate IGS_RE_CANDIDATURE update.
130 FUNCTION resp_val_ca_childupd(
131 p_person_id IN NUMBER ,
132 p_ca_sequence_number IN NUMBER ,
133 p_message_name OUT NOCOPY VARCHAR2 )
134 RETURN BOOLEAN AS
135 -- Change History :
136 -- Who When What
137 -- stutta 05-May-2004 Added c_awd_exists,c_incomp_awd cursors and modified logic to return false
138 -- only if a completed program attempt has all its awards completed.(Bug #3577988)
139 BEGIN -- resp_val_ca_childupd
140 -- This module validates the update of IGS_RE_CANDIDATURE child details.
141 -- Validations are:
142 -- IGS_RE_CANDIDATURE child details cannot be updated if
143 -- IGS_EN_STDNT_PS_ATT.course_attempt_status is 'COMPLETED' with all awards completed.
144 -- If atleast one award is incomplete or no award is associated, update is allowed.
145 DECLARE
146 cst_completed CONSTANT VARCHAR2(10) := 'COMPLETED';
147 v_sca_course_cd IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
148 v_course_attempt_status IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
149 v_dummy VARCHAR2(1);
150
151 CURSOR c_ca IS
152 SELECT ca.sca_course_cd
153 FROM IGS_RE_CANDIDATURE ca
154 WHERE ca.person_id = p_person_id AND
155 ca.sequence_number = p_ca_sequence_number;
156 CURSOR c_sca (
157 cp_sca_course_cd IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
158 SELECT sca.course_attempt_status
159 FROM IGS_EN_STDNT_PS_ATT sca
160 WHERE sca.person_id = p_person_id AND
161 sca.course_cd = cp_sca_course_cd;
162 CURSOR c_awd_exists(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
163 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE) IS
164 SELECT 'x'
165 FROM igs_en_spa_awd_aim
166 WHERE person_id = cp_person_id
167 AND course_cd = cp_course_cd
168 AND ( end_dt IS NULL OR
169 (end_dt IS NOT NULL AND complete_ind = 'Y')
170 );
171 CURSOR c_incomp_awd(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
172 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE) IS
173 SELECT 'x'
174 FROM igs_en_spa_awd_aim
175 WHERE person_id = cp_person_id
176 AND course_cd = cp_course_cd
177 AND NVL(complete_ind,'N') = 'N'
178 AND end_dt IS NULL;
179
180 BEGIN
181 p_message_name := NULL;
182 OPEN c_ca;
183 FETCH c_ca INTO v_sca_course_cd;
184 IF c_ca%NOTFOUND THEN
185 --Invalid parameters, handled elsewhere
186 CLOSE c_ca;
187 RETURN TRUE;
188 END IF;
189 CLOSE c_ca;
190 IF v_sca_course_cd IS NOT NULL THEN
191 OPEN c_sca(
192 v_sca_course_cd);
193 FETCH c_sca INTO v_course_attempt_status;
194 IF c_sca%NOTFOUND THEN
195 CLOSE c_sca;
196 --This should not occur, this will be handled by database integrity
197 RETURN TRUE;
198 END IF;
199 CLOSE c_sca;
200 IF v_course_attempt_status = cst_completed THEN
201 OPEN c_awd_exists(p_person_id,v_sca_course_cd);
202 FETCH c_awd_exists INTO v_dummy;
203 IF c_awd_exists%FOUND THEN
204 OPEN c_incomp_awd(p_person_id,v_sca_course_cd);
205 FETCH c_incomp_awd INTO v_dummy;
206 IF c_incomp_awd%FOUND THEN
207 CLOSE c_awd_exists;
208 CLOSE c_incomp_awd;
209 RETURN TRUE;
210 ELSE
211 p_message_name := 'IGS_RE_CANT_UPD_DET_WHEN_COUR';
212 CLOSE c_awd_exists;
213 CLOSE c_incomp_awd;
214 RETURN FALSE;
215 END IF;
216 ELSE
217 CLOSE c_awd_exists;
218 RETURN TRUE;
219 END IF;
220
221 END IF;
222 END IF;
223 RETURN TRUE;
224 EXCEPTION
225 WHEN OTHERS THEN
226 IF (c_ca%ISOPEN) THEN
227 CLOSE c_ca;
228 END IF;
229 IF (c_sca%ISOPEN) THEN
230 CLOSE c_sca;
231 END IF;
232 RAISE;
233 END;
234 EXCEPTION
235 WHEN OTHERS THEN
236 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
237 IGS_GE_MSG_STACK.ADD;
238 App_Exception.Raise_Exception;
239 END resp_val_ca_childupd;
240 --
241 -- Validate IGS_RE_CANDIDATURE attendance history dates.
242 FUNCTION resp_val_cah_hist_dt(
243 p_person_id IN NUMBER ,
244 p_ca_sequence_number IN NUMBER ,
245 p_validate_first_hist_ind IN VARCHAR2 ,
246 p_message_name OUT NOCOPY VARCHAR2 )
247 RETURN BOOLEAN AS
248 BEGIN -- resp_val_cah_hist_dt
249 -- This module validates for IGS_RE_CDT_ATT_HIST for the IGS_RE_CANDIDATURE. The
250 -- following is validated:
251 -- * first hist_start_dt = IGS_EN_STDNT_PS_ATT.commencement_dt
252 -- * IGS_RE_CDT_ATT_HIST do not overlap or have gaps ie. history is
253 -- continuous.
254 -------------------------------------------------------------------------------------------
255 --Change History:
256 --Who When What
257
258 --svanukur 15-apr-2004 BUG no 3453123. Removed the check for commencement date not equal to
259 -- history start date; moved this to the IGSRE013.pld instead
260 -------------------------------------------------------------------------------------------
261 DECLARE
262 v_sca_commencement_dt IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
263 v_last_hist_end_dt IGS_RE_CDT_ATT_HIST.hist_end_dt%TYPE;
264 CURSOR c_cah IS
265 SELECT cah.person_id,
266 cah.ca_sequence_number,
267 cah.hist_start_dt,
268 cah.hist_end_dt
269 FROM IGS_RE_CDT_ATT_HIST cah
270 WHERE cah.person_id = p_person_id AND
271 cah.ca_sequence_number = p_ca_sequence_number
272 ORDER BY cah.hist_start_dt ASC;
273 CURSOR c_ca_sca(
274 cp_person_id IGS_RE_CDT_ATT_HIST.person_id%TYPE,
275 cp_ca_sequence_number IGS_RE_CDT_ATT_HIST.ca_sequence_number%TYPE) IS
276 SELECT sca.commencement_dt
277 FROM IGS_RE_CANDIDATURE ca,
278 IGS_EN_STDNT_PS_ATT sca
279 WHERE ca.person_id = cp_person_id AND
280 ca.sequence_number = cp_ca_sequence_number AND
281 ca.person_id = sca.person_id AND
282 ca.sca_course_cd = sca.course_cd;
283 BEGIN
284 -- Set the default message number
285 p_message_name := NULL;
286 FOR v_cah_rec IN c_cah LOOP
287 IF c_cah%ROWCOUNT = 1 THEN
288 IF p_validate_first_hist_ind = 'Y' THEN
289 OPEN c_ca_sca(
290 v_cah_rec.person_id,
291 v_cah_rec.ca_sequence_number);
292 FETCH c_ca_sca INTO v_sca_commencement_dt;
293 IF c_ca_sca%NOTFOUND OR
294 v_sca_commencement_dt IS NULL THEN
295 CLOSE c_ca_sca;
296 p_message_name := 'IGS_RE_CAND_ATTEND_NOT_RELEV';
297 RETURN FALSE;
298 END IF;
299 CLOSE c_ca_sca;
300 END IF;
301 v_last_hist_end_dt := v_cah_rec.hist_end_dt;
302 ELSE
303 IF TRUNC(v_cah_rec.hist_start_dt) <>
304 TRUNC(v_last_hist_end_dt + 1) THEN
305 p_message_name := 'IGS_RE_CAND_ATTEND_NOT_CONTIN';
306 RETURN FALSE;
307 END IF;
308 v_last_hist_end_dt := v_cah_rec.hist_end_dt;
309 END IF;
310 END LOOP;
311 RETURN TRUE;
312 EXCEPTION
313 WHEN OTHERS THEN
314 IF c_cah%ISOPEN THEN
315 CLOSE c_cah;
316 END IF;
317 IF c_ca_sca%ISOPEN THEN
318 CLOSE c_ca_sca;
319 END IF;
320 RAISE;
321 END;
322 EXCEPTION
323 WHEN OTHERS THEN
324 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
325 IGS_GE_MSG_STACK.ADD;
326 App_Exception.Raise_Exception;
327 END resp_val_cah_hist_dt;
328 --
329 -- Validate IGS_RE_CANDIDATURE attendance history insert.
330 FUNCTION resp_val_cah_ca_ins(
331 p_person_id IN NUMBER ,
332 p_ca_sequence_number IN NUMBER ,
333 p_sca_course_cd IN VARCHAR2 ,
334 p_commencement_dt OUT NOCOPY DATE ,
335 p_attendance_type OUT NOCOPY VARCHAR2 ,
336 p_message_name OUT NOCOPY VARCHAR2 )
337 RETURN BOOLEAN AS
338 BEGIN -- resp_val_cah_ca_ins
339 -- This module validates IGS_RE_CDT_ATT_HIST insert in the context of
340 -- IGS_RE_CANDIDATURE. The following is validated.
341 -- * IGS_RE_CANDIDATURE.sca_course_cd must exist.
342 -- * research IGS_RE_CANDIDATURE IGS_EN_STDNT_PS_ATT.student_confirmed_ind is
343 -- 'Y' and IGS_EN_STDNT_PS_ATT.commencement_dt exists.
344 DECLARE
345 v_sca_course_cd IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
346 v_sca_student_confirmed_ind
347 IGS_EN_STDNT_PS_ATT.student_confirmed_ind%TYPE;
348 v_sca_commencement_dt IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
349 v_sca_attendance_type IGS_EN_STDNT_PS_ATT.attendance_type%TYPE;
350 CURSOR c_ca IS
351 SELECT ca.sca_course_cd
352 FROM IGS_RE_CANDIDATURE ca
353 WHERE ca.person_id = p_person_id AND
354 ca.sequence_number = p_ca_sequence_number;
355 CURSOR c_sca(cp_sca_course_cd IGS_RE_CANDIDATURE.sca_course_cd%TYPE)
356 IS
357 SELECT sca.student_confirmed_ind,
358 sca.commencement_dt,
359 sca.attendance_type
360 FROM IGS_EN_STDNT_PS_ATT sca
361 WHERE sca.person_id = p_person_id AND
362 sca.course_cd = cp_sca_course_cd;
363 BEGIN
364 p_message_name := NULL;
365 p_commencement_dt := NULL;
366 p_attendance_type := NULL;
367 IF p_sca_course_cd IS NULL THEN
368 -- Determine if student IGS_PS_COURSE attempt exists for the research
369 -- IGS_RE_CANDIDATURE
370 OPEN c_ca;
371 FETCH c_ca INTO v_sca_course_cd;
372 IF c_ca%NOTFOUND THEN
373 -- Invalid parameters this will be handled elsewhere
374 CLOSE c_ca;
375 RETURN TRUE;
376 END IF;
377 CLOSE c_ca;
378 IF v_sca_course_cd IS NULL THEN
379 -- Changes to IGS_RE_CANDIDATURE attendance history are not recorded while
380 -- IGS_RE_CANDIDATURE is only associated with an admission IGS_PS_COURSE application
381 p_message_name := 'IGS_RE_CAND_STILL_UNDER_PROC';
382 RETURN FALSE;
383 END IF;
384 ELSE
385 v_sca_course_cd := p_sca_course_cd;
386 END IF;
387 OPEN c_sca(v_sca_course_cd);
388 FETCH c_sca INTO
389 v_sca_student_confirmed_ind,
390 v_sca_commencement_dt,
391 v_sca_attendance_type;
392 IF c_sca%NOTFOUND THEN
393 -- Invalid parameters, this will be handled elsewhere
394 CLOSE c_sca;
395 RETURN TRUE;
396 END IF;
397 CLOSE c_sca;
398 IF v_sca_student_confirmed_ind = 'N' THEN
399 p_message_name := 'IGS_RE_CHK_RSRCH_CAND_HISTOR';
400 RETURN FALSE;
401 END IF;
402 IF v_sca_commencement_dt IS NULL THEN
403 p_message_name := 'IGS_RE_CANT_INS_CAND_ATTEND';
404 RETURN FALSE;
405 END IF;
406 p_commencement_dt := v_sca_commencement_dt;
407 p_attendance_type := v_sca_attendance_type;
408 RETURN TRUE;
409 EXCEPTION
410 WHEN OTHERS THEN
411 IF c_ca%ISOPEN THEN
412 CLOSE c_ca;
413 END IF;
414 IF c_sca%ISOPEN THEN
415 CLOSE c_sca;
416 END IF;
417 RAISE;
418 END;
419 EXCEPTION
420 WHEN OTHERS THEN
421 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
422 IGS_GE_MSG_STACK.ADD;
423 App_Exception.Raise_Exception;
424 END resp_val_cah_ca_ins;
425 --
426 -- Validate IGS_RE_CANDIDATURE attendance hist start date and SCA commencement.
427 FUNCTION resp_val_cah_comm(
428 p_person_id IN NUMBER ,
429 p_ca_sequence_number IN NUMBER ,
430 p_sca_course_cd IN VARCHAR2 ,
431 p_commencement_dt IN DATE ,
432 p_message_name OUT NOCOPY VARCHAR2 )
433 RETURN BOOLEAN AS
434 BEGIN -- resp_val_cah_comm
435 -- Description: This module validates that the first IGS_RE_CDT_ATT_HIST.
436 -- hist_start_dt is the same as the research IGS_RE_CANDIDATURE IGS_EN_STDNT_PS_ATT
437 -- commencement_dt.
438 -- This module currently only returns a warning.
439 DECLARE
440 v_ca_sequence_number IGS_RE_CANDIDATURE.sequence_number%TYPE;
441 v_cah_hist_start_dt IGS_RE_CDT_ATT_HIST.hist_start_dt%TYPE;
442 CURSOR c_ca IS
443 SELECT ca.sequence_number
444 FROM IGS_RE_CANDIDATURE ca
445 WHERE ca.person_id = p_person_id AND
446 ca.sca_course_cd = p_sca_course_cd;
447 CURSOR c_cah(
448 cp_ca_sequence_number IGS_RE_CANDIDATURE.sequence_number%TYPE)IS
449 SELECT cah.hist_start_dt
450 FROM IGS_RE_CDT_ATT_HIST cah
451 WHERE cah.person_id = p_person_id AND
452 cah.ca_sequence_number = cp_ca_sequence_number
453 ORDER BY cah.hist_start_dt;
454 BEGIN
455 p_message_name := NULL;
456 IF (p_commencement_dt) IS NOT NULL THEN
457 IF (p_ca_sequence_number) IS NULL THEN
458 OPEN c_ca;
459 FETCH c_ca INTO v_ca_sequence_number;
460 IF (c_ca%NOTFOUND) THEN
461 CLOSE c_ca;
462 --Student IGS_PS_COURSE attempt does not have IGS_RE_CANDIDATURE details, or
463 --Parameters are invalid
464 p_message_name := NULL;
465 RETURN TRUE;
466 END IF;
467 CLOSE c_ca;
468 ELSE
469 v_ca_sequence_number := p_ca_sequence_number;
470 END IF;
471 OPEN c_cah(
472 v_ca_sequence_number);
473 FETCH c_cah INTO v_cah_hist_start_dt;
474 IF (c_cah%NOTFOUND) THEN
475 CLOSE c_cah;
476 --No histories, therefore all is valid
477 p_message_name := NULL;
478 RETURN TRUE;
479 END IF;
480 IF (v_cah_hist_start_dt <> p_commencement_dt) THEN
481 --Warn that commencement date and first history start date do not match
482 p_message_name := 'IGS_RE_CHK_CAND_ATND_HIST_DT';
483 RETURN TRUE;
484 END IF;
485 CLOSE c_cah;
486 END IF;
487 RETURN TRUE;
488 END;
489 EXCEPTION
490 WHEN OTHERS THEN
491 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
492 IGS_GE_MSG_STACK.ADD;
493 App_Exception.Raise_Exception;
494 END resp_val_cah_comm;
495 --
496 -- Validate IGS_RE_CANDIDATURE attendance history end date.
497 FUNCTION resp_val_cah_end_dt(
498 p_person_id IN NUMBER ,
499 p_ca_sequence_number IN NUMBER ,
500 p_hist_start_dt IN DATE ,
501 p_hist_end_dt IN DATE ,
502 p_message_name OUT NOCOPY VARCHAR2 )
503 RETURN BOOLEAN AS
504 BEGIN -- resp_val_cah_end_dt
505 -- Description: This module validates IGS_RE_CDT_ATT_HIST.hist_end_dt.
506 -- Validations are:
507 -- *Hist_end_dt >= hist_start_dt and < current date.
508 DECLARE
509 BEGIN
510 p_message_name := NULL;
511 IF p_hist_end_dt >= TRUNC(SYSDATE) THEN
512 p_message_name := 'IGS_RE_HIST_EN_DT_LT_CURR_DT';
513 RETURN FALSE;
514 END IF;
515 IF (p_hist_end_dt < p_hist_start_dt) THEN
516 p_message_name := 'IGS_RE_HIST_END_DT_GE_ST_DT';
517 RETURN FALSE;
518 END IF;
519 RETURN TRUE;
520 END;
521 EXCEPTION
522 WHEN OTHERS THEN
523 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
524 IGS_GE_MSG_STACK.ADD;
525 App_Exception.Raise_Exception;
526 END resp_val_cah_end_dt;
527 END IGS_RE_VAL_CAH;