DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AV_LVL_LGCY_PUB

Source


1 PACKAGE BODY igs_av_lvl_lgcy_pub AS
2 /* $Header: IGSPAV1B.pls 120.8 2006/08/07 08:33:03 amanohar ship $ */
3 /**************************************************************************
4 Created By -
5 Purpose
6 History
7 Who             When              Why
8 Aiyer           03-jan-2003       The function validate_lvl_db_cons,
9                                   create_adv_stnd_level have been modified
10 				  as per the bug #2732975.
11 ****************************************************************************/
12 
13 
14 G_PKG_NAME CONSTANT VARCHAR2(30) := 'IGS_AV_LVL_LGCY_PUB';
15 
16 PROCEDURE initialise ( p_lgcy_adstlvl_rec IN OUT NOCOPY lgcy_adstlvl_rec_type )
17 IS
18 BEGIN
19         p_lgcy_adstlvl_rec.person_number              := NULL;
20         p_lgcy_adstlvl_rec.program_cd                 := NULL;
21         p_lgcy_adstlvl_rec.total_exmptn_approved      := NULL;
22         p_lgcy_adstlvl_rec.total_exmptn_granted       := NULL;
23         p_lgcy_adstlvl_rec.total_exmptn_perc_grntd    := NULL;
24         p_lgcy_adstlvl_rec.exemption_institution_cd   := NULL;
25         p_lgcy_adstlvl_rec.unit_level                 := NULL;
26         p_lgcy_adstlvl_rec.prog_group_ind             := NULL;
27         p_lgcy_adstlvl_rec.load_cal_alt_code          := NULL;
28         p_lgcy_adstlvl_rec.institution_cd             := NULL;
29         p_lgcy_adstlvl_rec.s_adv_stnd_granting_status := NULL;
30         p_lgcy_adstlvl_rec.credit_points              := NULL;
31         p_lgcy_adstlvl_rec.approved_dt                := NULL;
32         p_lgcy_adstlvl_rec.authorising_person_number  := NULL;
33         p_lgcy_adstlvl_rec.granted_dt                 := NULL;
34         p_lgcy_adstlvl_rec.expiry_dt                  := NULL;
35         p_lgcy_adstlvl_rec.cancelled_dt               := NULL;
36         p_lgcy_adstlvl_rec.revoked_dt                 := NULL;
37         p_lgcy_adstlvl_rec.comments                   := NULL;
38         p_lgcy_adstlvl_rec.qual_exam_level            := NULL;
39         p_lgcy_adstlvl_rec.qual_subject_code          := NULL;
40         p_lgcy_adstlvl_rec.qual_year                  := NULL;
41         p_lgcy_adstlvl_rec.qual_sitting               := NULL;
42         p_lgcy_adstlvl_rec.qual_awarding_body         := NULL;
43         p_lgcy_adstlvl_rec.approved_result            := NULL;
44         p_lgcy_adstlvl_rec.prev_unit_cd               := NULL;
45         p_lgcy_adstlvl_rec.prev_term                  := NULL;
46         p_lgcy_adstlvl_rec.start_date                 := NULL;
47         p_lgcy_adstlvl_rec.end_date                   := NULL;
48         p_lgcy_adstlvl_rec.tst_admission_test_type    := NULL;
49         p_lgcy_adstlvl_rec.tst_test_date              := NULL;
50         p_lgcy_adstlvl_rec.test_segment_name          := NULL;
51         p_lgcy_adstlvl_rec.basis_program_type         := NULL;
52         p_lgcy_adstlvl_rec.basis_year                 := NULL;
53         p_lgcy_adstlvl_rec.basis_completion_ind       := NULL;
54 	p_lgcy_adstlvl_rec.unit_level_mark            := NULL;
55 
56 END initialise;
57 
58 -- forward declaration of procedure/function used in this package
59 
60 /*
61   validate_parameters function checks all the mandatory parameters
62   for the passed record type are not null
63 */
64 FUNCTION validate_parameters
65          (
66            p_lgcy_adstlvl_rec   IN lgcy_adstlvl_rec_type
67          )
68 RETURN BOOLEAN;
69 
70 /*
71   derive_level_data procedure derives advanced standing unit level data like: -
72   1. Derive Person_id from person_number .
73   2. Derive cal_type and sequence_number from load_cal_alt_code
74   3. Set Unit_level parameter
75   4. Derive the  authorizing_person_id from authorizing_person_number
76   5. Derive Unit_details_id , tst_rslt_dtls_id and qual_dets_id
77 */
78 
79 PROCEDURE derive_level_data
80          (
81            p_lgcy_adstlvl_rec          IN          lgcy_adstlvl_rec_type,
82            p_person_id                 OUT NOCOPY  igs_pe_person.person_id%type,
83            p_s_adv_stnd_unit_level     OUT NOCOPY  igs_av_stnd_unit_lvl.s_adv_stnd_type%type,
84            p_cal_type                  OUT NOCOPY  igs_ca_inst.cal_type%type,
85            p_sequence_number           OUT NOCOPY  igs_ca_inst.sequence_number%type,
86            p_auth_pers_id              OUT NOCOPY  igs_pe_person.person_id%type,
87            p_unit_details_id           OUT NOCOPY  igs_ad_term_unitdtls.unit_details_id%type,
88            p_tst_rslt_dtls_id          OUT NOCOPY  igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
89            p_qual_dets_id              OUT NOCOPY  igs_uc_qual_dets.qual_dets_id%type,
90            p_as_version_number         OUT NOCOPY  igs_en_stdnt_ps_att.version_number%type
91          );
92 
93 /*
94   validate_adv_std_db_cons function performs all the data integrity validation
95 */
96 FUNCTION validate_adv_std_db_cons
97          (
98            p_person_id          IN  igs_pe_person.person_id%type,
99            p_version_number     IN  igs_ps_ver_all.version_number%type,
100            p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
101          )
102 RETURN BOOLEAN;
103 
104 /*
105   validate_adv_stnd function validates all the business rules before
106   inserting a record in the table IGS_AV_ADV_STANDING_ALL
107 */
108 FUNCTION validate_adv_stnd
109          (
110            p_person_id          IN  igs_pe_person.person_id%type,
111            p_version_number     IN  igs_ps_ver.version_number%type,
112            p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
113          )
114 RETURN BOOLEAN;
115 
116 /*
117   validate_lvl_db_cons function performs all the data integrity validation
118   before entering into the table  IGS_AV_STND_UNIT_LVL_ALL
119 */
120 FUNCTION validate_lvl_db_cons
121          (
122            p_person_id              IN igs_pe_person.person_id%type,
123            p_s_adv_stnd_unit_level  IN igs_ps_unit_level.unit_level%type,
124            p_cal_type               IN igs_ca_inst.cal_type%type,
125            p_seq_number             IN igs_ca_inst.sequence_number%type,
126            p_auth_pers_id           IN igs_pe_person.person_id%type,
127            p_unit_details_id        IN igs_ad_term_unitdtls.unit_details_id%type,
128            p_tst_rslt_dtls_id       IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
129            p_qual_dets_id           IN igs_uc_qual_dets.qual_dets_id%type,
130            p_course_version         IN igs_ps_ver.version_number%type,
131            p_lgcy_adstlvl_rec       IN lgcy_adstlvl_rec_type,
132            p_av_stnd_unit_lvl_id   OUT NOCOPY igs_av_std_ulvlbasis_all.av_stnd_unit_lvl_id%type
133          )
134 RETURN  BOOLEAN;
135 
136 /*
137   validate_level function performs all the business validations before
138   inserting a record into the table  IGS_AV_STND_UNIT_LVL_ALL
139 */
140 FUNCTION validate_level
141          (
142            p_person_id           IN igs_pe_person.person_id%type,
143            p_unit_level          IN igs_ps_unit_level.unit_level%type,
144            p_cal_type            IN igs_ca_inst.cal_type%type,
145            p_seq_number          IN igs_ca_inst.sequence_number%type,
146            p_auth_pers_id        IN igs_pe_person.person_id%type,
147            p_unit_details_id     IN igs_ad_term_unitdtls.unit_details_id%type,
148            p_tst_rslt_dtls_id    IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
149            p_qual_dets_id        IN igs_uc_qual_dets.qual_dets_id%type,
150            p_course_version      IN igs_ps_ver.version_number%type,
151            p_lgcy_adstlvl_rec    IN lgcy_adstlvl_rec_type
152          )
153 RETURN BOOLEAN;
154 
155 /*
156   create_post_lvl function performs all the Post Insert business
157   validations on the table  IGS_AV_STND_UNIT_LVL_ALL
158 */
159 FUNCTION create_post_lvl
160          (
161            p_person_id          IN  igs_pe_person.person_id%type,
162            p_course_version     IN  igs_ps_ver.version_number%type,
163            p_unit_details_id     IN igs_ad_term_unitdtls.unit_details_id%type,
164            p_tst_rslt_dtls_id    IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
165            p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
166          )
167 RETURN BOOLEAN;
168 
169 /*
170   validate_lvl_bas_db_cons function performs all the data integrity validation
171   before inserting  into the table  IGS_AV_STD_ULVLBASIS_ALL
172 */
173 FUNCTION validate_lvl_bas_db_cons
174          (
175            p_person_id           IN  igs_pe_person.person_id%type,
176            p_av_stnd_unit_lvl_id IN  igs_av_std_ulvlbasis_all.av_stnd_unit_lvl_id%type,
177            p_lgcy_adstlvl_rec    IN  lgcy_adstlvl_rec_type
178          )
179 RETURN VARCHAR2;
180 
181 /*
182   validate_lvl_bas function performs all the business validation before
183   inserting  into the table  IGS_AV_STD_ULVLBASIS_ALL
184 */
185 FUNCTION validate_lvl_bas
186          (
187            p_course_version     IN  igs_ps_ver.version_number%type,
188            p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
189          )
190 RETURN BOOLEAN;
191 
192 
193 
194 /*===================================================================+
195  | PROCEDURE                                                         |
196  |              create_adv_stnd_level                                |
197  |                                                                   |
198  | DESCRIPTION                                                       |
199  |              Creates advanced standing unit level                 |
200  |                                                                   |
201  | SCOPE - PUBLIC                                                    |
202  |                                                                   |
203  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                           |
204  |                                                                   |
205  | ARGUMENTS  : IN:                                                  |
206  |                    p_api_version                                  |
207  |                    p_init_msg_list                                |
208  |                    p_commit                                       |
209  |                    p_lgcy_adstlvl_rec                             |
210  |              OUT:                                                 |
211  |                    x_return_status                                |
212  |                    x_msg_count                                    |
213  |                    x_msg_data                                     |
214  |          IN/ OUT:                                                 |
215  |                                                                   |
216  | RETURNS    : NONE                                                 |
217  |                                                                   |
218  | NOTES                                                             |
219  |                                                                   |
220  | MODIFICATION HISTORY                                              |
221  | smanglm   11-11-2002  Created                                     |
222  | kdande    03-Jan-2003 Added check for s_adv_stnd_granting_status =|
223  |                       'EXPIRED' and expiry_dt IS NULL             |
224  |Aiyer      07-Jan-2002 Code modified as a part of the fix for      |
225  |                        the bug #2732975.			     |
226  |                        If l_av_stnd_unit_lvl_id is null then set a|
227  |			  warning that Advanced Standing unit level  |
228  |			  records already exists.                    |
229  |								     |
230  +===================================================================*/
231 
232   PROCEDURE create_adv_stnd_level
233             (p_api_version                 IN NUMBER,
234              p_init_msg_list               IN VARCHAR2,
235              p_commit                      IN VARCHAR2,
236              p_validation_level            IN VARCHAR2,
237              p_lgcy_adstlvl_rec            IN OUT NOCOPY lgcy_adstlvl_rec_type,
238              x_return_status               OUT NOCOPY VARCHAR2,
239              x_msg_count                   OUT NOCOPY NUMBER,
240              x_msg_data                    OUT NOCOPY VARCHAR2
241             )
242   IS
243         l_api_name              CONSTANT VARCHAR2(30) := 'create_adv_stnd_level';
244         l_api_version           CONSTANT  NUMBER       := 1.0;
245 
246         -- variables declared to fetch data from derive_level_data
247         l_person_id                 igs_pe_person.person_id%type;
248         l_s_adv_stnd_unit_level     igs_av_stnd_unit_lvl.s_adv_stnd_type%type;
249         l_cal_type                  igs_ca_inst.cal_type%type;
250         l_sequence_number           igs_ca_inst.sequence_number%type;
251         l_auth_pers_id              igs_pe_person.person_id%type;
252         l_unit_details_id           igs_ad_term_unitdtls.unit_details_id%type;
253         l_tst_rslt_dtls_id          igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type;
254         l_qual_dets_id              igs_uc_qual_dets.qual_dets_id%type;
255         l_as_version_number         igs_en_stdnt_ps_att.version_number%type;
256 
257         -- variable declared to fetch data from validate_lvl_db_cons
258         l_av_stnd_unit_lvl_id       igs_av_std_ulvlbasis_all.av_stnd_unit_lvl_id%type;
259 
260         l_check       VARCHAR2(1) := 'N';  -- check whether to insert into parent
261         l_skip        VARCHAR2(1) := 'N';  -- check whether to to skip the steps
262         l_return      VARCHAR2(1) ;
263 
264   BEGIN  -- main begin
265   --Standard start of API savepoint
266         SAVEPOINT create_adv_stnd_level;
267 
268   --Standard call to check for call compatibility.
269         IF NOT FND_API.Compatible_API_Call(
270                                         l_api_version,
271                                         p_api_version,
272                                         l_api_name,
273                                         G_PKG_NAME)
274         THEN
275                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
276         END IF;
277 
278   --Initialize message list if p_init_msg_list is set to TRUE.
279         IF FND_API.to_Boolean(p_init_msg_list) THEN
280                 FND_MSG_PUB.initialize;
281         END IF;
282 
283   --Initialize API return status to success.
284         x_return_status := FND_API.G_RET_STS_SUCCESS;
285 
286 
287   -- main code logic begins
288         -- ensure UPPER case
289         p_lgcy_adstlvl_rec.basis_program_type          := UPPER(p_lgcy_adstlvl_rec.basis_program_type) ;
290         p_lgcy_adstlvl_rec.program_cd                  := UPPER(p_lgcy_adstlvl_rec.program_cd)   ;
291         p_lgcy_adstlvl_rec.exemption_institution_cd    := UPPER(p_lgcy_adstlvl_rec.exemption_institution_cd)  ;
292         p_lgcy_adstlvl_rec.unit_level                  := UPPER(p_lgcy_adstlvl_rec.unit_level)         ;
293         p_lgcy_adstlvl_rec.prog_group_ind              := UPPER(p_lgcy_adstlvl_rec.prog_group_ind)     ;
294         p_lgcy_adstlvl_rec.s_adv_stnd_granting_status  := UPPER(p_lgcy_adstlvl_rec.s_adv_stnd_granting_status);
295         -- call validate_parameters
296         IF validate_parameters(p_lgcy_adstlvl_rec => p_lgcy_adstlvl_rec) THEN
297                    -- call derive_level_data
298                    derive_level_data (
299                                         p_lgcy_adstlvl_rec          => p_lgcy_adstlvl_rec     ,
300                                         p_person_id                 => l_person_id            ,
301                                         p_s_adv_stnd_unit_level     => l_s_adv_stnd_unit_level,
302                                         p_cal_type                  => l_cal_type             ,
303                                         p_sequence_number           => l_sequence_number      ,
304                                         p_auth_pers_id              => l_auth_pers_id         ,
305                                         p_unit_details_id           => l_unit_details_id      ,
306                                         p_tst_rslt_dtls_id          => l_tst_rslt_dtls_id     ,
307                                         p_qual_dets_id              => l_qual_dets_id         ,
308                                         p_as_version_number         => l_as_version_number
309                                      );
310                    -- call validate_adv_std_db_cons
311                    IF validate_adv_std_db_cons
312                       (
313                         p_person_id          => l_person_id,
314                         p_version_number     => l_as_version_number,
315                         p_lgcy_adstlvl_rec   => p_lgcy_adstlvl_rec
316                       ) THEN
317                                 -- call validate_adv_stnd
318                                 IF validate_adv_stnd
319                                    (
320                                      p_person_id          => l_person_id,
321                                      p_version_number     => l_as_version_number,
322                                      p_lgcy_adstlvl_rec   => p_lgcy_adstlvl_rec
323                                    ) THEN
324                                            /*
325                                                 Validate that  the current record is already present in the
326                                                 tables IGS_AV_ADV_STANDING_ALL and IGS_AV_STND_UNIT_LVL_ALL
327                                            */
328                                               /*
329                                                   Check that the Primary Key for the table
330                                                   IGS_AV_ADV_STANDING_ALL does not exists
331                                               */
332                                                IF IGS_AV_ADV_STANDING_PKG.GET_PK_FOR_VALIDATION
333                                                             (
334                                                                x_person_id                => l_person_id,
335                                                                x_course_cd                => p_lgcy_adstlvl_rec.program_cd,
336                                                                x_version_number           => l_as_version_number,
337                                                                x_exemption_institution_cd => p_lgcy_adstlvl_rec.exemption_institution_cd
338                                                              ) THEN
339                                                    /*
340                                                        Check that the unique key combination for the table
341                                                        IGS_AV_STND_UNIT_LVL_ALL does not already exist
342                                                    */
343                                                    IF IGS_AV_STND_UNIT_LVL_PKG.GET_UK_FOR_VALIDATION
344                                                                  (
345                                                                     x_person_id         => l_person_id,
346                                                                     x_exemption_institution_cd    => p_lgcy_adstlvl_rec.exemption_institution_cd,
347                                                                     x_unit_details_id   => l_unit_details_id,
348                                                                     x_tst_rslt_dtls_id  => l_tst_rslt_dtls_id,
349                                                                     x_unit_level        => p_lgcy_adstlvl_rec.unit_level,
350                                                                     x_as_course_cd      => p_lgcy_adstlvl_rec.program_cd,
351                                                                     x_as_version_number => l_as_version_number,
352                                                                     x_qual_dets_id      => l_qual_dets_id,
353                                                                     X_S_ADV_STND_TYPE   => l_s_adv_stnd_unit_level,
354                                                                     X_CRS_GROUP_IND     => NVL(UPPER(p_lgcy_adstlvl_rec.prog_group_ind),'N')
355                                                                  )
356                                                     THEN
357 
358 						      /*
359                                                          This code has been added as a part of the fix for the bug #2732975.
360 							 If l_av_stnd_unit_lvl_id is null then set a warning that Advanced Standing
361 							 unit level records already exists.
362 						      */
363 
364                                                       IF l_av_stnd_unit_lvl_id IS NULL THEN
365                                                         FND_MESSAGE.SET_NAME('IGS','IGS_AV_ADV_STND_ALREADY_EXISTS');
366                                                         FND_MSG_PUB.ADD;
367                                                         x_return_status := 'W';
368                                                         -- skip to end
369                                                         l_skip := 'Y';
370                                                       ELSE
371                                                         l_return := validate_lvl_bas_db_cons
372                                                                                 (
373                                                                                    p_person_id           => l_person_id,
374                                                                                    p_av_stnd_unit_lvl_id => l_av_stnd_unit_lvl_id,
375                                                                                    p_lgcy_adstlvl_rec    => p_lgcy_adstlvl_rec
376                                                                                 );
377                                                          IF l_return = 'S' THEN
378                                                            IF validate_lvl_bas
379                                                                           (
380                                                                             p_course_version   => l_as_version_number,
381                                                                             p_lgcy_adstlvl_rec => p_lgcy_adstlvl_rec
382                                                                           )
383                                                            THEN
384                                                              /*
385                                                                    insert into IGS_AV_STD_ULVLBASIS_ALL
386                                                              */
387                                                               INSERT INTO IGS_AV_STD_ULVLBASIS_ALL (
388                                                                 AV_STND_UNIT_LVL_ID,
389                                                                 BASIS_COURSE_TYPE,
390                                                                 BASIS_YEAR,
391                                                                 BASIS_COMPLETION_IND,
392                                                                 CREATION_DATE,
393                                                                 CREATED_BY,
394                                                                 LAST_UPDATE_DATE,
395                                                                 LAST_UPDATED_BY,
396                                                                 LAST_UPDATE_LOGIN,
397                                                                 ORG_ID
398                                                                 )
399 								VALUES (
400                                                                 l_av_stnd_unit_lvl_id,
401                                                                 UPPER(p_lgcy_adstlvl_rec.basis_program_type),
402                                                                 p_lgcy_adstlvl_rec.basis_year,
403                                                                 p_lgcy_adstlvl_rec.basis_completion_ind,
404                                                                 SYSDATE,
405                                                                 NVL(FND_GLOBAL.USER_ID,-1),
406                                                                 SYSDATE,
407                                                                 NVL(FND_GLOBAL.USER_ID,-1),
408                                                                 NVL(FND_GLOBAL.LOGIN_ID,-1),
409                                                                 igs_ge_gen_003.get_org_id
410                                                                 );
411 
412                                                              ELSE  -- validate_lvl_bas
413                                                                x_return_status := l_return; --it can be either E or W
414                                                              END IF; -- validate_lvl_bas
415                                                            ELSE -- l_return
416                                                               x_return_status := FND_API.G_RET_STS_ERROR;
417                                                            END IF;
418                                                            -- skip to end
419                                                            l_skip := 'Y';
420                                                         END IF; -- End of l_av_stnd_unit_lvl_id is not null
421                                                      ELSE
422                                                        l_check := 'Y';
423                                                      END IF; -- IGS_AV_STND_UNIT_LVL_PKG.GET_UK_FOR_VALIDATION
424                                                ELSE --   IGS_AV_ADV_STANDING_PKG.GET_PK_FOR_VALIDATION
425                                                    l_check := 'N';
426                                                END IF; --   IGS_AV_ADV_STANDING_PKG.GET_PK_FOR_VALIDATION
427 
428                                                IF l_skip = 'N' THEN
429                                                        IF l_check = 'N' THEN
430                                                           -- insert into IGS_AV_ADV_STANDING_ALL
431                                                           INSERT INTO IGS_AV_ADV_STANDING_ALL (
432                                                             PERSON_ID,
433                                                             COURSE_CD,
434                                                             VERSION_NUMBER,
435                                                             TOTAL_EXMPTN_APPROVED,
436                                                             TOTAL_EXMPTN_GRANTED,
437                                                             TOTAL_EXMPTN_PERC_GRNTD,
438                                                             EXEMPTION_INSTITUTION_CD,
439                                                             CREATION_DATE,
440                                                             CREATED_BY,
441                                                             LAST_UPDATE_DATE,
442                                                             LAST_UPDATED_BY,
443                                                             LAST_UPDATE_LOGIN,
444                                                             ORG_ID
445                                                           ) VALUES (
446                                                             l_person_id,
447                                                             UPPER(p_lgcy_adstlvl_rec.program_cd),
448                                                             l_as_version_number,
449                                                             p_lgcy_adstlvl_rec.total_exmptn_approved,
450                                                             p_lgcy_adstlvl_rec.total_exmptn_granted,
451                                                             p_lgcy_adstlvl_rec.total_exmptn_perc_grntd,
452                                                             UPPER(p_lgcy_adstlvl_rec.exemption_institution_cd),
453                                                             SYSDATE,
454                                                             NVL(FND_GLOBAL.USER_ID,-1),
455                                                             SYSDATE,
456                                                             NVL(FND_GLOBAL.USER_ID,-1),
457                                                             NVL(FND_GLOBAL.LOGIN_ID,-1),
458                                                             igs_ge_gen_003.get_org_id
459                                                           );
460                                                        END IF; --l_check = 'Y'
461                                                        -- step 8 of TD
462                                                        /*
463                                                           call to VALIDATE_LVL_DB_CONS
464                                                        */
465                                                        IF validate_lvl_db_cons
466                                                               (
467                                                                  p_person_id             => l_person_id,
468                                                                  p_s_adv_stnd_unit_level => p_lgcy_adstlvl_rec.unit_level,
469                                                                  p_cal_type              => l_cal_type,
470                                                                  p_seq_number            => l_sequence_number,
471                                                                  p_auth_pers_id          => l_auth_pers_id,
472                                                                  p_unit_details_id       => l_unit_details_id,
473                                                                  p_tst_rslt_dtls_id      => l_tst_rslt_dtls_id,
474                                                                  p_qual_dets_id          => l_qual_dets_id,
475                                                                  p_course_version        => l_as_version_number,
476                                                                  p_lgcy_adstlvl_rec      => p_lgcy_adstlvl_rec,
477                                                                  p_av_stnd_unit_lvl_id   => l_av_stnd_unit_lvl_id
478                                                               ) THEN
479                                                               IF validate_level
480                                                                       (
481                                                                          p_person_id        => l_person_id,
482                                                                          p_unit_level       => p_lgcy_adstlvl_rec.unit_level,
483                                                                          p_cal_type         => l_cal_type,
484                                                                          p_seq_number       => l_sequence_number,
485                                                                          p_auth_pers_id     => l_auth_pers_id,
486                                                                          p_unit_details_id  => l_unit_details_id,
487                                                                          p_tst_rslt_dtls_id => l_tst_rslt_dtls_id,
488                                                                          p_qual_dets_id     => l_qual_dets_id,
489                                                                          p_course_version   => l_as_version_number,
490                                                                          p_lgcy_adstlvl_rec => p_lgcy_adstlvl_rec
491                                                                       ) THEN
492                                                                   /*
493                                                                      insert into IGS_AV_STND_UNIT_LVL_ALL
494                                                                   */
495                                                                   INSERT INTO IGS_AV_STND_UNIT_LVL_ALL (
496                                                                     PERSON_ID,
497                                                                     AS_COURSE_CD,
498                                                                     AS_VERSION_NUMBER,
499                                                                     S_ADV_STND_TYPE,
500                                                                     UNIT_LEVEL,
501                                                                     CRS_GROUP_IND,
502                                                                     EXEMPTION_INSTITUTION_CD,
503                                                                     S_ADV_STND_GRANTING_STATUS,
504                                                                     CREDIT_POINTS,
505                                                                     APPROVED_DT,
506                                                                     AUTHORISING_PERSON_ID,
507                                                                     GRANTED_DT,
508                                                                     EXPIRY_DT,
509                                                                     CANCELLED_DT,
510                                                                     REVOKED_DT,
511                                                                     COMMENTS,
512                                                                     AV_STND_UNIT_LVL_ID,
513                                                                     CAL_TYPE,
514                                                                     CI_SEQUENCE_NUMBER,
515                                                                     INSTITUTION_CD,
516                                                                     UNIT_DETAILS_ID,
517                                                                     TST_RSLT_DTLS_ID,
518                                                                     CREATION_DATE,
519                                                                     CREATED_BY,
520                                                                     LAST_UPDATE_DATE,
521                                                                     LAST_UPDATED_BY,
522                                                                     LAST_UPDATE_LOGIN,
523                                                                     REQUEST_ID,
524                                                                     PROGRAM_ID,
525                                                                     PROGRAM_APPLICATION_ID,
526                                                                     PROGRAM_UPDATE_DATE,
527                                                                     ORG_ID,
528                                                                     DEG_AUD_DETAIL_ID,
529                                                                     QUAL_DETS_ID,
530 								    UNIT_LEVEL_MARK
531                                                                   ) VALUES (
532                                                                     l_person_id,
533                                                                     UPPER(p_lgcy_adstlvl_rec.program_cd),
534                                                                     l_as_version_number,
535                                                                     l_s_adv_stnd_unit_level,
536                                                                     UPPER(p_lgcy_adstlvl_rec.unit_level),
537                                                                     NVL(UPPER(p_lgcy_adstlvl_rec.prog_group_ind),'N'),
538                                                                     UPPER(p_lgcy_adstlvl_rec.exemption_institution_cd),
539                                                                     UPPER(p_lgcy_adstlvl_rec.s_adv_stnd_granting_status),
540                                                                     p_lgcy_adstlvl_rec.credit_points,
541                                                                     p_lgcy_adstlvl_rec.approved_dt,
542                                                                     l_auth_pers_id,
543                                                                     p_lgcy_adstlvl_rec.granted_dt,
544                                                                     p_lgcy_adstlvl_rec.expiry_dt,
545                                                                     p_lgcy_adstlvl_rec.cancelled_dt,
546                                                                     p_lgcy_adstlvl_rec.revoked_dt,
547                                                                     p_lgcy_adstlvl_rec.comments,
548                                                                     l_av_stnd_unit_lvl_id,
549                                                                     l_cal_type,
550                                                                     l_sequence_number,
551                                                                     p_lgcy_adstlvl_rec.institution_cd,
552                                                                     l_unit_details_id,
553                                                                     l_tst_rslt_dtls_id,
554                                                                     SYSDATE,
555                                                                     NVL(FND_GLOBAL.USER_ID,-1),
556                                                                     SYSDATE,
557                                                                     NVL(FND_GLOBAL.USER_ID,-1),
558                                                                     NVL(FND_GLOBAL.LOGIN_ID,-1),
559                                                                     DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
560                                                                     DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
561                                                                     DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
562                                                                     DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
563                                                                     igs_ge_gen_003.get_org_id,
564                                                                     NULL, -- aiyer NEW_REFERENCES.DEG_AUD_DETAIL_ID,
565                                                                     l_qual_dets_id,
566 								    p_lgcy_adstlvl_rec.UNIT_LEVEL_MARK
567                                                                   );
568 
569                                                                   /*
570                                                                      post insert validation create_post_lvl
571                                                                   */
572                                                                   IF create_post_lvl
573                                                                        (
574                                                                           p_person_id         => l_person_id,
575                                                                           p_course_version    => l_as_version_number,
576                                                                           p_unit_details_id   => l_unit_details_id,
577                                                                           p_tst_rslt_dtls_id  => l_tst_rslt_dtls_id,
578                                                                           p_lgcy_adstlvl_rec  => p_lgcy_adstlvl_rec
579                                                                        ) THEN
580                                                                        l_return := validate_lvl_bas_db_cons
581                                                                                           (
582                                                                                              p_person_id           => l_person_id,
583                                                                                              p_av_stnd_unit_lvl_id => l_av_stnd_unit_lvl_id,
584                                                                                              p_lgcy_adstlvl_rec    => p_lgcy_adstlvl_rec
585                                                                                           );
586                                                                        IF l_return = 'S' THEN
587                                                                           IF validate_lvl_bas
588                                                                                   (
589                                                                                     p_course_version   => l_as_version_number,
590                                                                                     p_lgcy_adstlvl_rec => p_lgcy_adstlvl_rec
591                                                                                   ) THEN
592                                                                               /*
593                                                                                  insert into IGS_AV_STD_ULVLBASIS_ALL
594                                                                               */
595                                                                                   INSERT INTO IGS_AV_STD_ULVLBASIS_ALL (
596                                                                                     AV_STND_UNIT_LVL_ID,
597                                                                                     BASIS_COURSE_TYPE,
598                                                                                     BASIS_YEAR,
599                                                                                     BASIS_COMPLETION_IND,
600                                                                                     CREATION_DATE,
601                                                                                     CREATED_BY,
602                                                                                     LAST_UPDATE_DATE,
603                                                                                     LAST_UPDATED_BY,
604                                                                                     LAST_UPDATE_LOGIN,
605                                                                                     ORG_ID
606                                                                                   ) VALUES (
607                                                                                     l_av_stnd_unit_lvl_id,
608                                                                                     UPPER(p_lgcy_adstlvl_rec.basis_program_type),
609                                                                                     p_lgcy_adstlvl_rec.basis_year,
610                                                                                     p_lgcy_adstlvl_rec.basis_completion_ind,
611                                                                                     SYSDATE,
612                                                                                     NVL(FND_GLOBAL.USER_ID,-1),
613                                                                                     SYSDATE,
614                                                                                     NVL(FND_GLOBAL.USER_ID,-1),
615                                                                                     NVL(FND_GLOBAL.LOGIN_ID,-1),
616                                                                                     igs_ge_gen_003.get_org_id
617                                                                                   );
618                                                                           ELSE  -- validate_lvl_bas
619                                                                               x_return_status := l_return; --it can be either E or W
620                                                                           END IF; -- validate_lvl_bas
621                                                                        ELSE -- l_return
622                                                                            x_return_status := FND_API.G_RET_STS_ERROR;
623                                                                        END IF;
624                                                                   ELSE --create_post_lvl
625                                                                        x_return_status := FND_API.G_RET_STS_ERROR;
626                                                                   END IF; --create_post_lvl
627                                                               ELSE -- validate level
628                                                                   x_return_status := FND_API.G_RET_STS_ERROR;
629                                                               END IF; -- validate level
630                                                        ELSE -- VALIDATE_LVL_DB_CONS
631                                                            x_return_status := FND_API.G_RET_STS_ERROR;
632                                                        END IF; -- VALIDATE_LVL_DB_CONS
633                                                END IF; -- l_skip
634                                 ELSE -- validate_adv_stnd
635                                      x_return_status := FND_API.G_RET_STS_ERROR;
636                                 END IF; --validate_adv_stnd
637                    ELSE -- validate_adv_std_db_cons
638                         x_return_status := FND_API.G_RET_STS_ERROR;
639                    END IF; -- validate_adv_std_db_cons
640         ELSE  -- validate_parameters(p_lgcy_adstlvl_rec)
641           x_return_status := FND_API.G_RET_STS_ERROR;
642         END IF; -- validate_parameters(p_lgcy_adstlvl_rec)
643 
644   --rollback if the x_return_status is set to E (FND_API.G_RET_STS_ERROR) or W
645         IF x_return_status IN (FND_API.G_RET_STS_ERROR,'W','E') THEN
646            ROLLBACK TO create_adv_stnd_level;
647         END IF;
648 
649   --Standard check of p_commit.
650         IF FND_API.to_Boolean(p_commit) AND x_return_status = FND_API.G_RET_STS_SUCCESS THEN
651                 commit;
652         END IF;
653 
654   --Standard call to get message count and if count is 1, get message info.
655         FND_MSG_PUB.Count_And_Get(
656                 p_count => x_msg_count,
657                 p_data  => x_msg_data);
658 
659   EXCEPTION
660         WHEN FND_API.G_EXC_ERROR THEN
661                 ROLLBACK TO create_adv_stnd_level;
662                 x_return_status := FND_API.G_RET_STS_ERROR;
663                 FND_MSG_PUB.Count_And_Get(
664                                 p_count => x_msg_count,
665                                 p_data  => x_msg_data);
666 
667         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
668                 ROLLBACK TO create_adv_stnd_level;
669                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
670                 FND_MSG_PUB.Count_And_Get(
671                                 p_count => x_msg_count,
672                                 p_data  => x_msg_data);
673         WHEN OTHERS THEN
674                 ROLLBACK TO create_adv_stnd_level;
675                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
676                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_UNHANDLED_ERROR');
677                 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
678                 FND_MSG_PUB.ADD;
679                 FND_MSG_PUB.Count_And_Get(
680                                 p_count => x_msg_count,
681                                 p_data  => x_msg_data);
682 
683   END create_adv_stnd_level;
684 
685 
686   FUNCTION validate_parameters
687            (
688              p_lgcy_adstlvl_rec   IN lgcy_adstlvl_rec_type
689            )
690   RETURN BOOLEAN
691   /*************************************************************
692   Created By : smanglm
693   Date Created on : 2002/11/13
694   Purpose : validate_parameters function checks all the mandatory
695             parameters for the passed record type are not null
696   Know limitations, enhancements or remarks
697   Change History
698   Who             When            What
699   shimitta      2005/11/9      BUG#4723892 :added a check for unit_level_mark
700   (reverse chronological order - newest change first)
701   ***************************************************************/
702   IS
703      x_return_status  BOOLEAN;
704   BEGIN
705      x_return_status := TRUE;
706 
707      IF p_lgcy_adstlvl_rec.unit_level_mark < 0
708         OR  p_lgcy_adstlvl_rec.unit_level_mark > 100 THEN
709         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_INV_UNT_LVL_MARK');
710         FND_MSG_PUB.ADD;
711         x_return_status := FALSE;
712      END IF; -- shimitta
713      IF p_lgcy_adstlvl_rec.person_number IS NULL THEN
714         FND_MESSAGE.SET_NAME('IGS', 'IGS_EN_PER_NUM_NULL');
715         FND_MSG_PUB.ADD;
716         x_return_status := FALSE;
717      END IF;
718      IF p_lgcy_adstlvl_rec.program_cd IS NULL THEN
719         FND_MESSAGE.SET_NAME('IGS', 'IGS_EN_PRGM_CD_NULL');
720         FND_MSG_PUB.ADD;
721         x_return_status := FALSE;
722      END IF;
723      IF p_lgcy_adstlvl_rec.total_exmptn_approved IS NULL THEN
724         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_TOT_EXMPT_APPR_NULL');
725         FND_MSG_PUB.ADD;
726         x_return_status := FALSE;
727      END IF;
728      IF p_lgcy_adstlvl_rec.total_exmptn_granted IS NULL THEN
729         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_TOT_EXMPT_GRNT_NULL');
730         FND_MSG_PUB.ADD;
731         x_return_status := FALSE;
732      END IF;
733      IF p_lgcy_adstlvl_rec.total_exmptn_perc_grntd IS NULL OR
734         p_lgcy_adstlvl_rec.total_exmptn_perc_grntd < 0 OR
735         p_lgcy_adstlvl_rec.total_exmptn_perc_grntd > 100 THEN
736         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_TOT_EXT_PER_GRNT_NULL');
737         FND_MSG_PUB.ADD;
738         x_return_status := FALSE;
739      END IF;
740      IF p_lgcy_adstlvl_rec.exemption_institution_cd IS NULL THEN
741         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLVL_EX_INS_CD_NULL');
742         FND_MSG_PUB.ADD;
743         x_return_status := FALSE;
744      END IF;
745      IF p_lgcy_adstlvl_rec.unit_level IS NULL THEN
746         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLVL_UNIT_LVL_NULL');
747         FND_MSG_PUB.ADD;
748         x_return_status := FALSE;
749      END IF;
750      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status IS NULL THEN
751         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLVL_GRNT_STAT_NULL');
752         FND_MSG_PUB.ADD;
753         x_return_status := FALSE;
754      END IF;
755      IF p_lgcy_adstlvl_rec.credit_points IS NULL THEN
756         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLVL_CRD_PNTS_NULL');
757         FND_MSG_PUB.ADD;
758         x_return_status := FALSE;
759      END IF;
760      IF p_lgcy_adstlvl_rec.approved_dt IS NULL THEN
761         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLVL_APPR_DT_NULL');
762         FND_MSG_PUB.ADD;
763         x_return_status := FALSE;
764      END IF;
765      IF p_lgcy_adstlvl_rec.authorising_person_number IS NULL THEN
766         FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLV_AUTH_PERNUM_NULL');
767         FND_MSG_PUB.ADD;
768         x_return_status := FALSE;
769      END IF;
770      /*
771         Validate that the record parameter qual_exam_level if NOT NULL then all
772         the releavnt should also be not null
773      */
774      IF p_lgcy_adstlvl_rec.qual_exam_level IS NOT NULL THEN
775              IF p_lgcy_adstlvl_rec.qual_subject_code IS NULL OR
776                 p_lgcy_adstlvl_rec.qual_year IS NULL OR
777                 p_lgcy_adstlvl_rec.qual_sitting IS NULL OR
778                 p_lgcy_adstlvl_rec.qual_awarding_body IS NULL OR
779                 p_lgcy_adstlvl_rec.approved_result IS NULL THEN
780                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_ADLV_QUL_DET_NOT_NULL');
781                 FND_MSG_PUB.ADD;
782                 x_return_status := FALSE;
783              END IF;
784      END IF;
785      /*
786         Validate that the record parameter prev_unit_cd if NOT NULL then the
787         field prev_term should also be not null
788      */
789      IF p_lgcy_adstlvl_rec.prev_unit_cd IS NOT NULL THEN
790              IF p_lgcy_adstlvl_rec.prev_term IS NULL OR
791                 p_lgcy_adstlvl_rec.start_date IS NULL OR
792                 p_lgcy_adstlvl_rec.end_date IS NULL OR
793                 p_lgcy_adstlvl_rec.institution_cd IS NULL THEN
794                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_PREV_UNT_DET_NOT_NULL');
795                 FND_MSG_PUB.ADD;
796                 x_return_status := FALSE;
797              END IF;
798      END IF;
799      /*
800         Validate that the record parameter TST_ADMISSION_TEST_TYPE if NOT NULL
801         then the fields TST_TEST_DATE and TEST_SEGMENT_NAME should also be not null
802      */
803      IF p_lgcy_adstlvl_rec.tst_admission_test_type IS NOT NULL THEN
804              IF p_lgcy_adstlvl_rec.tst_test_date IS NULL OR
805                 p_lgcy_adstlvl_rec.test_segment_name IS NULL THEN
806                 FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_TST_ADM_DET_NOT_NULL');
807                 FND_MSG_PUB.ADD;
808                 x_return_status := FALSE;
809              END IF;
810      END IF;
811      /*
812         Validate that if s_adv_stnd_granting_status is granted then granting date cannot be not null.
813         if s_adv_stnd_granting_status is cancelled then cancelled date cannot be not null.
814         if s_adv_stnd_granting_status is revoked then revoked date cannot be not null.
815      */
816      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'GRANTED' AND
817         p_lgcy_adstlvl_rec.granted_dt IS NULL THEN
818         FND_MESSAGE.SET_NAME('IGS','IGS_AV_STUNT_GRANTDT_NOT_NULL');
819         FND_MSG_PUB.ADD;
820         x_return_status := FALSE;
821      END IF;
822 
823      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'CANCELLED' AND
824         p_lgcy_adstlvl_rec.cancelled_dt IS NULL THEN
825         FND_MESSAGE.SET_NAME('IGS','IGS_AV_STUNT_CANCDT_NOT_NULL');
826         FND_MSG_PUB.ADD;
827         x_return_status := FALSE;
828      END IF;
829 
830      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'REVOKED' AND
831         p_lgcy_adstlvl_rec.revoked_dt IS NULL THEN
832         FND_MESSAGE.SET_NAME('IGS','IGS_AV_STUNT_REVDT_NOT_NULL');
833         FND_MSG_PUB.ADD;
834         x_return_status := FALSE;
835      END IF;
836 
837      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'EXPIRED' AND
838         p_lgcy_adstlvl_rec.expiry_dt IS NULL THEN
839        FND_MESSAGE.SET_NAME('IGS','IGS_AV_STUNT_EXPDT_TOBE_SET');
840        FND_MSG_PUB.ADD;
841        x_return_status := FALSE;
842      END IF;
843 
844      /*
845         validate that when advanced standing granting status if granted -> revoked and cancelled  dates are null
846         when advanced standing granting status if revoked then granted and cancelled  dates are null
847         when advanced standing granting status if cancelled then revoked and granted  dates are null
848      */
849      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'GRANTED' AND
850           (p_lgcy_adstlvl_rec.revoked_dt IS NOT NULL OR
851              p_lgcy_adstlvl_rec.cancelled_dt IS NOT NULL) THEN
852         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CORR_DT_STATUS');
853         FND_MSG_PUB.ADD;
854         x_return_status := FALSE;
855      END IF;
856 
857      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'CANCELLED' AND
858           (p_lgcy_adstlvl_rec.revoked_dt    IS NOT NULL OR
859              p_lgcy_adstlvl_rec.granted_dt    IS NOT NULL) THEN
860         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CORR_DT_STATUS');
861         FND_MSG_PUB.ADD;
862         x_return_status := FALSE;
863      END IF;
864 
865      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status = 'REVOKED' AND
866           (p_lgcy_adstlvl_rec.granted_dt    IS NOT NULL OR
867              p_lgcy_adstlvl_rec.cancelled_dt    IS NOT NULL) THEN
868         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CORR_DT_STATUS');
869         FND_MSG_PUB.ADD;
870         x_return_status := FALSE;
871      END IF;
872 
873      /*
874         return the value of x_return_status
875      */
876      return x_return_status;
877   END validate_parameters;
878 
879 
880   PROCEDURE derive_level_data
881            (
882              p_lgcy_adstlvl_rec          IN          lgcy_adstlvl_rec_type,
883              p_person_id                 OUT NOCOPY  igs_pe_person.person_id%type,
884              p_s_adv_stnd_unit_level     OUT NOCOPY  igs_av_stnd_unit_lvl.s_adv_stnd_type%type,
885              p_cal_type                  OUT NOCOPY  igs_ca_inst.cal_type%type,
886              p_sequence_number           OUT NOCOPY  igs_ca_inst.sequence_number%type,
887              p_auth_pers_id              OUT NOCOPY  igs_pe_person.person_id%type,
888              p_unit_details_id           OUT NOCOPY  igs_ad_term_unitdtls.unit_details_id%type,
889              p_tst_rslt_dtls_id          OUT NOCOPY  igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
890              p_qual_dets_id              OUT NOCOPY  igs_uc_qual_dets.qual_dets_id%type,
891              p_as_version_number         OUT NOCOPY  igs_en_stdnt_ps_att.version_number%type
892            )
893    IS
894    /*****************************************************************************************************************
895    Created By : smanglm
896    Date Created on : 2002/11/13
897    Purpose :
898             derive_level_data procedure derives advanced standing unit level data like: -
899             1. Derive Person_id from person_number .
900             2. Derive cal_type and sequence_number from load_cal_alt_code
901             3. Set Unit_level parameter
902             4. Derive the  authorizing_person_id from authorizing_person_number
903             5. Derive Unit_details_id , tst_rslt_dtls_id and qual_dets_id
904    Know limitations, enhancements or remarks
905    Change History
906    Who             When            What
907    (reverse chronological order - newest change first)
908    Aiyer          03-jan-2003     This procedure has been modified as a part of the fix for
909                                   the bug #2732975
910                                   Made the derivation of Qualification detail ID , Unit details ID ,
911                                   Test result Details ID conditional based on whether its corresponding fields have a
912                                   value specified for it.
913    ********************************************************************************************************************/
914      x_return_status BOOLEAN;
915    BEGIN
916      x_return_status := TRUE;
917      p_s_adv_stnd_unit_level := 'LEVEL';
918      /*
919         get person_id
920      */
921      p_person_id := IGS_GE_GEN_003.GET_PERSON_ID(p_lgcy_adstlvl_rec.person_number);
922      IF p_person_id IS NULL THEN
923         FND_MESSAGE.SET_NAME('IGS', 'IGS_GE_INVALID_PERSON_NUMBER');
924         FND_MSG_PUB.ADD;
925         x_return_status := FALSE;
926      END IF;
927      /*
928         get cal_type and sequence_number
929      */
930      DECLARE
931         l_start_dt       igs_ca_inst.start_dt%TYPE;
932         l_end_dt         igs_ca_inst.end_dt%TYPE;
933         l_return_status  VARCHAR2(2000);
934      BEGIN
935        IGS_GE_GEN_003.GET_CALENDAR_INSTANCE
936                       (
937                         P_ALTERNATE_CD       => p_lgcy_adstlvl_rec.load_cal_alt_code,
938                         P_S_CAL_CATEGORY     => NULL,
939                         P_CAL_TYPE           => p_cal_type,
940                         P_CI_SEQUENCE_NUMBER => p_sequence_number,
941                         P_START_DT           => l_start_dt,
942                         P_END_DT             => l_end_dt,
943                         P_RETURN_STATUS      => l_return_status
944                       );
945        IF p_cal_type IS NULL THEN
946           FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_INVALID_CAL_ALT_CODE');
947           FND_MSG_PUB.ADD;
948           x_return_status := FALSE;
949        END IF;
950      END;
951      /*
952         derive p_authorizing_person_id
953      */
954      p_auth_pers_id := IGS_GE_GEN_003.GET_PERSON_ID(p_lgcy_adstlvl_rec.authorising_person_number);
955 
956      /*
957         derive p_qual_dets_id
958         Code modified for the bug #2732975.
959         Added the following If clauses before deriving the value for qual_dets_id
960    */
961 
962       IF p_lgcy_adstlvl_rec.qual_exam_level  IS NOT NULL THEN
963 
964        DECLARE
965           -- cursor to get qual_dets_id
966           CURSOR c_qual_dets_id (cp_person_id        igs_uc_qual_dets.person_id%TYPE,
967                                  cp_exam_level       igs_uc_qual_dets.exam_level%TYPE,
968                                  cp_subject_code     igs_uc_qual_dets.subject_code%TYPE,
969                                  cp_year             igs_uc_qual_dets.year%TYPE,
970                                  cp_sitting          igs_uc_qual_dets.sitting%TYPE,
971                                  cp_awarding_body    igs_uc_qual_dets.awarding_body%TYPE,
972                                  cp_approved_result  igs_uc_qual_dets.approved_result%TYPE ) IS
973                  SELECT qual_dets_id
974                  FROM   igs_uc_qual_dets
975                  WHERE  person_id       = cp_person_id
976                  AND    exam_level      = cp_exam_level
977                  AND    subject_code    = cp_subject_code
978                  AND    year            = cp_year
979                  AND    sitting         = cp_sitting
980                  AND    awarding_body   = cp_awarding_body
981                  AND    approved_result = cp_approved_result;
982        BEGIN
983          OPEN  c_qual_dets_id (p_person_id,
984                                 p_lgcy_adstlvl_rec.qual_exam_level,
985                                 p_lgcy_adstlvl_rec.qual_subject_code,
986                                 p_lgcy_adstlvl_rec.qual_year,
987                                 p_lgcy_adstlvl_rec.qual_sitting,
988                                 p_lgcy_adstlvl_rec.qual_awarding_body,
989                                 p_lgcy_adstlvl_rec.approved_result);
990           FETCH c_qual_dets_id INTO p_qual_dets_id;
991 
992           IF c_qual_dets_id%NOTFOUND THEN
993             FND_MESSAGE.SET_NAME('IGS','IGS_AV_NOPREV_EDU_QUAL_EXISTS');
994             FND_MSG_PUB.ADD;
995             x_return_status := FALSE;
996           END IF;
997          CLOSE c_qual_dets_id;
998      END;
999    END IF;
1000 
1001      /*
1002         derive p_unit_details_id
1003      */
1004    /*
1005      Code modified for the bug #2732975.
1006      Added the following IF clauses before deriving the value for unit details ID
1007    */
1008    IF p_lgcy_adstlvl_rec.prev_unit_cd IS NOT NULL THEN
1009      DECLARE
1010         CURSOR c_unit_details_id (cp_unit            igs_ad_term_unitdtls.unit%TYPE,
1011                                   cp_prev_term       igs_av_lgcy_lvl_int.prev_term%TYPE,
1012                                   cp_start_date      igs_av_lgcy_lvl_int.start_date%TYPE,
1013                                   cp_end_date        igs_av_lgcy_lvl_int.end_date%TYPE,
1014                                   cp_person_id       igs_pe_person.person_id%TYPE,
1015                                   cp_inst_cd         igs_av_acad_history_v.institution_code%TYPE) IS
1016                SELECT  ahv.unit_details_id
1017                FROM    igs_av_acad_history_v ahv,
1018                        igs_ad_term_details   td
1019                WHERE   ahv.term_details_id = td.term_details_id
1020                AND     ahv.term=td.term
1021                AND     td.term = cp_prev_term
1022                AND     td.start_date = cp_start_date
1023                AND     td.end_date = cp_end_date
1024                AND     ahv.unit = cp_unit
1025                AND     ahv.person_id = cp_person_id
1026                AND     ahv.institution_code = cp_inst_cd;
1027 
1028         l_count  NUMBER := 0;
1029      BEGIN
1030         OPEN  c_unit_details_id (p_lgcy_adstlvl_rec.prev_unit_cd,
1031                                  p_lgcy_adstlvl_rec.prev_term,
1032                                  p_lgcy_adstlvl_rec.start_date,
1033                                  p_lgcy_adstlvl_rec.end_date,
1034                                  p_person_id,
1035                                  p_lgcy_adstlvl_rec.institution_cd);
1036         LOOP
1037            FETCH c_unit_details_id INTO p_unit_details_id;
1038            EXIT WHEN c_unit_details_id%NOTFOUND;
1039            l_count := c_unit_details_id%ROWCOUNT;
1040         END LOOP;
1041         CLOSE c_unit_details_id;
1042         -- set p_unit_details_id in case no data or too many rows
1043         IF l_count = 0 OR l_count >=2 THEN
1044           FND_MESSAGE.SET_NAME('IGS','IGS_AV_TERM_UNTDTLS_NOT_EXISTS');
1045           FND_MSG_PUB.ADD;
1046           x_return_status := FALSE;
1047         END IF;
1048      END;
1049    END IF;
1050     /*
1051         Derive p_tst_rslt_dtls_id
1052         Code modified for the bug #2732975.
1053         Added the following If clauses before deriving the value for tst_rslt_dtls_id
1054    */
1055 
1056      IF p_lgcy_adstlvl_rec.tst_admission_test_type IS NOT NULL THEN
1057        DECLARE
1058          CURSOR c_tst_rslt_dtls_id (cp_admission_test_type  igs_ad_test_results.admission_test_type%TYPE,
1059                                     cp_test_date            igs_ad_test_results.test_date%TYPE,
1060                                     cp_test_segment_name    igs_ad_test_segments.test_segment_name%TYPE,
1061                                     cp_person_id            igs_ad_test_results.person_id%TYPE
1062                                    ) IS
1063                  SELECT  b.tst_rslt_dtls_id
1064                  FROM    igs_ad_test_results a,
1065                          igs_ad_tst_rslt_dtls b,
1066                          igs_ad_test_segments c
1067                  WHERE   a.test_results_id = b.test_results_id
1068                  AND     b.test_segment_id = c.test_segment_id
1069                  AND     c.admission_test_type = cp_admission_test_type
1070                  AND     a.admission_test_type = cp_admission_test_type
1071                  AND     a.test_date           = cp_test_date
1072                  AND     c.test_segment_name   = cp_test_segment_name
1073                  AND     a.person_id           = cp_person_id;
1074           l_count  NUMBER := 0;
1075        BEGIN
1076           OPEN  c_tst_rslt_dtls_id ( p_lgcy_adstlvl_rec.tst_admission_test_type,
1077                                      p_lgcy_adstlvl_rec.tst_test_date,
1078                                      p_lgcy_adstlvl_rec.test_segment_name,
1079                                      p_person_id
1080                                     );
1081           LOOP
1082              FETCH c_tst_rslt_dtls_id INTO p_tst_rslt_dtls_id;
1083              EXIT WHEN c_tst_rslt_dtls_id%NOTFOUND;
1084              l_count := c_tst_rslt_dtls_id%ROWCOUNT;
1085           END LOOP;
1086           CLOSE c_tst_rslt_dtls_id;
1087           -- set p_unit_details_id in case no data or too many rows
1088           IF l_count = 0 OR l_count >=2 THEN
1089             FND_MESSAGE.SET_NAME('IGS','IGS_AV_ADM_TST_RSLT_NOT_EXISTS');
1090             FND_MSG_PUB.ADD;
1091             x_return_status := FALSE;
1092           END IF;
1093        END;
1094      END IF;
1095 
1096        /*
1097         derive p_as_version_number
1098      */
1099      p_as_version_number := IGS_GE_GEN_003.GET_PROGRAM_VERSION
1100                                    (
1101                                      p_person_id  => p_person_id,
1102                                      p_program_cd => p_lgcy_adstlvl_rec.program_cd
1103                                    );
1104 
1105 
1106      /*
1107         check for x_return_status, in this way you can capture all
1108         failures at one go
1109      */
1110 
1111      IF NOT x_return_status THEN
1112         RAISE FND_API.G_EXC_ERROR;
1113      END IF;
1114 
1115    END derive_level_data;
1116 
1117   FUNCTION validate_adv_std_db_cons
1118            (
1119              p_person_id          IN  igs_pe_person.person_id%type,
1120              p_version_number     IN  igs_ps_ver_all.version_number%type,
1121              p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
1122            )
1123   RETURN BOOLEAN
1124   /*************************************************************
1125   Created By : smanglm
1126   Date Created on : 2002/11/13
1127   Purpose : validate_adv_std_db_cons function performs
1128             all the data integrity validation
1129   Know limitations, enhancements or remarks
1130   Change History
1131   Who             When            What
1132   (reverse chronological order - newest change first)
1133   ***************************************************************/
1134   IS
1135      x_return_status  BOOLEAN;
1136   BEGIN
1137      x_return_status := TRUE;
1138      IF NOT IGS_PS_VER_PKG.GET_PK_FOR_VALIDATION
1139                        (
1140                          x_course_cd      => p_lgcy_adstlvl_rec.program_cd,
1141                          x_version_number => p_version_number
1142                        ) THEN
1143           FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_PRG_CD_NOT_EXISTS');
1144           FND_MSG_PUB.ADD;
1145           x_return_status := FALSE;
1146      END IF;
1147      return x_return_status;
1148   END validate_adv_std_db_cons;
1149 
1150   FUNCTION validate_adv_stnd
1151            (
1152              p_person_id          IN  igs_pe_person.person_id%type,
1153              p_version_number     IN  igs_ps_ver.version_number%type,
1154              p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
1155            )
1156   RETURN BOOLEAN
1157   /*************************************************************
1158   Created By : smanglm
1159   Date Created on : 2002/11/13
1160   Purpose : validate_adv_stnd function validates all the business
1161             rules before inserting a record in the table
1162             IGS_AV_ADV_STANDING_ALL
1163   Know limitations, enhancements or remarks
1164   Change History
1165   Who             When            What
1166   (reverse chronological order - newest change first)
1167   ***************************************************************/
1168   IS
1169      x_return_status  BOOLEAN;
1170   BEGIN
1171      x_return_status := TRUE;
1172      /*
1173         check whether person is deceased or not
1174      */
1175      DECLARE
1176         CURSOR c_ind (cp_party_id igs_pe_hz_parties.party_id%TYPE) IS
1177                SELECT deceased_ind
1178                FROM   igs_pe_hz_parties
1179                WHERE  party_id = cp_party_id;
1180         l_ind  igs_pe_hz_parties.deceased_ind%TYPE;
1181      BEGIN
1182         OPEN  c_ind (p_person_id);
1183         FETCH c_ind INTO l_ind;
1184         CLOSE c_ind;
1185         IF upper(l_ind) = 'Y' THEN
1186            FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_PERSON_DECEASED');
1187            FND_MSG_PUB.ADD;
1188            x_return_status := FALSE;
1189         END IF;
1190      END;
1191      /*
1192         check whether exemtion_inst_cd is valid or not
1193      */
1194      DECLARE
1195         CURSOR c_exists (cp_exemption_institution_cd igs_or_inst_exempt_v.exemption_institution_cd%TYPE) IS
1196 		  SELECT 'x'
1197 		  FROM hz_parties hp, igs_pe_hz_parties ihp
1198 		 WHERE hp.party_id = ihp.party_id
1199 		   AND ihp.inst_org_ind = 'I'
1200 		   AND ihp.oi_govt_institution_cd IS NOT NULL
1201 		   AND ihp.oi_institution_status = 'ACTIVE'
1202 		   AND ihp.oss_org_unit_cd = cp_exemption_institution_cd;
1203         l_exists VARCHAR2(1);
1204      BEGIN
1205         OPEN c_exists(p_lgcy_adstlvl_rec.exemption_institution_cd);
1206         FETCH c_exists INTO l_exists;
1207         IF c_exists%NOTFOUND THEN
1208            FND_MESSAGE.SET_NAME('IGS', 'IGS_AV_STND_EXMPT_INVALID');
1209            FND_MSG_PUB.ADD;
1210            x_return_status := FALSE;
1211         END IF;
1212         CLOSE c_exists;
1213      END;
1214      /*
1215         check whether program_cd is valid or not
1216      */
1217      DECLARE
1218         l_message_name VARCHAR2(2000);
1219      BEGIN
1220         IF NOT IGS_AV_VAL_AS.ADVP_VAL_AS_CRS
1221                         (
1222                            p_person_id      => p_person_id,
1223                            p_course_cd      => p_lgcy_adstlvl_rec.program_cd,
1224                            p_version_number => p_version_number,
1225                            p_message_name   => l_message_name
1226                          ) THEN
1227            FND_MESSAGE.SET_NAME('IGS', 'IGS_HE_EXT_SPA_DTL_NOT_FOUND');
1228            FND_MSG_PUB.ADD;
1229            x_return_status := FALSE;
1230          END IF;
1231      END;
1232      /*
1233         validation for exemption credit points
1234      */
1235 
1236      DECLARE
1237            CURSOR c_local_inst_ind (cp_ins_cd igs_or_institution.institution_cd%type) IS
1238                        SELECT  ins.local_institution_ind
1239                        FROM    igs_or_institution ins
1240                        WHERE   ins.institution_cd = cp_ins_cd;
1241 
1242            CURSOR cur_program_exempt_totals (
1243                                cp_course_cd      igs_ps_ver.course_cd%type,
1244                                cp_version_number igs_ps_ver.version_number%type,
1245                    cp_local_ind      VARCHAR2) IS
1246                  SELECT  DECODE (cp_local_ind, 'N', NVL (cv.external_adv_stnd_limit, -1),
1247                                                 NVL (cv.internal_adv_stnd_limit, -1)) adv_stnd_limit
1248                  FROM    igs_ps_ver cv
1249                  WHERE   cv.course_cd    = cp_course_cd
1250                  AND     cv.version_number   = cp_version_number;
1251 
1252             rec_cur_program_exempt_totals cur_program_exempt_totals%ROWTYPE;
1253             rec_local_inst_ind c_local_inst_ind%ROWTYPE;
1254             l_message_name fnd_new_messages.message_name%TYPE;
1255 
1256      BEGIN
1257          OPEN c_local_inst_ind (p_lgcy_adstlvl_rec.exemption_institution_cd);
1258          FETCH c_local_inst_ind INTO rec_local_inst_ind;
1259                  IF (c_local_inst_ind%NOTFOUND) THEN
1260                    rec_local_inst_ind.local_institution_ind := 'N';
1261                  END IF;
1262          CLOSE c_local_inst_ind;
1263          IF (rec_local_inst_ind.local_institution_ind = 'N') THEN
1264            l_message_name := 'IGS_AV_EXCEEDS_PRGVER_EXT_LMT';
1265          ELSE
1266            l_message_name := 'IGS_AV_EXCEEDS_PRGVER_INT_LMT';
1267          END IF;
1268 
1269          OPEN cur_program_exempt_totals (
1270                 p_lgcy_adstlvl_rec.program_cd,
1271                 p_version_number,
1272                 rec_local_inst_ind.local_institution_ind);
1273          FETCH cur_program_exempt_totals INTO rec_cur_program_exempt_totals;
1274          CLOSE cur_program_exempt_totals;
1275 
1276          IF (rec_cur_program_exempt_totals.adv_stnd_limit <> -1) THEN
1277               IF p_lgcy_adstlvl_rec.total_exmptn_approved < 0 OR
1278                  p_lgcy_adstlvl_rec.total_exmptn_approved > rec_cur_program_exempt_totals.adv_stnd_limit THEN
1279                  FND_MESSAGE.SET_NAME('IGS',l_message_name);
1280                  FND_MSG_PUB.ADD;
1281                  x_return_status := FALSE;
1282               END IF;
1283          END IF;
1284 
1285          IF (rec_cur_program_exempt_totals.adv_stnd_limit <> -1) THEN
1286                IF p_lgcy_adstlvl_rec.total_exmptn_granted < 0 OR
1287                  p_lgcy_adstlvl_rec.total_exmptn_granted > rec_cur_program_exempt_totals.adv_stnd_limit THEN
1288                  FND_MESSAGE.SET_NAME('IGS',l_message_name);
1289                  FND_MSG_PUB.ADD;
1290                  x_return_status := FALSE;
1291                END IF;
1292          END IF;
1293      END;
1294      /*
1295         check the course_attempt_status
1296      */
1297      DECLARE
1298         CURSOR c_exists (cp_person_id    igs_en_stdnt_ps_att.person_id%TYPE,
1299                          cp_course_cd    igs_en_stdnt_ps_att.course_cd%TYPE ) IS
1300                SELECT 'x'
1301                FROM   igs_en_stdnt_ps_att
1302                WHERE  person_id = cp_person_id
1303                AND    course_cd = cp_course_cd
1304                AND    course_attempt_status IN ('ENROLLED','INACTIVE','INTERMIT','UNCONFIRM','DISCONTIN','COMPLETED');
1305          l_exists VARCHAR2(1);
1306      BEGIN
1307          OPEN c_exists (p_person_id,
1308                         p_lgcy_adstlvl_rec.program_cd);
1309          FETCH c_exists INTO l_exists;
1310          IF c_exists%NOTFOUND THEN
1311             FND_MESSAGE.SET_NAME('IGS','IGS_AV_PRG_ATTMPT_INVALID');
1312             FND_MSG_PUB.ADD;
1313             x_return_status := FALSE;
1314          END IF;
1315          CLOSE c_exists;
1316      END;
1317 
1318 
1319      return x_return_status;
1320 
1321   END validate_adv_stnd;
1322 
1323 
1324   FUNCTION validate_lvl_db_cons
1325            (
1326              p_person_id              IN igs_pe_person.person_id%type,
1327              p_s_adv_stnd_unit_level  IN igs_ps_unit_level.unit_level%type,
1328              p_cal_type               IN igs_ca_inst.cal_type%type,
1329              p_seq_number             IN igs_ca_inst.sequence_number%type,
1330              p_auth_pers_id           IN igs_pe_person.person_id%type,
1331              p_unit_details_id        IN igs_ad_term_unitdtls.unit_details_id%type,
1332              p_tst_rslt_dtls_id       IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
1333              p_qual_dets_id           IN igs_uc_qual_dets.qual_dets_id%type,
1334              p_course_version         IN igs_ps_ver.version_number%type,
1335              p_lgcy_adstlvl_rec       IN lgcy_adstlvl_rec_type,
1336              p_av_stnd_unit_lvl_id   OUT NOCOPY igs_av_std_ulvlbasis_all.av_stnd_unit_lvl_id%type
1337            )
1338   RETURN  BOOLEAN
1339   /******************************************************************************************
1340   Created By : smanglm
1341   Date Created on : 2002/11/13
1342   Purpose : validate_lvl_db_cons function performs all the data
1343             integrity validation  before entering into the table
1344             IGS_AV_STND_UNIT_LVL_ALL
1345   Know limitations, enhancements or remarks
1346   Change History
1347   Who             When            What
1348   (reverse chronological order - newest change first)
1349   Aiyer           03-jan-2003     This Function has been modified as per the bug #2732975
1350                                   Changed the if conditition i.e if both institution code and
1351                                   tst_rslt_dtls_id are not nulls then show the error message
1352                                   IGS_AV_INST_RLID_BOTH_NOT_NULL.
1353                                   Also removed the foreign key condition check for qualification details ID,
1354                                   Unit Details ID ,Test Result details ID. Instead these have been added in the procedure
1355                                   derive_level_data
1356   Lkaki           22-Mar-2005     The range while checking the credit points entered is changed from 100 to 999
1357                                   as part of the bug : 4253919
1358   ***********************************************************************************************/
1359   IS
1360      x_return_status  BOOLEAN;
1361   BEGIN
1362      x_return_status := TRUE;
1363      /*
1364         primary key validation
1365      */
1366      SELECT IGS_AV_STND_UNIT_LVL_S.NEXTVAL INTO p_av_stnd_unit_lvl_id FROM dual;
1367      IF IGS_AV_STND_UNIT_LVL_PKG.GET_PK_FOR_VALIDATION (p_av_stnd_unit_lvl_id) THEN
1368         FND_MESSAGE.SET_NAME('IGS','IGS_AV_ADV_STND_ALREADY_EXISTS');
1369         FND_MSG_PUB.ADD;
1370         p_av_stnd_unit_lvl_id := NULL;
1371         x_return_status := FALSE;
1372      END IF;
1373 
1374      /*
1375          Foreign Key with Table IGS_AV_ADV_STANDING_PKG
1376      */
1377      IF NOT IGS_AV_ADV_STANDING_PKG.GET_PK_FOR_VALIDATION
1378                    (
1379                      x_person_id                => p_person_id,
1380                      x_course_cd                => p_lgcy_adstlvl_rec.program_cd,
1381                      x_version_number           => p_course_version,
1382                      x_exemption_institution_cd => p_lgcy_adstlvl_rec.exemption_institution_cd
1383                    ) THEN
1384         FND_MESSAGE.SET_NAME('IGS','IGS_AV_NO_ADV_STND_DET_EXIST');
1385         FND_MSG_PUB.ADD;
1386         x_return_status := FALSE;
1387      END IF;
1388      /*
1389          Foreign Key with AUTHORIZING_PERSON_ID exists in table IGS_PE_PERSON
1390      */
1391      IF p_auth_pers_id IS NULL THEN
1392         FND_MESSAGE.SET_NAME('IGS','IGS_AV_INVALID_PERS_AUTH_NUM');
1393         FND_MSG_PUB.ADD;
1394         x_return_status := FALSE;
1395      END IF;
1396      /*
1397          Valid s_adv_granting_status exists
1398      */
1399      IF NOT IGS_LOOKUPS_VIEW_PKG.GET_PK_FOR_VALIDATION
1400                     (
1401                       x_lookup_type => 'ADV_STND_GRANTING_STATUS',
1402                       x_lookup_code => p_lgcy_adstlvl_rec.s_adv_stnd_granting_status
1403                     ) THEN
1404         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CANNOT_DTR_GRNT_STAT');
1405         FND_MSG_PUB.ADD;
1406         x_return_status := FALSE;
1407      END IF;
1408      /*
1409          Foreign Key with Table IGS_PS_UNIT_LEVEL
1410      */
1411      IF NOT IGS_PS_UNIT_LEVEL_PKG.GET_PK_FOR_VALIDATION
1412                     (
1413                        x_unit_level => p_s_adv_stnd_unit_level
1414                     ) THEN
1415         FND_MESSAGE.SET_NAME('IGS','IGS_AV_TYPE_MUSTBE_LEVEL');
1416         FND_MSG_PUB.ADD;
1417         x_return_status := FALSE;
1418      END IF;
1419      /*
1420          Credit points between 0 and 999
1421      */
1422      BEGIN
1423         IF to_number(p_lgcy_adstlvl_rec.credit_points) < 0 OR
1424            to_number(p_lgcy_adstlvl_rec.credit_points) > 999 THEN
1425            FND_MESSAGE.SET_NAME('IGS','IGS_AV_CRD_POINTS_BET_0_99');
1426            FND_MSG_PUB.ADD;
1427            x_return_status := FALSE;
1428         END IF;
1429      EXCEPTION
1430         WHEN OTHERS THEN
1431            FND_MESSAGE.SET_NAME('IGS','IGS_AV_CRD_POINTS_BET_0_99');
1432            FND_MSG_PUB.ADD;
1433            x_return_status := FALSE;
1434      END;
1435      /*
1436          program_group_ind should be Y or N
1437      */
1438      IF p_lgcy_adstlvl_rec.prog_group_ind NOT IN ('Y','N') THEN
1439         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CRS_GRP_IN_Y_N');
1440         FND_MSG_PUB.ADD;
1441         x_return_status := FALSE;
1442      END IF;
1443      /*
1444          Validate that if institution_cd is not null then one of
1445          unit_details_id or QUAL_DETS_ID needs to have a not null value
1446      */
1447      IF p_lgcy_adstlvl_rec.institution_cd IS NOT NULL THEN
1448         IF p_unit_details_id IS NULL AND
1449            p_qual_dets_id IS NULL THEN
1450            FND_MESSAGE.SET_NAME('IGS','IGS_AV_UDID_QDID_CAN_NOT_NULL');
1451            FND_MSG_PUB.ADD;
1452            x_return_status := FALSE;
1453         END IF;
1454      END IF;
1455      /*
1456          Validate that if both institution_cd and tst_rslt_dtls_id
1457          are not nulls then raise an error message
1458          This code has been modfied as per the bug #2732975
1459          Changed condition from null to not null for both institution code and tst_rslt_dtls_id
1460      */
1461      IF p_lgcy_adstlvl_rec.institution_cd IS NOT NULL AND
1462         p_tst_rslt_dtls_id IS NOT NULL THEN
1463         FND_MESSAGE.SET_NAME('IGS','IGS_AV_INST_RLID_BOTH_NOT_NULL');
1464         FND_MSG_PUB.ADD;
1465         x_return_status := FALSE;
1466      END IF;
1467      /*
1468          Validate that  One and only one of qualification details,
1469          unit details or test result details can be
1470          entered (all the three cannot be Not Nulls simultaneously)
1471      */
1472      IF NOT
1473      (
1474        ( p_unit_details_id IS NOT NULL AND
1475          p_tst_rslt_dtls_id IS NULL AND
1476          p_qual_dets_id IS NULL
1477        )
1478        OR
1479        ( p_unit_details_id IS NULL AND
1480          p_tst_rslt_dtls_id IS NOT NULL AND
1481          p_qual_dets_id IS NULL
1482        )
1483        OR
1484        ( p_unit_details_id IS NULL AND
1485          p_tst_rslt_dtls_id IS NULL AND
1486          p_qual_dets_id IS NOT NULL
1487        )
1488      ) THEN
1489         FND_MESSAGE.SET_NAME('IGS','IGS_AV_ATLEAST_ONE_NOT_NULL');
1490         FND_MSG_PUB.ADD;
1491         x_return_status := FALSE;
1492      END IF;
1493      /*
1494          Validate that  valid values for the record parameter
1495          s_adv_stnd_granting_status are in
1496          'CANCELLED','GRANTED','APPROVED','EXPIRED','REVOKED'
1497      */
1498      IF p_lgcy_adstlvl_rec.s_adv_stnd_granting_status NOT IN
1499         ('CANCELLED','GRANTED','APPROVED','EXPIRED','REVOKED') THEN
1500         FND_MESSAGE.SET_NAME('IGS','IGS_AV_CANNOT_DTR_GRNT_STAT');
1501         FND_MSG_PUB.ADD;
1502         x_return_status := FALSE;
1503      END IF;
1504 
1505      /*
1506         Unit level marks between 0 and 100
1507      */
1508      BEGIN
1509         IF to_number(p_lgcy_adstlvl_rec.unit_level_mark) < 0 OR
1510            to_number(p_lgcy_adstlvl_rec.unit_level_mark) > 100 THEN
1511            FND_MESSAGE.SET_NAME('IGS','IGS_GR_MARK_INV_0_100');
1512            FND_MSG_PUB.ADD;
1513            x_return_status := FALSE;
1514         END IF;
1515      EXCEPTION
1516         WHEN OTHERS THEN
1517            FND_MESSAGE.SET_NAME('IGS','IGS_GR_MARK_INV_0_100');
1518            FND_MSG_PUB.ADD;
1519            x_return_status := FALSE;
1520      END;
1521 
1522      return x_return_status;
1523 
1524   END validate_lvl_db_cons;
1525 
1526 
1527   FUNCTION validate_level
1528            (
1529              p_person_id           IN igs_pe_person.person_id%type,
1530              p_unit_level          IN igs_ps_unit_level.unit_level%type,
1531              p_cal_type            IN igs_ca_inst.cal_type%type,
1532              p_seq_number          IN igs_ca_inst.sequence_number%type,
1533              p_auth_pers_id        IN igs_pe_person.person_id%type,
1534              p_unit_details_id     IN igs_ad_term_unitdtls.unit_details_id%type,
1535              p_tst_rslt_dtls_id    IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
1536              p_qual_dets_id        IN igs_uc_qual_dets.qual_dets_id%type,
1537              p_course_version      IN igs_ps_ver.version_number%type,
1538              p_lgcy_adstlvl_rec    IN lgcy_adstlvl_rec_type
1539            )
1540   RETURN BOOLEAN
1541   /*************************************************************
1542   Created By : smanglm
1543   Date Created on : 2002/11/13
1544   Purpose : validate_level function performs all the business
1545             validations before inserting a record into the table
1546             IGS_AV_STND_UNIT_LVL_ALL
1547   Know limitations, enhancements or remarks
1548   Change History
1549   Who             When            What
1550   (reverse chronological order - newest change first)
1551   ***************************************************************/
1552   IS
1553      x_return_status  BOOLEAN;
1554   BEGIN
1555      x_return_status := TRUE;
1556      /*
1557          Validate that the approved date is greater than current date
1558      */
1559      IF p_lgcy_adstlvl_rec.approved_dt >= SYSDATE THEN
1560         FND_MESSAGE.SET_NAME('IGS','IGS_AV_APRVDT_LE_CURDT');
1561         FND_MSG_PUB.ADD;
1562         x_return_status := FALSE;
1563      END IF;
1564      /*
1565          Validate whether the granted date, cancelled date or
1566          revoked date  are greater than or equal to the approved
1567          date for the same record
1568      */
1569      IF p_lgcy_adstlvl_rec.granted_dt <= p_lgcy_adstlvl_rec.approved_dt OR
1570         p_lgcy_adstlvl_rec.cancelled_dt <= p_lgcy_adstlvl_rec.approved_dt OR
1571         p_lgcy_adstlvl_rec.revoked_dt <= p_lgcy_adstlvl_rec.approved_dt THEN
1572         FND_MESSAGE.SET_NAME('IGS','IGS_AV_DTASSO_LE_APPRVDT');
1573         FND_MSG_PUB.ADD;
1574         x_return_status := FALSE;
1575      END IF;
1576      /*
1577          Validate whether auth person is staff or not
1578      */
1579      DECLARE
1580         l_message VARCHAR2(2000);
1581      BEGIN
1582        IF NOT IGS_AD_VAL_ACAI.GENP_VAL_STAFF_PRSN
1583                              (
1584                                 p_person_id    => p_auth_pers_id,
1585                                 p_message_name => l_message
1586                              ) THEN
1587           FND_MESSAGE.SET_NAME('IGS','IGS_GE_NOT_STAFF_MEMBER');
1588           FND_MSG_PUB.ADD;
1589           x_return_status := FALSE;
1590        END IF;
1591      END;
1592      /*
1593          Validate inst cd
1594      */
1595      DECLARE
1596         l_message VARCHAR2(2000);
1597      BEGIN
1598        IF NOT IGS_AV_VAL_ASU.ADVP_VAL_ASU_INST
1599                              (
1600                                p_exempt_inst  => p_lgcy_adstlvl_rec.exemption_institution_cd,
1601                                p_message_name => l_message
1602                              ) THEN
1603           FND_MESSAGE.SET_NAME('IGS','IGS_AV_INST_CODE_INVALID');
1604           FND_MSG_PUB.ADD;
1605           x_return_status := FALSE;
1606        END IF;
1607      END;
1608      /*
1609          Validate whether the advanced standing approved / granted has not
1610          exceeded the advanced standing internal or external limits of
1611          the Program version
1612      */
1613      DECLARE
1614         l_message VARCHAR2(2000);
1615         l_total_exmptn_approved        NUMBER;
1616         l_total_exmptn_granted         NUMBER;
1617         l_total_exmptn_perc_grntd      NUMBER;
1618 
1619      BEGIN
1620        IF NOT IGS_AV_VAL_ASU.ADVP_VAL_AS_TOTALS
1621                              (
1622                                 p_person_id                    => p_person_id,
1623                                 p_course_cd                    => p_lgcy_adstlvl_rec.program_cd,
1624                                 p_version_number               => p_course_version,
1625                                 p_include_approved             => TRUE,
1626                                 p_asu_unit_cd                  => NULL,
1627                                 p_asu_version_number           => NULL,
1628                                 p_asu_advstnd_granting_status  => NULL,
1629                                 p_asul_unit_level              => p_lgcy_adstlvl_rec.unit_level,
1630                                 p_asul_exmptn_institution_cd   => p_lgcy_adstlvl_rec.exemption_institution_cd,
1631                                 p_asul_advstnd_granting_status => p_lgcy_adstlvl_rec.s_adv_stnd_granting_status,
1632                                 p_total_exmptn_approved        => l_total_exmptn_approved,
1633                                 p_total_exmptn_granted         => l_total_exmptn_granted,
1634                                 p_total_exmptn_perc_grntd      => l_total_exmptn_perc_grntd,
1635                                 p_message_name                 => l_message,
1636                                 p_unit_details_id              => p_unit_details_id,
1637                                 p_tst_rslt_dtls_id             => p_tst_rslt_dtls_id
1638                              ) THEN
1639           FND_MESSAGE.SET_NAME('IGS',l_message);
1640           FND_MSG_PUB.ADD;
1641           x_return_status := FALSE;
1642        END IF;
1643      END;
1644 
1645      /*
1646          check for person hold
1647      */
1648      DECLARE
1649         l_message VARCHAR2(2000);
1650      BEGIN
1651        IF NOT IGS_EN_VAL_ENCMB.ENRP_VAL_EXCLD_PRSN
1652                              (
1653                                 p_person_id     => p_person_id,
1654                                 p_course_cd     => p_lgcy_adstlvl_rec.program_cd,
1655                                 p_effective_dt  => p_lgcy_adstlvl_rec.approved_dt,
1656                                 p_message_name  => l_message
1657                              ) THEN
1658           FND_MESSAGE.SET_NAME('IGS',l_message);
1659           FND_MSG_PUB.ADD;
1660           x_return_status := FALSE;
1661        END IF;
1662      END;
1663      /*
1664          Validate that the approved date is less than the expiry date
1665      */
1666      IF p_lgcy_adstlvl_rec.approved_dt >= p_lgcy_adstlvl_rec.expiry_dt THEN
1667         FND_MESSAGE.SET_NAME('IGS','IGS_AV_APRVDT_NOT_GT_EXPDT');
1668         FND_MSG_PUB.ADD;
1669         x_return_status := FALSE;
1670      END IF;
1671      /*
1672         check the course_attempt_status
1673      */
1674      DECLARE
1675         CURSOR c_exists (cp_person_id    igs_en_stdnt_ps_att.person_id%TYPE,
1676                          cp_course_cd    igs_en_stdnt_ps_att.course_cd%TYPE ) IS
1677                SELECT 'x'
1678                FROM   igs_en_stdnt_ps_att
1679                WHERE  person_id = cp_person_id
1680                AND    course_cd = cp_course_cd
1681                AND    course_attempt_status IN ('ENROLLED','INACTIVE','INTERMIT','UNCONFIRM','DISCONTIN','COMPLETED');
1682          l_exists VARCHAR2(1);
1683      BEGIN
1684          OPEN c_exists (p_person_id,
1685                         p_lgcy_adstlvl_rec.program_cd);
1686          FETCH c_exists INTO l_exists;
1687          IF c_exists%NOTFOUND THEN
1688             FND_MESSAGE.SET_NAME('IGS','IGS_AV_PRG_ATTMPT_INVALID');
1689             FND_MSG_PUB.ADD;
1690             x_return_status := FALSE;
1691          END IF;
1692          CLOSE c_exists;
1693      END;
1694      return x_return_status;
1695 
1696   END validate_level;
1697 
1698 
1699   FUNCTION create_post_lvl
1700            (
1701              p_person_id          IN  igs_pe_person.person_id%type,
1702              p_course_version     IN  igs_ps_ver.version_number%type,
1703              p_unit_details_id     IN igs_ad_term_unitdtls.unit_details_id%type,
1704              p_tst_rslt_dtls_id    IN igs_ad_tst_rslt_dtls.tst_rslt_dtls_id%type,
1705              p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
1706            )
1707   RETURN BOOLEAN
1708   /*************************************************************
1709   Created By : smanglm
1710   Date Created on : 2002/11/13
1711   Purpose : create_post_lvl function performs all the Post
1712             Insert business validations on the table
1713             IGS_AV_STND_UNIT_LVL_ALL
1714   Know limitations, enhancements or remarks
1715   Change History
1716   Who             When            What
1717   (reverse chronological order - newest change first)
1718   ***************************************************************/
1719   IS
1720      x_return_status  BOOLEAN;
1721      l_message VARCHAR2(2000);
1722      l_total_exmptn_approved        NUMBER;
1723      l_total_exmptn_granted         NUMBER;
1724      l_total_exmptn_perc_grntd      NUMBER;
1725 
1726   BEGIN
1727      x_return_status := TRUE;
1728      /*
1729          Validate whether the advanced standing approved / granted has not
1730          exceeded the advanced standing internal or external limits of
1731          the Program version
1732      */
1733      IF NOT IGS_AV_VAL_ASU.ADVP_VAL_AS_TOTALS
1734                              (
1735                                 p_person_id                    => p_person_id,
1736                                 p_course_cd                    => p_lgcy_adstlvl_rec.program_cd,
1737                                 p_version_number               => p_course_version,
1738                                 p_include_approved             => TRUE,
1739                                 p_asu_unit_cd                  => NULL,
1740                                 p_asu_version_number           => NULL,
1741                                 p_asu_advstnd_granting_status  => NULL,
1742                                 p_asul_unit_level              => p_lgcy_adstlvl_rec.unit_level,
1743                                 p_asul_exmptn_institution_cd   => p_lgcy_adstlvl_rec.exemption_institution_cd,
1744                                 p_asul_advstnd_granting_status => p_lgcy_adstlvl_rec.s_adv_stnd_granting_status,
1745                                 p_total_exmptn_approved        => l_total_exmptn_approved,
1746                                 p_total_exmptn_granted         => l_total_exmptn_granted,
1747                                 p_total_exmptn_perc_grntd      => l_total_exmptn_perc_grntd,
1748                                 p_message_name                 => l_message,
1749                                 p_unit_details_id              => p_unit_details_id,
1750                                 p_tst_rslt_dtls_id             => p_tst_rslt_dtls_id,
1751 				p_asu_exmptn_institution_cd    => p_lgcy_adstlvl_rec.exemption_institution_cd
1752                              ) THEN
1753           FND_MESSAGE.SET_NAME('IGS',l_message);
1754           FND_MSG_PUB.ADD;
1755           x_return_status := FALSE;
1756      END IF;  -- function returns TRUE
1757      /*
1758       update IGS_AV_ADV_STANDING_ALL  with above obtained values for
1759       total_exmptn_approved, total_exmptn_granted   and total_exmptn_perc_grntd
1760      */
1761      IF x_return_status THEN
1762        UPDATE IGS_AV_ADV_STANDING_ALL
1763        SET    TOTAL_EXMPTN_APPROVED        = l_total_exmptn_approved,
1764               TOTAL_EXMPTN_GRANTED         = l_total_exmptn_granted,
1765               TOTAL_EXMPTN_PERC_GRNTD      = l_total_exmptn_perc_grntd
1766        WHERE  PERSON_ID                    = p_person_id
1767        AND    COURSE_CD                    = p_lgcy_adstlvl_rec.program_cd
1768        AND    VERSION_NUMBER               = p_course_version
1769        AND    EXEMPTION_INSTITUTION_CD     = p_lgcy_adstlvl_rec.exemption_institution_cd;
1770      END IF;
1771      return x_return_status;
1772   END create_post_lvl;
1773 
1774 
1775   FUNCTION validate_lvl_bas_db_cons
1776            (
1777              p_person_id           IN  igs_pe_person.person_id%type,
1778              p_av_stnd_unit_lvl_id IN  igs_av_std_ulvlbasis_all.av_stnd_unit_lvl_id%type,
1779              p_lgcy_adstlvl_rec    IN  lgcy_adstlvl_rec_type
1780            )
1781   RETURN VARCHAR2
1782   /*************************************************************
1783   Created By : smanglm
1784   Date Created on : 2002/11/13
1785   Purpose :
1786           validate_lvl_bas_db_cons function performs all the
1787           data integrity validation before inserting
1788           into the table IGS_AV_STD_ULVLBASIS_ALL
1789   Know limitations, enhancements or remarks
1790   Change History
1791   Who             When            What
1792   swaghmar	19-Oct-2005	Changed for bug# 4676359
1793   (reverse chronological order - newest change first)
1794   ***************************************************************/
1795   IS
1796      x_return_status  VARCHAR2(1);
1797   BEGIN
1798      x_return_status := 'S';
1799      /*
1800         Primary key validation
1801      */
1802 
1803      IF IGS_AV_STD_ULVLBASIS_PKG.GET_PK_FOR_VALIDATION
1804                             (
1805                               x_av_stnd_unit_lvl_id => p_av_stnd_unit_lvl_id
1806                             ) THEN
1807         FND_MESSAGE.SET_NAME('IGS','IGS_AV_ULVLBS_ALREADY_EXISTS');
1808         FND_MSG_PUB.ADD;
1809         x_return_status := 'W';
1810         return x_return_status;
1811      END IF;
1812      /*
1813         Foreign Key with IGS_AV_STND_UNIT_LVL_ALL
1814      */
1815      IF NOT IGS_AV_STND_UNIT_LVL_PKG.GET_PK_FOR_VALIDATION
1816                             (
1817                               x_av_stnd_unit_lvl_id => p_av_stnd_unit_lvl_id
1818                             ) THEN
1819         FND_MESSAGE.SET_NAME('IGS','IGS_AV_NO_ADV_STND_DET_EXIST');
1820         FND_MSG_PUB.ADD;
1821         x_return_status := 'E';
1822      END IF;
1823      /*
1824         Foreign Key with IGS_PS_TYPE_ALL
1825      */
1826      IF ((p_lgcy_adstlvl_rec.basis_program_type IS NOT NULL) AND NOT IGS_PS_TYPE_PKG.GET_PK_FOR_VALIDATION(
1827 								      x_course_type => p_lgcy_adstlvl_rec.basis_program_type
1828 								    )) THEN
1829         FND_MESSAGE.SET_NAME('IGS','IGS_AV_BAS_CRS_TYP_FK_EXISTS');
1830         FND_MSG_PUB.ADD;
1831         x_return_status := 'E';
1832      END IF;
1833      /*
1834         Validate that the record parameter BASIS_YEAR
1835         is greater than 1900 and less than 2100
1836      */
1837      IF ((p_lgcy_adstlvl_rec.basis_year IS NOT NULL) AND ( p_lgcy_adstlvl_rec.basis_year <= 1900 OR
1838 							   p_lgcy_adstlvl_rec.basis_year >= 2100)) THEN
1839         FND_MESSAGE.SET_NAME('IGS','IGS_AV_BS_YR_BET_1900_2100');
1840         FND_MSG_PUB.ADD;
1841         x_return_status := 'E';
1842      END IF;
1843      /*
1844         Validate that the record parameter BASIS_COMPLETION_IND
1845         must be either 'Y' or 'N'
1846      */
1847      IF ((p_lgcy_adstlvl_rec.basis_completion_ind IS NOT NULL) AND (p_lgcy_adstlvl_rec.basis_completion_ind NOT IN ('Y','N'))) THEN
1848         FND_MESSAGE.SET_NAME('IGS','IGS_AV_BS_CMPL_IND_IN_Y_N');
1849         FND_MSG_PUB.ADD;
1850         x_return_status := 'E';
1851      END IF;
1852 
1853      return x_return_status;
1854 
1855   END validate_lvl_bas_db_cons;
1856 
1857   FUNCTION validate_lvl_bas
1858            (
1859              p_course_version     IN  igs_ps_ver.version_number%type,
1860              p_lgcy_adstlvl_rec   IN  lgcy_adstlvl_rec_type
1861            )
1862   RETURN BOOLEAN
1863   /*************************************************************
1864   Created By : smanglm
1865   Date Created on : 2002/11/13
1866   Purpose :
1867           validate_lvl_bas function performs all the business
1868           validation before inserting  into the table
1869           IGS_AV_STD_ULVLBASIS_ALL
1870   Know limitations, enhancements or remarks
1871   Change History
1872   Who             When            What
1873   (reverse chronological order - newest change first)
1874   ***************************************************************/
1875   IS
1876      x_return_status  BOOLEAN;
1877      l_message_name   VARCHAR2(2000);
1878      l_return_type    VARCHAR2(2000);
1879 
1880   BEGIN
1881      x_return_status := TRUE;
1882 
1883      x_return_status := IGS_AV_VAL_ASULEB.ADVP_VAL_BASIS_YEAR
1884                             (
1885                               p_basis_year     => p_lgcy_adstlvl_rec.basis_year,
1886                               p_course_cd      => p_lgcy_adstlvl_rec.program_cd,
1887                               p_version_number => p_course_version,
1888                               p_message_name   => l_message_name,
1889                               p_return_type    => l_return_type
1890                              );
1891      IF NOT x_return_status THEN
1892                 FND_MESSAGE.SET_NAME('IGS', l_message_name);
1893                 FND_MSG_PUB.ADD;
1894      END IF;
1895      return x_return_status;
1896   END validate_lvl_bas;
1897 
1898 END igs_av_lvl_lgcy_pub;