DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_SPA_LGCY_PUB

Source


1 PACKAGE BODY igs_en_spa_lgcy_pub AS
2 /* $Header: IGSENA2B.pls 120.0 2005/06/03 15:54:41 appldev noship $ */
3 /*----------------------------------------------------------------------------
4 ||  Created By : kkillams
5 ||  Created On : 08-11-2002
6 ||  Purpose :
7 ||  Known limitations, enhancements or remarks :
8 ||  Change History :
9 ||  Who             When            What
10 ||  amuthu          07-JAN-03       Changed the validate_re_db_cons
11 ||  amuthu          07-JAN-03       Changed the validate_sca_db_cons
12 ------------------------------------------------------------------------------*/
13 g_pkg_name        CONSTANT VARCHAR2(30) := 'IGS_EN_SPA_LGCY_PUB';
14 
15 FUNCTION validate_parameters(p_sca_re_rec         IN   SCA_RE_REC_TYPE,
16                              p_career_flag        IN   VARCHAR2)
17 /*----------------------------------------------------------------------------
18 ||  Created By : kkillams
19 ||  Created On : 08-11-2002
20 ||  Purpose : Function validates the student program attempt legacy input parameters.
21 |   On successful validation it returns true else false.
22 ||  Known limitations, enhancements or remarks :
23 ||  Change History :
24 ||  Who             When            What
25 ------------------------------------------------------------------------------*/
26 RETURN BOOLEAN AS
27 l_error_flag                 VARCHAR2(1);
28 l_message_count              NUMBER(5);
29 BEGIN
30      --Set the error flag to N
31      l_error_flag  := 'N';
32 
33      --Validating the mandatory parameters.
34      IF p_sca_re_rec.person_number IS NULL THEN
35         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PER_NUM_NULL');
36         FND_MSG_PUB.ADD;
37         l_error_flag  := 'Y';
38      END IF;
39 
40      IF p_sca_re_rec.program_cd IS NULL THEN
41         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRGM_CD_NULL');
42         FND_MSG_PUB.ADD;
43         l_error_flag  := 'Y';
44      END IF;
45 
46      IF p_sca_re_rec.version_number IS NULL THEN
47         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_VER_NULL');
48         FND_MSG_PUB.ADD;
49         l_error_flag  := 'Y';
50      END IF;
51 
52      IF p_sca_re_rec.location_cd  IS NULL THEN
53         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_LOC_NULL');
54         FND_MSG_PUB.ADD;
55         l_error_flag  := 'Y';
56      END IF;
57 
58      IF p_sca_re_rec.attendance_mode IS NULL THEN
59         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_ATT_MOD_NULL');
60         FND_MSG_PUB.ADD;
61         l_error_flag  := 'Y';
62      END IF;
63 
64      IF p_sca_re_rec.attendance_type IS NULL THEN
65         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_ATT_TYPE_NULL');
66         FND_MSG_PUB.ADD;
67         l_error_flag  := 'Y';
68      END IF;
69 
70      -- If any of the Descriptive Flex field columns have value , validate them .
71      IF (p_sca_re_rec.attribute_category IS NOT NULL OR p_sca_re_rec.attribute1  IS NOT NULL OR p_sca_re_rec.attribute2  IS NOT NULL OR
72          p_sca_re_rec.attribute3  IS NOT NULL OR p_sca_re_rec.attribute4  IS NOT NULL OR p_sca_re_rec.attribute5  IS NOT NULL OR
73          p_sca_re_rec.attribute6  IS NOT NULL OR p_sca_re_rec.attribute7  IS NOT NULL OR p_sca_re_rec.attribute8  IS NOT NULL OR
74          p_sca_re_rec.attribute9  IS NOT NULL OR p_sca_re_rec.attribute10 IS NOT NULL OR p_sca_re_rec.attribute11 IS NOT NULL OR
75          p_sca_re_rec.attribute12 IS NOT NULL OR p_sca_re_rec.attribute13 IS NOT NULL OR p_sca_re_rec.attribute14 IS NOT NULL OR
76          p_sca_re_rec.attribute15 IS NOT NULL OR p_sca_re_rec.attribute16 IS NOT NULL OR p_sca_re_rec.attribute17 IS NOT NULL OR
77          p_sca_re_rec.attribute18 IS NOT NULL OR p_sca_re_rec.attribute19 IS NOT NULL OR p_sca_re_rec.attribute20 IS NOT NULL )
78      THEN
79             IF NOT igs_ad_imp_018.validate_desc_flex (
80                  p_attribute_category   => p_sca_re_rec.attribute_category ,
81                  p_attribute1           => p_sca_re_rec.attribute1   ,
82                  p_attribute2           => p_sca_re_rec.attribute2   ,
83                  p_attribute3           => p_sca_re_rec.attribute3   ,
84                  p_attribute4           => p_sca_re_rec.attribute4   ,
85                  p_attribute5           => p_sca_re_rec.attribute5   ,
86                  p_attribute6           => p_sca_re_rec.attribute6   ,
87                  p_attribute7           => p_sca_re_rec.attribute7   ,
88                  p_attribute8           => p_sca_re_rec.attribute8   ,
89                  p_attribute9           => p_sca_re_rec.attribute9   ,
90                  p_attribute10          => p_sca_re_rec.attribute10  ,
91                  p_attribute11          => p_sca_re_rec.attribute11  ,
92                  p_attribute12          => p_sca_re_rec.attribute12  ,
93                  p_attribute13          => p_sca_re_rec.attribute13  ,
94                  p_attribute14          => p_sca_re_rec.attribute14  ,
95                  p_attribute15          => p_sca_re_rec.attribute15  ,
96                  p_attribute16          => p_sca_re_rec.attribute16  ,
97                  p_attribute17          => p_sca_re_rec.attribute17  ,
98                  p_attribute18          => p_sca_re_rec.attribute18  ,
99                  p_attribute19          => p_sca_re_rec.attribute19  ,
100                  p_attribute20          => p_sca_re_rec.attribute20  ,
101                  p_desc_flex_name       => 'IGS_EN_STDNT_ATT_FLEX'
102                  )  THEN
103                         FND_MESSAGE.SET_NAME( 'IGS','IGS_AD_INVALID_DESC_FLEX' );
104                         FND_MSG_PUB.ADD;
105                         l_error_flag  := 'Y';
106          END IF ;
107      END IF;
108 
109      --Do check constraints validation.
110      IF p_sca_re_rec.program_cd IS NOT NULL THEN
111              BEGIN
112                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'COURSE_CD',
113                                                             column_value   => p_sca_re_rec.program_cd);
114              EXCEPTION
115                 WHEN OTHERS THEN
116                         l_message_count := FND_MSG_PUB.COUNT_MSG;
117                         FND_MSG_PUB.DELETE_MSG(l_message_count);
118                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_CD_UPPCASE');
119                         FND_MSG_PUB.ADD;
120                         l_error_flag  := 'Y';
121              END;
122      END IF;
123 
124      IF p_sca_re_rec.cal_type IS NOT NULL THEN
125              BEGIN
126                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'CAL_TYPE',
127                                                             column_value   => p_sca_re_rec.cal_type);
128              EXCEPTION
129                 WHEN OTHERS THEN
130                         l_message_count := FND_MSG_PUB.COUNT_MSG;
131                         FND_MSG_PUB.DELETE_MSG(l_message_count);
132                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_ACAD_CAL_UPPCASE');
133                         FND_MSG_PUB.ADD;
134                         l_error_flag  := 'Y';
135              END;
136      END IF;
137 
138      IF p_sca_re_rec.location_cd IS NOT NULL THEN
139              BEGIN
140                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'LOCATION_CD',
141                                                             column_value   => p_sca_re_rec.location_cd);
142              EXCEPTION
143                 WHEN OTHERS THEN
144                         l_message_count := FND_MSG_PUB.COUNT_MSG;
145                         FND_MSG_PUB.DELETE_MSG(l_message_count);
146                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_LOC_CD_UCASE');
147                         FND_MSG_PUB.ADD;
148                         l_error_flag  := 'Y';
149              END;
150      END IF;
151 
152      IF p_sca_re_rec.attendance_mode IS NOT NULL THEN
153              BEGIN
154                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'ATTENDANCE_MODE',
155                                                             column_value   => p_sca_re_rec.attendance_mode);
156              EXCEPTION
157                 WHEN OTHERS THEN
158                         l_message_count := FND_MSG_PUB.COUNT_MSG;
159                         FND_MSG_PUB.DELETE_MSG(l_message_count);
160                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_ATT_MODE_UCASE');
161                         FND_MSG_PUB.ADD;
162                         l_error_flag  := 'Y';
163              END;
164      END IF;
165 
166      IF p_sca_re_rec.attendance_type IS NOT NULL THEN
167              BEGIN
168                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'ATTENDANCE_TYPE',
169                                                             column_value   => p_sca_re_rec.attendance_type);
170              EXCEPTION
171                 WHEN OTHERS THEN
172                         l_message_count := FND_MSG_PUB.COUNT_MSG;
173                         FND_MSG_PUB.DELETE_MSG(l_message_count);
174                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_ATT_TYPE_UCASE');
175                         FND_MSG_PUB.ADD;
176                         l_error_flag  := 'Y';
177              END;
178      END IF;
179 
180      IF p_sca_re_rec.student_confirmed_ind IS NOT NULL THEN
181              BEGIN
182                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'STUDENT_CONFIRMED_IND',
183                                                             column_value   => p_sca_re_rec.student_confirmed_ind);
184              EXCEPTION
185                 WHEN OTHERS THEN
186                         l_message_count := FND_MSG_PUB.COUNT_MSG;
187                         FND_MSG_PUB.DELETE_MSG(l_message_count);
188                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_CONF_IND_INVALID');
189                         FND_MSG_PUB.ADD;
190                         l_error_flag  := 'Y';
191              END;
192              END IF;
193 
194      IF p_career_flag = 'Y' THEN
195              IF p_sca_re_rec.primary_program_type IS NOT NULL THEN
196                  BEGIN
197                       igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'PRIMARY_PROGRAM_TYPE',
198                                                                 column_value   => p_sca_re_rec.primary_program_type);
199                       EXCEPTION
200                         WHEN OTHERS THEN
201                                 l_message_count := FND_MSG_PUB.COUNT_MSG;
202                                 FND_MSG_PUB.DELETE_MSG(l_message_count);
203                                 FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_PRI_PRG_INVALID');
204                                 FND_MSG_PUB.ADD;
205                                 l_error_flag  := 'Y';
206                      END;
207              END IF;
208              IF p_sca_re_rec.primary_prog_type_source IS NOT NULL THEN
209                      BEGIN
210                           igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'PRIMARY_PROG_TYPE_SOURCE',
211                                                                     column_value   => p_sca_re_rec.primary_prog_type_source);
212                      EXCEPTION
213                         WHEN OTHERS THEN
214                                 l_message_count := FND_MSG_PUB.COUNT_MSG;
215                                 FND_MSG_PUB.DELETE_MSG(l_message_count);
216                                 FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_SRC_PRI_TYP_INVALID');
217                                 FND_MSG_PUB.ADD;
218                                 l_error_flag  := 'Y';
219                      END;
220              END IF;
221      END IF;  --p_career_flag
222      IF p_sca_re_rec.key_program IS NOT NULL THEN
223              BEGIN
224                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'KEY_PROGRAM',
225                                                             column_value   => p_sca_re_rec.key_program);
226              EXCEPTION
227                 WHEN OTHERS THEN
228                         l_message_count := FND_MSG_PUB.COUNT_MSG;
229                         FND_MSG_PUB.DELETE_MSG(l_message_count);
230                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_KEY_INVALID');
231                         FND_MSG_PUB.ADD;
232                         l_error_flag  := 'Y';
233              END;
234      END IF;
235 
236      IF p_sca_re_rec.provisional_ind IS NOT NULL THEN
237              BEGIN
238                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'PROVISIONAL_IND',
239                                                             column_value   => p_sca_re_rec.provisional_ind);
240              EXCEPTION
241                 WHEN OTHERS THEN
242                         l_message_count := FND_MSG_PUB.COUNT_MSG;
243                         FND_MSG_PUB.DELETE_MSG(l_message_count);
244                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_PROV_IND_INVALID');
245                         FND_MSG_PUB.ADD;
246                         l_error_flag  := 'Y';
247              END;
248      END IF;
249 
250      IF p_sca_re_rec.discontinuation_reason_cd IS NOT NULL THEN
251              BEGIN
252                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'DISCONTINUATION_REASON_CD',
253                                                             column_value   => p_sca_re_rec.discontinuation_reason_cd);
254              EXCEPTION
255                 WHEN OTHERS THEN
256                         l_message_count := FND_MSG_PUB.COUNT_MSG;
257                         FND_MSG_PUB.DELETE_MSG(l_message_count);
258                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_DIS_REAS_INVALID');
259                         FND_MSG_PUB.ADD;
260                         l_error_flag  := 'Y';
261              END;
262      END IF;
263 
264      IF p_sca_re_rec.funding_source IS NOT NULL THEN
265              BEGIN
266                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'FUNDING_SOURCE',
267                                                             column_value   => p_sca_re_rec.funding_source);
268              EXCEPTION
269                 WHEN OTHERS THEN
270                         l_message_count := FND_MSG_PUB.COUNT_MSG;
271                         FND_MSG_PUB.DELETE_MSG(l_message_count);
272                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_FUND_UPPCASE');
273                         FND_MSG_PUB.ADD;
274                         l_error_flag  := 'Y';
275              END;
276      END IF;
277 
278      IF p_sca_re_rec.exam_location_cd IS NOT NULL THEN
279              BEGIN
280                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'EXAM_LOCATION_CD',
281                                                         column_value   => p_sca_re_rec.exam_location_cd);
282              EXCEPTION
283                 WHEN OTHERS THEN
284                         l_message_count := FND_MSG_PUB.COUNT_MSG;
285                         FND_MSG_PUB.DELETE_MSG(l_message_count);
286                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_EXM_LOC_UPPCASE');
287                         FND_MSG_PUB.ADD;
288                         l_error_flag  := 'Y';
289              END;
290      END IF;
291 
292      IF p_sca_re_rec.nominated_completion_yr IS NOT NULL THEN
293              BEGIN
294                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'NOMINATED_COMPLETION_YR',
295                                                             column_value   => igs_ge_number.to_cann(p_sca_re_rec.nominated_completion_yr));
296              EXCEPTION
297                 WHEN OTHERS THEN
298                         l_message_count := FND_MSG_PUB.COUNT_MSG;
299                         FND_MSG_PUB.DELETE_MSG(l_message_count);
300                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_NOM_YR_INVALID');
301                         FND_MSG_PUB.ADD;
302                         l_error_flag  := 'Y';
303              END;
304      END IF;
305 
306      IF p_sca_re_rec.nominated_completion_perd IS NOT NULL THEN
307              BEGIN
308                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'NOMINATED_COMPLETION_PERD',
309                                                             column_value   => p_sca_re_rec.nominated_completion_perd);
310              EXCEPTION
311                 WHEN OTHERS THEN
312                         l_message_count := FND_MSG_PUB.COUNT_MSG;
313                         FND_MSG_PUB.DELETE_MSG(l_message_count);
314                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_NOM_PER_UPPCASE');
315                         FND_MSG_PUB.ADD;
316                         l_error_flag  := 'Y';
317              END;
318      END IF;
319 
320      IF p_sca_re_rec.rule_check_ind IS NOT NULL THEN
321              BEGIN
322                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'RULE_CHECK_IND',
323                                                             column_value   => p_sca_re_rec.rule_check_ind);
324              EXCEPTION
325                 WHEN OTHERS THEN
326                         l_message_count := FND_MSG_PUB.COUNT_MSG;
327                         FND_MSG_PUB.DELETE_MSG(l_message_count);
328                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_RUL_IND_INVALID');
329                         FND_MSG_PUB.ADD;
330                         l_error_flag  := 'Y';
331              END;
332      END IF;
333 
334      IF p_sca_re_rec.waive_option_check_ind IS NOT NULL THEN
335              BEGIN
336                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'WAIVE_OPTION_CHECK_IND',
337                                                             column_value   => p_sca_re_rec.waive_option_check_ind);
338              EXCEPTION
339                 WHEN OTHERS THEN
340                         l_message_count := FND_MSG_PUB.COUNT_MSG;
341                         FND_MSG_PUB.DELETE_MSG(l_message_count);
342                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_WAV_IND_INVALID');
343                         FND_MSG_PUB.ADD;
344                         l_error_flag  := 'Y';
345              END;
346      END IF;
347 
348      IF p_sca_re_rec.publish_outcomes_ind IS NOT NULL THEN
349              BEGIN
350                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'PUBLISH_OUTCOMES_IND',
351                                                             column_value   => p_sca_re_rec.publish_outcomes_ind);
352              EXCEPTION
353                 WHEN OTHERS THEN
354                         l_message_count := FND_MSG_PUB.COUNT_MSG;
355                         FND_MSG_PUB.DELETE_MSG(l_message_count);
356                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_PUB_OUT_INVALID');
357                         FND_MSG_PUB.ADD;
358                         l_error_flag  := 'Y';
359              END;
360      END IF;
361 
362      IF p_sca_re_rec.course_rqrmnt_complete_ind IS NOT NULL THEN
363              BEGIN
364                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'COURSE_RQRMNT_COMPLETE_IND',
365                                                         column_value   => p_sca_re_rec.course_rqrmnt_complete_ind);
366              EXCEPTION
367                 WHEN OTHERS THEN
368                         l_message_count := FND_MSG_PUB.COUNT_MSG;
369                         FND_MSG_PUB.DELETE_MSG(l_message_count);
370                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_CRS_RQR_CMP_IND_INVALID');
371                         FND_MSG_PUB.ADD;
372                         l_error_flag  := 'Y';
373              END;
374      END IF;
375 
376      IF p_sca_re_rec.s_completed_source_type IS NOT NULL THEN
377              BEGIN
378                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'S_COMPLETED_SOURCE_TYPE',
379                                                         column_value   => p_sca_re_rec.s_completed_source_type);
380              EXCEPTION
381                 WHEN OTHERS THEN
382                         l_message_count := FND_MSG_PUB.COUNT_MSG;
383                         FND_MSG_PUB.DELETE_MSG(l_message_count);
384                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_SYS_COMP_INVALID');
385                         FND_MSG_PUB.ADD;
386                         l_error_flag  := 'Y';
387              END;
388      END IF;
389 
390      IF p_sca_re_rec.correspondence_cat IS NOT NULL THEN
391              BEGIN
392                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'CORRESPONDENCE_CAT',
393                                                         column_value   => p_sca_re_rec.correspondence_cat);
394              EXCEPTION
395                 WHEN OTHERS THEN
396                         l_message_count := FND_MSG_PUB.COUNT_MSG;
397                         FND_MSG_PUB.DELETE_MSG(l_message_count);
398                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_CORR_CAT_INALID');
399                         FND_MSG_PUB.ADD;
400                         l_error_flag  := 'Y';
401              END;
402      END IF;
403 
404      IF p_sca_re_rec.self_help_group_ind IS NOT NULL THEN
405              BEGIN
406                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'SELF_HELP_GROUP_IND',
407                                                             column_value   => p_sca_re_rec.self_help_group_ind);
408              EXCEPTION
409                 WHEN OTHERS THEN
410                         l_message_count := FND_MSG_PUB.COUNT_MSG;
411                         FND_MSG_PUB.DELETE_MSG(l_message_count);
412                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_HLP_GRP_IND_INVALID');
413                         FND_MSG_PUB.ADD;
414                         l_error_flag  := 'Y';
415              END;
416      END IF;
417 
418      IF p_sca_re_rec.adm_nominated_course_cd IS NOT NULL THEN
419              BEGIN
420                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'ADM_NOMINATED_COURSE_CD',
421                                                             column_value   => p_sca_re_rec.adm_nominated_course_cd);
422              EXCEPTION
423                 WHEN OTHERS THEN
424                         l_message_count := FND_MSG_PUB.COUNT_MSG;
425                         FND_MSG_PUB.DELETE_MSG(l_message_count);
426                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_ADM_NOM_PG_INVALID');
427                         FND_MSG_PUB.ADD;
428                         l_error_flag  := 'Y';
429              END;
430      END IF;
431 
432      IF p_sca_re_rec.manual_ovr_cmpl_dt_ind IS NOT NULL THEN
433              BEGIN
434                   igs_en_stdnt_ps_att_pkg.check_constraints(column_name    => 'MANUAL_OVR_CMPL_DT_IND',
435                                                             column_value   => p_sca_re_rec.manual_ovr_cmpl_dt_ind);
436              EXCEPTION
437                 WHEN OTHERS THEN
438                         l_message_count := FND_MSG_PUB.COUNT_MSG;
439                         FND_MSG_PUB.DELETE_MSG(l_message_count);
440                         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRG_MAN_OVR_IND_INVALID');
441                         FND_MSG_PUB.ADD;
442                         l_error_flag  := 'Y';
443              END;
444      END IF;
445 
446      IF p_sca_re_rec.re_attendance_percentage IS NOT NULL THEN
447              BEGIN
448                   igs_re_candidature_pkg.check_constraints(column_name    => 'ATTENDANCE_PERCENTAGE',
449                                                            column_value   => igs_ge_number.to_cann(p_sca_re_rec.re_attendance_percentage));
450              EXCEPTION
451                 WHEN OTHERS THEN
452                         l_message_count := FND_MSG_PUB.COUNT_MSG;
453                         FND_MSG_PUB.DELETE_MSG(l_message_count);
454                         FND_MESSAGE.SET_NAME('IGS','IGS_RE_ATT_PER_INVALID');
455                         FND_MSG_PUB.ADD;
456                         l_error_flag  := 'Y';
457              END;
458      END IF;
459 
460      IF p_sca_re_rec.re_govt_type_of_activity_cd IS NOT NULL THEN
461              BEGIN
462                   igs_re_candidature_pkg.check_constraints(column_name    => 'GOVT_TYPE_OF_ACTIVITY_CD',
463                                                            column_value   => p_sca_re_rec.re_govt_type_of_activity_cd);
464              EXCEPTION
465                 WHEN OTHERS THEN
466                         l_message_count := FND_MSG_PUB.COUNT_MSG;
467                         FND_MSG_PUB.DELETE_MSG(l_message_count);
468                         FND_MESSAGE.SET_NAME('IGS','IGS_RE_GOVT_CD_UPPCASE');
469                         FND_MSG_PUB.ADD;
470                         l_error_flag  := 'Y';
471              END;
472      END IF;
473 
474      IF l_error_flag  = 'Y' THEN
475         RETURN FALSE;
476      ELSE
477         RETURN TRUE;
478      END IF;
479 END validate_parameters;
480 
481 
482 FUNCTION validate_sca_db_cons(p_person_id          IN   IGS_PE_PERSON.PERSON_ID%TYPE,
483                               p_sca_re_rec         IN   SCA_RE_REC_TYPE)
484 RETURN VARCHAR2 AS
485 /*----------------------------------------------------------------------------
486 ||  Created By : kkillams
487 ||  Created On : 08-11-2002
488 ||  Purpose : Function validates student program attempt table constraints.
489 ||  Known limitations, enhancements or remarks :
490 ||  Change History :
491 ||  Who             When            What
492 ||  amuthu          07-JAN-03       Added the validation for Nominated Completion Period
493 ||                                  and correspondence category
494 ------------------------------------------------------------------------------*/
495 l_result_flag       VARCHAR2(1);
496 BEGIN  --validate_sca_db_cons
497 
498      l_result_flag := 'S';
499 
500      --Check whether student program attemt record is already exist in the database or not.
501      --If exist set the warning message and terminate the function
502      IF igs_en_stdnt_ps_att_pkg.get_pk_for_validation(x_person_id     =>p_person_id,
503                                                       x_course_cd     =>p_sca_re_rec.program_cd) THEN
504          FND_MESSAGE.SET_NAME('IGS','IGS_EN_PS_ATT_EXISTS');
505          FND_MSG_PUB.ADD;
506          RETURN 'P';
507      ELSE
508         --Check whether parent record is exist for the relative child record in student program attempt
509         IF ( (p_sca_re_rec.adm_admission_appl_number    IS  NOT NULL) OR
510              (p_sca_re_rec.adm_nominated_course_cd      IS  NOT NULL ) OR
511              (p_sca_re_rec.adm_sequence_number          IS  NOT NULL)) THEN
512                 IF NOT igs_ad_ps_appl_inst_pkg.get_pk_for_validation(x_person_id             => p_person_id,
513                                                                  x_admission_appl_number => p_sca_re_rec.adm_admission_appl_number,
514                                                                  x_nominated_course_cd   => p_sca_re_rec.adm_nominated_course_cd,
515                                                                  x_sequence_number       => p_sca_re_rec.adm_sequence_number) THEN
516                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_ADM_APP_DET_NOT_FOUND');
517                    FND_MSG_PUB.ADD;
518                    l_result_flag := 'E';
519                 END IF;
520         END IF;
521         IF p_sca_re_rec.discontinuation_reason_cd IS NOT NULL THEN
522                 IF NOT igs_en_dcnt_reasoncd_pkg.get_pk_for_validation(x_dcnt_reason_cd  => p_sca_re_rec.discontinuation_reason_cd) THEN
523                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_DCNT_REAS_NOT_FOUND');
524                    FND_MSG_PUB.ADD;
525                    l_result_flag := 'E';
526                 END IF;
527         END IF;
528         IF p_sca_re_rec.fee_cat IS NOT NULL THEN
529                 IF NOT igs_fi_fee_cat_pkg.get_pk_for_validation(x_fee_cat   => p_sca_re_rec.fee_cat) THEN
530                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_FEE_CAT_NOT_FOUND');
531                    FND_MSG_PUB.ADD;
532                    l_result_flag := 'E';
533                 END IF;
534         END IF;
535         IF p_sca_re_rec.funding_source IS NOT NULL THEN
536                 IF NOT igs_fi_fund_src_pkg.get_pk_for_validation(x_funding_source   => p_sca_re_rec.funding_source) THEN
537                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_FUND_SRC_NOT_FOUND');
538                    FND_MSG_PUB.ADD;
539                    l_result_flag := 'E';
540                 END IF;
541         END IF;
542         IF p_sca_re_rec.exam_location_cd IS NOT NULL THEN
543                 IF NOT igs_ad_location_pkg.get_pk_for_validation(x_location_cd   => p_sca_re_rec.exam_location_cd) THEN
544                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_EXAM_LOC_NOT_FOUND');
545                    FND_MSG_PUB.ADD;
546                    l_result_flag := 'E';
547                 END IF;
548         END IF;
549 
550         IF p_sca_re_rec.NOMINATED_COMPLETION_PERD IS NOT NULL THEN
551                 IF NOT igs_en_nom_cmpl_prd_pkg.get_pk_for_validation(x_completion_perd => p_sca_re_rec.NOMINATED_COMPLETION_PERD ) THEN
552                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_NOM_CMPL_PRD_NOT_FOUND');
553                    FND_MSG_PUB.ADD;
554                    l_result_flag := 'E';
555                 END IF;
556         END IF;
557 
558         IF p_sca_re_rec.CORRESPONDENCE_CAT IS NOT NULL THEN
559                 IF NOT  IGS_CO_CAT_PKG.get_pk_for_validation(x_correspondence_cat  => p_sca_re_rec.CORRESPONDENCE_CAT ) THEN
560                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_CO_CAT_NOT_FOUND');
561                    FND_MSG_PUB.ADD;
562                    l_result_flag := 'E';
563                 END IF;
564         END IF;
565 
566         IF p_sca_re_rec.primary_prog_type_source IS NOT NULL THEN
567                 IF NOT igs_lookups_view_pkg.get_pk_for_validation('IGS_EN_PP_SOURCE',p_sca_re_rec.primary_prog_type_source) THEN
568                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRI_PRG_TYP_NOT_FOUND');
569                    FND_MSG_PUB.ADD;
570                    l_result_flag := 'E';
571                 END IF;
572         END IF;
573         RETURN l_result_flag;
574      END IF;
575 END validate_sca_db_cons;
576 
577 FUNCTION validate_sca(p_person_id          IN igs_pe_person.person_id%TYPE,
578                       p_course_att_status  IN igs_en_stdnt_ps_att_all.course_attempt_status%TYPE,
579                       p_course_type        IN igs_ps_ver_all.course_type%TYPE,
580                       p_career_flag        IN VARCHAR2,
581                       p_sca_re_rec         IN SCA_RE_REC_TYPE)
582 RETURN BOOLEAN AS
583 /*----------------------------------------------------------------------------
584 ||  Created By : kkillams
585 ||  Created On : 08-11-2002
586 ||  Purpose : Function validates Student program attempt's business validations
587 ||  Known limitations, enhancements or remarks :
588 ||  Change History :
589 ||  Who             When            What
590 ||  kkillams        31-12-2002      Bypass the val_sca_primary_pg function call if
591 ||                                  program attempt status is UNCONFIRM w.r.t. bug 2721076
592 ------------------------------------------------------------------------------*/
593 l_validation_success         BOOLEAN;
594 l_message                    VARCHAR2(200);
595 l_boolean                    BOOLEAN;
596 l_start                      NUMBER(4);
597 l_end                        NUMBER(4);
598 BEGIN  --validate_sca
599      l_validation_success := TRUE;
600 
601      --Validates the person types for this student program attempt
602      IF NOT igs_en_gen_legacy.val_sca_per_type(p_person_id             => p_person_id,
603                                                p_course_cd             => p_sca_re_rec.program_cd,
604                                                p_course_attempt_status => p_course_att_status) THEN
605          l_validation_success := FALSE;
606      END IF;
607      IF NOT igs_en_gen_legacy.val_sca_start_dt(p_student_confirmed_ind => p_sca_re_rec.student_confirmed_ind,
608                                                p_commencement_dt       => p_sca_re_rec.commencement_dt) THEN
609          l_validation_success := FALSE;
610          FND_MESSAGE.SET_NAME('IGS','IGS_EN_SCA_COMM_DT_INVALID');
611          FND_MSG_PUB.ADD;
612      END IF;
613 
614      --Validates the discontinuation of student program attempt.
615      IF (p_sca_re_rec.discontinued_dt IS NOT NULL OR p_sca_re_rec.discontinuation_reason_cd IS NOT NULL) THEN
616              l_message := NULL;
617              l_boolean := NULL;
618              l_boolean:=igs_en_val_sca.enrp_val_sca_discont(p_person_id                  => p_person_id,
619                                                             p_course_cd                  => p_sca_re_rec.program_cd,
620                                                             p_version_number             => p_sca_re_rec.version_number,
621                                                             p_course_attempt_status      => p_course_att_status,
622                                                             p_discontinuation_reason_cd  => p_sca_re_rec.discontinuation_reason_cd,
623                                                             p_discontinued_dt            => p_sca_re_rec.discontinued_dt,
624                                                             p_commencement_dt            => p_sca_re_rec.commencement_dt,
625                                                             p_message_name               => l_message,
626                                                             p_legacy                     => 'Y');
627              IF l_message IS NOT NULL THEN
628                  l_validation_success := FALSE;
629              END IF;
630      END IF;
631 
632      --Validating the lapse date aganist program attempt status.
633      IF p_sca_re_rec.lapsed_dt IS NOT NULL THEN
634              l_message := NULL;
635              l_boolean := NULL;
636              l_boolean:=igs_en_val_sca.enrp_val_sca_lapse (p_course_attempt_status => p_course_att_status,
637                                                            p_lapse_dt              => p_sca_re_rec.lapsed_dt,
638                                                            p_message_name          => l_message,
639                                                            p_legacy                => 'Y');
640 
641              IF l_message IS NOT NULL THEN
642                  l_validation_success := FALSE;
643              END IF;
644      END IF;
645      IF p_sca_re_rec.discontinued_dt IS NOT NULL THEN
646              IF NOT igs_en_gen_legacy.val_sca_disc_date(p_discontinued_dt => p_sca_re_rec.discontinued_dt) THEN
647                  l_validation_success := FALSE;
648                  FND_MESSAGE.SET_NAME('IGS','IGS_EN_SCA_DISC_DT_NOT_FUTURE');
649                  FND_MSG_PUB.ADD;
650              END IF;
651      END IF;
652 
653      IF NOT igs_en_gen_legacy.val_sca_comp_flag(p_course_attempt_status       => p_course_att_status,
654                                                 p_course_rqrmnt_complete_ind  => p_sca_re_rec.course_rqrmnt_complete_ind) THEN
655          l_validation_success := FALSE;
656          FND_MESSAGE.SET_NAME('IGS','IGS_PR_CANNOT_SET_COMPL_IND');
657          FND_MSG_PUB.ADD;
658      END IF;
659 
660      --Validating the Discountinue date aganist Requirement completion indicatory.
661      IF p_sca_re_rec.discontinued_dt IS NOT NULL AND p_sca_re_rec.course_rqrmnt_complete_ind IS NOT NULL THEN
662              IF  p_sca_re_rec.course_rqrmnt_complete_ind ='Y' THEN
663                  l_validation_success := FALSE;
664                  FND_MESSAGE.SET_NAME('IGS','IGS_EN_ONLY_SPA_ST_ENROLLED');
665                  FND_MSG_PUB.ADD;
666              END IF;
667      END IF;
668 
669      --Validating requirement completion date aganist commencement date.
670      IF p_sca_re_rec.course_rqrmnts_complete_dt IS NOT NULL THEN
671              l_message := NULL;
672              l_boolean := NULL;
673              l_boolean:=igs_pr_val_sca.prgp_val_sca_cmpl_dt(p_person_id                  => p_person_id,
674                                                             p_course_cd                  => p_sca_re_rec.program_cd,
675                                                             p_commencement_dt            => p_sca_re_rec.commencement_dt,
676                                                             p_course_rqrmnts_complete_dt => p_sca_re_rec.course_rqrmnts_complete_dt,
677                                                             p_message_name               => l_message,
678                                                             p_legacy                     => 'Y');
679              IF l_message IS NOT NULL THEN
680                  l_validation_success := FALSE;
681                  IF INSTR(l_message,'*') = 0 THEN
682                     FND_MESSAGE.SET_NAME('IGS',l_message);
683                     FND_MSG_PUB.ADD;
684                  ELSE
685                     l_start := 1;
686                     LOOP
687                         l_end:= INSTR(l_message,'*',l_start);
688                         IF l_end = 0 THEN
689                              FND_MESSAGE.SET_NAME('IGS',SUBSTR(l_message,l_start,LENGTH(l_message)-l_start+1));
690                              FND_MSG_PUB.ADD;
691                              EXIT;
692                         ELSE
693                              FND_MESSAGE.SET_NAME('IGS',SUBSTR(l_message,l_start,l_end-l_start));
694                              FND_MSG_PUB.ADD;
695                         END IF;
696                         l_start :=l_end +1;
697                     END LOOP;
698                  END IF;
699              END IF;
700      END IF;
701 
702      l_message := NULL;
703      IF NOT igs_en_gen_legacy.val_sca_reqcmpl_dt(p_course_rqrmnt_comp_ind => p_sca_re_rec.course_rqrmnt_complete_ind,
704                                                  p_course_rqrmnts_comp_dt => p_sca_re_rec.course_rqrmnts_complete_dt,
705                                                  p_message_name           => l_message) THEN
706          l_validation_success := FALSE;
707          FND_MESSAGE.SET_NAME('IGS',l_message);
708          FND_MSG_PUB.ADD;
709      END IF;
710 
711      --In career mode, validating the primary program of the student program attempt.
712      IF (p_career_flag = 'Y') AND (p_course_att_status <> 'UNCONFIRM') THEN
713              IF NOT igs_en_gen_legacy.val_sca_primary_pg(p_person_id          =>p_person_id,
714                                                          p_primary_prog_type  =>p_sca_re_rec.primary_program_type,
715                                                          P_course_type        =>p_course_type) THEN
716                  l_validation_success := FALSE;
717              END IF;
718      END IF;
719      IF NOT igs_en_gen_legacy.val_sca_key_prg(p_person_id          => p_person_id,
720                                               p_course_cd          => p_sca_re_rec.program_cd,
721                                               p_key_program        => p_sca_re_rec.key_program,
722                                               p_primary_prg_type   => p_sca_re_rec.primary_program_type,
723                                               p_course_attempt_st  => p_course_att_status,
724                                               p_career_flag        => p_career_flag) THEN
725          l_validation_success := FALSE;
726      END IF;
727      RETURN l_validation_success;
728 END validate_sca;
729 
730 FUNCTION validate_re_db_cons(p_person_id          IN   IGS_PE_PERSON.PERSON_ID%TYPE,
731                              p_sca_re_rec         IN   SCA_RE_REC_TYPE)
732 RETURN VARCHAR2 AS
733 /*----------------------------------------------------------------------------
734 ||  Created By : kkillams
735 ||  Created On : 08-11-2002
736 ||  Purpose : Function validates Research candidature table constraints.
737 ||  Known limitations, enhancements or remarks :
738 ||  Change History :
739 ||  Who             When            What
740 ||  amuthu          07-JAN-03       Changed the message IGS_EN_DCNT_REAS_NOT_FOUND
741 ||                                  to IGS_RE_GOV_ACT_CD_NOT_FOUND govt activity
742 ||                                  code validation
743 ------------------------------------------------------------------------------*/
744 l_result_flag       VARCHAR2(1);
745 l_count            NUMBER(3);
746 BEGIN  --validate_re_db_cons
747       l_result_flag := 'S';
748        --Check whether research candidature record is already exist in the database or not.
749        --If exist set the warning message and terminate the function
750         BEGIN
751             igs_re_candidature_pkg.get_fk_igs_en_stdnt_ps_att(x_person_id     =>p_person_id,
752                                                               x_course_cd     =>p_sca_re_rec.program_cd);
753         EXCEPTION
754             WHEN OTHERS THEN
755                     l_count :=FND_MSG_PUB.COUNT_MSG;
756                     FND_MSG_PUB.DELETE_MSG(l_count);
757                     FND_MESSAGE.SET_NAME('IGS','IGS_RE_CAND_EXIST');
758                     FND_MSG_PUB.ADD;
759                     RETURN 'P';
760         END;
761         --Check whether parent record is exist for the relative child record in student program attempt
762         IF ( (p_sca_re_rec.adm_admission_appl_number    IS  NOT NULL) OR
763              (p_sca_re_rec.adm_nominated_course_cd      IS  NOT NULL ) OR
764              (p_sca_re_rec.adm_sequence_number          IS  NOT NULL)) THEN
765                 IF NOT igs_ad_ps_appl_inst_pkg.get_pk_for_validation(x_person_id             => p_person_id,
766                                                                  x_admission_appl_number => p_sca_re_rec.adm_admission_appl_number,
767                                                                  x_nominated_course_cd   => p_sca_re_rec.adm_nominated_course_cd,
768                                                                  x_sequence_number       => p_sca_re_rec.adm_sequence_number) THEN
769                    FND_MESSAGE.SET_NAME('IGS','IGS_EN_ADM_APP_DET_NOT_FOUND');
770                    FND_MSG_PUB.ADD;
771                    l_result_flag := 'E';
772                 END IF;
773         END IF;
774         IF p_sca_re_rec.re_govt_type_of_activity_cd IS NOT NULL THEN
775                 IF NOT igs_re_gv_toa_cls_cd_pkg.get_pk_for_validation(x_govt_toa_class_cd      => p_sca_re_rec.re_govt_type_of_activity_cd) THEN
776                    FND_MESSAGE.SET_NAME('IGS','IGS_RE_GOV_ACT_CD_NOT_FOUND');
777                    FND_MSG_PUB.ADD;
778                    l_result_flag := 'E';
779                 END IF;
780         END IF;
781         RETURN l_result_flag;
782 END validate_re_db_cons;
783 FUNCTION validate_re (p_person_id          IN igs_pe_person.person_id%TYPE,
784                       p_sca_re_rec         IN SCA_RE_REC_TYPE)
785 RETURN BOOLEAN AS
786 /*----------------------------------------------------------------------------
787 ||  Created By : kkillams
788 ||  Created On : 08-11-2002
789 ||  Purpose : Function validates research candidature business validations
790 ||  Known limitations, enhancements or remarks :
791 ||  Change History :
792 ||  Who             When            What
793 ------------------------------------------------------------------------------*/
794 l_validation_success         BOOLEAN;
795 l_message_name               VARCHAR2(100);
796 l_boolean                    BOOLEAN;
797 BEGIN --validate_re
798 
799      l_validation_success := TRUE;
800 
801      l_message_name := NULL;
802      l_boolean:= NULL;
803      l_boolean := igs_re_val_ca.resp_val_ca_minsbmsn(p_person_id                  => p_person_id,
804                                                      p_sca_course_cd              => p_sca_re_rec.program_cd,
805                                                      p_acai_admission_appl_number => p_sca_re_rec.adm_admission_appl_number,
806                                                      p_acai_nominated_course_cd   => p_sca_re_rec.adm_nominated_course_cd,
807                                                      p_acai_sequence_number       => p_sca_re_rec.adm_sequence_number,
808                                                      p_min_submission_dt          => p_sca_re_rec.re_min_submission_dt,
809                                                      p_max_submission_dt          => p_sca_re_rec.re_max_submission_dt,
810                                                      p_attendance_percentage      => p_sca_re_rec.re_attendance_percentage,
811                                                      p_commencement_dt            => NULL,
812                                                      p_message_name               => l_message_name,
813                                                      p_legacy                     => 'Y');
814      IF l_message_name IS NOT NULL THEN
815         l_validation_success := FALSE;
816      END IF;
817 
818      l_message_name := NULL;
819      l_boolean:= NULL;
820      l_boolean := igs_re_val_ca.resp_val_ca_maxsbmsn(p_person_id                  => p_person_id,
821                                                      p_sca_course_cd              => p_sca_re_rec.program_cd,
822                                                      p_acai_admission_appl_number => p_sca_re_rec.adm_admission_appl_number,
823                                                      p_acai_nominated_course_cd   => p_sca_re_rec.adm_nominated_course_cd,
824                                                      p_acai_sequence_number       => p_sca_re_rec.adm_sequence_number,
825                                                      p_min_submission_dt          => p_sca_re_rec.re_min_submission_dt,
826                                                      p_max_submission_dt          => p_sca_re_rec.re_max_submission_dt,
827                                                      p_attendance_percentage      => p_sca_re_rec.re_attendance_percentage,
828                                                      p_commencement_dt            => NULL,
829                                                      p_message_name               => l_message_name,
830                                                      p_legacy                     => 'Y');
831      IF l_message_name IS NOT NULL THEN
832         l_validation_success := FALSE;
833      END IF;
834 
835      l_message_name := NULL;
836      l_boolean:= NULL;
837      l_boolean := igs_re_val_ca.resp_val_ca_topic (p_person_id                  => p_person_id,
838                                                    p_sca_course_cd              => p_sca_re_rec.program_cd,
839                                                    p_acai_admission_appl_number => p_sca_re_rec.adm_admission_appl_number,
840                                                    p_acai_nominated_course_cd   => p_sca_re_rec.adm_nominated_course_cd,
841                                                    p_acai_sequence_number       => p_sca_re_rec.adm_sequence_number,
842                                                    p_research_topic             => p_sca_re_rec.re_research_topic,
843                                                    p_message_name               => l_message_name,
844                                                    p_legacy                     => 'Y');
845      IF l_message_name IS NOT NULL THEN
846         l_validation_success := FALSE;
847      END IF;
848 
849      RETURN l_validation_success;
850 END validate_re;
851 
852 PROCEDURE create_spa(
853                       p_api_version        IN          NUMBER,
854                       p_init_msg_list      IN          VARCHAR2,
855                       p_commit             IN          VARCHAR2,
856                       p_validation_level   IN          NUMBER,
857                       p_sca_re_rec         IN          SCA_RE_REC_TYPE,
858                       x_return_status      OUT NOCOPY  VARCHAR2,
859                       x_msg_count          OUT NOCOPY  NUMBER,
860                       x_msg_data           OUT NOCOPY  VARCHAR2) AS
861 /*----------------------------------------------------------------------------
862 ||  Created By : kkillams
863 ||  Created On : 08-11-2002
864 ||  Purpose :
865 ||  Known limitations, enhancements or remarks :
866 ||  Change History :
867 ||  Who             When            What
868 ||  kkillams        13-12-2002      Added if clause to check catalog_cal_alternate_code value
869 ||                                  before calling the igs_ge_gen_003.get_calendar_instance procedure
870 ||                                  w.r.t. bug 2708628.
871 ||  kkillams        19-12-2002      Added new validation before processing the candidature record,
872 ||                                  which checks the context program is a research program or not and
873 ||                                  any research interface columns having values or not w.r.t. bug 2715207.
874 ||  kkillams        27-12-2002      Modified default setting of KEY PROGRAM attribute,
875 ||                                  if key program is null then set the key program to 'N'
876 ||                                  w.r.t. bug no: 2708532.
877 || bdeviset         16-DEC-2004     Passing the value of future dated transfer flag as 'N' when
878 ||                                  the IGS_EN_STDNT_PS_ATT.INSERT_ROW is called.Bug# 4071165
879 ------------------------------------------------------------------------------*/
880 
881 l_api_name                CONSTANT    VARCHAR2(30) := 'create_spa';
882 l_api_version             CONSTANT    NUMBER       := 1.0;
883 
884 --Cursor to get the research details for a program type
885 CURSOR cur_re_prg(p_prg_type igs_ps_type.course_type%TYPE) IS
886 SELECT research_type_ind FROM igs_ps_type
887                          WHERE course_type = p_prg_type;
888 --Cursor is to get the sequence number for the candidature.
889 CURSOR cur_re_seq IS SELECT igs_re_candidature_seq_num_s.NEXTVAL FROM DUAL;
890 
891 --local variables for flags
892 l_err_derive_flag         VARCHAR2(1);
893 l_execution_flag1         VARCHAR2(1);
894 l_execution_flag2         VARCHAR2(1);
895 l_err_flag                VARCHAR2(1);
896 
897 --local variable to hold derived values.
898 l_career_flag             VARCHAR2(1);
899 l_person_id               igs_pe_person.person_id%TYPE;
900 l_course_type             igs_ps_ver_all.course_type%TYPE;
901 l_coo_id                  igs_ps_ofr_opt_all.coo_id%TYPE;
902 l_course_att_status       igs_en_stdnt_ps_att_all.course_attempt_status%TYPE;
903 l_igs_pr_class_std_id     igs_en_stdnt_ps_att_all.igs_pr_class_std_id%TYPE;
904 l_catalog_cal_type        igs_en_stdnt_ps_att_all.catalog_cal_type%TYPE;
905 l_catalog_seq_num         igs_en_stdnt_ps_att_all.catalog_seq_num%TYPE;
906 l_dropped_by              igs_en_stdnt_ps_att_all.dropped_by%TYPE;
907 l_catalog_start_dt        DATE;
908 l_catalog_end_dt          DATE;
909 l_sequence_number         igs_re_candidature_all.sequence_number%TYPE;
910 l_status                  VARCHAR2(20);
911 l_sca_re_rec              SCA_RE_REC_TYPE;
912 l_request_id              igs_en_stdnt_ps_att_all.request_id%TYPE;
913 l_program_id              igs_en_stdnt_ps_att_all.program_id%TYPE;
914 l_program_application_id  igs_en_stdnt_ps_att_all.program_application_id%TYPE;
915 l_program_update_date     igs_en_stdnt_ps_att_all.program_update_date%TYPE;
916 l_research_type_ind       igs_ps_type.research_type_ind%TYPE;
917 
918 BEGIN  --Begin of create_spa
919 
920     --Save point for whole procedure.
921     SAVEPOINT create_spa;
922 
923     -- Check for the Compatible API call
924     IF NOT FND_API.COMPATIBLE_API_CALL(  l_api_version,
925                                          p_api_version,
926                                          l_api_name,
927                                          g_pkg_name) THEN
928 
929       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
930     END IF;
931 
932     -- If the calling program has passed the parameter for initializing the message list
933     IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
934       FND_MSG_PUB.Initialize;
935     END IF;
936 
937      --Assign the parameter record type to local record type.
938      l_sca_re_rec  := p_sca_re_rec;
939 
940      -- Set the return status to success
941      x_return_status := FND_API.G_RET_STS_SUCCESS;
942 
943      --Derive the concurrent program who column values.
944      l_request_id := fnd_global.conc_request_id;
945      l_program_id := fnd_global.conc_program_id;
946      l_program_application_id := fnd_global.prog_appl_id;
947      IF (l_request_id = -1) THEN
948         l_request_id := NULL;
949         l_program_id := NULL;
950         l_program_application_id := NULL;
951         l_program_update_date := NULL;
952      ELSE
953         l_PROGRAM_UPDATE_DATE := SYSDATE;
954      END IF;
955 
956      --Set the default values if no value is passed.
957      IF  l_sca_re_rec.student_confirmed_ind IS NULL THEN
958           l_sca_re_rec.student_confirmed_ind := 'Y';
959      END IF;
960      IF  l_sca_re_rec.key_program IS NULL THEN
961          l_sca_re_rec.key_program:='N';
962      END IF;
963      IF  l_sca_re_rec.provisional_ind IS NULL THEN
964          l_sca_re_rec.provisional_ind:='N';
965      END IF;
966      IF  l_sca_re_rec.rule_check_ind IS NULL THEN
967          l_sca_re_rec.rule_check_ind:='Y';
968      END IF;
969      IF  l_sca_re_rec.waive_option_check_ind IS NULL THEN
970          l_sca_re_rec.waive_option_check_ind := 'N';
971      END IF;
972      IF  l_sca_re_rec.publish_outcomes_ind IS NULL THEN
973          l_sca_re_rec.publish_outcomes_ind:= 'Y';
974      END IF;
975      IF  l_sca_re_rec.course_rqrmnt_complete_ind IS NULL THEN
976          l_sca_re_rec.course_rqrmnt_complete_ind:= 'N';
977      END IF;
978      IF  l_sca_re_rec.advanced_standing_ind IS NULL THEN
979          l_sca_re_rec.advanced_standing_ind:= 'N';
980      END IF;
981      IF  l_sca_re_rec.self_help_group_ind IS NULL THEN
982          l_sca_re_rec.self_help_group_ind := 'N';
983      END IF;
984      IF  l_sca_re_rec.manual_ovr_cmpl_dt_ind IS NULL THEN
985          l_sca_re_rec.manual_ovr_cmpl_dt_ind:= 'N';
986      END IF;
987 
988      --Check career model flag is checked or not.
989      l_career_flag:= NVL(fnd_profile.value('CAREER_MODEL_ENABLED'),'N');
990 
991      --Set the error flag.
992      l_err_flag := 'N';
993 
994      --Validate parameter function is to validate the function input parameters.
995      IF NOT validate_parameters(l_sca_re_rec,l_career_flag) THEN
996         l_err_flag := 'Y';
997      END IF;
998 
999 
1000      IF l_err_flag <> 'Y' THEN
1001          ---Derive the required values, to do futher validations.
1002          --deriving the person identifier value.
1003          l_person_id :=igs_ge_gen_003.get_person_id(l_sca_re_rec.person_number);
1004          IF l_person_id IS NULL THEN
1005             FND_MESSAGE.SET_NAME('IGS','IGS_GE_INVALID_PERSON_NUMBER');
1006             FND_MSG_PUB.ADD;
1007             l_err_flag := 'Y';
1008          END IF;
1009 
1010          --deriving the course type.
1011          l_course_type:=igs_en_gen_legacy.get_sca_prog_type(l_sca_re_rec.program_cd,l_sca_re_rec.version_number);
1012          IF l_course_type IS NULL THEN
1013             FND_MESSAGE.SET_NAME('IGS','IGS_EN_PROG_TYPE_NOT_FOUND');
1014             FND_MSG_PUB.ADD;
1015             l_err_flag := 'Y';
1016          END IF;
1017 
1018          --deriving the program offering option identifier.
1019          l_coo_id:=igs_en_gen_legacy.get_coo_id(p_course_cd       =>l_sca_re_rec.program_cd,
1020                                                 p_version_number  =>l_sca_re_rec.version_number,
1021                                                 p_cal_type        =>l_sca_re_rec.cal_type,
1022                                                 p_location_cd     =>l_sca_re_rec.location_cd,
1023                                                 p_attendance_mode =>l_sca_re_rec.attendance_mode,
1024                                                 p_attendance_type =>l_sca_re_rec.attendance_type);
1025          IF l_coo_id IS NULL THEN
1026             FND_MESSAGE.SET_NAME('IGS','IGS_EN_PS_OFR_OPT_NOT_FOUND');
1027             FND_MSG_PUB.ADD;
1028             l_err_flag := 'Y';
1029          END IF;
1030 
1031          --deriving the program attempt status for the current student program attempt.
1032          l_course_att_status:=igs_en_gen_legacy.get_course_att_status(p_person_id                     =>l_person_id,
1033                                                                       p_course_cd                     =>l_sca_re_rec.program_cd,
1034                                                                       p_student_confirmed_ind         =>l_sca_re_rec.student_confirmed_ind,
1035                                                                       p_discontinued_dt               =>l_sca_re_rec.discontinued_dt,
1036                                                                       p_lapsed_dt                     =>l_sca_re_rec.lapsed_dt,
1037                                                                       p_course_rqrmnt_complete_ind    =>l_sca_re_rec.course_rqrmnt_complete_ind,
1038                                                                       p_primary_pg_type               =>l_sca_re_rec.primary_program_type,
1039                                                                       p_primary_prog_type_source      =>l_sca_re_rec.primary_prog_type_source,
1040                                                                       p_course_type                   =>l_course_type,
1041                                                                       p_career_flag                   =>l_career_flag);
1042          IF l_course_att_status IS NULL THEN
1043             FND_MESSAGE.SET_NAME('IGS','IGS_EN_COURSE_ATT_NOT_FOUND');
1044             FND_MSG_PUB.ADD;
1045             l_err_flag := 'Y';
1046          END IF;
1047          --deriving the class standing identifier.
1048          IF l_sca_re_rec.class_standing_override IS NOT NULL THEN
1049                  l_igs_pr_class_std_id:=igs_en_gen_legacy.get_class_std_id(p_class_standing        =>l_sca_re_rec.class_standing_override );
1050                  IF l_igs_pr_class_std_id IS NULL THEN
1051                     FND_MESSAGE.SET_NAME('IGS','IGS_EN_CLASS_STD_ID_NOT_FOUND');
1052                      FND_MSG_PUB.ADD;
1053                     l_err_flag := 'Y';
1054                  END IF;
1055          END IF;
1056 
1057          --deriving the staff person to populate the dropped column.
1058          l_dropped_by:=igs_en_gen_legacy.get_sca_dropped_by();
1059          IF l_dropped_by IS NULL THEN
1060             FND_MESSAGE.SET_NAME('IGS','IGS_EN_DROPPED_BY_NOT_FOUND');
1061             FND_MSG_PUB.ADD;
1062          END IF;
1063          IF l_sca_re_rec.catalog_cal_alternate_code IS NOT NULL THEN
1064                  --deriving the catalog calendar details for a given catalog alternate code.
1065                  igs_ge_gen_003.get_calendar_instance(p_alternate_cd        =>l_sca_re_rec.catalog_cal_alternate_code,
1066                                                       p_s_cal_category      =>'''LOAD'',''ACADEMIC''',
1067                                                       p_cal_type            =>l_catalog_cal_type,
1068                                                       p_ci_sequence_number  =>l_catalog_seq_num,
1069                                                       p_start_dt            =>l_catalog_start_dt,
1070                                                       p_end_dt              =>l_catalog_end_dt,
1071                                                       p_return_status       =>l_status);
1072                  IF l_status = 'MULTIPLE' THEN
1073                     FND_MESSAGE.SET_NAME('IGS','IGS_EN_MORE_CAL_FOUND');
1074                     FND_MSG_PUB.ADD;
1075                     l_err_flag := 'Y';
1076                  ELSIF l_status = 'INVALID' THEN
1077                     FND_MESSAGE.SET_NAME('IGS','IGS_EN_NO_ACAD_TERM_CAL');
1078                     FND_MSG_PUB.ADD;
1079                     l_err_flag := 'Y';
1080                 END IF;
1081          END IF;
1082      END IF; --l_err_flag
1083 
1084      --If no error found in the above validation then only do further validation else terminate process.
1085      IF l_err_flag <> 'Y' THEN
1086              l_execution_flag1 := NULL;
1087              l_execution_flag2 := NULL;
1088              --Validates the student program attempt database constarits.
1089              --Function will returns S,E,P
1090              l_execution_flag1:=validate_sca_db_cons (p_person_id      => l_person_id,
1091                                                       p_sca_re_rec     => l_sca_re_rec);
1092              --If all validation passed then call the validate_sca which will validates the all business rules
1093              IF l_execution_flag1 = 'S' THEN
1094                 IF NOT validate_sca(p_person_id         => l_person_id,
1095                                     p_course_att_status => l_course_att_status,
1096                                     p_course_type       => l_course_type,
1097                                     p_career_flag       => l_career_flag,
1098                                     p_sca_re_rec        => l_sca_re_rec) THEN
1099                    l_execution_flag1 := 'E';
1100                 END IF;
1101              END IF;
1102 
1103              --Inserting the Student program attempt
1104              IF l_execution_flag1 ='S' THEN
1105               --Note:Following columns are not populating as they are obsoleted in the data model
1106               --     derived_att_mode, derived_att_type, logical_delete_dt, derived_completion_yr,
1107               --     derived_completiod_perd, override_time_limitation
1108               --     progression_status and last_date_of_attendance column would be derived while improting the unit atttempt details.
1109                  INSERT INTO igs_en_stdnt_ps_att_all(
1110                                                      person_id,
1111                                                      course_cd,
1112                                                      version_number,
1113                                                      cal_type,
1114                                                      location_cd,
1115                                                      attendance_mode,
1116                                                      attendance_type,
1117                                                      coo_id,
1118                                                      student_confirmed_ind,
1119                                                      commencement_dt,
1120                                                      course_attempt_status,
1121                                                      progression_status,
1122                                                      derived_att_type,
1123                                                      derived_att_mode,
1124                                                      provisional_ind,
1125                                                      discontinued_dt,
1126                                                      discontinuation_reason_cd,
1127                                                      lapsed_dt,
1128                                                      funding_source,
1129                                                      exam_location_cd,
1130                                                      derived_completion_yr,
1131                                                      derived_completion_perd,
1132                                                      nominated_completion_yr,
1133                                                      nominated_completion_perd,
1134                                                      rule_check_ind,
1135                                                      waive_option_check_ind,
1136                                                      last_rule_check_dt,
1137                                                      publish_outcomes_ind,
1138                                                      course_rqrmnt_complete_ind,
1139                                                      course_rqrmnts_complete_dt,
1140                                                      s_completed_source_type,
1141                                                      override_time_limitation,
1142                                                      advanced_standing_ind,
1143                                                      fee_cat,
1144                                                      correspondence_cat,
1145                                                      self_help_group_ind,
1146                                                      logical_delete_dt,
1147                                                      adm_admission_appl_number,
1148                                                      adm_nominated_course_cd,
1149                                                      adm_sequence_number,
1150                                                      igs_pr_class_std_id,
1151                                                      last_date_of_attendance,
1152                                                      dropped_by,
1153                                                      primary_program_type,
1154                                                      primary_prog_type_source,
1155                                                      catalog_cal_type,
1156                                                      catalog_seq_num,
1157                                                      key_program,
1158                                                      override_cmpl_dt,
1159                                                      manual_ovr_cmpl_dt_ind,
1160                                                      attribute_category,
1161                                                      attribute1,
1162                                                      attribute2,
1163                                                      attribute3,
1164                                                      attribute4,
1165                                                      attribute5,
1166                                                      attribute6,
1167                                                      attribute7,
1168                                                      attribute8,
1169                                                      attribute9,
1170                                                      attribute10,
1171                                                      attribute11,
1172                                                      attribute12,
1173                                                      attribute13,
1174                                                      attribute14,
1175                                                      attribute15,
1176                                                      attribute16,
1177                                                      attribute17,
1178                                                      attribute18,
1179                                                      attribute19,
1180                                                      attribute20,
1181                                                      created_by,
1182                                                      creation_date,
1183                                                      last_updated_by,
1184                                                      last_update_date,
1185                                                      last_update_login,
1186                                                      request_id,
1187                                                      program_application_id,
1188                                                      program_id,
1189                                                      program_update_date,
1190                                                      org_id,
1191                                                      future_dated_trans_flag)
1192                                                      VALUES (        l_person_id,
1193                                                                      l_sca_re_rec.program_cd,
1194                                                                      l_sca_re_rec.version_number,
1195                                                                      l_sca_re_rec.cal_type,
1196                                                                      l_sca_re_rec.location_cd,
1197                                                                      l_sca_re_rec.attendance_mode,
1198                                                                      l_sca_re_rec.attendance_type,
1199                                                                      l_coo_id,
1200                                                                      l_sca_re_rec.student_confirmed_ind,
1201                                                                      l_sca_re_rec.commencement_dt,
1202                                                                      l_course_att_status,
1203                                                                      NULL,
1204                                                                      NULL,
1205                                                                      NULL,
1206                                                                      l_sca_re_rec.provisional_ind,
1207                                                                      l_sca_re_rec.discontinued_dt,
1208                                                                      l_sca_re_rec.discontinuation_reason_cd,
1209                                                                      l_sca_re_rec.lapsed_dt,
1210                                                                      l_sca_re_rec.funding_source,
1211                                                                      l_sca_re_rec.exam_location_cd,
1212                                                                      NULL,
1213                                                                      NULL,
1214                                                                      l_sca_re_rec.nominated_completion_yr,
1215                                                                      l_sca_re_rec.nominated_completion_perd,
1216                                                                      l_sca_re_rec.rule_check_ind,
1217                                                                      l_sca_re_rec.waive_option_check_ind,
1218                                                                      l_sca_re_rec.last_rule_check_dt,
1219                                                                      l_sca_re_rec.publish_outcomes_ind,
1220                                                                      l_sca_re_rec.course_rqrmnt_complete_ind,
1221                                                                      l_sca_re_rec.course_rqrmnts_complete_dt,
1222                                                                      l_sca_re_rec.s_completed_source_type,
1223                                                                      NULL,
1224                                                                      l_sca_re_rec.advanced_standing_ind,
1225                                                                      l_sca_re_rec.fee_cat,
1226                                                                      l_sca_re_rec.correspondence_cat,
1227                                                                      l_sca_re_rec.self_help_group_ind,
1228                                                                      NULL,
1229                                                                      l_sca_re_rec.adm_admission_appl_number,
1230                                                                      l_sca_re_rec.adm_nominated_course_cd,
1231                                                                      l_sca_re_rec.adm_sequence_number,
1232                                                                      l_igs_pr_class_std_id,
1233                                                                      NULL,
1234                                                                      l_dropped_by,
1235                                                                      l_sca_re_rec.primary_program_type,
1236                                                                      l_sca_re_rec.primary_prog_type_source,
1237                                                                      l_catalog_cal_type,
1238                                                                      l_catalog_seq_num,
1239                                                                      l_sca_re_rec.key_program,
1240                                                                      l_sca_re_rec.override_cmpl_dt,
1241                                                                      l_sca_re_rec.manual_ovr_cmpl_dt_ind,
1242                                                                      l_sca_re_rec.attribute_category,
1243                                                                      l_sca_re_rec.attribute1,
1244                                                                      l_sca_re_rec.attribute2,
1245                                                                      l_sca_re_rec.attribute3,
1246                                                                      l_sca_re_rec.attribute4,
1247                                                                      l_sca_re_rec.attribute5,
1248                                                                      l_sca_re_rec.attribute6,
1249                                                                      l_sca_re_rec.attribute7,
1250                                                                      l_sca_re_rec.attribute8,
1251                                                                      l_sca_re_rec.attribute9,
1252                                                                      l_sca_re_rec.attribute10,
1253                                                                      l_sca_re_rec.attribute11,
1254                                                                      l_sca_re_rec.attribute12,
1255                                                                      l_sca_re_rec.attribute13,
1256                                                                      l_sca_re_rec.attribute14,
1257                                                                      l_sca_re_rec.attribute15,
1258                                                                      l_sca_re_rec.attribute16,
1259                                                                      l_sca_re_rec.attribute17,
1260                                                                      l_sca_re_rec.attribute18,
1261                                                                      l_sca_re_rec.attribute19,
1262                                                                      l_sca_re_rec.attribute20,
1263                                                                      NVL(FND_GLOBAL.USER_ID,-1),
1264                                                                      SYSDATE,
1265                                                                      NVL(FND_GLOBAL.USER_ID,-1),
1266                                                                      SYSDATE,
1267                                                                      NVL(FND_GLOBAL.LOGIN_ID,-1),
1268                                                                      l_request_id,
1269                                                                      l_program_application_id,
1270                                                                      l_program_id,
1271                                                                      l_program_update_date,
1272                                                                      igs_ge_gen_003.get_org_id,
1273                                                                      'N');
1274              END IF;  ---l_execution_flag1 ='S'
1275              --Check the context program is type research candidature.
1276              l_research_type_ind := 'N';
1277              OPEN cur_re_prg(l_course_type);
1278              FETCH cur_re_prg INTO l_research_type_ind;
1279              CLOSE cur_re_prg;
1280 
1281              IF l_execution_flag1 IN ('S','P') AND
1282                 ((l_sca_re_rec.re_attendance_percentage IS NOT NULL) OR (l_sca_re_rec.re_govt_type_of_activity_cd IS NOT NULL) OR
1283                   (l_sca_re_rec.re_max_submission_dt IS NOT NULL) OR (l_sca_re_rec.re_min_submission_dt IS NOT NULL) OR
1284                   (l_sca_re_rec.re_research_topic IS NOT NULL) OR (l_sca_re_rec.re_industry_links IS NOT NULL) OR (l_research_type_ind = 'Y')
1285                  ) THEN
1286                      --Validates the student program attempt database constarits.
1287                      l_execution_flag2:=validate_re_db_cons (p_person_id      => l_person_id,
1288                                                              p_sca_re_rec     => l_sca_re_rec);
1289                      IF l_execution_flag2 = 'S' THEN
1290                         IF NOT validate_re(p_person_id         => l_person_id,
1291                                            p_sca_re_rec        => l_sca_re_rec) THEN
1292                            l_execution_flag2 := 'E';
1293                         END IF;
1294                      END IF; --l_execution_flag2 ='S'
1295                      --Inserting the Research Candidature.
1296                      IF l_execution_flag2 ='S' THEN
1297                         --Get the sequence number for research candidature.
1298                         l_sequence_number:= NULL;
1299                         OPEN cur_re_seq;
1300                         FETCH cur_re_seq INTO l_sequence_number;
1301                         CLOSE cur_re_seq;
1302                         INSERT INTO igs_re_candidature_all(person_id,
1303                                                            sequence_number,
1304                                                            sca_course_cd,
1305                                                            acai_admission_appl_number,
1306                                                            acai_nominated_course_cd,
1307                                                            acai_sequence_number,
1308                                                            attendance_percentage,
1309                                                            govt_type_of_activity_cd,
1310                                                            max_submission_dt,
1311                                                            min_submission_dt,
1312                                                            research_topic,
1313                                                            industry_links,
1314                                                            created_by,
1315                                                            creation_date,
1316                                                            last_updated_by,
1317                                                            last_update_date,
1318                                                            last_update_login,
1319                                                            request_id,
1320                                                            program_application_id,
1321                                                            program_id,
1322                                                            program_update_date,
1323                                                            org_id) VALUES(
1324                                                                           l_person_id,
1325                                                                           l_sequence_number,
1326                                                                           l_sca_re_rec.program_cd,
1327                                                                           l_sca_re_rec.adm_admission_appl_number,
1328                                                                           l_sca_re_rec.adm_nominated_course_cd,
1329                                                                           l_sca_re_rec.adm_sequence_number,
1330                                                                           l_sca_re_rec.re_attendance_percentage,
1331                                                                           l_sca_re_rec.re_govt_type_of_activity_cd,
1332                                                                           l_sca_re_rec.re_max_submission_dt,
1333                                                                           l_sca_re_rec.re_min_submission_dt,
1334                                                                           l_sca_re_rec.re_research_topic,
1335                                                                           l_sca_re_rec.re_industry_links,
1336                                                                           NVL(FND_GLOBAL.USER_ID,-1),
1337                                                                           SYSDATE,
1338                                                                           NVL(FND_GLOBAL.USER_ID,-1),
1339                                                                           SYSDATE,
1340                                                                           NVL(FND_GLOBAL.LOGIN_ID,-1),
1341                                                                           l_request_id,
1342                                                                           l_program_application_id,
1343                                                                           l_program_id,
1344                                                                           l_program_update_date,
1345                                                                           igs_ge_gen_003.get_org_id);
1346                 END IF; --l_execution_flag2 ='S'
1347              END IF;  --l_execution_flag1 IN ('S','P')
1348      END IF;  ---l_err_flag <> 'Y'
1349      IF ((l_err_flag ='Y') OR
1350            (l_execution_flag1 ='E') OR
1351            (l_execution_flag2 ='E')) THEN
1352            ROLLBACK TO create_spa;
1353            x_return_status := FND_API.G_RET_STS_ERROR;
1354      ELSIF ((l_execution_flag1 = 'P') AND (l_execution_flag2 IS NULL)) OR
1355            ((l_execution_flag1 = 'P') AND (l_execution_flag2 ='P')) THEN
1356               x_return_status := 'W';
1357      ELSE
1358            IF FND_API.TO_BOOLEAN(p_commit) THEN
1359                     COMMIT WORK;
1360            END IF;
1361            x_return_status := FND_API.G_RET_STS_SUCCESS;
1362      END IF;
1363      FND_MSG_PUB.COUNT_AND_GET( p_count   => x_msg_count,
1364                                 p_data    => x_msg_data);
1365   EXCEPTION
1366         WHEN FND_API.G_EXC_ERROR THEN
1367           ROLLBACK TO create_spa;
1368           x_return_status := FND_API.G_RET_STS_ERROR;
1369           FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
1370                                      p_data           => x_msg_data);
1371         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1372           ROLLBACK TO create_spa;
1373           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1374           FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
1375                                      p_data           => x_msg_data);
1376         WHEN OTHERS THEN
1377           ROLLBACK TO create_spa;
1378           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1379           IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1380            FND_MSG_PUB.ADD_Exc_Msg(g_pkg_name,
1381                                     l_api_name);
1382           END IF;
1383           FND_MSG_PUB.Count_And_Get( p_count          => x_msg_count,
1384                                      p_data           => x_msg_data);
1385 END create_spa;
1386 END igs_en_spa_lgcy_pub;