DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_HE_SPA_LGCY_PUB

Source


1 PACKAGE BODY IGS_HE_SPA_LGCY_PUB AS
2 /* $Header: IGSHE22B.pls 120.1 2006/02/07 14:53:56 jbaber noship $ */
3 
4 -- capture the package name in global variable
5 g_pkg_name        CONSTANT VARCHAR2(30) := 'IGS_HE_SPA_LGCY_PUB';
6 
7 /*------------------------------------------------------------------
8 --Created by  : knaraset, Oracle IDC
9 --Date created: 14-Nov-2002
10 --
11 --Purpose: Function to validate the mandatory parameters
12 --
13 --Known limitations/enhancements and/or remarks:
14 --
15 --Change History:
16 --Who         When               What
17 --
18 ------------------------------------------------------------------  */
19 FUNCTION validate_parameters(
20          p_hesa_spa_stats_rec IN hesa_spa_rec_type)
21 RETURN BOOLEAN AS
22 
23 l_ret_status BOOLEAN := TRUE;
24 BEGIN
25    IF p_hesa_spa_stats_rec.person_number IS NULL THEN
26         l_ret_status := FALSE;
27         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PER_NUM_NULL');
28         FND_MSG_PUB.ADD;
29    END IF;
30    IF p_hesa_spa_stats_rec.program_cd IS NULL THEN
31         l_ret_status := FALSE;
32         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRGM_CD_NULL');
33         FND_MSG_PUB.ADD;
34    END IF;
35    IF p_hesa_spa_stats_rec.student_inst_number IS NULL THEN
36         l_ret_status := FALSE;
37         FND_MESSAGE.SET_NAME('IGS','IGS_HE_STD_INST_NUM_MAND');
38         FND_MSG_PUB.ADD;
39    END IF;
40 
41    RETURN l_ret_status;
42 END validate_parameters;
43 
44 /*------------------------------------------------------------------
45 --Created by  : knaraset, Oracle IDC
46 --Date created: 14-Nov-2002
47 --
48 --Purpose: Function to validate the data base constraints like
49 --         primary key, unique key, foreign key and check constraints.
50 --
51 --Known limitations/enhancements and/or remarks:
52 --
53 --Change History:
54 --Who         When               What
55 --jtmathew    21-Sep-2004        Added validation for the new fields
56 --                               described in HEFD350.
57 ------------------------------------------------------------------  */
58 FUNCTION validate_db_cons(
59          p_person_id IN hz_parties.party_id%TYPE,
60          p_version_number IN igs_en_stdnt_ps_att.version_number%TYPE,
61          p_hesa_spa_stats_rec IN hesa_spa_rec_type)
62 RETURN VARCHAR2 AS
63 
64  l_msg_count NUMBER;
65  l_msg_data  VARCHAR2(4000);
66  l_db_val_failed BOOLEAN := FALSE;
67 BEGIN
68 
69    -- Check whether Hesa program statistics details already exists for the given program attempt
70    IF igs_he_st_spa_all_pkg.get_uk_for_validation(x_person_id => p_person_id,
71                                                   x_course_cd => p_hesa_spa_stats_rec.program_cd) THEN
72         FND_MESSAGE.SET_NAME('IGS','IGS_HE_SPA_STATS_EXIST');
73         FND_MSG_PUB.ADD;
74         RETURN 'W';
75    END IF;
76 
77    -- start of Foreign Key validations
78    --
79    -- Check whether the program attempt exists
80    IF NOT igs_en_stdnt_ps_att_pkg.get_pk_for_validation(x_person_id => p_person_id,
81                                                         x_course_cd => p_hesa_spa_stats_rec.program_cd) THEN
82         FND_MESSAGE.SET_NAME('IGS','IGS_HE_EXT_SPA_DTL_NOT_FOUND');
83         FND_MSG_PUB.ADD;
84         l_db_val_failed := TRUE;
85    END IF;
86    -- Check whether the Domicile code exists
87    IF p_hesa_spa_stats_rec.domicile_cd IS NOT NULL THEN
88       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_DOM',
89                                                            x_value => p_hesa_spa_stats_rec.domicile_cd) THEN
90          FND_MESSAGE.SET_NAME('IGS','IGS_HE_DOM_CD_NOT_EXIST');
91          FND_MSG_PUB.ADD;
92          l_db_val_failed := TRUE;
93       END IF;
94    END IF;
95 
96    -- Check whether the Occupation Code exists
97    IF p_hesa_spa_stats_rec.occupation_code IS NOT NULL THEN
98       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_OCC',
99                                                            x_value => p_hesa_spa_stats_rec.occupation_code) THEN
100           FND_MESSAGE.SET_NAME('IGS','IGS_HE_OCCUP_CD_NOT_EXIST');
101           FND_MSG_PUB.ADD;
102           l_db_val_failed := TRUE;
103       END IF;
104    END IF;
105    -- Check whether the Teaching training program ID exists
106    IF p_hesa_spa_stats_rec.teacher_train_prog_id IS NOT NULL THEN
107       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_TTCID',
108                                                            x_value => p_hesa_spa_stats_rec.teacher_train_prog_id) THEN
109          FND_MESSAGE.SET_NAME('IGS','IGS_HE_TEACH_TRNPRG_NEX');
110          FND_MSG_PUB.ADD;
111          l_db_val_failed := TRUE;
112       END IF;
113    END IF;
114    -- Check whether the ITT Phase exists
115    IF p_hesa_spa_stats_rec.itt_phase IS NOT NULL THEN
116       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_ITTPHSC',
117                                                            x_value => p_hesa_spa_stats_rec.itt_phase) THEN
118          FND_MESSAGE.SET_NAME('IGS','IGS_HE_ITT_PHASE_NEX');
119          FND_MSG_PUB.ADD;
120          l_db_val_failed := TRUE;
121       END IF;
122    END IF;
123    -- Check whether the Bilingual ITT marker exists
124    IF p_hesa_spa_stats_rec.bilingual_itt_marker IS NOT NULL THEN
125       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_BITTM',
126                                                            x_value => p_hesa_spa_stats_rec.bilingual_itt_marker) THEN
127          FND_MESSAGE.SET_NAME('IGS','IGS_HE_BILINGUAL_ITT_NEX');
128          FND_MSG_PUB.ADD;
129          l_db_val_failed := TRUE;
130       END IF;
131    END IF;
132    -- Check whether the Teaching Qualification Gain Sector exists
133    IF p_hesa_spa_stats_rec.teaching_qual_gain_sector IS NOT NULL THEN
134       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_TQSEC',
135                                                            x_value => p_hesa_spa_stats_rec.teaching_qual_gain_sector) THEN
136          FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_QUAL_GSEC_NEX');
137          FND_MSG_PUB.ADD;
138          l_db_val_failed := TRUE;
139       END IF;
140    END IF;
141    -- Check whether the Teaching Qualification Gain subject 1 exists
142    IF p_hesa_spa_stats_rec.teaching_qual_gain_subj1 IS NOT NULL THEN
143       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_TQSUB123',
144                                                            x_value => p_hesa_spa_stats_rec.teaching_qual_gain_subj1) THEN
145          FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_QUAL_SUB1_NEX');
146          FND_MSG_PUB.ADD;
147          l_db_val_failed := TRUE;
148       END IF;
149    END IF;
150    -- Check whether the Teaching Qualification Gain subject 2 exists
151    IF p_hesa_spa_stats_rec.teaching_qual_gain_subj2 IS NOT NULL THEN
152       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_TQSUB123',
153                                                            x_value => p_hesa_spa_stats_rec.teaching_qual_gain_subj2) THEN
154          FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_QUAL_SUB2_NEX');
155          FND_MSG_PUB.ADD;
156          l_db_val_failed := TRUE;
157       END IF;
158    END IF;
159    -- Check whether the Teaching Qualification Gain subject 3 exists
160    IF p_hesa_spa_stats_rec.teaching_qual_gain_subj3 IS NOT NULL THEN
161       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_TQSUB123',
162                                                            x_value => p_hesa_spa_stats_rec.teaching_qual_gain_subj3) THEN
163          FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_QUAL_SUB3_NEX');
164          FND_MSG_PUB.ADD;
165          l_db_val_failed := TRUE;
166       END IF;
167    END IF;
168    -- Check whether the Destination exists
169    IF p_hesa_spa_stats_rec.destination IS NOT NULL THEN
170       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_DEST',
171                                                            x_value => p_hesa_spa_stats_rec.destination) THEN
172          FND_MESSAGE.SET_NAME('IGS','IGS_HE_DESTINATION_NEX');
173          FND_MSG_PUB.ADD;
174          l_db_val_failed := TRUE;
175       END IF;
176    END IF;
177    -- Check whether the ITT Program Outcome exists
178    IF p_hesa_spa_stats_rec.itt_prog_outcome IS NOT NULL THEN
179       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_OUTCOME',
180                                                            x_value => p_hesa_spa_stats_rec.itt_prog_outcome) THEN
181          FND_MESSAGE.SET_NAME('IGS','IGS_HE_ITT_PRG_OC_NEX');
182          FND_MSG_PUB.ADD;
183          l_db_val_failed := TRUE;
184       END IF;
185    END IF;
186    -- Check whether the NHS Funding Source exists
187    IF p_hesa_spa_stats_rec.nhs_funding_source IS NOT NULL THEN
188       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_NHS_FUSRC',
189                                                            x_value => p_hesa_spa_stats_rec.nhs_funding_source) THEN
190          FND_MESSAGE.SET_NAME('IGS','IGS_HE_NHS_FUND_SRC_NEX');
191          FND_MSG_PUB.ADD;
192          l_db_val_failed := TRUE;
193       END IF;
194    END IF;
195    -- Check whether the UFI Place exists
196    IF p_hesa_spa_stats_rec.ufi_place IS NOT NULL THEN
197       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_UFI_PLACE',
198                                                            x_value => p_hesa_spa_stats_rec.ufi_place) THEN
199          FND_MESSAGE.SET_NAME('IGS','IGS_HE_UFI_PLACE_NEX');
200          FND_MSG_PUB.ADD;
201          l_db_val_failed := TRUE;
202       END IF;
203    END IF;
204    -- Check whether the Social Class Indicator exists
205    IF p_hesa_spa_stats_rec.social_class_ind IS NOT NULL THEN
206       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_SOC',
207                                                            x_value => p_hesa_spa_stats_rec.social_class_ind) THEN
208          FND_MESSAGE.SET_NAME('IGS','IGS_HE_SOCIAL_CLS_IND_NEX');
209          FND_MSG_PUB.ADD;
210          l_db_val_failed := TRUE;
211       END IF;
212    END IF;
213    -- Check whether the NHS Employer exists
214    IF p_hesa_spa_stats_rec.nhs_employer IS NOT NULL THEN
215       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_NHS_EMPLOYER',
216                                                            x_value => p_hesa_spa_stats_rec.nhs_employer) THEN
217          FND_MESSAGE.SET_NAME('IGS','IGS_HE_NHS_EMP_NEX');
218          FND_MSG_PUB.ADD;
219          l_db_val_failed := TRUE;
220       END IF;
221    END IF;
222    -- Check whether the Return Type exists
223    IF p_hesa_spa_stats_rec.return_type IS NOT NULL THEN
224       IF NOT igs_lookups_view_pkg.get_pk_for_validation (x_lookup_type => 'IGS_HE_RED_RTN',
225                                                          x_lookup_code => p_hesa_spa_stats_rec.return_type) THEN
226          FND_MESSAGE.SET_NAME('IGS','IGS_HE_RET_TYPE_NEX');
227          FND_MSG_PUB.ADD;
228          l_db_val_failed := TRUE;
229       END IF;
230    END IF;
231    -- Check whether the Student Qualification Aim exists
232    IF p_hesa_spa_stats_rec.student_qual_aim IS NOT NULL THEN
233       IF NOT igs_en_hesa_pkg.validate_program_aim (p_award_cd => p_hesa_spa_stats_rec.student_qual_aim) THEN
234          FND_MESSAGE.SET_NAME('IGS','IGS_HE_STD_PRG_AIM_NEX');
235          FND_MSG_PUB.ADD;
236          l_db_val_failed := TRUE;
237       END IF;
238    END IF;
239    -- Check whether the Student FE Qualification Aim exists
240    IF p_hesa_spa_stats_rec.student_fe_qual_aim IS NOT NULL THEN
241       IF NOT igs_en_hesa_pkg.validate_program_aim (p_award_cd => p_hesa_spa_stats_rec.student_fe_qual_aim) THEN
242          FND_MESSAGE.SET_NAME('IGS','IGS_HE_STD_FE_PRG_AIM_NEX');
243          FND_MSG_PUB.ADD;
244          l_db_val_failed := TRUE;
245       END IF;
246    END IF;
247    -- Check whether the Subject Qualification Aim 1 exists
248    IF p_hesa_spa_stats_rec.subj_qualaim1 IS NOT NULL THEN
249       IF NOT igs_ps_fld_of_study_pkg.Get_Pk_For_Validation ( x_field_of_study => p_hesa_spa_stats_rec.subj_qualaim1) THEN
250          FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUBQ1_FS_INVALID');
251          FND_MSG_PUB.ADD;
252          l_db_val_failed := TRUE;
253       END IF;
254    END IF;
255 
256    -- Check whether the Subject Qualification Aim 2 exists
257    IF p_hesa_spa_stats_rec.subj_qualaim2 IS NOT NULL THEN
258       IF NOT igs_ps_fld_of_study_pkg.Get_Pk_For_Validation ( x_field_of_study => p_hesa_spa_stats_rec.subj_qualaim2) THEN
259          FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUBQ2_FS_INVALID');
260          FND_MSG_PUB.ADD;
261          l_db_val_failed := TRUE;
262       END IF;
263    END IF;
264    -- Check whether the Subject Qualification Aim 3 exists
265    IF p_hesa_spa_stats_rec.subj_qualaim3 IS NOT NULL THEN
266       IF NOT igs_ps_fld_of_study_pkg.Get_Pk_For_Validation ( x_field_of_study => p_hesa_spa_stats_rec.subj_qualaim3) THEN
267          FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUBQ3_FS_INVALID');
268          FND_MSG_PUB.ADD;
269          l_db_val_failed := TRUE;
270       END IF;
271    END IF;
272 
273    -- Check whether the Qualification Aim Proportion exists
274    IF p_hesa_spa_stats_rec.qualaim_proportion IS NOT NULL THEN
275       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_PROPORTION',
276                                                            x_value => p_hesa_spa_stats_rec.qualaim_proportion) THEN
277          FND_MESSAGE.SET_NAME('IGS','IGS_HE_QUAL_PROP_NEX');
278          FND_MSG_PUB.ADD;
279          l_db_val_failed := TRUE;
280       END IF;
281    END IF;
282    -- Check whether the Special Student exists
283    IF p_hesa_spa_stats_rec.special_student IS NOT NULL THEN
284       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_SPEC_STUD',
285                                                            x_value => p_hesa_spa_stats_rec.special_student) THEN
286          FND_MESSAGE.SET_NAME('IGS','IGS_HE_SPEC_STUD_NEX');
287          FND_MSG_PUB.ADD;
288          l_db_val_failed := TRUE;
289       END IF;
290    END IF;
291    -- Check whether the FE Student Marker exists
292    IF p_hesa_spa_stats_rec.fe_student_marker IS NOT NULL THEN
293       IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type => 'OSS_FESTUMK',
294                                                            x_value => p_hesa_spa_stats_rec.fe_student_marker) THEN
295          FND_MESSAGE.SET_NAME('IGS','IGS_HE_FE_STUD_MARKER_NEX');
296          FND_MSG_PUB.ADD;
297          l_db_val_failed := TRUE;
298       END IF;
299    END IF;
300 
301    -- Check whether the Dependants Code exists
302    IF p_hesa_spa_stats_rec.dependants_cd IS NOT NULL THEN
303       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_DEPEND',
304                                                           x_value => p_hesa_spa_stats_rec.dependants_cd) THEN
305       FND_MESSAGE.SET_NAME('IGS','IGS_HE_DEP_CD_NEX');
306       FND_MSG_PUB.ADD;
307       l_db_val_failed := TRUE;
308       END IF;
309    END IF;
310 
311    -- Check whether the Government Initiatives Code exists
312    IF p_hesa_spa_stats_rec.gov_initiatives_cd IS NOT NULL THEN
313       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_GOVINIT',
314                                                           x_value => p_hesa_spa_stats_rec.gov_initiatives_cd) THEN
315       FND_MESSAGE.SET_NAME('IGS','IGS_HE_GOV_INIT_NEX');
316       FND_MSG_PUB.ADD;
317       l_db_val_failed := TRUE;
318       END IF;
319    END IF;
320 
321    -- Check whether Eligibility for Disadvantage Uplift Indicator exists
322    IF p_hesa_spa_stats_rec.disadv_uplift_elig_cd IS NOT NULL THEN
323       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_ELIDISUP',
324                                                           x_value => p_hesa_spa_stats_rec.disadv_uplift_elig_cd) THEN
325       FND_MESSAGE.SET_NAME('IGS','IGS_HE_ELIG_DIS_NEX');
326       FND_MSG_PUB.ADD;
327       l_db_val_failed := TRUE;
328       END IF;
329    END IF;
330 
331    -- Check whether Franchise Partner Indicator exists
332    IF p_hesa_spa_stats_rec.franch_partner_cd IS NOT NULL THEN
333       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_FRANPART',
334                                                           x_value => p_hesa_spa_stats_rec.franch_partner_cd) THEN
335       FND_MESSAGE.SET_NAME('IGS','IGS_HE_FRAN_PART_NEX');
336       FND_MSG_PUB.ADD;
337       l_db_val_failed := TRUE;
338       END IF;
339    END IF;
340 
341    -- Check whether Franchised Out Arrangement Indicator exists
342    IF p_hesa_spa_stats_rec.franch_out_arr_cd IS NOT NULL THEN
343       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_FROUTARR',
344                                                           x_value => p_hesa_spa_stats_rec.franch_out_arr_cd) THEN
345       FND_MESSAGE.SET_NAME('IGS','IGS_HE_FRAN_OUT_ARR_NEX');
346       FND_MSG_PUB.ADD;
347       l_db_val_failed := TRUE;
348       END IF;
349    END IF;
350 
351    -- Check whether Employer Role Code exists
352    IF p_hesa_spa_stats_rec.employer_role_cd IS NOT NULL THEN
353       IF NOT igs_he_code_values_pkg.get_pk_for_validation(x_code_type => 'OSS_EMPROLE',
354                                                           x_value => p_hesa_spa_stats_rec.employer_role_cd) THEN
355       FND_MESSAGE.SET_NAME('IGS','IGS_HE_EMP_ROLE_CD_NEX');
356       FND_MSG_PUB.ADD;
357       l_db_val_failed := TRUE;
358       END IF;
359    END IF;
360 
361    -- Check whether the Implied Rate of Council Partial Funding field is
362    -- within the range 0 to 100 (inclusive)
363    IF p_hesa_spa_stats_rec.implied_fund_rate IS NOT NULL THEN
364        IF NOT p_hesa_spa_stats_rec.implied_fund_rate between 0 and 100 THEN
365        FND_MESSAGE.SET_NAME('IGS','IGS_HE_IMP_RATE_INVALID');
366        FND_MSG_PUB.ADD;
367        l_db_val_failed := TRUE;
368        END IF;
369    END IF;
370 
371    -- Check whether the Number of Units To Achieve Full Qualification field is
372    -- within the range 0 to 99 (inclusive)
373    IF p_hesa_spa_stats_rec.units_for_qual IS NOT NULL THEN
374       IF NOT p_hesa_spa_stats_rec.units_for_qual between 0 and 99 THEN
375       FND_MESSAGE.SET_NAME('IGS','IGS_HE_UNITS_QUAL_INVALID');
376       FND_MSG_PUB.ADD;
377       l_db_val_failed := TRUE;
378       END IF;
379    END IF;
380 
381    -- Check whether the Number of Units Completed field is within the range 0 to 99 (inclusive)
382    IF p_hesa_spa_stats_rec.units_completed IS NOT NULL THEN
383       IF NOT p_hesa_spa_stats_rec.units_completed between 0 and 99 THEN
384       FND_MESSAGE.SET_NAME('IGS','IGS_HE_UNITS_COMP_INVALID');
385       FND_MSG_PUB.ADD;
386       l_db_val_failed := TRUE;
387       END IF;
388    END IF;
389 
390     -- Check if the Eligibility for Enhanced Funding Indicator exists
391     IF p_hesa_spa_stats_rec.enh_fund_elig_cd IS NOT NULL THEN
392         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_ELIGENFD',
393                                                              x_value        => p_hesa_spa_stats_rec.enh_fund_elig_cd) THEN
394         -- ADD excep to stack
395         FND_MESSAGE.SET_NAME('IGS','IGS_HE_ELIG_ENH_FUND_NEX');
396         FND_MSG_PUB.ADD;
397         l_db_val_failed := TRUE;
398         END IF;
399     END IF;
400 
401     -- Check whether the Disadvantage Uplift Factor field is within
402     -- range 0.0000 to 9.9999 (inclusive)
403     IF p_hesa_spa_stats_rec.disadv_uplift_factor IS NOT NULL THEN
404        IF NOT p_hesa_spa_stats_rec.disadv_uplift_factor between 0.0000 and 9.9999 THEN
405        FND_MESSAGE.SET_NAME('IGS','IGS_HE_DIS_UPLIFT_FTR_INVALID');
406        FND_MSG_PUB.ADD;
407        l_db_val_failed := TRUE;
408        END IF;
409     END IF;
410 
411    -- Validating the check constraints
412    --
413    -- Check whether the Associate UCAS Number has valid value
414    IF p_hesa_spa_stats_rec.associate_ucas_number IS NOT NULL THEN
415       BEGIN
416          igs_he_st_spa_all_pkg.check_constraints (column_name => 'ASSOCIATE_UCAS_NUMBER',
417                                                   column_value => p_hesa_spa_stats_rec.associate_ucas_number);
418 
419       EXCEPTION
420          WHEN OTHERS THEN
421             FND_MSG_PUB.COUNT_AND_GET ( p_count => l_msg_count ,
422                                         p_data  => l_msg_data);
423             FND_MSG_PUB.DELETE_MSG(l_msg_count);
424             FND_MESSAGE.SET_NAME( 'IGS' , 'IGS_HE_ASSOC_UCAS_NUM_Y_N');
425             FND_MSG_PUB.ADD;
426             l_db_val_failed := TRUE;
427       END;
428    END IF;
429    -- Check whether the Associate Scottish Candidate has valid value
430    IF p_hesa_spa_stats_rec.associate_scott_cand IS NOT NULL THEN
431       BEGIN
432          igs_he_st_spa_all_pkg.check_constraints (column_name => 'ASSOCIATE_SCOTT_CAND',
433                                                   column_value => p_hesa_spa_stats_rec.associate_scott_cand);
434       EXCEPTION
435          WHEN OTHERS THEN
436             FND_MSG_PUB.COUNT_AND_GET ( p_count => l_msg_count ,
437                                         p_data  => l_msg_data);
438             FND_MSG_PUB.DELETE_MSG(l_msg_count);
439             FND_MESSAGE.SET_NAME( 'IGS' , 'IGS_HE_ASSOC_SCT_CAND_Y_N');
440             FND_MSG_PUB.ADD;
441             l_db_val_failed := TRUE;
442       END;
443    END IF;
444    -- Check whether the Associate Teaching Reference Number has valid value
445    IF p_hesa_spa_stats_rec.associate_teach_ref_num IS NOT NULL THEN
446       BEGIN
447          igs_he_st_spa_all_pkg.check_constraints (column_name => 'ASSOCIATE_TEACH_REF_NUM',
448                                                   column_value => p_hesa_spa_stats_rec.associate_teach_ref_num);
449       EXCEPTION
450          WHEN OTHERS THEN
451             FND_MSG_PUB.COUNT_AND_GET ( p_count => l_msg_count ,
452                                         p_data  => l_msg_data);
453             FND_MSG_PUB.DELETE_MSG(l_msg_count);
454             FND_MESSAGE.SET_NAME( 'IGS' , 'IGS_HE_ASSOC_TCH_REF_Y_N');
455             FND_MSG_PUB.ADD;
456             l_db_val_failed := TRUE;
457       END;
458    END IF;
459    -- Check whether the Associate NHS Registration Number has valid value
460    IF p_hesa_spa_stats_rec.associate_nhs_reg_num IS NOT NULL THEN
461       BEGIN
462          igs_he_st_spa_all_pkg.check_constraints (column_name => 'ASSOCIATE_NHS_REG_NUM',
463                                                   column_value => p_hesa_spa_stats_rec.associate_nhs_reg_num);
464       EXCEPTION
465          WHEN OTHERS THEN
466             FND_MSG_PUB.COUNT_AND_GET ( p_count => l_msg_count ,
467                                         p_data  => l_msg_data);
468             FND_MSG_PUB.DELETE_MSG(l_msg_count);
469             FND_MESSAGE.SET_NAME( 'IGS' , 'IGS_HE_ASSOC_NHS_REG_Y_N');
470             FND_MSG_PUB.ADD;
471             l_db_val_failed := TRUE;
472       END;
473    END IF;
474 
475    -- Check whether any validation failed, if yes then return Error status otherwise return success status
476    IF l_db_val_failed THEN
477      RETURN 'E';
478    ELSE
479      RETURN 'S';
480    END IF;
481 
482 END validate_db_cons;
483 
484 /*------------------------------------------------------------------
485 --Created by  : knaraset, Oracle IDC
486 --Date created: 14-Nov-2002
487 --
488 --Purpose:  function to validate the business rules for the HESA program attempt statistics
489 --
490 --Known limitations/enhancements and/or remarks:
491 --
492 --Change History:
493 --Who         When               What
494 --
495 ------------------------------------------------------------------  */
496 FUNCTION validate_hesa_spa(
497          p_hesa_spa_stats_rec IN hesa_spa_rec_type)
498 RETURN BOOLEAN AS
499 
500 l_br_val_failed BOOLEAN := FALSE;
501 BEGIN
502    -- validate whether the specified combination of subj_qualaim's and qualaim_proportion is valid
503    IF NOT igs_en_hesa_pkg.val_sub_qual_proportion (
504                                                    p_subj_qualaim1 => p_hesa_spa_stats_rec.subj_qualaim1,
505                                                    p_subj_qualaim2 => p_hesa_spa_stats_rec.subj_qualaim2,
506                                                    p_subj_qualaim3 => p_hesa_spa_stats_rec.subj_qualaim3,
507                                                    p_qualaim_proportion => p_hesa_spa_stats_rec.qualaim_proportion) THEN
508 
509       l_br_val_failed := TRUE;
510    END IF;
511 
512    -- Validate whether the given highest qual on entry is exists against the
513    -- grading schema defined for HESA code HESA_HIGH_QUAL_ON_ENT.
514    IF NOT igs_en_hesa_pkg.val_highest_qual_entry (p_highest_qual_on_entry => p_hesa_spa_stats_rec.highest_qual_on_entry) THEN
515         FND_MESSAGE.SET_NAME('IGS','IGS_HE_QUAL_ENTRY_NEX');
516         FND_MSG_PUB.ADD;
517         l_br_val_failed := TRUE;
518    END IF;
519 
520    -- Check whether any validation failed, if yes then return FALSE otherwise return TRUE
521    IF l_br_val_failed THEN
522      RETURN FALSE;
523    ELSE
524      RETURN TRUE;
525    END IF;
526 
527 END validate_hesa_spa;
528 
529 /*------------------------------------------------------------------
530 --Created by  : knaraset, Oracle IDC
531 --Date created: 14-Nov-2002
532 --
533 --Purpose: This is Public API to import the Legacy HESA program attempt statistics details
534 --         into OSS system.
535 --
536 --Known limitations/enhancements and/or remarks:
537 --
538 -- This API takes the record type variable of program attempt statistics along with
539 -- other standard API parameters. following is the flow of the procedure
540 --
541 --  1. Validate the Country profile value
542 --  2. Validate the mandatory parameters
543 --  3. Derive the required values based on input values
544 --  4. Validate the database constraints
545 --  5. Validate the business rules.
546 --  6. Insert the record into OSS table(igs_he_st_spa_all)
547 --
548 --  If any of the above step validation/logic failed then the procudure returns
549 --  with appropriate message(s) and status.
550 --
551 --Change History:
552 --Who         When               What
553 --ayedubat    14-Jan-2004      Added the NVL condition for the fields, associate_ucas_number, associate_scott_cand,
554 --                             associate_teach_ref_num,associate_nhs_reg_num to 'Y' for Bug, 3374555
555 --jtmathew    21-Sep-2004      Modified INSERT statement to accommodate the new fields described in HEFD350.
556 ------------------------------------------------------------------  */
557 PROCEDURE create_hesa_spa (p_api_version           IN   NUMBER,
558                            p_init_msg_list         IN   VARCHAR2,
559                            p_commit                IN   VARCHAR2,
560                            p_validation_level      IN   NUMBER,
561                            p_hesa_spa_stats_rec    IN   hesa_spa_rec_type,
562                            x_return_status         OUT NOCOPY VARCHAR2,
563                            x_msg_count             OUT NOCOPY NUMBER,
564                            x_msg_data              OUT NOCOPY VARCHAR2) AS
565 
566 -- Derive HESA_ST_SPA_ID from sequence
567 CURSOR cur_hesa_st_spa_id IS
568 SELECT igs_he_st_spa_all_s.NEXTVAL
569 FROM dual;
570 
571 l_api_name              CONSTANT    VARCHAR2(30) := 'create_hesa_spa';
572 l_api_version           CONSTANT    NUMBER       := 1.0;
573 
574 l_validation_failed BOOLEAN := FALSE;
575 l_db_val_status VARCHAR2(1);
576 l_person_id hz_parties.party_id%TYPE;
577 l_version_number igs_en_stdnt_ps_att.version_number%TYPE;
578 l_hesa_st_spa_id igs_he_st_spa_all.hesa_st_spa_id%TYPE;
579 
580 BEGIN
581 -- Create save point
582 SAVEPOINT create_hesa_spa_pub;
583 
584   -- Check for the Compatible API call
585   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
586                                      p_api_version,
587                                      l_api_name,
588                                      g_pkg_name) THEN
589 
590       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
591   END IF;
592 
593   -- If the calling program has passed the parameter for initializing the message list
594   IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
595      FND_MSG_PUB.INITIALIZE;
596   END IF;
597 
598   -- Set the return status to success
599   x_return_status := FND_API.G_RET_STS_SUCCESS;
600 
601 
602   -- Check whether the counry profile value is GB
603   IF NVL(FND_PROFILE.VALUE('OSS_COUNTRY_CODE'),'NONE') <> 'GB' THEN
604      FND_MESSAGE.SET_NAME ('IGS','IGS_UC_HE_NOT_ENABLED');
605      FND_MSG_PUB.ADD;
606      x_return_status := FND_API.G_RET_STS_ERROR;
607      l_validation_failed := TRUE;
608   END IF;
609 
610   -- If no validation failed then validate parameters
611   IF NOT l_validation_failed THEN
612      IF NOT validate_parameters(p_hesa_spa_stats_rec => p_hesa_spa_stats_rec) THEN
613         l_validation_failed := TRUE;
614      END IF;
615   END IF;
616 
617   -- If no validation failed then derive the required values
618   IF NOT l_validation_failed THEN
619 
620      -- derive the person Id
621      l_person_id := igs_ge_gen_003.get_person_id(p_person_number => p_hesa_spa_stats_rec.person_number);
622      IF l_person_id IS NULL THEN
623         FND_MESSAGE.SET_NAME ('IGS','IGS_GE_INVALID_PERSON_NUMBER');
624         FND_MSG_PUB.ADD;
625         x_return_status := FND_API.G_RET_STS_ERROR;
626         l_validation_failed := TRUE;
627      END IF;
628 
629      -- Check whether person ID found then only version number can be derived
630      IF NOT l_validation_failed THEN
631         -- derive the version number of the program attempt
632         l_version_number := igs_ge_gen_003.get_program_version(p_person_id => l_person_id,
633                                                                p_program_cd => p_hesa_spa_stats_rec.program_cd);
634         IF l_version_number IS NULL THEN
635            FND_MESSAGE.SET_NAME ('IGS','IGS_HE_EXT_SPA_DTL_NOT_FOUND');
636            FND_MSG_PUB.ADD;
637            x_return_status := FND_API.G_RET_STS_ERROR;
638            l_validation_failed := TRUE;
639         END IF;
640      END IF;
641   END IF; -- end, derivations
642 
643   -- If no validation failed then validate the database constraints
644   IF NOT l_validation_failed THEN
645      l_db_val_status := validate_db_cons(p_person_id => l_person_id,
646                                          p_version_number => l_version_number,
647                                          p_hesa_spa_stats_rec => p_hesa_spa_stats_rec);
648      IF l_db_val_status = 'W' THEN
649         x_return_status := 'W';
650         l_validation_failed := TRUE;
651      ELSIF l_db_val_status = 'E' THEN
652         x_return_status := FND_API.G_RET_STS_ERROR;
653         l_validation_failed := TRUE;
654      END IF;
655   END IF; -- end, validate database constraints
656 
657   -- If no validation failed then validate the business rules for Hesa program statistics
658   IF NOT l_validation_failed THEN
659      IF NOT validate_hesa_spa(p_hesa_spa_stats_rec => p_hesa_spa_stats_rec) THEN
660         x_return_status := FND_API.G_RET_STS_ERROR;
661         l_validation_failed := TRUE;
662      END IF;
663   END IF;
664 
665   -- If no validation failed then insert the record into OSS table(Igs_He_St_Spa_all)
666   IF NOT l_validation_failed THEN
667 
668      -- get the hesa_st_spa_id from the sequence
669      OPEN cur_hesa_st_spa_id;
670      FETCH cur_hesa_st_spa_id INTO l_hesa_st_spa_id;
671      CLOSE cur_hesa_st_spa_id;
672 
673      --
674      -- Insert the HESA program statistics record into OSS table igs_he_st_spa_all
675      --
676      INSERT INTO igs_he_st_spa_all (
677                                     hesa_st_spa_id,
678                                     org_id,
679                                     person_id,
680                                     course_cd,
681                                     version_number,
682                                     fe_student_marker,
683                                     domicile_cd,
684                                     inst_last_attended,
685                                     year_left_last_inst,
686                                     highest_qual_on_entry,
687                                     date_qual_on_entry_calc,
688                                     a_level_point_score,
689                                     highers_points_scores,
690                                     occupation_code,
691                                     commencement_dt,
692                                     special_student,
693                                     student_qual_aim,
694                                     student_fe_qual_aim,
695                                     teacher_train_prog_id,
696                                     itt_phase,
697                                     bilingual_itt_marker,
698                                     teaching_qual_gain_sector,
699                                     teaching_qual_gain_subj1,
700                                     teaching_qual_gain_subj2,
701                                     teaching_qual_gain_subj3,
702                                     student_inst_number,
703                                     destination,
704                                     itt_prog_outcome,
705                                     hesa_return_name,
706                                     hesa_return_id,
707                                     hesa_submission_name,
708                                     associate_ucas_number,
709                                     associate_scott_cand,
710                                     associate_teach_ref_num,
711                                     associate_nhs_reg_num,
712                                     nhs_funding_source,
713                                     ufi_place,
714                                     postcode,
715                                     social_class_ind,
716                                     occcode,
717                                     total_ucas_tariff,
718                                     nhs_employer,
719                                     creation_date,
720                                     created_by,
721                                     last_update_date,
722                                     last_updated_by,
723                                     last_update_login,
724                                     return_type,
725                                     calculated_fte,
726                                     qual_aim_subj1,
727                                     qual_aim_subj2,
728                                     qual_aim_subj3,
729                                     qual_aim_proportion,
730                                     dependants_cd,
731                                     implied_fund_rate,
732                                     gov_initiatives_cd,
733                                     units_for_qual,
734                                     disadv_uplift_elig_cd,
735                                     franch_partner_cd,
736                                     units_completed,
737                                     franch_out_arr_cd,
738                                     employer_role_cd,
739                                     disadv_uplift_factor,
740                                     enh_fund_elig_cd,
741                                     exclude_flag)
742                                     VALUES (
743                                             l_hesa_st_spa_id,
744                                             igs_ge_gen_003.get_org_id(),
745                                             l_person_id,
746                                             p_hesa_spa_stats_rec.program_cd,
747                                             l_version_number,
748                                             p_hesa_spa_stats_rec.fe_student_marker,
749                                             p_hesa_spa_stats_rec.domicile_cd,
750                                             NULL, --inst_last_attended,
751                                             NULL, --year_left_last_inst,
752                                             p_hesa_spa_stats_rec.highest_qual_on_entry,
753                                             NULL, --date_qual_on_entry_calc,
754                                             NULL, --a_level_point_score,
755                                             NULL, --highers_points_scores,
756                                             p_hesa_spa_stats_rec.occupation_code,
757                                             p_hesa_spa_stats_rec.commencement_dt,
758                                             p_hesa_spa_stats_rec.special_student,
759                                             p_hesa_spa_stats_rec.student_qual_aim,
760                                             p_hesa_spa_stats_rec.student_fe_qual_aim,
761                                             p_hesa_spa_stats_rec.teacher_train_prog_id,
762                                             p_hesa_spa_stats_rec.itt_phase,
763                                             p_hesa_spa_stats_rec.bilingual_itt_marker,
764                                             p_hesa_spa_stats_rec.teaching_qual_gain_sector,
765                                             p_hesa_spa_stats_rec.teaching_qual_gain_subj1,
766                                             p_hesa_spa_stats_rec.teaching_qual_gain_subj2,
767                                             p_hesa_spa_stats_rec.teaching_qual_gain_subj3,
768                                             p_hesa_spa_stats_rec.student_inst_number,
769                                             p_hesa_spa_stats_rec.destination,
770                                             p_hesa_spa_stats_rec.itt_prog_outcome,
771                                             NULL, --hesa_return_name,
772                                             NULL, --hesa_return_id,
773                                             NULL, --hesa_submission_name,
774                                             NVL(p_hesa_spa_stats_rec.associate_ucas_number,'Y'),
775                                             NVL(p_hesa_spa_stats_rec.associate_scott_cand,'Y'),
776                                             NVL(p_hesa_spa_stats_rec.associate_teach_ref_num,'Y'),
777                                             NVL(p_hesa_spa_stats_rec.associate_nhs_reg_num,'Y'),
778                                             p_hesa_spa_stats_rec.nhs_funding_source,
779                                             p_hesa_spa_stats_rec.ufi_place,
780                                             p_hesa_spa_stats_rec.postcode,
781                                             p_hesa_spa_stats_rec.social_class_ind,
782                                             p_hesa_spa_stats_rec.occcode,
783                                             NULL, --total_ucas_tariff,
784                                             p_hesa_spa_stats_rec.nhs_employer,
785                                             SYSDATE, --creation_date,
786                                             NVL(FND_GLOBAL.USER_ID,-1), --created_by,
787                                             SYSDATE, --last_update_date,
788                                             NVL(FND_GLOBAL.USER_ID,-1), --last_updated_by,
789                                             NVL(FND_GLOBAL.LOGIN_ID,-1), --last_update_login,
790                                             p_hesa_spa_stats_rec.return_type,
791                                             NULL, --calculated_fte,
792                                             p_hesa_spa_stats_rec.subj_qualaim1,
793                                             p_hesa_spa_stats_rec.subj_qualaim2,
794                                             p_hesa_spa_stats_rec.subj_qualaim3,
795                                             p_hesa_spa_stats_rec.qualaim_proportion,
796                                             p_hesa_spa_stats_rec.dependants_cd,
797                                             p_hesa_spa_stats_rec.implied_fund_rate,
798                                             p_hesa_spa_stats_rec.gov_initiatives_cd,
799                                             p_hesa_spa_stats_rec.units_for_qual,
800                                             p_hesa_spa_stats_rec.disadv_uplift_elig_cd,
801                                             p_hesa_spa_stats_rec.franch_partner_cd,
802                                             p_hesa_spa_stats_rec.units_completed,
803                                             p_hesa_spa_stats_rec.franch_out_arr_cd,
804                                             p_hesa_spa_stats_rec.employer_role_cd,
805                                             p_hesa_spa_stats_rec.disadv_uplift_factor,
806                                             p_hesa_spa_stats_rec.enh_fund_elig_cd,
807                                             'N');
808      -- Set the return status to success.
809      x_return_status := FND_API.G_RET_STS_SUCCESS;
810 
811   ELSE
812      ROLLBACK TO create_hesa_spa_pub;
813   END IF;
814 
815   -- If no validation failed and p_commit is passed as 'Y' then commit the changes.
816   IF NOT l_validation_failed AND FND_API.TO_BOOLEAN(p_commit) THEN
817      COMMIT;
818   END IF;
819 
820   FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
821                              p_data           => x_msg_data);
822 
823   RETURN;
824 
825   EXCEPTION
826     WHEN FND_API.G_EXC_ERROR THEN
827        ROLLBACK TO create_hesa_spa_pub;
828        x_return_status := FND_API.G_RET_STS_ERROR;
829        FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
830                                   p_data           => x_msg_data);
831     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
832        ROLLBACK TO create_hesa_spa_pub;
833        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
834        FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
835                                   p_data           => x_msg_data);
836     WHEN OTHERS THEN
837        ROLLBACK TO create_hesa_spa_pub;
838        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
839 
840        IF FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
841           FND_MSG_PUB.ADD_EXC_MSG(g_pkg_name,
842                                   l_api_name);
843        END IF;
844        FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
845                                   p_data           => x_msg_data);
846 END create_hesa_spa;
847 
848 
849 END IGS_HE_SPA_LGCY_PUB;