DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PR_GEN_002

Source


1 PACKAGE BODY IGS_PR_GEN_002 AS
2 /* $Header: IGSPR02B.pls 120.2 2006/04/28 01:54:11 sepalani ship $ */
3 
4 /************************************************************************
5   Know limitations, enhancements or remarks
6   Change History
7   Who            When            What
8   sepalani     28-Apr-2006     Bug # 5076203
9 ***************************************************************/
10 
11 FUNCTION PRGP_GET_SCA_WAM(
12   p_person_id IN NUMBER ,
13   p_course_cd IN VARCHAR2 ,
14   p_course_version IN NUMBER ,
15   p_unit_set_cd IN VARCHAR2 ,
16   p_course_stage_type IN VARCHAR2 ,
17   p_prg_cal_type IN VARCHAR2 ,
18   p_prg_sequence_number IN NUMBER ,
19   p_use_recommended_ind IN VARCHAR2 ,
20   p_abort_when_missing_ind IN VARCHAR2 )
21 RETURN NUMBER AS
22 BEGIN
23 DECLARE
24   v_wam_value NUMBER;
25 BEGIN
26   v_wam_value := TO_NUMBER( IGS_RU_GEN_004.rulp_val_wam (
27       p_person_id,
28       p_course_cd,
29       p_course_version,
30       p_prg_cal_type,
31       p_prg_sequence_number,
32       p_use_recommended_ind,
33       p_abort_when_missing_ind) );
34   RETURN v_wam_value;
35 EXCEPTION
36   WHEN VALUE_ERROR THEN
37     RETURN 0;
38 END;
39 END prgp_get_sca_wam;
40 
41 FUNCTION PRGP_GET_STG_COMP(
42   p_person_id IN NUMBER ,
43   p_course_cd IN VARCHAR2 ,
44   p_crv_version_number IN NUMBER ,
45   p_course_stage_type IN VARCHAR2 )
46 RETURN VARCHAR2 AS
47  v_message_text VARCHAR2(2000);
48 
49 BEGIN
50         IF igs_ru_gen_005.rulp_val_stg_comp (
51                  p_person_id               => p_person_id,
52                  p_sca_course_cd           => p_course_cd,
53                  p_sca_course_version      => p_crv_version_number,
54                  p_course_cd               => p_course_cd,
55                  p_course_version          => p_crv_version_number,
56                  p_cst_sequence_number     => p_course_stage_type,
57                  p_predicted_ind           => 'N',
58                  p_message_text            => v_message_text
59              ) THEN
60 		RETURN 'Y';
61         ELSE
62                 RETURN 'N';
63         END IF;
64   RETURN 'N';
65 END;
66 
67 --
68 -- kdande; 22-Apr-2003; Bug# 2829262
69 -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_gpa_val
70 --
71 FUNCTION prgp_get_sua_gpa_val(
72   p_person_id IN IGS_EN_SU_ATTEMPT_ALL.person_id%TYPE ,
73   p_course_cd IN IGS_EN_SU_ATTEMPT_ALL.course_cd%TYPE ,
74   p_unit_cd IN IGS_EN_SU_ATTEMPT_ALL.unit_cd%TYPE ,
75   p_cal_type IN IGS_CA_INST_ALL.cal_type%TYPE ,
76   p_ci_sequence_number IN IGS_CA_INST_ALL.sequence_number%TYPE ,
77   p_best_worst IN VARCHAR2 ,
78   p_recommended_ind IN VARCHAR2,
79   p_uoo_id IN NUMBER)
80 RETURN IGS_AS_GRD_SCH_GRADE.gpa_val%TYPE AS
81   gv_other_detail   VARCHAR2(255);
82 BEGIN   -- prgp_get_sua_gpa_val
83   -- Get the GPA value for a nominated IGS_PS_UNIT attempt
84   -- Contains the options to search for:
85   --  Best/Worst possible grade - given the grading schema of the IGS_PS_UNIT attempt
86   --  Allow recommended - whether to consider recommended grades.
87 DECLARE
88   cst_completed CONSTANT  VARCHAR2(10) := 'COMPLETED';
89   cst_duplicate CONSTANT  VARCHAR2(10) := 'DUPLICATE';
90   cst_discontin CONSTANT  VARCHAR2(10) := 'DISCONTIN';
91   cst_enrolled  CONSTANT  VARCHAR2(10) := 'ENROLLED';
92   v_result_type     IGS_AS_GRD_SCH_GRADE.s_result_type%TYPE;
93   v_finalised_ind     VARCHAR2(1);
94   v_outcome_dt      IGS_AS_SU_STMPTOUT.outcome_dt%TYPE;
95   v_grading_schema_cd   IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
96   v_gs_version_number   IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
97   v_grade       IGS_AS_GRD_SCH_GRADE.grade%TYPE;
98   v_mark        IGS_AS_SU_STMPTOUT.mark%TYPE;
99   v_origin_course_cd    IGS_EN_SU_ATTEMPT.course_cd%TYPE;
100   v_gpa_val     IGS_AS_GRD_SCH_GRADE.gpa_val%TYPE DEFAULT NULL;
101   --
102   -- kdande; 22-Apr-2003; Bug# 2829262
103   -- Added uoo_id field to the WHERE clause of cursor c_sua.
104   --
105   CURSOR c_sua IS
106     SELECT  version_number,
107       location_cd,
108       unit_class,
109       unit_attempt_status
110     FROM  IGS_EN_SU_ATTEMPT   sua
111     WHERE sua.person_id     = p_person_id AND
112       sua.course_cd     = p_course_cd AND
113       sua.uoo_id = p_uoo_id;
114   v_sua_rec     c_sua%ROWTYPE;
115   CURSOR c_gsg (
116       cp_grading_schema_cd    IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE,
117       cp_version_number   IGS_AS_GRD_SCH_GRADE.version_number%TYPE,
118       cp_grade      IGS_AS_GRD_SCH_GRADE.grade%TYPE) IS
119     SELECT  gsg.gpa_val
120     FROM  IGS_AS_GRD_SCH_GRADE    gsg
121     WHERE gsg.grading_schema_cd   = cp_grading_schema_cd AND
122       gsg.version_number    = cp_version_number AND
123       gsg.grade     = cp_grade;
124   FUNCTION prgp_get_best_worst (
125     p_person_id   IGS_EN_SU_ATTEMPT_ALL.person_id%TYPE,
126     p_course_cd   IGS_EN_SU_ATTEMPT_ALL.course_cd%TYPE,
127     p_unit_cd   IGS_EN_SU_ATTEMPT_ALL.unit_cd%TYPE,
128     p_version_number  IGS_EN_SU_ATTEMPT_ALL.version_number%TYPE,
129     p_cal_type    IGS_EN_SU_ATTEMPT_ALL.cal_type%TYPE,
130     p_ci_sequence_number  IGS_EN_SU_ATTEMPT_ALL.ci_sequence_number%TYPE,
131     p_location_cd   IGS_EN_SU_ATTEMPT_ALL.location_cd%TYPE,
132     p_unit_class    IGS_EN_SU_ATTEMPT_ALL.unit_class%TYPE,
133     p_best_worst    VARCHAR2)
134   RETURN NUMBER
135   AS
136     gv_other_detail   VARCHAR2(255);
137   BEGIN -- prgp_get_best_worst
138   DECLARE
139     v_returned      BOOLEAN;
140     v_grading_schema    IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
141     v_gs_version_number   IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
142     v_max_gpa_val     IGS_AS_GRD_SCH_GRADE.gpa_val%TYPE DEFAULT NULL;
143     v_min_gpa_val     IGS_AS_GRD_SCH_GRADE.gpa_val%TYPE DEFAULT NULL;
144     CURSOR c_gsg (
145         cp_grading_schema_cd  IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE,
146         cp_version_number IGS_AS_GRD_SCH_GRADE.version_number%TYPE) IS
147       SELECT  MAX(gsg.gpa_val),
148         MIN(gsg.gpa_val)
149       FROM  IGS_AS_GRD_SCH_GRADE  gsg
150       WHERE gsg.grading_schema_cd = cp_grading_schema_cd AND
151         gsg.version_number  = cp_version_number AND
152         gsg.gpa_val   IS NOT NULL;
153   BEGIN
154     v_returned := IGS_AS_GEN_003.assp_get_sua_gs (
155             p_person_id,
156             p_course_cd,
157             p_unit_cd,
158             p_version_number,
159             p_cal_type,
160             p_ci_sequence_number,
161             p_location_cd,
162             p_unit_class,
163             v_grading_schema,
164             v_gs_version_number);
165     OPEN c_gsg (
166         v_grading_schema,
167         v_gs_version_number);
168     FETCH c_gsg INTO
169         v_max_gpa_val,
170         v_min_gpa_val;
171     CLOSE c_gsg;
172     IF NVL(p_best_worst,'X') = 'B' THEN
173       RETURN v_max_gpa_val;
174     ELSE
175       RETURN v_min_gpa_val;
176     END IF;
177   EXCEPTION
178     WHEN OTHERS THEN
179       IF c_gsg%ISOPEN THEN
180         CLOSE c_gsg;
181       END IF;
182       RAISE;
183   END;
184   EXCEPTION
185     WHEN OTHERS THEN
186       Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
187                         FND_MESSAGE.SET_TOKEN ('NAME', 'IGS_PR_GEN_002.PRGP_GET_BEST_WORST');
188                   --IGS_GE_MSG_STACK.ADD;
189 
190   END prgp_get_best_worst;
191 BEGIN
192   OPEN c_sua;
193   FETCH c_sua INTO v_sua_rec;
194   IF c_sua%NOTFOUND THEN
195     CLOSE c_sua;
196     RETURN NULL;
197   END IF;
198   CLOSE c_sua;
199   IF v_sua_rec.unit_attempt_status NOT IN (
200           cst_completed,
201           cst_duplicate,
202           cst_discontin,
203           cst_enrolled) THEN
204     RETURN NULL;
205   ELSE
206     IF p_recommended_ind = 'N' THEN
207       v_finalised_ind := 'Y';
208     ELSE
209       v_finalised_ind := 'N';
210     END IF;
211     --
212     -- kdande; 22-Apr-2003; Bug# 2829262
213     -- Added uoo_id parameter to the IGS_AS_GEN_003.assp_get_sua_outcome
214     -- FUNCTION call.
215     --
216     IF IGS_AS_GEN_003.assp_get_sua_outcome (
217           p_person_id,
218           p_course_cd,
219           p_unit_cd,
220           p_cal_type,
221           p_ci_sequence_number,
222           v_sua_rec.unit_attempt_status,
223           v_finalised_ind,
224           v_outcome_dt,
225           v_grading_schema_cd,
226           v_gs_version_number,
227           v_grade,
228           v_mark,
229           v_origin_course_cd,
230           p_uoo_id,
231 --added by LKAKI----
232 	  'N') IS NULL THEN
233       IF NVL(p_best_worst,'X') NOT IN (
234             'B',
235             'W') THEN
236         RETURN NULL;
237       ELSE
238         v_gpa_val := prgp_get_best_worst(
239               p_person_id,
240               p_course_cd,
241               p_unit_cd,
242               v_sua_rec.version_number,
243               p_cal_type,
244               p_ci_sequence_number,
245               v_sua_rec.location_cd,
246               v_sua_rec.unit_class,
247               p_best_worst);
248         RETURN v_gpa_val;
249       END IF;
250     ELSE
251       OPEN c_gsg (
252         v_grading_schema_cd,
253         v_gs_version_number,
254         v_grade);
255       FETCH c_gsg INTO v_gpa_val;
256       IF c_gsg%NOTFOUND THEN
257         CLOSE c_gsg;
258         RETURN NULL;
259       END IF;
260       CLOSE c_gsg;
261       RETURN v_gpa_val;
262     END IF;
263   END IF;
264 EXCEPTION
265   WHEN OTHERS THEN
266     IF c_sua%ISOPEN THEN
267       CLOSE c_sua;
268     END IF;
269     IF c_gsg%ISOPEN THEN
270       CLOSE c_gsg;
271     END IF;
272     RAISE;
273 END;
274 EXCEPTION
275   WHEN OTHERS THEN
276     Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
277                 FND_MESSAGE.SET_TOKEN ('NAME', 'IGS_PR_GEN_002.PRGP_GET_SUA_GPA_VAL');
278                 --IGS_GE_MSG_STACK.ADD;
279 
280 END prgp_get_sua_gpa_val;
281 --
282 -- kdande; 22-Apr-2003; Bug# 2829262
283 -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_prg_num.
284 --
285 FUNCTION prgp_get_sua_prg_num(
286   p_prg_cal_type IN VARCHAR ,
287   p_prg_sequence_number IN NUMBER ,
288   p_number_of_periods IN NUMBER ,
289   p_person_id IN NUMBER ,
290   p_course_cd IN VARCHAR2 ,
291   p_unit_cd IN VARCHAR2 ,
292   p_cal_type IN VARCHAR2 ,
293   p_ci_sequence_number IN NUMBER,
294   p_uoo_id IN NUMBER)
295 RETURN VARCHAR2 AS
296   gv_other_detail   VARCHAR2(255);
297 BEGIN   -- prgp_get_sua_prg_num
298   -- Determine whether student IGS_PS_UNIT attempt is effective in the progression
299   -- period and a previous number of periods. This routine calls the
300   -- prgp_get_sua_prg_prd routine where appropriate.
301 DECLARE
302   cst_progress    CONSTANT  VARCHAR2(10) := 'PROGRESS';
303   cst_active    CONSTANT  VARCHAR2(10) := 'ACTIVE';
304   v_version_number      IGS_EN_STDNT_PS_ATT.version_number%TYPE;
305   v_number_processed      NUMBER DEFAULT 0;
306   v_enrolled_in_prg_period    BOOLEAN DEFAULT FALSE;
307   v_contributes_to_period     BOOLEAN DEFAULT FALSE;
308   CURSOR c_sca IS
309     SELECT  sca.version_number
310     FROM  IGS_EN_STDNT_PS_ATT sca
311     WHERE sca.person_id   = p_person_id AND
312       sca.course_cd   = p_course_cd;
313   CURSOR c_cat_ci (
314     cp_version_number   IGS_EN_STDNT_PS_ATT.version_number%TYPE) IS
315     SELECT  ci1.cal_type,
316       ci1.sequence_number
317     FROM  IGS_CA_TYPE     cat,
318       IGS_CA_STAT   cs,
319       IGS_CA_INST     ci1
320     WHERE cat.cal_type    = ci1.cal_type AND
321       cat.s_cal_cat   = cst_progress AND
322       cs.cal_status   = ci1.cal_status AND
323       cs.s_cal_status   = cst_active AND
324       IGS_PR_GEN_001.prgp_get_cal_stream (
325             p_course_cd,
326             cp_version_number,
327             p_prg_cal_type,
328             ci1.cal_type)
329             = 'Y' AND
330       ci1.start_dt    <
331       (SELECT ci2.start_dt
332       FROM  IGS_CA_INST   ci2
333       WHERE ci2.cal_type    = p_prg_cal_type AND
334         ci2.sequence_number = p_prg_sequence_number)
335     ORDER BY ci1.start_dt DESC;
336 BEGIN
337   -- If effective in parameter period then no further processing required
338   --
339   -- kdande; 22-Apr-2003; Bug# 2829262
340   -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_prg_prd.
341   --
342   IF prgp_get_sua_prg_prd (
343         p_prg_cal_type,
344         p_prg_sequence_number,
345         p_person_id,
346         p_course_cd,
347         p_unit_cd,
348         p_cal_type,
349         p_ci_sequence_number,
350         'N',
351         NULL,
352         NULL,
353         p_uoo_id) = 'Y' THEN
354     RETURN 'Y';
355   END IF;
356   -- If only 1 period then don't go back into past periods
357   IF p_number_of_periods = 1 THEN
358     RETURN 'N';
359   END IF;
360   v_number_processed := 1;
361   -- Get the version number for student IGS_PS_COURSE attempt
362   OPEN c_sca;
363   FETCH c_sca INTO v_version_number;
364   CLOSE c_sca;
365   -- Loop through the specified number of past periods
366   FOR v_cat_ci_rec IN c_cat_ci (
367           v_version_number) LOOP
368     v_enrolled_in_prg_period := TRUE;
369     -- Determine if the student is effectively enrolled in the progression period
370     IF IGS_PR_GEN_001.prgp_get_msr_efctv (
371           v_cat_ci_rec.cal_type,
372           v_cat_ci_rec.sequence_number,
373           p_person_id,
374           p_course_cd) = 'N' THEN
375       -- The period is not counted as effective
376       v_enrolled_in_prg_period := FALSE;
377     END IF;
378     IF v_enrolled_in_prg_period THEN
379       -- Determine if the IGS_PS_UNIT attempt contributes to the period
380       --
381       -- kdande; 22-Apr-2003; Bug# 2829262
382       -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_prg_prd.
383       --
384       IF prgp_get_sua_prg_prd (
385             v_cat_ci_rec.cal_type,
386             v_cat_ci_rec.sequence_number,
387             p_person_id,
388             p_course_cd,
389             p_unit_cd,
390             p_cal_type,
391             p_ci_sequence_number,
392             'N',
393             NULL,
394             NULL,
395             p_uoo_id) = 'Y' THEN
396         v_contributes_to_period := TRUE;
397         EXIT;
398       END IF;
399       v_number_processed := v_number_processed + 1;
400       IF v_number_processed = p_number_of_periods THEN
401         EXIT;
402       END IF;
403     END IF;
404   END LOOP;
405   IF v_contributes_to_period THEN
406     RETURN 'Y';
407   END IF;
408   RETURN 'N';
409 EXCEPTION
410   WHEN OTHERS THEN
411     IF c_sca%ISOPEN THEN
412       CLOSE c_sca;
413     END IF;
414     IF c_cat_ci%ISOPEN THEN
415       CLOSE c_cat_ci;
416     END IF;
417   RAISE;
418 END;
419 EXCEPTION
420   WHEN OTHERS THEN
421     Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
422                 FND_MESSAGE.SET_TOKEN ('NAME', 'IGS_PR_GEN_002.PRGP_GET_SUA_PRG_NUM');
423                 --IGS_GE_MSG_STACK.ADD;
424 
425 END prgp_get_sua_prg_num;
426 
427 --
428 -- kdande; 22-Apr-2003; Bug# 2829262
429 -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_prg_prd
430 --
431 FUNCTION prgp_get_sua_prg_prd(
432   p_prg_cal_type IN IGS_CA_INST_ALL.cal_type%TYPE ,
433   p_prg_ci_sequence_number IN IGS_CA_INST_ALL.sequence_number%TYPE ,
437   p_cal_type IN IGS_CA_INST_ALL.cal_type%TYPE ,
434   p_person_id IN IGS_EN_SU_ATTEMPT_ALL.person_id%TYPE ,
435   p_course_cd IN IGS_EN_SU_ATTEMPT_ALL.course_cd%TYPE ,
436   p_unit_cd IN IGS_EN_SU_ATTEMPT_ALL.unit_cd%TYPE ,
438   p_ci_sequence_number IN IGS_CA_INST_ALL.sequence_number%TYPE ,
439   p_details_ind IN VARCHAR2 ,
440   p_unit_attempt_status IN VARCHAR2 ,
441   p_discontinued_dt IN DATE,
442   p_uoo_id IN NUMBER)
443 RETURN VARCHAR2 AS
444   gv_other_detail   VARCHAR2(255);
445 BEGIN   -- prgp_get_sua_prg_prd
446   -- Return whether student IGS_PS_UNIT attempt contributes to a nominated progression
447   -- period. Will take into consideration early exit from units due to
448   -- discontinuation of early results in self-paced units.
449   -- IGS_GE_NOTE: Discontinuation date is optional and if not passed will be loaded
450   -- from the student IGS_PS_UNIT attempt. This has been included as the rules engine
451   -- often
452 DECLARE
453   cst_progress  CONSTANT  VARCHAR2(10) := 'PROGRESS';
454   cst_active  CONSTANT  VARCHAR2(10) := 'ACTIVE';
455   cst_enrolled  CONSTANT  VARCHAR2(10) := 'ENROLLED';
456   cst_discontin CONSTANT  VARCHAR2(10) := 'DISCONTIN';
457   cst_completed CONSTANT  VARCHAR2(10) := 'COMPLETED';
458   cst_duplicate CONSTANT  VARCHAR2(10) := 'DUPLICATE';
459   v_discontinued_dt   IGS_EN_SU_ATTEMPT.discontinued_dt%TYPE;
460   v_unit_attempt_status   IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE;
461   v_result_type     IGS_AS_GRD_SCH_GRADE.s_result_type%TYPE;
462   v_outcome_dt      IGS_AS_SU_STMPTOUT.outcome_dt%TYPE;
463   v_grading_schema_cd   IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
464   v_gs_version_number   IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
465   v_grade       IGS_AS_GRD_SCH_GRADE.grade%TYPE;
466   v_mark        IGS_AS_SU_STMPTOUT.mark%TYPE;
467   v_origin_course_cd    IGS_EN_SU_ATTEMPT.course_cd%TYPE;
468   v_prev_prg_cal_type   IGS_CA_INST.cal_type%TYPE;
469   v_prev_prg_ci_sequence_number IGS_CA_INST.sequence_number%TYPE;
470   v_previous_cutoff_dt    IGS_CA_DA_INST.absolute_val%TYPE;
471   v_cutoff_dt     IGS_CA_DA_INST.absolute_val%TYPE;
472   v_sca_version_number    IGS_EN_STDNT_PS_ATT.version_number%TYPE;
473   v_dummy       VARCHAR2(1);
474   CURSOR c_cir IS
475     SELECT  'X'
476     FROM  IGS_CA_INST_REL cir
477     WHERE cir.sub_cal_type    = p_cal_type AND
478       cir.sub_ci_sequence_number  = p_ci_sequence_number AND
479       cir.sup_cal_type    = p_prg_cal_type AND
480       cir.sup_ci_sequence_number  = p_prg_ci_sequence_number;
481   --
482   -- kdande; 22-Apr-2003; Bug# 2829262
483   -- Added uoo_id field to the SELECT clause of cursor c_sua.
484   --
485   CURSOR c_sua IS
486     SELECT  sua.discontinued_dt,
487       sua.unit_attempt_status
488     FROM  IGS_EN_SU_ATTEMPT   sua
489     WHERE sua.person_id     = p_person_id AND
490       sua.course_cd     = p_course_cd AND
491       sua.uoo_id = p_uoo_id;
492   CURSOR c_sca IS
493     SELECT  sca.version_number
494     FROM  IGS_EN_STDNT_PS_ATT     sca
495     WHERE sca.person_id     = p_person_id AND
496       sca.course_cd     = p_course_cd;
497   CURSOR c_ci_cir_ct_cs1 (
498     cp_sca_version_number     IGS_EN_STDNT_PS_ATT.version_number%TYPE) IS
499     SELECT  cir.sup_cal_type,
500       cir.sup_ci_sequence_number
501     FROM  IGS_CA_INST     ci1,
502       IGS_CA_INST_REL   cir,
503       IGS_CA_TYPE       ct,
504       IGS_CA_STAT     cs
505     WHERE cir.sub_cal_type      = p_cal_type AND
506       cir.sub_ci_sequence_number  = p_ci_sequence_number AND
507       ct.cal_type     = cir.sup_cal_type AND
508       ct.s_cal_cat      = cst_progress AND
509       ci1.cal_type      = cir.sup_cal_type AND
510       ci1.sequence_number   = cir.sup_ci_sequence_number AND
511       cs.cal_status     = ci1.cal_status AND
512       cs.s_cal_status     = cst_active AND
513       IGS_PR_GEN_001.prgp_get_cal_stream (
514         p_course_cd,
515         cp_sca_version_number,
516         p_prg_cal_type,
517         cir.sup_cal_type)   = 'Y' AND
518       ci1.start_dt      <
519       (SELECT ci2.start_dt
520       FROM  IGS_CA_INST     ci2
521       WHERE ci2.cal_type      = p_prg_cal_type AND
522         ci2.sequence_number   = p_prg_ci_sequence_number)
523     ORDER BY ci1.start_dt DESC;
524   CURSOR c_ci_cir_ct_cs2 (
525     cp_sca_version_number     IGS_EN_STDNT_PS_ATT.version_number%TYPE) IS
526     SELECT  'X'
527     FROM  IGS_CA_INST     ci1,
528       IGS_CA_INST_REL   cir,
529       IGS_CA_TYPE       ct,
530       IGS_CA_STAT     cs
531     WHERE cir.sub_cal_type      = p_cal_type AND
532       cir.sub_ci_sequence_number  = p_ci_sequence_number AND
533       ct.cal_type     = cir.sup_cal_type AND
534       ct.s_cal_cat      = cst_progress AND
535       ci1.cal_type      = cir.sup_cal_type AND
536       ci1.sequence_number   = cir.sup_ci_sequence_number AND
537       cs.cal_status     = ci1.cal_status AND
538       cs.s_cal_status     = cst_active AND
539       IGS_PR_GEN_001.prgp_get_cal_stream (
540         p_course_cd,
541         cp_sca_version_number,
542         p_prg_cal_type,
543         cir.sup_cal_type)   = 'Y' AND
544       ci1.start_dt      >
545       (SELECT ci2.start_dt
546       FROM  IGS_CA_INST     ci2
550   -- Check calendar relationship between progression and teaching calendar
547       WHERE ci2.cal_type      = p_prg_cal_type AND
548         ci2.sequence_number   = p_prg_ci_sequence_number);
549 BEGIN
551   OPEN c_cir;
552   FETCH c_cir INTO v_dummy;
553   IF c_cir%NOTFOUND THEN
554     CLOSE c_cir;
555     RETURN 'N';
556   ELSE
557     CLOSE c_cir;
558   END IF;
559   -- Check whether details have been passed
560   IF p_details_ind = 'N' THEN
561     OPEN c_sua;
562     FETCH c_sua INTO
563         v_discontinued_dt,
564         v_unit_attempt_status;
565     IF c_sua%NOTFOUND THEN
566       CLOSE c_sua;
567       RETURN 'N';
568     END IF;
569     CLOSE c_sua;
570   ELSE
571     v_discontinued_dt := p_discontinued_dt;
572     v_unit_attempt_status := p_unit_attempt_status;
573   END IF;
574   -- Get the IGS_EN_STDNT_PS_ATT version_number from student IGS_PS_COURSE attempt
575   OPEN c_sca;
576   FETCH c_sca INTO v_sca_version_number;
577   CLOSE c_sca;
578   -- Eliminate status which don't apply
579   IF v_unit_attempt_status NOT IN (
580           cst_enrolled,
581           cst_discontin,
582           cst_completed,
583           cst_duplicate) THEN
584     RETURN 'N';
585   END IF;
586   -- Get the outcome if applicable
587   IF v_unit_attempt_status IN (
588           cst_completed,
589           cst_duplicate,
590           cst_enrolled) THEN
591     --
592     -- kdande; 22-Apr-2003; Bug# 2829262
593     -- Added uoo_id parameter to the IGS_AS_GEN_003.assp_get_sua_outcome
594     -- FUNCTION call.
595     --
596     v_result_type := IGS_AS_GEN_003.assp_get_sua_outcome(
597               p_person_id,
598               p_course_cd,
599               p_unit_cd,
600               p_cal_type,
601               p_ci_sequence_number,
602               v_unit_attempt_status,
603               'N',
604               v_outcome_dt,
605               v_grading_schema_cd,
606               v_gs_version_number,
607               v_grade,
608               v_mark,
609               v_origin_course_cd,
610               p_uoo_id,
611 --added by LKAKI----
612 	      'N');
613     IF v_result_type IS NULL THEN
614       v_outcome_dt := NULL;
615     END IF;
616   ELSE
617     v_outcome_dt := NULL;
618   END IF;
619   -- Get the cutoff date from the previous period
620   OPEN c_ci_cir_ct_cs1 (
621         v_sca_version_number);
622   FETCH c_ci_cir_ct_cs1 INTO
623         v_prev_prg_cal_type,
624         v_prev_prg_ci_sequence_number;
625   IF c_ci_cir_ct_cs1%FOUND THEN
626     CLOSE c_ci_cir_ct_cs1;
627     v_previous_cutoff_dt := IGS_PR_GEN_001.prgp_get_prg_efctv(
628               v_prev_prg_cal_type,
629               v_prev_prg_ci_sequence_number);
630   ELSE
631     CLOSE c_ci_cir_ct_cs1;
632   END IF;
633   -- Check for contribution to a previous period
634   IF v_unit_attempt_status = cst_discontin THEN
635     IF TRUNC(v_discontinued_dt) <= v_previous_cutoff_dt THEN
636       RETURN 'N';
637     END IF;
638   ELSIF v_unit_attempt_status IN (
639           cst_completed,
640           cst_duplicate) OR
641             (v_unit_attempt_status = 'ENROLLED' AND
642            v_outcome_dt IS NOT NULL) THEN
643     IF v_outcome_dt <= v_previous_cutoff_dt THEN
644       RETURN 'N';
645     END IF;
646   END IF;
647   -- Check which progression period
648   OPEN c_ci_cir_ct_cs2 (
649         v_sca_version_number);
650   FETCH c_ci_cir_ct_cs2 INTO v_dummy;
651   IF c_ci_cir_ct_cs2%FOUND THEN
652     CLOSE c_ci_cir_ct_cs2;
653     v_cutoff_dt := IGS_PR_GEN_001.prgp_get_prg_efctv(
654             p_prg_cal_type,
655             p_prg_ci_sequence_number);
656     IF v_discontinued_dt IS NULL THEN
657       IF v_unit_attempt_status = cst_enrolled AND
658           v_outcome_dt IS NULL THEN
659         RETURN 'N';
660       ELSE
661         IF v_outcome_dt <= v_cutoff_dt THEN
662           RETURN 'Y';
663         END IF;
664       END IF;
665     ELSE
666       IF TRUNC(v_discontinued_dt) <= v_cutoff_dt THEN
667         RETURN 'Y';
668       END IF;
669     END IF;
670   ELSE
671     CLOSE c_ci_cir_ct_cs2;
672     RETURN 'Y';
673   END IF;
674   RETURN 'N';
675 EXCEPTION
676   WHEN OTHERS THEN
677     IF c_cir%ISOPEN THEN
678       CLOSE c_cir;
679     END IF;
680     IF c_sua%ISOPEN THEN
681       CLOSE c_sua;
682     END IF;
683     IF c_sca%ISOPEN THEN
684       CLOSE c_sca;
685     END IF;
686     IF c_ci_cir_ct_cs1%ISOPEN THEN
687       CLOSE c_ci_cir_ct_cs1;
688     END IF;
689     IF c_ci_cir_ct_cs2%ISOPEN THEN
690       CLOSE c_ci_cir_ct_cs2;
691     END IF;
692     RAISE;
693 END;
694 
695 EXCEPTION
696   WHEN OTHERS THEN
697     Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
698                 FND_MESSAGE.SET_TOKEN ('NAME', 'IGS_PR_GEN_002.PRGP_GET_SUA_PRG_PRD');
699                 --IGS_GE_MSG_STACK.ADD;
700 
701 END prgp_get_sua_prg_prd;
702 --
703 -- kdande; 22-Apr-2003; Bug# 2829262
704 -- Added p_uoo_id parameter to the FUNCTION prgp_get_sua_wam
705 --
706 FUNCTION prgp_get_sua_wam (
707   p_person_id IN NUMBER ,
708   p_course_cd IN VARCHAR2 ,
709   p_unit_cd IN VARCHAR2 ,
710   p_cal_type IN VARCHAR2 ,
711   p_ci_sequence_number IN NUMBER ,
712   p_use_recommended_ind IN VARCHAR2 ,
713   p_abort_when_missing_ind IN VARCHAR2,
714   p_wam_type IN VARCHAR2 DEFAULT 'COURSE',
715   p_uoo_id IN NUMBER)
716 RETURN NUMBER AS
717   gv_other_detail   VARCHAR2(255);
718 BEGIN   -- prgp_get_sua_wam
719   -- Get the mark value applicable to WAM for a nominated student IGS_PS_UNIT attempt,
720   -- considering the options that are available to the WAM calculation.
721   -- A return of -1000000 means that the overall WAM check should be aborted
722   -- due to a missing grade.
723 DECLARE
724   cst_discontin   CONSTANT  VARCHAR2(10) := 'DISCONTIN';
725   cst_enrolled    CONSTANT  VARCHAR2(10) := 'ENROLLED';
726   cst_abort_WAM   CONSTANT  NUMBER := -1000000;
727   v_unit_attempt_status     IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE;
728   v_s_result_type       IGS_AS_GRD_SCH_GRADE.s_result_type%TYPE;
729   v_outcome_dt        IGS_AS_SU_STMPTOUT.outcome_dt%TYPE;
730   v_grading_schema_cd       IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
731   v_gs_version_number       IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
732   v_grade         IGS_AS_GRD_SCH_GRADE.grade%TYPE;
733   v_mark          IGS_AS_SU_STMPTOUT.mark%TYPE;
734   v_origin_course_cd      IGS_EN_SU_ATTEMPT.course_cd%TYPE;
735   v_finalised_ind       VARCHAR2(1);
736   v_administrative_unit_status            IGS_EN_SU_ATTEMPT.administrative_unit_status%TYPE;
737   v_effective_progression_ind   IGS_AD_ADM_UNIT_STAT.effective_progression_ind%TYPE;
738 
739   --
740   -- kdande; 22-Apr-2003; Bug# 2829262
741   -- Added uoo_id field to the SELECT clause of cursor c_sua.
742   --
743   CURSOR c_sua IS
744     SELECT  sua.unit_attempt_status,sua.administrative_unit_status
745     FROM  IGS_EN_SU_ATTEMPT sua
746     WHERE sua.person_id   = p_person_id AND
747       sua.course_cd   = p_course_cd AND
748       sua.uoo_id = p_uoo_id;
749   CURSOR c_aus (
750     cp_administrative_unit_status IGS_EN_SU_ATTEMPT.administrative_unit_status%TYPE) IS
751     SELECT effective_progression_ind
752     FROM   IGS_AD_ADM_UNIT_STAT
753     WHERE  administrative_unit_status=cp_administrative_unit_status;
754 BEGIN
755   OPEN c_sua;
756   FETCH c_sua INTO v_unit_attempt_status,v_administrative_unit_status;
757   IF c_sua%NOTFOUND THEN
758     CLOSE c_sua;
759     RETURN NULL;
760   END IF;
761   CLOSE c_sua;
762   -- Discontinued outcomes get a mark of zero
763   IF v_unit_attempt_status = cst_discontin THEN
764 
765   --  RETURN 0;
766   OPEN c_aus(v_administrative_unit_status);
767   FETCH c_aus INTO v_effective_progression_ind;
768   CLOSE c_aus;
769   -- If the admin unit status is not effective for progression then ignore
770 
771   IF v_effective_progression_ind = 'N' THEN
772     RETURN NULL;
773   ELSE
774     RETURN 0;
775   END IF;
776 
777   END IF;
778   IF v_unit_attempt_status = cst_enrolled AND p_use_recommended_ind = 'N' THEN
779     -- If enrolled return value appropriate to parameter
780 
781     IF p_wam_type = 'PERIOD' AND p_abort_when_missing_ind = 'Y' THEN
782       RETURN cst_abort_WAM;
783     ELSE
784       RETURN NULL;
785     END IF;
786   ELSE
787     -- Retrieve the latest outcome
788     IF p_use_recommended_ind = 'N' THEN
789       v_finalised_ind := 'Y';
790     ELSE
791       v_finalised_ind := 'N';
792     END IF;
793     --
794     -- kdande; 22-Apr-2003; Bug# 2829262
795     -- Added uoo_id parameter to the IGS_AS_GEN_003.assp_get_sua_outcome
796     -- FUNCTION call.
797     --
798     v_s_result_type := IGS_AS_GEN_003.assp_get_sua_outcome (
799               p_person_id,
800               p_course_cd,
801               p_unit_cd,
802               p_cal_type,
803               p_ci_sequence_number,
804               v_unit_attempt_status,
805               v_finalised_ind,
806               v_outcome_dt,
807               v_grading_schema_cd,
808               v_gs_version_number,
809               v_grade,
810               v_mark,
811               v_origin_course_cd,
812               p_uoo_id,
813 --added by LKAKI---
814 	      'N');
815     IF v_s_result_type IS NULL OR
816         v_mark IS NULL THEN
817       IF p_wam_type = 'COURSE' THEN
818       IF v_s_result_type IS NOT NULL AND
819          v_mark IS NOT NULL AND
820          p_abort_when_missing_ind = 'Y' THEN
821         RETURN cst_abort_WAM;
822       ELSE
823         RETURN NULL;
824       END IF;
825       ELSE
826       -- Handle missing mark according to parameter
827       IF p_abort_when_missing_ind = 'Y' THEN
828         RETURN cst_abort_WAM;
829       ELSE
830         RETURN NULL;
831       END IF;
832       END IF;
833 
834     ELSE
835       -- Return the mark retrieved
836       RETURN v_mark;
837     END IF;
838   END IF;
839 EXCEPTION
840   WHEN OTHERS THEN
841     IF c_sua%ISOPEN THEN
842       CLOSE c_sua;
843     END IF;
844     RAISE;
845 END;
846 EXCEPTION
847   WHEN OTHERS THEN
848     Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXCEPTION');
849                 FND_MESSAGE.SET_TOKEN ('NAME', 'IGS_PR_GEN_002.PRGP_GET_SUA_WAM');
850                 --IGS_GE_MSG_STACK.ADD;
851 
852 END prgp_get_sua_wam;
853 
854 END IGS_PR_GEN_002;