DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_GEN_011

Source


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