[Home] [Help]
PACKAGE BODY: APPS.IGS_EN_GEN_011
Source
1 PACKAGE BODY IGS_EN_GEN_011 AS
2 /* $Header: IGSEN11B.pls 120.14 2006/05/02 23:52:34 ckasu ship $ */
3 ------------------------------------------------------------------
4 --Created by : knaraset, Oracle IDC
5 --Date created:
6 --
7 --Purpose:
8 --
9 --Known limitations/enhancements and/or remarks:
10 --
11 --Change History:
12 --Who When What
13 --ckasu 17-MAR-2006 Modified Enrp_Prc_Sua_Blk_E_D procedure inorder to pass p_no_assessment_ind in call to
14 -- igs_ss_en_wrappers.insert_into_enr_worksheet as part of Bug 4590889.
15 --rvangala 12-AUG-2005 Bug #4551013. EN320 Build
16 --jtmathew 18-Jan-2005 Modified procedure enrpl_upd_sca_coo for HE350 changes
17 --jtmathew 05-Nov-2004 Modified procedure enrpl_upd_sca_coo to update associated HESA records when
18 -- running the 'Bulk Program Offering Option Transfer Process' as per bug 3985220
19 --ckasu 13-Sep-2004 Modified Enrp_Prc_Sua_Blk_E_D procedure inorder to consider Person step validations in
20 -- Discontinuing and Droping units as part of Bug 3823810.
21 --vkarthik 31-Aug-2004 Deny all hold validation added to bulk enrollment/discontinuation job as part of Bug 3823810
22 -- ckasu 05-Apr-2004 Modified IGS_EN_STDNT_PS_ATT_Pkg.update_Row procedure
23 -- call as a part of bug 3544927.
24
25 --rvangala 13-Feb-2004 Bug 3433542. Modified Cursor c_sua in enrp_prc_sua_blk_trn to ensure that students with end_date
26 -- prior to sysdate are not processed
27 --rvivekan 1-dec-2003 Bug 3264064 . Changed the message_token to varchar2(2000) for the enrp_val_discont_aus call.
28 --rvivekan 22-oct-2003 Placements build#3052438. Added code to sort the usecs based on relation_type. Also added handling
29 -- to enroll subordinates when a superior is enrolled and to drop subordinates when a superior is dropped
30 -- in bulk unit e/d and in bulk unit section transfer.
31 --ptandon 06-Oct-2003 Modified the Procedure Enrp_Prc_Sua_Blk_E_D as part of Prevent Dropping Core Units. Enh Bug# 3052432.
32 -- rvivekan 3-Aug-2003 Added new parameters to ofr_enrollment_or_waitlist as a part of Bulk Unit Upload Bug#3049009
33 -- rvivekan 11-Jul-2003 Added code to set the invoke source apropriately in Enrp_Prc_Sua_Blk_E_D and Enrp_prc_sua_blk_trn Bug 3036949
34 --ptandon 03-07-2003 Modified the Procedure Enrp_Prc_Sua_Blk_E_D as per Bug# 3036433
35 --svanukur 26-jun-2003 Passing discontinued date with a nvl substitution of sysdate in the call to the update_row api of
36 -- ig_en_su_attmept in case of a "dropped" unit attempt status as part of bug 2898213.
37 -- knaraset 19-Jun-2003 Modified enrp_prc_sua_blk_trn as per Build ENCR035 - MUS bulk Unit section transfer, bug 2956146
38 -- svenkata 3-Jun-2003 The function ENRP_VAL_COO_CROSS has been removed. All references to this API is removed. Bug# 2829272
39 -- sarakshi 27-Feb-2003 Enh#2797116,modified the procedure enrpl_upd_sca_coo ,added delete_flag check in the where clause
40 -- of the cursor c_coo
41 --ssawhney 17-feb-2003 Bug : 2758856 : Added the parameter x_external_reference in the call to IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW
42 -- amuthu 27-Jan-2003 Bug# 2750538 changed p_deny_warn_att to NVL(p_deny_warn_att,l_notification_flag)
43 -- in the call to igs_en_elgbl_program.eval_unit_forced_type
44 -- svenkata 7-Jan-2003 Bug#2737263 - Modifications made in enrp_prc_sua_blk_trn to get the Att Typ of the
45 -- Program before the unit is transferred.
46 -- pradhakr 30-Dec-2002 Modified the logic to check the Grading Schema while transfering Unit Sections.
47 -- Changes as per bug# 2715516.
48 -- svenkata 22-Dec-02 Bug # 2686793 - Added a call to routine igs_en_elgbl_program.eval_unit_forced_type to enforce
49 -- to enforce Attendance Type validations on transferring.Modifications made in enrp_prc_sua_blk_trn.
50 -- pradhakr 15-Dec-2002 Changed the call to the update_row and update_row of
51 -- igs_en_su_attempt table to igs_en_sua_api.update_unit_attempt
52 -- and igs_en_sua_api.create_unit_attempt. Changes wrt ENCR031 build.
53 -- Bug#2643207
54 --samaresh 02-DEC-2001 Bug # 2097333 : Impact of addition of the waitlist_status field to igs_ad_ps_appl_inst_all
55 -- To the function Enrp_Upd_Acai_Accept
56 --pradhakr 12/07/2001 Added one parameter p_dcnt_reason_cd in
57 -- the procedure Enrp_prc_sua_enr_ds as part
58 -- of Enrollment build (Bug # 1832130 )
59 --smaddali 1-08-2001 Modified calls to igs_en_su_attempt and
60 -- igs_en_stdnt_ps_att and enrp_get_var_window
61 -- and enrp_get_rec_window , added new columns(Bug # 1832130 )
62 --Bayadav 5-sep-2001 Added refernces to column ORG_UNIT_CD incall to
63 -- IGS_EN_SU_ATTEMPT TBH call as a part of bug 1964697
64 --nalkumar 5-OCT-2001 Modified the IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW call.
65 -- Added four new parameters to call it as per the Bug# 2027984.
66 --Aiyer 10-Oct-2001 Added the column grading schema in all Tbh calls of IGS_EN_SU_ATTEMPT_PKG as a part of the bug 2037897.
67 --nalkumar 21-NOV-2001 Modified the IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW call.
68 -- Added key program parameter to call it as per the Bug# 2027984.
69 --pradhakr 07-Dec-2001 Added the column deg_aud_detail_id in the
70 -- TBH calls as part of Degree Audit Interface build.
71 -- (Bug# 2033208)
72 --svenkata 20-Dec-2001 Added the columns Student_career_transcrit , Student_career_statistics as part of Career Impact
73 -- Part 2 build . Bug #2158626
74 -- svenkata 7-JAN-2002 Bug No. 2172405 Standard Flex Field columns have been added
75 -- to table handler procedure calls as part of CCR - ENCR022.
76 --Nishikant 30-jan-2002 Added the column session_id in the Tbh calls of IGS_EN_SU_ATTEMPT_PKG
77 -- as a part of the bug 2172380.
78 --cdcruz 18-feb-2002 Bug 2217104 Admit to future term Enhancement,updated tbh call for
79 -- new columns being added to IGS_AD_PS_APPL_INST
80 --cdcruz 21-feb-2002 Bug 2231567 Message cleanup activity
81 --nshee 29-Aug-2002 Bug 2395510 added 6 columns in IGS_AD_PS_APPL_INST as part of deferments build
82 --mesriniv 18-sep-2002 Added a new parameter waitlist_manual_ind in TBH calls of IGS_EN_SU_ATTEMPT
83 -- for Bug 2554109 MINI Waitlist Build for Jan 03 Release
84 --pkpatel 3-OCT-2002 Bug No: 2600842
85 -- Added the parameter x_auth_resp_id in the call to IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW in the procedure Enrp_Set_Pen_Expry
86 -- Added the expiry date synchronization logic for table IGS_PE_FUND_EXCL in the procedure Enrp_Set_Pee_Expry
87 --ssawhney 09-10-2002 Added the parameter x_auth_resp_id in the call to IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW in the procedure Enrp_Set_Pen_Expry
88 -- Added the expiry date synchronization logic for new table IGS_PE_FUND_EXCL in the procedure Enrp_Set_Pee_Expry
89 --kkillams 03-10-2002 1)Three New p_unit_loc_cd, p_unit_class,p_reason parameters are added to Enrp_Prc_Sua_Blk_E_D procedure.
90 -- 2)Three New p_enforce_val,p_enroll_method,p_reason parameters are added to Enrp_Prc_Sua_Blk_Trn procedure.
91 -- w.r.t. build Drop Trasfer workflow notification(Bug no: 2599925)
92 --svenkata 28-10-2002 Added new parameters to the call of fn eval_min_cp . Enrollment Eligibility and Valdns build - Bug# 2616692.
93 -- Changed the signature of the routine enrpl_upd_sua_uoo to pass details of academic calendar.
94 --Nishikant 01NOV2002 SEVIS Build. Enh Bug#2641905.
95 -- The notification flag was being fetched from cursor earlier. now its
96 -- modified to call the function igs_ss_enr_details.get_notification,
97 -- to get the value for it and to make the way common across all the packages.
98 --svenkata 20-NOV-2002 Modified the call to the function igs_en_val_sua.enrp_val_sua_discont to add value 'N' for the parameter
99 -- p_legacy. Bug#2661533.
100 --bdeviset 11-Apr-2005 Modified cursor c_sca in procedure Enrp_Prc_Sca_Blk_Trn for bug# 3701057
101 --sgurusam 29-Jun-2005 EN 317 TD: Imparted object modifications. Added parameter p_calling_obj with value 'JOB'
102 --ctyagi 20-SEPT-2005 Modified call to eval_rsv_seat for bug 4362302
103 --ckasu 17-MAR-2006 Modified Enrp_Prc_Sua_Blk_E_D procedure inorder to pass p_no_assessment_ind in call to
104 -- igs_ss_en_wrappers.insert_into_enr_worksheet as part of Bug 5070742.
105 --ckasu 02-May-2006 Modified as a part of bug#5191592
106 --------------------------------------------------------------------------
107
108 TYPE r_sua_typ IS RECORD( unit_cd IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
109 uv_version_number IGS_EN_SU_ATTEMPT.version_number%TYPE,
110 location_cd IGS_EN_SU_ATTEMPT.location_cd%TYPE,
111 unit_class IGS_EN_SU_ATTEMPT.unit_class%TYPE);
112 r_sua r_sua_typ;
113 TYPE t_sua_typ IS TABLE OF r_sua%TYPE INDEX BY BINARY_INTEGER;
114
115 TYPE suar_record_type IS RECORD (
116 PERSON_ID IGS_AS_SUA_REF_CDS.PERSON_ID%TYPE,
117 COURSE_CD IGS_AS_SUA_REF_CDS.COURSE_CD%TYPE,
118 UOO_ID IGS_AS_SUA_REF_CDS.UOO_ID%TYPE,
119 REFERENCE_CODE_ID IGS_AS_SUA_REF_CDS.REFERENCE_CODE_ID%TYPE,
120 REFERENCE_CD_TYPE IGS_AS_SUA_REF_CDS.REFERENCE_CD_TYPE%TYPE,
121 REFERENCE_CD IGS_AS_SUA_REF_CDS.REFERENCE_CD%TYPE,
122 APPLIED_COURSE_CD IGS_AS_SUA_REF_CDS.APPLIED_COURSE_CD%TYPE);
123 TYPE suar_table_type IS TABLE OF suar_record_type INDEX BY BINARY_INTEGER;
124 empty_suar_table suar_table_type;
125 suar_table suar_table_type;
126
127 FUNCTION enrl_sort_usecs ( p_suat IN OUT NOCOPY t_sua_typ,
128 p_cal_type IN igs_ca_inst.cal_type%TYPE,
129 p_ci_seq_num IN igs_ps_unit_ofr_opt.ci_sequence_number%TYPE
130 ) RETURN VARCHAR2 AS
131 ------------------------------------------------------------------
132 --Created by : rvivekan, Oracle IDC
133 --Date created:
134 --
135 --Purpose: to sort the usecs placing superiors before subordinates
136 -- units which are neither may appear anywhere in the list
137 -- This procedure makes a pass thro in the input table
138 -- and keeps adding superior/none usecs to the front (starting from 1,upwards)
139 -- while subordinates are added to the rear (starting from p_in_suat.count,downwards)
140 -- of the l_out_suat table and then returning the l_out_suat table back.
141 --Known limitations/enhancements and/or remarks:
142 --
143 --Change History:
144 ---------------------------------------------------------------------
145 CURSOR c_rel_type (cp_unit_cd igs_ps_unit_ofr_opt.unit_cd%TYPE,
146 cp_ver_num igs_ps_unit_ofr_opt.version_number%TYPE,
147 cp_cal_type igs_ps_unit_ofr_opt.cal_type%TYPE,
148 cp_ci_seq_num igs_ps_unit_ofr_opt.ci_sequence_number%TYPE,
149 cp_unit_class igs_ps_unit_ofr_opt.unit_class%TYPE,
150 cp_location_cd igs_ps_unit_ofr_opt.location_cd%TYPE)IS
151 SELECT uoo_id, relation_type
152 FROM igs_ps_unit_ofr_opt
153 WHERE unit_cd = cp_unit_cd
154 AND version_number = cp_ver_num
155 AND cal_type = cp_cal_type
156 AND ci_sequence_number = cp_ci_seq_num
157 AND unit_class = cp_unit_class
158 AND location_cd = cp_location_cd;
159
160 l_sup_head NUMBER:=1;
161 l_sub_tail NUMBER;
162 l_last NUMBER;
163 l_rel_type VARCHAR2(100);
164 l_out_stat t_sua_typ;
165 l_uoo_id NUMBER;
166 l_uoo_ids VARCHAR2(2000);
167
168 BEGIN
169 l_last:=p_suat.last;
170 l_sub_tail:=p_suat.count;
171 IF l_sub_tail=0 THEN
172 RETURN NULL;
173 END IF;
174 FOR i IN p_suat.first..l_last LOOP
175 OPEN c_rel_type (p_suat(i).unit_cd,p_suat(i).uv_version_number,p_cal_type,p_ci_seq_num,
176 p_suat(i).unit_class,p_suat(i).location_Cd);
177 FETCH c_rel_type INTO l_uoo_id,l_rel_type;
178 IF l_rel_type ='SUBORDINATE' THEN
179 l_out_stat(l_sub_tail):=p_suat(i);
180 l_sub_tail:=l_sub_tail-1;
181 ELSE
182 l_out_stat(l_sup_head):=p_suat(i);
183 l_sup_head:=l_sup_head+1;
184 END IF;
185 CLOSE c_rel_type;
186 l_uoo_ids:=l_uoo_ids||','||l_uoo_id;
187 END LOOP;
188 p_suat:=l_out_stat;
189 RETURN SUBSTR(l_uoo_ids,2); --ignore the leading comma
190 END enrl_sort_usecs;
191
192
193 /* who when what
194 vkarthik 8-Dec-2003 As part of term record bug no: 2829263 1) added two
195 more parameters p_term_cal_type, p_term_sequence_number and
196 they are used to set spat.g_spa_term_cal_type and spat.g_spa_term_source
197 2) spat.g_spa_term_source is set to 'JOB'
198 stutta 3-Nov-2004 Added new parameter for p_course_attempt_status6 and modified c_sca
199 correspondingly for Program offering options change bug#3959306
200 bdeviset 11-Apr-2005 Modified cursor c_sca for bug# 3701057
201 */
202 PROCEDURE Enrp_Prc_Sca_Blk_Trn(
203 p_acad_cal_type IN VARCHAR2 ,
204 p_acad_ci_sequence_number IN NUMBER ,
205 p_course_cd IN VARCHAR2 ,
206 p_version_number NUMBER ,
207 p_location_cd IN VARCHAR2 ,
208 p_attendance_type IN VARCHAR2 ,
209 p_attendance_mode IN VARCHAR2 ,
210 p_group_id IN NUMBER ,
211 p_course_attempt_status1 IN VARCHAR2 ,
212 p_course_attempt_status2 IN VARCHAR2 ,
213 p_course_attempt_status3 IN VARCHAR2 ,
214 p_course_attempt_status4 IN VARCHAR2 ,
215 p_course_attempt_status5 IN VARCHAR2 ,
216 p_course_attempt_status6 IN VARCHAR2 ,
217 p_to_acad_cal_type IN VARCHAR2 ,
218 p_to_crs_version_number IN NUMBER ,
219 p_to_location_cd IN VARCHAR2 ,
220 p_to_attendance_type IN VARCHAR2 ,
221 p_to_attendance_mode IN VARCHAR2 ,
222 p_term_cal_type IN VARCHAR2,
223 p_term_sequence_number IN NUMBER,
224 p_creation_dt IN OUT NOCOPY DATE )
225 AS
226
227 BEGIN -- enrp_prc_sca_blk_trn
228 -- The process transfers already enrolled (or unconfirmed) students
229 -- between offering options within their selected course code. This
230 -- may include a change to version_number, calendar type, IGS_AD_LOCATION
231 -- code, attendance mode, attendance type or a combination thereof.
232 -- This is typically used as the result of the shutting of a version,
233 -- or the altering of the course offerings of the IGS_OR_INSTITUTION. eg. a
234 -- course which due to lack of numbers is no longer offered at a
235 -- campus ? all of the students which are enrolled need be transferred
236 -- to a different campus.
237 -- IGS_GE_NOTE: This module will be called from an exception report ENRR4420.
238
239 DECLARE
240 e_resource_busy_exception EXCEPTION;
241 PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
242 cst_enr_blk_co CONSTANT VARCHAR2(10) := 'ENR-BLK-CO';
243 cst_error CONSTANT VARCHAR2(10) := 'ERROR';
244 cst_information CONSTANT VARCHAR2(12) := 'INFORMATION';
245 cst_warning CONSTANT VARCHAR2(10) := 'WARNING';
246 cst_summary CONSTANT VARCHAR2(10) := 'SUMMARY';
247 cst_cross CONSTANT VARCHAR2(10) := 'CROSS';
248 cst_active CONSTANT VARCHAR2(10) := 'ACTIVE';
249 cst_blk_coo CONSTANT VARCHAR2 (36) := 'BULK COURSE OFFERING OPTION TRANSFER';
250 CURSOR c_sca IS
251 SELECT sca.person_id,
252 sca.course_cd,
253 sca.version_number,
254 sca.location_cd,
255 sca.attendance_mode,
256 sca.attendance_type,
257 sca.course_attempt_status,
258 sca.commencement_dt,
259 sca.coo_id,
260 sca.funding_source
261 FROM igs_en_stdnt_ps_att sca
262 WHERE
263 sca.course_cd = p_course_cd
264 AND
265 ((sca.person_id in (select person_id from IGS_PE_PRSID_GRP_MEM WHERE
266 group_id = p_group_id) AND
267 p_group_id is NOT NULL) OR
268 (p_group_id is NULL))
269 AND
270 (p_version_number IS NULL OR
271 p_version_number = igs_en_spa_terms_api.get_spat_program_version
272 (sca.person_id, sca.course_cd, p_term_cal_type, p_term_sequence_number)) AND
273 (p_acad_cal_type = igs_en_spa_terms_api.get_spat_acad_cal_type
274 (sca.person_id, sca.course_cd, p_term_cal_type, p_term_sequence_number)) AND
275 (p_location_cd IS NULL OR
276 p_location_cd = igs_en_spa_terms_api.get_spat_location
277 (sca.person_id, sca.course_cd, p_term_cal_type, p_term_sequence_number)) AND
278 (p_attendance_mode IS NULL OR
279 p_attendance_mode= igs_en_spa_terms_api.get_spat_att_mode
280 (sca.person_id, sca.course_cd, p_term_cal_type, p_term_sequence_number)) AND
281 (p_attendance_type IS NULL OR
282 p_attendance_type= igs_en_spa_terms_api.get_spat_att_type
283 (sca.person_id, sca.course_cd, p_term_cal_type, p_term_sequence_number)) AND
284 sca.course_attempt_status IN (
285 p_course_attempt_status1,
286 NVL(p_course_attempt_status2, p_course_attempt_status1),
287 NVL(p_course_attempt_status3, p_course_attempt_status1),
288 NVL(p_course_attempt_status4, p_course_attempt_status1),
289 NVL(p_course_attempt_status5, p_course_attempt_status1),
290 NVL(p_course_attempt_status6, p_course_attempt_status1))
291 ORDER BY
292 sca.person_id,
293 sca.course_cd;
294
295 v_rollback_occurred BOOLEAN := FALSE;
296 v_processing_occurred BOOLEAN :=FALSE;
297 v_course_key VARCHAR2(255) ;
298 v_creation_dt IGS_GE_S_LOG.creation_dt%TYPE ;
299 v_total_sca_count NUMBER := 0;
300 v_total_sca_error_count NUMBER := 0;
301 v_total_sca_warn_count NUMBER := 0;
302 v_total_sca_trnsfr_count NUMBER := 0;
303 v_total_course_error_count NUMBER := 0;
304 v_total_course_warn_count NUMBER := 0;
305 v_total_lock_count NUMBER := 0;
306 v_sca_error_count NUMBER := 0;
307 v_sca_warn_count NUMBER := 0;
308 v_sca_trnsfr_count NUMBER := 0;
309 v_to_acad_cal_type IGS_EN_STDNT_PS_ATT.cal_type%TYPE ;
310 v_to_crs_version_number
311 IGS_EN_STDNT_PS_ATT.version_number%TYPE ;
312 v_to_location_cd IGS_EN_STDNT_PS_ATT.location_cd%TYPE ;
313 v_to_attendance_type IGS_EN_STDNT_PS_ATT.attendance_type%TYPE ;
314 v_to_attendance_mode IGS_EN_STDNT_PS_ATT.attendance_mode%TYPE ;
315 PROCEDURE enrpl_upd_sca_coo(
316 p_person_id IGS_PE_PERSON.person_id%TYPE,
317 p_course_cd IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
318 p_crv_version_number IGS_EN_STDNT_PS_ATT.version_number%TYPE,
319 p_cal_type IGS_CA_INST.cal_type%TYPE,
320 p_acad_ci_sequence_number IGS_CA_INST.sequence_number%TYPE,
321 p_location_cd IGS_EN_STDNT_PS_ATT.location_cd%TYPE,
322 p_attendance_type IGS_EN_STDNT_PS_ATT.attendance_type%TYPE,
323 p_attendance_mode IGS_EN_STDNT_PS_ATT.attendance_mode%TYPE,
324 p_funding_source IGS_EN_STDNT_PS_ATT.funding_source%TYPE,
325 p_course_attempt_status IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE,
326 p_to_crs_version_number IGS_EN_STDNT_PS_ATT.version_number%TYPE,
327 p_to_acad_cal_type IGS_EN_STDNT_PS_ATT.cal_type%TYPE,
328 p_to_location_cd IGS_EN_STDNT_PS_ATT.location_cd%TYPE,
329 p_to_attendance_type IGS_EN_STDNT_PS_ATT.attendance_type%TYPE,
330 p_to_attendance_mode IGS_EN_STDNT_PS_ATT.attendance_mode%TYPE,
331 p_sca_error_count IN OUT NOCOPY NUMBER,
332 p_sca_warn_count IN OUT NOCOPY NUMBER,
333 p_sca_trnsfr_count IN OUT NOCOPY NUMBER)
334 AS
335
336
337 /****************************************************************************
338 History
339 Who When Why
340 sarakshi 16-Nov-2004 Enh#4000939, added column FUTURE_DATED_TRANS_FLAG in the update row call of IGS_EN_STDNT_PS_ATT_PKG
341 ckasu 05-Apr-2004 Modified IGS_EN_STDNT_PS_ATT_Pkg.update_Row procedure
342 call as a part of bug 3544927.
343 stutta 03-Nov-2004 Added call igs_en_val_sca.enrp_val_chgo_alwd to log a
344 warning message. bug#3959306
345 jtmathew 05-Nov-2004 Modifications as per HESA DLD for bug 3985220
346 *****************************************************************************/
347 BEGIN -- enrpl_upd_sca_coo
348 -- Local procedure to process the transfer of course offering option.
349 DECLARE
350 CURSOR c_coo IS
351 SELECT coo.coo_id
352 FROM IGS_PS_OFR_OPT coo
353 WHERE coo.course_cd = p_course_cd AND
354 coo.version_number = p_to_crs_version_number AND
355 coo.cal_type = p_to_acad_cal_type AND
356 coo.location_cd = p_to_location_cd AND
357 coo.attendance_type = p_to_attendance_type AND
358 coo.attendance_mode = p_to_attendance_mode AND
359 coo.delete_flag = 'N';
360 v_coo_rec c_coo%ROWTYPE;
361 CURSOR c_cv IS
362 SELECT cs.s_course_status,
363 cv.expiry_dt
364 FROM IGS_PS_VER cv,
365 IGS_PS_STAT cs
366 WHERE cv.course_cd = p_course_cd AND
367 cv.version_number = p_to_crs_version_number AND
368 cs.COURSE_STATUS = cv.COURSE_STATUS;
369 v_cv_rec c_cv%ROWTYPE;
370 CURSOR c_susa IS
371 SELECT susa.unit_set_cd,
372 susa.us_version_number
373 FROM IGS_AS_SU_SETATMPT susa
374 WHERE susa.person_id = p_person_id AND
375 susa.course_cd = p_course_cd AND
376 susa.student_confirmed_ind = 'Y' AND
377 susa.end_dt IS NULL;
378 -- modified cursor for perf bug 3696293 : sql id : 14791636
379 CURSOR c_coousv (
380 cp_unit_set_cd IGS_PS_OFR_OPT_UNIT_SET_V.unit_set_cd%TYPE,
381 cp_us_version_number IGS_PS_OFR_OPT_UNIT_SET_V.us_version_number%TYPE,
382 cp_coo_id IGS_PS_OFR_OPT_UNIT_SET_V.coo_id%TYPE) IS
383 SELECT 'x' FROM
384 IGS_PS_OFR_UNIT_SET cous,
385 IGS_PS_OFR_OPT coo
386 WHERE
387 cous.unit_set_cd = cp_unit_set_cd and
388 cous.us_version_number = cp_us_version_number and
389 coo.coo_id = cp_coo_id and
390 coo.course_cd = cous.course_cd and
391 coo.version_number = cous.crv_version_number and
392 coo.CAL_TYPE = cous.CAL_TYPE and
393 NOT EXISTS (select course_cd from IGS_PS_OF_OPT_UNT_ST coous
394 where
395 coous.course_cd = cous.course_cd and
396 coous.crv_version_number = cous.crv_version_number and
397 coous.CAL_TYPE = cous.CAL_TYPE and
398 coous.unit_set_cd = cous.unit_set_cd and
399 coous.us_version_number = cous.us_version_number)
400 UNION ALL
401 SELECT 'x' FROM
402 IGS_PS_OF_OPT_UNT_ST coous
403 WHERE
404 coous.unit_set_cd = cp_unit_set_cd and
405 coous.us_version_number = cp_us_version_number and
406 coous.coo_id = cp_coo_id ;
407
408 v_coousv_exists VARCHAR2(1);
409 CURSOR c_sca_upd IS
410 SELECT rowid,IGS_EN_STDNT_PS_ATT.*
411 FROM IGS_EN_STDNT_PS_ATT
412 WHERE person_id = p_person_id AND
413 course_cd = p_course_cd
414 FOR UPDATE OF
415 version_number,
416 cal_type,
417 location_cd,
418 attendance_type,
419 attendance_mode,
420 coo_id NOWAIT;
421 v_sca_upd_exists VARCHAR2(1);
422 -- Cursor added as per the HESA DLD Bug 3985220
423 -- Get the hesa program attempt details for update
424 CURSOR c_he_spa_upd IS
425 SELECT spa.rowid , spa.*
426 FROM igs_he_st_spa_all spa
427 WHERE spa.person_id = p_person_id AND
428 spa.course_cd = p_course_cd
429 FOR UPDATE NOWAIT;
430
431 v_key VARCHAR2(255) ;
432 v_update_coo BOOLEAN := TRUE;
433 v_exit_proc BOOLEAN := FALSE;
434 v_ret_dummy BOOLEAN ; --dummy variable
435 v_message_name Varchar2(30) ;
436 v_message VARCHAR2(80);
437 v_message_name1 Varchar2(30) ;
438 v_message_name2 Varchar2(30) ;
439 v_message_name3 Varchar2(30) ;
440 l_message_name VARCHAR2(200);
441 BEGIN
442 -- Initialise the counters.
443 p_sca_error_count := 0;
444 p_sca_warn_count := 0;
445 p_sca_trnsfr_count := 0;
446 v_key := TO_CHAR(p_person_id) || '|' ||
447 p_course_cd || '|' ||
448 p_acad_cal_type || '|' ||
449 TO_CHAR(p_crv_version_number) || '|' ||
450 p_location_cd || '|' ||
451 p_attendance_type || '|' ||
452 p_attendance_mode || '|' ||
453 p_to_acad_cal_type || '|' ||
454 TO_CHAR(p_to_crs_version_number) || '|' ||
455 p_to_location_cd || '|' ||
456 p_to_attendance_type || '|' ||
457 p_to_attendance_mode;
458 -- Validate that the course offering option exists.
459 OPEN c_coo;
460 FETCH c_coo INTO v_coo_rec;
461 IF c_coo%NOTFOUND THEN
462 CLOSE c_coo;
463 -- Log error, unable to transfer student course attempt
464 -- option as the course option is not offered.
465 IGS_GE_INS_SLE.genp_set_log_entry(
466 cst_enr_blk_co,
467 cst_blk_coo,
468 v_key,
469 'IGS_EN_POO_NOT_EXISTS', -- Failed to transfer as option does not exist.
470 cst_error || '|NO-COO');
471 p_sca_error_count := p_sca_error_count + 1;
472 -- Exit from the local procedure
473 RETURN;
474 END IF;
475 CLOSE c_coo;
476 -- Validate that the course version is allowable for transfers.
477 OPEN c_cv;
478 FETCH c_cv INTO v_cv_rec;
479 CLOSE c_cv;
480 IF v_cv_rec.s_course_status <> cst_active THEN
481 -- Log error, unable to transfer student course attempt
482 -- option as the course version is not active.
483 IGS_GE_INS_SLE.genp_set_log_entry(
484 cst_enr_blk_co,
485 cst_blk_coo,
486 v_key,
487 'IGS_EN_FAIL_TRNS_POO_INACTIVE', -- Failed to transfer as course version not active.
488 cst_error || '|ACTIVE-CRV');
489 p_sca_error_count := p_sca_error_count + 1;
490 -- Exit from the local procedure
491 RETURN;
492 END IF;
493 -- Check that the new course version is offered (expiry date null).
494 -- If not null then check if the student is not transferring out NOCOPY of
495 -- the version or the calendar type as this is considered a major
496 -- change and is not allowed within this process.
497 IF v_cv_rec.expiry_dt IS NOT NULL AND
498 (p_crv_version_number <> p_to_crs_version_number OR p_acad_cal_type <> p_to_acad_cal_type) THEN
499 -- Log error, unable to transfer student course attempt option
500 -- as the course version expiry date set and student
501 -- transferring into another version and calendar type.
502 IGS_GE_INS_SLE.genp_set_log_entry(
503 cst_enr_blk_co,
504 cst_blk_coo,
505 v_key,
506 'IGS_EN_FAIL_TRNS_POO_EXPDT', -- Failed to transfer as course version expiry date set.
507 cst_error || '|CRV-EXPIRED');
508 p_sca_error_count := p_sca_error_count + 1;
509 -- Exit from the local procedure
510 RETURN;
511 END IF; -- expiry date not null.
512 v_update_coo := TRUE;
513 -- If changing the calendar type
514 IF p_acad_cal_type <> p_to_acad_cal_type THEN
515 -- Check if there is any enrolled/unconfirmed IGS_PS_UNIT attempt that
516 -- is not linked to the new academic period. (IGS_GE_NOTE: Routine
517 -- returns warnings only.)
518 v_ret_dummy := IGS_EN_VAL_SCA.enrp_val_sca_cat(
519 p_person_id,
520 p_course_cd,
521 p_to_acad_cal_type,
522 v_message_name);
523 IF v_message_name is not null THEN
524
525 IGS_GE_INS_SLE.genp_set_log_entry(
526 cst_enr_blk_co,
527 cst_blk_coo,
528 v_key,
529 v_message_name,
530 cst_warning || '|UNIT-ACAD');
531 p_sca_warn_count := p_sca_warn_count + 1;
532 END IF;
533 -- Check if the student is pre-enrolled in an enrolment calendar within the
534 -- new academic calendar. Get the latest enrolment record.
535 -- Check if the enrolment period of the existing academic type is also
536 -- a subordinate of the new academic type.
537 IF NOT IGS_EN_VAL_SCT.enrp_val_scae_acad(
538 p_person_id,
539 p_course_cd,
540 p_to_acad_cal_type,
541 v_message_name) THEN
542 IF v_message_name <> 'IGS_EN_NO_SPA_ENR_EXISTS' THEN
543
544 IGS_GE_INS_SLE.genp_set_log_entry(
545 cst_enr_blk_co,
546 cst_blk_coo,
547 v_key,
548 'IGS_EN_STUD_NOT_PRE_ENROLLED', -- warn pre-enrolment may be necessary.
549 cst_warning || '|PRE-ENROL');
550 p_sca_warn_count := p_sca_warn_count + 1;
551 END IF;
552 END IF;
553 END IF;
554 -- If the version number has been changed.
555 IF p_crv_version_number <> p_to_crs_version_number AND
556 p_funding_source IS NOT NULL AND
557 NOT IGS_EN_VAL_SCA.enrp_val_sca_fs(
558 p_course_cd,
559 p_to_crs_version_number,
560 p_funding_source,
561 v_message_name) THEN
562
563 -- Log error, unable to transfer student course attempt option as
564 -- the course version is not active.
565 IGS_GE_INS_SLE.genp_set_log_entry(
566 cst_enr_blk_co,
567 cst_blk_coo,
568 v_key,
569 v_message_name, -- Failed to transfer as invalid funding source.
570 cst_error || '|FUND-CRV');
571 p_sca_error_count := p_sca_error_count + 1;
572 -- Exit from the local procedure
573 RETURN;
574 END IF; -- version number changed.
575 IF p_course_attempt_status <> 'UNCONFIRM' THEN
576 -- Check if any IGS_PS_UNIT sets are not permitted within the new course
577 -- offering option. If so, report error.
578 FOR v_susa_rec IN c_susa LOOP
579 -- Check if the IGS_PS_UNIT set allowed in the IGS_PS_OFR_OPT.
580 OPEN c_coousv(
581 v_susa_rec.unit_set_cd,
582 v_susa_rec.us_version_number,
583 v_coo_rec.coo_id);
584 FETCH c_coousv INTO v_coousv_exists;
585 IF c_coousv%NOTFOUND THEN
586 CLOSE c_coousv;
587
588 IGS_GE_INS_SLE.genp_set_log_entry(
589 cst_enr_blk_co,
590 cst_blk_coo,
591 v_key,
592 'IGS_EN_SU_SETATT_EXISTS',
593 -- Failed to transfer as IGS_PS_UNIT sets exist that are
594 -- not applicable to the new course offering option.
595 cst_error || '|CRV-UNIT-SET');
596 p_sca_error_count := p_sca_error_count + 1;
597 -- Exit from the local procedure
598 v_exit_proc := TRUE;
599 EXIT;
600 END IF;
601 CLOSE c_coousv;
602 END LOOP; -- IGS_AS_SU_SETATMPT.
603 END IF; -- status is not unconfirmed.
604 IF v_exit_proc THEN
605 RETURN;
606 END IF;
607 -- Validate whether any of the students IGS_PS_UNIT attempts for the nominated
608 -- academic calendar instance have breached cross IGS_AD_LOCATION or cross mode
609 -- rules.
610 IF p_course_attempt_status = 'ENROLLED' AND
611 NOT IGS_EN_VAL_SCA.enrp_val_sua_coo(
612 p_person_id,
613 p_course_cd,
614 v_coo_rec.coo_id,
615 p_to_acad_cal_type,
616 p_acad_ci_sequence_number,
617 v_message_name1,
618 v_message_name2,
619 v_message_name3,
620 p_term_cal_type,
621 p_term_sequence_number) THEN
622
623 IF v_message_name1 is not null THEN
624 IGS_GE_INS_SLE.genp_set_log_entry(
625 cst_enr_blk_co,
626 cst_blk_coo,
627 v_key,
628 v_message_name1,
629 cst_warning || '|' || cst_cross);
630 p_sca_warn_count := p_sca_warn_count + 1;
631 END IF;
632 IF v_message_name2 is not null THEN
633 IGS_GE_INS_SLE.genp_set_log_entry(
634 cst_enr_blk_co,
635 cst_blk_coo,
636 v_key,
637 v_message_name2,
638 cst_warning || '|' || cst_cross);
639 p_sca_warn_count := p_sca_warn_count + 1;
640 END IF;
641 IF v_message_name3 is not null THEN
642 IGS_GE_INS_SLE.genp_set_log_entry(
643 cst_enr_blk_co,
644 cst_blk_coo,
645 v_key,
646 v_message_name3,
647 cst_warning || '|' || cst_cross);
648 p_sca_warn_count := p_sca_warn_count + 1;
649 END IF;
650 END IF; -- If enrolled.
651 FOR v_sca_upd_exists In c_sca_upd LOOP
652 -- Update the record.
653 IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW(
654 X_ROWID => v_sca_upd_exists.rowid,
655 X_PERSON_ID => v_sca_upd_exists.PERSON_ID,
656 X_COURSE_CD => v_sca_upd_exists.COURSE_CD,
657 X_ADVANCED_STANDING_IND => v_sca_upd_exists.ADVANCED_STANDING_IND,
658 X_FEE_CAT => v_sca_upd_exists.FEE_CAT,
659 X_CORRESPONDENCE_CAT => v_sca_upd_exists.CORRESPONDENCE_CAT,
660 X_SELF_HELP_GROUP_IND => v_sca_upd_exists.SELF_HELP_GROUP_IND,
661 X_LOGICAL_DELETE_DT => v_sca_upd_exists.LOGICAL_DELETE_DT,
662 X_ADM_ADMISSION_APPL_NUMBER => v_sca_upd_exists.ADM_ADMISSION_APPL_NUMBER,
663 X_ADM_NOMINATED_COURSE_CD => v_sca_upd_exists.ADM_NOMINATED_COURSE_CD,
664 X_ADM_SEQUENCE_NUMBER => v_sca_upd_exists.ADM_SEQUENCE_NUMBER,
665 X_VERSION_NUMBER => p_to_crs_version_number,
666 X_CAL_TYPE => p_to_acad_cal_type,
667 X_LOCATION_CD => p_to_location_cd,
668 X_ATTENDANCE_MODE => p_to_attendance_mode,
669 X_ATTENDANCE_TYPE => p_to_attendance_type,
670 X_COO_ID => v_coo_rec.coo_id,
671 X_STUDENT_CONFIRMED_IND => v_sca_upd_exists.STUDENT_CONFIRMED_IND,
672 X_COMMENCEMENT_DT => v_sca_upd_exists.COMMENCEMENT_DT,
673 X_COURSE_ATTEMPT_STATUS => v_sca_upd_exists.COURSE_ATTEMPT_STATUS,
674 X_PROGRESSION_STATUS => v_sca_upd_exists.PROGRESSION_STATUS,
675 X_DERIVED_ATT_TYPE => v_sca_upd_exists.DERIVED_ATT_TYPE,
676 X_DERIVED_ATT_MODE => v_sca_upd_exists.DERIVED_ATT_MODE,
677 X_PROVISIONAL_IND => v_sca_upd_exists.PROVISIONAL_IND,
678 X_DISCONTINUED_DT => v_sca_upd_exists.DISCONTINUED_DT,
679 X_DISCONTINUATION_REASON_CD => v_sca_upd_exists.DISCONTINUATION_REASON_CD,
680 X_LAPSED_DT => v_sca_upd_exists.LAPSED_DT,
681 X_FUNDING_SOURCE => v_sca_upd_exists.EXAM_LOCATION_CD,
682 X_EXAM_LOCATION_CD => v_sca_upd_exists.EXAM_LOCATION_CD,
683 X_DERIVED_COMPLETION_YR => v_sca_upd_exists.DERIVED_COMPLETION_YR,
684 X_DERIVED_COMPLETION_PERD => v_sca_upd_exists.DERIVED_COMPLETION_PERD,
685 X_NOMINATED_COMPLETION_YR => v_sca_upd_exists.NOMINATED_COMPLETION_YR,
686 X_NOMINATED_COMPLETION_PERD => v_sca_upd_exists.NOMINATED_COMPLETION_PERD,
687 X_RULE_CHECK_IND => v_sca_upd_exists.RULE_CHECK_IND,
688 X_WAIVE_OPTION_CHECK_IND => v_sca_upd_exists.WAIVE_OPTION_CHECK_IND,
689 X_LAST_RULE_CHECK_DT => v_sca_upd_exists.LAST_RULE_CHECK_DT,
690 X_PUBLISH_OUTCOMES_IND => v_sca_upd_exists.PUBLISH_OUTCOMES_IND,
691 X_COURSE_RQRMNT_COMPLETE_IND => v_sca_upd_exists.COURSE_RQRMNT_COMPLETE_IND,
692 X_COURSE_RQRMNTS_COMPLETE_DT => v_sca_upd_exists.COURSE_RQRMNTS_COMPLETE_DT,
693 X_S_COMPLETED_SOURCE_TYPE => v_sca_upd_exists.S_COMPLETED_SOURCE_TYPE,
694 X_OVERRIDE_TIME_LIMITATION => v_sca_upd_exists.OVERRIDE_TIME_LIMITATION,
695 X_MODE => 'R',
696 x_last_date_of_attendance => v_sca_upd_exists.last_date_of_attendance,
697 x_dropped_by => v_sca_upd_exists.dropped_by ,
698 x_igs_pr_class_std_id => v_sca_upd_exists.igs_pr_class_std_id , --Enhancement Bug 1877222, pmarada
699 -- Added next four parameters as per the Career Impact Build Bug# 2027984
700 x_primary_program_type => v_sca_upd_exists.primary_program_type,
701 x_primary_prog_type_source => v_sca_upd_exists.primary_prog_type_source,
702 x_catalog_cal_type => v_sca_upd_exists.catalog_cal_type,
703 x_catalog_seq_num => v_sca_upd_exists.catalog_seq_num,
704 x_key_program => v_sca_upd_exists.key_program,
705 -- The following two parameters were added as part of the build EN015. Bug# 2158654 - pradhakr
706 x_override_cmpl_dt => v_sca_upd_exists.override_cmpl_dt,
707 x_manual_ovr_cmpl_dt_ind => v_sca_upd_exists.manual_ovr_cmpl_dt_ind,
708 -- added by ckasu as part of bug # 3544927
709 X_ATTRIBUTE_CATEGORY => v_sca_upd_exists.ATTRIBUTE_CATEGORY,
710 X_ATTRIBUTE1 => v_sca_upd_exists.ATTRIBUTE1,
711 X_ATTRIBUTE2 => v_sca_upd_exists.ATTRIBUTE2,
712 X_ATTRIBUTE3 => v_sca_upd_exists.ATTRIBUTE3,
713 X_ATTRIBUTE4 => v_sca_upd_exists.ATTRIBUTE4,
714 X_ATTRIBUTE5 => v_sca_upd_exists.ATTRIBUTE5,
715 X_ATTRIBUTE6 => v_sca_upd_exists.ATTRIBUTE6,
716 X_ATTRIBUTE7 => v_sca_upd_exists.ATTRIBUTE7,
717 X_ATTRIBUTE8 => v_sca_upd_exists.ATTRIBUTE8,
718 X_ATTRIBUTE9 => v_sca_upd_exists.ATTRIBUTE9,
719 X_ATTRIBUTE10 => v_sca_upd_exists.ATTRIBUTE10,
720 X_ATTRIBUTE11 => v_sca_upd_exists.ATTRIBUTE11,
721 X_ATTRIBUTE12 => v_sca_upd_exists.ATTRIBUTE12,
722 X_ATTRIBUTE13 => v_sca_upd_exists.ATTRIBUTE13,
723 X_ATTRIBUTE14 => v_sca_upd_exists.ATTRIBUTE14,
724 X_ATTRIBUTE15 => v_sca_upd_exists.ATTRIBUTE15,
725 X_ATTRIBUTE16 => v_sca_upd_exists.ATTRIBUTE16,
726 X_ATTRIBUTE17 => v_sca_upd_exists.ATTRIBUTE17,
727 X_ATTRIBUTE18 => v_sca_upd_exists.ATTRIBUTE18,
728 X_ATTRIBUTE19 => v_sca_upd_exists.ATTRIBUTE19,
729 X_ATTRIBUTE20 => v_sca_upd_exists.ATTRIBUTE20,
730 X_FUTURE_DATED_TRANS_FLAG => v_sca_upd_exists.FUTURE_DATED_TRANS_FLAG);
731
732 igs_en_spa_terms_api.create_update_term_rec(
733 p_person_id => v_sca_upd_exists.PERSON_ID,
734 p_program_cd => v_sca_upd_exists.COURSE_CD,
735 p_term_cal_type => p_term_cal_type,
736 p_term_sequence_number => p_term_sequence_number,
737 p_coo_id => v_coo_rec.coo_id,
738 p_ripple_frwrd => TRUE,
739 p_message_name => l_message_name,
740 p_update_rec => TRUE);
741
742 -- Check if the version number has been updated
743 -- and country code is 'GB', as per HESA bug 3985220
744 IF (v_sca_upd_exists.version_number <> p_to_crs_version_number AND
745 fnd_profile.value('OSS_COUNTRY_CODE') = 'GB' ) THEN
746
747 BEGIN
748 FOR v_he_spa_upd_rec IN c_he_spa_upd LOOP
749
750 -- update the version_number of the hesa program attempt record
751 IGS_HE_ST_SPA_ALL_PKG.UPDATE_ROW (
752 X_ROWID => v_he_spa_upd_rec.rowid ,
753 X_HESA_ST_SPA_ID => v_he_spa_upd_rec.hesa_st_spa_id ,
754 X_ORG_ID => v_he_spa_upd_rec.org_id ,
755 X_PERSON_ID => v_he_spa_upd_rec.person_id ,
756 X_COURSE_CD => v_he_spa_upd_rec.course_cd ,
757 X_VERSION_NUMBER => p_to_crs_version_number ,
758 X_FE_STUDENT_MARKER => v_he_spa_upd_rec.fe_student_marker ,
759 X_DOMICILE_CD => v_he_spa_upd_rec.domicile_cd ,
760 X_INST_LAST_ATTENDED => v_he_spa_upd_rec.inst_last_attended ,
761 X_YEAR_LEFT_LAST_INST => v_he_spa_upd_rec.year_left_last_inst ,
762 X_HIGHEST_QUAL_ON_ENTRY => v_he_spa_upd_rec.highest_qual_on_entry ,
763 X_DATE_QUAL_ON_ENTRY_CALC => v_he_spa_upd_rec.date_qual_on_entry_calc ,
764 X_A_LEVEL_POINT_SCORE => v_he_spa_upd_rec.a_level_point_score ,
765 X_HIGHERS_POINTS_SCORES => v_he_spa_upd_rec.highers_points_scores ,
766 X_OCCUPATION_CODE => v_he_spa_upd_rec.occupation_code ,
767 X_COMMENCEMENT_DT => v_he_spa_upd_rec.commencement_dt ,
768 X_SPECIAL_STUDENT => v_he_spa_upd_rec.special_student ,
769 X_STUDENT_QUAL_AIM => v_he_spa_upd_rec.student_qual_aim ,
770 X_STUDENT_FE_QUAL_AIM => v_he_spa_upd_rec.student_fe_qual_aim ,
771 X_TEACHER_TRAIN_PROG_ID => v_he_spa_upd_rec.teacher_train_prog_id ,
772 X_ITT_PHASE => v_he_spa_upd_rec.itt_phase ,
773 X_BILINGUAL_ITT_MARKER => v_he_spa_upd_rec.bilingual_itt_marker ,
774 X_TEACHING_QUAL_GAIN_SECTOR => v_he_spa_upd_rec.teaching_qual_gain_sector ,
775 X_TEACHING_QUAL_GAIN_SUBJ1 => v_he_spa_upd_rec.teaching_qual_gain_subj1 ,
776 X_TEACHING_QUAL_GAIN_SUBJ2 => v_he_spa_upd_rec.teaching_qual_gain_subj2 ,
777 X_TEACHING_QUAL_GAIN_SUBJ3 => v_he_spa_upd_rec.teaching_qual_gain_subj3 ,
778 X_STUDENT_INST_NUMBER => v_he_spa_upd_rec.student_inst_number ,
779 X_DESTINATION => v_he_spa_upd_rec.destination ,
780 X_ITT_PROG_OUTCOME => v_he_spa_upd_rec.itt_prog_outcome ,
781 X_HESA_RETURN_NAME => v_he_spa_upd_rec.hesa_return_name ,
782 X_HESA_RETURN_ID => v_he_spa_upd_rec.hesa_return_id ,
783 X_HESA_SUBMISSION_NAME => v_he_spa_upd_rec.hesa_submission_name ,
784 X_ASSOCIATE_UCAS_NUMBER => v_he_spa_upd_rec.associate_ucas_number ,
785 X_ASSOCIATE_SCOTT_CAND => v_he_spa_upd_rec.associate_scott_cand ,
786 X_ASSOCIATE_TEACH_REF_NUM => v_he_spa_upd_rec.associate_teach_ref_num ,
787 X_ASSOCIATE_NHS_REG_NUM => v_he_spa_upd_rec.associate_nhs_reg_num ,
788 X_NHS_FUNDING_SOURCE => v_he_spa_upd_rec.nhs_funding_source ,
789 X_UFI_PLACE => v_he_spa_upd_rec.ufi_place ,
790 X_POSTCODE => v_he_spa_upd_rec.postcode ,
791 X_SOCIAL_CLASS_IND => v_he_spa_upd_rec.social_class_ind ,
792 X_OCCCODE => v_he_spa_upd_rec.occcode ,
793 X_TOTAL_UCAS_TARIFF => v_he_spa_upd_rec.total_ucas_tariff ,
794 X_NHS_EMPLOYER => v_he_spa_upd_rec.nhs_employer ,
795 X_RETURN_TYPE => v_he_spa_upd_rec.return_type ,
796 X_QUAL_AIM_SUBJ1 => v_he_spa_upd_rec.qual_aim_subj1 ,
797 X_QUAL_AIM_SUBJ2 => v_he_spa_upd_rec.qual_aim_subj2 ,
798 X_QUAL_AIM_SUBJ3 => v_he_spa_upd_rec.qual_aim_subj3 ,
799 X_QUAL_AIM_PROPORTION => v_he_spa_upd_rec.qual_aim_proportion ,
800 X_DEPENDANTS_CD => v_he_spa_upd_rec.dependants_cd ,
801 X_IMPLIED_FUND_RATE => v_he_spa_upd_rec.implied_fund_rate ,
802 X_GOV_INITIATIVES_CD => v_he_spa_upd_rec.gov_initiatives_cd ,
803 X_UNITS_FOR_QUAL => v_he_spa_upd_rec.units_for_qual ,
804 X_DISADV_UPLIFT_ELIG_CD => v_he_spa_upd_rec.disadv_uplift_elig_cd ,
805 X_FRANCH_PARTNER_CD => v_he_spa_upd_rec.franch_partner_cd,
806 X_UNITS_COMPLETED => v_he_spa_upd_rec.units_completed,
807 X_FRANCH_OUT_ARR_CD => v_he_spa_upd_rec.franch_out_arr_cd,
808 X_EMPLOYER_ROLE_CD => v_he_spa_upd_rec.employer_role_cd,
809 X_DISADV_UPLIFT_FACTOR => v_he_spa_upd_rec.disadv_uplift_factor,
810 X_ENH_FUND_ELIG_CD => v_he_spa_upd_rec.enh_fund_elig_cd,
811 X_MODE => 'R'
812 ) ;
813 END LOOP ;
814 EXCEPTION
815 WHEN OTHERS THEN
816 -- Log error if failed to update SPA HESA details
817 IGS_GE_INS_SLE.genp_set_log_entry(
818 cst_enr_blk_co,
819 cst_blk_coo,
820 v_key,
821 'IGS_HE_UPD_SPA_FAIL',
822 cst_error || '| CRV-HESA-SPA' );
823 p_sca_error_count := p_sca_error_count + 1;
824 RAISE;
825 END ;
826
827 END IF ; -- end of change in version and country code check
828 -- End of the New code added as per the HESA bug 3985220
829
830 IF igs_en_val_sca.enrp_val_chgo_alwd(p_person_id,
831 p_course_cd, v_message) THEN
832 -- if program offering option of a completed program attempt is changed
833 -- then log warning message.
834 IF v_message IS NOT NULL THEN
835 IGS_GE_INS_SLE.genp_set_log_entry(
836 cst_enr_blk_co,
837 cst_blk_coo,
838 v_key,
839 'IGS_EN_CHG_OPT_COMPL',
840 cst_warning || '| COMPLETED');
841 END IF;
842
843 END IF;
844
845 -- Log that the IGS_PS_UNIT has been updated.
846 IGS_GE_INS_SLE.genp_set_log_entry(
847 cst_enr_blk_co,
848 cst_blk_coo,
849 v_key,
850 'IGS_EN_STUD_SUCCESS_TRNS_POO', -- Successfully transferred.
851 cst_information || '| TRANSFERRED');
852 p_sca_trnsfr_count := p_sca_trnsfr_count + 1;
853 END LOOP;
854 RETURN;
855 -- Local exception handler.
856 EXCEPTION
857 WHEN e_resource_busy_exception THEN
858 -- Roll back transaction.
859 ROLLBACK TO sp_sca_blk_trn;
860 -- Add to count and continue processing.
861 v_total_lock_count := v_total_lock_count + 1;
862 -- Log that a locked record exists and
863 -- rollback has occurred.
864 Fnd_Message.Set_name('IGS','IGS_EN_ALLALT_APPL_STUD_PRG');
865 IGS_GE_MSG_STACK.ADD;
866 RETURN;
867 WHEN OTHERS THEN
868 IF c_coo%ISOPEN THEN
869 CLOSE c_coo;
870 END IF;
871 IF c_cv%ISOPEN THEN
872 CLOSE c_cv;
873 END IF;
874 IF c_susa%ISOPEN THEN
875 CLOSE c_susa;
876 END IF;
877 IF c_coousv%ISOPEN THEN
878 CLOSE c_coousv;
879 END IF;
880 IF c_sca_upd%ISOPEN THEN
881 CLOSE c_sca_upd;
882 END IF;
883 RAISE;
884 END;
885 END enrpl_upd_sca_coo;
886 BEGIN
887 IGS_GE_INS_SLE.genp_set_log_cntr;
888 -- Determine students to be processed.
889 FOR v_sca_rec IN c_sca LOOP
890 SAVEPOINT sp_sca_blk_trn;
891 v_rollback_occurred := FALSE;
892 v_processing_occurred := FALSE;
893 -- Set the key for the logging of IGS_GE_EXCEPTIONS.
894 v_course_key := TO_CHAR(v_sca_rec.person_id) || '|' ||
895 v_sca_rec.course_cd || '|' ||
896 TO_CHAR(v_sca_rec.version_number);
897 -- Determine the course offering option that the student course attempt
898 -- is to be changed too.
899 -- If parameter is null, use the existing values selected for the sua.
900 v_to_acad_cal_type := NVL(p_to_acad_cal_type,
901 p_acad_cal_type);
902 v_to_crs_version_number := NVL(p_to_crs_version_number,
903 v_sca_rec.version_number);
904 v_to_location_cd := NVL(p_to_location_cd,
905 v_sca_rec.location_cd);
906 v_to_attendance_type := NVL(p_to_attendance_type,
907 v_sca_rec.attendance_type);
908 v_to_attendance_mode := NVL(p_to_attendance_mode,
909 v_sca_rec.attendance_mode);
910 -- If the IGS_PS_UNIT offering is not being changed,
911 -- then skip the IGS_PS_UNIT attempt.
912 IF p_acad_cal_type <> v_to_acad_cal_type OR
913 v_sca_rec.version_number <> v_to_crs_version_number OR
914 v_sca_rec.location_cd <> v_to_location_cd OR
915 v_sca_rec.attendance_type <> v_to_attendance_type OR
916 v_sca_rec.attendance_mode <> v_to_attendance_mode THEN
917 enrpl_upd_sca_coo(
918 v_sca_rec.person_id,
919 v_sca_rec.course_cd,
920 v_sca_rec.version_number,
921 p_acad_cal_type,
922 p_acad_ci_sequence_number,
923 v_sca_rec.location_cd,
924 v_sca_rec.attendance_type,
925 v_sca_rec.attendance_mode,
926 v_sca_rec.funding_source,
927 v_sca_rec.course_attempt_status,
928 v_to_crs_version_number,
929 v_to_acad_cal_type,
930 v_to_location_cd,
931 v_to_attendance_type,
932 v_to_attendance_mode,
933 v_sca_error_count,
934 v_sca_warn_count,
935 v_sca_trnsfr_count);
936 -- Add counts to total
937 v_total_sca_error_count := v_total_sca_error_count + v_sca_error_count;
938 v_total_sca_warn_count := v_total_sca_warn_count + v_sca_warn_count;
939 v_total_sca_trnsfr_count := v_total_sca_trnsfr_count + v_sca_trnsfr_count;
940 END IF; -- Check if course version/offering being altered.
941 -- Add counts to total
942 v_total_sca_count := v_total_sca_count + 1;
943 END LOOP;
944 -- Log the summary counts.
945 IGS_GE_INS_SLE.genp_set_log_entry(
946 cst_enr_blk_co,
947 cst_blk_coo,
948 cst_summary,
949 NULL,
950 'Total program attempts processed|' ||
951 TO_CHAR(v_total_sca_count));
952 IGS_GE_INS_SLE.genp_set_log_entry(
953 cst_enr_blk_co,
954 cst_blk_coo,
955 cst_summary,
956 NULL,
957 'Total errors when transferring program offering option|' ||
958 TO_CHAR(v_total_sca_error_count));
959 IGS_GE_INS_SLE.genp_set_log_entry(
960 cst_enr_blk_co,
961 cst_blk_coo,
962 cst_summary,
963 NULL,
964 'Total warning when transferring program offering option|' ||
965 TO_CHAR(v_total_sca_warn_count));
966 IGS_GE_INS_SLE.genp_set_log_entry(
967 cst_enr_blk_co,
968 cst_blk_coo,
969 cst_summary,
970 NULL,
971 'Total program offering options transferred|' ||
972 TO_CHAR(v_total_sca_trnsfr_count));
973 IGS_GE_INS_SLE.genp_set_log_entry(
974 cst_enr_blk_co,
975 cst_blk_coo,
976 cst_summary,
977 NULL,
978 'Total locked record errors|' ||
979 TO_CHAR(v_total_lock_count));
980 -- Insert the log entries.
981 IGS_GE_INS_SLE.genp_ins_sle(
982 v_creation_dt);
983 p_creation_dt := v_creation_dt;
984 COMMIT;
985 RETURN;
986 EXCEPTION
987 WHEN OTHERS THEN
988 IF c_sca%ISOPEN THEN
989 CLOSE c_sca;
990 END IF;
991 RAISE;
992 END;
993 END enrp_prc_sca_blk_trn;
994
995
996 FUNCTION match_term_sca_params (
997 p_sca_person_id IN NUMBER,
998 p_sca_course_cd IN VARCHAR2,
999 p_sca_version_number IN NUMBER,
1000 p_sca_attendance_type IN VARCHAR2,
1001 p_sca_attendance_mode IN VARCHAR2,
1002 p_sca_location_cd IN VARCHAR2,
1003 p_para_course_cd IN VARCHAR2,
1004 p_para_version_number IN NUMBER,
1005 p_para_attendance_type IN VARCHAR2,
1006 p_para_attendance_mode IN VARCHAR2,
1007 p_para_location_cd IN VARCHAR2,
1008 p_term_cal_type IN VARCHAR2,
1009 p_term_sequence_number IN NUMBER)
1010 RETURN VARCHAR2 AS
1011 ------------------------------------------------------------------------------
1012 --Created by : vkarthik, Oracle IDC
1013 --Date created: 2-Dec-2003
1014 --
1015 --Purpose: The function match_term_sca_term(...) takes person_id,
1016 --course_cd, version_number, attendance_type, attendance_mode, location_cd.
1017 --If term record exists for the context and if all the not null
1018 --parameter matches, function returns 'Y' else returns 'N'. If term record
1019 --doesn't exist and program attempt record exists for the context and all the
1020 --not null parameters match, function retunrs 'Y' else returns 'N'
1021
1022 --Known limitations/enhancements and/or remarks:
1023 --
1024 --Change History:
1025 ------------------------------------------------------------------------------
1026
1027 CURSOR c_terms IS
1028 SELECT attendance_type, attendance_mode, location_cd
1029 FROM igs_en_spa_terms
1030 WHERE
1031 person_id = p_sca_person_id AND
1032 program_cd = p_sca_course_cd AND
1033 term_cal_type = p_term_cal_type AND
1034 term_sequence_number = p_term_sequence_number;
1035
1036 lc_terms c_terms%ROWTYPE;
1037 l_return_status VARCHAR2(1);
1038 l_para_course_cd igs_en_spa_terms.program_cd%TYPE;
1039 l_para_version_number igs_en_spa_terms.program_version%TYPE;
1040 l_para_attendance_type igs_en_spa_terms.attendance_type%TYPE;
1041 l_para_attendance_mode igs_en_spa_terms.attendance_mode%TYPE;
1042 l_para_location_cd igs_en_spa_terms.location_cd%TYPE;
1043
1044 BEGIN
1045 l_return_status := 'N';
1046 IF (NVL(p_para_course_cd,'%')='%') THEN
1047 l_para_course_cd := NULL;
1048 ELSE
1049 l_para_course_cd := p_para_course_cd ;
1050 END IF;
1051
1052 l_para_version_number := p_para_version_number;
1053
1054 IF (NVL(p_para_attendance_type,'%')='%') THEN
1055 l_para_attendance_type := NULL;
1056 ELSE
1057 l_para_attendance_type := p_para_attendance_type;
1058 END IF;
1059
1060 IF (NVL(p_para_attendance_mode,'%')='%') THEN
1061 l_para_attendance_mode := NULL;
1062 ELSE
1063 l_para_attendance_mode := p_para_attendance_mode;
1064 END IF;
1065
1066 IF (NVL(p_para_location_cd,'%')='%') THEN
1067 l_para_location_cd := NULL;
1068 ELSE
1069 l_para_location_cd := p_para_location_cd;
1070 END IF;
1071
1072 IF (l_para_course_cd IS NULL AND
1073 l_para_version_number IS NULL AND
1074 l_para_attendance_type IS NULL AND
1075 l_para_attendance_mode IS NULL AND
1076 l_para_location_cd IS NULL) THEN
1077 RETURN 'Y'; -- if all parameters are NULL return 'Y'
1078 END IF;
1079
1080 OPEN c_terms;
1081 FETCH c_terms INTO lc_terms;
1082
1083 IF c_terms%FOUND THEN
1084 -- term record exists for the context
1085 IF lc_terms.attendance_type = NVL(l_para_attendance_type, lc_terms.attendance_type) AND
1086 lc_terms.attendance_mode = NVL(l_para_attendance_mode, lc_terms.attendance_mode) AND
1087 lc_terms.location_cd = NVL(l_para_location_cd, lc_terms.location_cd) THEN
1088 l_return_status := 'Y';
1089 ELSE
1090 l_return_status := 'N';
1091 END IF;
1092 ELSE
1093 -- term record doesn't exist for the passed in term
1094 IF p_sca_attendance_type = NVL(l_para_attendance_type, p_sca_attendance_type) AND
1095 p_sca_attendance_mode = NVL(l_para_attendance_mode, p_sca_attendance_mode) AND
1096 p_sca_location_cd = NVL(l_para_location_cd, p_sca_location_cd) THEN
1097 l_return_status := 'Y';
1098 ELSE
1099 l_return_status := 'N';
1100 END IF;
1101 END IF;
1102
1103 CLOSE c_terms;
1104 RETURN l_return_status;
1105 END match_term_sca_params;
1106
1107
1108 -- modified this procedure for enrollment processes build bug #1832130
1109 -- modified tbh calls ,and moved code by smaddali
1110 PROCEDURE Enrp_Prc_Sua_Blk_E_D(
1111 p_teach_cal_type IN VARCHAR2 ,
1112 p_teach_ci_sequence_number IN NUMBER ,
1113 p_course_cd IN VARCHAR2 ,
1114 p_location_cd IN VARCHAR2 ,
1115 p_attendance_type IN VARCHAR2 ,
1116 p_attendance_mode IN VARCHAR2 ,
1117 p_unit_cd IN VARCHAR2 ,
1118 p_uv_version_number IN NUMBER ,
1119 p_group_id IN NUMBER ,
1120 p_person_id IN NUMBER ,
1121 p_action1 IN VARCHAR2 ,
1122 p_unit_cd1 IN VARCHAR2 ,
1123 p_uv_version_number1 IN NUMBER ,
1124 p_location_cd1 IN VARCHAR2 ,
1125 p_unit_class1 IN VARCHAR2 ,
1126 p_action2 IN VARCHAR2 ,
1127 p_unit_cd2 IN VARCHAR2 ,
1128 p_uv_version_number2 IN NUMBER ,
1129 p_location_cd2 IN VARCHAR2 ,
1130 p_unit_class2 IN VARCHAR2 ,
1131 p_action3 IN VARCHAR2 ,
1132 p_unit_cd3 IN VARCHAR2 ,
1133 p_uv_version_number3 IN NUMBER ,
1134 p_location_cd3 IN VARCHAR2 ,
1135 p_unit_class3 IN VARCHAR2 ,
1136 p_action4 IN VARCHAR2 ,
1137 p_unit_cd4 IN VARCHAR2 ,
1138 p_uv_version_number4 IN NUMBER ,
1139 p_location_cd4 IN VARCHAR2 ,
1140 p_unit_class4 IN VARCHAR2 ,
1141 p_action5 IN VARCHAR2 ,
1142 p_unit_cd5 IN VARCHAR2 ,
1143 p_uv_version_number5 IN NUMBER ,
1144 p_location_cd5 IN VARCHAR2 ,
1145 p_unit_class5 IN VARCHAR2 ,
1146 p_action6 IN VARCHAR2 ,
1147 p_unit_cd6 IN VARCHAR2 ,
1148 p_uv_version_number6 IN NUMBER ,
1149 p_location_cd6 IN VARCHAR2 ,
1150 p_unit_class6 IN VARCHAR2 ,
1151 p_action7 IN VARCHAR2 ,
1152 p_unit_cd7 IN VARCHAR2 ,
1153 p_uv_version_number7 IN NUMBER ,
1154 p_location_cd7 IN VARCHAR2 ,
1155 p_unit_class7 IN VARCHAR2 ,
1156 p_action8 IN VARCHAR2 ,
1157 p_unit_cd8 IN VARCHAR2 ,
1158 p_uv_version_number8 IN NUMBER ,
1159 p_location_cd8 IN VARCHAR2 ,
1160 p_unit_class8 IN VARCHAR2 ,
1161 p_confirmed_ind IN VARCHAR2 ,
1162 p_enrolled_dt IN DATE ,
1163 p_no_assessment_ind IN VARCHAR2 ,
1164 p_exam_location_cd IN VARCHAR2 ,
1165 p_alternative_title IN VARCHAR2 ,
1166 p_override_enrolled_cp IN NUMBER ,
1167 p_override_achievable_cp IN NUMBER ,
1168 p_override_eftsu IN NUMBER,
1169 p_override_credit_reason IN VARCHAR2,
1170 p_administrative_unit_status IN VARCHAR2 ,
1171 p_discontinued_dt IN DATE ,
1172 p_creation_dt IN OUT NOCOPY DATE ,
1173 p_dcnt_reason_cd IN VARCHAR2 ,
1174 p_unit_loc_cd IN VARCHAR2 ,
1175 p_unit_class IN VARCHAR2 ,
1176 p_reason IN VARCHAR2,
1177 p_enr_method IN VARCHAR2,
1178 p_load_cal_type IN VARCHAR2,
1179 p_load_cal_seq IN NUMBER)
1180
1181 AS
1182 /*--------------------------------------------------------------------------------------------------------------------------------------
1183 --Created by : knaraset, Oracle IDC
1184 --Date created:
1185 --
1186 --Purpose:
1187 -- enrp_prc_sua_blk_e_d
1188 -- This module is a combined process to handle the enrolment and/or
1189 -- discontinuation of one or more units within a given teaching period
1190 -- for a specified group of students.
1191 -- The module will process each student course attempt for the given
1192 -- student course attempt selection parameters and then apply the IGS_PS_UNIT
1193 -- alterations (enrol/discontinue) to the student's course.
1194 -- It will write any IGS_GE_EXCEPTIONS and log information to the IGS_GE_S_LOG_ENTRY
1195 -- table which will be used in an exception report.
1196 -- After enrolling or discontinuing, a validation check is performed
1197 -- for the student's course attempt to determine if any IGS_GE_EXCEPTIONS
1198 -- exists for the students course enrolment.
1199 --
1200 --Known limitations/enhancements and/or remarks:
1201 --
1202 --Change History:
1203 -- WHO WHEN WHAT
1204
1205 -- kkillams 14-06-2003 Added three new parameters p_enr_method,p_load_cal_type and p_load_cal_seq to the job.
1206 -- and Modified the all validations as per Validation TD. bug 2829270
1207
1208 -- ptandon 04-07-2003 Modified the cursor c_sca to fetch records when value for p_course_cd is not passed and
1209 -- added logic to test for valid Administrative Unit Status while discontinuing unit attempts.
1210 -- Bug# 3036433
1211
1212 -- ptandon 06-Oct-2003 Modified to add new validation to populate the column core_indicator_code in unit
1213 -- attempt table as part of Prevent Dropping Core Units. Enh Bug# 3052432.
1214 -- kkillams 08-10-2003 Remove the call to drop_all_workflow procedure and setting the
1215 -- student unit attempt package variables as part of bug#3160856
1216 --rvivekan 22-oct-2003 Placements build#3052438. Added code to sort the usecs based on relation_type. Also added handling
1217 -- to enroll subordinates when a superior is enrolled and to drop subordinates when a superior is dropped
1218 --vkarthik 02-Dec-2003 Modified c_sca to check for term records
1219 --stutta 10-Feb-2004 Modified cursor c_get_sua_d to and made unit_class, location_cd optional. Modified fetch from
1220 -- cursor c_get_sua_d to a loop, to enable discontinuation of multiple unit attempt of a unit when
1221 -- unit_class, location not passed as parameters. Modified c_sca and passed sca.person_id,sca.course_cd
1222 -- to match_term_sca_params call. Introduced new variable l_disc_count to calculate total_disc_count.
1223 --stutta 11-Feb-2004 Passed new parameter p_enrolled_dt to validate_enroll_validate call. Passing p_enrolled_dt,
1224 -- p_discontinued_dt(instead of passing SYDATE always) to enr_sub_units, drop_sub_units respectively.
1225 --stutta 18-Feb-2004 Changed logic to rollback the current action only for a failed user level validation. Changed logging
1226 -- by resetting the log only when a program validation fails. Changed c_sca to check if the person group
1227 -- is valid as on current date. BUG# 3158046, BUG# 3430661
1228 -- vkarthik 31-Aug-2004 Deny all hold validation added to bulk enrollment/discontinuation job as part of Bug 3823810
1229 --ckasu 13-Sep-2004 Modified procedure inorder to consider Person step validations in Discontinuing and Droping units.
1230 -- as part of Bug 3823810
1231 --stutta 07-Dec-2004 Modified c_sca to select programs which are primary in the passed term calendar.
1232 As per bug#4046043
1233 --ckasu 17-MAR-2006 Modified call to igs_ss_en_wrappers.insert_into_enr_worksheet by passing p_no_assessment_ind
1234 -- as part of Bug 5070742.
1235
1236 --------------------------------------------------------------------------------------------------------------------------------------*/
1237 e_resource_busy_exception EXCEPTION;
1238 PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
1239 cst_enrol CONSTANT VARCHAR2 (35):= 'ENROL';
1240 cst_course CONSTANT VARCHAR2 (35):= 'COURSE';
1241 cst_encumb CONSTANT VARCHAR2 (35) := 'ENCUMB';
1242 cst_advstand CONSTANT VARCHAR2 (35) := 'ADVSTAND';
1243 cst_enroldt CONSTANT VARCHAR2 (35) := 'ENROLDT';
1244 cst_teaching CONSTANT VARCHAR2 (35) := 'TEACHING';
1245 cst_discontinue CONSTANT VARCHAR2 (35) := 'DISCONTINUE';
1246 cst_discontin CONSTANT VARCHAR2 (35) := 'DISCONTIN';
1247 cst_unconfirm CONSTANT VARCHAR2 (35) := 'UNCONFIRM';
1248 cst_drop CONSTANT VARCHAR2 (35) := 'DROPPED';
1249 cst_waitlist CONSTANT VARCHAR2 (35) := 'WAITLISTED';
1250 cst_invalid CONSTANT VARCHAR2 (35) := 'INVALID';
1251 cst_enr_blk_ua CONSTANT igs_ge_s_log.s_log_type%TYPE := 'ENR-BLK-UA';
1252 cst_blk_ua CONSTANT VARCHAR2 (35) := 'BULK UNIT ENROLMENT/DISCONTINUATION';
1253 cst_inactive CONSTANT VARCHAR2 (35) := 'INACTIVE';
1254 cst_enrolled CONSTANT VARCHAR2 (35) := 'ENROLLED';
1255 cst_intermit CONSTANT VARCHAR2 (35) := 'INTERMIT';
1256 cst_complete CONSTANT VARCHAR2 (35) := 'COMPLETED';
1257 cst_summary CONSTANT igs_ge_s_log_entry.key%TYPE := 'SUMMARY';
1258
1259
1260
1261 t_sua_enroll t_sua_typ;
1262 t_sua_disc t_sua_typ;
1263 t_sua_clear t_sua_typ;
1264 l_discontinued_dt DATE;
1265 l_enrolled_dt DATE;
1266 l_cntr_enroll NUMBER(2);
1267 l_cntr_disc NUMBER(2);
1268 l_total_exist_sua_count NUMBER;
1269 l_total_enrol_error_count NUMBER;
1270 l_total_enrol_warn_count NUMBER;
1271 l_total_enrol_count NUMBER;
1272 l_enrol_count NUMBER;
1273 l_total_disc_not_enrol_count NUMBER;
1274 l_total_disc_error_count NUMBER;
1275 l_total_disc_warn_count NUMBER;
1276 l_total_disc_count NUMBER;
1277 l_disc_count NUMBER;
1278 l_total_course_error_count NUMBER;
1279 l_total_course_warn_count NUMBER;
1280 l_total_encumb_error_count NUMBER;
1281 l_total_lock_count NUMBER;
1282 l_commencement_type VARCHAR2(20) DEFAULT NULL;
1283 l_message_name VARCHAR2(2000);
1284 l_message_token VARCHAR2(2000);
1285 l_deny_warn VARCHAR2(20);
1286 l_waitlist_ind VARCHAR2(3);
1287 l_return_status BOOLEAN;
1288 l_ret_stat VARCHAR2(100);
1289 l_ovrrdchk VARCHAR2(1);
1290 l_ovrd_drop VARCHAR2(1);
1291 l_processed BOOLEAN;
1292 l_action_processed BOOLEAN;
1293 l_attendance_type_reach BOOLEAN := TRUE;
1294 l_att_type VARCHAR2(40);
1295 l_attendance_types VARCHAR2(100); -- As returned from the function igs_en_val_sca.enrp_val_coo_att
1296 l_unit_attempt_status IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE;
1297 l_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
1298 l_person_type IGS_PE_PERSON_TYPES.person_type_code%TYPE;
1299 l_en_cal_type IGS_CA_INST.CAL_TYPE%TYPE;
1300 l_en_ci_seq_num IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
1301 l_enrolment_cat IGS_PS_TYPE.ENROLMENT_CAT%TYPE;
1302 l_unit_section_status IGS_PS_UNIT_OFR_OPT.unit_section_status%TYPE DEFAULT NULL;
1303 l_acad_cal_type IGS_CA_INST.CAL_TYPE%TYPE;
1304 l_acad_ci_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
1305 l_acad_ci_start_dt IGS_CA_INST.START_DT%TYPE;
1306 l_acad_ci_end_dt IGS_CA_INST.END_DT%TYPE;
1307 l_alternate_code IGS_CA_INST.ALTERNATE_CODE%TYPE;
1308 l_key IGS_GE_S_LOG_ENTRY.key%TYPE;
1309 l_course_key IGS_GE_S_LOG_ENTRY.key%TYPE;
1310 l_unit_key IGS_GE_S_LOG_ENTRY.key%TYPE;
1311 l_text IGS_GE_S_LOG_ENTRY.text%TYPE;
1312 l_enroll IGS_LOOKUP_VALUES.meaning%TYPE;
1313 l_discon IGS_LOOKUP_VALUES.meaning%TYPE;
1314 l_eftsu_total IGS_EN_SU_ATTEMPT.override_eftsu%type;
1315 l_total_credit_points IGS_EN_SU_ATTEMPT.override_enrolled_cp%TYPE ;
1316 l_administrative_unit_status IGS_EN_SU_ATTEMPT_ALL.administrative_unit_status%TYPE;
1317 l_person_number IGS_PE_PERSON.person_number%TYPE;
1318 l_dummy VARCHAR2(100);
1319 l_creation_dt DATE;
1320 l_encoded_msg VARCHAR2(2000);
1321 l_app_sht_name VARCHAR2(100);
1322 l_msg_name VARCHAR2(2000);
1323 l_temp_msg VARCHAR2(2000);
1324 l_core_indicator_code IGS_EN_SU_ATTEMPT.core_indicator_code%TYPE;
1325 l_relation_type VARCHAR2(100);
1326 l_enr_uoo_ids VARCHAR2(2000);
1327 l_sub_success VARCHAR2(2000);
1328 l_sub_waitlist VARCHAR2(2000);
1329 l_sub_failed VARCHAR2(2000);
1330 l_uoo_ids_list VARCHAR2(2000);
1331 l_succ_msg VARCHAR2(100);
1332 l_failed_uoo_ids VARCHAR2(2000);
1333
1334 -- modified cursor for perf bug : 3696293 : sql id: 14791714
1335 CURSOR c_per_num (cp_person_id igs_pe_person.person_id%TYPE)
1336 IS SELECT party_number FROM hz_parties
1337 WHERE party_id = cp_person_id;
1338
1339
1340
1341 CURSOR c_sca IS SELECT sca.person_id,
1342 sca.course_cd,
1343 sca.version_number,
1344 sca.coo_id
1345 FROM IGS_EN_STDNT_PS_ATT sca
1346 WHERE -- person_id matches
1347
1348 (p_group_id IS NULL OR
1349 EXISTS (
1350 SELECT 'X'
1351 FROM IGS_PE_PRSID_GRP_MEM pig
1352 WHERE pig.group_id = p_group_id AND
1353 pig.person_id = sca.person_id AND
1354 (pig.start_date IS NULL OR pig.start_date <= TRUNC(SYSDATE)) AND
1355 (pig.end_date IS NULL OR pig.end_date >= TRUNC(SYSDATE))
1356 ))
1357 AND sca.person_id = NVL (p_person_id,sca.person_id )
1358 AND sca.course_cd like p_course_cd
1359 AND match_term_sca_params (
1360 sca.person_id,
1361 sca.course_cd,
1362 NULL,
1363 sca.attendance_type,
1364 sca.attendance_mode,
1365 sca.location_cd,
1366 p_course_cd,
1367 NULL,
1368 p_attendance_type,
1369 p_attendance_mode,
1370 p_location_cd,
1371 p_load_cal_type,
1372 p_load_cal_seq )='Y'
1373 AND sca.course_attempt_status IN (cst_inactive,cst_enrolled,cst_intermit,cst_complete)
1374 AND (p_unit_cd IS NULL OR
1375 EXISTS (
1376 SELECT 'X'
1377 FROM IGS_EN_SU_ATTEMPT sua
1378 WHERE sua.person_id = sca.person_id AND
1379 sua.unit_cd = p_unit_cd AND
1380 sua.version_number = NVL(p_uv_version_number, sua.version_number) AND
1381 sua.location_cd = NVL(p_unit_loc_cd,sua.location_cd) AND
1382 sua.unit_class = NVL(p_unit_class,sua.unit_class) AND
1383 sua.cal_type = p_teach_cal_type AND
1384 sua.ci_sequence_number = p_teach_ci_sequence_number))
1385 AND (igs_en_spa_terms_api.get_spat_primary_prg(sca.person_id,sca.course_cd,
1386 p_load_cal_type,p_load_cal_seq) = 'PRIMARY'
1387 OR NVL(fnd_profile.value('CAREER_MODEL_ENABLED'),'N') = 'N')
1388 ORDER BY sca.person_id,
1389 sca.course_cd
1390 FOR UPDATE NOWAIT;
1391 CURSOR c_enroll(cp_code igs_lookup_values.lookup_code%TYPE) IS
1392 SELECT meaning
1393 FROM igs_lookup_values v1
1394 WHERE v1.lookup_Type = 'VS_EN_ACT_UNIT' AND
1395 v1.lookup_code=cp_code;
1396 CURSOR cur_get_uoo(cp_unit_cd igs_ps_unit_ofr_opt.unit_cd%TYPE,
1397 cp_ver_num igs_ps_unit_ofr_opt.version_number%TYPE,
1398 cp_cal_type igs_ps_unit_ofr_opt.cal_type%TYPE,
1399 cp_ci_seq_num igs_ps_unit_ofr_opt.ci_sequence_number%TYPE,
1400 cp_unit_class igs_ps_unit_ofr_opt.unit_class%TYPE,
1401 cp_location_cd igs_ps_unit_ofr_opt.location_cd%TYPE)IS
1402 SELECT uoo_id,relation_type
1403 FROM igs_ps_unit_ofr_opt
1404 WHERE unit_cd = cp_unit_cd
1405 AND version_number = cp_ver_num
1406 AND cal_type = cp_cal_type
1407 AND ci_sequence_number = cp_ci_seq_num
1408 AND unit_class = cp_unit_class
1409 AND location_cd = cp_location_cd;
1410 CURSOR cur_sua_stat (cp_person_id igs_en_su_attempt.person_id%TYPE,
1411 cp_course_cd igs_en_su_attempt.course_cd%TYPE,
1412 cp_uoo_id igs_ps_unit_ofr_opt.uoo_id%TYPE)IS
1413 SELECT unit_attempt_status
1414 FROM igs_en_su_attempt
1415 WHERE person_id = cp_person_id
1416 AND course_cd = cp_course_cd
1417 AND uoo_id = cp_uoo_id;
1418
1419 CURSOR cur_cal_rel (cp_teach_cal_type igs_ca_inst.cal_type%TYPE,
1420 cp_teach_seq_num igs_ca_inst.sequence_number%TYPE,
1421 cp_load_cal_type igs_ca_inst.cal_type%TYPE,
1422 cp_load_seq_num igs_ca_inst.sequence_number%TYPE) IS
1423 SELECT '1'
1424 FROM igs_ca_teach_to_load_v
1425 WHERE teach_cal_type = cp_teach_cal_type
1426 AND teach_ci_sequence_number = cp_teach_seq_num
1427 AND load_cal_type = cp_load_cal_type
1428 AND load_ci_sequence_number = cp_load_seq_num;
1429
1430
1431 CURSOR cur_get_sua_d (cp_person_id igs_en_su_attempt.person_id%TYPE,
1432 cp_course_cd igs_en_su_attempt.course_cd%TYPE,
1433 cp_unit_cd igs_ps_unit_ofr_opt.unit_cd%TYPE,
1434 cp_ver_num igs_ps_unit_ofr_opt.version_number%TYPE,
1435 cp_cal_type igs_ps_unit_ofr_opt.cal_type%TYPE,
1436 cp_ci_seq_num igs_ps_unit_ofr_opt.ci_sequence_number%TYPE,
1437 cp_unit_class igs_ps_unit_ofr_opt.unit_class%TYPE,
1438 cp_location_cd igs_ps_unit_ofr_opt.location_cd%TYPE)IS
1439 SELECT sua.uoo_id,sua.unit_attempt_status,uoo.relation_type
1440 FROM igs_en_su_attempt sua,
1441 igs_ps_unit_ofr_opt uoo
1442 WHERE sua.person_id = cp_person_id
1443 AND sua.course_cd = cp_course_cd
1444 AND sua.unit_cd = cp_unit_cd
1445 AND sua.version_number = NVL(cp_ver_num,sua.version_number)
1446 AND sua.cal_type = cp_cal_type
1447 AND sua.ci_sequence_number = cp_ci_seq_num
1448 AND sua.unit_class = NVL(cp_unit_class, sua.unit_class)
1449 AND sua.location_cd = NVL(cp_location_cd, sua.location_cd)
1450 AND sua.uoo_id = uoo.uoo_id;
1451
1452
1453
1454 PROCEDURE log_error_message(p_messages VARCHAR2,
1455 p_del VARCHAR2,
1456 p_key VARCHAR2,
1457 p_type VARCHAR2,
1458 p_c_u VARCHAR2) AS
1459 /*------------------------------------------------------
1460 --Created by : KKILLAMS, Oracle IDC
1461 --Date created:
1462 --
1463 --Purpose:This procedure will logs the error/warn messages
1464 -- p_messages --Concatenate error message
1465 -- p_del --Deliminator
1466 -- p_key --Key
1467 -- p_type --Deny/Warn
1468 -- p_c_u --C --> Course related errors/warns
1469 -- --E --> Unit related errors/warns while enroll
1470 -- --W --> Unit related errors/warns while discontinue
1471 -- --I --> Information messages
1472 --Procedure logs the all error/warn messages.
1473 --Known limitations/enhancements and/or remarks:
1474 --
1475 --Change History:
1476 -- WHO WHEN WHAT
1477 ---------------------------------------------------------*/
1478 cst_error CONSTANT VARCHAR2(10) := 'ERROR|';
1479 cst_warn CONSTANT VARCHAR2(10) := 'WARNING|';
1480 cst_information CONSTANT VARCHAR2(12) := 'INFORMATION|';
1481 l_messages VARCHAR2(2000);
1482 l_mesg_name VARCHAR2(2000);
1483 l_mesg_txt VARCHAR2(2000);
1484 l_key IGS_GE_S_LOG_ENTRY.key%TYPE;
1485 l_err_type VARCHAR2(30);
1486 l_msg_len NUMBER ;
1487 l_msg_token VARCHAR2(100);
1488 l_str_place NUMBER(3);
1489 BEGIN --log_error_message
1490 l_messages := p_messages;
1491 IF SUBSTR(l_messages,1,1) = p_del THEN
1492 l_messages := SUBSTR(l_messages,2);
1493 END IF;
1494 IF SUBSTR(l_messages,-1,1) <> p_del THEN
1495 l_messages := l_messages||p_del;
1496 END IF;
1497 l_mesg_name := NULL;
1498 l_msg_len:= LENGTH(l_messages);
1499 FOR i IN 1 .. l_msg_len
1500 LOOP
1501 IF SUBSTR(l_messages,i,1) = p_del THEN
1502 IF p_c_u <> 'I' THEN
1503 IF (p_type = 'DENY') AND (i = l_msg_len) THEN
1504 l_err_type := cst_error;
1505 IF p_c_u = 'C' OR p_c_u = 'P' THEN
1506 l_total_course_error_count := l_total_course_error_count + 1;
1507 ELSIF p_c_u = 'E' THEN
1508 l_total_enrol_error_count := l_total_enrol_error_count + 1;
1509 ELSE
1510 l_total_disc_error_count := l_total_disc_error_count + 1;
1511 END IF;
1512 ELSE
1513 l_err_type := cst_warn;
1514 IF p_c_u = 'C' OR p_c_u = 'P' THEN
1515 l_total_course_warn_count:= l_total_course_warn_count + 1;
1516 ELSIF p_c_u = 'E' THEN
1517 l_total_enrol_warn_count := l_total_enrol_warn_count + 1;
1518 ELSE
1519 l_total_disc_warn_count:= l_total_disc_warn_count + 1;
1520 END IF;
1521 END IF;
1522 IF p_c_u = 'P' THEN
1523 l_err_type := l_err_type||'PERSON-CHECK|';
1524 END IF;
1525 ELSE -- IF p_c_u is I (information message, dont increment any counters
1526 l_err_type:=cst_information;
1527 END IF;
1528
1529 IF LENGTH(l_mesg_name) <=30 THEN
1530 --Following codes checks whether message token is exists or not.
1531 l_str_place :=INSTR(l_mesg_name,'*');
1532 IF l_str_place <> 0 THEN
1533 l_msg_token:= SUBSTR(l_mesg_name,l_str_place+1);
1534 l_mesg_name:= SUBSTR(l_mesg_name,1,l_str_place-1);
1535 fnd_message.set_name('IGS',l_mesg_name);
1536 fnd_message.set_token('UNIT_CD',l_msg_token);
1537 ELSE
1538 fnd_message.set_name('IGS',l_mesg_name);
1539 END IF;
1540 l_mesg_txt := fnd_message.get;
1541 ELSE
1542 --exception has occured in igs_ss_en_wrappers and l_mesg_name contains
1543 --the exception TEXT (not name)
1544 --So pass the text and use a dummy message (smaller than 30chars)
1545 --The dummy message needs to have the UNIT_CD token
1546 --Because only in this scneario does the report read the p_text instead of the p_sle_message_name
1547 l_mesg_txt :=l_mesg_name;
1548 l_mesg_name:='IGS_EN_RULE_TEXT';
1549 END IF;
1550
1551 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
1552 p_sl_key => cst_blk_ua,
1553 p_sle_key => p_key,
1554 p_sle_message_name => l_mesg_name,
1555 p_text => l_err_type ||l_mesg_txt);
1556 l_mesg_name := NULL;
1557 ELSE
1558 l_mesg_name := l_mesg_name||SUBSTR(l_messages,i,1);
1559 END IF;
1560 END LOOP;
1561 END log_error_message;
1562
1563 BEGIN --Enrp_Prc_Sua_Blk_E_D
1564 l_discontinued_dt := NVL(p_discontinued_dt,TRUNC(SYSDATE));
1565 l_enrolled_dt := NVL(p_enrolled_dt,TRUNC(SYSDATE));
1566
1567 --Changing the invoke source from NJOB to JOB to correct _actual counter handling
1568 igs_en_gen_017.g_invoke_source := 'JOB';
1569
1570 OPEN c_enroll('ENROL');
1571 FETCH c_enroll INTO l_enroll;
1572 CLOSE c_enroll;
1573 OPEN c_enroll('DISCONTNUE');
1574 FETCH c_enroll INTO l_discon;
1575 CLOSE c_enroll;
1576
1577 --Validate the input teach and load calendars whether the are having the relation ship.
1578 OPEN cur_cal_rel(p_teach_cal_type,
1579 p_teach_ci_sequence_number,
1580 p_load_cal_type,
1581 p_load_cal_seq);
1582 FETCH cur_cal_rel INTO l_dummy;
1583 IF cur_cal_rel%NOTFOUND THEN
1584 CLOSE cur_cal_rel;
1585 fnd_message.set_name('IGS','IGS_EN_BULK_E_D_NO_CAL_REL');
1586 igs_ge_msg_stack.add;
1587 app_exception.raise_exception;
1588 END IF;
1589 CLOSE cur_cal_rel;
1590 -- Clear pl/sql table for writing IGS_GE_S_LOG_ENTRY records
1591 IGS_GE_INS_SLE.genp_set_log_cntr;
1592 -- Determine the (first) academic period of the teaching period.
1593 l_message_name := NULL;
1594 l_alternate_code := igs_en_gen_002.enrp_get_acad_alt_cd(p_cal_type =>p_teach_cal_type,
1595 p_ci_sequence_number =>p_teach_ci_sequence_number,
1596 p_acad_cal_type =>l_acad_cal_type,
1597 p_acad_ci_sequence_number =>l_acad_ci_sequence_number,
1598 p_acad_ci_start_dt =>l_acad_ci_start_dt,
1599 p_acad_ci_end_dt =>l_acad_ci_end_dt,
1600 p_message_name =>l_message_name);
1601 IF (l_message_name IS NOT NULL) THEN
1602 fnd_message.set_name('IGS',l_message_name);
1603 igs_ge_msg_stack.add;
1604 app_exception.raise_exception;
1605 END IF;
1606 -- Initialise counters
1607 l_total_exist_sua_count := 0;
1608 l_total_enrol_error_count := 0;
1609 l_total_enrol_warn_count := 0;
1610 l_total_enrol_count := 0;
1611 l_enrol_count := 0;
1612 l_total_disc_not_enrol_count := 0;
1613 l_total_disc_error_count := 0;
1614 l_total_disc_count := 0;
1615 l_disc_count := 0;
1616 l_total_course_error_count := 0;
1617 l_total_course_warn_count := 0;
1618 l_total_encumb_error_count := 0;
1619 l_total_lock_count := 0;
1620 l_total_disc_warn_count := 0;
1621 l_total_disc_error_count := 0;
1622
1623
1624 -- reset pl/sql table and counter
1625 l_cntr_enroll := 0;
1626 l_cntr_disc := 0;
1627
1628 -- Put parameters into pl/sql table
1629 IF p_action1 = cst_enrol AND p_unit_cd1 IS NOT NULL THEN
1630 l_cntr_enroll := l_cntr_enroll+1;
1631 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd1;
1632 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number1;
1633 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd1;
1634 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class1;
1635 ELSIF p_action1 = cst_discontinue AND p_unit_cd1 IS NOT NULL THEN
1636 l_cntr_disc := l_cntr_disc+1;
1637 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd1;
1638 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number1;
1639 t_sua_disc(l_cntr_disc).location_cd := p_location_cd1;
1640 t_sua_disc(l_cntr_disc).unit_class := p_unit_class1;
1641 END IF;
1642
1643 IF p_action2 = cst_enrol AND p_unit_cd2 IS NOT NULL THEN
1644 l_cntr_enroll := l_cntr_enroll+1;
1645 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd2;
1646 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number2;
1647 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd2;
1648 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class2;
1649 ELSIF p_action2 = cst_discontinue AND p_unit_cd2 IS NOT NULL THEN
1650 l_cntr_disc := l_cntr_disc+1;
1651 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd2;
1652 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number2;
1653 t_sua_disc(l_cntr_disc).location_cd := p_location_cd2;
1654 t_sua_disc(l_cntr_disc).unit_class := p_unit_class2;
1655 END IF;
1656
1657 IF p_action3 = cst_enrol AND p_unit_cd3 IS NOT NULL THEN
1658 l_cntr_enroll := l_cntr_enroll+1;
1659 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd3;
1660 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number3;
1661 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd3;
1662 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class3;
1663 ELSIF p_action3 = cst_discontinue AND p_unit_cd3 IS NOT NULL THEN
1664 l_cntr_disc := l_cntr_disc+1;
1665 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd3;
1666 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number3;
1667 t_sua_disc(l_cntr_disc).location_cd := p_location_cd3;
1668 t_sua_disc(l_cntr_disc).unit_class := p_unit_class3;
1669 END IF;
1670
1671 IF p_action4 = cst_enrol AND p_unit_cd4 IS NOT NULL THEN
1672 l_cntr_enroll := l_cntr_enroll+1;
1673 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd4;
1674 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number4;
1675 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd4;
1676 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class4;
1677 ELSIF p_action4 = cst_discontinue AND p_unit_cd4 IS NOT NULL THEN
1678 l_cntr_disc := l_cntr_disc+1;
1679 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd4;
1680 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number4;
1681 t_sua_disc(l_cntr_disc).location_cd := p_location_cd4;
1682 t_sua_disc(l_cntr_disc).unit_class := p_unit_class4;
1683 END IF;
1684
1685 IF p_action5 = cst_enrol AND p_unit_cd5 IS NOT NULL THEN
1686 l_cntr_enroll := l_cntr_enroll+1;
1687 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd5;
1688 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number5;
1689 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd5;
1690 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class5;
1691 ELSIF p_action5 = cst_discontinue AND p_unit_cd5 IS NOT NULL THEN
1692 l_cntr_disc := l_cntr_disc+1;
1693 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd5;
1694 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number5;
1695 t_sua_disc(l_cntr_disc).location_cd := p_location_cd5;
1696 t_sua_disc(l_cntr_disc).unit_class := p_unit_class5;
1697 END IF;
1698 IF p_action6 = cst_enrol AND p_unit_cd6 IS NOT NULL THEN
1699 l_cntr_enroll := l_cntr_enroll+1;
1700 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd6;
1701 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number6;
1702 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd6;
1703 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class6;
1704 ELSIF p_action6 = cst_discontinue AND p_unit_cd6 IS NOT NULL THEN
1705 l_cntr_disc := l_cntr_disc+1;
1706 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd6;
1707 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number6;
1708 t_sua_disc(l_cntr_disc).location_cd := p_location_cd6;
1709 t_sua_disc(l_cntr_disc).unit_class := p_unit_class6;
1710 END IF;
1711 IF p_action7 = cst_enrol AND p_unit_cd7 IS NOT NULL THEN
1712 l_cntr_enroll := l_cntr_enroll+1;
1713 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd7;
1714 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number7;
1715 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd7;
1716 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class7;
1717 ELSIF p_action7 = cst_discontinue AND p_unit_cd7 IS NOT NULL THEN
1718 l_cntr_disc := l_cntr_disc+1;
1719 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd7;
1720 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number7;
1721 t_sua_disc(l_cntr_disc).location_cd := p_location_cd7;
1722 t_sua_disc(l_cntr_disc).unit_class := p_unit_class7;
1723 END IF;
1724
1725 IF p_action8 = cst_enrol AND p_unit_cd8 IS NOT NULL THEN
1726 l_cntr_enroll := l_cntr_enroll+1;
1727 t_sua_enroll(l_cntr_enroll).unit_cd := p_unit_cd8;
1728 t_sua_enroll(l_cntr_enroll).uv_version_number := p_uv_version_number8;
1729 t_sua_enroll(l_cntr_enroll).location_cd := p_location_cd8;
1730 t_sua_enroll(l_cntr_enroll).unit_class := p_unit_class8;
1731 ELSIF p_action8 = cst_discontinue AND p_unit_cd8 IS NOT NULL THEN
1732 l_cntr_disc := l_cntr_disc+1;
1733 t_sua_disc(l_cntr_disc).unit_cd := p_unit_cd8;
1734 t_sua_disc(l_cntr_disc).uv_version_number := p_uv_version_number8;
1735 t_sua_disc(l_cntr_disc).location_cd := p_location_cd8;
1736 t_sua_disc(l_cntr_disc).unit_class := p_unit_class8;
1737 END IF;
1738
1739 IF p_confirmed_ind ='Y' AND l_cntr_enroll > 0 THEN
1740 l_ovrrdchk := 'Y';
1741 ELSE
1742 l_ovrrdchk := 'N';
1743 END IF;
1744 --Start of the main process
1745 --Sort usecs placing superiors before subordinates
1746 l_enr_uoo_ids:=enrl_sort_usecs(t_sua_disc,p_teach_cal_type,p_teach_ci_sequence_number); --l_enr_uoo_ids is used as a dummy here
1747 l_enr_uoo_ids:=enrl_sort_usecs(t_sua_enroll,p_teach_cal_type,p_teach_ci_sequence_number);--l_enr_uoo_ids passed to igs_en_val_sua.enr_sub_units
1748
1749 FOR rec_sca IN c_sca
1750 LOOP
1751 BEGIN
1752 --initialising the plsql table to store messages
1753 --whenever any error occurs, flush the table
1754 --by calling genp_set_log_cntr (this remove any success messages)
1755 --and add the error message alone.
1756 IGS_GE_INS_SLE.genp_set_log_cntr;
1757
1758 l_processed := TRUE;
1759 l_course_key :=TO_CHAR(rec_sca.person_id) || '|' ||rec_sca.course_cd;
1760 -- Following function will returns the person type of the log in
1761 l_person_type := Igs_En_Gen_008.enrp_get_person_type(p_course_cd =>NULL);
1762
1763 OPEN c_per_num(rec_sca.person_id);
1764 FETCH c_per_num INTO l_person_number;
1765 CLOSE c_per_num;
1766 -- Determine the Enrollment method , Enrollment Commencement type.
1767 l_dummy := NULL;
1768 l_enrolment_cat:=IGS_EN_GEN_003.Enrp_Get_Enr_Cat(p_person_id =>rec_sca.person_id,
1769 p_course_cd =>rec_sca.course_cd,
1770 p_cal_type =>l_acad_cal_type,
1771 p_ci_sequence_number =>l_acad_ci_sequence_number,
1772 p_session_enrolment_cat =>NULL,
1773 p_enrol_cal_type =>l_en_cal_type,
1774 p_enrol_ci_sequence_number =>l_en_ci_seq_num,
1775 p_commencement_type =>l_commencement_type,
1776 p_enr_categories =>l_dummy);
1777 SAVEPOINT sp_sua_blk_e_d;
1778
1779 --Follwoing function will do the all person step validations for the context person.
1780 l_message_name :=NULL;
1781 l_deny_warn := NULL;
1782
1783 -- deny all hold validation added as part of Bug 3823810
1784 igs_en_elgbl_person.eval_ss_deny_all_hold (
1785 p_person_id =>rec_sca.person_id,
1786 p_person_type =>l_person_type,
1787 p_course_cd =>rec_sca.course_cd,
1788 p_load_calendar_type =>p_load_cal_type,
1789 p_load_cal_sequence_number =>p_load_cal_seq,
1790 p_status =>l_deny_warn,
1791 p_message =>l_message_name);
1792 IF l_deny_warn='E' THEN --deny all hold validation
1793 l_processed := FALSE;
1794 IGS_GE_INS_SLE.genp_set_log_cntr;
1795 log_error_message(
1796 p_messages =>l_message_name,
1797 p_del =>';',
1798 p_key =>l_course_key,
1799 p_type =>'DENY',
1800 p_c_u =>'P');
1801 END IF;
1802
1803 --person steps not validated when deny all hold fails added for Bug 3823810
1804 l_message_name :=NULL;
1805 l_deny_warn := NULL;
1806 IF l_processed THEN
1807 IF NOT igs_en_elgbl_person.eval_person_steps( p_person_id =>rec_sca.person_id,
1808 p_person_type =>l_person_type,
1809 p_load_calendar_type =>p_load_cal_type,
1810 p_load_cal_sequence_number =>p_load_cal_seq,
1811 p_program_cd =>rec_sca.course_cd,
1812 p_program_version =>rec_sca.version_number,
1813 p_enrollment_category =>l_enrolment_cat,
1814 p_comm_type =>l_commencement_type,
1815 p_enrl_method =>p_enr_method,
1816 p_message =>l_message_name,
1817 p_deny_warn =>l_deny_warn,
1818 p_calling_obj =>'JOB',
1819 p_create_warning =>'N') THEN
1820 --function returns the error then log all the error message and abort the further processing for the context person.
1821 IGS_GE_INS_SLE.genp_set_log_cntr;
1822 log_error_message(p_messages =>l_message_name,
1823 p_del =>';',
1824 p_key =>l_course_key,
1825 p_type =>'DENY',
1826 p_c_u =>'P');
1827 l_processed := FALSE;
1828 ELSE
1829 IF l_message_name IS NOT NULL THEN
1830 log_error_message(p_messages =>l_message_name,
1831 p_del =>';',
1832 p_key =>l_course_key,
1833 p_type =>'WARN',
1834 p_c_u =>'P');
1835 END IF;
1836 END IF; --NOT igs_en_elgbl_person.eval_person_steps
1837 END IF;
1838 IF l_processed THEN
1839 -- A call to igs_en_prc_load.enrp_clc_eftsu_total as part of- Enrollment Eligibility and validations .
1840 -- The Total enrolled CP of the student has to be determined before the unit is dropped(l_total_credit_points) .
1841 -- The unit is then dropped , and eval_min_cp is called with the value of l_total_enrolled_cp.
1842 -- The value of l_total_enrolled_cp is essential to determine if the Min Credit Points is already reached
1843 -- by the student before that Unit is dropped.
1844 l_eftsu_total := igs_en_prc_load.enrp_clc_eftsu_total(p_person_id => rec_sca.person_id,
1845 p_course_cd => rec_sca.course_cd,
1846 p_acad_cal_type => l_acad_cal_type,
1847 p_acad_sequence_number => l_acad_ci_sequence_number,
1848 p_load_cal_type => p_load_cal_type,
1849 p_load_sequence_number => p_load_cal_seq,
1850 p_truncate_ind => 'N',
1851 p_include_research_ind => 'Y' ,
1852 p_key_course_cd => NULL ,
1853 p_key_version_number => NULL ,
1854 p_credit_points => l_total_credit_points );
1855 -- Check if the Forced Attendance Type has already been reached for the Student before transferring .
1856 l_message_name :=NULL;
1857 -- Modfied as a part of bug#5191592.
1858 l_attendance_type_reach := igs_en_val_sca.enrp_val_coo_att(p_person_id => rec_sca.person_id,
1859 p_coo_id => rec_sca.coo_id,
1860 p_cal_type => l_acad_cal_type,
1861 p_ci_sequence_number => l_acad_ci_sequence_number,
1862 p_message_name => l_message_name,
1863 p_attendance_types => l_attendance_types,
1864 p_load_or_teach_cal_type => p_load_cal_type,
1865 p_load_or_teach_seq_number => p_load_cal_seq);
1866 -- Assign values to the parameter p_deny_warn_att based on if Attendance Type has not been already reached or not.
1867 IF l_attendance_type_reach THEN
1868 l_att_type := 'AttTypReached' ;
1869 ELSE
1870 l_att_type := 'AttTypNotReached' ;
1871 END IF ;
1872 END IF; -- IF l_processed THEN
1873
1874 IF l_processed THEN
1875 /**********************************************************************************************************************
1876 Discontinue /Drop the units
1877 **********************************************************************************************************************/
1878
1879 l_disc_count := 0;
1880 FOR i IN REVERSE 1 .. l_cntr_disc --Added reverse so that subordinates are dropped before the superiors
1881 LOOP
1882
1883 l_unit_key := TO_CHAR(rec_sca.person_id)|| '|' || rec_sca.course_cd || '|' ||t_sua_disc(i).unit_cd || '|' ||TO_CHAR(t_sua_disc(i).uv_version_number)|| '|' ||
1884 p_teach_cal_type || '|' ||TO_CHAR(p_teach_ci_sequence_number) || '|' ||UPPER(l_discon)|| '|' ||t_sua_disc(i).unit_class || '|' ||
1885 t_sua_disc(i).location_cd;
1886
1887 FOR rec_get_sua_d IN cur_get_sua_d( rec_sca.person_id,
1888 rec_sca.course_cd,
1889 t_sua_disc(i).unit_cd,
1890 t_sua_disc(i).uv_version_number,
1891 p_teach_cal_type,
1892 p_teach_ci_sequence_number,
1893 t_sua_disc(i).unit_class,
1894 t_sua_disc(i).location_cd)
1895 LOOP -- looping through all the unit sections when unit_class and location are null.
1896 SAVEPOINT sp_sua_blk_disc;
1897 l_action_processed := TRUE;
1898 IF igs_en_gen_008.enrp_get_ua_del_alwd(p_cal_type => p_teach_cal_type,
1899 p_ci_sequence_number => p_teach_ci_sequence_number,
1900 p_effective_dt => NVL(p_discontinued_dt,SYSDATE),
1901 p_uoo_id => rec_get_sua_d.uoo_id) = 'N' THEN
1902
1903 l_message_name:=NULL;
1904 l_message_token:=NULL;
1905 IF igs_en_val_sua.enrp_val_discont_aus(p_administrative_unit_status => p_administrative_unit_status,
1906 p_discontinued_dt => NVL(p_discontinued_dt,SYSDATE),
1907 p_cal_type => p_teach_cal_type,
1908 p_ci_sequence_number => p_teach_ci_sequence_number,
1909 p_message_name => l_message_name,
1910 p_uoo_id => rec_get_sua_d.uoo_id,
1911 p_message_token => l_message_token,
1912 p_legacy => 'N') = FALSE THEN
1913 l_temp_msg:=NULL;
1914 fnd_message.set_name('IGS',l_message_name);
1915 IF l_message_name = 'IGS_SS_EN_INVLD_ADMIN_UNITST' THEN
1916 fnd_message.set_token('LIST',l_message_token);
1917 END IF;
1918 l_temp_msg:=fnd_message.get;
1919 fnd_file.put_line(Fnd_File.LOG,l_temp_msg);
1920 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
1921 p_sl_key =>cst_blk_ua,
1922 p_sle_key =>l_course_key,
1923 p_sle_message_name =>l_message_name,
1924 p_text =>'ERROR|'||l_temp_msg);
1925 l_action_processed := FALSE;
1926 l_total_encumb_error_count := l_total_encumb_error_count + 1;
1927 END IF;
1928 END IF;
1929 IF l_action_processed THEN
1930 IF rec_get_sua_d.unit_attempt_status NOT IN(cst_enrolled,cst_waitlist,cst_invalid) THEN
1931 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
1932 p_sl_key => cst_blk_ua,
1933 p_sle_key => l_unit_key,
1934 p_sle_message_name => 'IGS_EN_UNABLE_DISCONT_UNIT',
1935 p_text => 'ERROR|'||cst_discontin);
1936 l_action_processed := FALSE;
1937 l_total_disc_error_count := l_total_disc_error_count + 1;
1938 ELSE
1939 l_total_exist_sua_count := l_total_exist_sua_count + 1;
1940 -- Validate that the process has not been scheduled to run outside the
1941 -- environment/variation windows for the teaching period.
1942 --moved this code from the start of this procedure,to pass uoo_id by smaddali
1943 IF (igs_en_gen_008.enrp_get_var_window(p_cal_type => p_teach_cal_type,
1944 p_ci_sequence_number => p_teach_ci_sequence_number,
1945 p_effective_dt => NVL(p_enrolled_dt,SYSDATE),
1946 p_uoo_id => rec_get_sua_d.uoo_id ) = FALSE) THEN
1947 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
1948 p_sl_key => cst_blk_ua,
1949 p_sle_key => l_unit_key,
1950 p_sle_message_name => 'IGS_EN_TRN_ERR_VAR_WIND',
1951 p_text => 'ERROR|'||cst_discontin);
1952 l_action_processed := FALSE;
1953 l_total_disc_not_enrol_count := l_total_disc_not_enrol_count +1;
1954 END IF;
1955 --Drop subordinates if usec is a superior
1956 --IF drop fails, log error and abort
1957 IF rec_get_sua_d.relation_type='SUPERIOR' AND l_action_processed THEN
1958 l_message_name:= NULL;
1959 igs_en_val_sua.drop_sub_units(
1960 p_person_id => rec_sca.person_id ,
1961 p_course_cd => rec_sca.course_cd ,
1962 p_uoo_id => rec_get_sua_d.uoo_id ,
1963 p_load_cal_type => p_load_cal_type ,
1964 p_load_seq_num => p_load_cal_seq ,
1965 p_acad_cal_type => l_acad_cal_type ,
1966 p_acad_seq_num => l_acad_ci_sequence_number ,
1967 p_enrollment_method=> p_enr_method ,
1968 p_confirmed_ind => l_ovrrdchk,
1969 p_person_type => l_person_type,
1970 p_effective_date => NVL(p_discontinued_dt,SYSDATE) ,
1971 p_course_ver_num =>rec_sca.version_number,
1972 p_dcnt_reason_cd => p_dcnt_reason_cd,
1973 p_admin_unit_status=> p_administrative_unit_status,
1974 p_uoo_ids => l_uoo_ids_list ,
1975 p_error_message => l_message_name);
1976 IF l_message_name IS NOT NULL THEN
1977 IGS_GE_INS_SLE.genp_set_log_cntr;
1978 log_error_message(p_messages =>'IGS_EN_BLK_SUB_DROP_FAILED',
1979 p_del =>';',
1980 p_key =>l_course_key,
1981 p_type =>'DENY',
1982 p_c_u =>'D');
1983 l_processed := FALSE;
1984 EXIT;
1985 END IF;
1986 END IF;
1987 IF l_action_processed THEN
1988 l_message_name:= NULL;
1989 l_return_status := TRUE;
1990 --Raise workflow event to notify the student regarding the droping of the unit section.
1991 igs_ss_en_wrappers.drop_notif_variable(p_reason,'ADMIN_DROP_JOB');
1992 igs_ss_en_wrappers.blk_drop_units(p_uoo_id =>rec_get_sua_d.uoo_id,
1993 p_person_id =>rec_sca.person_id,
1994 p_person_type =>l_person_type,
1995 p_load_cal_type =>p_load_cal_type,
1996 p_load_sequence_number =>p_load_cal_seq,
1997 p_acad_cal_type =>l_acad_cal_type,
1998 p_acad_sequence_number =>l_acad_ci_sequence_number,
1999 p_program_cd =>rec_sca.course_cd,
2000 p_program_version =>rec_sca.version_number,
2001 p_dcnt_reason_cd =>p_dcnt_reason_cd,
2002 p_admin_unit_status =>p_administrative_unit_status,
2003 p_effective_date =>NVL(p_discontinued_dt,TRUNC(SYSDATE)),
2004 p_enrolment_cat =>l_enrolment_cat,
2005 p_comm_type =>l_commencement_type,
2006 p_enr_meth_type =>p_enr_method,
2007 p_total_credit_points =>l_total_credit_points,
2008 p_force_att_type =>l_att_type,
2009 p_val_ovrrd_chk =>l_ovrrdchk,
2010 p_ovrrd_drop =>'N',
2011 p_return_status =>l_return_status,
2012 p_message =>l_message_name,
2013 p_sub_unit => 'N');
2014 IF NOT l_return_status THEN
2015 IGS_GE_INS_SLE.genp_set_log_cntr;
2016 log_error_message(p_messages =>l_message_name,
2017 p_del =>';',
2018 p_key =>l_course_key,
2019 p_type =>'DENY',
2020 p_c_u =>'D');
2021 l_processed := FALSE;
2022 EXIT;
2023 ELSIF l_message_name IS NOT NULL THEN
2024 log_error_message(p_messages =>l_message_name,
2025 p_del =>';',
2026 p_key =>l_course_key,
2027 p_type =>'WARN',
2028 p_c_u =>'D');
2029
2030 END IF;
2031 l_disc_count := l_disc_count + 1;
2032
2033 IF ((p_confirmed_ind <> 'Y') OR (l_cntr_enroll = 0)) THEN
2034 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
2035 p_sl_key => cst_blk_ua,
2036 p_sle_key => l_unit_key,
2037 p_sle_message_name => 'IGS_EN_SUA_DISCONTINUED',
2038 p_text => 'INFORMATION|'||cst_discontin);
2039 END IF;
2040 END IF;
2041 END IF; --rec_get_sua_d.unit_attempt_status NOT IN(cst_enrolled,cst_waitlist,cst_invalid)
2042
2043 END IF;
2044 IF NOT l_action_processed THEN
2045 IF l_failed_uoo_ids IS NULL THEN
2046 l_failed_uoo_ids := ','||rec_get_sua_d.uoo_id||',';
2047 ELSE
2048 l_failed_uoo_ids := l_failed_uoo_ids || rec_get_sua_d.uoo_id || ',';
2049 END IF;
2050 ROLLBACK TO sp_sua_blk_disc;
2051 END IF;
2052
2053 END LOOP; -- rec_get_sua_d
2054 IF NOT l_processed THEN
2055 EXIT;
2056 END IF;
2057 END LOOP; --i IN 1 .. l_cntr_disc
2058
2059 END IF; -- IF l_processed THEN
2060
2061 /**********************************************************************************************************************
2062 Enrolling the units
2063 **********************************************************************************************************************/
2064 l_enrol_count := 0;
2065 IF l_processed THEN
2066 --Following code will enroll/attempt the unit
2067 l_uoo_ids_list:=NULL;
2068 FOR i IN 1 .. l_cntr_enroll
2069 LOOP
2070 l_unit_key := TO_CHAR(rec_sca.person_id)|| '|' || rec_sca.course_cd || '|' ||t_sua_enroll(i).unit_cd || '|' ||TO_CHAR(t_sua_enroll(i).uv_version_number)|| '|' ||
2071 p_teach_cal_type || '|' ||TO_CHAR(p_teach_ci_sequence_number) || '|' ||UPPER(l_enroll)|| '|' ||t_sua_enroll(i).unit_class || '|' ||
2072 t_sua_enroll(i).location_cd;
2073 l_uoo_id := NULL;
2074 l_action_processed := true;
2075 SAVEPOINT sp_sua_blk_enr;
2076 OPEN cur_get_uoo(t_sua_enroll(i).unit_cd,
2077 t_sua_enroll(i).uv_version_number,
2078 p_teach_cal_type,
2079 p_teach_ci_sequence_number,
2080 t_sua_enroll(i).unit_class,
2081 t_sua_enroll(i).location_cd);
2082 FETCH cur_get_uoo INTO l_uoo_id,l_relation_type;
2083 CLOSE cur_get_uoo;
2084 --if uoo_id is null means that there is no offering exist for this combination.
2085 IF l_uoo_id IS NULL THEN
2086 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
2087 p_sl_key => cst_blk_ua,
2088 p_sle_key => l_unit_key,
2089 p_sle_message_name => 'IGS_EN_UOO_NOT_EXISTS_PARAM',
2090 p_text => 'ERROR|'||cst_enrol);
2091 l_action_processed := FALSE;
2092 l_total_enrol_error_count := l_total_enrol_error_count + 1;
2093 END IF;
2094 -- Validate that the process has not been scheduled to run outside the
2095 -- environment/variation windows for the teaching period.
2096 --moved this code from the start of this procedure,to pass uoo_id by smaddali
2097
2098 IF (l_action_processed AND igs_en_gen_008.enrp_get_var_window(p_cal_type => p_teach_cal_type,
2099 p_ci_sequence_number => p_teach_ci_sequence_number,
2100 p_effective_dt => NVL(p_enrolled_dt,SYSDATE),
2101 p_uoo_id => l_uoo_id ) = FALSE) THEN
2102 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
2103 p_sl_key => cst_blk_ua,
2104 p_sle_key => l_unit_key,
2105 p_sle_message_name => 'IGS_EN_TRN_ERR_VAR_WIND',
2106 p_text => 'ERROR|'||cst_enrol);
2107 l_action_processed := FALSE;
2108 l_total_disc_not_enrol_count := l_total_disc_not_enrol_count +1;
2109
2110 END IF;
2111
2112 l_message_name := NULL;
2113 -- If any IGS_PS_UNIT attempt is being enrolled then check if allowed to be created
2114 -- within the enrolment window.
2115
2116 IF (l_action_processed AND igs_en_gen_004.enrp_get_rec_window(p_cal_type => p_teach_cal_type,
2117 p_ci_sequence_number => p_teach_ci_sequence_number,
2118 p_effective_date => NVL(p_enrolled_dt,SYSDATE),
2119 p_uoo_id => l_uoo_id,
2120 p_message_name => l_message_name) = FALSE) THEN
2121
2122 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
2123 p_sl_key => cst_blk_ua,
2124 p_sle_key => l_unit_key,
2125 p_sle_message_name => l_message_name,
2126 p_text => 'ERROR|'||cst_enrol);
2127 l_action_processed := FALSE;
2128 l_total_enrol_error_count := l_total_enrol_error_count + 1;
2129
2130 END IF;
2131 l_unit_attempt_status := NULL;
2132 OPEN cur_sua_stat(rec_sca.person_id,
2133 rec_sca.course_cd,
2134 l_uoo_id);
2135 FETCH cur_sua_stat INTO l_unit_attempt_status;
2136 CLOSE cur_sua_stat;
2137 IF l_action_processed THEN
2138 IF l_unit_attempt_status = cst_enrolled THEN
2139 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2140 p_sl_key =>cst_blk_ua,
2141 p_sle_key =>l_unit_key,
2142 p_sle_message_name =>'IGS_EN_UNITVER_ATTEMPTED_STUD',
2143 p_text =>'ERROR|' || cst_enrol);
2144 l_total_enrol_error_count := l_total_enrol_error_count + 1;
2145 ELSE
2146 l_waitlist_ind := NULL;
2147 l_unit_section_status := NULL;
2148 --Following api checks the availbility of the seats for the given unit section.
2149 igs_en_gen_015.get_usec_status(p_uoo_id =>l_uoo_id,
2150 p_person_id =>rec_sca.person_id,
2151 p_unit_section_status =>l_unit_section_status,
2152 p_waitlist_ind =>l_waitlist_ind,
2153 p_load_cal_type =>p_load_cal_type,
2154 p_load_ci_sequence_number =>p_load_cal_seq,
2155 p_course_cd =>rec_sca.course_cd);
2156 IF l_waitlist_ind IS NULL THEN
2157 --There is no seates are available for this unit section.
2158 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type => cst_enr_blk_ua,
2159 p_sl_key => cst_blk_ua,
2160 p_sle_key => l_unit_key,
2161 p_sle_message_name => 'IGS_EN_SS_CANNOT_WAITLIST',
2162 p_text => 'ERROR|'||cst_enrol);
2163 l_action_processed := FALSE;
2164 l_total_enrol_error_count := l_total_enrol_error_count + 1;
2165
2166 ELSE
2167 l_message_name := NULL;
2168 l_ret_stat:= NULL;
2169
2170 -- Check whether the profile is set or not
2171 -- If it is set to 'Y' determine the value of core indicator otherwise assign NULL to it
2172 IF fnd_profile.value('IGS_EN_CORE_VAL') = 'Y' THEN
2173 l_core_indicator_code := igs_en_gen_009.enrp_check_usec_core(rec_sca.person_id,rec_sca.course_cd,l_uoo_id);
2174 ELSE
2175 l_core_indicator_code := NULL;
2176 END IF;
2177
2178 --Following api will creates an unit attempt in unconfirm/waitlist status.
2179 BEGIN
2180 igs_ss_en_wrappers.insert_into_enr_worksheet(p_person_number =>l_person_number,
2181 p_course_cd =>rec_sca.course_cd,
2182 p_uoo_id =>l_uoo_id,
2183 p_waitlist_ind =>l_waitlist_ind,
2184 p_session_id =>NULL,
2185 p_return_status =>l_ret_stat,
2186 p_message =>l_message_name,
2187 p_cal_type =>p_load_cal_type,
2188 p_ci_sequence_number =>p_load_cal_seq,
2189 p_audit_requested =>p_no_assessment_ind,
2190 p_enr_method =>p_enr_method,
2191 p_override_cp =>null,
2192 p_subtitle =>null,
2193 p_gradsch_cd =>null,
2194 p_gs_version_num =>null,
2195 p_core_indicator_code =>l_core_indicator_code, -- ptandon, Prevent Dropping Core Units build
2196 p_calling_obj =>'JOB'
2197 );
2198 EXCEPTION WHEN OTHERS THEN
2199 --If an exception is thrown, get the error message text and save it in the message name variable
2200 IF IGS_GE_MSG_STACK.COUNT_MSG <> 0 THEN
2201 l_message_name := FND_MESSAGE.GET;
2202 ELSE
2203 l_message_name := SQLERRM;
2204 END IF;
2205 l_ret_stat := 'D';
2206 END;
2207
2208 IF l_ret_stat = 'D' THEN
2209 log_error_message(p_messages =>l_message_name,
2210 p_del =>';',
2211 p_key =>l_unit_key,
2212 p_type =>'DENY',
2213 p_c_u =>'E');
2214 l_action_processed := FALSE;
2215
2216 ELSIF l_message_name IS NOT NULL THEN
2217 log_error_message(p_messages =>l_message_name,
2218 p_del =>';',
2219 p_key =>l_unit_key,
2220 p_type =>'WARN',
2221 p_c_u =>'E');
2222 END IF; ---l_ret_stat = 'D'
2223 IF l_action_processed THEN
2224 l_enrol_count := l_enrol_count + 1;
2225 l_sub_success:=NULL;l_sub_waitlist:=NULL;l_sub_failed:=NULL;
2226 IF l_ret_stat <> 'D' AND l_relation_type='SUPERIOR' THEN
2227 --enroll subordinates if
2228 igs_en_val_sua.enr_sub_units(
2229 p_person_id => rec_sca.person_id,
2230 p_course_cd => rec_sca.course_cd,
2231 p_uoo_id => l_uoo_id,
2232 p_waitlist_flag => l_waitlist_ind,
2233 p_load_cal_type => p_load_cal_type,
2234 p_load_seq_num => p_load_cal_seq,
2235 p_enrollment_date => NVL(p_enrolled_dt,SYSDATE),
2236 p_enrollment_method => p_enr_method,
2237 p_enr_uoo_ids => l_enr_uoo_ids,
2238 p_uoo_ids => l_sub_success,
2239 p_waitlist_uoo_ids => l_sub_waitlist,
2240 p_failed_uoo_ids => l_sub_failed);
2241
2242 IF l_sub_success IS NOT NULL THEN
2243 log_error_message(p_messages =>'IGS_EN_BLK_SUB_SUCCESS*'||igs_en_gen_018.enrp_get_unitcds(l_sub_success),
2244 p_del =>';',
2245 p_key =>l_unit_key,
2246 p_type =>'WARN',
2247 p_c_u =>'I');
2248 l_sub_success :=','||l_sub_success ;
2249 END IF;
2250 IF l_sub_failed IS NOT NULL THEN
2251 log_error_message(p_messages =>'IGS_EN_BLK_SUB_FAILED*'||igs_en_gen_018.enrp_get_unitcds(l_sub_failed),
2252 p_del =>';',
2253 p_key =>l_unit_key,
2254 p_type =>'WARN',
2255 p_c_u =>'I');
2256 END IF;
2257 END IF;-- if superior and if l_ret_stat <> 'D'
2258
2259
2260 IF l_waitlist_ind = 'Y' THEN
2261 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2262 p_sl_key =>cst_blk_ua,
2263 p_sle_key =>l_unit_key,
2264 p_sle_message_name =>'IGS_EN_STUD_SUCCESS_WAIT_UNIT',
2265 p_text =>'INFORMATION|' || cst_enrol);
2266 ELSE
2267 IF p_confirmed_ind <> 'Y' THEN
2268 l_succ_msg:='IGS_EN_UA_SECCESS_ADDED_STUD';
2269 ELSE
2270 l_succ_msg:='IGS_EN_STUD_SUCCESS_ENR_UNIT';
2271 END IF;
2272 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2273 p_sl_key =>cst_blk_ua,
2274 p_sle_key =>l_unit_key,
2275 p_sle_message_name =>l_succ_msg,
2276 p_text =>'INFORMATION|' || cst_enrol);
2277 END IF;
2278
2279 END IF; --l_action_processed
2280 END IF; --l_waitlist_ind IS NULL
2281 END IF; --l_unit_attempt_status = cst_enrolled
2282 END IF; --l_action_processed
2283 IF l_action_processed AND p_confirmed_ind = 'Y' AND l_ret_stat <>'D' AND (l_waitlist_ind = 'N' OR
2284 l_unit_attempt_status = cst_unconfirm) THEN
2285 l_uoo_ids_list:=l_uoo_ids_list||l_uoo_id||l_sub_success||',';
2286 END IF;
2287 IF NOT l_action_processed THEN
2288 ROLLBACK TO sp_sua_blk_enr;
2289 END IF;
2290 l_message_name := NULL;
2291 l_ret_stat:= NULL;
2292 END LOOP; ---i IN 1 .. l_cntr_enroll
2293 IF p_confirmed_ind = 'Y' AND l_uoo_ids_list IS NOT NULL AND l_processed THEN
2294 BEGIN
2295 igs_ss_en_wrappers.validate_enroll_validate(p_person_id =>rec_sca.person_id,
2296 p_load_cal_type =>p_load_cal_type,
2297 p_load_ci_sequence_number =>p_load_cal_seq,
2298 p_uoo_ids =>substr(l_uoo_ids_list,1,length(l_uoo_ids_list)-1) , --remove trailing ','
2299 p_program_cd =>rec_sca.course_cd,
2300 p_message_name =>l_message_name,
2301 p_deny_warn =>l_deny_warn,
2302 p_return_status =>l_ret_stat,
2303 p_enr_method =>p_enr_method,
2304 p_enrolled_dt =>NVL(p_enrolled_dt,SYSDATE));
2305 EXCEPTION WHEN OTHERS THEN
2306 --IF any exception is raised, return the exception string as the error message
2307 IF IGS_GE_MSG_STACK.COUNT_MSG <> 0 THEN
2308 l_message_name := FND_MESSAGE.GET;
2309 ELSE
2310 l_message_name := SQLERRM;
2311 END IF;
2312 l_deny_warn := 'DENY';
2313 l_ret_stat := 'FALSE';
2314 END;
2315
2316 IF l_ret_stat = 'FALSE' AND l_deny_warn ='DENY' THEN
2317 IGS_GE_INS_SLE.genp_set_log_cntr;
2318 log_error_message(p_messages =>l_message_name,
2319 p_del =>';',
2320 p_key =>l_course_key,
2321 p_type =>'DENY',
2322 p_c_u =>'E');
2323 l_processed := FALSE;
2324 ELSIF l_message_name IS NOT NULL THEN
2325 log_error_message(p_messages =>l_message_name,
2326 p_del =>';',
2327 p_key =>l_course_key,
2328 p_type =>'WARN',
2329 p_c_u =>'E');
2330 END IF;
2331 END IF; --- p_confirmed_ind = 'Y' AND l_waitlist_ind IS NOT NULL
2332 END IF;
2333 /**********************************************************************************************************************
2334 Perform the mincp,forceattd,coreq and prereq validations if it is not processed
2335 **********************************************************************************************************************/
2336 IF p_confirmed_ind = 'Y' AND l_cntr_enroll > 0 AND l_processed THEN
2337 FOR i IN 1 .. l_cntr_disc
2338 LOOP
2339 IF l_processed THEN
2340 l_unit_key := TO_CHAR(rec_sca.person_id)|| '|' || rec_sca.course_cd || '|' ||t_sua_disc(i).unit_cd || '|' ||TO_CHAR(t_sua_disc(i).uv_version_number)|| '|' ||
2341 p_teach_cal_type || '|' ||TO_CHAR(p_teach_ci_sequence_number) || '|' ||UPPER(l_enroll)|| '|' ||t_sua_disc(i).unit_class || '|' ||
2342 t_sua_disc(i).location_cd;
2343 FOR rec_get_sua_d IN cur_get_sua_d( rec_sca.person_id,
2344 rec_sca.course_cd,
2345 t_sua_disc(i).unit_cd,
2346 t_sua_disc(i).uv_version_number,
2347 p_teach_cal_type,
2348 p_teach_ci_sequence_number,
2349 t_sua_disc(i).unit_class,
2350 t_sua_disc(i).location_cd)
2351 LOOP
2352 SAVEPOINT sp_sua_blk_disc1; -- savepoint for unit validation failure.
2353 l_action_processed := TRUE;
2354 -- if the uoo_id selected is not one of validation faied uoo_ids, then process it.
2355 IF (INSTR(l_failed_uoo_ids,','||rec_get_sua_d.uoo_id||',',1) = 0 OR l_failed_uoo_ids IS NULL) THEN
2356 IF igs_en_gen_008.enrp_get_ua_del_alwd(p_cal_type => p_teach_cal_type,
2357 p_ci_sequence_number => p_teach_ci_sequence_number,
2358 p_effective_dt => NVL(p_discontinued_dt,SYSDATE),
2359 p_uoo_id => rec_get_sua_d.uoo_id) = 'N' THEN
2360
2361 l_message_name:=NULL;
2362 l_message_token:=NULL;
2363 IF igs_en_val_sua.enrp_val_discont_aus(p_administrative_unit_status => p_administrative_unit_status,
2364 p_discontinued_dt => NVL(p_discontinued_dt,SYSDATE),
2365 p_cal_type => p_teach_cal_type,
2366 p_ci_sequence_number => p_teach_ci_sequence_number,
2367 p_message_name => l_message_name,
2368 p_uoo_id => rec_get_sua_d.uoo_id,
2369 p_message_token => l_message_token,
2370 p_legacy => 'N') = FALSE THEN
2371 l_temp_msg:=NULL;
2372 fnd_message.set_name('IGS',l_message_name);
2373 IF l_message_name = 'IGS_SS_EN_INVLD_ADMIN_UNITST' THEN
2374 fnd_message.set_token('LIST',l_message_token);
2375 END IF;
2376 l_temp_msg:=fnd_message.get;
2377 fnd_file.put_line(Fnd_File.LOG,l_temp_msg);
2378 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2379 p_sl_key =>cst_blk_ua,
2380 p_sle_key =>l_course_key,
2381 p_sle_message_name =>l_message_name,
2382 p_text =>'ERROR|'||l_temp_msg);
2383 l_action_processed := FALSE;
2384 l_total_encumb_error_count := l_total_encumb_error_count + 1;
2385
2386 END IF;
2387 END IF;
2388 IF NVL(rec_get_sua_d.relation_type,'NONE')='SUPERIOR' AND l_action_processed THEN
2389 l_message_name:= NULL;
2390 igs_en_val_sua.drop_sub_units(
2391 p_person_id => rec_sca.person_id ,
2392 p_course_cd => rec_sca.course_cd ,
2393 p_uoo_id => rec_get_sua_d.uoo_id ,
2394 p_load_cal_type => p_load_cal_type ,
2395 p_load_seq_num => p_load_cal_seq ,
2396 p_acad_cal_type => l_acad_cal_type ,
2397 p_acad_seq_num => l_acad_ci_sequence_number ,
2398 p_enrollment_method=> p_enr_method ,
2399 p_confirmed_ind => NULL , --Do not drop...just validate
2400 p_person_type => l_person_type,
2401 p_effective_date => NVL(p_discontinued_dt,SYSDATE) ,
2402 p_course_ver_num =>rec_sca.version_number,
2403 p_dcnt_reason_cd => p_dcnt_reason_cd,
2404 p_admin_unit_status=> p_administrative_unit_status,
2405 p_uoo_ids => l_uoo_ids_list ,
2406 p_error_message => l_message_name);
2407 IF l_message_name IS NOT NULL THEN
2408 IGS_GE_INS_SLE.genp_set_log_cntr;
2409 log_error_message(p_messages =>'IGS_EN_BLK_SUB_DROP_FAILED',
2410 p_del =>';',
2411 p_key =>l_course_key,
2412 p_type =>'DENY',
2413 p_c_u =>'D');
2414 l_processed := FALSE;
2415 EXIT;
2416 END IF;
2417 END IF;
2418
2419
2420 IF l_action_processed THEN
2421 l_message_name:= NULL;
2422 l_return_status := TRUE;
2423 igs_ss_en_wrappers.blk_drop_units(p_uoo_id =>rec_get_sua_d.uoo_id,
2424 p_person_id =>rec_sca.person_id,
2425 p_person_type =>l_person_type,
2426 p_load_cal_type =>p_load_cal_type,
2427 p_load_sequence_number =>p_load_cal_seq,
2428 p_acad_cal_type =>l_acad_cal_type,
2429 p_acad_sequence_number =>l_acad_ci_sequence_number,
2430 p_program_cd =>rec_sca.course_cd,
2431 p_program_version =>rec_sca.version_number,
2432 p_dcnt_reason_cd =>p_dcnt_reason_cd,
2433 p_admin_unit_status =>p_administrative_unit_status,
2434 p_effective_date =>p_discontinued_dt,
2435 p_enrolment_cat =>l_enrolment_cat,
2436 p_comm_type =>l_commencement_type,
2437 p_enr_meth_type =>p_enr_method,
2438 p_total_credit_points =>l_total_credit_points,
2439 p_force_att_type =>l_att_type,
2440 p_val_ovrrd_chk =>'N', --Performs the mincp,forceattd,coreq and prereq validations.
2441 p_ovrrd_drop =>'Y', --Overrides the unit drop
2442 p_return_status =>l_return_status,
2443 p_message =>l_message_name,
2444 p_sub_unit => 'N');
2445 IF NOT l_return_status THEN
2446 IGS_GE_INS_SLE.genp_set_log_cntr;
2447 log_error_message(p_messages =>l_message_name,
2448 p_del =>';',
2449 p_key =>l_course_key,
2450 p_type =>'DENY',
2451 p_c_u =>'D');
2452 l_processed := FALSE;
2453 EXIT;
2454 ELSIF l_message_name IS NOT NULL THEN
2455 log_error_message(p_messages =>l_message_name,
2456 p_del =>';',
2457 p_key =>l_course_key,
2458 p_type =>'WARN',
2459 p_c_u =>'D');
2460 END IF;
2461 igs_ge_ins_sle.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2462 p_sl_key =>cst_blk_ua,
2463 p_sle_key =>l_unit_key,
2464 p_sle_message_name =>'IGS_EN_SUA_DISCONTINUED', -- Discontinue
2465 p_text =>'INFORMATION|' || cst_discontin);
2466 ELSE -- unit validation failed
2467
2468 ROLLBACK TO sp_sua_blk_disc1;
2469 END IF; -- l_action_processed
2470 END IF; -- failed_uoo_ids
2471 END LOOP; -- rec_get_sua_d
2472 END IF; ---l_processed
2473 IF NOT l_processed THEN
2474 EXIT;
2475 END IF;
2476 END LOOP; --i IN 1 .. l_cntr_disc
2477 END IF; --p_confirmed_ind = 'Y' AND l_processed
2478 IF NOT l_processed THEN -- if program validation fails
2479 ROLLBACK TO sp_sua_blk_e_d;
2480 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2481 p_sl_key =>cst_blk_ua,
2482 p_sle_key =>l_course_key,
2483 p_sle_message_name =>'IGS_EN_BLK_CHG_UNDO',
2484 p_text =>'ERROR|ENROL');
2485
2486 ELSE
2487 l_total_enrol_count:= l_total_enrol_count + l_enrol_count;
2488 l_total_disc_count := l_total_disc_count + l_disc_count;
2489 END IF;
2490 EXCEPTION
2491 WHEN e_resource_busy_exception THEN
2492 -- Roll back transaction.
2493 ROLLBACK TO sp_sua_blk_e_d;
2494 fnd_file.put_line(Fnd_File.LOG,sqlerrm);
2495 -- Log that a locked record exists and rollback has occurred.
2496 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2497 p_sl_key =>cst_blk_ua,
2498 p_sle_key =>l_course_key,
2499 p_sle_message_name =>'IGS_EN_ALLALT_APPL_STUD_PRG',
2500 p_text =>'ERROR|LOCK');
2501 -- Add to count and continue processing.
2502 l_total_lock_count := l_total_lock_count + 1;
2503 WHEN OTHERS THEN
2504 -- Roll back transaction.
2505 ROLLBACK TO sp_sua_blk_e_d;
2506 fnd_file.put_line(Fnd_File.LOG,sqlerrm);
2507 l_encoded_msg := fnd_message.get_encoded;
2508 fnd_message.parse_encoded(l_encoded_msg,l_app_sht_name,l_msg_name);
2509 IF l_msg_name IS NULL THEN
2510 l_msg_name := 'IGS_EN_PRG_ROLLBCK_UNEXP';
2511 END IF;
2512 -- Log that a unhandled exception raised and rollback has occurred.
2513 IGS_GE_INS_SLE.genp_set_log_entry(p_s_log_type =>cst_enr_blk_ua,
2514 p_sl_key =>cst_blk_ua,
2515 p_sle_key =>l_course_key,
2516 p_sle_message_name =>l_msg_name,
2517 p_text =>'ERROR|ENROL');
2518 l_total_encumb_error_count := l_total_encumb_error_count + 1;
2519 END; -- exception handler.
2520 IGS_GE_INS_SLE.genp_ins_sle(l_creation_dt);
2521 END LOOP;
2522 IGS_GE_INS_SLE.genp_set_log_cntr;
2523 -- Log the summary counts
2524 IGS_GE_INS_SLE.genp_set_log_entry(
2525 p_s_log_type =>cst_enr_blk_ua,
2526 p_sl_key =>cst_blk_ua,
2527 p_sle_key =>cst_summary,
2528 p_sle_message_name =>NULL,
2529 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_ATTEMPTS')||'|'||TO_CHAR(l_total_exist_sua_count));
2530
2531 IGS_GE_INS_SLE.genp_set_log_entry(
2532 p_s_log_type =>cst_enr_blk_ua,
2533 p_sl_key =>cst_blk_ua,
2534 p_sle_key =>cst_summary,
2535 p_sle_message_name =>NULL,
2536 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_ERR_COUNT')||'|'||TO_CHAR(l_total_course_error_count));
2537 IGS_GE_INS_SLE.genp_set_log_entry(
2538 p_s_log_type =>cst_enr_blk_ua,
2539 p_sl_key =>cst_blk_ua,
2540 p_sle_key =>cst_summary,
2541 p_sle_message_name =>NULL,
2542 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_WRN_COUNT')||'|'||TO_CHAR(l_total_course_warn_count));
2543 IGS_GE_INS_SLE.genp_set_log_entry(
2544 p_s_log_type =>cst_enr_blk_ua,
2545 p_sl_key =>cst_blk_ua,
2546 p_sle_key =>cst_summary,
2547 p_sle_message_name =>NULL,
2548 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_DIS_ERR_VAR_WIN')||'|'||TO_CHAR(l_total_disc_not_enrol_count));
2549 IGS_GE_INS_SLE.genp_set_log_entry(
2550 p_s_log_type =>cst_enr_blk_ua,
2551 p_sl_key =>cst_blk_ua,
2552 p_sle_key =>cst_summary,
2553 p_sle_message_name =>NULL,
2554 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_ATT_CRE')||'|'||TO_CHAR(l_total_enrol_count));
2555 IGS_GE_INS_SLE.genp_set_log_entry(
2556 p_s_log_type =>cst_enr_blk_ua,
2557 p_sl_key =>cst_blk_ua,
2558 p_sle_key =>cst_summary,
2559 p_sle_message_name =>NULL,
2560 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_ENR_ERR')||'|'||TO_CHAR(l_total_enrol_error_count));
2561 IGS_GE_INS_SLE.genp_set_log_entry(
2562 p_s_log_type =>cst_enr_blk_ua,
2563 p_sl_key =>cst_blk_ua,
2564 p_sle_key =>cst_summary,
2565 p_sle_message_name =>NULL,
2566 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_ERN_WRN')||'|'||TO_CHAR(l_total_enrol_warn_count));
2567 IGS_GE_INS_SLE.genp_set_log_entry(
2568 p_s_log_type =>cst_enr_blk_ua,
2569 p_sl_key =>cst_blk_ua,
2570 p_sle_key =>cst_summary,
2571 p_sle_message_name =>NULL,
2572 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_DIS_UNIT')||'|'||TO_CHAR(l_total_disc_count));
2573 IGS_GE_INS_SLE.genp_set_log_entry(
2574 p_s_log_type =>cst_enr_blk_ua,
2575 p_sl_key =>cst_blk_ua,
2576 p_sle_key =>cst_summary,
2577 p_sle_message_name =>NULL,
2578 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_DIS_ERROR')||'|'||TO_CHAR(l_total_disc_error_count));
2579 IGS_GE_INS_SLE.genp_set_log_entry(
2580 p_s_log_type =>cst_enr_blk_ua,
2581 p_sl_key =>cst_blk_ua,
2582 p_sle_key =>cst_summary,
2583 p_sle_message_name =>NULL,
2584 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_E_D_TOT_DIS_WARN')||'|'||TO_CHAR(l_total_disc_warn_count));
2585 IGS_GE_INS_SLE.genp_set_log_entry(
2586 p_s_log_type =>cst_enr_blk_ua,
2587 p_sl_key =>cst_blk_ua,
2588 p_sle_key =>cst_summary,
2589 p_sle_message_name =>NULL,
2590 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_ENCUM_COUNT')||'|'||TO_CHAR(l_total_encumb_error_count));
2591 IGS_GE_INS_SLE.genp_set_log_entry(
2592 p_s_log_type =>cst_enr_blk_ua,
2593 p_sl_key =>cst_blk_ua,
2594 p_sle_key =>cst_summary,
2595 p_sle_message_name =>NULL,
2596 p_text =>FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_LCK_COUNT')||'|'||TO_CHAR(l_total_lock_count));
2597 -- Insert the log entries
2598 IGS_GE_INS_SLE.genp_ins_sle(l_creation_dt);
2599 p_creation_dt := l_creation_dt;
2600 END Enrp_Prc_Sua_Blk_E_D;
2601
2602 -- procedure is used to store all the reference codes values
2603 -- for the source unit attempt
2604 PROCEDURE enrp_store_suar(p_person_id IN NUMBER,
2605 p_course_cd IN VARCHAR2,
2606 p_from_uoo_id IN NUMBER)
2607 IS
2608
2609 Cursor cur_sua_ref_cds(cp_person_id NUMBER,
2610 cp_course_cd VARCHAR2,
2611 cp_uoo_id NUMBER) IS
2612 Select suar.reference_code_id,
2613 suar.reference_cd_type,
2614 suar.reference_cd,
2615 suar.applied_course_cd
2616 From IGS_AS_SUA_REF_CDS suar
2617 Where suar.person_id = cp_person_id
2618 And suar.course_cd = cp_course_cd
2619 And suar.uoo_id = cp_uoo_id
2620 And suar.deleted_date IS NULL;
2621
2622 l_count NUMBER;
2623
2624 BEGIN
2625 l_count := 0;
2626
2627 suar_table := empty_suar_table;
2628
2629 FOR v_cur_sua_ref_cds IN cur_sua_ref_cds(p_person_id,p_course_cd,p_from_uoo_id) LOOP
2630 l_count := l_count + 1;
2631 suar_table(l_count).person_id := p_person_id;
2632 suar_table(l_count).course_cd := p_course_cd;
2633 suar_table(l_count).uoo_id := p_from_uoo_id;
2634 suar_table(l_count).reference_code_id := v_cur_sua_ref_cds.reference_code_id;
2635 suar_table(l_count).reference_cd_type := v_cur_sua_ref_cds.reference_cd_type;
2636 suar_table(l_count).reference_cd := v_cur_sua_ref_cds.reference_cd;
2637 suar_table(l_count).applied_course_cd := v_cur_sua_ref_cds.applied_course_cd;
2638 END LOOP;
2639
2640
2641 END enrp_store_suar;
2642
2643 --This procedure is to copy the stored values of the source
2644 --unit attmept reference codes, to the destination unit attempt
2645 PROCEDURE enrp_copy_suar(p_to_uoo_id IN NUMBER)
2646 IS
2647
2648 l_rowid VARCHAR2(25);
2649 l_suarid IGS_AS_SUA_REF_CDS.suar_id%TYPE;
2650
2651 BEGIN
2652
2653 FOR l_count IN 1..suar_table.COUNT LOOP
2654 igs_as_sua_ref_cds_pkg.insert_row (
2655 x_rowid => l_rowid,
2656 x_suar_id => l_suarid,
2657 x_person_id => suar_table(l_count).person_id,
2658 x_course_cd => suar_table(l_count).course_cd,
2659 x_uoo_id => p_to_uoo_id,
2660 x_reference_code_id => suar_table(l_count).reference_code_id,
2661 x_reference_cd_type => suar_table(l_count).reference_cd_type,
2662 x_reference_cd => suar_table(l_count).reference_cd,
2663 x_applied_course_cd => suar_table(l_count).applied_course_cd,
2664 x_deleted_date => NULL);
2665
2666 END LOOP;
2667
2668 END enrp_copy_suar;
2669
2670
2671 PROCEDURE enrp_prc_sua_blk_trn(
2672 p_teach_cal_type IN VARCHAR2,
2673 p_teach_ci_sequence_number IN NUMBER ,
2674 p_course_cd IN VARCHAR2,
2675 p_location_cd IN VARCHAR2,
2676 p_attendance_type IN VARCHAR2,
2677 p_attendance_mode IN VARCHAR2,
2678 p_group_id IN NUMBER ,
2679 p_from_unit_cd IN VARCHAR2,
2680 p_from_uv_version_number IN NUMBER ,
2681 p_from_location_cd IN VARCHAR2,
2682 p_from_unit_class IN VARCHAR2,
2683 p_unit_attempt_status1 IN VARCHAR2,
2684 p_unit_attempt_status2 IN VARCHAR2,
2685 p_unit_attempt_status3 IN VARCHAR2,
2686 p_to_uv_version_number IN NUMBER ,
2687 p_to_location_cd IN VARCHAR2,
2688 p_to_unit_class IN VARCHAR2,
2689 p_creation_dt IN OUT NOCOPY DATE,
2690 p_enforce_val IN VARCHAR2,
2691 p_enroll_method IN VARCHAR2,
2692 p_reason IN VARCHAR2)
2693 AS
2694 /*------------------------------------------------------------------------------------------
2695 --Created by : knaraset, Oracle IDC
2696 --Date created:
2697 --
2698 --Purpose:
2699 -- enrp_prc_sua_blk_trn
2700 -- The process transfers already enrolled (or unconfirmed) students
2701 -- between IGS_PS_UNIT offering options within an already selected IGS_PS_UNIT attempt.
2702 -- This may include a change to version_number, IGS_AD_LOCATION code, IGS_PS_UNIT class
2703 -- or a combination thereof.
2704 -- This is typically used as the result of the shutting of a version, or
2705 -- the altering of the IGS_PS_UNIT offerings of the IGS_OR_INSTITUTION. eg. a IGS_PS_UNIT which
2706 -- due to lack of numbers is no longer offered at a campus ? all of the
2707 -- students which are enrolled need be transferred to a different campus.
2708 -- The teaching calendar cannot be changed as this is not within the scope
2709 -- of simply changing the option. This is in effect doing an
2710 -- enrolment/discontinuation which should be handled through that process.
2711 -- IGS_GE_NOTE: This module will be called from an exception report ENRR4500.
2712 --
2713 --Known limitations/enhancements and/or remarks:
2714 --
2715 --Change History:
2716 --Who When What
2717 --ayedubat 18-APR-2002 Changed the usage of 'course' to 'program' in the log entry of summary columns
2718 -- (ie 'Total course errors' to 'Total Program errors etc.)
2719 --kkillams 03-10-2002 1)Three new parameters are added to the procedure
2720 -- New validation
2721 -- 1)Checking the availbility of seats in destination unit section
2722 -- 2)Validating the grading schema against the destination unit section
2723 -- 3)Validating the override credit points against the destination unit section
2724 -- 4)Validating the co-requisite rule against the destination unit section
2725 -- 5)Validating the pre-requisite rule against the destination unit section
2726 -- 6)Validating the destination unit section Special permission
2727 -- 7)Validating the Time Conflict against the destination unit section
2728 -- 8)Validating the unit incompatible against the destination unit section
2729 -- 9)Validating the program Min/Max Credit point validation
2730 -- 10)Validating the unit repeat against the destination unit section
2731 -- 11)Validating the examination details between source and destination.
2732 -- to the enrpl_upd_sua_uoo procedure.
2733 -- w.r.t. Drop Transfer workflow notification Build, bug#2599925
2734 --svenkata 28-Oct-02 Calculate the Total enrolled Credit points of the student before Transfer .
2735 -- Modify the call to the fn eval_min_cp to pass the total enr CP.
2736 -- The signature of the routine enrpl_upd_sua_uoo has been modified to add Acad Cal dtls.
2737 --Nishikant 01NOV2002 SEVIS Build. Enh Bug#2641905. Two new parameters p_person_id, p_message
2738 -- added to the calls igs_ss_enr_details.get_notification.
2739 --svenkata 22-Dec-02 Bug # 2686793 - Added a call to routine igs_en_elgbl_program.eval_unit_forced_type to enforce
2740 -- to enforce Attendance Type validations on transferring a unit.The validation is done after the
2741 -- unit is dropped.If validation fails(ERROR),transferred record is rolled back.If a warning is encountered,
2742 -- the warning message is logged.Transfer is completed successfully.
2743 --kkillams 07-Jan-03 Logging new error message when source and destination unit section are same.
2744 -- w.r.t. bug no: 2711193
2745 --svenkata 7-Jan-03 Incorporated the logic for 'When first Reach Attendance Type'. The routine enrp_val_coo_att is being called to get the
2746 Att Typ before updating the CP.The routine eval_unit_forced_type is then called called to evaluate with the
2747 fetched value-Bug#2737263
2748 -- pradhakr 20-Jan-2003 Added a parameter no_assessment_ind to the procedue call IGS_EN_VAL_SUA.enrp_val_sua_ovrd_cp
2749 -- as part of ENCR26 build.
2750 --rvivekan 22-oct-2003 Placements build#3052438. Added code to sort the usecs based on relation_type. Also added handling
2751 -- to enroll subordinates when a superior is enrolled and to drop subordinates when a superior is dropped
2752 -- vkarthik 13-Feb-04 Waitlist priority/prefernce weightages were not passed to the API and hence
2753 -- waitlist position was not getting calculated, modified to pass the weightages as part bug 3433446
2754
2755
2756 -------------------------------------------------------------------------------------------- */
2757 BEGIN
2758 DECLARE
2759 e_resource_busy_exception EXCEPTION;
2760 PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
2761 cst_enr_blk_uo CONSTANT VARCHAR2(10) := 'ENR-BLK-UO';
2762 cst_unit_rule_check CONSTANT VARCHAR2(15) := 'UNIT-RULE-CHECK';
2763 cst_rule_check CONSTANT VARCHAR2(10) := 'RULE-CHECK';
2764 cst_invalid CONSTANT VARCHAR2(10) := 'INVALID';
2765 cst_error CONSTANT VARCHAR2(10) := 'ERROR';
2766 cst_att_valid CONSTANT VARCHAR2(10) := 'ATT-VALID';
2767 cst_information CONSTANT VARCHAR2(12) := 'INFORMATION';
2768 cst_changed CONSTANT VARCHAR2(10) := 'CHANGED';
2769 cst_warning CONSTANT VARCHAR2(10) := 'WARNING';
2770 cst_att_date CONSTANT VARCHAR2(10) := 'ATT-DATE';
2771 cst_superior CONSTANT VARCHAR2(10) := 'SUPERIOR';
2772 cst_encumb CONSTANT VARCHAR2(10) := 'ENCUMB';
2773 cst_summary CONSTANT VARCHAR2(10) := 'SUMMARY';
2774 cst_blk_uoo CONSTANT VARCHAR2(34) := 'BULK UNIT OFFERING OPTION TRANSFER';
2775 l_deny_enrollment VARCHAR2(1);
2776
2777 -- cursor considers the term records which is fetching the student unit attempts based
2778 -- on the given criteria for unit section transfer
2779 CURSOR c_sua (cp_load_Cal_type IGS_CA_INST.CAL_TYPE%TYPE
2780 , cp_load_ci_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE)IS
2781 SELECT sua.person_id,
2782 sua.course_cd,
2783 sua.location_cd,
2784 sua.unit_class,
2785 sua.unit_attempt_status,
2786 sua.enrolled_dt,
2787 sca.coo_id,
2788 sua.version_number,
2789 sca.version_number program_version_number,
2790 sua.uoo_id
2791 FROM
2792 igs_en_su_attempt sua,
2793 igs_en_stdnt_ps_att sca
2794 WHERE (
2795 (p_course_cd IS NULL OR sca.course_cd LIKE p_course_cd) AND
2796 (sca.course_attempt_status NOT IN ('LAPSED','DISCONTIN')) AND
2797 (p_location_cd IS NULL OR
2798 p_location_cd = igs_en_spa_terms_api.get_spat_location(
2799 sca.person_id, sca.course_cd, cp_load_cal_type, cp_load_ci_sequence_number)) AND
2800 (p_attendance_mode IS NULL OR
2801 p_attendance_mode = igs_en_spa_terms_api.get_spat_att_mode(
2802 sca.person_id, sca.course_cd, cp_load_cal_type, cp_load_ci_sequence_number)) AND
2803 (p_attendance_type IS NULL OR
2804 p_attendance_type = igs_en_spa_terms_api.get_spat_att_type(
2805 sca.person_id, sca.course_cd, cp_load_cal_type, cp_load_ci_sequence_number)) AND
2806 sca.person_id = sua.person_id AND
2807 sca.course_cd = sua.course_cd AND
2808 sua.unit_cd = p_from_unit_cd AND
2809 (p_from_uv_version_number IS NULL OR
2810 sua.version_number = p_from_uv_version_number) AND
2811 sua.cal_type = p_teach_cal_type AND
2812 sua.ci_sequence_number = p_teach_ci_sequence_number AND
2813 (p_from_location_cd IS NULL OR
2814 sua.location_cd = p_from_location_cd) AND
2815 (p_from_unit_class IS NULL OR
2816 sua.unit_class = p_from_unit_class) AND
2817 sua.unit_attempt_status IN (
2818 p_unit_attempt_status1,
2819 NVL(p_unit_attempt_status2, p_unit_attempt_status1),
2820 NVL(p_unit_attempt_status3, p_unit_attempt_status1)) AND
2821 (p_group_id IS NULL OR
2822 EXISTS (
2823 SELECT 'X'
2824 FROM igs_pe_prsid_grp_mem pigm
2825 WHERE
2826 pigm.group_id = p_group_id AND
2827 pigm.person_id = sca.person_id AND
2828 (pigm.end_date IS NULL OR pigm.end_date >= trunc(sysdate)) AND
2829 (pigm.start_date IS NULL OR pigm.start_date <= trunc(sysdate))
2830 )))
2831 ORDER BY
2832 sua.unit_cd, sua.enrolled_dt;
2833
2834 CURSOR c_sle (
2835 cp_rule_creation_dt DATE) IS
2836 SELECT sle.key,
2837 sle.message_name,
2838 sle.text
2839 FROM IGS_GE_S_LOG_ENTRY sle
2840 WHERE sle.s_log_type = cst_enr_blk_uo AND
2841 sle.creation_dt = cp_rule_creation_dt
2842 ORDER BY sle.sequence_number;
2843 CURSOR c_sle_del (
2844 cp_rule_creation_dt DATE) IS
2845 SELECT rowid,'x'
2846 FROM IGS_GE_S_LOG_ENTRY
2847 WHERE s_log_type = cst_enr_blk_uo AND
2848 creation_dt = cp_rule_creation_dt
2849 FOR UPDATE OF LAST_UPDATED_BY NOWAIT;
2850 v_sle_del_exists VARCHAR2(1) ;
2851 CURSOR c_sl_del (
2852 cp_rule_creation_dt DATE) IS
2853 SELECT rowid,'x'
2854 FROM IGS_GE_S_LOG
2855 WHERE s_log_type = cst_enr_blk_uo AND
2856 creation_dt = cp_rule_creation_dt
2857 FOR UPDATE OF LAST_UPDATED_BY NOWAIT;
2858
2859 --Cursor to get the load calendar for a given teach calendar
2860 CURSOR cur_load1 IS
2861 SELECT tl.load_cal_type ,
2862 tl.load_ci_sequence_number
2863 FROM igs_ca_teach_to_load_v tl,
2864 IGS_CA_INST ci,
2865 IGS_CA_STAT cs
2866 WHERE tl.teach_cal_type = p_teach_cal_type
2867 AND tl.teach_ci_sequence_number = p_teach_ci_sequence_number
2868 AND ci.cal_type = tl.load_cal_type
2869 AND ci.sequence_number = tl.load_ci_sequence_number
2870 AND ci.cal_status = cs.cal_status
2871 AND cs.s_cal_status = 'ACTIVE'
2872 ORDER BY load_start_dt ASC;
2873
2874 v_sl_del_exists VARCHAR2(1) ;
2875 -- counter variables
2876 v_total_sua_count NUMBER := 0;
2877 v_total_sua_error_count NUMBER := 0;
2878 v_total_encumb_error_count NUMBER := 0;
2879 v_total_sua_warn_count NUMBER := 0;
2880 v_total_sua_trnsfr_count NUMBER := 0;
2881 v_total_course_error_count NUMBER := 0;
2882 v_total_course_warn_count NUMBER := 0;
2883 v_error_count NUMBER := 0;
2884 v_warn_count NUMBER := 0;
2885 v_sua_trnsfr_count NUMBER := 0;
2886 v_total_lock_count NUMBER := 0;
2887 -- output variables
2888 v_acad_cal_type IGS_CA_INST.cal_type%TYPE ;
2889 v_acad_ci_sequence_number IGS_CA_INST.sequence_number%TYPE ;
2890 v_acad_ci_start_dt IGS_CA_INST.start_dt%TYPE ;
2891 v_acad_ci_end_dt IGS_CA_INST.end_dt%TYPE ;
2892 v_message_name Varchar2(30) ;
2893 v_teach_start_dt IGS_CA_INST.start_dt%TYPE ;
2894 v_teach_end_dt IGS_CA_INST.end_dt%TYPE ;
2895 v_to_uv_version_number IGS_EN_SU_ATTEMPT.version_number%TYPE := 0;
2896 v_to_location_cd IGS_EN_SU_ATTEMPT.location_cd%TYPE ;
2897 v_to_unit_class IGS_EN_SU_ATTEMPT.unit_class%TYPE ;
2898 v_rollback_occurred BOOLEAN := FALSE;
2899 v_processing_occurred BOOLEAN :=FALSE;
2900 v_error_occurred BOOLEAN := FALSE;
2901 v_validation_error BOOLEAN := FALSE;
2902 v_course_key VARCHAR2(255) ;
2903 v_text VARCHAR2(255) ;
2904 v_fail_type VARCHAR2(10) ;
2905 v_alt_cd VARCHAR2(255) ; -- return parameter, useless
2906 v_rule_creation_dt DATE ;
2907 v_creation_dt IGS_GE_S_LOG.creation_dt%TYPE ;
2908
2909 l_enrolment_cat IGS_PS_TYPE.ENROLMENT_CAT%TYPE;
2910 l_commencement_type VARCHAR2(20) DEFAULT NULL;
2911 l_en_cal_type IGS_CA_INST.CAL_TYPE%TYPE;
2912 l_en_ci_seq_num IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
2913 l_person_type IGS_PE_PERSON_TYPES.person_type_code%TYPE;
2914 l_waitlist_flag VARCHAR2(1) DEFAULT 'N';
2915 l_load_cal_type IGS_CA_INST.CAL_TYPE%TYPE;
2916 l_load_seq_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE;
2917 l_unit_attempt_status IGS_EN_SU_ATTEMPT.UNIT_ATTEMPT_STATUS%TYPE;
2918 l_destination_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE;
2919 l_dummy1 VARCHAR2(30);
2920 l_dummy2 VARCHAR2(30);
2921 l_dummy VARCHAR2(200);
2922
2923 PROCEDURE enrpl_upd_sua_uoo(
2924 p_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
2925 p_course_cd IGS_PS_VER.course_cd%TYPE,
2926 p_version_number IGS_PS_UNIT_VER.version_number%TYPE, --program version
2927 p_u_version_number IGS_PS_UNIT_VER.version_number%TYPE, --unit version
2928 p_from_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE,
2929 p_teach_end_dt IGS_CA_INST.end_dt%TYPE,
2930 p_location_cd IGS_AD_LOCATION.location_cd%TYPE,
2931 p_unit_class IGS_AS_UNIT_CLASS.unit_class%TYPE,
2932 p_unit_attempt_status IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE,
2933 p_enrolled_dt IGS_EN_SU_ATTEMPT.enrolled_dt%TYPE,
2934 p_to_uv_version_number IGS_PS_UNIT_VER.version_number%TYPE,
2935 p_to_location_cd IGS_AD_LOCATION.location_cd%TYPE,
2936 p_to_unit_class IGS_AS_UNIT_CLASS.unit_class%TYPE,
2937 p_sua_error_count IN OUT NOCOPY NUMBER,
2938 p_sua_warn_count IN OUT NOCOPY NUMBER,
2939 p_sua_trnsfr_count IN OUT NOCOPY NUMBER,
2940 p_processing_occurred IN OUT NOCOPY BOOLEAN,
2941 p_person_type IN VARCHAR2,
2942 p_enrolment_cat IN VARCHAR2,
2943 p_commencement_type IN VARCHAR2,
2944 p_enforce_val IN VARCHAR2,
2945 p_enroll_meth IN VARCHAR2,
2946 p_reason IN VARCHAR2,
2947 p_load_cal_type IN VARCHAR2,
2948 p_load_seq_number IN NUMBER,
2949 p_waitlist_flag OUT NOCOPY VARCHAR2,
2950 p_destination_uoo_id IN OUT NOCOPY IGS_EN_SU_ATTEMPT.UOO_ID%TYPE,
2951 p_acad_cal_type IN VARCHAR2,
2952 p_acad_seq_number IN NUMBER )
2953 AS
2954 /*
2955 Who What when
2956 sarakshi 28-Jul-2003 Enh#2930935,modified cursor c_unit_enroll_cp,such that it picks enrolled
2957 credit points from usec level if exists else from unit level also modified
2958 the usage of the cursor apprpriately
2959 */
2960
2961 BEGIN -- enrpl_upd_sua_uoo
2962 -- Local procedure to process the transfer of IGS_PS_UNIT offering option.
2963 DECLARE
2964 cst_unconfirm CONSTANT VARCHAR2(10) := 'UNCONFIRM';
2965 cst_waitlisted CONSTANT VARCHAR2(10) := 'WAITLISTED';
2966 cst_duplicate CONSTANT VARCHAR2(10) := 'DUPLICATE';
2967 cst_transferred CONSTANT VARCHAR2(12) := 'TRANSFERRED';
2968 cst_active CONSTANT VARCHAR2(10) := 'ACTIVE';
2969 CURSOR c_uoo IS
2970 SELECT uoo.uoo_id, uoo.reserved_seating_allowed
2971 FROM IGS_PS_UNIT_OFR_OPT uoo
2972 WHERE uoo.unit_cd = p_from_unit_cd AND
2973 uoo.version_number = p_to_uv_version_number AND
2974 uoo.cal_type = p_teach_cal_type AND
2975 uoo.ci_sequence_number = p_teach_ci_sequence_number AND
2976 uoo.location_cd = p_to_location_cd AND
2977 uoo.unit_class = p_to_unit_class AND
2978 uoo.offered_ind = 'Y';
2979
2980 CURSOR c_uv IS
2981 SELECT us.s_unit_status,
2982 uv.expiry_dt
2983 FROM IGS_PS_UNIT_VER uv,
2984 IGS_PS_UNIT_STAT us
2985 WHERE uv.unit_cd = p_from_unit_cd AND
2986 uv.version_number = p_to_uv_version_number AND
2987 us.UNIT_STATUS = uv.UNIT_STATUS;
2988 v_uv_rec c_uv%ROWTYPE;
2989
2990 --Cursor to get the unit attempt attributes for a student unit attempt
2991 CURSOR cur_f_unit IS
2992 SELECT
2993 grading_schema_code,
2994 gs_version_number,
2995 override_enrolled_cp,
2996 no_assessment_ind
2997 FROM IGS_EN_SU_ATTEMPT
2998 WHERE person_id = p_person_id
2999 AND course_cd = p_course_cd
3000 AND uoo_id = p_from_uoo_id;
3001 rec_f_unit cur_f_unit%ROWTYPE;
3002
3003 --Cursor to get the unit's enrolled_credit_points
3004 CURSOR c_unit_enroll_cp(cp_uoo_id IN NUMBER) IS
3005 SELECT
3006 NVL(cps.enrolled_credit_points,uv.enrolled_credit_points) enrolled_credit_points
3007 FROM IGS_PS_UNIT_OFR_OPT uoo,
3008 IGS_PS_UNIT_VER uv,
3009 IGS_PS_USEC_CPS cps
3010 WHERE uoo.uoo_id = cps.uoo_id(+) AND
3011 uoo.unit_cd = uv.unit_cd AND
3012 uoo.version_number = uv.version_number AND
3013 uoo.uoo_id = cp_uoo_id;
3014 r_unit_enroll_cp c_unit_enroll_cp%ROWTYPE;
3015 r_unit_enroll_cp_1 c_unit_enroll_cp%ROWTYPE;
3016
3017 --Cursor to get the examination details of an unit section.
3018 CURSOR cur_exam_loc(cp_uoo_id igs_ps_usec_as.uoo_id%TYPE)
3019 IS SELECT * FROM igs_ps_usec_as
3020 WHERE uoo_id = cp_uoo_id;
3021 src_exam_rec cur_exam_loc%ROWTYPE;
3022 dst_exam_rec cur_exam_loc%ROWTYPE;
3023
3024 CURSOR c_dest_sua(p_d_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
3025 SELECT 'X'
3026 FROM IGS_EN_SU_ATTEMPT sua
3027 WHERE sua.person_id = p_person_id AND
3028 sua.course_cd = p_course_cd AND
3029 sua.uoo_id = p_d_uoo_id AND
3030 sua.unit_attempt_status <> 'DROPPED';
3031 r_dest_sua c_dest_sua%ROWTYPE;
3032
3033 CURSOR c_sua_upd IS
3034 SELECT sua.rowid, sua.*
3035 FROM IGS_EN_SU_ATTEMPT sua
3036 WHERE sua.person_id = p_person_id AND
3037 sua.course_cd = p_course_cd AND
3038 sua.uoo_id = p_from_uoo_id
3039 FOR UPDATE OF
3040 sua.version_number,
3041 sua.location_cd,
3042 sua.unit_class,
3043 sua.uoo_id NOWAIT;
3044
3045 -- Curosr for getting the grading schema in Unit section level for
3046 -- the source
3047 CURSOR c_from_usec_grad_schm(l_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
3048 SELECT grading_schema_code, grd_schm_version_number, default_flag
3049 FROM igs_ps_usec_grd_schm
3050 WHERE uoo_id = l_uoo_id
3051 AND default_flag = 'Y';
3052
3053 -- Curosr for getting the grading schema in Unit section level for the destination
3054 CURSOR c_usec_grad_schm(l_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
3055 SELECT grading_schema_code, grd_schm_version_number, default_flag
3056 FROM igs_ps_usec_grd_schm
3057 WHERE uoo_id = l_uoo_id;
3058
3059 -- Cursor to get the grading schema in Unit level
3060 CURSOR c_from_unit_grad_schm(l_unit_cd VARCHAR2, l_unit_version NUMBER) IS
3061 SELECT grading_schema_code, grd_schm_version_number
3062 FROM igs_ps_unit_grd_schm
3063 WHERE unit_code = l_unit_cd
3064 AND unit_version_number = l_unit_version
3065 AND default_flag = 'Y';
3066
3067 -- Cursor to check the grading schema in source Unit level is default for the destination unit
3068 CURSOR c_unit_grad_schm(l_unit_cd VARCHAR2, l_unit_version NUMBER,p_grading_schema_code VARCHAR2, p_grd_schm_version_number NUMBER) IS
3069 SELECT grading_schema_code, grd_schm_version_number
3070 FROM igs_ps_unit_grd_schm
3071 WHERE unit_code = l_unit_cd
3072 AND unit_version_number = l_unit_version
3073 AND grading_schema_code = p_grading_schema_code
3074 AND grd_schm_version_number = p_grd_schm_version_number
3075 AND default_flag = 'Y';
3076
3077 -- Cursor to get the unit code and version number for the passed uoo_id
3078 CURSOR c_unit_cd (l_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
3079 SELECT unit_cd, version_number
3080 FROM igs_ps_unit_ofr_opt
3081 WHERE uoo_id = l_uoo_id ;
3082
3083 -- Cursor to get the Relation_type for the passed uoo_id
3084 CURSOR c_uoo_rel_type (cp_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
3085 SELECT NVL(relation_type,'NONE'),sup_uoo_id
3086 FROM igs_ps_unit_ofr_opt
3087 WHERE uoo_id = cp_uoo_id ;
3088
3089
3090 -- Cursor to get the coo_id of the student from spat if exists else get
3091 -- from spa
3092 CURSOR cur_coo_id(
3093 cp_person_id IN NUMBER,
3094 cp_course_cd IN VARCHAR2,
3095 cp_load_cal_type IN VARCHAR2,
3096 cp_load_sequence_number IN NUMBER)
3097 IS
3098 SELECT NVL(spat.coo_id, spa.coo_id) coo_id
3099 FROM igs_en_stdnt_ps_att spa,
3100 igs_en_spa_terms spat
3101 WHERE
3102 spa.course_cd = cp_course_cd AND
3103 spa.person_id = cp_person_id AND
3104 spat.term_cal_type(+) = cp_load_cal_type AND
3105 spat.term_sequence_number(+)= cp_load_sequence_number AND
3106 spat.person_id(+) = spa.person_id AND
3107 spat.program_cd(+) = spa.course_cd;
3108
3109 -- Cursor to get the assessment indicator value.
3110 CURSOR c_assessment IS
3111 SELECT no_assessment_ind
3112 FROM igs_en_su_attempt
3113 WHERE person_id = p_person_id
3114 AND course_cd = p_course_cd
3115 AND uoo_id = p_destination_uoo_id;
3116
3117 --Cursor to get waitlist position
3118 CURSOR c_admin_pri (cp_uoo_id igs_en_su_attempt.uoo_id%TYPE,cp_waitlist_dt DATE) IS
3119 SELECT NVL(MAX(administrative_priority),0)+1
3120 FROM igs_en_su_attempt
3121 WHERE uoo_id=cp_uoo_id
3122 AND waitlist_dt<=cp_waitlist_dt
3123 AND unit_attempt_status='WAITLISTED';
3124
3125 CURSOR c_lock_dest_usec(cp_uoo_id igs_en_su_attempt.uoo_id%TYPE) IS
3126 SELECT uoo_id
3127 FROM igs_ps_unit_ofr_opt
3128 WHERE uoo_id=cp_uoo_id FOR UPDATE;
3129
3130
3131 p_deny_warn_att VARCHAR2(20) := NULL ;
3132 l_attendance_type_reach BOOLEAN := TRUE;
3133 l_cur_coo_id cur_coo_id%ROWTYPE;
3134 l_attendance_types VARCHAR2(100); -- As returned from the function igs_en_val_sca.enrp_val_coo_att
3135
3136 rec_unit_cd c_unit_cd%ROWTYPE;
3137 rec_from_unit_cd c_unit_cd%ROWTYPE;
3138 rec_from_usec_grad_schm c_usec_grad_schm%ROWTYPE;
3139 rec_destination_usec_grad_schm c_usec_grad_schm%ROWTYPE;
3140 rec_from_unit_grad_schm c_unit_grad_schm%ROWTYPE;
3141 rec_destination_unit_grad_schm c_unit_grad_schm%ROWTYPE;
3142 l_grade_found BOOLEAN := FALSE;
3143 l_usec_grad_schm_exist BOOLEAN := FALSE;
3144
3145 v_sua_upd_exists VARCHAR2(1);
3146 v_key VARCHAR2(255);
3147 v_update_uoo BOOLEAN ;
3148 v_fail_type VARCHAR2(10);
3149 v_message_name VARCHAR2(30) ;
3150 l_reserved_seating_allowed igs_ps_unit_ofr_opt.reserved_seating_allowed%TYPE;
3151 l_unit_section_status igs_ps_unit_ofr_opt.unit_section_status%TYPE DEFAULT NULL;
3152 l_waitlist_ind VARCHAR2(3) DEFAULT NULL;
3153 l_dummy VARCHAR2(50) DEFAULT NULL;
3154 l_dummy_bolean BOOLEAN DEFAULT TRUE;
3155 l_message VARCHAR2(100) DEFAULT NULL;
3156 l_notification_flag igs_en_cpd_ext.notification_flag%TYPE;
3157 l_override_enrolled_cp igs_en_su_attempt.override_enrolled_cp%TYPE DEFAULT 0;
3158 l_repeat_flag VARCHAR2(1);
3159 l_source_enrolled_cp igs_en_su_attempt.override_enrolled_cp%TYPE DEFAULT 0;
3160 l_dest_enrolled_cp igs_en_su_attempt.override_enrolled_cp%TYPE DEFAULT 0;
3161 -- Added as part of Enrollment Eligibility and validations
3162 l_eftsu_total igs_en_su_attempt.override_eftsu%type DEFAULT NULL ;
3163 l_total_credit_points igs_en_su_attempt.override_enrolled_cp%TYPE ;
3164 l_credit_points igs_en_su_attempt.override_enrolled_cp%TYPE DEFAULT NULL ;
3165 l_no_assessment_ind igs_en_su_attempt.no_assessment_ind%TYPE;
3166 l_rowid VARCHAR2(25);
3167 l_encoded_msg VARCHAR2(2000);
3168 l_app_sht_name VARCHAR2(100);
3169 l_msg_name VARCHAR2(2000);
3170
3171 l_wlst_position NUMBER := NULL;
3172 l_pri_weight NUMBER;
3173 l_pref_weight NUMBER;
3174 l_source_uoo_rel VARCHAR2(30);
3175 l_source_sup_uoo NUMBER;
3176 l_dest_uoo_rel VARCHAR2(30);
3177 l_dest_sup_uoo NUMBER;
3178 l_uoo_ids_list VARCHAR2(2000);
3179 l_sub_success VARCHAR2(2000);
3180 l_sub_waitlist VARCHAR2(2000);
3181 l_sub_failed VARCHAR2(2000);
3182 l_message_name VARCHAR2(2000):=NULL;
3183 l_deny_warn VARCHAR2(20):=NULL;
3184 l_ret_stat VARCHAR2(100):=NULL;
3185
3186
3187 BEGIN
3188 -- Initialise the counters.
3189 p_sua_error_count := 0;
3190 p_sua_warn_count := 0;
3191 p_sua_trnsfr_count := 0;
3192 v_key := TO_CHAR(p_person_id) || '|' ||
3193 p_course_cd || '|' ||
3194 p_from_unit_cd || '|' ||
3195 p_teach_cal_type || '|' ||
3196 TO_CHAR(p_teach_ci_sequence_number) || '|' ||
3197 TO_CHAR(p_u_version_number) || '|' ||
3198 p_location_cd || '|' ||
3199 p_unit_class || '|' ||
3200 TO_CHAR(p_to_uv_version_number) || '|' ||
3201 p_to_location_cd || '|' ||
3202 p_to_unit_class;
3203
3204 -- Get the assessment indicator value
3205 OPEN c_assessment;
3206 FETCH c_assessment INTO l_no_assessment_ind;
3207 CLOSE c_assessment;
3208
3209 -- Validate that the IGS_PS_UNIT offering option exists.
3210 OPEN c_uoo;
3211 FETCH c_uoo INTO p_destination_uoo_id,l_reserved_seating_allowed;
3212 IF c_uoo%NOTFOUND THEN
3213 CLOSE c_uoo;
3214
3215 -- Log error, unable to transfer student IGS_PS_UNIT attempt
3216 -- option as the IGS_PS_UNIT option is not offered.
3217 IGS_GE_INS_SLE.genp_set_log_entry(
3218 cst_enr_blk_uo,
3219 cst_blk_uoo,
3220 v_key,
3221 'IGS_EN_UOO_NOT_EXISTS', -- Failed to transfer as option does not exist.
3222 'ERROR|NO_UOO');
3223 p_sua_error_count := p_sua_error_count + 1;
3224 -- Exit from the local procedure
3225 RETURN;
3226 END IF;
3227 CLOSE c_uoo;
3228
3229 --Check whether student is already enrolled in the destination unit.
3230 OPEN c_dest_sua(p_destination_uoo_id);
3231 FETCH c_dest_sua INTO r_dest_sua;
3232 IF c_dest_sua%FOUND THEN
3233 -- Log error, unable to transfer student IGS_PS_UNIT attempt
3234 -- as student is already enrolled in the destination unit.
3235 IGS_GE_INS_SLE.genp_set_log_entry(
3236 cst_enr_blk_uo,
3237 cst_blk_uoo,
3238 v_key,
3239 'IGS_EN_TRN_FAIL_DUP_ATT',
3240 'ERROR|DUP_ATT');
3241 p_sua_error_count := p_sua_error_count + 1;
3242 -- Exit from the local procedure
3243 CLOSE c_dest_sua;
3244 RETURN;
3245 END IF;
3246 CLOSE c_dest_sua;
3247 --Check if both source and dest have the same relation type .
3248 OPEN c_uoo_rel_type(p_destination_uoo_id);
3249 FETCH c_uoo_rel_type INTO l_dest_uoo_rel,l_dest_sup_uoo;
3250 CLOSE c_uoo_rel_type;
3251 OPEN c_uoo_rel_type(p_from_uoo_id);
3252 FETCH c_uoo_rel_type INTO l_source_uoo_rel,l_source_sup_uoo;
3253 CLOSE c_uoo_rel_type;
3254 IF l_source_uoo_rel='SUBORDINATE' AND (l_dest_uoo_Rel<>'SUBORDINATE' OR l_source_sup_uoo<>l_dest_sup_uoo) THEN
3255 -- Log error, unable to transfer student unit oferring
3256 -- option as the relation types are incosistent .
3257 IGS_GE_INS_SLE.genp_set_log_entry(
3258 cst_enr_blk_uo,
3259 cst_blk_uoo,
3260 v_key,
3261 'IGS_EN_SUA_BLK_TRN_SUB_TO_SUP',
3262 cst_error || '|SUPERIOR-SUBORDINATE');
3263 p_sua_error_count := p_sua_error_count + 1;
3264 -- Exit from the local procedure
3265 RETURN;
3266 END IF;
3267 IF l_source_uoo_rel='SUPERIOR' AND l_dest_uoo_Rel='SUBORDINATE' THEN
3268 -- Log error, unable to transfer student unit oferring
3269 -- option as the relation types are incosistent.
3270 IGS_GE_INS_SLE.genp_set_log_entry(
3271 cst_enr_blk_uo,
3272 cst_blk_uoo,
3273 v_key,
3274 'IGS_EN_SUA_BLK_TRN_SUP_TO_SUB',
3275 cst_error || '|SUBORDINATE-SUPERIOR');
3276 p_sua_error_count := p_sua_error_count + 1;
3277 -- Exit from the local procedure
3278 RETURN;
3279 END IF;
3280
3281 -- Validate that the IGS_PS_UNIT version is allowable for transfers.
3282 OPEN c_uv;
3283 FETCH c_uv INTO v_uv_rec;
3284 CLOSE c_uv;
3285 IF v_uv_rec.s_unit_status <> cst_active THEN
3286
3287 -- Log error, unable to transfer student IGS_PS_UNIT attempt
3288 -- option as the IGS_PS_UNIT version is not active.
3289 IGS_GE_INS_SLE.genp_set_log_entry(
3290 cst_enr_blk_uo,
3291 cst_blk_uoo,
3292 v_key,
3293 'IGS_EN_FAIL_UNITVER_NOT_ACTIV', -- Failed to transfer as IGS_PS_UNIT version not active.
3294 cst_error || '|ACTIVE-UV');
3295 p_sua_error_count := p_sua_error_count + 1;
3296 -- Exit from the local procedure
3297 RETURN;
3298 ELSE
3299 IF v_uv_rec.expiry_dt IS NOT NULL THEN
3300
3301 IF p_u_version_number <> p_to_uv_version_number THEN
3302
3303 -- Log error, unable to transfer student IGS_PS_UNIT attempt
3304 -- option as the IGS_PS_UNIT version is not active.
3305 IGS_GE_INS_SLE.genp_set_log_entry(
3306 cst_enr_blk_uo,
3307 cst_blk_uoo,
3308 v_key,
3309 'IGS_EN_FAIL_UNITVER_EXPDT_SET', -- Failed to transfer as IGS_PS_UNIT version expiry date set.
3310 cst_error || '|UV-EXPIRED');
3311 p_sua_error_count := p_sua_error_count + 1;
3312 -- Exit from the local procedure
3313 RETURN;
3314 END IF;
3315 END IF;
3316 END IF;
3317
3318 v_update_uoo := TRUE;
3319 --Getting student (Source)unit attempt details
3320 OPEN cur_f_unit;
3321 FETCH cur_f_unit INTO rec_f_unit;
3322 CLOSE cur_f_unit;
3323
3324 --Checking for the seat availability
3325 IF (p_unit_attempt_status <> cst_unconfirm) THEN
3326 igs_en_gen_015.get_usec_status(
3327 p_destination_uoo_id,
3328 p_person_id,
3329 l_unit_section_status,
3330 l_waitlist_ind,
3331 p_load_cal_type,
3332 p_load_seq_number,
3333 p_course_cd);
3334 IF l_waitlist_ind IN ('N','Y') THEN
3335 IF p_enforce_val = 'Y' AND l_reserved_seating_allowed ='Y' AND l_waitlist_ind = 'N' THEN
3336 -- getting the notification flag of reserve seat step
3337 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3338 v_message_name := NULL;
3339 l_notification_flag := NULL;
3340 l_notification_flag := igs_ss_enr_details.get_notification(
3341 p_person_type => p_person_type,
3342 p_enrollment_category => p_enrolment_cat,
3343 p_comm_type => p_commencement_type,
3344 p_enr_method_type => p_enroll_meth,
3345 p_step_group_type => 'UNIT',
3346 p_step_type => 'RSV_SEAT',
3347 p_person_id => p_person_id,
3348 p_message => v_message_name
3349 );
3350 IF v_message_name IS NOT NULL THEN
3351 IGS_GE_INS_SLE.genp_set_log_entry(
3352 cst_enr_blk_uo,
3353 cst_blk_uoo,
3354 v_key,
3355 v_message_name, -- person belongs to more than one person ID group.
3356 cst_error || '|PERID_GRP' );
3357 p_sua_error_count := p_sua_error_count + 1;
3358 v_update_uoo := FALSE;
3359 END IF;
3360
3361 IF l_notification_flag IS NOT NULL THEN
3362 --Checking the reserve seating validation.
3363 l_dummy_bolean := igs_en_elgbl_unit.eval_rsv_seat (
3364 p_person_id
3365 ,p_load_cal_type
3366 ,p_load_seq_number
3367 ,p_destination_uoo_id
3368 ,p_course_cd
3369 ,p_version_number
3370 ,l_message
3371 ,l_notification_flag
3372 ,'JOB',
3373 l_deny_enrollment
3374 );
3375 END IF;
3376 END IF;
3377 ELSE
3378 IGS_GE_INS_SLE.genp_set_log_entry(
3379 cst_enr_blk_uo,
3380 cst_blk_uoo,
3381 v_key,
3382 'IGS_EN_TRN_FAIL_NO_SEATS', -- Failed to transfer.
3383 cst_error || '|NO_SEATS' );
3384 p_sua_error_count := p_sua_error_count + 1;
3385 v_update_uoo := FALSE;
3386 END IF;
3387 END IF;
3388 --Validating the examination details at source and destination.
3389 IF ((p_unit_attempt_status <> cst_unconfirm) AND
3390 (p_enforce_val = 'Y')) THEN
3391 --Getting Examination details at Source level.
3392 OPEN cur_exam_loc(p_from_uoo_id);
3393 FETCH cur_exam_loc INTO src_exam_rec;
3394 IF cur_exam_loc%NOTFOUND THEN
3395 CLOSE cur_exam_loc;
3396 ELSE
3397 CLOSE cur_exam_loc;
3398 --Getting Examination details at destination level.
3399 OPEN cur_exam_loc(p_destination_uoo_id);
3400 FETCH cur_exam_loc INTO dst_exam_rec;
3401 --Comparing the source and destination examination details.
3402 IF ((cur_exam_loc%NOTFOUND) OR
3403 (dst_exam_rec.final_exam_date <> src_exam_rec.final_exam_date) OR
3404 (dst_exam_rec.final_exam_date IS NULL AND src_exam_rec.final_exam_date IS NOT NULL) OR
3405 (dst_exam_rec.final_exam_date IS NOT NULL AND src_exam_rec.final_exam_date IS NULL) OR
3406 (dst_exam_rec.exam_start_time <> src_exam_rec.exam_start_time) OR
3407 (dst_exam_rec.exam_end_time <> src_exam_rec.exam_end_time) OR
3408 (dst_exam_rec.exam_end_time IS NULL AND src_exam_rec.exam_end_time IS NOT NULL) OR
3409 (dst_exam_rec.exam_end_time IS NOT NULL AND src_exam_rec.exam_end_time IS NULL) OR
3410 (dst_exam_rec.location_cd <> src_exam_rec.location_cd) OR
3411 (NVL(dst_exam_rec.building_code,-1) <> NVL(src_exam_rec.building_code,-1)) OR
3412 (NVL(dst_exam_rec.room_code,-1)<> NVL(src_exam_rec.room_code,-1))
3413 )
3414 THEN
3415 IGS_GE_INS_SLE.genp_set_log_entry(
3416 cst_enr_blk_uo,
3417 cst_blk_uoo,
3418 v_key,
3419 'IGS_EN_TRN_WARN_EXAM_VAL',
3420 'WARNING|' ||'EXAM_DET');
3421 p_sua_warn_count := p_sua_warn_count + 1;
3422 END IF;
3423 CLOSE cur_exam_loc;
3424 END IF;
3425 END IF;
3426 --Validating the source unit attempt grading schema against destination unit attempt grading schema
3427 IF v_update_uoo THEN
3428
3429 IF ((rec_f_unit.grading_schema_code IS NOT NULL) AND (rec_f_unit.gs_version_number IS NOT NULL)) THEN
3430
3431 IF NOT igs_ss_en_wrappers.enr_val_grad_usec(
3432 p_destination_uoo_id,
3433 rec_f_unit.grading_schema_code,
3434 rec_f_unit.gs_version_number) THEN
3435
3436 IGS_GE_INS_SLE.genp_set_log_entry(
3437 cst_enr_blk_uo,
3438 cst_blk_uoo,
3439 v_key,
3440 'IGS_EN_MISMATH_GRAD', -- Failed to transfer.
3441 cst_error || '|GRAD_SCH');
3442 p_sua_error_count := p_sua_error_count + 1;
3443 v_update_uoo := FALSE;
3444
3445 END IF;
3446
3447 ELSE -- Grading schema not overridden at unit attempt level
3448 -- Get the Grading schema for the source unit section
3449 OPEN c_from_usec_grad_schm(p_from_uoo_id);
3450 FETCH c_from_usec_grad_schm INTO rec_from_usec_grad_schm;
3451 CLOSE c_from_usec_grad_schm;
3452
3453 IF rec_from_usec_grad_schm.grading_schema_code IS NOT NULL THEN
3454
3455 -- Loop through the destination unit section and get the Grading schema
3456 FOR rec_destination_usec_grad_schm IN c_usec_grad_schm(p_destination_uoo_id) LOOP
3457 -- If the grading schema in the source and the destincation are the same and if it is the
3458 -- default one then return true and allow transfer of unit sections
3459 -- else log an error message.
3460 l_usec_grad_schm_exist := TRUE;
3461 IF (rec_from_usec_grad_schm.grading_schema_code = rec_destination_usec_grad_schm.grading_schema_code) AND
3462 (rec_from_usec_grad_schm.grd_schm_version_number = rec_destination_usec_grad_schm.grd_schm_version_number) AND
3463 (rec_destination_usec_grad_schm.default_flag = 'Y') THEN
3464 -- Grading Schema in Source unit section is default grading schema in destination unit section.
3465 l_grade_found := TRUE;
3466 EXIT;
3467 ELSIF (rec_from_usec_grad_schm.grading_schema_code = rec_destination_usec_grad_schm.grading_schema_code) AND
3468 (rec_from_usec_grad_schm.grd_schm_version_number = rec_destination_usec_grad_schm.grd_schm_version_number) AND
3469 (rec_destination_usec_grad_schm.default_flag = 'N') THEN
3470 -- Grading Schema in Source unit section is not default grading schema in destination unit section.
3471 l_grade_found := FALSE;
3472 EXIT;
3473 END IF;
3474 END LOOP;
3475
3476 -- if Grading schema is not found in the unit section level, then
3477 -- check the same in unit level.
3478 IF NOT l_usec_grad_schm_exist THEN
3479 OPEN c_unit_cd(p_destination_uoo_id);
3480 FETCH c_unit_cd INTO rec_unit_cd;
3481 CLOSE c_unit_cd;
3482
3483 OPEN c_unit_grad_schm(rec_unit_cd.unit_cd, rec_unit_cd.version_number,
3484 rec_from_usec_grad_schm.grading_schema_code,rec_from_usec_grad_schm.grd_schm_version_number);
3485 FETCH c_unit_grad_schm INTO rec_destination_unit_grad_schm;
3486
3487 -- If the grading schema is the same in both the source and destination
3488 -- then return true.
3489 IF c_unit_grad_schm%FOUND THEN
3490 l_grade_found := TRUE;
3491 ELSE
3492 l_grade_found := FALSE;
3493 END IF;
3494 CLOSE c_unit_grad_schm;
3495 END IF;
3496
3497 ELSE
3498 -- Grading schema for source is not found in the unit section,
3499 -- so check in the unit level and compare the grading schema
3500 -- with that of the destination in both unit section and
3501 -- unit level. If found then allow transfer else log an error message.
3502 OPEN c_unit_cd(p_from_uoo_id);
3503 FETCH c_unit_cd INTO rec_from_unit_cd;
3504 CLOSE c_unit_cd;
3505
3506 OPEN c_from_unit_grad_schm(rec_from_unit_cd.unit_cd, rec_from_unit_cd.version_number);
3507 FETCH c_from_unit_grad_schm INTO rec_from_unit_grad_schm;
3508 CLOSE c_from_unit_grad_schm;
3509
3510 -- If grading schema for source is found in the unit level then
3511 -- loop thru the destination unit sections.
3512 IF rec_from_unit_grad_schm.grading_schema_code IS NOT NULL THEN
3513 FOR rec_destination_usec_grad_schm IN c_usec_grad_schm(p_destination_uoo_id) LOOP
3514
3515 -- If the grading schema in the source and the destincation are the same and if it is the
3516 -- default one then allow transfer of unit sections.
3517 l_usec_grad_schm_exist := TRUE;
3518 IF (rec_from_unit_grad_schm.grading_schema_code = rec_destination_usec_grad_schm.grading_schema_code) AND
3519 (rec_from_unit_grad_schm.grd_schm_version_number = rec_destination_usec_grad_schm.grd_schm_version_number) AND
3520 (rec_destination_usec_grad_schm.default_flag = 'Y') THEN
3521 l_grade_found := TRUE;
3522 EXIT;
3523 ELSIF (rec_from_unit_grad_schm.grading_schema_code = rec_destination_usec_grad_schm.grading_schema_code) AND
3524 (rec_from_unit_grad_schm.grd_schm_version_number = rec_destination_usec_grad_schm.grd_schm_version_number) AND
3525 (rec_destination_usec_grad_schm.default_flag = 'N') THEN
3526 l_grade_found := FALSE;
3527 EXIT;
3528 END IF;
3529
3530 END LOOP;
3531
3532 -- If grading schema for destination is not found in unit section level,
3533 -- then check for the same in unit level.
3534 IF NOT l_usec_grad_schm_exist THEN
3535
3536 OPEN c_unit_cd(p_destination_uoo_id);
3537 FETCH c_unit_cd INTO rec_unit_cd;
3538 CLOSE c_unit_cd;
3539
3540 OPEN c_unit_grad_schm(rec_unit_cd.unit_cd, rec_unit_cd.version_number,
3541 rec_from_unit_grad_schm.grading_schema_code,rec_from_unit_grad_schm.grd_schm_version_number);
3542 FETCH c_unit_grad_schm INTO rec_destination_unit_grad_schm;
3543
3544 -- If the grading schema is the same in both the source and destination
3545 -- then return true.
3546 IF c_unit_grad_schm%FOUND THEN
3547 l_grade_found := TRUE;
3548 ELSE
3549 l_grade_found := FALSE;
3550 END IF;
3551 CLOSE c_unit_grad_schm;
3552 END IF;
3553 END IF; -- rec_from_unit_grad_schm.grading_schema_code IS NOT NULL
3554 END IF; -- rec_from_usec_grad_schm.grading_schema_code IS NOT NULL
3555
3556
3557 -- Source and destincation Grading schema are not the same, log an error message
3558 IF NOT l_grade_found THEN
3559
3560 IGS_GE_INS_SLE.genp_set_log_entry(
3561 cst_enr_blk_uo,
3562 cst_blk_uoo,
3563 v_key,
3564 'IGS_EN_MISMATH_GRAD', -- Failed to transfer.
3565 cst_error || '|GRAD_SCH');
3566 p_sua_error_count := p_sua_error_count + 1;
3567 v_update_uoo := FALSE;
3568 END IF;
3569 END IF; --rec_f_unit.grading_schema_code IS NOT NULL
3570
3571 END IF; -- v_update_uoo
3572
3573
3574 --Getting source override enrolled credit points if exists for student in override table.
3575 l_override_enrolled_cp:= igs_en_gen_015.enrp_get_appr_cr_pt(p_person_id,p_destination_uoo_id);
3576
3577 --Getting the enrolled credit points at unit level.
3578 r_unit_enroll_cp:= NULL;
3579 r_unit_enroll_cp_1:= NULL;
3580
3581 OPEN c_unit_enroll_cp(p_from_uoo_id);
3582 FETCH c_unit_enroll_cp INTO r_unit_enroll_cp;
3583 CLOSE c_unit_enroll_cp;
3584
3585 OPEN c_unit_enroll_cp(NVL(p_destination_uoo_id,p_from_uoo_id));
3586 FETCH c_unit_enroll_cp INTO r_unit_enroll_cp_1;
3587 CLOSE c_unit_enroll_cp;
3588
3589 --Setting Source and Destination enrolled credits points,
3590 l_source_enrolled_cp := NVL(rec_f_unit.override_enrolled_cp,r_unit_enroll_cp.enrolled_credit_points);
3591 l_dest_enrolled_cp := NVL(l_override_enrolled_cp,r_unit_enroll_cp_1.enrolled_credit_points);
3592
3593 --Validating the source unit attempt enroll credit points destination unit attempt
3594 -- only when the unit is not a audit unit attempt
3595 IF v_update_uoo AND rec_f_unit.override_enrolled_cp IS NOT NULL AND rec_f_unit.no_assessment_ind <> 'Y' THEN
3596 IF l_override_enrolled_cp IS NOT NULL THEN
3597 IF l_override_enrolled_cp <> rec_f_unit.override_enrolled_cp THEN
3598 IGS_GE_INS_SLE.genp_set_log_entry(
3599 cst_enr_blk_uo,
3600 cst_blk_uoo,
3601 v_key,
3602 'IGS_EN_MISMATH_ENR_CP', -- Failed to transfer.
3603 cst_error || '|OVER_EN_CP');
3604 p_sua_error_count := p_sua_error_count + 1;
3605 v_update_uoo := FALSE;
3606 END IF;
3607 ELSE
3608 l_message := NULL;
3609 l_dummy_bolean:= TRUE;
3610 --Validating the enroll credit points
3611 l_dummy_bolean:=IGS_EN_VAL_SUA.ENRP_VAL_SUA_OVRD_CP(
3612 p_from_unit_cd,
3613 p_to_uv_version_number,
3614 rec_f_unit.override_enrolled_cp,
3615 NULL,
3616 NULL,
3617 l_message,
3618 p_destination_uoo_id,
3619 l_no_assessment_ind);
3620 IF NOT l_dummy_bolean AND l_message IN ('IGS_EN_OVERRIDE_EFTSU_VALUES','IGS_EN_OVERRIDE_ENR_CREDITPNT') THEN
3621 OPEN c_unit_enroll_cp(p_from_uoo_id);
3622 FETCH c_unit_enroll_cp INTO r_unit_enroll_cp;
3623 CLOSE c_unit_enroll_cp;
3624 IF r_unit_enroll_cp.enrolled_credit_points <> rec_f_unit.override_enrolled_cp THEN
3625 IGS_GE_INS_SLE.genp_set_log_entry(
3626 cst_enr_blk_uo,
3627 cst_blk_uoo,
3628 v_key,
3629 'IGS_EN_MISMATH_ENR_CP', -- Failed to transfer.
3630 cst_error || '|OVER_EN_CP');
3631 p_sua_error_count := p_sua_error_count + 1;
3632 v_update_uoo := FALSE;
3633 END IF;
3634 END IF;
3635 END IF;
3636 END IF;
3637 --Validating the destination unit section incompatibility rule
3638 IF ((v_update_uoo) AND (p_enforce_val = 'Y')) THEN
3639 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3640 v_message_name := NULL;
3641 l_notification_flag := NULL;
3642 l_notification_flag := igs_ss_enr_details.get_notification(
3643 p_person_type => p_person_type,
3644 p_enrollment_category => p_enrolment_cat,
3645 p_comm_type => p_commencement_type,
3646 p_enr_method_type => p_enroll_meth,
3647 p_step_group_type => 'UNIT',
3648 p_step_type => 'INCMPT_UNT',
3649 p_person_id => p_person_id,
3650 p_message => v_message_name
3651 );
3652 IF v_message_name IS NOT NULL THEN
3653 IGS_GE_INS_SLE.genp_set_log_entry(
3654 cst_enr_blk_uo,
3655 cst_blk_uoo,
3656 v_key,
3657 v_message_name, -- person belongs to more than one person ID group.
3658 cst_error || '|PERID_GRP' );
3659 p_sua_error_count := p_sua_error_count + 1;
3660 v_update_uoo := FALSE;
3661 END IF;
3662
3663 IF l_notification_flag IS NOT NULL THEN
3664 l_message:= NULL;
3665 l_dummy_bolean:=NULL;
3666 l_dummy_bolean := igs_en_elgbl_unit.eval_incompatible(
3667 p_person_id
3668 ,p_load_cal_type
3669 ,p_load_seq_number
3670 ,p_destination_uoo_id
3671 ,p_course_cd
3672 ,p_version_number
3673 ,l_message
3674 ,l_notification_flag
3675 ,'JOB');
3676 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3677 IGS_GE_INS_SLE.genp_set_log_entry(
3678 cst_enr_blk_uo,
3679 cst_blk_uoo,
3680 v_key,
3681 'IGS_EN_TRN_FAIL_INCMPT_RULE', -- Failed to transfer.
3682 cst_error || '|UV_INCMPT');
3683 p_sua_error_count := p_sua_error_count + 1;
3684 v_update_uoo := FALSE;
3685 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3686 IGS_GE_INS_SLE.genp_set_log_entry(
3687 cst_enr_blk_uo,
3688 cst_blk_uoo,
3689 v_key,
3690 'IGS_EN_TRN_WARN_INCMPT_RULE',
3691 cst_warning|| '|US_INCMPT');
3692 p_sua_warn_count := p_sua_warn_count + 1;
3693 END IF;
3694
3695 END IF;
3696 END IF;
3697 --Validating the special permission for destination unit section
3698 IF ((v_update_uoo) AND (p_enforce_val = 'Y') ) THEN
3699 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3700 v_message_name := NULL;
3701 l_notification_flag := NULL;
3702 l_notification_flag := igs_ss_enr_details.get_notification(
3703 p_person_type => p_person_type,
3704 p_enrollment_category => p_enrolment_cat,
3705 p_comm_type => p_commencement_type,
3706 p_enr_method_type => p_enroll_meth,
3707 p_step_group_type => 'UNIT',
3708 p_step_type => 'SPL_PERM',
3709 p_person_id => p_person_id,
3710 p_message => v_message_name
3711 );
3712 IF v_message_name IS NOT NULL THEN
3713 IGS_GE_INS_SLE.genp_set_log_entry(
3714 cst_enr_blk_uo,
3715 cst_blk_uoo,
3716 v_key,
3717 v_message_name, -- person belongs to more than one person ID group.
3718 cst_error || '|PERID_GRP' );
3719 p_sua_error_count := p_sua_error_count + 1;
3720 v_update_uoo := FALSE;
3721 END IF;
3722
3723 IF l_notification_flag IS NOT NULL THEN
3724 --Checking the special permission validation.
3725 l_message:= NULL;
3726 l_dummy_bolean:=NULL;
3727 l_dummy_bolean := igs_en_elgbl_unit.eval_spl_permission(
3728 p_person_id
3729 ,p_load_cal_type
3730 ,p_load_seq_number
3731 ,p_destination_uoo_id
3732 ,p_course_cd
3733 ,p_version_number
3734 ,l_message
3735 ,l_notification_flag);
3736 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3737 IGS_GE_INS_SLE.genp_set_log_entry(
3738 cst_enr_blk_uo,
3739 cst_blk_uoo,
3740 v_key,
3741 'IGS_EN_TRN_FAIL_SPL_PERM', -- Failed to transfer.
3742 cst_error || '|SPL_PERM');
3743 p_sua_error_count := p_sua_error_count + 1;
3744 v_update_uoo := FALSE;
3745 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3746 IGS_GE_INS_SLE.genp_set_log_entry(
3747 cst_enr_blk_uo,
3748 cst_blk_uoo,
3749 v_key,
3750 'IGS_EN_TRN_WARN_SPL_PERM',
3751 cst_warning || '|SPL_PERM');
3752 p_sua_warn_count := p_sua_warn_count + 1;
3753 END IF;
3754 END IF;
3755 END IF;
3756 --Validating the Audit permission for destination unit section
3757 IF ((v_update_uoo) AND (p_enforce_val = 'Y') ) THEN
3758 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3759 v_message_name := NULL;
3760 l_notification_flag := NULL;
3761 l_notification_flag := igs_ss_enr_details.get_notification(
3762 p_person_type => p_person_type,
3763 p_enrollment_category => p_enrolment_cat,
3764 p_comm_type => p_commencement_type,
3765 p_enr_method_type => p_enroll_meth,
3766 p_step_group_type => 'UNIT',
3767 p_step_type => 'AUDIT_PERM',
3768 p_person_id => p_person_id,
3769 p_message => v_message_name
3770 );
3771 IF v_message_name IS NOT NULL THEN
3772 IGS_GE_INS_SLE.genp_set_log_entry(
3773 cst_enr_blk_uo,
3774 cst_blk_uoo,
3775 v_key,
3776 v_message_name, -- person belongs to more than one person ID group.
3777 cst_error || '|PERID_GRP' );
3778 p_sua_error_count := p_sua_error_count + 1;
3779 v_update_uoo := FALSE;
3780 END IF;
3781
3782 IF l_notification_flag IS NOT NULL THEN
3783 --Checking the special permission validation.
3784 l_message:= NULL;
3785 l_dummy_bolean:=NULL;
3786 l_dummy_bolean := igs_en_elgbl_unit.eval_audit_permission (p_person_id => p_person_id,
3787 p_load_cal_type => p_load_cal_type,
3788 p_load_sequence_number => p_load_seq_number,
3789 p_uoo_id => p_destination_uoo_id,
3790 p_course_cd => p_course_cd,
3791 p_course_version => p_version_number,
3792 p_message => l_message,
3793 p_deny_warn => l_notification_flag);
3794 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3795 IGS_GE_INS_SLE.genp_set_log_entry(
3796 cst_enr_blk_uo,
3797 cst_blk_uoo,
3798 v_key,
3799 'IGS_EN_TRN_FAIL_AU_PERM', -- Failed to transfer.
3800 cst_error || '|AU_PERM');
3801 p_sua_error_count := p_sua_error_count + 1;
3802 v_update_uoo := FALSE;
3803 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3804 IGS_GE_INS_SLE.genp_set_log_entry(
3805 cst_enr_blk_uo,
3806 cst_blk_uoo,
3807 v_key,
3808 'IGS_EN_TRN_WARN_AU_PERM',
3809 cst_warning || '|AU_PERM');
3810 p_sua_warn_count := p_sua_warn_count + 1;
3811 END IF;
3812 END IF;
3813 END IF;
3814
3815
3816 --Validating the Time conflict for destination unit section
3817 IF ((v_update_uoo) AND (p_enforce_val = 'Y') ) THEN
3818 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3819 v_message_name := NULL;
3820 l_notification_flag := NULL;
3821 l_notification_flag := igs_ss_enr_details.get_notification(
3822 p_person_type => p_person_type,
3823 p_enrollment_category => p_enrolment_cat,
3824 p_comm_type => p_commencement_type,
3825 p_enr_method_type => p_enroll_meth,
3826 p_step_group_type => 'UNIT',
3827 p_step_type => 'TIME_CNFLT',
3828 p_person_id => p_person_id,
3829 p_message => v_message_name
3830 );
3831
3832 IF v_message_name IS NOT NULL THEN
3833 IGS_GE_INS_SLE.genp_set_log_entry(
3834 cst_enr_blk_uo,
3835 cst_blk_uoo,
3836 v_key,
3837 v_message_name, -- person belongs to more than one person ID group.
3838 cst_error || '|PERID_GRP' );
3839 p_sua_error_count := p_sua_error_count + 1;
3840 v_update_uoo := FALSE;
3841 END IF;
3842
3843 IF l_notification_flag IS NOT NULL THEN
3844 --Checking the reserve seating validation.
3845 l_message:= NULL;
3846 l_dummy_bolean:=NULL;
3847 l_dummy_bolean := igs_en_elgbl_unit.eval_time_conflict(p_person_id,
3848 p_load_cal_type,
3849 p_load_seq_number,
3850 p_destination_uoo_id,
3851 p_course_cd,
3852 p_version_number,
3853 l_message,
3854 l_notification_flag,
3855 'JOB');
3856 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3857 IGS_GE_INS_SLE.genp_set_log_entry(
3858 cst_enr_blk_uo,
3859 cst_blk_uoo,
3860 v_key,
3861 'IGS_EN_TRN_FAIL_TIME_CNFLT', -- Failed to transfer.
3862 cst_error || '|TIME_CNFLT');
3863 p_sua_error_count := p_sua_error_count + 1;
3864 v_update_uoo := FALSE;
3865 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3866 IGS_GE_INS_SLE.genp_set_log_entry(
3867 cst_enr_blk_uo,
3868 cst_blk_uoo,
3869 v_key,
3870 'IGS_EN_TRN_WARN_TIME_CNFLT',
3871 cst_warning || '|TIME_CNFLT');
3872 p_sua_warn_count := p_sua_warn_count + 1;
3873 END IF;
3874
3875 END IF;
3876 END IF;
3877 --Validating the repeat unit validation for the unit attempt
3878 IF ((v_update_uoo) AND (p_enforce_val = 'Y')) THEN
3879 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3880 v_message_name := NULL;
3881 l_notification_flag := NULL;
3882 l_notification_flag := igs_ss_enr_details.get_notification(
3883 p_person_type => p_person_type,
3884 p_enrollment_category => p_enrolment_cat,
3885 p_comm_type => p_commencement_type,
3886 p_enr_method_type => p_enroll_meth,
3887 p_step_group_type => 'UNIT',
3888 p_step_type => 'UNIT_RPT',
3889 p_person_id => p_person_id,
3890 p_message => v_message_name
3891 );
3892
3893 IF v_message_name IS NOT NULL THEN
3894 IGS_GE_INS_SLE.genp_set_log_entry(
3895 cst_enr_blk_uo,
3896 cst_blk_uoo,
3897 v_key,
3898 v_message_name, -- person belongs to more than one person ID group.
3899 cst_error || '|PERID_GRP' );
3900 p_sua_error_count := p_sua_error_count + 1;
3901 v_update_uoo := FALSE;
3902 END IF;
3903
3904 IF l_notification_flag IS NOT NULL THEN
3905 l_message:= NULL;
3906 l_dummy_bolean:=NULL;
3907 l_dummy_bolean := igs_en_elgbl_unit.eval_unit_repeat( p_person_id => p_person_id,
3908 p_load_cal_type => p_load_cal_type,
3909 p_load_cal_seq_number => p_load_seq_number,
3910 p_uoo_id => p_destination_uoo_id,
3911 p_program_cd => p_course_cd,
3912 p_program_version => p_version_number,
3913 p_message => l_message,
3914 p_deny_warn => l_notification_flag,
3915 p_repeat_tag => l_repeat_flag,
3916 p_unit_cd => NULL,
3917 p_unit_version => NULL,
3918 p_calling_obj => 'JOB');
3919
3920 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3921 IGS_GE_INS_SLE.genp_set_log_entry(
3922 cst_enr_blk_uo,
3923 cst_blk_uoo,
3924 v_key,
3925 'IGS_EN_TRN_FAIL_REPEAT', -- Failed to transfer.
3926 cst_error || '|UNIT_RPT');
3927 p_sua_error_count := p_sua_error_count + 1;
3928 v_update_uoo := FALSE;
3929 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3930 IGS_GE_INS_SLE.genp_set_log_entry(
3931 cst_enr_blk_uo,
3932 cst_blk_uoo,
3933 v_key,
3934 'IGS_EN_TRN_WARN_REPEAT',
3935 cst_warning || '|UNIT_REP');
3936 p_sua_warn_count := p_sua_warn_count + 1;
3937 END IF;
3938 END IF;
3939 END IF;
3940 --Validating the MAX CP validation for the Program Attempt
3941 IF ((v_update_uoo) AND (p_enforce_val = 'Y') AND p_unit_attempt_status NOT IN (cst_unconfirm,cst_waitlisted)) THEN
3942 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
3943 v_message_name := NULL;
3944 l_notification_flag := NULL;
3945 l_notification_flag := igs_ss_enr_details.get_notification(
3946 p_person_type => p_person_type,
3947 p_enrollment_category => p_enrolment_cat,
3948 p_comm_type => p_commencement_type,
3949 p_enr_method_type => p_enroll_meth,
3950 p_step_group_type => 'PROGRAM',
3951 p_step_type => 'FMAX_CRDT',
3952 p_person_id => p_person_id,
3953 p_message => v_message_name
3954 );
3955 IF v_message_name IS NOT NULL THEN
3956 IGS_GE_INS_SLE.genp_set_log_entry(
3957 cst_enr_blk_uo,
3958 cst_blk_uoo,
3959 v_key,
3960 v_message_name, -- person belongs to more than one person ID group.
3961 cst_error || '|PERID_GRP' );
3962 p_sua_error_count := p_sua_error_count + 1;
3963 v_update_uoo := FALSE;
3964 END IF;
3965
3966 IF l_notification_flag IS NOT NULL THEN
3967 l_message:= NULL;
3968 l_dummy_bolean:=NULL;
3969 l_dummy_bolean := igs_en_elgbl_program.eval_max_cp( p_person_id => p_person_id,
3970 p_load_calendar_type => p_load_cal_type,
3971 p_load_cal_sequence_number => p_load_seq_number,
3972 p_uoo_id => p_destination_uoo_id,
3973 p_program_cd => p_course_cd,
3974 p_program_version => p_version_number,
3975 p_message => l_message,
3976 p_deny_warn => l_notification_flag,
3977 p_upd_cp => l_dest_enrolled_cp-l_source_enrolled_cp,
3978 p_calling_obj => 'JOB');
3979 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
3980 IGS_GE_INS_SLE.genp_set_log_entry(
3981 cst_enr_blk_uo,
3982 cst_blk_uoo,
3983 v_key,
3984 'IGS_EN_TRN_FAIL_MAX_CP', -- Failed to transfer.
3985 cst_error || '|PRG_MAXCP');
3986 p_sua_error_count := p_sua_error_count + 1;
3987 v_update_uoo := FALSE;
3988 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
3989 IGS_GE_INS_SLE.genp_set_log_entry(
3990 cst_enr_blk_uo,
3991 cst_blk_uoo,
3992 v_key,
3993 'IGS_EN_TRN_WARN_MAX_CP',
3994 cst_warning || '|PRG_MAXCP');
3995 p_sua_warn_count := p_sua_warn_count + 1;
3996 END IF;
3997 END IF;
3998 END IF;
3999
4000 IF ((p_unit_attempt_status <> cst_unconfirm) AND
4001 (p_enforce_val = 'Y')) THEN
4002 -- Validate that the student is able to enrol in the IGS_PS_UNIT.
4003 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_cnfrm(
4004 p_person_id,
4005 p_course_cd,
4006 p_from_unit_cd,
4007 p_to_uv_version_number,
4008 p_teach_cal_type,
4009 p_teach_ci_sequence_number,
4010 p_teach_end_dt,
4011 p_to_location_cd,
4012 p_to_unit_class,
4013 p_enrolled_dt,
4014 v_fail_type,
4015 v_message_name) THEN
4016 -- Check if the error encountered is not associated with a duplicate
4017 -- existing (The duplicate would be the original IGS_PS_UNIT offering option.).
4018 IF v_fail_type <> cst_duplicate THEN
4019 IF UPPER(v_fail_type) IN (
4020 'COURSE',
4021 'ENCUMB',
4022 'ADVSTAND',
4023 'ENROLDT',
4024 'TEACHING') THEN
4025 v_text := cst_error || '|' || v_fail_type;
4026 p_sua_error_count := p_sua_error_count + 1;
4027 ELSE
4028 v_text := cst_warning || '|' || v_fail_type;
4029 p_sua_warn_count := p_sua_warn_count + 1;
4030 END IF;
4031 -- Log the problem.
4032 IGS_GE_INS_SLE.genp_set_log_entry(
4033 cst_enr_blk_uo,
4034 cst_blk_uoo,
4035 v_key,
4036 v_message_name,
4037 v_text);
4038 IF UPPER(v_fail_type) IN (
4039 'COURSE',
4040 'ENCUMB',
4041 'ADVSTAND',
4042 'ENROLDT',
4043 'TEACHING') THEN
4044 IGS_GE_INS_SLE.genp_set_log_entry(
4045 cst_enr_blk_uo,
4046 cst_blk_uoo,
4047 v_key,
4048 'IGS_EN_STUD_NOTTRNS_UOO', -- Failed to transfer.
4049 cst_information || '|' || v_fail_type);
4050 v_update_uoo := FALSE;
4051 END IF;
4052 END IF;
4053 ELSE -- IGS_EN_VAL_SUA.enrp_val_sua_cnfrm
4054 -- Check if warnings exist and log warnings.
4055 IF v_message_name is not null THEN
4056
4057 IGS_GE_INS_SLE.genp_set_log_entry(
4058 cst_enr_blk_uo,
4059 cst_blk_uoo,
4060 v_key,
4061 v_message_name,
4062 'WARNING|' || v_fail_type);
4063 p_sua_warn_count := p_sua_warn_count + 1;
4064 END IF;
4065 END IF;
4066 END IF;
4067 --IF source uoo is a superior then drop all subordinates
4068 IF v_update_uoo AND l_source_uoo_rel='SUPERIOR' THEN
4069 l_msg_name:=NULL;
4070 igs_en_val_sua.drop_sub_units(
4071 p_person_id => p_person_id ,
4072 p_course_cd => p_course_cd ,
4073 p_uoo_id => p_from_uoo_id ,
4074 p_load_cal_type => p_load_cal_type ,
4075 p_load_seq_num => p_load_seq_number ,
4076 p_acad_cal_type => p_acad_cal_type ,
4077 p_acad_seq_num => p_acad_seq_number ,
4078 p_enrollment_method=> p_enroll_meth ,
4079 p_confirmed_ind => 'N' ,
4080 p_person_type => p_person_type,
4081 p_effective_date => SYSDATE ,
4082 p_course_ver_num => p_version_number,
4083 p_dcnt_reason_cd => NULL ,
4084 p_admin_unit_status=> NULL ,
4085 p_uoo_ids => l_uoo_ids_list ,
4086 p_error_message => l_msg_name);
4087 IF l_msg_name IS NOT NULL THEN
4088 --Log error and indicate that not all subordinates were dropped. Abort transfer
4089 ROLLBACK TO sp_sua_blk_trn;
4090 IGS_GE_INS_SLE.genp_set_log_entry(
4091 cst_enr_blk_uo,
4092 cst_blk_uoo,
4093 v_key,
4094 'IGS_EN_BLK_SUB_DROP_FAILED',
4095 cst_error || '|DROPSUB');
4096 p_sua_error_count := p_sua_error_count + 1;
4097 v_update_uoo := FALSE;
4098 END IF;
4099 END IF;
4100
4101 IF v_update_uoo THEN
4102
4103 -- Calculate the Total Enrolled Credit Points before Transferring the Unit from one Unit section to another .
4104 l_eftsu_total := igs_en_prc_load.enrp_clc_eftsu_total(
4105 p_person_id => p_person_id,
4106 p_course_cd => p_course_cd ,
4107 p_acad_cal_type => p_acad_cal_type,
4108 p_acad_sequence_number => p_acad_seq_number,
4109 p_load_cal_type => p_load_cal_type,
4110 p_load_sequence_number => p_load_seq_number,
4111 p_truncate_ind => 'N',
4112 p_include_research_ind => 'Y' ,
4113 p_key_course_cd => NULL ,
4114 p_key_version_number => NULL ,
4115 p_credit_points => l_total_credit_points );
4116
4117 OPEN cur_coo_id( ---*
4118 p_person_id,
4119 p_course_cd,
4120 p_load_cal_type,
4121 p_load_seq_number);
4122 FETCH cur_coo_id INTO l_cur_coo_id;
4123 CLOSE cur_coo_id;
4124
4125 -- Check if the Forced Attendance Type has already been reached for the Student before transferring .
4126 --Modfied as a part of bug#5191592.
4127 l_attendance_type_reach := igs_en_val_sca.enrp_val_coo_att(p_person_id => p_person_id,
4128 p_coo_id => l_cur_coo_id.coo_id,
4129 p_cal_type => p_acad_cal_type,
4130 p_ci_sequence_number => p_acad_seq_number,
4131 p_message_name => v_message_name ,
4132 p_attendance_types => l_attendance_types,
4133 p_load_or_teach_cal_type => p_load_cal_type,
4134 p_load_or_teach_seq_number => p_load_seq_number);
4135
4136 -- Assign values to the parameter p_deny_warn_att based on if Attendance Type has not been already reached or not.
4137 IF l_attendance_type_reach THEN
4138 p_deny_warn_att := 'AttTypReached' ;
4139 ELSE
4140 p_deny_warn_att := 'AttTypNotReached' ;
4141 END IF ;
4142
4143 -- Update the record.
4144 FOR v_sua_upd_exists IN c_sua_upd LOOP
4145 -- Call the API to update the student unit attempt. This API is a
4146 -- wrapper to the update row of the TBH.
4147 BEGIN
4148
4149 enrp_store_suar(p_person_id,
4150 p_course_cd,
4151 p_from_uoo_id);
4152 igs_en_sua_api.update_unit_attempt(
4153 X_ROWID => v_sua_upd_exists.rowid,
4154 X_PERSON_ID => v_sua_upd_exists.PERSON_ID,
4155 X_COURSE_CD => v_sua_upd_exists.COURSE_CD ,
4156 X_UNIT_CD => v_sua_upd_exists.UNIT_CD,
4157 X_CAL_TYPE => v_sua_upd_exists.CAL_TYPE,
4158 X_CI_SEQUENCE_NUMBER => v_sua_upd_exists.CI_SEQUENCE_NUMBER ,
4159 X_VERSION_NUMBER => v_sua_upd_exists.version_number ,
4160 X_LOCATION_CD => v_sua_upd_exists.location_cd,
4161 X_UNIT_CLASS => v_sua_upd_exists.unit_class,
4162 X_CI_START_DT => v_sua_upd_exists.CI_START_DT,
4163 X_CI_END_DT => v_sua_upd_exists.CI_END_DT,
4164 X_UOO_ID => v_sua_upd_exists.uoo_id,
4165 X_ENROLLED_DT => v_sua_upd_exists.ENROLLED_DT,
4166 X_UNIT_ATTEMPT_STATUS => 'DROPPED',
4167 X_ADMINISTRATIVE_UNIT_STATUS => v_sua_upd_exists.administrative_unit_status,
4168 X_ADMINISTRATIVE_PRIORITY => v_sua_upd_exists.administrative_priority,
4169 X_DISCONTINUED_DT => nvl(v_sua_upd_exists.discontinued_dt,trunc(SYSDATE)),
4170 X_DCNT_REASON_CD => v_sua_upd_exists.DCNT_REASON_CD ,
4171 X_RULE_WAIVED_DT => v_sua_upd_exists.RULE_WAIVED_DT ,
4172 X_RULE_WAIVED_PERSON_ID => v_sua_upd_exists.RULE_WAIVED_PERSON_ID ,
4173 X_NO_ASSESSMENT_IND => v_sua_upd_exists.NO_ASSESSMENT_IND,
4174 X_SUP_UNIT_CD => v_sua_upd_exists.SUP_UNIT_CD ,
4175 X_SUP_VERSION_NUMBER => v_sua_upd_exists.SUP_VERSION_NUMBER,
4176 X_EXAM_LOCATION_CD => v_sua_upd_exists.EXAM_LOCATION_CD,
4177 X_ALTERNATIVE_TITLE => v_sua_upd_exists.ALTERNATIVE_TITLE ,
4178 X_OVERRIDE_ENROLLED_CP => v_sua_upd_exists.OVERRIDE_ENROLLED_CP,
4179 X_OVERRIDE_EFTSU => v_sua_upd_exists.OVERRIDE_EFTSU ,
4180 X_OVERRIDE_ACHIEVABLE_CP => v_sua_upd_exists.OVERRIDE_ACHIEVABLE_CP,
4181 X_OVERRIDE_OUTCOME_DUE_DT => v_sua_upd_exists.OVERRIDE_OUTCOME_DUE_DT,
4182 X_OVERRIDE_CREDIT_REASON => v_sua_upd_exists.OVERRIDE_CREDIT_REASON,
4183 X_WAITLIST_DT => v_sua_upd_exists.waitlist_dt,
4184 X_MODE => 'R' ,
4185 --bug#1832130 enrollment processes dld added following columns smaddali
4186 X_GS_VERSION_NUMBER => v_sua_upd_exists.gs_version_number,
4187 --Updating the enrollment method type
4188 X_ENR_METHOD_TYPE => v_sua_upd_exists.enr_method_type,
4189 X_FAILED_UNIT_RULE => v_sua_upd_exists.failed_unit_rule ,
4190 X_CART => v_sua_upd_exists.cart ,
4191 X_RSV_SEAT_EXT_ID => v_sua_upd_exists.rsv_seat_ext_id,
4192 X_ORG_UNIT_CD => v_sua_upd_exists.org_unit_cd,
4193 --session_id added by Nishikant 28JAN2002 - Enh Bug#2172380.
4194 X_SESSION_ID => v_sua_upd_exists.session_id,
4195 -- aiyer Added the column grading_schema_code as a part of the bug 2037897
4196 X_GRADING_SCHEMA_CODE => v_sua_upd_exists.grading_schema_code,
4197 X_DEG_AUD_DETAIL_ID => v_sua_upd_exists.deg_aud_detail_id,
4198 X_SUBTITLE => v_sua_upd_exists.subtitle,
4199 X_STUDENT_CAREER_TRANSCRIPT =>v_sua_upd_exists.student_career_transcript ,
4200 X_STUDENT_CAREER_STATISTICS => v_sua_upd_exists.student_career_statistics,
4201 X_ATTRIBUTE_CATEGORY => v_sua_upd_exists.attribute_category,
4202 X_ATTRIBUTE1 => v_sua_upd_exists.attribute1,
4203 X_ATTRIBUTE2 => v_sua_upd_exists.attribute2,
4204 X_ATTRIBUTE3 => v_sua_upd_exists.attribute3,
4205 X_ATTRIBUTE4 => v_sua_upd_exists.attribute4,
4206 X_ATTRIBUTE5 => v_sua_upd_exists.attribute5,
4207 X_ATTRIBUTE6 => v_sua_upd_exists.attribute6,
4208 X_ATTRIBUTE7 => v_sua_upd_exists.attribute7,
4209 X_ATTRIBUTE8 => v_sua_upd_exists.attribute8,
4210 X_ATTRIBUTE9 => v_sua_upd_exists.attribute9,
4211 X_ATTRIBUTE10 => v_sua_upd_exists.attribute10,
4212 X_ATTRIBUTE11 => v_sua_upd_exists.attribute11,
4213 X_ATTRIBUTE12 => v_sua_upd_exists.attribute12,
4214 X_ATTRIBUTE13 => v_sua_upd_exists.attribute13,
4215 X_ATTRIBUTE14 => v_sua_upd_exists.attribute14,
4216
4217 X_ATTRIBUTE15 => v_sua_upd_exists.attribute15,
4218 X_ATTRIBUTE16 => v_sua_upd_exists.attribute16,
4219 X_ATTRIBUTE17 => v_sua_upd_exists.attribute17,
4220 X_ATTRIBUTE18 => v_sua_upd_exists.attribute18,
4221 X_ATTRIBUTE19 => v_sua_upd_exists.attribute19,
4222 X_ATTRIBUTE20 => v_sua_upd_exists.attribute20,
4223 X_WAITLIST_MANUAL_IND => v_sua_upd_exists.waitlist_manual_ind ,--Added by mesriniv for Bug 2554109.
4224 X_WLST_PRIORITY_WEIGHT_NUM => NULL,
4225 X_WLST_PREFERENCE_WEIGHT_NUM => NULL,
4226 X_CORE_INDICATOR_CODE => v_sua_upd_exists.core_indicator_code
4227 );
4228
4229
4230 --If destination unit attempt status is waitlisted then updating the unit attempt status is waitlisted.
4231 IF l_waitlist_ind = 'Y' THEN
4232 v_sua_upd_exists.waitlist_dt := NVL(v_sua_upd_exists.waitlist_dt,NVL(TRUNC(v_sua_upd_exists.enrolled_dt),SYSDATE));
4233 v_sua_upd_exists.UNIT_ATTEMPT_STATUS :='WAITLISTED';
4234 v_sua_upd_exists.ENROLLED_DT := NULL;
4235 igs_en_wlst_gen_proc.enrp_wlst_pri_pref_calc (p_person_id => v_sua_upd_exists.person_id,
4236 p_program_cd =>p_course_cd,
4237 p_uoo_id =>p_destination_uoo_id,
4238 p_priority_weight =>l_pri_weight,
4239 p_preference_weight=>l_pref_weight);
4240
4241 IF l_pri_weight IS NULL AND l_pref_weight IS NULL THEN
4242 OPEN c_lock_dest_usec(p_destination_uoo_id);
4243 CLOSE c_lock_dest_usec;
4244 OPEN c_admin_pri(p_destination_uoo_id,v_sua_upd_exists.waitlist_dt);
4245 FETCH c_admin_pri INTO v_sua_upd_exists.administrative_priority;
4246 CLOSE c_admin_pri;
4247 v_sua_upd_exists.wlst_priority_weight_num:=NULL;
4248 v_sua_upd_exists.wlst_preference_weight_num:=NULL;
4249 ELSE
4250 v_sua_upd_exists.wlst_priority_weight_num := l_pri_weight;
4251 v_sua_upd_exists.wlst_preference_weight_num := l_pref_weight;
4252 -- assigning NULL as the position has to be re-calculated, which is done in TBH
4253 v_sua_upd_exists.administrative_priority:=NULL;
4254 END IF;
4255 -- Set the waitlist flag to indicating student attempted in with waitlist
4256 p_waitlist_flag := 'Y';
4257 ELSIF l_waitlist_ind='N' AND v_sua_upd_exists.UNIT_ATTEMPT_STATUS='WAITLISTED' THEN
4258 v_sua_upd_exists.ENROLLED_DT:=v_sua_upd_exists.waitlist_dt;
4259 p_waitlist_flag := 'N';
4260 v_sua_upd_exists.administrative_priority:=NULL;
4261 v_sua_upd_exists.waitlist_dt:=NULL;
4262 v_sua_upd_exists.wlst_priority_weight_num:=NULL;
4263 v_sua_upd_exists.wlst_preference_weight_num:=NULL;
4264 ELSE
4265 -- Set the waitlist flag to indicating student attempted in with 'ENROLLED'
4266 p_waitlist_flag := 'N';
4267 v_sua_upd_exists.administrative_priority:=NULL;
4268 END IF;
4269 igs_en_sua_api.create_unit_attempt(
4270 x_rowid => l_rowid,
4271 x_person_id => v_sua_upd_exists.person_id,
4272 x_course_cd => v_sua_upd_exists.course_cd,
4273 x_ci_start_dt => v_sua_upd_exists.ci_start_dt,
4274 x_ci_end_dt => v_sua_upd_exists.ci_end_dt,
4275 x_uoo_id => p_destination_uoo_id,
4276 x_unit_attempt_status => v_sua_upd_exists.unit_attempt_status ,
4277 x_unit_cd => v_sua_upd_exists.unit_cd,
4278 x_version_number => p_to_uv_version_number,
4279 x_cal_type => v_sua_upd_exists.cal_type,
4280 x_ci_sequence_number => v_sua_upd_exists.ci_sequence_number,
4281 x_location_cd => p_to_location_cd,
4282 x_unit_class => p_to_unit_class,
4283 x_enrolled_dt => v_sua_upd_exists.enrolled_dt,
4284 x_administrative_unit_status => v_sua_upd_exists.administrative_unit_status,
4285 x_administrative_priority => v_sua_upd_exists.administrative_priority,
4286 x_discontinued_dt => v_sua_upd_exists.discontinued_dt,
4287 x_dcnt_reason_cd => v_sua_upd_exists.dcnt_reason_cd,
4288 x_rule_waived_dt => v_sua_upd_exists.rule_waived_dt,
4289 x_rule_waived_person_id => v_sua_upd_exists.rule_waived_person_id,
4290 x_no_assessment_ind => v_sua_upd_exists.no_assessment_ind,
4291 x_sup_unit_cd => v_sua_upd_exists.sup_unit_cd,
4292 x_sup_version_number => v_sua_upd_exists.sup_version_number,
4293 x_exam_location_cd => v_sua_upd_exists.exam_location_cd,
4294 x_alternative_title => v_sua_upd_exists.alternative_title ,
4295 x_override_enrolled_cp => v_sua_upd_exists.override_enrolled_cp,
4296 x_override_eftsu => v_sua_upd_exists.override_eftsu,
4297 x_override_achievable_cp => v_sua_upd_exists.override_achievable_cp,
4298 x_override_outcome_due_dt => v_sua_upd_exists.override_outcome_due_dt ,
4299 x_override_credit_reason => v_sua_upd_exists.override_credit_reason,
4300 x_waitlist_dt => v_sua_upd_exists.waitlist_dt ,
4301 x_enr_method_type => NVL(p_enroll_meth,v_sua_upd_exists.enr_method_type),
4302 x_mode => 'R',
4303 x_org_id => v_sua_upd_exists.org_id,
4304 x_org_unit_cd => v_sua_upd_exists.org_unit_cd,
4305 x_grading_schema_code => v_sua_upd_exists.grading_schema_code,
4306 x_gs_version_number => v_sua_upd_exists.gs_version_number,
4307 x_session_id => v_sua_upd_exists.session_id,
4308 x_deg_aud_detail_id => v_sua_upd_exists.deg_aud_detail_id ,
4309 x_student_career_transcript => v_sua_upd_exists.student_career_transcript ,
4310 x_student_career_statistics => v_sua_upd_exists.student_career_statistics,
4311 x_attribute_category => v_sua_upd_exists.attribute_category,
4312 x_attribute1 => v_sua_upd_exists.attribute1,
4313 x_attribute2 => v_sua_upd_exists.attribute2,
4314 x_attribute3 => v_sua_upd_exists.attribute3,
4315 x_attribute4 => v_sua_upd_exists.attribute4,
4316 x_attribute5 => v_sua_upd_exists.attribute5,
4317 x_attribute6 => v_sua_upd_exists.attribute6,
4318 x_attribute7 => v_sua_upd_exists.attribute7,
4319 x_attribute8 => v_sua_upd_exists.attribute8,
4320 x_attribute9 => v_sua_upd_exists.attribute9,
4321 x_attribute10 => v_sua_upd_exists.attribute10,
4322 x_attribute11 => v_sua_upd_exists.attribute11,
4323 x_attribute12 => v_sua_upd_exists.attribute12,
4324 x_attribute13 => v_sua_upd_exists.attribute13,
4325 x_attribute14 => v_sua_upd_exists.attribute14,
4326 x_attribute15 => v_sua_upd_exists.attribute15,
4327 x_attribute16 => v_sua_upd_exists.attribute16,
4328 x_attribute17 => v_sua_upd_exists.attribute17,
4329 x_attribute18 => v_sua_upd_exists.attribute18,
4330 x_attribute19 => v_sua_upd_exists.attribute19,
4331 x_attribute20 => v_sua_upd_exists.attribute20,
4332 x_waitlist_manual_ind => v_sua_upd_exists.waitlist_manual_ind ,
4333 x_wlst_priority_weight_num => v_sua_upd_exists.wlst_priority_weight_num,
4334 x_wlst_preference_weight_num => v_sua_upd_exists.wlst_preference_weight_num,
4335 x_core_indicator_code => v_sua_upd_exists.core_indicator_code);
4336
4337 IF l_waitlist_ind='Y' AND l_pri_weight IS NULL AND l_pref_weight IS NULL THEN
4338 igs_en_wlst_gen_proc.enrp_wlst_dt_reseq (p_person_id => v_sua_upd_exists.person_id,
4339 p_program_cd => v_sua_upd_exists.course_cd,
4340 p_uoo_id => p_destination_uoo_id,
4341 p_cur_position=> v_sua_upd_exists.administrative_priority);
4342 END IF;
4343 EXCEPTION
4344 WHEN OTHERS THEN
4345 v_update_uoo := FALSE;
4346 ROLLBACK TO sp_sua_blk_trn;
4347 -- Get the message raised and log the same
4348 l_encoded_msg := fnd_message.get_encoded;
4349 fnd_message.parse_encoded(l_encoded_msg,l_app_sht_name,l_msg_name);
4350 IGS_GE_INS_SLE.genp_set_log_entry(
4351 cst_enr_blk_uo,
4352 cst_blk_uoo,
4353 v_key,
4354 l_msg_name,
4355 cst_error || '|UNH_EXP' );
4356 p_sua_error_count := p_sua_error_count + 1;
4357 END;
4358 l_unit_attempt_status:=v_sua_upd_exists.unit_attempt_status;
4359 END LOOP;
4360 END IF;
4361
4362 --code to handle transfer of child items
4363 BEGIN
4364 SAVEPOINT s_enr_trn_pt;
4365 IF v_update_uoo AND l_unit_attempt_status
4366 NOT IN ('UNCONFIRM','DUPLICATE') THEN
4367 enrp_copy_suar(p_destination_uoo_id);
4368 END IF;
4369
4370 IF v_update_uoo AND
4371 l_unit_attempt_status in ('ENROLLED','WAITLISTED', 'DISCONTIN','COMPLETED') THEN
4372
4373 --copy assessment items from source to destination
4374 igs_en_gen_010.enrp_ins_suai_trnsfr(
4375 p_person_id => p_person_id,
4376 p_source_course_cd => p_course_cd,
4377 p_dest_course_cd => p_course_cd,
4378 p_source_uoo_id => p_from_uoo_id,
4379 p_dest_uoo_id => p_destination_uoo_id,
4380 p_delete_source => TRUE);
4381
4382 --copy assessment outcomes from source to destination
4383 igs_en_gen_010.enrp_ins_suao_trnsfr (
4384 p_person_id => p_person_id,
4385 p_source_course_cd => p_course_cd,
4386 p_dest_course_cd => p_course_cd,
4387 p_source_uoo_id => p_from_uoo_id,
4388 p_dest_uoo_id => p_destination_uoo_id,
4389 p_delete_source => TRUE);
4390
4391 --copy placement information from source to destination
4392 igs_en_gen_010.enrp_ins_splace_trnsfr (
4393 p_person_id => p_person_id,
4394 p_source_course_cd => p_course_cd,
4395 p_dest_course_cd => p_course_cd,
4396 p_source_uoo_id => p_from_uoo_id,
4397 p_dest_uoo_id => p_destination_uoo_id);
4398
4399 END IF;
4400
4401 EXCEPTION
4402 WHEN OTHERS THEN
4403 ROLLBACK TO s_enr_trn_pt;
4404 IGS_GE_INS_SLE.genp_set_log_entry(
4405 cst_enr_blk_uo,
4406 cst_blk_uoo,
4407 v_key,
4408 'IGS_EN_TRN_FAIL_CHILDS', -- Failed to transfer child records.
4409 cst_error || '|COURSE');
4410 p_sua_error_count := p_sua_error_count + 1;
4411 v_update_uoo := FALSE;
4412 END;
4413
4414
4415 --Attempt to enroll the subordinate unit sections if applicable.
4416 --Also confirm the subordinates if the superior is ENROLLED
4417 IF (v_update_uoo) AND l_dest_uoo_rel='SUPERIOR' THEN
4418 l_sub_success:=NULL;l_sub_waitlist:=NULL;l_sub_failed:=NULL;
4419 SAVEPOINT s_enr_sub_units;
4420 igs_en_val_sua.enr_sub_units(
4421 p_person_id => p_person_id,
4422 p_course_cd => p_course_cd,
4423 p_uoo_id => p_destination_uoo_id,
4424 p_waitlist_flag => l_waitlist_ind,
4425 p_load_cal_type => p_load_cal_type,
4426 p_load_seq_num => p_load_seq_number,
4427 p_enrollment_date => SYSDATE,
4428 p_enrollment_method => p_enroll_meth,
4429 p_enr_uoo_ids => NULL,
4430 p_uoo_ids => l_sub_success,
4431 p_waitlist_uoo_ids => l_sub_waitlist,
4432 p_failed_uoo_ids => l_sub_failed);
4433 IF l_sub_success IS NOT NULL AND l_unit_attempt_status ='ENROLLED' THEN
4434 BEGIN
4435 igs_ss_en_wrappers.validate_enroll_validate(p_person_id =>p_person_id,
4436 p_load_cal_type =>p_load_cal_type,
4437 p_load_ci_sequence_number =>p_load_seq_number,
4438 p_uoo_ids =>l_sub_success,
4439 p_program_cd =>p_course_cd,
4440 p_message_name =>l_message_name,
4441 p_deny_warn =>l_deny_warn,
4442 p_return_status =>l_ret_stat,
4443 p_enr_method =>p_enroll_meth,
4444 p_enrolled_dt =>NVL(p_enrolled_dt,SYSDATE));
4445 EXCEPTION WHEN OTHERS THEN
4446 l_deny_warn := 'DENY';
4447 l_ret_stat := 'FALSE';
4448 END;
4449
4450 IF l_ret_stat = 'FALSE' AND l_deny_warn ='DENY' THEN
4451 --IF the units could not be confirmed then Rollback the changes and inlcude the success list in the failure list
4452 ROLLBACK TO s_enr_sub_units;
4453 IF l_sub_failed IS NULL THEN
4454 l_sub_failed:=l_sub_success;
4455 ELSE
4456 l_sub_failed:=l_sub_failed||','||l_sub_success;
4457 END IF;
4458 l_sub_success:=NULL;
4459 END IF;
4460 END IF;
4461
4462
4463 l_unit_attempt_status:=NULL;
4464 IF l_sub_success IS NOT NULL THEN
4465 fnd_message.set_name('IGS','IGS_EN_BLK_SUB_SUCCESS');
4466 fnd_message.set_token('UNIT_CD',igs_en_gen_018.enrp_get_unitcds(l_sub_success));
4467 IGS_GE_INS_SLE.genp_set_log_entry(
4468 cst_enr_blk_uo,
4469 cst_blk_uoo,
4470 v_key,
4471 'IGS_EN_BLK_SUB_SUCCESS', -- Subordinates enrolled successfully.
4472 cst_information || '|'||fnd_message.get);
4473
4474 END IF;
4475 IF l_sub_waitlist IS NOT NULL THEN
4476 fnd_message.set_name('IGS','IGS_EN_BLK_SUB_WLST');
4477 fnd_message.set_token('UNIT_CD',igs_en_gen_018.enrp_get_unitcds(l_sub_waitlist));
4478 IGS_GE_INS_SLE.genp_set_log_entry(
4479 cst_enr_blk_uo,
4480 cst_blk_uoo,
4481 v_key,
4482 'IGS_EN_BLK_SUB_WLST', -- Subordinates enrolled successfully.
4483 cst_information || '|'||fnd_message.get);
4484 END IF;
4485
4486 IF l_sub_failed IS NOT NULL THEN
4487 fnd_message.set_name('IGS','IGS_EN_BLK_SUB_FAILED');
4488 fnd_message.set_token('UNIT_CD',igs_en_gen_018.enrp_get_unitcds(l_sub_failed));
4489 IGS_GE_INS_SLE.genp_set_log_entry(
4490 cst_enr_blk_uo,
4491 cst_blk_uoo,
4492 v_key,
4493 'IGS_EN_BLK_SUB_FAILED', -- Subordinates enroll failed.
4494 cst_information || '|'||fnd_message.get);
4495 END IF;
4496 END IF; --If superior
4497
4498 --Validating the reenrollment unit validation for the unit attempt
4499 IF ((v_update_uoo) AND (p_enforce_val = 'Y')) THEN
4500 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
4501 v_message_name := NULL;
4502 l_notification_flag := NULL;
4503 l_notification_flag := igs_ss_enr_details.get_notification(
4504 p_person_type => p_person_type,
4505 p_enrollment_category => p_enrolment_cat,
4506 p_comm_type => p_commencement_type,
4507 p_enr_method_type => p_enroll_meth,
4508 p_step_group_type => 'UNIT',
4509 p_step_type => 'REENROLL',
4510 p_person_id => p_person_id,
4511 p_message => v_message_name
4512 );
4513
4514 IF v_message_name IS NOT NULL THEN
4515 IGS_GE_INS_SLE.genp_set_log_entry(
4516 cst_enr_blk_uo,
4517 cst_blk_uoo,
4518 v_key,
4519 v_message_name, -- person belongs to more than one person ID group.
4520 cst_error || '|PERID_GRP' );
4521 p_sua_error_count := p_sua_error_count + 1;
4522 v_update_uoo := FALSE;
4523 END IF;
4524
4525 IF l_notification_flag IS NOT NULL THEN
4526 l_message:= NULL;
4527 l_dummy_bolean:=NULL;
4528 l_dummy_bolean := igs_en_elgbl_unit.eval_unit_reenroll( p_person_id => p_person_id,
4529 p_load_cal_type => p_load_cal_type,
4530 p_load_cal_seq_number => p_load_seq_number,
4531 p_uoo_id => p_destination_uoo_id,
4532 p_program_cd => p_course_cd,
4533 p_program_version => p_version_number,
4534 p_message => l_message,
4535 p_deny_warn => l_notification_flag,
4536 p_upd_cp => NULL,
4537 p_calling_obj => 'JOB');
4538 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4539 IGS_GE_INS_SLE.genp_set_log_entry(
4540 cst_enr_blk_uo,
4541 cst_blk_uoo,
4542 v_key,
4543 'IGS_EN_TRN_FAIL_REENROLL', -- Failed to transfer.
4544 cst_error || '|UNIT_REENR');
4545 p_sua_error_count := p_sua_error_count + 1;
4546 v_update_uoo := FALSE;
4547 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4548 IGS_GE_INS_SLE.genp_set_log_entry(
4549 cst_enr_blk_uo,
4550 cst_blk_uoo,
4551 v_key,
4552 'IGS_EN_TRN_WARN_REENROLL',
4553 cst_warning || '|UNIT_REENR');
4554 p_sua_warn_count := p_sua_warn_count + 1;
4555 END IF;
4556 END IF;
4557 END IF;
4558 --Validating the MIN CP validation for the Program Attempt
4559 IF ((v_update_uoo) AND (p_enforce_val = 'Y') AND p_unit_attempt_status NOT IN (cst_unconfirm,cst_waitlisted)) THEN
4560 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
4561 v_message_name := NULL;
4562 l_notification_flag := NULL;
4563 l_notification_flag := igs_ss_enr_details.get_notification(
4564 p_person_type => p_person_type,
4565 p_enrollment_category => p_enrolment_cat,
4566 p_comm_type => p_commencement_type,
4567 p_enr_method_type => p_enroll_meth,
4568 p_step_group_type => 'PROGRAM',
4569 p_step_type => 'FMIN_CRDT',
4570 p_person_id => p_person_id,
4571 p_message => v_message_name
4572 );
4573
4574 IF v_message_name IS NOT NULL THEN
4575 IGS_GE_INS_SLE.genp_set_log_entry(
4576 cst_enr_blk_uo,
4577 cst_blk_uoo,
4578 v_key,
4579 v_message_name, -- person belongs to more than one person ID group.
4580 cst_error || '|PERID_GRP' );
4581 p_sua_error_count := p_sua_error_count + 1;
4582 v_update_uoo := FALSE;
4583 END IF;
4584 IF l_notification_flag IS NOT NULL THEN
4585 l_message:= NULL;
4586 l_dummy_bolean:=NULL;
4587 l_dummy_bolean := igs_en_elgbl_program.eval_min_cp( p_person_id => p_person_id,
4588 p_load_calendar_type => p_load_cal_type,
4589 p_load_cal_sequence_number => p_load_seq_number,
4590 p_uoo_id => p_destination_uoo_id,
4591 p_program_cd => p_course_cd,
4592 p_program_version => p_version_number,
4593 p_message => l_message,
4594 p_deny_warn => l_notification_flag,
4595 p_credit_points => l_credit_points ,
4596 p_enrollment_category => p_enrolment_cat,
4597 p_comm_type => p_commencement_type,
4598 p_method_type => p_enroll_meth ,
4599 p_min_credit_point => l_total_credit_points,
4600 p_calling_obj => 'JOB');
4601 --
4602 -- The value os the messages have to be checked to determine if the step evaluates to WARN / DENY programatically, based on the MinCP validation.
4603 IF (NOT l_dummy_bolean) AND l_message = 'IGS_SS_WARN_MIN_CP_REACHED' THEN
4604 l_notification_flag := 'WARN';
4605 ELSIF (NOT l_dummy_bolean) AND l_message = 'IGS_SS_DENY_MIN_CP_REACHED' THEN
4606 l_notification_flag := 'DENY';
4607 END IF;
4608
4609 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4610 IGS_GE_INS_SLE.genp_set_log_entry(
4611 cst_enr_blk_uo,
4612 cst_blk_uoo,
4613 v_key,
4614 'IGS_EN_TRN_FAIL_MIN_CP', -- Failed to transfer.
4615 cst_error || '|PRG_MINCP');
4616 p_sua_error_count := p_sua_error_count + 1;
4617 v_update_uoo := FALSE;
4618 ROLLBACK TO sp_sua_blk_trn;
4619 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4620 IGS_GE_INS_SLE.genp_set_log_entry(
4621 cst_enr_blk_uo,
4622 cst_blk_uoo,
4623 v_key,
4624 'IGS_EN_TRN_WARN_MIN_CP',
4625 cst_warning || '|PRG_MINCP');
4626 p_sua_warn_count := p_sua_warn_count + 1;
4627 END IF;
4628 END IF; ---l_notification_flag
4629 IF (v_update_uoo) THEN
4630 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
4631 v_message_name := NULL;
4632 l_notification_flag := NULL;
4633 l_notification_flag := igs_ss_enr_details.get_notification(
4634 p_person_type => p_person_type,
4635 p_enrollment_category => p_enrolment_cat,
4636 p_comm_type => p_commencement_type,
4637 p_enr_method_type => p_enroll_meth,
4638 p_step_group_type => 'PROGRAM',
4639 p_step_type => 'FATD_TYPE',
4640 p_person_id => p_person_id,
4641 p_message => v_message_name
4642 );
4643 IF v_message_name IS NOT NULL THEN
4644 IGS_GE_INS_SLE.genp_set_log_entry(
4645 cst_enr_blk_uo,
4646 cst_blk_uoo,
4647 v_key,
4648 v_message_name, -- person belongs to more than one person ID group.
4649 cst_error || '|PERID_GRP' );
4650 p_sua_error_count := p_sua_error_count + 1;
4651 v_update_uoo := FALSE;
4652 END IF;
4653 IF l_notification_flag IS NOT NULL THEN
4654 l_message:= NULL;
4655 l_dummy_bolean:=NULL;
4656 l_dummy_bolean := igs_en_elgbl_program.eval_unit_forced_type( p_person_id => p_person_id,
4657 p_load_calendar_type => p_load_cal_type,
4658 p_load_cal_sequence_number => p_load_seq_number,
4659 p_uoo_id => p_destination_uoo_id,
4660 p_course_cd => p_course_cd,
4661 p_course_version => p_version_number,
4662 p_message => l_message,
4663 p_deny_warn => NVL(p_deny_warn_att,l_notification_flag),
4664 p_enrollment_category => p_enrolment_cat,
4665 p_comm_type => p_commencement_type,
4666 p_method_type => p_enroll_meth,
4667 p_calling_obj => 'JOB' );
4668
4669 --
4670 -- The value of the messages have to be checked to determine if the step evaluates to WARN / DENY programatically, based on the MinCP validation.
4671 IF (NOT l_dummy_bolean) AND l_message = 'IGS_SS_WARN_ATTYPE_CHK' THEN
4672 l_notification_flag := 'WARN';
4673 ELSIF (NOT l_dummy_bolean) AND l_message = 'IGS_SS_DENY_ATTYPE_CHK' THEN
4674 l_notification_flag := 'DENY';
4675 END IF;
4676
4677 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4678 IGS_GE_INS_SLE.genp_set_log_entry(
4679 cst_enr_blk_uo,
4680 cst_blk_uoo,
4681 v_key,
4682 'IGS_EN_TRN_FAIL_ATT_TYP', -- Failed to transfer.
4683 cst_error || '|PRG_ATT');
4684 p_sua_error_count := p_sua_error_count + 1;
4685 v_update_uoo := FALSE;
4686 ROLLBACK TO sp_sua_blk_trn;
4687 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4688 IGS_GE_INS_SLE.genp_set_log_entry(
4689 cst_enr_blk_uo,
4690 cst_blk_uoo,
4691 v_key,
4692 'IGS_EN_TRN_WARN_ATT_TYP',
4693 cst_warning || '|PRG_ATT');
4694 p_sua_warn_count := p_sua_warn_count + 1;
4695 END IF;
4696 END IF;
4697 END IF; -- IF (v_update_uoo)
4698 IF (v_update_uoo) THEN
4699 -- Validate Cross Location credit points
4700 --Igs_Ss_Enr_Details.get_notification returns NULL means that Program step is not defined.
4701 v_message_name := NULL;
4702 l_notification_flag := NULL;
4703 l_notification_flag := igs_ss_enr_details.get_notification(
4704 p_person_type => p_person_type,
4705 p_enrollment_category => p_enrolment_cat,
4706 p_comm_type => p_commencement_type,
4707 p_enr_method_type => p_enroll_meth,
4708 p_step_group_type => 'PROGRAM',
4709 p_step_type => 'CROSS_LOC',
4710 p_person_id => p_person_id,
4711 p_message => v_message_name
4712 );
4713 IF v_message_name IS NOT NULL THEN
4714 IGS_GE_INS_SLE.genp_set_log_entry(
4715 cst_enr_blk_uo,
4716 cst_blk_uoo,
4717 v_key,
4718 v_message_name,
4719 cst_error || '|PERID_GRP' );
4720 p_sua_error_count := p_sua_error_count + 1;
4721 v_update_uoo := FALSE;
4722 END IF;
4723 IF l_notification_flag IS NOT NULL THEN
4724 l_message:= NULL;
4725 l_dummy_bolean:=NULL;
4726 -- passing 0 to p_upd_cp as the unit attempt is created already, which would considered inside the function
4727 -- for credit point calculation
4728 l_dummy_bolean := igs_en_elgbl_program.eval_cross_validation ( p_person_id => p_person_id,
4729 p_load_cal_type => p_load_cal_type,
4730 p_load_ci_sequence_number => p_load_seq_number,
4731 p_uoo_id => p_destination_uoo_id,
4732 p_course_cd => p_course_cd,
4733 p_program_version => p_version_number,
4734 p_message => l_message,
4735 p_deny_warn => l_notification_flag,
4736 p_upd_cp => NULL ,
4737 p_eligibility_step_type => 'CROSS_LOC',
4738 p_calling_obj => 'JOB' );
4739 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4740 IGS_GE_INS_SLE.genp_set_log_entry(
4741 cst_enr_blk_uo,
4742 cst_blk_uoo,
4743 v_key,
4744 'IGS_EN_TRN_FAIL_CRS_LOC', -- Failed to transfer.
4745 cst_error || '|PRG_CL');
4746 p_sua_error_count := p_sua_error_count + 1;
4747 v_update_uoo := FALSE;
4748 ROLLBACK TO sp_sua_blk_trn;
4749 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4750 IGS_GE_INS_SLE.genp_set_log_entry(
4751 cst_enr_blk_uo,
4752 cst_blk_uoo,
4753 v_key,
4754 'IGS_EN_TRN_WARN_CRS_LOC',
4755 cst_warning || '|PRG_CL');
4756 p_sua_warn_count := p_sua_warn_count + 1;
4757 END IF;
4758 END IF ;
4759 END IF; -- IF (v_update_uoo)
4760 IF (v_update_uoo) THEN
4761 -- Validate Cross Mode credit points
4762 --Igs_Ss_Enr_Details.get_notification returns NULL means that Program step is not defined.
4763 v_message_name := NULL;
4764 l_notification_flag := NULL;
4765 l_notification_flag := igs_ss_enr_details.get_notification(
4766 p_person_type => p_person_type,
4767 p_enrollment_category => p_enrolment_cat,
4768 p_comm_type => p_commencement_type,
4769 p_enr_method_type => p_enroll_meth,
4770 p_step_group_type => 'PROGRAM',
4771 p_step_type => 'CROSS_MOD',
4772 p_person_id => p_person_id,
4773 p_message => v_message_name
4774 );
4775
4776 IF v_message_name IS NOT NULL THEN
4777 IGS_GE_INS_SLE.genp_set_log_entry(
4778 cst_enr_blk_uo,
4779 cst_blk_uoo,
4780 v_key,
4781 v_message_name,
4782 cst_error || '|PERID_GRP' );
4783 p_sua_error_count := p_sua_error_count + 1;
4784 v_update_uoo := FALSE;
4785 END IF;
4786
4787 IF l_notification_flag IS NOT NULL THEN
4788 l_message:= NULL;
4789 l_dummy_bolean:=NULL;
4790 -- passing 0 to p_upd_cp as the unit attempt is created already, which would considered inside the function
4791 -- for credit point calculation
4792 l_dummy_bolean := igs_en_elgbl_program.eval_cross_validation ( p_person_id => p_person_id,
4793 p_load_cal_type => p_load_cal_type,
4794 p_load_ci_sequence_number => p_load_seq_number,
4795 p_uoo_id => p_destination_uoo_id,
4796 p_course_cd => p_course_cd,
4797 p_program_version => p_version_number,
4798 p_message => l_message,
4799 p_deny_warn => l_notification_flag,
4800 p_upd_cp => NULL,
4801 p_eligibility_step_type => 'CROSS_MOD',
4802 p_calling_obj => 'JOB' );
4803
4804 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4805 IGS_GE_INS_SLE.genp_set_log_entry(
4806 cst_enr_blk_uo,
4807 cst_blk_uoo,
4808 v_key,
4809 'IGS_EN_TRN_FAIL_CRS_MOD', -- Failed to transfer.
4810 cst_error || '|PRG_CM');
4811 p_sua_error_count := p_sua_error_count + 1;
4812 v_update_uoo := FALSE;
4813 ROLLBACK TO sp_sua_blk_trn;
4814 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4815 IGS_GE_INS_SLE.genp_set_log_entry(
4816 cst_enr_blk_uo,
4817 cst_blk_uoo,
4818 v_key,
4819 'IGS_EN_TRN_WARN_CRS_MOD',
4820 cst_warning || '|PRG_CM');
4821 p_sua_warn_count := p_sua_warn_count + 1;
4822 END IF;
4823 END IF ;
4824 END IF; -- IF (v_update_uoo)
4825 IF (v_update_uoo) THEN
4826 -- Validate Cross Faculty credit points
4827 --Igs_Ss_Enr_Details.get_notification returns NULL means that Program step is not defined.
4828 v_message_name := NULL;
4829 l_notification_flag := NULL;
4830 l_notification_flag := igs_ss_enr_details.get_notification(
4831 p_person_type => p_person_type,
4832 p_enrollment_category => p_enrolment_cat,
4833 p_comm_type => p_commencement_type,
4834 p_enr_method_type => p_enroll_meth,
4835 p_step_group_type => 'PROGRAM',
4836 p_step_type => 'CROSS_FAC',
4837 p_person_id => p_person_id,
4838 p_message => v_message_name
4839 );
4840
4841 IF v_message_name IS NOT NULL THEN
4842 IGS_GE_INS_SLE.genp_set_log_entry(
4843 cst_enr_blk_uo,
4844 cst_blk_uoo,
4845 v_key,
4846 v_message_name,
4847 cst_error || '|PERID_GRP' );
4848 p_sua_error_count := p_sua_error_count + 1;
4849 v_update_uoo := FALSE;
4850 END IF;
4851
4852 IF l_notification_flag IS NOT NULL THEN
4853 l_message:= NULL;
4854 l_dummy_bolean:=NULL;
4855 -- passing 0 to p_upd_cp as the unit attempt is created already, which would considered inside the function
4856 -- for credit point calculation
4857 l_dummy_bolean := igs_en_elgbl_program.eval_cross_validation ( p_person_id => p_person_id,
4858 p_load_cal_type => p_load_cal_type,
4859 p_load_ci_sequence_number => p_load_seq_number,
4860 p_uoo_id => p_destination_uoo_id,
4861 p_course_cd => p_course_cd,
4862 p_program_version => p_version_number,
4863 p_message => l_message,
4864 p_deny_warn => l_notification_flag,
4865 p_upd_cp => NULL,
4866 p_eligibility_step_type => 'CROSS_FAC',
4867 p_calling_obj => 'JOB' );
4868
4869 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4870 IGS_GE_INS_SLE.genp_set_log_entry(
4871 cst_enr_blk_uo,
4872 cst_blk_uoo,
4873 v_key,
4874 'IGS_EN_TRN_FAIL_CRS_FAC', -- Failed to transfer.
4875 cst_error || '|PRG_CF');
4876 p_sua_error_count := p_sua_error_count + 1;
4877 v_update_uoo := FALSE;
4878 ROLLBACK TO sp_sua_blk_trn;
4879 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4880 IGS_GE_INS_SLE.genp_set_log_entry(
4881 cst_enr_blk_uo,
4882 cst_blk_uoo,
4883 v_key,
4884 'IGS_EN_TRN_WARN_CRS_FAC',
4885 cst_warning || '|PRG_CF');
4886 p_sua_warn_count := p_sua_warn_count + 1;
4887 END IF;
4888 END IF ;
4889 END IF; -- IF (v_update_uoo)
4890 END IF; ---MIN CP
4891
4892 --Validating unit coreq unit section rule.
4893 IF ((v_update_uoo) AND (p_enforce_val = 'Y') AND (p_unit_attempt_status <> cst_unconfirm)) THEN
4894 -- getting the notification flag for evaluate COREQ unit validation
4895 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
4896 v_message_name := NULL;
4897 l_notification_flag := NULL;
4898 l_notification_flag := igs_ss_enr_details.get_notification(
4899 p_person_type => p_person_type,
4900 p_enrollment_category => p_enrolment_cat,
4901 p_comm_type => p_commencement_type,
4902 p_enr_method_type => p_enroll_meth,
4903 p_step_group_type => 'UNIT',
4904 p_step_type => 'COREQ',
4905 p_person_id => p_person_id,
4906 p_message => v_message_name
4907 );
4908 IF v_message_name IS NOT NULL THEN
4909 IGS_GE_INS_SLE.genp_set_log_entry(
4910 cst_enr_blk_uo,
4911 cst_blk_uoo,
4912 v_key,
4913 v_message_name, -- person belongs to more than one person ID group.
4914 cst_error || '|PERID_GRP' );
4915 p_sua_error_count := p_sua_error_count + 1;
4916 v_update_uoo := FALSE;
4917 END IF;
4918
4919 IF l_notification_flag IS NOT NULL THEN
4920 l_message:= NULL;
4921 l_dummy_bolean:=NULL;
4922 --Checking the co-req validation.
4923 l_dummy_bolean := igs_en_elgbl_unit.eval_coreq(
4924 p_person_id
4925 ,p_load_cal_type
4926 ,p_load_seq_number
4927 ,p_destination_uoo_id
4928 ,p_course_cd
4929 ,p_version_number
4930 ,l_message
4931 ,l_notification_flag
4932 ,'JOB');
4933 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4934 IGS_GE_INS_SLE.genp_set_log_entry(
4935 cst_enr_blk_uo,
4936 cst_blk_uoo,
4937 v_key,
4938 'IGS_EN_TRN_FAIL_COREQ_RULE', -- Failed to transfer.
4939 cst_error || '|COREQ');
4940 p_sua_error_count := p_sua_error_count + 1;
4941 v_update_uoo := FALSE;
4942 ROLLBACK TO sp_sua_blk_trn;
4943 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
4944 IGS_GE_INS_SLE.genp_set_log_entry(
4945 cst_enr_blk_uo,
4946 cst_blk_uoo,
4947 v_key,
4948 'IGS_EN_TRN_WARN_COREQ_RULE',
4949 cst_warning || '|COREQ');
4950 p_sua_warn_count := p_sua_warn_count + 1;
4951 END IF;
4952 END IF;
4953 END IF;
4954
4955 --Validating unit pre-req unit section rule.
4956 IF ((v_update_uoo) AND (p_enforce_val = 'Y') ) THEN
4957 -- getting the notification flag for evaluate Pre-REQ unit validation
4958 --Igs_Ss_Enr_Details.get_notification returns NULL means that unit step is not defined.
4959 v_message_name := NULL;
4960 l_notification_flag := NULL;
4961 l_notification_flag := igs_ss_enr_details.get_notification(
4962 p_person_type => p_person_type,
4963 p_enrollment_category => p_enrolment_cat,
4964 p_comm_type => p_commencement_type,
4965 p_enr_method_type => p_enroll_meth,
4966 p_step_group_type => 'UNIT',
4967 p_step_type => 'PREREQ',
4968 p_person_id => p_person_id,
4969 p_message => v_message_name
4970 );
4971
4972 IF v_message_name IS NOT NULL THEN
4973 IGS_GE_INS_SLE.genp_set_log_entry(
4974 cst_enr_blk_uo,
4975 cst_blk_uoo,
4976 v_key,
4977 v_message_name, -- person belongs to more than one person ID group.
4978 cst_error || '|PERID_GRP' );
4979 p_sua_error_count := p_sua_error_count + 1;
4980 v_update_uoo := FALSE;
4981 END IF;
4982
4983 IF l_notification_flag IS NOT NULL THEN
4984 l_message:= NULL;
4985 l_dummy_bolean:=NULL;
4986 --Checking the pre-req validation.
4987 l_dummy_bolean := igs_en_elgbl_unit.eval_prereq(
4988 p_person_id
4989 ,p_load_cal_type
4990 ,p_load_seq_number
4991 ,p_destination_uoo_id
4992 ,p_course_cd
4993 ,p_version_number
4994 ,l_message
4995 ,l_notification_flag
4996 ,'JOB');
4997 IF ((NOT l_dummy_bolean) AND (l_notification_flag = 'DENY')) THEN
4998 IGS_GE_INS_SLE.genp_set_log_entry(
4999 cst_enr_blk_uo,
5000 cst_blk_uoo,
5001 v_key,
5002 'IGS_EN_TRN_FAIL_PREREQ_RULE', -- Failed to transfer.
5003 cst_error || '|PREREQ');
5004 p_sua_error_count := p_sua_error_count + 1;
5005 v_update_uoo := FALSE;
5006 ROLLBACK TO sp_sua_blk_trn;
5007 ELSIF ((NOT l_dummy_bolean) AND (l_notification_flag = 'WARN')) THEN
5008 IGS_GE_INS_SLE.genp_set_log_entry(
5009 cst_enr_blk_uo,
5010 cst_blk_uoo,
5011 v_key,
5012 'IGS_EN_TRN_WARN_PREREQ_RULE',
5013 cst_warning || '|PREREQ');
5014 p_sua_warn_count := p_sua_warn_count + 1;
5015 END IF;
5016 END IF;
5017 END IF;
5018 IF v_update_uoo THEN
5019 -- Log that the IGS_PS_UNIT has been updated.
5020 IGS_GE_INS_SLE.genp_set_log_entry(
5021 cst_enr_blk_uo,
5022 cst_blk_uoo,
5023 v_key,
5024 'IGS_EN_STUD_SUCCESS_TRSF_UOO', -- Successfully transferred.
5025 cst_information || '|' || cst_transferred);
5026 p_sua_trnsfr_count := p_sua_trnsfr_count + 1;
5027 -- Set the flag to indicate processing has occurred.
5028 p_processing_occurred := TRUE;
5029 END IF;
5030 RETURN;
5031 -- Local exception handler.
5032 EXCEPTION
5033 WHEN e_resource_busy_exception THEN
5034 -- Roll back transaction.
5035 ROLLBACK TO sp_sua_blk_trn;
5036 -- Log that a locked record exists and
5037 -- rollback has occurred.
5038 IGS_GE_INS_SLE.genp_set_log_entry(
5039 cst_enr_blk_uo,
5040 cst_blk_uoo,
5041 v_course_key,
5042 'IGS_EN_ALLALT_APPL_STUD_PRG',
5043 'ERROR|LOCK');
5044 -- Add to count and continue processing.
5045 v_total_lock_count := v_total_lock_count + 1;
5046 RETURN;
5047 WHEN OTHERS THEN
5048 IF c_uoo%ISOPEN THEN
5049 CLOSE c_uoo;
5050 END IF;
5051 IF c_sua_upd%ISOPEN THEN
5052 CLOSE c_sua_upd;
5053 END IF;
5054 RAISE;
5055 END;
5056 END enrpl_upd_sua_uoo;
5057 BEGIN -- enrp_prc_sua_blk_trn
5058
5059 --adding invoke source to correct _actual counter handling of the USEC
5060 igs_en_gen_017.g_invoke_source := 'JOB';
5061
5062 -- Determine the academic period for the teaching period.
5063 v_alt_cd := IGS_EN_GEN_002.enrp_get_acad_alt_cd(
5064 p_teach_cal_type,
5065 p_teach_ci_sequence_number,
5066 v_acad_cal_type,
5067 v_acad_ci_sequence_number,
5068 v_acad_ci_start_dt,
5069 v_acad_ci_end_dt,
5070 v_message_name);
5071
5072 IF v_message_name is not null THEN
5073 Fnd_Message.Set_name('IGS',v_message_name);
5074 IGS_GE_MSG_STACK.ADD;
5075 App_Exception.Raise_Exception;
5076 END IF;
5077 -- Determine the start and end dates of the teaching
5078 -- period by calling calp_get_ci_dates.
5079 IGS_CA_GEN_001.calp_get_ci_dates(
5080 p_teach_cal_type,
5081 p_teach_ci_sequence_number,
5082 v_teach_start_dt,
5083 v_teach_end_dt);
5084 IGS_GE_INS_SLE.genp_set_log_cntr;
5085
5086 --Get the load calendar for a given calendar teaching calendar
5087 OPEN cur_load1;
5088 FETCH cur_load1 INTO l_load_cal_type,l_load_seq_number;
5089 CLOSE cur_load1;
5090
5091
5092 -- Determine students to be processed.
5093 FOR v_sua_rec IN c_sua(l_load_cal_type,l_load_seq_number) LOOP
5094 BEGIN -- exception handler
5095 SAVEPOINT sp_sua_blk_trn;
5096 v_rollback_occurred := FALSE;
5097 v_processing_occurred := FALSE;
5098 -- Initialise counters
5099 v_error_count := 0;
5100 v_warn_count := 0;
5101 v_sua_trnsfr_count := 0;
5102 v_course_key := TO_CHAR(v_sua_rec.person_id) || '|' ||
5103 v_sua_rec.course_cd;
5104 -- Determine the IGS_PS_UNIT offering option that the student IGS_PS_UNIT attempt
5105 -- is to be changed too.
5106 -- If parameter is null, use the existing values selected for the sua.
5107 v_to_uv_version_number := NVL(p_to_uv_version_number,
5108 v_sua_rec.version_number);
5109 v_to_location_cd := NVL(p_to_location_cd,
5110 v_sua_rec.location_cd);
5111 v_to_unit_class := NVL(p_to_unit_class,
5112 v_sua_rec.unit_class);
5113 -- If the IGS_PS_UNIT offering is not being changed, then skip the IGS_PS_UNIT attempt.
5114 IF v_sua_rec.version_number <> v_to_uv_version_number OR
5115 v_sua_rec.location_cd <> v_to_location_cd OR
5116 v_sua_rec.unit_class <> v_to_unit_class THEN
5117
5118 -- Validate that the process has not been scheduled to run outside
5119 -- the enrolment/variation windows for the teaching period.
5120 --moved this call from BEGIN to here ,for enrollment processes dld
5121 --bug#1832130 by smaddali , to include uoo_id
5122 IF NOT IGS_EN_GEN_008.enrp_get_var_window(
5123 p_teach_cal_type,
5124 p_teach_ci_sequence_number,
5125 SYSDATE ,
5126 --added this parameter as impact of change in the procedure
5127 -- for enrollment processes dld bug#1832130
5128 v_sua_rec.uoo_id) THEN
5129
5130 v_text := 'ERROR|'||FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_ERR_VAR_WIND');
5131 IGS_GE_INS_SLE.genp_set_log_entry(
5132 cst_enr_blk_uo,
5133 cst_blk_uoo,
5134 v_course_key,
5135 'IGS_EN_SUA_NOTALT_CUTOFDT',
5136 v_text);
5137 v_error_count := v_error_count + 1;
5138 -- skip this unit attempt
5139 ELSE
5140 -- Determine the Enrollment method , Enrollment Commencement type.
5141 l_enrolment_cat:=IGS_EN_GEN_003.Enrp_Get_Enr_Cat(
5142 v_sua_rec.person_id,
5143 v_sua_rec.course_cd,
5144 v_acad_cal_type,
5145 v_acad_ci_sequence_number,
5146 NULL,
5147 l_en_cal_type,
5148 l_en_ci_seq_num,
5149 l_commencement_type,
5150 l_dummy);
5151 -- getting the person type of logged in person
5152 l_person_type := Igs_En_Gen_008.enrp_get_person_type(p_course_cd =>NULL);
5153 l_waitlist_flag := 'N';
5154
5155
5156 enrpl_upd_sua_uoo(
5157 v_sua_rec.person_id,
5158 v_sua_rec.course_cd,
5159 v_sua_rec.program_version_number,
5160 v_sua_rec.version_number,
5161 v_sua_rec.uoo_id,
5162 v_teach_end_dt,
5163 v_sua_rec.location_cd,
5164 v_sua_rec.unit_class,
5165 v_sua_rec.unit_attempt_status,
5166 v_sua_rec.enrolled_dt,
5167 v_to_uv_version_number,
5168 v_to_location_cd,
5169 v_to_unit_class,
5170 v_error_count,
5171 v_warn_count,
5172 v_sua_trnsfr_count,
5173 v_processing_occurred,
5174 l_person_type,
5175 l_enrolment_cat,
5176 l_commencement_type,
5177 p_enforce_val,
5178 p_enroll_method,
5179 p_reason,
5180 l_load_cal_type,
5181 l_load_seq_number,
5182 l_waitlist_flag,
5183 l_destination_uoo_id,
5184 v_acad_cal_type,
5185 v_acad_ci_sequence_number
5186 );
5187 -- Initialise the message number;
5188 v_message_name := null;
5189 v_error_occurred := FALSE;
5190 IF v_processing_occurred AND p_enforce_val ='Y' THEN
5191 -- Create a log entry to allow the
5192 -- called module to log IGS_GE_EXCEPTIONS.
5193 IGS_GE_GEN_003.genp_ins_log(
5194 cst_enr_blk_uo,
5195 cst_unit_rule_check,
5196 v_rule_creation_dt);
5197 -- Call the routine to process the IGS_PS_UNIT
5198 -- rules checking for a IGS_PE_PERSON's IGS_PS_COURSE.
5199 IF NOT IGS_EN_GEN_012.enrp_upd_sca_urule(
5200 v_acad_cal_type,
5201 v_acad_ci_sequence_number,
5202 v_sua_rec.person_id,
5203 v_sua_rec.course_cd,
5204 cst_enr_blk_uo,
5205 v_rule_creation_dt) THEN
5206
5207 -- IGS_GE_EXCEPTIONS have been created by enrp_upd_sca_urule.
5208 -- Log them with the bulk processing and remove the
5209 -- entries created by enrp_upd_sca_urule.
5210 FOR v_sle_rec IN c_sle(
5211 v_rule_creation_dt) LOOP
5212 -- Insert log entry.
5213 -- Set the IGS_PS_UNIT and teaching period details.
5214 v_text := cst_rule_check || '|' ||
5215 IGS_GE_GEN_002.genp_get_delimit_str(
5216 v_sle_rec.key,
5217 6,
5218 ',') || '|' ||
5219 IGS_GE_GEN_002.genp_get_delimit_str(
5220 v_sle_rec.key,
5221 7,
5222 ',') || '|' ||
5223 IGS_GE_GEN_002.genp_get_delimit_str(
5224 v_sle_rec.key,
5225 8,
5226 ',');
5227 -- Determine the type of exception.
5228 v_validation_error := FALSE;
5229 IF IGS_GE_GEN_002.genp_get_delimit_str(
5230 v_sle_rec.key,
5231 2,
5232 ',') = cst_att_date THEN
5233 v_text := cst_warning || '|' || v_text;
5234 ELSIF IGS_GE_GEN_002.genp_get_delimit_str(
5235 v_sle_rec.key,
5236 2,
5237 ',') = cst_changed THEN
5238 v_text := cst_information || '|' || v_text;
5239 ELSIF IGS_GE_GEN_002.genp_get_delimit_str(
5240 v_sle_rec.key,
5241 2,
5242 ',') = cst_att_valid THEN
5243 v_text := cst_error || '|' || v_text;
5244 v_validation_error := TRUE;
5245 END IF;
5246 IGS_GE_INS_SLE.genp_set_log_entry(
5247 cst_enr_blk_uo,
5248 cst_blk_uoo,
5249 v_course_key,
5250 v_sle_rec.message_name,
5251 v_text);
5252 -- If the IGS_PS_UNIT is invalid, log the text returned
5253 -- from the IGS_RU_RULE checking routine explaining why
5254 -- the IGS_RU_RULE is invalid.
5255 IF IGS_GE_GEN_002.genp_get_delimit_str(
5256 v_sle_rec.key,
5257 3,
5258 ',') = cst_invalid THEN
5259 IGS_GE_INS_SLE.genp_set_log_entry(
5260 cst_enr_blk_uo,
5261 cst_blk_uoo,
5262 v_course_key,
5263 NULL,
5264 v_sle_rec.text);
5265 END IF;
5266 IF v_validation_error THEN
5267 -- Log a message indicating that the IGS_PS_UNIT was
5268 -- not set to enrolled because of a validation error.
5269 IGS_GE_INS_SLE.genp_set_log_entry(
5270 cst_enr_blk_uo,
5271 cst_blk_uoo,
5272 v_course_key,
5273 'IGS_EN_US_FAILS_ST_ENROLLED',
5274 cst_information || '|');
5275 END IF;
5276 END LOOP;
5277 END IF; -- end of rules failed
5278 -- Remove the temporary log entries.
5279 FOR v_sle_del_exists IN c_sle_del(
5280 v_rule_creation_dt) LOOP
5281 IGS_GE_S_LOG_ENTRY_PKG.DELETE_ROW(
5282 v_sle_del_exists.rowid);
5283
5284 END LOOP;
5285 -- Remove the temporary log entries.
5286 FOR v_sl_del_exists IN c_sl_del(
5287 v_rule_creation_dt) LOOP
5288 IGS_GE_S_LOG_PKG.DELETE_ROW(
5289 v_sl_del_exists.rowid);
5290
5291 END LOOP;
5292 -- Log errors and continue.
5293 IF NOT v_rollback_occurred THEN
5294 IF (v_message_name IS NOT NULL) THEN
5295 -- Log the warning returned form enrp_val_sua_cnfrm_p
5296 v_text := cst_warning || '|';
5297 v_text := v_text || v_fail_type;
5298 IGS_GE_INS_SLE.genp_set_log_entry(
5299 cst_enr_blk_uo,
5300 cst_blk_uoo,
5301 v_course_key,
5302 v_message_name,
5303 v_text);
5304 END IF;
5305 END IF; -- end of not rollback occured
5306 END IF; -- end of processing occured
5307 END IF; -- check if outside enrollment variation window for the unit section
5308 ELSE
5309 --Log error message saying, Cannot transfer the Unit Section between the same source and destination
5310 IGS_GE_INS_SLE.genp_set_log_entry(
5311 cst_enr_blk_uo,
5312 cst_blk_uoo,
5313 v_course_key,
5314 'IGS_EN_NO_TRN_SAME_USEC', -- Failed to transfer as option does not exist.
5315 'ERROR|NO_TRANS');
5316 v_error_count := v_error_count + 1;
5317 END IF; -- Check if IGS_PS_UNIT version/offering being altered.
5318
5319 --Calling procedure to raise business event when unit is transferred
5320 IF v_processing_occurred THEN
5321 IF l_waitlist_flag = 'Y' THEN
5322 l_unit_attempt_status := 'WAITLISTED';
5323 ELSE
5324 l_unit_attempt_status := 'ENROLLED';
5325 END IF;
5326 --Calling procedure to raise business event when unit is transferred
5327 igs_ss_en_wrappers.transfer_workflow(
5328 p_source_uoo_ids => v_sua_rec.uoo_id,
5329 p_dest_uoo_ids => l_destination_uoo_id,
5330 p_person_id => v_sua_rec.person_id,
5331 p_load_cal_type => l_load_cal_type,
5332 p_load_sequence_number => l_load_seq_number,
5333 p_program_cd => v_sua_rec.course_cd,
5334 p_unit_attempt_status => l_unit_attempt_status,
5335 p_reason => p_reason,
5336 p_return_status => l_dummy1,
5337 p_message => l_dummy1
5338 );
5339
5340 END IF; --end of workflow notification
5341
5342 -- Add counts to total
5343 v_total_sua_count := v_total_sua_count + 1;
5344 v_total_sua_error_count := v_total_sua_error_count + v_error_count;
5345 v_total_sua_warn_count := v_total_sua_warn_count + v_warn_count;
5346 v_total_sua_trnsfr_count := v_total_sua_trnsfr_count + v_sua_trnsfr_count;
5347 -- Local exception handler.
5348 EXCEPTION
5349 WHEN e_resource_busy_exception THEN
5350 -- Roll back transaction.
5351 ROLLBACK TO sp_sua_blk_trn;
5352 -- Log that a locked record exists and
5353 -- rollback has occurred.
5354 IGS_GE_INS_SLE.genp_set_log_entry(
5355 cst_enr_blk_uo,
5356 cst_blk_uoo,
5357 v_course_key,
5358 'IGS_EN_ALLALT_APPL_STUD_PRG',
5359 'ERROR|LOCK');
5360 -- Add to count and continue processing.
5361 v_total_lock_count := v_total_lock_count + 1;
5362 WHEN OTHERS THEN
5363 RAISE;
5364 END; -- exception handler.
5365 END LOOP; -- end of unit attempts loop
5366 -- Log the summary counts.
5367 IGS_GE_INS_SLE.genp_set_log_entry(
5368 cst_enr_blk_uo,
5369 cst_blk_uoo,
5370 cst_summary,
5371 NULL,
5372 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PROC_COUNT')||'|'||TO_CHAR(v_total_sua_count));
5373 IGS_GE_INS_SLE.genp_set_log_entry(
5374 cst_enr_blk_uo,
5375 cst_blk_uoo,
5376 cst_summary,
5377 NULL,
5378 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_ERR_COUNT')||'|'||TO_CHAR(v_total_sua_error_count));
5379 IGS_GE_INS_SLE.genp_set_log_entry(
5380 cst_enr_blk_uo,
5381 cst_blk_uoo,
5382 cst_summary,
5383 NULL,
5384 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_WARN_COUNT')||'|'||TO_CHAR(v_total_sua_warn_count));
5385 IGS_GE_INS_SLE.genp_set_log_entry(
5386 cst_enr_blk_uo,
5387 cst_blk_uoo,
5388 cst_summary,
5389 NULL,
5390 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_TRAN_COUNT')||'|'||TO_CHAR(v_total_sua_trnsfr_count));
5391 IGS_GE_INS_SLE.genp_set_log_entry(
5392 cst_enr_blk_uo,
5393 cst_blk_uoo,
5394 cst_summary,
5395 NULL,
5396 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_ENCUM_COUNT')||'|'||TO_CHAR(v_total_encumb_error_count));
5397 IGS_GE_INS_SLE.genp_set_log_entry(
5398 cst_enr_blk_uo,
5399 cst_blk_uoo,
5400 cst_summary,
5401 NULL,
5402 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_ERR_COUNT')||'|'||TO_CHAR(v_total_course_error_count));
5403 IGS_GE_INS_SLE.genp_set_log_entry(
5404 cst_enr_blk_uo,
5405 cst_blk_uoo,
5406 cst_summary,
5407 NULL,
5408 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_WRN_COUNT')||'|'||TO_CHAR(v_total_course_warn_count));
5409 IGS_GE_INS_SLE.genp_set_log_entry(
5410 cst_enr_blk_uo,
5411 cst_blk_uoo,
5412 cst_summary,
5413 NULL,
5414 FND_MESSAGE.GET_STRING('IGS','IGS_EN_TRN_TOT_PRG_LCK_COUNT')||'|'|| TO_CHAR(v_total_lock_count));
5415 -- Insert the log entries.
5416 IGS_GE_INS_SLE.genp_ins_sle(
5417 v_creation_dt);
5418 p_creation_dt := v_creation_dt;
5419 COMMIT;
5420 RETURN;
5421 EXCEPTION
5422 WHEN OTHERS THEN
5423
5424 IF c_sua%ISOPEN THEN
5425 CLOSE c_sua;
5426 END IF;
5427 IF c_sle%ISOPEN THEN
5428 CLOSE c_sle;
5429 END IF;
5430 IF c_sle_del%ISOPEN THEN
5431 CLOSE c_sle_del;
5432 END IF;
5433 IF c_sl_del%ISOPEN THEN
5434 CLOSE c_sl_del;
5435 END IF;
5436 RAISE;
5437 END;
5438 END enrp_prc_sua_blk_trn;
5439
5440
5441 Procedure Enrp_Set_Pee_Expry(
5442 p_person_id IN NUMBER ,
5443 p_encumbrance_type IN VARCHAR2 ,
5444 p_pen_start_dt IN DATE ,
5445 p_effect_type IN VARCHAR2 ,
5446 p_pee_start_dt IN DATE ,
5447 p_sequence_number IN NUMBER ,
5448 p_expiry_dt IN DATE ,
5449 p_message_name OUT NOCOPY VARCHAR2)
5450 IS
5451 /*
5452 || Created By : pkpatel
5453 || Created On : 27-SEP-2002
5454 || Purpose :
5455 || Known limitations, enhancements or remarks :
5456 || Change History :
5457 || Who When What
5458 || pkpatel 3-OCT-2002 Bug No: 2600842
5459 || Added logic for the new table IGS_PE_FUND_EXCL
5460 || (reverse chronological order - newest change first)
5461 */
5462 BEGIN -- enrp_set_pee_expry
5463 -- Set the expiry date for all cild records of the nominated pee
5464 -- when the expiry_dt is set
5465 DECLARE
5466 e_resource_busy EXCEPTION;
5467 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
5468 v_check VARCHAR2(1);
5469 v_ret_val BOOLEAN := TRUE;
5470 CURSOR c_person_crs_grp_exclusion IS
5471 SELECT rowid, IGS_PE_CRS_GRP_EXCL.*
5472 FROM IGS_PE_CRS_GRP_EXCL
5473 WHERE
5474 person_id = p_person_id AND
5475 encumbrance_type = p_encumbrance_type AND
5476 pen_start_dt = p_pen_start_dt AND
5477 s_encmb_effect_type = p_effect_type AND
5478 pee_start_dt = p_pee_start_dt AND
5479 pee_sequence_number = p_sequence_number AND
5480 (expiry_dt IS NULL OR
5481 expiry_dt > p_expiry_dt)
5482 FOR UPDATE OF expiry_dt NOWAIT;
5483 CURSOR c_person_course_exclusion IS
5484 SELECT rowid,
5485 IGS_PE_COURSE_EXCL.*
5486 FROM IGS_PE_COURSE_EXCL
5487 WHERE
5488 person_id = p_person_id AND
5489 encumbrance_type = p_encumbrance_type AND
5490 pen_start_dt = p_pen_start_dt AND
5491 s_encmb_effect_type = p_effect_type AND
5492 pee_start_dt = pee_start_dt AND
5493 pee_sequence_number = p_sequence_number AND
5494 (expiry_dt IS NULL OR
5495 expiry_dt > p_expiry_dt)
5496 FOR UPDATE OF expiry_dt NOWAIT;
5497 CURSOR c_person_unit_exclusion IS
5498 SELECT rowid,IGS_PE_PERS_UNT_EXCL.*
5499 FROM IGS_PE_PERS_UNT_EXCL
5500 WHERE
5501 person_id = p_person_id AND
5502 encumbrance_type = p_encumbrance_type AND
5503 pen_start_dt = p_pen_start_dt AND
5504 s_encmb_effect_type = p_effect_type AND
5505 pee_start_dt = pee_start_dt AND
5506 pee_sequence_number = p_sequence_number AND
5507 (expiry_dt IS NULL OR
5508 expiry_dt > p_expiry_dt)
5509 FOR UPDATE OF expiry_dt NOWAIT;
5510
5511 CURSOR fund_exclusion_cur IS
5512 SELECT rowid,igs_pe_fund_excl.*
5513 FROM igs_pe_fund_excl
5514 WHERE
5515 person_id = p_person_id AND
5516 encumbrance_type = p_encumbrance_type AND
5517 pen_start_dt = p_pen_start_dt AND
5518 s_encmb_effect_type = p_effect_type AND
5519 pee_start_dt = pee_start_dt AND
5520 pee_sequence_number = p_sequence_number AND
5521 (expiry_dt IS NULL OR
5522 expiry_dt > p_expiry_dt)
5523 FOR UPDATE OF expiry_dt NOWAIT;
5524
5525 CURSOR c_person_unit_requirement IS
5526 SELECT rowid,IGS_PE_UNT_REQUIRMNT.*
5527 FROM IGS_PE_UNT_REQUIRMNT
5528 WHERE
5529 person_id = p_person_id AND
5530 encumbrance_type = p_encumbrance_type AND
5531 pen_start_dt = p_pen_start_dt AND
5532 s_encmb_effect_type = p_effect_type AND
5533 pee_start_dt = pee_start_dt AND
5534 pee_sequence_number = p_sequence_number AND
5535 (expiry_dt IS NULL OR
5536 expiry_dt > p_expiry_dt)
5537 FOR UPDATE OF expiry_dt NOWAIT;
5538
5539 l_dcd_date DATE;
5540
5541 BEGIN
5542 p_message_name := null;
5543 -- Validate input parameters
5544 IF ( p_person_id IS NULL OR
5545 p_encumbrance_type IS NULL OR
5546 p_pen_start_dt IS NULL OR
5547 p_effect_type IS NULL OR
5548 p_pee_start_dt IS NULL OR
5549 p_sequence_number IS NULL OR
5550 p_expiry_dt IS NULL) THEN
5551 RETURN;
5552 END IF;
5553 FOR v_pcge_rec IN c_person_crs_grp_exclusion LOOP
5554
5555
5556 SELECT DECODE(GREATEST(v_pcge_rec.pcge_start_dt, p_expiry_dt),v_pcge_rec.pcge_start_dt, v_pcge_rec.pcge_start_dt, p_expiry_dt)
5557 INTO l_dcd_date
5558 FROM DUAL;
5559
5560 IGS_PE_CRS_GRP_EXCL_PKG.UPDATE_ROW(
5561 X_ROWID => v_pcge_rec.ROWID ,
5562 X_PERSON_ID => v_pcge_rec.PERSON_ID ,
5563 X_ENCUMBRANCE_TYPE => v_pcge_rec.ENCUMBRANCE_TYPE ,
5564 X_PEN_START_DT => v_pcge_rec.PEN_START_DT ,
5565 X_S_ENCMB_EFFECT_TYPE => v_pcge_rec.S_ENCMB_EFFECT_TYPE,
5566 X_PEE_START_DT => v_pcge_rec.PEE_START_DT ,
5567 X_PEE_SEQUENCE_NUMBER => v_pcge_rec.PEE_SEQUENCE_NUMBER,
5568 X_COURSE_GROUP_CD => v_pcge_rec.COURSE_GROUP_CD,
5569 X_PCGE_START_DT => v_pcge_rec.PCGE_START_DT ,
5570 X_EXPIRY_DT => l_dcd_date,
5571 X_MODE => 'R' );
5572
5573 END LOOP;
5574
5575
5576 FOR v_pce_rec IN c_person_course_exclusion LOOP
5577
5578 SELECT DECODE(GREATEST(v_pce_rec.pce_start_dt, p_expiry_dt),v_pce_rec.pce_start_dt, v_pce_rec.pce_start_dt,p_expiry_dt)
5579 INTO l_dcd_date
5580 FROM DUAL;
5581
5582
5583 IGS_PE_COURSE_EXCL_PKG.UPDATE_ROW(
5584 X_ROWID => v_pce_rec.ROWID ,
5585 X_PERSON_ID => v_pce_rec.PERSON_ID ,
5586 X_ENCUMBRANCE_TYPE => v_pce_rec.ENCUMBRANCE_TYPE ,
5587 X_PEN_START_DT => v_pce_rec.PEN_START_DT ,
5588 X_S_ENCMB_EFFECT_TYPE => v_pce_rec.S_ENCMB_EFFECT_TYPE ,
5589 X_PEE_START_DT => v_pce_rec.PEE_START_DT,
5590 X_PEE_SEQUENCE_NUMBER => v_pce_rec.PEE_SEQUENCE_NUMBER ,
5591 X_COURSE_CD => v_pce_rec.COURSE_CD ,
5592 X_PCE_START_DT => v_pce_rec.PCE_START_DT ,
5593 X_EXPIRY_DT => l_dcd_date ,
5594 X_MODE => 'R');
5595
5596 END LOOP;
5597 FOR v_pue_rec IN c_person_unit_exclusion LOOP
5598
5599 SELECT DECODE(GREATEST(v_pue_rec.pue_start_dt, p_expiry_dt),
5600 v_pue_rec.pue_start_dt, v_pue_rec.pue_start_dt,
5601 p_expiry_dt)
5602 INTO l_dcd_date
5603 FROM DUAL;
5604
5605 IGS_PE_PERS_UNT_EXCL_PKG.UPDATE_ROW(
5606 X_ROWID => v_pue_rec.ROWID ,
5607 X_PERSON_ID => v_pue_rec.PERSON_ID ,
5608 X_ENCUMBRANCE_TYPE => v_pue_rec.ENCUMBRANCE_TYPE ,
5609 X_PEN_START_DT => v_pue_rec.PEN_START_DT ,
5610 X_S_ENCMB_EFFECT_TYPE => v_pue_rec.S_ENCMB_EFFECT_TYPE ,
5611 X_PEE_START_DT => v_pue_rec.PEE_START_DT ,
5612 X_PEE_SEQUENCE_NUMBER => v_pue_rec.PEE_SEQUENCE_NUMBER ,
5613 X_UNIT_CD => v_pue_rec.UNIT_CD ,
5614 X_PUE_START_DT => v_pue_rec.PUE_START_DT ,
5615 X_EXPIRY_DT => l_dcd_date,
5616 X_MODE => 'R'
5617 );
5618
5619 END LOOP;
5620 FOR v_pur_rec IN c_person_unit_requirement LOOP
5621
5622 SELECT DECODE(GREATEST(v_pur_rec.pur_start_dt, p_expiry_dt),v_pur_rec.pur_start_dt, v_pur_rec.pur_start_dt,p_expiry_dt)
5623 INTO l_dcd_date
5624 FROM DUAL;
5625
5626
5627 IGS_PE_UNT_REQUIRMNT_PKG.UPDATE_ROW(
5628 X_ROWID => v_pur_rec.ROWID ,
5629 X_PERSON_ID => v_pur_rec.PERSON_ID ,
5630 X_ENCUMBRANCE_TYPE => v_pur_rec.ENCUMBRANCE_TYPE ,
5631 X_PEN_START_DT => v_pur_rec.PEN_START_DT ,
5632 X_S_ENCMB_EFFECT_TYPE => v_pur_rec.S_ENCMB_EFFECT_TYPE ,
5633 X_PEE_START_DT => v_pur_rec.PEE_START_DT ,
5634 X_PEE_SEQUENCE_NUMBER => v_pur_rec.PEE_SEQUENCE_NUMBER ,
5635 X_UNIT_CD => v_pur_rec.UNIT_CD ,
5636 X_PUR_START_DT => v_pur_rec.PUR_START_DT ,
5637 X_EXPIRY_DT => l_dcd_date ,
5638 X_MODE => 'R');
5639
5640 END LOOP;
5641
5642 FOR fund_exclusion_rec IN fund_exclusion_cur LOOP
5643
5644 SELECT DECODE(GREATEST(fund_exclusion_rec.pfe_start_dt, p_expiry_dt),fund_exclusion_rec.pfe_start_dt, fund_exclusion_rec.pfe_start_dt,p_expiry_dt)
5645 INTO l_dcd_date
5646 FROM DUAL;
5647
5648
5649 IGS_PE_FUND_EXCL_PKG.UPDATE_ROW(
5650 X_ROWID => fund_exclusion_rec.ROWID ,
5651 X_FUND_EXCL_ID => fund_exclusion_rec.FUND_EXCL_ID,
5652 X_PERSON_ID => fund_exclusion_rec.PERSON_ID ,
5653 X_ENCUMBRANCE_TYPE => fund_exclusion_rec.ENCUMBRANCE_TYPE ,
5654 X_PEN_START_DT => fund_exclusion_rec.PEN_START_DT ,
5655 X_S_ENCMB_EFFECT_TYPE => fund_exclusion_rec.S_ENCMB_EFFECT_TYPE ,
5656 X_PEE_START_DT => fund_exclusion_rec.PEE_START_DT ,
5657 X_PEE_SEQUENCE_NUMBER => fund_exclusion_rec.PEE_SEQUENCE_NUMBER ,
5658 X_FUND_CODE => fund_exclusion_rec.FUND_CODE ,
5659 X_PFE_START_DT => fund_exclusion_rec.PFE_START_DT ,
5660 X_EXPIRY_DT => l_dcd_date ,
5661 X_MODE => 'R');
5662
5663 END LOOP;
5664 -- RETURN TRUE;
5665 RETURN;
5666 EXCEPTION
5667 WHEN e_resource_busy THEN
5668 IF (c_person_crs_grp_exclusion%ISOPEN) THEN
5669 CLOSE c_person_crs_grp_exclusion;
5670 END IF;
5671 IF (c_person_course_exclusion%ISOPEN) THEN
5672 CLOSE c_person_course_exclusion;
5673 END IF;
5674 IF (c_person_unit_exclusion%ISOPEN) THEN
5675 CLOSE c_person_unit_exclusion;
5676 END IF;
5677 IF (c_person_unit_requirement%ISOPEN) THEN
5678 CLOSE c_person_unit_requirement;
5679 END IF;
5680 IF (fund_exclusion_cur%ISOPEN) THEN
5681 CLOSE fund_exclusion_cur;
5682 END IF;
5683 p_message_name := 'IGS_EN_UNABLE_EXP_PRSNENCUMB';
5684 -- RETURN FALSE;
5685 RETURN;
5686 WHEN OTHERS THEN
5687 RAISE;
5688 END;
5689 END enrp_set_pee_expry;
5690
5691 Procedure Enrp_Set_Pen_Expry(
5692 p_person_id IN NUMBER ,
5693 p_encumbrance_type IN VARCHAR2 ,
5694 p_pen_start_dt IN DATE ,
5695 p_sequence_number IN NUMBER ,
5696 p_expiry_dt IN DATE ,
5697 p_message_name OUT NOCOPY VARCHAR2)
5698 AS
5699 /*
5700 || Created By : pkpatel
5701 || Created On : 27-SEP-2002
5702 || Purpose :
5703 || Known limitations, enhancements or remarks :
5704 || Change History :
5705 || Who When What
5706 || ssawhney 17-feb-2003 Bug : 2758856 : Added the parameter x_external_reference in the call to IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW
5707 || pkpatel 3-OCT-2002 Bug No: 2600842
5708 || Added the parameter x_auth_resp_id in the call to IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW
5709 || (reverse chronological order - newest change first)
5710 */
5711 BEGIN -- enrp_set_pen_expry
5712 -- Set the expiry date for parent IGS_PE_PERS_ENCUMB record of
5713 -- the nominated pee when expiry_dt of the effect is set
5714 -- and no other active effects remain.
5715 DECLARE
5716 e_resource_busy EXCEPTION;
5717 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
5718 v_check VARCHAR2(1);
5719 v_max_expiry_dt IGS_PE_PERSENC_EFFCT.expiry_dt%TYPE;
5720 v_expiry_dt IGS_PE_PERSENC_EFFCT.expiry_dt%TYPE;
5721 CURSOR c_person_encumbrance_effect IS
5722 SELECT 'x'
5723 FROM IGS_PE_PERSENC_EFFCT
5724 WHERE person_id = p_person_id AND
5725 encumbrance_type = p_encumbrance_type AND
5726 pen_start_dt = p_pen_start_dt AND
5727 sequence_number <> p_sequence_number AND
5728 expiry_dt IS NULL;
5729 CURSOR c_person_encumbrance IS
5730 SELECT rowid, IGS_PE_PERS_ENCUMB.*
5731 FROM IGS_PE_PERS_ENCUMB
5732 WHERE person_id = p_person_id AND
5733 encumbrance_type = p_encumbrance_type AND
5734 start_dt = p_pen_start_dt
5735 FOR UPDATE OF expiry_dt NOWAIT;
5736 v_pe_rec c_person_encumbrance%ROWTYPE;
5737 CURSOR c_expiry_dt IS
5738 SELECT MAX(pee.expiry_dt)
5739 FROM IGS_PE_PERSENC_EFFCT pee
5740 WHERE pee.person_id = p_person_id AND
5741 pee.encumbrance_type = p_encumbrance_type AND
5742 pee.pen_start_dt = p_pen_start_dt AND
5743 pee.sequence_number <> p_sequence_number;
5744 BEGIN
5745 -- Set the default message number
5746 p_message_name := null;
5747 -- Validate the input parameters
5748 IF ( p_person_id IS NULL OR
5749 p_encumbrance_type IS NULL OR
5750 p_pen_start_dt IS NULL OR
5751 p_sequence_number IS NULL OR
5752 p_expiry_dt IS NULL) THEN
5753 -- RETURN TRUE;
5754 RETURN;
5755 END IF;
5756 -- Check for any open IGS_PE_PERSENC_EFFCT
5757 OPEN c_person_encumbrance_effect;
5758 FETCH c_person_encumbrance_effect INTO v_check;
5759 IF (c_person_encumbrance_effect%NOTFOUND) THEN
5760 -- get the latest expiry dt of any
5761 -- IGS_PE_PERSENC_EFFCT record
5762 OPEN c_expiry_dt;
5763 FETCH c_expiry_dt INTO v_max_expiry_dt;
5764 -- set the value of expiry_dt to be used
5765 -- in the update below
5766 IF (c_expiry_dt%NOTFOUND) THEN
5767 CLOSE c_expiry_dt;
5768 v_expiry_dt := p_expiry_dt;
5769 ELSIF (p_expiry_dt < v_max_expiry_dt) THEN
5770 CLOSE c_expiry_dt;
5771 v_expiry_dt := v_max_expiry_dt;
5772 ELSE
5773 CLOSE c_expiry_dt;
5774 v_expiry_dt := p_expiry_dt;
5775 END IF;
5776 -- parent can be expired
5777 OPEN c_person_encumbrance;
5778 FETCH c_person_encumbrance INTO v_pe_rec;
5779 IGS_PE_PERS_ENCUMB_PKG.UPDATE_ROW(
5780 X_ROWID => v_pe_rec.ROWID ,
5781 X_PERSON_ID => v_pe_rec.PERSON_ID ,
5782 X_ENCUMBRANCE_TYPE => v_pe_rec.ENCUMBRANCE_TYPE ,
5783 X_START_DT => v_pe_rec.START_DT ,
5784 X_EXPIRY_DT => v_EXPIRY_DT ,
5785 X_AUTHORISING_PERSON_ID => v_pe_rec.AUTHORISING_PERSON_ID ,
5786 X_COMMENTS => v_pe_rec.COMMENTS ,
5787 X_SPO_COURSE_CD => v_pe_rec.SPO_COURSE_CD,
5788 X_SPO_SEQUENCE_NUMBER => v_pe_rec.SPO_SEQUENCE_NUMBER,
5789 X_AUTH_RESP_ID => v_pe_rec.auth_resp_id,
5790 X_EXTERNAL_REFERENCE => v_pe_rec.external_reference,
5791 X_MODE => 'R' );
5792
5793 CLOSE c_person_encumbrance;
5794 END IF;
5795 CLOSE c_person_encumbrance_effect;
5796 -- RETURN TRUE;
5797 RETURN;
5798 EXCEPTION
5799 WHEN e_resource_busy THEN
5800 IF (c_person_encumbrance_effect%ISOPEN) THEN
5801 CLOSE c_person_encumbrance_effect;
5802 END IF;
5803 p_message_name := 'IGS_EN_UNABLE_EXP_PRSN_ENCUMB';
5804 -- RETURN FALSE;
5805 RETURN;
5806 WHEN OTHERS THEN
5807 RAISE;
5808 END;
5809 END enrp_set_pen_expry;
5810 Function Enrp_Upd_Acai_Accept(
5811 p_person_id IN NUMBER ,
5812 p_course_cd IN VARCHAR2 ,
5813 p_adm_admission_appl_number IN NUMBER ,
5814 p_adm_nominated_course_cd IN VARCHAR2 ,
5815 p_adm_sequence_number IN NUMBER ,
5816 p_message_name OUT NOCOPY VARCHAR2)
5817 RETURN boolean AS
5818
5819 BEGIN -- enrp_upd_acai_accept
5820 -- Accept the admissions offer for a course attempt on confirmation of the
5821 -- course.
5822 DECLARE
5823 e_resource_busy EXCEPTION;
5824 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
5825 cst_pending CONSTANT VARCHAR2(10) := 'PENDING';
5826 cst_deferral CONSTANT VARCHAR2(10) := 'DEFERRAL';
5827 cst_accepted CONSTANT VARCHAR2(10) := 'ACCEPTED';
5828 ---IGS_AD_PS_APPL_INST_APLINST_V view replaced with IGS_AD_PS_APPL_INST in the c_acaiv and c_acaiv_1 cursor
5829 --due to performance issues w.r.t. 2376233 by kkillams
5830 CURSOR c_acaiv IS
5831 SELECT acaiv.person_id,
5832 acaiv.admission_appl_number,
5833 acaiv.nominated_course_cd,
5834 acaiv.sequence_number,
5835 acaiv.adm_offer_resp_status
5836 FROM IGS_AD_PS_APPL_INST acaiv
5837 WHERE acaiv.person_id = p_person_id AND
5838 acaiv.admission_appl_number = p_adm_admission_appl_number AND
5839 acaiv.nominated_course_cd = p_adm_nominated_course_cd AND
5840 acaiv.sequence_number = p_adm_sequence_number AND
5841 IGS_EN_GEN_002.enrp_get_acai_offer(
5842 acaiv.adm_outcome_status,
5843 acaiv.adm_offer_resp_status) = 'Y' AND
5844 IGS_EN_GEN_014.enrs_get_acai_cndtnl(
5845 acaiv.adm_cndtnl_offer_status,
5846 acaiv.cndtnl_offer_must_be_stsfd_ind) = 'Y'
5847 ORDER BY
5848 acaiv.offer_dt DESC;
5849 CURSOR c_acaiv_1 IS
5850 SELECT acaiv.person_id,
5851 acaiv.admission_appl_number,
5852 acaiv.nominated_course_cd,
5853 acaiv.sequence_number,
5854 acaiv.adm_offer_resp_status
5855 FROM IGS_AD_PS_APPL_INST acaiv
5856 WHERE acaiv.person_id = p_person_id AND
5857 acaiv.course_cd = p_course_cd AND
5858 IGS_EN_GEN_002.enrp_get_acai_offer(
5859 acaiv.adm_outcome_status,
5860 acaiv.adm_offer_resp_status) = 'Y' AND
5861 IGS_EN_GEN_014.enrs_get_acai_cndtnl(
5862 acaiv.adm_cndtnl_offer_status,
5863 acaiv.cndtnl_offer_must_be_stsfd_ind) = 'Y'
5864 ORDER BY
5865 acaiv.offer_dt DESC;
5866 CURSOR c_acai_upd (
5867 cp_person_id IGS_EN_STDNT_PS_ATT.person_id%TYPE,
5868 cp_admission_appl_number
5869 IGS_EN_STDNT_PS_ATT.adm_admission_appl_number%TYPE,
5870 cp_nominated_course_cd IGS_EN_STDNT_PS_ATT.adm_nominated_course_cd%TYPE,
5871 cp_sequence_number IGS_EN_STDNT_PS_ATT.adm_sequence_number%TYPE) IS
5872 SELECT rowid,acai.*
5873 FROM IGS_AD_PS_APPL_INST acai
5874 WHERE acai.person_id = cp_person_id AND
5875 acai.admission_appl_number = cp_admission_appl_number AND
5876 acai.nominated_course_cd = cp_nominated_course_cd AND
5877 acai.sequence_number = cp_sequence_number
5878 FOR UPDATE OF acai.adm_offer_resp_status,
5879 acai.actual_response_dt NOWAIT;
5880 v_acaiv_rec c_acaiv%ROWTYPE;
5881 v_acai_exists c_acai_upd%ROWTYPE;
5882 v_accepted_status VARCHAR2(10);
5883 BEGIN
5884 -- Set the default message number
5885 p_message_name := null;
5886 -- If the admissions details have been passed then query the application.
5887 -- If not, attempt to query the offer based on the course attempt details.
5888 IF p_adm_admission_appl_number IS NOT NULL AND
5889 p_adm_nominated_course_cd IS NOT NULL AND
5890 p_adm_sequence_number IS NOT NULL THEN
5891 OPEN c_acaiv;
5892 FETCH c_acaiv INTO v_acaiv_rec;
5893 IF c_acaiv%NOTFOUND THEN
5894 CLOSE c_acaiv;
5895 RETURN TRUE;
5896 END IF;
5897 CLOSE c_acaiv;
5898 ELSE
5899 OPEN c_acaiv_1;
5900 FETCH c_acaiv_1 INTO v_acaiv_rec;
5901 IF c_acaiv_1%NOTFOUND THEN
5902 CLOSE c_acaiv_1;
5903 RETURN TRUE;
5904 END IF;
5905
5906 CLOSE c_acaiv_1;
5907 END IF;
5908 -- If response isnt pending or deferral then it cannot be accepted.
5909 IF IGS_AD_GEN_008.admp_get_saors(
5910 v_acaiv_rec.adm_offer_resp_status) NOT IN (
5911 cst_pending,
5912 cst_deferral) THEN
5913
5914 RETURN TRUE;
5915 END IF;
5916
5917 -- Select IGS_AD_PS_APPL_INST record for update
5918 BEGIN
5919 OPEN c_acai_upd(
5920 v_acaiv_rec.person_id,
5921 v_acaiv_rec.admission_appl_number,
5922 v_acaiv_rec.nominated_course_cd,
5923 v_acaiv_rec.sequence_number);
5924 FETCH c_acai_upd INTO v_acai_exists;
5925 IF c_acai_upd%FOUND THEN
5926 -- Update application, setting it to accepted.
5927 v_accepted_status := IGS_AD_GEN_009.admp_get_sys_aors(
5928 cst_accepted);
5929
5930 IF v_accepted_status IS NOT NULL THEN
5931 IGS_AD_PS_APPL_INST_PKG.UPDATE_ROW(
5932 X_ROWID => v_acai_exists.ROWID ,
5933 X_PERSON_ID => v_acai_exists.PERSON_ID ,
5934 X_ADMISSION_APPL_NUMBER => v_acai_exists.ADMISSION_APPL_NUMBER ,
5935 X_NOMINATED_COURSE_CD => v_acai_exists.NOMINATED_COURSE_CD ,
5936 X_SEQUENCE_NUMBER => v_acai_exists.SEQUENCE_NUMBER ,
5937 X_ADM_CAL_TYPE => v_acai_exists.ADM_CAL_TYPE ,
5938 X_ADM_CI_SEQUENCE_NUMBER => v_acai_exists.ADM_CI_SEQUENCE_NUMBER ,
5939 X_COURSE_CD => v_acai_exists.COURSE_CD ,
5940 X_CRV_VERSION_NUMBER => v_acai_exists.CRV_VERSION_NUMBER ,
5941 X_LOCATION_CD => v_acai_exists.LOCATION_CD ,
5942 X_ATTENDANCE_MODE => v_acai_exists.ATTENDANCE_MODE ,
5943 X_ATTENDANCE_TYPE => v_acai_exists.ATTENDANCE_TYPE ,
5944 X_UNIT_SET_CD => v_acai_exists.UNIT_SET_CD ,
5945 X_US_VERSION_NUMBER => v_acai_exists.US_VERSION_NUMBER ,
5946 X_PREFERENCE_NUMBER => v_acai_exists.PREFERENCE_NUMBER ,
5947 X_ADM_DOC_STATUS => v_acai_exists.ADM_DOC_STATUS ,
5948 X_ADM_ENTRY_QUAL_STATUS => v_acai_exists.ADM_ENTRY_QUAL_STATUS ,
5949 X_LATE_ADM_FEE_STATUS => v_acai_exists.LATE_ADM_FEE_STATUS ,
5950 X_ADM_OUTCOME_STATUS => v_acai_exists.ADM_OUTCOME_STATUS ,
5951 X_ADM_OTCM_STAT_AUTH_PER_ID => v_acai_exists.ADM_OTCM_STATUS_AUTH_PERSON_ID ,
5952 X_ADM_OUTCOME_STATUS_AUTH_DT => v_acai_exists.ADM_OUTCOME_STATUS_AUTH_DT ,
5953 X_ADM_OUTCOME_STATUS_REASON => v_acai_exists.ADM_OUTCOME_STATUS_REASON ,
5954 X_OFFER_DT => v_acai_exists.OFFER_DT ,
5955 X_OFFER_RESPONSE_DT => v_acai_exists.OFFER_RESPONSE_DT ,
5956 X_PRPSD_COMMENCEMENT_DT => v_acai_exists.PRPSD_COMMENCEMENT_DT ,
5957 X_ADM_CNDTNL_OFFER_STATUS => v_acai_exists.ADM_CNDTNL_OFFER_STATUS ,
5958 X_CNDTNL_OFFER_SATISFIED_DT => v_acai_exists.CNDTNL_OFFER_SATISFIED_DT ,
5959 X_CNDNL_OFR_MUST_BE_STSFD_IND => v_acai_exists.CNDTNL_OFFER_MUST_BE_STSFD_IND,
5960 X_ADM_OFFER_RESP_STATUS => v_accepted_status ,
5961 X_ACTUAL_RESPONSE_DT => SYSDATE ,
5962 X_ADM_OFFER_DFRMNT_STATUS => v_acai_exists.ADM_OFFER_DFRMNT_STATUS ,
5963 X_DEFERRED_ADM_CAL_TYPE => v_acai_exists.DEFERRED_ADM_CAL_TYPE ,
5964 X_DEFERRED_ADM_CI_SEQUENCE_NUM => v_acai_exists.DEFERRED_ADM_CI_SEQUENCE_NUM ,
5965 X_DEFERRED_TRACKING_ID => v_acai_exists.DEFERRED_TRACKING_ID ,
5966 X_ASS_RANK => v_acai_exists.ASS_RANK ,
5967 X_SECONDARY_ASS_RANK => v_acai_exists.SECONDARY_ASS_RANK ,
5968 X_INTR_ACCEPT_ADVICE_NUM => v_acai_exists.INTRNTNL_ACCEPTANCE_ADVICE_NUM,
5969 X_ASS_TRACKING_ID => v_acai_exists.ASS_TRACKING_ID ,
5970 X_FEE_CAT => v_acai_exists.FEE_CAT ,
5971 X_HECS_PAYMENT_OPTION => v_acai_exists.HECS_PAYMENT_OPTION ,
5972 X_EXPECTED_COMPLETION_YR => v_acai_exists.EXPECTED_COMPLETION_YR ,
5973 X_EXPECTED_COMPLETION_PERD => v_acai_exists.EXPECTED_COMPLETION_PERD ,
5974 X_CORRESPONDENCE_CAT => v_acai_exists.CORRESPONDENCE_CAT ,
5975 X_ENROLMENT_CAT => v_acai_exists.ENROLMENT_CAT ,
5976 X_FUNDING_SOURCE => v_acai_exists.FUNDING_SOURCE ,
5977 X_APPLICANT_ACPTNCE_CNDTN => v_acai_exists.APPLICANT_ACPTNCE_CNDTN ,
5978 X_CNDTNL_OFFER_CNDTN => v_acai_exists.CNDTNL_OFFER_CNDTN ,
5979 X_ATTRIBUTE_CATEGORY => v_acai_exists.attribute_Category,
5980 X_ATTRIBUTE1 => v_acai_exists.ATTRIBUTE1 ,
5981 X_ATTRIBUTE2 => v_acai_exists.ATTRIBUTE2 ,
5982 X_ATTRIBUTE3 => v_acai_exists.ATTRIBUTE3 ,
5983 X_ATTRIBUTE4 => v_acai_exists.ATTRIBUTE4 ,
5984 X_ATTRIBUTE5 => v_acai_exists.ATTRIBUTE5 ,
5985 X_ATTRIBUTE6 => v_acai_exists.ATTRIBUTE6 ,
5986 X_ATTRIBUTE7 => v_acai_exists.ATTRIBUTE7 ,
5987 X_ATTRIBUTE8 => v_acai_exists.ATTRIBUTE8 ,
5988 X_ATTRIBUTE9 => v_acai_exists.ATTRIBUTE9 ,
5989 X_ATTRIBUTE10 => v_acai_exists.ATTRIBUTE10 ,
5990 X_ATTRIBUTE11 => v_acai_exists.ATTRIBUTE11 ,
5991 X_ATTRIBUTE12 => v_acai_exists.ATTRIBUTE12 ,
5992 X_ATTRIBUTE13 => v_acai_exists.ATTRIBUTE13 ,
5993 X_ATTRIBUTE14 => v_acai_exists.ATTRIBUTE14 ,
5994 X_ATTRIBUTE15 => v_acai_exists.ATTRIBUTE15 ,
5995 X_ATTRIBUTE16 => v_acai_exists.ATTRIBUTE16 ,
5996 X_ATTRIBUTE17 => v_acai_exists.ATTRIBUTE17 ,
5997 X_ATTRIBUTE18 => v_acai_exists.ATTRIBUTE18 ,
5998 X_ATTRIBUTE19 => v_acai_exists.ATTRIBUTE19 ,
5999 X_ATTRIBUTE20 => v_acai_exists.ATTRIBUTE20 ,
6000 X_ACADEMIC_INDEX => v_acai_exists.ACADEMIC_INDEX,
6001 X_APP_FILE_LOCATION => v_acai_exists.APP_FILE_LOCATION,
6002 X_APPLY_FOR_FINAID => v_acai_exists.APPLY_FOR_FINAID,
6003 X_ATTENT_OTHER_INST_CD => v_acai_exists.ATTENT_OTHER_INST_CD,
6004 X_DECISION_DATE => v_acai_exists.DECISION_DATE,
6005 X_DECISION_MAKE_ID => v_acai_exists.DECISION_MAKE_ID,
6006 X_DECISION_NOTES => v_acai_exists.DECISION_NOTES,
6007 X_DECISION_REASON_ID => v_acai_exists.DECISION_REASON_ID,
6008 X_DEFICIENCY_IN_PREP => v_acai_exists.DEFICIENCY_IN_PREP,
6009 X_EDU_GOAL_PRIOR_ENROLL_ID => v_acai_exists.EDU_GOAL_PRIOR_ENROLL_ID,
6010 X_FINAID_APPLY_DATE => v_acai_exists.FINAID_APPLY_DATE,
6011 X_PENDING_REASON_ID => v_acai_exists.PENDING_REASON_ID,
6012 X_PREDICTED_GPA => v_acai_exists.PREDICTED_GPA,
6013 X_SPL_CONSIDER_COMMENTS => v_acai_exists.SPL_CONSIDER_COMMENTS,
6014 X_WAITLIST_RANK => v_acai_exists.WAITLIST_RANK ,
6015 X_WAITLIST_STATUS => v_acai_exists.WAITLIST_STATUS ,
6016 X_APP_SOURCE_ID => v_acai_exists.APP_SOURCE_ID,
6017 X_MODE => 'R' ,
6018 X_SS_APPLICATION_ID => v_acai_exists.SS_APPLICATION_ID,
6019 X_SS_PWD => v_acai_exists.SS_PWD,
6020 X_AUTHORIZED_DT => v_acai_exists.AUTHORIZED_DT, -- BUG Enh No : 1891835 Added two columns
6021 X_AUTHORIZING_PERS_ID => v_acai_exists.AUTHORIZING_PERS_ID, -- BUG Enh No : 1891835 Added two columns
6022 X_ENTRY_STATUS => v_acai_exists.ENTRY_STATUS, -- BUG Enh No : 1905651 . Added three columns in teh table IGS_AD_PS_APPL_INST_ALL
6023 X_ENTRY_LEVEL => v_acai_exists.ENTRY_LEVEL,-- BUG Enh No :1905651 Added three columns in teh table IGS_AD_PS_APPL_INST_ALL
6024 X_SCH_APL_TO_ID => v_acai_exists.SCH_APL_TO_ID, -- BUG Enh No : 1905651 Added three columns in teh table IGS_AD_PS_APPL_INST_ALL
6025 X_FUT_ACAD_CAL_TYPE => v_acai_exists.FUTURE_ACAD_CAL_TYPE, -- Bug # 2217104
6026 X_FUT_ACAD_CI_SEQUENCE_NUMBER => v_acai_exists.FUTURE_ACAD_CI_SEQUENCE_NUMBER,-- Bug # 2217104
6027 X_FUT_ADM_CAL_TYPE => v_acai_exists.FUTURE_ADM_CAL_TYPE, -- Bug # 2217104
6028 X_FUT_ADM_CI_SEQUENCE_NUMBER => v_acai_exists.FUTURE_ADM_CI_SEQUENCE_NUMBER, -- Bug # 2217104
6029 X_PREV_TERM_ADM_APPL_NUMBER => v_acai_exists.PREVIOUS_TERM_ADM_APPL_NUMBER, -- Bug # 2217104
6030 X_PREV_TERM_SEQUENCE_NUMBER => v_acai_exists.PREVIOUS_TERM_SEQUENCE_NUMBER, -- Bug # 2217104
6031 X_FUT_TERM_ADM_APPL_NUMBER => v_acai_exists.FUTURE_TERM_ADM_APPL_NUMBER, -- Bug # 2217104
6032 X_FUT_TERM_SEQUENCE_NUMBER => v_acai_exists.FUTURE_TERM_SEQUENCE_NUMBER, -- Bug # 2217104
6033 X_DEF_ACAD_CAL_TYPE => v_acai_exists.DEF_ACAD_CAL_TYPE, --Bug 2395510
6034 X_DEF_ACAD_CI_SEQUENCE_NUM => v_acai_exists.DEF_ACAD_CI_SEQUENCE_NUM, --Bug 2395510
6035 X_DEF_PREV_TERM_ADM_APPL_NUM => v_acai_exists.DEF_PREV_TERM_ADM_APPL_NUM,--Bug 2395510
6036 X_DEF_PREV_APPL_SEQUENCE_NUM => v_acai_exists.DEF_PREV_APPL_SEQUENCE_NUM,--Bug 2395510
6037 X_DEF_TERM_ADM_APPL_NUM => v_acai_exists.DEF_TERM_ADM_APPL_NUM,--Bug 2395510
6038 X_DEF_APPL_SEQUENCE_NUM => v_acai_exists.DEF_APPL_SEQUENCE_NUM,--Bug 2395510
6039 X_IDX_CALC_DATE => v_acai_exists.IDX_CALC_DATE,
6040 X_ATTRIBUTE21 => v_acai_exists.ATTRIBUTE21,
6041 X_ATTRIBUTE22 => v_acai_exists.ATTRIBUTE22,
6042 X_ATTRIBUTE23 => v_acai_exists.ATTRIBUTE23,
6043 X_ATTRIBUTE24 => v_acai_exists.ATTRIBUTE24,
6044 X_ATTRIBUTE25 => v_acai_exists.ATTRIBUTE25,
6045 X_ATTRIBUTE26 => v_acai_exists.ATTRIBUTE26,
6046 X_ATTRIBUTE27 => v_acai_exists.ATTRIBUTE27,
6047 X_ATTRIBUTE28 => v_acai_exists.ATTRIBUTE28,
6048 X_ATTRIBUTE29 => v_acai_exists.ATTRIBUTE29,
6049 X_ATTRIBUTE30 => v_acai_exists.ATTRIBUTE30,
6050 X_ATTRIBUTE31 => v_acai_exists.ATTRIBUTE31,
6051 X_ATTRIBUTE32 => v_acai_exists.ATTRIBUTE32,
6052 X_ATTRIBUTE33 => v_acai_exists.ATTRIBUTE33,
6053 X_ATTRIBUTE34 => v_acai_exists.ATTRIBUTE34,
6054 X_ATTRIBUTE35 => v_acai_exists.ATTRIBUTE35,
6055 X_ATTRIBUTE36 => v_acai_exists.ATTRIBUTE36,
6056 X_ATTRIBUTE37 => v_acai_exists.ATTRIBUTE37,
6057 X_ATTRIBUTE38 => v_acai_exists.ATTRIBUTE38,
6058 X_ATTRIBUTE39 => v_acai_exists.ATTRIBUTE39,
6059 X_ATTRIBUTE40 => v_acai_exists.ATTRIBUTE40,
6060 X_APPL_INST_STATUS => v_acai_exists.appl_inst_status,
6061 x_ais_reason => v_acai_exists.ais_reason,
6062 x_decline_ofr_reason => v_acai_exists.decline_ofr_reason
6063 );
6064 END IF;
6065 END IF;
6066 CLOSE c_acai_upd;
6067 EXCEPTION
6068 WHEN e_resource_busy THEN
6069 -- lock could not be obtained.
6070 p_message_name := 'IGS_EN_NOTACPT_ADMOFFER';
6071 RETURN FALSE;
6072 WHEN OTHERS THEN
6073 IF c_acai_upd%ISOPEN THEN
6074 CLOSE c_acai_upd;
6075 END IF;
6076 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
6077 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_011.enrp_upd_acai_accept1');
6078 IGS_GE_MSG_STACK.ADD;
6079 App_Exception.Raise_Exception;
6080 END;
6081 RETURN TRUE;
6082 EXCEPTION
6083 WHEN OTHERS THEN
6084 IF c_acaiv%ISOPEN THEN
6085 CLOSE c_acaiv;
6086 END IF;
6087 IF c_acaiv_1%ISOPEN THEN
6088 CLOSE c_acaiv_1;
6089 END IF;
6090 IF c_acai_upd%ISOPEN THEN
6091 CLOSE c_acai_upd;
6092 END IF;
6093 RAISE;
6094 END;
6095 END enrp_upd_acai_accept;
6096
6097 Procedure Enrp_Upd_Enr_Pp(
6098 p_username IN VARCHAR2 ,
6099 p_cal_type IN VARCHAR2 ,
6100 p_sequence_number IN NUMBER ,
6101 p_enrolment_cat IN VARCHAR2 ,
6102 p_enr_method_type IN VARCHAR2 )
6103 AS
6104 BEGIN
6105 DECLARE
6106 v_person_id IGS_PE_PERSON.person_id%TYPE;
6107 v_dummy IGS_PE_PERS_PREFS.LAST_UPDATED_BY%TYPE;
6108 CURSOR c_person(
6109 cp_username IGS_PE_PERSON.oracle_username%TYPE) IS
6110 SELECT person_id
6111 FROM IGS_PE_PERSON
6112 WHERE oracle_username = cp_username;
6113 CURSOR c_person_prefs(
6114 cp_person_id IGS_PE_PERSON.person_id%TYPE) IS
6115 SELECT LAST_UPDATED_BY
6116 FROM IGS_PE_PERS_PREFS_all
6117 WHERE person_id = cp_person_id;
6118 v_other_detail VARCHAR2(255);
6119 BEGIN
6120 -- this module updates the enrolment values for a IGS_PE_PERSON's preference
6121 -- table
6122
6123 -- added after ORACLE_USERNAME issue...
6124 v_person_id := FND_GLOBAL.USER_ID;
6125
6126
6127 OPEN c_person_prefs(
6128 v_person_id);
6129 FETCH c_person_prefs INTO v_dummy;
6130
6131 IF (c_person_prefs%NOTFOUND) THEN
6132 CLOSE c_person_prefs;
6133 -- Call table handler for inserting into person_prefs...
6134 DECLARE
6135 l_rowid VARCHAR2(25);
6136 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
6137 BEGIN
6138
6139 IGS_PE_PERS_PREFS_PKG.INSERT_ROW(
6140 X_ROWID => l_rowid,
6141 x_PERSON_ID => v_person_id,
6142 x_enr_acad_cal_type=> p_cal_type,
6143 x_enr_acad_sequence_number=> p_sequence_number,
6144 x_enr_enrolment_cat=> p_enrolment_cat,
6145 x_enr_enr_method_type=> p_enr_method_type,
6146 X_ADM_ACAD_CAL_TYPE => NULL,
6147 X_ADM_ACAD_CI_SEQUENCE_NUMBER => NULL,
6148 X_ADM_ADM_CAL_TYPE => NULL,
6149 X_ADM_ADM_CI_SEQUENCE_NUMBER => NULL,
6150 X_ADM_ADMISSION_CAT => NULL,
6151 X_ADM_S_ADMISSION_PROCESS_TYPE => NULL,
6152 X_ENQ_ACAD_CAL_TYPE => NULL,
6153 X_ENQ_ACAD_CI_SEQUENCE_NUMBER => NULL,
6154 X_ENQ_ADM_CAL_TYPE => NULL,
6155 X_ENQ_ADM_CI_SEQUENCE_NUMBER => NULL,
6156 X_SERVER_PRINTER_DFLT => NULL,
6157 X_ALLOW_STND_REQ_IND => 'N',
6158 x_org_id => l_org_id
6159 );
6160 END;
6161
6162 COMMIT;
6163 ELSE
6164 CLOSE c_person_prefs;
6165 DECLARE
6166 CURSOR c_IGS_PE_PERS_PREFS IS
6167 SELECT rowid,
6168 ppp.*
6169 FROM IGS_PE_PERS_PREFS_all ppp
6170 WHERE person_id = v_person_id;
6171 BEGIN
6172 FOR v_pe_prefs_rec IN c_IGS_PE_PERS_PREFS LOOP
6173 IGS_PE_PERS_PREFS_PKG.UPDATE_ROW(
6174 X_ROWID => v_pe_prefs_rec.ROWID ,
6175 X_PERSON_ID => v_pe_prefs_rec.PERSON_ID ,
6176 X_ENR_ACAD_CAL_TYPE => p_cal_type ,
6177 X_ENR_ACAD_SEQUENCE_NUMBER => p_sequence_number ,
6178 X_ENR_ENROLMENT_CAT => p_enrolment_cat ,
6179 X_ENR_ENR_METHOD_TYPE => p_enr_method_type,
6180 X_ADM_ACAD_CAL_TYPE => v_pe_prefs_rec.ADM_ACAD_CAL_TYPE ,
6181 X_ADM_ACAD_CI_SEQUENCE_NUMBER => v_pe_prefs_rec.ADM_ACAD_CI_SEQUENCE_NUMBER ,
6182 X_ADM_ADM_CAL_TYPE => v_pe_prefs_rec.ADM_ADM_CAL_TYPE ,
6183 X_ADM_ADM_CI_SEQUENCE_NUMBER => v_pe_prefs_rec.ADM_ADM_CI_SEQUENCE_NUMBER ,
6184 X_ADM_ADMISSION_CAT => v_pe_prefs_rec.ADM_ADMISSION_CAT ,
6185 X_ADM_S_ADMISSION_PROCESS_TYPE => v_pe_prefs_rec.ADM_S_ADMISSION_PROCESS_TYPE ,
6186 X_ENQ_ACAD_CAL_TYPE => v_pe_prefs_rec.ENQ_ACAD_CAL_TYPE ,
6187 X_ENQ_ACAD_CI_SEQUENCE_NUMBER => v_pe_prefs_rec.ENQ_ACAD_CI_SEQUENCE_NUMBER ,
6188 X_ENQ_ADM_CAL_TYPE => v_pe_prefs_rec.ENQ_ADM_CAL_TYPE ,
6189 X_ENQ_ADM_CI_SEQUENCE_NUMBER => v_pe_prefs_rec.ENQ_ADM_CI_SEQUENCE_NUMBER ,
6190 X_SERVER_PRINTER_DFLT => v_pe_prefs_rec.SERVER_PRINTER_DFLT ,
6191 X_ALLOW_STND_REQ_IND => v_pe_prefs_rec.ALLOW_STND_REQ_IND ,
6192 X_MODE => 'R'
6193 );
6194 END LOOP;
6195 END;
6196 COMMIT;
6197 END IF;
6198 RETURN;
6199 END;
6200 END enrp_upd_enr_pp;
6201
6202
6203
6204 END IGS_EN_GEN_011;