DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_GEN_010

Source


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