DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_VAL_SCT

Source


1 PACKAGE BODY IGS_EN_VAL_SCT AS
2 /* $Header: IGSEN66B.pls 120.1 2005/12/05 07:13:31 appldev ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    25-AUG-2001     Bug No. 1956374 .Modified function GENP_VAL_SDTT_SESS
7   --ckasu       20-Nov-2004     modified enrp_val_sua_trnsfr and enrp_val_sct_to procedure
8   --                            as aprt of program transfer build bug#4000939
9   --ckasu       06-Dec-2004     modified enrp_val_sua_trnsfr procedure as a part of bug#4048248
10   --                            inorder to transfer discontinue unit attempt with result other
11   --                            than fail from source prgm to dest prgm.
12   -- smaddali   21-dec-04       Modified wrong message name in proc enrp_val_sct_to for bug#4080736
13   -- smaddali  21-dec-04       modified parameter in procedure enrp_val_sua_acad for bug#4083358
14   -- amuthu     23-Dec-2004     The source program for a transfer could be unconfirmed.
15   -- bdeviset   07-JAN-2005     Bug# 4103437.Modified enrp_val_sct_to,enrp_val_sct_from.To avoid having
16   --                            when a source/destination is already invloved in a stored transfer.
17   -------------------------------------------------------------------------------------------
18 
19   --
20   -- Validate the enrolment period for a transferred course_attempt.
21   FUNCTION enrp_val_scae_acad(
22   p_person_id IN NUMBER ,
23   p_course_cd IN VARCHAR2 ,
24   p_cal_type IN VARCHAR2 ,
25   p_message_name OUT NOCOPY VARCHAR2)
26   RETURN BOOLEAN AS
27 
28   BEGIN	-- enrp_val_scae_acad
29   	-- When transferring a IGS_EN_STDNT_PS_ATT and the calendar
30   	-- type of the IGS_PS_OFR_OPT varies from that of the
31   	-- original course, validate that the enrolment period of the
32   	-- current IGS_AS_SC_ATMPT_ENR is also a sub-ordinate of the
33   	-- new calendar type.
34   DECLARE
35   	v_ci_sequence_number	IGS_AS_SC_ATMPT_ENR.ci_sequence_number%TYPE;
36   	v_cal_type		IGS_AS_SC_ATMPT_ENR.cal_type%TYPE;
37   	v_enrolment_cat		IGS_AS_SC_ATMPT_ENR.enrolment_cat%TYPE;
38   	v_ret			BOOLEAN;
39   	CURSOR	c_scae_ci IS
40   		SELECT	scae.cal_type,
41   			scae.ci_sequence_number,
42   			scae.enrolment_cat
43   		FROM	IGS_AS_SC_ATMPT_ENR	scae,
44   			IGS_CA_INST		ci
45   		WHERE	scae.person_id	= p_person_id AND
46   			scae.course_cd	= p_course_cd AND
47   			scae.cal_type	= ci.cal_type AND
48   			scae.ci_sequence_number = ci.sequence_number
49   		ORDER BY ci.start_dt DESC;
50   BEGIN
51   	p_message_name := null;
52   	-- Check parameters.
53   	IF p_person_id IS NULL OR
54   			p_course_cd 	IS NULL OR
55   			p_cal_type 	IS NULL THEN
56   		RETURN TRUE;
57   	END IF;
58   	-- Get the current enrolment period from the latest
59   	-- student course attempt enrolment record.
60   	OPEN c_scae_ci;
61   	FETCH c_scae_ci INTO v_cal_type,
62   				v_ci_sequence_number,
63   				v_enrolment_cat;
64   	IF (c_scae_ci%NOTFOUND) THEN
65   		CLOSE c_scae_ci;
66   		p_message_name := 'IGS_EN_NO_SPA_ENR_EXISTS';
67   		RETURN FALSE;
68   	END IF;
69   	CLOSE c_scae_ci;
70   	v_ret := IGS_EN_GEN_008.ENRP_GET_WITHIN_CI (
71   					p_cal_type,
72   					NULL,
73   					v_cal_type,
74   					v_ci_sequence_number,
75   					FALSE);
76   	IF v_ret = FALSE THEN
77   		p_message_name := 'IGS_EN_CURENR_PRD_NOT_SUBORD';
78   		RETURN FALSE;
79   	END IF;
80   	RETURN TRUE;
81   EXCEPTION
82   	WHEN OTHERS THEN
83   		IF (c_scae_ci%ISOPEN) THEN
84   			CLOSE c_scae_ci;
85   		END IF;
86   		RAISE;
87   END;
88   EXCEPTION
89   	WHEN OTHERS THEN
90 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
91 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_scae_acad');
92 		IGS_GE_MSG_STACK.ADD;
93 			App_Exception.Raise_Exception;
94   END enrp_val_scae_acad;
95   --
96   -- Validate the IGS_PS_OFR_OPT for a transferred unit_attempt
97   -- smaddali modified parameter for bug#4083358
98   FUNCTION enrp_val_sua_acad(
99   p_person_id IN NUMBER ,
100   p_course_cd IN VARCHAR2 ,
101   p_uoo_id    IN NUMBER,
102   p_cal_type IN VARCHAR2 ,
103   p_message_name OUT NOCOPY VARCHAR2)
104   RETURN BOOLEAN AS
105 
106   BEGIN	-- enrp_val_sua_acad
107   	-- Validate whether the ENROLLED unit attempt has a link to an instance of
108   	-- their enrolled course academic calendar type.
109   	-- This is the result of a change of course offering option calendar type
110   	-- during a course transfer.
111   DECLARE
112   	v_acad_cal_type			IGS_CA_INST.cal_type%TYPE;
113   	v_acad_ci_sequence_number	IGS_CA_INST.sequence_number%TYPE;
114   	v_acad_ci_start_dt		IGS_CA_INST.start_dt%TYPE;
115   	v_acad_ci_end_dt		IGS_CA_INST.end_dt%TYPE;
116   	v_alternate_code		IGS_CA_INST.alternate_code%TYPE;
117   	v_message_name			varchar2(30);
118   	CURSOR c_sua IS
119   		SELECT	sua.cal_type,
120   			sua.ci_sequence_number
121   		FROM	IGS_EN_SU_ATTEMPT	sua
122   		WHERE	person_id		= p_person_id	AND
123   			   course_cd		= p_course_cd	AND
124   			   uoo_id			= p_uoo_id	;
125   	v_sua_rec		c_sua%ROWTYPE;
126   BEGIN
127   	-- Set the default message number
128   	p_message_name := null;
129   	-- 1. Check parameters.
130   	IF p_person_id			IS NULL	OR
131   			p_course_cd	IS NULL	OR
132   			p_uoo_id	IS NULL	OR
133   			p_cal_type	IS NULL		THEN
134   		RETURN TRUE;
135   	END IF;
136   	-- 2. Fetch the unit attempt record.
137   	OPEN c_sua;
138   	FETCH c_sua INTO v_sua_rec;
139   	IF c_sua%NOTFOUND THEN
140   		-- this should not happen
141   		CLOSE c_sua;
142   		RETURN TRUE;
143   	END IF;
144   	CLOSE c_sua;
145   	-- 3. Check if a link exists.
146   	v_alternate_code := IGS_EN_GEN_002.ENRP_GET_ACAD_ALT_CD(
147   					v_sua_rec.cal_type,
148   					v_sua_rec.ci_sequence_number,
149   					v_acad_cal_type,
150   					v_acad_ci_sequence_number,
151   					v_acad_ci_start_dt,
152   					v_acad_ci_end_dt,
153   					v_message_name);
154   	IF v_acad_cal_type IS NULL OR v_acad_cal_type <> p_cal_type THEN
155   		p_message_name := 'IGS_EN_UA_TEACHPRD_NOTLINKED';
156   		RETURN FALSE;
157   	END IF;
158   	-- 4. Set p_message_name to 0
159   	RETURN TRUE;
160   EXCEPTION
161   	WHEN OTHERS THEN
162   		IF c_sua%ISOPEN THEN
163   			CLOSE c_sua;
164   		END IF;
165   		RAISE;
166   END;
167   EXCEPTION
168   	WHEN OTHERS THEN
169 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
170 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_sua_acad');
171 		IGS_GE_MSG_STACK.ADD;
172 			App_Exception.Raise_Exception;
173   END enrp_val_sua_acad;
174   --
175   -- To validate student course transfer insert
176   FUNCTION enrp_val_sct_insert(
177   p_person_id IN NUMBER ,
178   p_course_cd IN VARCHAR2 ,
179   p_transfer_course_cd IN VARCHAR2 ,
180   p_transfer_dt IN DATE ,
181   p_message_name OUT NOCOPY VARCHAR2)
182   RETURN BOOLEAN AS
183 
184   BEGIN	-- enrp_val_sct_insert
185   	-- This module validates IGS_PS_STDNT_TRN courses.
186   	-- Course_cd and transfer_course_cd must not be the same.
187   	-- Course_cd and transfer_course_cd must be in a system defined course transfer
188   	-- group type, and must be members of the same group.
189   	-- Validate course_cd.
190   	-- Validate transfer_course_cd.
191   DECLARE
192   	cst_unconfirm	CONSTANT	VARCHAR(9) := 'UNCONFIRM';
193   	cst_transfer	CONSTANT	VARCHAR(8) := 'TRANSFER';
194   	cst_admtransfr	CONSTANT	VARCHAR(10) := 'ADMTRANSFR';
195   	v_dummy				VARCHAR2(1);
196   	v_message_name			varchar2(30);
197   	v_to_version_number		IGS_EN_STDNT_PS_ATT.version_number%TYPE;
198   	v_to_course_attempt_status	IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
199    	v_to_acai_sequence_number	IGS_EN_STDNT_PS_ATT.adm_sequence_number%TYPE;
200   	v_s_course_group_type		IGS_PS_GRP_TYPE.s_course_group_type%TYPE;
201   	v_from_version_number		IGS_EN_STDNT_PS_ATT.version_number%TYPE;
202   	v_from_course_attempt_status
203   		IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
204   	v_to_admission_appl_number
205   		IGS_EN_STDNT_PS_ATT.adm_admission_appl_number%TYPE;
206    	v_to_nominated_course_cd
207   		IGS_EN_STDNT_PS_ATT.adm_nominated_course_cd%TYPE;
208   	CURSOR	c_sca_to IS
209   		SELECT 	sca.version_number,
210   			sca.course_attempt_status,
211   			sca.adm_admission_appl_number,
212   			sca.adm_nominated_course_cd ,
213   			sca.adm_sequence_number
214   		FROM	IGS_EN_STDNT_PS_ATT sca
215   		WHERE	sca.person_id = p_person_id AND
216   			sca.course_cd = p_course_cd;
217   	CURSOR c_sca_from IS
218   		SELECT 	sca.version_number,
219   			sca.course_attempt_status
220   		FROM	IGS_EN_STDNT_PS_ATT sca
221   		WHERE	sca.person_id = p_person_id AND
222   			sca.course_cd = p_transfer_course_cd;
223   	CURSOR c_cgm_cg_cgt(
224   		cp_s_course_group_type	IGS_PS_GRP_TYPE.s_course_group_type%TYPE,
225   		cp_to_version_number 	IGS_EN_STDNT_PS_ATT.version_number%TYPE,
226   		cp_from_version_number	IGS_EN_STDNT_PS_ATT.version_number%TYPE)
227   	IS
228   		SELECT	'x'
229   		FROM 	IGS_PS_GRP_MBR cgm,
230   			IGS_PS_GRP cg,
231   			IGS_PS_GRP_TYPE cgt
232   		WHERE	cgm.course_cd 		= p_course_cd 			AND
233   			cgm.version_number	= cp_to_version_number 		AND
234   			cgt.s_course_group_type = cp_s_course_group_type 	AND
235   			cg.course_group_cd 	= cgm.course_group_cd 		AND
236   			cg.course_group_type 	= cgt.course_group_type 	AND
237   			EXISTS	(SELECT 'x'
238   				FROM 	IGS_PS_GRP_MBR cgm2
239   				WHERE	cgm2.course_cd 		= p_transfer_course_cd 		AND
240   					cgm2.version_number 	= cp_from_version_number 	AND
241   					cgm2.course_group_cd 	= cgm.course_group_cd);
242   BEGIN
243   	p_message_name := null;
244   	-- Validate that transfer 'from' and 'to' course codes are not the same.
245   	IF p_course_cd = p_transfer_course_cd THEN
246   		p_message_name := 'IGS_EN_UA_FAILS_ST_INVALID';
247   		RETURN FALSE;
248   	END IF;
249   	-- Get student course attempt details for transfer 'to' IGS_PS_COURSE
250   	OPEN c_sca_to;
251   	FETCH c_sca_to INTO	v_to_version_number,
252   				v_to_course_attempt_status,
253    				v_to_admission_appl_number,
254    				v_to_nominated_course_cd,
255    				v_to_acai_sequence_number;
256   	IF (c_sca_to%NOTFOUND) THEN
257   		-- Return, This error will be resolved elsewhere.
258   		CLOSE c_sca_to;
259   		p_message_name := null;
260   		RETURN FALSE;
261   	ELSE
262   		CLOSE c_sca_to;
263   		-- Set system course group type depending on status of transfer 'to'
264   		-- course attempt
265   		IF v_to_course_attempt_status = cst_unconfirm THEN
266   			v_s_course_group_type := cst_admtransfr;
267   		ELSE
268   			v_s_course_group_type := cst_transfer;
269   		END IF;
270   	END IF;
271   	-- Get student course attempt details for transfer 'from' course
272   	OPEN c_sca_from;
273   	FETCH c_sca_from INTO 	v_from_version_number,
274   				v_from_course_attempt_status;
275   	IF (c_sca_from%NOTFOUND) THEN
276   		-- Return, This error will be resolved elsewhere.
277   		CLOSE c_sca_from;
278   		p_message_name := null;
279   		RETURN TRUE;
280   	END IF;
281   	CLOSE c_sca_from;
282   	-- Validate that transfer 'from' and transfer 'to' course attempts are
283   	-- members of the same course group, and are mapped to system course group
284   	-- type 'TRANSFER' or 'ADMTRANSFR'.
285   	OPEN c_cgm_cg_cgt(
286   		v_s_course_group_type,
287   		v_to_version_number,
288   		v_from_version_number);
289   	FETCH c_cgm_cg_cgt INTO v_dummy;
290   	IF (c_cgm_cg_cgt%NOTFOUND) THEN
291   		CLOSE c_cgm_cg_cgt;
292   		p_message_name := 'IGS_EN_TOPRG_TRNS_TO_PRG';
293   		RETURN FALSE;
294   	END IF;
295   	CLOSE c_cgm_cg_cgt;
296   	-- Validate transfer 'to' course code
297   	IF IGS_EN_VAL_SCT.enrp_val_sct_to(
298   			p_person_id,
299   			p_course_cd,
300   			p_transfer_dt,
301   			v_to_version_number,
302   			v_to_course_attempt_status,
303   			v_to_admission_appl_number,
304   			v_to_nominated_course_cd,
305   			v_to_acai_sequence_number,
306   			v_message_name) = FALSE THEN
307   		p_message_name := v_message_name;
308   		RETURN FALSE;
309   	END IF;
310   	-- Validate transfer 'from' course code
311   	IF IGS_EN_VAL_SCT.enrp_val_sct_from(
312   			p_person_id,
313   			p_course_cd,
314   			p_transfer_course_cd,
315   			p_transfer_dt,
316   			v_from_course_attempt_status,
317   			v_message_name) = FALSE THEN
318   		p_message_name := v_message_name;
319   		RETURN FALSE;
320   	END IF;
321   	RETURN TRUE;
322   EXCEPTION
323   	WHEN OTHERS THEN
324   		IF (c_sca_to%ISOPEN) THEN
325   			CLOSE c_sca_to;
326   		END IF;
327   		IF (c_sca_from%ISOPEN) THEN
328   			CLOSE c_sca_from;
329   		END IF;
330   		IF (c_cgm_cg_cgt%ISOPEN) THEN
331   			CLOSE c_cgm_cg_cgt;
332   		END IF;
333   		RAISE;
334   END;
335   EXCEPTION
336   	WHEN OTHERS THEN
337 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
338 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_sct_insert');
339 		IGS_GE_MSG_STACK.ADD;
340 			App_Exception.Raise_Exception;
341   END enrp_val_sct_insert;
342   --
343   -- To validate student course transfer 'to' course code
344   FUNCTION enrp_val_sct_to(
345   p_person_id IN NUMBER ,
346   p_course_cd IN VARCHAR2 ,
347   p_transfer_dt IN DATE ,
348   p_crv_version_number IN NUMBER ,
349   p_course_attempt_status IN VARCHAR2 ,
350   p_admission_appl_number IN NUMBER ,
351   p_nominated_course_cd IN VARCHAR2 ,
352   p_acai_sequence_number IN NUMBER ,
353   p_message_name OUT NOCOPY VARCHAR2)
354   RETURN BOOLEAN AS
355 
356 
357   -------------------------------------------------------------------------------------------
358   --Change History:
359   --Who         When            What
360   --ckasu       20-Nov-2004     modified procedure by removing message IGS_EN_TRANSDT_NOTBE_FUTUREDT
361   --                            and corresponding if condition as aprt of program transfer
362   --                            build bug#4000939
363   --bdeviset    07-JAN-2005    Bug# 4103437.Modified cursor c_sct. To avoid having another transfer
364   --                            when a destination program is already invloved in a stored transfer.
365   -------------------------------------------------------------------------------------------
366   BEGIN	-- enrp_val_sct_to
367   	-- This module validates IGS_PS_STDNT_TRN.course_cd details.
368   	-- Course_cd must not be course version defined as generic.
369   	-- Course_cd must map to IGS_EN_STDNT_PS_ATT whose course_attempt_status
370   	-- is 'ENROLLED', 'INTERMIT', 'INACTIVE' or ('UNCONFIRM'  and
371   	-- admission_course_appl matching transfer details exist).
372   	-- NOTE: also allow 'DISCONTIN' to prevent invalid lifting of discontinuation
373   	-- through ENRF3000.
374   	-- If IGS_EN_STDNT_PS_ATT is created through Admissions, the related
375   	-- IGS_AD_PS_APPL_INST.IGS_AD_OU_STAT must map to
376   	-- s_adm_outcome_status 'OFFER', 'COND-OFFER'.
377   	-- If IGS_EN_STDNT_PS_ATT is created through Admissions, the related
378   	-- IGS_AD_PS_APPL_INST.IGS_AD_OFR_RESP_STAT must map to
379   	-- s_adm_offer_resp_status 'REJECTED', 'LAPSED'.
380   	-- Course_cd must not have existing IGS_PS_STDNT_TRN mapping whose
381   	-- transfer_dt is >= this transfer_dt.
382   	-- Transfer_dt >= IGS_EN_STDNT_PS_ATT.commencement_dt and <= today's date
383   DECLARE
384   	cst_lapsed	CONSTANT	VARCHAR2(6) := 'LAPSED';
385   	cst_discontin	CONSTANT	VARCHAR2(9) := 'DISCONTIN';
386   	cst_completed	CONSTANT	VARCHAR2(9) := 'COMPLETED';
387   	cst_transfer	CONSTANT	VARCHAR2(8) := 'TRANSFER';
388   	cst_unconfirm	CONSTANT	VARCHAR2(9) := 'UNCONFIRM';
389   	v_dummy				VARCHAR2(1);
390   	v_generic_course_ind		IGS_PS_VER.generic_course_ind%TYPE;
391   	v_s_admission_process_type	IGS_AD_APPL.s_admission_process_type%TYPE;
392   	v_adm_outcome_status		IGS_AD_PS_APPL_INST.adm_outcome_status%TYPE;
393   	v_adm_offer_resp_status		IGS_AD_PS_APPL_INST.adm_offer_resp_status%TYPE;
394   	v_commencement_dt		IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE;
395   	CURSOR	c_cv IS
396   		SELECT	generic_course_ind
397   		FROM 	IGS_PS_VER cv
398   		WHERE 	cv.course_cd 		= p_course_cd AND
399   			cv.version_number 	= p_crv_version_number;
400   	CURSOR c_aa IS
401   		SELECT 	s_admission_process_type
402   		FROM	IGS_AD_APPL aa
403   		WHERE	aa.person_id 			= p_person_id AND
404   			aa.admission_appl_number 	= p_admission_appl_number;
405   	CURSOR c_acai IS
406   		SELECT 	adm_outcome_status,
407   			adm_offer_resp_status
408   		FROM 	IGS_AD_PS_APPL_INST acai
409   		WHERE	acai.person_id 			= p_person_id 			AND
410   			acai.admission_appl_number 	= p_admission_appl_number 	AND
411   			acai.nominated_course_cd 	= p_nominated_course_cd		AND
412   			acai.sequence_number		= p_acai_sequence_number;
413 
414     -- cursor to check if a destination program is already invloved in a stored transfer
415   	CURSOR c_sct IS
416   		SELECT 	'x'
417   		FROM	IGS_PS_STDNT_TRN sct
418   		WHERE	sct.person_id 		= p_person_id 	AND
419   			(course_cd 		= p_course_cd 	OR
420   			transfer_course_cd 	= p_course_cd) 	AND
421   			status_flag = 'U';
422   	CURSOR c_sca IS
423   		SELECT	sca.commencement_dt
424   		FROM	IGS_EN_STDNT_PS_ATT	sca
425   		WHERE	sca.person_id 	= p_person_id AND
426   			sca.course_cd 	= p_course_cd;
427   BEGIN
428   	p_message_name := null;
429   	-- Validate parameters
430   	IF p_person_id IS NULL OR
431   			p_course_cd 		IS NULL OR
432   			p_transfer_dt 		IS NULL OR
433   			p_crv_version_number 	IS NULL OR
434   			p_course_attempt_status IS NULL THEN
435   		p_message_name := 'IGS_GE_INSUFFICIENT_PARAMETER';
436   		RETURN FALSE;
437   	END IF;
438   	-- Validate that course attempt is not mapped to a course version that
439   	-- is defined as generic
440   	OPEN c_cv;
441   	FETCH c_cv INTO v_generic_course_ind;
442   	IF (c_cv%NOTFOUND) THEN
443   		-- return, this error will be resolved elsewhere
444   		CLOSE c_cv;
445   		p_message_name := null;
446   		RETURN TRUE;
447   	ELSE
448   		IF (v_generic_course_ind = 'Y') THEN
449   			CLOSE c_cv;
450   			p_message_name := 'IGS_EN_TOPRG_NOT_MAP';
451   			RETURN FALSE;
452   		END IF;
453   	END IF;
454   	-- Validate course attempt status and related admission status
455     -- smaddali modified message name from 3942 to IGS_EN_TOPRG_NOT_LAPSED, bug#4080736
456   	IF p_course_attempt_status IN (
457   			cst_lapsed,
458   			cst_completed) THEN
459   		p_message_name := 'IGS_EN_TOPRG_NOT_LAPSED';
460   		RETURN FALSE;
461   	ELSIF
462   		p_course_attempt_status = 'UNCONFIRM' THEN
463   		OPEN c_aa;
464   		FETCH c_aa INTO v_s_admission_process_type;
465   		IF (c_aa%NOTFOUND) OR
466   				v_s_admission_process_type <> cst_transfer THEN
467   			CLOSE c_aa;
468   			p_message_name := 'IGS_EN_TOPRG_NOT_UNCONFIRMED';
469   			RETURN FALSE;
470   		END IF;
471   		CLOSE c_aa;
472   		-- Cannot transfer if admission course application was not offered or
473   		-- The applicant has already responded, and rejected, or the application
474   		-- has lapsed
475   		OPEN c_acai;
476   		FETCH c_acai INTO 	v_adm_outcome_status,
477   					v_adm_offer_resp_status;
478   		IF (c_acai%NOTFOUND) THEN
479   			CLOSE c_acai;
480   			p_message_name := 'IGS_EN_TOPRG_NOT_ADMPRG_APPL';
481   			RETURN FALSE;
482   		ELSE
483   			CLOSE c_acai;
484   			-- Determine the admission course application is valid
485   			-- for course Transfer
486   			IF IGS_EN_GEN_002.ENRP_GET_ACAI_OFFER(
487   					v_adm_outcome_status,
488   					v_adm_offer_resp_status) = 'N' THEN
489   				p_message_name := 'IGS_EN_TOPRG_NOTLINK_ADMPRG';
490   				RETURN FALSE;
491   			END IF;
492   		END IF;
493   	END IF;
494   	-- Validate that student course transfer details do not already exist for
495   	-- this course attempt Where the transfer to date is >= this transfer date
496   	OPEN c_sct;
497   	FETCH c_sct INTO v_dummy;
498   	IF (c_sct%FOUND) THEN
499   		CLOSE c_sct;
500   		p_message_name := 'IGS_EN_TOPRG_TRNS_RELATIONSHI';
501   		RETURN FALSE;
502   	END IF;
503   	CLOSE c_sct;
504   	-- Validate that transfer date is on or after the course commencement date
505   	-- and on or before today's date
506   	-- IF p_transfer_dt > TRUNC(SYSDATE) THEN
507   		OPEN c_sca;
508   		FETCH c_sca INTO v_commencement_dt;
509   		IF (c_sca%NOTFOUND) THEN
510   			CLOSE c_sca;
511   			p_message_name := null;
512   			RETURN TRUE;	-- this should never occur
513   		ELSE
514   			CLOSE c_sca;
515   			IF v_commencement_dt IS NOT NULL AND
516   					p_transfer_dt < v_commencement_dt THEN
517   				p_message_name := 'IGS_EN_TRANSDT_NOTBE_PRIOR';
518   				RETURN FALSE;
519   			END IF;
520   		END IF;
521 
522   	RETURN TRUE;
523   EXCEPTION
524   	WHEN OTHERS THEN
525   		IF (c_cv%ISOPEN) THEN
526   			CLOSE c_cv;
527   		END IF;
528   		IF (c_aa%ISOPEN) THEN
529   			CLOSE c_aa;
530   		END IF;
531   		IF (c_acai%ISOPEN) THEN
532   			CLOSE c_acai;
533   		END IF;
534   		IF (c_sct%ISOPEN) THEN
535   			CLOSE c_sct;
536   		END IF;
537   		IF (c_sca%ISOPEN) THEN
538   			CLOSE c_sca;
539   		END IF;
540   		RAISE;
541   END;
542   EXCEPTION
543   	WHEN OTHERS THEN
544 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
545 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_sct_to');
546 		IGS_GE_MSG_STACK.ADD;
547 			App_Exception.Raise_Exception;
548   END enrp_val_sct_to;
549   --
550   -- To validate student course transfer 'from' course code
551   FUNCTION enrp_val_sct_from(
552   p_person_id IN NUMBER ,
553   p_course_cd IN VARCHAR2 ,
554   p_transfer_course_cd IN VARCHAR2 ,
555   p_transfer_dt IN DATE ,
556   p_course_attempt_status IN VARCHAR2 ,
557   p_message_name OUT NOCOPY VARCHAR2)
558   RETURN BOOLEAN AS
559 
560   --Change History :
561   --Who             When            What
562   --bdeviset    07-JAN-2005    Bug# 4103437.Modified cursor c_sct_sca. To avoid having another transfer
563   --                            when a source program is already invloved in a stored transfer.
564 
565   BEGIN	-- enrp_val_sct_from
566   	-- This module validates IGS_PS_STDNT_TRN.transfer_course_cd details.
567   	-- Transfer_course_cd must map to IGS_EN_STDNT_PS_ATT whose
568   	-- course_attempt_status is 'ENROLLED', 'DISCONTIN', 'INACTIVE',
569   	-- 'INTERMIT', 'COMPLETED', 'LAPSED'.
570   	-- Transfer_course_cd must not have existing IGS_PS_STDNT_TRN mapping
571   	-- whose transfer_dt is >= this transfer_dt.
572   	-- Transfer_course_cd is not currently transferred to IGS_EN_STDNT_PS_ATT
573   	-- with course_attempt_status 'ENROLLED', 'INACTIVE', 'INTERMIT','LAPSED'.
574   DECLARE
575   	cst_enrolled	CONSTANT 	VARCHAR2(10) := 'ENROLLED';
576   	cst_inactive	CONSTANT 	VARCHAR2(10) := 'INACTIVE';
577   	cst_intermit	CONSTANT 	VARCHAR2(10) := 'INTERMIT';
578   	cst_lapsed	CONSTANT 	VARCHAR2(10) := 'LAPSED';
579   	cst_unconfirm	CONSTANT 	VARCHAR2(10) := 'UNCONFIRM';
580   	v_dummy		VARCHAR2(1);
581 
582  --cursor to check if a source program is  invloved in a stored transfer
583 
584 CURSOR c_sct_sca IS
585   		SELECT 	'x'
586   		FROM	IGS_PS_STDNT_TRN sct
587   		WHERE	sct.person_id 		= p_person_id 	AND
588   			(course_cd 		= p_transfer_course_cd 	OR
589   			transfer_course_cd 	= p_transfer_course_cd) 	AND
590   			status_flag = 'U';
591   BEGIN
592   	p_message_name := null;
593   	-- Validate parameters
594   	IF (p_person_id IS NULL OR
595   			p_course_cd	 	IS NULL OR
596   			p_transfer_course_cd 	IS NULL OR
597   			p_transfer_dt 		IS NULL OR
598   			p_course_attempt_status IS NULL) THEN
599   		p_message_name := 'IGS_GE_INSUFFICIENT_PARAMETER';
600   		RETURN FALSE;
601   	END IF;
602 /*
603     -- validate course_attempt_status
604   	IF p_course_attempt_status = cst_unconfirm THEN
605   		p_message_name := 'IGS_EN_FROMPRG_NOT_UNCONFIRM';
606   		RETURN FALSE;
607   	END IF;
608 */
609 
610   	-- Validate that transfer 'from' course attempt is not currently transferred
611   	-- to course attempt with enrolled, inactive or intermission course attempt
612   	-- status.
613   	OPEN c_sct_sca;
614   	FETCH c_sct_sca INTO v_dummy;
615   	IF (c_sct_sca%FOUND) THEN
616   		CLOSE c_sct_sca;
617   		p_message_name := 'IGS_EN_FROMPRG_TRNS_RELATION';
618   		RETURN FALSE;
619   	END IF;
620   	CLOSE c_sct_sca;
621   	RETURN TRUE;
622   EXCEPTION
623   	WHEN OTHERS THEN
624   		IF (c_sct_sca%ISOPEN) THEN
625   			CLOSE c_sct_sca;
626   		END IF;
627   		RAISE;
628   END;
629   EXCEPTION
630   	WHEN OTHERS THEN
631 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
632 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_sct_from');
633 		IGS_GE_MSG_STACK.ADD;
634 			App_Exception.Raise_Exception;
635   END enrp_val_sct_from;
636   --
637   -- To validate transfer of SUA.
638   FUNCTION enrp_val_sua_trnsfr(
639   p_person_id           IN NUMBER ,
640   p_course_cd           IN VARCHAR2 ,
641   p_unit_cd             IN VARCHAR2 ,
642   p_cal_type            IN VARCHAR2 ,
643   p_ci_sequence_number  IN NUMBER ,
644   p_unit_attempt_status IN VARCHAR2 ,
645   p_message_name        OUT NOCOPY VARCHAR2,
646   p_uoo_id              IN NUMBER,
647   p_unit_outcome   OUT NOCOPY VARCHAR2)
648   RETURN BOOLEAN AS
649 /*
650 ||  Created By : pkpatel
651 ||  Created On : 27-SEP-2002
652 ||  Purpose :
653 ||  Known limitations, enhancements or remarks :
654 ||  Change History :
655 ||  Who             When            What
656 ||  kkillams        21-03-2003      Modified validation, to bypass the IGS_EN_SUA_ENR_COMPL_DISCN_DU error message
657 ||                                  for the wait list units w.r.t bug 2863707
658 ||  kkillams        28-04-2003      Added new parameter p_uoo_id to the enrp_val_sua_trnsfr function
659 ||                                  w.r.t. bug number 2829262
660 ||  ckasu           20-Nov-2004     added new parameter p_unit_outcome as a part of Program Transfer build bug#4000939
661 ||  ckasu           06-Dec-2004     removed IF p_outcome <> 'FAIL' THEN as a part of bug#4048248 inorder to transfer
662 ||                                  discontinue unit attempt with result other than fail from source prgm to dest prgm.
663 */
664   BEGIN	-- enrp_val_sua_trnsfr
665   	-- This module validates that only student_unit_attempts with
666   	-- unit_attempt_status values of 'ENROLLED', 'COMPLETED',
667   	-- 'DISCONTIN' and 'DUPLICATE', can transferred as a result of
668   	-- a course transfer.
669 
670   DECLARE
671   	cst_completed	CONSTANT	VARCHAR(9)   := 'COMPLETED';
672   	cst_enrolled	CONSTANT	VARCHAR(9)   := 'ENROLLED';
673   	cst_discontin	CONSTANT	VARCHAR(9)   := 'DISCONTIN';
674   	cst_duplicate	CONSTANT	VARCHAR(9)   := 'DUPLICATE';
675   	cst_fail	CONSTANT	VARCHAR(9)   := 'FAIL';
676         cst_waitlist    CONSTANT        VARCHAR2(10) := 'WAITLISTED';
677         cst_invalid     CONSTANT        VARCHAR2(10) := 'INVALID';
678   	v_outcome_dt		IGS_AS_SU_STMPTOUT.outcome_dt%TYPE;
679   	v_grading_schema_cd	IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
680   	v_gs_version_number	IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
681   	v_grade			IGS_AS_GRD_SCH_GRADE.grade%TYPE;
682   	v_mark			IGS_AS_SU_STMPTOUT.mark%TYPE;
683   	v_origin_course_cd	IGS_AS_SU_STMPTOUT.course_cd%TYPE;
684   	v_s_result_type		IGS_LOOKUPS_VIEW.lookup_code%TYPE;
685   BEGIN
686 
687   	p_message_name := null;
688   	IF p_unit_attempt_status NOT IN (
689   					cst_completed,
690   					cst_enrolled,
691   					cst_discontin,
692   					cst_duplicate,
693                                         cst_waitlist,
694                                         cst_invalid) THEN
695   		p_message_name := 'IGS_EN_SUA_ENR_COMPL_DISCN_DU';
696   		RETURN FALSE;
697   	END IF;
698   	IF p_unit_attempt_status = cst_discontin THEN
699   		p_unit_outcome := IGS_AS_GEN_003.ASSP_GET_SUA_OUTCOME(
700   							p_person_id,
701   							p_course_cd,
702   							p_unit_cd,
703   							p_cal_type,
704   							p_ci_sequence_number,
705   							p_unit_attempt_status,
706   							'Y',
707   							v_outcome_dt,
708   							v_grading_schema_cd,
709   							v_gs_version_number,
710   							v_grade,
711   							v_mark,
712   							v_origin_course_cd,
713                                                         p_uoo_id,
714 --added by LKAKI---
715 							'N');
716 
717   	END IF;
718   	RETURN TRUE;
719   END;
720   EXCEPTION
721   	WHEN OTHERS THEN
722 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
723 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_sua_trnsfr');
724 		IGS_GE_MSG_STACK.ADD;
725 			App_Exception.Raise_Exception;
726   END enrp_val_sua_trnsfr;
727   --
728   -- To validate a student unit set attempt exists.
729   FUNCTION enrp_val_susa_exists(
730   p_person_id IN NUMBER ,
731   p_course_cd IN VARCHAR2 ,
732   p_unit_set_cd IN VARCHAR2 ,
733   p_us_version_number IN NUMBER ,
734   p_message_name OUT NOCOPY VARCHAR2)
735   RETURN BOOLEAN AS
736 
737   BEGIN	-- enrp_val_susa_exist
738   	-- Check that a student unit set attempt which
739   	-- is to be created as a result of a course transfer.
740   DECLARE
741   	CURSOR	c_susa IS
742   		SELECT	'x'
743   		FROM	IGS_AS_SU_SETATMPT
744   		WHERE	person_id 		= p_person_id AND
745   			course_cd 		= p_course_cd AND
746   			unit_set_cd 		= p_unit_set_cd AND
747   			us_version_number 	= p_us_version_number;
748   	v_susa_found	VARCHAR2(1) DEFAULT NULL;
749   BEGIN
750   	p_message_name := null;
751   	-- Check parameters
752   	IF p_person_id IS NULL OR
753   			p_course_cd IS NULL OR
754   			p_unit_set_cd IS NULL OR
755   			p_us_version_number IS NULL THEN
756   		RETURN TRUE;
757   	END IF;
758   	-- Check whether student unit attempt already exist.
759   	-- This could be as a result of a proir transfer or admissions pre-enrolment.
760   	OPEN c_susa;
761   	FETCH c_susa INTO v_susa_found;
762   	IF (c_susa%FOUND) THEN
763   		CLOSE c_susa;
764   		p_message_name := 'IGS_EN_SUA_SET_ATT_TRNS_EXIST';
765   		RETURN FALSE;
766   	END IF;
767   	CLOSE c_susa;
768   	RETURN TRUE;
769   EXCEPTION
770   	WHEN OTHERS THEN
771   		IF (c_susa%ISOPEN) THEN
772   			CLOSE c_susa;
773   		END IF;
774   		RAISE;
775   END;
776   EXCEPTION
777   	WHEN OTHERS THEN
778 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
779 		FND_MESSAGE.SET_TOKEN('NAME', 'IGS_EN_VAL_SCT.enrp_val_susa_exists');
780 		IGS_GE_MSG_STACK.ADD;
781 			App_Exception.Raise_Exception;
782   END enrp_val_susa_exists;
783 
784 END ;