DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AS_GEN_005

Source


1 PACKAGE BODY IGS_AS_GEN_005 AS
2 /* $Header: IGSAS05B.pls 120.2 2006/08/16 11:35:29 sepalani noship $ */
3 
4 /* Change History
5  who       when         what
6  smvk     09-Jul-2004   Bug # 3676145. Modified the cursors c_suaai, c_sua to select active (not closed) unit classes.
7  shimitta 21-Feb-2006   Bug# 5042414.
8  sepalani 16-Aug-2006   Bug# 5469461
9  */
10 
11   FUNCTION assp_mnt_suaai_uap (
12     p_unit_cd                      IN     VARCHAR2,
13     p_version_number               IN     NUMBER,
14     p_cal_type                     IN     VARCHAR2,
15     p_ci_sequence_number           IN     NUMBER,
16     p_ass_pattern_id               IN     NUMBER,
17     p_location_cd                  IN     VARCHAR2,
18     p_unit_class                   IN     VARCHAR2,
19     p_unit_mode                    IN     VARCHAR2,
20     p_s_log_type                   IN     VARCHAR2,
21     p_key                          IN     VARCHAR2,
22     p_sle_key                      IN OUT NOCOPY VARCHAR2,
23     p_error_count                  IN OUT NOCOPY NUMBER,
24     p_warning_count                IN OUT NOCOPY NUMBER,
25     p_message_name                 OUT NOCOPY VARCHAR2
26   ) RETURN BOOLEAN IS
27   BEGIN
28     RETURN FALSE;
29   END assp_mnt_suaai_uap;
30 
31   FUNCTION assp_mnt_uapi_suaai (
32     p_person_id                    IN     NUMBER,
33     p_course_cd                    IN     VARCHAR2,
34     p_unit_cd                      IN     VARCHAR2,
35     p_version_number               IN     NUMBER,
36     p_cal_type                     IN     VARCHAR2,
37     p_ci_sequence_number           IN     NUMBER,
38     p_ass_pattern_id               IN     NUMBER,
39     p_location_cd                  IN     VARCHAR2,
40     p_unit_class                   IN     VARCHAR2,
41     p_s_log_type                   IN     VARCHAR2,
42     p_key                          IN     VARCHAR2,
43     p_sle_key                      IN     VARCHAR2,
44     p_error_count                  IN OUT NOCOPY NUMBER,
45     p_warning_count                IN OUT NOCOPY NUMBER,
46     p_message_name                 OUT NOCOPY VARCHAR2
47   ) RETURN BOOLEAN IS
48   BEGIN
49     RETURN FALSE;
50   END assp_mnt_uapi_suaai;
51 
52   FUNCTION assp_set_suao_trans (
53     p_person_id                    IN     NUMBER,
54     p_course_cd                    IN     VARCHAR2,
55     p_unit_cd                      IN     VARCHAR2,
56     p_cal_type                     IN     VARCHAR2,
57     p_ci_sequence_number           IN     NUMBER,
58     p_outcome_dt                   IN     DATE,
59     p_grade                        IN     VARCHAR2,
60     p_grading_schema_cd            IN     VARCHAR2,
61     p_version_number               IN     NUMBER,
62     p_translated_grading_schema_cd IN OUT NOCOPY VARCHAR2,
63     p_translated_version_number    IN OUT NOCOPY NUMBER,
64     p_translated_grade             IN OUT NOCOPY VARCHAR2,
65     p_translated_dt                IN OUT NOCOPY DATE,
66     p_message_name                 OUT NOCOPY VARCHAR2,
67     p_uoo_id                       IN     NUMBER
68   ) RETURN BOOLEAN IS
69     gv_other_detail VARCHAR2 (255);
70   BEGIN -- assp_set_suao_trans
71     -- This module is called when ever the IGS_AS_SU_STMPTOUT.grade is
72     -- altered. It will check to see if a grade has had a translation performed
73     -- (translated_dt set), if so, then determine the translation for the new
74     -- grade. Where a grading schema has been recorded against the course
75     -- offering pattern, this will be used to perform the translation.
76     --
77     -- NOTE: There is a batch routine (assp_upd_suao_trans) which is called to
78     -- perform the original translations.  This module is called when a grade
79     -- is updated and will check if a translation performed previously and set
80     -- the translation fields as required.
81     --
82     -- Conditions where no translation occurs:
83     --
84     --        ? No IGS_PS_OFR_PAT grading schema specified.
85     --        ? IGS_PS_UNIT_OFR_OPT.grading_schema_prcdnce_ind = 'Y'
86     --        ? No grade mapping specified in IGS_AS_GRD_SCH_TRN.
87     DECLARE
88       v_suao_rec_exists         VARCHAR2 (1);
89       v_to_grade                igs_as_grd_sch_trn.to_grade%TYPE;
90       v_suao_exists             BOOLEAN                            DEFAULT FALSE;
91       v_alt_cd                  VARCHAR2 (10);
92       v_acad_cal_type           igs_ca_inst.cal_type%TYPE;
93       v_acad_ci_sequence_number igs_ca_inst.sequence_number%TYPE;
94       v_acad_ci_start_dt        DATE;
95       v_acad_ci_end_dt          DATE;
96       v_message_name            VARCHAR2 (30);
97       CURSOR c_suao IS
98         SELECT 'x'
99         FROM   igs_as_su_stmptout suao
100         WHERE  suao.person_id = p_person_id
101         AND    suao.course_cd = p_course_cd
102         AND    suao.uoo_id = p_uoo_id
103         AND    suao.outcome_dt < p_outcome_dt
104         AND    suao.translated_dt IS NOT NULL;
105       CURSOR c_cop (
106         cp_acad_cal_type                      igs_ps_ofr_pat.cal_type%TYPE,
107         cp_acad_ci_seq_num                    igs_ps_ofr_pat.ci_sequence_number%TYPE
108       ) IS
109         SELECT cop.grading_schema_cd,
110                cop.gs_version_number
111         FROM   igs_en_su_attempt sua,
112                igs_en_stdnt_ps_att sca,
113                igs_ps_unit_ofr_opt uoo,
114                igs_ps_ofr_pat cop
115         WHERE  sua.person_id = p_person_id
116         AND    sua.course_cd = p_course_cd
117         AND    sua.uoo_id = p_uoo_id
118         AND    uoo.uoo_id = sua.uoo_id
119         AND    uoo.grading_schema_prcdnce_ind = 'N'
120         AND    sca.person_id = sua.person_id
121         AND    sca.course_cd = sua.course_cd
122         AND    cop.coo_id = sca.coo_id
123         AND    cop.cal_type = cp_acad_cal_type
124         AND    cop.ci_sequence_number = cp_acad_ci_seq_num
125         AND    cop.grading_schema_cd IS NOT NULL
126         AND    cop.gs_version_number IS NOT NULL;
127       v_cop_rec                 c_cop%ROWTYPE;
128       CURSOR c_gsgt (
129         cp_grading_schema_cd                  igs_ps_ofr_pat.grading_schema_cd%TYPE,
130         cp_gs_ver_num                         igs_ps_ofr_pat.gs_version_number%TYPE
131       ) IS
132         SELECT gsgt.to_grade
133         FROM   igs_as_grd_sch_trn gsgt
134         WHERE  gsgt.grading_schema_cd = p_grading_schema_cd
135         AND    gsgt.version_number = p_version_number
136         AND    gsgt.grade = p_grade
137         AND    gsgt.to_grading_schema_cd = cp_grading_schema_cd
138         AND    gsgt.to_version_number = cp_gs_ver_num;
139     BEGIN
140       p_message_name := NULL;
141       IF p_translated_dt IS NULL THEN
142         -- If not translating, maybe a new record and field not yet
143         -- set or record not even exiosting, check if a previous
144         -- grade entry exists that has been translated.
145         OPEN c_suao;
146         FETCH c_suao INTO v_suao_rec_exists;
147         IF c_suao%NOTFOUND THEN
148           -- No translation required as outcome not yet
149           -- translated.  Return from the module.
150           CLOSE c_suao;
151           p_translated_grading_schema_cd := NULL;
152           p_translated_version_number := NULL;
153           p_translated_grade := NULL;
154           RETURN TRUE;
155         ELSE
156           -- Set the tranlation date to indicate
157           -- translation attempt.
158           CLOSE c_suao;
159           v_suao_exists := TRUE;
160           p_translated_dt := SYSDATE;
161         END IF;
162       END IF;
163       -- Determine the academic period for the student
164       v_alt_cd := igs_en_gen_002.enrp_get_acad_alt_cd (
165                     p_cal_type,
166                     p_ci_sequence_number,
167                     v_acad_cal_type,
168                     v_acad_ci_sequence_number,
169                     v_acad_ci_start_dt,
170                     v_acad_ci_end_dt,
171                     v_message_name
172                   );
173       IF v_message_name IS NOT NULL THEN
174         p_message_name := v_message_name;
175         RETURN FALSE;
176       END IF;
177       -- Verify that the IGS_PS_UNIT_OFR_OPT.grading_schema_prcdnce_ind = 'N'
178       -- and that IGS_PS_OFR_PAT.grading_schema_cd is not null for the
179       -- student unit attempt and get the course offering pattern grading schema
180       -- that will be used in the translation. Otherwise skip the student unit
181       -- attempt as no translation possible.
182       OPEN c_cop (v_acad_cal_type, v_acad_ci_sequence_number);
183       FETCH c_cop INTO v_cop_rec;
184       IF c_cop%FOUND THEN
185         CLOSE c_cop;
186         -- Validate that their exists a grade mapping.
187         OPEN c_gsgt (v_cop_rec.grading_schema_cd, v_cop_rec.gs_version_number);
188         FETCH c_gsgt INTO v_to_grade;
189         IF c_gsgt%NOTFOUND THEN
190           CLOSE c_gsgt;
191           p_translated_grading_schema_cd := NULL;
192           p_translated_version_number := NULL;
193           p_translated_grade := NULL;
194           RETURN TRUE;
195         ELSE
196           -- If record already translated and is the same,
197           -- do not update.
198           CLOSE c_gsgt;
199           IF  v_suao_exists
200               AND (NVL (p_translated_grading_schema_cd, 'NULL') = v_cop_rec.grading_schema_cd)
201               AND (NVL (p_translated_version_number, 0) = v_cop_rec.gs_version_number)
202               AND (NVL (p_translated_grade, 'NULL') = v_to_grade) THEN
203             -- Leave parameter fields the same.
204             RETURN TRUE;
205           END IF;
206         END IF;
207         -- Set the fields to the new translation.
208         p_translated_grading_schema_cd := v_cop_rec.grading_schema_cd;
209         p_translated_version_number := v_cop_rec.gs_version_number;
210         p_translated_grade := v_to_grade;
211         RETURN TRUE;
212       END IF;
213       -- IF processing has reached this point, then no translation possible.
214       p_translated_grading_schema_cd := NULL;
215       p_translated_version_number := NULL;
216       p_translated_grade := NULL;
217       RETURN TRUE;
218     EXCEPTION
219       WHEN OTHERS THEN
220         IF c_suao%ISOPEN THEN
221           CLOSE c_suao;
222         END IF;
223         IF c_cop%ISOPEN THEN
224           CLOSE c_cop;
225         END IF;
226         IF c_gsgt%ISOPEN THEN
227           CLOSE c_gsgt;
228         END IF;
229         RAISE;
230     END;
231   EXCEPTION
232     WHEN OTHERS THEN
233       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
234       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_set_suao_trans');
235       igs_ge_msg_stack.ADD;
236       app_exception.raise_exception;
237   END assp_set_suao_trans;
238 
239   FUNCTION assp_upd_suaai_dflt (
240     p_person_id                    IN     NUMBER,
241     p_course_cd                    IN     VARCHAR2,
242     p_unit_cd                      IN     VARCHAR2,
243     p_cal_type                     IN     VARCHAR2,
244     p_ci_sequence_number           IN     NUMBER,
245     p_version_number               IN     NUMBER,
246     p_location_cd                  IN     VARCHAR2,
247     p_unit_class                   IN     VARCHAR2,
248     p_unit_mode                    IN     VARCHAR2,
249     p_s_log_type                   IN     VARCHAR2,
250     p_key                          IN     VARCHAR2,
251     p_sle_key                      IN     VARCHAR2,
252     p_error_count                  IN OUT NOCOPY NUMBER,
253     p_warning_count                IN OUT NOCOPY NUMBER,
254     p_message_name                 OUT NOCOPY VARCHAR2,
255     p_uoo_id                       IN  NUMBER
256   ) RETURN BOOLEAN IS
257     gv_other_detail VARCHAR2 (255);
258   BEGIN -- assp_upd_suaai_dflt
259     -- This routine will perform a routine that will check if assessment items
260     -- still apply to the students new unit offering oprion or if they should
261     -- be logically deleted and default items assigned for the new unit
262     -- offering option.
263     -- This routine will return false and rollback any alteration if a lock exists
264     -- when attempting to logically delete an assessment item.
265     DECLARE
266       cst_yes CONSTANT CHAR                 := 'Y';
267       v_message_name   VARCHAR2 (30);
268       v_func_ret_flag  BOOLEAN;
269       CURSOR cur_uoo_id IS
270         SELECT uoo_id
271         FROM   igs_ps_unit_ofr_opt
272         WHERE  unit_cd = p_unit_cd
273         AND    version_number = p_version_number
274         AND    cal_type = p_cal_type
275         AND    ci_sequence_number = p_ci_sequence_number
276         AND    location_cd = p_location_cd
277         AND    unit_class = p_unit_class;
278       rec_uoo_id       cur_uoo_id%ROWTYPE;
279       CURSOR c_suaai (
280         cp_person_id                          igs_as_su_atmpt_itm.person_id%TYPE,
281         cp_course_cd                          igs_as_su_atmpt_itm.course_cd%TYPE,
282         cp_unit_cd                            igs_as_su_atmpt_itm.unit_cd%TYPE,
283         cp_cal_type                           igs_as_su_atmpt_itm.cal_type%TYPE,
284         cp_ci_sequence_number                 igs_as_su_atmpt_itm.ci_sequence_number%TYPE,
285         cp_uoo_id                             igs_en_su_attempt.uoo_id%TYPE
286       ) IS
287         SELECT suaai.ass_id,
288                suaai.unit_section_ass_item_id,
289                suaai.unit_ass_item_id
290         FROM   igs_as_su_atmpt_itm suaai,
291                igs_en_su_attempt_all sua
292         WHERE  suaai.person_id = cp_person_id
293         AND    suaai.course_cd = cp_course_cd
294         AND    suaai.uoo_id = cp_uoo_id
295         AND    sua.person_id = suaai.person_id
296         AND    sua.course_cd = suaai.course_cd
297         AND    sua.uoo_id = suaai.uoo_id
298         AND    sua.unit_attempt_status IN ('ENROLLED', 'UNCONFIRM', 'WAITLISTED')
299         AND    suaai.attempt_number = (SELECT MAX (attempt_number)
300                                        FROM   igs_as_su_atmpt_itm suaai2
301                                        WHERE  suaai2.person_id = cp_person_id
302                                        AND    suaai2.course_cd = cp_course_cd
303                                        AND    suaai2.uoo_id = cp_uoo_id
304                                        AND    suaai2.ass_id = suaai.ass_id)
305         AND    suaai.s_default_ind = cst_yes
306         AND    suaai.logical_delete_dt IS NULL;
307       CURSOR c_suv (
308         cp_person_id                          igs_as_su_atmpt_itm.person_id%TYPE,
309         cp_course_cd                          igs_as_su_atmpt_itm.course_cd%TYPE,
310         cp_unit_cd                            igs_as_su_atmpt_itm.unit_cd%TYPE,
311         cp_cal_type                           igs_as_su_atmpt_itm.cal_type%TYPE,
312         cp_ci_sequence_number                 igs_as_su_atmpt_itm.ci_sequence_number%TYPE,
313         cp_ass_id                             igs_as_su_atmpt_itm.ass_id%TYPE,
314         cp_uoo_id                             igs_en_su_attempt.uoo_id%TYPE
315       ) IS
316         SELECT suv.ass_id
317         FROM   igs_as_uai_sua_v suv
318         WHERE  suv.person_id = cp_person_id
319         AND    suv.course_cd = cp_course_cd
320         AND    suv.uoo_id = cp_uoo_id
321         AND    suv.ass_id = cp_ass_id
322         AND    suv.uai_dflt_item_ind = cst_yes
323         AND    suv.uai_logical_delete_dt IS NULL;
324       CURSOR c_uai (
325         cp_unit_cd                            igs_as_su_atmpt_itm.unit_cd%TYPE,
326         cp_version_number                     igs_as_unitass_item.version_number%TYPE,
327         cp_cal_type                           igs_as_su_atmpt_itm.cal_type%TYPE,
328         cp_ci_sequence_number                 igs_as_su_atmpt_itm.ci_sequence_number%TYPE
329       ) IS
330         SELECT DISTINCT ass_id,
331                         unit_ass_item_id,
332                         unit_ass_item_group_id,
333                         midterm_mandatory_type_code ,
334                         midterm_weight_qty ,
335                         final_mandatory_type_code ,
336                         final_weight_qty ,
337                         grading_schema_cd ,
338                         gs_version_number
339         FROM            igs_as_unitass_item
340         WHERE           unit_cd = cp_unit_cd
341         AND             version_number = cp_version_number
342         AND             cal_type = cp_cal_type
343         AND             ci_sequence_number = cp_ci_sequence_number
344         AND             dflt_item_ind = cst_yes
345 	AND		logical_delete_dt IS NULL;
346       v_suaai_rec      c_suaai%ROWTYPE;
347       v_uai_rec        c_uai%ROWTYPE;
348       v_suv_rec        c_suv%ROWTYPE;
349       l_ass_id      igs_as_su_atmpt_itm.unit_ass_item_id%TYPE;
350     BEGIN
351       -- Set the default message number
352       p_message_name := NULL;
353       OPEN cur_uoo_id;
354       FETCH cur_uoo_id INTO rec_uoo_id;
355       CLOSE cur_uoo_id;
356       SAVEPOINT sp_upd_suaai_dflt;
357       FOR v_suaai_rec IN c_suaai (
358                            p_person_id,
359                            p_course_cd,
360                            p_unit_cd,
361                            p_cal_type,
362                            p_ci_sequence_number,
363                            rec_uoo_id.uoo_id
364                          ) LOOP
365         -- Validate if the item still applies to the new unit offering.
366         -- If not, then logically delete it.
367         -- Select from the IGS_AS_UAI_SUA_V as this provides the current assessment items
368         -- that are applicable the the unit offering of the student unit attempt.
369         -- If the assessment item is found in the view, this means that the item still
370         -- applies to the student.
371         OPEN c_suv (
372           p_person_id,
373           p_course_cd,
374           p_unit_cd,
375           p_cal_type,
376           p_ci_sequence_number,
377           v_suaai_rec.ass_id,
378           rec_uoo_id.uoo_id
379         );
380         FETCH c_suv INTO v_suv_rec;
381         IF c_suv%NOTFOUND THEN
382           CLOSE c_suv;
383           -- Delete the record as it is no longer valid.
384           IF(v_suaai_rec.unit_section_ass_item_id IS NULL) THEN
385             l_ass_id := v_suaai_rec.unit_ass_item_id ;
386           ELSE
387            l_ass_id := v_suaai_rec.unit_section_ass_item_id ;
388           END IF;
389           IF igs_as_gen_001.assp_del_suaai_dflt (
390                p_person_id,
391                p_cal_type,
392                p_ci_sequence_number,
393                p_course_cd,
394                p_unit_cd,
395                v_suaai_rec.ass_id,
396                p_s_log_type,
397                p_key,
398                p_sle_key,
399                p_error_count,
400                p_warning_count,
401                v_message_name,
402                rec_uoo_id.uoo_id,
403                l_ass_id
404              ) = FALSE THEN
405             -- If a logical delete has failed, then a lock must exist
406             -- when attempting to update the logical_delete_dt
407             -- Issue a rollback to the savepoint issued at the start of processing.
408             ROLLBACK TO sp_upd_suaai_dflt;
409             p_message_name := v_message_name;
410             RETURN FALSE;
411           END IF;
412         ELSE
413           CLOSE c_suv;
414         END IF;
415       END LOOP;
416       -- Insert any default assessment items that do not already exist for the new
417       -- unit offering.
418       FOR v_uai_rec IN c_uai (p_unit_cd, p_version_number, p_cal_type, p_ci_sequence_number) LOOP
419         v_func_ret_flag :=
420             igs_as_gen_004.assp_ins_suaai_dflt (
421               p_person_id,
422               p_course_cd,
423               p_unit_cd,
424               p_version_number,
425               p_cal_type,
426               p_ci_sequence_number,
427               p_location_cd,
428               p_unit_class,
429               v_uai_rec.ass_id,
430               NULL,
431               'UNIT', -- Added by DDEY as a part of enhancement Bug # 2162831
432               NULL,
433               p_s_log_type,
434               p_key,
435               p_sle_key,
436               p_error_count,
437               p_warning_count,
438               v_message_name,
439               v_uai_rec.unit_ass_item_id ,
440               v_uai_rec.unit_ass_item_group_id,
441               v_uai_rec.midterm_mandatory_type_code,
442               v_uai_rec.midterm_weight_qty,
443               v_uai_rec.final_mandatory_type_code,
444               v_uai_rec.final_weight_qty,
445               v_uai_rec.grading_schema_cd,
446               v_uai_rec.gs_version_number,
447               p_uoo_id
448             );
449       END LOOP;
450       -- Return the default value
451       RETURN TRUE;
452     END;
453   EXCEPTION
454     WHEN OTHERS THEN
455       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
456       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_upd_suaai_dflt');
457       igs_ge_msg_stack.ADD;
458       app_exception.raise_exception;
459   END assp_upd_suaai_dflt;
460 
461   FUNCTION assp_upd_suaap_dflt (
462     p_person_id                    IN     NUMBER,
463     p_course_cd                    IN     VARCHAR2,
464     p_unit_cd                      IN     VARCHAR2,
465     p_cal_type                     IN     VARCHAR2,
466     p_ci_sequence_number           IN     NUMBER,
467     p_version_number               IN     NUMBER,
468     p_location_cd                  IN     VARCHAR2,
469     p_unit_class                   IN     VARCHAR2,
470     p_s_log_type                   IN     VARCHAR2,
471     p_key                          IN     VARCHAR2,
472     p_sle_key                      IN     VARCHAR2,
473     p_error_count                  IN OUT NOCOPY NUMBER,
474     p_warning_count                IN OUT NOCOPY NUMBER,
475     p_message_name                 OUT NOCOPY VARCHAR2
476   )
477     RETURN BOOLEAN IS
478   BEGIN
479     NULL;
480   END assp_upd_suaap_dflt;
481 
482   FUNCTION assp_upd_uai_action (
483     p_ass_id IN igs_as_unitass_item_all.ass_id%TYPE,
484     p_message_name OUT NOCOPY VARCHAR2
485   ) RETURN BOOLEAN IS
486     e_resource_busy EXCEPTION;
487     PRAGMA EXCEPTION_INIT (e_resource_busy,  -54);
488     CURSOR c_uai (cp_ass_id igs_as_unitass_item.ass_id%TYPE) IS
489       SELECT        uai.ass_id
490       FROM          igs_ca_stat cs,
491                     igs_ca_inst ci,
492                     igs_ps_unit_stat ust,
493                     igs_ps_unit_ver uv,
494                     igs_as_unitass_item uai
495       WHERE         cs.s_cal_status <> 'INACTIVE'
496       AND           ci.cal_status = cs.cal_status
497       AND           uai.ci_sequence_number = ci.sequence_number
498       AND           uai.cal_type = ci.cal_type
499       AND           ust.s_unit_status <> 'INACTIVE'
500       AND           uv.unit_status = ust.unit_status
501       AND           uai.version_number = uv.version_number
502       AND           uai.unit_cd = uv.unit_cd
503       AND           uai.ass_id = cp_ass_id
504       AND           uai.logical_delete_dt IS NULL
505       AND           uai.action_dt IS NULL
506       FOR UPDATE OF uai.action_dt NOWAIT;
507     v_sysdate       DATE;
508     v_record_found  BOOLEAN;
509     v_other_detail  VARCHAR2 (255);
510   BEGIN
511     -- This module updates the action date for all unit assessment items
512     -- for a particular assessment item when the latter has had a course
513     -- type (restriction) record added or deleted.
514     -- If a lock is encountered at any time, then the transaction is
515     -- rolled back.
516     p_message_name := NULL;
517     v_sysdate := SYSDATE;
518     v_record_found := FALSE;
519     FOR v_uai_rec IN c_uai (p_ass_id) LOOP
520       v_record_found := TRUE;
521       UPDATE igs_as_unitass_item uai
522          SET uai.action_dt = v_sysdate
523        WHERE  CURRENT OF c_uai;
524     END LOOP;
525     RETURN TRUE;
526   EXCEPTION
527     WHEN e_resource_busy THEN
528       -- rollback any student_unit_attempts updated
529       p_message_name := 'IGS_AS_UAI_ASSITEM_NOUPD';
530       RETURN FALSE;
531     WHEN OTHERS THEN
532       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
533       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_upd_uai_action');
534       igs_ge_msg_stack.ADD;
535       app_exception.raise_exception;
536   END assp_upd_uai_action;
537 
538   FUNCTION assp_upd_uap_uoo (
539     p_unit_cd                      IN     VARCHAR2,
540     p_version_number               IN     NUMBER,
541     p_cal_type                     IN     VARCHAR2,
542     p_ci_sequence_number           IN     NUMBER,
543     p_ass_pattern_id               IN     NUMBER,
544     p_location_cd                  IN     VARCHAR2,
545     p_unit_class                   IN     VARCHAR2,
546     p_unit_mode                    IN     VARCHAR2,
547     p_call_by_db_trg               IN     VARCHAR2 DEFAULT 'N',
548     p_message_name                 OUT NOCOPY VARCHAR2
549   ) RETURN BOOLEAN IS
550   BEGIN
551     RETURN FALSE;
552   END assp_upd_uap_uoo;
553 
554   FUNCTION assp_val_sca_comm (
555     p_person_id                    IN     NUMBER,
556     p_course_cd                    IN     VARCHAR2,
557     p_include_fail_grade_ind       IN     VARCHAR2 DEFAULT 'N',
558     p_enrolled_units_ind           IN     VARCHAR2 DEFAULT 'C',
559     p_exclude_research_units_ind   IN     VARCHAR2 DEFAULT 'N',
560     p_exclude_unit_category        IN     VARCHAR2,
561     p_include_related_crs_ind      IN     VARCHAR2 DEFAULT 'N'
562   ) RETURN VARCHAR2 IS
563     gv_other_detail VARCHAR2 (255);
564   BEGIN -- assp_val_sca_comm
565     -- This module retrieves the latest year in the IGS_PE_PERSON has enrolment
566     -- in the course.
567     DECLARE
568       v_min_year VARCHAR2 (10);
569       CURSOR c_sca IS
570          SELECT MIN
571           (SUBSTR
572                 (igs_en_gen_014.enrs_get_acad_alt_cd (suav.cal_type,
573                                                       suav.ci_sequence_number
574                                                      ),
575                  1,
576                  10
577                 )
578           )
579   FROM igs_en_stdnt_ps_att sca,
580        igs_en_su_attempt suav,
581        igs_ps_ofr_pat cop,
582        igs_ca_inst ci
583  WHERE sca.person_id = p_person_id
584    AND sca.course_cd = p_course_cd
585    AND sca.person_id = suav.person_id
586    AND sca.course_cd = suav.course_cd
587    AND EXISTS (
588           SELECT 'X'
589             FROM igs_en_su_attempt sua
590            WHERE sua.person_id = suav.person_id
591              AND sua.course_cd = suav.course_cd
592              AND sua.uoo_id = suav.uoo_id
593              AND igs_as_gen_001.assp_val_sua_display
594                                               (sua.person_id,
595                                                sua.course_cd,
596                                                sca.version_number,
597                                                sua.unit_cd,
598                                                sua.cal_type,
599                                                sua.ci_sequence_number,
600                                                sua.unit_attempt_status,
601                                                sua.administrative_unit_status,
602                                                'Y',
603                                                p_include_fail_grade_ind,
604                                                p_enrolled_units_ind,
605                                                p_exclude_research_units_ind,
606                                                p_exclude_unit_category,
607                                                sua.uoo_id
608                                               ) = 'Y')
609    AND sca.coo_id = cop.coo_id
610    AND sca.location_cd = cop.location_cd
611    AND sca.attendance_mode = cop.attendance_mode
612    AND sca.attendance_type = cop.attendance_type
613    AND cop.cal_type = ci.cal_type
614    AND cop.ci_sequence_number = ci.sequence_number
615    AND igs_en_gen_014.enrs_get_within_ci (cop.cal_type,
616                                           cop.ci_sequence_number,
617                                           suav.cal_type,
618                                           suav.ci_sequence_number,
619                                           'Y'
620                                          ) = 'Y';
621 
622     BEGIN
623       -- Determine the latest year in which the IGS_PE_PERSON has active enrolment.
624       v_min_year := NULL;
625       OPEN c_sca;
626       FETCH c_sca INTO v_min_year;
627       IF c_sca%NOTFOUND THEN
628         CLOSE c_sca;
629       END IF;
630       CLOSE c_sca;
631       RETURN v_min_year;
632     EXCEPTION
633       WHEN OTHERS THEN
634         IF c_sca%ISOPEN THEN
635           CLOSE c_sca;
636         END IF;
637         RAISE;
638     END;
639   EXCEPTION
640     WHEN OTHERS THEN
641       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
642       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_val_sca_comm');
643       igs_ge_msg_stack.ADD;
644       app_exception.raise_exception;
645   END assp_val_sca_comm;
646 
647   FUNCTION assp_val_sca_final (
648     p_person_id                    IN     NUMBER,
649     p_course_cd                    IN     VARCHAR2,
650     p_include_fail_grade_ind       IN     VARCHAR2 DEFAULT 'N',
651     p_enrolled_units_ind           IN     VARCHAR2 DEFAULT 'C',
652     p_exclude_research_units_ind   IN     VARCHAR2 DEFAULT 'N',
653     p_exclude_unit_category        IN     VARCHAR2,
654     p_include_related_crs_ind      IN     VARCHAR2 DEFAULT 'N'
655   ) RETURN VARCHAR2 IS
656     gv_other_detail VARCHAR2 (255);
657   BEGIN -- assp_val_sca_final
658     -- This module retrieves the latest year in the IGS_PE_PERSON has enrolment
659     -- in the course.
660     DECLARE
661       v_max_year VARCHAR2 (10);
662       CURSOR c_sca IS
663         SELECT MAX (SUBSTR (igs_en_gen_014.enrs_get_acad_alt_cd (suav.cal_type, suav.ci_sequence_number), 1, 10)) acad_alternate_code
664         FROM   igs_en_stdnt_ps_att sca,
665                igs_en_su_attempt suav,
666                igs_ps_ofr_pat cop,
667                igs_ca_inst ci
668         WHERE  sca.person_id = p_person_id
669         AND    sca.course_cd = p_course_cd
670         AND    sca.person_id = suav.person_id
671         AND    sca.course_cd = suav.course_cd
672         AND    EXISTS ( SELECT 'X'
673                         FROM   igs_en_su_attempt sua
674                         WHERE  sua.person_id = suav.person_id
675                         AND    sua.course_cd = suav.course_cd
676                         AND    sua.uoo_id = suav.uoo_id
677                         AND    igs_as_gen_001.assp_val_sua_display (
678                                  sua.person_id,
679                                  sua.course_cd,
680                                  sca.version_number,
681                                  sua.unit_cd,
682                                  sua.cal_type,
683                                  sua.ci_sequence_number,
684                                  sua.unit_attempt_status,
685                                  sua.administrative_unit_status,
686                                  'Y',
687                                  p_include_fail_grade_ind,
688                                  p_enrolled_units_ind,
689                                  p_exclude_research_units_ind,
690                                  p_exclude_unit_category,
691                                  sua.uoo_id
692                                ) = 'Y')
693         AND    sca.coo_id = cop.coo_id
694         AND    sca.location_cd = cop.location_cd
695         AND    sca.attendance_mode = cop.attendance_mode
696         AND    sca.attendance_type = cop.attendance_type
697         AND    cop.cal_type = ci.cal_type
698         AND    cop.ci_sequence_number = ci.sequence_number
699         AND    igs_en_gen_014.enrs_get_within_ci (
700                  cop.cal_type,
701                  cop.ci_sequence_number,
702                  suav.cal_type,
703                  suav.ci_sequence_number,
704                  'Y'
705                ) = 'Y';
706     BEGIN
707       -- Determine the latest year in which the IGS_PE_PERSON has active enrolment.
708       v_max_year := NULL;
709       OPEN c_sca;
710       FETCH c_sca INTO v_max_year;
711       IF c_sca%NOTFOUND THEN
712         CLOSE c_sca;
713       END IF;
714       CLOSE c_sca;
715       RETURN v_max_year;
716     EXCEPTION
717       WHEN OTHERS THEN
718         IF c_sca%ISOPEN THEN
719           CLOSE c_sca;
720         END IF;
721         RAISE;
722     END;
723   END assp_val_sca_final;
724 
725   FUNCTION assp_mnt_suaai_uai (
726     p_unit_cd                      IN     VARCHAR2,
727     p_version_number               IN     NUMBER,
728     p_cal_type                     IN     VARCHAR2,
729     p_ci_sequence_number           IN     NUMBER,
730     p_ass_id                       IN     NUMBER,
731     p_location_cd                  IN     VARCHAR2,
732     p_unit_class                   IN     VARCHAR2,
733     p_unit_mode                    IN     VARCHAR2,
734     p_s_log_type                   IN     VARCHAR2,
735     p_key                          IN     VARCHAR2,
736     p_sle_key                      IN OUT NOCOPY VARCHAR2,
737     p_error_count                  IN OUT NOCOPY NUMBER,
738     p_warning_count                IN OUT NOCOPY NUMBER,
739     p_message_name                 OUT NOCOPY VARCHAR2,
740     p_ass_id_usec_unit_ind         IN     VARCHAR2 DEFAULT 'UNIT',
741     p_ass_item_id                  IN NUMBER ,
742     p_group_id                     IN NUMBER,
743     p_midterm_mandatory_type_code IN VARCHAR2,
744     p_midterm_weight_qty IN NUMBER ,
745     p_final_mandatory_type_code IN VARCHAR2,
746     p_final_weight_qty IN NUMBER,
747     p_grading_schema_cd IN VARCHAR2,
748     p_gs_version_number  IN NUMBER ,
749     p_uoo_id IN NUMBER
750   ) RETURN BOOLEAN IS
751     gv_other_detail VARCHAR2 (255);
752   BEGIN -- assp_mnt_suaai_uai
753     -- This routine is called from the process that determines if changes have
754     -- been made to unit_assessment_items and applies them to the
755     -- stdnt_unit_atmpt_ass_items.
756     -- This routine will determine if the IGS_AS_SU_ATMPT_ITM is
757     -- still valid for the student. The IGS_AS_UNITASS_ITEM may have been
758     -- updated and for example the location code may have been altered from
759     -- GEELONG to BURWOOD, making the assessment item for the GEELONG student
760     -- no longer valid. In such a case it will logically delete the assessment
761     -- item.
762     -- This routine will also insert items that may not already exist. To continue
763     -- on with the above example of the location code being updated, the student
764     -- who is studying the unit at BURWOOD, now will need to have the assessment
765     -- item allocated to them.
766     DECLARE
767       cst_enrolled CONSTANT VARCHAR2 (8)           := 'ENROLLED';
768       --
769       -- Get the Unit Section Identifier
770       --
771       CURSOR cur_uoo_id IS
772         SELECT uoo_id
773         FROM   igs_ps_unit_ofr_opt
774         WHERE  unit_cd = p_unit_cd
775         AND    version_number = p_version_number
776         AND    cal_type = p_cal_type
777         AND    ci_sequence_number = p_ci_sequence_number;
778       --
779       --
780       --
781       CURSOR c_sua  IS
782         SELECT sua.person_id,
783                sua.course_cd,
784                sua.location_cd,
785                sua.unit_class,
786                uc.unit_mode,
787                sua.uoo_id
788         FROM   igs_en_su_attempt_all sua,
789                igs_as_unit_class uc
790         WHERE  sua.uoo_id = NVL(p_uoo_id,sua.uoo_id) AND
791                sua.unit_cd = p_unit_cd
792         AND    sua.cal_type = p_cal_type
793         AND    sua.ci_sequence_number = p_ci_sequence_number
794         AND    sua.version_number = p_version_number
795         AND    sua.unit_attempt_status = cst_enrolled
796         AND    uc.unit_class = sua.unit_class
797         AND    uc.closed_ind = 'N'
798         AND    sua.unit_attempt_status IN ('ENROLLED', 'UNCONFIRM', 'WAITLISTED');
799       --
800       --
801       --
802       CURSOR cur_suaai_usec_exists (
803                cp_person_id NUMBER,
804                cp_course_cd VARCHAR2,
805                cp_uoo_id    NUMBER
806              ) IS
807         SELECT 'X'
808         FROM   igs_as_su_atmpt_itm
809         WHERE  person_id = cp_person_id
810         AND    course_cd = cp_course_cd
811         AND    uoo_id = cp_uoo_id
812         AND    unit_section_ass_item_id IS NOT NULL
813         AND    ROWNUM = 1;
814       --
815       rec_suaai_usec_exists cur_suaai_usec_exists%ROWTYPE;
816       v_message_name        VARCHAR2 (30);
817       v_valid_ass_item      BOOLEAN;
818       CURSOR cur_as_prg_type (cp_ass_id IN NUMBER) IS
819         SELECT 'X' record_exists
820         FROM   igs_as_course_type_all
821         WHERE  ass_id = cp_ass_id;
822       rec_as_prg_type cur_as_prg_type%ROWTYPE;
823     BEGIN
824       -- For unit testing, it will be necessary to set p_s_log_type = 'ASS3213',
825       -- other parameters can be whatever.
826       -- Also, use IGS_GE_INS_SLE.genp_set_log_cntr to initialise the logging structure
827       -- at the start of the module, otherwise you may get a value or numeric error
828       -- when attempting to test this module.
829       -- If wanting to view log entries, at the end of the module will need to call
830       -- IGS_GE_INS_SLE.genp_ins_sle(SYSDATE) to insert into IGS_GE_S_LOG_ENTRY table any
831       -- exceptions raised by the modules called. (NOTE: Not necessary to test for
832       -- logged records as this will be tested in the unit test of the called
833       -- module.)
834       -- Set the default message number
835       p_message_name := NULL;
836       -- Issue a save point for the module so that if locks exist, a rollback can
837       -- be performed.
838       SAVEPOINT sp_suaai_uai;
839       -- Select the students who have been allocated this assessment item
840       -- and validate that it still applies to them.
841       OPEN cur_as_prg_type (p_ass_id);
842       FETCH cur_as_prg_type INTO rec_as_prg_type;
843       IF (cur_as_prg_type%FOUND) THEN
844         CLOSE cur_as_prg_type;
845         --
846         UPDATE igs_as_su_atmpt_itm suaai
847         SET    suaai.logical_delete_dt = SYSDATE,
848                suaai.last_update_date = SYSDATE,
849                suaai.last_updated_by = fnd_global.user_id,
850                suaai.last_update_login = fnd_global.login_id,
851                suaai.request_id = fnd_global.conc_request_id,
852                suaai.program_id = fnd_global.conc_program_id,
853                suaai.program_application_id = fnd_global.prog_appl_id,
854                suaai.program_update_date = SYSDATE
855         WHERE  suaai.unit_cd = p_unit_cd
856         AND    suaai.cal_type = p_cal_type
857         AND    suaai.ci_sequence_number = p_ci_sequence_number
858         AND    suaai.ass_id = p_ass_id
859         AND    suaai.logical_delete_dt IS NULL
860         AND    (suaai.unit_section_ass_item_id  = p_ass_item_id
861         OR      suaai.unit_ass_item_id = p_ass_item_id)
862         AND    suaai.attempt_number = (
863                  SELECT MAX (suaai2.attempt_number)
864                  FROM   igs_as_su_atmpt_itm suaai2
865                  WHERE  suaai2.person_id = suaai.person_id
866                  AND    suaai2.course_cd = suaai.course_cd
867                  AND    suaai2.uoo_id = suaai.uoo_id
868                  AND    suaai2.ass_id = suaai.ass_id
869                  AND    (suaai2.unit_section_ass_item_id  = suaai.unit_section_ass_item_id
870                  OR      suaai2.unit_ass_item_id = suaai.unit_ass_item_id))
871         AND    EXISTS (
872                  SELECT 'X'
873                  FROM   igs_en_su_attempt_all sua,
874                         igs_en_stdnt_ps_att sca,
875                         igs_ps_ver crv
876                  WHERE  suaai.person_id = sua.person_id
877                  AND    suaai.course_cd = sua.course_cd
878                  AND    suaai.uoo_id = sua.uoo_id
879                  AND    sua.person_id = sca.person_id
880                  AND    sua.course_cd = sca.course_cd
881                  AND    sca.course_cd = crv.course_cd
882                  AND    sca.version_number = crv.version_number
883                  AND    sua.unit_attempt_status IN ('ENROLLED', 'UNCONFIRM', 'WAITLISTED')
884                  AND    EXISTS (
885                           SELECT 'X'
886                           FROM   igs_as_course_type_all act
887                           WHERE  act.course_type <> crv.course_type
888                           AND    act.ass_id = suaai.ass_id
889                         ));
890           p_warning_count := SQL%ROWCOUNT;
891           IF (p_warning_count > 0) THEN
892             igs_ge_ins_sle.genp_set_log_entry (
893               p_s_log_type,
894               p_key,
895               p_sle_key,
896               v_message_name,
897               'WARNING|ITEM||' || TO_CHAR (p_ass_id)
898             );
899           END IF;
900         ELSE
901           CLOSE cur_as_prg_type;
902         END IF;
903         -- Select all students within the IGS_PS_UNIT, IGS_AD_LOCATION, IGS_AS_UNIT_MODE, IGS_AS_UNIT_CLASS and
904         -- attempt to add the assessment item via the module call. Ignore any message
905         -- if fails to insert, as it will mean the student already has the item or is
906         -- not suppose to have it anyway.The student must be ENROLLED within the unit.
907         FOR v_sua_rec IN c_sua LOOP
908           p_sle_key :=    'ITEM|'
909                        || TO_CHAR (p_ass_id)
910                        || '|'
911                        || TO_CHAR (v_sua_rec.person_id)
912                        || '|'
913                        || v_sua_rec.course_cd
914                        || '|'
915                        || p_unit_cd
916                        || '|'
917                        || TO_CHAR (p_version_number)
918                        || '|'
919                        || p_cal_type
920                        || '|'
921                        || TO_CHAR (p_ci_sequence_number);
922           -- to check if the assessment item passed is setup at section level then
923           -- associate teh assessment item with the student if not already associated
924           -- added as a part of bug 2162831
925           IF p_ass_id_usec_unit_ind = 'USEC' THEN
926             IF NOT igs_as_gen_004.assp_ins_suaai_dflt (
927                      v_sua_rec.person_id,
928                      v_sua_rec.course_cd,
929                      p_unit_cd,
930                      p_version_number,
931                      p_cal_type,
932                      p_ci_sequence_number,
933                      v_sua_rec.location_cd,
934                      v_sua_rec.unit_class,
935                      p_ass_id,
936                      NULL,
937                      p_ass_id_usec_unit_ind, -- Added by DDEY as a part of enhancement Bug # 2162831
938                      NULL, -- No log creation date.
939                      p_s_log_type,
940                      p_key,
941                      p_sle_key,
942                      p_error_count,
943                      p_warning_count,
944                      v_message_name,
945                      p_ass_item_id,
946                      p_group_id,
947                      p_midterm_mandatory_type_code,
948                      p_midterm_weight_qty,
949                      p_final_mandatory_type_code,
950                      p_final_weight_qty,
951                      p_grading_schema_cd,
952                      p_gs_version_number,
953                      v_sua_rec.uoo_id
954                    ) THEN
955               -- Do nothing as will have failed to create the default due
956               -- to student having the item already or it may not be valid
957               -- for the unit offering that the student is attempting.
958               -- No locking will occur as not processing a pattern.
959               NULL;
960             END IF;
961           ELSIF p_ass_id_usec_unit_ind = 'UNIT' THEN
962             --IF the assessment item passed is present at unit offering level then check if the assessment
963             --item st up is presetn at nit section level
964             --IF yes then need not associate the item with the student.else call the procedure to associate
965             -- the code has been added as a part of bug number 2162831
966             --
967             -- Skip this Unit Assessment Item as Student already has Assessment Items
968             -- attached from Unit Section Level
969             --
970             OPEN cur_suaai_usec_exists (
971                    v_sua_rec.person_id,
972                    v_sua_rec.course_cd,
973                    v_sua_rec.uoo_id
974                  );
975             FETCH cur_suaai_usec_exists INTO rec_suaai_usec_exists;
976             IF (cur_suaai_usec_exists%NOTFOUND) THEN
977               CLOSE cur_suaai_usec_exists;
978               IF NOT igs_as_gen_004.assp_ins_suaai_dflt (
979                      v_sua_rec.person_id,
980                      v_sua_rec.course_cd,
981                      p_unit_cd,
982                      p_version_number,
983                      p_cal_type,
984                      p_ci_sequence_number,
985                      v_sua_rec.location_cd,
986                      v_sua_rec.unit_class,
987                      p_ass_id,
988                      NULL, -- No assessment pattern.
989                      'UNIT', -- Added by DDEY as a part of enhancement Bug # 2162831
990                      NULL, -- No log creation date.
991                      p_s_log_type,
992                      p_key,
993                      p_sle_key,
994                      p_error_count,
995                      p_warning_count,
996                      v_message_name ,
997                      p_ass_item_id ,
998                      p_group_id,
999                      p_midterm_mandatory_type_code,
1000                      p_midterm_weight_qty,
1001                      p_final_mandatory_type_code,
1002                      p_final_weight_qty,
1003                      p_grading_schema_cd,
1004                      p_gs_version_number,
1005                      v_sua_rec.uoo_id
1006                    ) THEN
1007               -- Do nothing as will have failed to create the default due
1008               -- to student having the item already or it may not be valid
1009               -- for the unit offering that the student is attempting.
1010               -- No locking will occur as not processing a pattern.
1011               NULL;
1012               END IF;
1013             ELSE
1014               CLOSE cur_suaai_usec_exists;
1015             END IF;
1016           END IF;
1017         END LOOP;
1018       -- Return the default value
1019       RETURN TRUE;
1020     EXCEPTION
1021       WHEN OTHERS THEN
1022         IF c_sua%ISOPEN THEN
1023           CLOSE c_sua;
1024         END IF;
1025         RAISE;
1026     END;
1027   EXCEPTION
1028     WHEN OTHERS THEN
1029       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
1030       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_mnt_suaai_uai');
1031       igs_ge_msg_stack.ADD;
1032       app_exception.raise_exception;
1033   END assp_mnt_suaai_uai;
1034 
1035   FUNCTION assp_upd_usec_suaai_dflt (
1036     p_person_id                    IN     NUMBER,
1037     p_course_cd                    IN     VARCHAR2,
1038     p_unit_cd                      IN     VARCHAR2,
1039     p_version_number               IN     NUMBER,
1040     p_cal_type                     IN     VARCHAR2,
1041     p_ci_sequence_number           IN     NUMBER,
1042     p_location_cd                  IN     VARCHAR2,
1043     p_unit_class                   IN     VARCHAR2,
1044     p_uoo_id                       IN     NUMBER,
1045     p_s_log_type                   IN     VARCHAR2,
1046     p_key                          IN     VARCHAR2,
1047     p_sle_key                      IN     VARCHAR2,
1048     p_error_count                  IN OUT NOCOPY NUMBER,
1049     p_warning_count                IN OUT NOCOPY NUMBER,
1050     p_message_name                 OUT NOCOPY VARCHAR2
1051   ) RETURN BOOLEAN IS
1052     /***********************************************************************************************
1053     Created By:         Deepankar Dey
1054     Date Created By:    15-01-2002
1055     Purpose:        This function will perform a routine that will check if assessment items still
1056                     apply to the students new unit offering option or if they should be logically
1057                     deleted and default items assigned for the new unit offering option. This
1058                     routine will return false and rollback any alteration if a lock exists when
1059                     attempting to logically delete an assessment item.
1060     Known limitations,enhancements,remarks:
1061     Change History
1062     Who        When        What
1063     DDEY as a part of enhancement Bug # 2162831
1064     ********************************************************************************************** */
1065     --
1066     cst_yes               VARCHAR2 (1);
1067     l_should_return_false BOOLEAN;
1068     l_message_name        VARCHAR2 (30);
1069     --
1070     -- Get the default Assessment Items setup at Unit Section level
1071     --
1072     CURSOR c_ass_setup IS
1073     SELECT suv.ass_id, unit_section_ass_item_id, us_ass_item_group_id,
1074            midterm_mandatory_type_code, midterm_weight_qty,
1075            final_mandatory_type_code, final_weight_qty, grading_schema_cd,
1076            gs_version_number
1077      FROM igs_ps_unitass_item suv
1078      WHERE suv.uoo_id = p_uoo_id
1079      AND suv.dflt_item_ind = cst_yes
1080      AND suv.logical_delete_dt IS NULL;
1081 
1082     --
1083   BEGIN
1084     --
1085     -- Initialise IN OUT parameters if NULL
1086     --
1087    cst_yes := 'Y';
1088     p_error_count := NVL (p_error_count, 0);
1089     p_warning_count := NVL (p_warning_count, 0);
1090     p_message_name := NULL;
1091     --
1092     -- Issue a save point for the module so that if locks exist, a rollback can
1093     -- be performed.
1094     --
1095     SAVEPOINT assp_upd_usec_suaai_dflt_sp;
1096     --
1097     l_should_return_false := FALSE;
1098     --
1099     FOR ass_setup_rec IN c_ass_setup LOOP
1100       --
1101       -- Allocate the Default Unit Section Assessment Item against the student.
1102       --
1103       IF igs_as_gen_004.assp_ins_suaai_dflt (
1104            p_person_id,
1105            p_course_cd,
1106            p_unit_cd,
1107            p_version_number,
1108            p_cal_type,
1109            p_ci_sequence_number,
1110            p_location_cd,
1111            p_unit_class,
1112            ass_setup_rec.ass_id,
1113            NULL,
1114            'USEC', -- Added by DDEY as a part of enhancement Bug # 2162831
1115            NULL,
1116            p_s_log_type,
1117            p_key,
1118            p_sle_key,
1119            p_error_count,
1120            p_warning_count,
1121            l_message_name,
1122            ass_setup_rec.unit_section_ass_item_id,
1123            ass_setup_rec.us_ass_item_group_id,
1124            ass_setup_rec.midterm_mandatory_type_code,
1125            ass_setup_rec.midterm_weight_qty,
1126            ass_setup_rec.final_mandatory_type_code,
1127            ass_setup_rec.final_weight_qty,
1128            ass_setup_rec.grading_schema_cd,
1129            ass_setup_rec.gs_version_number,
1130            p_uoo_id
1131          ) = FALSE THEN
1132         IF (l_message_name = 'IGS_AS_UNABLE_TOUPD_SUA') THEN
1133           --
1134           -- If locking error occurs, return false.
1135           --
1136           l_should_return_false := TRUE;
1137           --
1138           -- This message was changed as the message specified in the called
1139           -- function would not be appropriate. This is because, an assessment
1140           -- item cannot be attached to an assessment pattern at unit section level.
1141           --
1142           p_message_name := 'IGS_AS_UNABLE_TOUPD_SUS';
1143           EXIT;
1144         END IF;
1145       END IF;
1146     END LOOP;
1147     --
1148     IF l_should_return_false THEN
1149       RETURN FALSE;
1150     END IF;
1151     --
1152     RETURN TRUE;
1153     --
1154   EXCEPTION
1155     WHEN OTHERS THEN
1156       IF c_ass_setup%ISOPEN THEN
1157         CLOSE c_ass_setup;
1158       END IF;
1159       fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
1160       fnd_message.set_token ('NAME', 'IGS_AS_GEN_005.assp_upd_usec_suaai_dflt');
1161       igs_ge_msg_stack.ADD;
1162       app_exception.raise_exception;
1163   END assp_upd_usec_suaai_dflt;
1164 END igs_as_gen_005;