DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RE_VAL_THE

Source


1 PACKAGE BODY IGS_RE_VAL_THE AS
2 /* $Header: IGSRE16B.pls 115.6 2002/11/29 10:56:22 pradhakr ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    25-AUG-2001     Bug No. 1956374 .The function GENP_VAL_SDTT_SESS removed
7   --svenkata    8-MAR-2002      Bug # 2146848. A cursor in the function RESP_VAL_THE_THR was modified .
8   --Nishikant   19NOV2002       Bug#2661533. The functions resp_val_the_expct, resp_val_the_embrg, resp_val_the_thr
9   --                            got modified to skip some validation in case It has been called from Legacy API.
10   --                            Three more functions get_candidacy_dtls, check_dup_thesis, eval_min_sub_dt are added.
11   -- pradhakr   29-Nov-2002     Added the hint NOCOPY to all the OUT parameters. Replaced all
12   --				the OUT parameter with OUT NOCOPY. Bug# 2683043
13   -------------------------------------------------------------------------------------------
14    -- To valdate IGS_RE_THESIS citation fiels
15   FUNCTION RESP_VAL_THE_CTN(
16   p_thesis_status IN VARCHAR2 ,
17   p_citation IN VARCHAR2 ,
18   p_message_name OUT NOCOPY VARCHAR2 )
19   RETURN BOOLEAN AS
20   BEGIN -- resp_val_the_ctn
21   BEGIN
22         p_message_name := NULL;
23         IF NVL(p_thesis_status,' ') NOT IN (
24                                 'EXAMINED',
25                                 'SUBMITTED') AND
26            p_citation IS NOT NULL THEN
27                 p_message_name := 'IGS_RE_CANT_ENTER_GRAD_CITAT';
28                 RETURN FALSE;
29         END IF;
30         RETURN TRUE;
31   END;
32   EXCEPTION
33         WHEN OTHERS THEN
34                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
35                 IGS_GE_MSG_STACK.ADD;
36                 App_Exception.Raise_Exception;
37   END resp_val_the_ctn;
38   --
39   -- Validate IGS_RE_THESIS logical deletion date
40   FUNCTION RESP_VAL_THE_DEL_DT(
41   p_old_logical_delete_dt IN DATE ,
42   p_new_logical_delete_dt IN DATE ,
43   p_message_name OUT NOCOPY VARCHAR2 )
44   RETURN BOOLEAN AS
45   BEGIN -- resp_val_the_del_dt
46   DECLARE
47   BEGIN
48         p_message_name := NULL;
49         -- 1. Date cannot be changed once set.
50         IF p_new_logical_delete_dt IS NOT NULL AND
51            p_old_logical_delete_dt IS NOT NULL AND
52            p_new_logical_delete_dt <> p_old_logical_delete_dt  THEN
53                 p_message_name := 'IGS_RE_LOGICA_DEL_DT_CANT_UPD';
54                 RETURN FALSE;
55         END IF;
56         -- 2. If date being set, then must be equal to today.
57         IF p_old_logical_delete_dt IS NULL AND
58             p_new_logical_delete_dt IS NOT NULL AND
59            TRUNC(p_new_logical_delete_dt) <> TRUNC(SYSDATE) THEN
60                 p_message_name := 'IGS_RE_SET_LOGICALDT_TO_CURR';
61                 RETURN FALSE;
62         END IF;
63         RETURN TRUE;
64   END;
65   EXCEPTION
66         WHEN OTHERS THEN
67                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
68                 IGS_GE_MSG_STACK.ADD;
69                 App_Exception.Raise_Exception;
70   END resp_val_the_del_dt;
71   --
72   -- To validate the IGS_RE_THESIS expected submission date
73   FUNCTION RESP_VAL_THE_EXPCT(
74   p_person_id IN NUMBER ,
75   p_ca_sequence_number IN NUMBER ,
76   p_expected_submission_dt IN DATE ,
77   p_legacy IN VARCHAR2,
78   p_message_name OUT NOCOPY VARCHAR2 )
79   RETURN BOOLEAN AS
80   /*  Change History :
81   Who             When            What
82   (reverse chronological order - newest change first)
83 
84   Nishikant       15NOV2002       The function got modified to skip some validation in case
85                                   It has been called from Legacy API. And if any error message then
86                                   logs in the message stack and proceed further.
87   */
88   BEGIN -- resp_val_the_expct
89         -- Description: Validate the IGS_RE_THESIS.expected_submission_dt, checking for
90         -- * Cannot be backdated.
91         -- * Cannot be prior to the derived/override minimum submission date
92         -- * Cannot be beyond the derived/override maximum submission date
93   DECLARE
94         v_max_sub_dt            IGS_RE_CANDIDATURE.max_submission_dt%TYPE := NULL;
95         v_min_sub_dt            IGS_RE_CANDIDATURE.min_submission_dt%TYPE := NULL;
96         CURSOR  c_ca IS
97                 SELECT  ca.max_submission_dt,
98                         ca.min_submission_dt
99                 FROM    IGS_RE_CANDIDATURE      ca
100                 WHERE   ca.person_id            = p_person_id AND
101                         ca.sequence_number      = p_ca_sequence_number;
102   BEGIN
103         p_message_name := NULL;
104         IF p_legacy <> 'Y' THEN  --this validation is not required for legacy
105                 IF TRUNC(p_expected_submission_dt) < TRUNC(SYSDATE) THEN
106                         p_message_name := 'IGS_RE_SUBM_DT_CANT_BACKDATED';
107                         RETURN FALSE;
108                 END IF;
109         END IF;
110         OPEN c_ca;
111         FETCH c_ca INTO v_max_sub_dt,
112                         v_min_sub_dt;
113         IF (c_ca%NOTFOUND) THEN
114                 CLOSE c_ca;
115                 RETURN TRUE;
116         END IF;
117         CLOSE c_ca;
118         -- Check whether > maximum submission date
119         IF v_min_sub_dt IS NULL THEN
120                 v_min_sub_dt := NVL(IGS_RE_GEN_001.RESP_CLC_MIN_SBMSN(
121                                         p_person_id,
122                                         p_ca_sequence_number,
123                                         NULL,
124                                         NULL,
125                                         NULL,
126                                         NULL,
127                                         NULL,
128                                         NULL), SYSDATE);
129         END IF;
130         IF TRUNC(p_expected_submission_dt) < TRUNC(v_min_sub_dt) THEN
131                 p_message_name := 'IGS_RE_SUB_DT_CANT_BEF_MIN_DT';
132                 IF p_legacy <> 'Y' THEN
133                       RETURN FALSE;
134                 ELSE
135                       FND_MESSAGE.SET_NAME ('IGS',p_message_name);
136                       FND_MSG_PUB.ADD;
137                 END IF;
138         END IF;
139         -- Check whether > maximum submission date
140         IF v_max_sub_dt IS NULL THEN
141                 v_max_sub_dt := NVL(IGS_RE_GEN_001.RESP_CLC_MAX_SBMSN(
142                                         p_person_id,
143                                         p_ca_sequence_number,
144                                         NULL,
145                                         NULL,
146                                         NULL,
147                                         NULL,
148                                         NULL,
149                                         NULL), SYSDATE);
150         END IF;
151         IF TRUNC(p_expected_submission_dt) > TRUNC(v_max_sub_dt) THEN
152                 p_message_name := 'IGS_RE_SUB_DT_CANT_BEF_MAX_DT';
153                 IF p_legacy <> 'Y' THEN
154                       RETURN FALSE;
155                 ELSE
156                       FND_MESSAGE.SET_NAME ('IGS',p_message_name);
157                       FND_MSG_PUB.ADD;
158                       RETURN FALSE;
159                 END IF;
160         END IF;
161         RETURN TRUE;
162   END;
163   EXCEPTION
164         WHEN OTHERS THEN
165                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
166                 IGS_GE_MSG_STACK.ADD;
167                 App_Exception.Raise_Exception;
168   END resp_val_the_expct;
169   --
170   -- To validate thesis embargo details
171   FUNCTION RESP_VAL_THE_EMBRG(
172   p_embargo_details IN VARCHAR2 ,
173   p_old_embargo_expiry_dt IN DATE ,
174   p_new_embargo_expiry_dt IN DATE ,
175   p_thesis_status IN VARCHAR2 ,
176   p_legacy IN VARCHAR2,
177   p_message_name OUT NOCOPY VARCHAR2 )
178   RETURN BOOLEAN AS
179   /*  Change History :
180   Who             When            What
181   (reverse chronological order - newest change first)
182 
183   Nishikant       15NOV2002       The function got modified to skip some validation in case
184                                   It has been called from Legacy API. And if any error message then
185                                   logs in the message stack and proceed further.
186   */
187   BEGIN -- resp_val_the_embrg
188         -- Validate thesis embargo fields (embargo_details, embargo_expiry_dt),
189         -- checking for :
190         -- Cannot enter details unless SUBMITTED or EXAMINED
191         -- That the expiry date cannot be set if the details aren't set
192         -- That the details cannot be unset if the expiry date is set
193         -- The expiry date cannot be backdated
194   DECLARE
195   BEGIN
196         -- Cannot enter details unless SUBMITTED or EXAMINED
197         IF NVL(p_thesis_status,' ') NOT IN ('SUBMITTED','EXAMINED') AND
198                                 (p_new_embargo_expiry_dt IS NOT NULL OR
199                                  p_embargo_details IS NOT NULL) THEN
200                 p_message_name := 'IGS_RE_CANT_SPECIFY_EMBARGO';
201                 IF p_legacy <> 'Y' THEN
202                       RETURN FALSE;
203                 ELSE
204                       FND_MESSAGE.SET_NAME ('IGS',p_message_name);
205                       FND_MSG_PUB.ADD;
206                 END IF;
207         END IF;
208         -- 1. Check that if the expiry date is set that the details are set.
209         IF p_new_embargo_expiry_dt IS NOT NULL AND
210                         p_embargo_details IS NULL THEN
211                 p_message_name := 'IGS_RE_CANT_ENTER_EMBARGO_DT';
212                 IF p_legacy <> 'Y' THEN
213                       RETURN FALSE;
214                 ELSE
215                       FND_MESSAGE.SET_NAME ('IGS',p_message_name);
216                       FND_MSG_PUB.ADD;
217                       RETURN FALSE;
218                 END IF;
219         END IF;
220         -- Check that the embargo expiry date is different to the old embargo date and
221         -- not backdated
222         IF p_legacy <> 'Y' THEN --for legacy this validation is not required
223             IF NVL(p_old_embargo_expiry_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) <>
224                         NVL(p_new_embargo_expiry_dt, IGS_GE_DATE.IGSDATE('1900/01/01')) AND
225                (p_new_embargo_expiry_dt IS NOT NULL AND
226                 p_new_embargo_expiry_dt < TRUNC(SYSDATE)) THEN
227                   p_message_name := 'IGS_RE_EMBARGO_DT_CANT_BACKDT';
228                   RETURN FALSE;
229             END IF;
230         END IF;
231         p_message_name := NULL;
232         RETURN TRUE;
233   END;
234   EXCEPTION
235         WHEN OTHERS THEN
236                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
237                 IGS_GE_MSG_STACK.ADD;
238                 App_Exception.Raise_Exception;
239   END resp_val_the_embrg;
240   --
241   -- Validate thesis deletion (logical deletion)
242   FUNCTION RESP_VAL_THE_DEL(
243   p_person_id IN NUMBER ,
244   p_ca_sequence_number IN NUMBER ,
245   p_sequence_number IN NUMBER ,
246   p_logical_delete_dt IN DATE ,
247   p_thesis_status IN VARCHAR2 ,
248   p_message_name OUT NOCOPY VARCHAR2 )
249   RETURN BOOLEAN AS
250   BEGIN -- resp_val_the_del
251         -- Description: Validate the IGS_RE_THESIS.logical_delete_dt, checking for
252         -- * Cannot logically delete when status is SUBMITTED or EXAMINED
253   DECLARE
254         v_thesis_status         IGS_RE_THESIS_V.thesis_status%TYPE;
255         v_ret_val               BOOLEAN := TRUE;
256         CURSOR  c_thev IS
257                 SELECT  thesis_status
258                 FROM    IGS_RE_THESIS_V thev
259                 WHERE   person_id               = p_person_id AND
260                         ca_sequence_number      = p_ca_sequence_number AND
261                         sequence_number         = p_sequence_number;
262   BEGIN
263         p_message_name := NULL;
264         IF p_logical_delete_dt IS NOT NULL THEN
265                 IF p_thesis_status IS NULL THEN
266                         OPEN c_thev;
267                         FETCH c_thev INTO v_thesis_status;
268                         IF (c_thev%NOTFOUND) THEN
269                                 CLOSE c_thev;
270                                 RETURN TRUE;
271                         END IF;
272                         CLOSE c_thev;
273                 ELSE
274                         v_thesis_status := p_thesis_status;
275                 END IF;
276                 IF v_thesis_status IN ( 'EXAMINED',
277                                         'SUBMITTED') THEN
278                         p_message_name := 'IGS_RE_CANT_DEL_THESIS_DETAIL';
279                         RETURN FALSE;
280                 END IF;
281         END IF;
282         RETURN v_ret_val;
283   END;
284   EXCEPTION
285         WHEN OTHERS THEN
286                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
287                 IGS_GE_MSG_STACK.ADD;
288                 App_Exception.Raise_Exception;
289   END resp_val_the_del;
290   --
291   -- To validate IGS_RE_THESIS library details
292   FUNCTION RESP_VAL_THE_LBRY(
293   p_person_id IN NUMBER ,
294   p_ca_sequence_number IN NUMBER ,
295   p_sequence_number IN NUMBER ,
296   p_library_catalogue_number IN VARCHAR2 ,
297   p_library_lodgement_dt IN DATE ,
298   p_thesis_status IN VARCHAR2 ,
299   p_message_name OUT NOCOPY VARCHAR2 )
300   RETURN BOOLEAN AS
301   BEGIN -- resp_val_the_lbry
302         -- Description: Validate the IGS_RE_THESIS library details
303         -- (library_catalogue_number, library_lodgement_dt), checking for :
304         -- *That the details cannot be specified if the IGS_RE_THESIS status is not
305         -- EXAMINED or SUBMITTED.
306   DECLARE
307         v_thesis_status         IGS_RE_THESIS_V.thesis_status%TYPE;
308         v_ret_val               BOOLEAN := TRUE;
309         CURSOR  c_thev IS
310                 SELECT  thesis_status
311                 FROM    IGS_RE_THESIS_V thev
312                 WHERE   person_id               = p_person_id AND
313                         ca_sequence_number      = p_ca_sequence_number AND
314                         sequence_number         = p_sequence_number;
315   BEGIN
316         p_message_name := NULL;
317         IF p_library_catalogue_number IS NOT NULL OR
318                         p_library_lodgement_dt IS NOT NULL THEN
319                 IF p_thesis_status IS NULL THEN
320                         OPEN c_thev;
321                         FETCH c_thev INTO v_thesis_status;
322                         IF (c_thev%NOTFOUND) THEN
323                                 CLOSE c_thev;
324                                 RETURN TRUE;
325                         END IF;
326                         CLOSE c_thev;
327                 ELSE
328                         v_thesis_status := p_thesis_status;
329                 END IF;
330                 IF v_thesis_status NOT IN (
331                                         'EXAMINED',
332                                         'SUBMITTED') THEN
333                         p_message_name := 'IGS_RE_CANT_ENTER_LIBR_DETAIL';
334                         RETURN FALSE;
335                 END IF;
336         END IF;
337         RETURN v_ret_val;
338   END;
339   EXCEPTION
340         WHEN OTHERS THEN
341                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
342                 IGS_GE_MSG_STACK.ADD;
343                 App_Exception.Raise_Exception;
344   END resp_val_the_lbry;
345   --
346   -- To validate the IGS_RE_THESIS result code
347   FUNCTION RESP_VAL_THE_THR(
348   p_person_id IN NUMBER ,
349   p_ca_sequence_number IN NUMBER ,
350   p_sequence_number IN NUMBER ,
351   p_thesis_result_cd IN VARCHAR2 ,
352   p_thesis_status IN VARCHAR2 ,
353   p_legacy IN VARCHAR2,
354   p_message_name OUT NOCOPY VARCHAR2 )
355   RETURN BOOLEAN AS
356   /*  Change History :
357   Who             When            What
358   (reverse chronological order - newest change first)
359 
360   Nishikant       15NOV2002       The function got modified to skip some validation in case
361                                   It has been called from Legacy API. And if any error message then
362                                   logs in the message stack and proceed further.
363   */
364   BEGIN -- resp_val_the_thr
365         -- Validate IGS_RE_THESIS.thesis_result_cd, checking for :
366         -- Closed result code
367         -- Cannot be set against PENDING IGS_RE_THESIS status
368         -- Cannot enter if outstanding submitted IGS_RE_THESIS examination
369         -- Warn if result not the same as the last IGS_RE_THESIS examination
370         -- Can only link to results which are flagged as 'final results'
371   DECLARE
372         cst_pending     CONSTANT        VARCHAR2(10) := 'PENDING';
373         v_dummy                         VARCHAR2(1);
374         v_thesis_status                 IGS_RE_THESIS_V.thesis_status%TYPE;
375         v_closed_ind                    IGS_RE_THESIS_RESULT.closed_ind%TYPE;
376         v_final_result_ind              IGS_LOOKUPS_VIEW.final_result_ind%TYPE;
377         v_thesis_result_cd              IGS_RE_THESIS_EXAM.thesis_result_cd%TYPE;
378         CURSOR  c_thev IS
379                 SELECT  thev.thesis_status
380                 FROM    IGS_RE_THESIS_V thev
381                 WHERE   thev.person_id          = p_person_id           AND
382                         thev.ca_sequence_number = p_ca_sequence_number  AND
383                         thev.sequence_number    = p_sequence_number;
384         CURSOR  c_tex1 IS
385                 SELECT  'x'
386                 FROM    IGS_RE_THESIS_EXAM tex
387                 WHERE   tex.person_id           = p_person_id           AND
388                         tex.ca_sequence_number  = p_ca_sequence_number  AND
389                         tex.the_sequence_number = p_sequence_number     AND
390                         tex.submission_dt       IS NOT NULL             AND
391                         tex.thesis_result_cd    IS NULL;
392    -- svenkata : Modified the WHERE clause of the query to match s_thesis_result_cd with the LOOKUP_CODE and not lookup_type .
393    -- Bug # 2146848 .
394         CURSOR  c_thr_sthr IS
395                 SELECT  thr.closed_ind,
396                         sthr.final_result_ind
397                 FROM    IGS_RE_THESIS_RESULT thr,
398                         IGS_LOOKUPS_VIEW sthr
399                 WHERE   thr.thesis_result_cd    = p_thesis_result_cd AND
400                         sthr.LOOKUP_CODE = thr.s_thesis_result_cd
401                         AND sthr.lookup_type = 'THESIS_RESULT';
402 
403         CURSOR  c_tex2 IS
404                 SELECT  tex.thesis_result_cd
405                 FROM    IGS_RE_THESIS_EXAM tex
406                 WHERE   tex.person_id           = p_person_id           AND
407                         tex.ca_sequence_number  = p_ca_sequence_number  AND
408                         tex.the_sequence_number = p_sequence_number     AND
409                         tex.submission_dt       IS NOT NULL             AND
410                         tex.thesis_result_cd    IS NOT NULL
411                 ORDER BY tex.submission_dt DESC;
412   BEGIN
413         p_message_name := NULL;
414         IF p_thesis_result_cd IS NOT NULL THEN
415                 -- 1. Cannot be PENDING IGS_RE_THESIS status (selected from view).
416                 IF p_thesis_status IS NULL THEN
417                         OPEN c_thev;
418                         FETCH c_thev INTO v_thesis_status;
419                         IF c_thev%NOTFOUND THEN
420                                 CLOSE c_thev;
421                                 --Invalid data ; will be picked up by calling routine
422                                 RETURN TRUE;
423                         END IF;
424                         CLOSE c_thev;
425                 ELSE
426                          v_thesis_status := p_thesis_status;
427                 END IF;
428                 IF v_thesis_status = cst_pending THEN
429                         p_message_name := 'IGS_RE_CHK_RES_NOT_YET_EXAMIN';
430                         IF p_legacy = 'Y' THEN
431                                 FND_MESSAGE.SET_NAME('IGS',p_message_name);
432                                 FND_MSG_PUB.ADD;
433                         END IF;
434                         RETURN FALSE;
435                 END IF;
436                 --2. Cannot enter if outstanding (submitted) IGS_RE_THESIS examination.
437              IF p_legacy <> 'Y' THEN --this validation is not required for legacy
438                 OPEN c_tex1;
439                 FETCH c_tex1 INTO v_dummy;
440                 IF c_tex1%FOUND THEN
441                         CLOSE c_tex1;
442                         p_message_name := 'IGS_RE_CHK_RES_OUTSTAND_EXAM';
443                         RETURN FALSE;
444                 END IF;
445                 CLOSE c_tex1;
446              END IF;
447                 -- 3. Check for closed code.
448                 OPEN c_thr_sthr;
449                 FETCH c_thr_sthr INTO   v_closed_ind,
450                                         v_final_result_ind;
451                 IF c_thr_sthr%NOTFOUND THEN
452                         CLOSE c_thr_sthr;
453                         --Invalid data ; will be picked up by calling routine
454                         RETURN TRUE;
455                 END IF;
456                 CLOSE c_thr_sthr;
457 
458                 IF p_legacy <> 'Y' THEN
459                         IF v_closed_ind = 'Y' THEN
460                                 p_message_name := 'IGS_RE_THESIS_RESUILT_CLOSED';
461                                 RETURN FALSE;
462                         END IF;
463                 END IF;
464 
465                 --4. Must be a final result
466                 IF v_final_result_ind = 'N' THEN
467                         p_message_name := 'IGS_RE_CHK_RES_NOT_FINAL_RES';
468                         IF p_legacy <> 'Y' THEN
469                                 RETURN FALSE;
470                         ELSE
471                                 FND_MESSAGE.SET_NAME('IGS',p_message_name);
472                                 FND_MSG_PUB.ADD;
473                                 RETURN FALSE;
474                         END IF;
475                 END IF;
476                 -- 5. Warn if result not the same as the latest examination record.
477                 IF p_legacy <> 'Y' THEN --this validation is not required for legacy
478                         OPEN c_tex2;
479                         FETCH c_tex2 INTO v_thesis_result_cd;
480                         IF c_tex2%FOUND AND v_thesis_result_cd <> p_thesis_result_cd THEN
481                                 CLOSE c_tex2;
482                                 p_message_name := 'IGS_RE_FINAL_RESULT_MISMATCH';
483                                 RETURN TRUE;  --(Warning Only)
484                         END IF;
485                         CLOSE c_tex2;
486                 END IF;
487         END IF;
488         RETURN TRUE;
489   EXCEPTION
490         WHEN OTHERS THEN
491                 IF (c_thev%ISOPEN) THEN
492                         CLOSE c_thev;
493                 END IF;
494                 IF (c_tex1%ISOPEN) THEN
495                         CLOSE c_tex1;
496                 END IF;
497                 IF (c_thr_sthr%ISOPEN) THEN
498                         CLOSE c_thr_sthr;
499                 END IF;
500                 IF (c_tex2%ISOPEN) THEN
501                         CLOSE c_tex2;
502                 END IF;
503                 RAISE;
504   END;
505   EXCEPTION
506         WHEN OTHERS THEN
507                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
508                 IGS_GE_MSG_STACK.ADD;
509                 App_Exception.Raise_Exception;
510   END resp_val_the_thr;
511   --
512   -- To validate the update of the IGS_RE_THESIS table.
513   FUNCTION RESP_VAL_THE_UPD(
514   p_logical_delete_dt IN DATE ,
515   p_message_name OUT NOCOPY VARCHAR2 )
516   RETURN BOOLEAN AS
517   BEGIN -- resp_val_the_upd
518         -- Validate for insert, update, delete of IGS_RE_THESIS, checking for :
519         -- Cannot update if logical_delete_dt is set.
520   DECLARE
521   BEGIN
522         IF p_logical_delete_dt IS NOT NULL THEN
523                 p_message_name := 'IGS_RE_CANT_UPD_THESIS';
524                 RETURN FALSE;
525         END IF;
526         p_message_name := NULL;
527         RETURN TRUE;
528   END;
529   EXCEPTION
530         WHEN OTHERS THEN
531                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
532                 IGS_GE_MSG_STACK.ADD;
533                 App_Exception.Raise_Exception;
534   END resp_val_the_upd;
535   --
536   -- To validate the IGS_RE_THESIS IGS_PE_TITLE
537   FUNCTION RESP_VAL_THE_TTL(
538   p_old_title IN VARCHAR2 ,
539   p_new_title IN VARCHAR2 ,
540   p_thesis_result_cd IN VARCHAR2 ,
541   p_message_name OUT NOCOPY VARCHAR2 )
542   RETURN BOOLEAN AS
543   BEGIN -- resp_val_the_ttl
544         -- Validate for change of the IGS_RE_THESIS IGS_PE_TITLE, checking that it cannot be
545         -- changed once a final result has been entered
546   DECLARE
547   BEGIN
548         IF p_thesis_result_cd IS NOT NULL AND
549                         (p_old_title IS NOT NULL AND
550                         p_old_title <> NVL(p_new_title, 'NULL')) THEN
551                 p_message_name := 'IGS_RE_CANT_ALTER_THESIS_TITL';
552                 RETURN FALSE;
553         END IF;
554         p_message_name := NULL;
555         RETURN TRUE;
556   END;
557   EXCEPTION
558         WHEN OTHERS THEN
559                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
560                 IGS_GE_MSG_STACK.ADD;
561                 App_Exception.Raise_Exception;
562   END resp_val_the_ttl;
563   --
564   -- To validate IGS_RE_THESIS finalised_title_indicator
565   FUNCTION RESP_VAL_THE_FNL(
566   p_person_id IN NUMBER ,
567   p_ca_sequence_number IN NUMBER ,
568   p_sequence_number IN NUMBER ,
569   p_final_title_ind IN VARCHAR2 ,
570   p_thesis_status IN VARCHAR2 ,
571   p_message_name OUT NOCOPY VARCHAR2 )
572   RETURN BOOLEAN AS
573   BEGIN -- resp_val_the_fnl
574         -- Validate the IGS_RE_THESIS.final_title_ind, checking for :
575         -- Cannot be unset once IGS_RE_THESIS is SUBMITTED or EXAMINED
576   DECLARE
577         cst_submitted   CONSTANT        varchar2(10) := 'SUBMITTED';
578         cst_examined    CONSTANT        varchar2(10) := 'EXAMINED';
579         v_thesis_status         IGS_RE_THESIS_V.thesis_status%TYPE;
580         CURSOR  c_thev IS
581                 SELECT  thev.thesis_status
582                 FROM    IGS_RE_THESIS_V thev
583                 WHERE   thev.person_id          = p_person_id           AND
584                         thev.ca_sequence_number = p_ca_sequence_number  AND
585                         thev.sequence_number    = p_sequence_number;
586   BEGIN
587         p_message_name := NULL;
588         IF p_final_title_ind = 'N' THEN
589                 IF p_thesis_status IS NULL THEN
590                         OPEN c_thev;
591                         FETCH c_thev INTO v_thesis_status;
592                         IF c_thev%NOTFOUND THEN
593                                 CLOSE c_thev;
594                                 RETURN TRUE;
595                         END IF;
596                         CLOSE c_thev;
597                 ELSE
598                         v_thesis_status := p_thesis_status;
599                 END IF;
600                 IF v_thesis_status IN (
601                                 cst_submitted,
602                                 cst_examined) THEN
603                         p_message_name := 'IGS_RE_CANT_UNSET_FIN_TIT_IND';
604                         RETURN FALSE;
605                 END IF;
606         END IF;
607         RETURN TRUE;
608   EXCEPTION
609         WHEN OTHERS THEN
610                 IF (c_thev%ISOPEN) THEN
611                         CLOSE c_thev;
612                 END IF;
613                 RAISE;
614   END;
615   EXCEPTION
616         WHEN OTHERS THEN
617                 Fnd_Message.Set_Name ('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
618                 IGS_GE_MSG_STACK.ADD;
619                 App_Exception.Raise_Exception;
620   END resp_val_the_fnl;
621 
622 FUNCTION get_candidacy_dtls (
623            p_person_id IN NUMBER ,
624            p_course_cd IN VARCHAR2 ,
625            p_ca_sequence_number OUT NOCOPY NUMBER )
626 RETURN BOOLEAN IS
627   /*
628   ||  Created By : nbehera
629   ||  Created On : 14-NOV-2002
630   ||  Purpose : The function will check for a mapping ca_sequence_number in the table
631   ||            igs_re_candidature_all for the corresponding person_id and course_cd combination
632   ||  Known limitations, enhancements or remarks :
633   ||  Change History :
634   ||  Who             When            What
635   ||  (reverse chronological order - newest change first)
636   */
637 
638 CURSOR c_ca_seq_number IS
639 SELECT sequence_number
640 FROM   igs_re_candidature_all
641 WHERE  sca_course_cd IS NOT NULL
642 AND    sca_course_cd = p_course_cd
643 AND    person_id = p_person_id;
644 
645 BEGIN
646 
647 OPEN c_ca_seq_number;
648 FETCH c_ca_seq_number INTO p_ca_sequence_number;
649 
650 IF c_ca_seq_number%FOUND THEN
651       CLOSE c_ca_seq_number;
652       RETURN TRUE;
653 ELSE
654       CLOSE c_ca_seq_number;
655       RETURN FALSE;
656 END IF;
657 END get_candidacy_dtls ;
658 
659 FUNCTION check_dup_thesis(
660            p_person_id IN NUMBER ,
661            p_title IN VARCHAR2 ,
662            p_ca_sequence_number IN NUMBER )
663 RETURN BOOLEAN IS
664   /*
665   ||  Created By : nbehera
666   ||  Created On : 14-NOV-2002
667   ||  Purpose : The function checks if the Title of the thesis record already exists for
668   ||            the given student.
669   ||  Known limitations, enhancements or remarks :
670   ||  Change History :
671   ||  Who             When            What
672   ||  (reverse chronological order - newest change first)
673   */
674 CURSOR c_title IS
675 SELECT title
676 FROM   igs_re_thesis_all the,
677        igs_re_candidature re
678 WHERE  the.person_id = p_person_id
679 AND    the.title = p_title
680 AND    re.sequence_number = p_ca_sequence_number
681 AND    re.person_id = the.person_id;
682 l_title  igs_re_thesis_all.title%TYPE;
683 
684 BEGIN
685 OPEN c_title;
686 FETCH c_title INTO l_title;
687 
688 IF c_title%FOUND THEN
689      CLOSE c_title;
690      RETURN FALSE;
691 ELSE
692      CLOSE c_title;
693      RETURN TRUE;
694 END IF ;
695 END check_dup_thesis;
696 
697 FUNCTION eval_min_sub_dt (
698            p_expected_submission_date IN DATE,
699            p_ca_sequence_number  IN NUMBER ,
700            p_person_id IN NUMBER)
701 RETURN BOOLEAN IS
702   /*
703   ||  Created By : nbehera
704   ||  Created On : 14-NOV-2002
705   ||  Purpose : The function checks the value of the Expected Submission date of the Thesis details
706   ||            against the value of Minimum submission date, as entered in the Candidacy Details Form.
707   ||  Known limitations, enhancements or remarks :
708   ||  Change History :
709   ||  Who             When            What
710   ||  (reverse chronological order - newest change first)
711   */
712 
713 CURSOR c_min_subm_dt IS
714 SELECT min_submission_dt
715 FROM   igs_re_candidature
716 WHERE  sequence_number = p_ca_sequence_number
717 AND    person_id = p_person_id;
718 l_min_sub_date   igs_re_candidature.min_submission_dt%TYPE;
719 
720 BEGIN
721 
722 OPEN c_min_subm_dt;
723 FETCH c_min_subm_dt INTO l_min_sub_date;
724 CLOSE c_min_subm_dt;
725 
726 --Expected submission date cannot be before the minimum submission date
727 
728 IF p_expected_submission_date  < l_min_sub_date THEN
729         RETURN FALSE;
730 ELSE
731         RETURN TRUE;
732 END IF;
733 END eval_min_sub_dt;
734 
735 
736 END IGS_RE_VAL_THE;