DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RE_VAL_TPM

Source


1 PACKAGE BODY IGS_RE_VAL_TPM AS
2 /* $Header: IGSRE17B.pls 120.1 2006/01/24 01:32:59 bdeviset 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   --msrinivi    25-Aug-2001    Bug No.  1956374. the func genp_val_pe_deceased removed
8   -- smaddali  11-may-04      Bug#3577988 - EN302 build, corrected message name IGS_RE_ CANT_UNCNFRM_PAID_DT to remove the space
9   -- bdeviset  24-JAN-06      Removed the cursor c_pe in RESP_VAL_TPM_PE procedure and used igs_en_gen_003.get_staff_ind call
10   --                          for bug# 4991049
11   -------------------------------------------------------------------------------------------
12    -- To validate thesis panel member minimum panel size
13   FUNCTION RESP_VAL_TPM_MIN(
14   p_person_id IN NUMBER ,
15   p_ca_sequence_number IN NUMBER ,
16   p_the_sequence_number IN NUMBER ,
17   p_creation_dt IN DATE ,
18   p_thesis_panel_type IN VARCHAR2 ,
19   p_message_name OUT NOCOPY VARCHAR2 )
20   RETURN BOOLEAN AS
21   BEGIN	-- func_module
22   DECLARE
23   	v_tpt_recommended_panel_size	IGS_RE_THS_PNL_TYPE.recommended_panel_size%TYPE;
24   	v_panel_cnt			NUMBER;
25   	CURSOR c_tpt IS
26   		SELECT	tpt.recommended_panel_size
27   		FROM	IGS_RE_THS_PNL_TYPE tpt
28   		WHERE	thesis_panel_type = p_thesis_panel_type;
29   	CURSOR c_tpm IS
30   		SELECT	count('x')
31   		FROM	IGS_RE_THS_PNL_MBR tpm
32   		WHERE	ca_person_id	= p_person_id AND
33   			ca_sequence_number = p_ca_sequence_number AND
34   			the_sequence_number = p_the_sequence_number AND
35   			creation_dt = p_creation_dt AND
36   			confirmed_dt IS NOT NULL;
37   BEGIN
38   	-- Set the default message number
39   	p_message_name := NULL;
40   	--1. Select panel size from thesis panel type
41   	OPEN c_tpt;
42   	FETCH c_tpt INTO v_tpt_recommended_panel_size;
43   	IF c_tpt%NOTFOUND THEN
44   		CLOSE c_tpt;
45   		--Invalid parameters - return true
46   		RETURN TRUE;
47   	END IF;
48   	CLOSE c_tpt;
49   	IF v_tpt_recommended_panel_size IS NULL OR
50   			v_tpt_recommended_panel_size =0 THEN
51   		--No panel size specified - warning not applicable.
52   		RETURN TRUE;
53   	END IF;
54   	OPEN c_tpm;
55   	FETCH c_tpm INTO v_panel_cnt;
56   	IF c_tpm%NOTFOUND THEN
57   		CLOSE c_tpm;
58   		RAISE NO_DATA_FOUND;
59   	END IF;
60   	CLOSE c_tpm;
61   	If v_panel_cnt >= v_tpt_recommended_panel_size then
62   		p_message_name := 'IGS_RE_RECOM_PANEL_SIZE_REACH';
63   		Return TRUE;		-- Warning Only
64   	End IF;
65   	-- Return the default value
66   	RETURN TRUE;
67   EXCEPTION
68   	WHEN OTHERS THEN
69   		IF c_tpt %ISOPEN THEN
70   			CLOSE c_tpt;
71   		END IF;
72   		IF c_tpm %ISOPEN THEN
73   			CLOSE c_tpm;
74   		END IF;
75   		RAISE;
76   END;
77   EXCEPTION
78 	WHEN OTHERS THEN
79 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
80 		IGS_GE_MSG_STACK.ADD;
81 		App_Exception.Raise_Exception;
82   END RESP_VAL_TPM_MIN;
83   --
84 
85   -- To validate the thesis panel member chair indicator
86   FUNCTION RESP_VAL_TPM_CHAIR(
87   p_ca_person_id IN NUMBER ,
88   p_ca_sequence_number IN NUMBER ,
89   p_the_sequence_number IN NUMBER ,
90   p_creation_dt IN DATE ,
91   p_message_name OUT NOCOPY VARCHAR2 )
92   RETURN BOOLEAN AS
93   BEGIN	-- resp_val_tpm_chair
94   	-- Description: Validate that there is only one confirmed
95   	-- chairperson on the panel.
96   DECLARE
97   	v_loop_bool		BOOLEAN DEFAULT FALSE;
98   	CURSOR	c_tpm_tpmpt IS
99   		SELECT	'X'
100   		FROM	IGS_RE_THS_PNL_MBR		tpm,
101   			IGS_RE_THS_PNL_MR_TP	tpmpt
102   		WHERE	tpm.ca_person_id		= p_ca_person_id AND
103   			tpm.ca_sequence_number		= p_ca_sequence_number AND
104   			tpm.the_sequence_number		= p_the_sequence_number AND
105   			tpm.creation_dt			= p_creation_dt AND
106   			tpm.confirmed_dt IS NOT NULL AND
107   			tpmpt.panel_member_type 	= tpm.panel_member_type AND
108   			tpmpt.panel_chair_ind 		= 'Y';
109   	v_dummy		VARCHAR2(1);
110   BEGIN
111   	p_message_name := NULL;
112   	FOR v_tpm_tpmpt_dummy IN c_tpm_tpmpt
113   	LOOP
114   		IF((c_tpm_tpmpt%ROWCOUNT) > 1) THEN
115   			p_message_name := 'IGS_RE_ONLY_ONE_CHAIRPERSON';
116   			v_loop_bool := TRUE;
117   			EXIT;
118   		END IF;
119   	END LOOP;
120   	IF (v_loop_bool = TRUE) THEN
121   		RETURN FALSE;
122   	END IF;
123   	RETURN TRUE;
124   EXCEPTION
125   	WHEN OTHERS THEN
126   	IF (c_tpm_tpmpt%ISOPEN) THEN
127   		CLOSE c_tpm_tpmpt;
128   	END IF;
129   	RAISE;
130   END;
131   EXCEPTION
132 	WHEN OTHERS THEN
133 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
134 		IGS_GE_MSG_STACK.ADD;
135 		App_Exception.Raise_Exception;
136   END resp_val_tpm_chair;
137   --
138   -- To validate thesis panel member paid date
139   FUNCTION RESP_VAL_TPM_PAID(
140   p_paid_dt IN DATE ,
141   p_confirmed_dt IN DATE ,
142   p_message_name OUT NOCOPY VARCHAR2 )
143   RETURN BOOLEAN AS
144   BEGIN	-- resp_val_tpm_paid
145   	-- Description: Validate the IGS_RE_THS_PNL_MBR.paid_dt, checking for:
146   	-- * Cannot set if confirmed_dt is null
147   	-- * Cannot be a future date
148   	-- * Cannot be prior to confirmed_dt
149   DECLARE
150   BEGIN
151   	p_message_name := NULL;
152   	IF p_paid_dt IS NOT NULL THEN
153   		--1. Can only be set when confirmed panel member
154   		IF p_confirmed_dt IS NULL THEN
155   			p_message_name := 'IGS_RE_CANT_SET_PAID_DATE';
156   			RETURN FALSE;
157   		END IF;
158   		--2. Cannot be a future date and must be after the confirmed date
159   		IF p_paid_dt NOT BETWEEN p_confirmed_dt
160   				AND SYSDATE THEN
161   			p_message_name := 'IGS_RE_CHK_PAID_DATE';
162   			RETURN FALSE;
163   		END IF;
164   	END IF;
165   	RETURN TRUE;
166   END;
167   EXCEPTION
168 	WHEN OTHERS THEN
169 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
170 		IGS_GE_MSG_STACK.ADD;
171 		App_Exception.Raise_Exception;
172   END resp_val_tpm_paid;
173   --
174   -- To validate the thesis panel member confirmed date
175   FUNCTION RESP_VAL_TPM_CNFRM(
176   p_confirmed_dt IN DATE ,
177   p_thesis_result_cd IN VARCHAR2 ,
178   p_paid_dt IN DATE ,
179   p_declined_dt IN DATE ,
180   p_message_name OUT NOCOPY VARCHAR2 )
181   RETURN BOOLEAN AS
182   BEGIN	-- resp_val_tpm_cnfrm
183   	-- Validate the IGS_RE_THS_PNL_MBR.confirmed_dt, checking for :
184   	--   Cannot unset if thesis_result_cd has been set
185   	--   Cannot unset if paid_dt has been set
186   	--   Cannot be a future date
187   	--   Cannot set if declined_dt is set
188   BEGIN
189   	-- set default value
190   	p_message_name := NULL;
191   	IF p_confirmed_dt IS NULL THEN
192   		-- 1. Cannot unset if result has been entered
193   		IF p_thesis_result_cd IS NOT NULL THEN
194   			p_message_name := 'IGS_RE_CANT_UNCNFRM_RES_ENTER';
195   			RETURN FALSE;
196   		END IF;
197   		-- 2. Cannot unset if paid date has been entered
198   		IF p_paid_dt IS NOT NULL THEN
199   			p_message_name := 'IGS_RE_CANT_UNCNFRM_PAID_DT';
200   			RETURN FALSE;
201   		END IF;
202   	ELSE
203   		-- 1. Cannot set if member has declined.
204   		 IF p_declined_dt IS NOT NULL THEN
205   			p_message_name := 'IGS_RE_CANT_SET_MEM_CONFIRM';
206   			RETURN FALSE;
207   		END IF;
208   		-- 2. Cannot be a future date
209   		IF p_confirmed_dt > SYSDATE THEN
210   			p_message_name := 'IGS_RE_CNFRM_DT_CANT_BE_FUTUR';
211   			RETURN FALSE;
212   		END IF;
213   	END IF;
214   	RETURN TRUE;
215   END;
216   EXCEPTION
217 	WHEN OTHERS THEN
218 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
219 		IGS_GE_MSG_STACK.ADD;
220 		App_Exception.Raise_Exception;
221   END resp_val_tpm_cnfrm; -- resp_val_tpm_cnfrm
222   --
223   -- To validate thesis panel member declined date
224   FUNCTION RESP_VAL_TPM_DCLN(
225   p_declined_dt IN DATE ,
226   p_confirmed_dt IN DATE ,
227   p_message_name OUT NOCOPY VARCHAR2 )
228   RETURN BOOLEAN AS
229   BEGIN	-- resp_val_tpm_dcln
230   	-- Validate the IGS_RE_THS_PNL_MBR.declined_dt, checking for :
231   	-- Cannot be set if the confirmed_dt is set
232   	-- Cannot be a future date
233   DECLARE
234   BEGIN
235   	IF p_declined_dt IS NOT  NULL THEN
236   		-- 1. Cannot be set if confirmed date is set
237   		IF p_confirmed_dt IS NOT NULL THEN
238   			p_message_name := 'IGS_RE_CANT_SET_DECLINED_DATE';
239   			RETURN FALSE;
240   		END IF;
241   		--2. Cannot be a future date
242   		IF p_declined_dt > SYSDATE THEN
243   			p_message_name := 'IGS_RE_DECL_DT_CANT_BE_FUTURE';
244   			RETURN FALSE;
245   		END IF;
246   	END IF;
247   	p_message_name := NULL;
248   	RETURN TRUE;
249   END;
250   EXCEPTION
251 	WHEN OTHERS THEN
252 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
253 		IGS_GE_MSG_STACK.ADD;
254 		App_Exception.Raise_Exception;
255   END resp_val_tpm_dcln;
256   --
257   -- To validate the thesis panel member person ID
258   FUNCTION RESP_VAL_TPM_PE(
259   p_ca_person_id IN NUMBER ,
260   p_ca_sequence_number IN NUMBER ,
261   p_person_id IN NUMBER ,
262   p_message_name OUT NOCOPY VARCHAR2 )
263   RETURN BOOLEAN AS
264   BEGIN	-- resp_val_tpm_pe
265   	-- Validate the IGS_RE_THS_PNL_MBR.person_id, checking for :
266   	-- Warn if the person is a current student
267   	-- person cannot be a panel member for themselves
268   	-- Warn if the person is a supervisor of the candidate
269   DECLARE
270   	cst_enrolled	CONSTANT	VARCHAR2(10) := 'ENROLLED';
271   	cst_inactive	CONSTANT	VARCHAR2(10) := 'INACTIVE';
272   	cst_lapsed	CONSTANT	VARCHAR2(10) := 'LAPSED';
273   	cst_intermit	CONSTANT	VARCHAR2(10) := 'INTERMIT';
274   	v_dummy				VARCHAR2(1);
275   	v_message_name		VARCHAR2(30);
276   	CURSOR	c_sca IS
277   		SELECT 	'x'
278   		FROM	IGS_EN_STDNT_PS_ATT sca
279   		WHERE	sca.person_id 			= p_person_id AND
280   			sca.course_attempt_status 	IN (
281   							cst_enrolled,
282   							cst_inactive,
283   							cst_lapsed,
284   							cst_intermit);
285   	CURSOR	c_rsup IS
286   		SELECT 	'x'
287   		FROM	IGS_RE_SPRVSR rsup
288   		WHERE	rsup.ca_person_id 	= p_ca_person_id 	AND
289   			rsup.ca_sequence_number = p_ca_sequence_number 	AND
290   			rsup.person_id 		= p_person_id 		AND
291   			rsup.start_dt 		<= SYSDATE 		AND
292   			(rsup.end_dt 		IS NULL 		OR
293    			rsup.end_dt 		> SYSDATE);
294 
295   BEGIN
296   	p_message_name := NULL;
297   	-- Check whether person is deceased.
298   	IF IGS_RE_VAL_TEX.genp_val_pe_deceased(	p_person_id,
299   						'ERROR',
300   						v_message_name) = FALSE THEN
301   		p_message_name := v_message_name;
302   		RETURN FALSE;
303   	END IF;
304   	--1. Check that person is not a panel member for themselves
305   	IF p_ca_person_id = p_person_id THEN
306   		p_message_name := 'IGS_RE_PERS_CANT_BE_EXAMINER';
307   		RETURN FALSE;
308   	END IF;
309   	--2. Warn if person is a current student.
310   	OPEN c_sca;
311   	FETCH c_sca INTO v_dummy;
312   	IF c_sca%FOUND THEN
313   		CLOSE c_sca;
314   		p_message_name := 'IGS_RE_EXAMINER_IS_CUR_STUDEN';
315   		RETURN TRUE; --(Warning Only)
316   	END IF;
317   	CLOSE c_sca;
318   	-- Warn if person is a staff member.
319   	IF  IGS_EN_GEN_003.Get_Staff_Ind(p_person_id) = 'Y' THEN
320   		p_message_name := 'IGS_RE_EXAMINAR_IS_STAFF_MEM';
321   		RETURN TRUE;	-- (Warning Only)
322   	END IF;
323 
324   	-- 3. Warn if person is a supervisor of the candidate
325   	OPEN c_rsup;
326   	FETCH c_rsup INTO v_dummy;
327   	IF c_rsup%FOUND THEN
328   		CLOSE c_rsup;
329   		p_message_name := 'IGS_RE_PERS_CUR_SUPERVIOR';
330   		RETURN TRUE; -- (Warning Only)
331   	END IF;
332   	CLOSE c_rsup;
333   	p_message_name := NULL;
334   	RETURN TRUE;
335   EXCEPTION
336   	WHEN OTHERS THEN
337   		IF (c_sca%ISOPEN) THEN
338   			CLOSE c_sca;
339   		END IF;
340   		IF (c_rsup%ISOPEN) THEN
341   			CLOSE c_rsup;
342   		END IF;
343   		RAISE;
344   END;
345   EXCEPTION
346 	WHEN OTHERS THEN
347 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
348 		IGS_GE_MSG_STACK.ADD;
349 		App_Exception.Raise_Exception;
350   END resp_val_tpm_pe;
351   --
352   -- To validate the thesis panel member IGS_RE_THESIS result code
353   FUNCTION RESP_VAL_TPM_THR(
354   p_ca_person_id IN NUMBER ,
355   p_ca_sequence_number IN NUMBER ,
356   p_the_sequence_number IN NUMBER ,
357   p_creation_dt IN DATE ,
358   p_thesis_result_cd IN VARCHAR2 ,
359   p_recommendation_summary IN VARCHAR2 ,
360   p_confirmed_dt IN DATE ,
361   p_message_name OUT NOCOPY VARCHAR2 )
362   RETURN BOOLEAN AS
363   BEGIN	-- resp_val_tpm_thr
364   	-- Description: Validate the IGS_RE_THS_PNL_MBR.thesis_result_cd
365   	-- recommendation_summary fields, checking for :
366   	-- * Cannot be a closed IGS_RE_THESIS result code
367   	-- * Cannot set if parent thesis_examination has not been submitted
368   	-- * Cannot set if panel member has not confirmed
369   DECLARE
370   	v_tex_rec	IGS_RE_THESIS_EXAM.submission_dt%TYPE;
371   	v_thr_rec	IGS_RE_THESIS_RESULT.closed_ind%TYPE;
372   	CURSOR	c_tex IS
373   		SELECT	tex.submission_dt
374   		FROM	IGS_RE_THESIS_EXAM		tex
375   		WHERE	tex.person_id		= p_ca_person_id AND
376   			tex.ca_sequence_number	= p_ca_sequence_number AND
377   			tex.the_sequence_number	= p_the_sequence_number AND
378   			tex.creation_dt 	= p_creation_dt;
379   	CURSOR	c_thr IS
380   		SELECT	thr.closed_ind
381   		FROM	IGS_RE_THESIS_RESULT 		thr
382   		WHERE	thr.thesis_result_cd 	= p_thesis_result_cd;
383   BEGIN
384   	p_message_name := NULL;
385   	IF p_thesis_result_cd IS NOT NULL OR
386   	    p_recommendation_summary IS NOT NULL THEN
387   		--Check that person has been confirmed
388   		IF p_confirmed_dt IS NULL THEN
389   			p_message_name := 'IGS_RE_CANT_ENT_RES_UNCNF_MEM';
390   			RETURN FALSE;
391   		END IF;
392   		OPEN c_tex;
393   		FETCH c_tex INTO v_tex_rec;
394   		CLOSE c_tex;
395   		--Check that IGS_RE_THESIS has been submitted
396   		IF v_tex_rec IS NULL THEN
397   			p_message_name := 'IGS_RE_CANT_ENT_RES_FOR_THESI';
398   			RETURN FALSE;
399   		END IF;
400   		IF p_thesis_result_cd IS NOT NULL THEN
401   			--Check for closed result code
402   			OPEN c_thr;
403   			FETCH c_thr INTO v_thr_rec;
404   			--Invalid date ; to be picked up by calling routine
405   			IF (c_thr%NOTFOUND) THEN
406   				CLOSE c_thr;
407   				RETURN TRUE;
408   			END IF;
409   			CLOSE c_thr;
410   			IF v_thr_rec = 'Y' THEN
411   				p_message_name := 'IGS_RE_THESIS_RESUILT_CLOSED';
412   				RETURN FALSE;
413   			END IF;
414   		END IF;
415   	END IF;
416   	RETURN TRUE;
417   EXCEPTION
418   	WHEN OTHERS THEN
419   		IF (c_tex%ISOPEN) THEN
420   			CLOSE c_thr;
421   		END IF;
422   		IF (c_thr%ISOPEN) THEN
423   			CLOSE c_thr;
424   		END IF;
425   	RAISE;
426   END;
427   EXCEPTION
428 	WHEN OTHERS THEN
429 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
430 		IGS_GE_MSG_STACK.ADD;
431 		App_Exception.Raise_Exception;
432   END resp_val_tpm_thr;
433   --
434   -- To validate IGS_RE_THESIS panel member panel type
435   FUNCTION RESP_VAL_TPM_TPMT(
436   p_panel_member_type IN VARCHAR2 ,
437   p_message_name OUT NOCOPY VARCHAR2 )
438   RETURN BOOLEAN AS
439   BEGIN	-- resp_val_tpm_tpmt
440   	-- Description: Validate the IGS_RE_THS_PNL_MBR.panel_member_type, checking
441   	-- for:  Closed type.
442   DECLARE
443   	v_tpmt_rec		IGS_RE_THS_PNL_MR_TP.closed_ind%TYPE;
444   	CURSOR	c_tpmt IS
445   		SELECT	tpmt.closed_ind
446   		FROM 	IGS_RE_THS_PNL_MR_TP 	tpmt
447   		WHERE	tpmt.panel_member_type 		= p_panel_member_type;
448   BEGIN
449   	p_message_name := NULL;
450   	OPEN c_tpmt;
451   	FETCH c_tpmt INTO v_tpmt_rec;
452   	IF (c_tpmt%NOTFOUND) THEN
453   		CLOSE c_tpmt;
454   		RETURN TRUE;
455   	END IF;
456   	CLOSE c_tpmt;
457   	IF v_tpmt_rec = 'Y' THEN
458   		p_message_name := 'IGS_RE_THESIS_PANEL_TYPE_CLOS';
459   		RETURN FALSE;
460   	END IF;
461   	RETURN TRUE;
462   EXCEPTION
463   	WHEN OTHERS THEN
464   		IF (c_tpmt%ISOPEN) THEN
465   			CLOSE c_tpmt;
466   		END IF;
467   	RAISE;
468   END;
469   EXCEPTION
470 	WHEN OTHERS THEN
471 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
472 		IGS_GE_MSG_STACK.ADD;
473 		App_Exception.Raise_Exception;
474   END resp_val_tpm_tpmt;
475   --
476   -- To validate thesis panel member updates
477   FUNCTION RESP_VAL_TPM_UPD(
478   p_ca_person_id IN NUMBER ,
479   p_ca_sequence_number IN NUMBER ,
480   p_the_sequence_number IN NUMBER ,
481   p_creation_dt IN DATE ,
482   p_transaction_type IN VARCHAR2 ,
483   p_old_thesis_result_cd IN VARCHAR2 ,
484   p_new_thesis_result_cd IN VARCHAR2 ,
485   p_old_panel_member_type IN VARCHAR2 ,
486   p_new_panel_member_type IN VARCHAR2 ,
487   p_old_confirmed_dt IN DATE ,
488   p_new_confirmed_dt IN DATE ,
489   p_message_name OUT NOCOPY VARCHAR2 )
490   RETURN BOOLEAN AS
491   BEGIN	-- resp_val_tpm_upd
492   	-- Validate whether IGS_RE_THS_PNL_MBR update transactions are possible
493   	-- (insert,update and delete), checking for :
494   	-- Can only insert or delete records when parent
495   	-- thesis_examination.thesis_result_cd is not set
496   	-- Cannot update thesis_result_cd, panel_member_type, confirmed_dt if parent
497   	-- examination result has been entered.
498   DECLARE
499   	cst_insert	CONSTANT	VARCHAR2(10) := 'INSERT';
500   	cst_delete	CONSTANT	VARCHAR2(10) := 'DELETE';
501   	cst_update	CONSTANT	VARCHAR2(10) := 'UPDATE';
502   	v_thesis_result_cd		IGS_RE_THESIS_EXAM.thesis_result_cd%TYPE;
503   	CURSOR	c_tex IS
504   		SELECT	tex.thesis_result_cd
505   		FROM	IGS_RE_THESIS_EXAM tex
506   		WHERE	tex.person_id 		= p_ca_person_id 	AND
507   			tex.ca_sequence_number 	= p_ca_sequence_number	AND
508   			tex.the_sequence_number = p_the_sequence_number AND
509   			tex.creation_dt 	= p_creation_dt;
510   BEGIN
511   	p_message_name := NULL;
512   	-- 1. Get the result code from the parent thesis examination.
513   	OPEN c_tex;
514   	FETCH c_tex INTO v_thesis_result_cd;
515   	IF c_tex%NOTFOUND THEN
516   		--Invalid parameters ; will be picked up be the calling routine.
517   		CLOSE c_tex;
518   		RETURN TRUE;
519   	END IF;
520   	CLOSE c_tex;
521   	IF p_transaction_type IN (cst_insert, cst_delete) THEN
522   		-- 2. If the parent result code is set then insert and delete
523   		-- are not possible.
524   		IF v_thesis_result_cd IS NOT NULL THEN
525   			p_message_name := 'IGS_RE_CANT_ID_PANEL_MEMBERS';
526   			RETURN FALSE;
527   		END IF;
528   	END IF;
529   	IF p_transaction_type = cst_update THEN
530   		-- 3. If specified fields have changed and the parent result has
531   		-- been entered then fail.
532   		IF v_thesis_result_cd IS NOT NULL THEN
533   			IF NVL(p_old_thesis_result_cd, 'NULL') <>
534   					NVL(p_new_thesis_result_cd, 'NULL') OR
535   		    			NVL(p_old_panel_member_type, 'NULL') <>
536   					NVL(p_new_panel_member_type, 'NULL') OR
537   		    			NVL(p_old_confirmed_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) <>
538   					NVL(p_new_confirmed_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) THEN
539   				p_message_name := 'IGS_RE_CANT_UPD_PAN_MEM_TYPE';
540   				RETURN FALSE;
541   			END IF;
542   		END IF;
543   	END IF;
544   	RETURN TRUE;
545   EXCEPTION
546   	WHEN OTHERS THEN
547   		IF (c_tex%ISOPEN) THEN
548   			CLOSE c_tex;
549   		END IF;
550   		RAISE;
551   END;
552   EXCEPTION
553 	WHEN OTHERS THEN
554 		Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
555 		IGS_GE_MSG_STACK.ADD;
556 		App_Exception.Raise_Exception;
557   END resp_val_tpm_upd;
558 END IGS_RE_VAL_TPM;