DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RE_GEN_002

Source


1 PACKAGE BODY IGS_RE_GEN_002 AS
2 /* $Header: IGSRE02B.pls 120.1 2005/11/24 04:34:42 appldev ship $ */
3 /*******************************************************************************
4 Created by  :
5 Date created:
6 
7 Known limitations/enhancements/remarks:
8 
9 Change History: (who, when, what)
10 Who		When		What
11 sarakshi        02-Sep-2004     Bug#3815825, modified procedure RESP_GET_RSUP_START to add one else condition.
12 vkarthik        26-Apr-2004     Changed function resp_ins_dflt_mil for EN303 Milestone build Enh#3577974
13 rnirwani   13-Sep-2004    changed cursor c_intmsn_details  to not consider logically deleted records and
14 			also to avoid un-approved intermission records. Bug# 3885804
15 *******************************************************************************/
16 
17 PROCEDURE resp_get_ca_exists(
18   p_person_id IN NUMBER ,
19   p_ca_sequence_number IN NUMBER ,
20   p_effective_dt IN DATE ,
21   p_check_thesis IN BOOLEAN ,
22   p_check_field_of_study IN BOOLEAN ,
23   p_check_seo_class_cd IN BOOLEAN ,
24   p_check_supervisor IN BOOLEAN ,
25   p_check_milestone IN BOOLEAN ,
26   p_check_scholarship IN BOOLEAN ,
27   p_thesis_exists OUT NOCOPY BOOLEAN ,
28   p_field_of_study_exists OUT NOCOPY BOOLEAN ,
29   p_seo_class_cd_exists OUT NOCOPY BOOLEAN ,
30   p_supervisor_exists OUT NOCOPY BOOLEAN ,
31   p_milestone_exists OUT NOCOPY BOOLEAN ,
32   p_scholarship_exists OUT NOCOPY BOOLEAN )
33 AS
34 BEGIN	-- resp_get_ca_exists
35 	-- Description: This module returns output parameters indicating whether
36 	-- or not data exists on IGS_RE_CANDIDATURE detail tables for the specified
37 	-- IGS_RE_CANDIDATURE.person_id /sequence_number.
38 DECLARE
39 	v_the_dummy_rec			VARCHAR2(1);
40 	v_cafos_dummy_rec		VARCHAR2(1);
41 	v_csc_dummy_rec			VARCHAR2(1);
42 	v_rsup_dummy_rec		VARCHAR2(1);
43 	v_mil_dummy_rec			VARCHAR2(1);
44 	v_sch_dummy_rec			VARCHAR2(1);
45 	CURSOR	c_the IS
46 		SELECT 	'X'
47 		FROM	IGS_RE_THESIS			the
48 		WHERE	the.person_id 		= p_person_id AND
49 			the.ca_sequence_number	= p_ca_sequence_number AND
50 			the.logical_delete_dt IS NULL;
51 	CURSOR	c_cafos IS
52 		SELECT 	'X'
53 		FROM	IGS_RE_CDT_FLD_OF_SY	 cafos
54 		WHERE	cafos.person_id		 = p_person_id AND
55 			cafos.ca_sequence_number = p_ca_sequence_number;
56 	CURSOR	c_csc IS
57 		SELECT	'X'
58 		FROM	IGS_RE_CAND_SEO_CLS		csc
59 		WHERE	csc.person_id		= p_person_id AND
60 			csc.ca_sequence_number	= p_ca_sequence_number;
61 	CURSOR	c_rsup IS
62 		SELECT	'X'
63 		FROM	IGS_RE_SPRVSR	rsup
64 		WHERE	rsup.ca_person_id		= p_person_id AND
65 			rsup.ca_sequence_number = p_ca_sequence_number AND
66 			rsup.start_dt		<= p_effective_dt AND
67 			NVL(rsup.end_dt, IGS_GE_DATE.IGSDATE('9999/01/01')) >= p_effective_dt;
68 	CURSOR	c_mil IS
69 		SELECT	'X'
70 		FROM	IGS_PR_MILESTONE 		mil
71 		WHERE	mil.person_id		= p_person_id AND
72 			mil.ca_sequence_number 	= p_ca_sequence_number;
73 	CURSOR	c_sch IS
74 		SELECT	'X'
75 		FROM	IGS_RE_SCHOLARSHIP		sch
76 		WHERE	sch.person_id		= p_person_id AND
77 			sch.ca_sequence_number	= p_ca_sequence_number AND
78 			sch.start_dt		<= p_effective_dt AND
79 			NVL(sch.end_dt, IGS_GE_DATE.IGSDATE('9999/01/01')) >= p_effective_dt;
80 BEGIN
81 	p_thesis_exists := FALSE;
82 	p_field_of_study_exists := FALSE;
83 	p_seo_class_cd_exists := FALSE;
84 	p_supervisor_exists := FALSE;
85 	p_milestone_exists := FALSE;
86 	p_scholarship_exists := FALSE;
87 	IF p_check_thesis THEN
88 		--Validate for the existence of IGS_RE_THESIS details
89 		OPEN c_the;
90 		FETCH c_the INTO v_the_dummy_rec;
91 		IF (c_the%FOUND) THEN
92 			CLOSE c_the;
93 			p_thesis_exists := TRUE;
94 		ELSE
95 			CLOSE c_the;
96 		END IF;
97 	END IF;
98 	IF p_check_field_of_study THEN
99 		--Validate for existence of IGS_RE_CANDIDATURE field of study
100 		OPEN c_cafos;
101 		FETCH c_cafos INTO v_cafos_dummy_rec;
102 		IF (c_cafos%FOUND) THEN
103 			CLOSE c_cafos;
104 			p_field_of_study_exists := TRUE;
105 		ELSE
106 			CLOSE c_cafos;
107 		END IF;
108 	END IF;
109 	IF p_check_seo_class_cd THEN
110 		--Validate for existence of IGS_RE_CANDIDATURE socio-economic classification code
111 		OPEN c_csc;
112 		FETCH c_csc INTO v_csc_dummy_rec;
113 		IF (c_csc%FOUND) THEN
114 			CLOSE c_csc;
115 			p_seo_class_cd_exists := TRUE;
116 		ELSE
117 			CLOSE c_csc;
118 		END IF;
119 	END IF;
120 	IF p_check_supervisor THEN
121 		--Validate for existence of research supervisor
122 		OPEN c_rsup;
123 		FETCH c_rsup INTO v_rsup_dummy_rec;
124 		IF (c_rsup%FOUND) THEN
125 			CLOSE c_rsup;
126 			p_supervisor_exists := TRUE;
127 		ELSE
128 			CLOSE c_rsup;
129 		END IF;
130 	END IF;
131 	IF p_check_milestone THEN
132 		--Validate for existence of research IGS_RE_CANDIDATURE milestones
133 		OPEN c_mil;
134 		FETCH c_mil INTO v_mil_dummy_rec;
135 		IF (c_mil%FOUND) THEN
136 			CLOSE c_mil;
137 			p_milestone_exists := TRUE;
138 		ELSE
139 			CLOSE c_mil;
140 		END IF;
141 	END IF;
142 	IF p_check_scholarship THEN
143 		--Validate for existence of research IGS_RE_CANDIDATURE IGS_RE_SCHOLARSHIP
144 		OPEN c_sch;
145 		FETCH c_sch INTO v_sch_dummy_rec;
146 		IF (c_sch%FOUND) THEN
147 			CLOSE c_sch;
148 			p_scholarship_exists := TRUE;
149 		ELSE
150 			CLOSE c_sch;
151 		END IF;
152 	END IF;
153 EXCEPTION
154 	WHEN OTHERS THEN
155 	IF (c_the%ISOPEN) THEN
156 		CLOSE c_the;
157 	END IF;
158 	IF (c_cafos%ISOPEN) THEN
159 		CLOSE c_cafos;
160 	END IF;
161 	IF (c_csc%ISOPEN) THEN
162 		CLOSE c_csc;
163 	END IF;
164 	IF (c_rsup%ISOPEN) THEN
165 		CLOSE c_rsup;
166 	END IF;
167 	IF (c_mil%ISOPEN) THEN
168 		CLOSE c_mil;
169 	END IF;
170 	IF (c_sch%ISOPEN) THEN
171 		CLOSE c_sch;
172 	END IF;
173 END;
174 EXCEPTION
175 	WHEN OTHERS THEN
176 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
177 		IGS_GE_MSG_STACK.ADD;
178 		App_Exception.Raise_Exception;
179 END resp_get_ca_exists;
180 
181 
182 FUNCTION resp_get_rsup_start(
183   p_person_id IN NUMBER ,
184   p_ca_sequence_number IN NUMBER ,
185   p_sca_course_cd IN VARCHAR2 ,
186   p_acai_admission_appl_number IN NUMBER ,
187   p_acai_nominated_course_cd IN VARCHAR2 ,
188   p_acai_sequence_number IN NUMBER ,
189   p_parent IN VARCHAR2 )
190 RETURN DATE AS
191 BEGIN	-- resp_get_rsup_start
192 	-- This module gets the date that supervision is required from for a
193 	-- IGS_RE_CANDIDATURE.
194 DECLARE
195 	cst_sca				CONSTANT VARCHAR2(10) := 'SCA';
196 	cst_acai			CONSTANT VARCHAR2(10) := 'ACAI';
197 	cst_rsup			CONSTANT VARCHAR2(10) := 'RSUP';
198 	v_start_dt			DATE;
199 	v_research_type_ind		VARCHAR2(1) DEFAULT 'N';
200 	v_s_adm_outcome_status		IGS_AD_OU_STAT.s_adm_outcome_status%TYPE;
201 	v_s_admission_process_type	IGS_AD_APPL.s_admission_process_type%TYPE;
202 	v_research_unit_start_dt	DATE;
203 	CURSOR	c_ca IS
204 		SELECT	ca.sca_course_cd,
205 			ca.acai_admission_appl_number,
206 			ca.acai_nominated_course_cd,
207 			ca.acai_sequence_number
208 		FROM	IGS_RE_CANDIDATURE	ca
209 		WHERE	ca.person_id		= p_person_id AND
210 			ca.sequence_number	= p_ca_sequence_number;
211 	v_ca_rec			c_ca%ROWTYPE;
212 	CURSOR c_sca(
213 		cp_course_cd	IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
214 	IS
215 		SELECT	sca.course_attempt_status,
216 			sca.version_number,
217 			sca.commencement_dt
218 		FROM	IGS_EN_STDNT_PS_ATT	sca
219 		WHERE	sca.person_id	= p_person_id AND
220 			sca.course_cd	= cp_course_cd;
221 	v_sca_rec			c_sca%ROWTYPE;
222 	v_sca_rec1			c_sca%ROWTYPE;
223 	CURSOR c_acai(
224 		cp_adm_appl_number	IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE,
225 		cp_nom_course_cd	IGS_RE_CANDIDATURE.acai_nominated_course_cd%TYPE,
226 		cp_sequence_number	IGS_RE_CANDIDATURE.acai_sequence_number%TYPE)
227 	IS
228 		SELECT	acai.course_cd,
229 			acai.crv_version_number,
230 			acai.adm_outcome_status,
231 			acai.prpsd_commencement_dt
232 		FROM	IGS_AD_PS_APPL_INST	acai
233 		WHERE	acai.person_id			= p_person_id AND
234 			acai.admission_appl_number	= cp_adm_appl_number AND
235 			acai.nominated_course_cd	= cp_nom_course_cd AND
236 			acai.sequence_number		= cp_sequence_number;
237 	v_acai_rec			c_acai%ROWTYPE;
238 	CURSOR	c_apcs (
239 			cp_adm_appl_num	IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE)
240 	IS
241 		SELECT	aa.s_admission_process_type
242 		FROM	IGS_AD_APPL		aa,
243 			IGS_AD_PRCS_CAT_STEP	apcs
244 		WHERE	aa.person_id			= p_person_id AND
245 			aa.admission_appl_number	= cp_adm_appl_num AND
246 			aa.admission_cat		= apcs.admission_cat AND
247 			aa.s_admission_process_type	=
248 						apcs.s_admission_process_type AND
249 			apcs.s_admission_step_type	= 'RESEARCH' AND
250 			apcs.mandatory_step_ind		= 'Y' AND
251 			apcs.step_group_type <> 'TRACK'; --2402377
252 	-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
253 	-- Local procedure used to get the research IGS_PS_COURSE type.
254 	PROCEDURE respl_get_rsch_cty (
255 		p_course_cd			IGS_PS_VER.course_cd%TYPE,
256 		p_version_number		IGS_PS_VER.version_number%TYPE,
257 		p_research_type_ind	OUT NOCOPY	VARCHAR2)
258 	AS
259 	BEGIN	-- respl_get_rsch_cty
260 		-- Determine if IGS_PS_COURSE version is a research IGS_PS_COURSE type,
261 		-- this impliessupervision is required from IGS_PS_COURSE
262 		-- commencement date.
263 	DECLARE
264 		CURSOR c_crv IS
265 			SELECT	cty.research_type_ind
266 			FROM	IGS_PS_VER	crv,
267 				IGS_PS_TYPE	cty
268 			WHERE	crv.course_cd		= p_course_cd AND
269 				crv.version_number	= p_version_number AND
270 				crv.course_type		= cty.course_type;
271 	BEGIN
272 		p_research_type_ind := NULL;
273 		OPEN c_crv;
274 		FETCH c_crv INTO p_research_type_ind;
275 		CLOSE c_crv;
276 	EXCEPTION
277 		WHEN OTHERS THEN
278 			IF c_crv%ISOPEN THEN
279 				CLOSE c_crv;
280 			END IF;
281 			RAISE;
282 	END;
283 	END respl_get_rsch_cty;
284 	-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
285 	-- Local function used to set start date to earliest research IGS_PS_UNIT enrolment
286 
287 	FUNCTION respl_get_rsch_enrlmnt (
288 		p_person_id	IGS_EN_SU_ATTEMPT.person_id%TYPE,
289 		p_course_cd	IGS_EN_SU_ATTEMPT.course_cd%TYPE)
290 	RETURN DATE AS
291 	BEGIN 	-- respl_get_rsch_enrlmnt
292 		-- Set the start date to earliest research IGS_PS_UNIT enrolment.
293 	DECLARE
294 		v_start_dt			DATE;
295 		v_end_dt			DATE;
296 		v_research_unit_start_dt	DATE;
297 		v_teach_days			NUMBER;
298 		CURSOR c_sua IS
299 			SELECT	sua.cal_type,
300 				sua.ci_sequence_number
301 			FROM	IGS_EN_SU_ATTEMPT	sua,
302 				IGS_PS_UNIT_VER		uv
303 			WHERE	sua.person_id		= p_person_id AND
304 				sua.course_cd		= p_course_cd AND
305 				sua.unit_cd		= uv.unit_cd AND
306 				sua.version_number	= uv.version_number AND
307 				uv.research_unit_ind	= 'Y' AND
308 				sua.unit_attempt_status	IN (
309 							'ENROLLED',
310 							'COMPLETED',
311 							'DISCONTIN');
312 		BEGIN
313 			v_research_unit_start_dt := NULL;
314 			FOR v_sua_rec IN c_sua LOOP
315 				v_teach_days := resp_get_teach_days(
316 					v_sua_rec.cal_type,
317 					v_sua_rec.ci_sequence_number,
318 					v_start_dt,
319 					v_end_dt);
320 				IF v_research_unit_start_dt IS NULL OR
321 					v_research_unit_start_dt >= v_start_dt THEN
322 					v_research_unit_start_dt := v_start_dt;
323 				END IF;
324 			END LOOP;
325 			RETURN v_research_unit_start_dt;
326 			EXCEPTION
327 				WHEN OTHERS THEN
328 					IF c_sua%ISOPEN THEN
329 						CLOSE c_sua;
330 					END IF;
331 					RAISE;
332 		END;
333 	END respl_get_rsch_enrlmnt;
334 	-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
335 BEGIN -- main routine.
336 	IF p_parent = cst_rsup OR
337 			(p_sca_course_cd IS NULL AND
338 			(p_acai_admission_appl_number IS NULL OR
339 			p_acai_nominated_course_cd IS NULL OR
340 			p_acai_sequence_number IS NULL)) THEN
341 		OPEN c_ca;
342 		FETCH c_ca INTO v_ca_rec;
343 		IF c_ca%NOTFOUND THEN
344 			-- Something is wrong, handled elsewhere.
345 			CLOSE c_ca;
346 			RETURN IGS_GE_DATE.IGSDATE(NULL);
347 		END IF;
348 		CLOSE c_ca;
349 	ELSE
350 		v_ca_rec.sca_course_cd := p_sca_course_cd;
351 		v_ca_rec.acai_admission_appl_number := p_acai_admission_appl_number;
352 		v_ca_rec.acai_nominated_course_cd := p_acai_nominated_course_cd;
353 		v_ca_rec.acai_sequence_number := p_acai_sequence_number;
354 	END IF;
355 	IF v_ca_rec.acai_admission_appl_number IS NULL AND
356 			v_ca_rec.acai_nominated_course_cd IS NULL AND
357 			v_ca_rec.acai_sequence_number IS NULL THEN
358 		-- IGS_RE_CANDIDATURE has been added through ENRF3000.
359 		OPEN c_sca(v_ca_rec.sca_course_cd);
360 		FETCH c_sca INTO v_sca_rec;
361 		IF c_sca%NOTFOUND THEN
362 			CLOSE c_sca;
363 			RETURN IGS_GE_DATE.IGSDATE(NULL);
364 		END IF;
365 		CLOSE c_sca;
366 		IF v_sca_rec.course_attempt_status = 'UNCONFIRM' THEN
367 			-- There is no start date requirement for
368 			-- the IGS_RE_CANDIDATURE.
369 			RETURN IGS_GE_DATE.IGSDATE(NULL);
370 		ELSE
371 			-- Get research IGS_PS_COURSE type
372 			respl_get_rsch_cty (
373 				v_ca_rec.sca_course_cd,
374 				v_sca_rec.version_number,
375 				v_research_type_ind);
376 			IF v_research_type_ind = 'Y' THEN
377 				-- Set start date to
378 				-- IGS_EN_STDNT_PS_ATT.commencement_dt
379 				RETURN v_sca_rec.commencement_dt;
380 			ELSE
381 				-- Set start date to earliest research IGS_PS_UNIT
382 				-- enrolment.
383 				v_research_unit_start_dt := respl_get_rsch_enrlmnt(
384 								p_person_id,
385 								v_ca_rec.sca_course_cd);
386 				RETURN v_research_unit_start_dt;
387 			END IF;
388 		END IF;
389 	ELSE
390 		OPEN c_acai(
391 			v_ca_rec.acai_admission_appl_number,
392 			v_ca_rec.acai_nominated_course_cd,
393 			v_ca_rec.acai_sequence_number);
394 		FETCH c_acai INTO v_acai_rec;
395 		IF c_acai%NOTFOUND THEN
396 			CLOSE c_acai;
397 			RETURN IGS_GE_DATE.IGSDATE(NULL);
398 		END IF;
399 		CLOSE c_acai;
400 		v_s_adm_outcome_status := IGS_AD_GEN_008.admp_get_saos (
401 					v_acai_rec.adm_outcome_status);
402 		IF v_s_adm_outcome_status IN ('OFFER','COND-OFFER') OR
403 				p_parent = cst_acai THEN
404 
405               			respl_get_rsch_cty (
406 				v_acai_rec.course_cd,
407 				v_acai_rec.crv_version_number,
408 				v_research_type_ind);
409 			IF v_research_type_ind = 'N' THEN
410 				-- Determine if research is a mandatory step
411 				OPEN c_apcs (
412 					v_ca_rec.acai_admission_appl_number);
413 				FETCH c_apcs INTO v_s_admission_process_type;
414 				IF c_apcs%FOUND AND
415 					v_s_admission_process_type <> 'RE-ADMIT' THEN
416 					CLOSE c_apcs;
417 
418 				        --If program attempt exists then starts date should be compared against the program attempt start date
419                                         --else proposed commencement date of application instance should be taken into consideration
420 				        --This validation is added as a  part of bug#3815825.
421              		                OPEN c_sca(v_ca_rec.sca_course_cd);
422 	        	                FETCH c_sca INTO v_sca_rec1;
423 		                        IF c_sca%FOUND THEN
424 			                  CLOSE c_sca;
425 			                  RETURN v_sca_rec1.commencement_dt;
426 		                        END IF;
427 		                        CLOSE c_sca;
428 
429 					IF v_acai_rec.prpsd_commencement_dt IS NULL THEN
430 						v_sca_rec.commencement_dt :=
431 							IGS_EN_GEN_002.enrp_get_acad_comm (
432 								NULL,
433 								NULL,
434 								p_person_id,
435 								v_acai_rec.course_cd,
436 								v_ca_rec.acai_admission_appl_number,
437 								v_ca_rec.acai_nominated_course_cd,
438 								v_ca_rec.acai_sequence_number,
439 								'N');
440 					ELSE
441 						v_sca_rec.commencement_dt :=
442 							v_acai_rec.prpsd_commencement_dt;
443 					END IF;
444 					RETURN v_sca_rec.commencement_dt;
445 				ELSE
446 					IF c_apcs%NOTFOUND THEN
447 						CLOSE c_apcs;
448 					END IF;
449 					v_research_unit_start_dt := respl_get_rsch_enrlmnt(
450 									p_person_id,
451 									v_acai_rec.course_cd);
452 					RETURN v_research_unit_start_dt;
453 				END IF;
454 			ELSE
455 				--If program attempt exists then starts date should be compared against the program attempt start date
456                                 --else proposed commencement date of application instance should be taken into consideration
457 				--This validation is added as a  part of bug#3815825.
458         		        OPEN c_sca(v_ca_rec.sca_course_cd);
459         	                FETCH c_sca INTO v_sca_rec1;
460 	                        IF c_sca%FOUND THEN
461 		                  CLOSE c_sca;
462 		                  RETURN v_sca_rec1.commencement_dt;
463 	                        END IF;
464 	                        CLOSE c_sca;
465 
466 				IF v_acai_rec.prpsd_commencement_dt IS NULL THEN
467 					v_sca_rec.commencement_dt :=
468 						IGS_EN_GEN_002.enrp_get_acad_comm (
469 							NULL,
470 							NULL,
471 							p_person_id,
472 							v_acai_rec.course_cd,
473 							v_ca_rec.acai_admission_appl_number,
474 							v_ca_rec.acai_nominated_course_cd,
475 							v_ca_rec.acai_sequence_number,
476 							'N');
477 				ELSE
478 					v_sca_rec.commencement_dt :=
479 						v_acai_rec.prpsd_commencement_dt;
480 				END IF;
481 				RETURN v_sca_rec.commencement_dt;
482 			END IF;
483 		ELSE
484 			-- There is no start date requirement yet.
485 			RETURN IGS_GE_DATE.IGSDATE(NULL);
486 		END IF;
487 	END IF;
488 EXCEPTION
489 	WHEN OTHERS THEN
490 		IF c_ca%ISOPEN THEN
491 			CLOSE c_ca;
492 		END IF;
493 		IF c_sca%ISOPEN THEN
494 			CLOSE c_sca;
495 		END IF;
496 		IF c_acai%ISOPEN THEN
497 			CLOSE c_acai;
498 		END IF;
499 		IF c_apcs%ISOPEN THEN
500 			CLOSE c_apcs;
501 		END IF;
502 		RAISE;
503 END;
504 END resp_get_rsup_start;
505 
506 
507 PROCEDURE resp_get_sca_ca_acai(
508   p_person_id IN NUMBER ,
509   p_course_cd IN VARCHAR2 ,
510   p_admission_appl_number IN NUMBER ,
511   p_nominated_course_cd IN VARCHAR2 ,
512   p_acai_sequence_number IN NUMBER ,
513   p_out_admission_appl_number OUT NOCOPY NUMBER ,
514   p_out_nominated_course_cd OUT NOCOPY VARCHAR2 ,
515   p_out_acai_sequence_number OUT NOCOPY NUMBER )
516 AS
517 BEGIN	-- resp_get_sca_ca_acai
518 	-- Return the admission IGS_PS_COURSE application instance to be used for
519 	-- the reasearch IGS_RE_CANDIDATURE.
520 DECLARE
521 	CURSOR	c_sca IS
522 		SELECT	sca.adm_admission_appl_number,
523 			sca.adm_nominated_course_cd,
524 			sca.adm_sequence_number
525 		FROM	IGS_EN_STDNT_PS_ATT	sca,
526 			IGS_RE_CANDIDATURE		ca
527 		WHERE	sca.person_id		= p_person_id AND
528 			sca.course_cd		= p_course_cd AND
529 			ca.person_id		= sca.person_id AND
530 			ca.sca_course_cd	= sca.course_cd;
531 	v_sca_rec		c_sca%ROWTYPE;
532 BEGIN
533 	OPEN c_sca;
534 	FETCH c_sca INTO v_sca_rec;
535 	IF c_sca%FOUND THEN
536 		CLOSE c_sca;
537 		p_out_admission_appl_number := v_sca_rec.adm_admission_appl_number;
538 		p_out_nominated_course_cd := v_sca_rec.adm_nominated_course_cd;
539 		p_out_acai_sequence_number := v_sca_rec.adm_sequence_number;
540 	ELSE
541 		CLOSE c_sca;
542 		p_out_admission_appl_number := p_admission_appl_number;
543 		p_out_nominated_course_cd := p_nominated_course_cd;
544 		p_out_acai_sequence_number := p_acai_sequence_number;
545 	END IF;
546 END;
547 EXCEPTION
548 	WHEN OTHERS THEN
549 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
550 		IGS_GE_MSG_STACK.ADD;
551 		App_Exception.Raise_Exception;
552 END resp_get_sca_ca_acai;
553 
554 
555 FUNCTION RESP_GET_SUA_EFTD(
556   p_person_id IN NUMBER ,
557   p_course_cd IN VARCHAR2 ,
558   p_unit_cd IN VARCHAR2 ,
559   p_unit_version_number IN NUMBER ,
560   p_cal_type IN VARCHAR2 ,
561   p_ci_sequence_number IN NUMBER ,
562   p_effective_dt IN DATE ,
563   p_load_cal_type IN VARCHAR2 ,
564   p_load_ci_sequence_number IN NUMBER ,
565   p_cal_type_eftd OUT NOCOPY NUMBER )
566 RETURN NUMBER AS
567 BEGIN	-- resp_get_sua_eftd
568 	-- Get the EFTD (Effective Full Time Day) figure for a nominated student
569 	-- IGS_PS_UNIT attempt. This is calculated as :
570 	-- The number of research days * The attendance percentage as at the
571 	-- effective date.
572 	-- add Days at a higher attendance percentage which are prior to the
573 	-- effective date
574 	-- less Days at a lower attendance percentage which are prior to the
575 	-- effective date
576 	-- less Days student is on intermission at the default rate for their
577 	-- attendance type
578 	-- less Days prior to the IGS_PS_COURSE commencement date, where the date is
579 	-- within the teaching period
580 DECLARE
581 	v_research_unit_ind		IGS_PS_UNIT_VER.research_unit_ind%TYPE;
582 	v_sca_course_cd			IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
583 	v_acai_admission_appl_number	IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE;
584 	v_acai_nominated_course_cd	IGS_RE_CANDIDATURE.acai_nominated_course_cd%TYPE;
585 	v_acai_sequence_number		IGS_RE_CANDIDATURE.acai_sequence_number%TYPE;
586 	v_ca_attendance_percentage	IGS_RE_CANDIDATURE.attendance_percentage%TYPE;
587 	v_commencement_dt		DATE;
588 	v_attendance_type		IGS_EN_STDNT_PS_ATT.attendance_type%TYPE;
589 	v_sca_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
590 	v_record_found			BOOLEAN DEFAULT FALSE;
591 	v_cah2_hist_end_dt		IGS_RE_CDT_ATT_HIST.hist_end_dt%TYPE;
592 	v_ca_sequence_number		IGS_RE_CANDIDATURE.sequence_number%TYPE;
593 	v_tp_days			NUMBER;
594 	v_effective_start_dt		DATE;
595 	v_effective_end_dt		DATE;
596 	v_attendance_percentage		NUMBER;
597 	v_baseline_eftd			NUMBER;
598 	v_removal_days			NUMBER;
599 	v_hist_start_dt			DATE;
600 	v_hist_end_dt			DATE;
601 	v_diff_days			NUMBER;
602 	v_intermit_start_dt		DATE;
603 	v_intermit_end_dt		DATE;
604 	v_remove_start_dt		DATE;
605 	v_remove_end_dt			DATE;
606 	v_last_hist_end_dt		DATE;
607 	v_diff_percentage		NUMBER;
608 	CURSOR	c_uv IS
609 		SELECT	uv.research_unit_ind
610 		FROM	IGS_PS_UNIT_VER uv
611 		WHERE	uv.unit_cd 		= p_unit_cd AND
612 	 		uv.version_number 	= p_unit_version_number;
613 	CURSOR	c_ca IS
614 		SELECT	ca.sequence_number,
615 			ca.attendance_percentage,
616 			ca.sca_course_cd,
617 			ca.acai_admission_appl_number,
618 			ca.acai_nominated_course_cd,
619 			ca.acai_sequence_number
620 		FROM	IGS_RE_CANDIDATURE ca
621 		WHERE	ca.person_id 		= p_person_id AND
622 			ca.sca_course_cd 	= p_course_cd;
623 	CURSOR c_sca IS
624 		SELECT	sca.attendance_type,
625 			sca.commencement_dt
626 		FROM	IGS_EN_STDNT_PS_ATT sca,
627 			IGS_PS_VER crv
628 		WHERE	sca.person_id 		= p_person_id 	AND
629 			sca.course_cd 		= p_course_cd;
630 	CURSOR c_cah1 (
631 		cp_effective_start_dt	DATE,
632 		cp_ca_sequence_number	IGS_RE_CANDIDATURE.sequence_number%TYPE)
633 	IS
634 		SELECT 	cah.hist_start_dt,
635 			cah.hist_end_dt,
636 			cah.attendance_percentage
637 		FROM	IGS_RE_CDT_ATT_HIST cah
638 		WHERE	cah.person_id 		= p_person_id 		AND
639 			cah.ca_sequence_number	= v_ca_sequence_number	AND
640 			cah.hist_end_dt 	>= cp_effective_start_dt AND
641 			cah.hist_start_dt 	<= p_effective_dt
642 		ORDER BY cah.hist_start_dt;
643 	CURSOR c_sci (
644 		cp_effective_start_dt	DATE)
645 	IS
646 		SELECT 	sci.start_dt,
647 			sci.end_dt
648 		FROM	IGS_EN_STDNT_PS_INTM sci,
649                         IGS_EN_INTM_TYPES eit
650 		WHERE	sci.person_id 	= p_person_id 		AND
651 			sci.course_cd 	= p_course_cd 		AND
652 			sci.start_dt 	<= p_effective_dt 	AND
653 			sci.end_dt 	>= cp_effective_start_dt AND
654                         sci.logical_delete_date = TO_DATE('31-12-4712','DD-MM-YYYY') AND
655        			sci.approved  = eit.appr_reqd_ind AND
656                         eit.intermission_type = sci.intermission_type
657 		ORDER BY sci.start_dt ASC;
658 
659         CURSOR c_cah2 (
660 		cp_ca_sequence_number	IGS_RE_CANDIDATURE.sequence_number%TYPE,
661 		cp_intermit_end_dt	DATE,
662 		cp_intermit_start_dt	DATE)
663 	IS
664 		SELECT	cah.hist_start_dt,
665 			cah.hist_end_dt,
666 			cah.attendance_percentage
667 		FROM	IGS_RE_CDT_ATT_HIST cah
668 		WHERE	cah.person_id 		= p_person_id 		AND
669 			cah.ca_sequence_number	= cp_ca_sequence_number AND
670 			cah.hist_start_dt 	<= cp_intermit_end_dt 	AND
671 			cah.hist_start_dt 	<= p_effective_dt 	AND
672 			cah.hist_end_dt 	>= cp_intermit_start_dt
673 		ORDER BY cah.hist_start_dt;
674 BEGIN
675 	--1. Load details from the IGS_PS_UNIT version
676 	OPEN c_uv;
677 	FETCH c_uv INTO v_research_unit_ind;
678 	IF c_uv%NOTFOUND THEN
679 		CLOSE c_uv;
680 		RETURN 0;
681 	END IF;
682 	CLOSE c_uv;
683 	IF v_research_unit_ind = 'N' THEN
684 		--IGS_PS_UNIT is not research load 'derivable'
685 		RETURN 0;
686 	END IF;
687 	--2. Load IGS_RE_CANDIDATURE details
688 	OPEN c_ca;
689 	FETCH c_ca INTO
690 			v_ca_sequence_number,
691 			v_ca_attendance_percentage,
692 			v_sca_course_cd,
693 			v_acai_admission_appl_number,
694 			v_acai_nominated_course_cd,
695 			v_acai_sequence_number;
696 	IF c_ca%NOTFOUND THEN
697 		CLOSE c_ca;
698 		--If no IGS_RE_CANDIDATURE then the student is not a research student
699 		RETURN 0;
700 	END IF;
701 	CLOSE c_ca;
702 	--3. Get the commencement date - this routine handles both enrolled students
703 	-- and students still in the admission stage.
704 	v_commencement_dt := IGS_RE_GEN_001.resp_get_ca_comm(
705 			p_person_id,
706 			v_sca_course_cd,
707 			v_acai_admission_appl_number,
708 			v_acai_nominated_course_cd,
709 			v_acai_sequence_number);
710 	--4. Load details from the student IGS_PS_COURSE attempt
711 	OPEN c_sca;
712 	FETCH c_sca INTO
713 			v_attendance_type,
714 			v_sca_commencement_dt;
715 	CLOSE c_sca;
716 	-- 5. Call routine to determine the number of effective days in the teaching
717 	-- period. If zero, then EFTSU cannot be calculated.
718 	v_tp_days := resp_get_teach_days(
719 			p_cal_type,
720 			p_ci_sequence_number,
721 			v_effective_start_dt,
722 			v_effective_end_dt);
723 	IF v_tp_days = 0 THEN
724 		p_cal_type_eftd := 0;
725 		RETURN 0;
726 	END IF;
727 	p_cal_type_eftd := v_tp_days;
728 	-- 6. Calculate the students attendance percentage as at the effective date
729 	v_attendance_percentage := IGS_RE_GEN_001.resp_get_ca_att(
730 						p_person_id,
731 						p_course_cd,
732 						p_effective_dt,
733 						v_ca_sequence_number,
734 						v_attendance_type,
735 						v_ca_attendance_percentage);
736 	IF v_attendance_percentage IS NULL THEN
737 		--Null attendance percentage indicates value could not be determined
738 		RETURN 0;
739 	END IF;
740 	-- 7. Calculate the 'baseline' EFTD figure using the attendance type as at
741 	-- the effective date.
742 	v_baseline_eftd := v_tp_days * ( v_attendance_percentage / 100 );
743 	-- 8. Subtract any commencement period from the figure.
744 	IF v_commencement_dt BETWEEN v_effective_start_dt AND
745 					v_effective_end_dt THEN
746 		v_removal_days := (v_commencement_dt - v_effective_start_dt);
747 		v_baseline_eftd := v_baseline_EFTD -
748 				(v_removal_days * (v_attendance_percentage / 100));
749 		-- Bring the effective start date up to the commencement date. All further
750 		-- calculations will exclude this period.
751 		v_effective_start_dt :=  v_commencement_dt;
752 	END IF;
753 	--9. Subtract/Add any periods of higher/lower percentage. Loop through
754 	-- attendance history to determine the values. Only consider histories
755 	-- which are between the earliest of commencement date / effective start
756 	-- date and the effective date of the calculation.
757 	FOR v_cah1_rec IN c_cah1(
758 			v_effective_start_dt,
759 			v_ca_sequence_number) LOOP
760 		IF v_cah1_rec.hist_start_dt >= v_effective_start_dt THEN
761 			v_hist_start_dt := v_cah1_rec.hist_start_dt;
762 		ELSE
763 			v_hist_start_dt := v_effective_start_dt;
764 		END IF;
765 		IF v_cah1_rec.hist_end_dt <= p_effective_dt THEN
766 			v_hist_end_dt := v_cah1_rec.hist_end_dt;
767 		ELSE
768 			v_hist_end_dt := p_effective_dt;
769 		END IF;
770 		v_diff_days := TRUNC(v_hist_end_dt) - TRUNC(v_hist_start_dt) + 1 ;
771 		IF v_cah1_rec.attendance_percentage > v_attendance_percentage THEN
772 			-- As history is higher add the difference in percentage to the total
773 			v_baseline_eftd := v_baseline_eftd +
774 					(((v_cah1_rec.attendance_percentage - v_attendance_percentage)
775 			 		/ 100) * v_diff_days);
776 		ELSE
777 			-- As history is lower subtract the difference in percentage from the total
778 			v_baseline_eftd := v_baseline_eftd -
779 					(((v_attendance_percentage - v_cah1_rec.attendance_percentage)
780 					/ 100) * v_diff_days);
781 		END IF;
782 	END LOOP;
783 	-- 10. During periods of intermission remove EFTD from the baseline figure
784 	-- to the equivalent of a 0% attendance. Only consider intermission up until
785 	-- the teaching period effective end date - anything beyond remains at the
786 	-- relevant attendance percentage.
787 	FOR v_sci_rec IN c_sci(
788 			v_effective_start_dt) LOOP
789 		IF v_sci_rec.start_dt >= v_effective_start_dt THEN
790 			v_intermit_start_dt := v_sci_rec.start_dt;
791 		ELSE
792 			v_intermit_start_dt := v_effective_start_dt;
793 		END IF;
794 		--Determine effective end date - this can be up until the effective end date
795 		-- of the teaching period.
796 		IF (v_sci_rec.end_dt ) <= v_effective_end_dt THEN
797 			v_intermit_end_dt := (v_sci_rec.end_dt );
798 		ELSE
799 			v_intermit_end_dt := v_effective_end_dt;
800 		END IF;
801 		FOR v_cah2_rec IN c_cah2 (
802 				v_ca_sequence_number,
803 				v_intermit_end_dt,
804 				v_intermit_start_dt) LOOP
805 			v_record_found := TRUE;
806 			v_cah2_hist_end_dt := v_cah2_rec.hist_end_dt;
807 			IF v_intermit_start_dt >= v_cah2_rec.hist_start_dt THEN
808 				v_remove_start_dt := v_intermit_start_dt;
809 			ELSE
810 				v_remove_start_dt := v_cah2_rec.hist_start_dt;
811 			END IF;
812 			IF v_intermit_end_dt <= v_cah2_rec.hist_end_dt THEN
813 				v_remove_end_dt := v_intermit_end_dt;
814 			ELSE
815 				v_remove_end_dt := v_cah2_rec.hist_end_dt;
816 			END IF;
817 			v_baseline_eftd := v_baseline_eftd -
818 					(( TRUNC(v_remove_end_dt) - TRUNC(v_remove_start_dt) + 1 )) *
819 					(v_cah2_rec.attendance_percentage / 100 );
820 		END LOOP;
821 		IF v_record_found = FALSE THEN
822 			v_last_hist_end_dt := v_intermit_start_dt - 1;
823 						 --(-1 allows for exclusive logic)
824 		ELSE
825 			v_last_hist_end_dt := v_cah2_hist_end_dt; -- (if last record processed)
826 		END IF;
827 		IF v_last_hist_end_dt < v_intermit_end_dt THEN
828 			v_diff_percentage := IGS_RE_GEN_001.resp_get_ca_att(
829 						p_person_id,
830 						p_course_cd,
831 						v_last_hist_end_dt,
832 						v_ca_sequence_number,
833 						v_attendance_type,
834 						v_ca_attendance_percentage);
835 			-- If the effective history did not cover until the end of the intermission
836 			-- period then subtract based on the load as at the effective date.
837 			v_baseline_eftd := v_baseline_eftd -
838 					(( v_intermit_end_dt - v_last_hist_end_dt - 1 ) *
839 					( v_diff_percentage / 100));
840 		END IF;
841 	END LOOP;
842 	RETURN v_baseline_eftd;
843 EXCEPTION
844 	WHEN OTHERS THEN
845 		IF (c_uv%ISOPEN) THEN
846 			CLOSE c_uv;
847 		END IF;
848 		IF (c_ca%ISOPEN) THEN
849 			CLOSE c_ca;
850 		END IF;
851 		IF (c_sca%ISOPEN) THEN
852 			CLOSE c_sca;
853 		END IF;
854 		IF (c_cah1%ISOPEN) THEN
855 			CLOSE c_cah1;
856 		END IF;
857 		IF (c_sci%ISOPEN) THEN
858 			CLOSE c_sci;
859 		END IF;
860 		IF (c_cah2%ISOPEN) THEN
861 			CLOSE c_cah2;
862 		END IF;
863 		RAISE;
864 END;
865 END resp_get_sua_eftd;
866 
867 
868 FUNCTION RESP_GET_TEACH_DAYS(
869   p_cal_type IN VARCHAR2 ,
870   p_ci_sequence_number IN NUMBER ,
871   p_start_dt OUT NOCOPY DATE ,
872   p_end_dt OUT NOCOPY DATE )
873 RETURN NUMBER AS
874 BEGIN 	-- resp_get_teach_days
875 	-- Get the number of days which apply to research students in a nominated
876 	-- teaching calendar instance.
877 	-- This figure is determined from the research effective date aliases, of
878 	-- which there should be a single start date and a single end date.
879 	-- If zero is returned, it indicates that the structure is not correctly
880 	-- set up for the nominated teaching period to be a research teaching
881 	-- period.
882 DECLARE
883 	E_NO_RESEARCH_CAL_CONFIG	EXCEPTION;
884 	v_effective_strt_dt_alias	IGS_RE_S_RES_CAL_CON.effective_strt_dt_alias%TYPE;
885 	v_effective_end_dt_alias	IGS_RE_S_RES_CAL_CON.effective_end_dt_alias%TYPE;
886 	v_start_alias_val		IGS_CA_DA_INST.absolute_val%TYPE DEFAULT NULL;
887 	v_end_alias_val			IGS_CA_DA_INST.absolute_val%TYPE DEFAULT NULL;
888 	CURSOR c_srcc IS
889 		SELECT	srcc.effective_strt_dt_alias,
890 			srcc.effective_end_dt_alias
891 		FROM	IGS_RE_S_RES_CAL_CON		srcc
892 		WHERE	srcc.s_control_num	= 1;
893 	FUNCTION resp_get_alias_val(
894 			p_cal_type		IGS_CA_INST.cal_type%TYPE,
895 			p_ci_sequence_number	IGS_CA_INST.sequence_number%TYPE,
896 			p_effective_dt_alias	IGS_CA_DA_INST.dt_alias%TYPE)
897 	RETURN DATE aS
898 	BEGIN
899 	DECLARE
900 		v_num_recs_flag			BOOLEAN DEFAULT FALSE;
901 		v_alias_val			IGS_CA_DA_INST.absolute_val%TYPE;
902 		CURSOR c_dai IS
903 			SELECT	NVL(
904 				dai.absolute_val,
905 				IGS_CA_GEN_001.calp_get_alias_val(
906 						dai.dt_alias,
907 						dai.sequence_number,
908 						dai.cal_type,
909 						dai.ci_sequence_number)) AS v_absolute_val
910 			FROM	IGS_CA_DA_INST 	dai
911 			WHERE	dai.cal_type		= p_cal_type AND
912 				dai.ci_sequence_number	= p_ci_sequence_number AND
913 				dai.dt_alias		= p_effective_dt_alias;
914 	BEGIN
915 		-- Function selects a date from the teaching period, if zero or multiple
916 		-- values exist it returns null
917 		FOR v_dai_rec IN c_dai LOOP
918 			IF c_dai%ROWCOUNT = 1 THEN
919 				v_alias_val := v_dai_rec.v_absolute_val;
920 				v_num_recs_flag := TRUE;
921 			ELSE
922 				v_num_recs_flag := FALSE;
923 				EXIT;
924 			END IF;
925 		END LOOP;
926 		IF v_num_recs_flag THEN
927 			RETURN v_alias_val;
928 		END IF;
929 		RETURN NULL;
930 	EXCEPTION
931 		WHEN OTHERS THEN
932 			IF c_dai%ISOPEN THEN
933 				CLOSE c_dai;
934 			END IF;
935 			RAISE;
936 	END;
937 	END resp_get_alias_val;
938 BEGIN
939 	OPEN c_srcc;
940 	FETCH c_srcc INTO 	v_effective_strt_dt_alias,
941 				v_effective_end_dt_alias;
942 	IF c_srcc%NOTFOUND THEN
943 		CLOSE c_srcc;
944 		RAISE NO_DATA_FOUND;
945 	END IF;
946 	CLOSE c_srcc;
947 	-- Select the start date from the teaching period
948 	v_start_alias_val := resp_get_alias_val(
949 						p_cal_type,
950 						p_ci_sequence_number,
951 						v_effective_strt_dt_alias);
952 	IF v_start_alias_val IS NULL THEN
953 		RETURN 0;
954 	END IF;
955 	-- Select the end date from the teaching period
956 	v_end_alias_val := resp_get_alias_val(
957 						p_cal_type,
958 						p_ci_sequence_number,
959 						v_effective_end_dt_alias);
960 	IF v_end_alias_val IS NULL THEN
961 		RETURN 0;
962 	END IF;
963 	-- Check that the end date is after the start date
964 	IF v_start_alias_val > v_end_alias_val THEN
965 		RETURN 0;
966 	END IF;
967 	p_start_dt := v_start_alias_val;
968 	p_end_dt := v_end_alias_val;
969 	RETURN ( v_end_alias_val - v_start_alias_val + 1 );
970 EXCEPTION
971 	WHEN OTHERS THEN
972 		IF c_srcc%ISOPEN THEN
973 			CLOSE c_srcc;
974 		END IF;
975 		RAISE;
976 END;
977 END resp_get_teach_days;
978 
979 
980 PROCEDURE RESP_GET_THE_EXISTS(
981   p_person_id IN NUMBER ,
982   p_ca_sequence_number IN NUMBER ,
983   p_the_sequence_number IN NUMBER ,
984   p_check_thesis_exam IN boolean ,
985   p_check_milestone IN boolean ,
986   p_thesis_exam_exists OUT NOCOPY boolean ,
987   p_milestone_exists OUT NOCOPY boolean )
988 AS
989 BEGIN	-- resp_get_the_exists
990 	-- This modulew returns output oarameters indicating whether
991 	-- or not data exists on IGS_RE_CANDIDATURE detail tables for the
992 	-- specified IGS_RE_THESIS.
993 DECLARE
994 	v_the_found		VARCHAR2(1);
995 	v_mil_found		VARCHAR2(1);
996 	CURSOR	c_the IS
997 		SELECT	'x'
998 		FROM	IGS_RE_THESIS_EXAM	tex
999 		WHERE	tex.person_id		= p_person_id AND
1000 			tex.ca_sequence_number	= p_ca_sequence_number AND
1001 			tex.the_sequence_number	= p_the_sequence_number;
1002 	CURSOR	c_mil IS
1003 		SELECT	'x'
1004 		FROM	IGS_PR_MILESTONE	mil
1005 		WHERE	mil.person_id		= p_person_id AND
1006 			mil.ca_sequence_number	= p_ca_sequence_number;
1007 BEGIN
1008 	-- Initialise output parameters.
1009 	p_thesis_exam_exists := FALSE;
1010 	p_milestone_exists := FALSE;
1011 	-- Check IGS_RE_THESIS exam
1012 	IF p_check_thesis_exam THEN
1013 		OPEN c_the;
1014 		FETCH c_the INTO v_the_found;
1015 		IF c_the%FOUND THEN
1016 			CLOSE c_the;
1017 			p_thesis_exam_exists := TRUE;
1018 		ELSE
1019 			CLOSE c_the;
1020 		END IF;
1021 	END IF;
1022 	 -- Check IGS_PR_MILESTONE
1023 	IF p_check_milestone THEN
1024 		OPEN c_mil;
1025 		FETCH c_mil INTO v_mil_found;
1026 		IF c_mil%FOUND THEN
1027 			CLOSE c_mil;
1028 			p_milestone_exists := TRUE;
1029 		ELSE
1030 			CLOSE c_mil;
1031 		END IF;
1032 	END IF;
1033 EXCEPTION
1034 	WHEN OTHERS THEN
1035 		IF c_the%ISOPEN THEN
1036 			CLOSE c_the;
1037 		END IF;
1038 		IF c_mil%ISOPEN THEN
1039 			CLOSE c_mil;
1040 		END IF;
1041 		RAISE;
1042 END;
1043 EXCEPTION
1044 	WHEN OTHERS THEN
1045 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
1046 		IGS_GE_MSG_STACK.ADD;
1047 		App_Exception.Raise_Exception;
1048 END resp_get_the_exists;
1049 
1050 
1051  FUNCTION RESP_GET_THE_STATUS(
1052   p_person_id IN NUMBER ,
1053   p_ca_sequence_number IN NUMBER ,
1054   p_the_sequence_number IN NUMBER ,
1055   p_details_passed_ind IN VARCHAR2 ,
1056   p_logical_delete_dt IN DATE ,
1057   p_thesis_result_cd IN VARCHAR2 )
1058 RETURN VARCHAR2 AS
1059 BEGIN	-- resp_get_the_status
1060 	-- Get the IGS_RE_THESIS status.
1061 	-- Values are:
1062 	-- PENDING - IGS_RE_THESIS detail has been keyed, but has not yet been submitted
1063 	-- SUBMITTED - IGS_RE_THESIS has been submitted and is being processed in some way
1064 	-- EXAMINED - IGS_RE_THESIS has been submitted and examined and a final outcome
1065 	-- 		entered.
1066 	-- DELETED - IGS_RE_THESIS has been logically deleted and no longer applies to the
1067 	-- 		research
1068 DECLARE
1069 	cst_deleted		CONSTANT VARCHAR2(10) := 'DELETED';
1070 	cst_examined		CONSTANT VARCHAR2(10) := 'EXAMINED';
1071 	cst_submitted		CONSTANT VARCHAR2(10) := 'SUBMITTED';
1072 	cst_pending		CONSTANT VARCHAR2(10) := 'PENDING';
1073 	CURSOR	c_the IS
1074 		SELECT	thes.logical_delete_dt,
1075 			thes.thesis_result_cd
1076 		FROM	IGS_RE_THESIS thes
1077 		WHERE	thes.person_id		= p_person_id AND
1078 			thes.ca_sequence_number = p_ca_sequence_number AND
1079 			thes.sequence_number	= p_the_sequence_number;
1080 	v_the_rec				c_the%ROWTYPE;
1081 	CURSOR	c_tex IS
1082 		SELECT	'x'
1083 		FROM	IGS_RE_THESIS_EXAM tex
1084 		WHERE	person_id 		= p_person_id AND
1085 			ca_sequence_number	= p_ca_sequence_number AND
1086 			the_sequence_number	= p_the_sequence_number AND
1087 			submission_dt 		IS NOT NULL;
1088 	v_tex_exists			VARCHAR2(1);
1089 BEGIN
1090 	IF p_details_passed_ind = 'N' THEN
1091 		--Select details from the IGS_RE_THESIS table.
1092 		OPEN c_the;
1093 		FETCH c_the INTO v_the_rec;
1094 		IF c_the%NOTFOUND THEN
1095 			CLOSE c_the;
1096 			RETURN NULL;
1097 		END IF;
1098 		CLOSE c_the;
1099 	ELSE
1100 		v_the_rec.logical_delete_dt := p_logical_delete_dt;
1101 		v_the_rec.thesis_result_cd := p_thesis_result_cd;
1102 	END IF;
1103 	--Logical deletion will always take priority over all other statuses
1104 	IF v_the_rec.logical_delete_dt IS NOT NULL THEN
1105 		RETURN cst_deleted;
1106 	END IF;
1107 	--If final outcome exists then return examined-any submissions are irrelevant
1108 	IF v_the_rec.thesis_result_cd IS NOT NULL THEN
1109 		RETURN cst_examined;
1110 	END IF;
1111 	--Select detail from the IGS_RE_THESIS examinations section
1112 	OPEN c_tex;
1113 	FETCH c_tex INTO v_tex_exists;
1114 	IF c_tex%FOUND THEN
1115 		CLOSE c_tex;
1116 		RETURN cst_submitted;
1117 	END IF;
1118 	CLOSE c_tex;
1119 	--If none of the above, then 'PENDING'
1120 	RETURN cst_pending;
1121 END;
1122 END resp_get_the_status;
1123 
1124 
1125  FUNCTION resp_ins_ca_cah(
1126   p_person_id IN NUMBER ,
1127   p_ca_sequence_number IN NUMBER ,
1128   p_sca_course_cd IN VARCHAR2 ,
1129   p_old_attendance_percentage IN NUMBER ,
1130   p_message_name OUT NOCOPY VARCHAR2 )
1131 RETURN BOOLEAN AS
1132 BEGIN	-- resp_ins_ca_cah
1133 	-- This modules inserts into IGS_RE_CDT_ATT_HIST when
1134 	-- IGS_RE_CANDIDATURE.attendance_percentage is changed. The following is validated:
1135 	-- IGS_RE_CANDIDATURE requires attendance history details to be retained.
1136 DECLARE
1137 	v_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
1138 	v_attendance_type		IGS_EN_STDNT_PS_ATT.attendance_type%TYPE;
1139 	v_message_name			VARCHAR2(30);
1140 	v_hist_end_dt			IGS_RE_CDT_ATT_HIST.hist_end_dt%TYPE;
1141 	v_attendance_percentage		IGS_RE_CANDIDATURE.attendance_percentage%TYPE;
1142 	v_hist_start_dt			IGS_RE_CDT_ATT_HIST.hist_start_dt%TYPE;
1143 	v_sequence_number		IGS_RE_CDT_ATT_HIST.sequence_number%TYPE;
1144 
1145       LV_ROWID			VARCHAR2(25);
1146       v_org_id	IGS_RE_CDT_ATT_HIST.org_id%TYPE := IGS_GE_GEN_003.Get_Org_Id;
1147 	CURSOR	c_cah IS
1148 		SELECT	cah.hist_end_dt
1149 		FROM	IGS_RE_CDT_ATT_HIST cah
1150 		WHERE	cah.person_id 		= p_person_id AND
1151 			cah.ca_sequence_number 	= p_ca_sequence_number
1152 		ORDER BY cah.hist_end_dt DESC;
1153 	CURSOR	c_cah2 IS
1154 		SELECT 	NVL(max(cah2.sequence_number),0)+1
1155 		FROM	IGS_RE_CDT_ATT_HIST cah2
1156 		WHERE	cah2.person_id 		= p_person_id AND
1157 			cah2.ca_sequence_number 	= p_ca_sequence_number;
1158 BEGIN
1159 	p_message_name := NULL;
1160 	-- Validate that IGS_RE_CANDIDATURE attendance history is required
1161 	IF IGS_RE_VAL_CAH.resp_val_cah_ca_ins(
1162 			p_person_id,
1163 			p_ca_sequence_number,
1164 			p_sca_course_cd,
1165 			v_commencement_dt,
1166 			v_attendance_type,
1167 			v_message_name) = FALSE THEN
1168 		--IGS_RE_CANDIDATURE attendance history is not retained yet
1169 		RETURN TRUE;
1170 	END IF;
1171 	-- Determine attendance percentage
1172 	v_attendance_percentage := IGS_RE_GEN_001.resp_get_ca_att(
1173 			p_person_id,
1174 			p_sca_course_cd,
1175 			TRUNC(SYSDATE),
1176 			p_ca_sequence_number,
1177 			v_attendance_type,
1178 	 	p_old_attendance_percentage);
1179 --By bayadav as a part of bug 2399877
1180 	--First history inserted, attendance % should be set the student
1181 	-- to the histury table as it is a mandatory column in IGS_RE_CDT_ATT_HIST table
1182 		IF v_attendance_percentage IS NULL THEN
1183 			p_message_name := 'IGS_RE_ATT_PER_NOT_EXIST';
1184 			RETURN FALSE;
1185 		END IF;
1186 
1187 
1188 	OPEN c_cah;
1189 	FETCH c_cah INTO v_hist_end_dt;
1190 	IF c_cah%NOTFOUND THEN
1191 		CLOSE c_cah;
1192 		--First history inserted, start date should be set the student
1193 		-- IGS_PS_COURSE attempt Commencement date
1194 		IF v_commencement_dt IS NULL THEN
1195 			p_message_name := 'IGS_RE_FIRST_HIST_CANT_INSERT';
1196 			RETURN FALSE;
1197 		ELSE
1198 			v_hist_start_dt := v_commencement_dt;
1199 		END IF;
1200 	ELSE
1201 		CLOSE c_cah;
1202 		-- History start date should be set to latest history end date plus a day
1203 		v_hist_start_dt := v_hist_end_dt + 1;
1204 	END IF;
1205 	IF v_hist_start_dt >= TRUNC(SYSDATE) THEN
1206 		-- Changes not required in history, more than one change in a day or
1207 		-- Commencement date has not been reached
1208 		RETURN TRUE;
1209 	END IF;
1210 	-- Get next sequence in parent
1211 	OPEN c_cah2;
1212 	FETCH c_cah2 INTO v_sequence_number;
1213 	CLOSE c_cah2;
1214 
1215        IGS_RE_CDT_ATT_HIST_PKG.INSERT_ROW( X_ROWID => LV_ROWID,
1216                                           X_PERSON_ID => p_person_id,
1217                                           X_CA_SEQUENCE_NUMBER => p_ca_sequence_number,
1218 							X_SEQUENCE_NUMBER => v_sequence_number,
1219 							X_HIST_START_DT  => v_hist_start_dt,
1220 							X_HIST_END_DT  => TRUNC(SYSDATE) - 1,
1221 							X_ATTENDANCE_TYPE  => v_attendance_type,
1222 							X_ATTENDANCE_PERCENTAGE => v_attendance_percentage,
1223 							X_ORG_ID	=> v_org_id,
1224 							X_MODE    => 'R');
1225 
1226 	 -- Warn that IGS_RE_CANDIDATURE attendance history has been inserted
1227 	p_message_name := 'IGS_RE_CAND_ATT_HIST_INSERTED';
1228 	RETURN TRUE;
1229 EXCEPTION
1230 	WHEN OTHERS THEN
1231 		IF (c_cah%ISOPEN) THEN
1232 			CLOSE c_cah;
1233 		END IF;
1234 		RAISE;
1235 END;
1236 EXCEPTION
1237 	WHEN OTHERS THEN
1238 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
1239 		IGS_GE_MSG_STACK.ADD;
1240 		App_Exception.Raise_Exception;
1241 END resp_ins_ca_cah;
1242 
1243 
1244  PROCEDURE resp_ins_ca_hist(
1245   p_person_id IN NUMBER ,
1246   p_sequence_number IN NUMBER ,
1247   p_old_sca_course_cd IN VARCHAR2 ,
1248   p_new_sca_course_cd IN VARCHAR2 ,
1249   p_old_acai_adm_appl_num IN NUMBER ,
1250   p_new_acai_adm_appl_num IN NUMBER ,
1251   p_old_acai_nominated_course_cd IN VARCHAR2 ,
1252   p_new_acai_nominated_course_cd IN VARCHAR2 ,
1253   p_old_acai_sequence_number IN NUMBER ,
1254   p_new_acai_sequence_number IN NUMBER ,
1255   p_old_attendance_percentage IN NUMBER ,
1256   p_new_attendance_percentage IN NUMBER ,
1257   p_old_govt_type_of_activity_cd IN VARCHAR2 ,
1258   p_new_govt_type_of_activity_cd IN VARCHAR2 ,
1259   p_old_max_submission_dt IN DATE ,
1260   p_new_max_submission_dt IN DATE ,
1261   p_old_min_submission_dt IN DATE ,
1262   p_new_min_submission_dt IN DATE ,
1263   p_old_research_topic IN VARCHAR2 ,
1264   p_new_research_topic IN VARCHAR2 ,
1265   p_old_industry_links IN VARCHAR2 ,
1266   p_new_industry_links IN VARCHAR2 ,
1267   p_old_update_who IN NUMBER ,
1268   p_new_update_who IN NUMBER ,
1269   p_old_update_on IN DATE ,
1270   p_new_update_on IN DATE )
1271 AS
1272       LV_ROWID			VARCHAR2(25);
1273       v_org_id	igs_re_cdt_att_hist.org_id%TYPE;
1274 BEGIN	-- resp_ins_ca_hist
1275 	-- Description: Insert IGS_RE_CANDIDATURE history (IGS_RE_CDT_HIST)
1276         v_org_id	:= IGS_GE_GEN_003.Get_Org_Id;
1277 DECLARE
1278 	r_ch			IGS_RE_CDT_HIST%ROWTYPE;
1279 	v_create_history	BOOLEAN := FALSE;
1280 
1281 BEGIN
1282 	IF NVL(p_new_sca_course_cd, 'NULL') <>
1283 			NVL(p_old_sca_course_cd, 'NULL') THEN
1284 		r_ch.sca_course_cd := p_old_sca_course_cd;
1285 		v_create_history := TRUE;
1286 	END IF;
1287 	IF NVL(p_new_acai_adm_appl_num, -1) <>
1288 			NVL(p_old_acai_adm_appl_num, -1) THEN
1289 		r_ch.acai_admission_appl_number := p_old_acai_adm_appl_num;
1290 		v_create_history := TRUE;
1291 	END IF;
1292 	IF NVL(p_new_acai_nominated_course_cd, 'NULL') <>
1293 			NVL(p_old_acai_nominated_course_cd, 'NULL') THEN
1294 		r_ch.acai_nominated_course_cd := p_old_acai_nominated_course_cd;
1295 		v_create_history := TRUE;
1296 	END IF;
1297 	IF NVL(p_new_acai_sequence_number, -1) <>
1298 			NVL(p_old_acai_sequence_number, -1) THEN
1299 		r_ch.acai_sequence_number := p_old_acai_sequence_number;
1300 		v_create_history := TRUE;
1301 	END IF;
1302 	IF NVL(p_new_attendance_percentage, -1) <>
1303 			NVL(p_old_attendance_percentage, -1) THEN
1304 		r_ch.attendance_percentage := p_old_attendance_percentage;
1305 		v_create_history := TRUE;
1306 	END IF;
1307 	IF NVL(p_new_govt_type_of_activity_cd, 'NULL') <>
1308 			NVL(p_old_govt_type_of_activity_cd, 'NULL') THEN
1309 		r_ch.govt_type_of_activity_cd := p_old_govt_type_of_activity_cd;
1310 		v_create_history := TRUE;
1311 	END IF;
1312 	IF NVL(p_new_max_submission_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) <>
1313 			NVL(p_old_max_submission_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) THEN
1314 		r_ch.max_submission_dt := p_old_max_submission_dt;
1315 		v_create_history := TRUE;
1316 	END IF;
1317 	IF NVL(p_new_min_submission_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) <>
1318 			NVL(p_old_min_submission_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) THEN
1319 		r_ch.min_submission_dt := p_old_min_submission_dt;
1320 		v_create_history := TRUE;
1321 	END IF;
1322 	IF NVL(p_new_research_topic, 'NULL') <>
1323 			NVL(p_old_research_topic, 'NULL') THEN
1324 		r_ch.research_topic := p_old_research_topic;
1325 		v_create_history := TRUE;
1326 	END IF;
1327 	IF NVL(p_new_industry_links, 'NULL') <>
1328 			NVL(p_old_industry_links, 'NULL') THEN
1329 		r_ch.industry_links := p_old_industry_links;
1330 		v_create_history := TRUE;
1331 	END IF;
1332 	IF v_create_history = TRUE THEN
1333 		r_ch.person_id := p_person_id;
1334 		r_ch.sequence_number := p_sequence_number;
1335 		r_ch.hist_start_dt := p_old_update_on;
1336 		r_ch.hist_end_dt := p_new_update_on;
1337 		r_ch.hist_who := p_old_update_who;
1338               IGS_RE_CDT_HIST_PKG.INSERT_ROW(
1339 			X_ROWID   => LV_ROWID,
1340               	X_person_id => r_ch.person_id,
1341 			X_sequence_number => r_ch.sequence_number,
1342 			X_hist_start_dt => r_ch.hist_start_dt,
1343 			X_hist_end_dt => r_ch.hist_end_dt,
1344 			X_hist_who => r_ch.hist_who,
1345 			X_sca_course_cd => r_ch.sca_course_cd,
1346 			X_acai_admission_appl_number => r_ch.acai_admission_appl_number,
1347 			X_acai_nominated_course_cd => r_ch.acai_nominated_course_cd,
1348 			X_acai_sequence_number => r_ch.acai_sequence_number,
1349 			X_attendance_percentage => r_ch.attendance_percentage,
1350 			X_govt_type_of_activity_cd => r_ch.govt_type_of_activity_cd,
1351 			X_max_submission_dt => r_ch.max_submission_dt,
1352 			X_min_submission_dt => r_ch.min_submission_dt,
1353 			X_research_topic => r_ch.research_topic,
1354 			X_industry_links => r_ch.industry_links,
1355 			X_ORG_ID	=> v_org_id,
1356 			X_MODE        =>  'R');
1357 
1358 	END IF;
1359 END;
1360 EXCEPTION
1361 	WHEN OTHERS THEN
1362 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
1363 		IGS_GE_MSG_STACK.ADD;
1364 		App_Exception.Raise_Exception;
1365 END resp_ins_ca_hist;
1366 
1367 
1368  FUNCTION RESP_INS_DFLT_MIL(
1369   p_person_id IN NUMBER ,
1370   p_ca_sequence_number IN NUMBER ,
1371   p_message_name OUT NOCOPY VARCHAR2 )
1372 RETURN boolean AS
1373 /*******************************************************************************
1374 Created by  : vkarthik, ORACLE IDC
1375 Date created: 26-Apr-2004
1376 
1377 Known limitations/enhancements/remarks:
1378 
1379 Change History: (who, when, what: NO CREATION RECORDS HERE!)
1380 Who		When		What
1381 vkarthik        26-Apr-2004     Removed the condition that inserts records from milestone
1382                                 set only if due date is in the present or future for
1383                                 EN303 Milestone build Enh#3577974
1384 *******************************************************************************/
1385 LV_ROWID			VARCHAR2(25);
1386 v_org_id	igs_re_cdt_att_hist.org_id%TYPE;
1387 BEGIN	-- resp_ins_dflt_mil
1388 	-- Insert default milestones against a IGS_RE_CANDIDATURE based on their
1389 	-- IGS_PS_COURSE version.
1390 	v_org_id	:= IGS_GE_GEN_003.Get_Org_Id;
1391 
1392 DECLARE
1393 	cst_planned			CONSTANT VARCHAR2(10) := 'PLANNED';
1394 	v_dummy				VARCHAR2(1);
1395 	v_sca_course_cd			IGS_RE_CANDIDATURE.sca_course_cd%TYPE;
1396 	v_acai_admission_appl_number	IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE;
1397 	v_acai_nominated_course_cd	IGS_RE_CANDIDATURE.acai_nominated_course_cd%TYPE;
1398 	v_acai_sequence_number		IGS_RE_CANDIDATURE.acai_sequence_number%TYPE;
1399 	v_crv_version_number		IGS_EN_STDNT_PS_ATT.version_number%TYPE;
1400 	v_attendance_type		IGS_EN_STDNT_PS_ATT.attendance_type%TYPE;
1401 	v_course_cd			IGS_EN_STDNT_PS_ATT.course_cd%TYPE;
1402 	v_milestone_status		IGS_PR_MS_STAT.milestone_status%TYPE;
1403 	v_milestone_type		IGS_RE_DFLT_MS_SET.milestone_type%TYPE;
1404 	v_offset_days			IGS_RE_DFLT_MS_SET.offset_days%TYPE;
1405 	v_mil_sequence_number		IGS_PR_MILESTONE.sequence_number%TYPE;
1406 	v_commencement_dt		DATE;
1407 	v_records_inserted		NUMBER;
1408 
1409 	CURSOR c_mil_exists	(
1410 		cp_milestone_type	IGS_PR_MILESTONE.milestone_type%TYPE,
1411 		cp_due_dt		IGS_PR_MILESTONE.due_dt%TYPE)  IS
1412 		SELECT	'x'
1413 		FROM	IGS_PR_MILESTONE mil
1414 		WHERE	mil.person_id		= p_person_id AND
1415 			mil.ca_sequence_number	= p_ca_sequence_number AND
1416 			mil.milestone_type		= cp_milestone_type AND
1417 			mil.due_dt		= cp_due_dt;
1418 	CURSOR c_ca_detail IS
1419 		SELECT	ca.sca_course_cd,
1420 			ca.acai_admission_appl_number,
1421 			ca.acai_nominated_course_cd,
1422 			ca.acai_sequence_number
1423 		FROM	IGS_RE_CANDIDATURE ca
1424 		WHERE	ca.person_id		= p_person_id AND
1425 			ca.sequence_number	= p_ca_sequence_number;
1426 	CURSOR c_sca (
1427 		cp_sca_course_cd		IGS_RE_CANDIDATURE.sca_course_cd%TYPE) IS
1428 		SELECT	sca.version_number,
1429 			sca.attendance_type
1430 		FROM	IGS_EN_STDNT_PS_ATT sca
1431 		WHERE	sca.person_id		= p_person_id AND
1432 			sca.course_cd		= cp_sca_course_cd;
1433 	CURSOR c_acai (
1434 		cp_acai_admission_appl_number	IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE,
1435 		cp_acai_nominated_course_cd	IGS_RE_CANDIDATURE.acai_nominated_course_cd%TYPE,
1436 		cp_acai_sequence_number		IGS_RE_CANDIDATURE.acai_sequence_number%TYPE) IS
1437 		SELECT	acai.course_cd,
1438 			acai.crv_version_number,
1439 			acai.attendance_type
1440 		FROM	IGS_AD_PS_APPL_INST acai
1441 		WHERE	acai.person_id			= p_person_id			AND
1442 			acai.admission_appl_number	= cp_acai_admission_appl_number AND
1443 			acai.nominated_course_cd	= cp_acai_nominated_course_cd	AND
1444 			acai.sequence_number		= cp_acai_sequence_number;
1445 	CURSOR c_mst_planned IS
1446 		SELECT	mst.milestone_status
1447 		FROM	IGS_PR_MS_STAT mst
1448 		WHERE	mst.s_milestone_status = cst_planned
1449                 AND mst.closed_ind = 'N'
1450 		ORDER BY mst.milestone_status;
1451 	CURSOR c_dms (
1452 		cp_course_cd			IGS_RE_DFLT_MS_SET.course_cd%TYPE,
1453 		cp_crv_version_number		IGS_RE_DFLT_MS_SET.version_number%TYPE,
1454 		cp_attendance_type		IGS_RE_DFLT_MS_SET.attendance_type%TYPE) IS
1455 		SELECT	dms.milestone_type,
1456 			dms.offset_days
1457 		FROM	IGS_RE_DFLT_MS_SET dms,
1458 			IGS_PR_MILESTONE_TYP mst
1459 		WHERE	dms.course_cd		= cp_course_cd	AND
1460 			dms.version_number	= cp_crv_version_number AND
1461 			dms.attendance_type	= cp_attendance_type	AND
1462 			mst.milestone_type	= dms.milestone_type	AND
1463 			mst.closed_ind	= 'N'
1464 		ORDER BY offset_days;
1465 	CURSOR c_mil_seq_num IS
1466 		SELECT	IGS_PR_MILESTONE_SEQ_NUM_S.NEXTVAL
1467 		FROM	DUAL;
1468 BEGIN
1469 	-- Set default value
1470 	p_message_name := null;
1471 	v_records_inserted := 0;
1472 	-- 2. Load details from the IGS_RE_CANDIDATURE table.
1473 	OPEN c_ca_detail;
1474 	FETCH c_ca_detail INTO	v_sca_course_cd,
1475 				v_acai_admission_appl_number,
1476 				v_acai_nominated_course_cd,
1477 				v_acai_sequence_number;
1478 	IF c_ca_detail%NOTFOUND THEN
1479 		p_message_name := 'IGS_RE_CANT_LOCATE_CAND_DET';
1480 		CLOSE c_ca_detail;
1481 		RETURN FALSE;
1482 	END IF;
1483 	CLOSE c_ca_detail;
1484 	-- 3. Get the commencement date of the research student.
1485 	v_commencement_dt := IGS_RE_GEN_001.resp_get_ca_comm(
1486 						p_person_id,
1487 						v_sca_course_cd,
1488 						v_acai_admission_appl_number,
1489 						v_acai_nominated_course_cd,
1490 						v_acai_sequence_number);
1491 	IF v_commencement_dt IS NULL THEN
1492 		v_commencement_dt := SYSDATE;
1493 	END IF;
1494 	-- 4. Select the IGS_PS_COURSE version number and attendance type
1495 	--    from the appropriate source.
1496 	IF v_sca_course_cd IS NOT NULL THEN
1497 		OPEN c_sca (
1498 				v_sca_course_cd);
1499 		FETCH c_sca INTO	v_crv_version_number,
1500 					v_attendance_type;
1501 		CLOSE c_sca;
1502 		v_course_cd := v_sca_course_cd;
1503 	ELSIF v_acai_admission_appl_number IS NOT NULL THEN
1504 		OPEN c_acai (
1505 				v_acai_admission_appl_number,
1506 				v_acai_nominated_course_cd,
1507 				v_acai_sequence_number);
1508 		FETCH c_acai INTO	v_course_cd,
1509 					v_crv_version_number,
1510 					v_attendance_type;
1511 		CLOSE c_acai;
1512 	ELSE
1513 		v_crv_version_number := 0;
1514 	END IF;
1515 	-- 5. Select the planned IGS_PR_MILESTONE status (pick the first)
1516 	OPEN c_mst_planned;
1517 	FETCH c_mst_planned INTO v_milestone_status;
1518 	IF c_mst_planned%NOTFOUND THEN
1519 		p_message_name := 'IGS_RE_CANT_LOCATE_MILST_STAT';
1520 		CLOSE c_mst_planned;
1521 		RETURN FALSE;
1522 	END IF;
1523 	CLOSE c_mst_planned;
1524 	-- 6. Loop through the default milestones and add records.
1525 	OPEN c_dms (
1526 		v_course_cd,
1527 		v_crv_version_number,
1528 		v_attendance_type);
1529 	FETCH c_dms INTO	v_milestone_type,
1530 				v_offset_days;
1531 	IF c_dms%FOUND THEN
1532 		LOOP
1533 				OPEN c_mil_exists(	v_milestone_type,
1534 							v_commencement_dt + v_offset_days);
1535 				FETCH c_mil_exists INTO v_dummy;
1536 				IF c_mil_exists%NOTFOUND THEN
1537 					CLOSE c_mil_exists;
1538 					OPEN c_mil_seq_num;
1539 					FETCH c_mil_seq_num INTO v_mil_sequence_number;
1540 					CLOSE c_mil_seq_num;
1541                                -- if condition removed for Enh#3577974 for milestone validation build EN303
1542                                IGS_PR_MILESTONE_PKG.INSERT_ROW(
1543                                                 X_ROWID => LV_ROWID,
1544 								X_PERSON_ID => p_person_id,
1545 								X_ca_sequence_number => p_ca_sequence_number,
1546 								X_sequence_number => v_mil_sequence_number,
1547  								X_milestone_type => v_milestone_type,
1548 								X_milestone_status => v_milestone_status,
1549 								X_due_dt => v_commencement_dt + v_offset_days,
1550                                                 X_DESCRIPTION  => NULL,
1551 								X_ACTUAL_REACHED_DT => NULL,
1552 								X_PRECED_SEQUENCE_NUMBER => NULL,
1553 								X_OVRD_NTFCTN_IMMINENT_DAYS => NULL,
1554 								X_OVRD_NTFCTN_REMINDER_DAYS =>  NULL,
1555 								X_OVRD_NTFCTN_RE_REMINDER_DAYS => NULL,
1556 								X_COMMENTS   => NULL,
1557 								X_ORG_ID	=> v_org_id,
1558                                                 X_MODE => 'R');
1559 
1560 					v_records_inserted := v_records_inserted + 1;
1561 				ELSE
1562 					CLOSE c_mil_exists;
1563 				END IF;
1564 			FETCH c_dms INTO	v_milestone_type,
1565 						v_offset_days;
1566 			EXIT WHEN c_dms%NOTFOUND;
1567 		END LOOP;
1568 		CLOSE c_dms;
1569 	ELSE
1570 		CLOSE c_dms;
1571 	END IF;
1572 	IF v_records_inserted = 0 THEN
1573 		-- If no records found
1574 		p_message_name := 'IGS_RE_NO_DFLT_MILSTN_EXIST';
1575 		RETURN FALSE;
1576 	END IF;
1577 	-- Commit Changes
1578 	COMMIT;
1579 	RETURN TRUE;
1580 EXCEPTION
1581 	WHEN OTHERS THEN
1582 		IF c_mil_exists%ISOPEN THEN
1583 			CLOSE c_mil_exists;
1584 		END IF;
1585 		IF c_ca_detail%ISOPEN THEN
1586 			CLOSE c_ca_detail;
1587 		END IF;
1588 		IF c_sca%ISOPEN THEN
1589 			CLOSE c_sca;
1590 		END IF;
1591 		IF c_acai%ISOPEN THEN
1592 			CLOSE c_acai;
1593 		END IF;
1594 		IF c_mst_planned%ISOPEN THEN
1595 			CLOSE c_mst_planned;
1596 		END IF;
1597 		IF c_dms%ISOPEN THEN
1598 			CLOSE c_dms;
1599 		END IF;
1600 		IF c_mil_seq_num%ISOPEN THEN
1601 			CLOSE c_mil_seq_num;
1602 		END IF;
1603 		RAISE;
1604 END;
1605 EXCEPTION
1606 	WHEN OTHERS THEN
1607 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
1608 		IGS_GE_MSG_STACK.ADD;
1609 		App_Exception.Raise_Exception;
1610 END  resp_ins_dflt_mil;
1611 
1612 
1613 END IGS_RE_GEN_002 ;