DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_FUTURE_DT_TRANS

Source


1 PACKAGE BODY IGS_EN_FUTURE_DT_TRANS AS
2 /* $Header: IGSEN83B.pls 120.8 2005/12/08 07:36:14 appldev noship $ */
3 
4 g_debug_level CONSTANT NUMBER  := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5 e_resource_busy   EXCEPTION;
6 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
7 
8 ---------------------------------------------------------------------------------
9 
10 --                      PRIVATE FUNCTIONS
11 ---------------------------------------------------------------------------------
12 
13   FUNCTION is_career_model_enabled RETURN BOOLEAN AS
14   -------------------------------------------------------------------------------------------
15   --Created by  : Chandrasekhar Kasu, Oracle IDC
16   --Date created: 20-Nov-2004
17   -- Purpose : returns True when Career model  is  enabled  else False.
18   --Change History:
19   --Who         When            What
20 
21   -------------------------------------------------------------------------------------------
22   BEGIN
23 
24     IF NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N') =  'Y' THEN
25       RETURN TRUE;
26     ELSE
27       RETURN FALSE;
28     END IF;
29 
30   END is_career_model_enabled;
31 
32   FUNCTION is_tranfer_across_careers(
33     p_src_program_cd       IN   VARCHAR2,
34     p_src_progam_ver       IN   NUMBER,
35     p_dest_program_cd      IN   VARCHAR2,
36     p_dest_prog_ver        IN   NUMBER,
37     p_src_career_type      OUT  NOCOPY VARCHAR2
38   ) RETURN BOOLEAN AS
39 
40   -------------------------------------------------------------------------------------------
41   --Created by  : Chandrasekhar Kasu, Oracle IDC
42   --Date created: 20-Nov-2004
43   -- Purpose : This function returns when Transfer is across careers and
44   --           false when transfer is with in the careers
45   --Change History:
46   --Who         When            What
47 
48   -------------------------------------------------------------------------------------------
49 
50     CURSOR c_get_career_type(c_program_cd VARCHAR2,c_program_ver NUMBER) IS
51        SELECT course_type
52        FROM   IGS_PS_VER
53        WHERE  course_cd =  c_program_cd AND
54               version_number = c_program_ver;
55     l_src_prgm_career    IGS_PS_VER.COURSE_TYPE%TYPE;
56     l_dest_prgm_career    IGS_PS_VER.COURSE_TYPE%TYPE;
57 
58   BEGIN
59 
60     OPEN c_get_career_type(p_src_program_cd,p_src_progam_ver);
61     FETCH c_get_career_type INTO l_src_prgm_career;
62     CLOSE c_get_career_type;
63     OPEN c_get_career_type(p_dest_program_cd,p_dest_prog_ver);
64     FETCH c_get_career_type INTO l_dest_prgm_career;
65     CLOSE c_get_career_type;
66     IF (l_src_prgm_career <> l_dest_prgm_career) THEN
67         p_src_career_type := l_src_prgm_career;
68         RETURN TRUE;
69     ELSE
70         RETURN FALSE;
71     END IF;
72 
73   END is_tranfer_across_careers;
74 
75 
76   PROCEDURE log_err_messages(
77     p_msg_count      IN NUMBER,
78     p_msg_data       IN VARCHAR2
79   ) AS
80    -------------------------------------------------------------------------------------------
81    -- Created by  : Chandrasekhar Kasu, Oracle Student Systems Oracle IDC
82    -- purpose : this methos concatenates al the warning and error messages delimited by '<br>'
83    --           that were recieved during program transfer.
84    --Change History:
85    --Who         When            What
86 
87    --------------------------------------------------------------------------------------------
88 
89 
90     l_msg_count      NUMBER(4);
91     l_msg_data       VARCHAR2(4000);
92     l_enc_msg        VARCHAR2(2000);
93     l_msg_index      NUMBER(4);
94     l_msg_text       FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
95     l_warn_and_err_msg VARCHAR2(5000);
96 
97   BEGIN
98 
99     l_msg_count := p_msg_count;
100     l_msg_data := p_msg_data;
101     l_warn_and_err_msg := null;
102 
103     IF l_msg_count =1 THEN
104       FND_MESSAGE.SET_ENCODED(l_msg_data);
105       l_msg_text := FND_MESSAGE.GET;
106       FND_FILE.PUT_LINE (FND_FILE.LOG, l_msg_text);
107 
108     ELSIF l_msg_count > 1 THEN
109       FOR l_index IN 1..NVL(l_msg_count,0)
110       LOOP
111             FND_MSG_PUB.GET(FND_MSG_PUB.G_FIRST,
112                             FND_API.G_TRUE,
113                             l_enc_msg,
114                             l_msg_index);
115             FND_MESSAGE.SET_ENCODED(l_enc_msg);
116             l_msg_text := FND_MESSAGE.GET;
117             FND_FILE.PUT_LINE (FND_FILE.LOG, l_msg_text);
118             FND_MSG_PUB.DELETE_MSG(l_msg_index);
119 
120       END LOOP;
121     END IF;
122 
123   END log_err_messages;
124 
125 
126 PROCEDURE del_gua(
127   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
128   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
129 IS
130 BEGIN -- del_gua
131   -- Delete IGS_GR_GRADUAND_PKG records
132 DECLARE
133 
134   CURSOR c_gua IS
135     SELECT  create_dt
136     FROM  IGS_GR_GRADUAND gua
137     WHERE gua.person_id = p_person_id
138     AND   gua.course_cd = p_course_cd;
139 
140   CURSOR c_gua_del (
141     cp_create_dt    IGS_GR_GRADUAND.create_dt%TYPE) IS
142     SELECT rowid
143     FROM  IGS_GR_GRADUAND   gua
144     WHERE gua.person_id     = p_person_id
145     AND gua.create_dt     = cp_create_dt
146     FOR UPDATE OF gua.LAST_UPDATE_DATE NOWAIT ;
147 
148 
149   CURSOR c_gach (
150     cp_create_dt    IGS_GR_AWD_CRMN_HIST.create_dt%TYPE)  IS
151     SELECT  gach.gach_id
152     FROM  IGS_GR_AWD_CRMN_HIST gach
153     WHERE gach.person_id    = p_person_id
154     AND   gach.create_dt    = cp_create_dt;
155 
156   CURSOR c_gach_del (
157     cp_gach_id    IGS_GR_AWD_CRMN_HIST.gach_id%TYPE) IS
158     SELECT rowid
159     FROM  IGS_GR_AWD_CRMN_HIST  gach
160     WHERE gach.gach_id    = cp_gach_id
161     FOR UPDATE OF gach.LAST_UPDATE_DATE NOWAIT ;
162 
163   CURSOR c_gac (
164     cp_create_dt    IGS_GR_AWD_CRMN.create_dt%TYPE) IS
165     SELECT  gac.gac_id
166     FROM  IGS_GR_AWD_CRMN gac
167     WHERE gac.person_id   = p_person_id
168     AND   gac.create_dt     = cp_create_dt;
169 
170   CURSOR c_gac_del (
171     cp_gac_id   IGS_GR_AWD_CRMN.gac_id%TYPE) IS
172     SELECT rowid
173     FROM  IGS_GR_AWD_CRMN   gac
174     WHERE gac.gac_id    = cp_gac_id
175     FOR UPDATE OF gac.LAST_UPDATE_DATE NOWAIT ;
176 
177 v_gua_del_exists  c_gua_del%ROWTYPE;
178 l_entity_name     VARCHAR2(30);
179 
180 BEGIN
181 
182   FOR v_gua_rec IN c_gua LOOP
183     FOR v_gach_rec IN c_gach (v_gua_rec.create_dt) LOOP
184             BEGIN
185                         -- Delete unconfirmed IGS_GR_AWD_CRMN_HIST records
186               FOR c_gach_del_rec in c_gach_del(v_gach_rec.gach_id)
187               LOOP
188 
189                 IGS_GR_AWD_CRMN_HIST_PKG.DELETE_ROW( X_ROWID => c_gach_del_rec.ROWID );
190 
191               END LOOP;
192 
193         EXCEPTION
194         WHEN e_resource_busy THEN
195           IF c_gach_del%ISOPEN THEN
196             CLOSE c_gach_del;
197           END IF;
198           l_entity_name := 'IGS_GR_AWD_CRMN_HIST';
199           EXIT;
200       END;
201     END LOOP;
202     IF l_entity_name IS NOT NULL THEN
203       EXIT;
204     END IF;
205 
206     FOR v_gca_rec IN c_gac(v_gua_rec.create_dt) LOOP
207         BEGIN
208         -- Delete unconfirmed IGS_GR_AWD_CRMN records
209         FOR c_gac_del_rec IN c_gac_del(
210              v_gca_rec.gac_id) LOOP
211         IGS_GR_AWD_CRMN_PKG.DELETE_ROW(
212           X_ROWID => c_gac_del_rec.ROWID );
213         END LOOP;
214         EXCEPTION
215         WHEN e_resource_busy THEN
216           IF c_gac_del%ISOPEN THEN
217             CLOSE c_gac_del;
218           END IF;
219           l_entity_name := 'IGS_GR_AWD_CRMN';
220           EXIT;
221         END;
222     END LOOP;
223 
224     IF l_entity_name IS NOT NULL THEN
225       EXIT;
226     END IF;
227 
228     -- Delete unconfirmed IGS_GR_GRADUAND records
229     FOR v_gua_del_exists IN c_gua_del(v_gua_rec.create_dt) LOOP
230       IGS_GR_GRADUAND_PKG.DELETE_ROW(
231         X_ROWID => v_gua_del_exists.rowid );
232     END LOOP;
233 
234   END LOOP;
235 
236  EXCEPTION
237   WHEN e_resource_busy THEN
238     IF c_gua%ISOPEN THEN
239       CLOSE c_gua;
240     END IF;
241     IF c_gua_del%ISOPEN THEN
242       CLOSE c_gua_del;
243     END IF;
244     IF c_gach%ISOPEN THEN
245       CLOSE c_gach;
246     END IF;
247     IF c_gach_del%ISOPEN THEN
248       CLOSE c_gach_del;
249     END IF;
250     IF c_gac%ISOPEN THEN
251       CLOSE c_gac;
252     END IF;
253     IF c_gac_del%ISOPEN THEN
254       CLOSE c_gac_del;
255     END IF;
256  WHEN OTHERS THEN
257     IF c_gua%ISOPEN THEN
258       CLOSE c_gua;
259     END IF;
260     IF c_gua_del%ISOPEN THEN
261       CLOSE c_gua_del;
262     END IF;
263     IF c_gach%ISOPEN THEN
264       CLOSE c_gach;
265     END IF;
266     IF c_gach_del%ISOPEN THEN
267       CLOSE c_gach_del;
268     END IF;
269     IF c_gac%ISOPEN THEN
270       CLOSE c_gac;
271     END IF;
272     IF c_gac_del%ISOPEN THEN
273       CLOSE c_gac_del;
274     END IF;
275 
276 END;
277 END del_gua;
278 
279 
280 PROCEDURE del_esaa(
281   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
282   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
283 IS
284 BEGIN -- del_esaa
285   -- Delete IGS_EN_SPA_AWD_AIM records
286 DECLARE
287 
288   CURSOR c_esaa IS
289     SELECT  award_cd
290     FROM  IGS_EN_SPA_AWD_AIM esaa
291     WHERE esaa.person_id = p_person_id
292     AND   esaa.course_cd = p_course_cd;
293 
294   CURSOR c_esaa_del (
295     cp_award_cd IGS_EN_SPA_AWD_AIM.award_cd%TYPE) IS
296     SELECT rowid
297     FROM  IGS_EN_SPA_AWD_AIM  esaa
298     WHERE esaa.person_id = p_person_id
299     AND   esaa.course_cd = p_course_cd
300     AND   esaa.award_cd  = cp_award_cd
301     FOR UPDATE OF esaa.LAST_UPDATE_DATE NOWAIT ;
302 
303 v_esaa_del_exists c_esaa_del%ROWTYPE;
304 
305 BEGIN
306 
307   FOR v_esaa_rec IN c_esaa LOOP
308           -- Delete IGS_EN_SPA_AWD_AIM records
309     FOR v_esaa_del_exists IN c_esaa_del(v_esaa_rec.award_cd) LOOP
310 
311       IGS_EN_SPA_AWD_AIM_PKG.DELETE_ROW(X_ROWID => v_esaa_del_exists.rowid );
312 
313     END LOOP;
314 
315   END LOOP;
316 
317 EXCEPTION
318   WHEN e_resource_busy THEN
319     IF c_esaa%ISOPEN THEN
320       CLOSE c_esaa;
321     END IF;
322     IF c_esaa_del%ISOPEN THEN
323       CLOSE c_esaa_del;
324     END IF;
325   WHEN OTHERS THEN
326     IF c_esaa%ISOPEN THEN
327       CLOSE c_esaa;
328     END IF;
329     IF c_esaa_del%ISOPEN THEN
330       CLOSE c_esaa_del;
331      END IF;
332 
333 END;
334 END del_esaa;
335 
336 PROCEDURE del_gsa(
337   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
338   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
339 IS
340 BEGIN -- del_gsa
341   -- (1) Delete IGS_GR_SPECIAL_AWARD records
342 DECLARE
343   CURSOR c_gsa IS
344     SELECT  award_cd,award_dt
345     FROM  IGS_GR_SPECIAL_AWARD gsa
346     WHERE gsa.person_id = p_person_id
347     AND   gsa.course_cd = p_course_cd;
348 
349   CURSOR c_gsa_del (
350     cp_award_cd     IGS_GR_SPECIAL_AWARD.award_cd%TYPE,
351     cp_award_dt     IGS_GR_SPECIAL_AWARD.award_dt%TYPE) IS
352     SELECT rowid
353     FROM  IGS_GR_SPECIAL_AWARD  gsa
354     WHERE gsa.person_id = p_person_id
355     AND gsa.course_cd = p_course_cd
356     AND gsa.award_cd  = cp_award_cd
357     AND gsa.award_dt  = cp_award_dt
358     FOR UPDATE OF gsa.LAST_UPDATE_DATE NOWAIT ;
359 
360 v_gsa_del_exists  c_gsa_del%ROWTYPE;
361 
362 BEGIN
363 
364   FOR v_gsa_rec IN c_gsa LOOP
365     FOR v_gsa_del_exists IN c_gsa_del(v_gsa_rec.award_cd,
366                                       v_gsa_rec.award_dt ) LOOP
367 
368       IGS_GR_SPECIAL_AWARD_PKG.DELETE_ROW(X_ROWID => v_gsa_del_exists.rowid );
369 
370     END LOOP;
371 
372   END LOOP;
373 
374 EXCEPTION
375   WHEN e_resource_busy THEN
376     IF c_gsa%ISOPEN THEN
377       CLOSE c_gsa;
378     END IF;
379     IF c_gsa_del%ISOPEN THEN
380       CLOSE c_gsa_del;
381     END IF;
382   WHEN OTHERS THEN
383     IF c_gsa%ISOPEN THEN
384       CLOSE c_gsa;
385     END IF;
386     IF c_gsa_del%ISOPEN THEN
387       CLOSE c_gsa_del;
388     END IF;
389 
390 END;
391 END del_gsa;
392 
393 PROCEDURE del_hssc(
394   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
395   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
396 IS
397 BEGIN -- del_hssc
398   -- Delete IGS_HE_ST_SPA_CC records
399 DECLARE
400 
401   CURSOR c_hssc IS
402     SELECT  he_spa_cc_id
403     FROM  IGS_HE_ST_SPA_CC hssc
404     WHERE hssc.person_id = p_person_id
405     AND   hssc.course_cd = p_course_cd;
406 
407   CURSOR c_hssc_del (cp_he_spa_cc_id  IGS_HE_ST_SPA_CC.he_spa_cc_id%TYPE) IS
408     SELECT rowid
409     FROM  IGS_HE_ST_SPA_CC  hssc
410     WHERE hssc.he_spa_cc_id = cp_he_spa_cc_id
411     FOR UPDATE OF hssc.LAST_UPDATE_DATE NOWAIT ;
412 
413   v_hssc_del_exists c_hssc_del%ROWTYPE;
414 
415 BEGIN
416   FOR v_hssc_rec IN c_hssc LOOP
417           -- Delete IGS_HE_ST_SPA_CC records
418     FOR v_hssc_del_exists IN c_hssc_del(v_hssc_rec.he_spa_cc_id) LOOP
419 
420       IGS_HE_ST_SPA_CC_PKG.DELETE_ROW(X_ROWID => v_hssc_del_exists.ROWID );
421 
422     END LOOP;
423 
424   END LOOP;
425 
426 EXCEPTION
427   WHEN e_resource_busy THEN
428     IF c_hssc%ISOPEN THEN
429       CLOSE c_hssc;
430     END IF;
431     IF c_hssc_del%ISOPEN THEN
432       CLOSE c_hssc_del;
433     END IF;
434   WHEN OTHERS THEN
435     IF c_hssc%ISOPEN THEN
436       CLOSE c_hssc;
437     END IF;
438     IF c_hssc_del%ISOPEN THEN
439       CLOSE c_hssc_del;
440     END IF;
441 
442 END;
443 END del_hssc;
444 
445 PROCEDURE del_hssa(
446   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
447   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
448 IS
449 BEGIN -- del_hssa
450   -- Delete IGS_HE_ST_SPA records
451 DECLARE
452   CURSOR c_hssa IS
453     SELECT  hesa_st_spa_id,person_id,course_cd
454     FROM  IGS_HE_ST_SPA hssa
455     WHERE hssa.person_id = p_person_id
456     AND   hssa.course_cd = p_course_cd;
457 
458   CURSOR c_hssa_del (
459     cp_hesa_st_spa_id IGS_HE_ST_SPA.hesa_st_spa_id%TYPE) IS
460     SELECT rowid
461     FROM  IGS_HE_ST_SPA   hssa
462     WHERE hssa.hesa_st_spa_id = cp_hesa_st_spa_id
463     FOR UPDATE OF hssa.LAST_UPDATE_DATE NOWAIT ;
464 
465 
466   CURSOR c_hssua (
467     cp_person_id IGS_HE_ST_SPA_UT.person_id%TYPE,
468     cp_course_cd IGS_HE_ST_SPA.course_cd%TYPE) IS
469     SELECT  hesa_st_spau_id
470     FROM  IGS_HE_ST_SPA_UT hssua
471     WHERE hssua.person_id  = cp_person_id
472     AND   hssua.course_cd  = cp_course_cd ;
473 
474   CURSOR c_hssua_del (
475     cp_hesa_st_spau_id IGS_HE_ST_SPA_UT.hesa_st_spau_id%TYPE) IS
476     SELECT rowid
477     FROM  IGS_HE_ST_SPA_UT  hssua
478     WHERE hssua.hesa_st_spau_id = cp_hesa_st_spau_id
479     FOR UPDATE OF hssua.LAST_UPDATE_DATE NOWAIT ;
480 
481     v_hssa_del_exists c_hssa_del%ROWTYPE;
482     l_entity_name     VARCHAR2(30);
483 
484 
485 BEGIN
486 
487   FOR v_hssa_rec IN c_hssa LOOP
488     FOR v_hssua_rec IN c_hssua (v_hssa_rec.person_id,
489                                 v_hssa_rec.course_cd ) LOOP
490       BEGIN
491                         -- Delete unconfirmed IGS_HE_ST_SPA_UT records
492         FOR v_hssua_del_rec in c_hssua_del(v_hssua_rec.hesa_st_spau_id)
493 
494         LOOP
495           IGS_HE_ST_SPA_UT_ALL_PKG.DELETE_ROW(
496                   X_ROWID => v_hssua_del_rec.ROWID );
497         END LOOP;
498         EXCEPTION
499         WHEN e_resource_busy THEN
500           IF c_hssua_del%ISOPEN THEN
501             CLOSE c_hssua_del;
502           END IF;
503           l_entity_name := 'IGS_HE_ST_SPA_UT_ALL';
504           EXIT;
505       END;
506     END LOOP;
507     IF l_entity_name IS NOT NULL THEN
508       EXIT;
509     END IF;
510           -- Delete IGS_HE_ST_SPA records
511     FOR v_hssa_del_exists IN c_hssa_del(v_hssa_rec.hesa_st_spa_id) LOOP
512 
513       IGS_HE_ST_SPA_ALL_PKG.DELETE_ROW(
514                       X_ROWID => v_hssa_del_exists.rowid );
515     END LOOP;
516   END LOOP;
517 
518  EXCEPTION
519   WHEN e_resource_busy THEN
520     IF c_hssa%ISOPEN THEN
521       CLOSE c_hssa;
522     END IF;
523     IF c_hssa_del%ISOPEN THEN
524       CLOSE c_hssa_del;
525     END IF;
526     IF c_hssua%ISOPEN THEN
527            CLOSE c_hssua;
528     END IF;
529     IF c_hssua_del%ISOPEN THEN
530        CLOSE c_hssua_del;
531     END IF;
532   WHEN OTHERS THEN
533     IF c_hssa%ISOPEN THEN
534       CLOSE c_hssa;
535     END IF;
536     IF c_hssa_del%ISOPEN THEN
537       CLOSE c_hssa_del;
538     END IF;
539     IF c_hssua%ISOPEN THEN
540            CLOSE c_hssua;
541     END IF;
542    IF c_hssua_del%ISOPEN THEN
543      CLOSE c_hssua_del;
544     END IF;
545 
546 END;
547 END del_hssa;
548 
549 ------------------------------------------------------------------------------------------------------------
550 PROCEDURE del_pr_rule_appl(
551   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
552   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
553 IS
554 BEGIN -- del_pr_rule_appl
555   -- Delete IGS_PR_RU_APPL records
556 DECLARE
557   CURSOR c_pra IS
558     SELECT  progression_rule_cat,sequence_number
559     FROM  IGS_PR_RU_APPL pra
560     WHERE pra.sca_person_id = p_person_id
561     AND   pra.sca_course_cd = p_course_cd;
562 
563   CURSOR c_pra_del (
564         cp_progression_rule_cat   IGS_PR_RU_APPL.progression_rule_cat%TYPE,
565         cp_sequence_number  IGS_PR_RU_APPL.sequence_number%TYPE) IS
566     SELECT  rowid,pra.*
567     FROM  IGS_PR_RU_APPL  pra
568     WHERE pra.progression_rule_cat = cp_progression_rule_cat
569     AND   pra.sequence_number = cp_sequence_number
570     FOR UPDATE OF pra.LAST_UPDATE_DATE NOWAIT ;
571 
572     v_pra_upd_exists  c_pra_del%ROWTYPE;
573 
574 BEGIN
575 
576   FOR v_pra_rec IN c_pra LOOP
577           -- Delete IGS_PR_RU_APPL records
578     FOR v_pra_upd_exists IN c_pra_del(v_pra_rec.progression_rule_cat,
579                                             v_pra_rec.sequence_number ) LOOP
580 -- DELETE THE RECORD
581       IGS_PR_RU_APPL_PKG.DELETE_ROW (X_ROWID => v_pra_upd_exists.rowid) ;
582 
583      END LOOP;
584 
585   END LOOP;
586 
587 EXCEPTION
588   WHEN e_resource_busy THEN
589     IF c_pra%ISOPEN THEN
590       CLOSE c_pra;
591     END IF;
592     IF c_pra_del%ISOPEN THEN
593       CLOSE c_pra_del;
594     END IF;
595   WHEN OTHERS THEN
596     IF c_pra%ISOPEN THEN
597       CLOSE c_pra;
598     END IF;
599     IF c_pra_del%ISOPEN THEN
600       CLOSE c_pra_del;
601     END IF;
602 
603 END;
604 
605 END del_pr_rule_appl;
606 
607 
608 PROCEDURE del_psaa(
609   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
610   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
611 IS
612 BEGIN -- del_psaa
613   -- Delete IGS_PS_STDNT_APV_ALT records
614 DECLARE
615 
616   CURSOR c_psaa IS
617     SELECT  exit_course_cd,exit_version_number
618     FROM  IGS_PS_STDNT_APV_ALT psaa
619     WHERE psaa.person_id = p_person_id
620     AND   psaa.course_cd = p_course_cd;
621 
622   CURSOR c_psaa_del (
623       cp_exit_course_cd   IGS_PS_STDNT_APV_ALT.exit_course_cd%TYPE,
624       cp_exit_version_number  IGS_PS_STDNT_APV_ALT.exit_version_number%TYPE) IS
625     SELECT rowid
626     FROM  IGS_PS_STDNT_APV_ALT  psaa
627     WHERE psaa.person_id = p_person_id
628     AND   psaa.course_cd = p_course_cd
629     AND   psaa.exit_course_cd  = cp_exit_course_cd
630     AND   psaa.exit_version_number  = cp_exit_version_number
631     FOR UPDATE OF psaa.LAST_UPDATE_DATE NOWAIT ;
632 
633     v_psaa_del_exists c_psaa_del%ROWTYPE;
634 
635 BEGIN
636 
637   FOR v_psaa_rec IN c_psaa LOOP
638           -- Delete IGS_PS_STDNT_APV_ALT records
639     FOR v_psaa_del_exists IN c_psaa_del(v_psaa_rec.exit_course_cd,
640                                         v_psaa_rec.exit_version_number ) LOOP
641 
642       IGS_PS_STDNT_APV_ALT_PKG.DELETE_ROW(X_ROWID => v_psaa_del_exists.rowid);
643 
644     END LOOP;
645   END LOOP;
646 
647 EXCEPTION
648   WHEN e_resource_busy THEN
649     IF c_psaa%ISOPEN THEN
650       CLOSE c_psaa;
651     END IF;
652     IF c_psaa_del%ISOPEN THEN
653       CLOSE c_psaa_del;
654     END IF;
655   WHEN OTHERS THEN
656     IF c_psaa%ISOPEN THEN
657       CLOSE c_psaa;
658     END IF;
659     IF c_psaa_del%ISOPEN THEN
660       CLOSE c_psaa_del;
661     END IF;
662 
663 END;
664 
665 END del_psaa;
666 
667 
668 PROCEDURE del_susa(
669   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
670   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
671 IS
672 BEGIN -- del_susa
673   -- (2) Delete IGS_AS_SU_SETATMPT records
674 DECLARE
675   CURSOR c_susa IS
676     SELECT  susa.unit_set_cd,susa.sequence_number
677     FROM  IGS_AS_SU_SETATMPT susa
678     WHERE susa.person_id    = p_person_id
679     AND   susa.course_cd    = p_course_cd
680     START WITH
681       susa.person_id    = p_person_id AND
682       susa.course_cd    = p_course_cd AND
683       susa.parent_unit_set_cd IS NULL
684     CONNECT BY
685     PRIOR susa.person_id    = p_person_id AND
686     PRIOR susa.course_cd    = p_course_cd AND
687     PRIOR susa.unit_set_cd  = susa.parent_unit_set_cd AND
688     PRIOR susa.sequence_number  = susa.parent_sequence_number
689     ORDER BY LEVEL DESC;
690 
691   CURSOR c_susa_del (
692     cp_unit_set_cd    IGS_AS_SU_SETATMPT.unit_set_cd%TYPE,
693     cp_sequence_number  IGS_AS_SU_SETATMPT.sequence_number%TYPE) IS
694     SELECT ROWID, susa.*
695     FROM  IGS_AS_SU_SETATMPT susa
696     WHERE susa.person_id    = p_person_id
697     AND   susa.course_cd    = p_course_cd
698     AND   susa.unit_set_cd  = cp_unit_set_cd
699     AND   susa.sequence_number  = cp_sequence_number
700     FOR UPDATE OF
701       susa.LAST_UPDATE_DATE NOWAIT;
702 
703   CURSOR c_hes ( cp_unit_set_cd   IGS_AS_SU_SETATMPT.unit_set_cd%TYPE,
704      cp_sequence_number IGS_AS_SU_SETATMPT.sequence_number%TYPE) IS
705     SELECT  hesa_en_susa_id
706     FROM  IGS_HE_EN_SUSA hes
707     WHERE hes.person_id = p_person_id
708     AND   hes.course_cd = p_course_cd
709     AND   hes.unit_set_cd = cp_unit_set_cd
710     AND   hes.sequence_number = cp_sequence_number;
711 
712   CURSOR c_hes_del (
713     cp_hesa_en_susa_id IGS_HE_EN_SUSA.hesa_en_susa_id%TYPE) IS
714     SELECT rowid
715     FROM  IGS_HE_EN_SUSA  hes
716     WHERE hes.hesa_en_susa_id = cp_hesa_en_susa_id
717     FOR UPDATE OF hes.LAST_UPDATE_DATE NOWAIT ;
718 
719   CURSOR c_hesc ( cp_unit_set_cd    IGS_AS_SU_SETATMPT.unit_set_cd%TYPE,
720       cp_sequence_number  IGS_AS_SU_SETATMPT.sequence_number%TYPE) IS
721     SELECT  he_susa_cc_id
722     FROM  IGS_HE_EN_SUSA_CC hesc
723     WHERE hesc.person_id = p_person_id
724     AND   hesc.course_cd = p_course_cd
725     AND   hesc.unit_set_cd = cp_unit_set_cd
726     AND   hesc.sequence_number = cp_sequence_number;
727 
728   CURSOR c_hesc_del (
729     cp_he_susa_cc_id IGS_HE_EN_SUSA_CC.he_susa_cc_id%TYPE) IS
730     SELECT rowid
731     FROM  IGS_HE_EN_SUSA_CC hesc
732     WHERE hesc.he_susa_cc_id = cp_he_susa_cc_id
733     FOR UPDATE OF hesc.LAST_UPDATE_DATE NOWAIT ;
734 
735   v_susa_del_exists c_susa_del%ROWTYPE;
736   L_ROWID     VARCHAR2(25);
737   v_error_flag      BOOLEAN DEFAULT FALSE;
738   l_entity_name     VARCHAR2(30);
739 
740 BEGIN
741   v_error_flag := FALSE;
742         -- Prevent admission application validation in database trigger
743     -- Inserts a record into the s_disable_table_trigger
744   -- database table.
745   IGS_GE_S_DSB_TAB_TRG_PKG.INSERT_ROW(
746     X_ROWID => L_ROWID ,
747     X_TABLE_NAME =>'ADMP_DEL_SCA_UNCONF',
748     X_SESSION_ID => userenv('SESSIONID'),
749     x_mode => 'R'
750     );
751   FOR v_susa_rec IN c_susa LOOP
752     FOR v_hes_rec IN c_hes (v_susa_rec.unit_set_cd, v_susa_rec.sequence_number )
753     LOOP
754       BEGIN
755                       -- Delete unconfirmed IGS_HE_EN_SUSA records
756         FOR v_hes_del_rec in c_hes_del(v_hes_rec.hesa_en_susa_id) LOOP
757 
758           IGS_HE_EN_SUSA_PKG.DELETE_ROW( X_ROWID => v_hes_del_rec.ROWID );
759 
760         END LOOP;
761       EXCEPTION
762         WHEN e_resource_busy THEN
763           IF c_hes_del%ISOPEN THEN
764             CLOSE c_hes_del;
765           END IF;
766            l_entity_name := 'IGS_HE_EN_SUSA';
767           EXIT;
768       END;
769     END LOOP;
770 
771     FOR v_hesc_rec IN c_hesc (v_susa_rec.unit_set_cd, v_susa_rec.sequence_number )
772     LOOP
773 
774       BEGIN
775                         -- Delete unconfirmed IGS_HE_EN_SUSA_CC records
776         FOR v_hesc_del_rec in c_hesc_del(v_hesc_rec.he_susa_cc_id) LOOP
777 
778           IGS_HE_EN_SUSA_CC_PKG.DELETE_ROW( X_ROWID => v_hesc_del_rec.ROWID );
779 
780     END LOOP;
781     EXCEPTION
782       WHEN e_resource_busy THEN
783         IF c_hesc_del%ISOPEN THEN
784             CLOSE c_hesc_del;
785         END IF;
786            l_entity_name := 'IGS_HE_EN_SUSA_CC';
787         EXIT;
788       END;
789     END LOOP;
790     IF l_entity_name IS NOT NULL THEN
791       EXIT;
792     END IF;
793                 -- Delete unconfirmed IGS_AS_SU_SETATMPT
794     FOR v_susa_del_exists IN c_susa_del(
795         v_susa_rec.unit_set_cd,
796         v_susa_rec.sequence_number) LOOP
797 
798       IGS_AS_SU_SETATMPT_PKG.DELETE_ROW ( X_ROWID => V_SUSA_DEL_EXISTS.ROWID );
799 
800     END LOOP;
801 
802   END LOOP;
803   IF v_error_flag THEN
804     -- Must reset database trigger validation if been turned off
805     IGS_GE_MNT_SDTT.genp_del_sdtt('ADMP_DEL_SCA_UNCONF');
806 
807   END IF;
808   -- Must reset database trigger validation if been turned off
809   IGS_GE_MNT_SDTT.genp_del_sdtt('ADMP_DEL_SCA_UNCONF');
810 
811 EXCEPTION
812   WHEN e_resource_busy THEN
813     IF c_susa%ISOPEN THEN
814       CLOSE c_susa;
815     END IF;
816     IF c_susa_del%ISOPEN THEN
817       CLOSE c_susa_del;
818     END IF;
819     IF c_hes%ISOPEN THEN
820       CLOSE c_hes;
821     END IF;
822     IF c_hes_del%ISOPEN THEN
823       CLOSE c_hes_del;
824     END IF;
825     IF c_hesc%ISOPEN THEN
826       CLOSE c_hesc;
827     END IF;
828     IF c_hesc_del%ISOPEN THEN
829       CLOSE c_hesc_del;
830     END IF;
831     -- Must reset database trigger validation if been turned off
832     IGS_GE_MNT_SDTT.genp_del_sdtt('ADMP_DEL_SCA_UNCONF');
833   WHEN OTHERS THEN
834     IF c_susa%ISOPEN THEN
835       CLOSE c_susa;
836     END IF;
837     IF c_susa_del%ISOPEN THEN
838       CLOSE c_susa_del;
839     END IF;
840     IF c_hes%ISOPEN THEN
841       CLOSE c_hes;
842     END IF;
843     IF c_hes_del%ISOPEN THEN
844       CLOSE c_hes_del;
845     END IF;
846     IF c_hesc%ISOPEN THEN
847       CLOSE c_hesc;
848     END IF;
849     IF c_hesc_del%ISOPEN THEN
850       CLOSE c_hesc_del;
851     END IF;
852     -- Must reset database trigger validation if been turned off
853     IGS_GE_MNT_SDTT.genp_del_sdtt('ADMP_DEL_SCA_UNCONF');
854 
855 END;
856 END del_susa;
857 
858 PROCEDURE del_scho(
859   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
860   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
861 IS
862 BEGIN -- del_scho
863   -- (3) Delete IGS_EN_STDNTPSHECSOP records
864 DECLARE
865   CURSOR c_scho IS
866     SELECT  scho.start_dt
867     FROM  IGS_EN_STDNTPSHECSOP scho
868     WHERE scho.person_id = p_person_id
869     AND   scho.course_cd = p_course_cd;
870 
871   CURSOR c_scho_del (
872       cp_start_dt   IGS_EN_STDNTPSHECSOP.start_dt%TYPE) IS
873     SELECT ROWID, scho.*
874     FROM  IGS_EN_STDNTPSHECSOP scho
875     WHERE scho.person_id  = p_person_id
876     AND   scho.course_cd  = p_course_cd
877     AND   scho.start_dt   = cp_start_dt
878     FOR UPDATE OF
879       scho.LAST_UPDATE_DATE NOWAIT;
880 
881     v_scho_del_exists c_scho_del%ROWTYPE;
882 
883 BEGIN
884 
885   FOR v_scho_rec IN c_scho LOOP
886     -- Delete unconfirmed IGS_EN_STDNTPSHECSOP
887     FOR v_scho_del_exists IN c_scho_del(v_scho_rec.start_dt) LOOP
888 
889       IGS_EN_STDNTPSHECSOP_PKG.DELETE_ROW ( X_ROWID => V_SCHO_DEL_EXISTS.ROWID );
890 
891     END LOOP;
892 
893   END LOOP;
894 
895 EXCEPTION
896   WHEN e_resource_busy THEN
897     IF c_scho%ISOPEN THEN
898       CLOSE c_scho;
899     END IF;
900     IF c_scho_del%ISOPEN THEN
901       CLOSE c_scho_del;
902     END IF;
903 
904   WHEN OTHERS THEN
905     IF c_scho%ISOPEN THEN
906       CLOSE c_scho;
907     END IF;
908     IF c_scho_del%ISOPEN THEN
909       CLOSE c_scho_del;
910     END IF;
911 
912 END;
913 
914 END del_scho;
915 
916 PROCEDURE del_scae(
917   p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
918   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
919 IS
920 
921 BEGIN -- del_scae
922   -- (4) Delete IGS_AS_SC_ATMPT_ENR scae
923 DECLARE
924   CURSOR c_scae IS
925     SELECT ROWID, scae.*
926     FROM  IGS_AS_SC_ATMPT_ENR scae
927     WHERE scae.person_id    = p_person_id
928     AND   scae.course_cd    = p_course_cd
929     FOR UPDATE OF scae.LAST_UPDATE_DATE NOWAIT;
930 
931 BEGIN
932   FOR v_scae_rec IN c_scae LOOP
933 
934     IGS_AS_SC_ATMPT_ENR_PKG.DELETE_ROW(v_scae_rec.rowid);
935 
936   END LOOP;
937 
938 EXCEPTION
939   WHEN e_resource_busy THEN
940     IF c_scae%ISOPEN THEN
941       CLOSE c_scae;
942     END IF;
943 
944   WHEN OTHERS THEN
945     IF c_scae%ISOPEN THEN
946       CLOSE c_scae;
947     END IF;
948 
949 END;
950 
951 END del_scae;
952 
953 PROCEDURE del_scan(
954   p_person_id   IGS_AS_SC_ATMPT_NOTE.person_id%TYPE,
955   p_course_cd   IGS_AS_SC_ATMPT_NOTE.course_cd%TYPE)
956 IS
957 BEGIN -- del_scan
958   -- Delete student IGS_PS_COURSE attempt notes (5)
959 DECLARE
960   CURSOR c_scan IS
961     SELECT ROWID, scan.*
962     FROM  IGS_AS_SC_ATMPT_NOTE  scan
963     WHERE scan.person_id    = p_person_id
964     AND   scan.course_cd    = p_course_cd
965     FOR UPDATE OF scan.reference_number NOWAIT;
966 
967 
968 BEGIN
969   FOR v_scan_rec IN c_scan LOOP
970     -- Call RI check routine for the IGS_AS_SC_ATMPT_NOTE table
971     IGS_AS_SC_ATMPT_NOTE_PKG.DELETE_ROW(v_scan_rec.rowid);
972 
973   END LOOP;
974 
975 EXCEPTION
976   WHEN e_resource_busy THEN
977     IF c_scan%ISOPEN THEN
978       CLOSE c_scan;
979     END IF;
980   WHEN OTHERS THEN
981     IF c_scan%ISOPEN THEN
982       CLOSE c_scan;
983     END IF;
984 
985 END;
986 
987 END del_scan;
988 
989 PROCEDURE upd_del_re_candidature(
990   p_person_id     IGS_AV_ADV_STANDING.person_id%TYPE,
991   p_course_cd     IGS_AV_ADV_STANDING.course_cd%TYPE,
992   p_adm_admission_appl_number IGS_RE_CANDIDATURE.acai_admission_appl_number%TYPE,
993   p_adm_nominated_course_cd IGS_RE_CANDIDATURE.acai_nominated_course_cd%TYPE,
994   p_adm_sequence_number   IGS_RE_CANDIDATURE.acai_sequence_number%TYPE)
995 IS
996 BEGIN -- upd_re_candidature
997   -- Process IGS_RE_CANDIDATURE
998 DECLARE
999   CURSOR c_ca IS
1000     SELECT  rowid, ca.*
1001     FROM  IGS_RE_CANDIDATURE  ca
1002     WHERE ca.person_id      = p_person_id
1003     AND   ca.sca_course_cd    = p_course_cd
1004     FOR UPDATE OF ca.sca_course_cd NOWAIT;
1005 
1006 BEGIN
1007   FOR v_ca_rec IN c_ca LOOP
1008 
1009     IF (V_CA_REC.ACAI_ADMISSION_APPL_NUMBER IS NULL AND
1010        V_CA_REC.ACAI_NOMINATED_COURSE_CD IS NULL AND
1011        V_CA_REC.ACAI_SEQUENCE_NUMBER IS NULL) THEN
1012 
1013         IGS_RE_CANDIDATURE_PKG.DELETE_ROW(X_ROWID  => V_CA_REC.ROWID);
1014     ELSE
1015 
1016       IGS_RE_CANDIDATURE_PKG.UPDATE_ROW(
1017         X_ROWID       => V_CA_REC.ROWID,
1018         X_PERSON_ID       => V_CA_REC.PERSON_ID,
1019         X_SEQUENCE_NUMBER     => V_CA_REC.SEQUENCE_NUMBER,
1020         X_SCA_COURSE_CD     => NULL,
1021         X_ACAI_ADMISSION_APPL_NUMBER  => V_CA_REC.ACAI_ADMISSION_APPL_NUMBER,
1022         X_ACAI_NOMINATED_COURSE_CD  => V_CA_REC.ACAI_NOMINATED_COURSE_CD,
1023         X_ACAI_SEQUENCE_NUMBER    => V_CA_REC.ACAI_SEQUENCE_NUMBER,
1024         X_ATTENDANCE_PERCENTAGE   => V_CA_REC.ATTENDANCE_PERCENTAGE,
1025         X_GOVT_TYPE_OF_ACTIVITY_CD  => V_CA_REC.GOVT_TYPE_OF_ACTIVITY_CD,
1026         X_MAX_SUBMISSION_DT     => V_CA_REC.MAX_SUBMISSION_DT,
1027         X_MIN_SUBMISSION_DT     => V_CA_REC.MIN_SUBMISSION_DT,
1028         X_RESEARCH_TOPIC    => V_CA_REC.RESEARCH_TOPIC,
1029         X_INDUSTRY_LINKS    => V_CA_REC.INDUSTRY_LINKS
1030         );
1031     END IF;
1032   END LOOP;
1033 
1034 EXCEPTION
1035   WHEN e_resource_busy THEN
1036     IF c_ca%ISOPEN THEN
1037       CLOSE c_ca;
1038     END IF;
1039   WHEN OTHERS THEN
1040     IF c_ca%ISOPEN THEN
1041       CLOSE c_ca;
1042     END IF;
1043 
1044 END;
1045 
1046 END upd_del_re_candidature;
1047 
1048 PROCEDURE del_av(
1049   p_person_id   IGS_AV_ADV_STANDING.person_id%TYPE,
1050   p_course_cd   IGS_AV_ADV_STANDING.course_cd%TYPE,
1051   p_version_num IGS_AV_ADV_STANDING.version_number%TYPE)
1052 IS
1053 BEGIN -- del_av
1054   -- Delete IGS_AV_ADV_STANDING records
1055 DECLARE
1056   CURSOR c_av IS
1057     SELECT  ROWID
1058     FROM  IGS_AV_ADV_STANDING av
1059     WHERE av.person_id = p_person_id
1060     AND   av.course_cd = p_course_cd
1061     AND   av.version_number = p_version_num;
1062 
1063   c_av_rec c_av%ROWTYPE;
1064 
1065 BEGIN
1066 
1067   FOR c_av_rec IN c_av LOOP
1068           -- Delete IGS_AV_ADV_STANDING records
1069     IGS_AV_ADV_STANDING_PKG.DELETE_ROW( c_av_rec.ROWID);
1070 
1071   END LOOP;
1072   -- Return the default value
1073 
1074 EXCEPTION
1075   WHEN e_resource_busy THEN
1076     IF c_av%ISOPEN THEN
1077       CLOSE c_av;
1078     END IF;
1079   WHEN OTHERS THEN
1080     IF c_av%ISOPEN THEN
1081       CLOSE c_av;
1082     END IF;
1083 
1084 END;
1085 
1086 END del_av;
1087 
1088 -- To delete IGS_FI_FEE_AS_RT table records
1089 PROCEDURE del_fi_fee(p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1090                   p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
1091 IS
1092 
1093 CURSOR c_del_fi_fee  IS
1094     SELECT rowid
1095     FROM IGS_FI_FEE_AS_RT  fi_fee
1096     WHERE fi_fee.person_id = p_person_id
1097     AND fi_fee.course_cd = p_course_cd;
1098 
1099 v_del_fi_fee      c_del_fi_fee%ROWTYPE;
1100 
1101 BEGIN
1102     FOR v_del_fi_fee IN  c_del_fi_fee LOOP
1103 
1104         IGS_FI_FEE_AS_RT_PKG.DELETE_ROW(v_del_fi_fee.rowid);
1105 
1106     END LOOP;
1107 
1108 EXCEPTION
1109   WHEN e_resource_busy THEN
1110       IF c_del_fi_fee%ISOPEN THEN
1111         CLOSE c_del_fi_fee;
1112       END IF;
1113 
1114   WHEN OTHERS THEN
1115     IF c_del_fi_fee%ISOPEN THEN
1116       CLOSE c_del_fi_fee;
1117     END IF;
1118 
1119 END del_fi_fee;
1120 
1121 
1122 -- To delete intermission records
1123 PROCEDURE del_ps_intm(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1124                      p_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
1125  IS
1126 
1127 CURSOR c_del_ps_intm   IS
1128     SELECT rowid
1129     FROM IGS_EN_STDNT_PS_INTM  intm
1130     WHERE intm.person_id = p_person_id
1131     AND intm.course_cd = p_course_cd;
1132 
1133 v_del_ps_intm      c_del_ps_intm%ROWTYPE;
1134 
1135 BEGIN
1136 
1137     FOR v_del_ps_intm IN  c_del_ps_intm LOOP
1138         IGS_EN_STDNT_PS_INTM_PKG.DELETE_ROW(v_del_ps_intm.rowid);
1139     END LOOP;
1140 
1141 EXCEPTION
1142   WHEN e_resource_busy THEN
1143       IF c_del_ps_intm%ISOPEN THEN
1144         CLOSE c_del_ps_intm;
1145       END IF;
1146 
1147   WHEN OTHERS THEN
1148     IF c_del_ps_intm%ISOPEN THEN
1149       CLOSE c_del_ps_intm;
1150     END IF;
1151 
1152 END del_ps_intm;
1153 
1154 PROCEDURE del_ps_trnsf(p_person_id   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1155                         p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1156                         p_term_cal_type          IGS_CA_INST.cal_type%TYPE,
1157                         p_term_sequence_number     IGS_CA_INST.sequence_number%TYPE)
1158 IS
1159 
1160 CURSOR c_del_ps_trnsf  IS
1161     SELECT rowid
1162     FROM IGS_PS_STDNT_TRN  trnsf
1163     WHERE trnsf.person_id = p_person_id
1164     AND trnsf.course_cd = p_course_cd
1165     AND trnsf.effective_term_cal_type = p_term_cal_type
1166     AND trnsf.effective_term_sequence_num = p_term_sequence_number
1167     AND trnsf.status_flag = 'C';
1168 
1169 v_del_ps_trnsf      c_del_ps_trnsf%ROWTYPE;
1170 
1171 BEGIN
1172 
1173     FOR v_del_ps_trnsf IN  c_del_ps_trnsf LOOP
1174 
1175         IGS_PS_STDNT_TRN_PKG.DELETE_ROW(v_del_ps_trnsf.rowid);
1176 
1177     END LOOP;
1178 
1179 EXCEPTION
1180   WHEN e_resource_busy THEN
1181     IF c_del_ps_trnsf%ISOPEN THEN
1182       CLOSE c_del_ps_trnsf;
1183     END IF;
1184 
1185   WHEN OTHERS THEN
1186 
1187    IF c_del_ps_trnsf%ISOPEN THEN
1188     CLOSE c_del_ps_trnsf;
1189    END IF;
1190 
1191 END del_ps_trnsf;
1192 
1193 
1194 
1195 PROCEDURE del_pr_cohinst_rank(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1196                              p_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
1197  IS
1198 
1199 CURSOR c_del_pr_cohinst_rank   IS
1200     SELECT rowid
1201     FROM igs_pr_cohinst_rank  pr_cohinst
1202     WHERE pr_cohinst.person_id = p_person_id
1203     AND pr_cohinst.course_cd = p_course_cd;
1204 
1205 v_del_pr_cohinst    c_del_pr_cohinst_rank%ROWTYPE;
1206 
1207 BEGIN
1208     FOR v_del_pr_cohinst IN  c_del_pr_cohinst_rank LOOP
1209 
1210         igs_pr_cohinst_rank_pkg.DELETE_ROW(v_del_pr_cohinst.rowid);
1211 
1212     END LOOP;
1213 EXCEPTION
1214   WHEN e_resource_busy THEN
1215       IF c_del_pr_cohinst_rank%ISOPEN THEN
1216         CLOSE c_del_pr_cohinst_rank;
1217       END IF;
1218   WHEN OTHERS THEN
1219     IF c_del_pr_cohinst_rank%ISOPEN THEN
1220       CLOSE c_del_pr_cohinst_rank;
1221     END IF;
1222 
1223 END del_pr_cohinst_rank;
1224 
1225 
1226 PROCEDURE del_as_anon_id_ps(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1227                            p_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE)
1228 IS
1229 
1230 CURSOR c_del_as_anon_id_ps   IS
1231     SELECT rowid
1232     FROM igs_as_anon_id_ps  as_anon_id_ps
1233     WHERE as_anon_id_ps.person_id = p_person_id
1234     AND as_anon_id_ps.course_cd = p_course_cd;
1235 
1236 v_del_as_anon_id_ps     c_del_as_anon_id_ps%ROWTYPE;
1237 
1238 BEGIN
1239 
1240     FOR v_del_as_anon_id_ps IN  c_del_as_anon_id_ps LOOP
1241         igs_as_anon_id_ps_pkg.DELETE_ROW(v_del_as_anon_id_ps.rowid);
1242     END LOOP;
1243 
1244 EXCEPTION
1245   WHEN e_resource_busy THEN
1246       IF c_del_as_anon_id_ps%ISOPEN THEN
1247         CLOSE c_del_as_anon_id_ps;
1248       END IF;
1249 
1250   WHEN OTHERS THEN
1251     IF c_del_as_anon_id_ps%ISOPEN THEN
1252       CLOSE c_del_as_anon_id_ps;
1253     END IF;
1254 
1255 END del_as_anon_id_ps;
1256 
1257 -- procedure to delete all the unit attempt reference codes
1258 PROCEDURE del_suar(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1259                    p_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1260                    p_uoo_id       IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1261  IS
1262 
1263  CURSOR  cur_sua_ref_cds(cp_person_id NUMBER,
1264                          cp_course_cd VARCHAR2,
1265                          cp_uoo_id NUMBER) IS
1266   Select suar.rowid
1267   From IGS_AS_SUA_REF_CDS suar
1268   Where suar.person_id = cp_person_id
1269   And   suar.course_cd = cp_course_cd
1270   And   suar.uoo_id    = cp_uoo_id;
1271 
1272  BEGIN
1273   FOR v_cur_sua_ref_cds IN cur_sua_ref_cds(p_person_id,p_course_cd,p_uoo_id) LOOP
1274     igs_as_sua_ref_cds_pkg.delete_row(v_cur_sua_ref_cds.rowid);
1275   END LOOP;
1276 
1277   EXCEPTION
1278   WHEN e_resource_busy THEN
1279       IF cur_sua_ref_cds%ISOPEN THEN
1280         CLOSE cur_sua_ref_cds;
1281       END IF;
1282   WHEN OTHERS THEN
1283     IF cur_sua_ref_cds%ISOPEN THEN
1284       CLOSE cur_sua_ref_cds;
1285     END IF;
1286 
1287  END del_suar;
1288 
1289 
1290 PROCEDURE del_as_anon_id_us(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1291                             p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1292                             p_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1293  IS
1294 
1295 CURSOR c_del_as_anon_id_us   IS
1296     SELECT rowid
1297     FROM igs_as_anon_id_us  as_anon_id_us
1298     WHERE as_anon_id_us.person_id = p_person_id
1299     AND as_anon_id_us.course_cd = p_course_cd
1300     AND as_anon_id_us.uoo_id = p_uoo_id;
1301 v_del_as_anon_id_us     c_del_as_anon_id_us%ROWTYPE;
1302 
1303 BEGIN
1304 
1305     FOR v_del_as_anon_id_us IN  c_del_as_anon_id_us LOOP
1306         igs_as_anon_id_us_pkg.DELETE_ROW(v_del_as_anon_id_us.rowid);
1307     END LOOP;
1308 
1309 EXCEPTION
1310   WHEN e_resource_busy THEN
1311       IF c_del_as_anon_id_us%ISOPEN THEN
1312         CLOSE c_del_as_anon_id_us;
1313       END IF;
1314   WHEN OTHERS THEN
1315     IF c_del_as_anon_id_us%ISOPEN THEN
1316       CLOSE c_del_as_anon_id_us;
1317     END IF;
1318 
1319 END del_as_anon_id_us;
1320 
1321 
1322 FUNCTION del_sua(
1323   p_person_id     IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1324   p_dest_course_cd     IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1325   p_term_cal_type          IGS_CA_INST.cal_type%TYPE,
1326   p_term_sequence_number     IGS_CA_INST.sequence_number%TYPE
1327   )
1328 RETURN BOOLEAN
1329 IS
1330 BEGIN -- del_sua
1331   -- (1) Delete IGS_EN_SU_ATTEMPT records
1332 DECLARE
1333   CURSOR c_sua IS
1334     SELECT  uoo_id
1335     FROM  IGS_EN_SU_ATTEMPT sua
1336     WHERE sua.person_id = p_person_id
1337     AND   sua.course_cd = p_dest_course_cd;
1338 
1339   CURSOR c_sua_del (
1340     cp_uoo_id     IGS_EN_SU_ATTEMPT.uoo_id%TYPE) IS
1341     SELECT rowid
1342     FROM  IGS_EN_SU_ATTEMPT   sua
1343     WHERE sua.person_id     = p_person_id
1344     AND   sua.course_cd     = p_dest_course_cd
1345     AND   sua.uoo_id    = cp_uoo_id
1346     FOR UPDATE OF sua.LAST_UPDATE_DATE NOWAIT;
1347 
1348   v_sua_del_exists  c_sua_del%ROWTYPE;
1349 
1350 BEGIN
1351 
1352   FOR v_sua_rec IN c_sua LOOP
1353 
1354     FOR v_sua_del_exists IN c_sua_del(v_sua_rec.uoo_id) LOOP
1355 
1356       -- Delete the unit attempt only if it is in the effective and future terms
1357       IF  IGS_EN_GEN_010.unit_effect_or_future_term(
1358                                        p_person_id => p_person_id,
1359                                        p_dest_course_cd => p_dest_course_cd,
1360                                        p_uoo_id  => v_sua_rec.uoo_id,
1361                                        p_term_cal_type => p_term_cal_type ,
1362                                        p_term_seq_num => p_term_sequence_number) THEN
1363 
1364         del_suar(p_person_id, p_dest_course_Cd, v_sua_rec.uoo_id);
1365 
1366         del_as_anon_id_us( p_person_id,p_dest_course_cd,v_sua_rec.uoo_id);
1367 
1368         IGS_EN_SU_ATTEMPT_PKG.DELETE_ROW( X_ROWID => v_sua_del_exists.rowid );
1369 
1370       END IF;
1371 
1372     END LOOP;
1373 
1374   END LOOP;
1375 
1376 RETURN TRUE;
1377 EXCEPTION
1378   WHEN e_resource_busy THEN
1379     IF c_sua%ISOPEN THEN
1380       CLOSE c_sua;
1381     END IF;
1382     IF c_sua_del%ISOPEN THEN
1383       CLOSE c_sua_del;
1384     END IF;
1385 
1386     RETURN FALSE;
1387 
1388   WHEN OTHERS THEN
1389     IF c_sua%ISOPEN THEN
1390       CLOSE c_sua;
1391     END IF;
1392     IF c_sua_del%ISOPEN THEN
1393       CLOSE c_sua_del;
1394     END IF;
1395     RETURN FALSE;
1396 END;
1397 END del_sua;
1398 
1399 
1400 PROCEDURE upd_sua(
1401   p_person_id     IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1402   p_dest_course_cd     IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1403   p_term_cal_type          IGS_CA_INST.cal_type%TYPE,
1404   p_term_sequence_number     IGS_CA_INST.sequence_number%TYPE)
1405 IS
1406 BEGIN -- upd_sua
1407   -- (1) Update IGS_EN_SU_ATTEMPT records
1408 DECLARE
1409 
1410   cst_dropped       CONSTANT VARCHAR2(10) := 'DROPPED';
1411 
1412   CURSOR c_sua IS
1413     SELECT  uoo_id
1414     FROM  IGS_EN_SU_ATTEMPT sua
1415     WHERE sua.person_id = p_person_id
1416     AND   sua.course_cd = p_dest_course_cd;
1417 
1418   CURSOR c_sua_upd (
1419     cp_uoo_id     IGS_EN_SU_ATTEMPT.uoo_id%TYPE) IS
1420     SELECT rowid,sua.*
1421     FROM  IGS_EN_SU_ATTEMPT   sua
1422     WHERE sua.person_id     = p_person_id
1423     AND   sua.course_cd     = p_dest_course_cd
1424     AND   sua.uoo_id    = cp_uoo_id
1425     AND   sua.unit_attempt_status <> cst_dropped
1426     FOR UPDATE OF   sua.LAST_UPDATE_DATE NOWAIT;
1427 
1428   v_sua_del_exists  c_sua_upd%ROWTYPE;
1429 
1430 BEGIN
1431 
1432   FOR v_sua_rec IN c_sua LOOP
1433 
1434     FOR v_sua_upd_exists IN c_sua_upd(v_sua_rec.uoo_id) LOOP
1435 
1436       -- Update the unit attempt only if it is in the effective and future terms
1437       IF  IGS_EN_GEN_010.unit_effect_or_future_term(
1438                                        p_person_id => p_person_id,
1439                                        p_dest_course_cd => p_dest_course_cd,
1440                                        p_uoo_id  => v_sua_rec.uoo_id,
1441                                        p_term_cal_type => p_term_cal_type ,
1442                                        p_term_seq_num => p_term_sequence_number) THEN
1443 
1444         IGS_EN_SUA_API.update_unit_attempt(
1445              X_ROWID                      => v_sua_upd_exists.ROWID,
1446              X_PERSON_ID                  => v_sua_upd_exists.PERSON_ID,
1447              X_COURSE_CD                  => v_sua_upd_exists.COURSE_CD ,
1448              X_UNIT_CD                    => v_sua_upd_exists.UNIT_CD,
1449              X_CAL_TYPE                   => v_sua_upd_exists.CAL_TYPE,
1450              X_CI_SEQUENCE_NUMBER         => v_sua_upd_exists.CI_SEQUENCE_NUMBER ,
1451              X_VERSION_NUMBER             => v_sua_upd_exists.VERSION_NUMBER ,
1452              X_LOCATION_CD                => v_sua_upd_exists.LOCATION_CD,
1453              X_UNIT_CLASS                 => v_sua_upd_exists.UNIT_CLASS ,
1454              X_CI_START_DT                => v_sua_upd_exists.CI_START_DT,
1455              X_CI_END_DT                  => v_sua_upd_exists.CI_END_DT,
1456              X_UOO_ID                     => v_sua_upd_exists.UOO_ID ,
1457              X_ENROLLED_DT                => v_sua_upd_exists.ENROLLED_DT,
1458              X_UNIT_ATTEMPT_STATUS        => cst_dropped, -- c_IGS_EN_SU_ATTEMPT_rec.UNIT_ATTEMPT_STATUS,
1459              X_ADMINISTRATIVE_UNIT_STATUS => v_sua_upd_exists.administrative_unit_status,
1460              X_ADMINISTRATIVE_PRIORITY    => v_sua_upd_exists.administrative_PRIORITY,
1461              X_DISCONTINUED_DT            => nvl(v_sua_upd_exists.discontinued_dt,trunc(SYSDATE)),
1462              X_DCNT_REASON_CD             => v_sua_upd_exists.DCNT_REASON_CD,
1463              X_RULE_WAIVED_DT             => v_sua_upd_exists.RULE_WAIVED_DT ,
1464              X_RULE_WAIVED_PERSON_ID      => v_sua_upd_exists.RULE_WAIVED_PERSON_ID ,
1465              X_NO_ASSESSMENT_IND          => v_sua_upd_exists.NO_ASSESSMENT_IND,
1466              X_SUP_UNIT_CD                => v_sua_upd_exists.SUP_UNIT_CD ,
1467              X_SUP_VERSION_NUMBER         => v_sua_upd_exists.SUP_VERSION_NUMBER,
1468              X_EXAM_LOCATION_CD           => v_sua_upd_exists.EXAM_LOCATION_CD,
1469              X_ALTERNATIVE_TITLE          => v_sua_upd_exists.ALTERNATIVE_TITLE,
1470              X_OVERRIDE_ENROLLED_CP       => v_sua_upd_exists.OVERRIDE_ENROLLED_CP,
1471              X_OVERRIDE_EFTSU             => v_sua_upd_exists.OVERRIDE_EFTSU ,
1472              X_OVERRIDE_ACHIEVABLE_CP     => v_sua_upd_exists.OVERRIDE_ACHIEVABLE_CP,
1473              X_OVERRIDE_OUTCOME_DUE_DT    => v_sua_upd_exists.OVERRIDE_OUTCOME_DUE_DT,
1474              X_OVERRIDE_CREDIT_REASON     => v_sua_upd_exists.OVERRIDE_CREDIT_REASON,
1475              X_WAITLIST_DT                => v_sua_upd_exists.waitlist_dt,
1476              X_MODE                       =>  'R',
1477              X_GS_VERSION_NUMBER          => v_sua_upd_exists.gs_version_number,
1478              X_ENR_METHOD_TYPE            => v_sua_upd_exists.enr_method_type,
1479              X_FAILED_UNIT_RULE           => v_sua_upd_exists.FAILED_UNIT_RULE,
1480              X_CART                       => v_sua_upd_exists.CART,
1481              X_RSV_SEAT_EXT_ID            => v_sua_upd_exists.RSV_SEAT_EXT_ID ,
1482              X_ORG_UNIT_CD                => v_sua_upd_exists.org_unit_cd    ,
1483              X_SESSION_ID                 => v_sua_upd_exists.session_id,
1484              X_GRADING_SCHEMA_CODE        => v_sua_upd_exists.grading_schema_code,
1485              X_DEG_AUD_DETAIL_ID          => v_sua_upd_exists.deg_aud_detail_id,
1486              X_SUBTITLE                   =>  v_sua_upd_exists.subtitle,
1487              X_STUDENT_CAREER_TRANSCRIPT  => v_sua_upd_exists.student_career_transcript,
1488              X_STUDENT_CAREER_STATISTICS  => v_sua_upd_exists.student_career_statistics,
1489              X_ATTRIBUTE_CATEGORY         => v_sua_upd_exists.attribute_category,
1490              X_ATTRIBUTE1                 => v_sua_upd_exists.attribute1,
1491              X_ATTRIBUTE2                 => v_sua_upd_exists.attribute2,
1492              X_ATTRIBUTE3                 => v_sua_upd_exists.attribute3,
1493              X_ATTRIBUTE4                 => v_sua_upd_exists.attribute4,
1494              X_ATTRIBUTE5                 => v_sua_upd_exists.attribute5,
1495              X_ATTRIBUTE6                 => v_sua_upd_exists.attribute6,
1496              X_ATTRIBUTE7                 => v_sua_upd_exists.attribute7,
1497              X_ATTRIBUTE8                 => v_sua_upd_exists.attribute8,
1498              X_ATTRIBUTE9                 => v_sua_upd_exists.attribute9,
1499              X_ATTRIBUTE10                => v_sua_upd_exists.attribute10,
1500              X_ATTRIBUTE11                => v_sua_upd_exists.attribute11,
1501              X_ATTRIBUTE12                => v_sua_upd_exists.attribute12,
1502              X_ATTRIBUTE13                => v_sua_upd_exists.attribute13,
1503              X_ATTRIBUTE14                => v_sua_upd_exists.attribute14,
1504              X_ATTRIBUTE15                => v_sua_upd_exists.attribute15,
1505              X_ATTRIBUTE16                => v_sua_upd_exists.attribute16,
1506              X_ATTRIBUTE17                => v_sua_upd_exists.attribute17,
1507              X_ATTRIBUTE18                => v_sua_upd_exists.attribute18,
1508              X_ATTRIBUTE19                => v_sua_upd_exists.attribute19,
1509              X_ATTRIBUTE20                => v_sua_upd_exists.attribute20,
1510              X_WAITLIST_MANUAL_IND        => v_sua_upd_exists.waitlist_manual_ind,
1511              X_WLST_PRIORITY_WEIGHT_NUM   => v_sua_upd_exists.wlst_priority_weight_num,
1512              X_WLST_PREFERENCE_WEIGHT_NUM => v_sua_upd_exists.wlst_preference_weight_num,
1513              X_CORE_INDICATOR_CODE        => v_sua_upd_exists.core_indicator_code
1514              );
1515 
1516        END IF;
1517 
1518     END LOOP;
1519   END LOOP;
1520 
1521 EXCEPTION
1522   WHEN e_resource_busy THEN
1523     IF c_sua%ISOPEN THEN
1524       CLOSE c_sua;
1525     END IF;
1526     IF c_sua_upd%ISOPEN THEN
1527       CLOSE c_sua_upd;
1528     END IF;
1529 
1530   WHEN OTHERS THEN
1531     IF c_sua%ISOPEN THEN
1532       CLOSE c_sua;
1533     END IF;
1534     IF c_sua_upd%ISOPEN THEN
1535       CLOSE c_sua_upd;
1536     END IF;
1537 
1538 END;
1539 END upd_sua;
1540 
1541 PROCEDURE del_as_stmptout(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1542                             p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1543                             p_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1544  IS
1545 
1546 CURSOR c_del_as_stmptout(cp_person_id IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1547                              cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1548                              cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1549     IS
1550     SELECT rowid
1551     FROM igs_as_su_stmptout_all  stmptout
1552     WHERE stmptout.person_id = cp_person_id
1553     AND stmptout.course_cd = cp_course_cd
1554     AND stmptout.uoo_id = cp_uoo_id;
1555 v_del_as_stmptout     c_del_as_stmptout%ROWTYPE;
1556 
1557 BEGIN
1558 
1559     FOR v_del_as_stmptout IN  c_del_as_stmptout(p_person_id,p_course_cd,p_uoo_id) LOOP
1560         IGS_AS_SU_STMPTOUT_PKG.DELETE_ROW(v_del_as_stmptout.rowid);
1561     END LOOP;
1562 
1563 EXCEPTION
1564   WHEN e_resource_busy THEN
1565       IF c_del_as_stmptout%ISOPEN THEN
1566         CLOSE c_del_as_stmptout;
1567       END IF;
1568   WHEN OTHERS THEN
1569     IF c_del_as_stmptout%ISOPEN THEN
1570       CLOSE c_del_as_stmptout;
1571     END IF;
1572 
1573 END del_as_stmptout;
1574 
1575 PROCEDURE del_ps_stdnt_unt_trn(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1576                             p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1577                             p_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1578  IS
1579 
1580 CURSOR c_del_ps_stdnt_unt_trn(cp_person_id IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1581                              cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1582                              cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1583     IS
1584     SELECT rowid
1585     FROM IGS_PS_STDNT_UNT_TRN  unttrn
1586     WHERE unttrn.person_id = cp_person_id
1587     AND unttrn.course_cd = cp_course_cd
1588     AND unttrn.uoo_id = cp_uoo_id;
1589 v_del_ps_stdnt_unt_trn     c_del_ps_stdnt_unt_trn%ROWTYPE;
1590 
1591 BEGIN
1592 
1593     FOR v_del_ps_stdnt_unt_trn IN  c_del_ps_stdnt_unt_trn(p_person_id,p_course_cd,p_uoo_id) LOOP
1594         IGS_PS_STDNT_UNT_TRN_PKG.DELETE_ROW(v_del_ps_stdnt_unt_trn.rowid);
1595     END LOOP;
1596 
1597 EXCEPTION
1598   WHEN e_resource_busy THEN
1599       IF c_del_ps_stdnt_unt_trn%ISOPEN THEN
1600         CLOSE c_del_ps_stdnt_unt_trn;
1601       END IF;
1602   WHEN OTHERS THEN
1603     IF c_del_ps_stdnt_unt_trn%ISOPEN THEN
1604       CLOSE c_del_ps_stdnt_unt_trn;
1605     END IF;
1606 
1607 END del_ps_stdnt_unt_trn;
1608 
1609 PROCEDURE del_as_sua_ses_atts(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1610                             p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1611                             p_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1612  IS
1613 
1614 CURSOR c_del_as_sua_ses_atts(cp_person_id IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1615                              cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1616                              cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1617     IS
1618     SELECT rowid
1619     FROM igs_as_sua_ses_atts  sua_ses_atts
1620     WHERE sua_ses_atts.person_id = cp_person_id
1621     AND sua_ses_atts.course_cd = cp_course_cd
1622     AND sua_ses_atts.uoo_id = cp_uoo_id;
1623 v_del_as_sua_ses_atts     c_del_as_sua_ses_atts%ROWTYPE;
1624 v_RETURN_STATUS  VARCHAR2(255) ;
1625 v_MSG_DATA     VARCHAR2(4000);
1626 v_MSG_COUNT      NUMBER ;
1627 BEGIN
1628 
1629     FOR v_del_as_sua_ses_atts IN  c_del_as_sua_ses_atts(p_person_id,p_course_cd,p_uoo_id) LOOP
1630         IGS_AS_SUA_SES_ATTS_pkg.DELETE_ROW(v_del_as_sua_ses_atts.rowid,
1631                                            'R' ,
1632                                           v_RETURN_STATUS,
1633                                           v_MSG_DATA,
1634                                           v_MSG_COUNT
1635                                          );
1636 
1637     END LOOP;
1638 
1639 
1640 
1641 EXCEPTION
1642   WHEN e_resource_busy THEN
1643       IF c_del_as_sua_ses_atts%ISOPEN THEN
1644         CLOSE c_del_as_sua_ses_atts;
1645       END IF;
1646   WHEN OTHERS THEN
1647     IF c_del_as_sua_ses_atts%ISOPEN THEN
1648       CLOSE c_del_as_sua_ses_atts;
1649     END IF;
1650 
1651 END del_as_sua_ses_atts;
1652 
1653 PROCEDURE del_as_msht_su_atmpt(p_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1654                             p_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1655                             p_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1656  IS
1657 
1658 CURSOR c_del_as_msht_su_atmpt(cp_person_id IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1659                              cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1660                              cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
1661     IS
1662     SELECT rowid
1663     FROM IGS_AS_MSHT_SU_ATMPT  as_msht_su_atmpt
1664     WHERE as_msht_su_atmpt.person_id = cp_person_id
1665     AND as_msht_su_atmpt.course_cd = cp_course_cd
1666     AND as_msht_su_atmpt.uoo_id = cp_uoo_id;
1667 v_del_as_msht_su_atmpt     c_del_as_msht_su_atmpt%ROWTYPE;
1668 
1669 BEGIN
1670 
1671     FOR v_del_as_msht_su_atmpt IN  c_del_as_msht_su_atmpt(p_person_id,p_course_cd,p_uoo_id) LOOP
1672         IGS_AS_MSHT_SU_ATMPT_PKG.DELETE_ROW(v_del_as_msht_su_atmpt.rowid);
1673 
1674     END LOOP;
1675 
1676 EXCEPTION
1677   WHEN e_resource_busy THEN
1678       IF c_del_as_msht_su_atmpt%ISOPEN THEN
1679         CLOSE c_del_as_msht_su_atmpt;
1680       END IF;
1681   WHEN OTHERS THEN
1682     IF c_del_as_msht_su_atmpt%ISOPEN THEN
1683       CLOSE c_del_as_msht_su_atmpt;
1684     END IF;
1685 
1686 END del_as_msht_su_atmpt;
1687 
1688 
1689 
1690 
1691 ---- END OF PRIVATE FUNCTIONS
1692 
1693 /*----------------------------------------------------------------------------
1694   ||  Created By : bdeviset
1695   ||  Created On : 18-NOV-2004
1696   ||  Purpose : Processing future dated transfer records in cleanup/delete mode.
1697   ||  In cleanup mode deletes most of the child records for destination program
1698   ||  and unconfirms it.It also updates the term records against destination
1699   ||  program with source program details.
1700   ||
1701   ||  Known limitations, enhancements or remarks :
1702   ||  Change History :
1703   ||  Who             When            What
1704   ||  stutta        30-Dec-2004    Creating/deleting/updating term records while
1705   ||                               cleanup and resetting globals.
1706   ||  somasekar   13-apr-2005	bug# 4179106 modified to set the future date
1707   ||                                 transfer Cancelles status  to 'C'
1708   ------------------------------------------------------------------------------*/
1709 
1710 PROCEDURE cleanup_dest_program(p_person_id      IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1711                                p_dest_course_cd         IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
1712                                p_term_cal_type          IGS_CA_INST.cal_type%TYPE,
1713                                p_term_sequence_number     IGS_CA_INST.sequence_number%TYPE,
1714                                p_mode                 VARCHAR2)
1715 
1716 IS
1717 Type term_rec IS RECORD
1718 (
1719   term_cal_type igs_en_spa_terms.term_cal_type%TYPE,
1720     term_seq_num igs_en_spa_terms.term_sequence_number%TYPE,
1721     key_program_flag igs_en_spa_terms.key_program_flag%TYPE
1722 
1723 );
1724 CURSOR c_spa_clnup(cp_term_cal_type          IGS_CA_INST.cal_type%TYPE,
1725                    cp_term_sequence_number   IGS_CA_INST.sequence_number%TYPE,
1726                    cp_person_id              IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1727                    cp_dest_course_cd         IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
1728   SELECT rowid,sct.*
1729   FROM IGS_PS_STDNT_TRN sct
1730   WHERE sct.effective_term_cal_type = cp_term_cal_type
1731   AND sct.effective_term_sequence_num = cp_term_sequence_number
1732   AND sct.person_id = cp_person_id
1733   AND sct.course_cd = cp_dest_course_cd
1734   AND ( sct.status_flag = 'U' and p_mode IN ('CLEANUP')
1735        OR sct.status_flag = 'C' and p_mode IN ('DELETE'));
1736 
1737 -- cursor for fetching the source program details
1738 CURSOR c_sca (cp_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1739                 cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
1740   SELECT   sca.rowid,sca.*
1741   FROM     IGS_EN_STDNT_PS_ATT  sca
1742   WHERE    sca.person_id = cp_person_id
1743   AND      sca.course_cd = cp_course_cd;
1744 
1745 -- cursor for fetching the student unit attempt details having status other than dropped or uncofirmed
1746 CURSOR c_sua (cp_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1747               cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
1748   SELECT  'X'
1749   FROM  IGS_EN_SU_ATTEMPT sua
1750   WHERE sua.person_id = cp_person_id
1751   AND   sua.course_cd = cp_course_cd
1752   AND   sua.unit_attempt_status NOT IN  ('DROPPED','UNCONFIRM');
1753 
1754 -- cursor for fetching the student unit attempt details having status as dropped
1755 CURSOR c_sua_drop (cp_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
1756               cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
1757   SELECT  'X'
1758   FROM  IGS_EN_SU_ATTEMPT sua
1759   WHERE sua.person_id = cp_person_id
1760   AND   sua.course_cd = cp_course_cd
1761   AND   sua.unit_attempt_status = 'DROPPED';
1762 
1763 -- cursor to get the future term records of the destination program
1764 CURSOR c_spat (cp_person_id IGS_EN_SPA_TERMS.PERSON_ID%TYPE,
1765         cp_program_cd IGS_EN_SPA_TERMS.PROGRAM_CD%TYPE,
1766         cp_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
1767         cp_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
1768   SELECT spat.rowid, spat.key_program_flag, spat.term_cal_type,
1769             spat.term_sequence_number
1770   FROM IGS_EN_SPA_TERMS spat, IGS_CA_INST ci1, IGS_CA_INST ci2
1771   WHERE spat.person_id = cp_person_id
1772   AND spat.program_cd = cp_program_cd
1773   AND spat.term_cal_type = ci2.cal_type
1774   AND spat.term_sequence_number = ci2.sequence_number
1775   AND ci1.cal_type = cp_cal_type
1776   AND ci1.sequence_number = cp_sequence_number
1777   AND ci1.start_dt <= ci2.start_dt
1778   ORDER BY ci2.start_dt;
1779 
1780 -- cursor to get the any past term records of the source program
1781   CURSOR c_spat_src (cp_person_id IGS_EN_SPA_TERMS.PERSON_ID%TYPE,
1782         cp_program_cd IGS_EN_SPA_TERMS.PROGRAM_CD%TYPE,
1783         cp_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
1784         cp_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
1785   SELECT spat.key_program_flag
1786   FROM IGS_EN_SPA_TERMS spat, IGS_CA_INST ci1, IGS_CA_INST ci2
1787   WHERE spat.person_id = cp_person_id
1788   AND spat.program_cd = cp_program_cd
1789   AND spat.term_cal_type = ci2.cal_type
1790   AND spat.term_sequence_number = ci2.sequence_number
1791   AND ci1.cal_type = cp_cal_type
1792   AND ci1.sequence_number = cp_sequence_number
1793   AND ci1.start_dt > ci2.start_dt
1794   ORDER BY ci2.start_dt DESC;
1795 
1796  CURSOR c_term_acad_rel(cp_acad IGS_CA_INST.CAL_TYPE%TYPE, cp_term IGS_CA_INST.CAL_TYPE%TYPE,
1797 			cp_term_seq IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
1798  SELECT 'x'
1799  FROM igs_ca_inst_rel
1800  WHERE sup_cal_type = cp_acad
1801  AND   sub_cal_type = cp_term
1802  AND   sub_ci_sequence_number = cp_term_seq;
1803 
1804 
1805  -- Get the details of
1806  CURSOR c_src_eff_term(cp_src_course_cd IGS_PS_VER.COURSE_CD%TYPE) IS
1807    SELECT term_cal_type, term_sequence_number
1808      FROM igs_en_spa_terms spat, igs_ca_inst ca1, igs_ca_inst ca2
1809     WHERE ca1.cal_type = p_term_cal_type
1810       AND ca1.sequence_number = p_term_sequence_number
1811       AND spat.person_id = p_person_id
1812       AND spat.program_cd = cp_src_course_cd
1813       AND ca2.cal_type = spat.term_cal_type
1814       AND ca2.sequence_number = spat.term_sequence_number
1815       AND ca2.start_dt >= ca1.start_dt
1816       ORDER BY ca2.start_dt ASC;
1817 
1818 
1819 l_acad_cal IGS_EN_SPA_TERMS.ACAD_CAL_TYPE%TYPE;
1820 l_dummy VARCHAR2(1);
1821 cst_unconfirm   CONSTANT VARCHAR2(10) := 'UNCONFIRM';
1822 v_del               BOOLEAN;
1823 v_sca_src_rec       c_sca%ROWTYPE;
1824 v_sca_dest_rec      c_sca%ROWTYPE;
1825 v_spa_clnup_rec     c_spa_clnup%ROWTYPE;
1826 v_spa_del_rec       c_spa_clnup%ROWTYPE;
1827 v_rec_exists        VARCHAR2(1);
1828 v_message_name      VARCHAR2(30);
1829 v_src_course_cd     IGS_EN_STDNT_PS_ATT.course_cd%TYPE;
1830 l_src_career_type   IGS_PS_VER.COURSE_TYPE%TYPE;
1831 l_status_date       IGS_PS_STDNT_TRN.status_date%TYPE;
1832 l_trans_status      IGS_PS_STDNT_TRN.status_flag%TYPE;
1833 l_tran_across_careers BOOLEAN;
1834 l_trans_within_careers BOOLEAN;
1835 l_stdnt_conf_ind    IGS_EN_STDNT_PS_ATT.STUDENT_CONFIRMED_IND%TYPE;
1836 l_comm_date         IGS_EN_STDNT_PS_ATT.COMMENCEMENT_DT%TYPE;
1837 l_course_att_status IGS_EN_STDNT_PS_ATT.COURSE_ATTEMPT_STATUS%TYPE;
1838 v_src_career_type igs_ps_ver.course_type%TYPE;
1839 v_spat_rec c_spat_src%ROWTYPE;
1840 TYPE terms_tab IS TABLE OF term_rec INDEX BY BINARY_INTEGER;
1841 terms terms_tab;
1842 terms_ind NUMBER;
1843 v_ripple BOOLEAN;
1844 l_key_program_flag IGS_EN_SPA_TERMS.key_program_flag%TYPE;
1845 l_term_cal_type IGS_EN_SPA_TERMS.TERM_CAL_TYPE%TYPE;
1846 l_term_seq_num IGS_EN_SPA_TERMS.TERM_SEQUENCE_NUMBER%TYPE;
1847 BEGIN -----------------Begining of cleanup/delete
1848 
1849 SAVEPOINT sp_unable_to_clnup_del;
1850 
1851 OPEN c_spa_clnup(p_term_cal_type,
1852                  p_term_sequence_number,
1853                  p_person_id,
1854                  p_dest_course_cd
1855                  );
1856   FETCH c_spa_clnup INTO v_spa_clnup_rec;
1857 
1858   IF c_spa_clnup%NOTFOUND THEN
1859     CLOSE c_spa_clnup;
1860     RETURN;
1861   END IF;
1862 
1863 CLOSE c_spa_clnup;
1864 
1865 OPEN c_sca(p_person_id,p_dest_course_cd);
1866 FETCH c_sca INTO v_sca_dest_rec;
1867 CLOSE c_sca;
1868 
1869 v_src_course_cd := v_spa_clnup_rec.transfer_course_cd;
1870 
1871 OPEN c_sca(p_person_id,v_src_course_cd);
1872 FETCH c_sca INTO v_sca_src_rec;
1873 CLOSE c_sca;
1874 
1875 
1876 IF p_mode = 'CLEANUP' THEN
1877 
1878 -- Since the cleanup mode is done in a different way in intra career transfer
1879 -- check if the transfer is within careers
1880   IF  is_career_model_enabled THEN
1881 
1882       IF  is_tranfer_across_careers(
1883                   v_sca_dest_rec.course_cd,
1884                   v_sca_dest_rec.version_number,
1885                   v_sca_src_rec.course_cd,
1886                   v_sca_src_rec.version_number,
1887                   v_src_career_type
1888                   ) = FALSE THEN
1889 
1890         l_trans_within_careers := TRUE;
1891 
1892       END IF;
1893 
1894   END IF;
1895 
1896 
1897   l_status_date := SYSDATE;
1898   l_trans_status := 'C';
1899   l_stdnt_conf_ind := v_sca_dest_rec.student_confirmed_ind;
1900   l_comm_date := v_sca_dest_rec.commencement_dt;
1901   l_course_att_status := v_sca_dest_rec.course_attempt_status;
1902 
1903   -- If it is within career
1904   IF l_trans_within_careers THEN
1905 
1906      -- Delete unit attempts existing in the effective and future terms against destination program.
1907     IF NOT del_sua(
1908                    p_person_id,
1909                    p_dest_course_cd,
1910                    p_term_cal_type,
1911                    p_term_sequence_number
1912                    ) THEN
1913 
1914       ----IF not able to delete then update unit attempt status as 'DROPPED'
1915         upd_sua(
1916                 p_person_id,
1917                 p_dest_course_cd,
1918                 p_term_cal_type,
1919                 p_term_sequence_number
1920                 );
1921 
1922     END IF;
1923 
1924     OPEN c_sua ( p_person_id,p_dest_course_cd);
1925     FETCH c_sua INTO v_rec_exists;
1926 
1927     -- if there are no unit attempts with status other than dropped/unconfirmed
1928     -- then delete child records and set the status of destination program
1929     -- as unconfirmed
1930     IF c_sua%NOTFOUND THEN
1931 
1932       -- setting the commencement date,student confirmed indicator
1933       -- as  course attempt status is unconfirmed.
1934       l_stdnt_conf_ind := 'N';
1935       l_comm_date := NULL;
1936       l_course_att_status := cst_unconfirm;
1937 
1938       --- Delete all the child records of the destination program
1939 
1940       del_gua( p_person_id,p_dest_course_cd);
1941 
1942       del_esaa( p_person_id,p_dest_course_cd);
1943 
1944       del_gsa( p_person_id,p_dest_course_cd);
1945 
1946       del_hssc( p_person_id,p_dest_course_cd);
1947 
1948       del_hssa( p_person_id,p_dest_course_cd);
1949 
1950       del_pr_rule_appl( p_person_id, p_dest_course_cd);
1951 
1952       del_psaa( p_person_id,p_dest_course_cd);
1953 
1954       del_scho( p_person_id,p_dest_course_cd);
1955 
1956       del_scae( p_person_id,p_dest_course_cd);
1957 
1958       del_scan( p_person_id,p_dest_course_cd);
1959 
1960       del_fi_fee( p_person_id,p_dest_course_cd);
1961 
1962       del_ps_intm( p_person_id,p_dest_course_cd);
1963 
1964       del_pr_cohinst_rank( p_person_id,p_dest_course_cd);
1965 
1966       del_as_anon_id_ps( p_person_id,p_dest_course_cd);
1967 
1968     END IF; -- End of IF c_sua%NOTFOUND
1969     CLOSE c_sua;
1970 
1971   END IF; -- End of IF l_trans_within_careers
1972 
1973 
1974   -- 	Update the transfer record set status_flag = 'C' and status_date = SYSDATE
1975   IGS_PS_STDNT_TRN_PKG.update_row(
1976             X_ROWID => v_spa_clnup_rec.rowid,
1977             X_PERSON_ID => v_spa_clnup_rec.person_id,
1978             X_COURSE_CD => v_spa_clnup_rec.course_cd,
1979             X_TRANSFER_COURSE_CD => v_spa_clnup_rec.transfer_course_cd,
1980             X_TRANSFER_DT =>  v_spa_clnup_rec.transfer_dt,
1981             X_COMMENTS => v_spa_clnup_rec.comments,
1982             X_APPROVED_DATE => v_spa_clnup_rec.approved_date,
1983             X_EFFECTIVE_TERM_CAL_TYPE => v_spa_clnup_rec.effective_term_cal_type,
1984             X_EFFECTIVE_TERM_SEQUENCE_NUM => v_spa_clnup_rec.effective_term_sequence_num,
1985             X_DISCONTINUE_SOURCE_FLAG => v_spa_clnup_rec.discontinue_source_flag,
1986             X_UOOIDS_TO_TRANSFER => v_spa_clnup_rec.uooids_to_transfer,
1987             X_SUSA_TO_TRANSFER => v_spa_clnup_rec.susa_to_transfer,
1988             X_TRANSFER_ADV_STAND_FLAG => v_spa_clnup_rec.transfer_adv_stand_flag,
1989             X_STATUS_DATE => l_status_date,
1990             X_STATUS_FLAG => l_trans_status
1991             );
1992 
1993   -- Start of deletion and updation/creation of term records
1994   IF  is_career_model_enabled THEN
1995 --
1996   l_tran_across_careers := is_tranfer_across_careers(
1997             v_sca_dest_rec.course_cd,
1998             v_sca_dest_rec.version_number,
1999             v_sca_src_rec.course_cd,
2000             v_sca_src_rec.version_number,
2001             v_src_career_type
2002             );
2003   ELSE
2004 --        If in program mode, consider it as across career transfer
2005       l_tran_across_careers := TRUE;
2006   END IF;
2007 
2008   IF NOT l_tran_across_careers OR (l_tran_across_careers AND v_sca_src_rec.key_program = 'Y') THEN
2009    -- if within career or across career with source key.
2010     terms_ind := 0;
2011     -- Loop to delete destination term records in the terms in which future dated transfer was
2012     -- effective. Delete of term records is only valid for within career transfers.
2013     FOR v_spat_recd IN c_spat(p_person_id, p_dest_course_cd, p_term_cal_type,p_term_sequence_number)
2014     LOOP
2015 
2016         terms(terms_ind).term_cal_type :=v_spat_recd.term_cal_type;
2017         terms(terms_ind).term_seq_num :=v_spat_recd.term_sequence_number;
2018         terms(terms_ind).key_program_flag := v_spat_recd.key_program_flag;
2019         -- Delete the term records against the destination program
2020         IF NOT l_tran_across_careers THEN
2021             IGS_EN_SPA_TERMS_PKG.DELETE_ROW(v_spat_recd.rowid);
2022         END IF;
2023                     terms_ind := terms_ind + 1;
2024     END LOOP;
2025        v_ripple := TRUE;
2026     FOR i IN terms.FIRST.. terms.LAST LOOP
2027         -- create term records against source program
2028 
2029       l_acad_cal := igs_en_spa_terms_api.get_spat_acad_cal_type(p_person_id,
2030 								v_src_course_cd,
2031 								terms(i).term_cal_type,
2032 								terms(i).term_seq_num);
2033        OPEN c_term_acad_rel(l_acad_cal,terms(i).term_cal_type,terms(i).term_seq_num);
2034        FETCH c_term_acad_rel INTO l_dummy;
2035 
2036 	OPEN c_spat_src(p_person_id, v_src_course_cd, terms(i).term_cal_type,terms(i).term_seq_num);
2037         FETCH c_spat_src INTO v_spat_rec;
2038 
2039 
2040 	IF v_spat_rec.key_program_flag = 'Y' AND v_ripple THEN
2041 	-- if Source was key and this is the first time entering into loop send key as changing to terms api
2042 		l_key_program_flag := 'Y';
2043 		IF  c_term_acad_rel%NOTFOUND THEN
2044 
2045 			OPEN c_src_eff_term(v_src_course_cd);
2046 			FETCH c_src_eff_term INTO l_term_cal_type, l_term_seq_num;
2047 			IF (c_src_eff_term%FOUND) THEN
2048 			 igs_en_spa_terms_api.CREATE_UPDATE_TERM_REC(
2049 			    P_PERSON_ID             => p_person_id,
2050 			    P_PROGRAM_CD            => v_src_course_cd,
2051 			    P_TERM_CAL_TYPE         => l_term_cal_type,
2052 			    P_TERM_SEQUENCE_NUMBER  => l_term_seq_num,
2053 			    P_KEY_PROGRAM_FLAG      => l_key_program_flag, -- using key flag from terms table
2054 			    p_ripple_frwrd          => v_ripple,
2055 			    p_message_name          => v_message_name,
2056 			    p_update_rec            => TRUE
2057 			    );
2058 			END IF;
2059 
2060 		END IF;
2061 
2062 	ELSE
2063 		l_key_program_flag := FND_API.G_MISS_CHAR;
2064 	END IF;
2065 
2066 
2067        IF  (c_term_acad_rel%FOUND)THEN
2068 
2069 
2070        -- Terms api called as key changed if source is key and with ripple forward as TRUE only for the first time in loop
2071        igs_en_spa_terms_api.CREATE_UPDATE_TERM_REC(
2072             P_PERSON_ID             => p_person_id,
2073             P_PROGRAM_CD            => v_src_course_cd,
2074             P_TERM_CAL_TYPE         => terms(i).term_cal_type,
2075             P_TERM_SEQUENCE_NUMBER  => terms(i).term_seq_num,
2076             P_KEY_PROGRAM_FLAG      => l_key_program_flag, -- using key flag from terms table
2077             p_ripple_frwrd          => v_ripple,
2078             p_message_name          => v_message_name,
2079             p_update_rec            => TRUE
2080             );
2081 	END IF;
2082 	CLOSE c_term_acad_rel;
2083 
2084             v_ripple := FALSE;
2085             -- create_update_term_rec should be called with p_ripple_frwrd as TRUE only for the first
2086             -- run. The first record selected by the cursor c_spat is latest term for which the term
2087             -- record has to be created. Ripple forward has to be passed as TRUE, inorder to ripple
2088             -- the changes for any future terms that are existing for the source.
2089             CLOSE c_spat_src;
2090 
2091     END LOOP;
2092 
2093   END IF;
2094   --  End of deletion and updation/creation of term records
2095 
2096 
2097 
2098      -- update the destination program attempt with the values of l_stdnt_conf_ind,l_comm_date,l_course_att_status
2099      -- and set the future dated transfer flag to 'N'
2100         IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW(
2101            X_ROWID                      => v_sca_dest_rec.ROWID,
2102            X_PERSON_ID                  => v_sca_dest_rec.PERSON_ID,
2103            X_COURSE_CD                  => v_sca_dest_rec.COURSE_CD,
2104            X_VERSION_NUMBER             => v_sca_dest_rec.VERSION_NUMBER,
2105            X_CAL_TYPE                   => v_sca_dest_rec.CAL_TYPE,
2106            X_LOCATION_CD                => v_sca_dest_rec.LOCATION_CD,
2107            X_ATTENDANCE_MODE            => v_sca_dest_rec.ATTENDANCE_MODE,
2108            X_ATTENDANCE_TYPE            => v_sca_dest_rec.ATTENDANCE_TYPE,
2109            X_COO_ID                     => v_sca_dest_rec.COO_ID,
2110            X_STUDENT_CONFIRMED_IND      => l_stdnt_conf_ind,
2111            X_COMMENCEMENT_DT            => l_comm_date,
2112            X_COURSE_ATTEMPT_STATUS      => l_course_att_status,
2113            X_PROGRESSION_STATUS         => v_sca_dest_rec.PROGRESSION_STATUS,
2114            X_DERIVED_ATT_TYPE           => v_sca_dest_rec.DERIVED_ATT_TYPE,
2115            X_DERIVED_ATT_MODE           => v_sca_dest_rec.DERIVED_ATT_MODE,
2116            X_PROVISIONAL_IND            => v_sca_dest_rec.PROVISIONAL_IND,
2117            X_DISCONTINUED_DT            => v_sca_dest_rec.DISCONTINUED_DT,
2118            X_DISCONTINUATION_REASON_CD  => v_sca_dest_rec.DISCONTINUATION_REASON_CD,
2119            X_LAPSED_DT                  => v_sca_dest_rec.LAPSED_DT,
2120            X_FUNDING_SOURCE             => v_sca_dest_rec.FUNDING_SOURCE,
2121            X_EXAM_LOCATION_CD           => v_sca_dest_rec.EXAM_LOCATION_CD,
2122            X_DERIVED_COMPLETION_YR      => v_sca_dest_rec.DERIVED_COMPLETION_YR,
2123            X_DERIVED_COMPLETION_PERD    => v_sca_dest_rec.DERIVED_COMPLETION_PERD,
2124            X_NOMINATED_COMPLETION_YR    => v_sca_dest_rec.NOMINATED_COMPLETION_YR,
2125            X_NOMINATED_COMPLETION_PERD  => v_sca_dest_rec.NOMINATED_COMPLETION_PERD,
2126            X_RULE_CHECK_IND             => v_sca_dest_rec.RULE_CHECK_IND,
2127            X_WAIVE_OPTION_CHECK_IND     => v_sca_dest_rec.WAIVE_OPTION_CHECK_IND,
2128            X_LAST_RULE_CHECK_DT         => v_sca_dest_rec.LAST_RULE_CHECK_DT,
2129            X_PUBLISH_OUTCOMES_IND       => v_sca_dest_rec.PUBLISH_OUTCOMES_IND,
2130            X_COURSE_RQRMNT_COMPLETE_IND => v_sca_dest_rec.COURSE_RQRMNT_COMPLETE_IND,
2131            X_COURSE_RQRMNTS_COMPLETE_DT => v_sca_dest_rec.COURSE_RQRMNTS_COMPLETE_DT,
2132            X_S_COMPLETED_SOURCE_TYPE    => v_sca_dest_rec.S_COMPLETED_SOURCE_TYPE,
2133            X_OVERRIDE_TIME_LIMITATION   => v_sca_dest_rec.OVERRIDE_TIME_LIMITATION,
2134            X_ADVANCED_STANDING_IND      => v_sca_dest_rec.ADVANCED_STANDING_IND,
2135            X_FEE_CAT                    => v_sca_dest_rec.FEE_CAT,
2136            X_CORRESPONDENCE_CAT         => v_sca_dest_rec.CORRESPONDENCE_CAT,
2137            X_SELF_HELP_GROUP_IND        => v_sca_dest_rec.SELF_HELP_GROUP_IND,
2138            X_LOGICAL_DELETE_DT          => v_sca_dest_rec.LOGICAL_DELETE_DT,
2139            X_ADM_ADMISSION_APPL_NUMBER  => v_sca_dest_rec.ADM_ADMISSION_APPL_NUMBER,
2140            X_ADM_NOMINATED_COURSE_CD    => v_sca_dest_rec.ADM_NOMINATED_COURSE_CD,
2141            X_ADM_SEQUENCE_NUMBER        => v_sca_dest_rec.ADM_SEQUENCE_NUMBER,
2142            X_LAST_DATE_OF_ATTENDANCE    => v_sca_dest_rec.LAST_DATE_OF_ATTENDANCE,
2143            X_DROPPED_BY                 => v_sca_dest_rec.DROPPED_BY,
2144            X_IGS_PR_CLASS_STD_ID        => v_sca_dest_rec.IGS_PR_CLASS_STD_ID ,
2145            X_PRIMARY_PROGRAM_TYPE       => v_sca_dest_rec.primary_program_type,
2146            X_PRIMARY_PROG_TYPE_SOURCE   => v_sca_dest_rec.PRIMARY_PROG_TYPE_SOURCE,
2147            X_CATALOG_CAL_TYPE           => v_sca_dest_rec.CATALOG_CAL_TYPE,
2148            X_CATALOG_SEQ_NUM            => v_sca_dest_rec.CATALOG_SEQ_NUM,
2149            X_KEY_PROGRAM                => v_sca_dest_rec.key_program,
2150            X_MANUAL_OVR_CMPL_DT_IND     => v_sca_dest_rec.MANUAL_OVR_CMPL_DT_IND,
2151            X_OVERRIDE_CMPL_DT           => v_sca_dest_rec.OVERRIDE_CMPL_DT,
2152            X_MODE           => 'R' ,
2153            X_ATTRIBUTE_CATEGORY         => v_sca_dest_rec.ATTRIBUTE_CATEGORY,
2154            X_FUTURE_DATED_TRANS_FLAG    => 'C',
2155            X_ATTRIBUTE1                 => v_sca_dest_rec.ATTRIBUTE1,
2156            X_ATTRIBUTE2                 => v_sca_dest_rec.ATTRIBUTE2,
2157            X_ATTRIBUTE3                 => v_sca_dest_rec.ATTRIBUTE3,
2158            X_ATTRIBUTE4                 => v_sca_dest_rec.ATTRIBUTE4,
2159            X_ATTRIBUTE5                 => v_sca_dest_rec.ATTRIBUTE5,
2160            X_ATTRIBUTE6                 => v_sca_dest_rec.ATTRIBUTE6,
2161            X_ATTRIBUTE7                 => v_sca_dest_rec.ATTRIBUTE7,
2162            X_ATTRIBUTE8                 => v_sca_dest_rec.ATTRIBUTE8,
2163            X_ATTRIBUTE9                 => v_sca_dest_rec.ATTRIBUTE9,
2164            X_ATTRIBUTE10                => v_sca_dest_rec.ATTRIBUTE10,
2165            X_ATTRIBUTE11                => v_sca_dest_rec.ATTRIBUTE11,
2166            X_ATTRIBUTE12                => v_sca_dest_rec.ATTRIBUTE12,
2167            X_ATTRIBUTE13                => v_sca_dest_rec.ATTRIBUTE13,
2168            X_ATTRIBUTE14                => v_sca_dest_rec.ATTRIBUTE14,
2169            X_ATTRIBUTE15                => v_sca_dest_rec.ATTRIBUTE15,
2170            X_ATTRIBUTE16                => v_sca_dest_rec.ATTRIBUTE16,
2171            X_ATTRIBUTE17                => v_sca_dest_rec.ATTRIBUTE17,
2172            X_ATTRIBUTE18                => v_sca_dest_rec.ATTRIBUTE18,
2173            X_ATTRIBUTE19                => v_sca_dest_rec.ATTRIBUTE19,
2174            X_ATTRIBUTE20                => v_sca_dest_rec.ATTRIBUTE20);
2175 
2176 END IF;  -- END OF  CLean Up
2177 
2178 IF p_mode = 'DELETE' THEN
2179 
2180       -- Delete transfer record
2181  del_ps_trnsf( p_person_id,
2182                p_dest_course_cd,
2183                p_term_cal_type,
2184                p_term_sequence_number);
2185 
2186   -- if the destination program is unconfirmed then only
2187   -- delete other child records and if no dropped unit
2188   -- attempts exists then drop the program attempt.
2189   IF v_sca_dest_rec.course_attempt_status = cst_unconfirm THEN
2190 
2191        -- Delete unit set attempts
2192     del_susa( p_person_id,p_dest_course_cd);
2193 
2194     -- update/delete research candidature details
2195     upd_del_re_candidature(
2196                            p_person_id,
2197                            p_dest_course_cd,
2198                            v_sca_dest_rec.adm_admission_appl_number,
2199                            v_sca_dest_rec.adm_nominated_course_cd,
2200                            v_sca_dest_rec.adm_sequence_number
2201                            );
2202 
2203       -- Delete advanced standing details
2204     del_av(
2205            p_person_id,
2206            p_dest_course_cd,
2207            v_sca_dest_rec.version_number
2208            );
2209 
2210     OPEN c_sua_drop ( p_person_id,p_dest_course_cd);
2211     FETCH c_sua_drop INTO v_rec_exists;
2212 
2213       --- If dropped unit attempts doesnot exists then delete program attempt.
2214     IF (c_sua_drop%NOTFOUND) THEN
2215 
2216        IGS_EN_STDNT_PS_ATT_PKG.DELETE_ROW(v_sca_dest_rec.rowid);
2217 
2218     END IF;
2219 
2220     CLOSE c_sua_drop;
2221 
2222   END IF; --End of IF v_sca_dest_rec.course_attempt_status = cst_unconfirm
2223 
2224 END IF; -- End of Delete mode
2225 
2226 EXCEPTION
2227   WHEN OTHERS THEN
2228 
2229     IF c_spa_clnup%ISOPEN THEN
2230       CLOSE c_spa_clnup;
2231     END IF;
2232     IF c_sca%ISOPEN THEN
2233       CLOSE c_sca;
2234     END IF;
2235     IF c_sua_drop%ISOPEN THEN
2236       CLOSE c_sua_drop;
2237     END IF;
2238     ROLLBACK TO sp_unable_to_clnup_del;
2239     App_Exception.Raise_Exception;
2240 
2241 END cleanup_dest_program;
2242 
2243 
2244 /*----------------------------------------------------------------------------
2245   ||  Created By : bdeviset
2246   ||  Created On : 18-NOV-2004
2247   ||  Purpose : Processing future dated transfer records in process/cleanup/delete mode.
2248   ||  In cleanup/delete modes it calls cleanup_dest_program.
2249   ||  In process mode it discontinues the source program including the units
2250   ||  and unsets the future dated transfer flag for destination program
2251   ||
2252   ||  Known limitations, enhancements or remarks :
2253   ||  Change History :
2254   ||  Who             When            What
2255   ||
2256   ------------------------------------------------------------------------------*/
2257 
2258 PROCEDURE process_fut_dt_trans(
2259          errbuf             OUT NOCOPY  VARCHAR2,
2260          retcode            OUT NOCOPY NUMBER,
2261          p_term_cal_comb    IN  VARCHAR2,
2262          p_mode             IN VARCHAR2,
2263          p_ignore_warnings  IN  VARCHAR2,
2264          p_drop_enrolled    IN VARCHAR2
2265          )
2266 IS
2267 
2268 -- Cursor to fetch the records to process
2269 CURSOR c_spa_clnup(cp_term_cal_type      IGS_CA_INST.cal_type%TYPE,
2270                    cp_term_sequence_number   IGS_CA_INST.sequence_number%TYPE) IS
2271   SELECT sct.*
2272   FROM IGS_PS_STDNT_TRN sct
2273   WHERE effective_term_cal_type = cp_term_cal_type
2274   AND effective_term_sequence_num = cp_term_sequence_number
2275   AND ( sct.status_flag = 'U' and p_mode IN ('PROCESS','CLEANUP')
2276        OR sct.status_flag = 'C' and p_mode IN ('DELETE'));
2277 
2278 -- cursor to fetch student program details
2279 CURSOR c_sca (cp_person_id    IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2280                 cp_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
2281   SELECT   sca.rowid,sca.*
2282   FROM     IGS_EN_STDNT_PS_ATT  sca
2283   WHERE    sca.person_id = cp_person_id
2284   AND      sca.course_cd = cp_course_cd;
2285 
2286 -- To fetch the date aliases set up in calendar configuration table
2287 CURSOR c_enr_cal_conf IS
2288   SELECT BEGIN_TRANS_DT_ALIAS,CLEAN_TRANS_DT_ALIAS
2289   FROM IGS_EN_CAL_CONF
2290   WHERE s_control_num = 1;
2291 
2292 -- cursor to get the clean up date alias value
2293 CURSOR c_cln_up_dt_alias_val(cp_term_cal_type          IGS_CA_INST.cal_type%TYPE,
2294                              cp_term_sequence_number   IGS_CA_INST.sequence_number%TYPE,
2295                              cp_cleanup_dt_alias       IGS_CA_DA_INST_V.dt_alias%TYPE ) IS
2296   SELECT alias_val
2297   FROM   igs_ca_da_inst_v
2298   WHERE  cal_type           = cp_term_cal_type
2299   AND    ci_sequence_number = cp_term_sequence_number
2300   AND    dt_alias           = cp_cleanup_dt_alias;
2301 
2302 -- cursor to get the begin program transfer details
2303 CURSOR c_begin_pt_dt_alias_val(cp_term_cal_type      IGS_CA_INST.cal_type%TYPE,
2304                                cp_term_sequence_number   IGS_CA_INST.sequence_number%TYPE,
2305                                cp_begin_pt_dt_alias       IGS_CA_DA_INST_V.dt_alias%TYPE) IS
2306   SELECT alias_val
2307   FROM   igs_ca_da_inst_v
2308   WHERE  cal_type           = cp_term_cal_type
2309   AND    ci_sequence_number = cp_term_sequence_number
2310   AND    dt_alias           = cp_begin_pt_dt_alias;
2311 
2312 -- cursor to get the person number
2313 CURSOR c_person_num(cp_person_id        IGS_EN_STDNT_PS_ATT.person_id%TYPE) IS
2314     SELECT party_number
2315     FROM HZ_PARTIES
2316     WHERE party_id = cp_person_id;
2317 
2318 -- cursor to get the load calendar end date
2319 CURSOR c_load_cal_end_dt(cp_term_cal     IGS_CA_INST.cal_type%TYPE,
2320                          cp_term_seq_num IGS_CA_INST.sequence_number%TYPE) IS
2321   SELECT end_dt
2322   FROM igs_ca_inst
2323   WHERE cal_type = cp_term_cal
2324   AND sequence_number = cp_term_seq_num;
2325 
2326 
2327 -- Cursor to know if the destination program is primary in any of the  prev terms
2328 -- whose start date is greater than transfer date
2329 CURSOR c_prim_in_prev_terms(cp_person_id        IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2330                             cp_dest_course_cd   IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
2331                             cp_cur_term_cal     IGS_CA_INST.cal_type%TYPE,
2332                             cp_cur_term_seq_num IGS_CA_INST.sequence_number%TYPE,
2333                             cp_acad_cal_type    IGS_CA_INST_REL.sup_cal_type%TYPE,
2334                             cp_transfer_dt      IGS_PS_STDNT_TRN.transfer_dt%TYPE ) IS
2335  SELECT 'x'
2336   FROM igs_ca_inst ci2,
2337       igs_ca_inst_rel cir,
2338       igs_ca_type ct,
2339       igs_ca_inst ci1,
2340       igs_ca_stat cs
2341   WHERE
2342   ci2.cal_type        = cir.sub_cal_type AND
2343   ci2.sequence_number = cir.sub_ci_sequence_number AND
2344   cir.sup_cal_type    = cp_acad_cal_type AND
2345   ci2.cal_type        = ct.cal_type AND
2346   ct.s_cal_cat        = 'LOAD' AND
2347   cs.cal_status       = ci1.cal_status AND
2348   cs.s_cal_status     = 'ACTIVE' AND
2349   ci1.cal_type        = cp_cur_term_cal AND
2350   ci1.sequence_number = cp_cur_term_seq_num AND
2351   ci2.start_dt        < ci1.start_dt AND
2352   ci2.start_dt        > cp_transfer_dt
2353   AND EXISTS (SELECT 'x' from igs_en_spa_terms spat
2354                WHERE spat.person_id = cp_person_id
2355                AND spat.program_cd = cp_dest_course_cd
2356                AND spat.term_cal_type = ci2.cal_type
2357                AND spat.term_sequence_number = ci2.sequence_number)
2358   ORDER BY  ci2.start_dt DESC;
2359 
2360 
2361 -- Cursor to get uoo details to be transferred
2362 CURSOR c_uoo (cp_person_id        IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2363               cp_src_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
2364               cp_dest_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE) IS
2365     SELECT uoo_id,core_indicator_code,unit_attempt_status
2366     FROM IGS_EN_SU_ATTEMPT sua
2367     WHERE person_id = cp_person_id
2368     AND course_cd = cp_src_course_cd
2369     AND not exists (SELECT 'x'
2370                     FROM igs_en_su_attempt sua2
2371                     WHERE person_id = cp_person_id
2372                     AND course_cd=  cp_dest_course_cd
2373                     AND unit_attempt_status <> 'DROPPED'
2374                     AND sua.uoo_id = sua2.uoo_id)
2375     AND unit_Attempt_status not in ('DROPPED','UNCONFIRM');
2376 
2377 
2378 CURSOR c_sct(cp_term_cal_type      IGS_CA_INST.cal_type%TYPE,
2379              cp_term_sequence_number   IGS_CA_INST.sequence_number%TYPE,
2380              cp_person_id        IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2381              cp_dest_course_cd    IGS_EN_STDNT_PS_ATT.course_cd%TYPE
2382              ) IS
2383   SELECT 'X'
2384   FROM IGS_PS_STDNT_TRN sct
2385   WHERE effective_term_cal_type = cp_term_cal_type
2386   AND effective_term_sequence_num = cp_term_sequence_number
2387   AND sct.person_id = cp_person_id
2388   AND sct.course_cd = cp_dest_course_cd
2389   AND sct.status_flag = 'C';
2390 
2391 
2392 
2393 
2394 cst_unconfirm     CONSTANT  VARCHAR2(10) := 'UNCONFIRM';
2395 cst_prog_trans    CONSTANT  VARCHAR2(20) := 'PROGRAM_TRANSFER';
2396 v_begin_pt_dt_alias         IGS_CA_DA_INST_V.dt_alias%TYPE;
2397 v_begin_pt_dt_alias_val     IGS_CA_DA_INST_V.alias_val%TYPE;
2398 v_cleanup_dt_alias          IGS_CA_DA_INST_V.dt_alias%TYPE;
2399 v_cleanup_dt_alias_val      IGS_CA_DA_INST_V.alias_val%TYPE;
2400 is_prim_in_prev_term        VARCHAR2(1);
2401 v_sca_src_rec               c_sca%ROWTYPE;
2402 v_sca_dest_rec              c_sca%ROWTYPE;
2403 l_term_cal_type             IGS_CA_DA_INST.cal_type%TYPE;
2404 l_term_sequence_number      IGS_CA_DA_INST.sequence_number%TYPE;
2405 l_end_dt                    IGS_CA_INST.end_dt%TYPE;
2406 v_del                       BOOLEAN;
2407 v_person_num                HZ_PARTIES.party_number%TYPE;
2408 l_acad_cal_seq_num          IGS_CA_DA_INST.sequence_number%TYPE;
2409 l_acad_cal_type             IGS_CA_DA_INST.cal_type%TYPE;
2410 l_message_name              VARCHAR2(30);
2411 l_show_warning              VARCHAR2(1);
2412 l_rec_exists                BOOLEAN;
2413 l_tran_across_careers       BOOLEAN;
2414 l_src_career_type           IGS_PS_VER.COURSE_TYPE%TYPE;
2415 l_new_dest_key_prgm_flag    IGS_EN_STDNT_PS_ATT.KEY_PROGRAM%TYPE;
2416 l_msg                       VARCHAR2(4000);
2417 l_unit_sets_having_errors       VARCHAR2(4000);
2418 l_uoo_ids_having_errors     VARCHAR2(4000);
2419 l_return_status             VARCHAR2(1);
2420 l_msg_count                 NUMBER;
2421 l_msg_data                  VARCHAR2(6000);
2422 l_process_mode              VARCHAR2(10);
2423 v_rec_exists                VARCHAR2(1);
2424 
2425 
2426 BEGIN
2427   retcode := 0;
2428   l_msg := NULL;
2429   l_acad_cal_seq_num := NULL;
2430   l_term_cal_type := RTRIM(SUBSTR(P_TERM_CAL_COMB,101,10));
2431   l_term_sequence_number := TO_NUMBER(RTRIM(SUBSTR(P_TERM_CAL_COMB,112,6)));
2432   l_rec_exists := FALSE;
2433 
2434   IF p_ignore_warnings = 'Y' THEN
2435 
2436     l_show_warning := 'N';
2437 
2438   ELSE
2439 
2440     l_show_warning := 'Y';
2441 
2442   END IF;
2443 
2444   IF p_drop_enrolled = 'Y' THEN
2445 
2446     l_process_mode := 'DROP';
2447 
2448   ELSE
2449 
2450     l_process_mode := NULL;
2451 
2452   END IF;
2453 
2454   FND_FILE.PUT_LINE (FND_FILE.LOG, ' ');
2455   FND_FILE.PUT_LINE (FND_FILE.LOG, ' ');
2456   FND_FILE.PUT_LINE (FND_FILE.LOG, 'Term Calendar :'||l_term_cal_type||', Term Calendar Sequence Number :'||l_term_sequence_number||', Ignore warnings :'||p_ignore_warnings||', Drop Enrolled :'||p_drop_enrolled);
2457   FND_FILE.PUT_LINE (FND_FILE.LOG, ' ');
2458 
2459   OPEN c_enr_cal_conf;
2460   FETCH c_enr_cal_conf INTO v_begin_pt_dt_alias,v_cleanup_dt_alias;
2461 
2462   IF c_enr_cal_conf%FOUND THEN
2463 
2464     CLOSE c_enr_cal_conf;
2465     IF p_mode = 'PROCESS' AND v_begin_pt_dt_alias IS NULL THEN
2466 
2467       FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_BEG_PT_DAV_LT_SYSDATE');
2468       FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2469       RETURN;
2470 
2471     END IF;
2472 
2473     IF p_mode = 'CLEANUP' AND v_cleanup_dt_alias IS NULL THEN
2474 
2475       FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_CLNUP_DAV_GE_SYSDATE');
2476       FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2477       RETURN;
2478 
2479     END IF;
2480 
2481   ELSE
2482 
2483     CLOSE c_enr_cal_conf;
2484     RETURN;
2485 
2486   END IF;
2487 
2488   IF p_mode = 'CLEANUP' THEN
2489     -- If cleanup date alias is not set then OR
2490     -- if cleanup date alias is set and is greater than or equal to sysdate then return
2491     OPEN c_cln_up_dt_alias_val(l_term_cal_type,l_term_sequence_number,v_cleanup_dt_alias);
2492     FETCH c_cln_up_dt_alias_val INTO v_cleanup_dt_alias_val;
2493 
2494     IF c_cln_up_dt_alias_val%NOTFOUND  OR
2495        (c_cln_up_dt_alias_val%FOUND AND (v_cleanup_dt_alias_val >= SYSDATE)) THEN
2496 
2497         FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_CLNUP_DAV_GE_SYSDATE');
2498         FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2499 
2500         CLOSE c_cln_up_dt_alias_val;
2501         RETURN;
2502 
2503     ELSE
2504 
2505        CLOSE c_cln_up_dt_alias_val;
2506 
2507     END IF;
2508 
2509   END IF;
2510 
2511 
2512    -- Get the load calendar end date
2513    IF   p_mode = 'PROCESS' THEN
2514 
2515     OPEN c_load_cal_end_dt(l_term_cal_type,l_term_sequence_number);
2516     FETCH c_load_cal_end_dt INTO l_end_dt;
2517     CLOSE c_load_cal_end_dt;
2518 
2519     -- If begin program transfer date alias is found and
2520     -- ( sysdate is not between  begin program date alias and loadcalendar end date ) return
2521     -- or if it is not found then exit
2522     OPEN c_begin_pt_dt_alias_val(l_term_cal_type,l_term_sequence_number,v_begin_pt_dt_alias);
2523     FETCH c_begin_pt_dt_alias_val INTO v_begin_pt_dt_alias_val;
2524 
2525     IF c_begin_pt_dt_alias_val%NOTFOUND OR
2526        (c_begin_pt_dt_alias_val%FOUND AND (SYSDATE NOT BETWEEN v_begin_pt_dt_alias_val AND l_end_dt) ) THEN
2527 
2528         FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_BEG_PT_DAV_LT_SYSDATE');
2529         FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2530 
2531         CLOSE c_begin_pt_dt_alias_val;
2532         RETURN;
2533 
2534     END IF;
2535 
2536     CLOSE c_begin_pt_dt_alias_val;
2537 
2538   END IF;
2539 
2540   FOR v_clnup_rec IN  c_spa_clnup(l_term_cal_type,l_term_sequence_number) LOOP
2541 
2542         BEGIN
2543             l_rec_exists := TRUE;
2544 
2545             OPEN c_person_num(v_clnup_rec.person_id);
2546             FETCH c_person_num INTO v_person_num;
2547             CLOSE c_person_num;
2548 
2549             FND_FILE.PUT_LINE (FND_FILE.LOG, '-----------------------------------------------------------------------------');
2550             FND_FILE.PUT_LINE (FND_FILE.LOG, 'Person :'||v_person_num||'    Source Course :'||v_clnup_rec.transfer_course_cd||'    Destination Course :'||v_clnup_rec.course_cd);
2551             FND_FILE.PUT_LINE (FND_FILE.LOG, '-----------------------------------------------------------------------------');
2552             FND_FILE.PUT_LINE (FND_FILE.LOG, ' ');
2553 
2554             IF p_mode IN ('CLEANUP','DELETE') THEN
2555 
2556               BEGIN
2557                -- Call the cleanup destination program with p_mode as cleanup/delete
2558                 IGS_EN_FUTURE_DT_TRANS.cleanup_dest_program(
2559                                                             p_person_id =>  v_clnup_rec.person_id,
2560                                                             p_dest_course_cd  =>  v_clnup_rec.course_cd,
2561                                                             p_term_cal_type =>  l_term_cal_type,
2562                                                             p_term_sequence_number  =>  l_term_sequence_number,
2563                                                             p_mode  =>  p_mode
2564                                                             );
2565 
2566                 OPEN c_sct(l_term_cal_type,
2567                            l_term_sequence_number,
2568                            v_clnup_rec.person_id,
2569                            v_clnup_rec.course_cd);
2570                 FETCH c_sct INTO v_rec_exists;
2571 
2572                 IF p_mode = 'DELETE' THEN
2573 
2574                     -- If no transfer record is found then log the delete successful message
2575                     IF c_sct%NOTFOUND THEN
2576 
2577                       FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_DEL_DEST_PROG');
2578                       FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2579 
2580                     ELSE
2581                       -- If destination program attempt  record is found log the cant delete message
2582                       FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_CANT_DEL_DEST_PROG');
2583                       FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2584 
2585                     END IF;
2586 
2587                 END IF;
2588                 CLOSE c_sct;
2589 
2590 
2591                 OPEN c_sca (v_clnup_rec.person_id,v_clnup_rec.course_cd);
2592                 FETCH c_sca INTO v_sca_dest_rec;
2593                 -- If the mode is cleanup and future dated transfer flag of
2594                 -- of destination program attempt is set to 'N'
2595                 -- then log success message
2596                 IF p_mode = 'CLEANUP' AND c_sca%FOUND
2597                 AND v_sca_dest_rec.future_dated_trans_flag = 'C' THEN
2598 
2599                   FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_UNCONF_DEST_PROG');
2600                   FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2601 
2602                 END IF;
2603 
2604                 CLOSE c_sca;
2605 
2606 
2607              EXCEPTION
2608              WHEN OTHERS THEN
2609 
2610                FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2611 
2612                IF p_mode = 'CLEANUP' THEN
2613 
2614                  FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_CANT_UNCONF_DEST_PROG');
2615                  FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2616 
2617                END IF;
2618 
2619 
2620              END;
2621 
2622             -- Process Mode
2623             ELSE
2624 
2625                 OPEN c_sca (v_clnup_rec.person_id,v_clnup_rec.transfer_course_cd);
2626                 FETCH c_sca INTO v_sca_dest_rec;
2627                 CLOSE c_sca;
2628 
2629                 --- If destination program attempt is intermitted/lapsed/discontinued/unconfirme
2630                 --- then dont allow the transfer
2631                 IF v_sca_dest_rec.course_attempt_status = 'INTERMITTED' THEN
2632 
2633                   FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_TRN_DEST_INTM');
2634                   FND_MESSAGE.SET_TOKEN('SOURCE_PROGRAM', v_clnup_rec.transfer_course_cd);
2635                   FND_MESSAGE.SET_TOKEN('DEST_PROGRAM', v_clnup_rec.course_cd);
2636                   FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2637 
2638                 ELSIF v_sca_dest_rec.course_attempt_status = 'LAPSED'  THEN
2639 
2640                   FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_TRN_DEST_LAPSE');
2641                   FND_MESSAGE.SET_TOKEN('SOURCE_PROGRAM', v_clnup_rec.transfer_course_cd);
2642                   FND_MESSAGE.SET_TOKEN('DEST_PROGRAM', v_clnup_rec.course_cd);
2643                   FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2644 
2645                 ELSIF v_sca_dest_rec.course_attempt_status = 'DISCONTIN' THEN
2646 
2647                     FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_TRN_DEST_DISCON');
2648                     FND_MESSAGE.SET_TOKEN('SOURCE_PROGRAM', v_clnup_rec.transfer_course_cd);
2649                     FND_MESSAGE.SET_TOKEN('DEST_PROGRAM', v_clnup_rec.course_cd);
2650                     FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2651 
2652                 ELSIF v_sca_dest_rec.course_attempt_status = 'UNCONFIRM' THEN
2653 
2654                     FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_TRN_DEST_UNCONF');
2655                     FND_MESSAGE.SET_TOKEN('SOURCE_PROGRAM', v_clnup_rec.transfer_course_cd);
2656                     FND_MESSAGE.SET_TOKEN('DEST_PROGRAM', v_clnup_rec.course_cd);
2657                     FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2658 
2659 
2660                 ELSE
2661 
2662                   OPEN c_sca (v_clnup_rec.person_id,v_clnup_rec.transfer_course_cd);
2663                   FETCH c_sca INTO v_sca_src_rec;
2664                   CLOSE c_sca;
2665 
2666                   IF is_career_model_enabled THEN
2667 
2668                     l_tran_across_careers := is_tranfer_across_careers(
2669                                                                         v_sca_src_rec.course_cd,
2670                                                                         v_sca_src_rec.version_number,
2671                                                                         v_sca_dest_rec.COURSE_CD,
2672                                                                         v_sca_dest_rec.version_number,
2673                                                                         l_src_career_type
2674                                                                         );
2675                      -- if the transfer is across careers and destination program is secoondary
2676                      -- then dont allow the transfer
2677                     IF  l_tran_across_careers AND v_sca_dest_rec.primary_program_type = 'SECONDARY' THEN
2678 
2679                           FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_TRN_SEC_DEST_INTER_CAR');
2680                           FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2681                           App_Exception.Raise_Exception;
2682 
2683                     END IF;
2684                     -- If the transfer  is within careers
2685                     IF NOT l_tran_across_careers THEN
2686 
2687                       -- Check If destination program is primary in the previous term
2688                       -- if so dont transfer
2689                       OPEN  c_prim_in_prev_terms(v_clnup_rec.person_id,
2690                                                  v_clnup_rec.course_cd,
2691                                                  l_term_cal_type,
2692                                                  l_term_sequence_number,
2693                                                  v_sca_dest_rec.cal_type,
2694                                                  v_clnup_rec.transfer_dt
2695                                                  );
2696                       FETCH c_prim_in_prev_terms INTO is_prim_in_prev_term;
2697 
2698                       IF (c_prim_in_prev_terms%FOUND) THEN
2699 
2700                         CLOSE c_prim_in_prev_terms;
2701 
2702                         FND_MESSAGE.SET_NAME('IGS', 'IGS_EN_PRIMARY_IN_PRIOR_TERM');
2703                         FND_MESSAGE.SET_TOKEN('DEST_PROGRAM', v_clnup_rec.course_cd);
2704                         FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2705                         EXIT;
2706 
2707                       END IF;
2708                       CLOSE c_prim_in_prev_terms;
2709 
2710                     END IF; -- if condition to check whether the transfer is within careers
2711 
2712                   END IF; -- if condition to check if career model is enabled
2713 
2714 
2715                   -- Get academic calendar details
2716                   IGS_EN_GEN_015.get_academic_cal(
2717                                                   p_person_id => v_sca_src_rec.person_id,
2718                                                   p_course_cd => v_sca_src_rec.course_cd,
2719                                                   p_effective_dt => SYSDATE,
2720                                                   p_acad_cal_type => l_acad_cal_type, -- OUT parameter
2721                                                   p_acad_ci_sequence_number => l_acad_cal_seq_num, -- OUT parameter
2722                                                   p_message => l_message_name
2723                                                   );
2724                   IF l_message_name IS NOT NULL -- AND l_acad_cal_seq_num IS NULL
2725                   THEN
2726 
2727                     FND_FILE.PUT_LINE(FND_FILE.LOG,l_message_name);
2728 
2729                   ELSE
2730                      -- Call the transfer api to carry out the transfer
2731                      -- set the research details flag to 'N' as it has already been transferred
2732                      -- when the future dated transfer is created
2733                      IGS_EN_TRANSFER_APIS.program_transfer_api(
2734                                         p_person_id               =>   v_clnup_rec.person_id,
2735                                         p_source_program_cd       =>   v_sca_src_rec.course_cd,
2736                                         p_source_prog_ver         =>   v_sca_src_rec.version_number,
2737                                         p_term_cal_type           =>   l_term_cal_type,
2738                                         p_term_seq_num            =>   l_term_sequence_number,
2739                                         p_acad_cal_type           =>   l_acad_cal_type,
2740                                         p_acad_seq_num            =>   l_acad_cal_seq_num,
2741                                         p_trans_approval_dt       =>   v_clnup_rec.APPROVED_DATE,
2742                                         p_trans_actual_dt        =>   v_clnup_rec.transfer_dt,
2743                                         -- Transfer date should be passed. This parameter is used while unit transfer records are created.
2744                                         p_dest_program_cd         =>   v_clnup_rec.course_cd,
2745                                         p_dest_prog_ver           =>   v_sca_dest_rec.version_number,
2746                                         p_dest_coo_id             =>   v_sca_dest_rec.coo_id,
2747                                         p_uoo_ids_to_transfer     =>   v_clnup_rec.UOOIDS_TO_TRANSFER,
2748                                         p_uoo_ids_not_selected    =>   NULL,
2749                                         p_uoo_ids_having_errors   =>   l_uoo_ids_having_errors,
2750                                         p_unit_sets_to_transfer   =>   v_clnup_rec.SUSA_TO_TRANSFER,
2751                                         p_unit_sets_not_selected  =>   NULL,
2752                                         p_unit_sets_having_errors =>   l_uoo_ids_having_errors,
2753                                         p_transfer_av             =>   v_clnup_rec.TRANSFER_ADV_STAND_FLAG,
2754                                         p_transfer_re             =>   'N',
2755                                         p_discontinue_source      =>   v_clnup_rec.DISCONTINUE_SOURCE_FLAG,
2756                                         p_show_warning            =>   l_show_warning,
2757                                         p_call_from               =>   'PROCESS',
2758                                         p_process_mode            =>   l_process_mode,
2759                                         p_return_status           =>   l_return_status,
2760                                         p_msg_data                =>   l_msg_data,
2761                                         p_msg_count               =>   l_msg_count
2762                                         );
2763 
2764 
2765                     log_err_messages(l_msg_count, l_msg_data);
2766 
2767                     IF l_return_status = 'U' THEN
2768 
2769                        retcode := 2;
2770 
2771                     ELSIF l_return_status = 'E'  THEN
2772 
2773                        FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_FUT_DT_TRANSF_FAIL');
2774                        FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2775 
2776                     ELSIF l_return_status = 'S' AND l_show_warning = 'Y' AND l_msg_count > 0 THEN
2777 
2778                        FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_FUT_DT_TRANSF_WARN');
2779                        FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2780 
2781                     ELSE
2782 
2783                        FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_FUT_DT_TRANSF');
2784                        FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2785 
2786                     END IF;
2787 
2788                   END IF; -- if condition for academic calendar details
2789 
2790                 END IF; -- If the dest prog is not intermitted/disc/lapsed
2791 
2792         END IF; -- If condition for cleanup/delete process modes
2793 
2794         EXCEPTION
2795           WHEN OTHERS THEN
2796 
2797             IF p_mode = 'PROCESS' THEN
2798 
2799               l_msg := FND_MESSAGE.GET;
2800 
2801               IF l_msg IS NULL THEN
2802                  l_msg := sqlerrm;
2803               END IF;
2804 
2805               FND_FILE.PUT_LINE (FND_FILE.LOG, l_msg);
2806               FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_FUT_DT_TRANSF_FAIL');
2807               FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2808 
2809             END IF;
2810 
2811           END;
2812 
2813     END LOOP;
2814 
2815      --- No Data is found
2816     IF NOT l_rec_exists THEN
2817 
2818       FND_MESSAGE.SET_NAME ('IGS', 'IGS_GE_NO_DATA_FOUND');
2819       FND_FILE.PUT_LINE (FND_FILE.LOG, FND_MESSAGE.GET);
2820 
2821     END IF;
2822 
2823 EXCEPTION
2824 
2825   WHEN OTHERS THEN
2826     retcode:=2;
2827     ERRBUF := FND_MESSAGE.GET_STRING('IGS','IGS_GE_UNHANDLED_EXCEPTION');
2828 
2829 END process_fut_dt_trans;
2830 
2831 /*----------------------------------------------------------------------------
2832   ||  Created By : ctyagi
2833   ||  Created On : 30-AUG-2005
2834   ||  Purpose : Deleting unconfirm  unit as  impact of Re-Open
2835   ||            Admission Appication
2836   ||
2837   ||  Known limitations, enhancements or remarks :
2838   ||  Change History :
2839   ||  Who             When            What
2840   ||
2841   ------------------------------------------------------------------------------*/
2842 
2843 FUNCTION del_sua_for_reopen(
2844   p_person_id  IN   IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2845   p_course_cd   IN  IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
2846   p_uoo_id      IN  IGS_EN_SU_ATTEMPT.uoo_id%TYPE
2847  )
2848 RETURN BOOLEAN
2849 AS
2850   CURSOR c_sua_del (
2851     cp_person_id  IGS_EN_STDNT_PS_ATT.person_id%TYPE,
2852     cp_course_cd  IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
2853     cp_uoo_id     IGS_EN_SU_ATTEMPT.uoo_id%TYPE
2854     ) IS
2855     SELECT rowid
2856     FROM  IGS_EN_SU_ATTEMPT   sua
2857     WHERE sua.person_id     = cp_person_id
2858     AND   sua.course_cd     = cp_course_cd
2859     AND   sua.uoo_id    = cp_uoo_id
2860     FOR UPDATE OF sua.LAST_UPDATE_DATE NOWAIT;
2861 
2862   v_sua_del_exists  c_sua_del%ROWTYPE;
2863 
2864 BEGIN
2865 
2866 
2867 
2868     FOR v_sua_del_exists IN c_sua_del(p_person_id,p_course_cd,p_uoo_id) LOOP
2869 
2870 
2871 
2872         del_suar(p_person_id, p_course_cd, p_uoo_id);
2873 
2874         del_as_msht_su_atmpt( p_person_id,p_course_cd,p_uoo_id);
2875 
2876         del_as_stmptout( p_person_id,p_course_cd,p_uoo_id);
2877 
2878         del_ps_stdnt_unt_trn( p_person_id,p_course_cd,p_uoo_id);
2879 
2880         del_as_anon_id_us( p_person_id,p_course_cd,p_uoo_id);
2881 
2882         del_as_sua_ses_atts( p_person_id,p_course_cd,p_uoo_id);
2883 
2884 
2885         IGS_EN_SU_ATTEMPT_PKG.DELETE_ROW( X_ROWID => v_sua_del_exists.rowid );
2886 
2887 
2888 
2889     END LOOP;
2890     RETURN TRUE;
2891 EXCEPTION
2892   WHEN OTHERS THEN
2893       IF c_sua_del%ISOPEN THEN
2894          CLOSE c_sua_del;
2895       END IF;
2896       RETURN FALSE;
2897 
2898 END del_sua_for_reopen;
2899 
2900 
2901 
2902 END IGS_EN_FUTURE_DT_TRANS;