DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_HE_SUSA_LGCY_PUB

Source


1 PACKAGE BODY igs_he_susa_lgcy_pub AS
2 /* $Header: IGSHE23B.pls 120.0 2005/06/01 22:17:57 appldev noship $ */
3 
4 
5 
6 g_pkg_name        CONSTANT VARCHAR2(30) := 'IGS_HE_SUSA_LGCY_PUB';
7 
8 
9 FUNCTION validate_parameters(p_hesa_susa_rec   IN   hesa_susa_rec_type)
10                                                     RETURN BOOLEAN AS
11 /*----------------------------------------------------------------------------
12 ||  Created By : prraj
13 ||  Created On : 05-11-2002
14 ||  Purpose : To validate the input parameters
15 ||  Known limitations, enhancements or remarks :
16 ||  Change History :
17 ||  Who             When            What
18 ------------------------------------------------------------------------------*/
19 
20     l_valid_params      BOOLEAN := TRUE;
21 BEGIN
22 
23     -- Mandatory parameter check
24     IF p_hesa_susa_rec.person_number IS NULL THEN
25         -- Add excep to stack
26         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PER_NUM_NULL');
27         FND_MSG_PUB.ADD;
28         l_valid_params := FALSE;
29     END IF;
30 
31     -- Mandatory parameter check
32     IF p_hesa_susa_rec.program_cd IS NULL THEN
33         -- Add excep to stack
34         FND_MESSAGE.SET_NAME('IGS','IGS_EN_PRGM_CD_NULL');
35         FND_MSG_PUB.ADD;
36         l_valid_params := FALSE;
37     END IF;
38 
39     -- Mandatory parameter check
40     IF p_hesa_susa_rec.unit_set_cd IS NULL THEN
41         -- Add excep to stack
42         FND_MESSAGE.SET_NAME('IGS','IGS_HE_UNIT_SET_MAND');
43         FND_MSG_PUB.ADD;
44         l_valid_params := FALSE;
45     END IF;
46 
47   RETURN l_valid_params;
48 
49 END validate_parameters;
50 
51 
52 
53 FUNCTION validate_db_cons(p_person_id       IN   NUMBER,
54                           p_sequence_number IN   NUMBER,
55                           p_hesa_susa_rec   IN   hesa_susa_rec_type
56                          ) RETURN VARCHAR2 AS
57 /*----------------------------------------------------------------------------
58 ||  Created By : prraj
59 ||  Created On : 05-11-2002
60 ||  Purpose : Validates the database constaints ie PK, UK and FK checks
61 ||  Known limitations, enhancements or remarks :
62 ||  Change History :
63 ||  Who         When               What
64 ||  jtmathew    21-Sep-2004        Added validation for new and existing fields
65 ||                                 as described in HEFD350.
66 ------------------------------------------------------------------------------*/
67 
68     l_ret_value     VARCHAR2(1) := 'S';
69 
70 
71     -- Check if the specified fte_calc_type is a valid value in igs_lookup_values
72     -- with type IGS_HE_FTE_CALC_TYPE
73     CURSOR c_fte_calc_type IS
74     SELECT 'X'
75     FROM igs_lookup_values
76     WHERE lookup_type = 'IGS_HE_FTE_CALC_TYPE'
77     AND lookup_code = p_hesa_susa_rec.fte_calc_type
78     AND enabled_flag='Y';
79     l_dummy           VARCHAR2(1);
80 
81 
82 BEGIN
83 
84     -- Primary Key validations
85     -- Check if the HESA Unit Set Attempt exist
86     IF igs_he_en_susa_pkg.get_uk_for_validation (x_person_id           => p_person_id,
87                                                  x_course_cd           => p_hesa_susa_rec.program_cd,
88                                                  x_unit_set_cd         => p_hesa_susa_rec.unit_set_cd,
89                                                  x_sequence_number     => p_sequence_number
90                                                 ) THEN
91     -- Add excep to stack
92         FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUSA_DTLS_EXIST');
93         FND_MSG_PUB.ADD;
94       RETURN 'W';
95     END IF;
96 
97     -- Foreign Key validations -----------------------------
98     -- Check if the Unit Set Attempt exists
99         IF NOT igs_as_su_setatmpt_pkg.get_pk_for_validation (x_person_id         => p_person_id,
100                                                          x_course_cd         => p_hesa_susa_rec.program_cd,
101                                                          x_unit_set_cd       => p_hesa_susa_rec.unit_set_cd,
102                                                          x_sequence_number   => p_sequence_number
103                                                         ) THEN
104         -- Add excep to stack
105         FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUSA_REC_NEX');
106         FND_MSG_PUB.ADD;
107         l_ret_value := 'E';
108     END IF;
109 
110     -- Check if the New HE Entrant exists
111     IF p_hesa_susa_rec.new_he_entrant_cd IS NOT NULL THEN
112         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_HEENT',
113                                                              x_value        => p_hesa_susa_rec.new_he_entrant_cd
114                                                             ) THEN
115             -- Add excep to stack
116             FND_MESSAGE.SET_NAME('IGS','IGS_HE_NEW_HE_ENTRN_NEX');
117             FND_MSG_PUB.ADD;
118             l_ret_value := 'E';
119         END IF;
120     END IF;
121 
122     -- Check if the Term Time Accommodation exists
123     IF p_hesa_susa_rec.term_time_accom IS NOT NULL THEN
124         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_TTA',
125                                                              x_value        => p_hesa_susa_rec.term_time_accom
126                                                             ) THEN
127             -- Add excep to stack
128             FND_MESSAGE.SET_NAME('IGS','IGS_HE_TRM_ACCOMNEX');
129             FND_MSG_PUB.ADD;
130             l_ret_value := 'E';
131         END IF;
132     END IF;
133 
134     -- Check if the Disability Allowance exists
135     IF p_hesa_susa_rec.disability_allow IS NOT NULL THEN
136         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_DIS_ALLOW',
137                                                              x_value        => p_hesa_susa_rec.disability_allow
138                                                             ) THEN
139             -- Add excep to stack
140             FND_MESSAGE.SET_NAME('IGS','IGS_HE_DISB_ALLW_NEX');
141             FND_MSG_PUB.ADD;
142             l_ret_value := 'E';
143         END IF;
144     END IF;
145 
146     -- Check if the Additional Support Band exists
147     IF p_hesa_susa_rec.additional_sup_band IS NOT NULL THEN
148         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_SUP_BAND',
149                                                              x_value        => p_hesa_susa_rec.additional_sup_band
150                                                             ) THEN
151             -- ADD excep to stack
152             FND_MESSAGE.SET_NAME('IGS','IGS_HE_ADD_SUP_BAND_NEX');
153             FND_MSG_PUB.ADD;
154             l_ret_value := 'E';
155         END IF;
156     END IF;
157 
158     -- Check if the SLDD discrete prov exists
159     IF p_hesa_susa_rec.sldd_discrete_prov IS NOT NULL THEN
160         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_ST13',
161                                                              x_value        => p_hesa_susa_rec.sldd_discrete_prov
162                                                             ) THEN
163             -- Add excep to stack
164             FND_MESSAGE.SET_NAME('IGS','IGS_HE_SLDD_DISCR_NEX');
165             FND_MSG_PUB.ADD;
166             l_ret_value := 'E';
167         END IF;
168     END IF;
169 
170     -- Check if the Study Mode exists
171     IF p_hesa_susa_rec.study_mode IS NOT NULL THEN
172         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_MODE_TYPE',
173                                                              x_value        => p_hesa_susa_rec.study_mode
174                                                             ) THEN
175             -- ADD excep to stack
176             FND_MESSAGE.SET_NAME('IGS','IGS_HE_STUDY_MODE_NEX');
177             FND_MSG_PUB.ADD;
178             l_ret_value := 'E';
179         END IF;
180     END IF;
181 
182     -- Check if the Study Location exists
183     IF p_hesa_susa_rec.study_location IS NOT NULL THEN
184         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_LOCSDY',
185                                                              x_value        => p_hesa_susa_rec.study_location
186                                                             ) THEN
187             -- ADD excep to stack
188             FND_MESSAGE.SET_NAME('IGS','IGS_HE_STUDY_LOC_NEX');
189             FND_MSG_PUB.ADD;
190             l_ret_value := 'E';
191         END IF;
192     END IF;
193 
194     -- Check if the Franchising Activity exists
195     IF p_hesa_susa_rec.franchising_activity IS NOT NULL THEN
196         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_FRAN_ACT',
197                                                              x_value        => p_hesa_susa_rec.franchising_activity
198                                                             ) THEN
199             -- ADD excep to stack
200             FND_MESSAGE.SET_NAME('IGS','IGS_HE_FRANCH_ACT_NEX');
201             FND_MSG_PUB.ADD;
202             l_ret_value := 'E';
203         END IF;
204     END IF;
205 
206     -- Check if the Completion Status exists
207     IF p_hesa_susa_rec.completion_status IS NOT NULL THEN
208         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_CSTAT',
209                                                              x_value        => p_hesa_susa_rec.completion_status
210                                                             ) THEN
211             -- ADD excep to stack
212             FND_MESSAGE.SET_NAME('IGS','IGS_HE_COMP_STATUS_NEX');
213             FND_MSG_PUB.ADD;
214             l_ret_value := 'E';
215         END IF;
216     END IF;
217 
218     -- Check if the Good Standing Marker exists
219     IF p_hesa_susa_rec.good_stand_marker IS NOT NULL THEN
220         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_PROGRESS',
221                                                              x_value        => p_hesa_susa_rec.good_stand_marker
222                                                             ) THEN
223             -- ADD excep to stack
224             FND_MESSAGE.SET_NAME('IGS','IGS_HE_GOOD_STAND_NEX');
225             FND_MSG_PUB.ADD;
226             l_ret_value := 'E';
227         END IF;
228     END IF;
229 
230     -- Check if the Complete PYR Study exists
231     IF p_hesa_susa_rec.complete_pyr_study_cd IS NOT NULL THEN
232         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_FUNDCOMP',
233                                                              x_value        => p_hesa_susa_rec.complete_pyr_study_cd
234                                                             ) THEN
235             -- ADD excep to stack
236             FND_MESSAGE.SET_NAME('IGS','IGS_HE_COMP_PYR_STUDY_NEX');
237             FND_MSG_PUB.ADD;
238             l_ret_value := 'E';
239         END IF;
240     END IF;
241 
242     -- Check if the Fundability Code exists
243     IF p_hesa_susa_rec.fundability_code IS NOT NULL THEN
244         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_FUND_CODE',
245                                                              x_value        => p_hesa_susa_rec.fundability_code
246                                                             ) THEN
247             -- ADD excep to stack
248             FND_MESSAGE.SET_NAME('IGS','IGS_HE_FUNDB_CODE_NEX');
249             FND_MSG_PUB.ADD;
250             l_ret_value := 'E';
251         END IF;
252     END IF;
253 
254     -- Check if the Fee Eligibility exists
255     IF p_hesa_susa_rec.fee_eligibility IS NOT NULL THEN
256         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_FEEELIG',
257                                                              x_value        => p_hesa_susa_rec.fee_eligibility
258                                                             )  THEN
259             -- ADD excep to stack
260             FND_MESSAGE.SET_NAME('IGS','IGS_HE_FEE_ELGBL_NEX');
261             FND_MSG_PUB.ADD;
262             l_ret_value := 'E';
263         END IF;
264     END IF;
265 
266     -- Check if the Fee Band exists
267     IF p_hesa_susa_rec.fee_band IS NOT NULL THEN
268         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_FEEBAND',
269                                                              x_value        => p_hesa_susa_rec.fee_band
270                                                             ) THEN
271             -- ADD excep to stack
272             FND_MESSAGE.SET_NAME('IGS','IGS_HE_FEE_BAND_NEX');
273             FND_MSG_PUB.ADD;
274             l_ret_value := 'E';
275         END IF;
276     END IF;
277 
278     -- Check if the Non Payment Reason exists
279     IF p_hesa_susa_rec.non_payment_reason IS NOT NULL THEN
280         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_NONPAY',
281                                                              x_value        => p_hesa_susa_rec.non_payment_reason
282                                                             ) THEN
283             -- ADD excep to stack
284             FND_MESSAGE.SET_NAME('IGS','IGS_HE_NOPAY_REASON_NEX');
285             FND_MSG_PUB.ADD;
286             l_ret_value := 'E';
287         END IF;
288     END IF;
289 
290     -- Check if the Student Fee exists
291     IF p_hesa_susa_rec.student_fee IS NOT NULL THEN
292         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_MSTUFEE',
293                                                              x_value        => p_hesa_susa_rec.student_fee
294                                                             ) THEN
295             -- ADD excep to stack
296             FND_MESSAGE.SET_NAME('IGS','IGS_HE_STUD_FEE_NEX');
297             FND_MSG_PUB.ADD;
298             l_ret_value := 'E';
299         END IF;
300     END IF;
301 
302     -- Check if the Type of Program Year exists
303     IF p_hesa_susa_rec.type_of_year IS NOT NULL THEN
304         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_TYPEYR',
305                                                              x_value        => p_hesa_susa_rec.type_of_year
306                                                             ) THEN
307             -- ADD excep to stack
308             FND_MESSAGE.SET_NAME('IGS','IGS_HE_TYPE_OF_YEAR_NEX');
309             FND_MSG_PUB.ADD;
310             l_ret_value := 'E';
311         END IF;
312     END IF;
313 
314     -- Check if the Eligibility for Enhanced Funding Indicator exists
315     IF p_hesa_susa_rec.enh_fund_elig_cd IS NOT NULL THEN
316         IF NOT igs_he_code_values_pkg.get_pk_for_validation (x_code_type    => 'OSS_ELIGENFD',
317                                                              x_value        => p_hesa_susa_rec.enh_fund_elig_cd
318                                                             ) THEN
319             -- ADD excep to stack
320             FND_MESSAGE.SET_NAME('IGS','IGS_HE_ELIG_ENH_FUND_NEX');
321             FND_MSG_PUB.ADD;
322             l_ret_value := 'E';
323         END IF;
324     END IF;
325 
326     -- Check if the Credit Level Achieved 1 exists
327     IF p_hesa_susa_rec.credit_level_achieved1 IS NOT NULL THEN
328         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level_achieved1) THEN
329             -- ADD excep to stack
330             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CR_LEVEL_ACHD1_NEX');
331             FND_MSG_PUB.ADD;
332             l_ret_value := 'E';
333         END IF;
334     END IF;
335 
336     -- Check if the Credit Level Achieved 2 exists
337     IF p_hesa_susa_rec.credit_level_achieved2 IS NOT NULL THEN
338         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level_achieved2) THEN
339             -- ADD excep to stack
340             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CR_LEVEL_ACHD2_NEX');
341             FND_MSG_PUB.ADD;
342             l_ret_value := 'E';
343         END IF;
344     END IF;
345 
346     -- Check if the Credit Level Achieved 3 exists
347     IF p_hesa_susa_rec.credit_level_achieved3 IS NOT NULL THEN
348         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level_achieved3) THEN
349             -- ADD excep to stack
350             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CR_LEVEL_ACHD3_NEX');
351             FND_MSG_PUB.ADD;
352             l_ret_value := 'E';
353         END IF;
354     END IF;
355 
356     -- Check if the Credit Level Achieved 4 exists
357     IF p_hesa_susa_rec.credit_level_achieved4 IS NOT NULL THEN
358         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level_achieved4) THEN
359             -- ADD excep to stack
360             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CR_LEVEL_ACHD4_NEX');
361             FND_MSG_PUB.ADD;
362             l_ret_value := 'E';
363         END IF;
364     END IF;
365 
366     -- Check if the Credit Level 1 exists
367     IF p_hesa_susa_rec.credit_level1 IS NOT NULL THEN
368         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level1) THEN
369             -- ADD excep to stack
370             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CREDIT_LEVEL1_NEX');
371             FND_MSG_PUB.ADD;
372             l_ret_value := 'E';
373         END IF;
374     END IF;
375 
376     -- Check if the Credit Level 2 exists
377     IF p_hesa_susa_rec.credit_level2 IS NOT NULL THEN
378         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level2) THEN
379             -- ADD excep to stack
380             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CREDIT_LEVEL2_NEX');
381             FND_MSG_PUB.ADD;
382             l_ret_value := 'E';
383         END IF;
384     END IF;
385 
386     -- Check if the Credit Level 3 exists
387     IF p_hesa_susa_rec.credit_level3 IS NOT NULL THEN
388         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level3) THEN
389             -- ADD excep to stack
390             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CREDIT_LEVEL3_NEX');
391             FND_MSG_PUB.ADD;
392             l_ret_value := 'E';
393         END IF;
394     END IF;
395 
396     -- Check if the Credit Level 4 exists
397     IF p_hesa_susa_rec.credit_level4 IS NOT NULL THEN
398         IF NOT igs_ps_unit_level_pkg.get_pk_for_validation (x_unit_level => p_hesa_susa_rec.credit_level4) THEN
399             -- ADD excep to stack
400             FND_MESSAGE.SET_NAME('IGS','IGS_HE_CREDIT_LEVEL4_NEX');
401             FND_MSG_PUB.ADD;
402             l_ret_value := 'E';
403         END IF;
404     END IF;
405 
406     -- bug #3547382
407     -- Check whether the Credit Value Year of Program 1 field
408     -- is within range 0 to 999 (inclusive)
409     IF p_hesa_susa_rec.credit_value_yop1 IS NOT NULL THEN
410        IF NOT p_hesa_susa_rec.credit_value_yop1 between 0 and 999 THEN
411              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CV_YOP1_RANGE_INVALID');
412              FND_MSG_PUB.ADD;
413              l_ret_value := 'E';
414        END IF;
415     END IF;
416 
417     -- bug #3547382
418     -- Check whether the Credit Value Year of Program 2 field
419     -- is within range 0 to 999 (inclusive)
420     IF p_hesa_susa_rec.credit_value_yop2 IS NOT NULL THEN
421        IF NOT p_hesa_susa_rec.credit_value_yop2 between 0 and 999 THEN
422              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CV_YOP2_RANGE_INVALID');
423              FND_MSG_PUB.ADD;
424              l_ret_value := 'E';
425        END IF;
426     END IF;
427 
428     -- Check whether the Credit Value Year of Program 3 field
429     -- is within range 0 to 999 (inclusive)
430     IF p_hesa_susa_rec.credit_value_yop3 IS NOT NULL THEN
431        IF NOT p_hesa_susa_rec.credit_value_yop3 between 0 and 999 THEN
432              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CV_YOP3_RANGE_INVALID');
433              FND_MSG_PUB.ADD;
434              l_ret_value := 'E';
435        END IF;
436     END IF;
437 
438     -- Check whether the Credit Value Year of Program 4 field
439     -- is within range 0 to 999 (inclusive)
440     IF p_hesa_susa_rec.credit_value_yop4 IS NOT NULL THEN
441        IF NOT p_hesa_susa_rec.credit_value_yop4 between 0 and 999 THEN
442              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CV_YOP4_RANGE_INVALID');
443              FND_MSG_PUB.ADD;
444              l_ret_value := 'E';
445        END IF;
446     END IF;
447 
448     -- Check whether the Year Of Student field is within range 0 to 39 (inclusive)
449     IF p_hesa_susa_rec.year_stu IS NOT NULL THEN
450        IF NOT p_hesa_susa_rec.year_stu between 0 and 39 THEN
451              FND_MESSAGE.SET_NAME('IGS','IGS_HE_YEAR_STU_INVALID');
452              FND_MSG_PUB.ADD;
453              l_ret_value := 'E';
454        END IF;
455     END IF;
456 
457     -- bug #3547394
458     -- Check whether the Number of Credit Points obtained 1 field
459     -- is within range 0 to 999 (inclusive)
460     IF p_hesa_susa_rec.credit_pt_achieved1 IS NOT NULL THEN
461        IF NOT p_hesa_susa_rec.credit_pt_achieved1 between 0 and 999 THEN
462              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CP_ACH1_INVALID');
463              FND_MSG_PUB.ADD;
464              l_ret_value := 'E';
465        END IF;
466     END IF;
467 
468     -- bug #3547394
469     -- Check whether the Number of Credit Points obtained 2 field
470     -- is within range 0 to 999 (inclusive)
471     IF p_hesa_susa_rec.credit_pt_achieved2 IS NOT NULL THEN
472        IF NOT p_hesa_susa_rec.credit_pt_achieved2 between 0 and 999 THEN
473              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CP_ACH2_INVALID');
474              FND_MSG_PUB.ADD;
475              l_ret_value := 'E';
476        END IF;
477     END IF;
478 
479     -- Check whether the Number of Credit Points obtained 3 field
480     -- is within range 0 to 999 (inclusive)
481     IF p_hesa_susa_rec.credit_pt_achieved3 IS NOT NULL THEN
482        IF NOT p_hesa_susa_rec.credit_pt_achieved3 between 0 and 999 THEN
483              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CP_ACH3_INVALID');
484              FND_MSG_PUB.ADD;
485              l_ret_value := 'E';
486        END IF;
487     END IF;
488 
489     -- Check whether the Number of Credit Points obtained 4 field
490     -- is within range 0 to 999 (inclusive)
491     IF p_hesa_susa_rec.credit_pt_achieved4 IS NOT NULL THEN
492        IF NOT p_hesa_susa_rec.credit_pt_achieved4 between 0 and 999 THEN
493              FND_MESSAGE.SET_NAME('IGS','IGS_HE_CP_ACH4_INVALID');
494              FND_MSG_PUB.ADD;
495              l_ret_value := 'E';
496        END IF;
497     END IF;
498 
499     -- bug #3547402
500     -- Check whether the Proportion not taught by institution field
501     -- is within the range 0 to 100 (inclusive)
502     IF p_hesa_susa_rec.pro_not_taught IS NOT NULL THEN
503        IF NOT p_hesa_susa_rec.pro_not_taught between 0 and 100 THEN
504              FND_MESSAGE.SET_NAME('IGS','IGS_HE_PRO_NOT_TAUGHT_INVALID');
505              FND_MSG_PUB.ADD;
506              l_ret_value := 'E';
507        END IF;
508     END IF;
509 
510     -- bug #3547402
511     -- Check whether the FTE Intensity field is within range 0 to 300 (inclusive)
512     IF p_hesa_susa_rec.fte_intensity IS NOT NULL THEN
513        IF NOT p_hesa_susa_rec.fte_intensity between 0 and 300 THEN
514              FND_MESSAGE.SET_NAME('IGS','IGS_HE_FTE_INTENSITY_INVALID');
515              FND_MSG_PUB.ADD;
516              l_ret_value := 'E';
517        END IF;
518     END IF;
519 
520     -- bug #3547416
521     -- Check whether the FTE Calculation type is a valid value from IGS Lookups with type
522     -- IGS_HE_FTE_CALC_TYPE
523     IF p_hesa_susa_rec.fte_calc_type IS NOT NULL THEN
524        OPEN c_fte_calc_type;
525        FETCH c_fte_calc_type INTO l_dummy;
526        IF c_fte_calc_type%NOTFOUND THEN
527              FND_MESSAGE.SET_NAME('IGS','IGS_HE_FTE_CTYPE_RANGE_NEX');
528              FND_MSG_PUB.ADD;
529              l_ret_value := 'E';
530        END IF;
531        CLOSE c_fte_calc_type;
532     END IF;
533 
534     -- bug #3547420
535     -- Check whether the FTE Intensity field is within range 0 to 300 (inclusive)
536     IF p_hesa_susa_rec.fte_perc_override IS NOT NULL THEN
537        IF NOT p_hesa_susa_rec.fte_perc_override between 0 and 300 THEN
538              FND_MESSAGE.SET_NAME('IGS','IGS_HE_FTE_PERC_OVR_INVALID');
539              FND_MSG_PUB.ADD;
540              l_ret_value := 'E';
541        END IF;
542     END IF;
543 
544     -- Check whether the Additional Support Cost field is within range 0 to 999999 (inclusive)
545     IF p_hesa_susa_rec.additional_sup_cost IS NOT NULL THEN
546        IF NOT p_hesa_susa_rec.additional_sup_cost between 0 and 999999 THEN
547              FND_MESSAGE.SET_NAME('IGS','IGS_HE_ADD_SUPP_COST_INVALID');
548              FND_MSG_PUB.ADD;
549              l_ret_value := 'E';
550        END IF;
551     END IF;
552 
553     -- Check whether the Disadvantage Uplift Factor field is within
554     -- range 0.0000 to 9.9999 (inclusive)
555     IF p_hesa_susa_rec.disadv_uplift_factor IS NOT NULL THEN
556        IF NOT p_hesa_susa_rec.disadv_uplift_factor between 0.0000 and 9.9999 THEN
557              FND_MESSAGE.SET_NAME('IGS','IGS_HE_DIS_UPLIFT_FTR_INVALID');
558              FND_MSG_PUB.ADD;
559              l_ret_value := 'E';
560        END IF;
561     END IF;
562 
563     -- Check if the Grading Schema Grade exists
564     IF p_hesa_susa_rec.grad_sch_grade IS NOT NULL THEN
565         IF NOT igs_en_hesa_pkg.check_grading_sch_grade (p_person_id        => p_person_id,
566                                                         p_program_cd       => p_hesa_susa_rec.program_cd,
567                                                         p_unit_set_cd      => p_hesa_susa_rec.unit_set_cd,
568                                                         p_grad_sch_grade   => p_hesa_susa_rec.grad_sch_grade) THEN
569             -- ADD excep to stack
570             FND_MESSAGE.SET_NAME('IGS','IGS_HE_GRD_SCH_GRADE_NEX');
571             FND_MSG_PUB.ADD;
572             l_ret_value := 'E';
573         END IF;
574     END IF;
575 
576     -- Check if the Teaching Institution 1 exists
577     IF p_hesa_susa_rec.teaching_inst1 IS NOT NULL THEN
578         IF NOT igs_en_hesa_pkg.check_teach_inst (p_teaching_inst => p_hesa_susa_rec.teaching_inst1) THEN
579             -- ADD excep to stack
580             FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_INST1_POSTSEC_NEX');
581             FND_MSG_PUB.ADD;
582             l_ret_value := 'E';
583         END IF;
584     END IF;
585 
586     -- Check if the Teaching Institution 2 exists
587     IF p_hesa_susa_rec.teaching_inst2 IS NOT NULL THEN
588         IF NOT igs_en_hesa_pkg.check_teach_inst (p_teaching_inst => p_hesa_susa_rec.teaching_inst2) THEN
589             -- ADD excep to stack
590             FND_MESSAGE.SET_NAME('IGS','IGS_HE_TCH_INST2_POSTSEC_NEX');
591             FND_MSG_PUB.ADD;
592             l_ret_value := 'E';
593         END IF;
594     END IF;
595 
596     RETURN l_ret_value;
597 
598 END validate_db_cons;
599 
600 
601 
602 FUNCTION validate_hesa_susa (p_us_version_number    IN   NUMBER,
603                              p_hesa_susa_rec        IN   hesa_susa_rec_type
604                              ) RETURN BOOLEAN AS
605 l_br_val_failed BOOLEAN := FALSE;
606 /*----------------------------------------------------------------------------
607 ||  Created By : prraj
608 ||  Created On : 05-11-2002
609 ||  Purpose : Perform business validations for the HESA Student Unit Set Attempt
610 ||  Known limitations, enhancements or remarks :
611 ||  Change History :
612 ||  Who             When            What
613 ------------------------------------------------------------------------------*/
614 BEGIN
615 
616     -- Validating whether the unit set category is of type Pre-enrollment
617     IF 'PRENRL_YR' <> igs_en_hesa_pkg.get_unit_set_cat (p_unit_set_cd          => p_hesa_susa_rec.unit_set_cd,
618                                                         p_us_version_number    => p_us_version_number) THEN
619         -- ADD excep to stack
620         FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUSA_PRE_YEAR_US');
621         FND_MSG_PUB.ADD;
622       l_br_val_failed := TRUE;
623     END IF;
624 
625    -- Check whether any validation failed, if yes then return FALSE otherwise return TRUE
626    IF l_br_val_failed THEN
627      RETURN FALSE;
628    ELSE
629      RETURN TRUE;
630    END IF;
631 
632 END validate_hesa_susa;
633 
634 
635 PROCEDURE create_hesa_susa (p_api_version           IN   NUMBER,
636                             p_init_msg_list         IN   VARCHAR2,
637                             p_commit                IN   VARCHAR2,
638                             p_validation_level      IN   NUMBER,
639                             p_hesa_susa_rec         IN   hesa_susa_rec_type,
640                             x_return_status         OUT  NOCOPY VARCHAR2,
641                             x_msg_count             OUT  NOCOPY NUMBER,
642                             x_msg_data              OUT  NOCOPY VARCHAR2) AS
643 
644 /*----------------------------------------------------------------------------
645 ||  Created By : prraj
646 ||  Created On : 05-11-2002
647 ||  Purpose : To create a HESA Student Unit Set Attempt
648 ||  Known limitations, enhancements or remarks :
649 ||  Change History :
650 ||  Who             When            What
651 ||  jtmathew    21-Sep-2004      Modified INSERT statement to accommodate the new
652 ||                               fields described in HEFD350.
653 ------------------------------------------------------------------------------*/
654 
655     l_api_name              CONSTANT    VARCHAR2(30) := 'create_hesa_susa';
656     l_api_version           CONSTANT    NUMBER       := 1.0;
657 
658     l_insert_flag           BOOLEAN := TRUE;
659     l_ret_val               VARCHAR2(1) := NULL;
660 
661     l_person_id             igs_he_en_susa.person_id%TYPE;
662     l_sequence_number       igs_he_en_susa.sequence_number%TYPE;
663     l_us_version_number     igs_he_en_susa.us_version_number%TYPE;
664     l_hesa_en_susa_id       igs_he_en_susa.hesa_en_susa_id%TYPE;
665 
666     l_creation_date         igs_he_en_susa.creation_date%TYPE;
667     l_last_update_date      igs_he_en_susa.last_update_date%TYPE;
668     l_created_by            igs_he_en_susa.created_by%TYPE;
669     l_last_updated_by       igs_he_en_susa.last_updated_by%TYPE;
670     l_last_update_login     igs_he_en_susa.last_update_login%TYPE;
671 
672 BEGIN
673 
674     -- Create a savepoint
675     SAVEPOINT    create_hesa_susa_pub;
676 
677     -- Check for the Compatible API call
678     IF NOT FND_API.COMPATIBLE_API_CALL(  l_api_version,
679                                          p_api_version,
680                                          l_api_name,
681                                          g_pkg_name) THEN
682 
683       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
684     END IF;
685 
686     -- If the calling program has passed the parameter for initializing the message list
687     IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
688       FND_MSG_PUB.INITIALIZE;
689     END IF;
690 
691     -- Set the return status to success
692     x_return_status := FND_API.G_RET_STS_SUCCESS;
693 
694 
695     -- Check whether the country profile value is GB
696     IF NVL(FND_PROFILE.VALUE('OSS_COUNTRY_CODE'),'NONE') <> 'GB' THEN
697         FND_MESSAGE.SET_NAME ('IGS','IGS_UC_HE_NOT_ENABLED');
698         FND_MSG_PUB.ADD;
699         x_return_status := FND_API.G_RET_STS_ERROR;
700         l_insert_flag := FALSE;
701     END IF;
702 
703 
704     -- // Validate input paramaters ---------
705     IF l_insert_flag THEN
706         IF NOT validate_parameters(p_hesa_susa_rec) THEN
707             x_return_status := FND_API.G_RET_STS_ERROR;
708             l_insert_flag := FALSE;
709         END IF;
710     END IF;
711 
712 
713     -- Derivations ----------------------------------
714 
715     -- Person ID
716     IF l_insert_flag THEN
717         l_person_id := igs_ge_gen_003.get_person_id (p_person_number => p_hesa_susa_rec.person_number);
718 
719         IF l_person_id IS NULL THEN
720             -- ADD excep to stack
721             FND_MESSAGE.SET_NAME('IGS','IGS_GE_INVALID_PERSON_NUMBER');
722             FND_MSG_PUB.ADD;
723             x_return_status := FND_API.G_RET_STS_ERROR;
724             l_insert_flag := FALSE;
725         END IF;
726     END IF;
727 
728     -- Sequence number and unit set version number
729     IF l_insert_flag THEN
730         igs_ge_gen_003.get_susa_sequence_num (p_person_id         => l_person_id,
731                                               p_program_cd        => p_hesa_susa_rec.program_cd,
732                                               p_unit_set_cd       => p_hesa_susa_rec.unit_set_cd,
733                                               p_us_version_number => l_us_version_number,
734                                               p_sequence_number   => l_sequence_number);
735 
736         IF l_us_version_number IS NULL OR l_sequence_number IS NULL THEN
737             -- ADD excep to stack
738             FND_MESSAGE.SET_NAME('IGS','IGS_HE_SUSA_REC_NEX');
739             FND_MSG_PUB.ADD;
740             x_return_status := FND_API.G_RET_STS_ERROR;
741             l_insert_flag := FALSE;
742         END IF;
743     END IF;
744 
745 
746     -- Validate database constraints
747     IF l_insert_flag THEN
748         l_ret_val := validate_db_cons(p_person_id       => l_person_id,
749                                       p_sequence_number => l_sequence_number,
750                                       p_hesa_susa_rec   => p_hesa_susa_rec);
751 
752         IF l_ret_val = 'E' THEN
753             x_return_status := FND_API.G_RET_STS_ERROR;
754             l_insert_flag := FALSE;
755         ELSIF l_ret_val = 'W' THEN
756             x_return_status := 'W';
757             l_insert_flag := FALSE;
758         END IF;
759     END IF;
760 
761 
762     -- Business validation
763     IF l_insert_flag THEN
764         IF NOT validate_hesa_susa (p_us_version_number  => l_us_version_number,
765                                    p_hesa_susa_rec      => p_hesa_susa_rec) THEN
766             x_return_status := FND_API.G_RET_STS_ERROR;
767             l_insert_flag := FALSE;
768         END IF;
769     END IF;
770 
771 
772 
773     -- Perform direct insert on IGS_HE_EN_SUSA
774     IF l_insert_flag THEN
775 
776         l_creation_date := SYSDATE;
777         l_created_by := FND_GLOBAL.USER_ID;
778 
779         l_last_update_date := SYSDATE;
780         l_last_updated_by := FND_GLOBAL.USER_ID;
781         l_last_update_login :=FND_GLOBAL.LOGIN_ID;
782 
783         IF l_created_by IS NULL THEN
784             l_created_by := -1;
785         END IF;
786 
787         IF l_last_updated_by IS NULL THEN
788             l_last_updated_by := -1;
789         END IF;
790 
791         IF l_last_update_login IS NULL THEN
792             l_last_update_login := -1;
793         END IF;
794 
795         -- Derive HESA_EN_SUSA_ID from sequence
796         SELECT    igs_he_en_susa_s.NEXTVAL
797         INTO      l_hesa_en_susa_id
798         FROM      dual;
799 
800 
801             INSERT INTO igs_he_en_susa (
802             hesa_en_susa_id,
803             person_id,
804             course_cd,
805             unit_set_cd,
806             us_version_number,
807             sequence_number,
808             new_he_entrant_cd,
809             term_time_accom,
810             disability_allow,
811             additional_sup_band,
812             sldd_discrete_prov,
813             study_mode,
814             study_location,
815             fte_perc_override,
816             franchising_activity,
817             completion_status,
818             good_stand_marker,
819             complete_pyr_study_cd,
820             credit_value_yop1,
821             credit_value_yop2,
822             credit_value_yop3,
823             credit_value_yop4,
824             credit_level_achieved1,
825             credit_level_achieved2,
826             credit_level_achieved3,
827             credit_level_achieved4,
828             credit_pt_achieved1,
829             credit_pt_achieved2,
830             credit_pt_achieved3,
831             credit_pt_achieved4,
832             credit_level1,
833             credit_level2,
834             credit_level3,
835             credit_level4,
836             grad_sch_grade,
837             mark,
838             teaching_inst1,
839             teaching_inst2,
840             pro_not_taught,
841             fundability_code,
842             fee_eligibility,
843             fee_band,
844             non_payment_reason,
845             student_fee,
846             fte_intensity,
847             calculated_fte,
848             fte_calc_type,
849             type_of_year,
850             year_stu,
851             enh_fund_elig_cd,
852             additional_sup_cost,
853             disadv_uplift_factor,
854             creation_date,
855             created_by,
856             last_update_date,
857             last_updated_by,
858             last_update_login)
859             VALUES (
860             l_hesa_en_susa_id,
861             l_person_id,
862             p_hesa_susa_rec.program_cd,
863             p_hesa_susa_rec.unit_set_cd,
864             l_us_version_number,
865             l_sequence_number,
866             p_hesa_susa_rec.new_he_entrant_cd,
867             p_hesa_susa_rec.term_time_accom,
868             p_hesa_susa_rec.disability_allow,
869             p_hesa_susa_rec.additional_sup_band,
870             p_hesa_susa_rec.sldd_discrete_prov,
871             p_hesa_susa_rec.study_mode,
872             p_hesa_susa_rec.study_location,
873             p_hesa_susa_rec.fte_perc_override,
874             p_hesa_susa_rec.franchising_activity,
875             p_hesa_susa_rec.completion_status,
876             p_hesa_susa_rec.good_stand_marker,
877             p_hesa_susa_rec.complete_pyr_study_cd,
878             p_hesa_susa_rec.credit_value_yop1,
879             p_hesa_susa_rec.credit_value_yop2,
880             p_hesa_susa_rec.credit_value_yop3,
881             p_hesa_susa_rec.credit_value_yop4,
882             p_hesa_susa_rec.credit_level_achieved1,
883             p_hesa_susa_rec.credit_level_achieved2,
884             p_hesa_susa_rec.credit_level_achieved3,
885             p_hesa_susa_rec.credit_level_achieved4,
886             p_hesa_susa_rec.credit_pt_achieved1,
887             p_hesa_susa_rec.credit_pt_achieved2,
888             p_hesa_susa_rec.credit_pt_achieved3,
889             p_hesa_susa_rec.credit_pt_achieved4,
890             p_hesa_susa_rec.credit_level1,
891             p_hesa_susa_rec.credit_level2,
892             p_hesa_susa_rec.credit_level3,
893             p_hesa_susa_rec.credit_level4,
894             p_hesa_susa_rec.grad_sch_grade,
895             p_hesa_susa_rec.mark,
896             p_hesa_susa_rec.teaching_inst1,
897             p_hesa_susa_rec.teaching_inst2,
898             p_hesa_susa_rec.pro_not_taught,
899             p_hesa_susa_rec.fundability_code,
900             p_hesa_susa_rec.fee_eligibility,
901             p_hesa_susa_rec.fee_band,
902             p_hesa_susa_rec.non_payment_reason,
903             p_hesa_susa_rec.student_fee,
904             p_hesa_susa_rec.fte_intensity,
905             p_hesa_susa_rec.calculated_fte,
906             p_hesa_susa_rec.fte_calc_type,
907             p_hesa_susa_rec.type_of_year,
908             p_hesa_susa_rec.year_stu,
909             p_hesa_susa_rec.enh_fund_elig_cd,
910             p_hesa_susa_rec.additional_sup_cost,
911             p_hesa_susa_rec.disadv_uplift_factor,
912             l_creation_date,
913             l_created_by,
914             l_last_update_date,
915             l_last_updated_by,
916             l_last_update_login);
917 
918     ELSE
919         ROLLBACK TO create_hesa_susa_pub;
920     END IF;
921 
922 
923 
924     -- If the calling program has passed the parameter for committing the data and there
925     -- have been no errors in calling the balances process, then commit the work
926     IF ( (FND_API.TO_BOOLEAN(p_commit)) AND (l_insert_flag) ) THEN
927       COMMIT WORK;
928     END IF;
929 
930 
931     FND_MSG_PUB.COUNT_AND_GET( p_count   => x_msg_count,
932                                p_data    => x_msg_data);
933 
934 
935     EXCEPTION
936         WHEN FND_API.G_EXC_ERROR THEN
937           ROLLBACK TO create_hesa_susa_pub;
938           x_return_status := FND_API.G_RET_STS_ERROR;
939           FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
940                                      p_data           => x_msg_data);
941         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
942           ROLLBACK TO create_hesa_susa_pub;
943           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
944           FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
945                                      p_data           => x_msg_data);
946         WHEN OTHERS THEN
947           ROLLBACK TO create_hesa_susa_pub;
948           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
949           IF FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
950             FND_MSG_PUB.ADD_EXC_MSG(g_pkg_name,
951                                     l_api_name);
952           END IF;
953           FND_MSG_PUB.COUNT_AND_GET( p_count          => x_msg_count,
954                                      p_data           => x_msg_data);
955 
956 
957 END create_hesa_susa;
958 
959 
960 
961 END igs_he_susa_lgcy_pub;