DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGF_SL_DL_VALIDATION

Source


1 PACKAGE BODY igf_sl_dl_validation AS
2 /* $Header: IGFSL02B.pls 120.7 2006/04/26 06:59:16 rajagupt ship $ */
3 --------------------------------------------------------------------------
4 -- museshad     28-Nov-2005      Bug 4116399.
5 --                               Added Stafford loan limit validation check in
6 --                               cod_loan_validations() and dl_lar_validate()
7 --------------------------------------------------------------------------
8 -- veramach     04-May-2004     bug 3603289
9 --                              (a) Modified cursor cur_student_licence to select
10 --                              dependency_status from ISIR. other details are
11 --                              derived from igf_sl_gen.get_person_details.
12 --                              (b) Modified logic dl_lar_validate so that the loop
13 --                              executes whenever called from FORM.
14 --------------------------------------------------------------------------
15 -- sjadhav, Jan 26,2002
16 -- Bug 2154941
17 -- Modified usages of cur_disb to reflect the completion
18 -- status of a loan
19 --
20 -------------------------------------------------------------------------
21 
22 p_dl_version     igf_lookups_view.lookup_code%TYPE;
23 g_loan_id        igf_sl_Loans_all.loan_id%TYPE;
24 student_dtl_rec  igf_sl_gen.person_dtl_rec;
25 parent_dtl_rec   igf_sl_gen.person_dtl_rec;
26 
27 CURSOR  cur_disb(c_award_id  igf_aw_awd_disb.award_id%TYPE) IS
28 SELECT COUNT(*) disb_count FROM igf_aw_awd_disb_all
29 WHERE  award_id = c_award_id
30 AND    (   nvl(disb_gross_amt,0)  <= 0
31         OR nvl(fee_1         ,0)  <= 0
32         OR nvl(disb_net_amt  ,0)  <= 0);
33 
34 CURSOR cur_isir(p_base_id igf_ap_fa_base_rec.base_id%TYPE) is
35 SELECT isr.dependency_status   s_depncy_status
36   FROM igf_ap_isir_matched_all  isr
37  WHERE isr.base_id            = p_base_id
38    AND isr.payment_isir       = 'Y'
39    AND isr.system_record_type = 'ORIGINAL';
40 
41 -- Cursor to get number of disbursements. COD-XML build.
42 CURSOR cur_get_no_of_disbursements ( cp_award_id igf_aw_awd_disb.award_id%TYPE) IS
43 SELECT  COUNT(*) disb_count
44   FROM  igf_aw_awd_disb_all disb
45  WHERE  disb.award_id = cp_award_id;
46 
47 CURSOR cur_special_school ( cp_cal_type   igf_ap_fa_base_rec.ci_cal_type%TYPE,
48                             cp_seq_number igf_ap_fa_base_rec.ci_sequence_number%TYPE) IS
49 SELECT  dlsetup.special_school
50   FROM  igf_sl_dl_setup_all dlsetup
51  WHERE  dlsetup.ci_cal_type = cp_cal_type
52    AND  dlsetup.ci_sequence_number = cp_seq_number;
53 
54 CURSOR cur_isir_info (p_base_id NUMBER) IS
55 SELECT  payment_isir,transaction_num,dependency_status,
56         date_of_birth,current_ssn,last_name
57   FROM  igf_ap_isir_matched_all
58   WHERE base_id      = p_base_id
59   AND   payment_isir = 'Y'
60   AND   system_record_type = 'ORIGINAL';
61 
62 CURSOR  cur_loan_at_cod ( cp_loan_number  igf_sl_loans_all.loan_number%TYPE)  IS
63   SELECT  'x'
64     FROM  igf_sl_lor_loc_history
65    WHERE  loan_number = cp_loan_number;
66 
67 isir_info_rec cur_isir_info%ROWTYPE;
68 
69 
70 FUNCTION  check_for_reqd(p_loan_number   igf_sl_loans.loan_number%TYPE,
71                          p_loan_catg     igf_sl_reqd_fields.loan_type%TYPE,
72                          p_field_name    igf_sl_reqd_fields.field_name%TYPE,
73                          p_field_value   VARCHAR2
74 ) RETURN BOOLEAN
75 AS
76   /*************************************************************
77   Created By : venagara
78   Date Created On : 2000/11/07
79   Purpose :
80   Know limitations, enhancements or remarks
81   Change History
82   Who             When            What
83 
84   (reverse chronological order - newest change first)
85   ***************************************************************/
86 
87   lv_complete    BOOLEAN := TRUE;
88   lv_err_type    fnd_lookups.lookup_type%TYPE;
89   lv_data_reqd   fnd_lookups.lookup_code%TYPE;
90   lv_data_recomm fnd_lookups.lookup_code%TYPE;
91 
92   CURSOR cur_reqd IS
93   SELECT status from igf_sl_reqd_fields lrf
94   WHERE  lrf.spec_version = p_dl_version
95   AND    lrf.loan_type    = p_loan_catg
96   AND    lrf.field_name   = p_field_name;
97 
98 BEGIN
99 
100   lv_err_type    := 'IGF_SL_ERR_CODES';
101   lv_data_reqd   := 'DATA_REQD';
102   lv_data_recomm := 'DATA_RECOMM';
103 
104   IF p_field_name LIKE '%ADDR%' THEN
105     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
106       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.check_for_reqd.debug','p_field_name = ' ||p_field_name);
107     END IF;
108     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
109       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.check_for_reqd.debug','p_field_value = ' ||p_field_value);
110     END IF;
111     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
112       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.check_for_reqd.debug','p_dl_version = ' ||p_dl_version);
113     END IF;
114     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
115       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.check_for_reqd.debug','p_loan_catg = ' ||p_loan_catg);
116     END IF;
117   END IF;
118 
119   IF TRIM(p_field_value) IS NULL THEN
120 
121     FOR irec IN cur_reqd LOOP
122 
123       IF irec.status = 'R' THEN
124          -- If the Data is required.
125          lv_complete := FALSE;
126          igf_sl_edit.insert_edit(p_loan_number, 'V', lv_err_type, lv_data_reqd, p_field_name, p_field_value);
127 
128       ELSIF irec.status = 'S' THEN
129          -- If the Data is strongly recommended.
130          igf_sl_edit.insert_edit(p_loan_number, 'V', lv_err_type, lv_data_recomm, p_field_name, p_field_value);
131 
132       END IF;
133 
134     END LOOP;
135 
136   END IF;
137 
138   RETURN lv_complete;
139 
140 EXCEPTION
141 WHEN others THEN
142    fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
143    fnd_message.set_token('NAME','igf_sl_dl_validation.check_for_reqd');
144    igs_ge_msg_stack.add;
145    app_exception.raise_exception;
146 END check_for_reqd;
147 
148 FUNCTION get_system_grade_level(p_base_id             IN  igf_ap_fa_base_rec_all.base_id%TYPE,
149                                 p_loan_per_begin_date IN  DATE,
150                                 p_loan_per_end_date   IN  DATE
151                                )
152 RETURN VARCHAR2
153 IS
154   /*************************************************************
155   Created By : Uday Kiran Reddy
156   Date Created On : May 05, 2005
157   Purpose :
158   Know limitations, enhancements or remarks
159   Change History
160   Who        When         What
161   ugummall   05-MAY-2005  Bug 4346421. <STUDENTLEVELCODE> tag in DL Outbound XML showing wrong value.
162                           Matching override_grade_level_code/grade_level_code with system value.
163 
164   (reverse chronological order - newest change first)
165   ***************************************************************/
166 
167   CURSOR  cur_get_person_id(cp_base_id NUMBER) IS
168     SELECT  person_id
169       FROM  IGF_AP_FA_BASE_REC_ALL
170      WHERE  base_id = cp_base_id;
171   person_id_rec cur_get_person_id%ROWTYPE;
172 
173   l_person_id          NUMBER;
174   l_class_standing     igs_pr_css_class_std_v.class_standing%TYPE := NULL;
175   l_course_cd          VARCHAR2(10);
176   l_ver_number         NUMBER;
177   l_course_type        igs_ps_ver.course_type%TYPE;
178   l_cutoff_date        DATE;
179   l_pred_flag          VARCHAR2(1);
180   l_dl_std_code        igf_ap_class_std_map.dl_std_code%TYPE;
181   l_cl_std_code        igf_ap_class_std_map.cl_std_code%TYPE;
182 
183 BEGIN
184 
185   l_class_standing := NULL;
186 
187   OPEN cur_get_person_id (p_base_id);
188   FETCH cur_get_person_id INTO person_id_rec;
189   CLOSE cur_get_person_id;
190   l_person_id := person_id_rec.person_id;
191 
192   -- Call generic API get_key_program to get the cource code
193   igf_ap_gen_001.get_key_program(p_base_id, l_course_cd, l_ver_number);
194   --igs_en_gen_015.get_academic_cal( l_person_id,l_course_cd,l_acad_cal_type,l_acad_seq_num,l_message,NULL);
195 
196   l_cutoff_date := TRUNC(SYSDATE);
197 
198   --1.  If SYSDATE is before Loan Period Begin Date, then use Predictive Class Standing
199   IF l_cutoff_date < p_loan_per_begin_date THEN
200     l_pred_flag   := 'Y';
201     l_cutoff_date := p_loan_per_begin_date;
202   --2.  If SYSDATE is between Loan Period, then use Loan Period Begin Date as Effective Date to derive Grade Level
203   ELSIF l_cutoff_date < p_loan_per_end_date THEN
204     l_pred_flag   := 'N';
205     l_cutoff_date := p_loan_per_begin_date;
206   --3.  If SYSDATE is after Loan Period, then use Loan Period Begin Date as Effective Date to derive Grade Level
207   ELSE
208     l_pred_flag   := 'N';
209     l_cutoff_date := p_loan_per_begin_date;
210   END IF;
211 
212   l_class_standing := igs_pr_get_class_std.get_class_standing(
213                                                                 l_person_id,
214                                                                 l_course_cd,
215                                                                 l_pred_flag,
216                                                                 l_cutoff_date,
217                                                                 NULL,
218                                                                 NULL,'F');
219   l_course_type := igf_ap_gen_001.get_enrl_program_type(p_base_id);
220   igf_sl_lar_creation.get_dl_cl_std_code(p_base_id,
221                                          l_class_standing,
222                                          l_course_type,
223                                          l_dl_std_code,
224                                          l_cl_std_code);
225 
226   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
227     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.get_system_grade_level.debug','System Grade Level is : ' || l_dl_std_code || ' - ' || igf_aw_gen.lookup_desc('IGF_AP_GRADE_LEVEL',l_dl_std_code ));
228   END IF;
229 
230   RETURN l_dl_std_code;
231 
232 END get_system_grade_level;
233 
234 PROCEDURE loan_limit_validation (
235                                   p_base_id     IN          igf_ap_fa_base_rec_all.base_id%TYPE,
236                                   p_fund_type   IN          igf_aw_fund_cat.fed_fund_code%TYPE,
237                                   p_award_id    IN          igf_aw_award_all.award_id%TYPE,
238                                   p_msg_name    OUT NOCOPY  fnd_new_messages.message_name%TYPE
239                                 )
240 IS
241   /***************************************************************
242    Created By        :    museshad
243    Date Created By   :    23-Nov-2005
244    Purpose           :    Stafford loan limit validation
245    Known Limitations,Enhancements or Remarks
246    Change History    :
247    Who               When      What
248  ***************************************************************/
249   l_aid   NUMBER;
250 
251   CURSOR c_get_dist_plan(cp_award_id  igf_aw_award_all.award_id%TYPE)
252   IS
253     SELECT adplans_id
254     FROM igf_aw_award_all
255     WHERE award_id = cp_award_id;
256 
257   l_dist_plan_rec c_get_dist_plan%ROWTYPE;
258 
259 BEGIN
260   -- Log IN parameters
261   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
262     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.loan_limit_validation.debug','IN Param p_base_id= ' ||p_base_id);
263     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.loan_limit_validation.debug','IN Param p_fund_type= ' ||p_fund_type);
264     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.loan_limit_validation.debug','IN Param p_award_id= ' ||p_award_id);
265   END IF;
266 
267   l_aid := 0;
268   p_msg_name := NULL;
269 
270   OPEN c_get_dist_plan(p_award_id);
271   FETCH c_get_dist_plan INTO l_dist_plan_rec;
272   CLOSE c_get_dist_plan;
273 
274   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
275     fnd_log.string(fnd_log.level_statement,
276                   'igf.plsql.igf_sl_dl_validation.loan_limit_validation.debug',
277                   'Calling check_loan_limits() with parameters l_base_id/fund_type/l_award_id/l_adplans_id/ ' ||p_base_id|| '/' ||p_fund_type|| '/' ||p_award_id|| '/' ||l_dist_plan_rec.adplans_id);
278   END IF;
279 
280   igf_aw_packng_subfns.check_loan_limits (
281                                           l_base_id       =>  p_base_id,
282                                           fund_type       =>  p_fund_type,
283                                           l_award_id      =>  p_award_id,
284                                           l_adplans_id    =>  l_dist_plan_rec.adplans_id,
285                                           l_aid           =>  l_aid,
286                                           l_std_loan_tab  =>  NULL,
287                                           p_msg_name      =>  p_msg_name,
288                                           l_awd_period    =>  NULL,
289                                           l_called_from   =>  'NON-PACKAGING'
290                                          );
291 
292   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
293     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.loan_limit_validation.debug','check_loan_limits() returned with message ' ||p_msg_name);
294   END IF;
295 END loan_limit_validation;
296 
297 /* MAIN PROCEDURE */
298 FUNCTION  dl_lar_validate(p_ci_cal_type          igs_ca_inst_all.cal_type%TYPE,
299                           p_ci_sequence_number   igs_ca_inst_all.sequence_number%TYPE,
300                           p_loan_catg            fnd_lookups.lookup_code%TYPE,
301                           p_loan_number          igf_sl_loans_all.loan_number%TYPE,
302                           p_call_mode            VARCHAR2,
303                           p_school_code          VARCHAR2 )
304 RETURN BOOLEAN
305 AS
306   /*************************************************************
307   Created By : venagara
308   Date Created On : 2000/11/07
309   Purpose :
310   Know limitations, enhancements or remarks
311   Change History
312   Who        When        What
313   museshad   28-Nov-2005  Bug 4116399.
314                           Added Stafford loan limit validation check.
315   ugummall   22-OCT-2003  Bug 3102439. FA 126 - Multiple FA Offices.
316                           added one parameter p_school_code to this function.
317   bkkumar    30-sep-2003  Bug 3104228 Changed the cursor cur_loans
318                           containing igf_sl_lor_dtls_v with simple
319                           joins and got the details of student and parent
320                           from igf_sl_gen.get_person_details.
321                           Added the debugging log messages.
322 
323   gmuralid     3-July-2003    Bug 2995944 - Legacy Part 3 - FFELP Import
324                               Added legacy record flag as parameter to
325                               igf_sl_loans_pkg
326 
327   masehgal   # 2593215   removed begin/end dates fetching functions
328                          used procedure get_acad_cal_dtls instead
329                          added another validation to report acad cal not found
330   agairola        15-Mar-2002     Modified the IGF_SL_LOANS_PKG.UPDATE_ROW call
331                                   to include borrower determination as part of
332                                   Refunds DLD  2144600
333 
334   (reverse chronological order - newest change first)
335   ***************************************************************/
336 
337     lv_loan_catg            igf_sl_reqd_fields.loan_type%TYPE;
338     lv_loan_status          igf_sl_loans_all.loan_status%TYPE;
339     lv_s_depncy_status      igf_ap_isir_matched_all.dependency_status%TYPE;
340     lv_s_citizenship_status igf_ap_isir_matched_all.citizenship_status%TYPE;
341     lv_acad_cal_type        igs_ca_inst_all.cal_type%TYPE ;
342     lv_acad_seq_num         igs_ca_inst_all.sequence_number%TYPE ;
343     lv_acad_begin_date      igs_ca_inst_all.start_dt%TYPE;
344     lv_acad_end_date        igs_ca_inst_all.end_dt%TYPE;
345     l_status_1              igf_sl_loans_all.loan_status%TYPE;
346     l_status_2              igf_sl_loans_all.loan_status%TYPE;
347     l_status_3              igf_sl_loans_all.loan_status%TYPE;
348     l_fed_fund_1            igf_aw_fund_cat_all.fed_fund_code%TYPE;
349     l_fed_fund_2            igf_aw_fund_cat_all.fed_fund_code%TYPE;
350     student_dtl_cur         igf_sl_gen.person_dtl_cur;
351     parent_dtl_cur          igf_sl_gen.person_dtl_cur;
352     lv_message              VARCHAR2(100);
353     lv_complete             BOOLEAN;
354     lv_disb_count           NUMBER;
355     lv_special_school       VARCHAR2(30);
356     l_dl_std_code           igf_ap_class_std_map.dl_std_code%TYPE;
357     lv_dummy                varchar2(1);
358     lv_fed_fund_code        igf_aw_fund_cat_all.fed_fund_code%TYPE;
359     lv_msg_name             fnd_new_messages.message_name%TYPE;
360     lv_lookup_code          igf_lookups_view.lookup_code%TYPE;
361 
362     /***********************************************************************************
363      P_LOAN_CATG   : Valid values are DL_STAFFORD, DL_PLUS
364      P_LOAN_NUMBER : Possible values are "A particular Loan#" or NULL
365                      A valid Loan# will be passed from the Origination form and
366                      NULL will be passed as a default value from the concurrent job prog
367      P_CALL_MODE   : Valid values are JOB, FORM
368                      If invoked from FORM, then only a specific LOAN_NUMBER can be passed.
369     ***********************************************************************************/
370 
371     -- If p_call_mode = "JOB", then records with Loan Status with Ready To Send ('G')
372     -- ELSE, if "FORM", then we need to validate for "Ready to Send", "Not Ready", "Rejected"
373 
374      -- G : Ready to Send
375      -- R : Rejected
376      -- N : Not Ready
377 
378     -- FA 122 Loan Enhancements changed the cursor to obsolete the view igf_sl_lor_dtls_v
379     CURSOR cur_loans(
380                      cp_cal_type   igf_ap_fa_base_rec.ci_cal_type%TYPE,
381                      cp_seq_number igf_ap_fa_base_rec.ci_sequence_number%TYPE,
382                      cp_fed_fund_1 igf_aw_fund_cat.fed_fund_code%TYPE,
383                      cp_fed_fund_2 igf_aw_fund_cat.fed_fund_code%TYPE,
384                      cp_status_1   igf_sl_loans.loan_status%TYPE,
385                      cp_status_2   igf_sl_loans.loan_status%TYPE,
386                      cp_status_3   igf_sl_loans.loan_status%TYPE,
387                      cp_loan_number igf_sl_loans.loan_number%TYPE,
388                      cp_active      igf_sl_loans.active%TYPE,
389                      cp_school_code  VARCHAR2
390                     )
391     IS
392     SELECT
393     loans.rowid row_id,
394     loans.loan_id,
395     loans.loan_number,
396     loans.award_id,
397     loans.loan_per_begin_date,
398     loans.loan_per_end_date,
399     lor.orig_fee_perct,
400     lor.pnote_print_ind,
401     lor.s_default_status,
402     lor.p_default_status,
403     lor.p_person_id,
404     fabase.person_id student_id,
405     fabase.base_id,
406     awd.accepted_amt,
407     lor.grade_level_code,
408     lor.override_grade_level_code
409     FROM
410     igf_sl_loans_all  loans,
411     igf_sl_lor_all    lor,
412     igf_aw_award_all  awd,
413     igf_aw_fund_mast_all   fmast,
414     igf_aw_fund_cat_all    fcat,
415     igf_ap_fa_base_rec_all fabase
416     WHERE fabase.ci_cal_type = cp_cal_type
417     AND fabase.ci_sequence_number = cp_seq_number
418     AND fabase.base_id = awd.base_id
419     AND awd.fund_id = fmast.fund_id
420     AND fmast.fund_code = fcat.fund_code
421     AND (fcat.fed_fund_code = cp_fed_fund_1 OR    fcat.fed_fund_code  =  cp_fed_fund_2)
422     AND loans.award_id  = awd.award_id
423     AND loans.loan_number  = NVL(cp_loan_number,loans.loan_number)
424     AND loans.loan_id  = lor.loan_id
425     AND (loans.loan_status = cp_status_1 OR  loans.loan_status = cp_status_2 OR loans.loan_status = cp_status_3)
426     AND loans.active = cp_active
427     AND SUBSTR(loans.loan_number,13,6) = NVL(cp_school_code, SUBSTR(loans.loan_number,13,6));
428 
429     orec cur_loans%ROWTYPE;
430 
431     -- museshad (Bug 4116399)
432     CURSOR cur_get_fed_fund_code(cp_loan_number igf_sl_loans.loan_number%TYPE)
433     IS
434       SELECT fcat.fed_fund_code
435       FROM  igf_sl_loans_all loans,
436             igf_aw_award_all awd,
437             igf_aw_fund_mast_all fmast,
438             igf_aw_fund_cat_all fcat
439       WHERE
440             loans.award_id    =   awd.award_id      AND
441             awd.fund_id       =   fmast.fund_id     AND
442             fmast.fund_code   =   fcat.fund_code    AND
443             loans.loan_number =   cp_loan_number;
444     -- museshad (Bug 4116399)
445 
446   PROCEDURE set_complete_status(p_complete BOOLEAN)
447     AS
448     BEGIN
449       IF p_complete = FALSE THEN
450          lv_complete := FALSE;
451       END IF;
452     END set_complete_status;
453 
454 BEGIN
455 
456  lv_complete := TRUE;
457  BEGIN
458   p_dl_version := igf_sl_gen.get_dl_version(p_ci_cal_type, p_ci_sequence_number);
459  EXCEPTION
460  WHEN NO_DATA_FOUND THEN
461  fnd_message.set_name('IGF','IGF_SL_NO_DL_SETUP');
462  fnd_file.put_line(fnd_file.log,fnd_message.get);
463  RAISE NO_DATA_FOUND;
464  END;
465 
466 
467  --Initialise the Global Loan ID
468   g_loan_id := NULL;
469 
470  -- FA 122 populate the l_status_1,l_status_2,l_status_3 fields
471  IF p_call_mode = 'FORM' THEN
472    l_status_1 := 'G';
473    l_status_2 := 'N';
474    l_status_3 := 'R';
475  ELSIF p_call_mode = 'JOB' THEN
476    l_status_1 := 'G';
477    l_status_2 := 'G';
478    l_status_3 := 'G';
479  END IF;
480 
481 -- FA 122 populate the l_fed_fund_1,l_fed_fund_2
482  IF p_loan_catg = 'DL_STAFFORD' THEN
483    l_fed_fund_1 := 'DLS';
484    l_fed_fund_2 := 'DLU';
485  ELSIF p_loan_catg = 'DL_PLUS' THEN
486    l_fed_fund_1 := 'DLP';
487    l_fed_fund_2 := 'DLP';
488  END IF;
489 
490 -- FA 122 pass all the derived paramters to the cur_loans to get the necessary details
491   FOR orec IN cur_loans(p_ci_cal_type,
492                         p_ci_sequence_number ,
493                         l_fed_fund_1,
494                         l_fed_fund_2,
495                         l_status_1,
496                         l_status_2,
497                         l_status_3,
498                         p_loan_number,
499                         'Y',
500                         p_school_code)
501   LOOP
502   --Need not perform the validations if the Loan ID is same.
503   IF NVL(g_loan_id,0) <> orec.loan_id OR p_call_mode = 'FORM' THEN
504 
505  -- FA 122 Loan Enhancements Use the igf_sl_gen.get_person_details for getting the student as
506  -- well as parent details.
507    igf_sl_gen.get_person_details(orec.student_id,student_dtl_cur);
508    FETCH student_dtl_cur INTO student_dtl_rec;
509 
510    -- this will fetch the parent details
511    igf_sl_gen.get_person_details(orec.p_person_id,parent_dtl_cur);
512    FETCH parent_dtl_cur INTO parent_dtl_rec;
513 
514    CLOSE student_dtl_cur;
515    CLOSE parent_dtl_cur;
516 
517    -- PUT THE DEBUGGING LOG MESSAGES
518 
519     IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
520          FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','loan_number passed to igf_sl_dl_record.get_acad_cal_dtls:'|| orec.loan_number);
521     END IF;
522 
523   -- Get the Academic Year Start and End Dates for this Award Year
524   -- masehgal   # 2593215   removed begin/end dates fetching functions
525   -- used procedure get_acad_cal_dtls instead
526      igf_sl_dl_record.get_acad_cal_dtls ( orec.loan_number,
527                                           lv_acad_cal_type,
528                                           lv_acad_seq_num,
529                                           lv_acad_begin_date,
530                                           lv_acad_end_date,
531                                           lv_message );
532 
533   -- This has p_loan_number as IN and begin and cal_type, sequence_number and dates as OUT parametes.
534   -- If lv_message is null then it implies that acad year was found ....
535   -- We will log that as an error code in processing below where we chk if acad_dates are null and
536   -- report appropriate error code.
537 
538     IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
539          FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','lv_message got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_message);
540     END IF;
541     IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
542          FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','lv_acad_begin_date got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_acad_begin_date);
543     END IF;
544     IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
545          FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','lv_acad_end_date got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_acad_end_date);
546     END IF;
547     lv_complete  := TRUE;
548 
549     -- Delete records from Edit Report table, with type="V" (VALIDATION) for this Loan#
550     igf_sl_edit.delete_edit(orec.loan_number, 'V');
551 
552     lv_s_depncy_status      := NULL;
553     lv_s_citizenship_status := NULL;
554     FOR isir_rec IN cur_isir(orec.base_id) LOOP
555        lv_s_depncy_status      := isir_rec.s_depncy_status;
556     END LOOP;
557     lv_s_citizenship_status := student_dtl_rec.p_citizenship_status;
558 
559     IF p_loan_catg = 'DL_STAFFORD' THEN
560 
561       lv_loan_catg := p_loan_catg;
562 
563       -- Following are the checks for Direct Loan Stafford.
564       --FA 122 get the student details from the student_dtl_rec
565       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_SSN',           student_dtl_rec.p_ssn));
566       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_FIRST_NAME',    student_dtl_rec.p_first_name));
567       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_LAST_NAME',     student_dtl_rec.p_last_name));
568       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_PERMT_ADDR1',   student_dtl_rec.p_permt_addr1));
569       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_PERMT_CITY',    student_dtl_rec.p_permt_city));
570       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_PERMT_STATE',   student_dtl_rec.p_permt_state));
571       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_PERMT_ZIP',     student_dtl_rec.p_permt_zip));
572       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth));
573       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'PNOTE_PRINT_IND', orec.pnote_print_ind));
574       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'ORIG_FEE_PERCT',  to_char(orec.orig_fee_perct)));
575       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_DEPNCY_STATUS', lv_s_depncy_status));
576 
577       -- If the Student is in Default, then do not originate
578       IF orec.s_default_status = 'Y' THEN
579          set_complete_status(FALSE);
580          igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'S_DEFAULT_STATUS', NULL);
581       END IF;
582 
583     ELSIF p_loan_catg = 'DL_PLUS' THEN
584       lv_loan_catg := p_loan_catg;
585 
586       -- Following are the checks for Direct Loan PLUS.
587        --FA 122 get the parent details from the parent_dtl_rec
588       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_SSN'   ,        parent_dtl_rec.p_ssn));
589       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_FIRST_NAME'   , parent_dtl_rec.p_first_name));
590       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_LAST_NAME'   ,  parent_dtl_rec.p_last_name));
591       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_PERMT_ADDR1',   parent_dtl_rec.p_permt_addr1));
592       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_PERMT_CITY',    parent_dtl_rec.p_permt_city));
593       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_PERMT_STATE',   parent_dtl_rec.p_permt_state));
594       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_PERMT_ZIP',     parent_dtl_rec.p_permt_zip));
595       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_DATE_OF_BIRTH', to_char(parent_dtl_rec.p_date_of_birth)));
596       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_CITIZENSHIP_STATUS',parent_dtl_rec.p_citizenship_status));
597       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'P_DEFAULT_STATUS', orec.p_default_status));
598       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'PNOTE_PRINT_IND',  orec.pnote_print_ind));
599       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_SSN',            student_dtl_rec.p_ssn ));
600       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_FIRST_NAME',     student_dtl_rec.p_first_name));
601       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_LAST_NAME',      student_dtl_rec.p_last_name));
602       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_CITIZENSHIP_STATUS',lv_s_citizenship_status));
603       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_DATE_OF_BIRTH', to_char(student_dtl_rec.p_date_of_birth)));
604       set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'S_DEPNCY_STATUS',  lv_s_depncy_status));
605 
606       -- For PLUS, If the Student/Parent is in Default, then do not originate
607       IF orec.s_default_status = 'Y' THEN
608          set_complete_status(FALSE);
609          igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'S_DEFAULT_STATUS', NULL);
610       END IF;
611       IF orec.p_default_status = 'Y' THEN
612          set_complete_status(FALSE);
613          igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'P_DEFAULT_STATUS', NULL);
614       END IF;
615 
616     END IF;   -- End of "p_loan_catg" check.
617 
618     set_complete_status(check_for_reqd(orec.loan_number,lv_loan_catg,'GRADE_LEVEL_CODE', orec.grade_level_code));
619 
620     -- The following validation introduced in as part of IGS.L.6R bug 4346421.
621     -- But due to Cust bug 4568942, this validation is removed. (Reverting back 4346421)
622 /*
623     -- Validate grade level (bug 4346421)
624     -- get System Grade Level, compare with NVL(override_grade_level_code, grade_level_code). If not matching, then log mesg.
625     l_dl_std_code := get_system_grade_level(orec.base_id, orec.loan_per_begin_date, orec.loan_per_end_date);
626     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
627          fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','l_dl_std_code got from get_system_grade_level function :'|| l_dl_std_code);
628     END IF;
629 
630     IF (orec.override_grade_level_code IS NOT NULL) THEN
631       IF (orec.override_grade_level_code <> l_dl_std_code) THEN
632         set_complete_status(FALSE);
633         igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'OVER_GRD_LVL_MISMATCH', 'OVERRIDE_GRADE_LEVEL_CODE', NULL);
634       END IF;
635     ELSIF orec.grade_level_code IS NOT NULL THEN
636       IF (orec.grade_level_code <> l_dl_std_code) THEN
637         set_complete_status(FALSE);
638         igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'GRD_LVL_MISMATCH', 'GRADE_LEVEL_CODE', NULL);
639       END IF;
640     END IF;
641 */
642 
643 
644     -- Check if number of disbursements is one or not. If one, it must be Special School. FA 149.
645     -- get number of disbursements
646 
647     lv_disb_count := -1;
648     OPEN cur_get_no_of_disbursements(orec.award_id);
649     FETCH cur_get_no_of_disbursements INTO lv_disb_count;
650     IF (lv_disb_count = 1) THEN
651       -- Check if it is Special School or not.
652       OPEN cur_special_school(p_ci_cal_type, p_ci_sequence_number);
653       FETCH cur_special_school INTO lv_special_school;
654       IF (lv_special_school IS NOT NULL AND lv_special_school <> 'Y') THEN
655         set_complete_status(FALSE);
656         igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INVALID_DISB_INFO', NULL, NULL);
657       END IF;
658       CLOSE cur_special_school;
659     END IF;
660     CLOSE cur_get_no_of_disbursements;
661 
662     -- Below are some of the checks which are to be done for both STAFFORD and PLUS
663 
664     -- For any disbursement, if disb-gross-amount, origination-fees or the disbursement net amount,
665     -- should be more than ZERO. This is for both Stafford and PLUS
666 
667     -- COD Specific. If amounts are zero still we need to sent if it had already been with COD.
668     -- Check wether the record is at LOR or not.
669     -- If yes, omit the following check. Bug 4368529
670     lv_dummy := NULL;
671     OPEN cur_loan_at_cod(orec.loan_number);
672     FETCH cur_loan_at_cod INTO lv_dummy;
673     CLOSE cur_loan_at_cod;
674 
675     IF lv_dummy IS NULL THEN
676       FOR irec in cur_disb(orec.award_id) LOOP
677          IF NVL(irec.disb_count,0) > 0 THEN
678            set_complete_status(FALSE);
679            igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'DISB_MORE_THAN_ZERO', NULL, NULL);
680          END IF;
681       END LOOP;
682 
683       -- Loan Amount should be greater than zero. Applicable to Stafford and PLUS
684       IF nvl(orec.accepted_amt,0) <= 0 THEN
685          set_complete_status(FALSE);
686          igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LESS_THAN_ZERO', 'LOAN_AMT_ACCEPTED', NULL);
687       END IF;
688     END IF;
689 
690     -- Origination Fee should be greater than zero. Applicable to Stafford and PLUS
691     IF nvl(orec.orig_fee_perct,0) <= 0 THEN
692        set_complete_status(FALSE);
693        igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LESS_THAN_ZERO', 'ORIG_FEE_PERCT', NULL);
694     END IF;
695 
696     -- Check if the Loan Begin and End Dates fall within the Academic Begin and End Dates.
697 
698     -- masehgal    # 2593215   added this check - acad year not found.
699     IF (lv_acad_begin_date IS NULL OR lv_acad_end_date IS NULL) THEN
700        -- irrespective if it is called from form or job, insert a record in edit report with a new error code
701        set_complete_status(FALSE);
702        igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'ACAD_YEAR_REQD', NULL, NULL);
703     END IF ;
704 
705     IF orec.loan_per_begin_date < lv_acad_begin_date THEN
706       set_complete_status(FALSE);
707       igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LOAN_BEGDT_LT_ACAD_BEGDT', NULL, NULL);
708     END IF;
709     IF orec.loan_per_end_date > lv_acad_end_date THEN
710 
711       set_complete_status(FALSE);
712       igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LOAN_ENDDT_GT_ACAD_ENDDT', NULL, NULL);
713     END IF;
714 
715     -- Check whether the EFC Information is available for the Student, using the ISIR's Dependency Status
716     -- If ISIR's Depncy-status is X,Y, then NO EFC is Calculated.
717     -- If ISIR's Depncy-status is I,D, then alculated EFC info has been provided.
718     IF nvl(lv_s_depncy_status,'*') NOT IN ('I','D') THEN
719       set_complete_status(FALSE);
720       igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'DEPNCY_NO_EFC_CALC', 'S_DEPNCY_STATUS', lv_s_depncy_status);
721     END IF;
722 
723     -- museshad (Bug 4116399) - Stafford loan limit validation for DLS, DLU
724     IF p_loan_catg = 'DL_STAFFORD' THEN
725       lv_msg_name     := NULL;
726       lv_lookup_code  := NULL;
727 
728       OPEN cur_get_fed_fund_code(cp_loan_number => orec.loan_number);
729       FETCH cur_get_fed_fund_code INTO lv_fed_fund_code;
730       CLOSE cur_get_fed_fund_code;
731 
732       loan_limit_validation (
733                               p_base_id     =>    orec.base_id,
734                               p_fund_type   =>    lv_fed_fund_code,
735                               p_award_id    =>    orec.award_id,
736                               p_msg_name    =>    lv_msg_name
737                             );
738 
739       IF lv_msg_name IS NOT NULL THEN
740         -- Stafford loan limit validation FAILED
741         set_complete_status(FALSE);
742 
743         IF lv_msg_name = 'IGF_AW_AGGR_LMT_ERR' THEN
744           lv_lookup_code := 'AGGR_LMT_CHK';
745         ELSIF lv_msg_name = 'IGF_AW_ANNUAL_LMT_ERR' THEN
746           lv_lookup_code := 'ANNUAL_LMT_CHK';
747         ELSIF lv_msg_name = 'IGF_AW_SUB_AGGR_LMT_ERR' THEN
748           lv_lookup_code := 'SUB_AGGR_LMT_CHK';
749         ELSIF lv_msg_name = 'IGF_AW_SUB_LMT_ERR' THEN
750           lv_lookup_code := 'SUB_LMT_CHK';
751         ELSIF lv_msg_name = 'IGF_AW_LOAN_LMT_NOT_FND' THEN
752           lv_lookup_code := 'LOAN_LMT_SETUP_CHK';
753         END IF;
754 
755         igf_sl_edit.insert_edit(orec.loan_number, 'V', 'IGF_SL_ERR_CODES', lv_lookup_code, NULL, NULL);
756 
757         -- Log
758         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
759           fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','Stafford loan limit validation for award_id ' ||orec.award_id|| ' FAILED with message: ' ||lv_msg_name);
760         END IF;
761       ELSE
762         -- Stafford loan limit validation PASSED
763         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
764           fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.dl_lar_validate.debug','Stafford loan limit validation PASSED for award_id ' ||orec.award_id);
765         END IF;
766       END IF;
767     END IF;
768     -- museshad (Bug 4116399)
769 
770     IF p_call_mode = 'JOB' THEN
771 
772            -- If any validation fails or if any required data is missing, then set Loan Status=Not Ready.
773            -- Else, set to "Valid and Ready to Send"
774           IF lv_complete = FALSE THEN
775              lv_loan_status := 'N';  -- NOT READY
776           ELSE
777              lv_loan_status := 'V';  -- VALID and READY TO SEND
778           END IF;
779 
780           DECLARE
781               lv_row_id  VARCHAR2(25);
782               CURSOR c_tbh_cur IS
783               SELECT igf_sl_loans.* FROM igf_sl_loans
784               WHERE rowid = orec.row_id FOR UPDATE OF igf_sl_loans.loan_status NOWAIT;
785           BEGIN
786             FOR tbh_rec in c_tbh_cur LOOP
787 
788 -- Modified the call for IGF_SL_LOANS_PKG.UPDATE_ROW to include the Borrower Determination
789 -- as part of Refunds DLD - 2144600
790               igf_sl_loans_pkg.update_row (
791                 X_Mode                              => 'R',
792                 x_rowid                             => tbh_rec.row_id,
793                 x_loan_id                           => tbh_rec.loan_id,
794                 x_award_id                          => tbh_rec.award_id,
795                 x_seq_num                           => tbh_rec.seq_num,
796                 x_loan_number                       => tbh_rec.loan_number,
797                 x_loan_per_begin_date               => tbh_rec.loan_per_begin_date,
798                 x_loan_per_end_date                 => tbh_rec.loan_per_end_date,
799                 x_loan_status                       => lv_loan_status,
800                 x_loan_status_date                  => TRUNC(SYSDATE),
801                 x_loan_chg_status                   => tbh_rec.loan_chg_status,
802                 x_loan_chg_status_date              => tbh_rec.loan_chg_status_date,
803                 x_active                            => tbh_rec.active,
804                 x_active_date                       => tbh_rec.active_date,
805                 x_borw_detrm_code                   => tbh_rec.borw_detrm_code,
806                 x_legacy_record_flag                => NULL,
807                 x_external_loan_id_txt              => tbh_rec.external_loan_id_txt
808 
809               );
810             END LOOP;
811           END;
812 
813          IF lv_complete = FALSE THEN
814             -- Display reject details on the Concurrent Manager Log File.
815             DECLARE
816                lv_log_mesg VARCHAR2(1000);
817                CURSOR c_reject IS
818                SELECT rpad(field_desc,50)||sl_error_desc reject_desc FROM igf_sl_edit_report_v
819                WHERE  loan_number = orec.loan_number
820                AND    orig_chg_code = 'V';
821             BEGIN
822 
823 
824                FND_FILE.PUT_LINE(FND_FILE.LOG, '');
825                FND_FILE.PUT_LINE(FND_FILE.LOG, '');
826                lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','LOAN_NUMBER')||' : '||orec.loan_number;
827                FND_FILE.PUT_LINE(FND_FILE.LOG, lv_log_mesg);
828                lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','S_SSN')      ||' : '||student_dtl_rec.p_ssn;
829                FND_FILE.PUT_LINE(FND_FILE.LOG, lv_log_mesg);
830                lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','S_FULL_NAME')||' : '
831                                                                  ||student_dtl_rec.p_first_name||' '||student_dtl_rec.p_last_name;
832                FND_FILE.PUT_LINE(FND_FILE.LOG, lv_log_mesg);
833                FOR rej_rec IN c_reject LOOP
834                  FND_FILE.PUT_LINE(FND_FILE.LOG,'    '||rej_rec.reject_desc);
835                END LOOP;
836 
837            END;
838          END IF;
839 
840     ELSE
841        -- If the validation routinue is called from FORM, then just return the Status of TRUE/FALSE.
842        NULL;
843 
844     END IF;
845 
846 g_loan_id:=orec.loan_id;  --Keep changing Global Loan ID everytime it is different.
847 
848 END IF; --Check for Global Loan ID not being same.
849 
850 
851   END LOOP;
852 
853   IF p_call_mode = 'JOB' THEN
854      RETURN TRUE;
855   ELSE
856      RETURN lv_complete;
857   END IF;
858 
859 EXCEPTION
860 --Added this for Handling the exception when DL Setup is not found
861 WHEN NO_DATA_FOUND THEN
862 NULL;
863 
864 WHEN app_exception.record_lock_exception THEN
865    RAISE;
866 WHEN OTHERS THEN
867 
868 --Removed the fnd_message.setname with Package.Procedure name.
869 --This is because this procedure in turn calls igf_sl_dl_record package academic year functions
870 --which return valid exceptions.only if we just propogate this exception
871 --we will be able to trap both in form and in dl orig process.
872 --hence removed code.
873 --Bug :-2415041 Loan Orig with incorrect error messages.
874 
875    app_exception.raise_exception;
876 
877 END dl_lar_validate;
878 
879 FUNCTION  cod_loan_validations ( p_loan_rec igf_sl_dl_gen_xml.cur_pick_loans%ROWTYPE,
880                                  p_call_from    VARCHAR2,
881                                  p_isir_ssn     OUT NOCOPY VARCHAR2,
882                                  p_isir_dob     OUT NOCOPY DATE,
883                                  p_isir_lname   OUT NOCOPY VARCHAR2,
884                                  p_isir_dep     OUT NOCOPY VARCHAR2,
885                                  p_isir_tnum    OUT NOCOPY NUMBER,
886                                  p_acad_begin   OUT NOCOPY DATE,
887                                  p_acad_end     OUT NOCOPY DATE,
888                                  p_s_phone      OUT NOCOPY VARCHAR2,
889                                  p_p_phone      OUT NOCOPY VARCHAR2 )
890 RETURN BOOLEAN AS
891 /*************************************************************
892 Created By : ugummall
893 Date Created On : 01-OCT-2004
894 Purpose :
895 Know limitations, enhancements or remarks
896 Change History
897 Who             When            What
898 museshad        28-Nov-2005     Bug 4116399.
899                                 Added Stafford loan limit validation check.
900 (reverse chronological order - newest change first)
901 akomurav   24-1-2006 FA162.The values of Acad begin date and end date are now directly populated fromIGF_SL_LOR_ALL table i.e p_loan_rec record.
902 ***************************************************************/
903 
904 CURSOR cur_disb_chg_dtls  ( cp_award_id igf_aw_db_chg_dtls.award_id%TYPE) IS
905 SELECT  db.award_id,
906         db.disb_num,
907         db.disb_seq_num,
908         db.disb_accepted_amt,
909         db.disb_date,
910         db.orig_fee_amt,
911         db.disb_net_amt,
912         db.interest_rebate_amt
913   FROM  igf_aw_db_chg_dtls db
914  WHERE  db.award_id = cp_award_id;
915 
916 rec_disb_chg_dtls  cur_disb_chg_dtls%ROWTYPE;
917 lv_s_depncy_status      igf_ap_isir_matched_all.dependency_status%TYPE;
918 lv_s_citizenship_status igf_ap_isir_matched_all.citizenship_status%TYPE;
919 lv_acad_cal_type        igs_ca_inst_all.cal_type%TYPE ;
920 lv_acad_seq_num         igs_ca_inst_all.sequence_number%TYPE;
921 lv_acad_begin_date      igs_ca_inst_all.start_dt%TYPE;
922 lv_acad_end_date        igs_ca_inst_all.end_dt%TYPE;
923 lv_message              VARCHAR2(100);
924 l_p_phone               VARCHAR2(80);
925 l_s_phone               VARCHAR2(80);
926 lv_special_school       VARCHAR2(30);
927 lv_complete             BOOLEAN;
928 lv_disb_count           NUMBER;
929 student_dtl_cur         igf_sl_gen.person_dtl_cur;
930 parent_dtl_cur          igf_sl_gen.person_dtl_cur;
931 l_dl_std_code           igf_ap_class_std_map.dl_std_code%TYPE;
932 lv_dummy                varchar2(1);
933 lv_lookup_code          igf_lookups_view.LOOKUP_CODE%TYPE;
934 
935 
936 PROCEDURE set_complete_status(p_complete BOOLEAN)
937   AS
938   BEGIN
939     IF p_complete = FALSE THEN
940        lv_complete := FALSE;
941     END IF;
942   END set_complete_status;
943 
944 BEGIN
945 
946   BEGIN
947      p_dl_version := igf_sl_gen.get_dl_version(p_loan_rec.ci_cal_type, p_loan_rec.ci_sequence_number);
948      IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
949       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','p_dl_version  '|| p_dl_version );
950      END IF;
951      EXCEPTION
952      WHEN NO_DATA_FOUND THEN
953      fnd_message.set_name('IGF','IGF_SL_NO_DL_SETUP');
954      fnd_file.put_line(fnd_file.log,fnd_message.get);
955      IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
956       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Setup gone  ' );
957      END IF;
958      RAISE NO_DATA_FOUND;
959   END;
960 
961   lv_complete  := TRUE;
962 
963   --
964   -- Get ISIR Information
965   --
966   OPEN  cur_isir_info (p_loan_rec.base_id);
967   FETCH cur_isir_info INTO isir_info_rec;
968   CLOSE cur_isir_info;
969 
970   -- Delete records from Edit Report table, with type="V" (VALIDATION) for this Loan#
971   igf_sl_edit.delete_edit(p_loan_rec.loan_number, 'V');
972   --
973   -- Get academic calendar details
974   --
975   --akomurav FA162 This code will pick the values from the lor_all table
976   --The procedure  igf_sl_dl_record.get_acad_cal_dtls will be called only if the acad_begin_date and acad_end_date are NULL
977   lv_acad_begin_date := p_loan_rec.acad_begin_date;
978   lv_acad_end_date   := p_loan_rec.acad_end_date;
979 
980   IF lv_acad_begin_date IS NULL OR lv_acad_end_date IS NULL THEN
981           igf_sl_dl_record.get_acad_cal_dtls ( p_loan_rec.loan_number,
982                                lv_acad_cal_type,
983                                lv_acad_seq_num,
984                                lv_acad_begin_date,
985                                lv_acad_end_date,
986                                lv_message );
987   END IF;
988 
989   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
990     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_message got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_message);
991   END IF;
992   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
993     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_acad_begin_date got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_acad_begin_date);
994   END IF;
995   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
996     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_acad_end_date got from igf_sl_dl_record.get_acad_cal_dtls:'|| lv_acad_end_date);
997   END IF;
998 
999   igf_sl_gen.get_person_details(igf_gr_gen.get_person_id(p_loan_rec.base_id),student_dtl_cur);
1000   FETCH student_dtl_cur INTO student_dtl_rec;
1001 
1002   igf_sl_gen.get_person_details(p_loan_rec.p_person_id,parent_dtl_cur);
1003   FETCH parent_dtl_cur INTO parent_dtl_rec;
1004 
1005   CLOSE student_dtl_cur;
1006   CLOSE parent_dtl_cur;
1007 
1008   lv_s_depncy_status      := NULL;
1009   lv_s_citizenship_status := NULL;
1010   lv_s_depncy_status      := isir_info_rec.dependency_status;
1011   lv_s_citizenship_status := student_dtl_rec.p_citizenship_status;
1012   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1013     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_s_citizenship_status  '|| lv_s_citizenship_status);
1014   END IF;
1015 
1016   p_isir_ssn   := isir_info_rec.current_ssn;
1017   p_isir_dob   := isir_info_rec.date_of_birth;
1018   p_isir_lname := isir_info_rec.last_name;
1019   p_isir_dep   := isir_info_rec.dependency_status;
1020   p_isir_tnum  := isir_info_rec.transaction_num;
1021   p_acad_begin := lv_acad_begin_date;
1022   p_acad_end   := lv_acad_end_date;
1023 
1024   IF p_loan_rec.fed_fund_code IN ('DLS','DLU') THEN
1025     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_SSN',           student_dtl_rec.p_ssn));
1026     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_FIRST_NAME',    student_dtl_rec.p_first_name));
1027     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_LAST_NAME',     student_dtl_rec.p_last_name));
1028     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_PERMT_ADDR1',   student_dtl_rec.p_permt_addr1));
1029     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1030       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','S_PERMT_ADDR1 = ' ||student_dtl_rec.p_permt_addr1);
1031     END IF;
1032     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_PERMT_CITY',    student_dtl_rec.p_permt_city));
1033     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_PERMT_STATE',   student_dtl_rec.p_permt_state));
1034     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_PERMT_ZIP',     student_dtl_rec.p_permt_zip));
1035     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth));
1036     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','PNOTE_PRINT_IND', p_loan_rec.pnote_print_ind));
1037     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','ORIG_FEE_PERCT',  TO_CHAR(p_loan_rec.orig_fee_perct)));
1038     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_DEPNCY_STATUS', lv_s_depncy_status));
1039     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','GRADE_LEVEL_CODE',p_loan_rec.grade_level_code));
1040     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','LOAN_AMT_ACCEPTED', p_loan_rec.accepted_amt));
1041     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','LOAN_NUMBER', p_loan_rec.loan_number));
1042     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_DEFAULT_STATUS',p_loan_rec.s_default_status));
1043     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','ATD_ENTITY_ID_TXT',p_loan_rec.atd_entity_id_txt));
1044     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','CPS_TRANS_NUM',p_loan_rec.cps_trans_num));
1045     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','LOAN_PER_BEGIN_DATE',p_loan_rec.loan_per_begin_date));
1046     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','LOAN_PER_END_DATE',p_loan_rec.loan_per_end_date));
1047     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','REP_ENTITY_ID_TXT',p_loan_rec.rep_entity_id_txt));
1048     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_STAFFORD','S_CITIZENSHIP_STATUS',student_dtl_rec.p_citizenship_status));
1049 
1050     -- If the Student is in Default, then do not originate
1051     IF p_loan_rec.s_default_status = 'Y' THEN
1052       set_complete_status(FALSE);
1053       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'S_DEFAULT_STATUS', NULL);
1054     END IF;
1055 
1056   ELSIF p_loan_rec.fed_fund_code = 'DLP' THEN
1057 
1058     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_SSN'   ,        parent_dtl_rec.p_ssn));
1059     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_FIRST_NAME'   , parent_dtl_rec.p_first_name));
1060     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_LAST_NAME'   ,  parent_dtl_rec.p_last_name));
1061     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_PERMT_ADDR1',   parent_dtl_rec.p_permt_addr1));
1062     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1063       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','P_PERMT_ADDR1 = ' ||parent_dtl_rec.p_permt_addr1);
1064     END IF;
1065     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_PERMT_CITY',    parent_dtl_rec.p_permt_city));
1066     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_PERMT_STATE',   parent_dtl_rec.p_permt_state));
1067     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_PERMT_ZIP',     parent_dtl_rec.p_permt_zip));
1068     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_DATE_OF_BIRTH', TO_CHAR(parent_dtl_rec.p_date_of_birth)));
1069     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_CITIZENSHIP_STATUS',parent_dtl_rec.p_citizenship_status));
1070     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','P_DEFAULT_STATUS', p_loan_rec.p_default_status));
1071     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','PNOTE_PRINT_IND',  p_loan_rec.pnote_print_ind));
1072     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_SSN',           student_dtl_rec.p_ssn));
1073     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_FIRST_NAME',    student_dtl_rec.p_first_name));
1074     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_LAST_NAME',     student_dtl_rec.p_last_name));
1075     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_PERMT_ADDR1',   student_dtl_rec.p_permt_addr1));
1076     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1077       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','S_PERMT_ADDR1 = ' ||student_dtl_rec.p_permt_addr1);
1078     END IF;
1079     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_PERMT_CITY',    student_dtl_rec.p_permt_city));
1080     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_PERMT_STATE',   student_dtl_rec.p_permt_state));
1081     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_PERMT_ZIP',     student_dtl_rec.p_permt_zip));
1082     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth));
1083     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','PNOTE_PRINT_IND', p_loan_rec.pnote_print_ind));
1084     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','ORIG_FEE_PERCT',  TO_CHAR(p_loan_rec.orig_fee_perct)));
1085     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_DEPNCY_STATUS', lv_s_depncy_status));
1086     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','GRADE_LEVEL_CODE',p_loan_rec.grade_level_code));
1087     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','LOAN_AMT_ACCEPTED', p_loan_rec.accepted_amt));
1088     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','LOAN_NUMBER', p_loan_rec.loan_number));
1089     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_DEFAULT_STATUS',p_loan_rec.s_default_status));
1090     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','ATD_SCHL_ENTITY_ID',p_loan_rec.atd_entity_id_txt));
1091     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','CPS_TRANS_NUM',p_loan_rec.cps_trans_num));
1092     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','LOAN_PER_BEGIN_DATE',p_loan_rec.loan_per_begin_date));
1093     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','LOAN_PER_END_DATE',p_loan_rec.loan_per_end_date));
1094     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','REP_SCHL_ENTITY_ID',p_loan_rec.rep_entity_id_txt));
1095     set_complete_status(check_for_reqd(p_loan_rec.loan_number,'DL_PLUS','S_CITIZENSHIP_STATUS',student_dtl_rec.p_citizenship_status));
1096 
1097     -- For PLUS, If the Student/Parent is in Default, then do not originate
1098     IF p_loan_rec.s_default_status = 'Y' THEN
1099       set_complete_status(FALSE);
1100       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'S_DEFAULT_STATUS', NULL);
1101     END IF;
1102     IF p_loan_rec.p_default_status = 'Y' THEN
1103       set_complete_status(FALSE);
1104       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'IS_DEFAULTER', 'P_DEFAULT_STATUS', NULL);
1105     END IF;
1106   END IF;   -- End of "p_loan_catg" check.
1107 
1108   -- Check if number of disbursements is one or not. If one, it must be Special School. FA 149.
1109   -- get number of disbursements
1110   lv_disb_count := -1;
1111 
1112   OPEN  cur_get_no_of_disbursements(p_loan_rec.award_id);
1113   FETCH cur_get_no_of_disbursements INTO lv_disb_count;
1114   CLOSE cur_get_no_of_disbursements;
1115   IF (lv_disb_count = 1) THEN
1116     -- Check if it is Special School or not.
1117     OPEN cur_special_school(p_loan_rec.ci_cal_type, p_loan_rec.ci_sequence_number);
1118     FETCH cur_special_school INTO lv_special_school;
1119     IF (lv_special_school IS NOT NULL AND lv_special_school <> 'Y') THEN
1120         set_complete_status(FALSE);
1121         igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INVALID_DISB_INFO', NULL, NULL);
1122     END IF;
1123     CLOSE cur_special_school;
1124   END IF;
1125 
1126   -- Below are some of the checks which are to be done for both STAFFORD and PLUS
1127   -- For any disbursement, if disb-gross-amount, origination-fees or the disbursement net amount,
1128   -- should be more than ZERO. This is for both Stafford and PLUS
1129 
1130   -- COD Specific. If amounts are zero still we need to sent if it had already been with COD.
1131   -- Check wether the record is at LOR or not.
1132   -- If yes, omit the following check. Bug 4368529
1133   lv_dummy := NULL;
1134   OPEN cur_loan_at_cod(p_loan_rec.loan_number);
1135   FETCH cur_loan_at_cod INTO lv_dummy;
1136   CLOSE cur_loan_at_cod;
1137 
1138   IF lv_dummy IS NULL THEN
1139     FOR irec IN cur_disb(p_loan_rec.award_id) LOOP
1140       IF NVL(irec.disb_count,0) > 0 THEN
1141         set_complete_status(FALSE);
1142         igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'DISB_MORE_THAN_ZERO', NULL, NULL);
1143       END IF;
1144     END LOOP;
1145 
1146     -- Loan Amount should be greater than zero. Applicable to Stafford and PLUS
1147     IF NVL(p_loan_rec.accepted_amt,0) <= 0 THEN
1148       set_complete_status(FALSE);
1149       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LESS_THAN_ZERO', 'LOAN_AMT_ACCEPTED', p_loan_rec.accepted_amt);
1150     END IF;
1151   END IF;
1152 
1153   -- Origination Fee should be greater than zero. Applicable to Stafford and PLUS
1154   IF NVL(p_loan_rec.orig_fee_perct,0) <= 0 THEN
1155     set_complete_status(FALSE);
1156     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LESS_THAN_ZERO', 'ORIG_FEE_PERCT', p_loan_rec.orig_fee_perct);
1157   END IF;
1158 
1159   -- Payment ISIR missing
1160   IF isir_info_rec.payment_isir IS NULL THEN
1161     set_complete_status(FALSE);
1162     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'NO_PYMNT_ISIR', NULL, NULL);
1163   END IF;
1164 
1165   -- Payment ISIR mismatch
1166   IF TO_NUMBER(isir_info_rec.transaction_num) <> TO_NUMBER(p_loan_rec.cps_trans_num) THEN
1167   --MN 11/29/2004 16:23 - As the Transaction Number is numeric data stored in VarChar2, added To_Number
1168     set_complete_status(FALSE);
1169     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'PYMNT_ISIR_MISMATCH', NULL, NULL);
1170   END IF;
1171 
1172   IF (lv_acad_begin_date IS NULL OR lv_acad_end_date IS NULL) THEN
1173     set_complete_status(FALSE);
1174     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'ACAD_YEAR_REQD', NULL, NULL);
1175   END IF ;
1176 
1177   IF p_loan_rec.loan_per_begin_date < lv_acad_begin_date THEN
1178     set_complete_status(FALSE);
1179     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LOAN_BEGDT_LT_ACAD_BEGDT', NULL, NULL);
1180   END IF;
1181 
1182   IF p_loan_rec.loan_per_end_date > lv_acad_end_date THEN
1183     set_complete_status(FALSE);
1184     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'LOAN_ENDDT_GT_ACAD_ENDDT', NULL, NULL);
1185   END IF;
1186 
1187 -- Check whether the EFC Information is available for the Student, using the ISIR's Dependency Status
1188 -- If ISIR's Depncy-status is X,Y, then NO EFC is Calculated.
1189 -- If ISIR's Depncy-status is I,D, then alculated EFC info has been provided.
1190   IF NVL(lv_s_depncy_status,'*') NOT IN ('I','D') THEN
1191     set_complete_status(FALSE);
1192     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'DEPNCY_NO_EFC_CALC', 'S_DEPNCY_STATUS', lv_s_depncy_status);
1193   END IF;
1194 
1195     -- The following validation introduced in as part of IGS.L.6R bug 4346421.
1196     -- But due to Cust bug 4568942, this validation is removed. (Reverting back 4346421)
1197 /*
1198   -- Validate grade level (bug 4346421)
1199   -- get System Grade Level, compare with NVL(override_grade_level_code, grade_level_code). If not matching, then log mesg.
1200   l_dl_std_code := get_system_grade_level(p_loan_rec.base_id, p_loan_rec.loan_per_begin_date, p_loan_rec.loan_per_end_date);
1201   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1202        fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','l_dl_std_code got from get_system_grade_level function :'|| l_dl_std_code);
1203   END IF;
1204 
1205   IF (p_loan_rec.override_grade_level_code IS NOT NULL) THEN
1206     IF (p_loan_rec.override_grade_level_code <> l_dl_std_code) THEN
1207       set_complete_status(FALSE);
1208       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'OVER_GRD_LVL_MISMATCH', 'OVERRIDE_GRADE_LEVEL_CODE', NULL);
1209     END IF;
1210   ELSIF p_loan_rec.grade_level_code IS NOT NULL THEN
1211     IF (p_loan_rec.grade_level_code <> l_dl_std_code) THEN
1212       set_complete_status(FALSE);
1213       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'GRD_LVL_MISMATCH', 'GRADE_LEVEL_CODE', NULL);
1214     END IF;
1215   END IF;
1216 */
1217 
1218   --
1219   -- COD Specific validations
1220   --
1221 
1222   -- Check if the isir information is same as sws information
1223   IF p_loan_rec.grade_level_code NOT IN ('0','1','2','3','4','5','6','7') THEN
1224       lv_complete := FALSE;
1225       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_GRD_LEVEL', 'GRADE_LEVEL_CODE',p_loan_rec.grade_level_code);
1226   END IF;
1227   IF p_loan_rec.disclosure_print_ind IS NULL OR p_loan_rec.disclosure_print_ind NOT IN ('S','R','Y') THEN
1228       lv_complete := FALSE;
1229       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISC_IND', 'DISC_PRINT_IND',p_loan_rec.disclosure_print_ind);
1230   END IF;
1231   IF p_loan_rec.pnote_print_ind IS NULL OR p_loan_rec.pnote_print_ind NOT IN ('S','R','Z','V','O') THEN
1232       lv_complete := FALSE;
1233       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_PNOTE_IND', 'PNOTE_PRINT_IND',p_loan_rec.pnote_print_ind);
1234   END IF;
1235 
1236 /* Not inserting this edit ---
1237   IF isir_info_rec.date_of_birth <> student_dtl_rec.p_date_of_birth OR
1238      isir_info_rec.current_ssn <> student_dtl_rec.p_ssn OR
1239      isir_info_rec.last_name <> UPPER(student_dtl_rec.p_last_name) THEN
1240 
1241 
1242 
1243       --lv_complete := FALSE;
1244       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_ISIR_INFO_CHG', NULL,NULL);
1245   END IF;
1246 
1247 */
1248 
1249   IF p_dl_version = '2004-2005' THEN
1250     -- 1. validating student's date of birth
1251     IF ( (student_dtl_rec.p_date_of_birth < TO_DATE('01011905', 'DDMMYYYY')) OR
1252          (student_dtl_rec.p_date_of_birth > TO_DATE('31121996', 'DDMMYYYY')) )
1253     THEN
1254       lv_complete := FALSE;
1255       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INVALID_DOB0405', 'S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth);
1256     END IF;
1257   END IF;
1258   IF p_dl_version = '2005-2006' THEN
1259     -- 1. validating student's date of birth
1260     IF ( (student_dtl_rec.p_date_of_birth < TO_DATE('01011906', 'DDMMYYYY')) OR
1261          (student_dtl_rec.p_date_of_birth > TO_DATE('31121997', 'DDMMYYYY')) )
1262     THEN
1263       lv_complete := FALSE;
1264       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INVALID_DOB0506', 'S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth);
1265     END IF;
1266   END IF;
1267       IF p_dl_version = '2006-2007' THEN
1268     -- 1. validating student's date of birth
1269     IF ( (student_dtl_rec.p_date_of_birth < TO_DATE('01011907', 'DDMMYYYY')) OR
1270          (student_dtl_rec.p_date_of_birth > TO_DATE('31121998', 'DDMMYYYY')) )
1271     THEN
1272       lv_complete := FALSE;
1273       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INVALID_DOB0607', 'S_DATE_OF_BIRTH', student_dtl_rec.p_date_of_birth);
1274     END IF;
1275   END IF;
1276     -- validating student's SSN
1277   IF ( (student_dtl_rec.p_ssn < '001010001') OR (student_dtl_rec.p_ssn > '999999998') ) THEN
1278     lv_complete := FALSE;
1279     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INVALID_SSN', 'S_SSN', student_dtl_rec.p_ssn);
1280   END IF;
1281 
1282   -- validating student's first name
1283   IF ( LENGTH(student_dtl_rec.p_first_name) > 12) THEN
1284     lv_complete := FALSE;
1285     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_FIRST_NAME', 'S_FIRST_NAME', student_dtl_rec.p_first_name);
1286   END IF;
1287 
1288   -- validating student's last name
1289   IF ( LENGTH(student_dtl_rec.p_last_name) > 35) THEN
1290     lv_complete := FALSE;
1291     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_LAST_NAME', 'S_LAST_NAME', student_dtl_rec.p_last_name);
1292   END IF;
1293 
1294   -- validating student's address line 1
1295   IF ( (LENGTH(student_dtl_rec.p_permt_addr1) < 1) OR
1296        (LENGTH(student_dtl_rec.p_permt_addr1) > 40) ) THEN
1297     lv_complete := FALSE;
1298     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_ADDR_LINE', 'S_PERMT_ADDR1', student_dtl_rec.p_permt_addr1);
1299   END IF;
1300 
1301   -- validating student's address line 2
1302   IF ( (LENGTH(student_dtl_rec.p_permt_addr2) < 1) OR (LENGTH(student_dtl_rec.p_permt_addr2) > 40) ) THEN
1303     lv_complete := FALSE;
1304     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_ADDR_LINE', 'S_PERMT_ADDR2', student_dtl_rec.p_permt_addr2);
1305   END IF;
1306 
1307   -- validating student's city
1308   IF ( LENGTH(student_dtl_rec.p_permt_city) > 24) THEN
1309     lv_complete := FALSE;
1310     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_CITY', 'S_PERMT_CITY', student_dtl_rec.p_permt_city);
1311   END IF;
1312 
1313   -- validating student's E-MAIL
1314   IF ( LENGTH(student_dtl_rec.p_email_addr) > 128) THEN
1315     lv_complete := FALSE;
1316     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_EMAIL', 'S_EMAIL_ADDR', student_dtl_rec.p_email_addr);
1317   END IF;
1318 
1319   -- validating student's Phone Number sl03b.pls
1320   l_s_phone := igf_sl_gen.get_person_phone(igf_gr_gen.get_person_id(p_loan_rec.base_id));
1321   IF l_s_phone = 'N/A' THEN
1322      p_s_phone := NULL;--bug 4093556, When there is no phone number existing for a student then the phone number tag was populated using '000000000000' .
1323                        --This has being changed to NULL(akomurav)
1324   ELSE
1325     IF NOT validate_id(l_s_phone) THEN
1326       lv_complete := FALSE;
1327       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_PHONE_NUM_D', 'S_PERMT_PHONE', l_s_phone);
1328     ELSE
1329       p_s_phone := l_s_phone;
1330     END IF;
1331     IF LENGTH(l_s_phone) > 17 OR LENGTH(l_s_phone) < 10 THEN
1332       lv_complete := FALSE;
1333       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_PHONE_NUM', 'S_PERMT_PHONE', l_s_phone);
1334     END IF;
1335   END IF;
1336 
1337   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1338     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','l_s_phone  '|| l_s_phone);
1339     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','p_s_phone  '|| p_s_phone);
1340   END IF;
1341 
1342   -- validating student's Zip Code
1343   IF ( (LENGTH(student_dtl_rec.p_permt_zip) < 5) OR (LENGTH(student_dtl_rec.p_permt_zip) > 13) ) THEN
1344     lv_complete := FALSE;
1345     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_ZIP_CODE', 'S_PERMT_ZIP', student_dtl_rec.p_permt_zip);
1346   END IF;
1347 
1348   -- validating student's State Code
1349   IF ( (LENGTH(student_dtl_rec.p_permt_state) < 2) OR (LENGTH(student_dtl_rec.p_permt_state) > 3) ) THEN
1350     lv_complete := FALSE;
1351     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_STATE_CODE', 'S_PERMT_STATE', student_dtl_rec.p_permt_state);
1352   END IF;
1353 
1354   -- validating student's driver licencse number
1355   IF ( LENGTH(student_dtl_rec.p_license_num) > 20) THEN
1356     lv_complete := FALSE;
1357     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_DRIV_LIC_NUM', 'S_LICENSE_NUM', student_dtl_rec.p_license_num);
1358   END IF;
1359 
1360   IF student_dtl_rec.p_license_num IS NOT NULL AND  student_dtl_rec.p_license_state IS NULL THEN
1361     lv_complete := FALSE;
1362     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_DRIV_LIC_NUM_STATE', 'P_LICENSE_NUM', NULL);
1363   END IF;
1364 
1365   IF student_dtl_rec.p_license_state IS NOT NULL AND  student_dtl_rec.p_license_num IS NULL THEN
1366     lv_complete := FALSE;
1367     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_DRIV_LIC_STATE_NUM', 'P_LICENSE_ST', NULL);
1368   END IF;
1369 
1370   -- validating student's citizenship status code
1371   IF ( LENGTH(student_dtl_rec.p_citizenship_status) > 1) THEN
1372     lv_complete := FALSE;
1373     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'S_INV_CIT_STATUS', 'S_CITIZENSHIP_STATUS', student_dtl_rec.p_citizenship_status);
1374   END IF;
1375 
1376   -- validating transaction number
1377   IF ( (to_number(p_loan_rec.cps_trans_num) < 1) OR (to_number(p_loan_rec.cps_trans_num) > 99) ) THEN
1378     lv_complete := FALSE;
1379     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INVALID_TRANS_NUM', 'CPS_TRANS_NUM', p_loan_rec.cps_trans_num);
1380   END IF;
1381 
1382   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1383     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','CPS Tran Number Check');
1384   END IF;
1385 
1386   -- validating loan_per_begin_date
1387   IF p_dl_version = '2004-2005' THEN
1388     IF p_loan_rec.loan_per_begin_date < TO_DATE('02072003', 'DDMMYYYY') OR
1389        p_loan_rec.loan_per_begin_date > TO_DATE('30062005', 'DDMMYYYY') THEN
1390       lv_complete := FALSE;
1391       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_STARTDT0405', 'LOAN_PER_BEGIN', p_loan_rec.loan_per_begin_date );
1392     END IF;
1393   END IF;
1394   -- validating loan_per_end_date
1395   IF p_dl_version = '2004-2005' THEN
1396     IF p_loan_rec.loan_per_end_date < TO_DATE('01072004', 'DDMMYYYY') OR
1397        p_loan_rec.loan_per_end_date > TO_DATE('29062006', 'DDMMYYYY') THEN
1398       lv_complete := FALSE;
1399       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_ENDDT0405', 'LOAN_PER_END_DATE', p_loan_rec.loan_per_end_date);
1400     END IF;
1401   END IF;
1402  -- validating loan_per_begin_date
1403   IF p_dl_version = '2005-2006' THEN
1404     IF p_loan_rec.loan_per_begin_date < TO_DATE('02072004', 'DDMMYYYY') OR
1405        p_loan_rec.loan_per_begin_date > TO_DATE('30062006', 'DDMMYYYY') THEN
1406       lv_complete := FALSE;
1407       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_STARTDT0506', 'LOAN_PER_BEGIN', p_loan_rec.loan_per_begin_date );
1408     END IF;
1409   END IF;
1410   -- validating loan_per_end_date
1411   IF p_dl_version = '2005-2006' THEN
1412     IF p_loan_rec.loan_per_end_date < TO_DATE('01072005', 'DDMMYYYY') OR
1413        p_loan_rec.loan_per_end_date > TO_DATE('29062007', 'DDMMYYYY') THEN
1414       lv_complete := FALSE;
1415       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_ENDDT0506', 'LOAN_PER_END_DATE', p_loan_rec.loan_per_end_date);
1416     END IF;
1417   END IF;
1418  -- validating loan_per_begin_date
1419   IF p_dl_version = '2006-2007' THEN
1420     IF p_loan_rec.loan_per_begin_date < TO_DATE('02072005', 'DDMMYYYY') OR
1421        p_loan_rec.loan_per_begin_date > TO_DATE('30062007', 'DDMMYYYY') THEN
1422       lv_complete := FALSE;
1423       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_STARTDT0607', 'LOAN_PER_BEGIN', p_loan_rec.loan_per_begin_date );
1424     END IF;
1425   END IF;
1426   -- validating loan_per_end_date
1427   IF p_dl_version = '2006-2007' THEN
1428     IF p_loan_rec.loan_per_end_date < TO_DATE('01072006', 'DDMMYYYY') OR
1429        p_loan_rec.loan_per_end_date > TO_DATE('29062008', 'DDMMYYYY') THEN
1430       lv_complete := FALSE;
1431       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_LOAN_PER_ENDDT0607', 'LOAN_PER_END_DATE', p_loan_rec.loan_per_end_date);
1432     END IF;
1433   END IF;
1434 
1435   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1436     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Loan Per Dates Check over');
1437   END IF;
1438 
1439   -- validating academic begin and end dates
1440   IF (lv_message  IS NULL) THEN
1441     -- validating academic begin date
1442     IF p_dl_version = '2004-2005' THEN
1443       IF lv_acad_begin_date IS NULL OR
1444          lv_acad_begin_date < TO_DATE('02072003', 'DDMMYYYY') OR
1445          lv_acad_begin_date > TO_DATE('30062005', 'DDMMYYYY') THEN
1446          lv_complete := FALSE;
1447          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_STARTDT0405', 'ACAD_PER_BEGIN_DATE', lv_acad_begin_date);
1448          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1449             fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_acad_begin_date  '|| lv_acad_begin_date);
1450          END IF;
1451 
1452       END IF;
1453       -- validating academic end date
1454       IF lv_acad_end_date IS NULL OR
1455          lv_acad_end_date < TO_DATE('01072004', 'DDMMYYYY') OR
1456          lv_acad_end_date > TO_DATE('29062006', 'DDMMYYYY') THEN
1457          lv_complete := FALSE;
1458          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_ENDDT0405', 'ACAD_PER_END_DATE', lv_acad_end_date);
1459          IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1460             fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','lv_acad_end_date  '|| lv_acad_end_date);
1461          END IF;
1462 
1463       END IF;
1464     END IF;
1465     IF p_dl_version = '2005-2006' THEN
1466       IF lv_acad_begin_date IS NULL OR
1467          lv_acad_begin_date < TO_DATE('02072004', 'DDMMYYYY') OR
1468          lv_acad_begin_date > TO_DATE('30062006', 'DDMMYYYY') THEN
1469          lv_complete := FALSE;
1470          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_STARTDT0506', 'ACAD_PER_BEGIN_DATE', lv_acad_begin_date);
1471       END IF;
1472       -- validating academic end date
1473       IF lv_acad_end_date IS NULL OR
1474          lv_acad_end_date < TO_DATE('01072005', 'DDMMYYYY') OR
1475          lv_acad_end_date > TO_DATE('29062007', 'DDMMYYYY') THEN
1476          lv_complete := FALSE;
1477          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_ENDDT0506', 'ACAD_PER_END_DATE', lv_acad_end_date);
1478       END IF;
1479     END IF;
1480     IF p_dl_version = '2006-2007' THEN
1481       IF lv_acad_begin_date IS NULL OR
1482          lv_acad_begin_date < TO_DATE('02072005', 'DDMMYYYY') OR
1483          lv_acad_begin_date > TO_DATE('30062007', 'DDMMYYYY') THEN
1484          lv_complete := FALSE;
1485          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_STARTDT0607', 'ACAD_PER_BEGIN_DATE', lv_acad_begin_date);
1486       END IF;
1487       -- validating academic end date
1488       IF lv_acad_end_date IS NULL OR
1489          lv_acad_end_date < TO_DATE('01072006', 'DDMMYYYY') OR
1490          lv_acad_end_date > TO_DATE('29062008', 'DDMMYYYY') THEN
1491          lv_complete := FALSE;
1492          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ACAD_PER_ENDDT0607', 'ACAD_PER_END_DATE', lv_acad_end_date);
1493       END IF;
1494     END IF;
1495   END IF;
1496   -- validating note message
1497   IF ( LENGTH(p_loan_rec.note_message) > 20) THEN
1498     lv_complete := FALSE;
1499     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_NOTE_MSG', 'NOTE_MESSAGE', p_loan_rec.note_message);
1500   END IF;
1501 
1502   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1503     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Note Message Check Over');
1504   END IF;
1505 
1506   -- validating orig_fee_perct
1507   IF ( p_loan_rec.orig_fee_perct >= 100) THEN
1508     lv_complete := FALSE;
1509     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_ORIG_FEE_PCT', 'ORIG_FEE_PCT_NUM', p_loan_rec.orig_fee_perct);
1510   END IF;
1511   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1512     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' ORIG_FEE_PCT_NUM Check Over');
1513   END IF;
1514 
1515   -- validating int_reb_pct
1516   IF p_loan_rec.interest_rebate_percent_num >= 100 OR p_loan_rec.interest_rebate_percent_num < 0  THEN
1517     lv_complete := FALSE;
1518     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_INT_REB_PCT', 'INT_REB_PCT_NUM', p_loan_rec.interest_rebate_percent_num);
1519   END IF;
1520 
1521   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1522     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' INT_REB_PCT_NUM Check Over');
1523   END IF;
1524 
1525   IF  p_loan_rec.accepted_amt >= 999999999.99 OR p_loan_rec.accepted_amt < 0 THEN
1526     lv_complete := FALSE;
1527     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_AWD_AMT', 'LOAN_AMT_ACCEPTED', p_loan_rec.accepted_amt);
1528   END IF;
1529   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1530     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' LOAN_AMT_ACCEPTED Check Over');
1531   END IF;
1532 
1533   -- validating disbursement data from the IGF_AW_DB_CHG_DTLS table
1534   FOR rec_disb_chg_dtls IN cur_disb_chg_dtls(p_loan_rec.award_id) LOOP
1535     -- validating disbursement gross amount
1536     IF rec_disb_chg_dtls.disb_accepted_amt >= 999999999.99 OR rec_disb_chg_dtls.disb_accepted_amt < 0 THEN
1537       lv_complete := FALSE;
1538       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_AMT', 'DISB_GROSS_AMT', rec_disb_chg_dtls.disb_accepted_amt);
1539     END IF;
1540     IF rec_disb_chg_dtls.disb_net_amt >= 999999999.99 OR rec_disb_chg_dtls.disb_net_amt < 0 THEN
1541       lv_complete := FALSE;
1542       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_AMT', 'DISB_NET_AMT', rec_disb_chg_dtls.disb_net_amt);
1543     END IF;
1544     IF rec_disb_chg_dtls.orig_fee_amt >= 999999999.99 OR rec_disb_chg_dtls.orig_fee_amt < 0 THEN
1545       lv_complete := FALSE;
1546       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_AMT', 'ORIG_FEE_AMT ', rec_disb_chg_dtls.orig_fee_amt);
1547     END IF;
1548     IF rec_disb_chg_dtls.disb_net_amt >= 999999999.99 OR rec_disb_chg_dtls.interest_rebate_amt < 0 THEN
1549       lv_complete := FALSE;
1550       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_AMT', 'INTEREST_REBATE_AMT', rec_disb_chg_dtls.interest_rebate_amt);
1551     END IF;
1552 
1553     -- validating disbursement number
1554     IF ( rec_disb_chg_dtls.disb_num >= 21) THEN
1555       lv_complete := FALSE;
1556       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_NUM', 'DISB_NUM', rec_disb_chg_dtls.disb_num);
1557     END IF;
1558     -- validating disbursement sequence number
1559     IF ( rec_disb_chg_dtls.disb_seq_num >= 66) THEN
1560         lv_complete := FALSE;
1561         igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_SEQ_NUM', 'DISB_SEQ_NUM', rec_disb_chg_dtls.disb_seq_num);
1562     END IF;
1563     -- validating disbursement date
1564     IF p_dl_version = '2004-2005' THEN
1565       IF rec_disb_chg_dtls.disb_date < TO_DATE('22062003', 'DDMMYYYY') OR
1566          rec_disb_chg_dtls.disb_date > TO_DATE('27102006', 'DDMMYYYY') THEN
1567          lv_complete := FALSE;
1568          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_DATE0405', 'DISB_DATE', rec_disb_chg_dtls.disb_date);
1569       END IF;
1570     END IF;
1571     IF p_dl_version = '2005-2006' THEN
1572       IF rec_disb_chg_dtls.disb_date < TO_DATE('22062004', 'DDMMYYYY') OR
1573          rec_disb_chg_dtls.disb_date > TO_DATE('27102007', 'DDMMYYYY') THEN
1574          lv_complete := FALSE;
1575          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_DATE0506', 'DISB_DATE', rec_disb_chg_dtls.disb_date);
1576       END IF;
1577     END IF;
1578      IF p_dl_version = '2006-2007' THEN
1579       IF rec_disb_chg_dtls.disb_date < TO_DATE('22062005', 'DDMMYYYY') OR
1580          rec_disb_chg_dtls.disb_date > TO_DATE('27102008', 'DDMMYYYY') THEN
1581          lv_complete := FALSE;
1582          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'INV_DISB_DATE0607', 'DISB_DATE', rec_disb_chg_dtls.disb_date);
1583       END IF;
1584     END IF;
1585   END LOOP;
1586   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1587     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' Disb Check Over');
1588   END IF;
1589   --
1590   -- entity id validations
1591   --
1592   IF NOT validate_id(p_loan_rec.atd_entity_id_txt) THEN
1593     lv_complete := FALSE;
1594     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'ATD_SCHL_ID_NUM', 'ATD_ENTITY_ID_TXT', p_loan_rec.atd_entity_id_txt);
1595   ELSE
1596     IF p_loan_rec.atd_entity_id_txt > 99999999 THEN
1597       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1598         fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' p_loan_rec.atd_entity_id_txt ' ||p_loan_rec.atd_entity_id_txt );
1599       END IF;
1600       lv_complete := FALSE;
1601       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'ATD_SCHL_ID_MAX', 'ATD_ENTITY_ID_TXT', p_loan_rec.atd_entity_id_txt);
1602     END IF;
1603   END IF;
1604 
1605   IF NOT validate_id(p_loan_rec.rep_entity_id_txt)THEN
1606     lv_complete := FALSE;
1607     igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'REP_SCHL_ID_NUM', 'REP_ENTITY_ID_TXT', p_loan_rec.rep_entity_id_txt);
1608   ELSE
1609     IF p_loan_rec.rep_entity_id_txt > 99999999 THEN
1610       lv_complete := FALSE;
1611       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'REP_SCHL_ID_MAX', 'REP_ENTITY_ID_TXT', p_loan_rec.rep_entity_id_txt);
1612     END IF;
1613   END IF;
1614   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1615     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug',' Entity ID Check Over');
1616   END IF;
1617 
1618   IF p_loan_rec.fed_fund_code = 'DLP' THEN
1619 
1620     IF p_dl_version = '2004-2005' THEN
1621       -- validating borrower's date of birth
1622       IF parent_dtl_rec.p_date_of_birth < TO_DATE('01011905', 'DDMMYYYY') OR
1623          parent_dtl_rec.p_date_of_birth > TO_DATE('31121996', 'DDMMYYYY') THEN
1624          lv_complete := FALSE;
1625          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INVALID_DOB0405', 'P_DATE_OF_BIRTH', parent_dtl_rec.p_date_of_birth);
1626       END IF;
1627     END IF;
1628     IF p_dl_version = '2005-2006' THEN
1629       -- validating borrower's date of birth
1630       IF parent_dtl_rec.p_date_of_birth < TO_DATE('01011906', 'DDMMYYYY') OR
1631          parent_dtl_rec.p_date_of_birth > TO_DATE('31121997', 'DDMMYYYY') THEN
1632          lv_complete := FALSE;
1633          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INVALID_DOB0506', 'P_DATE_OF_BIRTH', parent_dtl_rec.p_date_of_birth);
1634       END IF;
1635     END IF;
1636     IF p_dl_version = '2006-2007' THEN
1637       -- validating borrower's date of birth
1638       IF parent_dtl_rec.p_date_of_birth < TO_DATE('01011907', 'DDMMYYYY') OR
1639          parent_dtl_rec.p_date_of_birth > TO_DATE('31121998', 'DDMMYYYY') THEN
1640          lv_complete := FALSE;
1641          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INVALID_DOB0607', 'P_DATE_OF_BIRTH', parent_dtl_rec.p_date_of_birth);
1642       END IF;
1643     END IF;
1644     -- validating borrower's SSN
1645     IF ( (parent_dtl_rec.p_ssn < '001010001') OR (parent_dtl_rec.p_ssn > '999999998') ) THEN
1646       lv_complete := FALSE;
1647       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INVALID_SSN', 'P_SSN', parent_dtl_rec.p_ssn);
1648     END IF;
1649 
1650     -- validating borrower's first name
1651     IF ( LENGTH(parent_dtl_rec.p_first_name) > 12) THEN
1652       lv_complete := FALSE;
1653       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_FIRST_NAME', 'P_FIRST_NAME', parent_dtl_rec.p_first_name);
1654     END IF;
1655 
1656     -- validating borrower's last name
1657     IF ( LENGTH(parent_dtl_rec.p_last_name) > 35) THEN
1658       lv_complete := FALSE;
1659       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_LAST_NAME', 'P_LAST_NAME', parent_dtl_rec.p_last_name);
1660     END IF;
1661 
1662     -- validating borrower's address line 1
1663     IF ( (LENGTH(parent_dtl_rec.p_permt_addr1) < 1) OR (LENGTH(parent_dtl_rec.p_permt_addr1) > 40) ) THEN
1664       lv_complete := FALSE;
1665       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_ADDR_LINE', 'P_PERMT_ADDR1', parent_dtl_rec.p_permt_addr1);
1666     END IF;
1667 
1668   -- validating borrower's address line 2
1669     IF ( (LENGTH(parent_dtl_rec.p_permt_addr2) < 1) OR (LENGTH(parent_dtl_rec.p_permt_addr2) > 40) ) THEN
1670       lv_complete := FALSE;
1671       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_ADDR_LINE', 'P_PERMT_ADDR2', parent_dtl_rec.p_permt_addr2);
1672     END IF;
1673 
1674     -- validating borrower's city
1675     IF ( LENGTH(parent_dtl_rec.p_permt_city) > 24) THEN
1676       lv_complete := FALSE;
1677       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_CITY', 'P_PERMT_CITY', parent_dtl_rec.p_permt_city);
1678     END IF;
1679 
1680     -- validating borrower's E-MAIL
1681     IF ( LENGTH(parent_dtl_rec.p_email_addr) > 128) THEN
1682       lv_complete := FALSE;
1683       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_EMAIL', 'P_EMAIL_ADDR', parent_dtl_rec.p_email_addr);
1684     END IF;
1685 
1686     -- validating borrower's Phone Number
1687     l_p_phone := igf_sl_gen.get_person_phone(p_loan_rec.p_person_id);
1688     IF l_p_phone = 'N/A' THEN
1689        p_p_phone := NULL; --bug 4093556, When there is no phone number existing for a student then the phone number tag was populated using '000000000000' .
1690                           --This has being changed to NULL(akomurav)
1691     ELSE
1692       IF NOT validate_id(l_p_phone) THEN
1693         lv_complete := FALSE;
1694         igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_PHONE_NUM_D', 'P_PERMT_PHONE', l_p_phone);
1695       ELSE
1696         p_p_phone := l_p_phone;
1697       END IF;
1698       IF LENGTH(l_p_phone) > 17 OR LENGTH(l_p_phone) < 10 THEN
1699          lv_complete := FALSE;
1700          igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_PHONE_NUM', 'P_PERMT_PHONE', l_p_phone);
1701       END IF;
1702     END IF;
1703     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1704       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','l_p_phone  '|| l_p_phone);
1705       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','p_p_phone  '|| p_p_phone);
1706     END IF;
1707 
1708     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1709       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Before zip vali');
1710     END IF;
1711 
1712     -- validating borrower's Zip Code
1713     IF ( (LENGTH(parent_dtl_rec.p_permt_zip) < 5) OR (LENGTH(parent_dtl_rec.p_permt_zip) > 13) ) THEN
1714       lv_complete := FALSE;
1715       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_ZIP_CODE', 'P_PERMT_ZIP', parent_dtl_rec.p_permt_zip);
1716     END IF;
1717 
1718     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1719       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_permt_zip  '|| parent_dtl_rec.p_permt_zip);
1720     END IF;
1721 
1722     -- validating borrower's State Code
1723     IF ( (LENGTH(parent_dtl_rec.p_permt_state) < 2) OR (LENGTH(parent_dtl_rec.p_permt_state) > 3) ) THEN
1724       lv_complete := FALSE;
1725       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_STATE_CODE', 'P_PERMT_STATE', parent_dtl_rec.p_permt_state);
1726     END IF;
1727 
1728     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1729       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_permt_state  '|| parent_dtl_rec.p_permt_state);
1730     END IF;
1731 
1732     -- validating borrower's driver licencse number
1733     IF ( LENGTH(parent_dtl_rec.p_license_num) > 20) THEN
1734       lv_complete := FALSE;
1735       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_DRIV_LIC_NUM', 'P_LICENSE_NUM', parent_dtl_rec.p_license_num);
1736     END IF;
1737 
1738     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1739       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_license_num  '|| parent_dtl_rec.p_license_num);
1740     END IF;
1741 
1742     IF parent_dtl_rec.p_license_num IS NOT NULL AND  parent_dtl_rec.p_license_state IS NULL THEN
1743       lv_complete := FALSE;
1744       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_DRIV_LIC_NUM_STATE', 'P_LICENSE_NUM', NULL);
1745     END IF;
1746 
1747     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1748       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_license_state  '|| parent_dtl_rec.p_license_state);
1749     END IF;
1750 
1751     IF parent_dtl_rec.p_license_state IS NOT NULL AND  parent_dtl_rec.p_license_num IS NULL THEN
1752       lv_complete := FALSE;
1753       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_DRIV_LIC_STATE_NUM', 'P_LICENSE_ST', NULL);
1754     END IF;
1755 
1756     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1757       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_license_num  '|| parent_dtl_rec.p_license_num);
1758     END IF;
1759 
1760     -- validating borrower's citizenship status code
1761     IF ( LENGTH(parent_dtl_rec.p_citizenship_status) > 1) THEN
1762       lv_complete := FALSE;
1763       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', 'P_INV_CIT_STATUS', 'P_CITIZENSHIP_STATUS', parent_dtl_rec.p_citizenship_status);
1764     END IF;
1765 
1766     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1767       fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','parent_dtl_rec.p_citizenship_status  '|| parent_dtl_rec.p_citizenship_status);
1768     END IF;
1769 
1770   END IF;
1771 
1772   -- museshad (Bug 4116399)  - Stafford loan limit validation
1773   IF p_loan_rec.fed_fund_code IN ('DLS', 'DLU') THEN
1774     lv_message     := NULL;
1775     lv_lookup_code  := NULL;
1776 
1777     loan_limit_validation (
1778                             p_base_id     =>    p_loan_rec.base_id,
1779                             p_fund_type   =>    p_loan_rec.fed_fund_code,
1780                             p_award_id    =>    p_loan_rec.award_id,
1781                             p_msg_name    =>    lv_message
1782                           );
1783 
1784     IF lv_message IS NOT NULL THEN
1785       -- Stafforf loan limit validation FAILED
1786       lv_complete := FALSE;
1787 
1788       IF lv_message = 'IGF_AW_AGGR_LMT_ERR' THEN
1789         lv_lookup_code := 'AGGR_LMT_CHK';
1790       ELSIF lv_message = 'IGF_AW_ANNUAL_LMT_ERR' THEN
1791         lv_lookup_code := 'ANNUAL_LMT_CHK';
1792       ELSIF lv_message = 'IGF_AW_SUB_AGGR_LMT_ERR' THEN
1793         lv_lookup_code := 'SUB_AGGR_LMT_CHK';
1794       ELSIF lv_message = 'IGF_AW_SUB_LMT_ERR' THEN
1795         lv_lookup_code := 'SUB_LMT_CHK';
1796       ELSIF lv_message = 'IGF_AW_LOAN_LMT_NOT_FND' THEN
1797         lv_lookup_code := 'LOAN_LMT_SETUP_CHK';
1798       END IF;
1799 
1800       igf_sl_edit.insert_edit(p_loan_rec.loan_number, 'V', 'IGF_SL_ERR_CODES', lv_lookup_code, NULL, NULL);
1801 
1802       -- Log
1803       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1804         fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Stafford loan limit validation for award_id ' ||p_loan_rec.award_id|| ' FAILED with message: ' ||lv_message);
1805       END IF;
1806     ELSE
1807       -- Stafforf loan limit validation PASSED
1808       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
1809         fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.debug','Stafford loan limit validation PASSED for award_id ' ||p_loan_rec.award_id);
1810       END IF;
1811     END IF;
1812   END IF;
1813   -- museshad (Bug 4116399)
1814 
1815   IF lv_complete = FALSE AND p_call_from = 'JOB' THEN
1816     -- Display reject details on the Concurrent Manager Log File.
1817     DECLARE
1818     lv_log_mesg VARCHAR2(1000);
1819     CURSOR c_reject IS
1820       SELECT rpad(field_desc,50)||sl_error_desc reject_desc FROM igf_sl_edit_report_v
1821       WHERE  loan_number = p_loan_rec.loan_number
1822       AND    orig_chg_code = 'V';
1823     BEGIN
1824       fnd_file.put_line(fnd_file.log, '');
1825       fnd_file.put_line(fnd_file.log, '');
1826       lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','LOAN_NUMBER')||' : '||p_loan_rec.loan_number;
1827       fnd_file.put_line(fnd_file.log, lv_log_mesg);
1828       lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','S_SSN')      ||' : '||student_dtl_rec.p_ssn;
1829       fnd_file.put_line(fnd_file.log, lv_log_mesg);
1830       lv_log_mesg := igf_aw_gen.lookup_desc('IGF_SL_LOAN_FIELDS','S_FULL_NAME')||' : '
1831                                                      ||student_dtl_rec.p_first_name||' '||student_dtl_rec.p_last_name;
1832       fnd_file.put_line(fnd_file.log, lv_log_mesg);
1833       FOR rej_rec IN c_reject LOOP
1834         fnd_file.put_line(fnd_file.log,'    '||rej_rec.reject_desc);
1835       END LOOP;
1836     END;
1837   END IF;
1838 
1839   RETURN lv_complete;
1840 
1841   EXCEPTION
1842   WHEN OTHERS THEN
1843   IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
1844        fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_sl_dl_validation.cod_loan_validations.exception','Exception:'||SQLERRM);
1845   END IF;
1846   fnd_message.set_name('IGF','IGF_GE_UNHANDLED_EXP');
1847   fnd_message.set_token('NAME','IGF_SL_DL_VALIDATION.COD_LOAN_VALIDATIONS');
1848   igs_ge_msg_stack.add;
1849   app_exception.raise_exception;
1850 END cod_loan_validations;
1851 
1852 
1853 FUNCTION  cod_loan_validations ( p_cal_type   VARCHAR2, p_seq_number NUMBER,
1854                                  p_base_id    NUMBER,
1855                                  p_report_id  VARCHAR2,
1856                                  p_attend_id  VARCHAR2,
1857                                  p_fund_id    NUMBER,
1858                                  p_loan_id    NUMBER)
1859 RETURN BOOLEAN
1860 IS
1861   loan_rec       igf_sl_dl_gen_xml.cur_pick_loans_all_status%ROWTYPE;
1862   p_isir_ssn     VARCHAR2(30);
1863   p_isir_dob     DATE;
1864   p_isir_lname   VARCHAR2(100);
1865   p_isir_dep     VARCHAR2(1);
1866   p_isir_tnum    NUMBER;
1867   p_acad_begin   DATE;
1868   p_acad_end     DATE;
1869   p_s_phone      VARCHAR2(30);
1870   p_p_phone      VARCHAR2(30);
1871 
1872 BEGIN
1873   OPEN igf_sl_dl_gen_xml.cur_pick_loans_all_status(p_cal_type, p_seq_number,
1874                                         p_base_id,
1875                                         p_report_id,
1876                                         p_attend_id,
1877                                         p_fund_id,
1878                                         p_loan_id);
1879   FETCH igf_sl_dl_gen_xml.cur_pick_loans_all_status INTO loan_rec;
1880   CLOSE igf_sl_dl_gen_xml.cur_pick_loans_all_status;
1881 
1882   loan_rec.grade_level_code := NVL(loan_rec.override_grade_level_code,loan_rec.grade_level_code);
1883 
1884   RETURN cod_loan_validations(loan_rec,'FORM',p_isir_ssn,
1885                               p_isir_dob,p_isir_lname,
1886                               p_isir_dep,p_isir_tnum,
1887                               p_acad_begin,p_acad_end,p_s_phone,p_p_phone);
1888 
1889 END cod_loan_validations;
1890 
1891 FUNCTION  check_full_participant  (
1892                                     p_ci_cal_type           IN igs_ca_inst_all.cal_type%TYPE,
1893                                     p_ci_sequence_number    IN igs_ca_inst_all.sequence_number%TYPE,
1894                                     p_fund_type             IN VARCHAR2
1895                                   )
1896 RETURN BOOLEAN
1897 AS
1898   /*************************************************************
1899   Created By : ugummall
1900   Date Created On : 01-OCT-2004
1901   Purpose :
1902   Know limitations, enhancements or remarks
1903   Change History
1904   Who             When            What
1905 
1906   (reverse chronological order - newest change first)
1907   ***************************************************************/
1908 
1909   -- Cursor to get pell participant code and direct loan participant code
1910   CURSOR cur_get_participants_codes ( cp_cal_type         igs_ca_inst_all.cal_type%TYPE,
1911                                       cp_sequence_number  igs_ca_inst_all.sequence_number%TYPE) IS
1912     SELECT  bam.dl_participant_code, bam.pell_participant_code
1913       FROM  igf_ap_batch_aw_map_all bam
1914      WHERE  bam.ci_cal_type = cp_cal_type
1915       AND   bam.ci_sequence_number = cp_sequence_number
1916       AND   bam.award_year_status_code = 'O';
1917 
1918   rec_get_participants_codes  cur_get_participants_codes%ROWTYPE;
1919 
1920 BEGIN
1921 
1922   IF (p_fund_type IS NULL OR p_ci_cal_type IS NULL OR p_ci_sequence_number IS NULL) THEN
1923     RETURN FALSE;
1924   END IF;
1925 
1926   -- open the cursor to get participant codes.
1927   OPEN cur_get_participants_codes(p_ci_cal_type, p_ci_sequence_number);
1928   FETCH cur_get_participants_codes INTO rec_get_participants_codes;
1929   IF cur_get_participants_codes%NOTFOUND THEN
1930     CLOSE cur_get_participants_codes;
1931     RETURN FALSE;
1932   ELSE
1933     CLOSE cur_get_participants_codes;
1934     IF (p_fund_type = 'PELL') THEN
1935       IF (rec_get_participants_codes.pell_participant_code = 'FULL_PARTICIPANT') THEN
1936         RETURN TRUE;
1937       ELSE
1938         RETURN FALSE;
1939       END IF;
1940     ELSIF ( p_fund_type = 'DL') THEN
1941       IF (rec_get_participants_codes.dl_participant_code = 'FULL_PARTICIPANT') THEN
1942         RETURN TRUE;
1943       ELSE
1944         RETURN FALSE;
1945       END IF;
1946     ELSE
1947       RETURN FALSE;
1948     END IF;
1949   END IF;
1950 
1951 EXCEPTION
1952   WHEN OTHERS THEN
1953     fnd_message.set_name('IGF','IGF_GE_UNHANDLED_EXP');
1954     fnd_message.set_token('NAME','IGF_SL_DL_VALIDATION.CHECK_FULL_PARTICIPANT');
1955     igs_ge_msg_stack.add;
1956     app_exception.raise_exception;
1957 
1958 END check_full_participant;
1959 
1960 FUNCTION validate_id (p_entity_id VARCHAR2)
1961 RETURN BOOLEAN
1962 IS
1963   lv_compare_str VARCHAR2(80);
1964   BEGIN
1965      lv_compare_str := '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"[]{}`~!@#$%^&*_+=-,./?><():; ' ||'''';
1966      IF p_entity_id = TRANSLATE(UPPER(p_entity_id),lv_compare_str ,'1234567890') THEN
1967         RETURN TRUE;
1968      ELSE
1969         RETURN FALSE;
1970      END IF;
1971 
1972   EXCEPTION
1973   WHEN OTHERS THEN
1974     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
1975          fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_sl_dl_validation.validate_id.exception','Exception:'||SQLERRM);
1976     END IF;
1977     fnd_message.set_name('IGF','IGF_GE_UNHANDLED_EXP');
1978     fnd_message.set_token('NAME','IGF_SL_DL_VALIDATION.VALIDATE_ID');
1979     igs_ge_msg_stack.add;
1980     app_exception.raise_exception;
1981 
1982   END validate_id;
1983 
1984 END igf_sl_dl_validation;