1 PACKAGE BODY IGS_EN_GEN_010 AS
2 /* $Header: IGSEN10B.pls 120.22 2006/09/15 06:26:36 amanohar ship $ */
3
4 -------------------------------------------------------------------------------------------
5 --Change History:
6 --Who When What
7 --rvangala 12-AUG-2005 Bug #4551013. EN320 Build
8 -- bdeviset 29-JUL-2004 Modified Enrp_Ins_Snew_Prenrl,Enrp_Ins_Sret_Prenrl,create_unit_set,
9 -- create_stream_unit_sets,update_stream_unit_sets.
10 -- Changed procedures create_unit_set,create_stream_unit_sets,update_stream_unit_sets
11 -- enrpl_copy_adm_unit_sets to functions which returns booleanfor bug 3149133.
12 --
13 --ckasu 05-Apr-2004 Modified IGS_EN_STDNT_PS_ATT_Pkg.update_Row and
14 -- IGS_EN_STDNT_PS_ATT_Pkg.Insert_Row Procedure call as a part of bug 3544927.
15 --rvangala 04-Dec-2003 Added call to igs_ss_enr_details.enrp_get_prgm_for_career to check for
16 -- primary program in enrp_valid_inst_sua
17 --ijeddy, Dec 3, 2003 Grade Book Enh build, bug no 3201661
18
19 -- rvivekan 3-Aug-2003 Added new parameters to ofr_enrollment_or_waitlist |
20 -- as a part of Bulk Unit Upload Bug#3049009
21 -- rvivekan 29-JUL-2003 Modified several message_name variables from varchar2(30) to varchar2(2000) as
22 -- a part of bug#3045405
23 -- amuthu 04-JUL-2003 Removed the check for progression status and added it before the
24 -- the call to enrp_ins_snew_prenrl and enrp_ins_sret_prenrl in IGS_EN_GEN_008
25 -- amuthu 10-JUN-2003 modified as per the UK Streaming and Repeat TD (bug 2829265)
26 -- amuthu 04-FEB-2003 removed the exception section from enrp_ins_suao_discon
27 -- as part of bug 2782096.
28 -- pradhakr 19-Dec-2002 Changed the call to the insert_row of igs_en_su_attempt
29 -- table to igs_en_sua_api.create_unit_attempt.
30 -- Changes wrt ENCR031 build. Bug#2643207
31 --amuthu 23-Sep-02 Modified the code as per the EN Core Vs Option TD. Added logic
32 -- to call Enrp_Ins_Pre_Pos when the p_units_ind(icator) parameter
33 -- value is either 'Y' or 'CORE_ONLY'
34 --ayedubat 04-JUN-2002 Changed the functions: enrp_ins_snew_prenrl, enrp_ins_sret_prenrl for bug # 2391842
35 --nalkumar 5-OCT-2001 Modified the IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW and IGS_EN_STDNT_PS_ATT_PKG.INSERT_ROW calls.
36 -- Added four new parameters to call it as per the Bug# 2027984.
37 --Aiyer 10-Oct-2001 Added the columns grading schema and gs_version_number in all
38 -- Tbh calls of IGS_EN_SU_ATTEMPT_PKG as a part of the bug 2037897.
39 --Bayadav 09-Nov-2001 Added the columns catalog cal type and catalog seq num in Enrp_ins_susa_hist
40 -- as a part of build of career impact DLD
41 --Nalin Kumar 11-Nov-2001 Added Procedure 'adv_stand_trans' as part of the Career Impact DLD.
42 -- Bug# 2027984.
43 --Nalin Kumar 16-Nov-2001 Added parameter key_program in IGS_EN_STDNT_PS_ATT_PKG.update_row call
44 -- as pert of the Career Impact DLD. Bug# 2027984.
45 --pmarada 27-nov-2001 Modified the adv_stand_trans procedure as part of AVCR001 Advanced standing dld..
46 --pradhakr 06-Dec-2001 Added the column deg_aud_detail_id as part of Degree Audit Interfacec build. (Bug# 2033208)
47 --svenkata 20-Dec-2001 Added columns student_career_transcript and Student_career_statistics as part of build Career
48 -- Impact Part2 . Bug #2158626
49 --svenkata 7-JAN-2002 Bug No. 2172405 Standard Flex Field columns have been added
50 -- to table handler procedure calls as part of CCR - ENCR022.
51 --Nalin Kumar 28-Jan-2002 Added Procedure 'enrp_ins_sca_ukstat_trnsfr' and modified function enrp_ins_susa_trnsfr
52 -- procedure as pert of the HESA Intregation DLD (ENCR019). Bug# 2201753.
53 --prraj 21-Feb-2002 Added column QUAL_DETS_ID to the tbh calls of pkg
54 -- IGS_AV_STND_UNIT_LVL_PKG (Bug# 2233334)
55 --Added refernces to column ORG_UNIT_CD in call to IGS_EN_SU_ATTEMPT TBH call as a part of bug 1964697
56 --pmarada 24-Feb-2002 Added the copy-hesa_details Procedure, for the hesa requirment.
57 --Nishikant 03-May-2002 The Local procedure enrpl_copy_adm_unit_sets got modified to make Unit Sets Confirmed if
58 -- Program attempt got confirmed - due to the Enhancement Bug#2347141
59 --smadadli 14-may-2002 Modified procedures copy_hesa_details , enrp_ins_snew_prenrl , enrp_ins_sret_prenrl for bug#2350629
60 --pmarada 23 -May-2002 Modified the c_us_version_number cursor, to fetch the next year from the program offerring option.
61 --nalkumar 05-June-2002 Removed the referances of the igs_av_stnd_unit/unit_lvl_pkg.(PREV_UNIT_CD and TEST_DETAILS_ID) parameter.
62 -- Modified the call to the igs_av_stnd_unit_pkg and igs_av_stnd_unit_lvl_pkg as per the bug# 2401170.
63 --smaddali 12-jun-2002 bug 2391799 modified procedure enrpl_copy_adm_unit_sets
64 --Nishikant 07OCT2002 UK Enhancement Build - Enh Bug#2580731 - Added the parameter p_selection_date in the Function Enrp_Ins_Sret_Prenrl
65 --kkillams 16-06-2003 Three new parameters are added to the Enrp_Ins_Snew_Prenrl and Enrp_Ins_Sret_Prenrl functions
66 -- ENRP_INS_PRE_POS, ENRPL_CREATE_POS_SUA,ENRPL_COPY_ADM_SUA and ENRPL_COPY_PARAM_SUA procedures are modified as per TD
67 -- w.r.t. bug no 2829270
68 --ptandon 6-Oct-2003 Modified the Procedure Enrp_Ins_Sua_Hist, Function Enrp_Vald_Inst_Sua, Procedure enrpl_copy_adm_sua
69 -- and Procedure enrpl_copy_param_sua(Inline procedures of Enrp_Ins_Snew_Prenrl), Procedure enrpl_copy_param_sua
70 -- (Inline procedure of Enrp_Ins_Sret_Prenrl) as part of Prevent Dropping Core Units. Enh Bug# 3052432.
71 --svanukur 19-oct-2003 MOdified procedure enrpl_copy_param_sua, enrpl_copy_adm_sua in Enrp_Ins_Snew_Prenrl and Enrp_Ins_Sret_Prenrl
72 -- as part of placements build 3052438.
73 --ptandon 11-Dec-2003 Modified procedure adv_stand_trans as part of Bug# 3271754.
74 --ptandon 29-Dec-2003 Removed the Exception Handling sections of functions Enrp_Ins_Sut_Trnsfr and Enrp_Ins_Sua_Trnsfr
75 -- so that the correct error message is displayed. Bug# 3328083 and 3328268.
76 --ptandon 13-Feb-2004 Modified the exception handling sections of enrpl_upd_candidature, enrpl_create_sca and enrp_ins_snew_prenrl
77 -- to log messages using FND logging instead of throwing unhandled exceptions. Bug# 3360336.
78 --ptandon 23-Feb-2004 Modified procedure adv_stand_trans as part of Bug# 3461036.
79 -- amuthu 21-NOV-2004 Modified as part of program transfer build, modified enrp_ins_sua_trnsfr.
80 -- Added new procedure to copy outcome and placement details and added a call to the same in enrp_ins_sua_trnsfr
81 -- ckasu 08-DEC-2004 modfied enrf_unit_from_past procedure as a part of bug#4048203 inorder
82 -- to move the status of dicontinue,completed unit attempts as same only
83 -- when load calendar into which units enrolled equals the effective term
84 -- calendar for Transfer.
85 -- ckasu 11-Dec-2004 Modified Enrp_del_all_Sua_Trnsfr inorder to retain unselected enrolled or waitlisted or invalid units
86 -- when transfer is across careers and discontinue source is set to no and removed Enrp_del_Sua_Trnsfr
87 -- as a part of bug#4061818
88 -- ckasu 21-Dec-2004 modified Enrp_Ins_Sua_Trnsfr procedure inorder to Transfer Unit outcomes in ABA Transfer as a part
89 -- of bug# 4080883
90 -- smaddali 21-dec-04 Modified procedure enrp_ins_sua_trnsfr ,Enrp_del_all_Sua_Trnsfr for bug#4083358
91 -- sgurusam 17-Jun-05 Modified function enrp_vald_inst_sua, to pass additional parameter p_calling_obj= 'JOB'
92 -- Modified function Enrp_Ins_Sua_Trnsfr to pass additional parameter SS_SOURCE_IND='A' and UPD_AUDIT_FLAG='N'
93 -- Modified function Enrp_del_all_Sua_Trnsfr to add parameters for upd_audit_ind and ss_source_ind
94 -- ckasu 28-Oct-2005 Impact for changes to check_usa_overlap as a part of bug #4672177
95 -- smaddali 14-nov-05 modified enrp_ins_suai_trnsfr for bug#4701301
96 -- stuta 26-Nov-05 modified enrp_ins_suai_trnsfr for bug#4744323
97 -- smaddali 16-jan-2006 Modified cursors for performance repository bug#3699726
98 -- ckasu 07-MAR-2006 modified as a part of bug#5070730
99 -------------------------------------------------------------------------------------------
100 g_module_head CONSTANT VARCHAR2(40) := 'igs.plsql.igs_en_gen_010.';
101 --
102 FUNCTION create_stream_unit_sets(
103 p_person_id IN NUMBER,
104 p_course_cd IN VARCHAR2,
105 p_new_admin_unit_set IN VARCHAR2,
106 p_selection_dt IN DATE,
107 p_confirmed_ind IN VARCHAR2,
108 p_log_creation_dt IN DATE,
109 p_message_name OUT NOCOPY VARCHAR2
110 )
111 RETURN BOOLEAN;
112 FUNCTION create_unit_set(
113 p_person_id IN NUMBER,
114 p_course_cd IN VARCHAR2,
115 p_unit_set_cd IN VARCHAR2,
116 p_us_version_number IN NUMBER,
117 p_selection_dt IN DATE,
118 p_confirmed_ind IN VARCHAR2,
119 p_authorised_person_id IN NUMBER,
120 p_authorised_on IN DATE,
121 p_seqval OUT NOCOPY NUMBER,
122 p_log_creation_dt IN DATE,
123 p_message_name OUT NOCOPY VARCHAR2
124 )
125 RETURN BOOLEAN;
126
127 FUNCTION update_stream_unit_sets(
128 p_person_id IN NUMBER,
129 p_course_cd IN VARCHAR2,
130 p_old_admin_unit_set IN VARCHAR2,
131 p_rqrmnts_complete_ind IN VARCHAR2,
132 p_rqrmnts_complete_dt IN DATE,
133 p_selection_dt IN DATE,
134 p_confirmed_ind IN VARCHAR2,
135 p_log_creation_dt IN DATE,
136 p_message_name OUT NOCOPY VARCHAR2
137 )
138 RETURN BOOLEAN;
139 PROCEDURE log_error_message(p_s_log_type VARCHAR2,
140 p_creation_dt DATE,
141 p_sle_key VARCHAR2,
142 p_sle_message_name VARCHAR2,
143 p_del VARCHAR2);
144
145 FUNCTION enrp_val_sua_cnfrm_before_pt(
146 p_person_id IN NUMBER ,
147 p_course_cd IN VARCHAR2 ,
148 p_unit_cd IN VARCHAR2 ,
149 p_uv_version_number NUMBER ,
150 p_cal_type IN VARCHAR2 ,
151 p_ci_sequence_number IN NUMBER ,
152 p_ci_end_dt IN DATE ,
153 p_location_cd IN VARCHAR2 ,
154 p_unit_class IN VARCHAR2 ,
155 p_enrolled_dt IN DATE ,
156 p_fail_type OUT NOCOPY VARCHAR2 ,
157 p_message_name OUT NOCOPY varchar2 )
158 RETURN BOOLEAN;
159
160
161 PROCEDURE copy_hesa_details (
162 p_person_id IN NUMBER,
163 p_course_cd IN VARCHAR2,
164 p_crv_version_number IN VARCHAR2,
165 p_old_unit_set_cd IN VARCHAR2,
166 p_old_us_version_number IN NUMBER,
167 p_old_sequence_number IN NUMBER ,
168 p_new_unit_set_cd IN VARCHAR2,
169 p_new_us_version_number IN NUMBER,
170 p_new_sequence_number IN NUMBER
171 ) IS
172 -------------------------------------------------------------------------------------------
173 --Change History:
174 --Who When What
175 -- smadali 14-may-2002 modified exception part to raise the exception ,
176 -- added new parameter p_old_sequence_number and
177 -- renamed p_sequence_number to p_new_sequence_number,for bug#2350629
178 -------------------------------------------------------------------------------------------
179
180 l_message_name VARCHAR2(2000) ;
181 l_status NUMBER;
182
183 BEGIN
184 --copying the hesa details, call to the hesa enr procedure, hesa requirment, pmarada.
185 IF fnd_profile.value('OSS_COUNTRY_CODE') = 'GB' THEN
186 l_message_name := NULL;
187 l_Status := NULL;
188 IGS_EN_HESA_PKG.HESA_STATS_ENR(
189 p_person_id => p_person_id,
190 p_course_cd => p_course_cd,
191 p_crv_version_number => p_crv_version_number,
192 p_message => l_message_name,
193 p_status => l_status);
194
195 IF NVL(l_Status,0) = 2 THEN -- ie. The procedure call has resulted in error.
196 Fnd_Message.Set_Name('IGS', l_message_name);
197 IGS_GE_MSG_STACK.ADD;
198 App_Exception.Raise_Exception;
199 END IF;
200
201 -- Calling the Hesa procedure
202 l_message_name := NULL;
203 l_Status := NULL;
204 IGS_EN_HESA_PKG.hesa_susa_enr(p_person_id => p_person_id,
205 p_course_cd => p_course_cd,
206 p_crv_version_number => p_crv_version_number,
207 p_old_unit_set_cd => p_old_unit_set_cd,
208 p_old_us_version_number => p_old_us_version_number,
209 p_old_sequence_number => p_old_sequence_number,
210 p_new_unit_set_cd => p_new_unit_set_cd,
211 p_new_us_version_number => p_new_us_version_number,
212 p_new_sequence_number => p_new_sequence_number,
213 p_message => l_message_name,
214 p_status => l_status);
215 IF NVL(l_Status,0) = 2 THEN -- ie. The procedure call has resulted in error.
216 Fnd_Message.Set_Name('IGS', l_message_name);
217 IGS_GE_MSG_STACK.ADD;
218 App_Exception.Raise_Exception;
219 END IF;
220
221 END IF; -- IF fnd_profile.value('OSS_COUNTRY_CODE') = 'GB'
222
223 EXCEPTION
224 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
225 RAISE;
226 WHEN OTHERS THEN
227 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
228 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.copy_hesa_details');
229 IGS_GE_MSG_STACK.ADD;
230 App_Exception.Raise_Exception;
231
232 END copy_hesa_details;
233
234 FUNCTION Enrp_Ins_Snew_Prenrl(
235 p_person_id IN NUMBER ,
236 p_course_cd IN VARCHAR2 ,
237 p_enrolment_cat IN VARCHAR2 ,
238 p_acad_cal_type IN VARCHAR2 ,
239 p_acad_sequence_number IN NUMBER ,
240 p_units_indicator IN VARCHAR2 ,
241 p_dflt_confirmed_course_ind IN VARCHAR2 ,
242 p_override_enr_form_due_dt IN DATE ,
243 p_override_enr_pckg_prod_dt IN DATE ,
244 p_check_eligibility_ind IN VARCHAR2 ,
245 p_acai_admission_appl_number IN NUMBER ,
246 p_acai_nominated_course_cd IN VARCHAR2 ,
247 p_acai_sequence_number IN NUMBER ,
248 p_unit1_unit_cd IN VARCHAR2 ,
249 p_unit1_cal_type IN VARCHAR2 ,
250 p_unit1_location_cd IN VARCHAR2 ,
251 p_unit1_unit_class IN VARCHAR2 ,
252 p_unit2_unit_cd IN VARCHAR2 ,
253 p_unit2_cal_type IN VARCHAR2 ,
254 p_unit2_location_cd IN VARCHAR2 ,
255 p_unit2_unit_class IN VARCHAR2 ,
256 p_unit3_unit_cd IN VARCHAR2 ,
257 p_unit3_cal_type IN VARCHAR2 ,
258 p_unit3_location_cd IN VARCHAR2 ,
259 p_unit3_unit_class IN VARCHAR2 ,
260 p_unit4_unit_cd IN VARCHAR2 ,
261 p_unit4_cal_type IN VARCHAR2 ,
262 p_unit4_location_cd IN VARCHAR2 ,
263 p_unit4_unit_class IN VARCHAR2 ,
264 p_unit5_unit_cd IN VARCHAR2 ,
265 p_unit5_cal_type IN VARCHAR2 ,
266 p_unit5_location_cd IN VARCHAR2 ,
267 p_unit5_unit_class IN VARCHAR2 ,
268 p_unit6_unit_cd IN VARCHAR2 ,
269 p_unit6_cal_type IN VARCHAR2 ,
270 p_unit6_location_cd IN VARCHAR2 ,
271 p_unit6_unit_class IN VARCHAR2 ,
272 p_unit7_unit_cd IN VARCHAR2 ,
273 p_unit7_cal_type IN VARCHAR2 ,
274 p_unit7_location_cd IN VARCHAR2 ,
275 p_unit7_unit_class IN VARCHAR2 ,
276 p_unit8_unit_cd IN VARCHAR2 ,
277 p_unit8_cal_type IN VARCHAR2 ,
278 p_unit8_location_cd IN VARCHAR2 ,
279 p_unit8_unit_class IN VARCHAR2 ,
280 p_log_creation_dt IN DATE ,
281 p_warn_level IN OUT NOCOPY VARCHAR2 ,
282 p_message_name OUT NOCOPY VARCHAR2 ,
283 --smaddali addded these 18 params for YOP-EN build bug#2156956
284 p_unit9_unit_cd IN VARCHAR2 ,
285 p_unit9_cal_type IN VARCHAR2 ,
286 p_unit9_location_cd IN VARCHAR2 ,
287 p_unit9_unit_class IN VARCHAR2 ,
288 p_unit10_unit_cd IN VARCHAR2 ,
289 p_unit10_cal_type IN VARCHAR2 ,
290 p_unit10_location_cd IN VARCHAR2 ,
291 p_unit10_unit_class IN VARCHAR2 ,
292 p_unit11_unit_cd IN VARCHAR2 ,
293 p_unit11_cal_type IN VARCHAR2 ,
294 p_unit11_location_cd IN VARCHAR2 ,
295 p_unit11_unit_class IN VARCHAR2 ,
296 p_unit12_unit_cd IN VARCHAR2 ,
297 p_unit12_cal_type IN VARCHAR2 ,
298 p_unit12_location_cd IN VARCHAR2 ,
299 p_unit12_unit_class IN VARCHAR2 ,
300 p_unit_set_cd1 IN VARCHAR2 ,
301 p_unit_set_cd2 IN VARCHAR2 ,
302 p_progress_stat IN VARCHAR2 ,
303 p_dflt_enr_method IN VARCHAR2 ,
304 p_load_cal_type IN VARCHAR2 ,
305 p_load_ci_seq_num IN NUMBER)
306 RETURN BOOLEAN AS
307 /* HISTORY
308 WHO WHEN WHAT
309 bdeviset 29-JUL-2004 Before calling IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW/INSERT_ROW in a check is
310 made to see that their is no overlapping of selection,completion and
311 end dates for any two unit sets by calling check_usa_overlap.If it returns
312 false log entry is made and the insert or update is not carried out for bug 3149133.
313 knag 29-OCT-2002 Bug 2647482 addded parameters attendance_mode, location_cd for calculation
314 of proposed completion date by procedure igs_ad_gen_004.admp_get_crv_comp_dt
315 ayedubat 4-JUN-2002 Changed the Code of YOP for default Unit Set pre-enrollment before
316 the Units pre-enrollment Code for the bug fix: 2391842
317 ayedubat 25-MAY-2002 Changed the cursors c_acaiv and c_acaiv1 to replace the view,IGS_AD_PS_APPL_INST_APLINST_V
318 with the base table,IGS_AD_PS_APPL_INST as part of the bug fix:2384449
319 ayedubat 21-MAY-2002 Modified the cursor,c_first_us to select always the Unit Set with mapping
320 sequence number of '1' as part of the bug fix:2348709
321 ayedubat 15-MAY-2002 Changed the cursor,c_chk_census_dt to consider only the SUA records with
322 unit attempt status 'ENROLLED','DISCONTIN','DUPLICATE' or 'COMPLETED' and
323 also added the TRUNC to SYDATE as part of the bug:2372892
324 svanukur 10-jul-2003 checking for parameter P_PROGRESS_STAT , if it is set to 'ADVANCE' as part of bug #3043374
325 knaraset 06-Aug-2003 Modified the Pre-enrollment of new students to pass NULL for Nominated completion columns while
326 creation of program attempt, and also removed the references to Admission's Nominated/expected completion columns.
327 ptandon 06-Oct-2003 Modified the inline procedures enrpl_copy_adm_sua and enrpl_copy_param_sua
328 as part of Prevent Dropping Core Units. Enh Bug# 3052432.
329 svanukur 02-jul-2004 MOdified Pre-enrollment of new students to pass the selection date of unit set attempts
330 as the SPA commencement date instead of the sysdate in the YOP mode
331 as part of bug fix 3687470
332 svanukur 20-jul-2004 Added a check after call to procedure enrpl_create_pos_sua to return false to igs_en_gen_008
333 so that the message successfully preenrolled is not shown in the log file. BUG 3032588.
334
335 */
336 BEGIN -- enrp_ins_snew_prenrl
337 -- This process will pre-enrol a single new student in the specified
338 -- IGS_PS_COURSE. The following steps will be performed :
339 -- * Check the students eligibility to enrol in the specified IGS_PS_COURSE
340 -- in the specified academic calendar.
341 -- * Create a IGS_EN_STDNT_PS_ATT record
342 -- * Create a IGS_AS_SC_ATMPT_ENR record
343 -- * Create any required IGS_AS_SU_SETATMPT details
344 -- * Create default IGS_EN_STDNTPSHECSOP details
345 -- * Pre-enrol IGS_PS_UNIT attempts entered during Admissions, as parameter
346 -- to the process or through the Pattern of Study.
347 -- If at any point it becomes impossible to pre-enrol the student,
348 -- the routine will return FALSE and message number of a message
349 -- indicating the reason for failure ; the log error indicator will be
350 -- set if the error is one that should be logged if the pre-enrolments
351 -- were happening in batch. This can be used by the calling routine
352 -- (whether batch or online) to indicate who was and wasn?t pre-enrolled.
353 -- Notes:
354 -- p_check_eligbility_ind
355 -- If this indicator is set to 'N' then the routine will assume that
356 -- all of the eligibility checks associated with pre-enrolment have
357 -- been already checked. eg. If the routine is called from admissions
358 -- where all of these checks were performed prior to the offer being
359 -- allowed.
360 -- p_acai_nominated_course_cd
361 -- p_acai_sequence_number
362 -- If these values are specified then they will be used to search for
363 -- the require details from the acai table. This should be used when
364 -- the admissions context is already known.
365 -- p_log_creation_dt
366 -- The creation date of the log for the session of pre-enrolments. This
367 -- is designed to be used only when the pre-enrolment process is being
368 -- run in batch mode. The log is of type ?PRE-ENROL?. It is up to the
369 -- calling routine to ensure that the log has already been created ;
370 -- this process (and called processes) will only add entries to the
371 -- existing log.
372 -- To pre-enrol units as parameters it is assumed that the first
373 -- IGS_PS_UNIT is specified
374
375 DECLARE
376 e_resource_busy EXCEPTION;
377 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
378
379 -- Cursor to fetch the admission details of the list of students identified for pre-enrollment
380 CURSOR c_acaiv IS
381 SELECT acaiv.person_id,
382 aa.acad_cal_type,
383 NVL(acaiv.adm_cal_type,aa.adm_cal_type) adm_cal_type,
384 NVL(acaiv.adm_ci_sequence_number,aa.adm_ci_sequence_number) adm_ci_sequence_number,
385 acaiv.location_cd,
386 acaiv.attendance_type,
387 acaiv.attendance_mode,
388 acaiv.admission_appl_number,
389 acaiv.nominated_course_cd,
390 acaiv.sequence_number,
391 acaiv.course_cd,
392 acaiv.crv_version_number,
393 acaiv.fee_cat,
394 acaiv.correspondence_cat,
395 acaiv.enrolment_cat,
396 acaiv.unit_set_cd,
397 acaiv.us_version_number,
398 acaiv.hecs_payment_option,
399 acaiv.adm_outcome_status,
400 acaiv.funding_source,
401 aa.admission_cat,
402 aa.s_admission_process_type,
403 aos.s_adm_outcome_status,
404 acaiv.adm_cndtnl_offer_status,
405 acaiv.adm_offer_resp_status,
406 aors.s_adm_offer_resp_status,
407 acaiv.actual_response_dt,
408 acaiv.expected_completion_yr,
409 acaiv.expected_completion_perd,
410 acaiv.offer_dt
411 FROM IGS_AD_PS_APPL_INST acaiv,
412 IGS_AD_APPL aa,
413 IGS_AD_OU_STAT aos,
414 IGS_AD_OFR_RESP_STAT aors
415 WHERE
416 acaiv.person_id = p_person_id AND
417 acaiv.course_cd = p_course_cd AND
418 aa.acad_cal_type = p_acad_cal_type AND
419 aa.acad_ci_sequence_number = p_acad_sequence_number AND
420 aa.person_id = acaiv.person_id AND
421 aa.admission_appl_number = acaiv.admission_appl_number AND
422 aos.adm_outcome_status = acaiv.adm_outcome_status AND
423 aors.adm_offer_resp_status = acaiv.adm_offer_resp_status AND
424 aos.s_adm_outcome_status IN ('OFFER','COND-OFFER') AND
425 aors.s_adm_offer_resp_status NOT IN ('LAPSED','REJECTED')
426 ORDER BY acaiv.offer_dt DESC;
427
428 -- Cursor to fetch the admission details of the list of students identified for pre-enrollment
429 CURSOR c_acaiv1 IS
430 SELECT acaiv.person_id,
431 aa.acad_cal_type,
432 NVL(acaiv.adm_cal_type,aa.adm_cal_type) adm_cal_type,
433 NVL(acaiv.adm_ci_sequence_number,aa.adm_ci_sequence_number) adm_ci_sequence_number,
434 acaiv.location_cd,
435 acaiv.attendance_type,
436 acaiv.attendance_mode,
437 acaiv.admission_appl_number,
438 acaiv.nominated_course_cd,
439 acaiv.sequence_number,
440 acaiv.course_cd,
441 acaiv.crv_version_number,
442 acaiv.fee_cat,
443 acaiv.correspondence_cat,
444 acaiv.enrolment_cat,
445 acaiv.unit_set_cd,
446 acaiv.us_version_number,
447 acaiv.hecs_payment_option,
448 acaiv.adm_outcome_status,
449 acaiv.funding_source,
450 aa.admission_cat,
451 aa.s_admission_process_type,
452 aos.s_adm_outcome_status,
453 acaiv.adm_cndtnl_offer_status,
454 acaiv.adm_offer_resp_status,
455 aors.s_adm_offer_resp_status,
456 acaiv.actual_response_dt,
457 acaiv.expected_completion_yr,
458 acaiv.expected_completion_perd,
459 acaiv.offer_dt
460 FROM IGS_AD_PS_APPL_INST acaiv,
461 IGS_AD_APPL aa,
462 IGS_AD_OU_STAT aos,
463 IGS_AD_OFR_RESP_STAT aors
464 WHERE acaiv.person_id = p_person_id AND
465 acaiv.course_cd = p_course_cd AND
466 acaiv.admission_appl_number = p_acai_admission_appl_number AND
467 acaiv.nominated_course_cd = p_acai_nominated_course_cd AND
468 acaiv.sequence_number = p_acai_sequence_number AND
469 aa.person_id = acaiv.person_id AND
470 aa.admission_appl_number = acaiv.admission_appl_number AND
471 aos.adm_outcome_status = acaiv.adm_outcome_status AND
472 aors.adm_offer_resp_status = acaiv.adm_offer_resp_status;
473
474 v_acaiv_rec c_acaiv%ROWTYPE;
475 -- output variables
476 v_message_name VARCHAR2(2000) ;
477 v_warn_level VARCHAR2(10);
478
479 -- variables which store values that are used when inserting new records
480 -- or updating existing records.
481 v_funding_source IGS_FI_FND_SRC_RSTN.funding_source%TYPE;
482 v_fee_cat IGS_FI_FEE_CAT_MAP.fee_cat%TYPE ;
483 v_correspondence_cat IGS_CO_CAT_MAP.correspondence_cat%TYPE
484 ;
485 v_attendance_mode VARCHAR2(3) ;
486 v_sca_commencement_dt DATE ;
487 v_adm_added_ind VARCHAR2(1);
488 v_parm_added_ind VARCHAR2(1);
489 v_provisional_ind VARCHAR2(1);
490 -- p_warn_level types
491 cst_error CONSTANT VARCHAR2(5) := 'ERROR';
492 cst_minor CONSTANT VARCHAR2(5) := 'MINOR';
493 cst_major CONSTANT VARCHAR2(5) := 'MAJOR';
494 l_enc_message_name VARCHAR2(2000);
495 l_app_short_name VARCHAR2(10);
496 l_message_name VARCHAR2(100);
497 l_mesg_txt VARCHAR2(4000);
498 l_msg_index NUMBER;
499
500 --bmerugu added for build 319
501 l_sua_create BOOLEAN := TRUE;
502
503 -- other constants
504 cst_deleted CONSTANT VARCHAR2(10) := 'DELETED';
505 cst_discontin CONSTANT VARCHAR2(10) := 'DISCONTIN';
506 cst_inactive CONSTANT VARCHAR2(10) := 'INACTIVE';
507 cst_lapsed CONSTANT VARCHAR2(10) := 'LAPSED';
508 cst_new CONSTANT VARCHAR2(10) := 'NEW';
509 cst_pre_enrol CONSTANT VARCHAR2(10) := 'PRE-ENROL';
510 cst_unconfirm CONSTANT VARCHAR2(10) := 'UNCONFIRM';
511 cst_accepted CONSTANT VARCHAR2(10) := 'ACCEPTED';
512 cst_cond_offer CONSTANT VARCHAR2(10) := 'COND-OFFER';
513 cst_offer CONSTANT VARCHAR2(10) := 'OFFER';
514 cst_pending CONSTANT VARCHAR2(10) := 'PENDING';
515 cst_fee_cntrct CONSTANT VARCHAR2(10) := 'FEE-CNTRCT';
516
517 -- smaddali added these new cursors and function for YOP-EN dld bug#2156956
518 l_confirmed_ind VARCHAR2(1);
519 l_seqval igs_as_su_setatmpt.sequence_number%TYPE ;
520 v_selection_dt igs_as_su_setatmpt.selection_dt%TYPE ;
521 v_rqrmnts_complete_dt igs_as_su_setatmpt.rqrmnts_complete_dt%TYPE;
522
523 -- checks the eligibility of the student to be moved to the next year of program (unit set)
524 -- by checking if there is any outcome preventing the progress of the student program attempt
525 CURSOR c_prog_outcome(cp_select_dt igs_as_su_setatmpt.selection_dt%TYPE) IS
526 SELECT pou.decision_dt, pout.s_progression_outcome_type
527 FROM igs_pr_stdnt_pr_ou_all pou , igs_pr_ou_type pout
528 WHERE pou.person_id = p_person_id AND
529 pou.course_cd = p_course_cd AND
530 pou.decision_status = 'APPROVED' AND
531 pou.decision_dt IS NOT NULL AND
532 pou.decision_dt > cp_select_dt AND
533 pou.progression_outcome_type = pout.progression_outcome_type
534 ORDER BY pou.decision_dt desc ;
535 c_prog_outcome_rec c_prog_outcome%ROWTYPE;
536 gv_progress_outcome_type igs_pr_ou_type.s_progression_outcome_type%TYPE;
537
538
539 -- get the currently active unit set for the person course attempt
540 CURSOR c_active_us IS
541 SELECT susa.*
542 FROM igs_as_su_setatmpt susa , igs_en_unit_set us , igs_en_unit_set_cat usc
543 WHERE susa.person_id = p_person_id AND
544 susa.course_cd = p_course_cd AND
545 susa.selection_dt IS NOT NULL AND
546 susa.end_dt IS NULL AND
547 susa.rqrmnts_complete_dt IS NULL AND
548 susa.unit_set_cd = us.unit_set_cd AND
549 us.unit_set_cat = usc.unit_set_cat AND
550 usc.s_unit_set_cat = 'PRENRL_YR' ;
551 c_active_us_rec c_active_us%ROWTYPE;
552
553 --get the next unit set in sequence
554 CURSOR c_next_us(cp_unit_set_cd igs_ps_us_prenr_cfg.unit_set_cd%TYPE) IS
555 SELECT cf1.unit_set_cd , cf1.sequence_no
556 FROM igs_ps_us_prenr_cfg cf1 , igs_ps_us_prenr_cfg cf2
557 WHERE cf2.mapping_set_cd = cf1.mapping_set_cd AND
558 cf2.unit_set_cd = cp_unit_set_cd AND
559 cf1.sequence_no > cf2.sequence_no
560 ORDER BY cf1.sequence_no asc;
561 c_next_us_rec c_next_us%ROWTYPE;
562
563 CURSOR c_us_version_number(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
564 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE,
565 cp_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE) IS
566 SELECT coous.us_version_number
567 FROM igs_en_unit_set_stat uss, igs_ps_ofr_opt_unit_set_v coous, igs_en_stdnt_ps_att sca
568 WHERE sca.person_id = cp_person_id AND
569 sca.course_cd = cp_course_cd AND
570 sca.coo_id = coous.coo_id AND
571 coous.unit_set_cd = cp_unit_set_cd AND
572 coous.expiry_dt IS NULL AND
573 coous.unit_set_status = uss.unit_set_status AND
574 uss.s_unit_set_status = 'ACTIVE' ;
575 next_us_version igs_en_unit_set.version_number%TYPE;
576
577 -- Modified the cursor to select always the Unit Set with mapping sequence number of '1'
578 -- not the first unit set in mapping by ayedubat as part of the bug fix:2348709
579 CURSOR c_first_us IS
580 SELECT coou.unit_set_cd, coou.us_version_number
581 FROM igs_ps_ofr_opt_unit_set_v coou , igs_en_unit_set_cat usc
582 WHERE coou.course_cd = p_course_cd AND
583 coou.crv_version_number = v_acaiv_rec.crv_version_number AND
584 coou.cal_type = v_acaiv_rec.acad_cal_type AND
585 coou.location_cd = v_acaiv_rec.location_cd AND
586 coou.attendance_mode = v_acaiv_rec.attendance_mode AND
587 coou.attendance_type = v_acaiv_rec.attendance_type AND
588 coou.unit_set_cat = usc.unit_set_cat AND
589 usc.s_unit_set_cat = 'PRENRL_YR' AND
590 coou.unit_set_cd IN ( SELECT a.unit_set_cd
591 FROM igs_ps_us_prenr_cfg a
592 WHERE a.sequence_no = 1 );
593
594 l_first_us c_first_us%ROWTYPE ;
595 l_us_cat VARCHAR2(1);
596 v_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE;
597 l_rowid VARCHAR2(25);
598
599 CURSOR c_chk_census_dt(cp_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE) IS
600 SELECT sua.*
601 FROM igs_en_sua_year_v sua
602 WHERE sua.person_id = p_person_id AND
603 sua.course_cd = p_course_cd AND
604 sua.unit_set_cd = cp_unit_set_cd AND
605 sua.unit_attempt_status IN ('ENROLLED','DISCONTIN','DUPLICATE','COMPLETED') AND
606 IGS_EN_GEN_015.get_effective_census_date(Null,Null,sua.cal_type,sua.ci_sequence_number) < TRUNC(SYSDATE) ;
607 c_census_dt_rec c_chk_census_dt%ROWTYPE ;
608
609 -- check if susa already exists and if so update it
610 CURSOR c_exists_susa(cp_unit_set_cd igs_as_su_setatmpt.unit_set_cd%TYPE ,
611 cp_us_version_number igs_as_su_setatmpt.us_version_number%TYPE ) IS
612 SELECT sequence_number , student_confirmed_ind
613 FROM IGS_AS_SU_SETATMPT
614 WHERE person_id = p_person_id AND
615 course_cd = p_course_cd AND
616 unit_set_cd = cp_unit_set_cd AND
617 us_version_number = cp_us_version_number ;
618 c_exists_susa_rec c_exists_susa%ROWTYPE ;
619
620 CURSOR c_susa_upd ( cp_unit_set_cd igs_as_su_setatmpt.unit_set_cd%TYPE ,
621 cp_us_version_number igs_as_su_setatmpt.us_version_number%TYPE ,
622 cp_sequence_number igs_as_su_setatmpt.sequence_number%TYPE ) IS
623 SELECT rowid,IGS_AS_SU_SETATMPT.*
624 FROM IGS_AS_SU_SETATMPT
625 WHERE person_id = p_person_id AND
626 course_cd = p_course_cd AND
627 unit_set_cd = cp_unit_set_cd AND
628 us_version_number = cp_us_version_number AND
629 sequence_number = cp_sequence_number
630 FOR UPDATE OF RQRMNTS_COMPLETE_IND ,
631 RQRMNTS_COMPLETE_DT , student_confirmed_ind NOWAIT;
632 c_susa_upd_rec c_susa_upd%ROWTYPE ;
633
634 CURSOR c_load_cal(p_acad_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
635 p_acad_seq_num IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
636 SELECT rel.sub_cal_type, rel.sub_ci_sequence_number FROM igs_ca_inst_rel rel,
637 igs_ca_inst ci,
638 igs_ca_type cal
639 WHERE rel.sup_cal_type = p_acad_cal_type
640 AND rel.sup_ci_sequence_number = p_acad_seq_num
641 AND rel.sub_cal_type = ci.cal_type
642 AND rel.sub_ci_sequence_number = ci.sequence_number
643 AND rel.sub_cal_type = cal.cal_type
644 AND cal.s_cal_cat = 'LOAD'
645 AND cal.closed_ind = 'N'
646 ORDER BY ci.start_dt;
647
648 CURSOR cur_spa IS
649 SELECT spa.commencement_dt
650 FROM IGS_EN_STDNT_PS_ATT spa
651 WHERE spa.person_id = p_person_id AND
652 spa.course_cd = p_course_cd;
653
654 l_load_cal_type igs_ca_inst.cal_type%TYPE;
655 l_load_seq_num igs_ca_inst.sequence_number%TYPE;
656 l_enr_method igs_en_method_type.enr_method_type%TYPE;
657 l_return_status VARCHAR2(20);
658 l_dummy_mesg VARCHAR2(100);
659 FUNCTION prenrl_year (cp_unit_set_cd IN igs_en_unit_set.unit_set_cd%TYPE)
660 RETURN BOOLEAN AS
661 BEGIN
662 DECLARE
663 CURSOR c_us_cat IS
664 SELECT 'X'
665 FROM igs_en_unit_set us , igs_en_unit_set_cat usc
666 WHERE us.unit_set_cd = cp_unit_set_cd AND
667 us.unit_set_cat = usc.unit_set_cat AND
668 usc.s_unit_set_cat = 'PRENRL_YR' ;
669 l_us_cat c_us_cat%ROWTYPE ;
670 BEGIN
671 OPEN c_us_cat ;
672 FETCH c_us_cat INTO l_us_cat ;
673 IF c_us_cat%FOUND THEN
674 CLOSE c_us_cat ;
675 RETURN TRUE;
676 ELSE
677 CLOSE c_us_cat;
678 RETURN FALSE;
679 END IF;
680 END ;
681 END prenrl_year;
682 -- end of changes by smaddali
683
684 FUNCTION enrpl_check_eligibility (
685 p_message_name OUT NOCOPY Varchar2 )
686 RETURN BOOLEAN
687 AS
688
689 BEGIN -- enrpl_check_eligibility
690 -- Check the eligibility of the student to enrol in the
691 -- specified IGS_PS_COURSE in the specified academic calendar.
692 DECLARE
693 v_message_name VARCHAR(2000);
694 BEGIN
695 p_message_name := null;
696 -- Call routine to check the eligibility of the student.
697 IF NOT IGS_EN_GEN_006.ENRP_GET_SCA_ELGBL(
698 p_person_id,
699 p_course_cd,
700 cst_new,
701 p_acad_cal_type,
702 p_acad_sequence_number,
703 p_dflt_confirmed_course_ind,
704 v_message_name) THEN
705 IF p_log_creation_dt IS NOT NULL THEN
706 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
707 cst_pre_enrol,
708 p_log_creation_dt,
709 cst_minor || ',' ||
710 TO_CHAR(p_person_id) || ',' ||
711 p_course_cd,
712 v_message_name,
713 NULL);
714 END IF;
715 p_message_name := v_message_name;
716 RETURN FALSE;
717 END IF;
718 RETURN TRUE;
719 END;
720 EXCEPTION
721 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
722 RAISE;
723 WHEN OTHERS THEN
724 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
725 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_check_eligibility');
726 IGS_GE_MSG_STACK.ADD;
727 App_Exception.Raise_Exception;
728
729 END enrpl_check_eligibility;
730
731 FUNCTION enrpl_check_offer(
732 p_warn_level OUT NOCOPY VARCHAR2,
733 p_message_name OUT NOCOPY varchar2 )
734 RETURN BOOLEAN
735 AS
736
737 BEGIN -- enrpl_check_offer
738 DECLARE
739 BEGIN
740 p_warn_level := NULL;
741 p_message_name := null;
742 IF p_acai_admission_appl_number IS NULL OR
743 p_acai_nominated_course_cd IS NULL OR
744 p_acai_sequence_number IS NULL THEN
745 OPEN c_acaiv;
746 FETCH c_acaiv INTO v_acaiv_rec;
747 IF c_acaiv%NOTFOUND THEN
748 CLOSE c_acaiv;
749 IF p_log_creation_dt IS NOT NULL THEN
750 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
751 cst_pre_enrol,
752 p_log_creation_dt,
753 cst_error || ',' ||
754 TO_CHAR(p_person_id) || ',' ||
755 p_course_cd,
756 'IGS_EN_UNABLE_TO_FND_ADM',
757 NULL);
758 END IF;
759 p_message_name := 'IGS_EN_UNABLE_TO_FND_ADM';
760 p_warn_level := cst_error;
761 RETURN FALSE;
762 END IF;
763 CLOSE c_acaiv;
764 ELSE
765 OPEN c_acaiv1;
766 FETCH c_acaiv1 INTO v_acaiv_rec;
767 IF c_acaiv1%NOTFOUND THEN
768 CLOSE c_acaiv1;
769 -- Application not found - pre - enrolment not possible.
770 IF p_log_creation_dt IS NOT NULL THEN
771 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
772 cst_pre_enrol,
773 p_log_creation_dt,
774 cst_error || ',' ||
775 TO_CHAR(p_person_id) || ',' ||
776 p_course_cd,
777 'IGS_EN_UNABLE_TO_FND_ADM',
778 NULL);
779 END IF;
780 p_message_name := 'IGS_EN_UNABLE_TO_FND_ADM';
781 p_warn_level := cst_error;
782 RETURN FALSE;
783 END IF;
784 CLOSE c_acaiv1;
785 END IF;
786 RETURN TRUE;
787 EXCEPTION
788 WHEN OTHERS THEN
789 IF c_acaiv%ISOPEN THEN
790 CLOSE c_acaiv;
791 END IF;
792 IF c_acaiv1%ISOPEN THEN
793 CLOSE c_acaiv1;
794 END IF;
795 RAISE;
796 END;
797 EXCEPTION
798 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
799 RAISE;
800 WHEN OTHERS THEN
801 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
802 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_check_offer');
803 IGS_GE_MSG_STACK.ADD;
804 App_Exception.Raise_Exception;
805
806 END enrpl_check_offer;
807
808 FUNCTION enrpl_upd_candidature(
809 p_warn_level OUT NOCOPY VARCHAR2,
810 p_message_name OUT NOCOPY varchar2 )
811 RETURN BOOLEAN
812 AS
813
814 BEGIN -- enrpl_upd_candidature
815 -- Update IGS_RE_CANDIDATURE Key Detail
816 DECLARE
817 CURSOR c_ca IS
818 SELECT ca.sequence_number
819 FROM IGS_RE_CANDIDATURE ca
820 WHERE ca.person_id = p_person_id AND
821 ca.sca_course_cd = p_course_cd;
822 CURSOR c_ca2 IS
823 SELECT ca.sequence_number
824 FROM IGS_RE_CANDIDATURE ca
825 WHERE ca.person_id = p_person_id AND
826 ca.acai_admission_appl_number = v_acaiv_rec.admission_appl_number AND
827 ca.acai_nominated_course_cd = v_acaiv_rec.nominated_course_cd AND
828 ca.acai_sequence_number = v_acaiv_rec.sequence_number;
829 CURSOR c_ca_upd (
830 cp_sequence_number IGS_RE_CANDIDATURE.sequence_number%TYPE) IS
831 SELECT ROWID,
832 IGS_RE_CANDIDATURE.*
833 FROM IGS_RE_CANDIDATURE
834 WHERE person_id = p_person_id AND
835 sequence_number = cp_sequence_number
836 FOR UPDATE OF
837 acai_admission_appl_number,
838 acai_nominated_course_cd,
839 acai_sequence_number NOWAIT;
840
841 v_c_ca_upd_rec c_ca_upd%ROWTYPE;
842
843 v_ca_upd_exists VARCHAR2(1);
844 v_sca_ca_sequence_number IGS_RE_CANDIDATURE.sequence_number%TYPE;
845 v_acai_ca_sequence_number IGS_RE_CANDIDATURE.sequence_number%TYPE;
846
847 BEGIN
848 p_warn_level := NULL;
849 p_message_name := null;
850 -- Check if IGS_PE_PERSON has a IGS_RE_CANDIDATURE record linked
851 -- to the student IGS_PS_COURSE attempt.
852 OPEN c_ca;
853 FETCH c_ca INTO v_sca_ca_sequence_number;
854 CLOSE c_ca;
855 -- Check if IGS_PE_PERSON has a IGS_RE_CANDIDATURE record linked to
856 -- the admission IGS_PS_COURSE application instance.
857 OPEN c_ca2;
858 FETCH c_ca2 INTO v_acai_ca_sequence_number;
859 CLOSE c_ca2;
860 IF v_sca_ca_sequence_number <> v_acai_ca_sequence_number THEN
861 -- It is not valid for the admission IGS_PS_COURSE application
862 -- instance to be linked to a IGS_RE_CANDIDATURE and the student
863 -- IGS_PS_COURSE attempt to be linked to a different IGS_RE_CANDIDATURE.
864 -- Cannot determine which IGS_RE_CANDIDATURE should be used.
865 -- Rollback to start of routine
866 ROLLBACK TO sp_pre_enrol_student;
867 IF p_log_creation_dt IS NOT NULL THEN
868 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
869 cst_pre_enrol,
870 p_log_creation_dt,
871 cst_error || ',' ||
872 TO_CHAR(p_person_id) || ',' ||
873 p_course_cd,
874 'IGS_EN_INVALID_SUA_NOT_CONFIR',
875 NULL);
876 END IF;
877 p_message_name := 'IGS_EN_NOT_DETERMINE_CONDID';
878 p_warn_level := cst_error;
879 RETURN FALSE;
880 ELSIF v_sca_ca_sequence_number IS NOT NULL AND
881 v_acai_ca_sequence_number IS NULL THEN
882 -- The admission IGS_PS_COURSE application instance is not linked
883 -- to a IGS_RE_CANDIDATURE - need to link it to the IGS_RE_CANDIDATURE
884 -- record of the student IGS_PS_COURSE attempt.
885 OPEN c_ca_upd(
886 v_sca_ca_sequence_number);
887 FETCH c_ca_upd INTO v_c_ca_upd_rec;
888
889 IF c_ca_upd%FOUND THEN
890 IGS_RE_CANDIDATURE_PKG.UPDATE_ROW(
891 X_ROWID => v_c_ca_upd_rec.rowid,
892 X_PERSON_ID => v_c_ca_upd_rec.PERSON_ID,
893 X_SEQUENCE_NUMBER => v_c_ca_upd_rec.SEQUENCE_NUMBER,
894 X_SCA_COURSE_CD => v_c_ca_upd_rec.SCA_COURSE_CD,
895 X_ACAI_ADMISSION_APPL_NUMBER => v_acaiv_rec.admission_appl_number,
896 X_ACAI_NOMINATED_COURSE_CD => v_acaiv_rec.nominated_course_cd,
897 X_ACAI_SEQUENCE_NUMBER => v_acaiv_rec.sequence_number,
898 X_ATTENDANCE_PERCENTAGE => v_c_ca_upd_rec.ATTENDANCE_PERCENTAGE,
899 X_GOVT_TYPE_OF_ACTIVITY_CD => v_c_ca_upd_rec.GOVT_TYPE_OF_ACTIVITY_CD,
900 X_MAX_SUBMISSION_DT => v_c_ca_upd_rec.MAX_SUBMISSION_DT,
901 X_MIN_SUBMISSION_DT => v_c_ca_upd_rec.MIN_SUBMISSION_DT,
902 X_RESEARCH_TOPIC => v_c_ca_upd_rec.RESEARCH_TOPIC,
903 X_INDUSTRY_LINKS => v_c_ca_upd_rec.INDUSTRY_LINKS,
904 X_MODE => 'R' );
905
906 END IF;
907 CLOSE c_ca_upd;
908
909 ELSIF v_sca_ca_sequence_number IS NULL AND
910 v_acai_ca_sequence_number IS NOT NULL THEN
911 -- The student IGS_PS_COURSE attempt is not linked to a IGS_RE_CANDIDATURE,
912 -- need to link it to the IGS_RE_CANDIDATURE record of the admission
913 -- IGS_PS_COURSE application instance.
914 OPEN c_ca_upd(
915 v_acai_ca_sequence_number);
916 FETCH c_ca_upd INTO v_c_ca_upd_rec;
917
918 IF c_ca_upd%FOUND THEN
919
920 IGS_RE_CANDIDATURE_PKG.UPDATE_ROW(
921 X_ROWID => v_c_ca_upd_rec.rowid,
922 X_PERSON_ID => v_c_ca_upd_rec.PERSON_ID,
923 X_SEQUENCE_NUMBER => v_c_ca_upd_rec.SEQUENCE_NUMBER,
924 X_SCA_COURSE_CD => v_acaiv_rec.course_cd,
925 X_ACAI_ADMISSION_APPL_NUMBER => v_c_ca_upd_rec.acai_admission_appl_number,
926 X_ACAI_NOMINATED_COURSE_CD => v_c_ca_upd_rec.acai_nominated_course_cd,
927 X_ACAI_SEQUENCE_NUMBER => v_c_ca_upd_rec.acai_sequence_number,
928 X_ATTENDANCE_PERCENTAGE => v_c_ca_upd_rec.ATTENDANCE_PERCENTAGE,
929 X_GOVT_TYPE_OF_ACTIVITY_CD => v_c_ca_upd_rec.GOVT_TYPE_OF_ACTIVITY_CD,
930 X_MAX_SUBMISSION_DT => v_c_ca_upd_rec.MAX_SUBMISSION_DT,
931 X_MIN_SUBMISSION_DT => v_c_ca_upd_rec.MIN_SUBMISSION_DT,
932 X_RESEARCH_TOPIC => v_c_ca_upd_rec.RESEARCH_TOPIC,
933 X_INDUSTRY_LINKS => v_c_ca_upd_rec.INDUSTRY_LINKS,
934 X_MODE => 'R'
935 );
936
937 END IF;
938 CLOSE c_ca_upd;
939 END IF;
940 -- Return the default value
941 RETURN TRUE;
942 EXCEPTION
943 WHEN E_RESOURCE_BUSY THEN
944 IF c_ca%ISOPEN THEN
945 CLOSE c_ca;
946 END IF;
947 IF c_ca2%ISOPEN THEN
948 CLOSE c_ca2;
949 END IF;
950 IF c_ca_upd%ISOPEN THEN
951 CLOSE c_ca_upd;
952 END IF;
953 ROLLBACK TO sp_pre_enrol_student;
954 IF p_log_creation_dt IS NOT NULL THEN
955 Fnd_Message.Set_name('IGS','IGS_GE_RECORD_LOCKED');
956 IGS_GE_MSG_STACK.ADD;
957 END IF;
958 p_message_name := 'IGS_EN_CANDID_KEY_DETAIL';
959 p_warn_level := cst_error;
960 RETURN FALSE;
961 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
962 IF c_ca%ISOPEN THEN
963 CLOSE c_ca;
964 END IF;
965 IF c_ca2%ISOPEN THEN
966 CLOSE c_ca2;
967 END IF;
968 IF c_ca_upd%ISOPEN THEN
969 CLOSE c_ca_upd;
970 END IF;
971 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
972 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_upd_candidature.APP_EXP','Application Exception raised with code '||SQLCODE||' and error '||SQLERRM);
973 END IF;
974 RAISE;
975 WHEN OTHERS THEN
976 IF c_ca%ISOPEN THEN
977 CLOSE c_ca;
978 END IF;
979 IF c_ca2%ISOPEN THEN
980 CLOSE c_ca2;
981 END IF;
982 IF c_ca_upd%ISOPEN THEN
983 CLOSE c_ca_upd;
984 END IF;
985 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
986 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_upd_candidature.UNH_EXP','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
987 END IF;
988 RAISE;
989 END;
990 END enrpl_upd_candidature;
991
992 PROCEDURE enrpl_create_sca(
993 p_warn_level OUT NOCOPY VARCHAR2,
994 p_message_name OUT NOCOPY VARCHAR2)
995 AS
996 /****************************************************************************
997 History
998 Who When Why
999 sarakshi 16-Nov-2004 Enh#4000939, added column FUTURE_DATED_TRANS_FLAG in the insert row,update call of IGS_EN_STDNT_PS_ATT_PKG
1000 ckasu 05-Apr-2004 Modified IGS_EN_STDNT_PS_ATT_Pkg.update_Row procedure
1001 call as a part of bug 3544927.
1002 smaddali modified this procedure to create the HESA UK statistics record
1003 whenever oss program attempt record is being created for bug#2350629
1004 svanukur 15-APR-2004 Passing the values for catalog fields while creating or updating a SPA. bug 3548376
1005 ctyagi 15-march-2005 Modify cursor cur_catalog_details for bug #4238062 (INCORRECT SPA CATALOG CODE )
1006 *****************************************************************************/
1007
1008 BEGIN -- enrpl_create_sca
1009 -- Create a IGS_EN_STDNT_PS_ATT record
1010 DECLARE
1011
1012 CURSOR c_crv IS
1013 SELECT 'x'
1014 FROM IGS_PS_VER crv,
1015 IGS_PS_TYPE cty
1016 WHERE crv.course_cd = v_acaiv_rec.course_cd AND
1017 crv.version_number = v_acaiv_rec.crv_version_number AND
1018 cty.COURSE_TYPE = crv.COURSE_TYPE AND
1019 cty.research_type_ind = 'Y';
1020 v_crv_exists VARCHAR2(1);
1021
1022 CURSOR c_sca IS
1023 SELECT course_attempt_status,
1024 student_confirmed_ind,
1025 commencement_dt,
1026 discontinued_dt,
1027 fee_cat,
1028 correspondence_cat,
1029 funding_source,
1030 location_cd,
1031 attendance_mode,
1032 attendance_type,
1033 nominated_completion_yr,
1034 nominated_completion_perd,
1035 adm_admission_appl_number,
1036 adm_nominated_course_cd,
1037 adm_sequence_number,
1038 provisional_ind
1039 FROM IGS_EN_STDNT_PS_ATT sca
1040 WHERE person_id = p_person_id AND
1041 course_cd = p_course_cd;
1042 v_sca_rec c_sca%ROWTYPE;
1043
1044 CURSOR c_sca_upd IS
1045 SELECT rowid,IGS_EN_STDNT_PS_ATT.*
1046 FROM IGS_EN_STDNT_PS_ATT
1047 WHERE person_id = p_person_id AND
1048 course_cd = p_course_cd
1049 FOR UPDATE OF course_attempt_status,
1050 fee_cat,
1051 correspondence_cat,
1052 funding_source,
1053 provisional_ind,
1054 location_cd,
1055 attendance_mode,
1056 attendance_type,
1057 adm_admission_appl_number,
1058 adm_nominated_course_cd,
1059 adm_sequence_number,
1060 catalog_cal_type,
1061 catalog_seq_num NOWAIT;
1062
1063 v_sca_upd_rec c_sca_upd%ROWTYPE;
1064 v_confirmed_ind VARCHAR2(1);
1065 v_course_attempt_status IGS_EN_STDNT_PS_ATT.course_attempt_status%TYPE;
1066 v_commencement_dt DATE ;
1067 v_description IGS_FI_FEE_CAT.description%TYPE;
1068 v_funding_source IGS_EN_STDNT_PS_ATT.funding_source%TYPE;
1069
1070 --bmerugu added for build 319
1071 v_rowid VARCHAR2(25);
1072 v_program_type IGS_EN_STDNT_PS_ATT.primary_program_type%TYPE;
1073
1074 -- bmerugu added this cursor for build 319
1075 CURSOR c_sca_ptype (cp_rowid VARCHAR2) IS
1076 SELECT primary_program_type
1077 FROM IGS_EN_STDNT_PS_ATT
1078 WHERE rowid = cp_rowid;
1079
1080 CURSOR c_sca_ctype (cp_rowid VARCHAR2) IS
1081 SELECT ps.course_type
1082 FROM IGS_PS_VER ps,
1083 igs_en_stdnt_ps_att spa
1084 WHERE spa.rowid= cp_rowid
1085 AND ps.course_cd = spa.course_cd
1086 AND ps.version_number = spa.version_number;
1087 v_sca_ctype IGS_PS_VER.course_type%TYPE;
1088
1089 CURSOR c_sca_primary(cp_course_type IGS_PS_VER.course_type%TYPE) IS
1090 SELECT 'X'
1091 FROM igs_en_stdnt_ps_att spa,
1092 igs_ps_ver pv
1093 WHERE spa.person_id = p_person_id
1094 AND spa.primary_program_type = 'PRIMARY'
1095 AND spa.course_cd = pv.course_cd
1096 AND spa.version_number = pv.version_number
1097 AND pv.course_type = cp_course_type;
1098
1099 v_sca_primary_exists VARCHAR2(1);
1100
1101 l_message_name VARCHAR2(2000) ;
1102 l_status NUMBER;
1103 -- cursor to fetch catalog details
1104 CURSOR cur_catalog_details(p_commencement_date DATE,p_cal_type igs_ca_inst.cal_type%type) IS
1105 SELECT ci.cal_type catalog_cal_type,
1106 ci.sequence_number catalog_seq_num
1107 FROM igs_ca_inst ci,
1108 igs_ca_type ct,
1109 igs_ca_stat cs,
1110 igs_ca_inst_rel cir
1111 WHERE ci.cal_type = ct.cal_type
1112 AND ct.s_cal_cat = 'LOAD'
1113 AND cs.cal_status = ci.cal_status
1114 AND cs.s_cal_status = 'ACTIVE'
1115 AND p_commencement_date BETWEEN ci.start_dt AND ci.end_dt
1116 AND ci.cal_type=cir.sub_cal_type
1117 AND ci.sequence_number=cir.sub_ci_sequence_number
1118 AND cir.sup_cal_type=p_cal_type
1119 ORDER BY ci.end_dt desc;
1120
1121 catalog_cal_type igs_ca_inst.cal_type%TYPE;
1122 catalog_seq_num igs_ca_inst.sequence_number%TYPE;
1123 BEGIN
1124 p_warn_level := NULL;
1125 p_message_name := null;
1126 -- Determine research provisional indicator
1127 IF IGS_AD_GEN_008.ADMP_GET_SAOS(
1128 v_acaiv_rec.adm_outcome_status) = cst_cond_offer AND
1129 IGS_AD_GEN_007.ADMP_GET_SACOS(
1130 v_acaiv_rec.adm_cndtnl_offer_status) = cst_pending THEN
1131 -- Set provisional indicator to 'Y' if IGS_PS_COURSE attempt
1132 -- is a research IGS_PS_COURSE
1133 OPEN c_crv;
1134 FETCH c_crv INTO v_crv_exists;
1135 IF c_crv%NOTFOUND THEN
1136 CLOSE c_crv;
1137 v_provisional_ind := 'N';
1138 ELSE
1139 CLOSE c_crv;
1140 v_provisional_ind := 'Y';
1141 END IF;
1142 ELSE
1143 v_provisional_ind := 'N';
1144 END IF;
1145
1146 -- Determine the default funding source from
1147 -- either (in order of priority) the acaiv
1148 -- detail or the IGS_PS_COURSE version default funding source.
1149 IF v_acaiv_rec.funding_source IS NOT NULL THEN
1150 v_funding_source := v_acaiv_rec.funding_source;
1151 ELSE
1152 v_funding_source := IGS_AD_GEN_005.ADMP_GET_DFLT_FS(
1153 v_acaiv_rec.course_cd,
1154 v_acaiv_rec.crv_version_number,
1155 v_description);
1156 END IF;
1157
1158 -- Determine the default fee category from either (in order
1159 -- of priority) the acaiv detail or the admission category mapping.
1160 IF v_acaiv_rec.fee_cat IS NOT NULL THEN
1161 v_fee_cat := v_acaiv_rec.fee_cat;
1162 ELSE
1163 v_fee_cat := IGS_AD_GEN_005.ADMP_GET_DFLT_FCM(
1164 v_acaiv_rec.admission_cat,
1165 v_description);
1166 END IF;
1167
1168 -- Determine the default correspondence category from either
1169 -- (in order of priority) the acaiv detail or the admission category mapping.
1170 IF v_acaiv_rec.correspondence_cat IS NOT NULL THEN
1171 v_correspondence_cat := v_acaiv_rec.correspondence_cat;
1172 ELSE
1173 v_correspondence_cat := IGS_AD_GEN_005.ADMP_GET_DFLT_CCM(
1174 v_acaiv_rec.admission_cat,
1175 v_description);
1176 END IF;
1177
1178 -- Create IGS_EN_STDNT_PS_ATT record matching offer
1179 OPEN c_sca;
1180 FETCH c_sca INTO v_sca_rec;
1181 IF c_sca%NOTFOUND THEN
1182 CLOSE c_sca;
1183 IF p_dflt_confirmed_course_ind = 'N' THEN
1184 v_confirmed_ind := 'N';
1185 v_course_attempt_status := cst_unconfirm;
1186 v_commencement_dt := NULL;
1187 ELSE
1188 -- If the IGS_PS_COURSE attempt is the result of a transfer then it cannot
1189 -- be confirmed through pre-enrolment.
1190 IF IGS_EN_VAL_SCA.enrp_val_trnsfr_acpt(
1191 p_person_id,
1192 p_course_cd,
1193 'Y',
1194 v_acaiv_rec.admission_appl_number,
1195 v_acaiv_rec.nominated_course_cd,
1196 v_acaiv_rec.adm_offer_resp_status,
1197 v_message_name) = TRUE THEN
1198
1199 v_confirmed_ind := 'Y';
1200 v_course_attempt_status := cst_inactive;
1201 v_commencement_dt := IGS_EN_GEN_002.ENRP_GET_ACAD_COMM(
1202 p_acad_cal_type,
1203 p_acad_sequence_number,
1204 p_person_id,
1205 p_course_cd,
1206 v_acaiv_rec.admission_appl_number,
1207 v_acaiv_rec.nominated_course_cd,
1208 v_acaiv_rec.sequence_number,
1209 'Y'); -- Check for proposed commencement date.
1210 ELSE
1211
1212 v_confirmed_ind := 'N';
1213 v_course_attempt_status := cst_unconfirm;
1214 v_commencement_dt := NULL;
1215 END IF;
1216 END IF;
1217
1218 DECLARE
1219 l_rowid VARCHAR2(25);
1220 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
1221 BEGIN
1222
1223 --set the catalog details only if SPA is confirmed.
1224 IF nvl(v_confirmed_ind,'N') = 'Y' THEN
1225 OPEN cur_catalog_details(v_commencement_dt,v_acaiv_rec.acad_cal_type);
1226 FETCH cur_catalog_details into catalog_cal_type, catalog_seq_num;
1227 CLOSE cur_catalog_details;
1228 END IF;
1229
1230 IGS_EN_STDNT_PS_ATT_PKG.INSERT_ROW(
1231 x_rowid => l_rowid,
1232 x_person_id => p_person_id,
1233 x_course_cd => p_course_cd,
1234 x_version_number => v_acaiv_rec.crv_version_number,
1235 x_cal_type => v_acaiv_rec.acad_cal_type,
1236 x_location_cd => v_acaiv_rec.location_cd,
1237 x_attendance_mode => v_acaiv_rec.attendance_mode,
1238 x_attendance_type =>v_acaiv_rec.attendance_type ,
1239 x_coo_id => NULL,
1240 x_student_confirmed_ind => v_confirmed_ind,
1241 x_commencement_dt => v_commencement_dt,
1242 x_course_attempt_status => v_course_attempt_status,
1243 x_derived_att_type => NULL,
1244 x_derived_att_mode => NULL,
1245 x_provisional_ind => v_provisional_ind,
1246 x_discontinued_dt => NULL,
1247 x_discontinuation_reason_cd => NULL,
1248 x_lapsed_dt => NULL,
1249 x_funding_source => v_funding_source,
1250 x_exam_location_cd => NULL,
1251 x_derived_completion_yr => NULL,
1252 x_derived_completion_perd => NULL,
1253 x_nominated_completion_yr => NULL,
1254 x_nominated_completion_perd => NULL,
1255 x_rule_check_ind => NULL,
1256 x_waive_option_check_ind =>NULL,
1257 x_last_rule_check_dt => NULL,
1258 x_publish_outcomes_ind => NULL,
1259 x_course_rqrmnt_complete_ind => NULL,
1260 x_override_time_limitation => NULL,
1261 x_course_rqrmnts_complete_dt => NULL,
1262 x_advanced_standing_ind => NULL,
1263 x_fee_cat => v_fee_cat,
1264 x_correspondence_cat => v_correspondence_cat,
1265 x_self_help_group_ind => NULL,
1266 x_logical_delete_dt => NULL,
1267 x_adm_admission_appl_number => v_acaiv_rec.admission_appl_number,
1268 x_adm_nominated_course_cd => v_acaiv_rec.nominated_course_cd,
1269 x_adm_sequence_number =>v_acaiv_rec.sequence_number,
1270 x_mode => 'R',
1271 x_progression_status => NULL,
1272 X_S_COMPLETED_SOURCE_TYPE => 'MANUAL',
1273 x_org_id => l_org_id,
1274 x_last_date_of_attendance => NULL,
1275 x_dropped_by => NULL,
1276 X_IGS_PR_CLASS_STD_ID => NULL,
1277 x_primary_program_type => NULL,
1278 x_primary_prog_type_source => NULL,
1279 x_catalog_cal_type => catalog_cal_type,
1280 x_catalog_seq_num => catalog_seq_num,
1281 x_key_program => NULL ,
1282 x_override_cmpl_dt => NULL,
1283 x_manual_ovr_cmpl_dt_ind => NULL,
1284 -- added by ckasu as aprt of bug # 3544927
1285 X_ATTRIBUTE_CATEGORY => NULL,
1286 X_ATTRIBUTE1 => NULL,
1287 X_ATTRIBUTE2 => NULL,
1288 X_ATTRIBUTE3 => NULL,
1289 X_ATTRIBUTE4 => NULL,
1290 X_ATTRIBUTE5 => NULL,
1291 X_ATTRIBUTE6 => NULL,
1292 X_ATTRIBUTE7 => NULL,
1293 X_ATTRIBUTE8 => NULL,
1294 X_ATTRIBUTE9 => NULL,
1295 X_ATTRIBUTE10 => NULL,
1296 X_ATTRIBUTE11 => NULL,
1297 X_ATTRIBUTE12 => NULL,
1298 X_ATTRIBUTE13 => NULL,
1299 X_ATTRIBUTE14 => NULL,
1300 X_ATTRIBUTE15 => NULL,
1301 X_ATTRIBUTE16 => NULL,
1302 X_ATTRIBUTE17 => NULL,
1303 X_ATTRIBUTE18 => NULL,
1304 X_ATTRIBUTE19 => NULL,
1305 X_ATTRIBUTE20 => NULL,
1306 X_FUTURE_DATED_TRANS_FLAG => 'N');
1307
1308 --bmerugu added for build 319
1309 v_rowid := l_rowid;
1310
1311 -- smaddali added this code for bug#235069
1312 --creating the UK statistics hesa record
1313 IF fnd_profile.value('OSS_COUNTRY_CODE') = 'GB' THEN
1314 l_message_name := NULL;
1315 l_status := NULL;
1316 IGS_EN_HESA_PKG.HESA_STATS_ENR(
1317 p_person_id => p_person_id,
1318 p_course_cd => p_course_cd,
1319 p_crv_version_number => v_acaiv_rec.crv_version_number,
1320 p_message => l_message_name,
1321 p_status => l_status);
1322
1323 IF NVL(l_Status,0) = 2 THEN
1324 -- ie. The procedure call has resulted in error.
1325 Fnd_Message.Set_Name('IGS', l_message_name);
1326 IGS_GE_MSG_STACK.ADD;
1327 App_Exception.Raise_Exception;
1328 END IF;
1329
1330 END IF;
1331 -- end smaddali
1332
1333 END;
1334 l_confirmed_ind := v_confirmed_ind ;
1335 v_sca_commencement_dt := v_commencement_dt;
1336 -- Perform <Update IGS_RE_CANDIDATURE Key Detail>
1337 IF NOT enrpl_upd_candidature(
1338 p_warn_level,
1339 p_message_name) THEN
1340 RETURN;
1341 END IF;
1342 ELSE -- c_sca%FOUND
1343 CLOSE c_sca;
1344 l_confirmed_ind := v_sca_rec.student_confirmed_ind ;
1345 v_attendance_mode := v_sca_rec.attendance_mode;
1346 v_sca_commencement_dt := v_sca_rec.commencement_dt;
1347 -- Update the SCA details.
1348 -- IGS_GE_NOTE, the logical delete dt, discontinuation reason code and date
1349 -- are NULL?d to be sure that the student will revert back to the
1350 -- appropriate status.
1351 IF v_sca_rec.course_attempt_status IN (cst_unconfirm,
1352 cst_deleted) AND
1353 (v_sca_rec.course_attempt_status = cst_deleted OR
1354 v_sca_rec.location_cd <> v_acaiv_rec.location_cd OR
1355 v_sca_rec.attendance_mode <> v_acaiv_rec.attendance_mode OR
1356 v_sca_rec.attendance_type <> v_acaiv_rec.attendance_type OR
1357 NVL(v_sca_rec.funding_source,'NULL') <> NVL(v_funding_source,'NULL') OR
1358 v_sca_rec.provisional_ind <> v_provisional_ind OR
1359 NVL(v_sca_rec.fee_cat,'NULL') <> NVL(v_fee_cat,'NULL') OR
1360 NVL(v_sca_rec.correspondence_cat,'NULL') <>
1361 NVL(v_correspondence_cat,'NULL') OR
1362 NVL(v_sca_rec.nominated_completion_yr,9999) <>
1363 NVL(v_acaiv_rec.expected_completion_yr,9999) OR
1364 NVL(v_sca_rec.nominated_completion_perd,'X') <>
1365 NVL(v_acaiv_rec.expected_completion_perd,'X') OR
1366 NVL(v_sca_rec.adm_admission_appl_number,9999) <>
1367 v_acaiv_rec.admission_appl_number OR
1368 NVL(v_sca_rec.adm_nominated_course_cd,'NULL') <>
1369 v_acaiv_rec.nominated_course_cd OR
1370 NVL(v_sca_rec.adm_sequence_number,9999999) <>
1371 v_acaiv_rec.sequence_number OR
1372 (v_sca_rec.course_attempt_status = cst_unconfirm AND
1373 p_dflt_confirmed_course_ind = 'Y')) THEN
1374 BEGIN
1375 OPEN c_sca_upd;
1376 FETCH c_sca_upd INTO v_sca_upd_rec;
1377 IF p_dflt_confirmed_course_ind = 'Y' AND
1378 v_sca_rec.course_attempt_status = cst_unconfirm THEN
1379 -- If the IGS_PS_COURSE attempt is the result of a transfer then it cannot
1380 -- be confirmed through pre-enrolment.
1381 IF IGS_EN_VAL_SCA.enrp_val_trnsfr_acpt(
1382 p_person_id,
1383 p_course_cd,
1384 'Y',
1385 v_acaiv_rec.admission_appl_number,
1386 v_acaiv_rec.nominated_course_cd,
1387 v_acaiv_rec.adm_offer_resp_status,
1388 v_message_name) = TRUE THEN
1389
1390 v_confirmed_ind := 'Y';
1391 v_commencement_dt := IGS_EN_GEN_002.ENRP_GET_ACAD_COMM(
1392 p_acad_cal_type,
1393 p_acad_sequence_number,
1394 p_person_id,
1395 p_course_cd,
1396 v_acaiv_rec.admission_appl_number,
1397 v_acaiv_rec.nominated_course_cd,
1398 v_acaiv_rec.sequence_number,
1399 'Y'); -- Check for proposed commencement date.
1400 ELSE
1401 v_confirmed_ind := v_sca_rec.student_confirmed_ind;
1402 v_commencement_dt := v_sca_rec.commencement_dt;
1403 END IF;
1404 ELSE
1405 v_confirmed_ind := v_sca_rec.student_confirmed_ind;
1406 v_commencement_dt := v_sca_rec.commencement_dt;
1407 END IF;
1408
1409 --set the catalog details only if SPA is confirmed.
1410 -- this part of the code executes when the student accepts the application offer
1411 --if the pre-enrolment step is not setup on offer .
1412 catalog_cal_type := NULL;
1413 catalog_seq_num := NULL;
1414
1415 IF nvl(v_confirmed_ind,'N') = 'Y' THEN
1416 OPEN cur_catalog_details(v_commencement_dt,v_sca_upd_rec.cal_type);
1417 FETCH cur_catalog_details into catalog_cal_type, catalog_seq_num;
1418 CLOSE cur_catalog_details;
1419 END IF;
1420
1421 IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW(
1422 X_ROWID => v_sca_upd_rec.rowid,
1423 X_PERSON_ID => v_sca_upd_rec.PERSON_ID,
1424 X_COURSE_CD => v_sca_upd_rec.COURSE_CD,
1425 X_ADVANCED_STANDING_IND => v_sca_upd_rec.ADVANCED_STANDING_IND,
1426 X_FEE_CAT => v_fee_cat,
1427 X_CORRESPONDENCE_CAT => v_correspondence_cat,
1428 X_SELF_HELP_GROUP_IND => v_sca_upd_rec.SELF_HELP_GROUP_IND,
1429 X_LOGICAL_DELETE_DT => NULL,
1430 X_ADM_ADMISSION_APPL_NUMBER => v_acaiv_rec.admission_appl_number,
1431 X_ADM_NOMINATED_COURSE_CD => v_acaiv_rec.nominated_course_cd,
1432 X_ADM_SEQUENCE_NUMBER => v_acaiv_rec.sequence_number,
1433 X_VERSION_NUMBER => v_sca_upd_rec.version_number,
1434 X_CAL_TYPE => v_sca_upd_rec.cal_type,
1435 X_LOCATION_CD => v_acaiv_rec.location_cd,
1436 X_ATTENDANCE_MODE => v_acaiv_rec.attendance_mode,
1437 X_ATTENDANCE_TYPE => v_acaiv_rec.attendance_type,
1438 X_COO_ID => v_sca_upd_rec.coo_id,
1439 X_STUDENT_CONFIRMED_IND => v_confirmed_ind,
1440 X_COMMENCEMENT_DT => v_commencement_dt,
1441 X_COURSE_ATTEMPT_STATUS => cst_unconfirm,
1442 X_PROGRESSION_STATUS => v_sca_upd_rec.PROGRESSION_STATUS,
1443 X_DERIVED_ATT_TYPE => v_sca_upd_rec.DERIVED_ATT_TYPE,
1444 X_DERIVED_ATT_MODE => v_sca_upd_rec.DERIVED_ATT_MODE,
1445 X_PROVISIONAL_IND => v_provisional_ind,
1446 X_DISCONTINUED_DT => NULL,
1447 X_DISCONTINUATION_REASON_CD => NULL,
1448 X_LAPSED_DT => v_sca_upd_rec.LAPSED_DT,
1449 X_FUNDING_SOURCE => v_funding_source,
1450 X_EXAM_LOCATION_CD => v_sca_upd_rec.EXAM_LOCATION_CD,
1451 X_DERIVED_COMPLETION_YR => v_sca_upd_rec.DERIVED_COMPLETION_YR,
1452 X_DERIVED_COMPLETION_PERD => v_sca_upd_rec.DERIVED_COMPLETION_PERD,
1453 X_NOMINATED_COMPLETION_YR => v_sca_upd_rec.nominated_completion_yr,
1454 X_NOMINATED_COMPLETION_PERD => v_sca_upd_rec.nominated_completion_perd,
1455 X_RULE_CHECK_IND => v_sca_upd_rec.RULE_CHECK_IND,
1456 X_WAIVE_OPTION_CHECK_IND => v_sca_upd_rec.WAIVE_OPTION_CHECK_IND,
1457 X_LAST_RULE_CHECK_DT => v_sca_upd_rec.LAST_RULE_CHECK_DT,
1458 X_PUBLISH_OUTCOMES_IND => v_sca_upd_rec.PUBLISH_OUTCOMES_IND,
1459 X_COURSE_RQRMNT_COMPLETE_IND => v_sca_upd_rec.COURSE_RQRMNT_COMPLETE_IND,
1460 X_COURSE_RQRMNTS_COMPLETE_DT => v_sca_upd_rec.COURSE_RQRMNTS_COMPLETE_DT,
1461 X_S_COMPLETED_SOURCE_TYPE => v_sca_upd_rec.S_COMPLETED_SOURCE_TYPE,
1462 X_OVERRIDE_TIME_LIMITATION => v_sca_upd_rec.OVERRIDE_TIME_LIMITATION,
1463 X_MODE => 'R',
1464 x_last_date_of_attendance => v_sca_upd_rec.last_date_of_attendance,
1465 x_dropped_by => v_sca_upd_rec.dropped_by,
1466 X_IGS_PR_CLASS_STD_ID => v_sca_upd_rec.igs_pr_class_std_id,
1467 x_primary_program_type => v_sca_upd_rec.primary_program_type,
1468 x_primary_prog_type_source => v_sca_upd_rec.primary_prog_type_source,
1469 x_catalog_cal_type => catalog_cal_type,
1470 x_catalog_seq_num => catalog_seq_num,
1471 x_key_program => v_sca_upd_rec.key_program,
1472 x_override_cmpl_dt => v_sca_upd_rec.override_cmpl_dt,
1473 x_manual_ovr_cmpl_dt_ind => v_sca_upd_rec.manual_ovr_cmpl_dt_ind,
1474 -- added by ckasu as aprt of bug # 3544927
1475 X_ATTRIBUTE_CATEGORY => v_sca_upd_rec.ATTRIBUTE_CATEGORY,
1476 X_ATTRIBUTE1 => v_sca_upd_rec.ATTRIBUTE1,
1477 X_ATTRIBUTE2 => v_sca_upd_rec.ATTRIBUTE2,
1478 X_ATTRIBUTE3 => v_sca_upd_rec.ATTRIBUTE3,
1479 X_ATTRIBUTE4 => v_sca_upd_rec.ATTRIBUTE4,
1480 X_ATTRIBUTE5 => v_sca_upd_rec.ATTRIBUTE5,
1481 X_ATTRIBUTE6 => v_sca_upd_rec.ATTRIBUTE6,
1482 X_ATTRIBUTE7 => v_sca_upd_rec.ATTRIBUTE7,
1483 X_ATTRIBUTE8 => v_sca_upd_rec.ATTRIBUTE8,
1484 X_ATTRIBUTE9 => v_sca_upd_rec.ATTRIBUTE9,
1485 X_ATTRIBUTE10 => v_sca_upd_rec.ATTRIBUTE10,
1486 X_ATTRIBUTE11 => v_sca_upd_rec.ATTRIBUTE11,
1487 X_ATTRIBUTE12 => v_sca_upd_rec.ATTRIBUTE12,
1488 X_ATTRIBUTE13 => v_sca_upd_rec.ATTRIBUTE13,
1489 X_ATTRIBUTE14 => v_sca_upd_rec.ATTRIBUTE14,
1490 X_ATTRIBUTE15 => v_sca_upd_rec.ATTRIBUTE15,
1491 X_ATTRIBUTE16 => v_sca_upd_rec.ATTRIBUTE16,
1492 X_ATTRIBUTE17 => v_sca_upd_rec.ATTRIBUTE17,
1493 X_ATTRIBUTE18 => v_sca_upd_rec.ATTRIBUTE18,
1494 X_ATTRIBUTE19 => v_sca_upd_rec.ATTRIBUTE19,
1495 X_ATTRIBUTE20 => v_sca_upd_rec.ATTRIBUTE20,
1496 X_FUTURE_DATED_TRANS_FLAG => v_sca_upd_rec.FUTURE_DATED_TRANS_FLAG);
1497
1498 --bmerugu added for build 319
1499 v_rowid := v_sca_upd_rec.rowid;
1500
1501 CLOSE c_sca_upd;
1502 l_confirmed_ind := v_confirmed_ind ;
1503 v_sca_commencement_dt := v_commencement_dt;
1504 -- Perform <Update IGS_RE_CANDIDATURE Key Detail>
1505 IF NOT enrpl_upd_candidature(
1506 p_warn_level,
1507 p_message_name) THEN
1508 RETURN;
1509 END IF;
1510 EXCEPTION
1511 WHEN e_resource_busy THEN
1512 IF c_sca_upd%ISOPEN THEN
1513 CLOSE c_sca_upd;
1514 END IF;
1515 IF c_sca%ISOPEN THEN
1516 CLOSE c_sca;
1517 END IF;
1518 IF c_crv%ISOPEN THEN
1519 CLOSE c_crv;
1520 END IF;
1521 p_message_name := 'IGS_EN_STUD_PRG_REC_LOCKED';
1522 p_warn_level := cst_error;
1523 RETURN;
1524 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
1525 IF c_sca_upd%ISOPEN THEN
1526 CLOSE c_sca_upd;
1527 END IF;
1528 IF c_sca%ISOPEN THEN
1529 CLOSE c_sca;
1530 END IF;
1531 IF c_crv%ISOPEN THEN
1532 CLOSE c_crv;
1533 END IF;
1534 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1535 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.APP_EXP1','Application Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1536 END IF;
1537 RAISE;
1538 WHEN OTHERS THEN
1539 IF c_sca_upd%ISOPEN THEN
1540 CLOSE c_sca_upd;
1541 END IF;
1542 IF c_sca%ISOPEN THEN
1543 CLOSE c_sca;
1544 END IF;
1545 IF c_crv%ISOPEN THEN
1546 CLOSE c_crv;
1547 END IF;
1548 /* commented for Bug 1510921
1549 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
1550 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_sca1');
1551 IGS_GE_MSG_STACK.ADD;
1552 App_Exception.Raise_Exception;
1553 */
1554 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1555 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.UNH_EXP1','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1556 END IF;
1557 RAISE;
1558 END;
1559 ELSIF v_sca_rec.course_attempt_status = cst_discontin THEN
1560 -- Check if the IGS_PE_PERSON has been made an offer after
1561 -- they were discontinued.
1562 IF v_acaiv_rec.offer_dt >= v_sca_rec.discontinued_dt THEN
1563 BEGIN
1564 -- Lift the discontinuation and update details of the IGS_PS_COURSE
1565 -- attempt according to the new offer.
1566 OPEN c_sca_upd;
1567 FETCH c_sca_upd INTO v_sca_upd_rec;
1568
1569 IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW(
1570 X_ROWID => v_sca_upd_rec.rowid,
1571 X_PERSON_ID => v_sca_upd_rec.PERSON_ID,
1572 X_COURSE_CD => v_sca_upd_rec.COURSE_CD,
1573 X_ADVANCED_STANDING_IND => v_sca_upd_rec.ADVANCED_STANDING_IND,
1574 X_FEE_CAT => v_fee_cat,
1575 X_CORRESPONDENCE_CAT => v_correspondence_cat,
1576 X_SELF_HELP_GROUP_IND => v_sca_upd_rec.SELF_HELP_GROUP_IND,
1577 X_LOGICAL_DELETE_DT => v_sca_upd_rec.LOGICAL_DELETE_DT,
1578 X_ADM_ADMISSION_APPL_NUMBER => v_acaiv_rec.admission_appl_number,
1579 X_ADM_NOMINATED_COURSE_CD => v_acaiv_rec.nominated_course_cd,
1580 X_ADM_SEQUENCE_NUMBER => v_acaiv_rec.sequence_number,
1581 X_VERSION_NUMBER => v_sca_upd_rec.version_number,
1582 X_CAL_TYPE => v_sca_upd_rec.cal_type,
1583 X_LOCATION_CD => v_acaiv_rec.location_cd,
1584 X_ATTENDANCE_MODE => v_acaiv_rec.attendance_mode,
1585 X_ATTENDANCE_TYPE => v_acaiv_rec.attendance_type,
1586 X_COO_ID => v_sca_upd_rec.coo_id,
1587 X_STUDENT_CONFIRMED_IND => v_sca_upd_rec.STUDENT_confirmed_ind,
1588 X_COMMENCEMENT_DT => v_sca_upd_rec.commencement_dt,
1589 X_COURSE_ATTEMPT_STATUS => v_sca_upd_rec.COURSE_ATTEMPT_STATUS,
1590 X_PROGRESSION_STATUS => v_sca_upd_rec.PROGRESSION_STATUS,
1591 X_DERIVED_ATT_TYPE => v_sca_upd_rec.DERIVED_ATT_TYPE,
1592 X_DERIVED_ATT_MODE => v_sca_upd_rec.DERIVED_ATT_MODE,
1593 X_PROVISIONAL_IND => v_provisional_ind,
1594 X_DISCONTINUED_DT => NULL,
1595 X_DISCONTINUATION_REASON_CD => NULL,
1596 X_LAPSED_DT => NULL,
1597 X_FUNDING_SOURCE => v_funding_source,
1598 X_EXAM_LOCATION_CD => v_sca_upd_rec.EXAM_LOCATION_CD,
1599 X_DERIVED_COMPLETION_YR => v_sca_upd_rec.DERIVED_COMPLETION_YR,
1600 X_DERIVED_COMPLETION_PERD => v_sca_upd_rec.DERIVED_COMPLETION_PERD,
1601 X_NOMINATED_COMPLETION_YR => v_sca_upd_rec.nominated_completion_yr,
1602 X_NOMINATED_COMPLETION_PERD => v_sca_upd_rec.nominated_completion_perd,
1603 X_RULE_CHECK_IND => v_sca_upd_rec.RULE_CHECK_IND,
1604 X_WAIVE_OPTION_CHECK_IND => v_sca_upd_rec.WAIVE_OPTION_CHECK_IND,
1605 X_LAST_RULE_CHECK_DT => v_sca_upd_rec.LAST_RULE_CHECK_DT,
1606 X_PUBLISH_OUTCOMES_IND => v_sca_upd_rec.PUBLISH_OUTCOMES_IND,
1607 X_COURSE_RQRMNT_COMPLETE_IND => v_sca_upd_rec.COURSE_RQRMNT_COMPLETE_IND,
1608 X_COURSE_RQRMNTS_COMPLETE_DT => v_sca_upd_rec.COURSE_RQRMNTS_COMPLETE_DT,
1609 X_S_COMPLETED_SOURCE_TYPE => v_sca_upd_rec.S_COMPLETED_SOURCE_TYPE,
1610 X_OVERRIDE_TIME_LIMITATION => v_sca_upd_rec.OVERRIDE_TIME_LIMITATION,
1611 X_MODE => 'R',
1612 x_last_date_of_attendance => v_sca_upd_rec.last_date_of_attendance,
1613 x_dropped_by => v_sca_upd_rec.dropped_by,
1614 X_IGS_PR_CLASS_STD_ID => v_sca_upd_rec.igs_pr_class_std_id,
1615 x_primary_program_type => v_sca_upd_rec.primary_program_type,
1616 x_primary_prog_type_source => v_sca_upd_rec.primary_prog_type_source,
1617 x_catalog_cal_type => v_sca_upd_rec.catalog_cal_type,
1618 x_catalog_seq_num => v_sca_upd_rec.catalog_seq_num,
1619 x_key_program => v_sca_upd_rec.key_program,
1620 x_override_cmpl_dt => v_sca_upd_rec.override_cmpl_dt,
1621 x_manual_ovr_cmpl_dt_ind => v_sca_upd_rec.manual_ovr_cmpl_dt_ind,
1622 -- added by ckasu as aprt of bug # 3544927
1623 X_ATTRIBUTE_CATEGORY => v_sca_upd_rec.ATTRIBUTE_CATEGORY,
1624 X_ATTRIBUTE1 => v_sca_upd_rec.ATTRIBUTE1,
1625 X_ATTRIBUTE2 => v_sca_upd_rec.ATTRIBUTE2,
1626 X_ATTRIBUTE3 => v_sca_upd_rec.ATTRIBUTE3,
1627 X_ATTRIBUTE4 => v_sca_upd_rec.ATTRIBUTE4,
1628 X_ATTRIBUTE5 => v_sca_upd_rec.ATTRIBUTE5,
1629 X_ATTRIBUTE6 => v_sca_upd_rec.ATTRIBUTE6,
1630 X_ATTRIBUTE7 => v_sca_upd_rec.ATTRIBUTE7,
1631 X_ATTRIBUTE8 => v_sca_upd_rec.ATTRIBUTE8,
1632 X_ATTRIBUTE9 => v_sca_upd_rec.ATTRIBUTE9,
1633 X_ATTRIBUTE10 => v_sca_upd_rec.ATTRIBUTE10,
1634 X_ATTRIBUTE11 => v_sca_upd_rec.ATTRIBUTE11,
1635 X_ATTRIBUTE12 => v_sca_upd_rec.ATTRIBUTE12,
1636 X_ATTRIBUTE13 => v_sca_upd_rec.ATTRIBUTE13,
1637 X_ATTRIBUTE14 => v_sca_upd_rec.ATTRIBUTE14,
1638 X_ATTRIBUTE15 => v_sca_upd_rec.ATTRIBUTE15,
1639 X_ATTRIBUTE16 => v_sca_upd_rec.ATTRIBUTE16,
1640 X_ATTRIBUTE17 => v_sca_upd_rec.ATTRIBUTE17,
1641 X_ATTRIBUTE18 => v_sca_upd_rec.ATTRIBUTE18,
1642 X_ATTRIBUTE19 => v_sca_upd_rec.ATTRIBUTE19,
1643 X_ATTRIBUTE20 => v_sca_upd_rec.ATTRIBUTE20,
1644 X_FUTURE_DATED_TRANS_FLAG => v_sca_upd_rec.FUTURE_DATED_TRANS_FLAG);
1645
1646 --bmerugu added for build 319
1647 v_rowid := v_sca_upd_rec.rowid;
1648
1649 CLOSE c_sca_upd;
1650 -- Perform <Update IGS_RE_CANDIDATURE Key Detail>
1651 IF NOT enrpl_upd_candidature(
1652 p_warn_level,
1653 p_message_name) THEN
1654 RETURN;
1655 END IF;
1656 EXCEPTION
1657 WHEN e_resource_busy THEN
1658 IF c_sca_upd%ISOPEN THEN
1659 CLOSE c_sca_upd;
1660 END IF;
1661 IF c_sca%ISOPEN THEN
1662 CLOSE c_sca;
1663 END IF;
1664 IF c_crv%ISOPEN THEN
1665 CLOSE c_crv;
1666 END IF;
1667 p_message_name := 'IGS_EN_STUD_PRG_REC_LOCKED';
1668 p_warn_level := cst_error;
1669 RETURN;
1670 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
1671 IF c_sca_upd%ISOPEN THEN
1672 CLOSE c_sca_upd;
1673 END IF;
1674 IF c_sca%ISOPEN THEN
1675 CLOSE c_sca;
1676 END IF;
1677 IF c_crv%ISOPEN THEN
1678 CLOSE c_crv;
1679 END IF;
1680 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1681 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.APP_EXP2','Application Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1682 END IF;
1683 RAISE;
1684 WHEN OTHERS THEN
1685 IF c_sca_upd%ISOPEN THEN
1686 CLOSE c_sca_upd;
1687 END IF;
1688 IF c_sca%ISOPEN THEN
1689 CLOSE c_sca;
1690 END IF;
1691 IF c_crv%ISOPEN THEN
1692 CLOSE c_crv;
1693 END IF;
1694 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1695 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.UNH_EXP2','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1696 END IF;
1697 RAISE;
1698 END;
1699 ELSE
1700 -- IGS_PE_PERSON does not have a current admission offer.
1701 IF p_log_creation_dt IS NOT NULL THEN
1702 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
1703 cst_pre_enrol,
1704 p_log_creation_dt,
1705 cst_error || ',' ||
1706 TO_CHAR(p_person_id) || ',' ||
1707 p_course_cd,
1708 'IGS_EN_DISCONT_NOTLIFT',
1709 NULL);
1710 END IF;
1711 p_message_name := 'IGS_EN_DISCONT_NOTLIFT';
1712 p_warn_level := cst_error;
1713 RETURN;
1714 END IF;
1715 ELSIF (v_sca_rec.course_attempt_status = cst_lapsed AND
1716 v_acaiv_rec.s_adm_offer_resp_status <> cst_accepted) OR
1717 v_sca_rec.course_attempt_status = cst_inactive THEN
1718 BEGIN
1719 OPEN c_sca_upd;
1720 FETCH c_sca_upd INTO v_sca_upd_rec;
1721
1722 IGS_EN_STDNT_PS_ATT_PKG.UPDATE_ROW(
1723 X_ROWID => v_sca_upd_rec.rowid,
1724 X_PERSON_ID => v_sca_upd_rec.PERSON_ID,
1725 X_COURSE_CD => v_sca_upd_rec.COURSE_CD,
1726 X_ADVANCED_STANDING_IND => v_sca_upd_rec.ADVANCED_STANDING_IND,
1727 X_FEE_CAT => v_fee_cat,
1728 X_CORRESPONDENCE_CAT => v_correspondence_cat,
1729 X_SELF_HELP_GROUP_IND => v_sca_upd_rec.SELF_HELP_GROUP_IND,
1730 X_LOGICAL_DELETE_DT => v_sca_upd_rec.LOGICAL_DELETE_DT,
1731 X_ADM_ADMISSION_APPL_NUMBER => v_acaiv_rec.admission_appl_number,
1732 X_ADM_NOMINATED_COURSE_CD => v_acaiv_rec.nominated_course_cd,
1733 X_ADM_SEQUENCE_NUMBER => v_acaiv_rec.sequence_number,
1734 X_VERSION_NUMBER => v_sca_upd_rec.version_number,
1735 X_CAL_TYPE => v_sca_upd_rec.cal_type,
1736 X_LOCATION_CD => v_acaiv_rec.location_cd,
1737 X_ATTENDANCE_MODE => v_acaiv_rec.attendance_mode,
1738 X_ATTENDANCE_TYPE => v_acaiv_rec.attendance_type,
1739 X_COO_ID => v_sca_upd_rec.coo_id,
1740 X_STUDENT_CONFIRMED_IND => v_sca_upd_rec.STUDENT_confirmed_ind,
1741 X_COMMENCEMENT_DT => v_sca_upd_rec.commencement_dt,
1742 X_COURSE_ATTEMPT_STATUS => v_sca_upd_rec.COURSE_ATTEMPT_STATUS,
1743 X_PROGRESSION_STATUS => v_sca_upd_rec.PROGRESSION_STATUS,
1744 X_DERIVED_ATT_TYPE => v_sca_upd_rec.DERIVED_ATT_TYPE,
1745 X_DERIVED_ATT_MODE => v_sca_upd_rec.DERIVED_ATT_MODE,
1746 X_PROVISIONAL_IND => v_provisional_ind,
1747 X_DISCONTINUED_DT => v_sca_upd_rec.DISCONTINUED_DT,
1748 X_DISCONTINUATION_REASON_CD => v_sca_upd_rec.DISCONTINUATION_REASON_CD ,
1749 X_LAPSED_DT => NULL,
1750 X_FUNDING_SOURCE => v_funding_source,
1751 X_EXAM_LOCATION_CD => v_sca_upd_rec.EXAM_LOCATION_CD,
1752 X_DERIVED_COMPLETION_YR => v_sca_upd_rec.DERIVED_COMPLETION_YR,
1753 X_DERIVED_COMPLETION_PERD => v_sca_upd_rec.DERIVED_COMPLETION_PERD,
1754 X_NOMINATED_COMPLETION_YR => v_sca_upd_rec.nominated_completion_yr,
1755 X_NOMINATED_COMPLETION_PERD => v_sca_upd_rec.nominated_completion_perd,
1756 X_RULE_CHECK_IND => v_sca_upd_rec.RULE_CHECK_IND,
1757 X_WAIVE_OPTION_CHECK_IND => v_sca_upd_rec.WAIVE_OPTION_CHECK_IND,
1758 X_LAST_RULE_CHECK_DT => v_sca_upd_rec.LAST_RULE_CHECK_DT,
1759 X_PUBLISH_OUTCOMES_IND => v_sca_upd_rec.PUBLISH_OUTCOMES_IND,
1760 X_COURSE_RQRMNT_COMPLETE_IND => v_sca_upd_rec.COURSE_RQRMNT_COMPLETE_IND,
1761 X_COURSE_RQRMNTS_COMPLETE_DT => v_sca_upd_rec.COURSE_RQRMNTS_COMPLETE_DT,
1762 X_S_COMPLETED_SOURCE_TYPE => v_sca_upd_rec.S_COMPLETED_SOURCE_TYPE,
1763 X_OVERRIDE_TIME_LIMITATION => v_sca_upd_rec.OVERRIDE_TIME_LIMITATION,
1764 X_MODE => 'R',
1765 x_last_date_of_attendance => v_sca_upd_rec.last_date_of_attendance,
1766 x_dropped_by => v_sca_upd_rec.dropped_by,
1767 X_IGS_PR_CLASS_STD_ID => v_sca_upd_rec.igs_pr_class_std_id,
1768 x_primary_program_type => v_sca_upd_rec.primary_program_type,
1769 x_primary_prog_type_source => v_sca_upd_rec.primary_prog_type_source,
1770 x_catalog_cal_type => v_sca_upd_rec.catalog_cal_type,
1771 x_catalog_seq_num => v_sca_upd_rec.catalog_seq_num,
1772 x_key_program => v_sca_upd_rec.key_program,
1773 x_override_cmpl_dt => v_sca_upd_rec.override_cmpl_dt,
1774 x_manual_ovr_cmpl_dt_ind => v_sca_upd_rec.manual_ovr_cmpl_dt_ind,
1775 -- added by ckasu as aprt of bug # 3544927
1776 X_ATTRIBUTE_CATEGORY => v_sca_upd_rec.ATTRIBUTE_CATEGORY,
1777 X_ATTRIBUTE1 => v_sca_upd_rec.ATTRIBUTE1,
1778 X_ATTRIBUTE2 => v_sca_upd_rec.ATTRIBUTE2,
1779 X_ATTRIBUTE3 => v_sca_upd_rec.ATTRIBUTE3,
1780 X_ATTRIBUTE4 => v_sca_upd_rec.ATTRIBUTE4,
1781 X_ATTRIBUTE5 => v_sca_upd_rec.ATTRIBUTE5,
1782 X_ATTRIBUTE6 => v_sca_upd_rec.ATTRIBUTE6,
1783 X_ATTRIBUTE7 => v_sca_upd_rec.ATTRIBUTE7,
1784 X_ATTRIBUTE8 => v_sca_upd_rec.ATTRIBUTE8,
1785 X_ATTRIBUTE9 => v_sca_upd_rec.ATTRIBUTE9,
1786 X_ATTRIBUTE10 => v_sca_upd_rec.ATTRIBUTE10,
1787 X_ATTRIBUTE11 => v_sca_upd_rec.ATTRIBUTE11,
1788 X_ATTRIBUTE12 => v_sca_upd_rec.ATTRIBUTE12,
1789 X_ATTRIBUTE13 => v_sca_upd_rec.ATTRIBUTE13,
1790 X_ATTRIBUTE14 => v_sca_upd_rec.ATTRIBUTE14,
1791 X_ATTRIBUTE15 => v_sca_upd_rec.ATTRIBUTE15,
1792 X_ATTRIBUTE16 => v_sca_upd_rec.ATTRIBUTE16,
1793 X_ATTRIBUTE17 => v_sca_upd_rec.ATTRIBUTE17,
1794 X_ATTRIBUTE18 => v_sca_upd_rec.ATTRIBUTE18,
1795 X_ATTRIBUTE19 => v_sca_upd_rec.ATTRIBUTE19,
1796 X_ATTRIBUTE20 => v_sca_upd_rec.ATTRIBUTE20,
1797 X_FUTURE_DATED_TRANS_FLAG => v_sca_upd_rec.FUTURE_DATED_TRANS_FLAG);
1798
1799 --bmerugu added for build 319
1800 v_rowid := v_sca_upd_rec.rowid;
1801
1802 CLOSE c_sca_upd;
1803 -- Perform <Update IGS_RE_CANDIDATURE Key Detail>
1804 IF NOT enrpl_upd_candidature(
1805 p_warn_level,
1806 p_message_name) THEN
1807 RETURN;
1808 END IF;
1809 EXCEPTION
1810 WHEN e_resource_busy THEN
1811 IF c_sca_upd%ISOPEN THEN
1812 CLOSE c_sca_upd;
1813 END IF;
1814 IF c_sca%ISOPEN THEN
1815 CLOSE c_sca;
1816 END IF;
1817 IF c_crv%ISOPEN THEN
1818 CLOSE c_crv;
1819 END IF;
1820 p_message_name := 'IGS_EN_STUD_PRG_REC_LOCKED';
1821 p_warn_level := cst_minor;
1822 RETURN;
1823 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
1824 IF c_sca_upd%ISOPEN THEN
1825 CLOSE c_sca_upd;
1826 END IF;
1827 IF c_sca%ISOPEN THEN
1828 CLOSE c_sca;
1829 END IF;
1830 IF c_crv%ISOPEN THEN
1831 CLOSE c_crv;
1832 END IF;
1833 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1834 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.APP_EXP3','Application Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1835 END IF;
1836 RAISE;
1837 WHEN OTHERS THEN
1838 IF c_sca_upd%ISOPEN THEN
1839 CLOSE c_sca_upd;
1840 END IF;
1841 IF c_sca%ISOPEN THEN
1842 CLOSE c_sca;
1843 END IF;
1844 IF c_crv%ISOPEN THEN
1845 CLOSE c_crv;
1846 END IF;
1847 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1848 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.UNH_EXP3','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1849 END IF;
1850 RAISE;
1851 END;
1852 END IF;
1853 END IF;
1854
1855 --bmerugu added for build 319
1856 IF NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N') = 'Y' THEN
1857 BEGIN
1858 OPEN c_sca_ptype(v_rowid);
1859 FETCH c_sca_ptype INTO v_program_type;
1860 CLOSE c_sca_ptype;
1861
1862 IF NVL(v_program_type,'SECONDARY') <> 'PRIMARY' THEN
1863 BEGIN
1864
1865 OPEN c_sca_ctype(v_rowid);
1866 FETCH c_sca_ctype INTO v_sca_ctype;
1867 CLOSE c_sca_ctype;
1868
1869 OPEN c_sca_primary(v_sca_ctype);
1870 FETCH c_sca_primary INTO v_sca_primary_exists;
1871 IF c_sca_primary%FOUND THEN
1872 l_sua_create := FALSE;
1873 END IF;
1874 CLOSE c_sca_primary;
1875 END;
1876 END IF; -- Secondary program check
1877 END;
1878 END IF; -- career mode check
1879
1880 -- If any other status (COMPLETED,ENROLLED,INTERMIT)
1881 -- Do nothing - IGS_PS_COURSE attempt should remain as it is
1882 RETURN;
1883 EXCEPTION
1884 WHEN OTHERS THEN
1885 IF c_sca_upd%ISOPEN THEN
1886 CLOSE c_sca_upd;
1887 END IF;
1888 IF c_sca%ISOPEN THEN
1889 CLOSE c_sca;
1890 END IF;
1891 IF c_crv%ISOPEN THEN
1892 CLOSE c_crv;
1893 END IF;
1894 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1895 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.enrpl_create_sca.UNH_EXP','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
1896 END IF;
1897 RAISE;
1898 END;
1899
1900 /*EXCEPTION
1901 WHEN OTHERS THEN
1902 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
1903 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_sca4');
1904 IGS_GE_MSG_STACK.ADD;
1905 App_Exception.Raise_Exception; */
1906 -- The exception part has been commented as a part of bug fix # 1520688 , as
1907 -- the Raise stmt trasferred control to when others , rather than showing
1908 -- the correct error message.
1909
1910 END enrpl_create_sca;
1911
1912 FUNCTION enrpl_create_scae(
1913 p_warn_level OUT NOCOPY VARCHAR2,
1914 p_message_name OUT NOCOPY varchar2 )
1915 RETURN BOOLEAN
1916 AS
1917
1918 BEGIN -- enrpl_create_scae
1919 -- Create a IGS_AS_SC_ATMPT_ENR record
1920 DECLARE
1921 CURSOR c_scae (
1922 cp_enr_cal_type IGS_AS_SC_ATMPT_ENR.cal_type%TYPE,
1923 cp_enr_sequence_number IGS_AS_SC_ATMPT_ENR.ci_sequence_number%TYPE) IS
1924 SELECT enrolment_cat
1925 FROM IGS_AS_SC_ATMPT_ENR scae
1926 WHERE person_id = p_person_id AND
1927 course_cd = p_course_cd AND
1928 cal_type = cp_enr_cal_type AND
1929 ci_sequence_number = cp_enr_sequence_number;
1930 v_scae_rec c_scae%ROWTYPE;
1931
1932 CURSOR c_scae_upd (
1933 cp_enr_cal_type IGS_AS_SC_ATMPT_ENR.cal_type%TYPE,
1934 cp_enr_sequence_number IGS_AS_SC_ATMPT_ENR.ci_sequence_number%TYPE) IS
1935 SELECT rowid,
1936 IGS_AS_SC_ATMPT_ENR.*
1937 FROM IGS_AS_SC_ATMPT_ENR
1938 WHERE person_id = p_person_id AND
1939 course_cd = p_course_cd AND
1940 cal_type = cp_enr_cal_type AND
1941 ci_sequence_number = cp_enr_sequence_number
1942 FOR UPDATE OF enrolment_cat NOWAIT;
1943
1944 v_scae_upd_rec c_scae_upd%ROWTYPE;
1945
1946 -- output variables
1947 v_enr_cal_type IGS_CA_INST.cal_type%TYPE;
1948 v_enr_sequence_number IGS_CA_INST.sequence_number%TYPE;
1949 v_enrolment_cat IGS_EN_ENROLMENT_CAT.enrolment_cat%TYPE;
1950 v_description IGS_EN_ENROLMENT_CAT.description%TYPE;
1951 BEGIN
1952 p_warn_level := NULL;
1953 p_message_name := null;
1954
1955 -- Call routine to determine enrolment period
1956 IF NOT IGS_EN_GEN_003.ENRP_GET_ENR_CI(
1957 v_acaiv_rec.adm_cal_type,
1958 v_acaiv_rec.adm_ci_sequence_number,
1959 v_enr_cal_type,
1960 v_enr_sequence_number) THEN
1961 IF p_log_creation_dt IS NOT NULL THEN
1962 ROLLBACK TO sp_pre_enrol_student;
1963 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
1964 cst_pre_enrol,
1965 p_log_creation_dt,
1966 cst_error || ',' ||
1967 TO_CHAR(p_person_id) || ',' ||
1968 p_course_cd,
1969 'IGS_EN_UNABLE_DETM_ENR_PERIOD',
1970 NULL);
1971 END IF;
1972 p_warn_level := cst_error;
1973 p_message_name := 'IGS_EN_UNABLE_DETM_ENR_PERIOD';
1974 RETURN FALSE;
1975 END IF;
1976
1977 -- Determine the enrolment category for the pre-enrolment.
1978 IF v_acaiv_rec.enrolment_cat IS NOT NULL THEN
1979 v_enrolment_cat := v_acaiv_rec.enrolment_cat;
1980 ELSIF p_enrolment_cat IS NOT NULL THEN
1981 v_enrolment_cat := p_enrolment_cat;
1982 ELSE
1983 v_enrolment_cat := IGS_AD_GEN_005.ADMP_GET_DFLT_ECM(
1984 v_acaiv_rec.admission_cat,
1985 v_description);
1986 IF v_enrolment_cat IS NULL THEN
1987 -- Cannot continue without an enrolment category
1988 IF p_log_creation_dt IS NOT NULL THEN
1989 ROLLBACK TO sp_pre_enrol_student;
1990 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
1991 cst_pre_enrol,
1992 p_log_creation_dt,
1993 cst_error || ',' ||
1994 TO_CHAR(p_person_id) || ',' ||
1995 p_course_cd,
1996 'IGS_EN_UNABLE_DETM_ENRCAT',
1997 NULL);
1998 END IF;
1999 p_warn_level := cst_error;
2000 p_message_name := 'IGS_EN_UNABLE_DETM_ENRCAT';
2001 RETURN FALSE;
2002 END IF;
2003 END IF;
2004
2005 -- Check whether a record already exists.
2006 OPEN c_scae(
2007 v_enr_cal_type,
2008 v_enr_sequence_number);
2009 FETCH c_scae INTO v_scae_rec;
2010 IF c_scae%NOTFOUND THEN
2011 CLOSE c_scae;
2012 -- Insert student IGS_PS_COURSE attempt enrolment record
2013
2014 DECLARE
2015 l_rowid VARCHAR2(25);
2016 BEGIN
2017 IGS_AS_SC_ATMPT_ENR_PKG.INSERT_ROW (
2018 x_rowid => l_rowid,
2019 x_person_id => p_person_id,
2020 x_course_cd => p_course_cd,
2021 x_cal_type => v_enr_cal_type,
2022 x_ci_sequence_number => v_enr_sequence_number,
2023 x_enrolment_cat => v_enrolment_cat,
2024 x_enrolled_dt => NULL,
2025 x_enr_form_due_dt => p_override_enr_form_due_dt,
2026 x_enr_pckg_prod_dt => p_override_enr_pckg_prod_dt,
2027 x_enr_form_received_dt => NULL );
2028 END;
2029
2030 ELSE -- (record exists)
2031 CLOSE c_scae;
2032 -- If the enrolment category is not the same,
2033 -- update to the new default.enrolment category.
2034 IF v_scae_rec.enrolment_cat <> v_enrolment_cat THEN
2035 BEGIN
2036 OPEN c_scae_upd(
2037 v_enr_cal_type,
2038 v_enr_sequence_number);
2039 FETCH c_scae_upd INTO v_scae_upd_rec;
2040
2041 IGS_AS_SC_ATMPT_ENR_PKG.UPDATE_ROW(
2042 X_ROWID => v_scae_upd_rec.rowid,
2043 X_PERSON_ID => v_scae_upd_rec.PERSON_ID,
2044 X_COURSE_CD => v_scae_upd_rec.COURSE_CD,
2045 X_CAL_TYPE => v_scae_upd_rec.CAL_TYPE,
2046 X_CI_SEQUENCE_NUMBER => v_scae_upd_rec.CI_SEQUENCE_NUMBER,
2047 X_ENROLMENT_CAT => v_enrolment_cat,
2048 X_ENROLLED_DT => v_scae_upd_rec.ENROLLED_DT,
2049 X_ENR_FORM_DUE_DT => v_scae_upd_rec.ENR_FORM_DUE_DT,
2050 X_ENR_PCKG_PROD_DT => v_scae_upd_rec.ENR_PCKG_PROD_DT ,
2051 X_ENR_FORM_RECEIVED_DT => v_scae_upd_rec.ENR_FORM_RECEIVED_DT,
2052 X_MODE => 'R' );
2053
2054 CLOSE c_scae_upd;
2055 EXCEPTION
2056 WHEN e_resource_busy THEN
2057 IF c_scae_upd%ISOPEN THEN
2058 CLOSE c_scae_upd;
2059 END IF;
2060 p_message_name := 'IGS_EN_STUD_PRG_LAPSE_USER';
2061 p_warn_level := cst_error;
2062 RETURN FALSE;
2063 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
2064 IF c_scae_upd%ISOPEN THEN
2065 CLOSE c_scae_upd;
2066 END IF;
2067 RAISE;
2068 WHEN OTHERS THEN
2069 IF c_scae_upd%ISOPEN THEN
2070 CLOSE c_scae_upd;
2071 END IF;
2072 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
2073 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_scae1');
2074 IGS_GE_MSG_STACK.ADD;
2075 App_Exception.Raise_Exception;
2076 END;
2077 END IF;
2078 END IF;
2079 RETURN TRUE;
2080
2081 EXCEPTION
2082 WHEN OTHERS THEN
2083 IF c_scae%ISOPEN THEN
2084 CLOSE c_scae;
2085 END IF;
2086 IF c_scae_upd%ISOPEN THEN
2087 CLOSE c_scae_upd;
2088 END IF;
2089 RAISE;
2090 END;
2091 EXCEPTION
2092 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
2093 RAISE;
2094 WHEN OTHERS THEN
2095 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
2096 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_scae2');
2097 IGS_GE_MSG_STACK.ADD;
2098 App_Exception.Raise_Exception;
2099
2100 END enrpl_create_scae;
2101
2102 FUNCTION enrpl_copy_adm_unit_sets
2103 /* HISTORY
2104 WHO WHEN WHAT
2105 ayedubat 9-MAY-2002 Changed the condition from 'v_spa_rec.commencement_dt < TRUNC(SYSDATE)' to
2106 'v_spa_rec.commencement_dt > TRUNC(SYSDATE)' and also added the TRUNC to SYDATE
2107 as part of the bug Fix: 2364102
2108 svanukur 01-jul-2004 setting the selection date of the unit set attempt to SPA commencement date
2109 as part of bug fix 3687470
2110 */
2111 RETURN BOOLEAN
2112 AS
2113
2114 BEGIN -- enrpl_copy_adm_unit_sets
2115 -- Create any required IGS_AS_SU_SETATMPT details
2116 DECLARE
2117 -- Bug#2347141
2118 -- This cursor got modified to retrive the all the values of the columns which
2119 -- helps in case of updation
2120 CURSOR c_susa IS
2121 SELECT susa.*,susa.rowid
2122 FROM IGS_AS_SU_SETATMPT susa
2123 WHERE susa.person_id = p_person_id AND
2124 susa.course_cd = p_course_cd AND
2125 susa.unit_set_cd = v_acaiv_rec.unit_set_cd AND
2126 susa.us_version_number = v_acaiv_rec.us_version_number AND
2127 susa.end_dt IS NULL;
2128
2129 -- Bug#2347141
2130 -- This cursor got modified to to include one more table IGS_EN_UNIT_SET_CAT
2131 -- in the from clause to check the System Category.
2132 CURSOR c_us (cp_unit_set_cd IGS_EN_UNIT_SET.unit_set_cd%TYPE,
2133 cp_version_number IGS_EN_UNIT_SET.version_number%TYPE) IS
2134 SELECT us.authorisation_rqrd_ind,
2135 usc.s_unit_set_cat
2136 FROM IGS_EN_UNIT_SET us,
2137 IGS_EN_UNIT_SET_CAT usc
2138 WHERE us.unit_set_cd = cp_unit_set_cd AND
2139 us.version_number = cp_version_number AND
2140 usc.unit_set_cat = us.unit_set_cat;
2141
2142 -- Bug#2347141
2143 -- The Cursor has been added to check the Student Confirmed indicator is yes
2144 CURSOR c_spa IS
2145 SELECT spa.student_confirmed_ind,
2146 spa.commencement_dt ,spa.version_number
2147 FROM IGS_EN_STDNT_PS_ATT spa
2148 WHERE spa.person_id = p_person_id AND
2149 spa.course_cd = p_course_cd;
2150
2151 -- Bug#2347141
2152 -- The variable v_spa_rec is added newly, v_susa_rec modified to cursor Type.
2153 -- And also the variables v_confirmed_ind, v_selection_dt added newly.
2154 v_susa_rec c_susa%ROWTYPE;
2155 v_us_rec c_us%ROWTYPE;
2156 v_spa_rec c_spa%ROWTYPE;
2157 v_authorised_person_id IGS_AS_SU_SETATMPT.authorised_person_id%TYPE;
2158 v_authorised_on IGS_AS_SU_SETATMPT.authorised_on%TYPE;
2159
2160 v_confirmed_ind IGS_AS_SU_SETATMPT.student_confirmed_ind%TYPE;
2161 v_selection_dt IGS_AS_SU_SETATMPT.selection_dt%TYPE;
2162
2163
2164 BEGIN
2165
2166 IF v_acaiv_rec.unit_set_cd IS NOT NULL THEN
2167
2168 -- This block of Code added here for Bug#2347141 --
2169 OPEN c_us (v_acaiv_rec.unit_set_cd, v_acaiv_rec.us_version_number);
2170 FETCH c_us INTO v_us_rec;
2171 CLOSE c_us;
2172
2173 -- initializas these two variables
2174 v_confirmed_ind := 'N';
2175 v_selection_dt := NULL;
2176
2177 -- It checks the Pre-Enrollment Year Profile option has been set and the Unit set does
2178 -- not require authorization and when the Unit Set being pre enrolled is a Pre-Enrollment Year ,
2179 -- Whose seeded value for Unit Set Category is 'PRENRL_YR'
2180 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') ='Y' AND
2181 v_us_rec.authorisation_rqrd_ind = 'N' AND
2182 v_us_rec.s_unit_set_cat = 'PRENRL_YR' THEN
2183
2184
2185 OPEN c_spa;
2186 FETCH c_spa INTO v_spa_rec;
2187 IF c_spa%NOTFOUND THEN
2188 CLOSE c_spa;
2189 ELSE
2190 -- If any record found for the Person and Course code, the Student Confirmed indicator
2191 -- has been set then the local variable for student Confirmed indicator has been set to yes.
2192 CLOSE c_spa;
2193 IF v_spa_rec.student_confirmed_ind='Y' THEN
2194 v_confirmed_ind := 'Y';
2195 --set the selection date to the SPA commencement date
2196 v_selection_dt := v_spa_rec.commencement_dt;
2197 END IF;
2198 END IF; -- if no spa found
2199
2200 END IF; -- end of profile
2201 -- End of the Block of Code for Bug#2347141 --
2202
2203
2204 -- Check whether the IGS_PS_UNIT set has already been registered.
2205 -- Ignore any existing records which have been discontinued.
2206 OPEN c_susa;
2207 FETCH c_susa INTO v_susa_rec;
2208 IF c_susa%FOUND THEN
2209
2210 IF v_susa_rec.student_confirmed_ind = 'N' AND
2211 v_confirmed_ind ='Y' THEN
2212 IF igs_en_gen_legacy.check_usa_overlap(
2213 v_susa_rec.person_id,
2214 v_susa_rec.course_cd,
2215 TRUNC(v_selection_dt),
2216 v_susa_rec.rqrmnts_complete_dt,
2217 v_susa_rec.end_dt,
2218 v_susa_rec.sequence_number,
2219 v_susa_rec.unit_set_cd,
2220 v_susa_rec.us_version_number,
2221 p_message_name) = FALSE THEN
2222
2223 p_warn_level := cst_error;
2224 IF p_log_creation_dt IS NOT NULL THEN
2225 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
2226 cst_pre_enrol,
2227 p_log_creation_dt,
2228 cst_error || ',' ||
2229 TO_CHAR(p_person_id) || ',' ||
2230 p_course_cd,
2231 p_message_name,
2232 NULL);
2233 END IF;
2234 RETURN FALSE;
2235 END IF ;
2236
2237 -- Bug#2347141
2238 -- Its updating the record in the Unit Set Attempt table with student conformed indicator as 'Y'
2239 -- and the Selection date as the value in the local variable.
2240 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW(
2241 X_ROWID => v_susa_rec.rowid,
2242 X_PERSON_ID => v_susa_rec.person_id ,
2243 X_COURSE_CD => v_susa_rec.course_cd ,
2244 X_UNIT_SET_CD => v_susa_rec.unit_set_cd ,
2245 X_SEQUENCE_NUMBER => v_susa_rec.sequence_number,
2246 X_US_VERSION_NUMBER => v_susa_rec.us_version_number,
2247 X_SELECTION_DT => TRUNC(v_selection_dt),
2248 X_STUDENT_CONFIRMED_IND => v_confirmed_ind,
2249 X_END_DT => v_susa_rec.end_dt ,
2250 X_PARENT_UNIT_SET_CD => v_susa_rec.parent_unit_set_cd ,
2251 X_PARENT_SEQUENCE_NUMBER => v_susa_rec.parent_sequence_number ,
2252 X_PRIMARY_SET_IND => v_susa_rec.primary_set_ind ,
2253 X_VOLUNTARY_END_IND => v_susa_rec.voluntary_end_ind ,
2254 X_AUTHORISED_PERSON_ID => v_susa_rec.authorised_person_id ,
2255 X_AUTHORISED_ON => v_susa_rec.authorised_on ,
2256 X_OVERRIDE_TITLE => v_susa_rec.override_title ,
2257 X_RQRMNTS_COMPLETE_IND => v_susa_rec.rqrmnts_complete_ind ,
2258 X_RQRMNTS_COMPLETE_DT => v_susa_rec.rqrmnts_complete_dt ,
2259 X_S_COMPLETED_SOURCE_TYPE => v_susa_rec.s_completed_source_type ,
2260 X_CATALOG_CAL_TYPE => v_susa_rec.catalog_cal_type ,
2261 X_CATALOG_SEQ_NUM => v_susa_rec.catalog_seq_num ,
2262 X_ATTRIBUTE_CATEGORY => v_susa_rec.attribute_category ,
2263 X_ATTRIBUTE1 => v_susa_rec.attribute1 ,
2264 X_ATTRIBUTE2 => v_susa_rec.attribute2 ,
2265 X_ATTRIBUTE3 => v_susa_rec.attribute3 ,
2266 X_ATTRIBUTE4 => v_susa_rec.attribute4 ,
2267 X_ATTRIBUTE5 => v_susa_rec.attribute5 ,
2268 X_ATTRIBUTE6 => v_susa_rec.attribute6 ,
2269 X_ATTRIBUTE7 => v_susa_rec.attribute7 ,
2270 X_ATTRIBUTE8 => v_susa_rec.attribute8 ,
2271 X_ATTRIBUTE9 => v_susa_rec.attribute9 ,
2272 X_ATTRIBUTE10 => v_susa_rec.attribute10 ,
2273 X_ATTRIBUTE11 => v_susa_rec.attribute11 ,
2274 X_ATTRIBUTE12 => v_susa_rec.attribute12 ,
2275 X_ATTRIBUTE13 => v_susa_rec.attribute13 ,
2276 X_ATTRIBUTE14 => v_susa_rec.attribute14 ,
2277 X_ATTRIBUTE15 => v_susa_rec.attribute15 ,
2278 X_ATTRIBUTE16 => v_susa_rec.attribute16 ,
2279 X_ATTRIBUTE17 => v_susa_rec.attribute17 ,
2280 X_ATTRIBUTE18 => v_susa_rec.attribute18 ,
2281 X_ATTRIBUTE19 => v_susa_rec.attribute19 ,
2282 X_ATTRIBUTE20 => v_susa_rec.attribute20 ,
2283 X_MODE => 'R');
2284
2285 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') = 'Y' AND
2286 v_us_rec.s_unit_set_cat = 'PRENRL_YR' THEN
2287
2288 IF NOT update_stream_unit_sets(
2289 p_person_id,
2290 p_course_cd,
2291 v_susa_rec.unit_set_cd,
2292 v_susa_rec.rqrmnts_complete_ind,
2293 v_susa_rec.rqrmnts_complete_dt,
2294 v_selection_dt,
2295 v_confirmed_ind,
2296 p_log_creation_dt,
2297 p_message_name
2298 ) THEN
2299 RETURN FALSE;
2300 END IF;
2301
2302 END IF;
2303
2304 END IF;
2305
2306 ELSE -- no susa record found
2307 CLOSE c_susa;
2308
2309 -- If the Authorization required for the Unit set then get the authorized Person Id
2310 IF v_us_rec.authorisation_rqrd_ind ='Y' THEN
2311 v_authorised_person_id := IGS_AD_GEN_003.ADMP_GET_ACAI_AOS_ID(
2312 v_acaiv_rec.person_id,
2313 v_acaiv_rec.admission_appl_number,
2314 v_acaiv_rec.nominated_course_cd,
2315 v_acaiv_rec.sequence_number,
2316 v_authorised_on);
2317 IF v_authorised_person_id IS NULL THEN
2318 v_authorised_on := NULL;
2319 END IF;
2320 ELSE
2321 v_authorised_person_id := NULL;
2322 v_authorised_on := NULL;
2323 END IF;
2324
2325 IF NOT create_unit_set(
2326 p_person_id,
2327 p_course_cd,
2328 v_acaiv_rec.unit_set_cd,
2329 v_acaiv_rec.us_version_number,
2330 v_selection_dt,
2331 v_confirmed_ind,
2332 v_authorised_person_id,
2333 v_authorised_on,
2334 l_seqval,
2335 p_log_creation_dt,
2336 p_message_name
2337 ) THEN
2338 RETURN FALSE;
2339 END IF;
2340
2341 -- smaddali 12-jun-2002 added this call for bug#2391799 to create susa hesa details record for the newly pre-enrolled year
2342 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') = 'Y' AND
2343 v_us_rec.s_unit_set_cat = 'PRENRL_YR' THEN
2344
2345 IF NOT create_stream_unit_sets(
2346 p_person_id,
2347 p_course_cd,
2348 v_acaiv_rec.unit_set_cd,
2349 v_selection_dt,
2350 v_confirmed_ind,
2351 p_log_creation_dt,
2352 p_message_name
2353 ) THEN
2354 RETURN FALSE;
2355 END IF;
2356
2357 IF l_seqval IS NOT NULL THEN
2358 copy_hesa_details(
2359 p_person_id,
2360 p_course_cd,
2361 v_acaiv_rec.crv_version_number,
2362 NULL,
2363 NULL,
2364 NULL ,
2365 v_acaiv_rec.unit_set_cd,
2366 v_acaiv_rec.us_version_number,
2367 l_seqval );
2368 END IF;
2369 END IF ;
2370
2371
2372 END IF;
2373 END IF;
2374
2375 RETURN TRUE;
2376 EXCEPTION
2377 WHEN OTHERS THEN
2378 IF c_susa%ISOPEN THEN
2379 CLOSE c_susa;
2380 END IF;
2381 RAISE;
2382 END;
2383 EXCEPTION
2384 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
2385 RAISE;
2386 WHEN OTHERS THEN
2387 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
2388 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_copy_adm_unit_sets');
2389 IGS_GE_MSG_STACK.ADD;
2390 App_Exception.Raise_Exception;
2391
2392 END enrpl_copy_adm_unit_sets;
2393
2394 PROCEDURE enrpl_copy_adm_sua (
2395 p_warn_level OUT NOCOPY VARCHAR2,
2396 p_message_name OUT NOCOPY VARCHAR2,
2397 p_added_ind OUT NOCOPY VARCHAR2,
2398 p_enr_method IN VARCHAR2,
2399 p_lload_cal_type IN VARCHAR2,
2400 p_lload_ci_seq_num IN NUMBER)
2401 AS
2402 /*****************************************************/
2403 --Who When What
2404 --mesriniv 12-sep-2002 Added a new parameter waitlist_manual_ind in insert row of IGS_EN_SU_ATTEMPT
2405 -- for Bug 2554109 MINI Waitlist Build for Jan 03 Release
2406 --ptandon 06-Oct-2003 Modified to get the value of core indicator and pass to Igs_En_Gen_010.enrp_vald_inst_sua
2407 -- as part of Prevent Dropping Core Units. Enh Bug# 3052432.
2408 /****************************************************/
2409
2410 BEGIN -- enrpl_copy_adm_sua
2411 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions, as parameter
2412 -- to the process or through the Pattern of Study.
2413 DECLARE
2414 --modifying cursor to join with unit_ofr_opt tabale to order by the sup_uoo_id
2415 --in order to process the superior units first, as part of placements build.
2416 CURSOR c_acaiu IS
2417 SELECT acaiu.unit_cd,
2418 acaiu.uv_version_number,
2419 acaiu.cal_type,
2420 acaiu.ci_sequence_number,
2421 acaiu.location_cd,
2422 acaiu.unit_class
2423 FROM IGS_AD_PS_APLINSTUNT acaiu,
2424 IGS_AD_UNIT_OU_STAT auos,
2425 IGS_PS_UNIT_OFR_OPT uoo
2426 WHERE acaiu.person_id = v_acaiv_rec.person_id AND
2427 acaiu.admission_appl_number = v_acaiv_rec.admission_appl_number AND
2428 acaiu.nominated_course_cd = v_acaiv_rec.nominated_course_cd AND
2429 acaiu.acai_sequence_number = v_acaiv_rec.sequence_number AND
2430 auos.ADM_UNIT_OUTCOME_STATUS = acaiu.ADM_UNIT_OUTCOME_STATUS AND
2431 auos.s_adm_outcome_status = cst_offer AND
2432 acaiu.unit_cd = uoo.unit_cd AND
2433 acaiu.uv_version_number = uoo.version_number AND
2434 acaiu.cal_type = uoo.cal_type AND
2435 acaiu.ci_sequence_number = uoo.ci_sequence_number AND
2436 acaiu.location_cd = uoo.location_cd AND
2437 acaiu.unit_class = uoo.unit_class
2438 ORDER BY uoo.sup_uoo_id DESC;
2439
2440 CURSOR c_sua (
2441 cp_unit_cd IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
2442 cp_uv_version_number IGS_EN_SU_ATTEMPT.version_number%TYPE) IS
2443 SELECT 'x'
2444 FROM IGS_EN_SU_ATTEMPT sua
2445 WHERE person_id = p_person_id AND
2446 course_cd = p_course_cd AND
2447 unit_cd = cp_unit_cd AND
2448 version_number = cp_uv_version_number;
2449
2450 --
2451 -- Cursor to get the Uoo_Id - ptandon, Prevent Dropping Core Units build
2452 --
2453 CURSOR c_uoo_id (
2454 cp_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE,
2455 cp_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE,
2456 cp_ci_sequence_number IGS_PS_UNIT_OFR_OPT.ci_sequence_number%TYPE,
2457 cp_location_cd IGS_PS_UNIT_OFR_OPT.location_cd%TYPE,
2458 cp_unit_class IGS_PS_UNIT_OFR_OPT.unit_class%TYPE) IS
2459 SELECT uoo_id
2460 FROM IGS_PS_UNIT_OFR_OPT
2461 WHERE unit_cd = cp_unit_cd
2462 AND cal_type = cp_cal_type
2463 AND ci_sequence_number = cp_ci_sequence_number
2464 AND location_cd = cp_location_cd
2465 AND unit_class = cp_unit_class;
2466
2467 CURSOR c_sua_status(p_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE) IS
2468 SELECT DECODE(sua.unit_attempt_status, 'UNCONFIRM', 'N', 'WAITLISTED', 'Y' , NULL)
2469 FROM IGS_EN_SU_ATTEMPT sua
2470 WHERE sua.person_id = p_person_id AND
2471 sua.course_cd = p_course_cd AND
2472 sua.uoo_id = p_uoo_id;
2473
2474 CURSOR c_teach_cal(p_uoo_Id igs_ps_unit_ofr_opt.uoo_Id%TYPE) IS
2475 SELECT cal_type, ci_sequence_number
2476 FROM igs_ps_unit_ofr_opt
2477 WHERE uoo_id = p_uoo_id;
2478
2479
2480 v_sua_rec VARCHAR2(1);
2481 v_warn_level VARCHAR2(10);
2482 vp_warn_level VARCHAR2(10) := NULL;
2483 v_message_name VARCHAR2(2000);
2484 v_log_creation_dt DATE;
2485 v_ci_start_dt DATE;
2486 v_ci_end_dt DATE;
2487 l_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
2488 l_core_indicator IGS_EN_SU_ATTEMPT.core_indicator_code%TYPE;
2489 l_uoo_ids VARCHAR2(2000);
2490 l_enr_uoo_ids VARCHAR2(2000);
2491 l_waitlist_flag VARCHAR2(1) := NULL;
2492 l_out_uoo_ids VARCHAR2(2000);
2493 l_waitlist_uoo_ids VARCHAR2(2000);
2494 l_failed_uoo_ids VARCHAR2(2000);
2495 l_unit_attempt_status igs_en_su_Attempt.unit_attempt_status%type;
2496 l_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE;
2497 l_seq_num IGS_PS_UNIT_OFR_OPT.ci_sequence_number%TYPE;
2498 l_sup_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
2499 l_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
2500 l_unit_cds VARCHAR2(2000);
2501
2502 BEGIN
2503 p_added_ind := 'N';
2504 p_warn_level := NULL;
2505 p_message_name := null;
2506 FOR v_acaiu_rec IN c_acaiu LOOP
2507 -- Check if the IGS_PS_UNIT attempt already exists.
2508 OPEN c_sua(
2509 v_acaiu_rec.unit_cd,
2510 v_acaiu_rec.uv_version_number);
2511 FETCH c_sua INTO v_sua_rec;
2512 IF c_sua%NOTFOUND THEN
2513 CLOSE c_sua;
2514 --checking for the details of all parameters if unit_cd is not null.
2515
2516 -- Call routine to check whether there is anything preventing
2517 -- the IGS_PS_UNIT attempt from being pre-enrolled (ie. advanced
2518 -- standing or encumbrances).
2519 --aspart of placements build, checking if all details of unit section are given
2520 IF v_acaiu_rec.unit_cd IS NOT NULL
2521 AND v_acaiu_rec.cal_type IS NOT NULL
2522 AND v_acaiu_rec.ci_sequence_number IS NOT NULL
2523 AND v_acaiu_rec.location_cd IS NOT NULL
2524 AND v_acaiu_rec.unit_class IS NOT NULL THEN
2525
2526 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_pre(
2527 p_person_id,
2528 p_course_cd,
2529 v_acaiu_rec.unit_cd,
2530 v_log_creation_dt,
2531 v_warn_level,
2532 v_message_name) THEN
2533 IF p_log_creation_dt IS NOT NULL THEN
2534 -- If the log creation date is set then log the HECS error
2535 -- This is if the pre-enrolment is being performed in batch.
2536 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
2537 cst_pre_enrol,
2538 p_log_creation_dt,
2539 v_warn_level || ',' ||
2540 TO_CHAR(p_person_id) || ',' ||
2541 p_course_cd,
2542 v_message_name,
2543 NULL);
2544 END IF;
2545 IF vp_warn_level IS NULL OR
2546 (vp_warn_level = cst_minor AND
2547 v_warn_level IN (cst_major,
2548 cst_error)) OR
2549 (vp_warn_level = cst_major AND
2550 v_warn_level = cst_error) THEN
2551 vp_warn_level := v_warn_level;
2552 p_message_name := v_message_name;
2553 END IF;
2554 -- continue with the next record
2555 ELSE -- enrp_val_sua_pre = TRUE
2556 IGS_CA_GEN_001.calp_get_ci_dates(v_acaiu_rec.cal_type,
2557 v_acaiu_rec.ci_sequence_number,
2558 v_ci_start_dt,
2559 v_ci_end_dt);
2560 -- Get the Uoo_Id, ptandon - Prevent Dropping Core Units build
2561 OPEN c_uoo_id(v_acaiu_rec.unit_cd,
2562 v_acaiu_rec.cal_type,
2563 v_acaiu_rec.ci_sequence_number,
2564 v_acaiu_rec.location_cd,
2565 v_acaiu_rec.unit_class);
2566 FETCH c_uoo_id INTO l_uoo_id;
2567 CLOSE c_uoo_id;
2568
2569
2570 -- Get the Core Indicator for the Unit Section
2571 l_core_indicator := igs_en_gen_009.enrp_check_usec_core(p_person_id, p_course_cd, l_uoo_id);
2572
2573 -- IGS_PS_UNIT doesn?t exist against the students record or as
2574 -- advanced standing, so insert unconfirmed IGS_PS_UNIT attempt.
2575 IF igs_en_gen_010.enrp_vald_inst_sua(p_person_id => p_person_id,
2576 p_course_cd => p_course_cd,
2577 p_unit_cd => v_acaiu_rec.unit_cd,
2578 p_version_number => v_acaiu_rec.uv_version_number,
2579 p_teach_cal_type => v_acaiu_rec.cal_type,
2580 p_teach_seq_num => v_acaiu_rec.ci_sequence_number,
2581 p_load_cal_type => p_lload_cal_type,
2582 p_load_seq_num => p_lload_ci_seq_num,
2583 p_location_cd => v_acaiu_rec.location_cd,
2584 p_unit_class => v_acaiu_rec.unit_class,
2585 p_uoo_id => NULL,
2586 p_enr_method => p_enr_method,
2587 p_core_indicator_code => l_core_indicator, -- ptandon, Prevent Dropping Core Units build
2588 p_message => v_message_name)
2589 THEN
2590 p_added_ind := 'Y';
2591 IF v_message_name IS NOT NULL THEN
2592 p_warn_level:='MINOR';
2593 p_message_name := v_message_name;
2594 END IF;
2595 --fetch the watilist indicator, added as part of placements build to pass in teh call to
2596 --enr_sub_units to validate superior subordinate relationships
2597 --before enrolling the default enroll sub units.
2598
2599 l_waitlist_flag := NULL;
2600 OPEN c_sua_status(l_uoo_id);
2601 FETCH c_sua_status INTO l_waitlist_flag;
2602 CLOSE c_sua_status;
2603
2604 --fetch the teach cal type and teach seq number
2605 l_cal_type := NULL;
2606 l_seq_num := NULL;
2607 OPEN c_teach_cal(l_uoo_id);
2608 FETCH c_teach_cal INTO l_cal_type, l_seq_num;
2609 CLOSE c_teach_cal;
2610
2611 l_failed_uoo_ids := NULL;
2612 igs_en_val_sua.enr_sub_units(
2613 p_person_id => p_person_id,
2614 p_course_cd => p_course_cd,
2615 p_uoo_id => l_uoo_id,
2616 p_waitlist_flag => l_waitlist_flag,
2617 p_load_cal_type => p_lload_cal_type,
2618 p_load_seq_num => p_lload_ci_seq_num,
2619 p_enrollment_date => NULL,
2620 p_enrollment_method =>p_enr_method,
2621 p_enr_uoo_ids => l_enr_uoo_ids,
2622 p_uoo_ids => l_out_uoo_ids,
2623 p_waitlist_uoo_ids => l_waitlist_uoo_ids,
2624 p_failed_uoo_ids => l_failed_uoo_ids);
2625
2626 IF l_failed_uoo_ids IS NOT NULL THEN
2627 --log error message if sub units did not enroll
2628 IF p_log_creation_dt IS NOT NULL THEN
2629 l_unit_cds := NULL;
2630 --following function returns a string of units codes for teh passed in string of uoo_ids
2631 l_unit_cds := igs_en_gen_018.enrp_get_unitcds(l_failed_uoo_ids);
2632 p_warn_level := cst_error;
2633 v_message_name := 'IGS_EN_BLK_SUB_FAILED'||'*'||l_unit_cds;
2634 -- If the log creation date is set then log the HECS error
2635 -- This is if the pre-enrolment is being performed in batch.
2636 log_error_message(p_s_log_type =>cst_pre_enrol,
2637 p_creation_dt =>p_log_creation_dt,
2638 p_sle_key =>p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
2639 p_sle_message_name =>v_message_name,
2640 p_del => ';');
2641 END IF;
2642 END IF;
2643 ELSE -- unit was not enrolled,enrp_vald_inst_sua returned false.
2644 p_warn_level := cst_error;
2645 p_message_name := v_message_name;
2646 END IF;
2647 IF (p_log_creation_dt IS NOT NULL) AND (v_message_name IS NOT NULL) THEN
2648 -- If the log creation date is set then log the HECS error
2649 -- This is if the pre-enrolment is being performed in batch.
2650 log_error_message(p_s_log_type =>cst_pre_enrol,
2651 p_creation_dt =>p_log_creation_dt,
2652 p_sle_key =>p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
2653 p_sle_message_name =>v_message_name,
2654 p_del => ';');
2655 END IF;
2656 END IF;
2657 ELSE
2658 p_warn_level := cst_minor;
2659 p_message_name := 'IGS_EN_SPECIFY_ALLUNITPARAM';
2660 END IF; --unit section details
2661 ELSE -- c_sua%FOUND
2662 CLOSE c_sua;
2663 -- continue with the next record
2664 END IF;
2665 END LOOP;
2666 RETURN;
2667 EXCEPTION
2668 WHEN OTHERS THEN
2669 IF c_sua%ISOPEN THEN
2670 CLOSE c_sua;
2671 END IF;
2672 IF c_acaiu%ISOPEN THEN
2673 CLOSE c_acaiu;
2674 END IF;
2675 IF c_teach_cal%ISOPEN THEN
2676 CLOSE c_teach_cal;
2677 END IF;
2678 IF c_sua_status%ISOPEN THEN
2679 CLOSE c_sua_status;
2680 END IF;
2681
2682 RAISE;
2683 END;
2684 EXCEPTION
2685 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
2686 RAISE;
2687 WHEN OTHERS THEN
2688 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
2689 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_copy_adm_sua');
2690 IGS_GE_MSG_STACK.ADD;
2691 App_Exception.Raise_Exception;
2692 END enrpl_copy_adm_sua;
2693
2694 PROCEDURE enrpl_copy_param_sua (
2695 p_warn_level OUT NOCOPY VARCHAR2,
2696 p_message_name OUT NOCOPY VARCHAR2,
2697 p_added_ind OUT NOCOPY VARCHAR2,
2698 p_enr_method IN VARCHAR2,
2699 p_lload_cal_type IN VARCHAR2,
2700 p_lload_ci_seq_num IN NUMBER)
2701 AS
2702 -------------------------------------------------------------------------------------------
2703 --Change History:
2704 --Who When What
2705 --kkillams 28-04-2003 Modified the c_sua cursor w.r.t. bug number 2829262
2706 --ptandon 06-Oct-2003 Modified to get the value of core indicator and pass to Igs_En_Gen_010.enrp_vald_inst_sua
2707 -- as part of Prevent Dropping Core Units. Enh Bug# 3052432.
2708 --svanukur 19-oct-2003 Made the following modifaications part of placements build:
2709 -- Reordered the units so that the superior units are processed first becuase of the validation in
2710 -- sua_api that checks for an appropriate superior unit attempt when a subordinate unit is enrolled.
2711 -- for all the uoo_ids , made a call to ENR_SUB_UNITS in sua_api which enrolled all those untis
2712 -- that are marked as default enroll whenever a superior unit is enrolled.
2713 -- ckasu 07-MAR-2006 modified as a part of bug#5070730
2714 -------------------------------------------------------------------------------------------
2715 BEGIN -- enrpl_copy_param_sua
2716 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions, as parameter
2717 -- to the process.
2718
2719 DECLARE
2720 CURSOR c_am (
2721 cp_attendance_mode IGS_EN_ATD_MODE.attendance_mode%TYPE) IS
2722 SELECT am.GOVT_ATTENDANCE_MODE
2723 FROM IGS_EN_ATD_MODE am
2724 WHERE am.attendance_mode = cp_attendance_mode;
2725 CURSOR c_cir (
2726 cp_cal_type IGS_CA_INST.cal_type%TYPE) IS
2727 SELECT ci.sequence_number
2728 FROM IGS_CA_INST_REL cir,
2729 IGS_CA_INST ci,
2730 IGS_CA_TYPE cat,
2731 IGS_CA_STAT cs
2732 WHERE cir.sup_cal_type = p_acad_cal_type AND
2733 cir.sup_ci_sequence_number = p_acad_sequence_number AND
2734 ci.cal_type = cir.sub_cal_type AND
2735 ci.sequence_number = cir.sub_ci_sequence_number AND
2736 ci.cal_type = cp_cal_type AND
2737 cat.cal_type = ci.cal_type AND
2738 cat.S_CAL_CAT = 'TEACHING' AND
2739 cs.CAL_STATUS = ci.CAL_STATUS AND
2740 cs.s_cal_status = 'ACTIVE'
2741 ORDER BY ci.start_dt;
2742 CURSOR c_sua (
2743 cp_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
2744 cp_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE,
2745 cp_unit_cd IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
2746 cp_cal_type IGS_EN_SU_ATTEMPT.cal_type%TYPE,
2747 cp_ci_sequence_number IGS_EN_SU_ATTEMPT.ci_sequence_number%TYPE,
2748 cp_location_cd IGS_EN_SU_ATTEMPT.location_cd%TYPE,
2749 cp_unit_class IGS_EN_SU_ATTEMPT.unit_class%TYPE) IS
2750 SELECT 'x'
2751 FROM IGS_EN_SU_ATTEMPT
2752 WHERE person_id = cp_person_id AND
2753 course_cd = cp_course_cd AND
2754 unit_cd = cp_unit_cd AND
2755 cal_type = cp_cal_type AND
2756 ci_sequence_number = cp_ci_sequence_number AND
2757 location_cd = cp_location_cd AND
2758 unit_class = cp_unit_class;
2759
2760 CURSOR c_sua_status(p_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE) IS
2761 SELECT DECODE(sua.unit_attempt_status, 'UNCONFIRM', 'N', 'WAITLISTED', 'Y' , NULL)
2762 FROM IGS_EN_SU_ATTEMPT sua
2763 WHERE sua.person_id = p_person_id AND
2764 sua.course_cd = p_course_cd AND
2765 sua.uoo_id = p_uoo_id;
2766
2767 CURSOR c_rel_type(p_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE) IS
2768 SELECT relation_type
2769 FROM IGS_PS_UNIT_OFR_OPT
2770 WHERE uoo_id = p_uoo_id;
2771
2772 CURSOR c_teach_cal(p_uoo_Id igs_ps_unit_ofr_opt.uoo_Id%TYPE) IS
2773 SELECT cal_type, ci_sequence_number
2774 FROM igs_ps_unit_ofr_opt
2775 WHERE uoo_id = p_uoo_id;
2776
2777 v_am_rec c_am%ROWTYPE;
2778 v_sua_rec VARCHAR2(1);
2779 v_cir_rec c_cir%ROWTYPE;
2780 v_warn_level VARCHAR2(10);
2781 v_log_creation_dt DATE;
2782 vp_warn_level VARCHAR2(10) := NULL;
2783 v_message_name VARCHAR2(2000);
2784 v_attendance_mode VARCHAR2(3);
2785 v_counter NUMBER := 0;
2786 v_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
2787 v_session_id VARCHAR2(255);
2788 v_ci_start_dt DATE;
2789 v_ci_end_dt DATE;
2790 -- variable used to keep the values on the
2791 -- parameter specified units. p_unit<x>_....
2792 v_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
2793 v_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE;
2794 v_location_cd IGS_PS_UNIT_OFR_OPT.location_cd%TYPE;
2795 v_unit_class IGS_PS_UNIT_OFR_OPT.unit_class%TYPE;
2796 l_core_indicator IGS_EN_SU_ATTEMPT.core_indicator_code%TYPE;
2797
2798 l_rel_type IGS_PS_UNIT_OFR_OPT.relation_type%TYPE;
2799 l_uoo_ids VARCHAR2(2000);
2800 l_enr_uoo_ids VARCHAR2(2000);
2801 l_out_uoo_ids VARCHAR2(2000);
2802 l_waitlist_uoo_ids VARCHAR2(2000);
2803 l_failed_uoo_ids VARCHAR2(2000);
2804 l_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
2805 TYPE t_params_table IS TABLE OF NUMBER(7) INDEX BY BINARY_INTEGER;
2806 t_sup_params t_params_table;
2807 t_sub_params t_params_table;
2808 t_ord_params t_params_table;
2809 v_sup_index BINARY_INTEGER := 1;
2810 v_sub_index BINARY_INTEGER := 1;
2811 v_ord_index BINARY_INTEGER := 1;
2812 l_waitlist_flag varchar2(1) := NULL;
2813 l_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE;
2814 l_seq_num IGS_PS_UNIT_OFR_OPT.ci_sequence_number%TYPE;
2815 l_sup_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
2816 l_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
2817 l_unit_cds VARCHAR2(2000);
2818
2819 BEGIN
2820 p_added_ind := 'N';
2821 vp_warn_level := NULL;
2822 p_message_name := null;
2823 -- Get the student?s IGS_PS_GOVT_ATD_MODE before the pre-enrolment
2824 -- starts. It is passed to the routine determining which UOO to
2825 -- select for a pre-enrolled IGS_PS_UNIT.
2826 OPEN c_am(
2827 v_attendance_mode);
2828 FETCH c_am INTO v_am_rec;
2829 CLOSE c_am;
2830 IF v_am_rec.GOVT_ATTENDANCE_MODE = '1' THEN
2831 v_attendance_mode := 'ON';
2832 ELSIF v_am_rec.GOVT_ATTENDANCE_MODE = '2' THEN
2833 v_attendance_mode := 'OFF';
2834 ELSE
2835 v_attendance_mode := '%';
2836 END IF;
2837 -- loop through each of the specified units
2838 FOR v_counter IN 1..12 LOOP
2839 -- insert the IGS_PS_UNIT values into the local variables
2840 SELECT DECODE( v_counter,
2841 1, p_unit1_unit_cd,
2842 2, p_unit2_unit_cd,
2843 3, p_unit3_unit_cd,
2844 4, p_unit4_unit_cd,
2845 5, p_unit5_unit_cd,
2846 6, p_unit6_unit_cd,
2847 7, p_unit7_unit_cd,
2848 8, p_unit8_unit_cd,
2849 9, p_unit9_unit_cd,
2850 10, p_unit10_unit_cd,
2851 11, p_unit11_unit_cd,
2852 12, p_unit12_unit_cd,
2853 NULL),
2854 DECODE( v_counter,
2855 1, p_unit1_cal_type,
2856 2, p_unit2_cal_type,
2857 3, p_unit3_cal_type,
2858 4, p_unit4_cal_type,
2859 5, p_unit5_cal_type,
2860 6, p_unit6_cal_type,
2861 7, p_unit7_cal_type,
2862 8, p_unit8_cal_type,
2863 9, p_unit9_cal_type,
2864 10, p_unit10_cal_type,
2865 11, p_unit11_cal_type,
2866 12, p_unit12_cal_type,
2867 NULL),
2868 DECODE( v_counter,
2869 1, p_unit1_location_cd,
2870 2, p_unit2_location_cd,
2871 3, p_unit3_location_cd,
2872 4, p_unit4_location_cd,
2873 5, p_unit5_location_cd,
2874 6, p_unit6_location_cd,
2875 7, p_unit7_location_cd,
2876 8, p_unit8_location_cd,
2877 9, p_unit9_location_cd,
2878 10, p_unit10_location_cd,
2879 11, p_unit11_location_cd,
2880 12, p_unit12_location_cd,
2881 NULL),
2882 DECODE( v_counter,
2883 1, p_unit1_unit_class,
2884 2, p_unit2_unit_class,
2885 3, p_unit3_unit_class,
2886 4, p_unit4_unit_class,
2887 5, p_unit5_unit_class,
2888 6, p_unit6_unit_class,
2889 7, p_unit7_unit_class,
2890 8, p_unit8_unit_class,
2891 9, p_unit9_unit_class,
2892 10, p_unit10_unit_class,
2893 11, p_unit11_unit_class,
2894 12, p_unit12_unit_class,
2895 NULL)
2896 INTO v_unit_cd,
2897 v_cal_type,
2898 v_location_cd,
2899 v_unit_class
2900 FROM DUAL;
2901 IF v_unit_cd IS NOT NULL THEN
2902 p_added_ind := 'Y';
2903 -- Call routine to check whether there is anything preventing
2904 -- the IGS_PS_UNIT attempt from being pre-enrolled (ie. advanced
2905 -- standing or encumbrances).
2906 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_pre(
2907 p_person_id,
2908 p_course_cd,
2909 v_unit_cd,
2910 p_log_creation_dt,
2911 v_warn_level,
2912 v_message_name) THEN
2913 IF p_log_creation_dt IS NOT NULL THEN
2914 -- If the log creation date is set then log the HECS error
2915 -- This is if the pre-enrolment is being performed in batch.
2916 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
2917 cst_pre_enrol,
2918 p_log_creation_dt,
2919 cst_minor || ',' ||
2920 TO_CHAR(p_person_id) || ',' ||
2921 p_course_cd,
2922 v_message_name,
2923 NULL);
2924 END IF;
2925 IF vp_warn_level IS NULL OR
2926 (vp_warn_level = cst_minor AND v_warn_level IN (cst_major,cst_error)) OR
2927 (vp_warn_level = cst_major AND v_warn_level = cst_error) THEN
2928 vp_warn_level := v_warn_level;
2929 p_message_name := v_message_name;
2930 END IF;
2931 p_warn_level := vp_warn_level;
2932 RETURN;
2933 END IF;
2934 -- For each of the specified units, determine the appropriate calendar
2935 -- instance and IGS_PS_UNIT offering option and add the IGS_PS_UNIT attempt.
2936 -- Determine the calendar instance of the pre-enrolment within the
2937 -- academic calendar instance; if multiple exist (straddling teaching
2938 -- periods) then pick the earliest.
2939 OPEN c_cir(
2940 v_cal_type);
2941 FETCH c_cir INTO v_cir_rec;
2942 IF c_cir%FOUND THEN
2943 CLOSE c_cir;
2944 -- use the first record found
2945 -- Check whether the student is already enrolled
2946 -- in the IGS_PS_UNIT attempt.
2947 OPEN c_sua(
2948 p_person_id,
2949 p_course_cd,
2950 v_unit_cd,
2951 v_cal_type,
2952 v_cir_rec.sequence_number,
2953 v_location_cd,
2954 v_unit_class);
2955 FETCH c_sua INTO v_sua_rec;
2956 IF c_sua%NOTFOUND THEN
2957 CLOSE c_sua;
2958 -- Call routine to get the UOO for the selected
2959 -- IGS_PS_UNIT.
2960 IF NOT IGS_EN_GEN_005.enrp_get_pre_uoo(
2961 v_unit_cd,
2962 v_cal_type,
2963 v_cir_rec.sequence_number,
2964 v_location_cd,
2965 v_unit_class,
2966 v_attendance_mode,
2967 v_acaiv_rec.location_cd,
2968 v_uoo_id) THEN
2969 IF p_log_creation_dt IS NOT NULL THEN
2970 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
2971 cst_pre_enrol,
2972 p_log_creation_dt,
2973 cst_minor || ',' ||
2974 TO_CHAR(p_person_id) || ',' ||
2975 p_course_cd,
2976 'IGS_EN_UNABLE_LOCATE_UOO_MATC',
2977 v_cal_type || ',' ||
2978 v_unit_cd || ',' ||
2979 v_location_cd || ',' ||
2980 v_unit_class);
2981 END IF;
2982 p_warn_level := 'MINOR';
2983 p_message_name := 'IGS_EN_UNABLE_LOCATE_UOO_MATC';
2984 ELSE
2985 l_rel_type := NULL;
2986 OPEN c_rel_type(v_uoo_id);
2987 FETCH c_rel_type INTO l_rel_type;
2988 CLOSE c_rel_type;
2989 IF l_rel_type= 'SUPERIOR' THEN
2990 t_sup_params(v_sup_index) := v_uoo_id;
2991 v_sup_index :=v_sup_index+1;
2992 ELSIF l_rel_type = 'SUBORDINATE' THEN
2993 t_sub_params(v_sub_index) := v_uoo_id;
2994 v_sub_index := v_sub_index+1;
2995 ELSE
2996 t_ord_params(v_ord_index) := v_uoo_id;
2997 v_ord_index := v_ord_index+1;
2998 END IF;
2999
3000 END IF;
3001 ELSE -- c_sua%FOUND
3002 CLOSE c_sua;
3003 END IF;
3004 ELSE -- c_cir%NOTFOUND
3005 CLOSE c_cir;
3006 END IF;
3007 END IF;
3008 END LOOP; -- 8 units
3009 -- add all the uoo_ids to one pl/sql table, with superiors, first, subordinate next and the rest .
3010 --concatenate uoo_ids to pass to enr_sub_units.
3011 IF t_sup_params.count > 0 THEN
3012 FOR i in 1 .. t_sup_params.count LOOP
3013 IF l_uoo_ids IS NOT NULL then
3014 l_uoo_ids := l_uoo_ids ||','||t_sup_params(i);
3015 ELSE
3016 l_uoo_ids := t_sup_params(i);
3017 END IF;
3018 END LOOP;
3019 END IF;
3020 IF t_sub_params.count > 0 THEN
3021 FOR i in 1 .. t_sub_params.count LOOP
3022 IF l_uoo_ids IS NOT NULL then
3023 l_uoo_ids := l_uoo_ids ||','||t_sub_params(i);
3024 ELSE
3025 l_uoo_ids := t_sub_params(i);
3026 END IF;
3027 END LOOP;
3028 END IF;
3029 IF t_ord_params.count > 0 THEN
3030 FOR i in 1 .. t_ord_params.count LOOP
3031 IF l_uoo_ids IS NOT NULL then
3032 l_uoo_ids := l_uoo_ids ||','||t_ord_params(i);
3033 ELSE
3034 l_uoo_ids := t_ord_params(i);
3035 END IF;
3036 END LOOP;
3037 END IF;
3038
3039 -- the concatenated uoo-ids are in l_uoo_ids in the order of superior, subordinate and then the rest.
3040 --for each of these , call the enrp_vald_inst_sua.
3041 l_enr_uoo_ids := l_uoo_ids;
3042
3043 WHILE l_enr_uoo_ids IS NOT NULL LOOP
3044 l_uoo_id := NULL;
3045
3046 --extract the uoo_id
3047 IF(INSTR(l_enr_uoo_ids,',',1) = 0) THEN
3048 l_uoo_id := TO_NUMBER(l_enr_uoo_ids);
3049 ELSE
3050 l_uoo_id := TO_NUMBER(SUBSTR(l_enr_uoo_ids,0,INSTR(l_enr_uoo_ids,',',1)-1)) ;
3051 END IF;
3052
3053
3054 IGS_CA_GEN_001.calp_get_ci_dates(
3055 v_cal_type,
3056 v_cir_rec.sequence_number,
3057 v_ci_start_dt,
3058 v_ci_end_dt);
3059
3060 -- Get the Core Indicator for the Unit Section
3061 l_core_indicator := igs_en_gen_009.enrp_check_usec_core(p_person_id, p_course_cd, l_uoo_id);
3062
3063 IF igs_en_gen_010.enrp_vald_inst_sua(p_person_id => p_person_id,
3064 p_course_cd => p_course_cd,
3065 p_unit_cd => NULL,
3066 p_version_number => NULL,
3067 p_teach_cal_type => NULL,
3068 p_teach_seq_num => NULL,
3069 p_load_cal_type => p_lload_cal_type,
3070 p_load_seq_num => p_lload_ci_seq_num,
3071 p_location_cd => NULL,
3072 p_unit_class => NULL,
3073 p_uoo_id => l_uoo_id,
3074 p_enr_method => p_enr_method,
3075 p_core_indicator_code => l_core_indicator, -- ptandon, Prevent Dropping Core Units build
3076 p_message => v_message_name)
3077 THEN
3078 IF v_message_name IS NOT NULL THEN
3079 p_warn_level := 'MINOR';
3080 p_message_name := v_message_name;
3081 END IF;
3082
3083 --call enr_sub_units to enroll any subordinate units that are marked as default enroll
3084 --fetch the unit attempt status to check if it is unconfirmed or watilisted.
3085
3086 l_waitlist_flag := NULL;
3087 OPEN c_sua_status(l_uoo_id);
3088 FETCH c_sua_status INTO l_waitlist_flag;
3089 CLOSE c_sua_status;
3090
3091 --fetch the teach cal type and teach seq number
3092 l_cal_type := NULL;
3093 l_seq_num := NULL;
3094
3095 OPEN c_teach_cal(l_uoo_id);
3096 FETCH c_teach_cal INTO l_cal_type, l_seq_num;
3097 CLOSE c_teach_cal;
3098
3099 l_failed_uoo_ids := NULL;
3100 igs_en_val_sua.enr_sub_units(
3101 p_person_id => p_person_id,
3102 p_course_cd => p_course_cd,
3103 p_uoo_id => l_uoo_id,
3104 p_waitlist_flag => l_waitlist_flag,
3105 p_load_cal_type => p_lload_cal_type,
3106 p_load_seq_num => p_lload_ci_seq_num,
3107 p_enrollment_date => NULL,
3108 p_enrollment_method => p_enr_method,
3109 p_enr_uoo_ids => l_enr_uoo_ids,
3110 p_uoo_ids => l_out_uoo_ids,
3111 p_waitlist_uoo_ids => l_waitlist_uoo_ids,
3112 p_failed_uoo_ids => l_failed_uoo_ids);
3113
3114 IF l_failed_uoo_ids IS NOT NULL THEN
3115 --log error message if sub units did not enroll
3116 IF p_log_creation_dt IS NOT NULL THEN
3117 l_unit_cds := NULL;
3118 --following function returns a string of units codes for teh passed in string of uoo_ids
3119 l_unit_cds := igs_en_gen_018.enrp_get_unitcds(l_failed_uoo_ids);
3120 p_warn_level := cst_error;
3121 v_message_name := 'IGS_EN_BLK_SUB_FAILED'||'*'||l_unit_cds;
3122
3123 -- If the log creation date is set then log the HECS error
3124 -- This is if the pre-enrolment is being performed in batch.
3125 log_error_message(p_s_log_type =>cst_pre_enrol,
3126 p_creation_dt =>p_log_creation_dt,
3127 p_sle_key =>p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
3128 p_sle_message_name =>v_message_name,
3129 p_del => ';');
3130 END IF;
3131 END IF;
3132 ELSE --the unit was not enrolled i.e enrp_vald_inst_sua returned false.
3133
3134 p_warn_level := cst_error;
3135 p_message_name := v_message_name;
3136 END IF;
3137
3138 IF (p_log_creation_dt IS NOT NULL) AND (v_message_name IS NOT NULL) THEN
3139 -- If the log creation date is set then log the HECS error
3140 -- This is if the pre-enrolment is being performed in batch.
3141 log_error_message(p_s_log_type => cst_pre_enrol,
3142 p_creation_dt => p_log_creation_dt,
3143 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
3144 p_sle_message_name => v_message_name,
3145 p_del => ';');
3146 END IF;
3147
3148 --remove the processed uoo_id from the list of uoo_ids.
3149 IF(INSTR(l_enr_uoo_ids,',',1) = 0) THEN
3150 l_enr_uoo_ids := NULL;
3151 ELSE
3152 l_enr_uoo_ids := SUBSTR(l_enr_uoo_ids,INSTR(l_enr_uoo_ids,',',1)+1);
3153 END IF;
3154
3155
3156 END LOOP;
3157 RETURN;
3158 EXCEPTION
3159 WHEN OTHERS THEN
3160 IF c_sua%ISOPEN THEN
3161 CLOSE c_sua;
3162 END IF;
3163 IF c_am%ISOPEN THEN
3164 CLOSE c_am;
3165 END IF;
3166 IF c_cir%ISOPEN THEN
3167 CLOSE c_cir;
3168 END IF;
3169 IF c_teach_cal%ISOPEN THEN
3170 CLOSE c_teach_cal;
3171 END IF;
3172 IF c_sua_status%ISOPEN THEN
3173 CLOSE c_sua_status;
3174 END IF;
3175 IF c_rel_type%ISOPEN THEN
3176 CLOSE c_rel_type;
3177 END IF;
3178 RAISE;
3179 END;
3180 EXCEPTION
3181 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
3182 RAISE;
3183 WHEN OTHERS THEN
3184 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
3185 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_copy_param_sua');
3186 IGS_GE_MSG_STACK.ADD;
3187 App_Exception.Raise_Exception;
3188 END enrpl_copy_param_sua;
3189
3190 PROCEDURE enrpl_create_pos_sua (
3191 p_unit_set_cd IN igs_en_unit_set.unit_set_cd%TYPE,
3192 p_warn_level OUT NOCOPY VARCHAR2,
3193 p_message_name OUT NOCOPY VARCHAR2,
3194 p_enr_method IN VARCHAR2,
3195 p_lload_cal_type IN VARCHAR2,
3196 p_lload_ci_seq_num IN NUMBER)
3197 AS
3198
3199 BEGIN -- enrpl_create_pos_sua
3200 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions
3201 -- through the Pattern of Study.
3202
3203 DECLARE
3204 v_warn_level VARCHAR2(10);
3205 v_log_creation_dt DATE;
3206 v_message_name VARCHAR2(2000);
3207 v_return BOOLEAN;
3208 BEGIN
3209
3210 p_warn_level := NULL;
3211 p_message_name := null;
3212 v_return := IGS_EN_GEN_009.enrp_ins_pre_pos(p_acad_cal_type =>p_acad_cal_type,
3213 p_acad_sequence_number =>p_acad_sequence_number,
3214 p_person_id =>p_person_id,
3215 p_course_cd =>p_course_cd,
3216 p_version_number =>v_acaiv_rec.crv_version_number,
3217 p_location_cd =>v_acaiv_rec.location_cd,
3218 p_attendance_mode =>v_acaiv_rec.attendance_mode,
3219 p_attendance_type =>v_acaiv_rec.attendance_type,
3220 p_unit_set_cd =>p_unit_set_cd,
3221 p_adm_cal_type =>v_acaiv_rec.adm_cal_type,
3222 p_admission_cat =>v_acaiv_rec.admission_cat,
3223 p_log_creation_dt =>p_log_creation_dt,
3224 p_units_indicator =>p_units_indicator,
3225 p_warn_level =>v_warn_level,
3226 p_message_name =>v_message_name,
3227 p_progress_stat =>p_progress_stat,
3228 p_progress_outcome_type =>gv_progress_outcome_type,
3229 p_enr_method =>p_enr_method,
3230 p_load_cal_type =>p_lload_cal_type,
3231 p_load_ci_seq_num =>p_lload_ci_seq_num);
3232
3233 IF (v_message_name IS NOT NULL) AND ( NOT v_return )THEN
3234 p_warn_level := cst_major;
3235 p_message_name := v_message_name;
3236 ELSE
3237 p_warn_level := v_warn_level;
3238 p_message_name := v_message_name;
3239 END IF;
3240
3241 IF (p_log_creation_dt IS NOT NULL) AND (v_message_name IS NOT NULL) THEN
3242 -- If the log creation date is set then log the HECS error
3243 -- This is if the pre-enrolment is being performed in batch.
3244 log_error_message(p_s_log_type => cst_pre_enrol,
3245 p_creation_dt => p_log_creation_dt,
3246 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
3247 p_sle_message_name => v_message_name,
3248 p_del => ';');
3249 END IF;
3250 RETURN;
3251 END;
3252 EXCEPTION
3253 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
3254 RAISE;
3255 WHEN OTHERS THEN
3256 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
3257 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_pos_sua');
3258 IGS_GE_MSG_STACK.ADD;
3259 App_Exception.Raise_Exception;
3260 END enrpl_create_pos_sua;
3261
3262 PROCEDURE enrpl_create_fee_contract(
3263 p_warn_level OUT NOCOPY VARCHAR2,
3264 p_message_name OUT NOCOPY VARCHAR2)
3265 AS
3266
3267 BEGIN -- enrpl_create_fee_contract
3268 -- Create Fee Contract
3269 DECLARE
3270 CURSOR c_apcs IS
3271 SELECT 'x'
3272 FROM IGS_AD_PRCS_CAT_STEP apcs
3273 WHERE apcs.admission_cat = v_acaiv_rec.admission_cat AND
3274 apcs.s_admission_process_type = v_acaiv_rec.s_admission_process_type AND
3275 apcs.s_admission_step_type = cst_fee_cntrct AND
3276 apcs.step_group_type <> 'TRACK'; -- 2402377
3277 v_apcs_exists VARCHAR2(1);
3278 v_commencement_dt2
3279 IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE := v_sca_commencement_dt;
3280 v_completion_dt IGS_EN_STDNT_PS_ATT.commencement_dt%TYPE ;
3281 BEGIN
3282 p_warn_level := NULL;
3283 p_message_name := null;
3284 -- Check if a fee contract should be created.
3285 OPEN c_apcs;
3286 FETCH c_apcs INTO v_apcs_exists;
3287 IF c_apcs%FOUND THEN
3288 CLOSE c_apcs;
3289 -- Determine the IGS_PS_COURSE commencement date.
3290 IF v_commencement_dt2 IS NULL THEN
3291 v_commencement_dt2 := IGS_EN_GEN_002.ENRP_GET_ACAD_COMM(
3292 NULL, -- (Academic Cal Type)
3293 NULL, -- (Academic Sequence Number)
3294 v_acaiv_rec.person_id,
3295 v_acaiv_rec.course_cd,
3296 v_acaiv_rec.admission_appl_number,
3297 v_acaiv_rec.nominated_course_cd,
3298 v_acaiv_rec.sequence_number,
3299 'Y');
3300 END IF;
3301 IF v_commencement_dt2 IS NULL THEN
3302 IF p_log_creation_dt IS NOT NULL THEN
3303 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3304 cst_pre_enrol,
3305 p_log_creation_dt,
3306 cst_minor || ',' ||
3307 TO_CHAR(p_person_id) || ',' ||
3308 p_course_cd,
3309 'IGS_EN_FEE_CONTRACT_NOT_CREAT',
3310 NULL);
3311 END IF;
3312 p_warn_level := cst_minor;
3313 p_message_name := 'IGS_EN_FEE_CONTRACT_NOT_CREAT';
3314 RETURN;
3315 END IF;
3316 -- Determine the IGS_PS_COURSE completion date.
3317 IGS_AD_GEN_004.admp_get_crv_comp_dt (
3318 v_acaiv_rec.course_cd,
3319 v_acaiv_rec.crv_version_number,
3320 v_acaiv_rec.acad_cal_type,
3321 v_acaiv_rec.attendance_type,
3322 v_commencement_dt2, -- (Start Date)
3323 v_acaiv_rec.expected_completion_yr,
3324 v_acaiv_rec.expected_completion_perd,
3325 v_completion_dt,
3326 v_acaiv_rec.attendance_mode,
3327 v_acaiv_rec.location_cd);
3328
3329 IF v_completion_dt IS NULL THEN
3330 IF p_log_creation_dt IS NOT NULL THEN
3331 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3332 cst_pre_enrol,
3333 p_log_creation_dt,
3334 cst_minor || ',' ||
3335 TO_CHAR(p_person_id) || ',' ||
3336 p_course_cd,
3337 'IGS_EN_FEE_CONTRACT_NOTCREATE',
3338 NULL);
3339 END IF;
3340 p_warn_level := cst_minor;
3341 p_message_name := 'IGS_EN_FEE_CONTRACT_NOTCREATE';
3342 RETURN;
3343 END IF;
3344 -- Create the Fee Contract.
3345 IF NOT IGS_FI_GEN_004.finp_prc_cfar(
3346 v_acaiv_rec.person_id,
3347 v_acaiv_rec.course_cd,
3348 v_commencement_dt2, -- (Start Date)
3349 v_completion_dt, -- (End Date)
3350 v_message_name) THEN
3351 IF p_log_creation_dt IS NOT NULL THEN
3352 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3353 cst_pre_enrol,
3354 p_log_creation_dt,
3355 cst_minor || ',' ||
3356 TO_CHAR(p_person_id) || ',' ||
3357 p_course_cd,
3358 v_message_name,
3359 NULL);
3360 END IF;
3361 p_warn_level := cst_minor;
3362 p_message_name := v_message_name;
3363 END IF;
3364 ELSE
3365 CLOSE c_apcs;
3366 END IF;
3367 RETURN;
3368 EXCEPTION
3369 WHEN OTHERS THEN
3370 IF c_apcs%ISOPEN THEN
3371 CLOSE c_apcs;
3372 END IF;
3373 RAISE;
3374 END;
3375 EXCEPTION
3376 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
3377 RAISE;
3378 WHEN OTHERS THEN
3379 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
3380 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_create_fee_contract');
3381 IGS_GE_MSG_STACK.ADD;
3382 App_Exception.Raise_Exception;
3383 END enrpl_create_fee_contract;
3384
3385 BEGIN -- begin of the function, Enrp_Ins_Snew_Prenrl
3386
3387 SAVEPOINT sp_pre_enrol_student;
3388 --Defaults the enrollment method to Default bulk enrollment method.
3389 igs_en_gen_017.g_invoke_source := 'JOB';
3390 -- Initialise the out parameters.
3391 p_warn_level := NULL;
3392 p_message_name := null;
3393
3394 IF p_load_cal_type IS NULL THEN
3395 OPEN c_load_cal(p_acad_cal_type,p_acad_sequence_number);
3396 FETCH c_load_cal INTO l_load_cal_type, l_load_seq_num;
3397 IF c_load_cal%NOTFOUND THEN
3398 CLOSE c_load_cal;
3399 p_warn_level := cst_error;
3400 p_message_name := 'IGS_EN_CN_FIND_TERM_CAL';
3401 IF p_log_creation_dt IS NOT NULL THEN
3402 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3403 cst_pre_enrol,
3404 p_log_creation_dt,
3405 cst_error || ',' ||
3406 TO_CHAR(p_person_id) || ',' ||
3407 p_course_cd,
3408 p_message_name,
3409 NULL);
3410 END IF;
3411 RETURN FALSE;
3412 END IF;
3413 CLOSE c_load_cal;
3414 ELSE
3415 l_load_cal_type := p_load_cal_type;
3416 l_load_seq_num := p_load_ci_seq_num;
3417 END IF;
3418 l_enr_method := p_dflt_enr_method;
3419 --If enrollment method not passed then derive the default enrollment method.
3420 IF p_dflt_enr_method IS NULL THEN
3421 igs_en_gen_017.enrp_get_enr_method(p_enr_method_type => l_enr_method,
3422 p_error_message => l_dummy_mesg,
3423 p_ret_status => l_return_status);
3424 IF l_return_status='FALSE' THEN
3425 p_warn_level := cst_error;
3426 p_message_name := 'IGS_SS_EN_NOENR_METHOD';
3427 IF p_log_creation_dt IS NOT NULL THEN
3428 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3429 cst_pre_enrol,
3430 p_log_creation_dt,
3431 cst_error || ',' ||
3432 TO_CHAR(p_person_id) || ',' ||
3433 p_course_cd,
3434 p_message_name,
3435 NULL);
3436 END IF;
3437 RETURN FALSE;
3438 END IF;
3439 END IF;
3440 -- Check the eligibility
3441 IF p_check_eligibility_ind = 'Y' THEN
3442 IF NOT enrpl_check_eligibility(
3443 v_message_name) THEN
3444 p_warn_level := cst_error;
3445 p_message_name := v_message_name;
3446 RETURN FALSE;
3447 END IF;
3448 END IF;
3449
3450 -- check offer
3451 IF NOT enrpl_check_offer(
3452 v_warn_level,
3453 v_message_name) THEN
3454 p_warn_level := v_warn_level;
3455 p_message_name := v_message_name;
3456 RETURN FALSE;
3457 END IF;
3458
3459 -- create or update IGS_EN_STDNT_PS_ATT record
3460 enrpl_create_sca(
3461 v_warn_level,
3462 v_message_name);
3463 IF v_message_name is not null THEN
3464 p_warn_level := v_warn_level;
3465 p_message_name := v_message_name;
3466 RETURN FALSE;
3467 END IF;
3468
3469 -- create or update IGS_AS_SC_ATMPT_ENR record
3470 IF NOT enrpl_create_scae(
3471 v_warn_level,
3472 v_message_name) THEN
3473 p_warn_level := v_warn_level;
3474 p_message_name := v_message_name;
3475 RETURN FALSE;
3476 END IF;
3477
3478 -- Copy admissions IGS_PS_UNIT sets
3479 IF NOT enrpl_copy_adm_unit_sets THEN
3480 RETURN FALSE;
3481 END IF;
3482
3483 -- Pre-enrollment of YOP unit Sets
3484 -- pass admission record's unit to en_gen_009 call
3485 v_unit_set_cd := v_acaiv_rec.unit_set_cd;
3486
3487 -- In year of program mode do the following code
3488 -- added by smaddali for YOP-EN dld bug#2156956
3489 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') = 'Y' THEN
3490
3491 -- If there is a currently active year of program then make it completed
3492 --and pre-enrol in the next year of program , if it exists
3493 OPEN c_active_us ;
3494 FETCH c_active_us INTO c_active_us_rec;
3495
3496 IF c_active_us%FOUND THEN
3497 -- Check if trying to process a student who has just been pre-enrolled into the next year
3498 -- ie first time the process is called student is transferred to year 2 , if process is called
3499 -- again immediately then student should not again be pre-enrolled into year 3
3500 OPEN c_chk_census_dt(c_active_us_rec.unit_set_cd);
3501 FETCH c_chk_census_dt INTO c_census_dt_rec;
3502 --moving this cursor up to fix bug 3043374, to check for the progression_outcome_type.
3503
3504 OPEN c_prog_outcome(c_active_us_rec.selection_dt) ;
3505 FETCH c_prog_outcome INTO c_prog_outcome_rec ;
3506 gv_progress_outcome_type := c_prog_outcome_rec.s_progression_outcome_type;
3507 CLOSE c_prog_outcome ;
3508
3509 IF c_chk_census_dt%FOUND AND NVL(P_PROGRESS_STAT,'ADVANCE') <> 'REPEATYR'
3510 AND NVL(gv_progress_outcome_type,'ADVANCE') = 'ADVANCE' THEN
3511 -- check if there is any progression outcome preventing this student
3512 -- from completing this unit set attempt and going into the next year of program
3513
3514 OPEN c_susa_upd(c_active_us_rec.unit_set_cd,
3515 c_active_us_rec.us_version_number,
3516 c_active_us_rec.sequence_number) ;
3517
3518 FETCH c_susa_upd INTO c_susa_upd_rec ;
3519
3520 v_rqrmnts_complete_dt := NVL(c_prog_outcome_rec.decision_dt,TRUNC(SYSDATE));
3521
3522 IF igs_en_gen_legacy.check_usa_overlap(
3523 c_susa_upd_rec.person_id,
3524 c_susa_upd_rec.course_cd,
3525 c_susa_upd_rec.selection_dt,
3526 v_rqrmnts_complete_dt,
3527 c_susa_upd_rec.end_dt,
3528 c_susa_upd_rec.sequence_number,
3529 c_susa_upd_rec.unit_set_cd,
3530 c_susa_upd_rec.us_version_number,
3531 p_message_name) = FALSE THEN
3532
3533 p_warn_level := cst_error;
3534 IF p_log_creation_dt IS NOT NULL THEN
3535 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3536 cst_pre_enrol,
3537 p_log_creation_dt,
3538 cst_error || ',' ||
3539 TO_CHAR(p_person_id) || ',' ||
3540 p_course_cd,
3541 p_message_name,
3542 NULL);
3543 END IF;
3544 RETURN FALSE;
3545 END IF ;
3546
3547 -- set the current year of program to completed
3548 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
3549 X_ROWID => c_susa_upd_rec.rowid,
3550 X_PERSON_ID => c_susa_upd_rec.person_id ,
3551 X_COURSE_CD => c_susa_upd_rec.course_cd ,
3552 X_UNIT_SET_CD => c_susa_upd_rec.unit_set_cd ,
3553 X_SEQUENCE_NUMBER => c_susa_upd_rec.sequence_number ,
3554 X_US_VERSION_NUMBER => c_susa_upd_rec.us_version_number,
3555 X_SELECTION_DT => c_susa_upd_rec.selection_dt ,
3556 X_STUDENT_CONFIRMED_IND => c_susa_upd_rec.student_confirmed_ind ,
3557 X_END_DT => c_susa_upd_rec.end_dt ,
3558 X_PARENT_UNIT_SET_CD => c_susa_upd_rec.parent_unit_set_cd,
3559 X_PARENT_SEQUENCE_NUMBER => c_susa_upd_rec.parent_sequence_number ,
3560 X_PRIMARY_SET_IND => c_susa_upd_rec.primary_set_ind ,
3561 X_VOLUNTARY_END_IND => c_susa_upd_rec.voluntary_end_ind ,
3562 X_AUTHORISED_PERSON_ID => c_susa_upd_rec.authorised_person_id,
3563 X_AUTHORISED_ON => c_susa_upd_rec.authorised_on ,
3564 X_OVERRIDE_TITLE => c_susa_upd_rec.override_title ,
3565 X_RQRMNTS_COMPLETE_IND => 'Y' ,
3566 X_RQRMNTS_COMPLETE_DT => v_rqrmnts_complete_dt ,
3567 X_S_COMPLETED_SOURCE_TYPE => c_susa_upd_rec.s_completed_source_type,
3568 X_CATALOG_CAL_TYPE => c_susa_upd_rec.catalog_cal_type ,
3569 X_CATALOG_SEQ_NUM => c_susa_upd_rec.catalog_seq_num,
3570 X_ATTRIBUTE_CATEGORY => c_susa_upd_rec.attribute_category,
3571 X_ATTRIBUTE1 => c_susa_upd_rec.attribute1 ,
3572 X_ATTRIBUTE2 => c_susa_upd_rec.attribute2 ,
3573 X_ATTRIBUTE3 => c_susa_upd_rec.attribute3,
3574 X_ATTRIBUTE4 => c_susa_upd_rec.attribute4,
3575 X_ATTRIBUTE5 => c_susa_upd_rec.attribute5,
3576 X_ATTRIBUTE6 => c_susa_upd_rec.attribute6,
3577 X_ATTRIBUTE7 => c_susa_upd_rec.attribute7,
3578 X_ATTRIBUTE8 => c_susa_upd_rec.attribute8,
3579 X_ATTRIBUTE9 => c_susa_upd_rec.attribute9,
3580 X_ATTRIBUTE10 => c_susa_upd_rec.attribute10,
3581 X_ATTRIBUTE11 => c_susa_upd_rec.attribute11,
3582 X_ATTRIBUTE12 => c_susa_upd_rec.attribute12,
3583 X_ATTRIBUTE13 => c_susa_upd_rec.attribute13,
3584 X_ATTRIBUTE14 => c_susa_upd_rec.attribute14,
3585 X_ATTRIBUTE15 => c_susa_upd_rec.attribute15,
3586 X_ATTRIBUTE16 => c_susa_upd_rec.attribute16,
3587 X_ATTRIBUTE17 => c_susa_upd_rec.attribute17,
3588 X_ATTRIBUTE18 => c_susa_upd_rec.attribute18,
3589 X_ATTRIBUTE19 => c_susa_upd_rec.attribute19,
3590 X_ATTRIBUTE20 => c_susa_upd_rec.attribute20,
3591 X_MODE => 'R' );
3592
3593 IF NOT update_stream_unit_sets(
3594 p_person_id,
3595 p_course_Cd,
3596 c_susa_upd_rec.unit_set_cd,
3597 'Y', --RQRMNTS_COMPLETE_IND
3598 v_rqrmnts_complete_dt,
3599 c_susa_upd_rec.selection_dt,
3600 c_susa_upd_rec.student_confirmed_ind,
3601 p_log_creation_dt,
3602 p_message_name
3603 ) THEN
3604 RETURN FALSE;
3605 END IF;
3606
3607 CLOSE c_susa_upd ;
3608 -- get the next year in sequence
3609 OPEN c_next_us(c_active_us_rec.unit_set_cd) ;
3610 FETCH c_next_us INTO c_next_us_rec ;
3611 IF c_next_us%FOUND THEN
3612
3613 -- find the version number for the new unit set
3614 OPEN c_us_version_number(p_person_id,p_course_cd,c_next_us_rec.unit_set_cd);
3615 FETCH c_us_version_number INTO next_us_version;
3616 IF c_us_version_number%FOUND THEN
3617
3618 -- If next year of program exists then pre-enroll in it
3619 IF NOT create_unit_set(
3620 p_person_id,
3621 p_course_cd,
3622 c_next_us_rec.unit_set_cd,
3623 next_us_version,
3624 v_rqrmnts_complete_dt+1,
3625 l_confirmed_ind,
3626 NULL,
3627 NULL,
3628 l_seqval,
3629 p_log_creation_dt,
3630 p_message_name
3631 ) THEN
3632 RETURN FALSE;
3633 END IF;
3634
3635 v_unit_set_cd := c_next_us_rec.unit_set_cd ;
3636
3637 IF NOT create_stream_unit_sets(
3638 p_person_id,
3639 p_course_cd,
3640 c_next_us_rec.unit_set_cd,
3641 v_rqrmnts_complete_dt,
3642 l_confirmed_ind,
3643 p_log_creation_dt,
3644 p_message_name
3645 ) THEN
3646 RETURN FALSE;
3647 END IF;
3648
3649 -- smaddali 14-may-2002 added new parameter p_old_sequence_number for bug#2350629
3650 IF l_seqval IS NOT NULL THEN
3651 copy_hesa_details(
3652 p_person_id,
3653 p_course_cd,
3654 v_acaiv_rec.crv_version_number,
3655 c_active_us_rec.unit_set_cd,
3656 c_active_us_rec.us_version_number,
3657 c_active_us_rec.sequence_number ,
3658 c_next_us_rec.unit_set_cd,
3659 next_us_version,
3660 l_seqval );
3661 END IF;
3662
3663 ELSE
3664 CLOSE c_us_version_number ;
3665 CLOSE c_next_us ;
3666 CLOSE c_chk_census_dt ;
3667 RETURN TRUE ;
3668 END IF; -- if next unit set version is found
3669 CLOSE c_us_version_number ;
3670
3671 ELSE
3672 CLOSE c_next_us ;
3673 CLOSE c_chk_census_dt ;
3674 RETURN TRUE ;
3675 END IF; -- found next unit set in sequence
3676 CLOSE c_next_us ;
3677
3678 END IF ; -- chk_census_dt
3679 CLOSE c_chk_census_dt ;
3680
3681 ELSE -- no active unit set attempts found
3682
3683 -- find the first unit set in sequence which is defined for the program ofering
3684 IF (v_acaiv_rec.unit_set_cd IS NULL) OR (NOT prenrl_year(v_acaiv_rec.unit_set_cd)) THEN
3685 OPEN c_first_us ;
3686 FETCH c_first_us INTO l_first_us ;
3687 IF c_first_us%FOUND THEN
3688 -- set the selection_date
3689 --the selection date is set to the SPA commencement date as part of bug 3687470
3690
3691 v_selection_dt := NULL;
3692 IF NVL(l_confirmed_ind,'N') = 'Y' THEN
3693 OPEN cur_spa;
3694 FETCH cur_spa INTO v_selection_dt;
3695 CLOSE cur_spa;
3696 END IF;
3697 --check if this unit set attempt already exists
3698 OPEN c_exists_susa(l_first_us.unit_set_cd,l_first_us.us_version_number);
3699 FETCH c_exists_susa INTO c_exists_susa_rec ;
3700 IF c_exists_susa%FOUND THEN
3701 IF c_exists_susa_rec.student_confirmed_ind <> l_confirmed_ind THEN
3702 OPEN c_susa_upd(l_first_us.unit_set_cd,l_first_us.us_version_number, c_exists_susa_rec.sequence_number) ;
3703 FETCH c_susa_upd INTO c_susa_upd_rec ;
3704
3705 IF igs_en_gen_legacy.check_usa_overlap(
3706 c_susa_upd_rec.person_id,
3707 c_susa_upd_rec.course_cd,
3708 TRUNC(v_selection_dt),
3709 c_susa_upd_rec.RQRMNTS_COMPLETE_DT,
3710 c_susa_upd_rec.end_dt,
3711 c_susa_upd_rec.sequence_number,
3712 c_susa_upd_rec.unit_set_cd,
3713 c_susa_upd_rec.us_version_number,
3714 p_message_name) = FALSE THEN
3715
3716 p_warn_level := cst_error;
3717 IF p_log_creation_dt IS NOT NULL THEN
3718 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
3719 cst_pre_enrol,
3720 p_log_creation_dt,
3721 cst_error || ',' ||
3722 TO_CHAR(p_person_id) || ',' ||
3723 p_course_cd,
3724 p_message_name,
3725 NULL);
3726 END IF;
3727 RETURN FALSE;
3728 END IF;
3729
3730 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
3731 X_ROWID => c_susa_upd_rec.rowid,
3732 X_PERSON_ID => c_susa_upd_rec.person_id,
3733 X_COURSE_CD => c_susa_upd_rec.course_cd ,
3734 X_UNIT_SET_CD => c_susa_upd_rec.unit_set_cd ,
3735 X_SEQUENCE_NUMBER => c_susa_upd_rec.sequence_number ,
3736 X_US_VERSION_NUMBER => c_susa_upd_rec.us_version_number ,
3737 X_SELECTION_DT => TRUNC(v_selection_dt) ,
3738 X_STUDENT_CONFIRMED_IND => l_confirmed_ind ,
3739 X_END_DT => c_susa_upd_rec.end_dt ,
3740 X_PARENT_UNIT_SET_CD => c_susa_upd_rec.parent_unit_set_cd,
3741 X_PARENT_SEQUENCE_NUMBER => c_susa_upd_rec.PARENT_SEQUENCE_NUMBER ,
3742 X_PRIMARY_SET_IND => c_susa_upd_rec.PRIMARY_SET_IND ,
3743 X_VOLUNTARY_END_IND => c_susa_upd_rec.VOLUNTARY_END_IND ,
3744 X_AUTHORISED_PERSON_ID => c_susa_upd_rec.AUTHORISED_PERSON_ID ,
3745 X_AUTHORISED_ON => c_susa_upd_rec.AUTHORISED_ON ,
3746 X_OVERRIDE_TITLE => c_susa_upd_rec.OVERRIDE_TITLE ,
3747 X_RQRMNTS_COMPLETE_IND => c_susa_upd_rec.RQRMNTS_COMPLETE_IND ,
3748 X_RQRMNTS_COMPLETE_DT => c_susa_upd_rec.RQRMNTS_COMPLETE_DT ,
3749 X_S_COMPLETED_SOURCE_TYPE => c_susa_upd_rec.S_COMPLETED_SOURCE_TYPE,
3750 X_CATALOG_CAL_TYPE => c_susa_upd_rec.CATALOG_CAL_TYPE,
3751 X_CATALOG_SEQ_NUM => c_susa_upd_rec.CATALOG_SEQ_NUM,
3752 X_ATTRIBUTE_CATEGORY => c_susa_upd_rec.ATTRIBUTE_CATEGORY,
3753 X_ATTRIBUTE1 => c_susa_upd_rec.ATTRIBUTE1,
3754 X_ATTRIBUTE2 => c_susa_upd_rec.ATTRIBUTE2,
3755 X_ATTRIBUTE3 => c_susa_upd_rec.ATTRIBUTE3,
3756 X_ATTRIBUTE4 => c_susa_upd_rec.ATTRIBUTE4,
3757 X_ATTRIBUTE5 => c_susa_upd_rec.ATTRIBUTE5,
3758 X_ATTRIBUTE6 => c_susa_upd_rec.ATTRIBUTE6,
3759 X_ATTRIBUTE7 => c_susa_upd_rec.ATTRIBUTE7,
3760 X_ATTRIBUTE8 => c_susa_upd_rec.ATTRIBUTE8,
3761 X_ATTRIBUTE9 => c_susa_upd_rec.ATTRIBUTE9,
3762 X_ATTRIBUTE10 => c_susa_upd_rec.ATTRIBUTE10,
3763 X_ATTRIBUTE11 =>c_susa_upd_rec.ATTRIBUTE11,
3764 X_ATTRIBUTE12 => c_susa_upd_rec.ATTRIBUTE12,
3765 X_ATTRIBUTE13 => c_susa_upd_rec.ATTRIBUTE13,
3766 X_ATTRIBUTE14 => c_susa_upd_rec.ATTRIBUTE14,
3767 X_ATTRIBUTE15 => c_susa_upd_rec.ATTRIBUTE15,
3768 X_ATTRIBUTE16 => c_susa_upd_rec.ATTRIBUTE16,
3769 X_ATTRIBUTE17 => c_susa_upd_rec.ATTRIBUTE17,
3770 X_ATTRIBUTE18 => c_susa_upd_rec.ATTRIBUTE18,
3771 X_ATTRIBUTE19 => c_susa_upd_rec.ATTRIBUTE19,
3772 X_ATTRIBUTE20 => c_susa_upd_rec.ATTRIBUTE20,
3773 X_MODE => 'R' );
3774 CLOSE c_susa_upd ;
3775
3776 IF NOT update_stream_unit_sets(
3777 p_person_id,
3778 p_course_cd,
3779 c_susa_upd_rec.unit_set_cd,
3780 c_susa_upd_rec.rqrmnts_complete_ind,
3781 c_susa_upd_rec.rqrmnts_complete_dt,
3782 v_selection_dt,
3783 l_confirmed_ind,
3784 p_log_creation_dt,
3785 p_message_name
3786 ) THEN
3787 RETURN FALSE;
3788 END IF;
3789
3790 END IF;
3791 ELSE
3792
3793 IF NOT create_unit_set(
3794 p_person_id,
3795 p_course_cd,
3796 l_first_us.unit_set_cd,
3797 l_first_us.us_version_number,
3798 v_selection_dt,
3799 l_confirmed_ind,
3800 NULL,
3801 NULL,
3802 l_seqval,
3803 p_log_creation_dt,
3804 p_message_name
3805 ) THEN
3806 RETURN FALSE;
3807 END IF;
3808 v_unit_set_cd := l_first_us.unit_set_cd ;
3809
3810 IF NOT create_stream_unit_sets(
3811 p_person_id,
3812 p_course_cd,
3813 l_first_us.unit_set_cd,
3814 v_selection_dt,
3815 l_confirmed_ind,
3816 p_log_creation_dt,
3817 p_message_name
3818 ) THEN
3819 RETURN FALSE;
3820 END IF;
3821
3822
3823 -- smaddali 14-may-2002 added new parameter p_old_sequence_number for bug#2350629
3824 -- also the values passed were wrong ,so changed values passed for new unit set parameters
3825 IF l_seqval IS NOT NULL THEN
3826 copy_hesa_details( p_person_id,
3827 p_course_cd,
3828 v_acaiv_rec.crv_version_number,
3829 NULL,
3830 NULL,
3831 NULL,
3832 l_first_us.unit_set_cd,
3833 l_first_us.us_version_number,
3834 l_seqval
3835 );
3836 END IF;
3837
3838 END IF; -- if susa already exists
3839 CLOSE c_exists_susa ;
3840
3841 END IF; -- found the first unit set
3842 CLOSE c_first_us ;
3843 END IF; -- if unit set selected in the admissions is not of type year
3844
3845 END IF; -- found an active unit set attempt
3846 CLOSE c_active_us ;
3847 END IF; -- profile set to year of program
3848
3849 --bmerugu added condition for build 319
3850 IF (l_sua_create = TRUE) THEN
3851 BEGIN
3852 -- Pre-enrollment of Unit Attempts
3853 -- copy admissions IGS_EN_SU_ATTEMPT
3854 enrpl_copy_adm_sua(
3855 v_warn_level,
3856 v_message_name,
3857 v_adm_added_ind,
3858 l_enr_method,
3859 l_load_cal_type,
3860 l_load_seq_num);
3861 IF v_message_name is not null THEN
3862 IF p_warn_level IS NULL OR
3863 (p_warn_level = cst_minor AND
3864 v_warn_level IN (cst_major,
3865 cst_error)) OR
3866 (p_warn_level = cst_major AND
3867 v_warn_level = cst_error) THEN
3868 p_warn_level := v_warn_level;
3869 p_message_name := v_message_name;
3870 END IF;
3871 END IF;
3872
3873 IF v_adm_added_ind = 'N' THEN
3874 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions, as parameter
3875 -- to the process.
3876 -- create parameter IGS_EN_SU_ATTEMPT
3877 enrpl_copy_param_sua(
3878 p_warn_level => v_warn_level,
3879 p_message_name => v_message_name,
3880 p_added_ind => v_parm_added_ind,
3881 p_enr_method => l_enr_method,
3882 p_lload_cal_type => l_load_cal_type,
3883 p_lload_ci_seq_num => l_load_seq_num);
3884 IF v_message_name is not null THEN
3885 IF p_warn_level IS NULL OR
3886 (p_warn_level = cst_minor AND
3887 v_warn_level IN (cst_major,
3888 cst_error)) OR
3889 (p_warn_level = cst_major AND
3890 v_warn_level = cst_error) THEN
3891 p_warn_level := v_warn_level;
3892 p_message_name := v_message_name;
3893 END IF;
3894 END IF;
3895
3896 IF v_parm_added_ind = 'N' THEN
3897 -- If pre enrolment of units is required then pre-enrol the units.
3898 IF ( p_units_indicator = 'Y' OR p_units_indicator = 'CORE_ONLY' )THEN
3899
3900 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions
3901 -- through the Pattern of Study.
3902 -- create pattern of study IGS_EN_SU_ATTEMPT
3903 enrpl_create_pos_sua(
3904 p_unit_set_cd => v_unit_set_cd,
3905 p_warn_level => v_warn_level,
3906 p_message_name => v_message_name,
3907 p_enr_method => l_enr_method,
3908 p_lload_cal_type => l_load_cal_type,
3909 p_lload_ci_seq_num => l_load_seq_num);
3910 IF v_message_name is not null THEN
3911 IF p_warn_level IS NULL OR
3912 (p_warn_level = cst_minor AND
3913 v_warn_level IN (cst_major,
3914 cst_error)) OR
3915 (p_warn_level = cst_major AND
3916 v_warn_level = cst_error) THEN
3917 p_warn_level := v_warn_level;
3918 p_message_name := v_message_name;
3919 END IF;
3920 --if the warn level is major then return false, since it implies that no units were enrolled.
3921 IF v_warn_level = cst_major THEN
3922 RETURN FALSE;
3923 END IF;
3924 END IF;
3925 END IF; -- end of p_units_indicator
3926 END IF; -- end of v_parm_added_ind
3927 END IF; -- end of v_adm_added_ind
3928 END;
3929 END IF; -- end of l_sua_create
3930
3931
3932 enrpl_create_fee_contract(
3933 p_warn_level,
3934 p_message_name);
3935 RETURN TRUE;
3936
3937 EXCEPTION
3938 WHEN OTHERS THEN
3939 IF c_acaiv%ISOPEN THEN
3940 CLOSE c_acaiv;
3941 END IF;
3942 IF c_acaiv1%ISOPEN THEN
3943 CLOSE c_acaiv1;
3944 END IF;
3945 --checking if it is not an unhandled exception since unhandled exceptions may not b ein realtion to a particular student
3946 -- and may cause the process to fail for every student.
3947 -- hence raise the exception if it is and unhandled exceptions
3948 --rollback to the beginning of the rpocedure to undo the changes made for teh student who is erroring out.
3949 IF p_log_creation_dt IS NOT NULL THEN
3950 IGS_GE_MSG_STACK.GET(-1, 'T', l_enc_message_name, l_msg_index);
3951 FND_MESSAGE.PARSE_ENCODED(l_enc_message_name,l_app_short_name,l_message_name);
3952 p_warn_level := cst_error;
3953 ROLLBACK TO sp_pre_enrol_student;
3954 IF l_message_name <> 'IGS_GE_UNHANDLED_EXP' THEN
3955
3956 IF (l_message_name IS NOT NULL) THEN
3957 -- If the log creation date is set then log the HECS error
3958 -- This is if the pre-enrolment is being performed in batch.
3959 log_error_message(p_s_log_type => cst_pre_enrol,
3960 p_creation_dt => p_log_creation_dt,
3961 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
3962 p_sle_message_name => l_message_name,
3963 p_del => ';');
3964 END IF;
3965 ELSE
3966 FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
3967 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_snew_prenrl');
3968 l_mesg_txt := fnd_message.get;
3969 igs_ge_gen_003.genp_ins_log_entry(p_s_log_type => cst_pre_enrol,
3970 p_creation_dt => p_log_creation_dt,
3971 p_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
3972 p_s_message_name => 'IGS_GE_UNHANDLED_EXP',
3973 p_text => l_mesg_txt);
3974 END IF;
3975 l_message_name := NULL;
3976 ELSE
3977 IF FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3978 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'igs.plsql.igs_en_gen_010.enrp_ins_snew_prenrl.UNH_EXP','Unhandled Exception raised with code '||SQLCODE||' and error '||SQLERRM);
3979 END IF;
3980 RAISE;
3981 END IF;
3982 END;
3983 END enrp_ins_snew_prenrl;
3984
3985 FUNCTION Enrp_Ins_Sret_Prenrl(
3986 p_person_id IN NUMBER ,
3987 p_course_cd IN VARCHAR2 ,
3988 p_enrolment_cat IN VARCHAR2 ,
3989 p_acad_cal_type IN VARCHAR2 ,
3990 p_acad_sequence_number IN NUMBER ,
3991 p_enrol_cal_type IN VARCHAR2 ,
3992 p_enrol_sequence_number IN NUMBER ,
3993 p_units_ind IN VARCHAR2,
3994 p_override_enr_form_due_dt IN DATE ,
3995 p_override_enr_pckg_prod_dt IN DATE ,
3996 p_log_creation_dt IN DATE ,
3997 p_warn_level OUT NOCOPY VARCHAR2 ,
3998 p_message_name OUT NOCOPY VARCHAR2 ,
3999 p_unit1_unit_cd IN VARCHAR2 ,
4000 p_unit1_cal_type IN VARCHAR2 ,
4001 p_unit1_location_cd IN VARCHAR2 ,
4002 p_unit1_unit_class IN VARCHAR2 ,
4003 p_unit2_unit_cd IN VARCHAR2 ,
4004 p_unit2_cal_type IN VARCHAR2 ,
4005 p_unit2_location_cd IN VARCHAR2 ,
4006 p_unit2_unit_class IN VARCHAR2 ,
4007 p_unit3_unit_cd IN VARCHAR2 ,
4008 p_unit3_cal_type IN VARCHAR2 ,
4009 p_unit3_location_cd IN VARCHAR2 ,
4010 p_unit3_unit_class IN VARCHAR2 ,
4011 p_unit4_unit_cd IN VARCHAR2 ,
4012 p_unit4_cal_type IN VARCHAR2 ,
4013 p_unit4_location_cd IN VARCHAR2 ,
4014 p_unit4_unit_class IN VARCHAR2 ,
4015 p_unit5_unit_cd IN VARCHAR2 ,
4016 p_unit5_cal_type IN VARCHAR2 ,
4017 p_unit5_location_cd IN VARCHAR2 ,
4018 p_unit5_unit_class IN VARCHAR2 ,
4019 p_unit6_unit_cd IN VARCHAR2 ,
4020 p_unit6_cal_type IN VARCHAR2 ,
4021 p_unit6_location_cd IN VARCHAR2 ,
4022 p_unit6_unit_class IN VARCHAR2 ,
4023 p_unit7_unit_cd IN VARCHAR2 ,
4024 p_unit7_cal_type IN VARCHAR2 ,
4025 p_unit7_location_cd IN VARCHAR2 ,
4026 p_unit7_unit_class IN VARCHAR2 ,
4027 p_unit8_unit_cd IN VARCHAR2 ,
4028 p_unit8_cal_type IN VARCHAR2 ,
4029 p_unit8_location_cd IN VARCHAR2 ,
4030 p_unit8_unit_class IN VARCHAR2 ,
4031 p_unit9_unit_cd IN VARCHAR2 ,
4032 p_unit9_cal_type IN VARCHAR2 ,
4033 p_unit9_location_cd IN VARCHAR2 ,
4034 p_unit9_unit_class IN VARCHAR2 ,
4035 p_unit10_unit_cd IN VARCHAR2 ,
4036 p_unit10_cal_type IN VARCHAR2 ,
4037 p_unit10_location_cd IN VARCHAR2 ,
4038 p_unit10_unit_class IN VARCHAR2 ,
4039 p_unit11_unit_cd IN VARCHAR2 ,
4040 p_unit11_cal_type IN VARCHAR2 ,
4041 p_unit11_location_cd IN VARCHAR2 ,
4042 p_unit11_unit_class IN VARCHAR2 ,
4043 p_unit12_unit_cd IN VARCHAR2 ,
4044 p_unit12_cal_type IN VARCHAR2 ,
4045 p_unit12_location_cd IN VARCHAR2 ,
4046 p_unit12_unit_class IN VARCHAR2 ,
4047 p_unit_set_cd1 IN VARCHAR2 ,
4048 p_unit_set_cd2 IN VARCHAR2 ,
4049 --Added the parameter p_selection_date - UK Enhancement Build - Enh Bug#2580731 - 07OCT2002
4050 p_selection_date IN DATE ,
4051 --Added the parameter p_completion_date - ENCR030(UK Enh) Build - Enh Bug#2708430 - 16DEC2002
4052 p_completion_date IN DATE ,
4053 p_progress_stat IN VARCHAR2,
4054 p_dflt_enr_method IN VARCHAR2,
4055 p_load_cal_type IN VARCHAR2,
4056 p_load_ci_seq_num IN NUMBER
4057 )
4058 RETURN boolean AS
4059 /* HISTORY
4060 WHO WHEN WHAT
4061 bdeviset 29-JUL-2004 Before calling IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW/INSERT_ROW in a check is
4062 made to see that their is no overlapping of selection,completion and
4063 end dates for any two unit sets by calling check_usa_overlap.If it returns
4064 false log entry is made and the insert or update is not carried out for bug 3149133.
4065 ayedubat 4-JUN-2002 Changed the Code of YOP for Unit Set pre-enrollment before
4066 the Units pre-enrollment Code for the bug fix: 2391842
4067 ayedubat 25-MAY-2002 Changed the cursors c_acaiv to replace the view,IGS_AD_PS_APPL_INST_APLINST_V
4068 with the base table,IGS_AD_PS_APPL_INST as part of the bug fix:2384449
4069 ayedubat 15-MAY-2002 Changed the cursor,c_chk_census_dt to consider only the SUA records with unit attempt status
4070 'ENROLLED','DISCONTIN','DUPLICATE' or 'COMPLETED' as part of the bug:2372892
4071 Nishikant 07OCT2002 UK Enhancement Build - Enh Bug#2580731 - Added the parameter p_selection_date in this Function
4072 Nishikant 16DEC2002 ENCR030(UK Enh) Build - Enh Bug#2708430 - Added the parameter p_completion_date in this Function
4073 svanukur 10-jul-2003 checking for parameter P_PROGRESS_STAT , if it is set to 'ADVANCE' as part of bug #3043374
4074 ptandon 06-Oct-2003 Modified the inline procedure enrpl_copy_param_sua as part of Prevent Dropping Core Units.
4075 Enh Bug# 3052432.
4076 svanukur 20-jul-2004 Added a check after call to procedure IGS_EN_GEN_009.enrp_ins_pre_pos to return false to igs_en_gen_008
4077 so that the message successfully preenrolled is not shown in the log file. BUG 3032588.
4078 */
4079 BEGIN -- enrp_ins_sret_prenrl
4080 -- This process will pre-enrol a single returning student in the specified
4081 -- IGS_PS_COURSE. The following steps will be performed :
4082 -- * Check the students eligibility to enrol in the specified IGS_PS_COURSE in the
4083 -- specified academic calendar.
4084 -- * Determine the enrolment category from either a previous pre-enrolment
4085 -- or the default enrolment category passed to the routine.
4086 -- * Create IGS_AS_SC_ATMPT_ENR record.
4087 -- * Pre-enrol the students IGS_EN_SU_ATTEMPT records (next phase)
4088 -- If at any point it becomes impossible to pre-enrol the student, the
4089 -- routine will return FALSE and message number of a message indicating the
4090 -- reason for failure. This can be used by the calling routine (whether batch
4091 -- or online) to indicate who was and wasn't pre-enrolled.
4092
4093
4094 DECLARE
4095 cst_return CONSTANT VARCHAR2(10) := 'RETURN';
4096 cst_pre_enrol CONSTANT VARCHAR2(10) := 'PRE-ENROL';
4097 -- warn level types
4098 cst_error CONSTANT VARCHAR2(5) := 'ERROR';
4099 cst_minor CONSTANT VARCHAR2(5) := 'MINOR';
4100 cst_major CONSTANT VARCHAR2(5) := 'MAJOR';
4101 l_enc_message_name VARCHAR2(2000);
4102 l_app_short_name VARCHAR2(10);
4103 l_message_name VARCHAR2(100);
4104 l_mesg_txt VARCHAR2(4000);
4105 l_msg_index NUMBER;
4106 CURSOR c_sca_details IS
4107 SELECT sca.cal_type,
4108 sca.course_cd,
4109 sca.version_number,
4110 sca.location_cd,
4111 sca.attendance_mode,
4112 sca.attendance_type,
4113 sca.adm_admission_appl_number,
4114 sca.adm_nominated_course_cd,
4115 sca.adm_sequence_number
4116 FROM IGS_EN_STDNT_PS_ATT sca
4117 WHERE sca.person_id = p_person_id AND
4118 sca.course_cd = p_course_cd;
4119 v_sca_rec c_sca_details%ROWTYPE;
4120
4121 CURSOR c_prev_enr_cat IS
4122 SELECT scae.enrolment_cat
4123 FROM IGS_AS_SC_ATMPT_ENR scae,
4124 IGS_CA_INST ci
4125 WHERE scae.person_id = p_person_id AND
4126 scae.course_cd = p_course_cd AND
4127 ci.cal_type = scae.cal_type AND
4128 ci.sequence_number = scae.ci_sequence_number
4129 ORDER BY ci.end_dt DESC;
4130
4131 CURSOR c_scae_details IS
4132 SELECT enrolment_cat
4133 FROM IGS_AS_SC_ATMPT_ENR scae
4134 WHERE scae.person_id = p_person_id AND
4135 scae.course_cd = p_course_cd AND
4136 scae.cal_type = p_enrol_cal_type AND
4137 scae.ci_sequence_number = p_enrol_sequence_number;
4138 --v_scae_details VARCHAR2(1);
4139
4140
4141 v_scae_details IGS_AS_SC_ATMPT_ENR.enrolment_cat%TYPE;
4142 CURSOR c_scae_upd IS
4143 SELECT rowid,
4144 IGS_AS_SC_ATMPT_ENR.*
4145 FROM IGS_AS_SC_ATMPT_ENR
4146 WHERE person_id = p_person_id AND
4147 course_cd = p_course_cd AND
4148 cal_type = p_enrol_cal_type AND
4149 ci_sequence_number = p_enrol_sequence_number
4150 FOR UPDATE OF enrolment_cat NOWAIT;
4151
4152 v_scae_upd_rec c_scae_upd%ROWTYPE;
4153
4154
4155
4156 CURSOR c_crv (
4157 cp_course_cd IGS_EN_STDNT_PS_ATT.course_cd%TYPE,
4158 cp_version_number IGS_EN_STDNT_PS_ATT.version_number%TYPE,
4159 cp_cal_type IGS_EN_STDNT_PS_ATT.cal_type%TYPE,
4160 cp_location_cd IGS_EN_STDNT_PS_ATT.location_cd%TYPE,
4161 cp_attendance_mode IGS_EN_STDNT_PS_ATT.attendance_mode%TYPE,
4162 cp_attendance_type IGS_EN_STDNT_PS_ATT.attendance_type%TYPE) IS
4163 SELECT 'x'
4164 FROM IGS_PS_VER crv,
4165 IGS_PS_STAT cs,
4166 IGS_PS_OFR_PAT cop
4167 WHERE crv.course_cd = cp_course_cd AND
4168 crv.version_number = cp_version_number AND
4169 crv.expiry_dt IS NULL AND
4170 cs.COURSE_STATUS = crv.COURSE_STATUS AND
4171 cs.s_course_status = 'ACTIVE' AND
4172 cop.course_cd = crv.course_cd AND
4173 cop.version_number = crv.version_number AND
4174 cop.cal_type = cp_cal_type AND
4175 cop.ci_sequence_number = p_acad_sequence_number AND
4176 cop.location_cd = cp_location_cd AND
4177 cop.attendance_mode = cp_attendance_mode AND
4178 cop.attendance_type = cp_attendance_type AND
4179 cop.offered_ind = 'Y';
4180 v_crv_rec VARCHAR2(1);
4181
4182 -- Cursor to fetch the Unit Set and Admission Cal Type and Category of the pre-enrolling students.
4183 CURSOR c_acaiv(
4184 cp_adm_admission_appl_number IGS_EN_STDNT_PS_ATT.adm_admission_appl_number%TYPE,
4185 cp_adm_nominated_course_cd IGS_EN_STDNT_PS_ATT.adm_nominated_course_cd%TYPE,
4186 cp_adm_sequence_number IGS_EN_STDNT_PS_ATT.adm_sequence_number%TYPE ) IS
4187 SELECT acaiv.unit_set_cd,
4188 acaiv.adm_cal_type,
4189 aa.admission_cat
4190 FROM IGS_AD_PS_APPL_INST acaiv,
4191 IGS_AD_APPL aa
4192 WHERE
4193 acaiv.person_id = p_person_id AND
4194 acaiv.admission_appl_number = cp_adm_admission_appl_number AND
4195 acaiv.nominated_course_cd = cp_adm_nominated_course_cd AND
4196 acaiv.sequence_number = cp_adm_sequence_number AND
4197 aa.person_id = acaiv.person_id AND
4198 aa.admission_appl_number = acaiv.admission_appl_number;
4199
4200 v_acaiv_rec c_acaiv%ROWTYPE;
4201
4202 CURSOR c_susa IS
4203 SELECT susa.unit_set_cd
4204 FROM IGS_AS_SU_SETATMPT susa
4205 WHERE susa.person_id = p_person_id AND
4206 susa.course_cd = p_course_cd AND
4207 susa.student_confirmed_ind = 'Y' AND
4208 susa.end_dt IS NULL;
4209 v_susa_rec c_susa%ROWTYPE;
4210 v_enrolment_cat IGS_EN_ENROLMENT_CAT.enrolment_cat%TYPE;
4211 v_enr_cat IGS_EN_ENROLMENT_CAT.enrolment_cat%TYPE;
4212 v_unit_set_cd IGS_AD_PS_APPL_INST_APLINST_V.unit_set_cd%TYPE;
4213 v_adm_cal_type IGS_AD_PS_APPL_INST_APLINST_V.adm_cal_type%TYPE;
4214 v_admission_cat IGS_AD_APPL.admission_cat%TYPE;
4215 v_warn_level VARCHAR2(10) ;
4216 v_log_creation_dt DATE;
4217 v_message_name VARCHAR2(2000);
4218 v_row_count NUMBER(1) := 0;
4219 v_boolean BOOLEAN;
4220
4221 --The below variable added as part of ENCR030(UK Enh) - Bug#2708430 - 16DEC2002
4222 l_completion_date DATE;
4223
4224 -- smaddali added these variables and cursors and local procedure enrpl_copy_param_sua for yop-en build bug# 2156956
4225 v_parm_added_ind VARCHAR2(1);
4226 cst_unconfirm CONSTANT VARCHAR2(10) := 'UNCONFIRM';
4227 l_pos_count NUMBER(1) := 0;
4228 l_rowid VARCHAR2(25);
4229 l_seqval igs_as_su_setatmpt.sequence_number%TYPE ;
4230
4231 CURSOR c_pos_unit_sets( cp_version_number igs_ps_pat_of_study.version_number%TYPE) IS
4232 SELECT unit_set_cd
4233 FROM IGS_PS_PAT_OF_STUDY pos
4234 WHERE course_cd = p_course_cd AND
4235 version_number = cp_version_number AND
4236 cal_type = p_acad_cal_type AND
4237 unit_set_cd IN
4238 ( SELECT susa.unit_set_cd
4239 FROM IGS_AS_SU_SETATMPT susa
4240 WHERE susa.person_id = p_person_id AND
4241 susa.course_cd = pos.course_cd AND
4242 susa.student_confirmed_ind = 'Y' AND
4243 susa.end_dt IS NULL);
4244
4245 -- checks the eligibility of the student to be moved to the next year of program (unit set)
4246 -- by checking if there is any outcome preventing the progress of the student program attempt
4247 CURSOR c_prog_outcome(cp_select_dt igs_as_su_setatmpt.selection_dt%TYPE) IS
4248 SELECT pou.decision_dt, pout.s_progression_outcome_type
4249 FROM igs_pr_stdnt_pr_ou_all pou , igs_pr_ou_type pout
4250 WHERE pou.person_id = p_person_id AND
4251 pou.course_cd = p_course_cd AND
4252 pou.decision_status = 'APPROVED' AND
4253 pou.decision_dt IS NOT NULL AND
4254 pou.decision_dt > cp_select_dt AND
4255 pou.progression_outcome_type = pout.progression_outcome_type
4256 ORDER BY pou.decision_dt desc ;
4257 c_prog_outcome_rec c_prog_outcome%ROWTYPE;
4258 gv_progress_outcome_type igs_pr_ou_type.s_progression_outcome_type%TYPE;
4259
4260 -- get the currently active unit set for the person course attempt
4261 CURSOR c_active_us IS
4262 SELECT susa.*
4263 FROM igs_as_su_setatmpt susa , igs_en_unit_set us , igs_en_unit_set_cat usc
4264 WHERE susa.person_id = p_person_id AND
4265 susa.course_cd = p_course_cd AND
4266 susa.selection_dt IS NOT NULL AND
4267 susa.end_dt IS NULL AND
4268 susa.rqrmnts_complete_dt IS NULL AND
4269 susa.unit_set_cd = us.unit_set_cd AND
4270 us.unit_set_cat = usc.unit_set_cat AND
4271 usc.s_unit_set_cat = 'PRENRL_YR' ;
4272 c_active_us_rec c_active_us%ROWTYPE;
4273
4274 --get the next unit set in sequence
4275 CURSOR c_next_us(cp_unit_set_cd igs_ps_us_prenr_cfg.unit_set_cd%TYPE) IS
4276 SELECT cf1.unit_set_cd , cf1.sequence_no
4277 FROM igs_ps_us_prenr_cfg cf1 , igs_ps_us_prenr_cfg cf2
4278 WHERE cf2.mapping_set_cd = cf1.mapping_set_cd AND
4279 cf2.unit_set_cd = cp_unit_set_cd AND
4280 cf1.sequence_no > cf2.sequence_no
4281 ORDER BY cf1.sequence_no asc;
4282 c_next_us_rec c_next_us%ROWTYPE;
4283
4284 CURSOR c_us_version_number(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
4285 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE,
4286 cp_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE) IS
4287 SELECT coous.us_version_number
4288 FROM igs_en_unit_set_stat uss, igs_ps_ofr_opt_unit_set_v coous, igs_en_stdnt_ps_att sca
4289 WHERE sca.person_id = cp_person_id AND
4290 sca.course_cd = cp_course_cd AND
4291 sca.coo_id = coous.coo_id AND
4292 coous.unit_set_cd = cp_unit_set_cd AND
4293 coous.expiry_dt IS NULL AND
4294 coous.unit_set_status = uss.unit_set_status AND
4295 uss.s_unit_set_status = 'ACTIVE' ;
4296 next_us_version igs_en_unit_set.version_number%TYPE;
4297
4298 -- find the last active unit set for the person program
4299 CURSOR c_last_us IS
4300 SELECT susa.unit_set_cd, susa.us_version_number ,susa.sequence_number ,susa.rqrmnts_complete_dt
4301 , susa.selection_dt
4302 FROM igs_as_su_setatmpt susa , igs_en_unit_set us , igs_en_unit_set_cat usc
4303 WHERE susa.person_id = p_person_id AND
4304 susa.course_cd = p_course_cd AND
4305 susa.rqrmnts_complete_dt IS NOT NULL AND
4306 susa.unit_set_cd = us.unit_set_cd AND
4307 us.unit_set_cat = usc.unit_set_cat AND
4308 usc.s_unit_set_cat = 'PRENRL_YR'
4309 ORDER BY susa.rqrmnts_complete_dt desc ;
4310 l_last_us c_last_us%ROWTYPE ;
4311
4312 CURSOR c_chk_census_dt(cp_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE) IS
4313 SELECT sua.*
4314 FROM igs_en_sua_year_v sua
4315 WHERE sua.person_id = p_person_id AND
4316 sua.course_cd = p_course_cd AND
4317 sua.unit_set_cd = cp_unit_set_cd AND
4318 sua.unit_attempt_status IN ('ENROLLED','DISCONTIN','DUPLICATE','COMPLETED') AND
4319 IGS_EN_GEN_015.get_effective_census_date(Null,Null,sua.cal_type,sua.ci_sequence_number) < TRUNC(SYSDATE);
4320 c_census_dt_rec c_chk_census_dt%ROWTYPE ;
4321 v_dummy VARCHAR2(1);
4322
4323 CURSOR c_load_cal(p_acad_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
4324 p_acad_seq_num IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
4325 SELECT rel.sub_cal_type, rel.sub_ci_sequence_number FROM igs_ca_inst_rel rel,
4326 igs_ca_inst ci,
4327 igs_ca_type cal
4328 WHERE rel.sup_cal_type = p_acad_cal_type
4329 AND rel.sup_ci_sequence_number = p_acad_seq_num
4330 AND rel.sub_cal_type = ci.cal_type
4331 AND rel.sub_ci_sequence_number = ci.sequence_number
4332 AND rel.sub_cal_type = cal.cal_type
4333 AND cal.s_cal_cat = 'LOAD'
4334 AND cal.closed_ind = 'N'
4335 ORDER BY ci.start_dt;
4336 l_load_cal_type igs_ca_inst.cal_type%TYPE;
4337 l_load_seq_num igs_ca_inst.sequence_number%TYPE;
4338 l_enr_method igs_en_method_type.enr_method_type%TYPE;
4339 l_return_status VARCHAR2(20);
4340 l_dummy_mesg VARCHAR2(100);
4341
4342 PROCEDURE enrpl_copy_param_sua (
4343 p_warn_level OUT NOCOPY VARCHAR2,
4344 p_message_name OUT NOCOPY VARCHAR2,
4345 p_added_ind OUT NOCOPY VARCHAR2,
4346 p_enr_method IN VARCHAR2,
4347 p_lload_cal_type IN VARCHAR2,
4348 p_lload_ci_seq_num IN NUMBER)
4349 AS
4350 /*-------------------------------------------------------------------------------------------
4351 --Change History:
4352 --Who When What
4353 --kkillams 28-04-2003 Modified the c_sua cursor w.r.t. bug number 2829262
4354 --ptandon 06-Oct-2003 Modified to get the value of core indicator and pass to Igs_En_Gen_010.enrp_vald_inst_sua
4355 -- as part of Prevent Dropping Core Units. Enh Bug# 3052432.
4356 --svanukur 19-oct-2003 MAde the following modifaications part of placements build:
4357 -- Reordered the units so that the superior units are processed first becuase of the validation in
4358 -- sua_api that checks for an appropriate superior unit attempt when a subordinate unit is enrolled.
4359 -- for all the uoo_ids , made a call to ENR_SUB_UNITS in sua_api which enrolled all those untis
4360 -- that are marked as default enroll whenever a superior unit is enrolled.
4361 -- ckasu 07-MAR-2006 modified as a part of bug#5070730
4362 -------------------------------------------------------------------------------------------*/
4363 BEGIN -- enrpl_copy_param_sua
4364 -- Pre-enrol IGS_PS_UNIT attempts entered during Admissions, as parameter
4365 -- to the process.
4366 DECLARE
4367 CURSOR c_am (
4368 cp_attendance_mode IGS_EN_ATD_MODE.attendance_mode%TYPE) IS
4369 SELECT am.GOVT_ATTENDANCE_MODE
4370 FROM IGS_EN_ATD_MODE am
4371 WHERE am.attendance_mode = cp_attendance_mode;
4372 CURSOR c_cir (
4373 cp_cal_type IGS_CA_INST.cal_type%TYPE) IS
4374 SELECT ci.sequence_number
4375 FROM IGS_CA_INST_REL cir,
4376 IGS_CA_INST ci,
4377 IGS_CA_TYPE cat,
4378 IGS_CA_STAT cs
4379 WHERE cir.sup_cal_type = p_acad_cal_type AND
4380 cir.sup_ci_sequence_number = p_acad_sequence_number AND
4381 ci.cal_type = cir.sub_cal_type AND
4382 ci.sequence_number = cir.sub_ci_sequence_number AND
4383 ci.cal_type = cp_cal_type AND
4384 cat.cal_type = ci.cal_type AND
4385 cat.S_CAL_CAT = 'TEACHING' AND
4386 cs.CAL_STATUS = ci.CAL_STATUS AND
4387 cs.s_cal_status = 'ACTIVE'
4388 ORDER BY ci.start_dt;
4389
4390 CURSOR c_sua (
4391 cp_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
4392 cp_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE,
4393 cp_unit_cd IGS_EN_SU_ATTEMPT.unit_cd%TYPE,
4394 cp_cal_type IGS_EN_SU_ATTEMPT.cal_type%TYPE,
4395 cp_ci_sequence_number IGS_EN_SU_ATTEMPT.ci_sequence_number%TYPE,
4396 cp_location_cd IGS_EN_SU_ATTEMPT.location_cd%TYPE,
4397 cp_unit_class IGS_EN_SU_ATTEMPT.unit_class%TYPE) IS
4398 SELECT 'x'
4399 FROM IGS_EN_SU_ATTEMPT
4400 WHERE person_id = cp_person_id AND
4401 course_cd = cp_course_cd AND
4402 unit_cd = cp_unit_cd AND
4403 cal_type = cp_cal_type AND
4404 ci_sequence_number = cp_ci_sequence_number AND
4405 location_cd = cp_location_cd AND
4406 unit_class = cp_unit_class;
4407
4408 --cursor to select the unit section status , placements build.
4409 CURSOR c_sua_status(p_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE) IS
4410 SELECT DECODE(sua.unit_attempt_status, 'UNCONFIRM', 'N', 'WAITLISTED', 'Y' , NULL)
4411 FROM IGS_EN_SU_ATTEMPT sua
4412 WHERE sua.person_id = p_person_id AND
4413 sua.course_cd = p_course_cd AND
4414 sua.uoo_id = p_uoo_id;
4415
4416 --cursor to select check if unit section is sup, sub or none.
4417 CURSOR c_rel_type(p_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE) IS
4418 SELECT relation_type
4419 FROM IGS_PS_UNIT_OFR_OPT
4420 WHERE uoo_id = p_uoo_id;
4421
4422 --fetch the teach cal of the unit section
4423 CURSOR c_teach_cal(p_uoo_Id igs_ps_unit_ofr_opt.uoo_Id%TYPE) IS
4424 SELECT cal_type, ci_sequence_number
4425 FROM igs_ps_unit_ofr_opt
4426 WHERE uoo_id = p_uoo_id;
4427
4428 v_am_rec c_am%ROWTYPE;
4429 v_sua_rec VARCHAR2(1);
4430 v_cir_rec c_cir%ROWTYPE;
4431 v_warn_level VARCHAR2(10);
4432 v_log_creation_dt DATE;
4433 vp_warn_level VARCHAR2(10) := NULL;
4434 v_message_name VARCHAR2(2000);
4435 v_attendance_mode VARCHAR2(3);
4436 v_counter NUMBER := 0;
4437 v_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
4438 v_session_id VARCHAR2(255);
4439 v_ci_start_dt DATE;
4440 v_ci_end_dt DATE;
4441 -- variable used to keep the values on the
4442 -- parameter specified units. p_unit<x>_....
4443 v_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
4444 v_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE;
4445 v_location_cd IGS_PS_UNIT_OFR_OPT.location_cd%TYPE;
4446 v_unit_class IGS_PS_UNIT_OFR_OPT.unit_class%TYPE;
4447 l_core_indicator IGS_EN_SU_ATTEMPT.core_indicator_code%TYPE;
4448
4449 --following vars added as part of placements build.
4450 l_rel_type IGS_PS_UNIT_OFR_OPT.relation_type%TYPE;
4451 l_uoo_ids VARCHAR2(2000);
4452 l_enr_uoo_ids VARCHAR2(2000);
4453 l_out_uoo_ids VARCHAR2(2000);
4454 l_waitlist_uoo_ids VARCHAR2(2000);
4455 l_failed_uoo_ids VARCHAR2(2000);
4456 l_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE;
4457 l_unit_cd IGS_PS_UNIT_OFR_OPT.unit_cd%TYPE;
4458 l_unit_cds VARCHAR2(2000);
4459
4460
4461 --pl/sql tables to hold the uooids based on whethere the unit section is superior , sobordinate or none.
4462
4463 TYPE t_params_table IS TABLE OF NUMBER(7) INDEX BY BINARY_INTEGER;
4464 t_sup_params t_params_table;
4465 t_sub_params t_params_table;
4466 t_ord_params t_params_table;
4467 v_sup_index BINARY_INTEGER := 1;
4468 v_sub_index BINARY_INTEGER := 1;
4469 v_ord_index BINARY_INTEGER := 1;
4470
4471 l_waitlist_flag varchar2(1);
4472 l_cal_type IGS_PS_UNIT_OFR_OPT.cal_type%TYPE;
4473 l_seq_num IGS_PS_UNIT_OFR_OPT.ci_sequence_number%TYPE;
4474
4475 BEGIN
4476 p_added_ind := 'N';
4477 vp_warn_level := NULL;
4478 p_message_name := null;
4479 -- Get the student?s IGS_PS_GOVT_ATD_MODE before the pre-enrolment
4480 -- starts. It is passed to the routine determining which UOO to
4481 -- select for a pre-enrolled IGS_PS_UNIT.
4482 OPEN c_am(
4483 v_sca_rec.attendance_mode);
4484 FETCH c_am INTO v_am_rec;
4485 CLOSE c_am;
4486 IF v_am_rec.GOVT_ATTENDANCE_MODE = '1' THEN
4487 v_attendance_mode := 'ON';
4488 ELSIF v_am_rec.GOVT_ATTENDANCE_MODE = '2' THEN
4489 v_attendance_mode := 'OFF';
4490 ELSE
4491 v_attendance_mode := '%';
4492 END IF;
4493 -- loop through each of the specified units
4494
4495 FOR v_counter IN 1..12 LOOP
4496 -- insert the IGS_PS_UNIT values into the local variables
4497 SELECT DECODE( v_counter,
4498 1, p_unit1_unit_cd,
4499 2, p_unit2_unit_cd,
4500 3, p_unit3_unit_cd,
4501 4, p_unit4_unit_cd,
4502 5, p_unit5_unit_cd,
4503 6, p_unit6_unit_cd,
4504 7, p_unit7_unit_cd,
4505 8, p_unit8_unit_cd,
4506 9, p_unit9_unit_cd,
4507 10, p_unit10_unit_cd,
4508 11, p_unit11_unit_cd,
4509 12, p_unit12_unit_cd,
4510 NULL),
4511 DECODE( v_counter,
4512 1, p_unit1_cal_type,
4513 2, p_unit2_cal_type,
4514 3, p_unit3_cal_type,
4515 4, p_unit4_cal_type,
4516 5, p_unit5_cal_type,
4517 6, p_unit6_cal_type,
4518 7, p_unit7_cal_type,
4519 8, p_unit8_cal_type,
4520 9, p_unit9_cal_type,
4521 10, p_unit10_cal_type,
4522 11, p_unit11_cal_type,
4523 12, p_unit12_cal_type,
4524 NULL),
4525 DECODE( v_counter,
4526 1, p_unit1_location_cd,
4527 2, p_unit2_location_cd,
4528 3, p_unit3_location_cd,
4529 4, p_unit4_location_cd,
4530 5, p_unit5_location_cd,
4531 6, p_unit6_location_cd,
4532 7, p_unit7_location_cd,
4533 8, p_unit8_location_cd,
4534 9, p_unit9_location_cd,
4535 10, p_unit10_location_cd,
4536 11, p_unit11_location_cd,
4537 12, p_unit12_location_cd,
4538 NULL),
4539 DECODE( v_counter,
4540 1, p_unit1_unit_class,
4541 2, p_unit2_unit_class,
4542 3, p_unit3_unit_class,
4543 4, p_unit4_unit_class,
4544 5, p_unit5_unit_class,
4545 6, p_unit6_unit_class,
4546 7, p_unit7_unit_class,
4547 8, p_unit8_unit_class,
4548 9, p_unit9_unit_class,
4549 10, p_unit10_unit_class,
4550 11, p_unit11_unit_class,
4551 12, p_unit12_unit_class,
4552 NULL)
4553 INTO v_unit_cd,
4554 v_cal_type,
4555 v_location_cd,
4556 v_unit_class
4557 FROM DUAL;
4558
4559 IF v_unit_cd IS NOT NULL THEN
4560 p_added_ind := 'Y';
4561 -- Call routine to check whether there is anything preventing
4562 -- the IGS_PS_UNIT attempt from being pre-enrolled (ie. advanced
4563 -- standing or encumbrances).
4564 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_pre(
4565 p_person_id,
4566 p_course_cd,
4567 v_unit_cd,
4568 p_log_creation_dt,
4569 v_warn_level,
4570 v_message_name) THEN
4571 IF p_log_creation_dt IS NOT NULL THEN
4572 -- If the log creation date is set then log the HECS error
4573 -- This is if the pre-enrolment is being performed in batch.
4574 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4575 cst_pre_enrol,
4576 p_log_creation_dt,
4577 cst_minor || ',' ||
4578 TO_CHAR(p_person_id) || ',' ||
4579 p_course_cd,
4580 v_message_name,
4581 NULL);
4582 END IF;
4583 IF vp_warn_level IS NULL OR
4584 (vp_warn_level = cst_minor AND v_warn_level IN (cst_major,cst_error)) OR
4585 (vp_warn_level = cst_major AND v_warn_level = cst_error) THEN
4586
4587 vp_warn_level := v_warn_level;
4588 p_message_name := v_message_name;
4589 END IF;
4590 p_warn_level := vp_warn_level;
4591 RETURN;
4592 END IF;
4593 -- For each of the specified units, determine the appropriate calendar
4594 -- instance and UNIT offering option and add the UNIT attempt.
4595 -- Determine the calendar instance of the pre-enrolment within the
4596 -- academic calendar instance; if multiple exist (straddling teaching
4597 -- periods) then pick the earliest.
4598 OPEN c_cir(
4599 v_cal_type);
4600 FETCH c_cir INTO v_cir_rec;
4601 IF c_cir%FOUND THEN
4602 CLOSE c_cir;
4603 -- use the first record found
4604 -- Check whether the student is already enrolled
4605 -- in UNIT attempt.
4606 OPEN c_sua(
4607 p_person_id,
4608 p_course_cd,
4609 v_unit_cd,
4610 v_cal_type,
4611 v_cir_rec.sequence_number,
4612 v_location_cd,
4613 v_unit_class);
4614 FETCH c_sua INTO v_sua_rec;
4615 IF c_sua%NOTFOUND THEN
4616 CLOSE c_sua;
4617 -- Call routine to get the UOO for the selected UNIT.
4618 IF NOT IGS_EN_GEN_005.enrp_get_pre_uoo(
4619 v_unit_cd,
4620 v_cal_type,
4621 v_cir_rec.sequence_number,
4622 v_location_cd,
4623 v_unit_class,
4624 v_sca_rec.attendance_mode,
4625 v_sca_rec.location_cd,
4626 v_uoo_id) THEN
4627 IF p_log_creation_dt IS NOT NULL THEN
4628 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4629 cst_pre_enrol,
4630 p_log_creation_dt,
4631 cst_minor || ',' ||
4632 TO_CHAR(p_person_id) || ',' ||
4633 p_course_cd,
4634 'IGS_EN_UNABLE_LOCATE_UOO_MATC',
4635 v_cal_type || ',' ||
4636 v_unit_cd || ',' ||
4637 v_location_cd || ',' ||
4638 v_unit_class);
4639 END IF;
4640 p_warn_level := 'MINOR';
4641 p_message_name := 'IGS_EN_UNABLE_LOCATE_UOO_MATC';
4642 ELSE
4643 l_rel_type := NULL;
4644 OPEN c_rel_type(v_uoo_id);
4645 FETCH c_rel_type INTO l_rel_type;
4646 CLOSE c_rel_type;
4647 IF l_rel_type= 'SUPERIOR' THEN
4648 t_sup_params(v_sup_index) := v_uoo_id;
4649 v_sup_index :=v_sup_index+1;
4650 ELSIF l_rel_type = 'SUBORDINATE' THEN
4651 t_sub_params(v_sub_index) := v_uoo_id;
4652 v_sub_index := v_sub_index+1;
4653 ELSE
4654 t_ord_params(v_ord_index) := v_uoo_id;
4655 v_ord_index := v_ord_index+1;
4656 END IF;
4657
4658 END IF;
4659
4660 ELSE -- c_sua%FOUND
4661 CLOSE c_sua;
4662 END IF;
4663 ELSE -- c_cir%NOTFOUND
4664 CLOSE c_cir;
4665 END IF;
4666 END IF;
4667 END LOOP; -- 8 units
4668 -- add all the uoo_ids to one pl/sql table, with superiors, first, subordinate next and the rest .
4669 --concatenate uoo_ids to pass to enr_sub_units.
4670 IF t_sup_params.count > 0 THEN
4671 FOR i in 1 .. t_sup_params.count LOOP
4672 IF l_uoo_ids IS NOT NULL then
4673 l_uoo_ids := l_uoo_ids ||','||t_sup_params(i);
4674 ELSE
4675 l_uoo_ids := t_sup_params(i);
4676 END IF;
4677 END LOOP;
4678 END IF;
4679 IF t_sub_params.count > 0 THEN
4680 FOR i in 1 .. t_sub_params.count LOOP
4681 IF l_uoo_ids IS NOT NULL then
4682 l_uoo_ids := l_uoo_ids ||','||t_sub_params(i);
4683 ELSE
4684 l_uoo_ids := t_sub_params(i);
4685 END IF;
4686 END LOOP;
4687 END IF;
4688 IF t_ord_params.count > 0 THEN
4689 FOR i in 1 .. t_ord_params.count LOOP
4690 IF l_uoo_ids IS NOT NULL then
4691 l_uoo_ids := l_uoo_ids ||','||t_ord_params(i);
4692 ELSE
4693 l_uoo_ids := t_ord_params(i);
4694 END IF;
4695 END LOOP;
4696 END IF;
4697
4698 -- the concatenated uoo-ids are in l_uoo_ids in the order of superior, subordinate and then the rest.
4699 --for each of these , call the enrp_vald_inst_sua.
4700 l_enr_uoo_ids := l_uoo_ids;
4701
4702 WHILE l_enr_uoo_ids IS NOT NULL LOOP
4703 l_uoo_id := NULL;
4704 --extract the uoo_id
4705 IF(INSTR(l_enr_uoo_ids,',',1) = 0) THEN
4706 l_uoo_id := TO_NUMBER(l_enr_uoo_ids);
4707 ELSE
4708 l_uoo_id := TO_NUMBER(SUBSTR(l_enr_uoo_ids,0,INSTR(l_enr_uoo_ids,',',1)-1)) ;
4709 END IF;
4710
4711
4712 IGS_CA_GEN_001.calp_get_ci_dates(
4713 v_cal_type,
4714 v_cir_rec.sequence_number,
4715 v_ci_start_dt,
4716 v_ci_end_dt);
4717
4718 -- Get the Core Indicator for the Unit Section
4719 l_core_indicator := igs_en_gen_009.enrp_check_usec_core(p_person_id, p_course_cd, l_uoo_id);
4720
4721 IF igs_en_gen_010.enrp_vald_inst_sua(p_person_id => p_person_id,
4722 p_course_cd => p_course_cd,
4723 p_unit_cd => NULL,
4724 p_version_number => NULL,
4725 p_teach_cal_type => NULL,
4726 p_teach_seq_num => NULL,
4727 p_load_cal_type => p_lload_cal_type,
4728 p_load_seq_num => p_lload_ci_seq_num,
4729 p_location_cd => NULL,
4730 p_unit_class => NULL,
4731 p_uoo_id => l_uoo_id,
4732 p_enr_method => p_enr_method,
4733 p_core_indicator_code => l_core_indicator, -- ptandon, Prevent Dropping Core Units build
4734 p_message => v_message_name)
4735 THEN
4736 IF v_message_name IS NOT NULL THEN
4737 p_warn_level := 'MINOR';
4738 p_message_name := v_message_name;
4739 END IF;
4740
4741 --call enr_sub_units to enroll any subordinate units that are marked as default enroll
4742
4743 l_waitlist_flag := NULL;
4744 OPEN c_sua_status(l_uoo_id);
4745 FETCH c_sua_status INTO l_waitlist_flag;
4746 CLOSE c_sua_status;
4747 --fetch the teach cal type and teach seq number
4748 l_cal_type := NULL;
4749 l_seq_num := NULL;
4750 OPEN c_teach_cal(l_uoo_id);
4751 FETCH c_teach_cal INTO l_cal_type, l_seq_num;
4752 CLOSE c_teach_cal;
4753
4754 l_failed_uoo_ids := NULL;
4755 igs_en_val_sua.enr_sub_units(
4756 p_person_id => p_person_id,
4757 p_course_cd => p_course_cd,
4758 p_uoo_id => l_uoo_id,
4759 p_waitlist_flag => l_waitlist_flag,
4760 p_load_cal_type => p_lload_cal_type,
4761 p_load_seq_num => p_lload_ci_seq_num,
4762 p_enrollment_date => NULL,
4763 p_enrollment_method => p_enr_method,
4764 p_enr_uoo_ids => l_enr_uoo_ids,
4765 p_uoo_ids => l_out_uoo_ids,
4766 p_waitlist_uoo_ids => l_waitlist_uoo_ids,
4767 p_failed_uoo_ids => l_failed_uoo_ids);
4768
4769 IF l_failed_uoo_ids IS NOT NULL THEN
4770 --log error message if sub units did not enroll
4771 IF p_log_creation_dt IS NOT NULL THEN
4772 l_unit_cds := NULL;
4773 --following function returns a string of units codes for teh passed in string of uoo_ids
4774 l_unit_cds := igs_en_gen_018.enrp_get_unitcds(l_failed_uoo_ids);
4775 p_warn_level := cst_error;
4776 v_message_name := 'IGS_EN_BLK_SUB_FAILED'||'*'||l_unit_cds;
4777 -- If the log creation date is set then log the HECS error
4778 -- This is if the pre-enrolment is being performed in batch.
4779 log_error_message(p_s_log_type =>cst_pre_enrol,
4780 p_creation_dt =>p_log_creation_dt,
4781 p_sle_key =>p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
4782 p_sle_message_name =>v_message_name,
4783 p_del => ';');
4784 END IF;
4785 END IF;
4786
4787 ELSE --unit was not enrolled i.e enrp_vald_inst_sua returned false.
4788 p_warn_level := cst_error;
4789 p_message_name := v_message_name;
4790
4791 END IF;
4792 IF (p_log_creation_dt IS NOT NULL) AND (v_message_name IS NOT NULL) THEN
4793 -- If the log creation date is set then log the HECS error
4794 -- This is if the pre-enrolment is being performed in batch.
4795 log_error_message(p_s_log_type => cst_pre_enrol,
4796 p_creation_dt => p_log_creation_dt,
4797 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
4798 p_sle_message_name => v_message_name,
4799 p_del => ';');
4800 END IF;
4801
4802 --remove the processed uoo_id from the list.
4803 IF(INSTR(l_enr_uoo_ids,',',1) = 0) THEN
4804 l_enr_uoo_ids := NULL;
4805 ELSE
4806 l_enr_uoo_ids := SUBSTR(l_enr_uoo_ids,INSTR(l_enr_uoo_ids,',',1)+1);
4807 END IF;
4808
4809
4810 END LOOP;
4811 RETURN;
4812 EXCEPTION
4813 WHEN OTHERS THEN
4814 IF c_sua%ISOPEN THEN
4815 CLOSE c_sua;
4816 END IF;
4817 IF c_am%ISOPEN THEN
4818 CLOSE c_am;
4819 END IF;
4820 IF c_cir%ISOPEN THEN
4821 CLOSE c_cir;
4822 END IF;
4823 IF c_sua_status%ISOPEN THEN
4824 CLOSE c_sua_status;
4825 END IF;
4826 IF c_teach_cal%ISOPEN THEN
4827 CLOSE c_teach_cal;
4828 END IF;
4829 IF c_rel_type%ISOPEN THEN
4830 CLOSE c_rel_type;
4831 END IF;
4832
4833 RAISE;
4834 END;
4835 EXCEPTION
4836 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
4837 RAISE;
4838 WHEN OTHERS THEN
4839 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
4840 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_copy_param_sua');
4841 IGS_GE_MSG_STACK.ADD;
4842 App_Exception.Raise_Exception;
4843 END enrpl_copy_param_sua;
4844
4845
4846 BEGIN -- enrp_ins_sret_prenrl
4847 SAVEPOINT igs_ret_preenrol_sp;
4848 igs_en_gen_017.g_invoke_source := 'JOB';
4849 p_message_name := null;
4850 p_warn_level := NULL;
4851 --If passed load calendar is null then derive the load caledar based on academic calendar.
4852 IF p_load_cal_type IS NULL THEN
4853 OPEN c_load_cal(p_acad_cal_type,p_acad_sequence_number);
4854 FETCH c_load_cal INTO l_load_cal_type, l_load_seq_num;
4855 IF c_load_cal%NOTFOUND THEN
4856 CLOSE c_load_cal;
4857 IF p_log_creation_dt IS NOT NULL THEN
4858 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4859 p_s_log_type => cst_pre_enrol,
4860 p_creation_dt => p_log_creation_dt,
4861 p_key => cst_error || ',' ||TO_CHAR(p_person_id) || ',' || p_course_cd,
4862 p_s_message_name =>'IGS_EN_CN_FIND_TERM_CAL',
4863 p_text => NULL);
4864 END IF;
4865 p_warn_level := cst_error;
4866 p_message_name := 'IGS_EN_CN_FIND_TERM_CAL';
4867 RETURN FALSE;
4868 END IF;
4869 CLOSE c_load_cal;
4870 ELSE
4871 l_load_cal_type := p_load_cal_type;
4872 l_load_seq_num := p_load_ci_seq_num;
4873 END IF;
4874
4875 l_enr_method := p_dflt_enr_method;
4876 --If enrollment method not passed then derive the default enrollment method.
4877 IF l_enr_method IS NULL THEN
4878 igs_en_gen_017.enrp_get_enr_method(p_enr_method_type => l_enr_method,
4879 p_error_message => l_dummy_mesg,
4880 p_ret_status => l_return_status);
4881 IF l_return_status='FALSE' THEN
4882 IF p_log_creation_dt IS NOT NULL THEN
4883 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4884 p_s_log_type => cst_pre_enrol,
4885 p_creation_dt => p_log_creation_dt,
4886 p_key => cst_error || ',' ||TO_CHAR(p_person_id) || ',' || p_course_cd,
4887 p_s_message_name =>'IGS_SS_EN_NOENR_METHOD',
4888 p_text => NULL);
4889 END IF;
4890 p_warn_level := cst_error;
4891 p_message_name := 'IGS_SS_EN_NOENR_METHOD';
4892 RETURN FALSE;
4893 END IF;
4894 END IF;
4895 -- call routine to check eligibility of the student
4896 IF NOT IGS_EN_GEN_006.ENRP_GET_SCA_ELGBL (
4897 p_person_id,
4898 p_course_cd,
4899 cst_return,
4900 p_acad_cal_type,
4901 p_acad_sequence_number,
4902 'Y', -- confirmed IGS_PS_COURSE attempt
4903 v_message_name) THEN
4904
4905 IF p_log_creation_dt IS NOT NULL THEN
4906 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4907 cst_pre_enrol,
4908 p_log_creation_dt,
4909 cst_error || ',' ||
4910 TO_CHAR(p_person_id) || ',' ||
4911 p_course_cd,
4912 v_message_name,
4913 NULL);
4914 END IF;
4915
4916 p_message_name := v_message_name;
4917 p_warn_level := cst_error;
4918 RETURN FALSE;
4919 END IF;
4920
4921 -- load the student IGS_PS_COURSE attempt detail of
4922 -- the specified IGS_PS_COURSE
4923 OPEN c_sca_details;
4924 FETCH c_sca_details INTO v_sca_rec;
4925 IF c_sca_details%NOTFOUND THEN
4926 CLOSE c_sca_details;
4927 IF p_log_creation_dt IS NOT NULL THEN
4928 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
4929 cst_pre_enrol,
4930 p_log_creation_dt,
4931 cst_error || ',' ||
4932 TO_CHAR(p_person_id) || ',' ||
4933 p_course_cd,
4934 'IGS_EN_CAN_LOC_EXIS_STUD',
4935 NULL);
4936 END IF;
4937 p_message_name := 'IGS_EN_CAN_LOC_EXIS_STUD';
4938 p_warn_level := cst_error;
4939 RETURN FALSE;
4940 END IF;
4941 CLOSE c_sca_details;
4942
4943 -- IF a parameter is passed for the enrolment category, then use it
4944 --else get the category from the previous enrolment period.
4945 v_enrolment_cat := null;
4946 -- insert student IGS_PS_COURSE attempt enrolment record
4947 --chk if record already exists
4948
4949 OPEN c_scae_details;
4950 FETCH c_scae_details INTO v_scae_details;
4951 IF v_scae_details IS NOT NULL THEN
4952
4953 --check if the passed in parameter is equal to the enrolment category.
4954 IF p_enrolment_cat IS NOT NULL THEN
4955 IF v_scae_details <> p_enrolment_cat THEN
4956 v_enrolment_cat := p_enrolment_cat;
4957
4958 --update the record
4959 BEGIN
4960
4961 OPEN c_scae_upd;
4962 FETCH c_scae_upd INTO v_scae_upd_rec;
4963
4964 IGS_AS_SC_ATMPT_ENR_PKG.UPDATE_ROW(
4965 X_ROWID => v_scae_upd_rec.rowid,
4966 X_PERSON_ID => v_scae_upd_rec.PERSON_ID,
4967 X_COURSE_CD => v_scae_upd_rec.COURSE_CD,
4968 X_CAL_TYPE => v_scae_upd_rec.CAL_TYPE,
4969 X_CI_SEQUENCE_NUMBER => v_scae_upd_rec.CI_SEQUENCE_NUMBER,
4970 X_ENROLMENT_CAT => v_enrolment_cat,
4971 X_ENROLLED_DT => v_scae_upd_rec.ENROLLED_DT,
4972 X_ENR_FORM_DUE_DT => v_scae_upd_rec.ENR_FORM_DUE_DT,
4973 X_ENR_PCKG_PROD_DT => v_scae_upd_rec.ENR_PCKG_PROD_DT ,
4974 X_ENR_FORM_RECEIVED_DT => v_scae_upd_rec.ENR_FORM_RECEIVED_DT,
4975 X_MODE => 'R' );
4976
4977 CLOSE c_scae_upd;
4978 EXCEPTION
4979 WHEN OTHERS THEN
4980 IF c_scae_upd%ISOPEN THEN
4981 CLOSE c_scae_upd;
4982 END IF;
4983 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
4984 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrpl_sret_preenrol');
4985 IGS_GE_MSG_STACK.ADD;
4986 App_Exception.Raise_Exception;
4987 END;
4988 END IF; --v_scae_details <> p_enrolment_cat
4989 END IF; --p_enrolment_cat
4990 ELSE
4991
4992 -- v_scae_details is null i.e c_scae_details%NOTFOUND hence create a new record
4993 --chk for parameter passed to the job
4994 IF p_enrolment_cat IS NOT NULL THEN
4995 v_enrolment_cat := p_enrolment_cat;
4996 ELSE
4997
4998 --fetch previous enrolment category
4999 OPEN c_prev_enr_cat;
5000 FETCH c_prev_enr_cat INTO v_enr_cat;
5001 IF c_prev_enr_cat%NOTFOUND THEN
5002 CLOSE c_prev_enr_cat;
5003 IF p_log_creation_dt IS NOT NULL THEN
5004 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
5005 cst_pre_enrol,
5006 p_log_creation_dt,
5007 cst_error || ',' ||
5008 TO_CHAR(p_person_id) || ',' ||
5009 p_course_cd,
5010 'IGS_EN_CANT_DETR_ENRL_CAT',
5011 NULL);
5012 END IF;
5013 p_message_name := 'IGS_EN_CANT_DETR_ENRL_CAT';
5014 p_warn_level := cst_error;
5015 RETURN FALSE;
5016 ELSE --category found
5017 CLOSE c_prev_enr_cat;
5018 v_enrolment_cat := v_enr_cat;
5019 END IF;
5020 END IF;
5021 --insert the record.
5022 DECLARE
5023 l_rowid VARCHAR2(25);
5024 BEGIN
5025
5026 IGS_AS_SC_ATMPT_ENR_PKG.INSERT_ROW (
5027 x_rowid => l_rowid,
5028 x_person_id => p_person_id,
5029 x_course_cd => p_course_cd,
5030 x_cal_type => p_enrol_cal_type,
5031 x_ci_sequence_number => p_enrol_sequence_number,
5032 x_enrolment_cat => v_enrolment_cat,
5033 x_enrolled_dt => NULL,
5034 x_enr_form_due_dt => p_override_enr_form_due_dt,
5035 x_enr_pckg_prod_dt => p_override_enr_pckg_prod_dt,
5036 x_enr_form_received_dt => NULL );
5037 END;
5038 END IF;
5039 CLOSE c_scae_details;
5040
5041
5042
5043
5044 -- * Warn if the IGS_PS_COURSE is not being offered in the target
5045 -- academic period ; the student can still enrol as it strictly
5046 -- only applies to admission to the IGS_PS_COURSE.
5047 OPEN c_crv(
5048 v_sca_rec.course_cd,
5049 v_sca_rec.version_number,
5050 v_sca_rec.cal_type,
5051 v_sca_rec.location_cd,
5052 v_sca_rec.attendance_mode,
5053 v_sca_rec.attendance_type);
5054 FETCH c_crv INTO v_crv_rec;
5055 IF c_crv%NOTFOUND THEN
5056 CLOSE c_crv;
5057 -- * Warn that the IGS_PS_COURSE if not being offered
5058 IF p_log_creation_dt IS NOT NULL THEN
5059 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
5060 cst_pre_enrol,
5061 p_log_creation_dt,
5062 cst_minor || ',' ||
5063 TO_CHAR(p_person_id) || ',' ||
5064 p_course_cd,
5065 'IGS_EN_STUD_POO_TARGET_ACAPRD',
5066 NULL);
5067 END IF;
5068 p_message_name := 'IGS_EN_STUD_POO_TARGET_ACAPRD';
5069 p_warn_level := cst_minor;
5070
5071 ELSE
5072 CLOSE c_crv;
5073 END IF;
5074
5075 v_unit_set_cd := NULL ;
5076
5077 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') = 'N' THEN
5078 -- attempt to get IGS_PS_UNIT set code from current enrolment.
5079 -- If there are multiple then don't attempt.
5080 FOR v_susa_rec IN c_susa LOOP
5081 v_row_count := 1;
5082 v_unit_set_cd := v_susa_rec.unit_set_cd;
5083 IF c_susa%ROWCOUNT > 1 THEN
5084 v_row_count := 2;
5085 EXIT;
5086 END IF;
5087 END LOOP;
5088 IF v_row_count > 1 THEN
5089 FOR v_pos_unit_sets IN c_pos_unit_sets(v_sca_rec.version_number) LOOP
5090 l_pos_count := 1;
5091 v_unit_set_cd := v_pos_unit_sets.unit_set_cd;
5092 IF c_pos_unit_sets%ROWCOUNT > 1 THEN
5093 l_pos_count := 2;
5094 EXIT ;
5095 END IF;
5096 END LOOP;
5097 IF l_pos_count <> 1 THEN
5098 v_unit_set_cd := NULL ;
5099 END IF; -- if l_pos_count <> 1
5100 ELSIF v_row_count = 0 THEN
5101 v_unit_set_cd := NULL ;
5102 END IF ; -- v_row_count <> 1
5103 END IF;
5104
5105 -- In year of program mode do the following code
5106 IF NVL(FND_PROFILE.VALUE('IGS_PS_PRENRL_YEAR_IND'),'N') = 'Y' THEN
5107
5108 -- If there is a currently active year of program then make it completed
5109 --and pre-enrol in the next year of program , if it exists
5110 OPEN c_active_us ;
5111 FETCH c_active_us INTO c_active_us_rec;
5112 IF c_active_us%FOUND THEN
5113
5114 v_unit_set_cd := c_active_us_rec.unit_set_cd;
5115 -- check if there is any progression outcome preventing this student
5116 -- from completing this unit set attempt and going into the next year of program
5117 OPEN c_prog_outcome(c_active_us_rec.selection_dt) ;
5118 FETCH c_prog_outcome INTO c_prog_outcome_rec ;
5119 CLOSE c_prog_outcome ;
5120 gv_progress_outcome_type := c_prog_outcome_rec.s_progression_outcome_type;
5121 IF NVL(gv_progress_outcome_type,'ADVANCE') = 'ADVANCE' THEN
5122 IF NVL(P_PROGRESS_STAT,'ADVANCE') <> 'REPEATYR' THEN
5123
5124 -- Check if trying to process a student who has just been pre-enrolled into the next year
5125 -- ie first time the process is called student is transferred to year 2 , if process is called
5126 -- again immediately then student should not again be pre-enrolled into year 3
5127 OPEN c_chk_census_dt(c_active_us_rec.unit_set_cd);
5128 FETCH c_chk_census_dt INTO c_census_dt_rec;
5129
5130 IF c_chk_census_dt%FOUND THEN
5131
5132 DECLARE
5133 CURSOR c_susa_upd IS
5134 SELECT rowid,IGS_AS_SU_SETATMPT.*
5135 FROM IGS_AS_SU_SETATMPT
5136 WHERE person_id = c_active_us_rec.person_id AND
5137 course_cd = c_active_us_rec.course_cd AND
5138 unit_set_cd = c_active_us_rec.unit_set_cd AND
5139 us_version_number = c_active_us_rec.us_version_number AND
5140 sequence_number = c_active_us_rec.sequence_number
5141 FOR UPDATE OF RQRMNTS_COMPLETE_IND ,
5142 RQRMNTS_COMPLETE_DT NOWAIT;
5143 c_susa_upd_rec c_susa_upd%ROWTYPE ;
5144 BEGIN
5145 OPEN c_susa_upd ;
5146 FETCH c_susa_upd INTO c_susa_upd_rec ;
5147
5148 --The below condition to derive p_completion_date has been added
5149 --as part of ENCR030(UK Enh) - Bug#2708430 - 16DEC2002.
5150 --If p_completion_date is not available then either it will be SYSDATE - 1
5151 --or p_selection_date - 1.
5152 IF p_completion_date IS NULL AND p_selection_date IS NULL THEN
5153 l_completion_date := SYSDATE - 1;
5154 ELSIF p_completion_date IS NULL AND p_selection_date IS NOT NULL THEN
5155 l_completion_date := p_selection_date - 1;
5156 END IF;
5157
5158 IF igs_en_gen_legacy.check_usa_overlap(
5159 c_susa_upd_rec.person_id,
5160 c_susa_upd_rec.course_cd,
5161 c_susa_upd_rec.selection_dt,
5162 NVL(p_completion_date, TRUNC(l_completion_date)),
5163 c_susa_upd_rec.end_dt,
5164 c_susa_upd_rec.sequence_number,
5165 c_susa_upd_rec.unit_set_cd,
5166 c_susa_upd_rec.us_version_number,
5167 p_message_name) = FALSE THEN
5168
5169 p_warn_level := cst_error;
5170 IF p_log_creation_dt IS NOT NULL THEN
5171 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
5172 cst_pre_enrol,
5173 p_log_creation_dt,
5174 cst_error || ',' ||
5175 TO_CHAR(p_person_id) || ',' ||
5176 p_course_cd,
5177 p_message_name,
5178 NULL);
5179 END IF;
5180 RETURN FALSE;
5181 END IF ;
5182
5183 -- set the current year of program to completed
5184 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
5185 X_ROWID => c_susa_upd_rec.rowid,
5186 X_PERSON_ID => c_susa_upd_rec.person_id ,
5187 X_COURSE_CD => c_susa_upd_rec.course_cd ,
5188 X_UNIT_SET_CD => c_susa_upd_rec.unit_set_cd ,
5189 X_SEQUENCE_NUMBER => c_susa_upd_rec.sequence_number ,
5190 X_US_VERSION_NUMBER => c_susa_upd_rec.us_version_number,
5191 X_SELECTION_DT => c_susa_upd_rec.selection_dt ,
5192 X_STUDENT_CONFIRMED_IND => c_susa_upd_rec.student_confirmed_ind ,
5193 X_END_DT => c_susa_upd_rec.end_dt ,
5194 X_PARENT_UNIT_SET_CD => c_susa_upd_rec.parent_unit_set_cd,
5195 X_PARENT_SEQUENCE_NUMBER => c_susa_upd_rec.parent_sequence_number ,
5196 X_PRIMARY_SET_IND => c_susa_upd_rec.primary_set_ind ,
5197 X_VOLUNTARY_END_IND => c_susa_upd_rec.voluntary_end_ind ,
5198 X_AUTHORISED_PERSON_ID => c_susa_upd_rec.authorised_person_id,
5199 X_AUTHORISED_ON => c_susa_upd_rec.authorised_on ,
5200 X_OVERRIDE_TITLE => c_susa_upd_rec.override_title ,
5201 X_RQRMNTS_COMPLETE_IND => 'Y' ,
5202 -- The user entered parameter p_selection_date has been passed for the field X_RQRMNTS_COMPLETE_DT
5203 -- In the UK Enh Build - Bug#2580731 - 04OCT2002.
5204 -- In ENCR030(UK Enh) - Bug#2708430 - 16DEC2002. the X_RQRMNTS_COMPLETE_DT parameter below will be the parameter
5205 -- p_completion_date or l_completion_date derived just above.
5206 X_RQRMNTS_COMPLETE_DT => NVL(p_completion_date, TRUNC(l_completion_date)) ,
5207 X_S_COMPLETED_SOURCE_TYPE => c_susa_upd_rec.s_completed_source_type,
5208 X_CATALOG_CAL_TYPE => c_susa_upd_rec.catalog_cal_type ,
5209 X_CATALOG_SEQ_NUM => c_susa_upd_rec.catalog_seq_num,
5210 X_ATTRIBUTE_CATEGORY => c_susa_upd_rec.attribute_category,
5211 X_ATTRIBUTE1 => c_susa_upd_rec.attribute1 ,
5212 X_ATTRIBUTE2 => c_susa_upd_rec.attribute2 ,
5213 X_ATTRIBUTE3 => c_susa_upd_rec.attribute3,
5214 X_ATTRIBUTE4 => c_susa_upd_rec.attribute4,
5215 X_ATTRIBUTE5 => c_susa_upd_rec.attribute5,
5216 X_ATTRIBUTE6 => c_susa_upd_rec.attribute6,
5217 X_ATTRIBUTE7 => c_susa_upd_rec.attribute7,
5218 X_ATTRIBUTE8 => c_susa_upd_rec.attribute8,
5219 X_ATTRIBUTE9 => c_susa_upd_rec.attribute9,
5220 X_ATTRIBUTE10 => c_susa_upd_rec.attribute10,
5221 X_ATTRIBUTE11 => c_susa_upd_rec.attribute11,
5222 X_ATTRIBUTE12 => c_susa_upd_rec.attribute12,
5223 X_ATTRIBUTE13 => c_susa_upd_rec.attribute13,
5224 X_ATTRIBUTE14 => c_susa_upd_rec.attribute14,
5225 X_ATTRIBUTE15 => c_susa_upd_rec.attribute15,
5226 X_ATTRIBUTE16 => c_susa_upd_rec.attribute16,
5227 X_ATTRIBUTE17 => c_susa_upd_rec.attribute17,
5228 X_ATTRIBUTE18 => c_susa_upd_rec.attribute18,
5229 X_ATTRIBUTE19 => c_susa_upd_rec.attribute19,
5230 X_ATTRIBUTE20 => c_susa_upd_rec.attribute20,
5231 X_MODE => 'R'
5232 );
5233 CLOSE c_susa_upd ;
5234
5235 IF NOT update_stream_unit_sets(
5236 p_person_id,
5237 p_course_cd,
5238 c_susa_upd_rec.unit_set_cd,
5239 'Y',
5240 NVL(p_completion_date, TRUNC(l_completion_date)),
5241 c_susa_upd_rec.selection_dt,
5242 c_susa_upd_rec.student_confirmed_ind,
5243 p_log_creation_dt,
5244 p_message_name
5245 ) THEN
5246 RETURN FALSE;
5247 END IF;
5248
5249 END ; -- complete the current unit set
5250 -- get the next year in sequence
5251 OPEN c_next_us(c_active_us_rec.unit_set_cd) ;
5252 FETCH c_next_us INTO c_next_us_rec ;
5253 IF c_next_us%FOUND THEN
5254 -- find the version number for the new unit set
5255 OPEN c_us_version_number(p_person_id,p_course_cd, c_next_us_rec.unit_set_cd);
5256 FETCH c_us_version_number INTO next_us_version;
5257 IF c_us_version_number%FOUND THEN
5258 -- If next year of program exists then pre-enroll in it
5259
5260 IF NOT create_unit_set(
5261 p_person_id,
5262 p_course_cd,
5263 c_next_us_rec.unit_set_cd,
5264 next_us_version,
5265 NVL(p_selection_date,SYSDATE),
5266 'Y',
5267 NULL,
5268 NULL,
5269 l_seqval,
5270 p_log_creation_dt,
5271 p_message_name
5272 ) THEN
5273 RETURN FALSE;
5274 END IF;
5275 -- now pre-enroll the pattern of study units corresponding to
5276 -- this new unit set
5277 v_unit_set_cd := c_next_us_rec.unit_set_cd ;
5278
5279
5280 IF NOT create_stream_unit_sets(
5281 p_person_id,
5282 p_course_cd,
5283 c_next_us_rec.unit_set_cd,
5284 NVL(p_selection_date,TRUNC(SYSDATE)),
5285 'Y',
5286 p_log_creation_dt,
5287 p_message_name
5288 ) THEN
5289 RETURN FALSE;
5290 END IF;
5291
5292 -- smaddali 14-may-2002 added new parameter p_old_sequence_number for bug#2350629
5293 IF l_seqval IS NOT NULL THEN
5294 copy_hesa_details (
5295 p_person_id,
5296 p_course_cd,
5297 v_sca_rec.version_number,
5298 c_active_us_rec.unit_set_cd,
5299 c_active_us_rec.us_version_number,
5300 c_active_us_rec.sequence_number ,
5301 c_next_us_rec.unit_set_cd,
5302 next_us_version,
5303 l_seqval
5304 );
5305 END IF;
5306 ELSE
5307 CLOSE c_us_version_number ;
5308 CLOSE c_next_us ;
5309 CLOSE c_chk_census_dt ;
5310 RETURN TRUE ;
5311 END IF; -- if next unit set version is found
5312 CLOSE c_us_version_number ;
5313 ELSE
5314 CLOSE c_next_us ;
5315 CLOSE c_chk_census_dt ;
5316 RETURN TRUE ;
5317 END IF; -- found next unit set in sequence
5318 CLOSE c_next_us ;
5319 END IF; -- end chk_census_dt
5320 CLOSE c_chk_census_dt ;
5321 END IF; -- student is not eligible for progress
5322 END IF;
5323 ELSE -- no active unit set attempts found
5324 -- find the last active unit set under context program
5325 OPEN c_last_us ;
5326 FETCH c_last_us INTO l_last_us ;
5327 IF c_last_us%FOUND THEN
5328
5329 v_unit_set_cd := l_last_us.unit_set_cd;
5330 OPEN c_prog_outcome(l_last_us.selection_dt) ;
5331 FETCH c_prog_outcome INTO c_prog_outcome_rec ;
5332 CLOSE c_prog_outcome ;
5333 gv_progress_outcome_type := c_prog_outcome_rec.s_progression_outcome_type;
5334 IF NVL(gv_progress_outcome_type, 'ADVANCE') = 'ADVANCE' THEN
5335 IF NVL(P_PROGRESS_STAT,'ADVANCE') <> 'REPEATYR' THEN
5336
5337 OPEN c_next_us(l_last_us.unit_set_cd) ;
5338 FETCH c_next_us INTO c_next_us_rec ;
5339 IF c_next_us%FOUND THEN
5340 -- find the version number for the new unit set
5341 OPEN c_us_version_number(p_person_id,p_course_cd,c_next_us_rec.unit_set_cd);
5342 FETCH c_us_version_number INTO next_us_version;
5343 IF c_us_version_number%FOUND THEN
5344
5345 -- If next year of program exists then pre-enroll in it
5346 IF NOT create_unit_set(
5347 p_person_id,
5348 p_course_cd,
5349 c_next_us_rec.unit_set_cd,
5350 next_us_version,
5351 NVL(p_selection_date,SYSDATE),
5352 'Y',
5353 NULL,
5354 NULL,
5355 l_seqval,
5356 p_log_creation_dt,
5357 p_message_name
5358 ) THEN
5359 RETURN FALSE;
5360 END IF;
5361
5362 -- now pre-enroll the pattern of study units corresponding to
5363 -- this new unit set
5364 v_unit_set_cd := c_next_us_rec.unit_set_cd ;
5365
5366 IF NOT create_stream_unit_sets(
5367 p_person_id,
5368 p_course_cd,
5369 c_next_us_rec.unit_set_cd,
5370 NVL(p_selection_date,TRUNC(SYSDATE)),
5371 'Y',
5372 p_log_creation_dt,
5373 p_message_name
5374 ) THEN
5375 RETURN FALSE;
5376 END IF;
5377
5378
5379 -- smaddali 14-may-2002 added new parameter p_old_sequence_number for bug#2350629
5380 IF l_seqval IS NOT NULL THEN
5381 copy_hesa_details (
5382 p_person_id,
5383 p_course_cd,
5384 v_sca_rec.version_number,
5385 l_last_us.unit_set_cd,
5386 l_last_us.us_version_number,
5387 l_last_us.sequence_number ,
5388 c_next_us_rec.unit_set_cd,
5389 next_us_version,
5390 l_seqval
5391 );
5392 END IF;
5393
5394 ELSE
5395 CLOSE c_us_version_number ;
5396 CLOSE c_next_us ;
5397 CLOSE c_last_us ;
5398 RETURN TRUE;
5399 END IF; -- if next unit set version is found
5400 CLOSE c_us_version_number ;
5401 END IF; -- found next unit set in sequence
5402 CLOSE c_next_us ;
5403 CLOSE c_last_us ;
5404 RETURN TRUE;
5405 END IF; -- found the last active us attempt
5406 CLOSE c_last_us ;
5407 RETURN TRUE;
5408 END IF; -- IF NVL(P_PROGRESS_STAT,'ADVANCE') <> 'REPEATYR' THEN
5409 END IF;
5410 END IF; -- found an active unit set attempt
5411 CLOSE c_active_us ;
5412 END IF; -- profile set to year of program
5413
5414 -- 5. Pre-enrol student IGS_PS_UNIT attempts according to the
5415 -- pattern of study.
5416 -- * Attempt to determine required details from the
5417 -- admission application.
5418 IF v_sca_rec.adm_admission_appl_number IS NOT NULL THEN
5419 OPEN c_acaiv(
5420 v_sca_rec.adm_admission_appl_number,
5421 v_sca_rec.adm_nominated_course_cd,
5422 v_sca_rec.adm_sequence_number);
5423 FETCH c_acaiv INTO v_acaiv_rec;
5424 CLOSE c_acaiv;
5425 v_adm_cal_type := v_acaiv_rec.adm_cal_type;
5426 v_admission_cat := v_acaiv_rec.admission_cat;
5427 ELSE
5428 -- * No admissions details present.;
5429 -- The admissions fields are null if not available.
5430 v_adm_cal_type := NULL;
5431 v_admission_cat := NULL;
5432 END IF;
5433
5434 -- Pre-enrol UNIT attempts passed as parameters to the process.
5435 -- create parameter IGS_EN_SU_ATTEMPT
5436 enrpl_copy_param_sua(
5437 p_warn_level => v_warn_level,
5438 p_message_name => v_message_name,
5439 p_added_ind => v_parm_added_ind,
5440 p_enr_method => l_enr_method,
5441 p_lload_cal_type => l_load_cal_type,
5442 p_lload_ci_seq_num => l_load_seq_num );
5443
5444
5445 IF v_message_name is not null THEN
5446 IF p_warn_level IS NULL OR
5447 (p_warn_level = cst_minor AND
5448 v_warn_level IN (cst_major,
5449 cst_error)) OR
5450 (p_warn_level = cst_major AND
5451 v_warn_level = cst_error) THEN
5452 p_warn_level := v_warn_level;
5453 p_message_name := v_message_name;
5454 END IF;
5455 END IF;
5456
5457 IF v_parm_added_ind = 'N' THEN
5458 -- If pre enrolment of units is required then pre-enrol the units.
5459 IF ( p_units_ind = 'Y' OR p_units_ind = 'CORE_ONLY' ) THEN
5460
5461 v_boolean := IGS_EN_GEN_009.enrp_ins_pre_pos(p_acad_cal_type => p_acad_cal_type,
5462 p_acad_sequence_number => p_acad_sequence_number,
5463 p_person_id => p_person_id,
5464 p_course_cd => p_course_cd,
5465 p_version_number => v_sca_rec.version_number,
5466 p_location_cd => v_sca_rec.location_cd,
5467 p_attendance_mode => v_sca_rec.attendance_mode,
5468 p_attendance_type => v_sca_rec.attendance_type,
5469 p_unit_set_cd => v_unit_set_cd,
5470 p_adm_cal_type => v_adm_cal_type,
5471 p_admission_cat => v_admission_cat,
5472 p_log_creation_dt => v_log_creation_dt,
5473 p_units_indicator => p_units_ind,
5474 p_warn_level => v_warn_level,
5475 p_message_name => v_message_name,
5476 p_progress_stat => p_progress_stat,
5477 p_progress_outcome_type => gv_progress_outcome_type,
5478 p_enr_method => l_enr_method,
5479 p_load_cal_type => l_load_cal_type,
5480 p_load_ci_seq_num => l_load_seq_num);
5481 IF (v_message_name IS NOT NULL) AND ( NOT v_boolean )THEN
5482 p_warn_level := cst_major;
5483 p_message_name := v_message_name;
5484 ELSE
5485 p_warn_level := v_warn_level;
5486 p_message_name := v_message_name;
5487 END IF;
5488 IF (p_log_creation_dt IS NOT NULL) AND (v_message_name IS NOT NULL) THEN
5489 -- If the log creation date is set then log the HECS error
5490 -- This is if the pre-enrolment is being performed in batch.
5491 log_error_message(p_s_log_type => cst_pre_enrol,
5492 p_creation_dt => p_log_creation_dt,
5493 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
5494 p_sle_message_name => v_message_name,
5495 p_del => ';');
5496 END IF;
5497 --if the warn level is major then return false, since it implies that no units were enrolled.
5498 IF p_warn_level = cst_major THEN
5499 RETURN FALSE;
5500 END IF;
5501 END IF; -- call units ind
5502 END IF; -- param sua call
5503 -- the default return type
5504
5505 RETURN TRUE;
5506 EXCEPTION
5507 WHEN OTHERS THEN
5508 IF c_prev_enr_cat%ISOPEN THEN
5509 CLOSE c_prev_enr_cat;
5510 END IF;
5511 IF c_sca_details%ISOPEN THEN
5512 CLOSE c_sca_details;
5513 END IF;
5514 IF c_crv%ISOPEN THEN
5515 CLOSE c_crv;
5516 END IF;
5517 IF c_acaiv%ISOPEN THEN
5518 CLOSE c_acaiv;
5519 END IF;
5520 IF c_susa%ISOPEN THEN
5521 CLOSE c_susa;
5522 END IF;
5523 --getting the message of the stack to check if any exceptions realted to holds on a particular student were raised
5524 --these messages should be logged into the log table and shown to the user ; It should not cause the processing of the
5525 --entire process to stop.
5526 IF p_log_creation_dt IS NOT NULL THEN
5527 IGS_GE_MSG_STACK.GET(-1, 'T', l_enc_message_name, l_msg_index);
5528 FND_MESSAGE.PARSE_ENCODED(l_enc_message_name,l_app_short_name,l_message_name);
5529 p_warn_level := cst_error;
5530 --checking if it is not an unhandled exception since unhandled exceptions may not b ein realtion to a particular student
5531 -- and may cause the process to fail for every student.
5532 -- hence raise the exception if it is and unhandled exceptions
5533 --rollback to the beginning of the rpocedure to undo the changes made for teh student who is erroring out.
5534 ROLLBACK to igs_ret_preenrol_sp;
5535 IF l_message_name <> 'IGS_GE_UNHANDLED_EXP' THEN
5536 IF l_message_name IS NOT NULL THEN
5537 -- If the log creation date is set then log the HECS error
5538 -- This is if the pre-enrolment is being performed in batch.
5539 log_error_message(p_s_log_type => cst_pre_enrol,
5540 p_creation_dt => p_log_creation_dt,
5541 p_sle_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
5542 p_sle_message_name => l_message_name,
5543 p_del => ';');
5544 END IF;
5545 ELSE -- unhandled exception
5546 FND_MESSAGE.SET_NAME('IGS','IGS_GE_UNHANDLED_EXP');
5547 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_snew_prenrl');
5548 l_mesg_txt := fnd_message.get;
5549 igs_ge_gen_003.genp_ins_log_entry(p_s_log_type => cst_pre_enrol,
5550 p_creation_dt => p_log_creation_dt,
5551 p_key => p_warn_level||','||TO_CHAR(p_person_id)||','||p_course_cd,
5552 p_s_message_name => 'IGS_GE_UNHANDLED_EXP',
5553 p_text => l_mesg_txt);
5554 END IF;
5555 l_message_name := NULL;
5556 ELSE -- no log creation date
5557 RAISE;
5558 END IF;
5559
5560 END;
5561 EXCEPTION
5562 WHEN APP_EXCEPTION.APPLICATION_EXCEPTION THEN
5563 RAISE;
5564 WHEN OTHERS THEN
5565 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
5566 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_sret_prenrl');
5567 IGS_GE_MSG_STACK.ADD;
5568 App_Exception.Raise_Exception;
5569 END enrp_ins_sret_prenrl;
5570
5571 FUNCTION Enrp_Ins_Suao_Discon(
5572 p_person_id IN NUMBER ,
5573 p_course_cd IN VARCHAR2 ,
5574 p_unit_cd IN VARCHAR2 ,
5575 p_cal_type IN VARCHAR2 ,
5576 p_ci_sequence_number IN NUMBER ,
5577 p_ci_start_dt IN DATE ,
5578 p_ci_end_dt IN DATE ,
5579 p_discontinued_dt IN DATE ,
5580 p_administrative_unit_status IN VARCHAR2 ,
5581 p_message_name OUT NOCOPY VARCHAR2,
5582 p_uoo_id IN NUMBER)
5583 RETURN BOOLEAN AS
5584 -------------------------------------------------------------------------------------------
5585 --Change History:
5586 --Who When What
5587 --kkillams -04-2003 New parameters p_new_uoo_id and p_old_uoo_id to the function.
5588 -- w.r.t. bug number 2829262
5589 -------------------------------------------------------------------------------------------
5590 gv_grading_schema_cd IGS_AS_GRD_SCH_GRADE.grading_schema_cd%TYPE;
5591 gv_version_number IGS_AS_GRD_SCH_GRADE.version_number%TYPE;
5592 gv_admin_unit_status IGS_EN_SU_ATTEMPT.administrative_unit_status%TYPE;
5593 gv_grade IGS_AS_GRD_SCH_GRADE.grade%TYPE;
5594 gv_discontinued_dt IGS_EN_SU_ATTEMPT.discontinued_dt%TYPE;
5595 gv_message_name VARCHAR2(2000);
5596 gv_input BOOLEAN;
5597 l_exists NUMBER(1);
5598 BEGIN
5599 DECLARE
5600
5601 CURSOR c_suao_details
5602 (cp_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
5603 cp_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE,
5604 cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE,
5605 cp_discontinued_dt IGS_EN_SU_ATTEMPT.discontinued_dt%TYPE) IS
5606 SELECT 1
5607 FROM IGS_AS_SU_STMPTOUT
5608 WHERE person_id = cp_person_id AND
5609 course_cd = cp_course_cd AND
5610 uoo_id = cp_uoo_id AND
5611 outcome_dt = cp_discontinued_dt;
5612 BEGIN
5613 -- This module inserts a student IGS_PS_UNIT attempt
5614 -- outcome when student IGS_PS_UNIT attempt is
5615 -- discontinued.
5616 p_message_name := null;
5617 -- get the student IGS_PS_UNIT attempt grading schema
5618 IF (IGS_EN_VAL_SUA.enrp_get_sua_gs(p_discontinued_dt,
5619 p_administrative_unit_status,
5620 gv_grading_schema_cd,
5621 gv_version_number,
5622 p_message_name) = FALSE) THEN
5623 RETURN FALSE;
5624 END IF;
5625 -- get the administrative IGS_PS_UNIT status grading schema
5626 IF (IGS_EN_VAL_SUA.enrp_get_sua_ausg(p_administrative_unit_status,
5627 p_person_id,
5628 p_course_cd,
5629 p_unit_cd,
5630 p_cal_type,
5631 p_ci_sequence_number,
5632 p_discontinued_dt,
5633 gv_grading_schema_cd,
5634 gv_version_number,
5635 gv_grade,
5636 p_message_name,
5637 p_uoo_id) = FALSE) THEN
5638 RETURN FALSE;
5639 END IF;
5640 -- insert a student IGS_PS_UNIT attempt outcome record
5641 IF gv_grade IS NOT NULL THEN
5642 OPEN c_suao_details(p_person_id,
5643 p_course_cd,
5644 p_uoo_id,
5645 TRUNC(p_discontinued_dt));
5646 FETCH c_suao_details INTO l_exists;
5647 -- check if a record is found
5648 -- if it does, an outcome already exists
5649 IF (c_suao_details%FOUND) THEN
5650 p_message_name := 'IGS_EN_UNT_ATMP_ALREADY_EXIST';
5651 CLOSE c_suao_details;
5652 RETURN FALSE;
5653 ELSE -- a record is not found, therefore no outcome exists
5654 -- so insert the record
5655 CLOSE c_suao_details;
5656
5657 DECLARE
5658 l_rowid VARCHAR2(25);
5659 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
5660 BEGIN
5661 IGS_AS_SU_STMPTOUT_PKG.INSERT_ROW(
5662 x_rowid => l_rowid,
5663 x_person_id => p_person_id,
5664 x_course_cd => p_course_cd,
5665 x_unit_cd => p_unit_cd,
5666 x_cal_type => p_cal_type,
5667 x_ci_sequence_number => p_ci_sequence_number,
5668 x_ci_start_dt => p_ci_start_dt,
5669 x_ci_end_dt => p_ci_end_dt,
5670 x_outcome_dt => p_discontinued_dt,
5671 x_grading_schema_cd => gv_grading_schema_cd,
5672 x_version_number => gv_version_number ,
5673 x_grade => gv_grade,
5674 x_s_grade_creation_method_type => 'DISCONTIN',
5675 x_finalised_outcome_ind => 'Y',
5676 x_mark => NULL,
5677 X_number_times_keyed => NULL,
5678 X_translated_grading_schema_cd => NULL,
5679 X_translated_version_number => NULL,
5680 X_translated_grade => NULL,
5681 X_translated_dt => NULL,
5682 X_mode => 'R',
5683 x_org_id => l_org_id,
5684 X_attribute_category => NULL,
5685 X_attribute1 => NULL,
5686 X_attribute2 => NULL,
5687 X_attribute3 => NULL,
5688 X_attribute4 => NULL,
5689 X_attribute5 => NULL,
5690 X_attribute6 => NULL,
5691 X_attribute7 => NULL,
5692 X_attribute8 => NULL,
5693 X_attribute9 => NULL,
5694 X_attribute10 => NULL,
5695 X_attribute11 => NULL,
5696 X_attribute12 => NULL,
5697 X_attribute13 => NULL,
5698 X_attribute14 => NULL,
5699 X_attribute15 => NULL,
5700 X_attribute16 => NULL,
5701 X_attribute17 => NULL,
5702 X_attribute18 => NULL,
5703 X_attribute19 => NULL,
5704 X_attribute20 => NULL,
5705 x_uoo_id => p_uoo_id,
5706 x_mark_capped_flag => 'N',
5707 x_show_on_academic_histry_flag => 'Y',
5708 x_release_date => NULL,
5709 x_manual_override_flag => 'N',
5710 x_incomp_deadline_date => NULL,
5711 x_incomp_grading_schema_cd => NULL,
5712 x_incomp_version_number => NULL,
5713 x_incomp_default_grade => NULL,
5714 x_incomp_default_mark => NULL,
5715 x_comments => NULL,
5716 x_grading_period_cd => 'FINAL'
5717 );
5718 END;
5719
5720 END IF;
5721 END IF;
5722 RETURN TRUE;
5723 END;
5724 END enrp_ins_suao_discon;
5725
5726 PROCEDURE Enrp_Ins_Sua_Hist(
5727 p_person_id IN IGS_EN_SU_ATTEMPT_ALL.person_id%TYPE ,
5728 p_course_cd IN IGS_EN_SU_ATTEMPT_ALL.course_cd%TYPE ,
5729 p_unit_cd IN IGS_EN_SU_ATTEMPT_ALL.unit_cd%TYPE ,
5730 p_cal_type IN IGS_EN_SU_ATTEMPT_ALL.cal_type%TYPE ,
5731 p_ci_sequence_number IN IGS_EN_SU_ATTEMPT_ALL.ci_sequence_number%TYPE ,
5732 p_new_version_number IN IGS_EN_SU_ATTEMPT_ALL.version_number%TYPE ,
5733 p_old_version_number IN IGS_EN_SU_ATTEMPT_ALL.version_number%TYPE ,
5734 p_new_location_cd IN IGS_EN_SU_ATTEMPT_ALL.location_cd%TYPE ,
5735 p_old_location_cd IN IGS_EN_SU_ATTEMPT_ALL.location_cd%TYPE ,
5736 p_new_unit_class IN IGS_EN_SU_ATTEMPT_ALL.unit_class%TYPE ,
5737 p_old_unit_class IN IGS_EN_SU_ATTEMPT_ALL.unit_class%TYPE ,
5738 p_new_enrolled_dt IN IGS_EN_SU_ATTEMPT_ALL.enrolled_dt%TYPE ,
5739 p_old_enrolled_dt IN IGS_EN_SU_ATTEMPT_ALL.enrolled_dt%TYPE ,
5740 p_new_unit_attempt_status IN IGS_EN_SU_ATTEMPT_ALL.unit_attempt_status%TYPE ,
5741 p_old_unit_attempt_status IN IGS_EN_SU_ATTEMPT_ALL.unit_attempt_status%TYPE ,
5742 p_new_admin_unit_status IN IGS_EN_SU_ATTEMPT_ALL.administrative_unit_status%TYPE ,
5743 p_old_admin_unit_status IN IGS_EN_SU_ATTEMPT_ALL.administrative_unit_status%TYPE ,
5744 p_new_discontinued_dt IN IGS_EN_SU_ATTEMPT_ALL.discontinued_dt%TYPE ,
5745 p_old_discontinued_dt IN IGS_EN_SU_ATTEMPT_ALL.discontinued_dt%TYPE ,
5746 p_new_rule_waived_dt IN IGS_EN_SU_ATTEMPT_ALL.rule_waived_dt%TYPE ,
5747 p_old_rule_waived_dt IN IGS_EN_SU_ATTEMPT_ALL.rule_waived_dt%TYPE ,
5748 p_new_rule_waived_person_id IN IGS_EN_SU_ATTEMPT_ALL.rule_waived_person_id%TYPE ,
5749 p_old_rule_waived_person_id IN IGS_EN_SU_ATTEMPT_ALL.rule_waived_person_id%TYPE ,
5750 p_new_no_assessment_ind IN IGS_EN_SU_ATTEMPT_ALL.no_assessment_ind%TYPE ,
5751 p_old_no_assessment_ind IN IGS_EN_SU_ATTEMPT_ALL.no_assessment_ind%TYPE ,
5752 p_new_exam_location_cd IN IGS_EN_SU_ATTEMPT_ALL.exam_location_cd%TYPE ,
5753 p_old_exam_location_cd IN IGS_EN_SU_ATTEMPT_ALL.exam_location_cd%TYPE ,
5754 p_new_sup_unit_cd IN IGS_EN_SU_ATTEMPT_ALL.sup_unit_cd%TYPE ,
5755 p_old_sup_unit_cd IN IGS_EN_SU_ATTEMPT_ALL.sup_unit_cd%TYPE ,
5756 p_new_sup_version_number IN IGS_EN_SU_ATTEMPT_ALL.sup_version_number%TYPE ,
5757 p_old_sup_version_number IN IGS_EN_SU_ATTEMPT_ALL.sup_version_number%TYPE ,
5758 p_new_alternative_title IN IGS_EN_SU_ATTEMPT_ALL.alternative_title%TYPE ,
5759 p_old_alternative_title IN IGS_EN_SU_ATTEMPT_ALL.alternative_title%TYPE ,
5760 p_new_override_enrolled_cp IN IGS_EN_SU_ATTEMPT_ALL.override_enrolled_cp%TYPE ,
5761 p_old_override_enrolled_cp IN IGS_EN_SU_ATTEMPT_ALL.override_enrolled_cp%TYPE ,
5762 p_new_override_eftsu IN IGS_EN_SU_ATTEMPT_ALL.override_eftsu%TYPE ,
5763 p_old_override_eftsu IN IGS_EN_SU_ATTEMPT_ALL.override_eftsu%TYPE ,
5764 p_new_override_achievable_cp IN IGS_EN_SU_ATTEMPT_ALL.override_achievable_cp%TYPE ,
5765 p_old_override_achievable_cp IN IGS_EN_SU_ATTEMPT_ALL.override_achievable_cp%TYPE ,
5766 p_new_override_outcome_due_dt IN IGS_EN_SU_ATTEMPT_ALL.override_outcome_due_dt%TYPE ,
5767 p_old_override_outcome_due_dt IN IGS_EN_SU_ATTEMPT_ALL.override_outcome_due_dt%TYPE ,
5768 p_new_override_credit_reason IN IGS_EN_SU_ATTEMPT_ALL.override_credit_reason%TYPE ,
5769 p_old_override_credit_reason IN IGS_EN_SU_ATTEMPT_ALL.override_credit_reason%TYPE ,
5770 p_new_update_who IN IGS_EN_SU_ATTEMPT_ALL.last_updated_by%TYPE ,
5771 p_old_update_who IN IGS_EN_SU_ATTEMPT_ALL.last_updated_by%TYPE ,
5772 p_new_update_on IN IGS_EN_SU_ATTEMPT_ALL.last_update_date%TYPE ,
5773 p_old_update_on IN IGS_EN_SU_ATTEMPT_ALL.last_update_date%TYPE ,
5774 p_new_dcnt_reason_Cd IN IGS_EN_SU_ATTEMPT_ALL.dcnt_reason_cd%TYPE,
5775 p_old_dcnt_reason_Cd IN IGS_EN_SU_ATTEMPT_ALL.dcnt_reason_cd%TYPE,
5776 p_uoo_id IN IGS_EN_SU_ATTEMPT_ALL.uoo_id%TYPE,
5777 p_new_core_indicator_code IN IGS_EN_SU_ATTEMPT_ALL.core_indicator_code%TYPE, -- ptandon, Prevent Dropping Core Units build
5778 p_old_core_indicator_code IN IGS_EN_SU_ATTEMPT_ALL.core_indicator_code%TYPE -- ptandon, Prevent Dropping Core Units build
5779 )
5780 AS
5781 -------------------------------------------------------------------------------------------
5782 --Change History:
5783 --Who When What
5784 --kkillams -04-2003 New parameters p_new_uoo_id and p_old_uoo_id to the function.
5785 -- w.r.t. bug number 2829262
5786 --ptandon 06-Oct-2003 New parameters p_new_core_indicator_code and p_old_core_indicator_code
5787 -- added to the function as part of Prevent Dropping Core Units.
5788 -- Enh Bug# 3052432.
5789 -------------------------------------------------------------------------------------------
5790 gv_other_detail VARCHAR2(255);
5791 BEGIN
5792 DECLARE
5793 r_suah IGS_EN_SU_ATTEMPT_H%ROWTYPE;
5794 v_create_history BOOLEAN := FALSE;
5795 v_aus_description IGS_AD_ADM_UNIT_STAT.description%TYPE;
5796 v_elo_description IGS_AD_LOCATION.description%TYPE;
5797
5798 CURSOR c_find_aus_desc IS
5799 SELECT description
5800 FROM IGS_AD_ADM_UNIT_STAT
5801 WHERE administrative_unit_status = r_suah.administrative_unit_status;
5802 CURSOR c_find_elo_desc IS
5803 SELECT description
5804 FROM IGS_AD_LOCATION
5805 WHERE location_cd = r_suah.exam_location_cd;
5806 BEGIN
5807 -- Create a history for a IGS_EN_SU_ATTEMPT record.
5808 -- Check if any of the non-primary key fields have been changed
5809 -- and set the flag v_create_history to indicate so.
5810 IF p_new_version_number <> p_old_version_number THEN
5811 r_suah.version_number := p_old_version_number;
5812 v_create_history := TRUE;
5813 END IF;
5814 IF p_new_location_cd <> p_old_location_cd THEN
5815 r_suah.location_cd := p_old_location_cd;
5816 v_create_history := TRUE;
5817 END IF;
5818 IF p_new_unit_class <> p_old_unit_class THEN
5819 r_suah.unit_class := p_old_unit_class;
5820 v_create_history := TRUE;
5821 END IF;
5822 IF NVL(TRUNC(p_new_enrolled_dt), igs_ge_date.igsdate('1900/01/01')) <>
5823 NVL(TRUNC(p_old_enrolled_dt), igs_ge_date.igsdate('1900/01/01')) THEN
5824 r_suah.enrolled_dt := TRUNC(p_old_enrolled_dt);
5825 v_create_history := TRUE;
5826 END IF;
5827 IF p_new_unit_attempt_status <> p_old_unit_attempt_status THEN
5828 r_suah.unit_attempt_status := p_old_unit_attempt_status;
5829 v_create_history := TRUE;
5830 END IF;
5831 IF NVL(p_new_admin_unit_status, 'NULL') <>
5832 NVL(p_old_admin_unit_status, 'NULL') THEN
5833 r_suah.administrative_unit_status := p_old_admin_unit_status;
5834 IF NVL(p_old_admin_unit_status, 'NULL') <> 'NULL' THEN
5835 -- get the administrative IGS_PS_UNIT status description
5836 OPEN c_find_aus_desc;
5837 FETCH c_find_aus_desc INTO r_suah.aus_description;
5838 CLOSE c_find_aus_desc;
5839 END IF;
5840 v_create_history := TRUE;
5841 END IF;
5842 IF NVL(TRUNC(p_new_discontinued_dt), igs_ge_date.igsdate('1900/01/01')) <>
5843 NVL(TRUNC(p_old_discontinued_dt), igs_ge_date.igsdate('1900/01/01')) THEN
5844 r_suah.discontinued_dt := TRUNC(p_old_discontinued_dt);
5845 v_create_history := TRUE;
5846 END IF;
5847 IF NVL(p_new_rule_waived_dt, igs_ge_date.igsdate('1900/01/01')) <>
5848 NVL(p_old_rule_waived_dt, igs_ge_date.igsdate('1900/01/01')) THEN
5849 r_suah.rule_waived_dt := p_old_rule_waived_dt;
5850 v_create_history := TRUE;
5851 END IF;
5852 IF NVL(p_new_rule_waived_person_id, 0) <>
5853 NVL(p_old_rule_waived_person_id, 0) THEN
5854 r_suah.rule_waived_person_id := p_old_rule_waived_person_id;
5855 v_create_history := TRUE;
5856 END IF;
5857 IF NVL(p_new_no_assessment_ind, 'NULL') <>
5858 NVL(p_old_no_assessment_ind, 'NULL') THEN
5859 r_suah.no_assessment_ind := p_old_no_assessment_ind;
5860 v_create_history := TRUE;
5861 END IF;
5862 IF NVL(p_new_exam_location_cd, 'NULL') <>
5863 NVL(p_old_exam_location_cd, 'NULL') THEN
5864 r_suah.exam_location_cd := p_old_exam_location_cd;
5865 IF NVL(p_old_exam_location_cd, 'NULL') <> 'NULL' THEN
5866 -- get the exam IGS_AD_LOCATION description
5867 OPEN c_find_elo_desc;
5868 FETCH c_find_elo_desc INTO r_suah.elo_description;
5869 CLOSE c_find_elo_desc;
5870 END IF;
5871 v_create_history := TRUE;
5872 END IF;
5873 IF NVL(p_new_sup_unit_cd, 'NULL') <> NVL(p_old_sup_unit_cd, 'NULL') THEN
5874 r_suah.sup_unit_cd := p_old_sup_unit_cd;
5875 v_create_history := TRUE;
5876 END IF;
5877 IF NVL(p_new_sup_version_number, 0) <> NVL(p_old_sup_version_number, 0) THEN
5878 r_suah.sup_version_number := p_old_sup_version_number;
5879 v_create_history := TRUE;
5880 END IF;
5881 IF NVL(p_new_alternative_title, 'NULL') <>
5882 NVL(p_old_alternative_title, 'NULL') THEN
5883 r_suah.alternative_title := p_old_alternative_title;
5884 v_create_history := TRUE;
5885 END IF;
5886 IF NVL(p_new_override_enrolled_cp, 0) <>
5887 NVL(p_old_override_enrolled_cp, 0) THEN
5888 r_suah.override_enrolled_cp := p_old_override_enrolled_cp;
5889 v_create_history := TRUE;
5890 END IF;
5891 IF NVL(p_new_override_eftsu, 0) <> NVL(p_old_override_eftsu, 0) THEN
5892 r_suah.override_eftsu := p_old_override_eftsu;
5893 v_create_history := TRUE;
5894 END IF;
5895 IF NVL(p_new_override_achievable_cp, 0) <>
5896 NVL(p_old_override_achievable_cp, 0) THEN
5897 r_suah.override_achievable_cp := p_old_override_achievable_cp;
5898 v_create_history := TRUE;
5899 END IF;
5900 IF NVL(p_new_override_outcome_due_dt,
5901 igs_ge_date.igsdate('1900/01/01')) <>
5902 NVL(p_old_override_outcome_due_dt,
5903 igs_ge_date.igsdate('1900/01/01')) THEN
5904 r_suah.override_outcome_due_dt := p_old_override_outcome_due_dt;
5905 v_create_history := TRUE;
5906 END IF;
5907 IF NVL(p_new_override_credit_reason, 'NULL') <>
5908 NVL(p_old_override_credit_reason, 'NULL') THEN
5909 r_suah.override_credit_reason := p_old_override_credit_reason;
5910 v_create_history := TRUE;
5911 END IF;
5912 IF NVL(p_new_dcnt_reason_Cd, 'NULL') <>
5913 NVL(p_old_dcnt_reason_Cd, 'NULL') THEN
5914 r_suah.dcnt_reason_Cd := p_old_dcnt_reason_Cd;
5915 v_create_history := TRUE;
5916 END IF;
5917 -- ptandon, Prevent Dropping Core Units build
5918 IF NVL(p_new_core_indicator_code, 'NULL') <>
5919 NVL(p_old_core_indicator_code, 'NULL') THEN
5920 r_suah.core_indicator_code := p_old_core_indicator_code;
5921 v_create_history := TRUE;
5922 END IF;
5923
5924 -- Create a history record if a column has changed value
5925 IF v_create_history = TRUE THEN
5926 r_suah.person_id := p_person_id;
5927 r_suah.course_cd := p_course_cd;
5928 r_suah.unit_cd := p_unit_cd;
5929 r_suah.cal_type := p_cal_type;
5930 r_suah.ci_sequence_number := p_ci_sequence_number;
5931 r_suah.hist_start_dt := p_old_update_on;
5932 r_suah.hist_end_dt := p_new_update_on;
5933 r_suah.hist_who := p_old_update_who;
5934 r_suah.uoo_id := p_uoo_id;
5935 -- remove one second from the hist_start_dt value
5936 -- when the hist_start_dt and hist_end_dt are the same
5937 -- to avoid a primary key constraint from occurring
5938 -- when saving the record
5939 IF (r_suah.hist_start_dt = r_suah.hist_end_dt) THEN
5940 r_suah.hist_start_dt := r_suah.hist_start_dt - 1 /
5941 (60*24*60);
5942 END IF;
5943
5944 DECLARE
5945 l_rowid VARCHAR2(25);
5946 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
5947 BEGIN
5948
5949 IGS_EN_SU_ATTEMPT_H_PKG.INSERT_ROW (
5950 x_rowid => l_rowid,
5951 x_person_id =>r_suah.person_id ,
5952 x_course_cd => r_suah.course_cd,
5953 x_unit_cd => r_suah.unit_cd,
5954 x_version_number => r_suah.version_number,
5955 x_cal_type => r_suah.cal_type,
5956 x_ci_sequence_number => r_suah.ci_sequence_number,
5957 x_hist_start_dt => r_suah.hist_start_dt,
5958 x_hist_end_dt => r_suah.hist_end_dt,
5959 x_hist_who => r_suah.hist_who,
5960 x_location_cd => r_suah.location_cd,
5961 x_unit_class => r_suah.unit_class,
5962 x_enrolled_dt => r_suah.enrolled_dt,
5963 x_unit_attempt_status => r_suah.unit_attempt_status,
5964 x_administrative_unit_status => r_suah.administrative_unit_status,
5965 x_aus_description => r_suah.aus_description,
5966 x_discontinued_dt => r_suah.discontinued_dt,
5967 x_rule_waived_dt => r_suah.rule_waived_dt ,
5968 x_rule_waived_person_id => r_suah.rule_waived_person_id ,
5969 x_no_assessment_ind => r_suah.no_assessment_ind,
5970 x_exam_location_cd => r_suah.exam_location_cd,
5971 x_elo_description => r_suah.elo_description,
5972 x_sup_unit_cd => r_suah.sup_unit_cd,
5973 x_sup_version_number => r_suah.sup_version_number,
5974 x_alternative_title => r_suah.alternative_title,
5975 x_override_enrolled_cp => r_suah.override_enrolled_cp,
5976 x_override_eftsu => r_suah.override_eftsu,
5977 x_override_achievable_cp => r_suah.override_achievable_cp,
5978 x_override_outcome_due_dt => r_suah.override_outcome_due_dt,
5979 x_override_credit_reason => r_suah.override_credit_reason,
5980 x_dcnt_reason_Cd => r_suah.dcnt_reason_cd,
5981 x_uoo_id => r_suah.uoo_id,
5982 x_org_id => l_org_id, --, -- x_deg_aud_detail_id =>r_suah.deg_aud_detail_id
5983 x_core_indicator_code => r_suah.core_indicator_code -- ptandon, Prevent Dropping Core Units build
5984 );
5985
5986 END;
5987 END IF;
5988 END;
5989 /*EXCEPTION
5990 WHEN OTHERS THEN
5991 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
5992 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_sua_hist');
5993 IGS_GE_MSG_STACK.ADD;
5994 App_Exception.Raise_Exception;*/
5995 END enrp_ins_sua_hist;
5996
5997
5998 FUNCTION unit_effect_or_future_term( p_person_id igs_en_stdnt_ps_att_all.person_id%TYPE,
5999 p_dest_course_cd igs_en_stdnt_ps_att_all.course_cd%TYPE,
6000 p_uoo_id igs_en_su_attempt_all.uoo_id%TYPE,
6001 p_term_cal_type igs_ca_inst_all.cal_type%TYPE,
6002 p_term_seq_num igs_ca_inst_all.sequence_number%TYPE)
6003
6004 RETURN BOOLEAN AS
6005 -------------------------------------------------------------------------------------------
6006 --Change History:
6007 --Who When What
6008 -- smaddali 21-dec-04 created new function unit_effect_or_future_term for bug#4083358
6009 -------------------------------------------------------------------------------------------
6010
6011 CURSOR c_sca_dtls IS
6012 SELECT cal_type
6013 FROM igs_en_stdnt_ps_att
6014 WHERE person_id = p_person_id AND
6015 course_cd = p_dest_course_cd ;
6016 -- Cursor to get the term calendar start date for a given term calendar instance.
6017 CURSOR c_get_term_start_dt(cp_term_cal_type igs_ca_inst.cal_type%TYPE,
6018 cp_term_ci_seq_num igs_ca_inst.sequence_number%TYPE)
6019 IS
6020 SELECT start_dt
6021 FROM igs_ca_inst
6022 WHERE cal_type = cp_term_cal_type
6023 AND sequence_number = cp_term_ci_seq_num;
6024
6025 -- Cursor to get the Term Calendar of the Unit.
6026 CURSOR c_get_term_cal(cp_uoo_id IGS_PS_UNIT_OFR_OPT.uoo_id%TYPE,
6027 cp_load_cal_type igs_ca_inst.cal_type%TYPE,
6028 cp_load_ci_seq_num igs_ca_inst.sequence_number%TYPE)
6029 IS
6030 SELECT 'X'
6031 FROM igs_ps_unit_ofr_opt uoo,
6032 igs_ca_teach_to_load_v tl
6033 WHERE tl.teach_cal_type = uoo.cal_type
6034 AND tl.teach_ci_sequence_number = uoo.ci_sequence_number
6035 AND tl.load_cal_type = cp_load_cal_type
6036 AND tl.load_ci_sequence_number = cp_load_ci_seq_num
6037 AND uoo.uoo_id = cp_uoo_id;
6038
6039 -- Cursor to get term calendars closest to the current term calendar and having
6040 -- a start date greater than the current term calendar.
6041 CURSOR cur_get_term_next(cp_acad_cal_type igs_ca_inst.cal_type%TYPE,
6042 cp_curr_term_start_dt igs_ca_inst.start_dt%TYPE)
6043 IS
6044 SELECT cir.sub_cal_type term_cal_type,
6045 cir.sub_ci_sequence_number term_sequence_number
6046 FROM igs_ca_inst_rel cir,
6047 igs_ca_inst ci,
6048 igs_ca_type ct,
6049 igs_ca_stat cs
6050 WHERE cir.sup_cal_type = cp_acad_cal_type
6051 AND ct.cal_type = cir.sub_cal_type
6052 AND ct.s_cal_cat = 'LOAD'
6053 AND ci.cal_type = cir.sub_cal_type
6054 AND ci.sequence_number = cir.sub_ci_sequence_number
6055 AND cs.cal_status = ci.cal_status
6056 AND cs.s_cal_status = 'ACTIVE'
6057 AND ci.start_dt > cp_curr_term_start_dt
6058 ORDER BY ci.start_dt ASC;
6059
6060 l_acad_cal_type igs_en_stdnt_ps_att.cal_type%TYPE;
6061 l_effect_or_future_term BOOLEAN;
6062 l_load_ci_start_dt igs_ca_inst.start_dt%TYPE;
6063 l_dummy VARCHAR2(1);
6064
6065 BEGIN
6066
6067 l_effect_or_future_term := FALSE;
6068
6069 -- Get the effective term start date.
6070 OPEN c_get_term_start_dt(p_term_cal_type,p_term_seq_num);
6071 FETCH c_get_term_start_dt INTO l_load_ci_start_dt;
6072 CLOSE c_get_term_start_dt;
6073
6074 -- Check whether the Effective term is related to the term with which
6075 -- the Unit Section is associated.
6076 OPEN c_get_term_cal(p_uoo_id,p_term_cal_type,p_term_seq_num);
6077 FETCH c_get_term_cal INTO l_dummy;
6078 -- If the unit belongs to the effective term, set l_effect_or_future_term flag to TRUE.
6079 IF c_get_term_cal%FOUND THEN
6080 l_effect_or_future_term := TRUE;
6081 END IF;
6082 CLOSE c_get_term_cal;
6083
6084 -- If the unit doesn't belong to the effective term, check whether it belongs to any future term.
6085 IF l_effect_or_future_term = FALSE THEN
6086 -- get the academic calendar of the destination program
6087 OPEN c_sca_dtls;
6088 FETCH c_sca_dtls INTO l_acad_cal_type;
6089 CLOSE c_sca_dtls;
6090 -- Loop through the future terms belonging to this acadmic calendar.
6091 FOR get_term_next_rec IN cur_get_term_next(l_acad_cal_type,l_load_ci_start_dt)
6092 LOOP
6093
6094 -- Check whether any of the future terms is related to the term with which
6095 -- the Unit Section is associated.
6096 OPEN c_get_term_cal(p_uoo_id,get_term_next_rec.term_cal_type,
6097 get_term_next_rec.term_sequence_number);
6098 FETCH c_get_term_cal INTO l_dummy;
6099 -- If the unit belongs any future term, set l_effect_or_future_term flag to TRUE.
6100 IF c_get_term_cal%FOUND THEN
6101 l_effect_or_future_term := TRUE;
6102 END IF;
6103 CLOSE c_get_term_cal;
6104
6105 END LOOP;
6106
6107 END IF;
6108
6109 RETURN l_effect_or_future_term ;
6110
6111 END unit_effect_or_future_term;
6112
6113 PROCEDURE enrp_ins_sua_ref_trnsfr (
6114 p_person_id IN NUMBER,
6115 p_source_course_cd IN VARCHAR2,
6116 p_dest_course_cd IN VARCHAR2,
6117 p_uoo_id IN NUMBER)
6118 IS
6119
6120 Cursor c_source_ref_cd (cp_person_id NUMBER,
6121 cp_source_course_cd VARCHAR2,
6122 cp_uoo_id NUMBER,
6123 cp_dest_course_cd VARCHAR2) IS
6124 Select src_ref.rowid, src_ref.*
6125 From IGS_AS_SUA_REF_CDS src_ref
6126 Where person_id = cp_person_id
6127 And course_cd = cp_source_course_cd
6128 And uoo_id = cp_uoo_id
6129 And deleted_date is null
6130 And not exists ( Select 'x'
6131 From IGS_AS_SUA_REF_CDS dest_ref
6132 WHERE dest_ref.person_id = src_ref.person_id
6133 And dest_ref.course_cd = cp_dest_course_cd
6134 And dest_ref.uoo_id = src_ref.uoo_id
6135 And dest_ref.deleted_date is null
6136 And dest_ref. REFERENCE_CODE_ID = src_ref. REFERENCE_CODE_ID
6137 And dest_ref. APPLIED_COURSE_CD = src_ref. APPLIED_COURSE_CD
6138 );
6139
6140 l_rowid VARCHAR2(25);
6141 l_suarid igs_as_sua_ref_cds.suar_id%TYPE;
6142 BEGIN
6143
6144 FOR vc_source_ref_cd IN c_source_ref_cd(p_person_id,
6145 p_source_course_cd,
6146 p_uoo_id,
6147 p_dest_course_cd) LOOP
6148
6149 igs_as_sua_ref_cds_pkg.insert_row (
6150 x_rowid => l_rowid,
6151 x_suar_id => l_suarid,
6152 x_person_id => vc_source_ref_cd.person_id,
6153 x_course_cd => p_dest_course_cd,
6154 x_uoo_id => vc_source_ref_cd.uoo_id,
6155 x_reference_code_id => vc_source_ref_cd.reference_code_id,
6156 x_reference_cd_type => vc_source_ref_cd.reference_cd_type,
6157 x_reference_cd => vc_source_ref_cd.reference_cd,
6158 x_applied_course_cd => vc_source_ref_cd.applied_course_cd,
6159 x_deleted_date => vc_source_ref_cd.deleted_date,
6160 x_mode => 'R' );
6161
6162 END LOOP;
6163
6164 END enrp_ins_sua_ref_trnsfr;
6165
6166
6167 FUNCTION Enrp_Ins_Sua_Trnsfr(
6168 p_person_id IN NUMBER ,
6169 p_course_cd IN VARCHAR2 , -- source program
6170 p_transfer_course_cd IN VARCHAR2 , -- destination program
6171 p_coo_id IN NUMBER ,
6172 p_unit_cd IN VARCHAR2 ,
6173 p_version_number IN NUMBER ,
6174 p_cal_type IN VARCHAR2 ,
6175 p_ci_sequence_number IN NUMBER ,
6176 p_return_type OUT NOCOPY VARCHAR2 ,
6177 p_message_name OUT NOCOPY VARCHAR2,
6178 p_uoo_id IN NUMBER,
6179 p_core_ind IN VARCHAR2,
6180 p_term_cal_type IN VARCHAR2,
6181 p_term_seq_num IN NUMBER)
6182 /*
6183 || Created By : pkpatel
6184 || Created On : 27-SEP-2002
6185 || Purpose :
6186 || Known limitations, enhancements or remarks :
6187 || Change History :
6188 || Who When What
6189 || kkillams 21-03-2003 Modified validation, to allow the unit transfer w.r.t bug 2863707
6190 || kkillams 25-04-2003 New parameter p_uoo_id is added w.r.t bug 2829262
6191 || ptandon 29-12-2003 Removed the Exception Handling section so that the correct
6192 || error message is displayed. Bug# 3328268.
6193 || ckasu 08-DEC-2004 modfied message name inorder to show invalid unit attempts can't
6194 || be transferred across careers message as a part of bug#4048203
6195 || ckasu 21-Dec-2004 modified procedure inorder to Transfer Unit outcomes in ABA Transfer
6196 || as a part of bug# 4080883
6197 || smaddali 21-dec-04 Modified for bug#4083358 , to change logic for transfering unit attempts across terms
6198 || amuthu 18-May-2006 Removed the call to igs_en_val_sua.enrp_val_sua_cnfrm and replaced it with a local
6199 || procedure enrp_val_sua_cnfrm_before_pt. This is remove the holds validation.
6200 || the same has been added to IGS_EN_TRANSFER_APIS.enrp_val_excld_unit_pt
6201 */
6202 RETURN BOOLEAN AS
6203
6204 BEGIN -- enrp_ins_sua_trnsfr
6205 -- Transfer a IGS_EN_SU_ATTEMPT record as part of a IGS_PS_COURSE transfer.
6206 DECLARE
6207 cst_completed CONSTANT VARCHAR2(10) := 'COMPLETED';
6208 cst_discontin CONSTANT VARCHAR2(10) := 'DISCONTIN';
6209 cst_duplicate CONSTANT VARCHAR2(10) := 'DUPLICATE';
6210 cst_enrolled CONSTANT VARCHAR2(10) := 'ENROLLED';
6211 cst_unconfirm CONSTANT VARCHAR2(10) := 'UNCONFIRM';
6212 cst_dropped CONSTANT VARCHAR2(10) := 'DROPPED';
6213 cst_waitlist CONSTANT VARCHAR2(10) := 'WAITLISTED';
6214 cst_invalid CONSTANT VARCHAR2(10) := 'INVALID';
6215 -- These variables are declared as part Career Impact Part 2 DLD . Bug # 2158626
6216 v_source_course_type IGS_PS_VER.course_type%TYPE;
6217 v_destn_course_type IGS_PS_VER.course_type%TYPE;
6218
6219 e_record_locked EXCEPTION;
6220 PRAGMA EXCEPTION_INIT(e_record_locked, -54);
6221 v_message_name VARCHAR2(2000);
6222 v_fail_type VARCHAR2(10) ;
6223 v_status IGS_EN_SU_ATTEMPT.unit_attempt_status%TYPE;
6224 v_record_exists BOOLEAN := FALSE;
6225 CURSOR c_sua IS
6226 SELECT sua.person_id,
6227 sua.course_cd,
6228 sua.unit_cd,
6229 sua.version_number,
6230 sua.cal_type,
6231 sua.ci_sequence_number,
6232 sua.location_cd,
6233 sua.unit_class,
6234 sua.ci_start_dt,
6235 sua.ci_end_dt,
6236 sua.uoo_id,
6237 sua.enrolled_dt,
6238 sua.unit_attempt_status,
6239 sua.administrative_unit_status,
6240 sua.discontinued_dt,
6241 sua.waitlist_dt,
6242 sua.rule_waived_dt,
6243 sua.rule_waived_person_id,
6244 sua.no_assessment_ind,
6245 sua.sup_unit_cd,
6246 sua.sup_version_number,
6247 sua.exam_location_cd,
6248 sua.alternative_title,
6249 sua.override_enrolled_cp,
6250 sua.override_eftsu,
6251 sua.override_achievable_cp,
6252 sua.override_outcome_due_dt,
6253 sua.override_credit_reason,
6254 sua.org_unit_cd,
6255 sua.grading_schema_code,
6256 sua.gs_version_number,
6257 sua.deg_aud_detail_id,
6258 sua.student_career_transcript,
6259 sua.student_career_statistics,
6260 sua.administrative_priority,
6261 sua.dcnt_reason_cd,
6262 sua.session_id,
6263 sua.attribute_category,
6264 sua.attribute1,
6265 sua.attribute2,
6266 sua.attribute3,
6267 sua.attribute4,
6268 sua.attribute5,
6269 sua.attribute6,
6270 sua.attribute7,
6271 sua.attribute8,
6272 sua.attribute9,
6273 sua.attribute10,
6274 sua.attribute11,
6275 sua.attribute12,
6276 sua.attribute13,
6277 sua.attribute14,
6278 sua.attribute15,
6279 sua.attribute16,
6280 sua.attribute17,
6281 sua.attribute18,
6282 sua.attribute19,
6283 sua.attribute20,
6284 sua.waitlist_manual_ind,
6285 sua.wlst_priority_weight_num,
6286 sua.wlst_preference_weight_num,
6287 sua.core_indicator_code
6288 FROM IGS_EN_SU_ATTEMPT sua
6289 WHERE sua.person_id = p_person_id AND
6290 sua.course_cd = p_course_cd AND
6291 sua.uoo_id = p_uoo_id;
6292 v_sua_rec c_sua%ROWTYPE;
6293
6294 CURSOR c_sua_delete IS
6295 SELECT sua.rowid rowid1,
6296 sua.unit_attempt_status unit_attempt_status
6297 FROM IGS_EN_SU_ATTEMPT sua
6298 WHERE sua.person_id = p_person_id AND
6299 sua.course_cd = p_transfer_course_cd AND
6300 sua.uoo_id = p_uoo_id
6301 FOR UPDATE OF sua.unit_attempt_status NOWAIT;
6302
6303 CURSOR c_sua_career ( p_person_id IN igs_en_stdnt_ps_att.person_id%TYPE , p_course_cd IN igs_en_stdnt_ps_att.course_cd%TYPE ) IS
6304 SELECT ver.course_type
6305 FROM IGS_PS_VER ver ,
6306 igs_en_stdnt_ps_att spa
6307 WHERE ver.course_cd = p_course_cd AND
6308 ver.version_number = spa.version_number AND
6309 spa.course_cd = p_course_cd AND
6310 spa.person_id = p_person_id;
6311
6312
6313 l_unit_from_past_term BOOLEAN;
6314 l_sup_alread_transfered BOOLEAN;
6315
6316 BEGIN
6317 p_message_name := null;
6318 -- Check parameters.
6319 IF p_person_id IS NULL OR p_course_cd IS NULL OR
6320 p_transfer_course_cd IS NULL OR p_coo_id IS NULL OR
6321 p_unit_cd IS NULL OR p_version_number IS NULL OR
6322 p_cal_type IS NULL OR p_ci_sequence_number IS NULL OR
6323 p_uoo_id IS NULL THEN
6324 p_return_type := NULL;
6325 p_message_name := null;
6326 RETURN TRUE;
6327 END IF;
6328 -- Get the details of the IGS_EN_SU_ATTEMPT record which is to be
6329 -- transferred.
6330 OPEN c_sua;
6331 FETCH c_sua INTO v_sua_rec;
6332 IF (c_sua%NOTFOUND) THEN
6333 CLOSE c_sua;
6334 p_return_type := NULL;
6335 p_message_name := null;
6336 RETURN TRUE;
6337 END IF;
6338 CLOSE c_sua;
6339
6340 -- check if the superior unit attempt exists
6341 l_sup_alread_transfered := TRUE;
6342 IF v_sua_rec.sup_unit_cd IS NOT NULL THEN
6343 IF NOT enrf_sup_sua_exists(
6344 p_person_id,
6345 p_transfer_course_cd,
6346 p_uoo_id) THEN
6347 p_return_type := NULL;
6348 p_message_name := 'IGS_EN_INVALID_SUP';
6349 RETURN FALSE;
6350 END IF;
6351 END IF;
6352
6353 -- get the source and destination careers
6354 OPEN c_sua_career(p_person_id , p_course_cd);
6355 FETCH c_sua_career INTO v_source_course_type;
6356 CLOSE c_sua_career;
6357 OPEN c_sua_career(p_person_id , p_transfer_course_cd);
6358 FETCH c_sua_career INTO v_destn_course_type;
6359 CLOSE c_sua_career;
6360 -- if career not setup then throw error
6361 IF v_source_course_type IS NULL OR v_destn_course_type IS NULL THEN
6362 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
6363 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_sua_trnsfr');
6364 IGS_GE_MSG_STACK.ADD;
6365 App_Exception.Raise_Exception;
6366 END IF;
6367
6368 -- set the unit attempt status for the destination
6369 IF v_sua_rec.unit_attempt_status = cst_enrolled THEN
6370 v_status := cst_enrolled;
6371 ELSIF v_sua_rec.unit_attempt_status = cst_unconfirm THEN
6372 -- only records in ENROLLED, COMPLETED, DISCONTINUED,
6373 -- DUPLICATE, WAITLISTED and INVALID statuses can be transferred.
6374 p_return_type := NULL;
6375 p_message_name := 'IGS_EN_SUA_ENR_COMPL_DISCN_DU';
6376 RETURN FALSE;
6377 ELSIF V_sua_rec.unit_attempt_status = cst_invalid THEN
6378 -- if the transfer is across career then do not allow the invalid unit to be transfered.
6379 IF v_source_course_type <> v_destn_course_type THEN
6380 p_return_type := NULL;
6381 p_message_name := 'IGS_EN_INV_SUA_TRAN';
6382 RETURN FALSE;
6383 END IF;
6384 END IF;
6385
6386 -- Perform validations on the IGS_EN_SU_ATTEMPT record to be created.
6387 IF v_status = cst_enrolled THEN -- perform confirmation validations
6388 IF enrp_val_sua_cnfrm_before_pt(p_person_id,
6389 p_transfer_course_cd,
6390 p_unit_cd,
6391 p_version_number,
6392 p_cal_type,
6393 p_ci_sequence_number,
6394 v_sua_rec.ci_end_dt,
6395 v_sua_rec.location_cd,
6396 v_sua_rec.unit_class,
6397 v_sua_rec.enrolled_dt,
6398 v_fail_type,
6399 v_message_name) = FALSE THEN
6400 p_return_type := v_fail_type;
6401 p_message_name := v_message_name;
6402 RETURN FALSE;
6403 END IF;
6404 END IF;
6405
6406 -- Check that the record to be inserted does not already exist
6407 -- (primary key violation).
6408 FOR v_uas IN c_sua_delete LOOP
6409 -- If unit_attempt_status = 'UNCONFIRM' then delete the record
6410 -- added dropped in the IF condition, to delete dropped unit records also, bug #2394594 by kkillams
6411
6412 -- removed cst_dropped and added ELSIF by ckasu as a part of bug #4080883 inorder to allow update of
6413 -- unit attempt rather than deleting of unit attempt when unit attempt status is 'DROPPED'
6414 IF v_uas.unit_attempt_status IN (cst_unconfirm) THEN
6415 IGS_EN_SU_ATTEMPT_PKG.DELETE_ROW( v_uas.rowid1 );
6416 ELSIF v_uas.unit_attempt_status <> cst_dropped THEN
6417 v_record_exists := TRUE;
6418 EXIT;
6419 END IF;
6420 END LOOP;
6421 -- Student IGS_PS_UNIT attempt already exists.
6422 IF v_record_exists = TRUE THEN
6423 p_return_type := NULL;
6424 p_message_name := 'IGS_EN_TRNS_SUA_EXISTS';
6425 RETURN FALSE;
6426 END IF;
6427
6428 -- While transferring the Units check whether destination program is with in the same Career of the source program,
6429 -- If destination Program is of Different Career then assign NULL to the columns "STUDENT_CAREER_STATISTICS" and
6430 -- "STUDENT_CAREER_TRANSCRIPT" in the Unit Attempt Transferring into the destination Program.Bug # 2158626.
6431
6432
6433 IF v_source_course_type <> v_destn_course_type THEN
6434 v_sua_rec.student_career_transcript := NULL;
6435 v_sua_rec.student_career_statistics := NULL;
6436 END IF;
6437 --chceck for the waitlist priority/preference
6438 IF v_sua_rec.unit_attempt_status = cst_waitlist AND
6439 v_sua_rec.wlst_priority_weight_num IS NOT NULL AND
6440 v_sua_rec.wlst_preference_weight_num IS NOT NULL THEN
6441
6442 v_sua_rec.wlst_priority_weight_num:=NULL;
6443 v_sua_rec.wlst_preference_weight_num:= NULL;
6444 v_sua_rec.administrative_priority:= NULL;
6445 END IF;
6446
6447 -- Determine the unit_attempt_status for the transferred record
6448 l_unit_from_past_term := enrf_unit_from_past(p_person_id,
6449 p_course_cd,
6450 p_uoo_id,
6451 v_sua_rec.unit_attempt_status,
6452 v_sua_rec.discontinued_dt,
6453 p_term_cal_type,
6454 p_term_seq_num);
6455
6456 IF v_sua_rec.unit_attempt_status = cst_completed THEN
6457 IF l_unit_from_past_term THEN
6458 v_sua_rec.unit_attempt_status := cst_duplicate;
6459 ELSE
6460 v_sua_rec.unit_attempt_status := cst_completed;
6461 END IF;
6462 ELSIF v_sua_rec.unit_attempt_status = cst_discontin THEN
6463 IF l_unit_from_past_term THEN
6464 v_sua_rec.unit_attempt_status := cst_duplicate;
6465 ELSE
6466 v_sua_rec.unit_attempt_status := cst_discontin;
6467 END IF;
6468 END IF;
6469
6470 -- Transfer the student IGS_PS_UNIT attempt record
6471 DECLARE
6472 l_rowid VARCHAR2(25);
6473 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
6474 BEGIN
6475
6476 IF NVL(FND_PROFILE.VALUE('IGS_EN_CORE_VAL'),'N') = 'Y' THEN
6477 v_sua_rec.core_indicator_code := NVL(p_core_ind, v_sua_rec.core_indicator_code);
6478 END IF;
6479
6480 IF v_sua_rec.unit_attempt_status = cst_duplicate THEN
6481 v_sua_rec.administrative_unit_status := NULL;
6482 v_sua_rec.dcnt_reason_cd := NULL;
6483 v_sua_rec.discontinued_dt := NULL;
6484 END IF;
6485
6486
6487
6488 IGS_EN_SU_ATTEMPT_PKG.INSERT_ROW (
6489 X_ROWID => l_rowid,
6490 X_PERSON_ID => p_person_id,
6491 X_COURSE_CD => p_transfer_course_cd,
6492 X_UNIT_CD => p_unit_cd,
6493 X_VERSION_NUMBER => p_version_number,
6494 X_CAL_TYPE => p_cal_type,
6495 X_CI_SEQUENCE_NUMBER => p_ci_sequence_number,
6496 X_LOCATION_CD => v_sua_rec.location_cd,
6497 X_UNIT_CLASS => v_sua_rec.unit_class,
6498 X_CI_START_DT => v_sua_rec.ci_start_dt,
6499 X_CI_END_DT => v_sua_rec.ci_end_dt,
6500 X_UOO_ID => v_sua_rec.uoo_id,
6501 X_ENROLLED_DT => v_sua_rec.enrolled_dt,
6502 X_ADMINISTRATIVE_UNIT_STATUS => v_sua_rec.administrative_unit_status,
6503 X_ADMINISTRATIVE_PRIORITY => v_sua_rec.administrative_priority,
6504 X_unit_attempt_status => v_sua_rec.unit_attempt_status,
6505 X_DISCONTINUED_DT => v_sua_rec.discontinued_dt,
6506 X_RULE_WAIVED_DT => v_sua_rec.rule_waived_dt,
6507 X_RULE_WAIVED_PERSON_ID => v_sua_rec.rule_waived_person_id,
6508 X_NO_ASSESSMENT_IND => v_sua_rec.no_assessment_ind,
6509 X_SUP_UNIT_CD => v_sua_rec.sup_unit_cd,
6510 X_SUP_VERSION_NUMBER => v_sua_rec.sup_version_number,
6511 X_EXAM_LOCATION_CD => v_sua_rec.exam_location_cd,
6512 X_ALTERNATIVE_TITLE => v_sua_rec.alternative_title,
6513 X_OVERRIDE_ENROLLED_CP => v_sua_rec.override_enrolled_cp,
6514 X_OVERRIDE_EFTSU => v_sua_rec.override_eftsu,
6515 X_OVERRIDE_ACHIEVABLE_CP => v_sua_rec.override_achievable_cp,
6516 X_OVERRIDE_OUTCOME_DUE_DT => v_sua_rec.override_outcome_due_dt,
6517 X_OVERRIDE_CREDIT_REASON => v_sua_rec.override_credit_reason,
6518 X_WAITLIST_DT => v_sua_rec.waitlist_dt,
6519 X_DCNT_REASON_CD => v_sua_rec.dcnt_reason_cd,
6520 X_MODE => 'R',
6521 X_ORG_ID => l_org_id,
6522 X_ORG_UNIT_CD => v_sua_rec.org_unit_cd,
6523 X_SESSION_ID => v_sua_rec.session_id, --This column has been added as per the Bug# 2172380.
6524 -- Added the columns grading schema code and gs_version_number as a part of the bug 2037897. - aiyer
6525 X_GRADING_SCHEMA_CODE => v_sua_rec.grading_schema_code,
6526 X_GS_VERSION_NUMBER => v_sua_rec.gs_version_number,
6527 -- Added the column deg_aud_detail_id as part of Degree Audit Interface build. (Bug# 2033208)
6528 X_DEG_AUD_DETAIL_ID => v_sua_rec.deg_aud_detail_id,
6529 -- These columns insert values depending on whether the course being transferred to belongs to
6530 -- the same Career (course Type) or not .Bug # 2158626.
6531 X_STUDENT_CAREER_TRANSCRIPT => v_sua_rec.student_career_transcript,
6532 X_STUDENT_CAREER_STATISTICS => v_sua_rec.student_career_statistics ,
6533 X_ATTRIBUTE_CATEGORY => v_sua_rec.attribute_category,
6534 X_ATTRIBUTE1 => v_sua_rec.attribute1,
6535 X_ATTRIBUTE2 => v_sua_rec.attribute2,
6536 X_ATTRIBUTE3 => v_sua_rec.attribute3,
6537 X_ATTRIBUTE4 => v_sua_rec.attribute4,
6538 X_ATTRIBUTE5 => v_sua_rec.attribute5,
6539 X_ATTRIBUTE6 => v_sua_rec.attribute6,
6540 X_ATTRIBUTE7 => v_sua_rec.attribute7,
6541 X_ATTRIBUTE8 => v_sua_rec.attribute8,
6542 X_ATTRIBUTE9 => v_sua_rec.attribute9,
6543 X_ATTRIBUTE10 => v_sua_rec.attribute10,
6544 X_ATTRIBUTE11 => v_sua_rec.attribute11,
6545 X_ATTRIBUTE12 => v_sua_rec.attribute12,
6546 X_ATTRIBUTE13 => v_sua_rec.attribute13,
6547 X_ATTRIBUTE14 => v_sua_rec.attribute14,
6548 X_ATTRIBUTE15 => v_sua_rec.attribute15,
6549 X_ATTRIBUTE16 => v_sua_rec.attribute16,
6550 X_ATTRIBUTE17 => v_sua_rec.attribute17,
6551 X_ATTRIBUTE18 => v_sua_rec.attribute18,
6552 X_ATTRIBUTE19 => v_sua_rec.attribute19,
6553 X_ATTRIBUTE20 => v_sua_rec.attribute20,
6554 X_WAITLIST_MANUAL_IND => v_sua_rec.waitlist_manual_ind,
6555 X_wlst_priority_weight_num => v_sua_rec.wlst_priority_weight_num,
6556 X_wlst_preference_weight_num => v_sua_rec.wlst_preference_weight_num,
6557 X_CORE_INDICATOR_CODE => v_sua_rec.core_indicator_code,
6558 X_UPD_AUDIT_FLAG => 'N',
6559 X_SS_SOURCE_IND => 'A');
6560
6561
6562 -- copy all the child records for the unit attempt if necessary
6563 IF v_sua_rec.unit_attempt_status in (cst_enrolled,cst_waitlist, cst_discontin,cst_completed) THEN
6564 enrp_ins_suai_trnsfr(
6565 p_person_id => p_person_id,
6566 p_source_course_cd => p_course_cd,
6567 p_dest_course_cd => p_transfer_course_cd,
6568 p_source_uoo_id => p_uoo_id,
6569 p_dest_uoo_id => p_uoo_id,
6570 p_delete_source => TRUE );
6571
6572 enrp_ins_suao_Trnsfr (
6573 p_person_id => p_person_id,
6574 p_source_course_cd => p_course_cd,
6575 p_dest_course_cd => p_transfer_course_cd,
6576 p_source_uoo_id => p_uoo_id,
6577 p_dest_uoo_id => p_uoo_id,
6578 p_delete_source => TRUE);
6579
6580 enrp_ins_splace_Trnsfr (
6581 p_person_id => p_person_id,
6582 p_source_course_cd => p_course_cd,
6583 p_dest_course_cd => p_transfer_course_cd,
6584 p_source_uoo_id => p_uoo_id,
6585 p_dest_uoo_id => p_uoo_id);
6586
6587 END IF;
6588
6589 IF v_sua_rec.unit_attempt_status NOT IN ('UNCONFIRM', 'DUPLICATE') THEN
6590 enrp_ins_sua_ref_trnsfr (
6591 p_person_id => p_person_id,
6592 p_source_course_cd => p_course_cd,
6593 p_dest_course_cd => p_transfer_course_cd,
6594 p_uoo_id => p_uoo_id);
6595 END IF;
6596
6597
6598 END;
6599
6600 RETURN TRUE;
6601
6602 EXCEPTION
6603 WHEN e_record_locked THEN
6604 p_return_type := NULL;
6605 p_message_name := 'IGS_EN_UNCONFIRM_SUA_EXISTS';
6606 RETURN FALSE;
6607 WHEN OTHERS THEN
6608 IF (c_sua%ISOPEN) THEN
6609 CLOSE c_sua;
6610 END IF;
6611 IF (c_sua_delete%ISOPEN) THEN
6612 CLOSE c_sua_delete;
6613 END IF;
6614 RAISE;
6615 END;
6616
6617 END enrp_ins_sua_trnsfr;
6618
6619
6620
6621 Procedure Enrp_Ins_Susa_Hist(
6622 p_person_id IN NUMBER ,
6623 p_course_cd IN VARCHAR2 ,
6624 p_unit_set_cd IN VARCHAR2 ,
6625 p_sequence_number IN NUMBER ,
6626 p_new_us_version_number IN NUMBER ,
6627 p_old_us_version_number IN NUMBER ,
6628 p_new_selection_dt IN DATE ,
6629 p_old_selection_dt IN DATE ,
6630 p_new_student_confirmed_ind IN VARCHAR2 ,
6631 p_old_student_confirmed_ind IN VARCHAR2 ,
6632 p_new_end_dt IN DATE ,
6633 p_old_end_dt IN DATE ,
6634 p_new_parent_unit_set_cd IN VARCHAR2 ,
6635 p_old_parent_unit_set_cd IN VARCHAR2 ,
6636 p_new_parent_sequence_number IN NUMBER ,
6637 p_old_parent_sequence_number IN NUMBER ,
6638 p_new_primary_set_ind IN VARCHAR2 ,
6639 p_old_primary_set_ind IN VARCHAR2 ,
6640 p_new_voluntary_end_ind IN VARCHAR2 ,
6641 p_old_voluntary_end_ind IN VARCHAR2,
6642 p_new_authorised_person_id IN NUMBER ,
6643 p_old_authorised_person_id IN NUMBER ,
6644 p_new_authorised_on IN DATE ,
6645 p_old_authorised_on IN DATE ,
6646 p_new_override_title IN VARCHAR2 ,
6647 p_old_override_title IN VARCHAR2 ,
6648 p_new_rqrmnts_complete_ind IN VARCHAR2 ,
6649 p_old_rqrmnts_complete_ind IN VARCHAR2 ,
6650 p_new_rqrmnts_complete_dt IN DATE ,
6651 p_old_rqrmnts_complete_dt IN DATE ,
6652 p_new_s_completed_source_type IN VARCHAR2 ,
6653 p_old_s_completed_source_type IN VARCHAR2 ,
6654 p_new_catalog_cal_type IN VARCHAR2 ,
6655 p_old_catalog_cal_type IN VARCHAR2 ,
6656 p_new_catalog_seq_num IN NUMBER ,
6657 p_old_catalog_seq_num IN NUMBER ,
6658 p_new_update_who IN IGS_EN_SU_ATTEMPT_ALL.last_updated_by%TYPE ,
6659 p_old_update_who IN IGS_EN_SU_ATTEMPT_ALL.last_updated_by%TYPE ,
6660 p_new_update_on IN IGS_EN_SU_ATTEMPT_ALL.last_update_DATE%TYPE,
6661 p_old_update_on IN IGS_EN_SU_ATTEMPT_ALL.last_update_DATE%TYPE )
6662 AS
6663 gv_other_detail VARCHAR2(255);
6664 BEGIN -- enrp_ins_susa_hist
6665 -- Create a history for an IGS_AD_APPL record
6666 DECLARE
6667 v_susa_rec IGS_AS_SU_SETATMPT_H%ROWTYPE;
6668 v_create_history BOOLEAN := FALSE;
6669 BEGIN
6670 -- Create a history for a IGS_AS_SU_SETATMPT record.
6671 -- Check if any of the non-primary key fields have been changed
6672 -- and set the flag v_create_history to indicate so.
6673 IF p_new_us_version_number <> p_old_us_version_number THEN
6674 v_susa_rec.us_version_number := p_old_us_version_number;
6675 v_create_history := TRUE;
6676 END IF;
6677 IF NVL(p_new_selection_dt, igs_ge_date.igsdate('1900/01/01')) <>
6678 NVL(p_old_selection_dt,igs_ge_date.igsdate('1900/01/01')) THEN
6679 v_susa_rec.selection_dt := p_old_selection_dt;
6680 v_create_history := TRUE;
6681 END IF;
6682 IF NVL(p_new_student_confirmed_ind,'U') <>
6683 NVL(p_old_student_confirmed_ind,'U') THEN
6684 v_susa_rec.student_confirmed_ind := p_old_student_confirmed_ind;
6685 v_create_history := TRUE;
6686 END IF;
6687 IF NVL(p_new_end_dt,igs_ge_date.igsdate('1800/01/01')) <>
6688 NVL(p_old_end_dt,igs_ge_date.igsdate('1800/01/01')) THEN
6689 v_susa_rec.end_dt := p_old_end_dt;
6690 v_create_history := TRUE;
6691 END IF;
6692 IF NVL(p_new_parent_unit_set_cd, 'NULL') <>
6693 NVL(p_old_parent_unit_set_cd, 'NULL') THEN
6694 v_susa_rec.parent_unit_set_cd := p_old_parent_unit_set_cd;
6695 v_create_history := TRUE;
6696 END IF;
6697 IF NVL(p_new_parent_sequence_number, -1) <>
6698 NVL(p_old_parent_sequence_number, -1) THEN
6699 v_susa_rec.parent_sequence_number := p_old_parent_sequence_number;
6700 v_create_history := TRUE;
6701 END IF;
6702 IF p_new_primary_set_ind <> p_old_primary_set_ind THEN
6703 v_susa_rec.primary_set_ind := p_old_primary_set_ind;
6704 v_create_history := TRUE;
6705 END IF;
6706 IF p_new_voluntary_end_ind <> p_old_voluntary_end_ind THEN
6707 v_susa_rec.voluntary_end_ind := p_old_voluntary_end_ind;
6708 v_create_history := TRUE;
6709 END IF;
6710 IF NVL(p_new_authorised_person_id, 0) <>
6711 NVL(p_old_authorised_person_id, 0) THEN
6712 v_susa_rec.authorised_person_id := p_old_authorised_person_id;
6713 v_create_history := TRUE;
6714 END IF;
6715 IF NVL(p_new_authorised_on, igs_ge_date.igsdate('1800/01/01')) <>
6716 NVL(p_old_authorised_on, igs_ge_date.igsdate('1800/01/01')) THEN
6717 v_susa_rec.authorised_on := p_old_authorised_on;
6718 v_create_history := TRUE;
6719 END IF;
6720 IF NVL(p_new_override_title,'NULL') <> NVL(p_old_override_title,'NULL') THEN
6721 v_susa_rec.override_title:= p_old_override_title;
6722 v_create_history := TRUE;
6723 END IF;
6724 IF p_new_rqrmnts_complete_ind <> p_old_rqrmnts_complete_ind THEN
6725 v_susa_rec.rqrmnts_complete_ind := p_old_rqrmnts_complete_ind;
6726 v_create_history := TRUE;
6727 END IF;
6728 IF NVL(p_new_rqrmnts_complete_dt, igs_ge_date.igsdate('1800/01/01')) <>
6729 NVL(p_old_rqrmnts_complete_dt, igs_ge_date.igsdate('1800/01/01')) THEN
6730 v_susa_rec.rqrmnts_complete_dt := p_old_rqrmnts_complete_dt;
6731 v_create_history := TRUE;
6732 END IF;
6733 IF NVL(p_new_s_completed_source_type,'NULL') <>
6734 NVL(p_old_s_completed_source_type,'NULL') THEN
6735 v_susa_rec.s_completed_source_type := p_old_s_completed_source_type;
6736 v_create_history := TRUE;
6737 END IF;
6738
6739 IF NVL(p_new_catalog_cal_type ,'NULL') <>
6740 NVL(p_old_catalog_cal_type,'NULL') THEN
6741 v_susa_rec.catalog_cal_type := p_old_catalog_cal_type;
6742 v_create_history := TRUE;
6743 END IF;
6744 IF NVL(p_new_catalog_seq_num,-1) <>
6745 NVL(p_old_catalog_seq_num,-1) THEN
6746 v_susa_rec.catalog_seq_num := p_old_catalog_seq_num;
6747 v_create_history := TRUE;
6748 END IF;
6749
6750
6751 -- Create a history record if a column has changed value
6752 IF v_create_history = TRUE THEN
6753 v_susa_rec.person_id := p_person_id;
6754 v_susa_rec.course_cd := p_course_cd;
6755 v_susa_rec.unit_set_cd := p_unit_set_cd;
6756 v_susa_rec.sequence_number := p_sequence_number;
6757 v_susa_rec.hist_start_dt := p_old_update_on;
6758 v_susa_rec.hist_end_dt := p_new_update_on;
6759 v_susa_rec.hist_who := p_old_update_who;
6760
6761
6762 DECLARE
6763 l_rowid VARCHAR2(25);
6764 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
6765 BEGIN
6766 IGS_AS_SU_SETATMPT_H_PKG.INSERT_ROW (
6767 x_rowid => l_rowid,
6768 x_person_id => v_susa_rec.person_id,
6769 x_course_cd => v_susa_rec.course_cd,
6770 x_unit_set_cd => v_susa_rec.unit_set_cd,
6771 x_us_version_number => v_susa_rec.us_version_number,
6772 x_sequence_number => v_susa_rec.sequence_number,
6773 x_hist_start_dt => v_susa_rec.hist_start_dt,
6774 x_hist_end_dt => v_susa_rec.hist_end_dt,
6775 x_hist_who => v_susa_rec.hist_who,
6776 x_selection_dt => v_susa_rec.selection_dt,
6777 x_student_confirmed_ind =>v_susa_rec.student_confirmed_ind ,
6778 x_end_dt => v_susa_rec.end_dt,
6779 x_parent_unit_set_cd => v_susa_rec.parent_unit_set_cd,
6780 x_parent_sequence_number => v_susa_rec.parent_sequence_number,
6781 x_primary_set_ind => v_susa_rec.primary_set_ind,
6782 x_voluntary_end_ind => v_susa_rec.voluntary_end_ind,
6783 x_authorised_person_id => v_susa_rec.authorised_person_id,
6784 x_authorised_on => v_susa_rec.authorised_on,
6785 x_override_title => v_susa_rec.override_title,
6786 x_rqrmnts_complete_ind => v_susa_rec.rqrmnts_complete_ind,
6787 x_rqrmnts_complete_dt => v_susa_rec.rqrmnts_complete_dt,
6788 x_s_completed_source_type => v_susa_rec.s_completed_source_type ,
6789 x_catalog_cal_type => v_susa_rec.catalog_cal_type ,
6790 x_catalog_seq_num => v_susa_rec.catalog_seq_num,
6791 x_org_id => l_org_id);
6792
6793 END;
6794 END IF;
6795 END;
6796 EXCEPTION
6797 WHEN OTHERS THEN
6798 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
6799 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_susa_hist');
6800 IGS_GE_MSG_STACK.ADD;
6801 App_Exception.Raise_Exception;
6802 END enrp_ins_susa_hist;
6803
6804 FUNCTION Enrp_Ins_Susa_Trnsfr(
6805 p_person_id IN NUMBER ,
6806 p_course_cd IN VARCHAR2 ,
6807 p_transfer_course_cd IN VARCHAR2 ,
6808 p_unit_set_cd IN VARCHAR2 ,
6809 p_us_version_number IN NUMBER ,
6810 p_sequence_number IN NUMBER ,
6811 p_primary_set_ind IN VARCHAR2 ,
6812 p_message_name OUT NOCOPY VARCHAR2)
6813 RETURN BOOLEAN AS
6814 INVALID_PARAM EXCEPTION ;
6815
6816 BEGIN -- enrp_ins_susa_trnsfr
6817 -- Transfer a IGS_AS_SU_SETATMPT record as part of a IGS_PS_COURSE transfer.
6818 DECLARE
6819
6820 CURSOR c_susa IS
6821 SELECT susa.us_version_number,
6822 susa.sequence_number,
6823 susa.selection_dt,
6824 susa.student_confirmed_ind,
6825 susa.end_dt,
6826 susa.parent_unit_set_cd,
6827 susa.parent_sequence_number,
6828 susa.voluntary_end_ind,
6829 susa.authorised_person_id,
6830 susa.authorised_on,
6831 susa.override_title,
6832 susa.rqrmnts_complete_ind,
6833 susa.rqrmnts_complete_dt,
6834 susa.s_completed_source_type
6835 FROM IGS_AS_SU_SETATMPT susa
6836 WHERE susa.person_id = p_person_id AND
6837 susa.course_cd = p_course_cd AND
6838 susa.unit_set_cd = p_unit_set_cd AND
6839 susa.us_version_number = p_us_version_number AND
6840 susa.sequence_number = p_sequence_number;
6841 CURSOR c_susa1 IS
6842 SELECT 'x'
6843 FROM IGS_AS_SU_SETATMPT susa
6844 WHERE susa.person_id = p_person_id AND
6845 susa.course_cd = p_transfer_course_cd AND
6846 susa.unit_set_cd = p_unit_set_cd AND
6847 susa.us_version_number = p_us_version_number;
6848 v_primary_set_ind IGS_AS_SU_SETATMPT.primary_set_ind%TYPE ;
6849 v_ret BOOLEAN ;
6850 v_message_name VARCHAR2(2000);
6851 v_message_text VARCHAR2(2000);
6852 v_c_susa_rec c_susa%ROWTYPE;
6853 v_c_susa1_found VARCHAR2(1) ;
6854 --
6855 -- Next cursor added as per the HESA DLD Buils ENCR019. Bug# 2201753.
6856 --
6857 l_status NUMBER(3);
6858
6859
6860 BEGIN
6861 p_message_name := null;
6862 -- Check parameters
6863 IF p_person_id IS NULL OR
6864 p_course_cd IS NULL OR
6865 p_transfer_course_cd IS NULL OR
6866 p_unit_set_cd IS NULL OR
6867 p_us_version_number IS NULL THEN
6868 RETURN TRUE;
6869 END IF;
6870 -- Get the details of the student_unit_sew_attempt record
6871 -- which is to be transfered.
6872 OPEN c_susa;
6873 FETCH c_susa INTO v_c_susa_rec;
6874 IF (c_susa%NOTFOUND) THEN -- this should not happen
6875 CLOSE c_susa;
6876 p_message_name := null;
6877 RETURN TRUE;
6878 END IF;
6879 CLOSE c_susa;
6880 -- Determine if IGS_AS_SU_SETATMPT is to be transferred
6881 -- as a primary IGS_PS_UNIT set.
6882 IF p_primary_set_ind = 'Y' THEN
6883 v_primary_set_ind := 'Y';
6884 ELSE
6885 v_primary_set_ind := 'N';
6886 END IF;
6887 -- Perform validations on the IGS_AS_SU_SETATMPT record to be created.
6888 -- Call enrp_val_susa in IGS_EN_VAL_SUSA package to perform validations.
6889 v_ret := IGS_EN_VAL_SUSA.enrp_val_susa (
6890 p_person_id,
6891 p_transfer_course_cd,
6892 p_unit_set_cd,
6893 v_c_susa_rec.sequence_number,
6894 p_us_version_number,
6895 v_c_susa_rec.selection_dt,
6896 v_c_susa_rec.student_confirmed_ind,
6897 v_c_susa_rec.end_dt,
6898 v_c_susa_rec.parent_unit_set_cd,
6899 v_c_susa_rec.parent_sequence_number,
6900 v_primary_set_ind,
6901 v_c_susa_rec.voluntary_end_ind,
6902 v_c_susa_rec.authorised_person_id,
6903 v_c_susa_rec.authorised_on,
6904 v_c_susa_rec.override_title,
6905 v_c_susa_rec.rqrmnts_complete_ind,
6906 v_c_susa_rec.rqrmnts_complete_dt,
6907 v_c_susa_rec.s_completed_source_type,
6908 'INSERT',
6909 v_message_name,
6910 v_message_text);
6911 -- Check v_ret
6912 IF v_ret = FALSE THEN
6913 IF v_message_name is not null and v_message_name <> 'IGS_EN_UNIT_SET_NOT_PARENT_EX' THEN
6914 p_message_name := v_message_name;
6915 RETURN FALSE;
6916 END IF;
6917 END IF;
6918 -- Check that the record to be inserted doesn't already exist.
6919 OPEN c_susa1;
6920 FETCH c_susa1 INTO v_c_susa1_found;
6921 IF (c_susa1%FOUND) THEN
6922 -- IGS_AS_SU_SETATMPT already exists.
6923 CLOSE c_susa1;
6924 p_message_name := 'IGS_EN_SUA_SET_ATT_TRNS_EXIST';
6925 RETURN FALSE;
6926 END IF;
6927 CLOSE c_susa1;
6928 -- Transfer the IGS_EN_SU_ATTEMPT.
6929 DECLARE
6930 l_rowid VARCHAR2(25) := NULL;
6931 BEGIN
6932 IGS_AS_SU_SETATMPT_PKG.INSERT_ROW (
6933 x_rowid => l_rowid,
6934 x_person_id => p_person_id,
6935 x_course_cd => p_transfer_course_cd,
6936 x_unit_set_cd => p_unit_set_cd,
6937 x_us_version_number => p_us_version_number,
6938 x_sequence_number => v_c_susa_rec.sequence_number,
6939 x_selection_dt => v_c_susa_rec.selection_dt,
6940 x_end_dt => v_c_susa_rec.end_dt,
6941 x_parent_unit_set_cd => v_c_susa_rec.parent_unit_set_cd,
6942 x_parent_sequence_number => v_c_susa_rec.parent_sequence_number,
6943 x_primary_set_ind => v_primary_set_ind,
6944 x_voluntary_end_ind => v_c_susa_rec.voluntary_end_ind,
6945 x_authorised_person_id => v_c_susa_rec.authorised_person_id,
6946 x_authorised_on => v_c_susa_rec.authorised_on,
6947 x_override_title => v_c_susa_rec.override_title,
6948 x_rqrmnts_complete_ind => v_c_susa_rec.rqrmnts_complete_ind,
6949 x_rqrmnts_complete_dt => v_c_susa_rec.rqrmnts_complete_dt,
6950 x_s_completed_source_type => v_c_susa_rec.s_completed_source_type,
6951 x_student_confirmed_ind => v_c_susa_rec.student_confirmed_ind,
6952 X_CATALOG_CAL_TYPE => NULL,
6953 X_CATALOG_SEQ_NUM => NULL,
6954 X_ATTRIBUTE_CATEGORY => NULL,
6955 X_ATTRIBUTE1 => NULL,
6956 X_ATTRIBUTE2 => NULL,
6957 X_ATTRIBUTE3 => NULL,
6958 X_ATTRIBUTE4 => NULL,
6959 X_ATTRIBUTE5 => NULL,
6960 X_ATTRIBUTE6 => NULL,
6961 X_ATTRIBUTE7 => NULL,
6962 X_ATTRIBUTE8 => NULL,
6963 X_ATTRIBUTE9 => NULL,
6964 X_ATTRIBUTE10 => NULL,
6965 X_ATTRIBUTE11 => NULL,
6966 X_ATTRIBUTE12 => NULL,
6967 X_ATTRIBUTE13 => NULL,
6968 X_ATTRIBUTE14 => NULL,
6969 X_ATTRIBUTE15 => NULL,
6970 X_ATTRIBUTE16 => NULL,
6971 X_ATTRIBUTE17 => NULL,
6972 X_ATTRIBUTE18 => NULL,
6973 X_ATTRIBUTE19 => NULL,
6974 X_ATTRIBUTE20 => NULL,
6975 X_MODE => 'R');
6976
6977 END;
6978
6979
6980 --
6981 -- New code added as per the HESA DLD Build. ENCR019 Bug# 2201753
6982 --
6983
6984 --
6985 -- Get the OSS_COUNTRY_CODE
6986 --
6987 IF fnd_profile.value('OSS_COUNTRY_CODE') = 'GB' THEN
6988 p_message_name := NULL;
6989 l_status := NULL;
6990 IGS_HE_PROG_TRANSFER_PKG.HESA_STUD_SUSA_TRANS(
6991 p_person_id => p_person_id,
6992 p_old_course_cd => p_course_cd,
6993 p_new_course_cd => p_transfer_course_cd,
6994 p_old_unit_set_cd => p_unit_set_cd,
6995 p_new_unit_set_cd => p_unit_set_cd,
6996 p_old_us_version_number => p_us_version_number,
6997 p_new_us_version_number => p_us_version_number,
6998 p_status => l_status,
6999 p_message_name => p_message_name);
7000 IF NVL(l_Status,0) = 2 THEN -- ie. The procedure call has resulted in error.
7001 Raise INVALID_PARAM ;
7002 END IF;
7003 END IF;
7004 --
7005 -- End of the New code added as per the HESA DLD Build.
7006 --
7007
7008 RETURN TRUE;
7009 EXCEPTION
7010 WHEN OTHERS THEN
7011 IF (c_susa%ISOPEN) THEN
7012 CLOSE c_susa;
7013 END IF;
7014 IF (c_susa1%ISOPEN) THEN
7015 CLOSE c_susa1;
7016 END IF;
7017 RAISE;
7018 END;
7019 EXCEPTION
7020 WHEN INVALID_PARAM THEN
7021 Fnd_Message.Set_Name('IGS', p_message_name);
7022 IGS_GE_MSG_STACK.ADD;
7023 App_Exception.Raise_Exception;
7024
7025 WHEN OTHERS THEN
7026 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
7027 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_susa_trnsfr');
7028 IGS_GE_MSG_STACK.ADD;
7029 App_Exception.Raise_Exception;
7030 END enrp_ins_susa_trnsfr;
7031
7032 FUNCTION Enrp_Ins_Sut_Trnsfr(
7033 p_person_id IN NUMBER ,
7034 p_course_cd IN VARCHAR2 ,
7035 p_transfer_course_cd IN VARCHAR2 ,
7036 p_transfer_dt IN DATE ,
7037 p_unit_cd IN VARCHAR2 ,
7038 p_cal_type IN VARCHAR2 ,
7039 p_ci_sequence_number IN NUMBER ,
7040 p_message_name OUT NOCOPY VARCHAR2,
7041 p_uoo_id IN NUMBER )
7042 -------------------------------------------------------------------------------------------
7043 --Change History:
7044 --Who When What
7045 --kkillams 25-04-2003 New parameter p_uoo_id is added w.r.t. bug number 2829262
7046 --ptandon 29-12-2003 Removed the Exception Handling section so that the correct
7047 -- error message is displayed. Bug# 3328083.
7048 -------------------------------------------------------------------------------------------
7049 RETURN BOOLEAN AS
7050
7051 BEGIN -- enrp_ins_sut_trnsfr
7052 -- Insert a record into the IGS_PS_STDNT_UNT_TRN table.
7053 DECLARE
7054 BEGIN
7055 p_message_name := null;
7056 IF (p_person_id IS NULL OR
7057 p_course_cd IS NULL OR
7058 p_transfer_course_cd IS NULL OR
7059 p_transfer_dt IS NULL OR
7060 p_unit_cd IS NULL OR
7061 p_cal_type IS NULL OR
7062 p_ci_sequence_number IS NULL) THEN
7063 RETURN TRUE;
7064 END IF;
7065
7066 DECLARE
7067 l_rowid VARCHAR2(25);
7068 BEGIN
7069 IGS_PS_STDNT_UNT_TRN_PKG.INSERT_ROW(
7070 x_rowid => l_rowid,
7071 x_person_id => p_person_id,
7072 x_course_cd => p_course_cd,
7073 x_transfer_course_cd =>p_transfer_course_cd ,
7074 x_transfer_dt => p_transfer_dt,
7075 x_unit_cd => p_unit_cd,
7076 x_cal_type => p_cal_type,
7077 x_ci_sequence_number => p_ci_sequence_number,
7078 x_uoo_id => p_uoo_id);
7079 END;
7080 RETURN TRUE;
7081 END;
7082 END enrp_ins_sut_trnsfr;
7083 --
7084 -- To transfer the Advance Standing from source Program to Destination Program.
7085 --
7086 PROCEDURE adv_stand_trans (
7087 p_person_id IN NUMBER,
7088 p_course_cd IN VARCHAR2,
7089 p_version_number IN NUMBER,
7090 p_course_cd_new IN VARCHAR2,
7091 p_version_number_new IN NUMBER,
7092 p_message_name OUT NOCOPY VARCHAR2
7093 ) IS
7094 ------------------------------------------------------------------------------------------------
7095 --Created by : Nalin Kumar, Oracle India
7096 --Date created: 08-Nov-2001
7097 --
7098 --Purpose: To transfer the Advance Standing from
7099 -- source Program to Destination Program.
7100 --
7101 --
7102 --Known limitations/enhancements and/or remarks:
7103 --
7104 --Change History:
7105 --Who When What
7106 --pmarada 27-nov-2001 Added AV_STND_UNIT_ID column in Igs_Av_Stnd_Unit_Pkg.Insert_Row
7107 -- Added AV_STND_UNIT_ID column in Igs_Av_Std_Unt_basis_Pkg.Insert_Row
7108 -- and obsolated some columns
7109 -- Added AV_STND_UNIT_LVL_ID column in IGS_AV_STD_ULVLBASIS_PKG.Insert_Row
7110 -- and obsolated some columns
7111 -- Added AV_STND_UNIT_ID column in Igs_Av_Stnd_alt_unit_Pkg.Insert_Row
7112 -- and obsolated some columns
7113 --rvivekan 10-dec-2002 Obsoleted column credit_percentage as a part of bug#3270446
7114 --ptandon 11-Dec-2003 Modified calls to Igs_Av_Std_Unt_Basis_Pkg.Insert_Row,
7115 -- Igs_Av_Stnd_Alt_Unit_Pkg.Insert_Row and Igs_Av_Std_Ulvlbasis_Pkg.Insert_Row
7116 -- to pass new value for Advanced Standing Unit ID as part of Bug# 3271754.
7117 --ptandon 23-Feb-2004 Put the cursor cur_adv_stnd in a cursor FOR LOOP so that transfer records
7118 -- are created in igs_av_adv_standing_all table for all institutions.
7119 -- Also modified the cursors cur_unit_dtls and cur_unit_lvl_dtls to pass
7120 -- exemption_institution_cd parameter so that only the child records
7121 -- corresponding to current parent record in igs_av_adv_standing_all table
7122 -- are selected. Modified the cursors cur_unit_bas_dtls, cur_alt_unit_dtls
7123 -- and cur_unit_lvl_bas_dtls to pass correct foreign key. Bug# 3461036.
7124 -------------------------------------------------------------------------------------------------
7125 --
7126 -- To get Org ID.
7127 --
7128 l_org_id NUMBER := igs_ge_gen_003.get_org_id;
7129 --
7130 -- Cursor to get Exemption_Institution_Cd of the parent Program.
7131 --
7132 CURSOR cur_adv_stnd (cp_person_id NUMBER, cp_course_cd VARCHAR2, cp_version_number NUMBER) IS
7133 SELECT exemption_institution_cd
7134 FROM igs_av_adv_standing
7135 WHERE person_id = cp_person_id
7136 AND course_cd = cp_course_cd
7137 AND version_number = cp_version_number;
7138 --
7139 rec_adv_stnd cur_adv_stnd%ROWTYPE;
7140 --
7141 -- Cursor to check whether any advanced standing record already exists in the destination program
7142 --
7143 CURSOR cur_dest_adv_stnd (
7144 cp_person_id NUMBER,
7145 cp_course_cd_new VARCHAR2,
7146 cp_version_number_new NUMBER,
7147 cp_exemption_institution_cd VARCHAR2
7148 ) IS
7149 SELECT avs.ROWID,
7150 avs.*
7151 FROM igs_av_adv_standing avs
7152 WHERE avs.person_id = cp_person_id
7153 AND avs.course_cd = cp_course_cd_new
7154 AND avs.version_number = cp_version_number_new
7155 AND avs.exemption_institution_cd = cp_exemption_institution_cd;
7156 --
7157 rec_dest_adv_stnd cur_dest_adv_stnd%ROWTYPE;
7158 --
7159 -- To get the Advance Standing Unit details records for the Source Program.
7160 --
7161 CURSOR cur_unit_dtls (
7162 cp_person_id NUMBER,
7163 cp_course_cd VARCHAR2,
7164 cp_version_number NUMBER,
7165 cp_exemption_institution_cd VARCHAR2
7166 ) IS
7167 SELECT asu.ROWID,
7168 asu.*
7169 FROM igs_av_stnd_unit_all asu
7170 WHERE asu.person_id = cp_person_id
7171 AND asu.as_course_cd = cp_course_cd
7172 AND asu.as_version_number = cp_version_number
7173 AND asu.exemption_institution_cd = cp_exemption_institution_cd
7174 AND asu.s_adv_stnd_granting_status IN ('APPROVED', 'GRANTED');
7175 --
7176 l_av_stnd_unit_id igs_av_stnd_unit.av_stnd_unit_id%TYPE;
7177 --
7178 -- To get the Advance Standing Unit details records for the Destination Program.
7179 --
7180 CURSOR cur_dest_unit_dtls (
7181 cp_person_id NUMBER,
7182 cp_as_course_cd VARCHAR2,
7183 cp_as_version_number NUMBER,
7184 cp_s_adv_stnd_type VARCHAR2,
7185 cp_unit_cd VARCHAR2,
7186 cp_version_number NUMBER,
7187 cp_exemption_institution_cd VARCHAR2,
7188 cp_unit_details_id NUMBER,
7189 cp_tst_rslt_dtls_id NUMBER
7190 ) IS
7191 SELECT asu.ROWID,
7192 asu.*
7193 FROM igs_av_stnd_unit_all asu
7194 WHERE asu.person_id = cp_person_id
7195 AND asu.as_course_cd = cp_as_course_cd
7196 AND asu.as_version_number = cp_as_version_number
7197 AND asu.s_adv_stnd_type = cp_s_adv_stnd_type
7198 AND asu.unit_cd = cp_unit_cd
7199 AND asu.version_number = cp_version_number
7200 AND asu.exemption_institution_cd = cp_exemption_institution_cd
7201 AND (asu.unit_details_id = cp_unit_details_id
7202 OR asu.tst_rslt_dtls_id = cp_tst_rslt_dtls_id);
7203 --
7204 l_dest_av_stnd_unit_id igs_av_stnd_unit.av_stnd_unit_id%TYPE;
7205 rec_dest_unit_dtls cur_dest_unit_dtls%ROWTYPE;
7206 rec_dest_unit_dtls_found BOOLEAN;
7207 --
7208 -- To get the Advance Standing Basics Unit details records for the Source Program.
7209 --
7210 CURSOR cur_unit_bas_dtls (cp_av_stnd_unit_id NUMBER) IS
7211 SELECT *
7212 FROM igs_av_std_unt_basis asub
7213 WHERE asub.av_stnd_unit_id = cp_av_stnd_unit_id;
7214 --
7215 rec_unit_bas_dtls cur_unit_bas_dtls%ROWTYPE;
7216 --
7217 -- To get the Advance Standing Alternate Unit details records for the Source Program.
7218 --
7219 CURSOR cur_alt_unit_dtls (cp_av_stnd_unit_id NUMBER) IS
7220 SELECT *
7221 FROM igs_av_stnd_alt_unit asau
7222 WHERE asau.av_stnd_unit_id = cp_av_stnd_unit_id;
7223 --
7224 rec_alt_unit_dtls cur_alt_unit_dtls%ROWTYPE;
7225 --
7226 -- To get the Advance Standing Unit Level records for the Source Program.
7227 --
7228 CURSOR cur_unit_lvl_dtls (
7229 cp_person_id NUMBER,
7230 cp_course_cd VARCHAR2,
7231 cp_version_number NUMBER,
7232 cp_exemption_institution_cd VARCHAR2
7233 ) IS
7234 SELECT asule.ROWID,
7235 asule.*
7236 FROM igs_av_stnd_unit_lvl_all asule
7237 WHERE asule.person_id = cp_person_id
7238 AND asule.as_course_cd = cp_course_cd
7239 AND asule.as_version_number = cp_version_number
7240 AND asule.exemption_institution_cd = cp_exemption_institution_cd
7241 AND asule.s_adv_stnd_granting_status IN ('APPROVED', 'GRANTED');
7242 --
7243 l_av_stnd_unit_lvl_id igs_av_stnd_unit_lvl.av_stnd_unit_lvl_id%TYPE;
7244 --
7245 -- To get the Advance Standing Unit Level records for the Destination Program.
7246 --
7247 CURSOR cur_dest_unit_lvl_dtls (
7248 cp_person_id NUMBER,
7249 cp_as_course_cd VARCHAR2,
7250 cp_as_version_number NUMBER,
7251 cp_s_adv_stnd_type VARCHAR2,
7252 cp_unit_level VARCHAR2,
7253 cp_crs_group_ind VARCHAR2,
7254 cp_exemption_institution_cd VARCHAR2,
7255 cp_unit_details_id NUMBER,
7256 cp_tst_rslt_dtls_id NUMBER,
7257 cp_qual_dets_id NUMBER
7258 ) IS
7259 SELECT asule.ROWID,
7260 asule.*
7261 FROM igs_av_stnd_unit_lvl_all asule
7262 WHERE asule.person_id = cp_person_id
7263 AND asule.as_course_cd = cp_as_course_cd
7264 AND asule.as_version_number = cp_as_version_number
7265 AND asule.s_adv_stnd_type = cp_s_adv_stnd_type
7266 AND asule.unit_level = cp_unit_level
7267 AND asule.crs_group_ind = cp_crs_group_ind
7268 AND asule.exemption_institution_cd = cp_exemption_institution_cd
7269 AND (asule.unit_details_id = cp_unit_details_id
7270 OR asule.tst_rslt_dtls_id = cp_tst_rslt_dtls_id
7271 OR asule.qual_dets_id = cp_qual_dets_id);
7272 --
7273 l_dest_av_stnd_unit_lvl_id igs_av_stnd_unit_lvl.av_stnd_unit_lvl_id%TYPE;
7274 rec_dest_unit_lvl_dtls cur_dest_unit_lvl_dtls%ROWTYPE;
7275 rec_dest_unit_lvl_dtls_found BOOLEAN;
7276 --
7277 -- To get the Advance Standing Basics Unit Level records for the Source Program.
7278 --
7279 CURSOR cur_unit_lvl_bas_dtls (cp_av_stnd_unit_lvl_id NUMBER) IS
7280 SELECT *
7281 FROM igs_av_std_ulvlbasis asuleb
7282 WHERE asuleb.av_stnd_unit_lvl_id = cp_av_stnd_unit_lvl_id;
7283 --
7284 rec_unit_lvl_bas_dtls cur_unit_lvl_bas_dtls%ROWTYPE;
7285 l_rowid1 VARCHAR2 (25);
7286 l_rowid2 VARCHAR2 (25);
7287 l_rowid3 VARCHAR2 (25);
7288 l_rowid4 VARCHAR2 (25);
7289 l_rowid5 VARCHAR2 (25);
7290 l_rowid6 VARCHAR2 (25);
7291 v_transfer_type VARCHAR2(20) := 'NORMAL_TRANSFER';
7292 v_unt_transfer_flag VARCHAR2(2) := 'Y';
7293 v_unt_lvl_transfer_flag VARCHAR2(2) := 'Y';
7294 --
7295 BEGIN
7296 --
7297 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7298 fnd_log.string (
7299 fnd_log.level_procedure,
7300 g_module_head || 'adv_stand_trans.begin',
7301 'In Params : p_person_id => ' || p_person_id || ';' ||
7302 'p_course_cd => ' || p_course_cd || ';' ||
7303 'p_version_number => ' || p_version_number || ';' ||
7304 'p_course_cd_new => ' || p_course_cd_new || ';' ||
7305 'p_version_number_new => ' || p_version_number_new
7306 );
7307 END IF;
7308 --
7309 -- Creating the Advance Standing with the new Course_cd.
7310 --
7311 FOR rec_adv_stnd IN cur_adv_stnd (p_person_id, p_course_cd, p_version_number) LOOP
7312 --
7313 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7314 fnd_log.string (
7315 fnd_log.level_statement,
7316 g_module_head || 'adv_stand_trans.cur_adv_stnd',
7317 'Exemption Institution:' || rec_adv_stnd.exemption_institution_cd
7318 );
7319 END IF;
7320 --
7321 -- Creating the Advance Standing with the new Course_cd.
7322 -- First check if this is a case of Reverse Transfer
7323 --
7324 OPEN cur_dest_adv_stnd (
7325 p_person_id,
7326 p_course_cd_new,
7327 p_version_number_new,
7328 rec_adv_stnd.exemption_institution_cd
7329 );
7330 FETCH cur_dest_adv_stnd INTO rec_dest_adv_stnd;
7331 IF (cur_dest_adv_stnd%FOUND) THEN
7332 v_transfer_type := 'REVERSE_TRANSFER';
7333 ELSE
7334 v_transfer_type := 'NORMAL_TRANSFER';
7335 END IF;
7336 --
7337 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7338 fnd_log.string (
7339 fnd_log.level_statement,
7340 g_module_head || 'adv_stand_trans.transfer_type',
7341 'Transfer Type:' || v_transfer_type
7342 );
7343 END IF;
7344 --
7345 CLOSE cur_dest_adv_stnd;
7346 --
7347 -- Advanced Standing Master record is to be created only during Normal Transfer.
7348 -- In case of Reverse Transfer the Advanced Standing Master record already exists.
7349 --
7350 IF (v_transfer_type = 'NORMAL_TRANSFER') THEN
7351 BEGIN
7352 l_rowid1 := NULL;
7353 igs_av_adv_standing_pkg.insert_row (
7354 x_rowid => l_rowid1,
7355 x_person_id => p_person_id,
7356 x_course_cd => p_course_cd_new,
7357 x_version_number => p_version_number_new,
7358 x_total_exmptn_approved => 0,
7359 x_total_exmptn_granted => 0,
7360 x_total_exmptn_perc_grntd => 0,
7361 x_exemption_institution_cd => rec_adv_stnd.exemption_institution_cd,
7362 x_mode => 'R',
7363 x_org_id => l_org_id
7364 );
7365 EXCEPTION
7366 WHEN OTHERS THEN
7367 --
7368 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7369 fnd_log.string (
7370 fnd_log.level_exception,
7371 g_module_head || 'adv_stand_trans.igs_av_adv_standing_pkg_insert_exception',
7372 'Error:' || SQLERRM
7373 );
7374 END IF;
7375 RAISE;
7376 END;
7377 END IF;
7378 --
7379 -- Creating the Advance Standing details for Units.
7380 --
7381 FOR rec_unit_dtls IN cur_unit_dtls (
7382 p_person_id,
7383 p_course_cd,
7384 p_version_number,
7385 rec_adv_stnd.exemption_institution_cd
7386 ) LOOP
7387 --
7388 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7389 fnd_log.string (
7390 fnd_log.level_statement,
7391 g_module_head || 'adv_stand_trans.cur_unit_dtls',
7392 rec_unit_dtls.person_id || ';' || rec_unit_dtls.as_course_cd || ';' ||
7393 rec_unit_dtls.as_version_number || ';' || rec_unit_dtls.s_adv_stnd_type || ';' ||
7394 rec_unit_dtls.unit_cd || ';' || rec_unit_dtls.version_number || ';' ||
7395 rec_unit_dtls.exemption_institution_cd || ';' || rec_unit_dtls.unit_details_id || ';' ||
7396 rec_unit_dtls.tst_rslt_dtls_id
7397 );
7398 END IF;
7399 --
7400 IF (v_transfer_type = 'REVERSE_TRANSFER') THEN
7401 --
7402 -- Get the destination advanced standing unit details
7403 --
7404 OPEN cur_dest_unit_dtls (
7405 p_person_id,
7406 p_course_cd_new,
7407 p_version_number_new,
7408 rec_unit_dtls.s_adv_stnd_type,
7409 rec_unit_dtls.unit_cd,
7410 rec_unit_dtls.version_number,
7411 rec_unit_dtls.exemption_institution_cd,
7412 rec_unit_dtls.unit_details_id,
7413 rec_unit_dtls.tst_rslt_dtls_id
7414 );
7415 FETCH cur_dest_unit_dtls INTO rec_dest_unit_dtls;
7416 IF (cur_dest_unit_dtls%FOUND) THEN
7417 rec_dest_unit_dtls_found := TRUE;
7418 ELSE
7419 rec_dest_unit_dtls_found := FALSE;
7420 END IF;
7421 CLOSE cur_dest_unit_dtls;
7422 --
7423 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7424 fnd_log.string (
7425 fnd_log.level_statement,
7426 g_module_head || 'adv_stand_trans.dest_unit_dtls_found',
7427 rec_dest_unit_dtls.s_adv_stnd_granting_status
7428 );
7429 END IF;
7430 --
7431 END IF;
7432 --
7433 IF ((v_transfer_type = 'NORMAL_TRANSFER') OR
7434 ((v_transfer_type = 'REVERSE_TRANSFER') AND
7435 NOT (rec_dest_unit_dtls_found))) THEN
7436 --
7437 BEGIN
7438 l_rowid2 := NULL;
7439 l_av_stnd_unit_id := rec_unit_dtls.av_stnd_unit_id;
7440 igs_av_stnd_unit_pkg.insert_row (
7441 x_mode => 'R',
7442 x_rowid => l_rowid2,
7443 x_person_id => p_person_id,
7444 x_as_course_cd => p_course_cd_new,
7445 x_as_version_number => p_version_number_new,
7446 x_s_adv_stnd_type => rec_unit_dtls.s_adv_stnd_type,
7447 x_unit_cd => rec_unit_dtls.unit_cd,
7448 x_version_number => rec_unit_dtls.version_number,
7449 x_s_adv_stnd_granting_status => rec_unit_dtls.s_adv_stnd_granting_status,
7450 x_credit_percentage => NULL,
7451 x_s_adv_stnd_recognition_type => rec_unit_dtls.s_adv_stnd_recognition_type,
7452 x_approved_dt => rec_unit_dtls.approved_dt,
7453 x_authorising_person_id => rec_unit_dtls.authorising_person_id,
7454 x_crs_group_ind => rec_unit_dtls.crs_group_ind,
7455 x_exemption_institution_cd => rec_unit_dtls.exemption_institution_cd,
7456 x_granted_dt => rec_unit_dtls.granted_dt,
7457 x_expiry_dt => rec_unit_dtls.expiry_dt,
7458 x_cancelled_dt => rec_unit_dtls.cancelled_dt,
7459 x_revoked_dt => rec_unit_dtls.revoked_dt,
7460 x_comments => rec_unit_dtls.comments,
7461 x_av_stnd_unit_id => rec_unit_dtls.av_stnd_unit_id,
7462 x_cal_type => rec_unit_dtls.cal_type,
7463 x_ci_sequence_number => rec_unit_dtls.ci_sequence_number,
7464 x_institution_cd => rec_unit_dtls.institution_cd,
7465 x_unit_details_id => rec_unit_dtls.unit_details_id,
7466 x_tst_rslt_dtls_id => rec_unit_dtls.tst_rslt_dtls_id,
7467 x_grading_schema_cd => rec_unit_dtls.grading_schema_cd,
7468 x_grd_sch_version_number => rec_unit_dtls.grd_sch_version_number,
7469 x_grade => rec_unit_dtls.grade,
7470 x_achievable_credit_points => rec_unit_dtls.achievable_credit_points,
7471 x_org_id => l_org_id,
7472 x_adv_stnd_trans => 'Y'
7473 );
7474 EXCEPTION
7475 WHEN OTHERS THEN
7476 --
7477 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7478 fnd_log.string (
7479 fnd_log.level_exception,
7480 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_pkg_insert_exception',
7481 'Error:' || SQLERRM
7482 );
7483 END IF;
7484 RAISE;
7485 END;
7486 --
7487 -- Inserting the Basis Details of the Unit.
7488 --
7489 OPEN cur_unit_bas_dtls (l_av_stnd_unit_id);
7490 FETCH cur_unit_bas_dtls INTO rec_unit_bas_dtls;
7491 IF cur_unit_bas_dtls%FOUND THEN
7492 BEGIN
7493 l_rowid3 := NULL;
7494 igs_av_std_unt_basis_pkg.insert_row (
7495 x_mode => 'R',
7496 x_rowid => l_rowid3,
7497 x_av_stnd_unit_id => rec_unit_dtls.av_stnd_unit_id,
7498 x_basis_course_type => rec_unit_bas_dtls.basis_course_type,
7499 x_basis_year => rec_unit_bas_dtls.basis_year,
7500 x_basis_completion_ind => rec_unit_bas_dtls.basis_completion_ind,
7501 x_org_id => l_org_id
7502 );
7503 EXCEPTION
7504 WHEN OTHERS THEN
7505 --
7506 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7507 fnd_log.string (
7508 fnd_log.level_exception,
7509 g_module_head || 'adv_stand_trans.igs_av_std_unt_basis_pkg_insert_exception',
7510 'Error:' || SQLERRM
7511 );
7512 END IF;
7513 RAISE;
7514 END;
7515 END IF;
7516 CLOSE cur_unit_bas_dtls;
7517 --
7518 -- Processing Alternate Units.
7519 --
7520 IF rec_unit_dtls.s_adv_stnd_recognition_type = 'PRECLUSION' THEN
7521 FOR rec_alt_unit_dtls IN cur_alt_unit_dtls (l_av_stnd_unit_id) LOOP
7522 BEGIN
7523 l_rowid4 := NULL;
7524 igs_av_stnd_alt_unit_pkg.insert_row (
7525 x_mode => 'R',
7526 x_rowid => l_rowid4,
7527 x_av_stnd_unit_id => rec_unit_dtls.av_stnd_unit_id,
7528 x_alt_unit_cd => rec_alt_unit_dtls.alt_unit_cd,
7529 x_alt_version_number => rec_alt_unit_dtls.alt_version_number,
7530 x_optional_ind => rec_alt_unit_dtls.optional_ind
7531 );
7532 EXCEPTION
7533 WHEN OTHERS THEN
7534 --
7535 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7536 fnd_log.string (
7537 fnd_log.level_exception,
7538 g_module_head || 'adv_stand_trans.igs_av_stnd_alt_unit_pkg_insert_exception',
7539 'Error:' || SQLERRM
7540 );
7541 END IF;
7542 RAISE;
7543 END;
7544 END LOOP;
7545 END IF;
7546 ELSIF ((v_transfer_type = 'REVERSE_TRANSFER') AND
7547 (rec_dest_unit_dtls_found) AND
7548 (rec_dest_unit_dtls.s_adv_stnd_granting_status = 'TRANSFERRED')) THEN
7549 BEGIN
7550 igs_av_stnd_unit_pkg.update_row (
7551 x_mode => 'R',
7552 x_rowid => rec_dest_unit_dtls.ROWID,
7553 x_person_id => rec_dest_unit_dtls.person_id,
7554 x_as_course_cd => rec_dest_unit_dtls.as_course_cd,
7555 x_as_version_number => rec_dest_unit_dtls.as_version_number,
7556 x_s_adv_stnd_type => rec_dest_unit_dtls.s_adv_stnd_type,
7557 x_unit_cd => rec_dest_unit_dtls.unit_cd,
7558 x_version_number => rec_dest_unit_dtls.version_number,
7559 x_s_adv_stnd_granting_status => rec_unit_dtls.s_adv_stnd_granting_status,
7560 x_credit_percentage => NULL,
7561 x_s_adv_stnd_recognition_type => rec_dest_unit_dtls.s_adv_stnd_recognition_type,
7562 x_approved_dt => rec_dest_unit_dtls.approved_dt,
7563 x_authorising_person_id => rec_dest_unit_dtls.authorising_person_id,
7564 x_crs_group_ind => rec_dest_unit_dtls.crs_group_ind,
7565 x_exemption_institution_cd => rec_dest_unit_dtls.exemption_institution_cd,
7566 x_granted_dt => rec_dest_unit_dtls.granted_dt,
7567 x_expiry_dt => rec_dest_unit_dtls.expiry_dt,
7568 x_cancelled_dt => rec_dest_unit_dtls.cancelled_dt,
7569 x_revoked_dt => rec_dest_unit_dtls.revoked_dt,
7570 x_comments => rec_dest_unit_dtls.comments,
7571 x_av_stnd_unit_id => rec_dest_unit_dtls.av_stnd_unit_id,
7572 x_cal_type => rec_dest_unit_dtls.cal_type,
7573 x_ci_sequence_number => rec_dest_unit_dtls.ci_sequence_number,
7574 x_institution_cd => rec_dest_unit_dtls.institution_cd,
7575 x_unit_details_id => rec_dest_unit_dtls.unit_details_id,
7576 x_tst_rslt_dtls_id => rec_dest_unit_dtls.tst_rslt_dtls_id,
7577 x_grading_schema_cd => rec_dest_unit_dtls.grading_schema_cd,
7578 x_grd_sch_version_number => rec_dest_unit_dtls.grd_sch_version_number,
7579 x_grade => rec_dest_unit_dtls.grade,
7580 x_achievable_credit_points => rec_dest_unit_dtls.achievable_credit_points
7581 );
7582 EXCEPTION
7583 WHEN OTHERS THEN
7584 --
7585 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7586 fnd_log.string (
7587 fnd_log.level_exception,
7588 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_pkg_dest_update_exception',
7589 'Error:' || SQLERRM
7590 );
7591 END IF;
7592 RAISE;
7593 END;
7594 ELSIF ((v_transfer_type = 'REVERSE_TRANSFER') AND
7595 (rec_dest_unit_dtls_found) AND
7596 (rec_dest_unit_dtls.s_adv_stnd_granting_status <> 'TRANSFERRED')) THEN
7597 p_message_name := 'IGS_EN_STDNT_ADV_STND_EXIST';
7598 v_unt_transfer_flag := 'N';
7599 END IF;
7600 BEGIN
7601 IF (v_unt_transfer_flag = 'Y') THEN
7602 igs_av_stnd_unit_pkg.update_row (
7603 x_mode => 'R',
7604 x_rowid => rec_unit_dtls.ROWID,
7605 x_person_id => rec_unit_dtls.person_id,
7606 x_as_course_cd => rec_unit_dtls.as_course_cd,
7607 x_as_version_number => rec_unit_dtls.as_version_number,
7608 x_s_adv_stnd_type => rec_unit_dtls.s_adv_stnd_type,
7609 x_unit_cd => rec_unit_dtls.unit_cd,
7610 x_version_number => rec_unit_dtls.version_number,
7611 x_s_adv_stnd_granting_status => 'TRANSFERRED',
7612 x_credit_percentage => NULL,
7613 x_s_adv_stnd_recognition_type => rec_unit_dtls.s_adv_stnd_recognition_type,
7614 x_approved_dt => rec_unit_dtls.approved_dt,
7615 x_authorising_person_id => rec_unit_dtls.authorising_person_id,
7616 x_crs_group_ind => rec_unit_dtls.crs_group_ind,
7617 x_exemption_institution_cd => rec_unit_dtls.exemption_institution_cd,
7618 x_granted_dt => rec_unit_dtls.granted_dt,
7619 x_expiry_dt => rec_unit_dtls.expiry_dt,
7620 x_cancelled_dt => rec_unit_dtls.cancelled_dt,
7621 x_revoked_dt => rec_unit_dtls.revoked_dt,
7622 x_comments => rec_unit_dtls.comments,
7623 x_av_stnd_unit_id => rec_unit_dtls.av_stnd_unit_id,
7624 x_cal_type => rec_unit_dtls.cal_type,
7625 x_ci_sequence_number => rec_unit_dtls.ci_sequence_number,
7626 x_institution_cd => rec_unit_dtls.institution_cd,
7627 x_unit_details_id => rec_unit_dtls.unit_details_id,
7628 x_tst_rslt_dtls_id => rec_unit_dtls.tst_rslt_dtls_id,
7629 x_grading_schema_cd => rec_unit_dtls.grading_schema_cd,
7630 x_grd_sch_version_number => rec_unit_dtls.grd_sch_version_number,
7631 x_grade => rec_unit_dtls.grade,
7632 x_achievable_credit_points => rec_unit_dtls.achievable_credit_points
7633 );
7634 END IF;
7635 EXCEPTION
7636 WHEN OTHERS THEN
7637 --
7638 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7639 fnd_log.string (
7640 fnd_log.level_exception,
7641 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_pkg_src_update_exception',
7642 'Error:' || SQLERRM
7643 );
7644 END IF;
7645 RAISE;
7646 END;
7647 v_unt_transfer_flag := 'Y';
7648 END LOOP;
7649 --
7650 -- Processing for Unit Level Details.
7651 --
7652 FOR rec_unit_lvl_dtls IN cur_unit_lvl_dtls (
7653 p_person_id,
7654 p_course_cd,
7655 p_version_number,
7656 rec_adv_stnd.exemption_institution_cd
7657 ) LOOP
7658 --
7659 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7660 fnd_log.string (
7661 fnd_log.level_statement,
7662 g_module_head || 'adv_stand_trans.cur_unit_lvl_dtls',
7663 rec_unit_lvl_dtls.person_id || ';' || rec_unit_lvl_dtls.as_course_cd || ';' ||
7664 rec_unit_lvl_dtls.as_version_number || ';' || rec_unit_lvl_dtls.s_adv_stnd_type || ';' ||
7665 rec_unit_lvl_dtls.unit_level || ';' || rec_unit_lvl_dtls.crs_group_ind || ';' ||
7666 rec_unit_lvl_dtls.exemption_institution_cd || ';' || rec_unit_lvl_dtls.unit_details_id || ';' ||
7667 rec_unit_lvl_dtls.tst_rslt_dtls_id || ';' || rec_unit_lvl_dtls.qual_dets_id
7668 );
7669 END IF;
7670 --
7671 IF (v_transfer_type = 'REVERSE_TRANSFER') THEN
7672 --
7673 -- Get the destination advanced standing unit details
7674 --
7675 OPEN cur_dest_unit_lvl_dtls (
7676 p_person_id,
7677 p_course_cd_new,
7678 p_version_number_new,
7679 rec_unit_lvl_dtls.s_adv_stnd_type,
7680 rec_unit_lvl_dtls.unit_level,
7681 rec_unit_lvl_dtls.crs_group_ind,
7682 rec_unit_lvl_dtls.exemption_institution_cd,
7683 rec_unit_lvl_dtls.unit_details_id,
7684 rec_unit_lvl_dtls.tst_rslt_dtls_id,
7685 rec_unit_lvl_dtls.qual_dets_id
7686 );
7687 FETCH cur_dest_unit_lvl_dtls INTO rec_dest_unit_lvl_dtls;
7688 IF (cur_dest_unit_lvl_dtls%FOUND) THEN
7689 rec_dest_unit_lvl_dtls_found := TRUE;
7690 ELSE
7691 rec_dest_unit_lvl_dtls_found := FALSE;
7692 END IF;
7693 CLOSE cur_dest_unit_lvl_dtls;
7694 --
7695 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7696 fnd_log.string (
7697 fnd_log.level_statement,
7698 g_module_head || 'adv_stand_trans.dest_unit_lvl_dtls_found',
7699 rec_dest_unit_lvl_dtls.s_adv_stnd_granting_status
7700 );
7701 END IF;
7702 --
7703 END IF;
7704 --
7705 IF ((v_transfer_type = 'NORMAL_TRANSFER') OR
7706 ((v_transfer_type = 'REVERSE_TRANSFER') AND
7707 NOT (rec_dest_unit_lvl_dtls_found))) THEN
7708 BEGIN
7709 l_rowid5 := NULL;
7710 l_av_stnd_unit_lvl_id := rec_unit_lvl_dtls.av_stnd_unit_lvl_id;
7711 igs_av_stnd_unit_lvl_pkg.insert_row (
7712 x_mode => 'R',
7713 x_rowid => l_rowid5,
7714 x_person_id => p_person_id,
7715 x_as_course_cd => p_course_cd_new,
7716 x_as_version_number => p_version_number_new,
7717 x_s_adv_stnd_type => rec_unit_lvl_dtls.s_adv_stnd_type,
7718 x_unit_level => rec_unit_lvl_dtls.unit_level,
7719 x_crs_group_ind => rec_unit_lvl_dtls.crs_group_ind,
7720 x_exemption_institution_cd => rec_unit_lvl_dtls.exemption_institution_cd,
7721 x_s_adv_stnd_granting_status => rec_unit_lvl_dtls.s_adv_stnd_granting_status,
7722 x_credit_points => rec_unit_lvl_dtls.credit_points,
7723 x_approved_dt => rec_unit_lvl_dtls.approved_dt,
7724 x_authorising_person_id => rec_unit_lvl_dtls.authorising_person_id,
7725 x_granted_dt => rec_unit_lvl_dtls.granted_dt,
7726 x_expiry_dt => rec_unit_lvl_dtls.expiry_dt,
7727 x_cancelled_dt => rec_unit_lvl_dtls.cancelled_dt,
7728 x_revoked_dt => rec_unit_lvl_dtls.revoked_dt,
7729 x_comments => rec_unit_lvl_dtls.comments,
7730 x_av_stnd_unit_lvl_id => rec_unit_lvl_dtls.av_stnd_unit_lvl_id,
7731 x_cal_type => rec_unit_lvl_dtls.cal_type,
7732 x_ci_sequence_number => rec_unit_lvl_dtls.ci_sequence_number,
7733 x_institution_cd => rec_unit_lvl_dtls.institution_cd,
7734 x_unit_details_id => rec_unit_lvl_dtls.unit_details_id,
7735 x_tst_rslt_dtls_id => rec_unit_lvl_dtls.tst_rslt_dtls_id,
7736 x_org_id => l_org_id,
7737 x_adv_stnd_trans => 'Y',
7738 x_qual_dets_id => rec_unit_lvl_dtls.qual_dets_id
7739 );
7740 EXCEPTION
7741 WHEN OTHERS THEN
7742 --
7743 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7744 fnd_log.string (
7745 fnd_log.level_exception,
7746 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_lvl_pkg_insert_exception',
7747 'Error:' || SQLERRM
7748 );
7749 END IF;
7750 RAISE;
7751 END;
7752 --
7753 -- Inserting the Basis Details of the Unit Level.
7754 --
7755 OPEN cur_unit_lvl_bas_dtls (l_av_stnd_unit_lvl_id);
7756 FETCH cur_unit_lvl_bas_dtls INTO rec_unit_lvl_bas_dtls;
7757 IF cur_unit_lvl_bas_dtls%FOUND THEN
7758 BEGIN
7759 l_rowid6 := NULL;
7760 -- commented the bellow columns as part of AVCR001- Advanced standing dld obsolated these columns,bug 1960126
7761 igs_av_std_ulvlbasis_pkg.insert_row (
7762 x_mode => 'R',
7763 x_rowid => l_rowid6,
7764 x_av_stnd_unit_lvl_id => rec_unit_lvl_dtls.av_stnd_unit_lvl_id,
7765 x_basis_course_type => rec_unit_lvl_bas_dtls.basis_course_type,
7766 x_basis_year => rec_unit_lvl_bas_dtls.basis_year,
7767 x_basis_completion_ind => rec_unit_lvl_bas_dtls.basis_completion_ind,
7768 x_org_id => l_org_id
7769 );
7770 EXCEPTION
7771 WHEN OTHERS THEN
7772 --
7773 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7774 fnd_log.string (
7775 fnd_log.level_exception,
7776 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_lvl_pkg_insert_exception',
7777 'Error:' || SQLERRM
7778 );
7779 END IF;
7780 RAISE;
7781 END;
7782 END IF;
7783 CLOSE cur_unit_lvl_bas_dtls;
7784 ELSIF ((v_transfer_type = 'REVERSE_TRANSFER') AND
7785 (rec_dest_unit_lvl_dtls_found) AND
7786 (rec_dest_unit_lvl_dtls.s_adv_stnd_granting_status = 'TRANSFERRED')) THEN
7787 BEGIN
7788 igs_av_stnd_unit_lvl_pkg.update_row (
7789 x_mode => 'R',
7790 x_rowid => rec_dest_unit_lvl_dtls.ROWID,
7791 x_person_id => rec_dest_unit_lvl_dtls.person_id,
7792 x_as_course_cd => rec_dest_unit_lvl_dtls.as_course_cd,
7793 x_as_version_number => rec_dest_unit_lvl_dtls.as_version_number,
7794 x_s_adv_stnd_type => rec_dest_unit_lvl_dtls.s_adv_stnd_type,
7795 x_unit_level => rec_dest_unit_lvl_dtls.unit_level,
7796 x_crs_group_ind => rec_dest_unit_lvl_dtls.crs_group_ind,
7797 x_exemption_institution_cd => rec_dest_unit_lvl_dtls.exemption_institution_cd,
7798 x_s_adv_stnd_granting_status => rec_unit_lvl_dtls.s_adv_stnd_granting_status,
7799 x_credit_points => rec_dest_unit_lvl_dtls.credit_points,
7800 x_approved_dt => rec_dest_unit_lvl_dtls.approved_dt,
7801 x_authorising_person_id => rec_dest_unit_lvl_dtls.authorising_person_id,
7802 x_granted_dt => rec_dest_unit_lvl_dtls.granted_dt,
7803 x_expiry_dt => rec_dest_unit_lvl_dtls.expiry_dt,
7804 x_cancelled_dt => rec_dest_unit_lvl_dtls.cancelled_dt,
7805 x_revoked_dt => rec_dest_unit_lvl_dtls.revoked_dt,
7806 x_comments => rec_dest_unit_lvl_dtls.comments,
7807 x_av_stnd_unit_lvl_id => rec_dest_unit_lvl_dtls.av_stnd_unit_lvl_id,
7808 x_cal_type => rec_dest_unit_lvl_dtls.cal_type,
7809 x_ci_sequence_number => rec_dest_unit_lvl_dtls.ci_sequence_number,
7810 x_institution_cd => rec_dest_unit_lvl_dtls.institution_cd,
7811 x_unit_details_id => rec_dest_unit_lvl_dtls.unit_details_id,
7812 x_tst_rslt_dtls_id => rec_dest_unit_lvl_dtls.tst_rslt_dtls_id,
7813 x_qual_dets_id => rec_dest_unit_lvl_dtls.qual_dets_id
7814 );
7815 EXCEPTION
7816 WHEN OTHERS THEN
7817 --
7818 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7819 fnd_log.string (
7820 fnd_log.level_exception,
7821 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_lvl_pkg_dest_update_exception',
7822 'Error:' || SQLERRM
7823 );
7824 END IF;
7825 RAISE;
7826 END;
7827 ELSIF ((v_transfer_type = 'REVERSE_TRANSFER') AND
7828 (rec_dest_unit_lvl_dtls_found) AND
7829 (rec_dest_unit_lvl_dtls.s_adv_stnd_granting_status <> 'TRANSFERRED')) THEN
7830 p_message_name := 'IGS_EN_STDNT_ADV_STND_EXIST';
7831 v_unt_lvl_transfer_flag := 'N';
7832 END IF;
7833 BEGIN
7834 IF (v_unt_lvl_transfer_flag = 'Y') THEN
7835 igs_av_stnd_unit_lvl_pkg.update_row (
7836 x_mode => 'R',
7837 x_rowid => rec_unit_lvl_dtls.ROWID,
7838 x_person_id => rec_unit_lvl_dtls.person_id,
7839 x_as_course_cd => rec_unit_lvl_dtls.as_course_cd,
7840 x_as_version_number => rec_unit_lvl_dtls.as_version_number,
7841 x_s_adv_stnd_type => rec_unit_lvl_dtls.s_adv_stnd_type,
7842 x_unit_level => rec_unit_lvl_dtls.unit_level,
7843 x_crs_group_ind => rec_unit_lvl_dtls.crs_group_ind,
7844 x_exemption_institution_cd => rec_unit_lvl_dtls.exemption_institution_cd,
7845 x_s_adv_stnd_granting_status => 'TRANSFERRED',
7846 x_credit_points => rec_unit_lvl_dtls.credit_points,
7847 x_approved_dt => rec_unit_lvl_dtls.approved_dt,
7848 x_authorising_person_id => rec_unit_lvl_dtls.authorising_person_id,
7849 x_granted_dt => rec_unit_lvl_dtls.granted_dt,
7850 x_expiry_dt => rec_unit_lvl_dtls.expiry_dt,
7851 x_cancelled_dt => rec_unit_lvl_dtls.cancelled_dt,
7852 x_revoked_dt => rec_unit_lvl_dtls.revoked_dt,
7853 x_comments => rec_unit_lvl_dtls.comments,
7854 x_av_stnd_unit_lvl_id => rec_unit_lvl_dtls.av_stnd_unit_lvl_id,
7855 x_cal_type => rec_unit_lvl_dtls.cal_type,
7856 x_ci_sequence_number => rec_unit_lvl_dtls.ci_sequence_number,
7857 x_institution_cd => rec_unit_lvl_dtls.institution_cd,
7858 x_unit_details_id => rec_unit_lvl_dtls.unit_details_id,
7859 x_tst_rslt_dtls_id => rec_unit_lvl_dtls.tst_rslt_dtls_id,
7860 x_qual_dets_id => rec_unit_lvl_dtls.qual_dets_id
7861 );
7862 END IF;
7863 EXCEPTION
7864 WHEN OTHERS THEN
7865 --
7866 IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level) THEN
7867 fnd_log.string (
7868 fnd_log.level_exception,
7869 g_module_head || 'adv_stand_trans.igs_av_stnd_unit_lvl_pkg_src_update_exception',
7870 'Error:' || SQLERRM
7871 );
7872 END IF;
7873 RAISE;
7874 END;
7875 v_unt_lvl_transfer_flag := 'Y';
7876 END LOOP;
7877 END LOOP;
7878 END adv_stand_trans;
7879
7880 PROCEDURE enrp_ins_sca_ukstat_trnsfr ( p_person_id IN NUMBER,
7881 p_source_course_cd IN VARCHAR2,
7882 p_destination_course_cd IN VARCHAR2,
7883 p_message_name OUT NOCOPY VARCHAR2
7884 ) IS
7885 ------------------------------------------------------------------------------------------------
7886 --Created by : Nalin Kumar, Oracle India
7887 --Date created: 28-Jan-2002
7888 --
7889 --Purpose: This procedure has been created as per the HESA Integration DLD. Bug# 2201753
7890 --
7891 --
7892 --Known limitations/enhancements and/or remarks:
7893 --
7894 --Change History:
7895 --Who When What
7896 ------------------------------------------------------------------------------------------------
7897 l_status NUMBER(3) ;
7898
7899 BEGIN
7900
7901 --
7902 --Get the OSS_COUNTRY_CODE
7903 --
7904 IF fnd_profile.value('OSS_COUNTRY_CODE') = 'GB' THEN
7905 l_status := NULL;
7906 IGS_HE_PROG_TRANSFER_PKG.HESA_STUD_STAT_TRANS(
7907 p_person_id => p_person_id,
7908 p_old_course_cd => p_source_course_cd,
7909 p_new_course_cd => p_destination_course_cd,
7910 p_status => l_status,
7911 p_message_name => p_message_name);
7912
7913 IF NVL(l_Status,0) = 2 THEN -- ie. The procedure call has resulted in error.
7914 Fnd_Message.Set_Name('IGS', p_message_name);
7915 IGS_GE_MSG_STACK.ADD;
7916 App_Exception.Raise_Exception;
7917 END IF;
7918 END IF;
7919
7920 EXCEPTION
7921 WHEN OTHERS THEN
7922 NULL;
7923 END enrp_ins_sca_ukstat_trnsfr;
7924
7925
7926 FUNCTION create_stream_unit_sets(
7927 p_person_id IN NUMBER,
7928 p_course_cd IN VARCHAR2,
7929 p_new_admin_unit_set IN VARCHAR2,
7930 p_selection_dt IN DATE,
7931 p_confirmed_ind IN VARCHAR2,
7932 p_log_creation_dt IN DATE,
7933 p_message_name OUT NOCOPY VARCHAR2
7934 ) RETURN BOOLEAN AS
7935
7936 ------------------------------------------------------------------------------------------------
7937 --Change History:
7938 --Who When What
7939 --bdeviset 29-JUL-2004 Added p_log_creation_dt as parameter.Before calling IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW/INSERT_ROW
7940 -- a check is made to see that their is no overlapping of selection,completion and
7941 -- end dates for any two unit sets by calling check_usa_overlap.If it returns
7942 -- false log entry is made and the insert or update is not carried out for bug 3149133.
7943 ------------------------------------------------------------------------------------------------
7944 CURSOR c_acad_us (cp_new_admin_unit_Set_cd IGS_AS_SU_SETATMPT.UNIT_SET_CD%TYPE) IS
7945 SELECT usm.stream_unit_set_Cd
7946 FROM igs_en_unit_set_map usm,
7947 igs_ps_us_prenr_cfg upc
7948 WHERE upc.unit_set_cd = cp_new_admin_unit_set_cd
7949 AND usm.mapping_set_cd = upc.mapping_set_cd
7950 AND usm.sequence_no = upc.sequence_no;
7951
7952 CURSOR c_us_version_number(cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
7953 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE,
7954 cp_unit_set_cd igs_en_unit_set.unit_set_cd%TYPE) IS
7955 SELECT coous.us_version_number
7956 FROM igs_en_unit_set_stat uss, igs_ps_ofr_opt_unit_set_v coous, igs_en_stdnt_ps_att sca
7957 WHERE sca.person_id = cp_person_id AND
7958 sca.course_cd = cp_course_cd AND
7959 sca.coo_id = coous.coo_id AND
7960 coous.unit_set_cd = cp_unit_set_cd AND
7961 coous.expiry_dt IS NULL AND
7962 coous.unit_set_status = uss.unit_set_status AND
7963 uss.s_unit_set_status = 'ACTIVE' ;
7964
7965 CURSOR c_susa_exists (cp_stream_unit_Set_cd IGS_AS_SU_SETATMPT.UNIT_SET_CD%TYPE,
7966 cp_us_version_number IGS_AS_SU_SETATMPT.US_VERSION_NUMBER%TYPE,
7967 cp_person_id IGS_AS_SU_SETATMPT.PERSON_ID%TYPE,
7968 cp_course_cd IGS_AS_SU_SETATMPT.COURSE_CD%TYPE) IS
7969 SELECT susa.*, susa.rowid
7970 FROM igs_as_su_setatmpt susa
7971 WHERE susa.unit_set_cd = cp_stream_unit_set_cd
7972 AND susa.us_version_number = cp_us_version_number
7973 AND susa.person_id = cp_person_id
7974 AND susa.course_cd = cp_course_cd
7975 AND susa.end_dt IS NULL
7976 ORDER BY susa.selection_dt desc;
7977
7978 vc_susa_upd_rec c_susa_exists%ROWTYPE;
7979 v_us_version_number igs_en_unit_set.version_number%TYPE;
7980 v_selection_dt igs_as_su_setatmpt.selection_dt%TYPE;
7981 vl_sequence_val igs_as_su_setatmpt.SEQUENCE_NUMBER%TYPE;
7982 vl_rowid VARCHAR2(25);
7983 v_confirmed_ind igs_as_su_setatmpt.student_confirmed_ind%TYPE;
7984 p_warn_level varchar2(5);
7985 cst_pre_enrol CONSTANT VARCHAR2(10) := 'PRE-ENROL';
7986 cst_error CONSTANT VARCHAR2(5) := 'ERROR';
7987
7988 BEGIN
7989
7990 FOR vc_acad_us_rec in c_acad_us(p_new_admin_unit_set) LOOP
7991
7992 OPEN c_us_version_number ( p_person_id, p_course_cd, vc_acad_us_rec.stream_unit_set_cd);
7993 FETCH c_us_version_number INTO v_us_version_number;
7994
7995 IF c_us_version_number%FOUND THEN
7996
7997 OPEN c_susa_exists(vc_acad_us_rec.stream_unit_set_cd,
7998 v_us_version_number,
7999 p_person_id,
8000 p_course_cd);
8001 FETCH c_susa_exists INTO vc_susa_upd_rec;
8002
8003 v_confirmed_ind := NVL(p_confirmed_ind,'N');
8004 IF v_confirmed_ind = 'Y' THEN
8005 v_selection_dt := NVL(p_selection_dt,SYSDATE) ;
8006 ELSE
8007 v_selection_dt := NULL;
8008 END IF;
8009
8010 IF c_susa_exists%NOTFOUND THEN
8011
8012 SELECT IGS_AS_SU_SETATMPT_SEQ_NUM_S.NEXTVAL INTO vl_sequence_val FROM dual;
8013
8014 IF igs_en_gen_legacy.check_usa_overlap(
8015 p_person_id,
8016 p_course_cd,
8017 TRUNC(v_selection_dt),
8018 NULL,
8019 NULL,
8020 vl_sequence_val,
8021 vc_acad_us_rec.stream_unit_set_cd,
8022 v_us_version_number,
8023 p_message_name) = FALSE THEN
8024
8025 p_warn_level := cst_error;
8026 IF p_log_creation_dt IS NOT NULL THEN
8027 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
8028 cst_pre_enrol,
8029 p_log_creation_dt,
8030 cst_error || ',' ||
8031 TO_CHAR(p_person_id) || ',' ||
8032 p_course_cd,
8033 p_message_name,
8034 NULL);
8035 END IF;
8036 RETURN FALSE;
8037 END IF ;
8038
8039 IGS_AS_SU_SETATMPT_PKG.INSERT_ROW (
8040 X_ROWID => vl_rowid,
8041 X_PERSON_ID => p_person_id ,
8042 X_COURSE_CD => p_course_cd ,
8043 X_UNIT_SET_CD => vc_acad_us_rec.stream_unit_set_cd ,
8044 X_SEQUENCE_NUMBER => vl_sequence_val ,
8045 X_US_VERSION_NUMBER => v_us_version_number,
8046 X_SELECTION_DT => TRUNC(v_selection_dt) ,
8047 X_STUDENT_CONFIRMED_IND => v_confirmed_ind ,
8048 X_END_DT => NULL ,
8049 X_PARENT_UNIT_SET_CD => NULL,
8050 X_PARENT_SEQUENCE_NUMBER => NULL ,
8051 X_PRIMARY_SET_IND => NULL ,
8052 X_VOLUNTARY_END_IND => NULL ,
8053 X_AUTHORISED_PERSON_ID => NULL ,
8054 X_AUTHORISED_ON => NULL ,
8055 X_OVERRIDE_TITLE => NULL ,
8056 X_RQRMNTS_COMPLETE_IND => NULL ,
8057 X_RQRMNTS_COMPLETE_DT => NULL,
8058 X_S_COMPLETED_SOURCE_TYPE => NULL,
8059 X_CATALOG_CAL_TYPE => NULL ,
8060 X_CATALOG_SEQ_NUM => NULL,
8061 X_ATTRIBUTE_CATEGORY => NULL,
8062 X_ATTRIBUTE1 => NULL,
8063 X_ATTRIBUTE2 => NULL,
8064 X_ATTRIBUTE3 => NULL,
8065 X_ATTRIBUTE4 => NULL,
8066 X_ATTRIBUTE5 => NULL,
8067 X_ATTRIBUTE6 => NULL,
8068 X_ATTRIBUTE7 => NULL,
8069 X_ATTRIBUTE8 => NULL,
8070 X_ATTRIBUTE9 => NULL,
8071 X_ATTRIBUTE10 => NULL,
8072 X_ATTRIBUTE11 => NULL,
8073 X_ATTRIBUTE12 => NULL,
8074 X_ATTRIBUTE13 => NULL,
8075 X_ATTRIBUTE14 => NULL,
8076 X_ATTRIBUTE15 => NULL,
8077 X_ATTRIBUTE16 => NULL,
8078 X_ATTRIBUTE17 => NULL,
8079 X_ATTRIBUTE18 => NULL,
8080 X_ATTRIBUTE19 => NULL,
8081 X_ATTRIBUTE20 => NULL,
8082 X_MODE => 'R'
8083 );
8084 ELSIF c_susa_exists%FOUND THEN
8085
8086 IF v_confirmed_ind = 'N' AND vc_susa_upd_rec.student_confirmed_ind = 'Y' THEN
8087 v_confirmed_ind := vc_susa_upd_rec.student_confirmed_ind ;
8088 END IF;
8089
8090 IF v_confirmed_ind = 'N' THEN
8091 v_selection_dt := NULL;
8092 ELSE
8093 IF v_selection_dt IS NOT NULL AND vc_susa_upd_rec.selection_dt < v_selection_dt THEN
8094 v_selection_dt := vc_susa_upd_rec.selection_dt;
8095 END IF;
8096 v_selection_dt := NVL(v_selection_dt,vc_susa_upd_rec.selection_dt);
8097 END IF;
8098
8099 IF NVL(v_selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00') )
8100 <> NVL(vc_susa_upd_rec.selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8101 OR v_confirmed_ind <> vc_susa_upd_rec.student_confirmed_ind
8102 THEN
8103
8104 IF igs_en_gen_legacy.check_usa_overlap(
8105 vc_susa_upd_rec.person_id,
8106 vc_susa_upd_rec.course_cd,
8107 TRUNC(v_selection_dt),
8108 vc_susa_upd_rec.rqrmnts_complete_dt,
8109 vc_susa_upd_rec.end_dt,
8110 vc_susa_upd_rec.sequence_number,
8111 vc_susa_upd_rec.unit_set_cd,
8112 vc_susa_upd_rec.us_version_number,
8113 p_message_name) = FALSE THEN
8114
8115 p_warn_level := cst_error;
8116 IF p_log_creation_dt IS NOT NULL THEN
8117 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
8118 cst_pre_enrol,
8119 p_log_creation_dt,
8120 cst_error || ',' ||
8121 TO_CHAR(p_person_id) || ',' ||
8122 p_course_cd,
8123 p_message_name,
8124 NULL);
8125 END IF;
8126 RETURN FALSE;
8127 END IF ;
8128
8129 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
8130 X_ROWID => vc_susa_upd_rec.rowid,
8131 X_PERSON_ID => vc_susa_upd_rec.person_id ,
8132 X_COURSE_CD => vc_susa_upd_rec.course_cd ,
8133 X_UNIT_SET_CD => vc_susa_upd_rec.unit_set_cd ,
8134 X_SEQUENCE_NUMBER => vc_susa_upd_rec.sequence_number ,
8135 X_US_VERSION_NUMBER => vc_susa_upd_rec.us_version_number,
8136 X_SELECTION_DT => TRUNC(v_selection_dt) ,
8137 X_STUDENT_CONFIRMED_IND => v_confirmed_ind,
8138 X_END_DT => vc_susa_upd_rec.end_dt ,
8139 X_PARENT_UNIT_SET_CD => vc_susa_upd_rec.parent_unit_set_cd,
8140 X_PARENT_SEQUENCE_NUMBER => vc_susa_upd_rec.parent_sequence_number ,
8141 X_PRIMARY_SET_IND => vc_susa_upd_rec.primary_set_ind ,
8142 X_VOLUNTARY_END_IND => vc_susa_upd_rec.voluntary_end_ind ,
8143 X_AUTHORISED_PERSON_ID => vc_susa_upd_rec.authorised_person_id,
8144 X_AUTHORISED_ON => vc_susa_upd_rec.authorised_on ,
8145 X_OVERRIDE_TITLE => vc_susa_upd_rec.override_title ,
8146 X_RQRMNTS_COMPLETE_IND => vc_susa_upd_rec.rqrmnts_complete_ind,
8147 X_RQRMNTS_COMPLETE_DT => vc_susa_upd_rec.rqrmnts_complete_dt,
8148 X_S_COMPLETED_SOURCE_TYPE => vc_susa_upd_rec.s_completed_source_type,
8149 X_CATALOG_CAL_TYPE => vc_susa_upd_rec.catalog_cal_type ,
8150 X_CATALOG_SEQ_NUM => vc_susa_upd_rec.catalog_seq_num,
8151 X_ATTRIBUTE_CATEGORY => vc_susa_upd_rec.attribute_category,
8152 X_ATTRIBUTE1 => vc_susa_upd_rec.attribute1 ,
8153 X_ATTRIBUTE2 => vc_susa_upd_rec.attribute2 ,
8154 X_ATTRIBUTE3 => vc_susa_upd_rec.attribute3,
8155 X_ATTRIBUTE4 => vc_susa_upd_rec.attribute4,
8156 X_ATTRIBUTE5 => vc_susa_upd_rec.attribute5,
8157 X_ATTRIBUTE6 => vc_susa_upd_rec.attribute6,
8158 X_ATTRIBUTE7 => vc_susa_upd_rec.attribute7,
8159 X_ATTRIBUTE8 => vc_susa_upd_rec.attribute8,
8160 X_ATTRIBUTE9 => vc_susa_upd_rec.attribute9,
8161 X_ATTRIBUTE10 => vc_susa_upd_rec.attribute10,
8162 X_ATTRIBUTE11 => vc_susa_upd_rec.attribute11,
8163 X_ATTRIBUTE12 => vc_susa_upd_rec.attribute12,
8164 X_ATTRIBUTE13 => vc_susa_upd_rec.attribute13,
8165 X_ATTRIBUTE14 => vc_susa_upd_rec.attribute14,
8166 X_ATTRIBUTE15 => vc_susa_upd_rec.attribute15,
8167 X_ATTRIBUTE16 => vc_susa_upd_rec.attribute16,
8168 X_ATTRIBUTE17 => vc_susa_upd_rec.attribute17,
8169 X_ATTRIBUTE18 => vc_susa_upd_rec.attribute18,
8170 X_ATTRIBUTE19 => vc_susa_upd_rec.attribute19,
8171 X_ATTRIBUTE20 => vc_susa_upd_rec.attribute20,
8172 X_MODE => 'R'
8173 );
8174 END IF;
8175
8176 END IF;
8177 CLOSE c_susa_exists;
8178
8179 END IF;
8180 CLOSE c_us_version_number;
8181
8182
8183 END LOOP;
8184 RETURN TRUE;
8185
8186
8187 END create_stream_unit_sets;
8188
8189
8190 FUNCTION create_unit_set(
8191 p_person_id IN NUMBER,
8192 p_course_cd IN VARCHAR2,
8193 p_unit_set_cd IN VARCHAR2,
8194 p_us_version_number IN NUMBER,
8195 p_selection_dt IN DATE,
8196 p_confirmed_ind IN VARCHAR2,
8197 p_authorised_person_id IN NUMBER,
8198 p_authorised_on IN DATE,
8199 p_seqval OUT NOCOPY NUMBER,
8200 p_log_creation_dt IN DATE,
8201 p_message_name OUT NOCOPY VARCHAR2
8202 ) RETURN BOOLEAN AS
8203
8204 ------------------------------------------------------------------------------------------------
8205 --Change History:
8206 --Who When What
8207 --bdeviset 29-JUL-2004 Added p_log_creation_dt as parameter.Before calling IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW/INSERT_ROW
8208 -- a check is made to see that their is no overlapping of selection,completion and
8209 -- end dates for any two unit sets by calling check_usa_overlap.If it returns
8210 -- false log entry is made and the insert or update is not carried out for bug 3149133.
8211 ------------------------------------------------------------------------------------------------
8212
8213 p_warn_level varchar2(5);
8214 cst_pre_enrol CONSTANT VARCHAR2(10) := 'PRE-ENROL';
8215 cst_error CONSTANT VARCHAR2(5) := 'ERROR';
8216 l_rowid VARCHAR2(25);
8217 l_seqval IGS_AS_SU_SETATMPT.SEQUENCE_NUMBER%TYPE;
8218 v_selection_dt IGS_AS_SU_SETATMPT.SELECTION_DT%TYPE;
8219 v_confirmed_ind IGS_AS_SU_SETATMPT.STUDENT_CONFIRMED_IND%TYPE;
8220 CURSOR c_next_susa_exists (cp_person_id IGS_AS_SU_SETATMPT.PERSON_ID%TYPE,
8221 cp_course_cd IGS_AS_SU_SETATMPT.COURSE_CD%TYPE,
8222 cp_unit_set_cd IGS_AS_SU_SETATMPT.UNIT_SET_CD%TYPE,
8223 cp_us_version_number IGS_AS_SU_SETATMPT.US_VERSION_NUMBER%TYPE) IS
8224 SELECT susa.*,susa.rowid
8225 FROM IGS_AS_SU_SETATMPT susa
8226 WHERE susa.person_id = cp_person_id AND
8227 susa.course_cd = cp_course_cd AND
8228 susa.unit_set_cd = cp_unit_set_cd AND
8229 susa.us_version_number = cp_us_version_number AND
8230 susa.end_dt IS NULL;
8231 v_susa_rec c_next_susa_exists%ROWTYPE;
8232
8233
8234 BEGIN
8235
8236 p_seqval := NULL;
8237
8238 OPEN c_next_susa_exists(p_person_id, p_course_cd,
8239 p_unit_set_cd, p_us_version_number);
8240 FETCH c_next_susa_exists into v_susa_rec;
8241 IF c_next_susa_exists %FOUND THEN
8242 CLOSE c_next_susa_exists;
8243
8244 p_seqval := v_susa_rec.sequence_number;
8245 v_confirmed_ind := NVL(p_confirmed_ind, v_susa_rec.student_confirmed_ind);
8246 IF NVL(p_confirmed_ind,'N') = 'N' AND v_susa_rec.student_confirmed_ind = 'Y' THEN
8247 v_confirmed_ind := 'Y';
8248 END IF;
8249
8250 IF v_confirmed_ind = 'N' THEN
8251 v_Selection_Dt := null;
8252 ELSE
8253 IF p_selection_dt IS NOT NULL AND v_susa_rec.selection_dt < p_selection_dt THEN
8254 v_selection_dt := v_susa_rec.selection_dt;
8255 ELSE
8256 v_selection_Dt := p_selection_Dt;
8257 END IF;
8258 v_selection_dt := NVL(NVL(v_selection_dt,v_susa_rec.selection_dt),sysdate);
8259 END IF;
8260
8261 IF NVL(v_selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8262 <> NVL(v_susa_rec.selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8263 OR v_confirmed_ind <> v_susa_rec.student_confirmed_ind
8264 THEN
8265 IF igs_en_gen_legacy.check_usa_overlap(
8266 v_susa_rec.person_id,
8267 v_susa_rec.course_cd,
8268 TRUNC(v_selection_dt),
8269 v_susa_rec.rqrmnts_complete_dt,
8270 v_susa_rec.end_dt,
8271 v_susa_rec.sequence_number,
8272 v_susa_rec.unit_set_cd ,
8273 v_susa_rec.us_version_number,
8274 p_message_name) = FALSE THEN
8275
8276 p_warn_level := cst_error;
8277 IF p_log_creation_dt IS NOT NULL THEN
8278 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
8279 cst_pre_enrol,
8280 p_log_creation_dt,
8281 cst_error || ',' ||
8282 TO_CHAR(p_person_id) || ',' ||
8283 p_course_cd,
8284 p_message_name,
8285 NULL);
8286 END IF;
8287 RETURN FALSE;
8288 END IF ;
8289
8290 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
8291 X_ROWID => v_susa_rec.rowid,
8292 X_PERSON_ID => v_susa_rec.person_id ,
8293 X_COURSE_CD => v_susa_rec.course_cd ,
8294 X_UNIT_SET_CD => v_susa_rec.unit_set_cd ,
8295 X_SEQUENCE_NUMBER => v_susa_rec.sequence_number ,
8296 X_US_VERSION_NUMBER => v_susa_rec.us_version_number,
8297 X_SELECTION_DT => TRUNC(v_selection_dt),
8298 X_STUDENT_CONFIRMED_IND => v_confirmed_ind,
8299 X_END_DT => v_susa_rec.end_dt ,
8300 X_PARENT_UNIT_SET_CD => v_susa_rec.parent_unit_set_cd,
8301 X_PARENT_SEQUENCE_NUMBER => v_susa_rec.parent_sequence_number ,
8302 X_PRIMARY_SET_IND => v_susa_rec.primary_set_ind ,
8303 X_VOLUNTARY_END_IND => v_susa_rec.voluntary_end_ind ,
8304 X_AUTHORISED_PERSON_ID => NVL(p_authorised_person_id,v_susa_rec.authorised_person_id),
8305 X_AUTHORISED_ON => NVL(p_authorised_on,v_susa_rec.authorised_on),
8306 X_OVERRIDE_TITLE => v_susa_rec.override_title ,
8307 X_RQRMNTS_COMPLETE_IND => v_susa_rec.rqrmnts_complete_ind,
8308 X_RQRMNTS_COMPLETE_DT => v_susa_rec.rqrmnts_complete_dt,
8309 X_S_COMPLETED_SOURCE_TYPE => v_susa_rec.s_completed_source_type,
8310 X_CATALOG_CAL_TYPE => v_susa_rec.catalog_cal_type ,
8311 X_CATALOG_SEQ_NUM => v_susa_rec.catalog_seq_num,
8312 X_ATTRIBUTE_CATEGORY => v_susa_rec.attribute_category,
8313 X_ATTRIBUTE1 => v_susa_rec.attribute1 ,
8314 X_ATTRIBUTE2 => v_susa_rec.attribute2 ,
8315 X_ATTRIBUTE3 => v_susa_rec.attribute3,
8316 X_ATTRIBUTE4 => v_susa_rec.attribute4,
8317 X_ATTRIBUTE5 => v_susa_rec.attribute5,
8318 X_ATTRIBUTE6 => v_susa_rec.attribute6,
8319 X_ATTRIBUTE7 => v_susa_rec.attribute7,
8320 X_ATTRIBUTE8 => v_susa_rec.attribute8,
8321 X_ATTRIBUTE9 => v_susa_rec.attribute9,
8322 X_ATTRIBUTE10 => v_susa_rec.attribute10,
8323 X_ATTRIBUTE11 => v_susa_rec.attribute11,
8324 X_ATTRIBUTE12 => v_susa_rec.attribute12,
8325 X_ATTRIBUTE13 => v_susa_rec.attribute13,
8326 X_ATTRIBUTE14 => v_susa_rec.attribute14,
8327 X_ATTRIBUTE15 => v_susa_rec.attribute15,
8328 X_ATTRIBUTE16 => v_susa_rec.attribute16,
8329 X_ATTRIBUTE17 => v_susa_rec.attribute17,
8330 X_ATTRIBUTE18 => v_susa_rec.attribute18,
8331 X_ATTRIBUTE19 => v_susa_rec.attribute19,
8332 X_ATTRIBUTE20 => v_susa_rec.attribute20,
8333 X_MODE => 'R'
8334 );
8335 END IF;
8336 ELSE
8337 CLOSE c_next_susa_exists;
8338 SELECT IGS_AS_SU_SETATMPT_SEQ_NUM_S.NEXTVAL
8339 INTO l_seqval
8340 FROM dual;
8341
8342 p_seqval := l_seqval;
8343 v_confirmed_ind := NVL(p_confirmed_ind,'N') ;
8344 IF v_confirmed_ind = 'Y' THEN
8345 v_selection_dt := NVL(p_selection_dt,sysdate);
8346 ELSE
8347 v_selection_dt := NULL;
8348 END IF;
8349
8350 IF igs_en_gen_legacy.check_usa_overlap(
8351 p_person_id,
8352 p_course_cd,
8353 TRUNC(v_selection_dt),
8354 NULL,
8355 NULL,
8356 l_seqval,
8357 p_unit_set_cd,
8358 p_us_version_number,
8359 p_message_name) = FALSE THEN
8360
8361 p_warn_level := cst_error;
8362 IF p_log_creation_dt IS NOT NULL THEN
8363 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
8364 cst_pre_enrol,
8365 p_log_creation_dt,
8366 cst_error || ',' ||
8367 TO_CHAR(p_person_id) || ',' ||
8368 p_course_cd,
8369 p_message_name,
8370 NULL);
8371 END IF;
8372 RETURN FALSE;
8373 END IF ;
8374
8375
8376 IGS_AS_SU_SETATMPT_PKG.INSERT_ROW (
8377 x_rowid => l_rowid,
8378 x_person_id => p_person_id,
8379 x_course_cd => p_course_cd,
8380 x_unit_set_cd => p_unit_set_cd,
8381 x_sequence_number => l_seqval,
8382 x_us_version_number => p_us_version_number,
8383 x_selection_dt => TRUNC(v_selection_dt ),
8384 x_student_confirmed_ind =>v_confirmed_ind,
8385 x_end_dt => NULL,
8386 x_PARENT_UNIT_SET_CD => NULL,
8387 X_PARENT_SEQUENCE_NUMBER => NULL,
8388 X_PRIMARY_SET_IND => NULL,
8389 X_VOLUNTARY_END_IND => NULL,
8390 x_authorised_person_id => p_authorised_person_id,
8391 x_authorised_on => p_authorised_on,
8392 X_OVERRIDE_TITLE => NULL,
8393 X_RQRMNTS_COMPLETE_IND => NULL,
8394 X_RQRMNTS_COMPLETE_DT => NULL,
8395 X_S_COMPLETED_SOURCE_TYPE => NULL,
8396 X_CATALOG_CAL_TYPE => NULL,
8397 X_CATALOG_SEQ_NUM => NULL,
8398 X_ATTRIBUTE_CATEGORY => NULL,
8399 X_ATTRIBUTE1 => NULL,
8400 X_ATTRIBUTE2 => NULL,
8401 X_ATTRIBUTE3 => NULL,
8402 X_ATTRIBUTE4 => NULL,
8403 X_ATTRIBUTE5 => NULL,
8404 X_ATTRIBUTE6 => NULL,
8405 X_ATTRIBUTE7 => NULL,
8406 X_ATTRIBUTE8 => NULL,
8407 X_ATTRIBUTE9 => NULL,
8408 X_ATTRIBUTE10 => NULL,
8409 X_ATTRIBUTE11 => NULL,
8410 X_ATTRIBUTE12 => NULL,
8411 X_ATTRIBUTE13 => NULL,
8412 X_ATTRIBUTE14 => NULL,
8413 X_ATTRIBUTE15 => NULL,
8414 X_ATTRIBUTE16 => NULL,
8415 X_ATTRIBUTE17 => NULL,
8416 X_ATTRIBUTE18 => NULL,
8417 X_ATTRIBUTE19 => NULL,
8418 X_ATTRIBUTE20 => NULL,
8419 x_mode => 'R');
8420 END IF;
8421 RETURN TRUE;
8422 END create_unit_set;
8423
8424
8425
8426 FUNCTION update_stream_unit_sets(
8427 p_person_id IN NUMBER,
8428 p_course_cd IN VARCHAR2,
8429 p_old_admin_unit_set IN VARCHAR2,
8430 p_rqrmnts_complete_ind IN VARCHAR2,
8431 p_rqrmnts_complete_dt IN DATE,
8432 p_selection_dt IN DATE,
8433 p_confirmed_ind IN VARCHAR2,
8434 p_log_creation_dt IN DATE,
8435 p_message_name OUT NOCOPY VARCHAR2
8436 ) RETURN BOOLEAN AS
8437
8438 ------------------------------------------------------------------------------------------------
8439 --Change History:
8440 --Who When What
8441 --bdeviset 29-JUL-2004 Added p_log_creation_dt as parameter.Before calling IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW/INSERT_ROW
8442 -- a check is made to see that their is no overlapping of selection,completion and
8443 -- end dates for any two unit sets by calling check_usa_overlap.If it returns
8444 -- false log entry is made and the insert or update is not carried out for bug 3149133.
8445 ------------------------------------------------------------------------------------------------
8446
8447 CURSOR c_acad_us (cp_old_admin_unit_Set_cd IGS_AS_SU_SETATMPT.UNIT_SET_CD%TYPE) IS
8448 SELECT usm.stream_unit_set_Cd
8449 FROM igs_en_unit_set_map usm,
8450 igs_ps_us_prenr_cfg upc
8451 WHERE upc.unit_set_cd = cp_old_admin_unit_set_cd
8452 AND usm.mapping_set_cd = upc.mapping_set_cd
8453 AND usm.sequence_no = upc.sequence_no;
8454
8455 CURSOR c_susa_upd (cp_stream_unit_Set_cd IGS_AS_SU_SETATMPT.UNIT_SET_CD%TYPE,
8456 cp_person_id IGS_AS_SU_SETATMPT.PERSON_ID%TYPE,
8457 cp_course_cd IGS_AS_SU_SETATMPT.COURSE_CD%TYPE) IS
8458 SELECT susa.rowid, susa.*
8459 FROM igs_as_su_setatmpt susa
8460 WHERE susa.unit_set_cd = cp_stream_unit_set_cd
8461 AND susa.person_id = cp_person_id
8462 AND susa.course_cd = cp_course_cd
8463 AND susa.end_dt IS NULL
8464 order by selection_dt desc;
8465
8466 vc_susa_upd_rec c_susa_upd%ROWTYPE;
8467 v_selection_dt igs_as_su_setatmpt.selection_dt%TYPE;
8468 v_confirmed_ind igs_as_su_setatmpt.student_confirmed_ind%TYPE;
8469 v_rqrmnts_complete_ind igs_as_su_setatmpt.rqrmnts_complete_ind%TYPE;
8470 v_rqrmnts_complete_dt igs_as_su_setatmpt.rqrmnts_complete_dt%TYPE;
8471 p_warn_level varchar2(5);
8472 cst_pre_enrol CONSTANT VARCHAR2(10) := 'PRE-ENROL';
8473 cst_error CONSTANT VARCHAR2(5) := 'ERROR';
8474
8475 BEGIN
8476
8477 FOR vc_acad_us_rec in c_acad_us(p_old_admin_unit_set) LOOP
8478
8479 OPEN c_susa_upd ( vc_acad_us_rec.stream_unit_set_cd, p_person_id, p_course_cd);
8480 FETCH c_susa_upd INTO vc_susa_upd_rec;
8481 IF c_susa_upd%FOUND THEN
8482 v_confirmed_ind := NVL(p_confirmed_ind, vc_susa_upd_rec.student_confirmed_ind);
8483 IF NVL(p_confirmed_ind,'N') = 'N' AND vc_susa_upd_rec.student_confirmed_ind = 'Y' THEN
8484 v_confirmed_ind := 'Y';
8485 END IF;
8486
8487 IF v_confirmed_ind = 'N' THEN
8488 v_Selection_Dt := null;
8489 ELSE
8490 IF p_selection_dt IS NOT NULL AND vc_susa_upd_rec.selection_dt < p_selection_dt THEN
8491 v_selection_dt := vc_susa_upd_rec.selection_dt;
8492 ELSE
8493 v_selection_Dt := p_selection_Dt;
8494 END IF;
8495 v_selection_dt := NVL(NVL(v_selection_dt,vc_susa_upd_rec.selection_dt),sysdate);
8496 END IF;
8497
8498
8499 IF NVL(p_rqrmnts_complete_ind,'N') = 'N' AND vc_susa_upd_rec.rqrmnts_complete_ind = 'Y' THEN
8500 v_rqrmnts_complete_ind := vc_susa_upd_rec.rqrmnts_complete_ind;
8501 END IF;
8502 v_rqrmnts_complete_ind := NVL(p_rqrmnts_complete_ind,vc_susa_upd_rec.rqrmnts_complete_ind );
8503
8504 IF v_rqrmnts_complete_ind = 'Y' THEN
8505 v_rqrmnts_complete_dt := NVL(NVL(p_rqrmnts_complete_dt,vc_susa_upd_rec.rqrmnts_complete_dt),sysdate-1);
8506 ELSE
8507 v_rqrmnts_complete_dt := NULL;
8508 END IF; -- end of IF v_rqrmnts_complete_ind = 'Y' THEN
8509
8510
8511 IF v_rqrmnts_complete_ind <> vc_susa_upd_rec.rqrmnts_complete_ind
8512 OR NVL(v_rqrmnts_complete_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8513 <> NVL(vc_susa_upd_rec.rqrmnts_complete_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8514 OR NVL(v_selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8515 <> NVL(vc_susa_upd_rec.selection_dt,igs_ge_date.igsdate('1000/01/01 00:00:00'))
8516 OR v_confirmed_ind <> vc_susa_upd_rec.student_confirmed_ind
8517 THEN
8518
8519 IF igs_en_gen_legacy.check_usa_overlap(
8520 vc_susa_upd_rec.person_id,
8521 vc_susa_upd_rec.course_cd,
8522 TRUNC(v_selection_dt),
8523 v_rqrmnts_complete_dt,
8524 vc_susa_upd_rec.end_dt,
8525 vc_susa_upd_rec.sequence_number,
8526 vc_susa_upd_rec.unit_set_cd,
8527 vc_susa_upd_rec.us_version_number,
8528 p_message_name) = FALSE THEN
8529
8530 p_warn_level := cst_error;
8531 IF p_log_creation_dt IS NOT NULL THEN
8532 IGS_GE_GEN_003.GENP_INS_LOG_ENTRY(
8533 cst_pre_enrol,
8534 p_log_creation_dt,
8535 cst_error || ',' ||
8536 TO_CHAR(p_person_id) || ',' ||
8537 p_course_cd,
8538 p_message_name,
8539 NULL);
8540 END IF;
8541 RETURN FALSE;
8542 END IF ;
8543
8544
8545 IGS_AS_SU_SETATMPT_PKG.UPDATE_ROW (
8546 X_ROWID => vc_susa_upd_rec.rowid,
8547 X_PERSON_ID => vc_susa_upd_rec.person_id ,
8548 X_COURSE_CD => vc_susa_upd_rec.course_cd ,
8549 X_UNIT_SET_CD => vc_susa_upd_rec.unit_set_cd ,
8550 X_SEQUENCE_NUMBER => vc_susa_upd_rec.sequence_number ,
8551 X_US_VERSION_NUMBER => vc_susa_upd_rec.us_version_number,
8552 X_SELECTION_DT => TRUNC(v_selection_dt),
8553 X_STUDENT_CONFIRMED_IND => v_confirmed_ind,
8554 X_END_DT => vc_susa_upd_rec.end_dt ,
8555 X_PARENT_UNIT_SET_CD => vc_susa_upd_rec.parent_unit_set_cd,
8556 X_PARENT_SEQUENCE_NUMBER => vc_susa_upd_rec.parent_sequence_number ,
8557 X_PRIMARY_SET_IND => vc_susa_upd_rec.primary_set_ind ,
8558 X_VOLUNTARY_END_IND => vc_susa_upd_rec.voluntary_end_ind ,
8559 X_AUTHORISED_PERSON_ID => vc_susa_upd_rec.authorised_person_id,
8560 X_AUTHORISED_ON => vc_susa_upd_rec.authorised_on ,
8561 X_OVERRIDE_TITLE => vc_susa_upd_rec.override_title ,
8562 X_RQRMNTS_COMPLETE_IND => v_rqrmnts_complete_ind,
8563 X_RQRMNTS_COMPLETE_DT => v_rqrmnts_complete_dt,
8564 X_S_COMPLETED_SOURCE_TYPE => vc_susa_upd_rec.s_completed_source_type,
8565 X_CATALOG_CAL_TYPE => vc_susa_upd_rec.catalog_cal_type ,
8566 X_CATALOG_SEQ_NUM => vc_susa_upd_rec.catalog_seq_num,
8567 X_ATTRIBUTE_CATEGORY => vc_susa_upd_rec.attribute_category,
8568 X_ATTRIBUTE1 => vc_susa_upd_rec.attribute1 ,
8569 X_ATTRIBUTE2 => vc_susa_upd_rec.attribute2 ,
8570 X_ATTRIBUTE3 => vc_susa_upd_rec.attribute3,
8571 X_ATTRIBUTE4 => vc_susa_upd_rec.attribute4,
8572 X_ATTRIBUTE5 => vc_susa_upd_rec.attribute5,
8573 X_ATTRIBUTE6 => vc_susa_upd_rec.attribute6,
8574 X_ATTRIBUTE7 => vc_susa_upd_rec.attribute7,
8575 X_ATTRIBUTE8 => vc_susa_upd_rec.attribute8,
8576 X_ATTRIBUTE9 => vc_susa_upd_rec.attribute9,
8577 X_ATTRIBUTE10 => vc_susa_upd_rec.attribute10,
8578 X_ATTRIBUTE11 => vc_susa_upd_rec.attribute11,
8579 X_ATTRIBUTE12 => vc_susa_upd_rec.attribute12,
8580 X_ATTRIBUTE13 => vc_susa_upd_rec.attribute13,
8581 X_ATTRIBUTE14 => vc_susa_upd_rec.attribute14,
8582 X_ATTRIBUTE15 => vc_susa_upd_rec.attribute15,
8583 X_ATTRIBUTE16 => vc_susa_upd_rec.attribute16,
8584 X_ATTRIBUTE17 => vc_susa_upd_rec.attribute17,
8585 X_ATTRIBUTE18 => vc_susa_upd_rec.attribute18,
8586 X_ATTRIBUTE19 => vc_susa_upd_rec.attribute19,
8587 X_ATTRIBUTE20 => vc_susa_upd_rec.attribute20,
8588 X_MODE => 'R'
8589 );
8590 END IF;
8591 END IF;
8592
8593 CLOSE c_susa_upd;
8594
8595 END LOOP;
8596 RETURN TRUE;
8597
8598 END update_stream_unit_sets;
8599
8600 FUNCTION enrp_vald_inst_sua(
8601 p_person_id IN igs_en_su_attempt.person_id%TYPE,
8602 p_course_cd IN igs_en_su_attempt.course_cd%TYPE,
8603 p_unit_cd IN igs_en_su_attempt.unit_cd%TYPE,
8604 p_version_number IN igs_en_su_attempt.version_number%TYPE,
8605 p_teach_cal_type IN igs_en_su_attempt.cal_type%TYPE,
8606 p_teach_seq_num IN igs_en_su_attempt.ci_sequence_number%TYPE,
8607 p_load_cal_type IN igs_en_su_attempt.cal_type%TYPE,
8608 p_load_seq_num IN igs_en_su_attempt.ci_sequence_number%TYPE,
8609 p_location_cd IN igs_en_su_attempt.location_cd%TYPE,
8610 p_unit_class IN igs_en_su_attempt.unit_class%TYPE,
8611 p_uoo_id IN igs_en_su_attempt.uoo_id%TYPE,
8612 p_enr_method IN igs_en_method_type.enr_method_type%TYPE,
8613 p_core_indicator_code IN igs_en_su_attempt.core_indicator_code%TYPE, -- ptandon, Prevent Dropping Core Units build
8614 p_message OUT NOCOPY VARCHAR2) RETURN BOOLEAN AS
8615 ------------------------------------------------------------------------------------------------
8616 --Created by :
8617 --Date created:
8618 --
8619 --Purpose:
8620 --Known limitations/enhancements and/or remarks:
8621 --
8622 --Change History:
8623 --Who When What
8624 --kkillams 11-Jul-2003 Added rollback statement in the function if deny message is returned
8625 -- from igs_ss_en_wrappers.insert_into_enr_worksheet function, to
8626 -- rollback the changes have done by the function. Bug no: 3036949
8627 --ptandon 06-Oct-2003 Added a new parameter p_core_indicator_code as part of Prevent Dropping Core Units.
8628 -- Enh Bug# 3052432.
8629 --rvangala 04-Dec-2003 Added call to igs_ss_enr_details.enrp_get_prgm_for_career to check for
8630 -- primary program
8631 --rvivekan 07-dec-2003 Placements build. Added exception handling block for insert_into_enr_worksheet
8632 ------------------------------------------------------------------------------------------------
8633 CURSOR cur_uoo_id IS
8634 SELECT uoo_id FROM IGS_PS_UNIT_OFR_OPT
8635 WHERE unit_cd = p_unit_cd
8636 AND version_number = p_version_number
8637 AND cal_type = p_teach_cal_type
8638 AND ci_sequence_number = p_teach_seq_num
8639 AND location_cd = p_location_cd
8640 AND unit_class = p_unit_class;
8641 CURSOR c_per_num
8642 IS SELECT party_number FROM hz_parties
8643 WHERE party_id = p_person_id;
8644
8645 CURSOR cur_course_type (cp_person_id igs_en_stdnt_ps_att.person_id%TYPE,
8646 cp_course_cd igs_en_stdnt_ps_att.course_cd%TYPE) IS
8647 SELECT course_type
8648 FROM IGS_PS_VER pv,
8649 IGS_EN_STDNT_PS_ATT sca
8650 WHERE sca.person_id = cp_person_id
8651 AND sca.course_cd = cp_course_cd
8652 AND pv.course_cd = sca.course_cd
8653 AND pv.version_number = sca.version_number;
8654
8655 l_waitlist_ind VARCHAR2(2);
8656 l_unit_section_status igs_en_su_attempt.unit_attempt_status%TYPE;
8657 l_uoo_id igs_en_su_attempt.uoo_id%TYPE;
8658 l_person_number igs_pe_person.person_number%TYPE;
8659 l_ret_stat VARCHAR2(1);
8660 l_unit_attempt_status igs_en_su_attempt.unit_attempt_status%TYPE;
8661 l_sub_sup_status igs_en_su_attempt.unit_attempt_status%TYPE;
8662 l_primary_program_cd IGS_PS_VER_ALL.COURSE_CD%TYPE;
8663 l_primary_program_vers IGS_PS_VER_ALL.VERSION_NUMBER%TYPE;
8664 l_all_program_title VARCHAR2(2000);
8665 l_profile VARCHAR2(1);
8666 l_career IGS_EN_SCA_V.course_type%TYPE;
8667
8668 BEGIN ---Enrp_Vald_Inst_Sua
8669
8670 l_primary_program_cd := NULL;
8671
8672 --check whether system is in Career mode
8673 l_profile :=NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N');
8674
8675 -- if system is in career mode
8676 IF (l_profile='Y') THEN
8677 OPEN cur_course_type(p_person_id, p_course_cd);
8678 FETCH cur_course_type INTO l_career;
8679 CLOSE cur_course_type;
8680
8681 -- check whether there is a primary program for the passed
8682 -- in term calendar and career
8683 IGS_SS_ENR_DETAILS.enrp_get_prgm_for_career(
8684 p_primary_program => l_primary_program_cd,
8685 p_primary_program_version => l_primary_program_vers,
8686 p_programlist => l_all_program_title,
8687 p_person_id => p_person_id,
8688 p_carrer => l_career,
8689 p_term_cal_type => p_load_cal_type,
8690 p_term_sequence_number => p_load_seq_num);
8691
8692 END IF;
8693
8694 -- The primary program will be null if the career mode is not enabled or
8695 -- the system is in career mode but there is no primary program.
8696 IF l_primary_program_cd IS NULL THEN
8697 l_primary_program_cd := p_course_cd;
8698 END IF;
8699
8700 SAVEPOINT enrp_vald_inst_sua;
8701 IF p_uoo_id IS NULL THEN
8702 OPEN cur_uoo_id;
8703 FETCH cur_uoo_id INTO l_uoo_id;
8704 CLOSE cur_uoo_id;
8705 ELSE
8706 l_uoo_id :=p_uoo_id;
8707 END IF;
8708 OPEN c_per_num;
8709 FETCH c_per_num INTO l_person_number;
8710 CLOSE c_per_num;
8711 l_waitlist_ind := NULL;
8712 l_unit_section_status := NULL;
8713
8714
8715 --Following api checks the availbility of the seats for the given unit section.
8716 igs_en_gen_015.get_usec_status(p_uoo_id =>l_uoo_id,
8717 p_person_id =>p_person_id,
8718 p_unit_section_status =>l_unit_section_status,
8719 p_waitlist_ind =>l_waitlist_ind,
8720 p_load_cal_type =>p_load_cal_type,
8721 p_load_ci_sequence_number =>p_load_seq_num,
8722 p_course_cd =>l_primary_program_cd );
8723
8724 IF l_waitlist_ind IS NULL THEN
8725 --There is no seates are available for this unit section.
8726 p_message := 'IGS_EN_SS_CANNOT_WAITLIST';
8727 RETURN FALSE;
8728 ELSE
8729 --validate context student unit attempt against superior unit section attempt
8730 IF l_waitlist_ind = 'Y' THEN
8731 l_unit_attempt_status := 'WAITLISTED';
8732 ELSIF l_waitlist_ind = 'N' THEN
8733 l_unit_attempt_status := 'UNCONFIRM';
8734 END IF;
8735
8736 IF NOT igs_en_sua_api.enr_sua_sup_sub_val(
8737 p_person_id => p_person_id,
8738 p_course_cd => l_primary_program_cd ,
8739 p_uoo_id => l_uoo_id,
8740 p_unit_attempt_status => l_unit_attempt_status,
8741 p_sup_sub_status => l_sub_sup_status) THEN
8742
8743 p_message := 'IGS_EN_INVALID_SUP';
8744 RETURN FALSE;
8745 END IF;
8746 l_ret_stat:= NULL;
8747 --Following api will creates an unit attempt in unconfirm/waitlist status.
8748
8749 BEGIN
8750 igs_ss_en_wrappers.insert_into_enr_worksheet(p_person_number =>l_person_number,
8751 p_course_cd =>l_primary_program_cd ,
8752 p_uoo_id =>l_uoo_id,
8753 p_waitlist_ind =>l_waitlist_ind,
8754 p_session_id =>NULL,
8755 p_return_status =>l_ret_stat,
8756 p_message =>p_message,
8757 p_cal_type =>p_load_cal_type,
8758 p_ci_sequence_number =>p_load_seq_num,
8759 p_audit_requested =>'N',
8760 p_enr_method =>p_enr_method,
8761 p_override_cp =>null,
8762 p_subtitle =>null,
8763 p_gradsch_cd =>null,
8764 p_gs_version_num =>null,
8765 p_core_indicator_code =>p_core_indicator_code, -- ptandon, Prevent Dropping Core Units build
8766 p_calling_obj =>'JOB'
8767 );
8768 EXCEPTION WHEN OTHERS THEN
8769 l_ret_stat := 'D';
8770 END;
8771
8772 IF l_ret_stat = 'D' THEN
8773 ROLLBACK TO enrp_vald_inst_sua;
8774 RETURN FALSE;
8775 END IF;
8776 END IF;
8777 RETURN TRUE;
8778 END enrp_vald_inst_sua;
8779
8780
8781
8782 PROCEDURE log_error_message(p_s_log_type VARCHAR2,
8783 p_creation_dt DATE,
8784 p_sle_key VARCHAR2,
8785 p_sle_message_name VARCHAR2,
8786 p_del VARCHAR2) AS
8787 /*------------------------------------------------------
8788 --Created by : KKILLAMS, Oracle IDC
8789 --Date created:
8790 --
8791 --Purpose:This procedure will logs the error/warn messages
8792 --Procedure logs the all error/warn messages.
8793 --Known limitations/enhancements and/or remarks:
8794 --
8795 --Change History:
8796 -- WHO WHEN WHAT
8797 ---------------------------------------------------------*/
8798 l_messages VARCHAR2(2000) ;
8799 l_mesg_name VARCHAR2(100);
8800 l_mesg_txt VARCHAR2(2000);
8801 l_msg_len NUMBER ;
8802 l_msg_token VARCHAR2(100);
8803 l_str_place NUMBER(3);
8804 BEGIN --log_error_message
8805 l_messages := p_sle_message_name;
8806 IF SUBSTR(l_messages,1,1) = p_del THEN
8807 l_messages := SUBSTR(l_messages,2);
8808 END IF;
8809 IF SUBSTR(l_messages,-1,1) <> p_del THEN
8810 l_messages := l_messages||p_del;
8811 END IF;
8812 l_mesg_name := NULL;
8813 l_msg_len:= LENGTH(l_messages);
8814 FOR i IN 1 .. l_msg_len
8815 LOOP
8816 IF SUBSTR(l_messages,i,1) = p_del THEN
8817 --Following codes checks whether message token is exists or not.
8818 l_str_place :=INSTR(l_mesg_name,'*');
8819 IF l_str_place <> 0 THEN
8820 l_msg_token:= SUBSTR(l_mesg_name,l_str_place+1);
8821 l_mesg_name:= SUBSTR(l_mesg_name,1,l_str_place-1);
8822 fnd_message.set_name('IGS',l_mesg_name);
8823 fnd_message.set_token('UNIT_CD',l_msg_token);
8824 ELSE
8825 fnd_message.set_name('IGS',l_mesg_name);
8826 END IF;
8827 l_mesg_txt := fnd_message.get;
8828 igs_ge_gen_003.genp_ins_log_entry(p_s_log_type => p_s_log_type,
8829 p_creation_dt => p_creation_dt,
8830 p_key => p_sle_key,
8831 p_s_message_name => l_mesg_name,
8832 p_text => l_mesg_txt);
8833 l_mesg_name := NULL;
8834 ELSE
8835 l_mesg_name := l_mesg_name||SUBSTR(l_messages,i,1);
8836 END IF;
8837 END LOOP;
8838 END log_error_message;
8839
8840 FUNCTION enrf_unit_from_past(
8841 p_person_id IN NUMBER,
8842 p_source_course_cd IN VARCHAR2,
8843 p_uoo_id IN NUMBER,
8844 p_unit_attempt_status IN VARCHAR2,
8845 p_discontinued_dt IN DATE,
8846 p_term_cal_type IN VARCHAR2,
8847 p_term_seq_num IN NUMBER) RETURN BOOLEAN AS
8848 /*------------------------------------------------------
8849 --Created by : AMUTHU, Oracle IDC
8850 --Date created:
8851 --
8852 --Purpose:This procedure will logs the error/warn messages
8853 --Procedure logs the all error/warn messages.
8854 --Known limitations/enhancements and/or remarks:
8855 --
8856 --Change History:
8857 -- WHO WHEN WHAT
8858 -- ckasu 08-DEC-2004 modfied as a part of bug#4048203 inorder to move the status of
8859 -- dicontinue,completed unit attempts as same only when load calendar
8860 -- into which units enrolled equals the effective term calendar for
8861 -- Transfer.
8862 ---------------------------------------------------------*/
8863
8864 cst_completed CONSTANT VARCHAR2(10) := 'COMPLETED';
8865 cst_discontin CONSTANT VARCHAR2(10) := 'DISCONTIN';
8866 cst_duplicate CONSTANT VARCHAR2(10) := 'DUPLICATE';
8867
8868 CURSOR c_teach_to_load(cp_person_id IGS_EN_SU_ATTEMPT.PERSON_ID%TYPE,
8869 cp_source_course_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
8870 cp_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
8871 SELECT load_cal_type, load_ci_sequence_number, load_start_dt, teach_cal_type, teach_ci_sequence_number
8872 FROM IGS_EN_SU_ATTEMPT sua,
8873 IGS_CA_TEACH_TO_LOAD_V tl
8874 WHERE sua.person_id = cp_person_id
8875 AND sua.course_cd = cp_source_course_cd
8876 AND sua.uoo_id = cp_uoo_id
8877 AND sua.cal_type = tl.teach_cal_type
8878 AND sua.ci_sequence_number = tl.teach_ci_sequence_number
8879 order by tl.load_start_dt asc;
8880
8881 v_teach_to_load_rec c_teach_to_load%ROWTYPE;
8882
8883 CURSOR c_suao (cp_person_id IGS_EN_SU_ATTEMPT.PERSON_ID%TYPE,
8884 cp_source_course_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
8885 cp_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE,
8886 cp_finalised_outcome_ind IGS_AS_SU_STMPTOUT.FINALISED_OUTCOME_IND%TYPE ) IS
8887 SELECT outcome_dt
8888 FROM igs_as_su_stmptout source_suao
8889 WHERE person_id = cp_person_id
8890 AND course_cd = cp_source_course_cd
8891 AND uoo_id = cp_uoo_id
8892 AND finalised_outcome_ind = cp_finalised_outcome_ind
8893 ORDER BY outcome_dt desc;
8894
8895 v_outcome_dt igs_as_su_stmptout.outcome_dt%TYPE;
8896
8897 CURSOR c_load(cp_date IGS_EN_SU_ATTEMPT.DISCONTINUED_DT%TYPE,
8898 cp_load_start_dt IGS_CA_INST.START_DT%TYPE,
8899 cp_teach_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
8900 cp_teach_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
8901 SELECT load_cal_type, load_ci_sequence_number, load_start_dt
8902 FROM IGS_CA_TEACH_TO_LOAD_V
8903 WHERE cp_date between load_start_dt and load_end_dt
8904 AND load_start_dt >= cp_load_start_dt
8905 AND teach_cal_type = cp_teach_Cal_type
8906 AND teach_ci_sequence_number = cp_teach_sequence_number
8907 ORDER BY load_start_dt asc;
8908
8909 v_load_rec c_load%ROWTYPE;
8910 v_load_found BOOLEAN;
8911
8912 CURSOR c_eff_term_start_dt (cp_cal_type IGS_CA_INST.CAL_TYPE%TYPE,
8913 cp_sequence_number IGS_CA_INST.SEQUENCE_NUMBER%TYPE) IS
8914 SELECT start_dt
8915 FROM IGS_CA_INST
8916 WHERE cal_type = cp_cal_type
8917 AND sequence_number = cp_sequence_number;
8918
8919 v_eff_term_start_dt IGS_CA_INST.START_DT%TYPE;
8920
8921 BEGIN
8922
8923 OPEN c_teach_to_load(p_person_id, p_source_course_cd, p_uoo_id);
8924 FETCH c_teach_to_load INTO v_teach_to_load_rec;
8925 CLOSE c_teach_to_load;
8926
8927 v_load_found := FALSE;
8928
8929 IF p_unit_attempt_status = cst_discontin THEN
8930
8931 OPEN c_load(p_discontinued_dt,
8932 v_teach_to_load_rec.load_start_dt,
8933 v_teach_to_load_rec.teach_cal_type,
8934 v_teach_to_load_rec.teach_ci_sequence_number);
8935 FETCH c_load INTO v_load_rec;
8936 IF c_load%FOUND THEN
8937 v_load_found := TRUE;
8938 END IF;
8939 CLOSE c_load;
8940
8941 ELSIF p_unit_attempt_status = cst_completed THEN
8942
8943 OPEN c_suao(p_person_id, p_source_course_cd, p_uoo_id,'Y');
8944 FETCH c_suao INTO v_outcome_dt;
8945 CLOSE c_suao;
8946
8947 OPEN c_load(v_outcome_dt,
8948 v_teach_to_load_rec.load_start_dt,
8949 v_teach_to_load_rec.teach_cal_type,
8950 v_teach_to_load_rec.teach_ci_sequence_number);
8951 FETCH c_load INTO v_load_rec;
8952 IF c_load%FOUND THEN
8953 v_load_found := TRUE;
8954 END IF;
8955 CLOSE c_load;
8956 ELSE
8957 RETURN FALSE;
8958 END IF;
8959
8960 OPEN c_eff_term_start_dt(p_term_Cal_type,p_term_seq_num);
8961 FETCH c_eff_term_start_dt INTO v_eff_term_start_dt;
8962 CLOSE c_eff_term_start_dt;
8963
8964 IF v_load_found THEN
8965 IF v_load_rec.load_start_dt < v_eff_term_start_dt THEN
8966 RETURN TRUE;
8967 ELSE
8968 RETURN FALSE;
8969 END IF;
8970 ELSE
8971 IF v_teach_to_load_rec.load_start_dt < v_eff_term_start_dt THEN
8972 RETURN TRUE;
8973 ELSE
8974 RETURN FALSE;
8975 END IF;
8976 END IF;
8977
8978 END enrf_unit_from_past;
8979
8980 PROCEDURE Enrp_Ins_Suao_Trnsfr (
8981 p_person_id IN NUMBER,
8982 p_source_course_cd IN VARCHAR2,
8983 p_dest_course_cd IN VARCHAR2,
8984 p_source_uoo_id IN NUMBER,
8985 p_dest_uoo_id IN NUMBER,
8986 p_delete_source IN BOOLEAN) AS
8987
8988 CURSOR c_suao (cp_person_id IGS_EN_SU_ATTEMPT.PERSON_ID%TYPE,
8989 cp_source_course_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
8990 cp_dest_course_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
8991 cp_source_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE,
8992 cp_dest_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
8993 SELECT source_suao.rowid,source_suao.*
8994 FROM igs_as_su_stmptout source_suao
8995 WHERE person_id = cp_person_id
8996 AND course_cd = cp_source_course_cd
8997 AND uoo_id = cp_source_uoo_id
8998 AND NOT EXISTS (SELECT 'x'
8999 FROM igs_as_su_stmptout dest_suao
9000 WHERE dest_suao.person_id = source_suao.person_id
9001 AND dest_suao.course_cd = cp_dest_course_cd
9002 AND dest_suao.outcome_dt = source_suao.outcome_dt
9003 AND dest_suao.grading_period_cd = source_suao.grading_period_cd
9004 AND dest_suao.uoo_id = cp_dest_uoo_id)
9005 order by outcome_dt asc;
9006
9007 CURSOR c_usec (cp_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
9008 SELECT usec.UNIT_CD,
9009 usec.CAL_TYPE,
9010 usec.CI_SEQUENCE_NUMBER,
9011 CI.START_DT,
9012 CI.END_DT
9013 FROM IGS_PS_UNIT_OFR_OPT usec,
9014 IGS_CA_INST ci
9015 WHERE usec.UOO_ID = cp_uoo_id
9016 and ci.cal_type = usec.cal_type
9017 and ci.sequence_number = usec.ci_sequence_number;
9018
9019 v_dest_usec_rec c_usec%ROWTYPE;
9020
9021 l_rowid VARCHAR2(25);
9022 BEGIN
9023
9024 FOR v_suao_rec in c_suao(p_person_id, p_source_course_cd, p_Dest_course_cd,
9025 p_source_uoo_id, p_dest_uoo_id) LOOP
9026
9027 IF p_delete_source THEN
9028 igs_as_su_stmptout_pkg.DELETE_ROW(v_suao_rec.rowid);
9029 END IF;
9030
9031 OPEN c_usec (p_dest_uoo_id);
9032 FETCH c_usec INTO v_dest_usec_rec;
9033 CLOSE c_usec;
9034
9035 igs_as_su_stmptout_pkg.insert_row(
9036 X_ROWID => l_ROWID ,
9037 X_ORG_ID => v_suao_rec.ORG_ID ,
9038 X_PERSON_ID => v_suao_rec.PERSON_ID ,
9039 X_COURSE_CD => P_DEST_COURSE_CD ,
9040 X_UNIT_CD => v_dest_usec_rec.UNIT_CD ,
9041 X_CAL_TYPE => v_dest_usec_rec.CAL_TYPE ,
9042 X_CI_SEQUENCE_NUMBER => v_dest_usec_rec.CI_SEQUENCE_NUMBER ,
9043 X_OUTCOME_DT => v_suao_rec.OUTCOME_DT ,
9044 X_CI_START_DT => v_dest_usec_rec.START_DT ,
9045 X_CI_END_DT => v_dest_usec_rec.END_DT ,
9046 X_GRADING_SCHEMA_CD => v_suao_rec.GRADING_SCHEMA_CD ,
9047 X_VERSION_NUMBER => v_suao_rec.VERSION_NUMBER ,
9048 X_GRADE => v_suao_rec.GRADE ,
9049 X_S_GRADE_CREATION_METHOD_TYPE => v_suao_rec.S_GRADE_CREATION_METHOD_TYPE ,
9050 X_FINALISED_OUTCOME_IND => v_suao_rec.FINALISED_OUTCOME_IND ,
9051 X_MARK => v_suao_rec.MARK ,
9052 X_NUMBER_TIMES_KEYED => v_suao_rec.NUMBER_TIMES_KEYED ,
9053 X_TRANSLATED_GRADING_SCHEMA_CD => v_suao_rec. TRANSLATED_GRADING_SCHEMA_CD ,
9054 X_TRANSLATED_VERSION_NUMBER => v_suao_rec.TRANSLATED_VERSION_NUMBER ,
9055 X_TRANSLATED_GRADE => v_suao_rec.TRANSLATED_GRADE ,
9056 X_TRANSLATED_DT => v_suao_rec.TRANSLATED_DT ,
9057 X_MODE => 'R' ,
9058 X_GRADING_PERIOD_CD => v_suao_rec.GRADING_PERIOD_CD ,
9059 X_ATTRIBUTE_CATEGORY => v_suao_rec.ATTRIBUTE_CATEGORY ,
9060 X_ATTRIBUTE1 => v_suao_rec.ATTRIBUTE1 ,
9061 X_ATTRIBUTE2 => v_suao_rec.ATTRIBUTE2 ,
9062 X_ATTRIBUTE3 => v_suao_rec.ATTRIBUTE3 ,
9063 X_ATTRIBUTE4 => v_suao_rec.ATTRIBUTE4 ,
9064 X_ATTRIBUTE5 => v_suao_rec.ATTRIBUTE5 ,
9065 X_ATTRIBUTE6 => v_suao_rec.ATTRIBUTE6 ,
9066 X_ATTRIBUTE7 => v_suao_rec.ATTRIBUTE7 ,
9067 X_ATTRIBUTE8 => v_suao_rec.ATTRIBUTE8 ,
9068 X_ATTRIBUTE9 => v_suao_rec.ATTRIBUTE9 ,
9069 X_ATTRIBUTE10 => v_suao_rec.ATTRIBUTE10 ,
9070 X_ATTRIBUTE11 => v_suao_rec.ATTRIBUTE11 ,
9071 X_ATTRIBUTE12 => v_suao_rec.ATTRIBUTE12 ,
9072 X_ATTRIBUTE13 => v_suao_rec.ATTRIBUTE13 ,
9073 X_ATTRIBUTE14 => v_suao_rec.ATTRIBUTE14 ,
9074 X_ATTRIBUTE15 => v_suao_rec.ATTRIBUTE15 ,
9075 X_ATTRIBUTE16 => v_suao_rec.ATTRIBUTE16 ,
9076 X_ATTRIBUTE17 => v_suao_rec.ATTRIBUTE17 ,
9077 X_ATTRIBUTE18 => v_suao_rec.ATTRIBUTE18 ,
9078 X_ATTRIBUTE19 => v_suao_rec.ATTRIBUTE19 ,
9079 X_ATTRIBUTE20 => v_suao_rec.ATTRIBUTE20 ,
9080 X_INCOMP_DEADLINE_DATE => v_suao_rec.INCOMP_DEADLINE_DATE ,
9081 X_INCOMP_GRADING_SCHEMA_CD => v_suao_rec.INCOMP_GRADING_SCHEMA_CD ,
9082 X_INCOMP_VERSION_NUMBER => v_suao_rec.INCOMP_VERSION_NUMBER ,
9083 X_INCOMP_DEFAULT_GRADE => v_suao_rec.INCOMP_DEFAULT_GRADE ,
9084 X_INCOMP_DEFAULT_MARK => v_suao_rec.INCOMP_DEFAULT_MARK ,
9085 X_COMMENTS => v_suao_rec.COMMENTS ,
9086 X_UOO_ID => v_suao_rec.UOO_ID ,
9087 X_MARK_CAPPED_FLAG => v_suao_rec.MARK_CAPPED_FLAG ,
9088 X_RELEASE_DATE => v_suao_rec.RELEASE_DATE ,
9089 X_MANUAL_OVERRIDE_FLAG => v_suao_rec.MANUAL_OVERRIDE_FLAG ,
9090 X_SHOW_ON_ACADEMIC_HISTRY_FLAG => v_suao_rec. SHOW_ON_ACADEMIC_HISTRY_FLAG );
9091 END LOOP;
9092
9093 END Enrp_Ins_Suao_Trnsfr;
9094
9095
9096 PROCEDURE Enrp_Ins_Splace_Trnsfr (
9097 p_person_id IN NUMBER,
9098 p_source_course_cd IN VARCHAR2,
9099 p_dest_course_cd IN VARCHAR2,
9100 p_source_uoo_id IN NUMBER,
9101 p_dest_uoo_id IN NUMBER) AS
9102 /*------------------------------------------------------
9103 --Created by : AMUTHU, Oracle IDC
9104 --Date created:
9105 --
9106 --Purpose:This procedure will logs the error/warn messages
9107 --Procedure logs the all error/warn messages.
9108 --Known limitations/enhancements and/or remarks:
9109 --
9110 --Change History:
9111 -- WHO WHEN WHAT
9112 -- amuthu 06-JUL-2006 Replaced the value to the parameter in the call to
9113 -- igs_en_splacements_pkg.insert_row from v_dest_splace.uoo_id to p_Dest_uoo_id
9114 */
9115 v_dummy VARCHAR2(1);
9116
9117 CURSOR c_splace (cp_person_id IGS_EN_SPLACEMENTS.PERSON_ID%TYPE,
9118 cp_course_cd IGS_EN_SPLACEMENTS.COURSE_CD%TYPE,
9119 cp_uoo_id IGS_EN_SPLACEMENTS.UOO_ID%TYPE) IS
9120 SELECT rowid, SPLACEMENT_ID, person_id, course_cd, uoo_id,start_date,
9121 end_date, institution_code, title, description, category_code,
9122 placement_type_code, SPECIALTY_CODE, compensation_flag,
9123 attendance_type, location, notes
9124 FROM IGS_EN_SPLACEMENTS
9125 WHERE person_id = cp_person_id
9126 AND course_cd = cp_course_cd
9127 AND uoo_id = cp_uoo_id;
9128
9129 v_source_splace c_splace%ROWTYPE;
9130 v_dest_splace c_splace%ROWTYPE;
9131 l_rowid VARCHAR2(25);
9132 l_splace_rowid VARCHAR2(25);
9133 l_splacement_id NUMBER;
9134
9135 CURSOR cur_sp(c_splacement_id IGS_EN_SPLACEMENTS.SPLACEMENT_ID%TYPE) IS
9136 SELECT rowid, supervisor_id
9137 FROM IGS_EN_SPLACE_SUPS
9138 WHERE Splacement_id=c_splacement_id;
9139
9140 CURSOR cur_fac(c_splacement_id IGS_EN_SPLACEMENTS.SPLACEMENT_ID%TYPE) IS
9141 SELECT rowid, FACULTY_ID
9142 FROM IGS_EN_SPLACE_FACS
9143 WHERE Splacement_id=c_splacement_id;
9144
9145 l_sup_exists BOOLEAN;
9146 l_fac_exists BOOLEAN;
9147
9148 TYPE r_sup_rec_type IS RECORD (
9149 supervisor_id HZ_PARTIES.PARTY_ID%TYPE);
9150 TYPE t_sup_tab IS TABLE of r_sup_rec_type INDEX BY BINARY_INTEGER;
9151
9152 v_sup_tab t_sup_tab;
9153 v_sup_index BINARY_INTEGER;
9154
9155 TYPE r_fac_rec_type IS RECORD (
9156 faculty_id HZ_PARTIES.PARTY_ID%TYPE);
9157 TYPE t_fac_tab IS TABLE of r_fac_rec_type INDEX BY BINARY_INTEGER;
9158
9159 v_fac_tab t_fac_tab;
9160 v_fac_index BINARY_INTEGER;
9161
9162 BEGIN
9163
9164 -- There can be only one placement details record for a given unit attempt
9165 -- An additional unique key is present to prevent the existence of placement
9166 -- record for the same person in the same instution with the same start date
9167 -- and title.
9168
9169 -- check if the placement details exists for the source, if it does
9170 -- then check if it exists for the destination, if not then start
9171 -- copying the details. If either the placement detail does not exists
9172 -- for the source or already exists for the destination the return true
9173
9174 -- First all the placement supervior and faculty details are stored in
9175 -- pl/sql table and deleted from the tables. Then the delete the placement
9176 -- record itself.
9177
9178 -- create all the detials against the destination record
9179
9180
9181 OPEN c_splace(p_person_id, p_source_course_cd, p_source_uoo_id);
9182 FETCH c_splace INTO v_source_splace;
9183 IF c_splace%NOTFOUND THEN
9184 CLOSE c_splace;
9185 RETURN;
9186 END IF;
9187 CLOSE c_splace;
9188
9189 OPEN c_splace(p_person_id, p_dest_course_cd, p_dest_uoo_id);
9190 FETCH c_splace INTO v_dest_splace;
9191 IF c_splace%FOUND THEN
9192 CLOSE c_splace;
9193 RETURN;
9194 END IF;
9195 CLOSE c_splace;
9196
9197
9198 l_sup_exists := FALSE;
9199 v_sup_index := 1;
9200 FOR v_cur_sp_rec in cur_sp(v_source_splace.splacement_id) LOOP
9201 l_sup_exists := TRUE;
9202 v_sup_tab(v_sup_index).supervisor_id := v_cur_sp_rec.supervisor_id;
9203 v_sup_index := v_sup_index + 1;
9204 igs_en_splace_sups_pkg.delete_ROW(v_cur_sp_rec.rowid);
9205 END LOOP;
9206
9207 l_fac_exists := FALSE;
9208 v_fac_index := 1;
9209 FOR v_cur_fac_rec in cur_fac(v_source_splace.splacement_id) LOOP
9210 l_fac_exists := TRUE;
9211 v_fac_tab(v_fac_index).faculty_id := v_cur_fac_rec.faculty_id;
9212 v_fac_index := v_fac_index + 1;
9213 IGS_EN_SPLACE_FACS_pkg.delete_row(v_cur_fac_rec.rowid);
9214 END LOOP;
9215
9216
9217 igs_en_splacements_pkg.delete_row(v_source_splace.rowid);
9218
9219 igs_en_splacements_pkg.insert_row (
9220 x_rowid => l_splace_rowid ,
9221 x_splacement_id => l_splacement_id ,
9222 x_person_id => v_source_splace.person_id ,
9223 x_course_cd => p_dest_course_cd ,
9224 x_uoo_id => p_dest_uoo_id ,
9225 x_start_date => v_source_splace.start_date ,
9226 x_end_date => v_source_splace.end_date ,
9227 x_institution_code => v_source_splace.institution_code ,
9228 x_title => v_source_splace.title ,
9229 x_description => v_source_splace.description ,
9230 x_category_code => v_source_splace.category_code ,
9231 x_placement_type_code=> v_source_splace.placement_type_code,
9232 x_specialty_code => v_source_splace.specialty_code ,
9233 x_compensation_flag => v_source_splace.compensation_flag ,
9234 x_attendance_type => v_source_splace.attendance_type ,
9235 x_location => v_source_splace.location ,
9236 x_notes => v_source_splace.notes ,
9237 x_mode => 'R' );
9238
9239 IF l_sup_exists THEN
9240 FOR v_sup_index in v_sup_tab.FIRST..v_sup_tab.LAST LOOP
9241 l_rowid := NULL;
9242
9243 igs_en_splace_sups_pkg.INSERT_ROW(
9244 x_rowid => l_rowid,
9245 x_splacement_id => l_splacement_id,
9246 x_supervisor_id => v_sup_tab(v_sup_index).supervisor_id,
9247 x_mode => 'R');
9248 END LOOP;
9249 END IF;
9250
9251 IF l_fac_exists THEN
9252 FOR v_fac_index in v_fac_tab.FIRST..v_fac_tab.LAST LOOP
9253 l_rowid := NULL;
9254
9255 IGS_EN_SPLACE_FACS_pkg.INSERT_ROW(
9256 x_rowid => l_rowid,
9257 x_splacement_id => l_splacement_id,
9258 x_FACULTY_ID => v_fac_tab(v_fac_index).faculty_id,
9259 x_mode => 'R');
9260 END LOOP;
9261 END IF;
9262
9263
9264 END Enrp_Ins_Splace_Trnsfr;
9265
9266
9267
9268 FUNCTION Enrp_del_all_Sua_Trnsfr(
9269 p_person_id IN NUMBER ,
9270 p_source_course_cd IN VARCHAR2 ,
9271 p_dest_course_cd IN VARCHAR2 ,
9272 p_uoo_ids IN VARCHAR2,
9273 p_term_cal_type IN VARCHAR2,
9274 p_term_seq_num IN NUMBER,
9275 p_drop IN BOOLEAN,
9276 p_message_name OUT NOCOPY VARCHAR2
9277 ) RETURN BOOLEAN AS
9278
9279 /*
9280
9281 || Created By : AMUTHU
9282 || Created On : 27-NOV-2004
9283 || Purpose :
9284 || Known limitations, enhancements or remarks :
9285 || Change History :
9286 || Who When What
9287 || ckasu 08-DEC-2004 Modfied message name inorder to show invalid unit attempts can't
9288 || be transferred across careers message as a part of bug#4048203
9289 || ckasu 11-Dec-2004 Modified signature of Enrp_del_all_Sua_Trnsfr inorder to retain
9290 || unselected enrolled or waitlisted or invalid units when transfer
9291 || is across careers and discontinue source is set to 'NO' as a
9292 || part of bug#4061818
9293 || smaddali 21-dec-04 Modified for bug#4083358 , to change logic for dropping selected unit attempts across terms
9294 */
9295
9296
9297 v_uoo_id IGS_PS_UNIT_OFR_OPT.UOO_ID%TYPE;
9298 l_message_name VARCHAR2(30);
9299 v_unit_from_past_term BOOLEAN;
9300 v_dummy VARCHAR2(1);
9301 l_cindex NUMBER;
9302
9303 cst_dropped CONSTANT VARCHAR2(10) := 'DROPPED';
9304 cst_unconfirm CONSTANT VARCHAR2(10) := 'UNCONFIRM';
9305 cst_completed CONSTANT VARCHAR2(10) := 'COMPLETED';
9306 cst_discontin CONSTANT VARCHAR2(10) := 'DISCONTIN';
9307 cst_duplicate CONSTANT VARCHAR2(10) := 'DUPLICATE';
9308 cst_enrolled CONSTANT VARCHAR2(10) := 'ENROLLED';
9309 cst_waitlist CONSTANT VARCHAR2(10) := 'WAITLISTED';
9310 cst_invalid CONSTANT VARCHAR2(10) := 'INVALID';
9311
9312 CURSOR c_sua_source (cp_person_id IGS_EN_SU_ATTEMPT.PERSON_ID%TYPE,
9313 cp_source_course_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
9314 cp_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
9315 SELECT *
9316 FROM IGS_EN_SU_ATTEMPT
9317 WHERE person_id = cp_person_id
9318 and course_cd = cp_source_course_cd
9319 and uoo_id = cp_uoo_id;
9320
9321 v_sua_source_rec c_sua_source%ROWTYPE;
9322
9323 CURSOR c_sub_sua_exists( cp_person_id IGS_EN_SU_ATTEMPT.PERSON_ID%TYPE,
9324 cp_source_program_cd IGS_EN_SU_ATTEMPT.COURSE_CD%TYPE,
9325 cp_uoo_id IGS_EN_SU_ATTEMPT.UOO_ID%TYPE) IS
9326 SELECT 'X'
9327 FROM IGS_PS_UNIT_OFR_OPT uoo
9328 WHERE uoo.relation_type = 'SUBORDINATE'
9329 AND uoo.sup_uoo_id = cp_uoo_id
9330 AND exists (SELECT 'X'
9331 FROM IGS_EN_SU_ATTEMPT sub_sua
9332 WHERE sub_sua.person_id = cp_person_id
9333 AND sub_sua.course_cd = cp_source_program_cd
9334 AND sub_sua.uoo_id = uoo.uoo_id
9335 AND sub_sua.unit_attempt_status <> cst_dropped);
9336
9337 -- get all the unit attempts selected and unselected by the user and order them so
9338 -- that subordinate is dropped first
9339 CURSOR c_get_all_units_in_src IS
9340 SELECT uoo_id FROM IGS_EN_SU_ATTEMPT
9341 WHERE person_id = p_person_id AND
9342 course_cd = p_source_course_cd AND
9343 unit_attempt_status NOT IN (cst_dropped,cst_duplicate)
9344 ORDER BY SUP_UNIT_CD ;
9345
9346 v_get_all_units_in_src_rec c_get_all_units_in_src%ROWTYPE;
9347 l_temp_uoo_ids VARCHAR2(1000);
9348
9349 -- get the course type of the passed program attempt
9350 CURSOR c_sua_career ( cp_person_id IN igs_en_stdnt_ps_att.person_id%TYPE ,
9351 cp_course_cd IN igs_en_stdnt_ps_att.course_cd%TYPE ) IS
9352 SELECT ver.course_type
9353 FROM IGS_PS_VER ver ,
9354 igs_en_stdnt_ps_att spa
9355 WHERE ver.course_cd = spa.course_cd AND
9356 ver.version_number = spa.version_number AND
9357 spa.course_cd = cp_course_cd AND
9358 spa.person_id = cp_person_id;
9359 l_source_course_type igs_ps_ver.course_type%TYPE;
9360 l_destn_course_type igs_ps_ver.course_type%TYPE;
9361
9362 CURSOR c_unit_dcnt is
9363 SELECT DISCONTINUATION_REASON_CD
9364 FROM IGS_EN_DCNT_REASONCD
9365 WHERE S_DISCONTINUATION_REASON_TYPE = 'UNIT_TRANS'
9366 AND DCNT_UNIT_IND = 'Y'
9367 AND SYS_DFLT_IND = 'Y'
9368 AND CLOSED_IND = 'N';
9369
9370 l_unt_disc_code IGS_EN_DCNT_REASONCD.DISCONTINUATION_REASON_CD%TYPE := null;
9371 l_dflt_disc_code IGS_EN_DCNT_REASONCD.DISCONTINUATION_REASON_CD%TYPE := null;
9372
9373 CURSOR c_dcnt_rsn IS
9374 SELECT discontinuation_reason_cd
9375 FROM igs_en_dcnt_reasoncd
9376 WHERE NVL(closed_ind,'N') ='N'
9377 AND dflt_ind ='Y'
9378 AND dcnt_unit_ind ='Y'
9379 AND s_discontinuation_reason_type IS NULL;
9380
9381
9382
9383 BEGIN
9384 --get the unit discontinuation reason type as part of transfer
9385 OPEN c_unit_dcnt;
9386 FETCH c_unit_dcnt into l_unt_disc_code;
9387 CLOSE c_unit_dcnt;
9388
9389 OPEN c_dcnt_rsn;
9390 FETCH c_dcnt_rsn INTO l_dflt_disc_code;
9391 CLOSE c_dcnt_rsn;
9392
9393
9394 l_temp_uoo_ids := ',' || p_uoo_ids || ',' ;
9395
9396 -- get all the uoo_ids of units present in the source whose status is in
9397 -- other than duplicate,dropped,unconfirmed.
9398 FOR v_get_all_units_in_src_rec IN c_get_all_units_in_src
9399 LOOP
9400
9401 -- get the unit detsils for the uoo_id in context
9402 OPEN c_sua_source(p_person_id, p_source_course_cd, v_get_all_units_in_src_rec.uoo_id);
9403 FETCH c_sua_source INTO v_sua_source_rec;
9404 CLOSE c_sua_source;
9405
9406 --l_cindex contains value other than ZERO when the uoo_id present in the source
9407 --is one amongst the selected ones.
9408 l_cindex := INSTR(l_temp_uoo_ids,','||v_get_all_units_in_src_rec.uoo_id||',',1,1);
9409 IF l_cindex <> 0 THEN
9410
9411 -- donot drop selected enrolled/invalid/waitlisted unit attempts belonging to a past term
9412 -- compared to the effective term in inter career transfer or program mode
9413 -- added this logic for bug#4083358
9414 IF v_sua_source_rec.unit_attempt_status IN ( cst_enrolled,cst_invalid,cst_waitlist ) AND
9415 NOT unit_effect_or_future_term(p_person_id,p_dest_course_cd,v_sua_source_rec.uoo_id,p_term_cal_type,p_term_seq_num) THEN
9416
9417 -- get the source and destination careers
9418 OPEN c_sua_career(p_person_id , p_source_course_cd);
9419 FETCH c_sua_career INTO l_source_course_type;
9420 CLOSE c_sua_career;
9421 OPEN c_sua_career(p_person_id , p_dest_course_cd);
9422 FETCH c_sua_career INTO l_destn_course_type;
9423 CLOSE c_sua_career;
9424 -- if career not setup then throw error
9425 IF l_source_course_type IS NULL OR l_destn_course_type IS NULL THEN
9426 Fnd_Message.Set_name('IGS','IGS_GE_UNHANDLED_EXP');
9427 FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_GEN_010.enrp_ins_sua_trnsfr');
9428 IGS_GE_MSG_STACK.ADD;
9429 App_Exception.Raise_Exception;
9430 END IF;
9431
9432 -- if it is an intra career transfer then drop unit from source reducing counts as this unit was not transfered
9433 IF NVL(FND_PROFILE.VALUE('CAREER_MODEL_ENABLED'),'N') = 'Y' AND
9434 l_source_course_type = l_destn_course_type THEN
9435 -- superior unit cannot be drop even when one of its subordinates is enrolled
9436 OPEN c_sub_sua_exists(p_person_id, p_source_course_cd, v_get_all_units_in_src_rec.uoo_id);
9437 FETCH c_sub_sua_exists INTO v_dummy;
9438 IF c_sub_sua_exists%FOUND THEN
9439 CLOSE c_sub_sua_exists;
9440 p_message_name := 'IGS_EN_SUP_DEL_NOTALWD';
9441 RETURN FALSE;
9442 ELSE
9443 CLOSE c_sub_sua_exists;
9444 END IF;
9445
9446 igs_en_sua_api.update_unit_attempt( -- calling the API since the counts have to be updated
9447 X_ROWID => v_sua_source_rec.ROW_ID,
9448 X_PERSON_ID => v_sua_source_rec.PERSON_ID,
9449 X_COURSE_CD => v_sua_source_rec.COURSE_CD ,
9450 X_UNIT_CD => v_sua_source_rec.UNIT_CD,
9451 X_CAL_TYPE => v_sua_source_rec.CAL_TYPE,
9452 X_CI_SEQUENCE_NUMBER => v_sua_source_rec.CI_SEQUENCE_NUMBER ,
9453 X_VERSION_NUMBER => v_sua_source_rec.VERSION_NUMBER ,
9454 X_LOCATION_CD => v_sua_source_rec.LOCATION_CD,
9455 X_UNIT_CLASS => v_sua_source_rec.UNIT_CLASS ,
9456 X_CI_START_DT => v_sua_source_rec.CI_START_DT,
9457 X_CI_END_DT => v_sua_source_rec.CI_END_DT,
9458 X_UOO_ID => v_sua_source_rec.UOO_ID ,
9459 X_ENROLLED_DT => v_sua_source_rec.ENROLLED_DT,
9460 X_UNIT_ATTEMPT_STATUS => cst_dropped, -- updating the status to dropped
9461 X_ADMINISTRATIVE_UNIT_STATUS => v_sua_source_rec.administrative_unit_status,
9462 X_ADMINISTRATIVE_PRIORITY => v_sua_source_rec.administrative_PRIORITY,
9463 X_DISCONTINUED_DT => nvl(v_sua_source_rec.discontinued_dt,trunc(SYSDATE)),
9464 X_DCNT_REASON_CD => l_dflt_disc_code,
9465 X_RULE_WAIVED_DT => v_sua_source_rec.RULE_WAIVED_DT ,
9466 X_RULE_WAIVED_PERSON_ID => v_sua_source_rec.RULE_WAIVED_PERSON_ID ,
9467 X_NO_ASSESSMENT_IND => v_sua_source_rec.NO_ASSESSMENT_IND,
9468 X_SUP_UNIT_CD => v_sua_source_rec.SUP_UNIT_CD ,
9469 X_SUP_VERSION_NUMBER => v_sua_source_rec.SUP_VERSION_NUMBER,
9470 X_EXAM_LOCATION_CD => v_sua_source_rec.EXAM_LOCATION_CD,
9471 X_ALTERNATIVE_TITLE => v_sua_source_rec.ALTERNATIVE_TITLE,
9472 X_OVERRIDE_ENROLLED_CP => v_sua_source_rec.OVERRIDE_ENROLLED_CP,
9473 X_OVERRIDE_EFTSU => v_sua_source_rec.OVERRIDE_EFTSU ,
9474 X_OVERRIDE_ACHIEVABLE_CP => v_sua_source_rec.OVERRIDE_ACHIEVABLE_CP,
9475 X_OVERRIDE_OUTCOME_DUE_DT => v_sua_source_rec.OVERRIDE_OUTCOME_DUE_DT,
9476 X_OVERRIDE_CREDIT_REASON => v_sua_source_rec.OVERRIDE_CREDIT_REASON,
9477 X_WAITLIST_DT => v_sua_source_rec.waitlist_dt,
9478 X_MODE => 'R',
9479 X_GS_VERSION_NUMBER => v_sua_source_rec.gs_version_number,
9480 X_ENR_METHOD_TYPE => v_sua_source_rec.enr_method_type,
9481 X_FAILED_UNIT_RULE => v_sua_source_rec.FAILED_UNIT_RULE,
9482 X_CART => v_sua_source_rec.CART,
9483 X_RSV_SEAT_EXT_ID => v_sua_source_rec.RSV_SEAT_EXT_ID ,
9484 X_ORG_UNIT_CD => v_sua_source_rec.org_unit_cd ,
9485 X_SESSION_ID => v_sua_source_rec.session_id,
9486 X_GRADING_SCHEMA_CODE => v_sua_source_rec.grading_schema_code,
9487 X_DEG_AUD_DETAIL_ID => v_sua_source_rec.deg_aud_detail_id,
9488 X_SUBTITLE => v_sua_source_rec.subtitle,
9489 X_STUDENT_CAREER_TRANSCRIPT => v_sua_source_rec.student_career_transcript,
9490 X_STUDENT_CAREER_STATISTICS => v_sua_source_rec.student_career_statistics,
9491 X_ATTRIBUTE_CATEGORY => v_sua_source_rec.attribute_category,
9492 X_ATTRIBUTE1 => v_sua_source_rec.attribute1,
9493 X_ATTRIBUTE2 => v_sua_source_rec.attribute2,
9494 X_ATTRIBUTE3 => v_sua_source_rec.attribute3,
9495 X_ATTRIBUTE4 => v_sua_source_rec.attribute4,
9496 X_ATTRIBUTE5 => v_sua_source_rec.attribute5,
9497 X_ATTRIBUTE6 => v_sua_source_rec.attribute6,
9498 X_ATTRIBUTE7 => v_sua_source_rec.attribute7,
9499 X_ATTRIBUTE8 => v_sua_source_rec.attribute8,
9500 X_ATTRIBUTE9 => v_sua_source_rec.attribute9,
9501 X_ATTRIBUTE10 => v_sua_source_rec.attribute10,
9502 X_ATTRIBUTE11 => v_sua_source_rec.attribute11,
9503 X_ATTRIBUTE12 => v_sua_source_rec.attribute12,
9504 X_ATTRIBUTE13 => v_sua_source_rec.attribute13,
9505 X_ATTRIBUTE14 => v_sua_source_rec.attribute14,
9506 X_ATTRIBUTE15 => v_sua_source_rec.attribute15,
9507 X_ATTRIBUTE16 => v_sua_source_rec.attribute16,
9508 X_ATTRIBUTE17 => v_sua_source_rec.attribute17,
9509 X_ATTRIBUTE18 => v_sua_source_rec.attribute18,
9510 X_ATTRIBUTE19 => v_sua_source_rec.attribute19,
9511 X_ATTRIBUTE20 => v_sua_source_rec.attribute20,
9512 X_WAITLIST_MANUAL_IND => v_sua_source_rec.waitlist_manual_ind,
9513 X_WLST_PRIORITY_WEIGHT_NUM => v_sua_source_rec.wlst_priority_weight_num,
9514 X_WLST_PREFERENCE_WEIGHT_NUM => v_sua_source_rec.wlst_preference_weight_num,
9515 X_CORE_INDICATOR_CODE => v_sua_source_rec.core_indicator_code
9516 );
9517
9518 END IF ; -- if intra career transfer
9519
9520 -- else this selected unit was transfered , so drop
9521 ELSE
9522
9523 -- v_unit_from_past_term is assigned with TRUE for units which were enrolled in Term calendar other than
9524 -- effective Term calendar of Transfer and also having unit status in DISCONTINUE/COMPLETED else FALSE.
9525 -- for all other statuses this function returns False.
9526
9527 v_unit_from_past_term := enrf_unit_from_past(
9528 p_person_id,
9529 p_source_course_cd,
9530 v_get_all_units_in_src_rec.uoo_id,
9531 v_sua_source_rec.unit_attempt_status,
9532 v_sua_source_rec.discontinued_dt,
9533 p_term_cal_type,
9534 p_term_seq_num);
9535
9536 IF NOT v_unit_from_past_term THEN
9537 -- superior unit cannot be drop even when one of its subordinates is enrolled
9538 OPEN c_sub_sua_exists(p_person_id, p_source_course_cd, v_get_all_units_in_src_rec.uoo_id);
9539 FETCH c_sub_sua_exists INTO v_dummy;
9540 IF c_sub_sua_exists%FOUND THEN
9541 CLOSE c_sub_sua_exists;
9542 p_message_name := 'IGS_EN_SUP_DEL_NOTALWD';
9543 RETURN FALSE;
9544 ELSE
9545 CLOSE c_sub_sua_exists;
9546 END IF;
9547
9548 IF l_unt_disc_code IS NULL THEN
9549 -- implies no system reason for unit drop due to transfer is setup
9550 --hence throw error and return
9551 p_message_name := 'IGS_EN_NO_SYS_DFLT_REASON';
9552 RETURN FALSE;
9553 END IF;
9554
9555
9556
9557 IGS_EN_SU_ATTEMPT_PKG.UPDATE_ROW( -- calling the TBH since the count need not be updated
9558 X_ROWID => v_sua_source_rec.ROW_ID,
9559 X_PERSON_ID => v_sua_source_rec.PERSON_ID,
9560 X_COURSE_CD => v_sua_source_rec.COURSE_CD ,
9561 X_UNIT_CD => v_sua_source_rec.UNIT_CD,
9562 X_CAL_TYPE => v_sua_source_rec.CAL_TYPE,
9563 X_CI_SEQUENCE_NUMBER => v_sua_source_rec.CI_SEQUENCE_NUMBER ,
9564 X_VERSION_NUMBER => v_sua_source_rec.VERSION_NUMBER ,
9565 X_LOCATION_CD => v_sua_source_rec.LOCATION_CD,
9566 X_UNIT_CLASS => v_sua_source_rec.UNIT_CLASS ,
9567 X_CI_START_DT => v_sua_source_rec.CI_START_DT,
9568 X_CI_END_DT => v_sua_source_rec.CI_END_DT,
9569 X_UOO_ID => v_sua_source_rec.UOO_ID ,
9570 X_ENROLLED_DT => v_sua_source_rec.ENROLLED_DT,
9571 X_UNIT_ATTEMPT_STATUS => cst_dropped, -- modifying the status to dropped
9572 X_ADMINISTRATIVE_UNIT_STATUS => v_sua_source_rec.administrative_unit_status,
9573 X_ADMINISTRATIVE_PRIORITY => v_sua_source_rec.administrative_PRIORITY,
9574 X_DISCONTINUED_DT => nvl(v_sua_source_rec.discontinued_dt,SYSDATE),
9575 X_DCNT_REASON_CD => l_unt_disc_code,
9576 X_RULE_WAIVED_DT => v_sua_source_rec.RULE_WAIVED_DT ,
9577 X_RULE_WAIVED_PERSON_ID => v_sua_source_rec.RULE_WAIVED_PERSON_ID ,
9578 X_NO_ASSESSMENT_IND => v_sua_source_rec.NO_ASSESSMENT_IND,
9579 X_SUP_UNIT_CD => v_sua_source_rec.SUP_UNIT_CD ,
9580 X_SUP_VERSION_NUMBER => v_sua_source_rec.SUP_VERSION_NUMBER,
9581 X_EXAM_LOCATION_CD => v_sua_source_rec.EXAM_LOCATION_CD,
9582 X_ALTERNATIVE_TITLE => v_sua_source_rec.ALTERNATIVE_TITLE,
9583 X_OVERRIDE_ENROLLED_CP => v_sua_source_rec.OVERRIDE_ENROLLED_CP,
9584 X_OVERRIDE_EFTSU => v_sua_source_rec.OVERRIDE_EFTSU ,
9585 X_OVERRIDE_ACHIEVABLE_CP => v_sua_source_rec.OVERRIDE_ACHIEVABLE_CP,
9586 X_OVERRIDE_OUTCOME_DUE_DT => v_sua_source_rec.OVERRIDE_OUTCOME_DUE_DT,
9587 X_OVERRIDE_CREDIT_REASON => v_sua_source_rec.OVERRIDE_CREDIT_REASON,
9588 X_WAITLIST_DT => v_sua_source_rec.waitlist_dt,
9589 X_MODE => 'R',
9590 X_GS_VERSION_NUMBER => v_sua_source_rec.gs_version_number,
9591 X_ENR_METHOD_TYPE => v_sua_source_rec.enr_method_type,
9592 X_FAILED_UNIT_RULE => v_sua_source_rec.FAILED_UNIT_RULE,
9593 X_CART => v_sua_source_rec.CART,
9594 X_RSV_SEAT_EXT_ID => v_sua_source_rec.RSV_SEAT_EXT_ID ,
9595 X_ORG_UNIT_CD => v_sua_source_rec.org_unit_cd ,
9596 X_SESSION_ID => v_sua_source_rec.session_id,
9597 X_GRADING_SCHEMA_CODE => v_sua_source_rec.grading_schema_code,
9598 X_DEG_AUD_DETAIL_ID => v_sua_source_rec.deg_aud_detail_id,
9599 X_SUBTITLE => v_sua_source_rec.subtitle,
9600 X_STUDENT_CAREER_TRANSCRIPT => v_sua_source_rec.student_career_transcript,
9601 X_STUDENT_CAREER_STATISTICS => v_sua_source_rec.student_career_statistics,
9602 X_ATTRIBUTE_CATEGORY => v_sua_source_rec.attribute_category,
9603 X_ATTRIBUTE1 => v_sua_source_rec.attribute1,
9604 X_ATTRIBUTE2 => v_sua_source_rec.attribute2,
9605 X_ATTRIBUTE3 => v_sua_source_rec.attribute3,
9606 X_ATTRIBUTE4 => v_sua_source_rec.attribute4,
9607 X_ATTRIBUTE5 => v_sua_source_rec.attribute5,
9608 X_ATTRIBUTE6 => v_sua_source_rec.attribute6,
9609 X_ATTRIBUTE7 => v_sua_source_rec.attribute7,
9610 X_ATTRIBUTE8 => v_sua_source_rec.attribute8,
9611 X_ATTRIBUTE9 => v_sua_source_rec.attribute9,
9612 X_ATTRIBUTE10 => v_sua_source_rec.attribute10,
9613 X_ATTRIBUTE11 => v_sua_source_rec.attribute11,
9614 X_ATTRIBUTE12 => v_sua_source_rec.attribute12,
9615 X_ATTRIBUTE13 => v_sua_source_rec.attribute13,
9616 X_ATTRIBUTE14 => v_sua_source_rec.attribute14,
9617 X_ATTRIBUTE15 => v_sua_source_rec.attribute15,
9618 X_ATTRIBUTE16 => v_sua_source_rec.attribute16,
9619 X_ATTRIBUTE17 => v_sua_source_rec.attribute17,
9620 X_ATTRIBUTE18 => v_sua_source_rec.attribute18,
9621 X_ATTRIBUTE19 => v_sua_source_rec.attribute19,
9622 X_ATTRIBUTE20 => v_sua_source_rec.attribute20,
9623 X_WAITLIST_MANUAL_IND => v_sua_source_rec.waitlist_manual_ind ,
9624 X_WLST_PRIORITY_WEIGHT_NUM => v_sua_source_rec.wlst_priority_weight_num,
9625 X_WLST_PREFERENCE_WEIGHT_NUM => v_sua_source_rec.wlst_preference_weight_num,
9626 X_CORE_INDICATOR_CODE => v_sua_source_rec.core_indicator_code,
9627 X_UPD_AUDIT_FLAG => v_sua_source_rec.upd_audit_flag,
9628 X_SS_SOURCE_IND => v_sua_source_rec.ss_source_ind
9629 );
9630 END IF;-- end of IF NOT v_unit_from_past_term THEN
9631
9632 END IF ; -- if enrolled unit is in past term?
9633
9634 -- this will executed when unchecked units are in status of enrolled,invalid,waitlisted inorder
9635 -- to reduce the count.
9636 -- UNCONFIRM are not show to user in Page but need to be droped when source become secondary or discontinue is 'Yes'.
9637 ELSIF (p_drop AND v_sua_source_rec.unit_attempt_status IN ('ENROLLED','INVALID','WAITLISTED','UNCONFIRM')) THEN
9638
9639 -- superior unit cannot be drop even when one of its subordinates is enrolled
9640 OPEN c_sub_sua_exists(p_person_id, p_source_course_cd, v_get_all_units_in_src_rec.uoo_id);
9641 FETCH c_sub_sua_exists INTO v_dummy;
9642 IF c_sub_sua_exists%FOUND THEN
9643 CLOSE c_sub_sua_exists;
9644 p_message_name := 'IGS_EN_SUP_DEL_NOTALWD';
9645 RETURN FALSE;
9646 ELSE
9647 CLOSE c_sub_sua_exists;
9648 END IF;
9649
9650 igs_en_sua_api.update_unit_attempt( -- calling the API since the counts have to be updated
9651 X_ROWID => v_sua_source_rec.ROW_ID,
9652 X_PERSON_ID => v_sua_source_rec.PERSON_ID,
9653 X_COURSE_CD => v_sua_source_rec.COURSE_CD ,
9654 X_UNIT_CD => v_sua_source_rec.UNIT_CD,
9655 X_CAL_TYPE => v_sua_source_rec.CAL_TYPE,
9656 X_CI_SEQUENCE_NUMBER => v_sua_source_rec.CI_SEQUENCE_NUMBER ,
9657 X_VERSION_NUMBER => v_sua_source_rec.VERSION_NUMBER ,
9658 X_LOCATION_CD => v_sua_source_rec.LOCATION_CD,
9659 X_UNIT_CLASS => v_sua_source_rec.UNIT_CLASS ,
9660 X_CI_START_DT => v_sua_source_rec.CI_START_DT,
9661 X_CI_END_DT => v_sua_source_rec.CI_END_DT,
9662 X_UOO_ID => v_sua_source_rec.UOO_ID ,
9663 X_ENROLLED_DT => v_sua_source_rec.ENROLLED_DT,
9664 X_UNIT_ATTEMPT_STATUS => cst_dropped, -- updating the status to dropped
9665 X_ADMINISTRATIVE_UNIT_STATUS => v_sua_source_rec.administrative_unit_status,
9666 X_ADMINISTRATIVE_PRIORITY => v_sua_source_rec.administrative_PRIORITY,
9667 X_DISCONTINUED_DT => nvl(v_sua_source_rec.discontinued_dt,trunc(SYSDATE)),
9668 X_DCNT_REASON_CD => l_dflt_disc_code,
9669 X_RULE_WAIVED_DT => v_sua_source_rec.RULE_WAIVED_DT ,
9670 X_RULE_WAIVED_PERSON_ID => v_sua_source_rec.RULE_WAIVED_PERSON_ID ,
9671 X_NO_ASSESSMENT_IND => v_sua_source_rec.NO_ASSESSMENT_IND,
9672 X_SUP_UNIT_CD => v_sua_source_rec.SUP_UNIT_CD ,
9673 X_SUP_VERSION_NUMBER => v_sua_source_rec.SUP_VERSION_NUMBER,
9674 X_EXAM_LOCATION_CD => v_sua_source_rec.EXAM_LOCATION_CD,
9675 X_ALTERNATIVE_TITLE => v_sua_source_rec.ALTERNATIVE_TITLE,
9676 X_OVERRIDE_ENROLLED_CP => v_sua_source_rec.OVERRIDE_ENROLLED_CP,
9677 X_OVERRIDE_EFTSU => v_sua_source_rec.OVERRIDE_EFTSU ,
9678 X_OVERRIDE_ACHIEVABLE_CP => v_sua_source_rec.OVERRIDE_ACHIEVABLE_CP,
9679 X_OVERRIDE_OUTCOME_DUE_DT => v_sua_source_rec.OVERRIDE_OUTCOME_DUE_DT,
9680 X_OVERRIDE_CREDIT_REASON => v_sua_source_rec.OVERRIDE_CREDIT_REASON,
9681 X_WAITLIST_DT => v_sua_source_rec.waitlist_dt,
9682 X_MODE => 'R',
9683 X_GS_VERSION_NUMBER => v_sua_source_rec.gs_version_number,
9684 X_ENR_METHOD_TYPE => v_sua_source_rec.enr_method_type,
9685 X_FAILED_UNIT_RULE => v_sua_source_rec.FAILED_UNIT_RULE,
9686 X_CART => v_sua_source_rec.CART,
9687 X_RSV_SEAT_EXT_ID => v_sua_source_rec.RSV_SEAT_EXT_ID ,
9688 X_ORG_UNIT_CD => v_sua_source_rec.org_unit_cd ,
9689 X_SESSION_ID => v_sua_source_rec.session_id,
9690 X_GRADING_SCHEMA_CODE => v_sua_source_rec.grading_schema_code,
9691 X_DEG_AUD_DETAIL_ID => v_sua_source_rec.deg_aud_detail_id,
9692 X_SUBTITLE => v_sua_source_rec.subtitle,
9693 X_STUDENT_CAREER_TRANSCRIPT => v_sua_source_rec.student_career_transcript,
9694 X_STUDENT_CAREER_STATISTICS => v_sua_source_rec.student_career_statistics,
9695 X_ATTRIBUTE_CATEGORY => v_sua_source_rec.attribute_category,
9696 X_ATTRIBUTE1 => v_sua_source_rec.attribute1,
9697 X_ATTRIBUTE2 => v_sua_source_rec.attribute2,
9698 X_ATTRIBUTE3 => v_sua_source_rec.attribute3,
9699 X_ATTRIBUTE4 => v_sua_source_rec.attribute4,
9700 X_ATTRIBUTE5 => v_sua_source_rec.attribute5,
9701 X_ATTRIBUTE6 => v_sua_source_rec.attribute6,
9702 X_ATTRIBUTE7 => v_sua_source_rec.attribute7,
9703 X_ATTRIBUTE8 => v_sua_source_rec.attribute8,
9704 X_ATTRIBUTE9 => v_sua_source_rec.attribute9,
9705 X_ATTRIBUTE10 => v_sua_source_rec.attribute10,
9706 X_ATTRIBUTE11 => v_sua_source_rec.attribute11,
9707 X_ATTRIBUTE12 => v_sua_source_rec.attribute12,
9708 X_ATTRIBUTE13 => v_sua_source_rec.attribute13,
9709 X_ATTRIBUTE14 => v_sua_source_rec.attribute14,
9710 X_ATTRIBUTE15 => v_sua_source_rec.attribute15,
9711 X_ATTRIBUTE16 => v_sua_source_rec.attribute16,
9712 X_ATTRIBUTE17 => v_sua_source_rec.attribute17,
9713 X_ATTRIBUTE18 => v_sua_source_rec.attribute18,
9714 X_ATTRIBUTE19 => v_sua_source_rec.attribute19,
9715 X_ATTRIBUTE20 => v_sua_source_rec.attribute20,
9716 X_WAITLIST_MANUAL_IND => v_sua_source_rec.waitlist_manual_ind,
9717 X_WLST_PRIORITY_WEIGHT_NUM => v_sua_source_rec.wlst_priority_weight_num,
9718 X_WLST_PREFERENCE_WEIGHT_NUM => v_sua_source_rec.wlst_preference_weight_num,
9719 X_CORE_INDICATOR_CODE => v_sua_source_rec.core_indicator_code
9720 );
9721
9722 END IF; -- end of l_cindex <> 0 IF THEN
9723
9724 END LOOP;-- end of get all units in source FOR LOOP
9725
9726
9727 RETURN TRUE;
9728
9729 END Enrp_del_all_Sua_Trnsfr;
9730
9731
9732
9733 FUNCTION enrf_sup_sua_exists(
9734 p_person_id IN NUMBER,
9735 p_course_cd IN VARCHAR2,
9736 p_uoo_id IN NUMBER)
9737 RETURN BOOLEAN IS
9738 CURSOR cur_supuoo_id IS select sup_uoo_id
9739 from IGS_PS_UNIT_OFR_OPT where uoo_id=p_uoo_id;
9740
9741 CURSOR cur_sua (
9742 cp_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
9743 cp_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE,
9744 cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE)
9745 IS
9746 Select 1 from IGS_EN_SU_ATTEMPT
9747 Where person_id=cp_person_id AND
9748 course_cd=cp_course_cd AND
9749 uoo_id=cp_uoo_id AND
9750 unit_attempt_status <> 'DROPPED';
9751
9752 CURSOR c_sup_unit_cd (cp_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE,
9753 cp_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE,
9754 cp_uoo_id IGS_EN_SU_ATTEMPT.uoo_id%TYPE) IS
9755 SELECT sup_unit_Cd
9756 FROM IGS_EN_SU_ATTEMPT
9757 WHERE person_id = cp_person_id
9758 AND course_cd = cp_course_cd
9759 AND uoo_id = cp_uoo_id;
9760
9761 l_sup_uoo_id IGS_PS_UNIT_OFR_OPT.sup_uoo_id%TYPE;
9762 l_sup_unit_Cd IGS_EN_SU_ATTEMPT.SUP_UNIT_CD%TYPE;
9763 l_cur_sua_rec cur_sua%ROWTYPE;
9764 l_result BOOLEAN;
9765 l_person_id IGS_EN_SU_ATTEMPT.person_id%TYPE;
9766 l_course_cd IGS_EN_SU_ATTEMPT.course_cd%TYPE;
9767 BEGIN
9768
9769 OPEN c_sup_unit_cd(p_person_id, p_course_cd, p_uoo_id);
9770 FETCH c_sup_unit_cd INTO l_sup_unit_Cd;
9771 CLOSE c_sup_unit_Cd;
9772
9773 IF l_sup_unit_cd IS NULL THEN
9774 RETURN TRUE;
9775 END IF;
9776
9777 OPEN cur_supuoo_id;
9778 FETCH cur_supuoo_id INTO l_sup_uoo_id;
9779
9780 --if no records are returned by cur_supuoo_id
9781 IF cur_supuoo_id%NOTFOUND THEN
9782 l_result :=false;
9783 ELSE
9784 l_result:=true;
9785 IF l_sup_uoo_id IS NOT NULL THEN --call cursor cur_sua
9786 OPEN cur_sua(p_person_id,p_course_cd,l_sup_uoo_id);
9787 FETCH cur_sua INTO l_cur_sua_rec;
9788 IF cur_sua%NOTFOUND THEN
9789 l_result:=false;
9790 ELSE
9791 l_result:=true;
9792 END IF;
9793 END IF;
9794 END IF;
9795
9796 --close the cursors
9797 CLOSE cur_supuoo_id;
9798 --check whether cur_sua is open before closing it
9799 IF cur_sua%ISOPEN THEN
9800 CLOSE cur_sua;
9801 END IF;
9802
9803 RETURN l_result;
9804 END enrf_sup_sua_exists;
9805
9806 PROCEDURE Enrp_Ins_Suai_Trnsfr(
9807 p_person_id IN NUMBER,
9808 p_source_course_cd IN VARCHAR2,
9809 p_dest_course_cd IN VARCHAR2,
9810 p_source_uoo_id IN NUMBER,
9811 p_dest_uoo_id IN NUMBER,
9812 p_delete_source IN BOOLEAN)
9813 IS
9814
9815 Cursor c_source_ai_group(cp_person_id NUMBER,
9816 cp_source_course_cd VARCHAR2,
9817 cp_source_uoo_id NUMBER) IS
9818 SELECT sag.rowid, sag.*
9819 FROM IGS_AS_SUA_AI_GROUP sag
9820 WHERE sag.person_id = cp_person_id
9821 AND sag.course_cd = cp_source_course_cd
9822 AND sag.uoo_id = cp_source_uoo_id
9823 AND logical_delete_date IS NULL;
9824
9825
9826 Cursor c_dest_ai_group (cp_person_id NUMBER,
9827 cp_dest_course_cd VARCHAR2,
9828 cp_dest_uoo_id NUMBER,
9829 cp_group_name VARCHAR2) IS
9830 SELECT GROUP_NAME
9831 FROM IGS_AS_SUA_AI_GROUP
9832 WHERE person_id = cp_person_id
9833 and course_cd = cp_dest_course_cd
9834 and uoo_id = cp_dest_uoo_id
9835 and group_name = cp_group_name;
9836
9837 CURSOR c_usec_level (cp_person_id NUMBER,
9838 cp_dest_course_cd VARCHAR2,
9839 cp_dest_uoo_id NUMBER) IS
9840 SELECT COUNT (person_id)
9841 FROM igs_as_usecai_sua_v
9842 WHERE person_id = cp_person_id
9843 AND course_cd = cp_dest_course_cd
9844 AND uoo_id = cp_dest_uoo_id
9845 AND usai_logical_delete_dt IS NULL;
9846
9847 Cursor c_source_su_itm (cp_person_id NUMBER,
9848 cp_course_cd VARCHAR2,
9849 cp_uoo_id NUMBER,
9850 c_sua_ass_item_group_id NUMBER) IS
9851 SELECT asit.rowid, asit.*
9852 FROM IGS_AS_SU_ATMPT_ITM asit
9853 WHERE asit.person_id = cp_person_id
9854 and asit.course_cd = cp_course_cd
9855 and asit.uoo_id = cp_uoo_id
9856 and asit.SUA_ASS_ITEM_GROUP_ID = c_sua_ass_item_group_id
9857 and asit.LOGICAL_DELETE_DT IS NULL;
9858
9859
9860 CURSOR c_usec_ass_itm (cp_unit_section_ass_item_id NUMBER,
9861 cp_dest_uoo_id NUMBER) IS
9862 SELECT usai_dest.UNIT_SECTION_ASS_ITEM_ID
9863 FROM igs_ps_unitass_item_v usai_source,
9864 igs_ps_unitass_item_v usai_dest,
9865 igs_as_assessmnt_itm ai_dest,
9866 igs_as_assessmnt_itm ai_source
9867 WHERE usai_source.unit_section_ass_item_id = cp_unit_section_ass_item_id
9868 and usai_dest.uoo_id = cp_dest_uoo_id
9869 and usai_dest.ass_id = ai_dest.ass_id
9870 and usai_source.ass_id = ai_source.ass_id
9871 and ai_source.ASSESSMENT_TYPE = ai_dest.ASSESSMENT_TYPE
9872 and usai_source.REFERENCE = usai_dest.REFERENCE
9873 and usai_source.GRADING_SCHEMA_CD = usai_dest.GRADING_SCHEMA_CD
9874 and usai_source.GS_VERSION_NUMBER = usai_dest.GS_VERSION_NUMBER;
9875
9876 CURSOR c_unit_ass_itm (cp_person_id NUMBER,
9877 cp_source_course_cd VARCHAR2,
9878 cp_source_unit_ass_item_id NUMBER,
9879 cp_dest_course_cd VARCHAR2,
9880 cp_dest_uoo_id NUMBER) IS
9881 SELECT suv_dest.unit_ass_item_id
9882 FROM igs_as_uai_sua_v suv_dest ,
9883 igs_as_assessmnt_itm ai_dest,
9884 igs_as_uai_sua_v suv_source
9885 WHERE suv_dest.uai_logical_delete_dt is null
9886 and ai_dest.ass_id = suv_dest.ass_id
9887 and suv_dest.person_id = cp_person_id
9888 and suv_dest.course_cd = cp_dest_course_cd
9889 and suv_dest.uoo_id = cp_dest_uoo_id
9890 and ai_dest.closed_ind = 'N'
9891 and suv_source.unit_ass_item_id = cp_source_unit_ass_item_id
9892 and suv_source.ass_id = suv_dest.ass_id
9893 and suv_source.sequence_number = suv_dest.sequence_number
9894 and suv_source.person_id = cp_person_id
9895 and suv_source.course_cd = cp_source_course_cd;
9896
9897
9898 l_group_name IGS_AS_SUA_AI_GROUP.group_name%TYPE;
9899 l_rowid VARCHAR2(25);
9900 l_sua_ass_itemgrp_id IGS_AS_SUA_AI_GROUP.sua_ass_item_group_id%TYPE;
9901 l_usec_ass_item_id igs_as_su_atmpt_itm.unit_section_ass_item_id%TYPE;
9902 l_unit_ass_item_id igs_as_su_atmpt_itm.unit_ass_item_id%TYPE;
9903 l_rowid2 VARCHAR2(25);
9904 l_dummy NUMBER;
9905
9906 l_suai_valid BOOLEAN;
9907
9908 BEGIN
9909 --loop through the assessement item groups for the source unit section
9910 FOR vc_source_ai_group IN c_source_ai_group(p_person_id,
9911 p_source_course_cd,
9912 p_source_uoo_id) LOOP
9913
9914 --check if assessment item group exists for the destination unit attempt
9915 OPEN c_dest_ai_group(p_person_id,p_dest_course_cd,p_dest_uoo_id,vc_source_ai_group.group_name);
9916 FETCH c_dest_ai_group INTO l_group_name;
9917
9918 --if the assessment item group does not exist for the destination unit attempt
9919 IF c_dest_ai_group%NOTFOUND THEN
9920 CLOSE c_dest_ai_group;
9921
9922 --Copy the student unit attempt assessment item groups from the source to the destination
9923 l_rowid := NULL;
9924 igs_as_sua_ai_group_pkg.insert_row (
9925 x_rowid => l_rowid,
9926 x_sua_ass_item_group_id => l_sua_ass_itemgrp_id,
9927 x_person_id => vc_source_ai_group.person_id,
9928 x_course_cd => p_dest_course_cd,
9929 x_uoo_id => p_dest_uoo_id,
9930 x_group_name => vc_source_ai_group.group_name,
9931 x_midterm_formula_code => vc_source_ai_group.midterm_formula_code,
9932 x_midterm_formula_qty => vc_source_ai_group.midterm_formula_qty,
9933 x_midterm_weight_qty => vc_source_ai_group.midterm_weight_qty,
9934 x_final_formula_code => vc_source_ai_group.final_formula_code,
9935 x_final_formula_qty => vc_source_ai_group.final_formula_qty,
9936 x_final_weight_qty => vc_source_ai_group.final_weight_qty,
9937 x_unit_ass_item_group_id => vc_source_ai_group.unit_ass_item_group_id,
9938 x_us_ass_item_group_id => vc_source_ai_group.us_ass_item_group_id,
9939 x_logical_delete_date => vc_source_ai_group.logical_delete_date,
9940 x_mode => 'R');
9941
9942 --loop through the the assessement items under the group
9943 FOR vc_source_su_itm IN c_source_su_itm (p_person_id ,
9944 p_source_course_cd ,
9945 p_source_uoo_id ,
9946 vc_source_ai_group.sua_ass_item_group_id ) LOOP
9947 -- smaddali modified the default values for these 2 variables for bug#4701301
9948 l_usec_ass_item_id := NULL;
9949 l_unit_ass_item_id := NULL;
9950 l_suai_valid := FALSE;
9951 --Check if the assessment type for the source is compatible with the destination
9952 IF p_source_uoo_id = p_dest_uoo_id THEN
9953 -- smaddali modified the default values for these 2 variables for bug#4701301
9954 l_usec_ass_item_id := vc_source_su_itm.unit_section_ass_item_id;
9955 l_unit_ass_item_id := vc_source_su_itm.unit_ass_item_id;
9956 l_suai_valid := TRUE;
9957 ELSE
9958
9959 -- the assessment item could be set up at two level one in psp and one in records
9960 -- Depending on the results of this cursor c_usec_level further validation have to
9961 -- be performed.
9962
9963 OPEN c_usec_level(p_person_id, p_dest_course_cd, p_dest_uoo_id);
9964 FETCH c_usec_level INTO l_dummy;
9965 CLOSE c_usec_level;
9966
9967 IF l_dummy <> 0 THEN
9968 OPEN c_usec_ass_itm (vc_source_su_itm.unit_section_ass_item_id ,
9969 p_dest_uoo_id);
9970 FETCH c_usec_ass_itm INTO l_usec_ass_item_id;
9971
9972 IF c_usec_ass_itm%FOUND THEN
9973 l_suai_valid := TRUE;
9974 ELSE
9975 l_suai_valid := FALSE;
9976 END IF;
9977 CLOSE c_usec_ass_itm;
9978 ELSE
9979 OPEN c_unit_ass_itm (p_person_id , p_source_course_cd,vc_source_su_itm.unit_ass_item_id,
9980 p_dest_course_cd , p_dest_uoo_id);
9981 FETCH c_unit_ass_itm INTO l_unit_ass_item_id;
9982 IF c_unit_ass_itm%FOUND THEN
9983 l_suai_valid := TRUE;
9984 ELSE
9985 l_suai_valid := FALSE;
9986 END IF;
9987 CLOSE c_unit_ass_itm;
9988 END IF;
9989 END IF;
9990
9991 IF l_suai_valid THEN
9992 l_rowid2 := NULL;
9993
9994 vc_source_su_itm.unit_section_ass_item_id := l_usec_ass_item_id;
9995 vc_source_su_itm.unit_ass_item_id := l_unit_ass_item_id;
9996
9997 igs_as_su_atmpt_itm_pkg.insert_row (
9998 x_rowid => l_rowid2,
9999 x_person_id => p_person_id,
10000 x_course_cd => p_dest_course_cd,
10001 x_unit_cd => vc_source_su_itm.unit_cd,
10002 x_cal_type => vc_source_su_itm.cal_type,
10003 x_ci_sequence_number => vc_source_su_itm.ci_sequence_number,
10004 x_ass_id => vc_source_su_itm.ass_id,
10005 x_creation_dt => vc_source_su_itm.creation_dt,
10006 x_attempt_number => vc_source_su_itm.attempt_number,
10007 x_outcome_dt => vc_source_su_itm.outcome_dt,
10008 x_override_due_dt => vc_source_su_itm.override_due_dt,
10009 x_tracking_id => vc_source_su_itm.tracking_id,
10010 x_logical_delete_dt => vc_source_su_itm.logical_delete_dt,
10011 x_s_default_ind => vc_source_su_itm.s_default_ind,
10012 x_ass_pattern_id => vc_source_su_itm.ass_pattern_id,
10013 x_mode => 'R',
10014 x_grading_schema_cd => vc_source_su_itm.grading_schema_cd,
10015 x_gs_version_number => vc_source_su_itm.gs_version_number,
10016 x_grade => vc_source_su_itm.grade,
10017 x_outcome_comment_code => vc_source_su_itm.outcome_comment_code,
10018 x_mark => vc_source_su_itm.mark,
10019 x_attribute_category => vc_source_su_itm.attribute_category,
10020 x_attribute1 => vc_source_su_itm.attribute1,
10021 x_attribute2 => vc_source_su_itm.attribute2,
10022 x_attribute3 => vc_source_su_itm.attribute3,
10023 x_attribute4 => vc_source_su_itm.attribute4,
10024 x_attribute5 => vc_source_su_itm.attribute5,
10025 x_attribute6 => vc_source_su_itm.attribute6,
10026 x_attribute7 => vc_source_su_itm.attribute7,
10027 x_attribute8 => vc_source_su_itm.attribute8,
10028 x_attribute9 => vc_source_su_itm.attribute9,
10029 x_attribute10 => vc_source_su_itm.attribute10,
10030 x_attribute11 => vc_source_su_itm.attribute11,
10031 x_attribute12 => vc_source_su_itm.attribute12,
10032 x_attribute13 => vc_source_su_itm.attribute13,
10033 x_attribute14 => vc_source_su_itm.attribute14,
10034 x_attribute15 => vc_source_su_itm.attribute15,
10035 x_attribute16 => vc_source_su_itm.attribute16,
10036 x_attribute17 => vc_source_su_itm.attribute17,
10037 x_attribute18 => vc_source_su_itm.attribute18,
10038 x_attribute19 => vc_source_su_itm.attribute19,
10039 x_attribute20 => vc_source_su_itm.attribute20,
10040 x_uoo_id => p_dest_uoo_id,
10041 x_unit_section_ass_item_id => vc_source_su_itm.unit_section_ass_item_id, -- this parameter is overriden
10042 x_unit_ass_item_id => vc_source_su_itm.unit_ass_item_id,-- this parameter is overriden
10043 x_sua_ass_item_group_id => l_sua_ass_itemgrp_id,
10044 x_midterm_mandatory_type_code => vc_source_su_itm.midterm_mandatory_type_code,
10045 x_midterm_weight_qty => vc_source_su_itm.midterm_weight_qty,
10046 x_final_mandatory_type_code => vc_source_su_itm.final_mandatory_type_code,
10047 x_final_weight_qty => vc_source_su_itm.final_weight_qty,
10048 x_submitted_date => vc_source_su_itm.submitted_date,
10049 x_waived_flag => vc_source_su_itm.waived_flag,
10050 x_penalty_applied_flag => vc_source_su_itm.penalty_applied_flag );
10051
10052 --delete the assessment item for the source unit attempt
10053 IF (p_delete_source = TRUE) THEN
10054 IGS_AS_SU_ATMPT_ITM_PKG.delete_row (x_rowid => vc_source_su_itm.rowid);
10055 END IF;
10056
10057
10058 END IF;
10059
10060 END LOOP;
10061 --delete the assessment item group for the source unit attempt
10062 IF (p_delete_source = TRUE) THEN
10063 IGS_AS_SUA_AI_GROUP_PKG.DELETE_ROW(x_rowid => vc_source_ai_group.rowid);
10064 END IF;
10065
10066 ELSE
10067 --the assessment item group exists for the destination unit attempt
10068 CLOSE c_dest_ai_group;
10069 END IF;
10070
10071
10072
10073 END LOOP;
10074
10075 END enrp_ins_suai_trnsfr;
10076
10077 -- Validate the confirmation of a student unit attempt.
10078 FUNCTION enrp_val_sua_cnfrm_before_pt(
10079 p_person_id IN NUMBER ,
10080 p_course_cd IN VARCHAR2 ,
10081 p_unit_cd IN VARCHAR2 ,
10082 p_uv_version_number NUMBER ,
10083 p_cal_type IN VARCHAR2 ,
10084 p_ci_sequence_number IN NUMBER ,
10085 p_ci_end_dt IN DATE ,
10086 p_location_cd IN VARCHAR2 ,
10087 p_unit_class IN VARCHAR2 ,
10088 p_enrolled_dt IN DATE ,
10089 p_fail_type OUT NOCOPY VARCHAR2 ,
10090 p_message_name OUT NOCOPY varchar2 )
10091 RETURN BOOLEAN AS
10092 -------------------------------------------------------------------------------------------
10093 --Change History:
10094 --Who When What
10095 --amuthu 18-May-2006 Created by copy most of the code from igs_en_Val_sua.enrp_val_sua_cnfrm
10096 -- excluding the holds validations.
10097 -------------------------------------------------------------------------------------------
10098
10099 BEGIN -- enrp_val_sua_cnfrm
10100 -- Perform all validations associated with the confirmation of a unit
10101 -- attempt for a student. This module is a grouping of existing
10102 -- validation modules.
10103 -- Performs the following modules:
10104 -- Call IGS_EN_VAL_SUA.enrp_val_sua_insert;
10105 -- determine if the student is of the correct status to have
10106 -- a unit attempt added.
10107 -- Call IGS_EN_VAL_ENCMB.enrp_val_excld_unit;
10108 -- determine if the student is currently excluded from the unit.
10109 -- Call IGS_EN_VAL_SUA.enrp_val_sua_advstnd;
10110 -- determine if the student has already satisfied the unit
10111 -- through advanced standing.
10112 -- Call IGS_EN_VAL_SUA.enrp_val_sua_intrmt;
10113 -- determine if the attempt overlaps an existing period of
10114 -- intermission.
10115 -- Call IGS_EN_VAL_SUA.enrp_val_coo_loc;
10116 -- determine if the attempt is in line with students forced
10117 -- location (if applicable).
10118 -- Call IGS_EN_VAL_SUA.enrp_val_coo_mode;
10119 -- determine if the attemt is in line with students forced
10120 -- mode (if applicable).
10121 -- Call IGS_EN_VAL_SUA.enrp_val_sua_enr_dt;
10122 -- validate the enrolled date.
10123 -- Call IGS_EN_VAL_SUA.enrp_val_sua_ci;
10124 -- validate that the teaching period of the unit is not prior to
10125 -- the commencement date of the student course attempt.
10126 -- Call IGS_EN_VAL_SUA.enrp_val_sua_dupl;
10127 -- determine if the student is already enrolled concurrently in the
10128 -- unit or has completed the unit with a pass or incomplete result type.
10129 -- Call IGS_EN_VAL_SUA.resp_val_sua_cnfrm;
10130 -- validate if attempting to confirm a research unit attempt.
10131 -- The current set of fail types are:
10132 -- course The course isn?t in a correct state. ie.
10133 -- Discontinued or intermitted for the teaching period.
10134 -- ENCUMB Excluded from the unit by either course/unit or person encumbrances
10135 -- ADVSTAND Already granted in advanced standing
10136 -- CROSS Breaches a cross-element restriction
10137 -- ENROLDT Enrolment date invalid
10138 -- TEACHING Teaching Period invalid
10139 -- DUPLICATE Already enrolled or completed unit attempt
10140 DECLARE
10141 cst_enrolled CONSTANT VARCHAR2(10) := 'ENROLLED';
10142 cst_course CONSTANT VARCHAR2(10) := 'course';
10143 cst_encumb CONSTANT VARCHAR2(10) := 'ENCUMB';
10144 cst_advstand CONSTANT VARCHAR2(10) := 'ADVSTAND';
10145 cst_cross CONSTANT VARCHAR2(10) := 'CROSS';
10146 cst_enroldt CONSTANT VARCHAR2(10) := 'ENROLDT';
10147 cst_teaching CONSTANT VARCHAR2(10) := 'TEACHING';
10148 cst_duplicate CONSTANT VARCHAR2(10) := 'DUPLICATE';
10149 CURSOR c_sca IS
10150 SELECT sca.version_number,
10151 sca.coo_id,
10152 sca.commencement_dt
10153 FROM IGS_EN_STDNT_PS_ATT sca
10154 WHERE person_id = p_person_id AND
10155 course_cd = p_course_cd;
10156 CURSOR c_sua IS
10157 SELECT uoo_id
10158 FROM igs_ps_unit_ofr_opt
10159 WHERE unit_cd = p_unit_cd
10160 AND version_number = p_uv_version_number
10161 AND cal_type = p_cal_type
10162 AND ci_sequence_number = p_ci_sequence_number
10163 AND location_cd = p_location_cd
10164 AND unit_class = p_unit_class;
10165
10166 l_uoo_id igs_en_su_attempt.uoo_id%TYPE;
10167 v_sca_rec c_sca%ROWTYPE;
10168 v_return_val BOOLEAN := FALSE;
10169 v_message_name varchar2(30);
10170 v_duplicate_course_cd VARCHAR2(6);
10171 BEGIN
10172 -- Set the := message number
10173 p_message_name := null;
10174 p_fail_type := NULL;
10175 OPEN c_sua;
10176 FETCH c_sua INTO l_uoo_id;
10177 CLOSE c_sua;
10178 -- Determine if the student is of the correct status to have a unit attempt
10179 -- added.
10180 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_insert(
10181 p_person_id,
10182 p_course_cd,
10183 cst_enrolled,
10184 v_message_name) THEN
10185 p_fail_type := cst_course;
10186 p_message_name := v_message_name;
10187 RETURN FALSE;
10188 END IF;
10189 IF v_message_name <> NULL THEN
10190 p_fail_type := cst_course;
10191 p_message_name := v_message_name;
10192 END IF;
10193 -- Determine if the attempt overlaps an existing period of intermission.
10194 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_intrmt(
10195 p_person_id,
10196 p_course_cd,
10197 p_cal_type,
10198 p_ci_sequence_number,
10199 v_message_name) THEN
10200 p_fail_type := cst_course;
10201 p_message_name := v_message_name;
10202 RETURN FALSE;
10203 END IF;
10204 IF v_message_name <> NULL THEN
10205 p_fail_type := cst_course;
10206 p_message_name := v_message_name;
10207 END IF;
10208 -- Validate research unit attempt
10209 IF NOT IGS_EN_VAL_SUA.resp_val_sua_cnfrm(
10210 p_person_id,
10211 p_course_cd,
10212 p_unit_cd,
10213 p_uv_version_number,
10214 p_cal_type,
10215 p_ci_sequence_number,
10216 v_message_name ,
10217 'N' ) THEN
10218 p_fail_type := cst_course;
10219 p_message_name := v_message_name;
10220 RETURN FALSE;
10221 END IF;
10222 IF v_message_name <> NULL THEN
10223 p_fail_type := cst_course;
10224 p_message_name := v_message_name;
10225 END IF;
10226 -- Fetch student course attempt details
10227 OPEN c_sca;
10228 FETCH c_sca INTO v_sca_rec;
10229 CLOSE c_sca;
10230 -- Determine if the student has already satisfied the unit through advanced
10231 -- standing.
10232 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_advstnd(
10233 p_person_id,
10234 p_course_cd,
10235 v_sca_rec.version_number,
10236 p_unit_cd,
10237 p_uv_version_number,
10238 v_message_name ,
10239 'N' ) THEN
10240 p_fail_type := cst_advstand;
10241 p_message_name := v_message_name;
10242 RETURN FALSE;
10243 END IF;
10244 IF v_message_name <> NULL THEN
10245 p_fail_type := cst_advstand;
10246 p_message_name := v_message_name;
10247 END IF;
10248 -- Determine if the attempt is in line with students
10249 -- forced location (if applicable).
10250 IF NOT IGS_EN_VAL_SUA.enrp_val_coo_loc(
10251 v_sca_rec.coo_id,
10252 p_location_cd,
10253 v_message_name) THEN
10254 p_fail_type := cst_cross;
10255 p_message_name := v_message_name;
10256 RETURN FALSE;
10257 END IF;
10258 IF v_message_name <> NULL THEN
10259 p_fail_type := cst_cross;
10260 p_message_name := v_message_name;
10261 END IF;
10262 -- Determine if the attempt is in line with students forced mode (if
10263 -- applicable).
10264 IF NOT IGS_EN_VAL_SUA.enrp_val_coo_mode(
10265 v_sca_rec.coo_id,
10266 p_unit_class,
10267 v_message_name) THEN
10268 p_fail_type := cst_cross;
10269 p_message_name := v_message_name;
10270 RETURN FALSE;
10271 END IF;
10272 IF v_message_name <> NULL THEN
10273 p_fail_type := cst_cross;
10274 p_message_name := v_message_name;
10275 END IF;
10276 -- Validate the enrolled date.
10277 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_enr_dt(
10278 p_person_id,
10279 p_course_cd,
10280 p_enrolled_dt,
10281 cst_enrolled,
10282 p_ci_end_dt,
10283 v_sca_rec.commencement_dt,
10284 v_message_name ,
10285 'N' ) THEN
10286 p_fail_type := cst_enroldt;
10287 p_message_name := v_message_name;
10288 RETURN FALSE;
10289 END IF;
10290 IF v_message_name <> NULL THEN
10291 p_fail_type := cst_enroldt;
10292 p_message_name := v_message_name;
10293 END IF;
10294 -- Determine if the student unit attempt has a teaching period
10295 -- which is prior to the commencement date of the student course attempt
10296 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_ci(
10297 p_person_id,
10298 p_course_cd,
10299 p_cal_type,
10300 p_ci_sequence_number,
10301 'ENROLLED',
10302 v_sca_rec.commencement_dt,
10303 'F', -- commencement date is known
10304 v_message_name) THEN
10305 p_fail_type := cst_teaching;
10306 p_message_name := v_message_name;
10307 RETURN FALSE;
10308 END IF;
10309 IF v_message_name <> NULL THEN
10310 p_fail_type := cst_teaching;
10311 p_message_name := v_message_name;
10312 END IF;
10313 -- Determine if the student unit attempt already exists as
10314 -- enrolled or completed with pass or incomplete result
10315 IF NOT IGS_EN_VAL_SUA.enrp_val_sua_dupl(
10316 p_person_id,
10317 p_course_cd,
10318 p_unit_cd,
10319 p_uv_version_number,
10320 p_cal_type,
10321 p_ci_sequence_number,
10322 cst_enrolled, -- unit_attempt_status when confirming
10323 v_duplicate_course_cd,
10324 v_message_name,
10325 l_uoo_id) THEN
10326 p_fail_type := cst_duplicate;
10327 p_message_name := v_message_name;
10328 RETURN FALSE;
10329 END IF;
10330 IF v_message_name <> NULL THEN
10331 p_fail_type := cst_duplicate;
10332 p_message_name := v_message_name;
10333 END IF;
10334 -- Return the default value
10335 RETURN TRUE;
10336 EXCEPTION
10337 WHEN OTHERS THEN
10338 IF c_sca%ISOPEN THEN
10339 CLOSE c_sca;
10340 END IF;
10341 RAISE;
10342 END;
10343 END enrp_val_sua_cnfrm_before_pt;
10344
10345
10346
10347 END IGS_EN_GEN_010;