DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_SV_BATCH_PROCESS_PKG

Source


1 PACKAGE BODY IGS_SV_BATCH_PROCESS_PKG AS
2 /* $Header: IGSSV01B.pls 120.25 2006/07/28 14:31:42 prbhardw noship $ */
3 
4 /******************************************************************
5 
6     Copyright (c) 2002 Oracle Corporation, Redwood Shores, CA, USA
7                          All rights reserved.
8 
9  Created By         : Don Shellito
10 
11  Date Created By    : Oct-01-2002
12 
13  Purpose            : This package is to be used for the processing and
14                       gathering of the SEVIS related information that is
15                       to be sent for transmital.
16 
17                       The concurrent programs that are to be executed are
18                       defined globally.  All other procedures are to be
19                       defined internally.
20 
21  remarks            : None
22 
23  Change History
24 
25 Who                   When           What
26 -----------------------------------------------------------
27 Arkadi Tereshenkov    Oct-14-2002    New Package created.
28 pkpatel               23-APR-2003    Bug 2908378(Solved Multiple Issues)
29 gmaheswa              12-Nov-2003    Bug 3227107 address related changes
30 pkpatel               4-Dec-2003     Bug 3227107 (Used the status column for address in Validate_Site_Info)
31 ssaleem               13-Apr-2005    Bug 4293911 Fnd User customer Id  replaced with person
32 		                     party id
33 ******************************************************************/
34 
35 /*************** Values from addresses    bug #2630743***********************************
36 SEVIS_PRIMARY_US - SEVIS Primary US Address/SEVIS Primary Address in  United States
37 SEVIS_PRIMARY_FOREIGN - SEVIS Primary Foreign Address/SEVIS Primary  Address outside of United States
38 SEVIS_SITE_OF_ACTIVITY - SEVIS Site of Activity/SEVIS Site of Activity
39 ***********************************************************************************/
40 
41 G_PKG_NAME         CONSTANT VARCHAR2(30) := 'IGS_SV_BATCH_PROCESS_PKG';
42 g_us_addr_usage    CONSTANT VARCHAR2(30) := 'SEVIS_PRIMARY_US';
43 g_f_addr_usage     CONSTANT VARCHAR2(30) := 'SEVIS_PRIMARY_FOREIGN';
44 g_site_addr_usage  CONSTANT VARCHAR2(30) := 'SEVIS_SITE_OF_ACTIVITY';
45 g_school_sevis_id  CONSTANT VARCHAR2(30) := 'SV_SCH_CD';
46 g_person_sevis_id  CONSTANT VARCHAR2(30) := 'SEVIS_ID';
47 g_sch_p_sevis_id   CONSTANT VARCHAR2(30) := 'SV_PRG_CD';
48 g_block_mode       CONSTANT NUMBER(1)    := 1; --Insert mode 0:1. If 1 - inserts only changed optional info in the block. , if 0 - all parts of the block
49 g_prod             VARCHAR2(3)           := 'IGS';
50 g_debug_level      NUMBER(1) := 0;
51 g_update_login     NUMBER(15);
52 g_update_by        NUMBER(15);
53 g_delimeter        CONSTANT VARCHAR2(1) := '|';
54 g_create_count    NUMBER(15) := 0;     -- prbhardw CP enhancement
55 g_update_count    NUMBER(15) := 0;     -- prbhardw CP enhancement
56 g_running_create_batch NUMBER(15);     -- prbhardw CP enhancement
57 g_running_update_batch NUMBER(15);     -- prbhardw CP enhancement
58 l_prog_label CONSTANT VARCHAR2(500) :='igs.plsql.igs_sv_batch_process_pkg';
59 l_label VARCHAR2(4000);
60 l_debug_str VARCHAR2(32000);
61 g_person_status    VARCHAR2(6)      := 'NEW';
62 g_legal_status    VARCHAR2(6)      := 'NEW';
63 g_nonimg_form_id NUMBER(15);
64 TYPE g_address_rec_type IS TABLE OF IGS_SV_ADDRESSES%ROWTYPE INDEX BY BINARY_INTEGER;
65 TYPE g_edu_rec_type IS TABLE OF IGS_SV_PRGMS_INFO%ROWTYPE INDEX BY BINARY_INTEGER;
66 TYPE g_dependent_rec_type IS TABLE OF IGS_SV_DEPDNT_INFO%ROWTYPE INDEX BY BINARY_INTEGER;
67 TYPE g_convictions_rec_type IS TABLE OF IGS_SV_CONVICTIONS%ROWTYPE INDEX BY BINARY_INTEGER;
68 TYPE g_empl_rec_type IS TABLE OF IGS_SV_EMPL_INFO%ROWTYPE INDEX BY BINARY_INTEGER;
69 TYPE g_parallel_batches_tbl IS TABLE OF IGS_SV_BATCHES.BATCH_ID%TYPE INDEX BY BINARY_INTEGER;
70 TYPE g_running_batches_tbl IS TABLE OF IGS_SV_BATCHES.BATCH_ID%TYPE INDEX BY BINARY_INTEGER;
71 
72 g_parallel_batches g_parallel_batches_tbl;
73 g_running_batches  g_running_batches_tbl;
74 
75 TYPE c_stdnt_list IS RECORD
76 (
77     person_id        igs_pe_nonimg_form.person_id%TYPE,
78     form_id	     igs_pe_ev_form.ev_form_id%TYPE	,
79     person_number    hz_parties.party_number%TYPE,
80     no_show_flag     igs_pe_ev_form.no_show_flag%TYPE	,
81     reprint_reason   igs_pe_ev_form.reprint_reason%TYPE
82 );
83 
84 TYPE t_student_rec IS RECORD
85 (   person_id        igs_sv_persons.person_id%TYPE,
86     batch_id         igs_sv_persons.batch_id%TYPE,
87     record_number    igs_sv_persons.record_number%TYPE,
88     record_status    igs_sv_persons.record_status%TYPE, --(N)ew  (C)hanged
89     person_number    igs_sv_persons.person_number%TYPE,
90     sevis_user_id    igs_sv_batches.sevis_user_id%TYPE,
91     batch_type       igs_sv_batches.batch_type%TYPE,
92     form_id          igs_sv_persons.form_id%TYPE,
93     print_form       igs_sv_persons.print_form%TYPE,
94     dep_flag         VARCHAR2(1),
95     person_status    VARCHAR2(1),
96     changes_found    VARCHAR2(1),
97     issue_status     VARCHAR2(1),
98     bio_status       VARCHAR2(1),
99     empl_status      VARCHAR2(1),
100     other_status     VARCHAR2(1),
101     f_addr_status    VARCHAR2(1),
102     us_addr_status   VARCHAR2(1),
103     edu_status       VARCHAR2(1),
104     dep_status       VARCHAR2(1),
105     fin_status       VARCHAR2(1),
106     conv_status      VARCHAR2(1),
107     site_addr_status VARCHAR2(1),
108     legal_status     VARCHAR2(1),
109     dep_count        NUMBER(3),
110     edu_count        NUMBER(3),
111     no_show_flag     igs_sv_persons.no_show_flag%TYPE,
112     reprint_reason   igs_sv_persons.reprint_rsn_code%TYPE		-- prbhardw
113 );
114 
115 
116 
117 PROCEDURE Put_Log_Msg (
118    p_message IN VARCHAR2,
119    p_level   IN NUMBER
120 );
121 
122 PROCEDURE Generate_Message;
123 
124 PROCEDURE Create_Batch(
125    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
126    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
127    p_batch_type       IN  VARCHAR2,  -- Batch type E(ev),  I(international)
128    p_validate_only    IN  VARCHAR2,  -- Validate only flag  'Y'  'N'
129    p_org_id           IN  VARCHAR2,
130    p_dso_id	      IN  VARCHAR2,
131    p_dso_party_id     IN  NUMBER,
132    p_org_party_id     IN  NUMBER
133 ) ;
134 
135 PROCEDURE Purge_Batch(
136    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
137    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
138    p_batch_type       IN  VARCHAR2  -- Batch type E(ev),  I(international)
139 ) ;
140 
141 PROCEDURE Insert_Summary_Info(
142    p_batch_id  IN  igs_sv_btch_summary.batch_id%TYPE,
143    p_person_id  IN  igs_sv_btch_summary.person_id%TYPE,
144    p_action_code  IN  igs_sv_btch_summary.action_code%TYPE,
145    p_tag_code  IN  igs_sv_btch_summary.tag_code%TYPE,
146    p_adm_action IN  igs_sv_btch_summary.adm_action_code%TYPE,
147    p_owner_table_name IN igs_sv_btch_summary.owner_table_name%TYPE,
148    p_owner_table_id  IN  igs_sv_btch_summary.OWNER_TABLE_IDENTIFIER%TYPE
149 );
150 
151 PROCEDURE compose_log_file;
152 PROCEDURE xml_log_file (p_batch_id  IN  igs_sv_btch_summary.batch_id%TYPE);
153 /*****************************************************************/
154 PROCEDURE Submit_Event (
155   p_batch_type IN VARCHAR2,
156   p_batch_id   IN IGS_SV_BATCHES.BATCH_ID%TYPE
157 )
158 IS
159 
160   l_parameter_list wf_parameter_list_t := wf_parameter_list_t();
161   l_event_name    VARCHAR2(255);
162   l_event_key     VARCHAR2(255);
163   l_party_id      HZ_PARTY_SITES.PARTY_ID%TYPE;
164   l_party_site_id HZ_PARTY_SITES.PARTY_SITE_ID%TYPE;
165   l_trans_type    VARCHAR2(30) :='IGS_SV';
166   l_trans_subtype VARCHAR2(30) ;
167   l_debug_level   NUMBER := 0;
168   l_user_id       VARCHAR2(100);
169   l_party_type    VARCHAR2(30) :='C';
170 
171   CURSOR c_party_data IS
172    SELECT party_id,
173           party_site_id
174      FROM ecx_tp_headers
175     WHERE tp_header_id IN
176           ( SELECT tp_header_id
177               FROM ecx_tp_details
178              WHERE ext_process_id IN
179              ( SELECT ext_process_id
180                  FROM ecx_ext_processes
181                 WHERE direction = 'OUT'
182                       AND transaction_id IN
183                 ( SELECT transaction_id
184                     FROM ecx_transactions
185                    WHERE transaction_type=l_trans_type
186                      AND transaction_subtype =l_trans_subtype
187                 )
188               )
189            );
190 
191    CURSOR c_get_user_id IS
192      SELECT sevis_user_id
193      FROM igs_sv_batches
194      WHERE batch_id = p_batch_id;
195 
196      l_con_req_id NUMBER;
197 BEGIN
198   /* Debug */
199 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
200   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Submit_Event';
201   l_debug_str := 'Entering Submit_Event. p_batch_type is ' || p_batch_type || 'and p_batch_id is ' || p_batch_id;
202   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
203 END IF;
204 
205   IF p_batch_type = 'E' THEN
206 
207     l_event_name := 'oracle.apps.igs.sv.ev.submit';
208     l_trans_subtype :='SEVISEVO';
209 
210   ELSE
211 
212     l_event_name := 'oracle.apps.igs.sv.ni.submit';
213     l_trans_subtype :='SEVISO';
214   END IF;
215 
216   --SELECT FND_GLOBAL.CONC_REQUEST_ID INTO l_con_req_id FROM DUAL;
217 
218   l_con_req_id := FND_GLOBAL.CONC_REQUEST_ID;
219 
220   OPEN c_party_data;
221   FETCH c_party_data INTO l_party_id, l_party_site_id;
222   CLOSE c_party_data;
223 
224   IF l_party_id IS NULL THEN
225       /* Debug */
226 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
227 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Submit_Event';
228 	  l_debug_str := 'IGS_SV_PRTNR_STP_ERR error in Submit_Event.';
229 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
230 	END IF;
231 
232       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_PRTNR_STP_ERR'); -- No trading partner setup found
233       FND_MSG_PUB.Add;
234       RAISE FND_API.G_EXC_ERROR;
235 
236   END IF;
237 
238   OPEN c_get_user_id;
239   FETCH c_get_user_id INTO l_user_id;
240   CLOSE c_get_user_id;
241 
242   l_event_key := p_batch_id  || l_con_req_id;
243 
244 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
245 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.event_parameters';
246 	  l_debug_str := 'batch_id= '|| p_batch_id || 'l_party_id= '|| l_party_id || ' l_party_site_id='||l_party_site_id || 'l_trans_type= ' || l_trans_type || ' l_trans_subtype= ' || l_trans_subtype || ' l_debug_level = ' || l_debug_level ;
247 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
248 	END IF;
249   /* Manoj
250   wf_event.AddParameterToList(p_name=>'DOC_ID',p_value=>p_batch_id,p_parameterlist=>l_parameter_list);
251   wf_event.AddParameterToList(p_name=>'PARTY_ID',p_value=>l_party_id,p_parameterlist=>l_parameter_list);
252   wf_event.AddParameterToList(p_name=>'PARTY_SITE_ID',p_value=>l_party_site_id,p_parameterlist=>l_parameter_list);
253   wf_event.AddParameterToList(p_name=>'TRANS_TYPE',p_value=>l_trans_type,p_parameterlist=>l_parameter_list);
254   wf_event.AddParameterToList(p_name=>'TRANS_SUB_TYPE',p_value=>l_trans_subtype,p_parameterlist=>l_parameter_list);
255 Manoj*/
256   --l_user_id := '999-999-777';
257   wf_event.AddParameterToList(p_name=>'ECX_DOCUMENT_ID',p_value=>p_batch_id,p_parameterlist=>l_parameter_list);
258   wf_event.AddParameterToList(p_name=>'ECX_PARTY_ID',p_value=>l_party_id,p_parameterlist=>l_parameter_list);
259   wf_event.AddParameterToList(p_name=>'ECX_PARTY_SITE_ID',p_value=>l_party_site_id,p_parameterlist=>l_parameter_list);
260   wf_event.AddParameterToList(p_name=>'ECX_TRANSACTION_TYPE',p_value=>l_trans_type,p_parameterlist=>l_parameter_list);
261   wf_event.AddParameterToList(p_name=>'ECX_TRANSACTION_SUBTYPE',p_value=>l_trans_subtype,p_parameterlist=>l_parameter_list);
262   wf_event.AddParameterToList(p_name=>'ECX_PARTY_TYPE',p_value=>l_party_type,p_parameterlist=>l_parameter_list);
263   wf_event.AddParameterToList(p_name=>'ECX_DEBUG_LEVEL',p_value=>l_debug_level,p_parameterlist=>l_parameter_list);
264   wf_event.AddParameterToList(p_name=>'PARAMETER1',p_value=>p_batch_id,p_parameterlist=>l_parameter_list);
265   wf_event.AddParameterToList(p_name=>'PARAMETER2',p_value=>l_user_id,p_parameterlist=>l_parameter_list);
266 
267 
268   -- Raise the Event without the message
269   -- The Generate Function Callback will create the XML Document
270   -- Also possible that an API might be called from here to
271   -- to generate the XML document
272   wf_event.raise( p_event_name => l_event_name,
273                   p_event_key  => l_event_key,
274                   p_parameters => l_parameter_list);
275 
276 
277   l_parameter_list.DELETE;
278 
279  /* Debug */
280 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
281   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Submit_Event';
282   l_debug_str := 'Exiting Submit_Event. l_event_key: '||l_event_key;
283   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
284 END IF;
285 
286 END;
287 
288 
289 /******************************************************************
290    Created By         : Arkadi Tereshenkov
291    Date Created By    : Oct 14, 2002
292    Purpose            :
293    remarks            :
294 
295    Change History
296    Who                  When            What
297 ------------------------------------------------------------------------
298 
299 ******************************************************************/
300 PROCEDURE Dump_Current_Person(
301    p_student_rec IN t_student_rec
302 ) IS
303 
304    l_str VARCHAR2(2000);
305 
306 BEGIN
307 	/* Debug */
308 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
309 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Dump_Current_Person';
310 	  l_debug_str := 'Entering Dump_Current_Person. p_student_rec.person_id is '|| p_student_rec.person_id;
311 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
312 	END IF;
313 
314   -- This is a debug procedure used to output a current person info if an error occurs
315   Put_Log_Msg('****** Execution error - dumping current person *********',1);
316 
317   Put_Log_Msg(' person_id '||        p_student_rec.person_id ,1);
318   Put_Log_Msg(' form_id   '||        p_student_rec.form_id ,1);
319   Put_Log_Msg(' print_form   '||        p_student_rec.print_form ,1);
320   Put_Log_Msg(' record_number '||    p_student_rec.record_number ,1);
321   Put_Log_Msg(' record_status '||    p_student_rec.record_status ,1);
322   Put_Log_Msg(' person_number '||    p_student_rec.person_number ,1);
323   Put_Log_Msg(' sevis_user_id '||    p_student_rec.sevis_user_id ,1);
324   Put_Log_Msg(' form_id '||          p_student_rec.form_id ,1);
325   Put_Log_Msg(' person_status '||    p_student_rec.person_status ,1);
326   Put_Log_Msg(' issue_status  '||    p_student_rec.issue_status ,1);
327   Put_Log_Msg(' bio_status '||       p_student_rec.bio_status ,1);
328   Put_Log_Msg(' other_status '||     p_student_rec.other_status ,1);
329   Put_Log_Msg(' f_addr_status '||    p_student_rec.f_addr_status ,1);
330   Put_Log_Msg(' us_addr_status '||   p_student_rec.us_addr_status ,1);
331   Put_Log_Msg(' edu_status '||       p_student_rec.edu_status ,1);
332   Put_Log_Msg(' dep_status '||       p_student_rec.dep_status ,1);
333   Put_Log_Msg(' fin_status '||       p_student_rec.fin_status ,1);
334   Put_Log_Msg(' dep_count '||        p_student_rec.dep_count ,1);
335   Put_Log_Msg(' edu_count '||        p_student_rec.edu_count ,1);
336 
337   Put_Log_Msg('********************************************************',1);
338   /* Debug */
339 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
340 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Dump_Current_Person';
341 	  l_debug_str := 'Exiting Dump_Current_Person.';
342 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
343 	END IF;
344 END Dump_Current_Person;
345 
346 /******************************************************************
347    Created By         : Arkadi Tereshenkov
348    Date Created By    : Oct 14, 2002
349    Purpose            :
350    remarks            :
351 
352    Change History
353    Who                  When            What
354    pkpatel              22-APR-2003     Bug No: 2908378
355                                         Modified the query to select the Active local institution. Added closed_ind = 'N'
356                                         while selecting the ORG_ALTERNATE_ID_TYPE
357                         9-DEC-2003      Bug No: 2908378 (Used the profile for local Institution)
358 ------------------------------------------------------------------------
359 
360 
361 FUNCTION Get_School_Sevis_Id (
362   p_batch_type IN VARCHAR2
363 ) RETURN VARCHAR2
364 IS
365 
366    CURSOR c_alt_id (cp_local_inst hz_parties.party_number%TYPE)
367    IS
368      SELECT org_alternate_id
369        FROM igs_or_org_alt_ids
370        WHERE org_structure_id = cp_local_inst
371        AND sysdate BETWEEN NVL(start_date,sysdate-1) and NVL(end_date,sysdate+1)
372        AND ( ( org_alternate_id_type =
373                      ( SELECT org_alternate_id_type
374                        FROM igs_or_org_alt_idtyp
375                        WHERE system_id_type = g_school_sevis_id AND
376                              close_ind = 'N' AND
377                              inst_flag = 'Y'
378                       ) AND p_batch_type ='I')
379                     OR  ( org_alternate_id_type =
380                          ( SELECT org_alternate_id_type
381                            FROM igs_or_org_alt_idtyp
382                            WHERE system_id_type = g_sch_p_sevis_id AND
383                                  close_ind = 'N' AND
384                                  inst_flag = 'Y'
385                         )
386                         AND p_batch_type ='E')
387                   );
388 
389 l_alt_id   VARCHAR2(255);
390 l_local_inst hz_parties.party_number%TYPE;
391 
392 BEGIN
393 /* Debug
394 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
395   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_School_Sevis_Id';
396   l_debug_str := 'Entering Get_School_Sevis_Id. p_batch_type is '|| p_batch_type;
397   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
398 END IF;
399 
400  l_local_inst := FND_PROFILE.VALUE('IGS_OR_LOCAL_INST');
401 
402      OPEN c_alt_id(l_local_inst);
403      FETCH c_alt_id INTO l_alt_id;
404      CLOSE c_alt_id;
405 
406 /* Debug
407 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
408   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_School_Sevis_Id';
409   l_debug_str := 'Exiting Get_School_Sevis_Id with return value '|| l_alt_id;
410   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
411 END IF;
412 
413    RETURN l_alt_id;
414 
415 
416 END Get_School_Sevis_Id;
417 ******************************************************************/
418 /******************************************************************
419    Created By         : prbhardw
420 
421    Date Created By    : Jan 03, 2006
422 
423    Purpose            : Function to check mutually exclusive tags.
424 
425    Change History
426    Who                  When            What
427 ------------------------------------------------------------------------
428 
429 ******************************************************************/
430 FUNCTION chk_mut_exclusive(p_batch_id igs_sv_btch_summary.batch_id%TYPE,
431 			    p_person_id igs_sv_btch_summary.person_id%TYPE,
432 			    p_action igs_sv_btch_summary.action_code%TYPE,
433 			    p_tag_code igs_sv_btch_summary.tag_code%TYPE
434 			   )
435  RETURN NUMBER
436 IS
437      l_is_mut_excl BOOLEAN := TRUE;
438      l_return_batch_id NUMBER(14) := -1;
439      l_num_parallel_rec NUMBER(4) := 0;
440      l_rec_count NUMBER(5) := 0;
441 BEGIN
442      l_is_mut_excl := igs_sv_util.ismutuallyexclusive(p_person_id,
443 						      p_batch_id,
444 						      p_action,
445 		                                      p_tag_code);
446      IF l_is_mut_excl = TRUE THEN
447 	 IF(g_parallel_batches.COUNT >0) THEN
448  	   FOR i IN g_parallel_batches.FIRST..g_parallel_batches.LAST LOOP
449 	       l_rec_count := l_rec_count +1;
450 	       l_is_mut_excl := igs_sv_util.ismutuallyexclusive(p_person_id,
451 						      g_parallel_batches(l_rec_count),
452 						      p_action,
453 		                                      p_tag_code);
454 	       IF l_is_mut_excl = FALSE THEN
455 	            l_return_batch_id := g_parallel_batches(l_rec_count);
456 	            igs_sv_util.create_Person_Rec(p_person_id,p_batch_id,l_return_batch_id);
457 		    EXIT;
458 	       END IF;
459  	   END LOOP;
460 	 END IF;
461      ELSE
462 	  l_return_batch_id := p_batch_id;
463      END IF;
464 
465      IF l_is_mut_excl = TRUE THEN
466           l_num_parallel_rec := g_parallel_batches.count + 1;
467 	  l_return_batch_id :=  igs_sv_util.open_new_batch(p_person_id,p_batch_id, 'CONN_JOB');
468 	  g_parallel_batches(l_num_parallel_rec) := l_return_batch_id;
469      END IF;
470      RETURN l_return_batch_id;
471 
472 END chk_mut_exclusive;
473 
474 
475 /******************************************************************
476    Created By         : Arkadi Tereshenkov
477    Date Created By    : Oct 14, 2002
478    Purpose            :
479    remarks            :
480 
481    Change History
482    Who                  When            What
483 ------------------------------------------------------------------------
484 
485 ******************************************************************/
486 FUNCTION Is_Number (
487   p_num     VARCHAR2
488 ) RETURN VARCHAR2
489 IS
490 
491 BEGIN
492 /* Debug */
493 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
494   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Is_Number';
495   l_debug_str := 'Entering Is_Number. p_num is '|| p_num;
496   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
497 END IF;
498       Put_Log_Msg('Is_Number begins',0);
499 
500   RETURN to_char(to_number(p_num));
501 
502 EXCEPTION
503 
504   WHEN VALUE_ERROR THEN
505     /* Debug */
506 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
507   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Is_Number';
508   l_debug_str := 'Exception in Is_Number'||SQLERRM;
509   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
510 END IF;
511 
512     RETURN '';
513 
514 END Is_Number;
515 
516 /******************************************************************
517    Created By         : Arkadi Tereshenkov
518    Date Created By    : Oct 14, 2002
519    Purpose            :
520    remarks            :
521 
522    Change History
523    Who                  When            What
524 ------------------------------------------------------------------------
525 
526 ******************************************************************/
527 FUNCTION Get_Lookup_Name (
528  p_type VARCHAR2 ,
529  p_code VARCHAR2
530 
531  ) RETURN VARCHAR2
532 IS
533 
534   CURSOR c_blk_name IS
535      SELECT meaning
536       FROM fnd_lookup_values
537       WHERE lookup_code = p_code
538         AND view_application_id = 8405
539         AND enabled_flag='Y'
540         AND language = USERENV('LANG')
541         AND lookup_type = p_type
542         AND SYSDATE BETWEEN NVL(start_date_active,SYSDATE-1) AND NVL(end_date_active, SYSDATE + 1);
543 
544   l_block_name  VARCHAR2(255);
545 
546 BEGIN
547  /* Debug */
548 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
549   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Lookup_Name';
550   l_debug_str := 'Entering Get_Lookup_Name. p_type is '||p_type ||' and p_code is '|| p_code;
551   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
552 END IF;
553 
554   OPEN c_blk_name;
555   FETCH c_blk_name INTO l_block_name;
556   CLOSE c_blk_name;
557 
558 /* Debug */
559 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
560   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Lookup_Name';
561   l_debug_str := 'Returning from Get_Lookup_Name with value '||l_block_name;
562   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
563 END IF;
564 
565   RETURN l_block_name;
566 
567 END Get_Lookup_Name;
568 
569 
570 
571 /******************************************************************
572    Created By         : Arkadi Tereshenkov
573    Date Created By    : Oct 14, 2002
574    Purpose            :
575    remarks            :
576 
577    Change History
578    Who                  When            What
579 ------------------------------------------------------------------------
580 
581 ******************************************************************/
582 FUNCTION Convert_Country_Code (
583 
584   p_code VARCHAR2
585 
586  ) RETURN VARCHAR2
587 IS
588 
589  CURSOR c_blk_name IS
590      SELECT SUBSTR(meaning,5,2)
591       FROM fnd_lookup_values
592      WHERE lookup_type = 'PQP_US_COUNTRY_TRANSLATE'
593        AND view_application_id = 3
594        AND lookup_code=p_code
595        AND SYSDATE BETWEEN  NVL(start_date_active,SYSDATE-1)  AND NVL(end_date_active, SYSDATE + 1);
596 
597   CURSOR chk_iso_country (cp_cntry_code VARCHAR2) IS
598      SELECT alternate_territory_code
599      FROM   fnd_territories_vl
600      WHERE  territory_code = cp_cntry_code;
601 
602   l_block_name  VARCHAR2(255);
603   l_alt_code VARCHAR2(12);
604 
605 BEGIN
606 /* Debug */
607 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
608   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Country_Code';
609   l_debug_str := 'Entering Convert_Country_Code. p_code is '||p_code;
610   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
611 END IF;
612   --Code for non-ISO countries
613     OPEN chk_iso_country(p_code);
614     FETCH chk_iso_country INTO l_alt_code;
615     CLOSE chk_iso_country;
616 
617     IF INSTR(l_alt_code,'IGS_') <> 0 THEN
618         RETURN substr(l_alt_code,5);
619     END IF;
620 
621   OPEN c_blk_name;
622   FETCH c_blk_name INTO l_block_name;
623   CLOSE c_blk_name;
624 -- change for country code inconsistency bug 3738488
625   IF l_block_name IS NULL THEN
626      IF p_code = 'AU' THEN
627         l_block_name := 'AT';
628         Put_Log_Msg('ISO Country Code (AU) converted into US Country Code (AT)',0);
629      ELSIF p_code = 'UM' THEN
630         l_block_name := 'BQ';
631         Put_Log_Msg('ISO Country Code (UM) converted into US Country Code (BQ)',0);
632      ELSIF p_code = 'RE' THEN
633         l_block_name := 'JU';
634         Put_Log_Msg('ISO Country Code (RE) converted into US Country Code (JU)',0);
635      ELSIF p_code = 'SJ' THEN
636         l_block_name := 'JN';
637         Put_Log_Msg('ISO Country Code (SJ) converted into US Country Code (JN)',0);
638      ELSIF p_code = 'GB' THEN
639         l_block_name := 'IM';
640         Put_Log_Msg('ISO Country Code (GB) converted into US Country Code (IM)',0);
641      ELSIF p_code = 'PF' THEN
642         l_block_name := 'IP';
643         Put_Log_Msg('ISO Country Code (PF) converted into US Country Code (IP)',0);
644      ELSIF p_code = 'JE' OR p_code = 'WS' THEN
645         l_block_name := p_code;
646         Put_Log_Msg('ISO Country Code ('||p_code||') has same value for US Country Code. No conversion.',0);
647      END IF;
648   END IF;
649 
650 /* Debug */
651 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
652   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Country_Code';
653   l_debug_str := 'Returning from Convert_Country_Code with value '|| l_block_name;
654   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
655 END IF;
656 
657   RETURN NVL(l_block_name,p_code);
658 
659 
660 END Convert_Country_Code;
661 
662 
663 
664 /******************************************************************
665    Created By         : Arkadi Tereshenkov
666 
667    Date Created By    : Oct 14, 2002
668 
669    Purpose            : Validate information pertaining to the
670                         Legal information block of student.
671                         (IGS_SV_LEGAL_INFO)
672 
673    Remarks            : Return result:
674                            'S' - record found and validated
675                            'E' - validation error
676                            'U' - Unexpected error
677                            'N' - data not found
678 
679    Change History
680    Who                  When            What
681 ------------------------------------------------------------------------
682 
683 ******************************************************************/
684 FUNCTION Convert_Visa_Type (
685   p_visa_meaning VARCHAR2
686  ) RETURN VARCHAR2 IS
687 
688   CURSOR c_visa_type IS
689      SELECT lv.lookup_code
690        FROM fnd_lookup_values   lv
691       WHERE lv.lookup_type = 'SV_MAP_HR_VISA_TYPES'
692         AND lv.meaning     = p_visa_meaning
693         AND SYSDATE BETWEEN  NVL(start_date_active,SYSDATE-1)  AND NVL(end_date_active, SYSDATE + 1);
694 
695   l_sv_visa_code  VARCHAR2(30);
696 
697 BEGIN
698 /* Debug */
699 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
700   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Visa_Type';
701   l_debug_str := 'Entering Convert_Visa_Type. p_visa_meaning is '||p_visa_meaning;
702   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
703 END IF;
704 
705   OPEN c_visa_type;
706 
707   FETCH c_visa_type
708    INTO l_sv_visa_code;
709 
710   CLOSE c_visa_type;
711 /* Debug */
712 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
713   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Visa_Type';
714   l_debug_str := 'Returning from Convert_Visa_Type with value '|| l_sv_visa_code;
715   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
716 END IF;
717 
718   RETURN l_sv_visa_code;
719 
720 END Convert_Visa_Type;
721 
722 
723 
724 /******************************************************************
725    Created By         : Arkadi Tereshenkov
726    Date Created By    : Oct 14, 2002
727    Purpose            :
728    remarks            :
729 
730    Change History
731    Who                  When            What
732 ------------------------------------------------------------------------
733 
734 ******************************************************************/
735 FUNCTION Convert_Suffix(
736    p_person_num   IN  VARCHAR2,
737    p_code         IN  VARCHAR2,
738    p_type         IN  VARCHAR2
739 ) RETURN VARCHAR2
740 IS
741 
742    CURSOR c_name_suffix IS
743       SELECT tag
744         FROM fnd_lookup_values
745        WHERE lookup_code         = p_code
746          AND view_application_id = 8405
747          AND enabled_flag        = 'Y'
748          AND language            = USERENV('LANG')
749          AND lookup_type         = p_type
750          AND SYSDATE BETWEEN  NVL(start_date_active,SYSDATE-1)  AND NVL(end_date_active, SYSDATE + 1);
751 
752    l_name_suffix        VARCHAR2(30);
753 
754 BEGIN
755   /* Debug */
756 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
757   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Suffix';
758   l_debug_str := 'Entering Convert_Suffix. p_person_num is '||p_person_num || ', p_code is '||p_code||' and p_type is '||p_type;
759   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
760 END IF;
761 
762    OPEN c_name_suffix;
763    FETCH c_name_suffix
764     INTO l_name_suffix;
765 
766    IF (c_name_suffix%NOTFOUND) AND p_code IS NOT NULL THEN
767 
768       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_WARN_FLD_ERR'); -- Warning message for optional field
769       FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'Suffix');
770       FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_num);
771       Put_Log_Msg(FND_MESSAGE.Get,1);
772 
773       l_name_suffix := NULL;
774 
775    END IF;
776    CLOSE c_name_suffix;
777 
778 /* Debug */
779 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
780   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Convert_Suffix';
781   l_debug_str := 'Returning from Convert_Suffix with value '|| l_name_suffix;
782   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
783 END IF;
784 
785    RETURN l_name_suffix;
786 
787 END Convert_Suffix;
788 
789 
790 
791 /******************************************************************
792    Created By         : Arkadi Tereshenkov
793    Date Created By    : Oct 14, 2002
794    Purpose            :
795    remarks            :
796 
797    Change History
798    Who                  When            What
799 ------------------------------------------------------------------------
800 
801 ******************************************************************/
802 FUNCTION Get_Block_Name (
803  p_block VARCHAR2
804  ) RETURN VARCHAR2
805 IS
806 
807 BEGIN
808  /* Debug */
809 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
810   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Block_Name';
811   l_debug_str := 'Inside Get_Block_Name. p_block is '||p_block;
812   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
813 END IF;
814 
815   RETURN get_lookup_name ('SV_VALIDATIONS',p_block);
816 
817 END Get_Block_Name;
818 
819 
820 
821 /******************************************************************
822    Created By         : Arkadi Tereshenkov
823    Date Created By    : Oct 14, 2002
824    Purpose            :
825    remarks            :
826 
827    Change History
828    Who                  When            What
829 ------------------------------------------------------------------------
830 
831 ******************************************************************/
832 FUNCTION Get_Person_Sevis_Id (
833    p_person_id IN NUMBER
834 ) RETURN VARCHAR2
835 IS
836 
837    CURSOR c_alt_id IS
838     SELECT api_person_id
839       FROM igs_pe_alt_pers_id
840      WHERE pe_person_id = p_person_id
841            AND person_id_type
842                IN (SELECT person_id_type
843                      FROM igs_pe_person_id_typ
844                     WHERE s_person_id_type = g_person_sevis_id)
845            AND start_dt <= trunc(sysdate)
846            AND NVL(end_dt,sysdate+1) >= trunc(sysdate);
847 
848 l_alt_id   VARCHAR2(255);
849 
850 BEGIN
851 /* Debug */
852 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
853   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Person_Sevis_Id';
854   l_debug_str := 'Entering Get_Person_Sevis_Id. p_person_id is '||p_person_id;
855   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
856 END IF;
857 
858  OPEN c_alt_id;
859  FETCH c_alt_id INTO l_alt_id;
860  CLOSE c_alt_id;
861 
862 
863  IF l_alt_id IS NOT NULL AND LENGTH(l_alt_id)<=11 THEN
864 
865 /* Debug */
866 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
867   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Person_Sevis_Id';
868   l_debug_str := 'Returning from Get_Person_Sevis_Id with value '||l_alt_id;
869   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
870 END IF;
871 
872    RETURN l_alt_id;
873 
874  END IF;
875 /* Debug */
876 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
877   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Person_Sevis_Id';
878   l_debug_str := 'Returning from Get_Person_Sevis_Id ';
879   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
880 END IF;
881 
882  RETURN '';
883 
884 END Get_Person_Sevis_Id;
885 
886 
887 FUNCTION Check_US_Terr(
888    p_person_num   IN  VARCHAR2,
889    p_code         IN  VARCHAR2
890 ) RETURN VARCHAR2
891 IS
892 
893    CURSOR c_name IS
894       SELECT tag
895         FROM fnd_lookup_values
896        WHERE lookup_code         = p_code
897          AND view_application_id = 8405
898          AND enabled_flag        = 'Y'
899          AND language            = USERENV('LANG')
900          AND lookup_type         = 'SV_US_TERRITORY_CODES'
901          AND SYSDATE BETWEEN  NVL(start_date_active,SYSDATE-1)  AND NVL(end_date_active, SYSDATE + 1);
902 
903    l_name_suffix        VARCHAR2(30);
904 
905 BEGIN
906 /* Debug */
907 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
908   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Check_US_Terr';
909   l_debug_str := 'Entering Check_US_Terr. p_person_num is '||p_person_num ||' and p_code is '||p_code;
910   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
911 END IF;
912 
913    OPEN c_name;
914    FETCH c_name
915     INTO l_name_suffix;
916 
917    IF p_code IS NOT NULL AND c_name%FOUND THEN
918 
919       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_US_TERR_CD_ERR'); -- Error
920       FND_MESSAGE.SET_TOKEN('CNTRY_CODE', p_code);
921       FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_num);
922       Put_Log_Msg(FND_MESSAGE.Get,1);
923 
924       CLOSE c_name;
925 /* Debug */
926 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
927   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Check_US_Terr';
928   l_debug_str := 'Returning E from Check_US_Terr ';
929   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
930 END IF;
931 
932       RETURN 'E';
933 
934    END IF;
935 
936    CLOSE c_name;
937 
938 /* Debug */
939 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
940   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Check_US_Terr';
941   l_debug_str := 'Returning S from Check_US_Terr ';
942   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
943 END IF;
944 
945    RETURN 'S';
946 
947 END Check_US_Terr;
948 
949 /******************************************************************
950    Created By         : Arkadi Tereshenkov
951    Date Created By    : Oct 14, 2002
952    Purpose            :
953    remarks            :
954 
955    Change History
956    Who                  When            What
957 ------------------------------------------------------------------------
958 
959 ******************************************************************/
960 FUNCTION Get_Prev_Dep (
961    p_person_id IN NUMBER,
962    p_depdnt_id  IN NUMBER,
963    p_batch_id   IN NUMBER,
964    p_action_type VARCHAR2
965 ) RETURN BOOLEAN
966 IS
967 
968    CURSOR c_dep_exist IS
969     SELECT COUNT('X')
970       FROM igs_sv_depdnt_info
971      WHERE person_id = p_person_id
972            AND depdnt_id = p_depdnt_id
973 	   AND batch_id < p_batch_id;
974 
975 l_dep_exists  BOOLEAN := TRUE;
976 l_count NUMBER := 0;
977 BEGIN
978 /* Debug */
979 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
980   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Prev_Dep';
981   l_debug_str := 'Entering Get_Prev_Dep. p_person_id is '||p_person_id||' dependent id is'||p_depdnt_id;
982   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
983 END IF;
984 
985  OPEN c_dep_exist;
986  FETCH c_dep_exist INTO l_count;
987  CLOSE c_dep_exist;
988 
989  IF p_action_type = 'T' AND l_count = 0 THEN
990      l_dep_exists := FALSE;
991  END IF;
992 
993  RETURN l_dep_exists;
994 
995 
996 END Get_Prev_Dep;
997 
998 /******************************************************************
999    Created By         : Arkadi Tereshenkov
1000    Date Created By    : Oct 14, 2002
1001    Purpose            :
1002    remarks            :
1003 
1004    Change History
1005    Who                  When            What
1006 ------------------------------------------------------------------------
1007 
1008 ******************************************************************/
1009 FUNCTION is_valid_addr (
1010   p_batch_type VARCHAR2,
1011   p_person_id  NUMBER,
1012   p_site_id    NUMBER
1013 ) RETURN BOOLEAN
1014 IS
1015    l_valid_addr BOOLEAN;
1016    l_count NUMBER;
1017 
1018    CURSOR c_f_addr_exists(cp_person_id igs_sv_addresses.person_id%TYPE, cp_party_site_id igs_sv_addresses.party_site_id%TYPE)
1019    IS
1020       SELECT 1
1021        FROM igs_pe_addr_v adr,
1022             igs_pe_partysiteuse_v usg
1023       WHERE person_id = cp_person_id
1024         AND ( adr.status = 'A' AND SYSDATE BETWEEN NVL(start_dt,SYSDATE) AND NVL(end_dt, SYSDATE + 1) )
1025         AND usg.party_site_id  = adr.party_site_id
1026 	AND adr.party_site_id = cp_party_site_id
1027         AND usg.site_use_type  = g_f_addr_usage
1028         AND usg.active         = 'A';
1029 
1030    CURSOR c_us_addr_exists(cp_person_id igs_sv_addresses.person_id%TYPE, cp_party_site_id igs_sv_addresses.party_site_id%TYPE)
1031    IS
1032       SELECT 1
1033        FROM igs_pe_addr_v adr,
1034             igs_pe_partysiteuse_v usg
1035       WHERE person_id = cp_person_id
1036 	    AND ( adr.status = 'A' AND SYSDATE BETWEEN NVL(start_dt,SYSDATE) AND NVL(end_dt, SYSDATE + 1) )
1037             AND usg.party_site_id  = adr.party_site_id
1038             AND adr.party_site_id = cp_party_site_id
1039             AND usg.site_use_type  = g_us_addr_usage
1040             AND usg.active         = 'A';
1041 
1042    CURSOR c_soa_exists(cp_person_id igs_sv_addresses.person_id%TYPE, cp_party_site_id igs_sv_addresses.party_site_id%TYPE)
1043    IS
1044       SELECT 1
1045       FROM hz_locations loc,
1046 	  hz_party_sites ps,
1047 	  igs_pe_hz_pty_sites igsps,
1048 	  hz_party_site_uses usg
1049       WHERE
1050          ps.location_id = loc.location_id
1051          AND ps.party_site_id = igsps.party_site_id (+)
1052 	 AND ps.party_site_id = cp_party_site_id
1053          AND ps.party_id = cp_person_id
1054          AND ( ps.status = 'A' AND SYSDATE BETWEEN NVL(IGSPS.start_date,SYSDATE) AND NVL(IGSPS.end_date, SYSDATE + 1))
1055          AND usg.party_site_id  = ps.party_site_id
1056          AND usg.site_use_type  = g_site_addr_usage
1057          AND usg.status = 'A'
1058     UNION
1059       SELECT 1
1060       FROM  hz_locations adr,
1061             igs_pe_act_site usg
1062       WHERE usg.person_id = cp_person_id
1063         AND SYSDATE BETWEEN nvl(ADDRESS_EFFECTIVE_DATE,sysdate-1) AND NVL(ADDRESS_EXPIRATION_DATE, SYSDATE + 1)
1064         AND usg.location_id = adr.location_id
1065 	AND adr.location_id = cp_party_site_id
1066         AND sysdate BETWEEN usg.start_date AND NVL(usg.end_date,sysdate+1);
1067 
1068 BEGIN
1069 /* Debug */
1070 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1071   l_label := 'igs.plsql.igs_sv_batch_process_pkg.is_valid_addr';
1072   l_debug_str := 'Entering is_valid_addr. person id: '||p_person_id ||'site id: '|| p_site_id;
1073   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1074 END IF;
1075       Put_Log_Msg('is_valid_addr begins',0);
1076 
1077       l_valid_addr  := TRUE;
1078       l_count := 0;
1079       IF p_batch_type = 'E' THEN
1080           OPEN  c_us_addr_exists(p_person_id, p_site_id);
1081 	  FETCH c_us_addr_exists INTO l_count;
1082 	  CLOSE c_us_addr_exists;
1083 
1084 	  IF l_count > 0 THEN
1085 	       l_count := 0;
1086 	       OPEN  c_soa_exists(p_person_id, p_site_id);
1087 	       FETCH c_soa_exists INTO l_count;
1088 	       CLOSE c_soa_exists;
1089                IF l_count > 0 THEN
1090 	            l_valid_addr := FALSE;
1091 	       END IF;
1092 	  END IF;
1093 
1094       ELSE
1095           OPEN  c_f_addr_exists(p_person_id, p_site_id);
1096 	  FETCH c_f_addr_exists INTO l_count;
1097 	  CLOSE c_f_addr_exists;
1098 
1099 	  IF l_count > 0 THEN
1100 	       l_count := 0;
1101 	       OPEN  c_us_addr_exists(p_person_id, p_site_id);
1102 	       FETCH c_us_addr_exists INTO l_count;
1103 	       CLOSE c_us_addr_exists;
1104                IF l_count > 0 THEN
1105 	            l_valid_addr := FALSE;
1106 	       END IF;
1107 	  END IF;
1108       END IF;
1109 
1110 
1111       Put_Log_Msg('returning from is_valid_addr',0);
1112       RETURN l_valid_addr;
1113 
1114 EXCEPTION
1115 
1116   WHEN OTHERS THEN
1117     /* Debug */
1118 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1119   l_label := 'igs.plsql.igs_sv_batch_process_pkg.is_valid_addr';
1120   l_debug_str := 'Exception in is_valid_addr'||SQLERRM;
1121   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1122 END IF;
1123 
1124     RETURN l_valid_addr;
1125 
1126 END is_valid_addr;
1127 /*****************  Validation procedures  *************************************
1128 
1129 OIB Other Information
1130 FAB Foreign Address Information
1131 UAB US Address Information
1132 AAB Site of Activity Address Information
1133 EIB Education Information
1134 FIB Financial Information
1135 DIB Dependent Information
1136 CIB Conviction Information
1137 LIB Legal Information
1138 EMB Employment Information
1139 PIB Program Information
1140 
1141 *******************************************************************************/
1142 
1143 /******************************************************************
1144    Created By         : Arkadi Tereshenkov
1145 
1146    Date Created By    : Oct 14, 2002
1147 
1148    Purpose            : Validate the information for the block that
1149                         is to be used for the Person Info Block
1150                         (IGS_SV_PERSONS)
1151 
1152    Remarks            : Return result:
1153                            'S' - record found and validated
1154                            'E' - validation error
1155                            'U' - Unexpected error
1156                            'N' - data not found
1157 
1158    Change History
1159    Who                  When            What
1160 ------------------------------------------------------------------------
1161 
1162 ******************************************************************/
1163 FUNCTION Validate_Issue_Info (
1164    p_person_rec IN t_student_rec,
1165    p_data_rec  IN OUT NOCOPY  IGS_SV_PERSONS%ROWTYPE   -- Data record
1166 ) RETURN VARCHAR2
1167 IS
1168 
1169    l_api_name CONSTANT VARCHAR(30) := 'Validate_Issue_Info';
1170 
1171    CURSOR c_data IS
1172      SELECT issue_reason   ,
1173             curr_session_end_date ,
1174             next_session_start_date ,
1175             other_reason,
1176             transfer_from_school,
1177             prgm_start_date,
1178 	    last_session_flag,
1179 	    adjudicated_flag
1180        FROM igs_pe_nonimg_form
1181       WHERE nonimg_form_id = p_person_rec.form_id ;
1182 
1183    CURSOR c_ev_data IS
1184      SELECT create_reason   ,
1185             prgm_start_date ,
1186             prgm_end_date  ,
1187             ev_form_number ,
1188             init_prgm_start_date ,
1189 	    no_show_flag
1190        FROM igs_pe_ev_form
1191       WHERE ev_form_id = p_person_rec.form_id ;
1192 
1193 
1194   l_not_valid  boolean  := FALSE;
1195   l_prog_start_date     igs_pe_nonimg_form.prgm_start_date%TYPE;
1196 
1197 BEGIN
1198 
1199 /* Debug */
1200 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1201   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1202   l_debug_str := 'Entering Validate_Issue_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
1203   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1204 END IF;
1205 
1206    Put_Log_Msg(l_api_name||' starts ',0);
1207 
1208    p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
1209 
1210    IF p_person_rec.batch_type = 'I' THEN
1211 
1212      FOR c_data_rec IN c_data LOOP
1213 
1214        p_data_rec.batch_id        := p_person_rec.batch_id;
1215        p_data_rec.person_id       := p_person_rec.person_id;
1216        p_data_rec.print_form      := p_person_rec.print_form;
1217        p_data_rec.record_number   := p_person_rec.record_number ;
1218        p_data_rec.form_id         := p_person_rec.form_id ;
1219        p_data_rec.record_status   := p_person_rec.record_status ;
1220        p_data_rec.person_number   := p_person_rec.person_number ;
1221        p_data_rec.sevis_user_id   := p_person_rec.sevis_user_id ;
1222        l_prog_start_date          := c_data_rec.prgm_start_date ;
1223 
1224        p_data_rec.creation_date := sysdate;
1225        p_data_rec.created_by := g_update_by;
1226        p_data_rec.last_updated_by := g_update_by;
1227        p_data_rec.last_update_date  := sysdate;
1228        p_data_rec.last_update_login := g_update_login;
1229 
1230        p_data_rec.issuing_reason  := c_data_rec.issue_reason;
1231        p_data_rec.curr_session_end_date:= to_char(c_data_rec.curr_session_end_date,'YYYY-MM-DD');
1232        p_data_rec.next_session_start_date:= to_char(c_data_rec.next_session_start_date,'YYYY-MM-DD');
1233        p_data_rec.other_reason:= c_data_rec.other_reason;
1234        p_data_rec.Transfer_from_school:= c_data_rec.Transfer_from_school;
1235        p_data_rec.last_session_flag	:= c_data_rec.last_session_flag;
1236        p_data_rec.adjudicated_flag   := c_data_rec.adjudicated_flag;
1237 
1238 /* Debug */
1239 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1240   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1241   l_debug_str := 'Exiting from for loop of Validate_Issue_Info';
1242   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1243 END IF;
1244 
1245        EXIT;  -- one  record is enough
1246 
1247      END LOOP;
1248 
1249    ELSE
1250 
1251      FOR c_data_rec IN c_ev_data LOOP
1252 
1253        p_data_rec.batch_id        := p_person_rec.batch_id;
1254        p_data_rec.person_id       := p_person_rec.person_id;
1255        p_data_rec.print_form      := p_person_rec.print_form;
1256        p_data_rec.record_number   := p_person_rec.record_number ;
1257        p_data_rec.form_id         := p_person_rec.form_id ;
1258        p_data_rec.record_status   := p_person_rec.record_status ;
1259        p_data_rec.person_number   := p_person_rec.person_number ;
1260        p_data_rec.sevis_user_id   := p_person_rec.sevis_user_id ;
1261 
1262        p_data_rec.creation_date := sysdate;
1263        p_data_rec.created_by := g_update_by;
1264        p_data_rec.last_updated_by := g_update_by;
1265        p_data_rec.last_update_date  := sysdate;
1266        p_data_rec.last_update_login := g_update_login;
1267 
1268        p_data_rec.ev_create_reason  := c_data_rec.create_reason;
1269        p_data_rec.ev_form_number:= c_data_rec.ev_form_number;
1270 
1271        --These fields are used for EV program start date
1272 
1273        p_data_rec.curr_session_end_date:= to_char(c_data_rec.prgm_end_date,'YYYY-MM-DD');
1274        p_data_rec.next_session_start_date:= to_char(c_data_rec.prgm_start_date,'YYYY-MM-DD');
1275        p_data_rec.init_prgm_start_date:= to_char(c_data_rec.init_prgm_start_date,'YYYY-MM-DD');
1276        p_data_rec.no_show_flag	:= c_data_rec.no_show_flag;
1277 
1278 /* Debug */
1279 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1280   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1281   l_debug_str := 'Exiting from for loop of Validate_Issue_Info';
1282   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1283 END IF;
1284        EXIT;  -- one  record is enough
1285 
1286      END LOOP;
1287 
1288 
1289    END IF;
1290 
1291 
1292    IF p_data_rec.batch_id IS NULL THEN
1293 
1294       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
1295 /* Debug */
1296 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1297   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1298   l_debug_str := 'Returning N from Validate_Issue_Info';
1299   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1300 END IF;
1301 
1302       RETURN 'N';
1303 
1304    ELSE
1305 
1306      IF p_data_rec.issuing_reason = 'C' THEN
1307 
1308         IF p_data_rec.curr_session_end_date IS NULL OR p_data_rec.next_session_start_date IS NULL THEN
1309 
1310            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_ISSUE_C_REQ_ERR'); -- SEVIS common error
1311            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1312 
1313            Put_Log_Msg(FND_MESSAGE.Get,1);
1314            l_not_valid := TRUE;
1315 
1316         END IF;
1317 
1318      ELSIF p_data_rec.issuing_reason = 'T' THEN
1319 
1320         IF p_data_rec.Transfer_from_school IS NULL  THEN
1321 
1322            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_ISSUE_T_REQ_ERR'); -- SEVIS common error
1323            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1324 
1325            Put_Log_Msg(FND_MESSAGE.Get,1);
1326            l_not_valid := TRUE;
1327 
1328         END IF;
1329 
1330      ELSIF p_data_rec.issuing_reason = 'I'  THEN
1331 
1332         IF l_prog_start_date  IS NULL OR  l_prog_start_date < trunc(sysdate) THEN
1333 
1334            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_PRG_START_DT_ERR'); -- SEVIS common error
1335            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1336            FND_MESSAGE.SET_TOKEN('PRGM_DATE', l_prog_start_date );
1337 
1338            Put_Log_Msg(FND_MESSAGE.Get,1);
1339            l_not_valid := TRUE;
1340 
1341         END IF;
1342 
1343 
1344      ELSIF p_data_rec.issuing_reason = 'O' THEN
1345 
1346         IF p_data_rec.other_reason IS NULL  THEN
1347 
1348            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_ISSUE_O_REQ_ERR'); -- SEVIS common error
1349            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1350 
1351            Put_Log_Msg(FND_MESSAGE.Get,1);
1352            l_not_valid := TRUE;
1353 
1354         END IF;
1355 
1356      ELSIF p_person_rec.batch_type = 'E' AND p_data_rec.issuing_reason = 'CONT' AND  p_data_rec.init_prgm_start_date IS NULL THEN
1357 
1358            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_PRG_RQD_FLD_ERR'); -- error - no initial date specified
1359            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1360 
1361            Put_Log_Msg(FND_MESSAGE.Get,1);
1362            l_not_valid := TRUE;
1363 
1364      ELSIF p_person_rec.batch_type = 'E'
1365            AND ( p_data_rec.curr_session_end_date IS NULL
1366                  OR p_data_rec.next_session_start_date IS NULL ) THEN
1367 
1368            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_PRG_RQD_FLD_ERR'); -- error
1369            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1370 
1371            Put_Log_Msg(FND_MESSAGE.Get,1);
1372            l_not_valid := TRUE;
1373 
1374      END IF;
1375 
1376      IF p_person_rec.batch_type = 'I' THEN
1377            IF ( p_data_rec.last_session_flag = 'Y'
1378                  AND p_data_rec.next_session_start_date IS NOT NULL ) THEN
1379 
1380 		   --FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_LAST_SESN'); -- error
1381 		   --FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
1382 		   p_data_rec.next_session_start_date := NULL;
1383 
1384 	   END IF;
1385      END IF;
1386 
1387      IF l_not_valid THEN
1388 
1389         Put_Log_Msg(l_api_name||' Validation error, return E ',1);
1390 	/* Debug */
1391 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1392 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1393 	  l_debug_str := 'Returning E from Validate_Issue_Info';
1394 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1395 	END IF;
1396 
1397         RETURN 'E';
1398 
1399      END IF;
1400 
1401    END IF;
1402 
1403    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
1404  /* Debug */
1405 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1406   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1407   l_debug_str := 'Returning S from Validate_Issue_Info';
1408   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1409 END IF;
1410 
1411    RETURN 'S'; -- Successfull validation
1412 
1413 EXCEPTION
1414 
1415    WHEN OTHERS THEN
1416 	/* Debug */
1417 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1418 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Issue_Info';
1419 	  l_debug_str := 'Exception in Validate_Issue_Info'||SQLERRM;
1420 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1421 	END IF;
1422 
1423       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
1424          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
1425       END IF;
1426 
1427       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
1428 
1429       RETURN 'U';
1430 
1431 END Validate_Issue_Info;
1432 
1433 
1434 /******************************************************************
1435    Created By         : Arkadi Tereshenkov
1436 
1437    Date Created By    : Oct 14, 2002
1438 
1439    Purpose            : Validation procedure on data that is to be
1440                         resident in the BIO Info block.
1441                         (IGS_SV_BIO_INFO)
1442 
1443    Remarks            : Return result:
1444                            'S' - record found and validated
1445                            'E' - validation error
1446                            'U' - Unexpected error
1447                            'N' - data not found
1448 
1449    Change History
1450    Who                  When            What
1451    pkpatel              22-APR-2003     Bug No: 2908378
1452                                         Modified to prevent mandatory check of position_code and category_code, for dependents
1453                                         Added the new cursor c_perm_res_data for retriving Legal residency country
1454 ------------------------------------------------------------------------
1455 
1456 ******************************************************************/
1457 
1458 FUNCTION Validate_Name(p_Name IN varchar2) RETURN boolean IS
1459         returnVal boolean := false;
1460     BEGIN
1461     /* Debug */
1462 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1463 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Name';
1464 	  l_debug_str := 'Inside Validate_Name. p_Name is '|| p_Name;
1465 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1466 	END IF;
1467 
1468 	FOR counter in 0..9 LOOP
1469 	   if instr(p_Name,counter) > 0 then
1470 		returnVal :=true;
1471 		EXIT WHEN returnVal;
1472 	   END IF;
1473 	END LOOP;
1474 	/* Debug */
1475 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1476 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Name';
1477 	  l_debug_str := 'Returning from Validate_Name';
1478 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1479 	END IF;
1480 
1481         RETURN returnVal;
1482 
1483 END Validate_Name;
1484 
1485 Function Validate_Bio_Info(
1486    p_person_rec IN t_student_rec,
1487    p_data_rec  IN OUT NOCOPY  IGS_SV_BIO_INFO%ROWTYPE    -- Data record
1488 ) RETURN VARCHAR2
1489 IS
1490 
1491    l_api_name CONSTANT VARCHAR(30) := 'Validate_Bio_Info';
1492 
1493 
1494    CURSOR c_hz_data IS
1495       SELECT hzpp.person_last_name,
1496              hzpp.person_middle_name,
1497              hzpp.person_first_name,
1498              hzpp.person_name_suffix,
1499              hzpp.date_of_birth,
1500              hzpp.gender,
1501              prt.birth_country,
1502              hzc.country_code,
1503              prt.birth_city
1504         FROM hz_person_profiles    hzpp,
1505              hz_citizenship        hzc,
1506              igs_pe_hz_parties     prt
1507        WHERE hzpp.party_id = p_person_rec.person_id
1508          AND prt.party_id = hzpp.party_id
1509          AND hzc.party_id (+)  = hzpp.party_id
1510          AND sysdate between hzpp.effective_start_date AND NVL(hzpp.effective_end_date,sysdate+1);
1511 
1512    CURSOR c_nonimg_data IS
1513       SELECT peva.visa_type
1514         FROM igs_pe_visa   peva
1515        WHERE peva.person_id = p_person_rec.person_id
1516          AND SYSDATE BETWEEN peva.visa_issue_date AND peva.visa_expiry_date;
1517 
1518    CURSOR c_com_data IS
1519       SELECT decode(commuter_ind,'Y','1','0') commuter
1520         FROM igs_pe_nonimg_form
1521        WHERE nonimg_form_id  = p_person_rec.form_id;
1522 
1523    CURSOR c_perm_res_data IS
1524    SELECT perm_res_cntry
1525    FROM igs_pe_eit_perm_res_v
1526    WHERE person_id  = p_person_rec.person_id;
1527 
1528    CURSOR c_ev_data IS
1529       SELECT pevf.position_code,
1530              pevf.category_code,
1531              pevf.position_remarks
1532         FROM igs_pe_ev_form        pevf
1533        WHERE pevf.person_id = p_person_rec.person_id
1534          AND ev_form_id     = p_person_rec.form_id;
1535 
1536    CURSOR c_country_reason(cp_person_id number) IS
1537 	SELECT psd.birth_cntry_resn_code
1538         FROM igs_pe_stat_details  psd
1539         WHERE psd.person_id = cp_person_id;
1540 
1541 
1542    l_last_name             hz_person_profiles.person_last_name%TYPE;
1543    l_middle_name           hz_person_profiles.person_middle_name%TYPE;
1544    l_first_name            hz_person_profiles.person_first_name%TYPE;
1545    l_suffix                hz_person_profiles.person_name_suffix%TYPE;
1546    l_birth_date            hz_person_profiles.date_of_birth%TYPE;
1547    l_birth_city            igs_pe_hz_parties.birth_city%TYPE;
1548    l_gender                hz_person_profiles.gender%TYPE;
1549    l_birth_cntry_code      VARCHAR2(30); -- ASAP need new column and table to get type
1550    l_citizen_cntry_code    hz_citizenship.country_code%TYPE;
1551    l_visa_type             IGS_PE_VISA.visa_type%TYPE;
1552    l_commuter              VARCHAR2(1);  -- ASAP need new column and table to get type
1553    l_legal_res_cntry_code  VARCHAR2(30); -- ASAP need new column and table to get type
1554    l_position_code         IGS_PE_EV_FORM.position_code%TYPE;
1555    l_category_code         IGS_PE_EV_FORM.category_code%TYPE;
1556    l_position_remarks      IGS_PE_EV_FORM.position_remarks%TYPE;
1557    l_birth_cntry_resn_code  igs_pe_stat_details.birth_cntry_resn_code%TYPE;
1558 
1559    l_not_valid             BOOLEAN :=FALSE;
1560 BEGIN
1561   -- Visa type valies
1562   -- 01 F-1
1563   -- 02 M-1
1564   -- 03 J-1
1565   -- 04 F-2
1566   -- 05 M-2
1567   -- 06 J-2
1568 	/* Debug */
1569 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1570 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Bio_Info';
1571 	  l_debug_str := 'Inside Validate_Bio_Info. p_person_rec.batch_type is '|| p_person_rec.batch_type ||' and person_id is '|| p_person_rec.person_id;
1572 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1573 	END IF;
1574 
1575    Put_Log_Msg(l_api_name||' starts ',0);
1576    p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
1577 
1578    OPEN c_hz_data;
1579    FETCH c_hz_data
1580     INTO l_last_name,
1581          l_middle_name,
1582          l_first_name,
1583          l_suffix,
1584          l_birth_date,
1585          l_gender,
1586          l_birth_cntry_code,
1587          l_citizen_cntry_code,
1588          l_birth_city;
1589 
1590    IF (c_hz_data%FOUND) THEN
1591 
1592       l_suffix := convert_suffix (p_person_rec.person_number, l_suffix, 'PE_US_NAME_SUFFIX');
1593       p_data_rec.last_name             := SUBSTR(l_last_name, 1, 40);
1594       p_data_rec.middle_name           := SUBSTR(l_middle_name, 1, 40);
1595       p_data_rec.first_name            := SUBSTR(l_first_name, 1, 40);
1596       p_data_rec.suffix                := SUBSTR(l_suffix, 1, 3);
1597       p_data_rec.birth_date            := to_char(l_birth_date,'YYYY-MM-DD');
1598       p_data_rec.birth_city            := SUBSTR(l_birth_city,1,60);
1599       p_data_rec.gender                := SUBSTR(l_gender, 1, 1);
1600       p_data_rec.birth_cntry_code      := SUBSTR(l_birth_cntry_code, 1, 2);
1601       p_data_rec.citizen_cntry_code    := convert_country_code (l_citizen_cntry_code);
1602       Put_Log_Msg('ISO Country ('||l_citizen_cntry_code||') converted to US Country ('||l_citizen_cntry_code||') for person:' ||p_data_rec.first_name||' ' ||p_data_rec.last_name||'.',0);
1603       p_data_rec.birth_cntry_resn_code := NULL;
1604 
1605       OPEN c_country_reason(p_person_rec.person_id);
1606       FETCH c_country_reason
1607       INTO l_birth_cntry_resn_code;
1608       CLOSE c_country_reason;
1609 
1610       p_data_rec.birth_cntry_resn_code := l_birth_cntry_resn_code;
1611 
1612       OPEN c_nonimg_data;
1613       FETCH c_nonimg_data
1614       INTO l_visa_type;
1615 
1616       l_visa_type := Convert_Visa_Type (l_visa_type);
1617 
1618       CLOSE c_nonimg_data;
1619 
1620       IF (p_person_rec.batch_type = 'I') THEN
1621 
1622         OPEN c_com_data;
1623         FETCH c_com_data
1624         INTO  l_commuter;
1625 
1626         CLOSE c_com_data;
1627 
1628         p_data_rec.commuter              := SUBSTR(l_commuter, 1,1);
1629 
1630       END IF;
1631 
1632       p_data_rec.visa_type             := SUBSTR(l_visa_type, 1, 2);
1633 
1634      IF (p_person_rec.batch_type = 'E') THEN
1635          OPEN c_ev_data;
1636          FETCH c_ev_data
1637           INTO l_position_code,
1638                l_category_code,
1639                l_position_remarks;
1640 
1641          IF (c_ev_data%FOUND) THEN
1642 
1643             p_data_rec.position_code        := SUBSTR(l_position_code, 1, 3);
1644             p_data_rec.category_code        := l_category_code;
1645             p_data_rec.remarks              := l_position_remarks;
1646 
1647          END IF;
1648 
1649          CLOSE c_ev_data;
1650 
1651          -- 2908378 added to get the legal residency code
1652          OPEN c_perm_res_data;
1653          FETCH c_perm_res_data INTO l_legal_res_cntry_code;
1654          CLOSE c_perm_res_data;
1655 
1656       END IF;
1657       p_data_rec.legal_res_cntry_code := l_legal_res_cntry_code;
1658       p_data_rec.batch_id := p_person_rec.batch_id;
1659       p_data_rec.person_id := p_person_rec.person_id;
1660       p_data_rec.print_form := p_person_rec.print_form;
1661       p_data_rec.creation_date := sysdate;
1662       p_data_rec.created_by := g_update_by;
1663       p_data_rec.last_updated_by := g_update_by;
1664       p_data_rec.last_update_date  := sysdate;
1665       p_data_rec.last_update_login := g_update_login;
1666 
1667       -- change for country code inconsistency bug 3738488
1668      p_data_rec.birth_cntry_code := convert_country_code(p_data_rec.birth_cntry_code);
1669      p_data_rec.legal_res_cntry_code := convert_country_code(p_data_rec.legal_res_cntry_code);
1670    END IF;
1671 
1672    CLOSE c_hz_data;
1673 
1674    IF Validate_Name(p_data_rec.last_name) THEN
1675 	 l_not_valid := TRUE;
1676 	 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_CHAR');
1677 	 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1678 	 Put_Log_Msg(FND_MESSAGE.Get,1);
1679    END IF;
1680 
1681    IF p_data_rec.birth_cntry_code = 'US' AND p_data_rec.birth_cntry_resn_code IS NULL
1682         THEN
1683 	 l_not_valid := TRUE;
1684 	 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_CNTRY_RSN');
1685 	 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1686 	 Put_Log_Msg(FND_MESSAGE.Get,1);
1687    END IF;
1688 
1689    IF (p_data_rec.batch_id IS NULL) THEN
1690 
1691       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
1692 	/* Debug */
1693 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1694 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Bio_Info';
1695 	  l_debug_str := 'Returning N from Validate_Bio_Info.';
1696 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1697 	END IF;
1698 
1699       RETURN 'N';
1700 
1701    ELSE
1702 
1703       --
1704       -- Validate all the data for required fields for both types of students
1705       --
1706       IF (p_data_rec.last_name IS NULL        OR
1707           p_data_rec.birth_date IS NULL       OR
1708           p_data_rec.birth_cntry_code IS NULL) THEN
1709          l_not_valid := TRUE;
1710          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BIO_REQ_FLD_ERR'); -- Required fields for both Exchange Visitor or Foreign students
1711          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1712          Put_Log_Msg(FND_MESSAGE.Get,1);
1713       END IF;
1714       --
1715       -- Validate all the data for required fields for Foreign students
1716       --
1717 
1718       IF ( NVL(p_data_rec.visa_type,'X') NOT IN ('01','02') AND p_person_rec.dep_flag ='N' AND p_person_rec.batch_type = 'I')
1719          OR ( NVL(p_data_rec.visa_type,'X') NOT IN ('04','05') AND p_person_rec.dep_flag ='Y' AND p_person_rec.batch_type = 'I')
1720          OR ( NVL(p_data_rec.visa_type,'X') <> '03' AND p_person_rec.dep_flag ='N' AND p_person_rec.batch_type = 'E')
1721          OR ( NVL(p_data_rec.visa_type,'X') <> '06' AND p_person_rec.dep_flag ='Y' AND p_person_rec.batch_type = 'E')    THEN
1722          l_not_valid := TRUE;
1723          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BIO_NIMG_REQ_FLD_ERR'); -- Required Fields for Foreign students
1724          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1725          Put_Log_Msg(FND_MESSAGE.Get,1);
1726       END IF;
1727 
1728       -- 2908378 validation of legal residency code, birth city should fire for all persons
1729       --
1730       -- Validate all the data for required fields for Exchange Visitor students (even for dependants)
1731       --
1732 
1733       IF (NVL(p_person_rec.dep_flag,'N') <> 'Y' AND p_person_rec.batch_type = 'E' AND(p_data_rec.legal_res_cntry_code IS NULL OR
1734            p_data_rec.birth_city IS NULL
1735            ) ) THEN
1736          l_not_valid := TRUE;
1737          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BIO_EV_REQ_FLD_ERR'); -- Required Fields for Exchange Visitor students
1738          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1739          Put_Log_Msg(FND_MESSAGE.Get,1);
1740       END IF;
1741 
1742       -- 2908378 validation of position_code, category_code should not fire for dependants, since they need not have EV form
1743       --
1744       -- Validate all the data for required fields for Exchange Visitor students (not for dependants)
1745       --
1746       IF (p_person_rec.batch_type = 'E' AND NVL(p_person_rec.dep_flag,'N') <> 'Y' AND(
1747            p_data_rec.position_code IS NULL OR
1748            p_data_rec.category_code IS NULL
1749            ) ) THEN
1750          l_not_valid := TRUE;
1751          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BIO_EV_REQ_FLD_ERR'); -- Required Fields for Exchange Visitor students
1752          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1753          Put_Log_Msg(FND_MESSAGE.Get,1);
1754       END IF;
1755 
1756 
1757       IF (p_person_rec.batch_type = 'I' AND p_data_rec.citizen_cntry_code IS NULL) THEN
1758 	  l_not_valid := TRUE;
1759           FND_MESSAGE.SET_NAME('IGS', 'PERSON_NUMBER'); -- Required Fields for Exchange Visitor students
1760           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1761           Put_Log_Msg(FND_MESSAGE.Get,1);
1762       END IF;
1763 
1764 
1765       IF Check_US_Terr(p_person_rec.person_number,p_data_rec.citizen_cntry_code) ='E' THEN
1766 
1767         --Error in the citizenship countries
1768 
1769          Put_Log_Msg('Error validation citizenship country code',1);
1770          l_not_valid := TRUE;
1771       END IF;
1772 
1773       IF NVL(p_person_rec.dep_flag,'N') <> 'Y' AND Check_US_Terr(p_person_rec.person_number,p_data_rec.legal_res_cntry_code) ='E' THEN
1774 
1775         --Error in the citizenship countries
1776 
1777          Put_Log_Msg('Error validation citizenship country code',1);
1778          l_not_valid := TRUE;
1779       END IF;
1780 
1781 
1782       IF (l_not_valid) THEN
1783 
1784          Put_Log_Msg(l_api_name||' Validation error, return E ',1);
1785 	 /* Debug */
1786 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1787 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Bio_Info';
1788 	  l_debug_str := 'Returning E from Validate_Bio_Info.';
1789 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1790 	END IF;
1791          RETURN 'E';
1792 
1793       END IF;
1794 
1795    END IF;
1796 
1797    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
1798 	/* Debug */
1799 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1800 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Bio_Info';
1801 	  l_debug_str := 'Returning S from Validate_Bio_Info.';
1802 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1803 	END IF;
1804 
1805    RETURN 'S'; -- Successfull validation
1806 
1807 EXCEPTION
1808 
1809    WHEN OTHERS THEN
1810 	/* Debug */
1811 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1812 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Bio_Info';
1813 	  l_debug_str := 'Exception in Validate_Bio_Info.'||SQLERRM;
1814 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1815 	END IF;
1816 
1817       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
1818          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
1819       END IF;
1820       IF c_country_reason%ISOPEN THEN
1821 	CLOSE c_country_reason;
1822       END IF;
1823       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
1824 
1825       RETURN 'U';
1826 
1827 END Validate_Bio_Info;
1828 
1829 
1830 /******************************************************************
1831    Created By         : Arkadi Tereshenkov
1832 
1833    Date Created By    : Oct 14, 2002
1834 
1835    Purpose            : Validation on the data block pertaining to
1836                         Other information.  (IGS_SV_OTH_INFO)
1837 
1838    Remarks            : Return result:
1839                           'S' - record found and validated
1840                           'E' - validation error
1841                           'U' - Unexpected error
1842                           'N' - data not found
1843 
1844    Change History
1845    Who                  When            What
1846    pkpatel              23-APR-2003     Bug 2908378
1847                                         In all the 3 cursors replaced igs_pe_person_id_typ_v with igs_pe_person_id_typ
1848                                         Added to find the active record.
1849                                         In c_get_drivers the region code is to be retrieved from region_cd instead of attribute11
1850 ------------------------------------------------------------------------
1851 
1852 ******************************************************************/
1853 FUNCTION Validate_Other_Info (
1854    p_person_rec IN      t_student_rec,
1855    p_data_rec   IN OUT NOCOPY  IGS_SV_OTH_INFO%ROWTYPE    -- Data record
1856 ) RETURN VARCHAR2
1857 IS
1858 
1859    l_api_name CONSTANT VARCHAR(30) := 'Validate_Other_Info';
1860 
1861    CURSOR c_alternate_id(cp_system_person_id_type igs_pe_person_id_typ.s_person_id_type%TYPE) IS
1862      SELECT palt.api_person_id_uf,
1863             palt.region_cd
1864        FROM igs_pe_alt_pers_id       palt,
1865             igs_pe_person_id_typ     typv
1866       WHERE typv.s_person_id_type        = cp_system_person_id_type
1867         AND palt.person_id_type          = typv.person_id_type
1868         AND palt.pe_person_id            = p_person_rec.person_id
1869         AND SYSDATE BETWEEN palt.start_dt AND NVL(palt.end_dt,SYSDATE);
1870 
1871    l_drivers_license          IGS_PE_ALT_PERS_ID.api_person_id%TYPE;
1872    l_drivers_license_state    IGS_PE_ALT_PERS_ID.region_cd%TYPE;
1873    l_ssn                      IGS_PE_ALT_PERS_ID.api_person_id%TYPE;
1874    l_new_ssn                  IGS_PE_ALT_PERS_ID.api_person_id%TYPE;
1875    l_taxid                    IGS_PE_ALT_PERS_ID.api_person_id%TYPE;
1876    l_not_valid                BOOLEAN := FALSE;
1877    l_region_cd                IGS_PE_ALT_PERS_ID.region_cd%TYPE;
1878    lv_region_cd                IGS_PE_ALT_PERS_ID.region_cd%TYPE;
1879 
1880 BEGIN
1881 	/* Debug */
1882 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1883 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Other_Info';
1884 	  l_debug_str := 'Entering Validate_Other_Info. Batch_id is '||p_person_rec.batch_id||' and person_id is '||p_person_rec.person_id;
1885 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
1886 	END IF;
1887    Put_Log_Msg(l_api_name||' starts ',0);
1888 
1889    p_data_rec.batch_id              := NULL;  -- This will tell us if there's been any records found
1890    p_data_rec.drivers_license       := NULL;
1891    p_data_rec.drivers_license_state := NULL;
1892    p_data_rec.ssn                   := NULL;
1893    p_data_rec.tax_id                := NULL;
1894 
1895    --
1896    -- Obtain the drivers license information
1897    --
1898    OPEN c_alternate_id('DRIVER-LIC');
1899    FETCH c_alternate_id
1900     INTO l_drivers_license,
1901          l_drivers_license_state;
1902 
1903    IF (c_alternate_id%FOUND) THEN
1904       p_data_rec.drivers_license       := SUBSTR(l_drivers_license, 1, 30);
1905       p_data_rec.drivers_license_state := SUBSTR(l_drivers_license_state,2);
1906    END IF;
1907    CLOSE c_alternate_id;
1908 
1909    -- Obtain the SSN number information
1910    --
1911    OPEN c_alternate_id('SSN');
1912    FETCH c_alternate_id
1913     INTO l_ssn,l_region_cd;
1914 
1915    IF (c_alternate_id%FOUND) THEN
1916       p_data_rec.ssn := SUBSTR(l_ssn, 1, 9);
1917    END IF;
1918    CLOSE c_alternate_id;
1919 
1920    --
1921    -- Obtain TAX ID information
1922    --
1923    OPEN c_alternate_id('TAXID');
1924    FETCH c_alternate_id
1925     INTO l_taxid,lv_region_cd;
1926 Put_Log_Msg('taxid pf person id '||p_person_rec.person_id ||' is '|| l_taxid,0);
1927    IF (c_alternate_id%FOUND) THEN
1928       p_data_rec.tax_id := SUBSTR(l_taxid, 1, 9);
1929       IF Is_Number(p_data_rec.tax_id) = '' OR Is_Number(p_data_rec.tax_id) IS NULL THEN
1930 	FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_TAXID');
1931         FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number);
1932         Put_Log_Msg(FND_MESSAGE.Get,1);
1933         l_not_valid := true;
1934       END IF;
1935    END IF;
1936    CLOSE c_alternate_id;
1937 
1938    --
1939    -- Need to validate that the SSN is in correct format 999999999
1940    --
1941    IF p_data_rec.ssn IS NOT NULL THEN
1942      FOR i IN 1 .. LENGTH (l_ssn) LOOP
1943         l_new_ssn := l_new_ssn || Is_Number(SUBSTR(l_ssn, i, 1));  -- Returns NULL if not numberic value
1944      END LOOP;
1945    ELSE
1946      l_new_ssn := NULL;
1947    END IF;
1948 
1949    IF (l_new_ssn IS NOT NULL) THEN
1950 
1951       IF (LENGTH(l_new_ssn) <> 9) THEN
1952 
1953          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_WARN_FLD_ERR'); -- Warning message for optional field
1954          FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'SSN');
1955          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1956          Put_Log_Msg(FND_MESSAGE.Get,1);
1957          p_data_rec.ssn := NULL;   -- Only warning for bad SSN.  Just NULL out value to be sent.
1958 
1959       ELSE
1960 
1961          p_data_rec.ssn := l_new_ssn;
1962 
1963       END IF;
1964 
1965    END IF;
1966 
1967 --
1968 -- Check to see if there is a state associated to the license
1969 --
1970    IF (p_data_rec.drivers_license IS NOT NULL AND
1971        p_data_rec.drivers_license_state IS NULL) THEN
1972       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_WARN_FLD_ERR'); -- Warning message for optional field
1973       FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'Drivers License State');
1974       FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
1975       Put_Log_Msg(FND_MESSAGE.Get,1);
1976    END IF;
1977 
1978    IF (p_data_rec.tax_id           IS NOT NULL OR
1979        p_data_rec.ssn              IS NOT NULL OR
1980        p_data_rec.drivers_license IS NOT NULL) THEN
1981 
1982       p_data_rec.batch_id          := p_person_rec.batch_id;
1983       p_data_rec.person_id         := p_person_rec.person_id;
1984       p_data_rec.print_form        := p_person_rec.print_form;
1985       p_data_rec.creation_date     := sysdate;
1986       p_data_rec.created_by        := g_update_by;
1987       p_data_rec.last_updated_by   := g_update_by;
1988       p_data_rec.last_update_date  := sysdate;
1989       p_data_rec.last_update_login := g_update_login;
1990 
1991    END IF;
1992 
1993    IF p_data_rec.batch_id IS NULL THEN
1994 
1995       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
1996 	/* Debug */
1997 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
1998 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Other_Info';
1999 	  l_debug_str := 'Returning N from Validate_Other_Info.';
2000 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2001 	END IF;
2002       RETURN 'N';
2003 
2004    ELSE
2005 
2006       IF (l_not_valid) THEN
2007 
2008          Put_Log_Msg(l_api_name||' Validation error, return E ',1);
2009 	 /* Debug */
2010 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2011 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Other_Info';
2012 	  l_debug_str := 'Returning E from Validate_Other_Info.';
2013 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2014 	END IF;
2015 
2016          RETURN 'E';
2017 
2018       END IF;
2019 
2020    END IF;
2021 
2022    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
2023  /* Debug */
2024 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2025 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Other_Info';
2026 	  l_debug_str := 'Returning S from Validate_Other_Info.';
2027 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2028 	END IF;
2029 
2030    RETURN 'S'; -- Successfull validation
2031 
2032 EXCEPTION
2033 
2034    WHEN OTHERS THEN
2035       /* Debug */
2036 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2037 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Other_Info';
2038 	  l_debug_str := 'Exception in Validate_Other_Info.'||SQLERRM;
2039 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2040 	END IF;
2041 
2042       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
2043          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
2044       END IF;
2045 
2046       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
2047 
2048       RETURN 'U';
2049 
2050 END Validate_Other_Info;
2051 
2052 
2053 
2054 /******************************************************************
2055    Created By         : Arkadi Tereshenkov
2056 
2057    Date Created By    : Oct 14, 2002
2058 
2059    Purpose            : Validate data pertaining to the Foreign
2060                         address information on the student.
2061                         (IGS_SV_ADDRESSES).
2062 
2063    Remarks            : Return result:
2064                            'S' - record found and validated
2065                            'E' - validation error
2066                            'U' - Unexpected error
2067                            'N' - data not found
2068 
2069    Change History
2070    Who                  When            What
2071 ------------------------------------------------------------------------
2072 
2073 ******************************************************************/
2074 FUNCTION Validate_F_Addr_Info (
2075    p_person_rec IN t_student_rec,
2076    p_data_rec   IN OUT NOCOPY  g_address_rec_type ,  -- Data record
2077    p_records    OUT NOCOPY  NUMBER   -- number of addressees found
2078 ) RETURN VARCHAR2
2079 IS
2080 
2081    l_api_name CONSTANT VARCHAR(30) := 'Validate_F_Addr_Info';
2082 
2083    CURSOR c_addr IS
2084      SELECT adr.party_site_id,
2085             addr_line_1,
2086             addr_line_2,
2087             addr_line_3,
2088             addr_line_4,
2089             city,
2090             state,
2091             province,
2092             country_cd,
2093             postal_code,
2094 	    identifying_address_flag
2095        FROM igs_pe_addr_v adr,
2096             igs_pe_partysiteuse_v usg
2097       WHERE person_id = p_person_rec.person_id
2098         AND ( adr.status = 'A' AND SYSDATE BETWEEN NVL(start_dt,SYSDATE) AND NVL(end_dt, SYSDATE + 1) )
2099         AND usg.party_site_id  = adr.party_site_id
2100         AND usg.site_use_type  = g_f_addr_usage
2101         AND usg.active         = 'A';
2102 
2103    l_counter NUMBER(10):= 0;
2104    l_not_valid boolean  := FALSE;
2105 
2106 BEGIN
2107 
2108    Put_Log_Msg(l_api_name||' Starts ',0);
2109    /* Debug */
2110 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2111 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2112 	  l_debug_str := 'Entering Validate_F_Addr_Info. batch_id is '|| p_person_rec.batch_id||' and person_id is '|| p_person_rec.person_id;
2113 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2114 	END IF;
2115 
2116 
2117    FOR c_addr_rec IN c_addr LOOP
2118 
2119        l_counter := l_counter +1;
2120 
2121        p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2122        p_data_rec(l_counter).person_id := p_person_rec.person_id;
2123        p_data_rec(l_counter).print_form := p_person_rec.print_form;
2124        p_data_rec(l_counter).party_site_id := c_addr_rec.party_site_id;
2125        p_data_rec(l_counter).address_type  := 'F';
2126        p_data_rec(l_counter).city   :=SUBSTR( c_addr_rec.city,1,60);
2127        p_data_rec(l_counter).state  := SUBSTR(c_addr_rec.state,1,2);
2128        p_data_rec(l_counter).postal_code := SUBSTR(c_addr_rec.postal_code,1,20);
2129        p_data_rec(l_counter).country_code := SUBSTR(c_addr_rec.country_cd,1,2);
2130        p_data_rec(l_counter).province  := SUBSTR(c_addr_rec.province,1,30);
2131        p_data_rec(l_counter).stdnt_valid_flag := '';
2132        p_data_rec(l_counter).creation_date := sysdate;
2133        p_data_rec(l_counter).created_by := g_update_by;
2134        p_data_rec(l_counter).last_updated_by := g_update_by;
2135        p_data_rec(l_counter).last_update_date  := sysdate;
2136        p_data_rec(l_counter).last_update_login := g_update_login;
2137        p_data_rec(l_counter).primary_flag := NVL(c_addr_rec.identifying_address_flag,'N');
2138        -- assignind adress lines
2139        p_data_rec(l_counter).address_line1 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,1,60);
2140        p_data_rec(l_counter).address_line2 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,61,120);
2141 
2142 	/* Debug */
2143 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2144 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2145 	  l_debug_str := 'Exiting from for loop in Validate_F_Addr_Info.';
2146 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2147 	END IF;
2148 
2149        exit;  -- one address is enough
2150 
2151    END LOOP;
2152 
2153    p_records := l_counter;
2154 
2155    IF (l_counter = 0) THEN
2156 
2157       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
2158 	/* Debug */
2159 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2160 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2161 	  l_debug_str := 'Returning N from Validate_F_Addr_Info.';
2162 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2163 	END IF;
2164       RETURN 'N';
2165 
2166    ELSE
2167         IF is_valid_addr(p_person_rec.batch_type, p_person_rec.person_id, p_data_rec(l_counter).party_site_id) THEN     -- bug 5405935
2168 	     Put_Log_Msg('ISO Country Code ('||p_data_rec(l_counter).country_code||') converted to',0);
2169 
2170 	     p_data_rec(l_counter).country_code := convert_country_code (p_data_rec(l_counter).country_code);
2171 
2172 	     Put_Log_Msg('US Country Code ('||p_data_rec(l_counter).country_code||') for person id:'|| p_data_rec(l_counter).person_id ||'.',0);
2173 
2174 	     IF (p_data_rec(l_counter).country_code IS NULL OR
2175 		 p_data_rec(l_counter).address_line1 IS NULL) THEN
2176 
2177 		 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_F_ADDR_RQD_FLD_ERR'); -- Foreign address block error
2178 		 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2179 
2180 		 Put_Log_Msg(FND_MESSAGE.Get,1);
2181 		 l_not_valid := TRUE;
2182 
2183 	     END IF;
2184         ELSE
2185 	  -- bug 5405935
2186 	    FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_DUP_ADDRESS'); -- Address already exists
2187 	    Put_Log_Msg(FND_MESSAGE.Get,1);
2188 	    l_not_valid := TRUE;
2189 	END IF;
2190    END IF;
2191 
2192    IF l_not_valid THEN
2193 
2194      Put_Log_Msg(l_api_name||' Validation error, return E ',1);
2195      /* Debug */
2196 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2197 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2198 	  l_debug_str := 'Returning E from Validate_F_Addr_Info.';
2199 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2200 	END IF;
2201 
2202      RETURN 'E';
2203 
2204    END IF;
2205 
2206    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
2207    /* Debug */
2208 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2209 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2210 	  l_debug_str := 'Returning S from Validate_F_Addr_Info.';
2211 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2212 	END IF;
2213 
2214    RETURN 'S'; -- Successfull validation
2215 
2216 EXCEPTION
2217 
2218    WHEN OTHERS THEN
2219    /* Debug */
2220 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2221 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_F_Addr_Info';
2222 	  l_debug_str := 'Exception in Validate_F_Addr_Info.'||SQLERRM;
2223 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2224 	END IF;
2225 
2226       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
2227          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
2228       END IF;
2229 
2230       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
2231 
2232       RETURN 'U';
2233 
2234 END Validate_F_Addr_Info;
2235 
2236 
2237 /******************************************************************
2238    Created By         : Arkadi Tereshenkov
2239 
2240    Date Created By    : Oct 14, 2002
2241 
2242    Purpose            : Validate the US Address block information
2243                         on the student.  (IGS_SV_ADDRESSES)
2244 
2245    Remarks            : Return result:
2246                            'S' - record found and validated
2247                            'E' - validation error
2248                            'U' - Unexpected error
2249                            'N' - data not found
2250 
2251    Change History
2252    Who                  When            What
2253    gmaheswa            12-Nov-2003    Modified c_addr cursor to select active address records,
2254                                       as part of address related changes .
2255 ------------------------------------------------------------------------
2256 
2257 ******************************************************************/
2258 FUNCTION Validate_Us_Addr_Info (
2259    p_person_rec IN t_student_rec,
2260    p_data_rec  IN OUT NOCOPY  g_address_rec_type ,  -- Data record
2261    p_records  IN  NUMBER   -- number of addressees found
2262 ) RETURN VARCHAR2
2263 IS
2264 
2265    l_api_name CONSTANT VARCHAR(30) := 'Validate_Us_Addr_Info';
2266 
2267    CURSOR c_addr IS
2268      SELECT adr.party_site_id,
2269             addr_line_1,
2270             addr_line_2,
2271             addr_line_3,
2272             addr_line_4,
2273             city,
2274             state,
2275             province,
2276             country_cd,
2277             postal_code,
2278 	    adr.identifying_address_flag
2279        FROM igs_pe_addr_v adr,
2280             igs_pe_partysiteuse_v usg
2281       WHERE person_id = p_person_rec.person_id
2282         AND ( adr.status = 'A' AND SYSDATE BETWEEN NVL(start_dt,SYSDATE) AND NVL(end_dt, SYSDATE + 1) )
2283         AND usg.party_site_id  = adr.party_site_id
2284         AND usg.site_use_type  = g_us_addr_usage
2285         AND usg.active         = 'A';
2286 
2287    l_counter NUMBER(10):= 0;
2288    l_not_valid BOOLEAN  := FALSE;
2289 
2290 BEGIN
2291 	/* Debug */
2292 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2293 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2294 	  l_debug_str := 'Entering Validate_US_Addr_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
2295 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2296 	END IF;
2297    Put_Log_Msg(l_api_name||' Starts ',0);
2298 
2299    FOR c_addr_rec IN c_addr LOOP
2300 
2301        l_counter := l_counter +1;
2302 
2303        p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2304        p_data_rec(l_counter).person_id := p_person_rec.person_id;
2305        p_data_rec(l_counter).print_form := p_person_rec.print_form;
2306        p_data_rec(l_counter).party_site_id := c_addr_rec.party_site_id;
2307        p_data_rec(l_counter).address_type  := 'U';
2308        p_data_rec(l_counter).address_line1 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,1,60);
2309        p_data_rec(l_counter).address_line2 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,61,120);
2310        p_data_rec(l_counter).city   :=SUBSTR( c_addr_rec.city,1,60);
2311        p_data_rec(l_counter).state  := SUBSTR(c_addr_rec.state,1,2);
2312        p_data_rec(l_counter).postal_code := substr(c_addr_rec.postal_code,1,5);
2313        p_data_rec(l_counter).postal_routing_code := substr(c_addr_rec.postal_code,7,4);
2314        p_data_rec(l_counter).country_code := 'US';
2315        p_data_rec(l_counter).primary_flag := NVL(c_addr_rec.identifying_address_flag,'N');
2316        p_data_rec(l_counter).province  := '';
2317        p_data_rec(l_counter).stdnt_valid_flag := '';
2318        p_data_rec(l_counter).creation_date := sysdate;
2319        p_data_rec(l_counter).created_by := g_update_by;
2320        p_data_rec(l_counter).last_updated_by := g_update_by;
2321        p_data_rec(l_counter).last_update_date  := sysdate;
2322        p_data_rec(l_counter).last_update_login := g_update_login;
2323 
2324 	/* Debug */
2325 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2326 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2327 	  l_debug_str := 'exiting from for loop in Validate_US_Addr_Info.';
2328 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2329 	END IF;
2330 
2331        EXIT;  -- one address is enough
2332 
2333    END LOOP;
2334 
2335    IF (l_counter = 0) THEN
2336 
2337       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
2338 	/* Debug */
2339 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2340 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2341 	  l_debug_str := 'Returning N from Validate_US_Addr_Info. ';
2342 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2343 	END IF;
2344 
2345       RETURN 'N';
2346    ELSE
2347 
2348        IF is_valid_addr(p_person_rec.batch_type, p_person_rec.person_id, p_data_rec(l_counter).party_site_id) THEN  -- bug 5405935
2349 	    IF p_data_rec(l_counter).city IS NULL
2350 	       OR p_data_rec(l_counter).state IS NULL
2351 	       OR p_data_rec(l_counter).postal_code IS NULL
2352 	       OR p_data_rec(l_counter).address_line1 IS NULL THEN
2353 
2354 		 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_US_ADDR_RQD_FLD_ERR'); -- US address block error
2355 		 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2356 
2357 		 Put_Log_Msg(FND_MESSAGE.Get,1);
2358 		 l_not_valid := TRUE;
2359 
2360 	     END IF;
2361        ELSE
2362 	  -- bug 5405935
2363 	    FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_DUP_ADDRESS'); -- Address already exists
2364 	    Put_Log_Msg(FND_MESSAGE.Get,1);
2365 	    l_not_valid := TRUE;
2366 	END IF;
2367 
2368      IF l_not_valid THEN
2369 
2370        Put_Log_Msg(l_api_name||' Validation error, return E ',1);
2371        /* Debug */
2372 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2373 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2374 	  l_debug_str := 'Returning E from Validate_US_Addr_Info. ';
2375 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2376 	END IF;
2377 
2378        RETURN 'E';
2379 
2380      END IF;
2381 
2382 
2383    END IF;
2384 
2385    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
2386    /* Debug */
2387 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2388 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2389 	  l_debug_str := 'Returning S from Validate_US_Addr_Info. ';
2390 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2391 	END IF;
2392 
2393    RETURN 'S'; -- Successfull validation
2394 
2395 EXCEPTION
2396 
2397    WHEN OTHERS THEN
2398    /* Debug */
2399 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2400 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_US_Addr_Info';
2401 	  l_debug_str := 'Exception in Validate_US_Addr_Info. '||SQLERRM;
2402 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2403 	END IF;
2404 
2405       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
2406          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
2407       END IF;
2408 
2409       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
2410 
2411       RETURN 'U';
2412 
2413 END Validate_Us_Addr_Info;
2414 
2415 
2416 /******************************************************************
2417    Created By         : Arkadi Tereshenkov
2418 
2419    Date Created By    : Oct 14, 2002
2420 
2421    Purpose            : Validate the information pertaining to the
2422                         Activity Site Address for the student.
2423                         (IGS_SV_ADDRESSES).
2424 
2425    Remarks            : Return result:
2426                            'S' - record found and validated
2427                            'E' - validation error
2428                            'U' - Unexpected error
2429                            'N' - data not found
2430 
2431    Change History
2432    Who                  When            What
2433    pkpatel              23-APR-2003     Bug No 2908378
2434                                         Replaced IGS_PE_ADDR_V with IGS_AD_LOCVENUE_ADDR_V while joining with IGS_PE_ACT_SITE
2435                                         Selected LOCATION_ID instead of PARTY_SITE_ID for these cases.
2436                                         Added p_data_rec(l_counter).party_site_id := c_addr_rec.party_site_id
2437    gmaheswa             12-Nov-2003     Modified c_addr cursor to select active address records,
2438                                         as part of address related changes .
2439    pkpatel              4-Dec-2003      Bug 3227107 (Used the status column for address)
2440 ------------------------------------------------------------------------
2441 
2442 ******************************************************************/
2443 FUNCTION Validate_Site_Info (
2444    p_person_rec IN      t_student_rec,
2445    p_data_rec   IN OUT NOCOPY  g_address_rec_type ,  -- Data record
2446    p_records    OUT NOCOPY     NUMBER                -- number of addressees found
2447 ) RETURN VARCHAR2
2448 IS
2449 
2450 
2451    l_api_name CONSTANT VARCHAR(30) := 'Validate_Site_Info';
2452 
2453    CURSOR c_data_add IS
2454    -- All addresses with active status for a person
2455   SELECT 'A' action_type, -- Add site action type
2456             ps.party_site_id,
2457             loc.ADDRESS1 addr_line_1 ,
2458             loc.ADDRESS2 addr_line_2,
2459             loc.ADDRESS3 addr_line_3,
2460             loc.ADDRESS4 addr_line_4,
2461             loc.city,
2462             loc.state,
2463             loc.province,
2464             loc.country country_code,
2465             loc.postal_code,
2466 	    ps.identifying_address_flag  primary_site,
2467 	    to_char(usg.party_site_id) activity_site_cd,
2468 	    null remarks
2469        FROM	HZ_LOCATIONS loc,
2470 	        HZ_PARTY_SITES ps,
2471                 IGS_PE_HZ_PTY_SITES IGSPS,
2472 		hz_party_site_uses usg
2473       WHERE
2474         PS.LOCATION_ID = Loc.LOCATION_ID
2475         AND PS.PARTY_SITE_ID = IGSPS.PARTY_SITE_ID (+)
2476         and ps.party_id = p_person_rec.person_id
2477         AND ( ps.status = 'A' AND SYSDATE BETWEEN NVL(IGSPS.start_date,SYSDATE) AND NVL(IGSPS.end_date, SYSDATE + 1))
2478         AND usg.party_site_id  = ps.party_site_id
2479         AND usg.site_use_type  = g_site_addr_usage
2480         AND usg.status = 'A'
2481    UNION
2482      -- All institution sites assigned as to a person. here location id is selected which
2483      -- will be stored as party_site id in IGS_SV_ADDRESSES table
2484      SELECT 'A' action_type, -- Add site action type
2485             adr.location_id party_site_id, -- this will be passed to party_site_id of IGS_SV_ADDRESSES
2486             ADDRESS1 addr_line_1,
2487             ADDRESS2 addr_line_2,
2488             ADDRESS3 addr_line_3,
2489             ADDRESS4 addr_line_4,
2490             city,
2491             state,
2492             province,
2493             country country_code,
2494             postal_code,
2495 	    usg.primary_flag primary_site,
2496 	    usg.activity_site_cd activity_site_cd,
2497 	    usg.remarks remarks
2498        FROM  HZ_LOCATIONS adr,
2499             igs_pe_act_site usg
2500      WHERE usg.person_id = p_person_rec.person_id
2501         AND SYSDATE BETWEEN nvl(ADDRESS_EFFECTIVE_DATE,sysdate-1) AND NVL(ADDRESS_EXPIRATION_DATE, SYSDATE + 1)
2502         AND usg.location_id = adr.location_id
2503         AND sysdate BETWEEN usg.start_date AND NVL(usg.end_date,sysdate+1);
2504 
2505 	--All deleted and previously submited sites
2506   CURSOR c_data_del IS
2507      select 'D' action_type,
2508             ps.party_site_id,
2509             loc.ADDRESS1 addr_line_1 ,
2510             loc.ADDRESS2 addr_line_2,
2511             loc.ADDRESS3 addr_line_3,
2512             loc.ADDRESS4 addr_line_4,
2513             loc.city,
2514             loc.state,
2515             loc.province,
2516             loc.country country_code,
2517             loc.postal_code,
2518      ps.identifying_address_flag  primary_site,
2519      to_char(usg.party_site_id) activity_site_cd ,
2520      null remarks
2521        from HZ_LOCATIONS loc,
2522      HZ_PARTY_SITES ps,
2523      IGS_PE_HZ_PTY_SITES IGSPS,
2524             hz_party_site_uses usg
2525       where
2526         PS.LOCATION_ID = Loc.LOCATION_ID
2527         AND PS.PARTY_SITE_ID = IGSPS.PARTY_SITE_ID (+)
2528         and ps.party_id = p_person_rec.person_id
2529         and ( (IGSPS.end_date is not null and trunc(sysdate) >= IGSPS.end_date )
2530               or ps.status         <> 'A'
2531               or usg.status         <> 'A'
2532              )
2533         and usg.party_site_id  = ps.party_site_id
2534         and usg.site_use_type  = g_site_addr_usage
2535         and usg.party_site_id in
2536             ( select ad.party_site_id
2537                 from igs_sv_addresses ad,
2538                      igs_sv_persons pr
2539                where ad.person_id = pr.person_id
2540                      and ad.batch_id = pr.batch_id
2541                      and pr.record_status <> 'E'
2542                      and ad.person_id = p_person_rec.person_id and ad.address_type not in ('F','U')
2543             )
2544    union
2545      -- all institution sites assigned as to a person
2546      select 'D' action_type, -- delete site action type
2547             loc.location_id party_site_id,
2548             loc.ADDRESS1,
2549             loc.ADDRESS2,
2550             loc.ADDRESS3,
2551             loc.ADDRESS4,
2552             loc.city,
2553             loc.state,
2554             loc.province,
2555             loc.country country_code,
2556             loc.postal_code,
2557      usg.primary_flag primary_site,
2558      usg.activity_site_cd activity_site_cd,
2559      usg.remarks remarks
2560        from HZ_LOCATIONS loc,
2561             igs_pe_act_site usg
2562       where
2563         usg.person_id = p_person_rec.person_id
2564         and (loc.ADDRESS_EXPIRATION_DATE is not null and loc.ADDRESS_EXPIRATION_DATE <= trunc(sysdate) )
2565         and usg.location_id = loc.location_id
2566         and sysdate between usg.start_date and nvl(usg.end_date,sysdate+1)
2567         and usg.location_id in
2568             ( select adr1.location_id
2569               from igs_sv_addresses ad,
2570                    HZ_LOCATIONS  adr1,
2571                    igs_sv_persons pr
2572               where ad.person_id = pr.person_id
2573                      and ad.batch_id = pr.batch_id
2574                      and pr.record_status <> 'E'
2575                      and adr1.location_id = ad.party_site_id  -- in the party_side_id field of igs_sv_addresses location_id is stored for activity sites
2576                      and ad.person_id = p_person_rec.person_id and ad.address_type not in ('F','U')
2577             );
2578 
2579   CURSOR c_primary_site IS
2580 	SELECT COUNT('X')
2581 	FROM
2582 	(
2583 	   SELECT a.location_id
2584 	   FROM igs_pe_act_site a
2585 	   WHERE a.person_id = p_person_rec.person_id AND
2586 	       a.primary_flag = 'Y' /*AND
2587 	       (a.end_date IS NULL OR sysdate between a.start_date and a.end_date)*/
2588 	 UNION
2589 	    SELECT adr.party_site_id
2590 	     FROM igs_pe_addr_v adr,
2591 		hz_party_site_uses usg
2592 	     WHERE person_id = p_person_rec.person_id
2593 		AND ( adr.status = 'A' AND SYSDATE BETWEEN NVL(adr.start_dt,SYSDATE) AND NVL(adr.end_dt, SYSDATE + 1))
2594 		AND usg.party_site_id  = adr.party_site_id
2595 		AND usg.site_use_type  = 'SEVIS_SITE_OF_ACTIVITY'
2596 		AND usg.status = 'A'
2597 		AND adr.identifying_address_flag = 'Y'
2598         )
2599     ;
2600    /*
2601    CURSOR c_activity_site(cp_person_id igs_pe_act_site.activity_site_cd%TYPE) IS
2602 	 SELECT COUNT(a.activity_site_cd)
2603 	 FROM igs_pe_act_site a
2604 	 WHERE a.person_id = p_person_rec.person_id AND
2605 	       (a.end_date IS NULL OR sysdate between a.start_date and a.end_date);
2606    */
2607   l_counter  NUMBER(10) :=0;
2608   l_not_valid BOOLEAN := FALSE;
2609   l_primary_site_count  NUMBER(10) :=0;
2610   l_site_count  NUMBER(10) :=0;
2611 
2612 BEGIN
2613 	/* Debug */
2614 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2615 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Site_Info';
2616 	  l_debug_str := 'Entering Validate_Site_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
2617 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2618 	END IF;
2619 
2620    Put_Log_Msg(l_api_name||' starts ',0);
2621 
2622    p_records := 0;
2623 
2624   /* OPEN c_activity_site(p_person_rec.person_id);
2625    FETCH c_activity_site INTO l_site_count;
2626    CLOSE c_activity_site;
2627 
2628    IF l_site_count = 0  THEN
2629 	FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_SITE_REQ');
2630         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2631         Put_Log_Msg(FND_MESSAGE.Get,1);
2632         l_not_valid := TRUE;
2633    END IF;
2634 
2635 */
2636 
2637    OPEN c_primary_site;
2638    FETCH c_primary_site INTO l_primary_site_count;
2639    CLOSE c_primary_site;
2640 
2641    IF l_primary_site_count <> 1  THEN
2642 	FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_PRIMARY_IND');
2643         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2644         Put_Log_Msg(FND_MESSAGE.Get,1);
2645         l_not_valid := TRUE;
2646    END IF;
2647 
2648    FOR c_addr_rec IN c_data_add LOOP
2649 
2650        l_counter := l_counter +1;
2651 
2652        IF l_counter > 25 AND p_person_rec.batch_id = g_running_create_batch THEN
2653           IF g_parallel_batches.count > 0 THEN
2654 	       p_data_rec(l_counter).batch_id := g_parallel_batches(1);
2655 	  ELSE
2656 	      p_data_rec(l_counter).batch_id := igs_sv_util.open_new_batch(p_person_rec.person_id, p_person_rec.batch_id,'CONN_JOB');
2657 	      g_parallel_batches(1) := p_data_rec(l_counter).batch_id;
2658 	  END IF;
2659        ELSE
2660           p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2661        END IF;
2662 
2663      --  p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2664        p_data_rec(l_counter).person_id := p_person_rec.person_id;
2665        p_data_rec(l_counter).print_form := p_person_rec.print_form;
2666        p_data_rec(l_counter).creation_date := sysdate;
2667        p_data_rec(l_counter).created_by := g_update_by;
2668        p_data_rec(l_counter).last_updated_by := g_update_by;
2669        p_data_rec(l_counter).last_update_date  := sysdate;
2670        p_data_rec(l_counter).last_update_login := g_update_login;
2671 
2672        -- 2908378 added
2673        p_data_rec(l_counter).party_site_id := c_addr_rec.party_site_id;
2674        p_data_rec(l_counter).address_type  := c_addr_rec.action_type;
2675        p_data_rec(l_counter).address_line1 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,1,60);
2676        p_data_rec(l_counter).address_line2 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,61,120);
2677        p_data_rec(l_counter).city   :=SUBSTR( c_addr_rec.city,1,60);
2678        p_data_rec(l_counter).state  := SUBSTR(c_addr_rec.state,1,2);
2679        p_data_rec(l_counter).postal_code := substr(c_addr_rec.postal_code,1,5);
2680        p_data_rec(l_counter).postal_routing_code := substr(c_addr_rec.postal_code,7,4);
2681        p_data_rec(l_counter).primary_flag := NVL(c_addr_rec.primary_site,'N');
2682        p_data_rec(l_counter).action_type  := c_addr_rec.action_type;
2683        p_data_rec(l_counter).activity_site_cd := c_addr_rec.activity_site_cd;
2684        p_data_rec(l_counter).country_code := c_addr_rec.country_code;
2685        p_data_rec(l_counter).remarks := c_addr_rec.remarks;
2686 
2687        IF is_valid_addr(p_person_rec.batch_type, p_person_rec.person_id, p_data_rec(l_counter).party_site_id) THEN -- bug 5405935
2688 	       IF p_data_rec(l_counter).city IS NULL
2689 		 OR p_data_rec(l_counter).state IS NULL
2690 		 OR p_data_rec(l_counter).postal_code IS NULL
2691 		 OR p_data_rec(l_counter).address_line1 IS NULL THEN
2692 
2693 		   FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_US_ADDR_RQD_FLD_ERR'); -- US address block error
2694 		   FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2695 
2696 		   Put_Log_Msg(FND_MESSAGE.Get,1);
2697 		   l_not_valid := TRUE;
2698 
2699 	       END IF;
2700         ELSE
2701 	  -- bug 5405935
2702 	    FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_DUP_ADDRESS'); -- Address already exists
2703 	    Put_Log_Msg(FND_MESSAGE.Get,1);
2704 	    l_not_valid := TRUE;
2705 	END IF;
2706 
2707    END LOOP;
2708 
2709    FOR c_addr_rec IN c_data_del LOOP
2710 
2711        l_counter := l_counter +1;
2712 
2713        IF l_counter > 25 AND p_person_rec.batch_id = g_running_create_batch THEN
2714           IF g_parallel_batches.count > 0 THEN
2715 	       p_data_rec(l_counter).batch_id := g_parallel_batches(1);
2716 	  ELSE
2717 	      p_data_rec(l_counter).batch_id := igs_sv_util.open_new_batch(p_person_rec.person_id, p_person_rec.batch_id,'CONN_JOB');
2718 	      g_parallel_batches(1) := p_data_rec(l_counter).batch_id;
2719 	  END IF;
2720        ELSE
2721           p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2722        END IF;
2723 
2724      --  p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
2725        p_data_rec(l_counter).person_id := p_person_rec.person_id;
2726        p_data_rec(l_counter).print_form := p_person_rec.print_form;
2727        p_data_rec(l_counter).creation_date := sysdate;
2728        p_data_rec(l_counter).created_by := g_update_by;
2729        p_data_rec(l_counter).last_updated_by := g_update_by;
2730        p_data_rec(l_counter).last_update_date  := sysdate;
2731        p_data_rec(l_counter).last_update_login := g_update_login;
2732 
2733        -- 2908378 added
2734        p_data_rec(l_counter).party_site_id := c_addr_rec.party_site_id;
2735        p_data_rec(l_counter).address_type  := c_addr_rec.action_type;
2736        p_data_rec(l_counter).address_line1 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,1,60);
2737        p_data_rec(l_counter).address_line2 := SUBSTR(c_addr_rec.addr_line_1||c_addr_rec.addr_line_2||c_addr_rec.addr_line_3||c_addr_rec.addr_line_4,61,120);
2738        p_data_rec(l_counter).city   :=SUBSTR( c_addr_rec.city,1,60);
2739        p_data_rec(l_counter).state  := SUBSTR(c_addr_rec.state,1,2);
2740        p_data_rec(l_counter).postal_code := substr(c_addr_rec.postal_code,1,5);
2741        p_data_rec(l_counter).postal_routing_code := substr(c_addr_rec.postal_code,7,4);
2742        p_data_rec(l_counter).primary_flag := c_addr_rec.primary_site;
2743        p_data_rec(l_counter).action_type  := c_addr_rec.action_type;
2744        p_data_rec(l_counter).activity_site_cd := c_addr_rec.activity_site_cd;
2745        p_data_rec(l_counter).country_code := c_addr_rec.country_code;
2746        p_data_rec(l_counter).remarks := c_addr_rec.remarks;
2747 
2748 
2749        IF p_data_rec(l_counter).city IS NULL
2750          OR p_data_rec(l_counter).state IS NULL
2751          OR p_data_rec(l_counter).postal_code IS NULL
2752          OR p_data_rec(l_counter).address_line1 IS NULL THEN
2753 
2754            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_US_ADDR_RQD_FLD_ERR'); -- US address block error
2755            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
2756 
2757            Put_Log_Msg(FND_MESSAGE.Get,1);
2758            l_not_valid := TRUE;
2759 
2760        END IF;
2761 
2762    END LOOP;
2763 
2764    IF (l_counter = 0) THEN
2765 
2766       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
2767 	/* Debug */
2768 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2769 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Site_Info';
2770 	  l_debug_str := 'Returning N from Validate_Site_Info.';
2771 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2772 	END IF;
2773 
2774       RETURN 'N';
2775    ELSIF l_not_valid THEN
2776 
2777        Put_Log_Msg(l_api_name||' Validation error, return E ',1);
2778        /* Debug */
2779 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2780 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Site_Info';
2781 	  l_debug_str := 'Returning E from Validate_Site_Info.';
2782 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2783 	END IF;
2784        RETURN 'E';
2785 
2786    END IF;
2787 
2788    p_records := l_counter;
2789 
2790    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
2791    /* Debug */
2792 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2793 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Site_Info';
2794 	  l_debug_str := 'Returning S from Validate_Site_Info. No of SOA rec: '||l_counter;
2795 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2796 	END IF;
2797 
2798    RETURN 'S'; -- Successfull validation
2799 
2800 EXCEPTION
2801 
2802    WHEN OTHERS THEN
2803    /* Debug */
2804 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2805 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Site_Info';
2806 	  l_debug_str := 'Exception in Validate_Site_Info.'||SQLERRM;
2807 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2808 	END IF;
2809 
2810       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
2811          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
2812       END IF;
2813 
2814       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
2815 
2816       RETURN 'U';
2817 
2818 
2819 END Validate_Site_Info;
2820 
2821 
2822 /******************************************************************
2823    Created By         : Arkadi Tereshenkov
2824 
2825    Date Created By    : Oct 14, 2002
2826 
2827    Purpose            : Validate the information that is pertaining
2828                         to the Education Block information.
2829                         (IGS_SV_PRGMS_INFO).
2830 
2831    Remarks            : Return result:
2832                            'S' - record found and validated
2833                            'E' - validation error
2834                            'U' - Unexpected error
2835                            'N' - data not found
2836 
2837    Change History
2838    Who                  When            What
2839 ------------------------------------------------------------------------
2840 
2841 ******************************************************************/
2842 FUNCTION Validate_Edu_Info (
2843    p_person_rec IN t_student_rec,
2844    p_data_rec  IN OUT NOCOPY  IGS_SV_PRGMS_INFO%ROWTYPE
2845 ) RETURN VARCHAR2
2846 IS
2847 
2848    l_api_name CONSTANT VARCHAR(30) := 'Validate_Edu_Info';
2849 
2850    CURSOR c_nonimg_data IS
2851      SELECT penf.education_level,
2852             penf.primary_major,
2853             penf.secondary_major,
2854             penf.minor,
2855             penf.length_of_study,
2856             penf.prgm_start_date,
2857             penf.prgm_end_date,
2858             decode(penf.english_reqd,'Y','1','0')  english_reqd,
2859             decode(penf.english_reqd_met,'Y','1','0')  english_reqd_met,
2860             penf.not_reqd_reason,
2861             penf.educ_lvl_remarks
2862        FROM igs_pe_nonimg_form     penf
2863       WHERE penf.person_id = p_person_rec.person_id
2864         AND penf.nonimg_form_id = p_person_rec.form_id;
2865 
2866    CURSOR c_ev_data IS
2867      SELECT peev.position_code,
2868             peev.subject_field_code,
2869             peev.subject_field_remarks,
2870 	    prgm_start_date,
2871 	    prgm_end_date
2872        FROM igs_pe_ev_form   peev
2873       WHERE peev.person_id  = p_person_rec.person_id
2874         AND peev.ev_form_id = p_person_rec.form_id;
2875 
2876 
2877    l_not_valid                  BOOLEAN := FALSE;
2878    l_education_level            igs_pe_nonimg_form.education_level%TYPE;
2879    l_primary_major              igs_pe_nonimg_form.primary_major%TYPE;
2880    l_secondary_major            igs_pe_nonimg_form.secondary_major%TYPE;
2881    l_minor                      igs_pe_nonimg_form.minor%TYPE;
2882    l_length_of_study            igs_pe_nonimg_form.length_of_study%TYPE;
2883    l_prgm_start_date            igs_pe_nonimg_form.prgm_start_date%TYPE;
2884    l_prgm_end_date              igs_pe_nonimg_form.prgm_end_date%TYPE;
2885    l_english_reqd               igs_pe_nonimg_form.english_reqd%TYPE;
2886    l_english_reqd_met           igs_pe_nonimg_form.english_reqd_met%TYPE;
2887    l_not_reqd_reason            igs_pe_nonimg_form.not_reqd_reason%TYPE;
2888    l_educ_lvl_remarks           igs_pe_nonimg_form.educ_lvl_remarks%TYPE;
2889    l_position_code              igs_pe_ev_form.position_code%TYPE;
2890    l_subject_field_code         igs_pe_ev_form.subject_field_code%TYPE;
2891    l_subject_field_remarks      igs_pe_ev_form.subject_field_remarks%TYPE;
2892    l_ev_prgm_start_date            igs_pe_ev_form.prgm_start_date%TYPE;
2893    l_ev_prgm_end_date              igs_pe_ev_form.prgm_end_date%TYPE;
2894 
2895 
2896 BEGIN
2897 /* Debug */
2898 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2899 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Edu_Info
2900 	  ';
2901 	  l_debug_str := 'Entering Validate_Edu_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
2902 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2903 	END IF;
2904 
2905    Put_Log_Msg(l_api_name||' starts ',0);
2906 
2907    p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
2908 
2909 --
2910 -- Process Non Immigrant Foreign Student data
2911 --
2912    IF (p_person_rec.batch_type = 'I') THEN
2913 
2914       OPEN c_nonimg_data;
2915       FETCH c_nonimg_data
2916        INTO l_education_level,
2917             l_primary_major,
2918             l_secondary_major,
2919             l_minor,
2920             l_length_of_study,
2921             l_prgm_start_date,
2922             l_prgm_end_date,
2923             l_english_reqd,
2924             l_english_reqd_met,
2925             l_not_reqd_reason,
2926             l_educ_lvl_remarks;
2927 
2928       IF (c_nonimg_data%FOUND) THEN
2929          p_data_rec.batch_id          := p_person_rec.batch_id;
2930          p_data_rec.person_id         := p_person_rec.person_id;
2931          p_data_rec.print_form        := p_person_rec.print_form;
2932          p_data_rec.creation_date     := sysdate;
2933          p_data_rec.created_by        := g_update_by;
2934          p_data_rec.last_updated_by   := g_update_by;
2935          p_data_rec.last_update_date  := sysdate;
2936          p_data_rec.last_update_login := g_update_login;
2937          p_data_rec.prgm_action_type := 'EP';
2938 
2939          p_data_rec.education_level   := l_education_level;
2940          p_data_rec.primary_major     := l_primary_major;
2941          p_data_rec.secondary_major   := l_secondary_major;
2942          p_data_rec.educ_lvl_remarks  := l_educ_lvl_remarks;
2943          p_data_rec.minor             := l_minor;
2944          p_data_rec.length_of_study   := ltrim(to_char(to_number(l_length_of_study),'00'));
2945          p_data_rec.prgm_start_date   := to_char(l_prgm_start_date, 'YYYY-MM-DD');
2946          p_data_rec.prgm_end_date     := to_char(l_prgm_end_date, 'YYYY-MM-DD');
2947          p_data_rec.english_reqd      := l_english_reqd;
2948          p_data_rec.english_reqd_met  := l_english_reqd_met;
2949          p_data_rec.not_reqd_reason   := l_not_reqd_reason;
2950 
2951       END IF;
2952 
2953       CLOSE c_nonimg_data;
2954 
2955    ELSE
2956 --
2957 -- Process Exchange Visitor Student data
2958 --
2959        OPEN c_ev_data;
2960       FETCH c_ev_data
2961        INTO l_position_code,
2962             l_subject_field_code,
2963             l_subject_field_remarks,
2964 	    l_ev_prgm_start_date,
2965 	    l_ev_prgm_end_date;
2966 
2967       IF (c_ev_data%FOUND) THEN
2968 
2969          p_data_rec.batch_id             := p_person_rec.batch_id;
2970          p_data_rec.person_id            := p_person_rec.person_id;
2971          p_data_rec.print_form           := p_person_rec.print_form;
2972          p_data_rec.creation_date        := sysdate;
2973          p_data_rec.created_by           := g_update_by;
2974          p_data_rec.last_updated_by      := g_update_by;
2975          p_data_rec.last_update_date     := sysdate;
2976          p_data_rec.last_update_login    := g_update_login;
2977          p_data_rec.prgm_action_type     := 'EP';
2978          p_data_rec.position_code        := l_position_code;
2979          p_data_rec.subject_field_code   := l_subject_field_code;
2980          p_data_rec.remarks              := l_subject_field_remarks;
2981 	 p_data_rec.prgm_start_date   := to_char(l_ev_prgm_start_date, 'YYYY-MM-DD');
2982          p_data_rec.prgm_end_date     := to_char(l_ev_prgm_end_date, 'YYYY-MM-DD');
2983 
2984       END IF;
2985 
2986       CLOSE c_ev_data;
2987 
2988    END IF;
2989 
2990    IF p_data_rec.batch_id IS NULL THEN
2991 
2992       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
2993 /* Debug */
2994 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
2995 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Edu_Info';
2996 	  l_debug_str := 'Returning N from Validate_Edu_Info.';
2997 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
2998 	END IF;
2999 
3000       RETURN 'N';
3001 
3002    ELSE
3003 
3004      -- Validate all the data
3005 
3006      IF (p_person_rec.batch_type = 'I') THEN
3007 
3008 --
3009 -- Validate that the required fields for Foreign Student are available.
3010 --
3011         IF (p_data_rec.education_level IS NULL     OR
3012             p_data_rec.primary_major IS NULL       OR
3013             p_data_rec.length_of_study IS NULL     OR
3014             p_data_rec.prgm_start_date IS NULL     OR
3015             p_data_rec.prgm_end_date IS NULL       OR
3016             p_data_rec.english_reqd IS NULL) THEN
3017            l_not_valid := TRUE;
3018            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EDU_NIMG_REQ_FLD_ERR'); -- Required fields for Foreign Students
3019            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
3020            Put_Log_Msg(FND_MESSAGE.Get,1);
3021         END IF;
3022 
3023 --
3024 -- Make sure that there is a value for the English requirement being met or not
3025 --
3026         IF ( p_data_rec.english_reqd = 'Y'  AND p_data_rec.english_reqd_met IS NULL) THEN
3027             l_not_valid := TRUE;
3028             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EDU_NIMG_MET_ERR'); -- Required field for Foreign students if english required
3029             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
3030             Put_Log_Msg(FND_MESSAGE.Get,1);
3031         END IF;
3032 
3033         IF ( p_data_rec.education_level = '11'  AND p_data_rec.educ_lvl_remarks IS NULL) THEN
3034             l_not_valid := TRUE;
3035             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EDU_NIMG_REQ_FLD_ERR'); -- Required field for Foreign students if english required
3036             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
3037             Put_Log_Msg(FND_MESSAGE.Get,1);
3038         END IF;
3039 
3040 --
3041 -- Make sure that there is a reason for the requirement not being met.
3042 --
3043         IF (p_data_rec.english_reqd = 'N'    AND
3044             p_data_rec.not_reqd_reason IS NULL) THEN
3045             l_not_valid := TRUE;
3046             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EDU_NIMG_NOT_MET_ERR'); -- Required field for Foreign students english not met
3047             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
3048             Put_Log_Msg(FND_MESSAGE.Get,1);
3049          END IF;
3050 
3051      ELSE
3052 
3053 --
3054 -- Validate that the required fields are present for the Exchange Visitor.
3055 --
3056         IF (p_data_rec.position_code IS NULL
3057             OR  p_data_rec.subject_field_code IS NULL
3058             OR p_data_rec.remarks IS NULL)  THEN
3059            l_not_valid := TRUE;
3060            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EDU_EV_REQ_FLD_ERR'); -- Required field for Exchange Visitor not available.
3061            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
3062            Put_Log_Msg(FND_MESSAGE.Get,1);
3063         END IF;
3064 
3065      END IF;
3066 
3067      IF (l_not_valid) THEN
3068 
3069         Put_Log_Msg(l_api_name||' Validation error, return E ',1);
3070 	/* Debug */
3071 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3072 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Edu_Info';
3073 	  l_debug_str := 'Returning E from Validate_Edu_Info.';
3074 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3075 	END IF;
3076         RETURN 'E';
3077 
3078      END IF;
3079 
3080    END IF;
3081 
3082    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
3083    /* Debug */
3084 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3085 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Edu_Info';
3086 	  l_debug_str := 'Returning S from Validate_Edu_Info.';
3087 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3088 	END IF;
3089 
3090    RETURN 'S'; -- Successfull validation
3091 
3092 EXCEPTION
3093 
3094    WHEN OTHERS THEN
3095 	/* Debug */
3096 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3097 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Edu_Info';
3098 	  l_debug_str := 'Exception in Validate_Edu_Info.'||SQLERRM;
3099 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3100 	END IF;
3101 
3102       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
3103          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
3104       END IF;
3105 
3106       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
3107 
3108       RETURN 'U';
3109 
3110 END Validate_Edu_Info;
3111 
3112 
3113 /******************************************************************
3114    Created By         : Arkadi Tereshenkov
3115 
3116    Date Created By    : Oct 14, 2002
3117 
3118    Purpose            : Validate information pertaining to the Program
3119                         information block for the student.
3120                         (IGS_SV_PRGMS_INFO).
3121 
3122    Remarks            : Return result:
3123                            'S' - record found and validated
3124                            'E' - validation error
3125                            'U' - Unexpected error
3126                            'N' - data not found
3127 
3128    Change History
3129    Who                  When            What
3130 ------------------------------------------------------------------------
3131 
3132 ******************************************************************/
3133 FUNCTION Get_Othr_Prgm_Info(
3134  p_data_rec  IN OUT NOCOPY  IGS_SV_PRGMS_INFO%ROWTYPE
3135 ) RETURN VARCHAR2
3136 IS
3137      l_api_name CONSTANT VARCHAR(30) := 'Get_Othr_Prgm_Info';
3138 
3139    CURSOR c_nonimg_data IS
3140      SELECT penf.education_level,
3141             penf.primary_major,
3142             penf.secondary_major,
3143             penf.minor,
3144             penf.length_of_study,
3145             penf.prgm_start_date,
3146             penf.prgm_end_date,
3147             decode(penf.english_reqd,'Y','1','0')  english_reqd,
3148             decode(penf.english_reqd_met,'Y','1','0')  english_reqd_met,
3149             penf.not_reqd_reason,
3150             penf.educ_lvl_remarks
3151        FROM igs_pe_nonimg_form     penf
3152       WHERE penf.person_id = p_data_rec.person_id
3153         AND penf.nonimg_form_id = g_nonimg_form_id;
3154 
3155    CURSOR c_ev_data IS
3156      SELECT peev.position_code,
3157             peev.subject_field_code,
3158             peev.subject_field_remarks,
3159 	    prgm_start_date,
3160 	    prgm_end_date
3161        FROM igs_pe_ev_form   peev
3162       WHERE peev.person_id  = p_data_rec.person_id
3163         AND peev.ev_form_id = g_nonimg_form_id;
3164 
3165 
3166    l_education_level            igs_pe_nonimg_form.education_level%TYPE;
3167    l_primary_major              igs_pe_nonimg_form.primary_major%TYPE;
3168    l_secondary_major            igs_pe_nonimg_form.secondary_major%TYPE;
3169    l_minor                      igs_pe_nonimg_form.minor%TYPE;
3170    l_length_of_study            igs_pe_nonimg_form.length_of_study%TYPE;
3171    l_prgm_start_date            igs_pe_nonimg_form.prgm_start_date%TYPE;
3172    l_prgm_end_date              igs_pe_nonimg_form.prgm_end_date%TYPE;
3173    l_english_reqd               igs_pe_nonimg_form.english_reqd%TYPE;
3174    l_english_reqd_met           igs_pe_nonimg_form.english_reqd_met%TYPE;
3175    l_not_reqd_reason            igs_pe_nonimg_form.not_reqd_reason%TYPE;
3176    l_educ_lvl_remarks           igs_pe_nonimg_form.educ_lvl_remarks%TYPE;
3177    l_position_code              igs_pe_ev_form.position_code%TYPE;
3178    l_subject_field_code         igs_pe_ev_form.subject_field_code%TYPE;
3179    l_subject_field_remarks      igs_pe_ev_form.subject_field_remarks%TYPE;
3180    l_ev_prgm_start_date            igs_pe_ev_form.prgm_start_date%TYPE;
3181    l_ev_prgm_end_date              igs_pe_ev_form.prgm_end_date%TYPE;
3182    l_not_valid BOOLEAN := TRUE;
3183 BEGIN
3184 
3185 	/* Debug */
3186 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3187 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Othr_Prgm_Info';
3188 	  l_debug_str := 'Entering Get_Othr_Prgm_Info. form_id is '||g_nonimg_form_id ||' and person_id is '||p_data_rec.person_id;
3189 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3190 	END IF;
3191 
3192         Put_Log_Msg(l_api_name||' starts ',0);
3193 
3194       OPEN c_nonimg_data;
3195       FETCH c_nonimg_data
3196        INTO l_education_level,
3197             l_primary_major,
3198             l_secondary_major,
3199             l_minor,
3200             l_length_of_study,
3201             l_prgm_start_date,
3202             l_prgm_end_date,
3203             l_english_reqd,
3204             l_english_reqd_met,
3205             l_not_reqd_reason,
3206             l_educ_lvl_remarks;
3207 
3208       IF (c_nonimg_data%FOUND) THEN
3209          p_data_rec.education_level   := l_education_level;
3210          p_data_rec.primary_major     := l_primary_major;
3211          p_data_rec.secondary_major   := l_secondary_major;
3212          p_data_rec.educ_lvl_remarks  := l_educ_lvl_remarks;
3213          p_data_rec.minor             := l_minor;
3214          p_data_rec.length_of_study   := ltrim(to_char(to_number(l_length_of_study),'00'));
3215          p_data_rec.prgm_start_date   := to_char(l_prgm_start_date, 'YYYY-MM-DD');
3216          p_data_rec.prgm_end_date     := to_char(l_prgm_end_date, 'YYYY-MM-DD');
3217          p_data_rec.english_reqd      := l_english_reqd;
3218          p_data_rec.english_reqd_met  := l_english_reqd_met;
3219          p_data_rec.not_reqd_reason   := l_not_reqd_reason;
3220 	 l_not_valid := FALSE;
3221       ELSE
3222           OPEN c_ev_data;
3223           FETCH c_ev_data
3224 	  INTO l_position_code,
3225 	       l_subject_field_code,
3226 	       l_subject_field_remarks,
3227 	       l_ev_prgm_start_date,
3228 	       l_ev_prgm_end_date;
3229 
3230 	      IF (c_ev_data%FOUND) THEN
3231 		 p_data_rec.position_code        := l_position_code;
3232 		 p_data_rec.subject_field_code   := l_subject_field_code;
3233 		 p_data_rec.remarks              := l_subject_field_remarks;
3234 		 p_data_rec.prgm_start_date   := to_char(l_ev_prgm_start_date, 'YYYY-MM-DD');
3235 		 p_data_rec.prgm_end_date     := to_char(l_ev_prgm_end_date, 'YYYY-MM-DD');
3236 		 l_not_valid := FALSE;
3237 	      END IF;
3238 
3239 	      CLOSE c_ev_data;
3240       END IF;
3241 
3242       CLOSE c_nonimg_data;
3243       IF l_not_valid THEN
3244 	  RETURN 'E';
3245        ELSE
3246           RETURN 'S'; -- Successfull validation
3247        END IF;
3248 
3249 EXCEPTION
3250 
3251    WHEN OTHERS THEN
3252 	/* Debug */
3253 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3254 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Othr_Prgm_Info';
3255 	  l_debug_str := 'Exception in Get_Othr_Prgm_Info.'||SQLERRM;
3256 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3257 	END IF;
3258 
3259       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
3260          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
3261       END IF;
3262       CLOSE c_ev_data;
3263       CLOSE c_nonimg_data;
3264       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
3265 
3266       RETURN 'U';
3267 
3268 END Get_Othr_Prgm_Info;
3269 
3270 /******************************************************************
3271    Created By         : Arkadi Tereshenkov
3272 
3273    Date Created By    : Oct 14, 2002
3274 
3275    Purpose            : Insert authorization codes of the student
3276                         (IGS_SV_PRGMS_INFO).
3277 
3278    Remarks            :
3279 
3280    Change History
3281    Who                  When            What
3282 ------------------------------------------------------------------------
3283 
3284 ******************************************************************/
3285 PROCEDURE Insert_Auth_Code (
3286    p_auth_drp_data_rec IN IGS_SV_PRGMS_INFO%ROWTYPE
3287 )
3288 IS
3289 
3290    l_api_name CONSTANT VARCHAR(30) := 'Insert_Auth_Code';
3291    l_count  NUMBER(10);
3292    l_action VARCHAR2(30);
3293    l_btch_id NUMBER(14);
3294    l_tag_code VARCHAR2(30);
3295    l_edu_status  VARCHAR2(10);
3296    l_cur_rec  IGS_SV_PRGMS_INFO%ROWTYPE;
3297 
3298 
3299    l_prgm_start_date            igs_Sv_prgms_info.prgm_start_date%TYPE;
3300    l_prgm_end_date              igs_Sv_prgms_info.prgm_end_date%TYPE;
3301 
3302    l_english_reqd               igs_pe_nonimg_form.english_reqd%TYPE;
3303    l_english_reqd_met           igs_pe_nonimg_form.english_reqd_met%TYPE;
3304    l_not_reqd_reason            igs_pe_nonimg_form.not_reqd_reason%TYPE;
3305    l_position_code              igs_pe_ev_form.position_code%TYPE;
3306    l_subject_field_code         igs_pe_ev_form.subject_field_code%TYPE;
3307    l_remarks			igs_pe_ev_form.subject_field_remarks%TYPE;
3308    l_education_level            igs_pe_nonimg_form.education_level%TYPE;
3309    l_primary_major              igs_pe_nonimg_form.primary_major%TYPE;
3310    l_secondary_major            igs_pe_nonimg_form.secondary_major%TYPE;
3311    l_educ_lvl_remarks           igs_pe_nonimg_form.educ_lvl_remarks%TYPE;
3312    l_minor                      igs_pe_nonimg_form.minor%TYPE;
3313    l_length_of_study            igs_pe_nonimg_form.length_of_study%TYPE;
3314 
3315 
3316 
3317 BEGIN
3318      /* Debug */
3319     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3320 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Auth_Code';
3321 	l_debug_str := 'Entering Insert_Edu_Info. person_id is '||p_auth_drp_data_rec.person_id|| ' and batch_id is '||p_auth_drp_data_rec.batch_id;
3322 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3323     END IF;
3324 
3325        l_remarks               := p_auth_drp_data_rec.remarks;
3326        l_prgm_start_date       := p_auth_drp_data_rec.prgm_start_date;
3327        l_prgm_end_date         := p_auth_drp_data_rec.prgm_end_date;
3328 
3329 
3330        /* Debug */
3331     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3332 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Auth_Code';
3333 	l_debug_str := 'After assigning values to local variables';
3334 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3335     END IF;
3336 
3337 	   IF p_auth_drp_data_rec.prgm_action_type = 'DB' THEN
3338 	      IF p_auth_drp_data_rec.auth_action_code = 'A' THEN
3339                   l_action := 'ADD';
3340 	      ELSIF p_auth_drp_data_rec.auth_action_code = 'U' THEN
3341                   l_action := 'EDIT';
3342 	      ELSE
3343 	          l_action := 'CANCEL';
3344 	      END IF;
3345 	      l_tag_code := 'SV_AUTH_DROP';
3346 	   END IF;
3347 
3348 		l_btch_id := chk_mut_exclusive(p_auth_drp_data_rec.batch_id,
3349 				       p_auth_drp_data_rec.person_id,
3350 				       l_action,
3351 				       l_tag_code);
3352 		Insert_Summary_Info(l_btch_id,
3353 				       p_auth_drp_data_rec.person_id,
3354 				       l_action,
3355 				       l_tag_code,
3356 				       'SEND',
3357 				       'IGS_SV_PRGMS_INFO',
3358 				       p_auth_drp_data_rec.sevis_auth_id);
3359 
3360 
3361           l_cur_rec.person_id := p_auth_drp_data_rec.person_id;
3362 	  l_edu_status  := Get_Othr_Prgm_Info (p_data_rec   => l_cur_rec);
3363 	  IF l_edu_status = 'S' THEN
3364 	       l_position_code       := l_cur_rec.position_code;
3365 	       l_subject_field_code  := l_cur_rec.subject_field_code ;
3366 	       l_education_level     := l_cur_rec.education_level;
3367 	       l_primary_major       := l_cur_rec.primary_major;
3368 	       l_secondary_major     := l_cur_rec.secondary_major;
3369 	       l_educ_lvl_remarks    := l_cur_rec.educ_lvl_remarks ;
3370 	       l_minor               := l_cur_rec.minor ;
3371 	       l_length_of_study     := l_cur_rec.length_of_study ;
3372 	       l_english_reqd        := l_cur_rec.english_reqd;
3373 	       l_english_reqd_met    := l_cur_rec.english_reqd_met ;
3374 	       l_not_reqd_reason     := l_cur_rec.not_reqd_reason;
3375 
3376 		  /* Debug */
3377 	    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3378 		l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Auth_Code';
3379 		l_debug_str := 'After assigning values received from get_othr_prgm_info to local variables';
3380 		fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3381 	    END IF;
3382 	  END IF;
3383 
3384 
3385 	   INSERT INTO igs_sv_prgms_info (
3386 		batch_id               ,
3387 		person_id              ,
3388 		prgm_action_type       ,
3389 		position_code          ,
3390 		subject_field_code     ,
3391 		education_level        ,
3392 		primary_major          ,
3393 		secondary_major        ,
3394 		educ_lvl_remarks       ,
3395 		minor                  ,
3396 		length_of_study        ,
3397 		prgm_start_date        ,
3398 		prgm_end_date          ,
3399 		english_reqd           ,
3400 		english_reqd_met       ,
3401 		not_reqd_reason        ,
3402 		authorization_reason   ,
3403 		remarks                ,
3404 		creation_date          ,
3405 		created_by             ,
3406 		last_updated_by        ,
3407 		last_update_date       ,
3408 		last_update_login      ,
3409 		auth_action_code       ,
3410 		sevis_auth_id	       ,
3411 		print_form
3412 	      ) VALUES
3413 	      ( l_btch_id                        ,
3414 	       p_auth_drp_data_rec.person_id              ,
3415 	       p_auth_drp_data_rec.prgm_action_type       ,
3416 	       l_position_code				  ,
3417 	       l_subject_field_code			  ,
3418 	       l_education_level			  ,
3419 	       l_primary_major				  ,
3420 	       l_secondary_major			  ,
3421 	       l_educ_lvl_remarks			  ,
3422 	       l_minor					  ,
3423 	       l_length_of_study			  ,
3424 	       p_auth_drp_data_rec.prgm_start_date        ,
3425 	       p_auth_drp_data_rec.prgm_end_date          ,
3426 	       l_english_reqd				  ,
3427 	       l_english_reqd_met			  ,
3428 	       l_not_reqd_reason			  ,
3429 	       p_auth_drp_data_rec.authorization_reason   ,
3430 	       p_auth_drp_data_rec.remarks                ,
3431 	       p_auth_drp_data_rec.creation_date          ,
3432 	       p_auth_drp_data_rec.created_by             ,
3433 	       p_auth_drp_data_rec.last_updated_by        ,
3434 	       p_auth_drp_data_rec.last_update_date       ,
3435 	       p_auth_drp_data_rec.last_update_login      ,
3436 	       p_auth_drp_data_rec.auth_action_code       ,
3437 	       p_auth_drp_data_rec.sevis_auth_id	  ,
3438 	       '0'
3439 	      );
3440       /* Debug */
3441     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3442 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Auth_Code';
3443 	l_debug_str := 'Record inserted';
3444 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3445     END IF;
3446 
3447 EXCEPTION
3448 
3449   WHEN OTHERS THEN
3450       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
3451          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
3452       END IF;
3453 
3454 /* Debug */
3455 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3456    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Auth_Code';
3457    l_debug_str := 'EXCEPTION in Insert_Auth_Code. '||SQLERRM;
3458    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3459 END IF;
3460       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
3461 
3462       RAISE;
3463 
3464 END Insert_Auth_Code;
3465 
3466 FUNCTION Validate_Prgm_Info (
3467    p_person_rec IN t_student_rec,
3468    p_data_rec  IN OUT NOCOPY  g_edu_rec_type,
3469    p_records    OUT NOCOPY     NUMBER ,      -- Number of program records found
3470    p_auth_drp_data_rec IN OUT NOCOPY g_edu_rec_type
3471 ) RETURN VARCHAR2
3472 IS
3473 
3474    l_api_name CONSTANT VARCHAR(30) := 'Validate_Prgm_Info';
3475 
3476    CURSOR c_data IS
3477      SELECT nonimg_stat_id,
3478             nonimg_form_id,
3479             to_char(action_date,'YYYY-MM-DD') action_date,
3480             action_type,
3481             to_char(prgm_start_date,'YYYY-MM-DD') prgm_start_date,
3482             to_char(prgm_end_date,'YYYY-MM-DD') prgm_end_date,
3483             remarks,
3484             termination_reason,
3485 	    print_flag, --prbhardw
3486 	    cancel_flag
3487        FROM igs_pe_nonimg_stat
3488       WHERE nonimg_form_id = p_person_rec.form_id
3489             AND nonimg_stat_id NOT IN
3490             ( SELECT NVL(form_status_id,0)
3491                 FROM igs_sv_prgms_info prg,
3492                      igs_sv_persons pr
3493                WHERE prg.person_id = pr.person_id
3494                      AND prg.batch_id = pr.batch_id
3495                      AND pr.record_status <> 'E'
3496                      AND prg.person_id = p_person_rec.person_id
3497                )
3498    ORDER BY action_date;
3499 
3500    CURSOR c_ev_data IS
3501      SELECT ev_form_stat_id    ,
3502             ev_form_id         ,
3503             to_char(action_date,'YYYY-MM-DD') action_date,
3504             action_type        ,
3505             to_char(prgm_start_date,'YYYY-MM-DD') prgm_start_date,
3506             to_char(prgm_end_date,'YYYY-MM-DD') prgm_end_date,
3507             remarks            ,
3508             termination_reason ,
3509             end_program_reason
3510        FROM igs_pe_ev_form_stat
3511       WHERE ev_form_id = p_person_rec.form_id
3512             AND ev_form_stat_id NOT IN
3513             ( SELECT NVL(form_status_id,0)
3514                 FROM igs_sv_prgms_info prg,
3515                      igs_sv_persons pr
3516                WHERE prg.person_id = pr.person_id
3517                      AND pr.record_status <> 'E'
3518                      AND prg.batch_id = pr.batch_id
3519                      AND prg.person_id = p_person_rec.person_id)
3520    ORDER BY action_date;
3521 
3522   CURSOR c_ev_category_data IS
3523      SELECT category_code,
3524             prgm_start_date,
3525             prgm_end_date
3526        FROM igs_pe_ev_form
3527       WHERE ev_form_id = p_person_rec.form_id;
3528 
3529   CURSOR c_drp(cp_sevis_auth_id igs_sv_prgms_info.sevis_auth_id%TYPE) IS
3530    SELECT prgms.authorization_reason,
3531           prgms.prgm_start_date,
3532           prgms.prgm_end_date,
3533           prgms.remarks,
3534 	  prgms.auth_action_code
3535      FROM igs_sv_prgms_info  prgms,
3536           igs_sv_persons pr
3537     WHERE prgms.person_id = pr.person_id
3538           AND pr.record_status <> 'E'
3539           AND prgms.person_id  = p_person_rec.person_id
3540           AND prgms.prgm_action_type  = 'DB'
3541 	  AND prgms.sevis_auth_id = cp_sevis_auth_id
3542 	  AND prgms.batch_id IN
3543 	      ( SELECT max(prs.batch_id)
3544 		 FROM igs_sv_prgms_info prs,
3545 		      igs_sv_persons pr
3546 	       WHERE prs.person_id = pr.person_id
3547 		     AND prs.batch_id = pr.batch_id
3548 		     AND pr.record_status <> 'E'
3549 		     AND prs.person_id = p_person_rec.person_id
3550 		     AND prs.prgm_action_type = 'DB'
3551 		     AND prs.sevis_auth_id = cp_sevis_auth_id
3552 	      );
3553 
3554   CURSOR c_res IS
3555    SELECT prgms.prgm_start_date,
3556           prgms.prgm_end_date,
3557           prgms.remarks
3558      FROM igs_sv_prgms_info   prgms,
3559           igs_sv_persons pr
3560     WHERE prgms.person_id = pr.person_id
3561           AND prgms.batch_id = pr.batch_id
3562           AND pr.record_status <> 'E'
3563           AND prgms.person_id         = p_person_rec.person_id
3564           AND prgms.prgm_action_type  = 'RF';
3565 
3566 
3567    CURSOR c_visa_type IS
3568     SELECT visa_type
3569     FROM IGS_PE_NONIMG_FORM
3570     WHERE nonimg_form_id = p_person_rec.form_id;
3571 
3572    CURSOR c_termination_reason(p_visa varchar2, p_term_reason igs_pe_nonimg_stat.termination_reason%TYPE) IS
3573       SELECT COUNT(1)
3574       FROM igs_pe_nonimg_stat
3575       WHERE nonimg_form_id = p_person_rec.form_id
3576             AND p_term_reason NOT IN
3577             ( SELECT lookup_code FROM igs_lookup_values
3578 	      WHERE lookup_type ='PE_SV_TERMINATE_REASON' AND
3579 		    enabled_flag ='Y' AND
3580 		    (tag= p_visa OR tag= 'FM')
3581 	     );
3582 
3583    --prbhardw
3584    CURSOR c_prev_end_date IS
3585      SELECT
3586           PRGM_END_DATE
3587      FROM
3588           IGS_PE_NONIMG_FORM_V
3589      WHERE
3590           nonimg_form_id = p_person_rec.form_id;
3591 
3592     CURSOR c_auth_details(cp_person_id igs_sv_prgms_info.person_id%TYPE)
3593      IS
3594        SELECT sevis_auth_id, sevis_authorization_code, start_dt, end_dt, comments, cancel_flag
3595        FROM igs_en_svs_auth
3596        WHERE person_id = cp_person_id;
3597 
3598     CURSOR c_prgm_dates(cp_person_id igs_sv_prgms_info.person_id%TYPE)
3599      IS
3600        SELECT prgm_start_date, prgm_end_date, visa_type
3601        FROM igs_pe_nonimg_form
3602        WHERE person_id = cp_person_id
3603              AND nonimg_form_id = p_person_rec.form_id;
3604 
3605 
3606 
3607    l_not_valid     BOOLEAN := FALSE;
3608    l_AUTH_CODE     igs_en_svs_auth.sevis_authorization_code%TYPE;
3609    l_AUTH_START_DT DATE;
3610    l_AUTH_END_DT   DATE;
3611    l_COMMENTS      VARCHAR2(500);
3612    l_visa_type VARCHAR2(5);
3613    l_termination_count NUMBER := 0;
3614    l_category_code  VARCHAR2(30);
3615    l_prgm_start_dt DATE;
3616    l_prgm_end_dt   DATE;
3617    lv_prgm_end_dt DATE;
3618    l_cancel_flag  VARCHAR2(1);    -- will go as fifth OUT parameter in ENRF_GET_SEVIS_AUTH_DETAILS
3619    l_auth_rec_count NUMBER(2) := 0;
3620    l_counter NUMBER(10):= 0;
3621    l_sevis_auth_id  igs_sv_prgms_info.sevis_auth_id%TYPE;
3622    c_drp_rec c_drp%ROWTYPE;
3623 BEGIN
3624 
3625 	/* Debug */
3626 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3627 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3628 	  l_debug_str := 'Entering Validate_Prgm_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
3629 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3630 	END IF;
3631 
3632    Put_Log_Msg(l_api_name||' starts ',0);
3633 
3634 --   p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
3635    IF p_person_rec.batch_type = 'I' THEN
3636 
3637      -- RF Resume Full Course  STUB - doesn't exist
3638      -- DB Dropped Below Full Course
3639      --  Check for drop below FC
3640       --prbhardw auth_drop_below
3641      OPEN c_prgm_dates(p_person_rec.person_id);
3642      FETCH c_prgm_dates INTO l_prgm_start_dt, l_prgm_end_dt, l_visa_type;
3643      CLOSE c_prgm_dates;
3644 
3645      Put_Log_Msg('Validating NI ',0);
3646 
3647      FOR c_auth_details_rec IN c_auth_details(p_person_rec.person_id) LOOP
3648 	  l_sevis_auth_id := c_auth_details_rec.sevis_auth_id;
3649 	  l_auth_code := c_auth_details_rec.sevis_authorization_code;
3650 	  l_auth_start_dt := c_auth_details_rec.start_dt;
3651 	  l_auth_end_dt := c_auth_details_rec.end_dt;
3652 	  l_comments := c_auth_details_rec.comments;
3653 	  l_cancel_flag := c_auth_details_rec.cancel_flag;
3654 
3655 	l_auth_rec_count := l_auth_rec_count +1;
3656 
3657 	p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type := '';
3658         p_auth_drp_data_rec(l_auth_rec_count).auth_action_code := '';
3659 
3660         p_auth_drp_data_rec(l_auth_rec_count).authorization_reason := l_auth_code; --c_auth_details_rec.sevis_authorization_code;
3661 	p_auth_drp_data_rec(l_auth_rec_count).prgm_start_date := to_char(l_auth_start_dt,'YYYY-MM-DD');
3662         p_auth_drp_data_rec(l_auth_rec_count).prgm_end_date := to_char(l_auth_end_dt,'YYYY-MM-DD');
3663         p_auth_drp_data_rec(l_auth_rec_count).remarks := l_comments;
3664 	p_auth_drp_data_rec(l_auth_rec_count).sevis_auth_id := l_sevis_auth_id;
3665 
3666 	Put_Log_Msg('validating Authorization. Values srt. SEVIS auth ID: '||l_sevis_auth_id,0);
3667 	/* Debug */
3668 	   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3669 	       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3670 	       l_debug_str := 'Comparing values for authorization code. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
3671 	       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3672 	   END IF;
3673 
3674 	  OPEN c_drp(l_sevis_auth_id);
3675 	  FETCH c_drp INTO c_drp_rec;
3676           IF c_drp%FOUND THEN
3677 	        Put_Log_Msg('validating Authorization. Record found in staging table',0);
3678 		  IF l_cancel_flag <> 'Y' THEN
3679 			  IF c_drp_rec.authorization_reason
3680 			     ||g_delimeter||c_drp_rec.prgm_start_date
3681 			     ||g_delimeter||c_drp_rec.prgm_end_date
3682 			     ||g_delimeter||c_drp_rec.remarks <>
3683 			     l_auth_code
3684 			     ||g_delimeter||to_char(l_auth_start_dt,'YYYY-MM-DD')
3685 			     ||g_delimeter||to_char(l_auth_end_dt,'YYYY-MM-DD')
3686 			     ||g_delimeter||l_comments THEN
3687 
3688 			     p_auth_drp_data_rec(l_auth_rec_count).auth_action_code := 'U';
3689 			     p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type :='DB';
3690 			   --ELSE  prbhardw EN change
3691 			    --  p_auth_drp_data_rec.auth_action_code := c_drp_rec.auth_action_code;
3692 			   END IF;
3693 		  ELSIF c_drp_rec.auth_action_code <> 'C' THEN
3694 		       p_auth_drp_data_rec(l_auth_rec_count).auth_action_code := 'C';
3695 		       p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type :='DB';
3696 		  END IF;
3697           ELSE
3698 		Put_Log_Msg('validating Authorization. Record going for first time',0);
3699 		p_auth_drp_data_rec(l_auth_rec_count).auth_action_code := 'A';
3700 	        p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type :='DB';
3701 	  END IF;
3702 	  CLOSE c_drp;
3703 
3704 	  /* Debug */
3705 	   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3706 	       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3707 	       l_debug_str := 'Authorization values set. action type is '||p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type ||' and action code is '||p_auth_drp_data_rec(l_auth_rec_count).auth_action_code;
3708 	       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3709 	   END IF;
3710 
3711 
3712         IF p_auth_drp_data_rec(l_auth_rec_count).auth_action_code IS NOT NULL AND p_auth_drp_data_rec(l_auth_rec_count).prgm_action_type IS NOT NULL THEN
3713 	        Put_Log_Msg('validations start for Authorization.',0);
3714 		 p_auth_drp_data_rec(l_auth_rec_count).batch_id  := p_person_rec.batch_id;
3715 		 p_auth_drp_data_rec(l_auth_rec_count).person_id := p_person_rec.person_id;
3716 		 p_auth_drp_data_rec(l_auth_rec_count).creation_date := sysdate;
3717 		 p_auth_drp_data_rec(l_auth_rec_count).created_by := g_update_by;
3718 		 p_auth_drp_data_rec(l_auth_rec_count).last_updated_by := g_update_by;
3719 		 p_auth_drp_data_rec(l_auth_rec_count).last_update_date  := sysdate;
3720 		 p_auth_drp_data_rec(l_auth_rec_count).last_update_login := g_update_login;
3721 
3722 		IF ADD_MONTHS(l_auth_end_dt,-12) > l_auth_start_dt AND l_visa_type = 'F-1' THEN
3723 		    FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_ATH_DRP_BLW_DR');
3724 		    FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number );
3725 		    FND_MESSAGE.SET_TOKEN('MON', '12');
3726 		    FND_MESSAGE.SET_TOKEN('VISA_TYPE', 'F-1');
3727 		    Put_Log_Msg(FND_MESSAGE.Get,1);
3728 		    l_not_valid := TRUE;
3729 		    /* Debug */
3730 		   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3731 		       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3732 		       l_debug_str := 'Validation failure for Authorization. Error: Invalid authorization drop below for F-1 visa';
3733 		       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3734 		   END IF;
3735 		ELSIF ADD_MONTHS(l_auth_end_dt,-5) > l_auth_start_dt AND l_visa_type = 'M-1' THEN
3736 		    FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_AUTH_DRP_BLW');
3737 		    FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number );
3738 		    FND_MESSAGE.SET_TOKEN('MON', '5');
3739 		    FND_MESSAGE.SET_TOKEN('VISA_TYPE', 'M-1');
3740 		    Put_Log_Msg(FND_MESSAGE.Get,1);
3741 		    l_not_valid := TRUE;
3742 		    /* Debug */
3743 		   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3744 		       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3745 		       l_debug_str := 'Validation failure for Authorization. Error: Invalid authorization drop below for M-1 visa';
3746 		       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3747 		   END IF;
3748 		END IF;
3749 
3750 
3751 		IF p_auth_drp_data_rec(l_auth_rec_count).auth_action_code = 'A' THEN
3752 		       Put_Log_Msg('validating Authorization in add mode',0);
3753 			    IF ((l_auth_start_dt <= sysdate) OR (l_auth_start_dt <= l_prgm_start_dt)) THEN
3754 				 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_AUTH_ST_DT'); --  Invalid authorization start date
3755 				 FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number );
3756 				 Put_Log_Msg(FND_MESSAGE.Get,1);
3757 				 l_not_valid := TRUE;
3758 				 /* Debug */
3759 				   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3760 				       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3761 				       l_debug_str := 'Validation failure for Authorization. Error: Invalid authorization start date';
3762 				       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3763 				   END IF;
3764 			    END IF;
3765 			    IF ((l_auth_end_dt <= sysdate) OR (l_auth_end_dt >= l_prgm_end_dt)) THEN
3766 				 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_AUTH_END_DT'); --  Invalid authorization end date
3767 				 FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number );
3768 				 Put_Log_Msg(FND_MESSAGE.Get,1);
3769 				 l_not_valid := TRUE;
3770 				 /* Debug */
3771 				   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3772 				       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3773 				       l_debug_str := 'Validation failure for Authorization. Error: Invalid authorization end date';
3774 				       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3775 				   END IF;
3776 			    END IF;
3777 
3778 		END IF;
3779 	END IF;
3780 	  IF l_not_valid THEN
3781 	      Put_Log_Msg('validating Authorization. l_not_valid is true',0);
3782 	      Put_Log_Msg(l_api_name||' Validation error, return E ',1);
3783 	      /* Debug */
3784 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3785 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3786 		  l_debug_str := 'Returning E from Validate_Prgm_Info. Authorization code failed to validate.';
3787 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3788 		END IF;
3789 
3790 	      RETURN 'E';
3791 
3792 	END IF;
3793      END LOOP;
3794   Put_Log_Msg('validating Authorization. Number of records found '||l_auth_rec_count,0);
3795 
3796 --prbhardw auth_drop_below
3797     /*
3798     IF p_data_rec(1).prgm_action_type = '' AND IGS_EN_SEVIS.ENRF_GET_RET_FT_NOTE_DETAILS(
3799            p_person_id     => p_person_rec.person_id,
3800            P_NOTE_TYPE     => l_auth_code,
3801            P_NOTE_START_DT => l_auth_start_dt,
3802            P_NOTE_END_DT   => l_auth_end_dt,
3803            P_NOTE_TEXT     => l_comments )
3804 
3805       THEN
3806 
3807         p_data_rec(1).prgm_action_type :='RF';
3808         p_data_rec(1).prgm_start_date := to_char(l_auth_start_dt,'YYYY-MM-DD');
3809         p_data_rec(1).prgm_end_date := to_char(l_auth_end_dt,'YYYY-MM-DD');
3810         p_data_rec(1).remarks := l_comments;
3811 
3812 
3813         FOR c_drp_rec IN c_res LOOP
3814 
3815 
3816           IF c_drp_rec.prgm_start_date
3817              ||g_delimeter||c_drp_rec.prgm_end_date
3818              ||g_delimeter||c_drp_rec.remarks =
3819              to_char(l_auth_start_dt,'YYYY-MM-DD')
3820              ||g_delimeter||to_char(l_auth_end_dt,'YYYY-MM-DD')
3821              ||g_delimeter||l_comments THEN
3822 
3823              -- already reported.
3824              p_data_rec(1).prgm_action_type :='';
3825              p_data_rec(1).authorization_reason := '';
3826              p_data_rec(1).prgm_start_date := '';
3827              p_data_rec(1).prgm_end_date := '';
3828              p_data_rec(1).remarks := '';
3829              p_data_rec(1).auth_action_code := '';
3830 
3831            END IF;
3832 
3833 
3834         END LOOP;
3835 
3836      END IF;
3837       */
3838 
3839        FOR c_data_rec IN c_data LOOP
3840 	 l_counter := l_counter +1;
3841          p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
3842          p_data_rec(l_counter).person_id := p_person_rec.person_id;
3843          --p_data_rec.print_form := p_person_rec.print_form; prbhardw
3844          p_data_rec(l_counter).creation_date := sysdate;
3845          p_data_rec(l_counter).created_by := g_update_by;
3846          p_data_rec(l_counter).last_updated_by := g_update_by;
3847          p_data_rec(l_counter).last_update_date  := sysdate;
3848          p_data_rec(l_counter).last_update_login := g_update_login;
3849 
3850          p_data_rec(l_counter).prgm_action_type        := c_data_rec.action_type;
3851          p_data_rec(l_counter).print_form              := c_data_rec.print_flag; -- prbhardw
3852          p_data_rec(l_counter).form_status_id          := c_data_rec.nonimg_stat_id;
3853          p_data_rec(l_counter).prgm_start_date         := c_data_rec.prgm_start_date;
3854          p_data_rec(l_counter).prgm_end_date           := c_data_rec.prgm_end_date;
3855          p_data_rec(l_counter).effective_date          := c_data_rec.action_date  ;
3856          p_data_rec(l_counter).termination_reason      := c_data_rec.termination_reason  ;
3857          p_data_rec(l_counter).remarks                 := c_data_rec.remarks  ;
3858 	 IF c_data_rec.cancel_flag = 'Y' THEN    -- prbhardw
3859 	       p_data_rec(l_counter).prgm_action_type   := 'CE';
3860 	 END IF;
3861 
3862 
3863 	/* Debug */
3864 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3865 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3866 	  l_debug_str := 'Exiting from for loop in Validate_Prgm_Info.';
3867 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3868 	END IF;
3869 
3870       --   EXIT;  -- one  record is enough
3871 	-- Validate all the data
3872 	     -- Nonimg action types:
3873 	     -- C  Complete Program
3874 	     -- T  Terminate Program
3875 	     -- D  Defer program
3876 	     -- E  Extend program
3877 
3878 	     OPEN c_visa_type;
3879 	     FETCH c_visa_type INTO l_visa_type;
3880 	     CLOSE c_visa_type;
3881 
3882 	     IF p_data_rec(l_counter).prgm_action_type  = 'C' THEN
3883 	       -- No validation at this time
3884 
3885 	       NULL;
3886 
3887 	     ELSIF p_data_rec(l_counter).prgm_action_type  = 'D' AND
3888 		   (  p_data_rec(l_counter).prgm_start_date IS NULL
3889 		      OR p_data_rec(l_counter).prgm_end_date IS NULL)  THEN
3890 
3891 		FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_CMP_PRG_RQD_FLD_ERR'); --  Completion block error
3892 		FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
3893 
3894 		Put_Log_Msg(FND_MESSAGE.Get,1);
3895 		l_not_valid := TRUE;
3896 
3897 	     ELSIF p_data_rec(l_counter).prgm_action_type  = 'T'  AND  p_data_rec(l_counter).termination_reason IS NULL  THEN
3898 
3899 		FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_TRM_PRG_RQD_FLD_ERR'); -- Termination block error
3900 		FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
3901 
3902 		Put_Log_Msg(FND_MESSAGE.Get,1);
3903 		l_not_valid := TRUE;
3904 	     ELSIF p_data_rec(l_counter).prgm_action_type  = 'T'  AND l_visa_type= 'M-1' THEN
3905 	       OPEN c_termination_reason('M', p_data_rec(l_counter).termination_reason);
3906 	       FETCH c_termination_reason INTO l_termination_count;
3907 	       CLOSE c_termination_reason;
3908 	       IF l_termination_count > 0 THEN
3909 		 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_TERM_REASON');
3910 		 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
3911 		 Put_Log_Msg(FND_MESSAGE.Get,1);
3912 		 l_not_valid := TRUE;
3913 	       END IF;
3914 	     ELSIF p_data_rec(l_counter).prgm_action_type  = 'T'  AND l_visa_type= 'F-1' THEN
3915 		OPEN c_termination_reason('F', p_data_rec(l_counter).termination_reason);
3916 	       FETCH c_termination_reason INTO l_termination_count;
3917 	       CLOSE c_termination_reason;
3918 	       IF l_termination_count > 0 THEN
3919 		 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_TERM_REASON');
3920 		 FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
3921 		 Put_Log_Msg(FND_MESSAGE.Get,1);
3922 		 l_not_valid := TRUE;
3923 	       END IF;
3924 
3925 	     ELSIF p_data_rec(l_counter).prgm_action_type  = 'E'  AND
3926 		   (  p_data_rec(l_counter).remarks IS NULL
3927 		      OR p_data_rec(l_counter).prgm_end_date IS NULL)  THEN
3928 
3929 		FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EXT_PRG_RQD_FLD_ERR'); -- Extention block error
3930 		FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
3931 
3932 		Put_Log_Msg(FND_MESSAGE.Get,1);
3933 		l_not_valid := TRUE;
3934 
3935 	     END IF;
3936 
3937 	     --prbhardw
3938 	     IF p_data_rec(l_counter).prgm_action_type  = 'E'  THEN
3939 		  OPEN c_prev_end_date;
3940 		  FETCH c_prev_end_date INTO lv_prgm_end_dt;
3941 		  CLOSE c_prev_end_date;
3942 		  IF to_date(p_data_rec(l_counter).prgm_end_date,'YYYY-MM-DD') > ADD_MONTHS(lv_prgm_end_dt,12)  THEN
3943 			FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_EXT_PRG_DRN'); -- Extention block error
3944 			Put_Log_Msg(FND_MESSAGE.Get,1);
3945 			l_not_valid := TRUE;
3946 		  END IF;
3947 
3948 	     END IF;
3949 	     IF l_not_valid THEN
3950 	        Put_Log_Msg(l_api_name||' Validation error, return E ',1);
3951 	      /* Debug */
3952 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3953 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3954 		  l_debug_str := 'Returning E from Validate_Prgm_Info.';
3955 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3956 		END IF;
3957 
3958 	        RETURN 'E';
3959 
3960 	     END IF;
3961        END LOOP;
3962 
3963 
3964 
3965    ELSE  -- BATCH TYPE IS 'E'
3966 
3967      FOR c_data_rec IN c_ev_data LOOP
3968        l_counter := l_counter +1;
3969        p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
3970        p_data_rec(l_counter).person_id := p_person_rec.person_id;
3971        p_data_rec(l_counter).print_form := p_person_rec.print_form;
3972        p_data_rec(l_counter).creation_date := sysdate;
3973        p_data_rec(l_counter).created_by := g_update_by;
3974        p_data_rec(l_counter).last_updated_by := g_update_by;
3975        p_data_rec(l_counter).last_update_date  := sysdate;
3976        p_data_rec(l_counter).last_update_login := g_update_login;
3977 
3978        p_data_rec(l_counter).prgm_action_type        := c_data_rec.action_type;
3979        p_data_rec(l_counter).form_status_id          := c_data_rec.ev_form_stat_id;
3980        p_data_rec(l_counter).prgm_start_date         := c_data_rec.prgm_start_date  ;
3981        p_data_rec(l_counter).prgm_end_date           := c_data_rec.prgm_end_date  ;
3982        p_data_rec(l_counter).effective_date          := c_data_rec.action_date  ;
3983        p_data_rec(l_counter).termination_reason      := c_data_rec.termination_reason  ;
3984        p_data_rec(l_counter).end_prgm_reason         := c_data_rec.end_program_reason  ;
3985        p_data_rec(l_counter).remarks                 := c_data_rec.remarks  ;
3986 	/* Debug */
3987 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
3988 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
3989 	  l_debug_str := 'Exiting from for loop in Validate_Prgm_Info.';
3990 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
3991 	END IF;
3992 
3993    --    EXIT;  -- one  record is enough
3994 	 -- Validate EV date
3995      -- AP Amend Program
3996      -- EE Exchange Visitor Extension
3997      -- EF Extend Failure
3998      -- CF Conclude Failure
3999      -- AF Approve Failure
4000      -- OI Other Infraction
4001      -- TR Terminate Exchange Visitor
4002      -- ED End Program
4003 
4004      -- EM Exchange Visitor Matriculation ???
4005      -- US Update Subject Field
4006      -- RF Reprint Form
4007        OPEN c_ev_category_data;
4008        FETCH c_ev_category_data INTO
4009        l_category_code,
4010        l_prgm_start_dt,
4011        l_prgm_end_dt;
4012        CLOSE c_ev_category_data;
4013 
4014        IF l_category_code = '2A' AND l_prgm_end_dt > ADD_MONTHS(l_prgm_start_dt,24)  THEN
4015 	       FND_MESSAGE.SET_NAME('IGS','IGS_SV_INV_PROG_DURN');
4016 	       FND_MESSAGE.SET_TOKEN('PROGDURATION','not exceed 24 months');
4017 	       Put_Log_Msg(FND_MESSAGE.Get,1);
4018 	       l_not_valid := TRUE;
4019        END IF;
4020 
4021        IF p_data_rec(l_counter).prgm_action_type = 'EM' AND p_data_rec(l_counter).prgm_end_date < trunc(SYSDATE) THEN
4022           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INV_PRGM_END_DT');
4023           FND_MESSAGE.SET_TOKEN('PERSON_NUM', p_person_rec.person_number );
4024           Put_Log_Msg(FND_MESSAGE.Get,1);
4025           l_not_valid := TRUE;
4026        END IF;
4027 
4028        IF p_data_rec(l_counter).prgm_action_type  = 'AP' AND -- AP Amend Program
4029            (  p_data_rec(l_counter).prgm_start_date IS NULL
4030               OR p_data_rec(l_counter).prgm_end_date IS NULL)  THEN
4031 
4032           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_PRG_RQD_FLD_ERR');
4033           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4034 
4035           Put_Log_Msg(FND_MESSAGE.Get,1);
4036           l_not_valid := TRUE;
4037 
4038         ELSIF p_data_rec(l_counter).prgm_action_type  IN ('EE','EF')  AND -- EE Exchange Visitor Extension,  EF Extend Failure
4039            (  p_data_rec(l_counter).prgm_end_date IS NULL)  THEN
4040 
4041           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_PRG_RQD_FLD_ERR');
4042           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4043 
4044           Put_Log_Msg(FND_MESSAGE.Get,1);
4045           l_not_valid := TRUE;
4046 
4047        ELSIF p_data_rec(l_counter).prgm_action_type  IN ('SP')  AND
4048              p_data_rec(l_counter).remarks IS NULL THEN
4049        -- AF Approve Failure
4050        -- OI Other Infraction
4051 
4052           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EV_PRG_RQD_FLD_ERR'); --  Amend program block error
4053           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4054 
4055           Put_Log_Msg(FND_MESSAGE.Get,1);
4056           l_not_valid := TRUE;
4057 
4058 
4059         ELSIF p_data_rec(l_counter).prgm_action_type  = 'TR'  AND       -- TR Terminate Exchange Visitor
4060              ( p_data_rec(l_counter).termination_reason IS NULL
4061                OR p_data_rec(l_counter).effective_date IS NULL ) THEN
4062 
4063           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_TRM_PRG_RQD_FLD_ERR'); -- Termination block error
4064           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4065 
4066           Put_Log_Msg(FND_MESSAGE.Get,1);
4067           l_not_valid := TRUE;
4068 
4069         ELSIF p_data_rec(l_counter).prgm_action_type  = 'ED'  AND       -- ED End Program
4070              ( p_data_rec(l_counter).end_prgm_reason IS NULL
4071                OR p_data_rec(l_counter).effective_date IS NULL ) THEN
4072 
4073           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_TRM_PRG_RQD_FLD_ERR'); -- Termination block error
4074           FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4075 
4076           Put_Log_Msg(FND_MESSAGE.Get,1);
4077           l_not_valid := TRUE;
4078 
4079 
4080         END IF;
4081 
4082 	IF p_data_rec(l_counter).prgm_action_type  = 'TR'  AND p_data_rec(l_counter).termination_reason = 'OTHER'
4083 	    AND p_data_rec(l_counter).remarks IS NULL  THEN
4084 		FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_TRM_REM_RQD');
4085 		FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4086 		Put_Log_Msg(FND_MESSAGE.Get,1);
4087 		l_not_valid := TRUE;
4088 	END IF;
4089 
4090 	IF l_not_valid THEN
4091 	      Put_Log_Msg(l_api_name||' Validation error, return E ',1);
4092 	      /* Debug */
4093 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4094 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
4095 		  l_debug_str := 'Returning E from Validate_Prgm_Info.';
4096 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4097 		END IF;
4098 
4099 	      RETURN 'E';
4100 
4101 	END IF;
4102 
4103      END LOOP;
4104 
4105    END IF;
4106    p_records := l_counter;
4107    IF l_counter = 0 AND l_auth_rec_count = 0 THEN
4108       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
4109       /* Debug */
4110 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4111 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
4112 	  l_debug_str := 'Returning N from validate_empl_Info.';
4113 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4114 	END IF;
4115       RETURN 'N';
4116    END IF;
4117 
4118 
4119    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
4120    /* Debug */
4121 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4122 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
4123 	  l_debug_str := 'Returning S from Validate_Prgm_Info.';
4124 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4125 	END IF;
4126 
4127    RETURN 'S'; -- Successfull validation
4128 
4129 EXCEPTION
4130 
4131    WHEN OTHERS THEN
4132    /* Debug */
4133 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4134 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Prgm_Info';
4135 	  l_debug_str := 'Exception in Validate_Prgm_Info.'||SQLERRM;
4136 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4137 	END IF;
4138 
4139       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
4140          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
4141       END IF;
4142 
4143       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
4144 
4145       RETURN 'U';
4146 
4147 END Validate_Prgm_Info;
4148 
4149 /******************************************************************
4150    Created By         : Arkadi Tereshenkov
4151 
4152    Date Created By    : Oct 14, 2002
4153 
4154    Purpose            : Validate information pertaining to the Finance
4155                         information of the student.
4156                         (IGS_SV_FINANCE_INFO).
4157 
4158    Remarks            : Return result:
4159                            'S' - record found and validated
4160                            'E' - validation error
4161                            'U' - Unexpected error
4162                            'N' - data not found
4163 
4164    Change History
4165    Who                  When            What
4166 ------------------------------------------------------------------------
4167 
4168 ******************************************************************/
4169 FUNCTION Validate_Finance_Info (
4170    p_person_rec IN t_student_rec,
4171    p_data_rec  IN OUT NOCOPY  IGS_SV_FINANCE_INFO%ROWTYPE    -- Data record
4172 ) RETURN VARCHAR2
4173 IS
4174 
4175    l_api_name CONSTANT VARCHAR(30) := 'Validate_Finance_Info';
4176 
4177    CURSOR c_nimg_data IS
4178      SELECT acad_term_length,
4179             tuition_amt,
4180             living_exp_amt,
4181             depdnt_exp_amt  dependent_exp_amt,
4182             other_exp_amt,
4183             other_exp_desc,
4184             personal_funds_amt,
4185             school_funds_amt,
4186             school_funds_desc,
4187             other_funds_amt,
4188             other_funds_desc,
4189             empl_funds_amt,
4190             remarks
4191        FROM igs_pe_nonimg_form     penf
4192       WHERE penf.person_id      = p_person_rec.person_id
4193         AND penf.nonimg_form_id = p_person_rec.form_id;
4194 
4195    CURSOR c_ev_data IS
4196      SELECT prgm_sponsor_amt program_sponsor,
4197             govt_org1_amt,
4198             govt_org2_amt,
4199             govt_org1_code,
4200             govt_org2_code,
4201             intl_org1_amt,
4202             intl_org2_amt,
4203             intl_org1_code,
4204             intl_org2_code,
4205             ev_govt_amt,
4206             bi_natnl_com_amt,
4207             other_govt_amt,
4208             personal_funds_amt,
4209             remarks,
4210             NVL(NVL(govt_org2_amt,govt_org1_amt),'0') recvd_us_gvt_funds_ind,
4211 	    govt_org1_othr_name    ,
4212 	    govt_org2_othr_name    ,
4213             intl_org1_othr_name    ,
4214             intl_org2_othr_name    ,
4215 	    other_govt_name
4216        FROM igs_pe_ev_form     evf
4217       WHERE evf.person_id  = p_person_rec.person_id
4218         AND evf.ev_form_id = p_person_rec.form_id;
4219 
4220    l_not_valid               BOOLEAN := FALSE;
4221    l_acad_term_length        igs_pe_nonimg_form.acad_term_length%TYPE;
4222    l_tuition                 igs_pe_nonimg_form.tuition_amt%TYPE;
4223    l_living_exp              igs_pe_nonimg_form.living_exp_amt%TYPE;
4224    l_dependent_exp           igs_pe_nonimg_form.depdnt_exp_amt%TYPE;
4225    l_other_exp               igs_pe_nonimg_form.other_exp_amt%TYPE;
4226    l_other_exp_desc          igs_pe_nonimg_form.other_exp_desc%TYPE;
4227    l_personal_funds          igs_pe_nonimg_form.personal_funds_amt%TYPE;
4228    l_school_funds            igs_pe_nonimg_form.school_funds_amt%TYPE;
4229    l_school_funds_desc       igs_pe_nonimg_form.school_funds_desc%TYPE;
4230    l_other_funds             igs_pe_nonimg_form.other_funds_amt%TYPE;
4231    l_other_funds_desc        igs_pe_nonimg_form.other_funds_desc%TYPE;
4232    l_empl_funds              igs_pe_nonimg_form.empl_funds_amt%TYPE;
4233    l_remarks                 igs_pe_nonimg_form.remarks%TYPE;
4234    l_program_sponsor         igs_pe_ev_form.prgm_sponsor_amt%TYPE;
4235    l_govt_org1               igs_pe_ev_form.govt_org1_amt%TYPE;
4236    l_govt_org2               igs_pe_ev_form.govt_org2_amt%TYPE;
4237    l_govt_org1_code          igs_pe_ev_form.govt_org1_code%TYPE;
4238    l_govt_org2_code          igs_pe_ev_form.govt_org2_code%TYPE;
4239    l_intl_org1               igs_pe_ev_form.intl_org1_amt%TYPE;
4240    l_intl_org2               igs_pe_ev_form.intl_org2_amt%TYPE;
4241    l_intl_org1_code          igs_pe_ev_form.intl_org1_code%TYPE;
4242    l_intl_org2_code          igs_pe_ev_form.intl_org2_code%TYPE;
4243    l_ev_govt                 igs_pe_ev_form.ev_govt_amt%TYPE;
4244    l_bi_natnl_com            igs_pe_ev_form.bi_natnl_com_amt%TYPE;
4245    l_other_org               igs_pe_ev_form.other_govt_amt%TYPE;
4246    l_recvd_us_gvt_fund_amt   VARCHAR2(30);
4247    l_govt_org1_othr_name     igs_pe_ev_form.govt_org1_othr_name%TYPE;
4248    l_govt_org2_othr_name     igs_pe_ev_form.govt_org2_othr_name%TYPE;
4249    l_intl_org1_othr_name     igs_pe_ev_form.intl_org1_othr_name%TYPE;
4250    l_intl_org2_othr_name     igs_pe_ev_form.intl_org2_othr_name%TYPE;
4251    l_other_govt_name	     igs_pe_ev_form.other_govt_name%TYPE;
4252 
4253 
4254 BEGIN
4255 
4256    Put_Log_Msg(l_api_name||' starts ',0);
4257    /* Debug */
4258 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4259 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Finance_Info';
4260 	  l_debug_str := 'Entering Validate_Finance_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
4261 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4262 	END IF;
4263 
4264    p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
4265 
4266 --
4267 -- Process the Foreign Student information
4268 --
4269    IF (p_person_rec.batch_type = 'I') THEN
4270 
4271       OPEN c_nimg_data;
4272       FETCH c_nimg_data
4273        INTO l_acad_term_length,
4274             l_tuition,
4275             l_living_exp,
4276             l_dependent_exp,
4277             l_other_exp,
4278             l_other_exp_desc,
4279             l_personal_funds,
4280             l_school_funds,
4281             l_school_funds_desc,
4282             l_other_funds,
4283             l_other_funds_desc,
4284             l_empl_funds,
4285             l_remarks;
4286 
4287       IF (c_nimg_data%FOUND) THEN
4288 
4289          p_data_rec.batch_id          := p_person_rec.batch_id;
4290          p_data_rec.person_id         := p_person_rec.person_id;
4291          p_data_rec.print_form        := p_person_rec.print_form;
4292          p_data_rec.creation_date     := sysdate;
4293          p_data_rec.created_by        := g_update_by;
4294          p_data_rec.last_updated_by   := g_update_by;
4295          p_data_rec.last_update_date  := sysdate;
4296          p_data_rec.last_update_login := g_update_login;
4297          p_data_rec.acad_term_length  := ltrim(to_char(to_number(l_acad_term_length),'00'));
4298          p_data_rec.tuition           := l_tuition;
4299          p_data_rec.living_exp        := l_living_exp;
4300          p_data_rec.dependent_exp     := l_dependent_exp;
4301          p_data_rec.other_exp         := l_other_exp;
4302          p_data_rec.other_exp_desc    := l_other_exp_desc;
4303          p_data_rec.personal_funds    := l_personal_funds;
4304          p_data_rec.school_funds      := l_school_funds;
4305          p_data_rec.school_funds_desc := l_school_funds_desc;
4306          p_data_rec.other_funds       := l_other_funds;
4307          p_data_rec.other_funds_desc  := l_other_funds_desc;
4308          p_data_rec.empl_funds        := l_empl_funds;
4309          p_data_rec.remarks           := l_remarks;
4310 
4311       END IF;
4312 
4313       CLOSE c_nimg_data;
4314 
4315    ELSE
4316 
4317 --
4318 -- Process the Exchange Visitor Data
4319 --
4320       OPEN c_ev_data;
4321       FETCH c_ev_data
4322        INTO l_program_sponsor,
4323             l_govt_org1,
4324             l_govt_org2,
4325             l_govt_org1_code,
4326             l_govt_org2_code,
4327             l_intl_org1,
4328             l_intl_org2,
4329             l_intl_org1_code,
4330             l_intl_org2_code,
4331             l_ev_govt,
4332             l_bi_natnl_com,
4333             l_other_org,
4334             l_personal_funds,
4335             l_remarks,
4336             l_recvd_us_gvt_fund_amt,
4337 	    l_govt_org1_othr_name,
4338 	    l_govt_org2_othr_name,
4339 	    l_intl_org1_othr_name,
4340 	    l_intl_org2_othr_name,
4341 	    l_other_govt_name;
4342 
4343       IF (c_ev_data%FOUND) THEN
4344 
4345          IF l_recvd_us_gvt_fund_amt <> '0' THEN
4346            l_recvd_us_gvt_fund_amt := '1';
4347          END IF;
4348 
4349          p_data_rec.batch_id          := p_person_rec.batch_id;
4350          p_data_rec.person_id         := p_person_rec.person_id;
4351          p_data_rec.print_form        := p_person_rec.print_form;
4352          p_data_rec.creation_date     := sysdate;
4353          p_data_rec.created_by        := g_update_by;
4354          p_data_rec.last_updated_by   := g_update_by;
4355          p_data_rec.last_update_login := g_update_login;
4356          p_data_rec.last_update_date  := sysdate;
4357          p_data_rec.program_sponsor   := l_program_sponsor;
4358          p_data_rec.govt_org1         := l_govt_org1;
4359          p_data_rec.govt_org2         := l_govt_org2;
4360          p_data_rec.govt_org1_code    := l_govt_org1_code;
4361          p_data_rec.govt_org2_code    := l_govt_org2_code;
4362          p_data_rec.intl_org1         := l_intl_org1;
4363          p_data_rec.intl_org2         := l_intl_org2;
4364          p_data_rec.intl_org1_code    := l_intl_org1_code;
4365          p_data_rec.intl_org2_code    := l_intl_org2_code;
4366          p_data_rec.ev_govt           := l_ev_govt;
4367          p_data_rec.bi_natnl_com      := l_bi_natnl_com;
4368          p_data_rec.other_org         := l_other_org;
4369          p_data_rec.personal_funds    := l_personal_funds;
4370          p_data_rec.remarks           := l_remarks;
4371          p_data_rec.recvd_us_gvt_funds:= l_recvd_us_gvt_fund_amt;
4372 	 p_data_rec.govt_org1_othr_name	:= l_govt_org1_othr_name;
4373 	 p_data_rec.govt_org2_othr_name	:= l_govt_org2_othr_name;
4374 	 p_data_rec.intl_org1_othr_name	:= l_intl_org1_othr_name;
4375 	 p_data_rec.intl_org2_othr_name	:= l_intl_org2_othr_name;
4376 	 p_data_rec.other_govt_name	:= l_other_govt_name	;
4377 
4378       END IF;
4379 
4380       CLOSE c_ev_data;
4381 
4382    END IF;
4383 
4384    IF p_data_rec.batch_id IS NULL THEN
4385 
4386       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
4387       /* Debug */
4388 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4389 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Finance_Info';
4390 	  l_debug_str := 'Returning N from Validate_Finance_Info.';
4391 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4392 	END IF;
4393 
4394       RETURN 'N';
4395 
4396    ELSE
4397 
4398      -- Validate all the data required for either type of request.
4399      IF (p_data_rec.print_form IS NULL AND p_person_rec.batch_type = 'E') THEN
4400         l_not_valid := TRUE;
4401         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_FIN_REQ_FLD_ERR'); -- Required Fields for Exchange Visitor students
4402         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
4403         Put_Log_Msg(FND_MESSAGE.Get,1);
4404      END IF;
4405 
4406 --
4407 -- Validate data specific for Foreign Students
4408 --
4409      IF (p_person_rec.batch_type = 'I') THEN
4410 
4411         IF (p_data_rec.acad_term_length IS NULL     OR
4412             p_data_rec.tuition          IS NULL     OR
4413             p_data_rec.living_exp       IS NULL     OR
4414             p_data_rec.personal_funds   IS NULL) THEN
4415            l_not_valid := TRUE;
4416            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_FIN_REQ_NIMG_ERR'); -- Required Fields for Exchange Visitor students
4417            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
4418            Put_Log_Msg(FND_MESSAGE.Get,1);
4419         END IF;
4420 
4421         IF ((p_data_rec.other_exp         IS NOT NULL   AND
4422              p_data_rec.other_exp_desc    IS NULL)      OR
4423             (p_data_rec.school_funds      IS NOT NULL   AND
4424              p_data_rec.school_funds_desc IS NULL)      OR
4425             (p_data_rec.other_funds       IS NOT NULL   AND
4426              p_data_rec.other_funds_desc  IS NULL)) THEN
4427            l_not_valid := TRUE;
4428            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_FIN_REQ_NIMG_DESC_ERR'); -- Required Fields for Exchange Visitor students
4429            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
4430            Put_Log_Msg(FND_MESSAGE.Get,1);
4431         END IF;
4432 
4433      ELSE
4434 
4435 --
4436 -- Validate data specific for Exchange Visitor Students
4437 --
4438         IF ((p_data_rec.govt_org1         IS NOT NULL   AND
4439              p_data_rec.govt_org1_code    IS NULL)      OR
4440             (p_data_rec.govt_org2         IS NOT NULL   AND
4441              p_data_rec.govt_org2_code    IS NULL)      OR
4442             (p_data_rec.intl_org1         IS NOT NULL   AND
4443              p_data_rec.intl_org1_code    IS NULL)      OR
4444             (p_data_rec.intl_org2         IS NOT NULL   AND
4445              p_data_rec.intl_org2_code    IS NULL))     THEN
4446            l_not_valid := TRUE;
4447            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_FIN_REQ_EV_ERR'); -- Required Fields for Exchange Visitor students
4448            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
4449            Put_Log_Msg(FND_MESSAGE.Get,1);
4450         END IF;
4451 
4452 
4453 	IF ((p_data_rec.govt_org1_code     = 'OTHER' AND
4454              p_data_rec.govt_org1_othr_name  IS NULL)      OR
4455             (p_data_rec.govt_org2_code     = 'OTHER' AND
4456              p_data_rec.govt_org2_othr_name  IS NULL)      OR
4457             (p_data_rec.intl_org1_code     = 'OTHER' AND
4458              p_data_rec.intl_org1_othr_name  IS NULL)      OR
4459             (p_data_rec.intl_org2_code     = 'OTHER' AND
4460              p_data_rec.intl_org2_othr_name IS NULL)      OR
4461 	     p_data_rec.other_govt_name IS NULL AND
4462 	     p_data_rec.other_org IS NOT NULL)     THEN
4463            l_not_valid := TRUE;
4464            FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_OTHR_ORG');
4465            FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
4466            Put_Log_Msg(FND_MESSAGE.Get,1);
4467         END IF;
4468 
4469      END IF;
4470 
4471      IF (l_not_valid) THEN
4472 
4473         Put_Log_Msg(l_api_name||' Validation error, return E ',1);
4474 	/* Debug */
4475 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4476 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Finance_Info';
4477 	  l_debug_str := 'Returning E from Validate_Finance_Info.';
4478 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4479 	END IF;
4480 
4481 
4482         RETURN 'E';
4483 
4484      END IF;
4485 
4486    END IF;
4487 
4488    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
4489    /* Debug */
4490 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4491 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Finance_Info';
4492 	  l_debug_str := 'Returning S from Validate_Finance_Info.';
4493 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4494 	END IF;
4495 
4496 
4497    RETURN 'S'; -- Successfull validation
4498 
4499 EXCEPTION
4500 
4501    WHEN OTHERS THEN
4502    /* Debug */
4503 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4504 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Finance_Info';
4505 	  l_debug_str := 'Exception in Validate_Finance_Info. '||SQLERRM;
4506 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4507 	END IF;
4508 
4509 
4510       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
4511          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
4512       END IF;
4513 
4514       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
4515 
4516       RETURN 'U';
4517 
4518 END Validate_Finance_Info;
4519 
4520 
4521 
4522 /******************************************************************
4523    Created By         : Arkadi Tereshenkov
4524 
4525    Date Created By    : Oct 14, 2002
4526 
4527    Purpose            : Validate information pertaining to the
4528                         dependent information of the student.
4529                         (IGS_SV_DEPDNT_INFO)
4530 
4531    Remarks            : Return result:
4532                            'S' - record found and validated
4533                            'E' - validation error
4534                            'U' - Unexpected error
4535                            'N' - data not found
4536 
4537    Change History
4538    Who                  When            What
4539 ------------------------------------------------------------------------
4540 
4541 ******************************************************************/
4542 FUNCTION Validate_Dependent_Info (
4543    p_person_rec IN      t_student_rec,
4544    p_data_rec   IN OUT NOCOPY  g_dependent_rec_type,    -- Data record
4545    p_records    OUT NOCOPY     NUMBER                   -- Number of dependents found
4546 ) RETURN VARCHAR2
4547 IS
4548 
4549 
4550    l_api_name CONSTANT VARCHAR(30) := 'Validate_Dependent_Info';
4551 
4552    l_dep_person_rec   t_student_rec;
4553    l_dep_data_rec     IGS_SV_BIO_INFO%ROWTYPE ;
4554    l_counter          NUMBER(10) := 0;
4555    l_rel_count	      NUMBER(10) := 0;
4556    l_dep_sevis_id VARCHAR2(30);	--PRBHARDW
4557    -- Dependent codes
4558    -- 01 Spouse
4559    -- 02 Child
4560 
4561    -- Select all dependents
4562    CURSOR c_data IS
4563      SELECT dep.relationship_id,
4564             rel.object_id depdnt_id,
4565             action_code,
4566             to_char(effective_date,'YYYY-MM-DD') effective_date ,
4567             reason_code,
4568             dep.REMARKS comments,
4569             rel.COMMENTS rel_remarks,
4570             decode (RELATIONSHIP_CODE,'PARENT_OF','02','SPOUSE_OF','01','XX' ) relationship
4571        FROM igs_pe_depd_active dep,
4572             HZ_RELATIONSHIPS rel
4573       WHERE subject_id = p_person_rec.person_id
4574             AND rel.relationship_id =  dep.relationship_id
4575             AND (p_person_rec.record_status = 'C' OR dep.action_code ='A')  --In the new mode report only about active dependents
4576             AND RELATIONSHIP_CODE IN ('PARENT_OF','SPOUSE_OF' )
4577             AND (dep.relationship_id, dep.last_update_date) IN
4578             ( SELECT dep1.relationship_id,
4579                      MAX(dep1.last_update_date)
4580                 FROM igs_pe_depd_active dep1
4581 		WHERE dep1.relationship_id = rel.relationship_id
4582 		GROUP BY  dep1.relationship_id)
4583             AND rel.status = 'A';
4584 
4585    CURSOR c_person_number(p_id NUMBER) IS
4586     SELECT person_number
4587       FROM igs_pe_person
4588      WHERE person_id = p_id;
4589 
4590    CURSOR c_spouse_of_rel IS
4591           SELECT COUNT(1)
4592 	 FROM igs_pe_hz_rel_v hz
4593 	 WHERE hz.subject_id = p_person_rec.person_id AND
4594 	 hz.relationship_code= 'SPOUSE_OF' and
4595 	 sysdate BETWEEN hz.start_date AND NVL(hz.end_date, sysdate+1)
4596          AND EXISTS (SELECT 1 FROM igs_pe_depd_active pdep
4597                      WHERE pdep.relationship_id = hz.relationship_id AND
4598                            pdep.action_code <> 'T' AND
4599                            pdep.last_update_date = (SELECT MAX(last_update_date)
4600 				      FROM igs_pe_depd_active
4601 				      WHERE relationship_id =hz.relationship_id)
4602                      );
4603 
4604 CURSOR c_get_sevis_user_id(c_dep_id NUMBER)
4605      IS
4606           SELECT alt.api_person_id
4607 	  FROM  igs_pe_alt_pers_id alt
4608 	  WHERE
4609 	       alt.pe_person_id = c_dep_id AND
4610 	       alt.person_id_type IN (SELECT person_id_type FROM igs_pe_person_id_typ
4611 				    WHERE s_person_id_type = 'SEVIS_ID') AND
4612                sysdate between alt.start_dt and nvl(alt.end_dt, sysdate+1);
4613      l_rel_type_count NUMBER := 0;
4614 BEGIN
4615 
4616    Put_Log_Msg(l_api_name||' starts ',0);
4617    /* Debug */
4618 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4619 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4620 	  l_debug_str := 'Entering Validate_Dependent_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
4621 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4622 	END IF;
4623 
4624 
4625 
4626    FOR c_data_rec IN c_data LOOP
4627 	  IF Get_Prev_Dep(p_person_rec.person_id, c_data_rec.depdnt_id, p_person_rec.batch_id, c_data_rec.action_code) THEN
4628 	       l_counter := l_counter +1;
4629 	       IF l_counter > 25 AND p_person_rec.batch_id = g_running_create_batch THEN
4630 		  IF g_parallel_batches.count > 0 THEN
4631 		       p_data_rec(l_counter).batch_id := g_parallel_batches(1);
4632 		  ELSE
4633 		      p_data_rec(l_counter).batch_id := igs_sv_util.open_new_batch(p_person_rec.person_id, p_person_rec.batch_id,'CONN_JOB');
4634 		      g_parallel_batches(1) := p_data_rec(l_counter).batch_id;
4635 		  END IF;
4636 	       ELSE
4637 		  p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
4638 	       END IF;
4639 	       OPEN c_get_sevis_user_id(c_data_rec.depdnt_id);
4640 	       FETCH c_get_sevis_user_id  INTO l_dep_sevis_id;
4641 	       CLOSE c_get_sevis_user_id;
4642 
4643 	       p_data_rec(l_counter).person_id := p_person_rec.person_id;
4644 	       p_data_rec(l_counter).print_form := p_person_rec.print_form;
4645 	       p_data_rec(l_counter).creation_date := sysdate;
4646 	       p_data_rec(l_counter).created_by := g_update_by;
4647 	       p_data_rec(l_counter).last_updated_by := g_update_by;
4648 	       p_data_rec(l_counter).last_update_date  := sysdate;
4649 	       p_data_rec(l_counter).last_update_login := g_update_login;
4650 	       p_data_rec(l_counter).depdnt_id          := c_data_rec.depdnt_id;
4651 	       p_data_rec(l_counter).depdnt_action_type   := c_data_rec.action_code;
4652 	       p_data_rec(l_counter).depdnt_sevis_id    := l_dep_sevis_id; --get_person_sevis_id(c_data_rec.depdnt_id);  prbhardw
4653 	       p_data_rec(l_counter).termination_effect_date := c_data_rec.effective_date;
4654 
4655 	       p_data_rec(l_counter).relationship        := c_data_rec.relationship;
4656 	       p_data_rec(l_counter).relationship_remarks := c_data_rec.rel_remarks;
4657 	       p_data_rec(l_counter).termination_reason :=  c_data_rec.reason_code ;
4658 
4659 	       l_dep_person_rec.batch_id   := p_person_rec.batch_id;
4660 	       l_dep_person_rec.person_id  := c_data_rec.depdnt_id;
4661 	       l_dep_person_rec.print_form := p_person_rec.print_form;
4662 	       l_dep_person_rec.batch_type := p_person_rec.batch_type;
4663 
4664 	       OPEN c_person_number (c_data_rec.depdnt_id);
4665 	       FETCH c_person_number INTO l_dep_person_rec.person_number ;
4666 	       CLOSE c_person_number;
4667 
4668 	       l_dep_person_rec.dep_flag   := 'Y';
4669 
4670 	       -------prbhardw
4671 	       IF p_data_rec(l_counter).relationship = '01'  AND p_person_rec.batch_type = 'I' THEN  -- spouse chk is for NI only: bug 5255450
4672 		       OPEN c_spouse_of_rel;
4673 		       FETCH c_spouse_of_rel INTO l_rel_type_count;
4674 		       CLOSE c_spouse_of_rel;
4675 		       IF l_rel_type_count > 1 THEN
4676 			    FND_MESSAGE.SET_NAME('IGS','IGS_SV_SPOUSE_REL');
4677 			    FND_MESSAGE.SET_TOKEN('PERSON_NUM',p_person_rec.person_number);
4678 			    Put_Log_Msg(FND_MESSAGE.Get,1);
4679 			    RETURN 'E';   -- fix for bug 5255450
4680 		       END IF;
4681 
4682 	       END IF;
4683 	       -------prbhardw
4684 
4685 	       -- Call Validate_Dep_Info
4686 	       l_dep_person_rec.dep_status  := Validate_Bio_Info (p_person_rec => l_dep_person_rec,
4687 								  p_data_rec   => l_dep_data_rec);
4688 	       IF l_dep_person_rec.dep_status = 'E' THEN -- Validation error - mark person as invalid
4689 
4690 		  Put_Log_Msg('Validation error occurs ',1);
4691 			/* Debug */
4692 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4693 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4694 		  l_debug_str := 'Returning E from Validate_Dependent_Info.';
4695 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4696 		END IF;
4697 
4698 		  RETURN 'E';
4699 
4700 	       ELSIF l_dep_person_rec.dep_status = 'N' THEN
4701 
4702 		 Put_Log_Msg('Dependent not found by Validate procedure ',0);
4703 			/* Debug */
4704 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4705 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4706 		  l_debug_str := 'IGS_SV_UNEXP_EXCPT_ERR Error in Validate_Dependent_Info.';
4707 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4708 		END IF;
4709 
4710 		 -- probably a bug
4711 		 FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
4712 		 FND_MESSAGE.SET_TOKEN('BLOCK_ID',1);
4713 		 FND_MSG_PUB.Add;
4714 		RAISE FND_API.G_EXC_ERROR;
4715 
4716 	       END IF;
4717 
4718 	       p_data_rec(l_counter).person_id   :=  p_person_rec.person_id;
4719 
4720 	       p_data_rec(l_counter).visa_type   := l_dep_data_rec.visa_type ;
4721 	       p_data_rec(l_counter).last_name   := l_dep_data_rec.last_name;
4722 	       p_data_rec(l_counter).first_name  := l_dep_data_rec.first_name;
4723 	       p_data_rec(l_counter).middle_name := l_dep_data_rec.middle_name;
4724 	       p_data_rec(l_counter).suffix      := l_dep_data_rec.suffix;
4725 	       p_data_rec(l_counter).birth_date  := l_dep_data_rec.birth_date ;
4726 	       p_data_rec(l_counter).person_number  := l_dep_person_rec.person_number ;
4727 	       p_data_rec(l_counter).gender      := l_dep_data_rec.gender ;
4728 	       p_data_rec(l_counter).birth_cntry_code := l_dep_data_rec.birth_cntry_code ;
4729 	       p_data_rec(l_counter).citizen_cntry_code := l_dep_data_rec.citizen_cntry_code ;
4730 
4731 	       p_data_rec(l_counter).birth_city        := l_dep_data_rec.birth_city ;
4732 	       p_data_rec(l_counter).legal_res_cntry_code := l_dep_data_rec.legal_res_cntry_code ;
4733 	       p_data_rec(l_counter).remarks           := l_dep_data_rec.remarks ;
4734 	       p_data_rec(l_counter).birth_cntry_resn_code := l_dep_data_rec.birth_cntry_resn_code;
4735 
4736 	       IF p_person_rec.record_status = 'C' THEN
4737 
4738 		/* Debug */
4739 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4740 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4741 		  l_debug_str := 'Exiting from for loop in Validate_Dependent_Info.';
4742 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4743 		END IF;
4744 
4745 	       --  EXIT; -- Just one dependent in the update mode per batch	prbhardw CP enhancement
4746 
4747 	       END IF;
4748           END IF;
4749 
4750    END LOOP;
4751 
4752    IF l_counter = 0 THEN
4753 
4754       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
4755       /* Debug */
4756 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4757 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4758 	  l_debug_str := 'Returning N from Validate_Dependent_Info.';
4759 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4760 	END IF;
4761 
4762       RETURN 'N';
4763 
4764    END IF;
4765 
4766    p_records := l_counter;
4767 
4768    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
4769    /* Debug */
4770 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4771 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4772 	  l_debug_str := 'Returning S from Validate_Dependent_Info.';
4773 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4774 	END IF;
4775 
4776    RETURN 'S'; -- Successfull validation
4777 
4778 EXCEPTION
4779 
4780    WHEN OTHERS THEN
4781    /* Debug */
4782 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4783 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Dependent_Info';
4784 	  l_debug_str := 'Exception in Validate_Dependent_Info. '||SQLERRM;
4785 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4786 	END IF;
4787 
4788       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
4789          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
4790       END IF;
4791 
4792       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
4793 
4794       RETURN 'U';
4795 
4796 
4797 END Validate_Dependent_Info;
4798 
4799 
4800 
4801 /******************************************************************
4802    Created By         : Arkadi Tereshenkov
4803 
4804    Date Created By    : Oct 14, 2002
4805 
4806    Purpose            : Validate information pertaining to the
4807                         convictions associated to student.
4808                         (IGS_SV_CONVICTIONS)
4809 
4810    Remarks            : Return result:
4811                            'S' - record found and validated
4812                            'E' - validation error
4813                            'U' - Unexpected error
4814                            'N' - data not found
4815 
4816    Change History
4817    Who                  When            What
4818 ------------------------------------------------------------------------
4819 
4820 ******************************************************************/
4821 FUNCTION Validate_Convictions_Info (
4822    p_person_rec IN      t_student_rec,
4823    p_data_rec   IN OUT NOCOPY  IGS_SV_CONVICTIONS%ROWTYPE    -- Data record
4824 ) RETURN VARCHAR2
4825 IS
4826 
4827    l_api_name CONSTANT VARCHAR(30) := 'Validate_Convictions_Info';
4828 
4829    -- Select only! unreported records since no data change is possbile.
4830 
4831    CURSOR c_data IS
4832      SELECT felony_details_id conviction_id,
4833             disp_action_info criminal_remarks
4834        FROM igs_pe_felony_dtls
4835       WHERE person_id = p_person_rec.person_id
4836             AND convict_ind ='Y'
4837             AND felony_details_id NOT IN
4838             ( SELECT conviction_id
4839                 FROM igs_sv_convictions  prg,
4840                      igs_sv_persons pr
4841                WHERE prg.person_id = pr.person_id
4842                      AND prg.batch_id = pr.batch_id
4843                      AND pr.record_status <> 'E'
4844                      AND prg.person_id = p_person_rec.person_id )
4845     ORDER BY crime_date;
4846 
4847   l_not_valid BOOLEAN := FALSE;
4848 BEGIN
4849 /* Debug */
4850 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4851 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Convictions_Info';
4852 	  l_debug_str := 'Entering Validate_Convictions_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
4853 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4854 	END IF;
4855 
4856    Put_Log_Msg(l_api_name||' starts ',0);
4857 
4858    p_data_rec.batch_id := NULL;  -- This will tell us if there's been any records found
4859 
4860    FOR c_data_rec IN c_data LOOP
4861 
4862        p_data_rec.batch_id := p_person_rec.batch_id;
4863        p_data_rec.person_id := p_person_rec.person_id;
4864        p_data_rec.print_form := p_person_rec.print_form;
4865        p_data_rec.creation_date := sysdate;
4866        p_data_rec.created_by := g_update_by;
4867        p_data_rec.last_updated_by := g_update_by;
4868        p_data_rec.last_update_date  := sysdate;
4869        p_data_rec.last_update_login := g_update_login;
4870 
4871        p_data_rec.conviction_id := c_data_rec.conviction_id;
4872        p_data_rec.remarks       :=SUBSTR(c_data_rec.criminal_remarks,1,500);
4873        p_data_rec.criminal_conviction :='Y' ;
4874 
4875        IF p_data_rec.remarks IS NULL  THEN
4876           l_not_valid := TRUE;
4877        END IF;
4878        EXIT;  -- one  record is enough
4879 
4880    END LOOP;
4881 
4882    IF p_data_rec.batch_id IS NULL THEN
4883 
4884       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
4885       /* Debug */
4886 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4887 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Convictions_Info';
4888 	  l_debug_str := 'Returning N from Validate_Convictions_Info';
4889 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4890 	END IF;
4891 
4892       RETURN 'N';
4893 
4894    ELSIF l_not_valid THEN
4895 
4896        FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_CONV_RQD_FLD_ERR'); -- Convictions block error
4897        FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
4898 
4899        Put_Log_Msg(FND_MESSAGE.Get,1);
4900 
4901        Put_Log_Msg(l_api_name||' Validation error, return E ',0);
4902        /* Debug */
4903 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4904 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Convictions_Info';
4905 	  l_debug_str := 'Returning E from Validate_Convictions_Info';
4906 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4907 	END IF;
4908 
4909        RETURN 'E';
4910 
4911    END IF;
4912 
4913    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
4914    /* Debug */
4915 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4916 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Convictions_Info';
4917 	  l_debug_str := 'Returning S from Validate_Convictions_Info';
4918 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4919 	END IF;
4920 
4921    RETURN 'S'; -- Successfull validation
4922 
4923 EXCEPTION
4924 
4925    WHEN OTHERS THEN
4926    /* Debug */
4927 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
4928 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Convictions_Info';
4929 	  l_debug_str := 'Exception in Validate_Convictions_Info '||SQLERRM;
4930 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
4931 	END IF;
4932 
4933       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
4934          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
4935       END IF;
4936 
4937       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
4938 
4939       RETURN 'U';
4940 
4941 END Validate_Convictions_Info;
4942 
4943 
4944 
4945 /******************************************************************
4946    Created By         : Arkadi Tereshenkov
4947 
4948    Date Created By    : Oct 14, 2002
4949 
4950    Purpose            : Validate information pertaining to the
4951                         Legal information block of student.
4952                         (IGS_SV_LEGAL_INFO)
4953 
4954    Remarks            : Return result:
4955                            'S' - record found and validated
4956                            'E' - validation error
4957                            'U' - Unexpected error
4958                            'N' - data not found
4959 
4960    Change History
4961    Who                  When            What
4962 ------------------------------------------------------------------------
4963 
4964 ******************************************************************/
4965 FUNCTION Validate_Legal_Info (
4966    p_person_rec IN      t_student_rec,
4967    p_data_rec   IN OUT NOCOPY  IGS_SV_LEGAL_INFO%ROWTYPE    -- Data record
4968 ) RETURN VARCHAR2
4969 IS
4970 
4971    l_api_name                 CONSTANT VARCHAR(30) := 'Validate_Legal_Info';
4972    l_visa_number              IGS_PE_VISA.visa_number%TYPE;
4973    l_visa_issuing_post        IGS_PE_VISA.visa_issuing_post%TYPE;
4974    l_visa_expiration_date     IGS_PE_VISA.visa_expiry_date%TYPE;
4975    l_visa_issuing_country     IGS_PE_VISA.visa_issuing_country%TYPE;
4976    l_I94_number               IGS_PE_VISIT_HISTRY.cntry_entry_form_num%TYPE;
4977    l_visa_issue_date	      IGS_PE_VISA.visa_issue_date%TYPE;
4978    l_port_of_entry            IGS_PE_VISIT_HISTRY.port_of_entry%TYPE;
4979    l_date_of_entry            IGS_PE_VISIT_HISTRY.visit_start_date%TYPE;
4980    l_remarks                  IGS_PE_VISIT_HISTRY.remarks%TYPE;
4981    l_psprt_number             IGS_PE_PASSPORT.passport_number%TYPE;
4982    l_psprt_issuing_cntry_code IGS_PE_PASSPORT.passport_cntry_code%TYPE;
4983    l_psprt_exp_date           IGS_PE_PASSPORT.passport_expiry_date%TYPE;
4984    l_not_valid                BOOLEAN := FALSE;
4985 
4986    CURSOR c_get_visa_data IS
4987      SELECT peva.visa_number,
4988             peva.visa_issuing_post,
4989             peva.visa_expiry_date,
4990             pevv.cntry_entry_form_num,
4991             pevv.port_of_entry,
4992             pevv.visit_start_date,
4993             pevv.remarks,
4994             pspt.passport_number,
4995             pspt.passport_cntry_code,
4996             pspt.passport_expiry_date,
4997             peva.visa_issuing_country,
4998 	    peva.visa_issue_date
4999        FROM igs_pe_visa           peva,
5000             igs_pe_visit_histry   pevv,
5001             igs_pe_passport       pspt
5002       WHERE peva.person_id         = p_person_rec.person_id
5003         AND peva.visa_type         IN ('F-1', 'F-2','M-1','M-2')
5004         AND peva.visa_id           = pevv.visa_id (+)
5005         AND pspt.passport_id (+)   = peva.passport_id
5006         AND peva.visa_expiry_date  >= trunc(sysdate);
5007 
5008 BEGIN
5009 /* Debug */
5010 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5011 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Legal_Info';
5012 	  l_debug_str := 'Entering Validate_Legal_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
5013 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5014 	END IF;
5015 
5016    Put_Log_Msg(l_api_name||' starts ',0);
5017    p_data_rec.batch_id := NULL;           -- This will tell us if there's been any records found
5018 
5019 --
5020 -- Obtain all information on the visa that has been made available
5021 --
5022    OPEN c_get_visa_data;
5023    FETCH c_get_visa_data
5024     INTO l_visa_number,
5025          l_visa_issuing_post,
5026          l_visa_expiration_date,
5027          l_I94_number,
5028          l_port_of_entry,
5029          l_date_of_entry,
5030          l_remarks,
5031          l_psprt_number,
5032          l_psprt_issuing_cntry_code,
5033          l_psprt_exp_date,
5034          l_visa_issuing_country,
5035 	 l_visa_issue_date;
5036 
5037 --
5038 -- Make sure that there was visa information found for the person
5039 --
5040    IF (c_get_visa_data%FOUND) THEN
5041 
5042       p_data_rec.psprt_number               := SUBSTR(l_psprt_number,1,25);
5043       p_data_rec.psprt_issuing_cntry_code   := SUBSTR(l_psprt_issuing_cntry_code,1,3);
5044       p_data_rec.psprt_exp_date             := to_char(l_psprt_exp_date,'YYYY-MM-DD');
5045       p_data_rec.visa_number                := SUBSTR(l_visa_number,1,25);
5046       p_data_rec.visa_issuing_post          := SUBSTR(l_visa_issuing_post,3);
5047       p_data_rec.visa_expiration_date       := to_char(l_visa_expiration_date,'YYYY-MM-DD');
5048       p_data_rec.i94_number                 := SUBSTR(l_I94_number,1,11);
5049       p_data_rec.port_of_entry              := SUBSTR(l_port_of_entry,3);
5050       p_data_rec.visa_issuing_cntry_code    := l_visa_issuing_country;
5051       p_data_rec.date_of_entry              := to_char(l_date_of_entry,'YYYY-MM-DD');
5052       p_data_rec.visa_issue_date	    := l_visa_issue_date;
5053       p_data_rec.remarks                    := l_remarks;
5054       p_data_rec.batch_id                   := p_person_rec.batch_id;
5055       p_data_rec.person_id                  := p_person_rec.person_id;
5056       p_data_rec.print_form                 := p_person_rec.print_form;
5057       p_data_rec.creation_date              := sysdate;
5058       p_data_rec.created_by                 := g_update_by;
5059       p_data_rec.last_updated_by            := g_update_by;
5060       p_data_rec.last_update_date           := sysdate;
5061       p_data_rec.last_update_login          := g_update_login;
5062 
5063       -- change for country code inconsistency bug 3738488
5064      --p_data_rec.psprt_issuing_cntry_code := convert_country_code(p_data_rec.psprt_issuing_cntry_code);
5065      p_data_rec.visa_issuing_cntry_code := convert_country_code(p_data_rec.visa_issuing_cntry_code);
5066 
5067    END IF;
5068 
5069    CLOSE c_get_visa_data;
5070 
5071    IF (p_data_rec.batch_id IS NULL) THEN
5072 
5073       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
5074       /* Debug */
5075 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5076 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Legal_Info';
5077 	  l_debug_str := 'Returning N from Validate_Legal_Info.';
5078 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5079 	END IF;
5080       RETURN 'N';
5081 
5082    END IF;
5083 
5084    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
5085    /* Debug */
5086 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5087 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Legal_Info';
5088 	  l_debug_str := 'Returning S from Validate_Legal_Info.';
5089 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5090 	END IF;
5091    RETURN 'S'; -- Successfull validation
5092 
5093 EXCEPTION
5094 
5095    WHEN OTHERS THEN
5096    /* Debug */
5097 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5098 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Legal_Info';
5099 	  l_debug_str := 'Exception in Validate_Legal_Info. '||SQLERRM;
5100 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5101 	END IF;
5102 
5103       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5104          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
5105       END IF;
5106 
5107       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5108 
5109       RETURN 'U';
5110 
5111 END Validate_Legal_Info;
5112 
5113 FUNCTION Validate_ev_Legal_Info (
5114    p_person_rec IN      t_student_rec,
5115    p_data_rec   IN OUT NOCOPY  IGS_SV_LEGAL_INFO%ROWTYPE    -- Data record
5116 ) RETURN VARCHAR2
5117 IS
5118 
5119    l_api_name                 CONSTANT VARCHAR(30) := 'Validate_ev_Legal_Info';
5120    l_visa_number              IGS_PE_VISA.visa_number%TYPE;
5121    l_visa_issuing_post        IGS_PE_VISA.visa_issuing_post%TYPE;
5122    l_visa_expiration_date     IGS_PE_VISA.visa_expiry_date%TYPE;
5123    l_visa_issue_date          IGS_PE_VISA.visa_issue_date%TYPE;
5124    l_visa_issuing_country     IGS_PE_VISA.visa_issuing_country%TYPE;
5125    l_I94_number               IGS_PE_VISIT_HISTRY.cntry_entry_form_num%TYPE;
5126    l_port_of_entry            IGS_PE_VISIT_HISTRY.port_of_entry%TYPE;
5127    l_date_of_entry            IGS_PE_VISIT_HISTRY.visit_start_date%TYPE;
5128    l_remarks                  IGS_PE_VISIT_HISTRY.remarks%TYPE;
5129    l_psprt_number             IGS_PE_PASSPORT.passport_number%TYPE;
5130    l_psprt_issuing_cntry_code IGS_PE_PASSPORT.passport_cntry_code%TYPE;
5131    l_psprt_exp_date           IGS_PE_PASSPORT.passport_expiry_date%TYPE;
5132    l_not_valid                BOOLEAN := FALSE;
5133 
5134 --to_char(peva.visa_issue_date,'YYYY-MM-DD') visa_issue_date
5135 
5136    CURSOR c_get_visa_data IS
5137      SELECT peva.visa_number,
5138             peva.visa_issuing_post,
5139             peva.visa_expiry_date,
5140             pevv.cntry_entry_form_num,
5141             pevv.port_of_entry,
5142             pevv.visit_start_date,
5143             pevv.remarks,
5144             pspt.passport_number,
5145             pspt.passport_cntry_code,
5146             pspt.passport_expiry_date,
5147             peva.visa_issuing_country,
5148 	    peva.visa_issue_date
5149        FROM igs_pe_visa           peva,
5150             igs_pe_visit_histry   pevv,
5151             igs_pe_passport       pspt
5152       WHERE peva.person_id         = p_person_rec.person_id
5153         AND peva.visa_type         IN ('J-1', 'J-2')
5154         AND peva.visa_id           = pevv.visa_id (+)
5155         AND pspt.passport_id (+)   = peva.passport_id
5156         AND peva.visa_expiry_date  >= trunc(sysdate);
5157 
5158 BEGIN
5159 /* Debug */
5160 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5161 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_ev_Legal_Info';
5162 	  l_debug_str := 'Entering Validate_ev_Legal_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
5163 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5164 	END IF;
5165 
5166    Put_Log_Msg(l_api_name||' starts ',0);
5167    p_data_rec.batch_id := NULL;           -- This will tell us if there's been any records found
5168 
5169 --
5170 -- Obtain all information on the visa that has been made available
5171 --
5172    OPEN c_get_visa_data;
5173    FETCH c_get_visa_data
5174     INTO l_visa_number,
5175          l_visa_issuing_post,
5176          l_visa_expiration_date,
5177          l_I94_number,
5178          l_port_of_entry,
5179          l_date_of_entry,
5180          l_remarks,
5181          l_psprt_number,
5182          l_psprt_issuing_cntry_code,
5183          l_psprt_exp_date,
5184          l_visa_issuing_country,
5185 	 l_visa_issue_date;
5186 
5187 --
5188 -- Make sure that there was visa information found for the person
5189 --
5190    IF (c_get_visa_data%FOUND) THEN
5191 
5192       p_data_rec.psprt_number               := SUBSTR(l_psprt_number,1,25);
5193       p_data_rec.psprt_issuing_cntry_code   := SUBSTR(l_psprt_issuing_cntry_code,1,3);
5194       p_data_rec.psprt_exp_date             := to_char(l_psprt_exp_date,'YYYY-MM-DD');
5195       p_data_rec.visa_number                := SUBSTR(l_visa_number,1,25);
5196       p_data_rec.visa_issuing_post          := SUBSTR(l_visa_issuing_post,3);
5197       p_data_rec.visa_expiration_date       := to_char(l_visa_expiration_date,'YYYY-MM-DD');
5198       p_data_rec.i94_number                 := SUBSTR(l_I94_number,1,11);
5199       p_data_rec.port_of_entry              := SUBSTR(l_port_of_entry,3);
5200       p_data_rec.visa_issuing_cntry_code    := l_visa_issuing_country;
5201       p_data_rec.date_of_entry              := to_char(l_date_of_entry,'YYYY-MM-DD');
5202       p_data_rec.visa_issue_date            := l_visa_issue_date;
5203       p_data_rec.remarks                    := l_remarks;
5204       p_data_rec.batch_id                   := p_person_rec.batch_id;
5205       p_data_rec.person_id                  := p_person_rec.person_id;
5206       p_data_rec.print_form                 := p_person_rec.print_form;
5207       p_data_rec.creation_date              := sysdate;
5208       p_data_rec.created_by                 := g_update_by;
5209       p_data_rec.last_updated_by            := g_update_by;
5210       p_data_rec.last_update_date           := sysdate;
5211       p_data_rec.last_update_login          := g_update_login;
5212 
5213    END IF;
5214 
5215    CLOSE c_get_visa_data;
5216 
5217    IF (p_data_rec.batch_id IS NULL) THEN
5218 
5219       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
5220       /* Debug */
5221 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5222 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_ev_Legal_Info';
5223 	  l_debug_str := 'Returning N from Validate_ev_Legal_Info.';
5224 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5225 	END IF;
5226       RETURN 'N';
5227 
5228    END IF;
5229 
5230    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
5231    /* Debug */
5232 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5233 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_ev_Legal_Info';
5234 	  l_debug_str := 'Returning S from Validate_ev_Legal_Info.';
5235 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5236 	END IF;
5237    RETURN 'S'; -- Successfull validation
5238 
5239 EXCEPTION
5240 
5241    WHEN OTHERS THEN
5242    /* Debug */
5243 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5244 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_ev_Legal_Info';
5245 	  l_debug_str := 'Exception in Validate_ev_Legal_Info. '||SQLERRM;
5246 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5247 	END IF;
5248 
5249       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5250          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
5251       END IF;
5252 
5253       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5254 
5255       RETURN 'U';
5256 
5257 END Validate_ev_Legal_Info;
5258 
5259 FUNCTION Get_Empl_Info (
5260    p_data_rec  IN OUT NOCOPY  IGS_SV_EMPL_INFO%ROWTYPE     -- Data record
5261 )   RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
5262 IS
5263 
5264    l_api_name CONSTANT VARCHAR2(25) := 'Get_Empl_Info';
5265 
5266    CURSOR c_data_rec IS
5267      SELECT nonimg_empl_id,
5268             empl_rec_type,
5269             empl_type,
5270             recommend_empl,
5271             rescind_empl,
5272             remarks,
5273             empl_start_date ,
5274             empl_end_date,
5275             course_relevance,
5276             empl_time,
5277             empl_name,
5278 	    action_code
5279       FROM igs_sv_empl_info
5280       WHERE
5281             person_id = p_data_rec.person_id and
5282             nonimg_empl_id = p_data_rec.nonimg_empl_id and
5283 	    batch_id IN
5284             (  SELECT max(emp.batch_id)
5285                  FROM igs_sv_empl_info emp,
5286                       igs_sv_persons pr
5287                 WHERE emp.person_id = pr.person_id
5288                       AND emp.batch_id = pr.batch_id
5289                       AND pr.record_status <> 'E'
5290                       AND emp.person_id = p_data_rec.person_id
5291 		      AND emp.nonimg_empl_id = p_data_rec.nonimg_empl_id
5292             )
5293     ORDER BY nonimg_empl_id;
5294 
5295 BEGIN
5296 	/* Debug */
5297 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5298 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Empl_Info';
5299 	  l_debug_str := 'Entering Get_Empl_Info. p_data_rec.person_id is '||p_data_rec.person_id;
5300 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5301 	END IF;
5302 
5303    Put_Log_Msg(l_api_name||' begins ',0);
5304 
5305    OPEN c_data_rec;
5306    FETCH c_data_rec
5307     INTO p_data_rec.nonimg_empl_id  ,
5308          p_data_rec.empl_rec_type   ,
5309          p_data_rec.empl_type       ,
5310          p_data_rec.recommend_empl  ,
5311          p_data_rec.rescind_empl    ,
5312          p_data_rec.remarks         ,
5313          p_data_rec.empl_start_date ,
5314          p_data_rec.empl_end_date   ,
5315          p_data_rec.course_relevance,
5316          p_data_rec.empl_time     ,
5317          p_data_rec.empl_name     ,
5318          p_data_rec.action_code   ;
5319 
5320    IF c_data_rec%NOTFOUND THEN
5321 
5322       Put_Log_Msg('Record not found ',0);
5323       CLOSE c_data_rec;
5324       /* Debug */
5325 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5326 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Empl_Info';
5327 	  l_debug_str := 'Returning N from Get_Empl_Info';
5328 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5329 	END IF;
5330       RETURN 'N';
5331 
5332    END IF;
5333 
5334    CLOSE c_data_rec;
5335 
5336    Put_Log_Msg(l_api_name||' ends S ',0);
5337 	/* Debug */
5338 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5339 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Empl_Info';
5340 	  l_debug_str := 'Returning S from Get_Empl_Info';
5341 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5342 	END IF;
5343    RETURN 'S';
5344 
5345 EXCEPTION
5346 
5347    WHEN FND_API.G_EXC_ERROR THEN
5348 	 /* Debug */
5349 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5350 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Empl_Info';
5351 	  l_debug_str := 'Exception in Get_Empl_Info '||SQLERRM;
5352 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5353 	END IF;
5354 
5355       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
5356       RETURN 'U';
5357 
5358    WHEN OTHERS THEN
5359       /* Debug */
5360 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5361 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Empl_Info';
5362 	  l_debug_str := 'Exception in Get_Empl_Info '||SQLERRM;
5363 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5364 	END IF;
5365       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5366          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
5367       END IF;
5368 
5369       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5370       RETURN  'U';
5371 
5372 END Get_Empl_Info;
5373 
5374 FUNCTION Check_emp_duration(stDate IN VARCHAR2 , endDt IN VARCHAR2 , p_visa_type IN VARCHAR2) RETURN BOOLEAN IS
5375         returnVal boolean := false;
5376 	startDate Date;
5377 	endDate Date;
5378 	daysBetween number := 0;
5379 
5380     BEGIN
5381 	startDate := TO_DATE(stDate,'YYYY-MM-DD');
5382 	endDate := TO_DATE(endDt,'YYYY-MM-DD');
5383 	daysBetween := endDate-startDate;
5384 
5385 	IF p_visa_type= 'F-1' AND  daysBetween > 365 THEN
5386 	    	returnVal := true;
5387 	ELSIF p_visa_type= 'M-1' AND daysBetween > 183 THEN
5388                   returnVal := true;
5389         END IF;
5390 	RETURN returnVal;
5391 END Check_emp_duration;
5392 
5393 -- only for validation of the input record
5394 FUNCTION validate_employment_Info(
5395   p_person_rec    IN      t_student_rec,
5396   p_data_rec      IN OUT NOCOPY  IGS_SV_EMPL_INFO%ROWTYPE     --Data record
5397 ) RETURN BOOLEAN
5398 IS
5399    l_not_valid    BOOLEAN := FALSE;
5400    l_visa_type VARCHAR2(5);
5401    l_api_name CONSTANT VARCHAR2(25) := 'validate_employment_Info';
5402    l_months NUMBER(2);
5403    CURSOR c_get_visa_type
5404    IS
5405      SELECT visa_type
5406      FROM igs_pe_nonimg_form
5407      WHERE person_id =  p_person_rec.person_id
5408            AND nonimg_form_id =  p_person_rec.form_id;
5409 
5410  BEGIN
5411 	/* Debug */
5412 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5413 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.validate_employment_Info';
5414 	  l_debug_str := 'Entering validate_employment_Info. p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
5415 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5416 	END IF;
5417 
5418 	OPEN c_get_visa_type;
5419 	FETCH c_get_visa_type INTO l_visa_type;
5420 	CLOSE c_get_visa_type;
5421 
5422 	IF l_visa_type ='F-1' THEN
5423 	    l_months := 12;
5424 	ELSE
5425 	    l_months := 6;
5426 	END IF;
5427 
5428 
5429       -- Validate all the data
5430    IF p_data_rec.empl_rec_type = 'F'
5431       AND ( ( p_data_rec.recommend_empl   IS NULL
5432                  AND p_data_rec.rescind_empl IS NULL
5433                )
5434             OR p_data_rec.remarks IS NULL) THEN
5435 
5436          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EMPL_F_RQD_FLD_ERR'); -- Employment block error
5437          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
5438 
5439          Put_Log_Msg(FND_MESSAGE.Get,1);
5440          l_not_valid := TRUE;
5441 
5442    ELSIF p_data_rec.empl_rec_type = 'O'
5443       AND ( p_data_rec.empl_time           IS NULL
5444             OR p_data_rec.empl_start_date  IS NULL
5445             OR p_data_rec.empl_end_date    IS NULL
5446             OR p_data_rec.course_relevance IS NULL) THEN
5447 
5448          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EMPL_O_RQD_FLD_ERR'); -- Employment block error
5449          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
5450 
5451          Put_Log_Msg(FND_MESSAGE.Get,1);
5452          l_not_valid := TRUE;
5453 
5454    ELSIF p_data_rec.empl_rec_type = 'C'
5455       AND ( p_data_rec.empl_time           IS NULL
5456             OR p_data_rec.empl_start_date  IS NULL
5457             OR p_data_rec.empl_end_date    IS NULL
5458             OR p_data_rec.course_relevance IS NULL
5459             OR p_data_rec.empl_name        IS NULL
5460             OR p_data_rec.empl_addr_line1  IS NULL
5461             OR p_data_rec.city             IS NULL
5462             OR p_data_rec.state            IS NULL
5463             OR p_data_rec.postal_code      IS NULL
5464             ) THEN
5465 
5466          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_EMPL_C_RQD_FLD_ERR'); -- Employment block error
5467          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number );
5468 
5469          Put_Log_Msg(FND_MESSAGE.Get,1);
5470          l_not_valid := TRUE;
5471      ELSIF p_data_rec.empl_rec_type = 'O' THEN
5472           IF Check_emp_duration(p_data_rec.empl_start_date, p_data_rec.empl_end_date, l_visa_type) THEN
5473 	       FND_MESSAGE.SET_NAME('IGS','IGS_SV_EMP_INV_PRD');
5474 	       FND_MESSAGE.SET_TOKEN('MONTHS',l_months);
5475 	       FND_MESSAGE.SET_TOKEN('VISA_TYPE',l_visa_type);
5476 	       Put_Log_Msg(FND_MESSAGE.Get,1);
5477                l_not_valid := TRUE;
5478           END IF;
5479    END IF;
5480 
5481    IF l_not_valid THEN
5482 
5483      Put_Log_Msg(l_api_name||' Validation error, return E ',1);
5484 
5485   --   RETURN 'E';
5486   ELSE
5487      Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
5488 
5489    --  RETURN 'S'; -- Successfull validation
5490 
5491    END IF;
5492    /* Debug */
5493 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5494 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.validate_employment_Info';
5495 	  l_debug_str := 'Returning from validate_employment_Info';
5496 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5497 	END IF;
5498 
5499    RETURN l_not_valid;
5500 
5501 
5502 END validate_employment_Info;
5503 
5504 
5505 --Overload validate_empl_info method to accept table type argument
5506 
5507 FUNCTION Validate_Empl_Info (
5508    p_person_rec    IN      t_student_rec,
5509    p_data_rec   IN OUT NOCOPY  g_empl_rec_type,    -- Data record
5510    p_records    OUT NOCOPY     NUMBER                   -- Number of dependents found
5511 ) RETURN VARCHAR2
5512 IS
5513 
5514  -- Select the oldest employment record haven't been reported to INS yet.
5515 
5516 
5517    -- Select only! unreported records since no data change is possbile.
5518 
5519    CURSOR c_data(cp_person_id hz_parties.party_id%TYPE) IS
5520      SELECT nonimg_empl_id,
5521             frm.nonimg_form_id,
5522             decode ( empl_type,'01','O','02','C','F')  empl_rec_type,
5523             empl_type,
5524             recommend_empl,
5525             rescind_empl,
5526             em.remarks,
5527             to_char(empl_start_date, 'YYYY-MM-DD') empl_start_date,
5528             to_char(empl_end_date, 'YYYY-MM-DD') empl_end_date,
5529             course_relevance,
5530             empl_time,
5531             empl_party_id,
5532 	    action_code,
5533 	    NVL(em.print_flag, 'N') print_flag
5534        FROM igs_pe_nonimg_empl em,
5535             igs_pe_nonimg_form frm
5536       WHERE frm.person_id = cp_person_id
5537             AND frm.nonimg_form_id = em.nonimg_form_id
5538     ORDER BY nonimg_empl_id;
5539 
5540 
5541     CURSOR c_empl_name (l_party_id NUMBER) IS
5542      SELECT party_name
5543        FROM hz_parties
5544       WHERE party_id = l_party_id;
5545 
5546     CURSOR c_empl_addr (l_party_id NUMBER) IS
5547      SELECT SUBSTR(address1||address2||address3||address4,1,60) addr_line1,
5548             SUBSTR(address1||address2||address3||address4,1,60) addr_line2,
5549             SUBSTR(city,1,60) city    ,
5550             SUBSTR(state,1,2) state   ,
5551             postal_code
5552        FROM hz_locations lc, hz_party_sites st
5553       WHERE party_id = l_party_id
5554             AND lc.location_id = st.location_id
5555             AND identifying_address_flag  ='Y';
5556 
5557   l_postal_code  hz_locations.postal_code%TYPE;
5558   l_not_valid    BOOLEAN := FALSE;
5559   l_api_name CONSTANT VARCHAR(30) := 'Validate_Empl_Info';
5560   l_counter NUMBER(10):= 0;
5561 
5562 BEGIN
5563 
5564 	/* Debug */
5565 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5566 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5567 	  l_debug_str := 'Entering validate_empl_Info p_person_rec.batch_id is '||p_person_rec.batch_id ||' and person_id is '||p_person_rec.person_id;
5568 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5569 	END IF;
5570 
5571    Put_Log_Msg(l_api_name||' starts ',0);
5572 
5573    FOR c_data_rec IN c_data(p_person_rec.person_id) LOOP
5574 
5575        l_counter := l_counter +1;
5576 
5577        p_data_rec(l_counter).batch_id := p_person_rec.batch_id;
5578        p_data_rec(l_counter).person_id := p_person_rec.person_id;
5579        p_data_rec(l_counter).print_form := c_data_rec.print_flag; -- p_person_rec.print_form; PRBHARDW
5580        p_data_rec(l_counter).creation_date := sysdate;
5581        p_data_rec(l_counter).created_by := g_update_by;
5582        p_data_rec(l_counter).last_updated_by := g_update_by;
5583        p_data_rec(l_counter).last_update_date  := sysdate;
5584        p_data_rec(l_counter).last_update_login := g_update_login;
5585 
5586        p_data_rec(l_counter).empl_rec_type := c_data_rec.empl_rec_type; -- C(PT) O(PT) F(Off campus)
5587        p_data_rec(l_counter).empl_type  := c_data_rec.empl_type;
5588        p_data_rec(l_counter).nonimg_empl_id:= c_data_rec.nonimg_empl_id;
5589        p_data_rec(l_counter).recommend_empl  := c_data_rec.recommend_empl ;
5590        p_data_rec(l_counter).rescind_empl  := c_data_rec.rescind_empl;
5591        p_data_rec(l_counter).remarks   := c_data_rec.remarks;
5592        p_data_rec(l_counter).empl_start_date  := c_data_rec.empl_start_date;
5593        p_data_rec(l_counter).empl_end_date  := c_data_rec.empl_end_date;
5594        p_data_rec(l_counter).empl_time  := c_data_rec.empl_time;
5595        p_data_rec(l_counter).course_relevance  := c_data_rec.course_relevance;
5596        p_data_rec(l_counter).action_code := c_data_rec.action_code;
5597 
5598        /* Debug */
5599 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5600 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5601 	  l_debug_str := 'Remarks: '||p_data_rec(l_counter).remarks||' Empl Type: '||p_data_rec(l_counter).empl_rec_type;
5602 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5603 	END IF;
5604 
5605        IF p_data_rec(l_counter).empl_rec_type  <> 'F' THEN
5606          -- Get party id and address info
5607          OPEN c_empl_name (c_data_rec.empl_party_id);
5608          FETCH c_empl_name INTO p_data_rec(l_counter).empl_name;
5609          CLOSE c_empl_name;
5610 
5611          OPEN c_empl_addr (c_data_rec.empl_party_id);
5612          FETCH c_empl_addr
5613            INTO p_data_rec(l_counter).empl_addr_line1,
5614                 p_data_rec(l_counter).empl_addr_line2,
5615                 p_data_rec(l_counter).city,
5616                 p_data_rec(l_counter).state,
5617                 l_postal_code;
5618 
5619          p_data_rec(l_counter).postal_code := substr(l_postal_code,1,5);
5620          p_data_rec(l_counter).postal_routing_code := substr(l_postal_code,7,4);
5621          CLOSE c_empl_addr;
5622        END IF;
5623 
5624          l_not_valid := validate_employment_Info(p_person_rec => p_person_rec,
5625                                                  p_data_rec  => p_data_rec(l_counter));
5626 
5627         IF l_not_valid THEN
5628            Put_Log_Msg(l_api_name||' Validation error, return E ',1);
5629 	   /* Debug */
5630 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5631 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5632 	  l_debug_str := 'Returning E from validate_empl_Info.';
5633 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5634 	END IF;
5635 	   RETURN 'E';
5636 	END IF;
5637    END LOOP;
5638 
5639     p_records := l_counter;
5640    IF l_counter = 0 THEN
5641       Put_Log_Msg(l_api_name||' Successfully completed, no rows found returns N ',0);
5642       /* Debug */
5643 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5644 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5645 	  l_debug_str := 'Returning N from validate_empl_Info.';
5646 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5647 	END IF;
5648       RETURN 'N';
5649    END IF;
5650 
5651      -- Validate all the data
5652 
5653    Put_Log_Msg(l_api_name||' Successfully completed, returns S',0);
5654 /* Debug */
5655 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5656 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5657 	  l_debug_str := 'Returning S from validate_empl_Info.';
5658 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5659 	END IF;
5660    RETURN 'S'; -- Successfull validation
5661 EXCEPTION
5662 
5663    WHEN OTHERS THEN
5664    /* Debug */
5665 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5666 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Validate_Empl_Info';
5667 	  l_debug_str := 'Exception in validate_empl_Info. '||SQLERRM;
5668 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5669 	END IF;
5670 
5671       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5672          FND_MSg_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
5673       END IF;
5674 
5675       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5676       RETURN 'U';
5677 
5678 END Validate_Empl_Info;
5679 /******************************************************************
5680    Created By         : Arkadi Tereshenkov
5681 
5682    Date Created By    : Oct 14, 2002
5683 
5684    Purpose            : Get the person information on the student.
5685                         (IGS_SV_PERSONS).
5686 
5687    Remarks            :
5688 
5689    Change History
5690    Who                  When            What
5691 ------------------------------------------------------------------------
5692 
5693 ******************************************************************/
5694 FUNCTION Get_Issue_Info (
5695    p_data_rec  IN OUT NOCOPY  IGS_SV_PERSONS%ROWTYPE   -- Data record
5696 ) RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
5697 IS
5698 
5699    l_api_name CONSTANT  VARCHAR2(25) := 'Get_Issue_Info';
5700 
5701    CURSOR c_data_rec IS
5702      SELECT cr.batch_id               ,
5703             cr.person_id              ,
5704             cr.record_number          ,
5705             cr.form_id                ,
5706             decode(cr.print_form,'Y','1','0') print_form,
5707             cr.record_status          ,
5708             cr.person_number          ,
5709             cr.sevis_user_id          ,
5710             cr.issuing_reason         ,
5711             cr.curr_session_end_date  ,
5712             cr.next_session_start_date,
5713             cr.other_reason           ,
5714             cr.transfer_from_school   ,
5715             cr.ev_create_reason       ,
5716             cr.ev_form_number	      ,
5717 	    cr.no_show_flag	      ,
5718 	    cr.last_session_flag
5719        FROM igs_sv_persons cr
5720       WHERE cr.person_id = p_data_rec.person_id
5721         AND cr.batch_id IN
5722             (  SELECT max(mx.batch_id)
5723                  FROM igs_sv_persons mx
5724                 WHERE mx.person_id = p_data_rec.person_id
5725                       AND mx.record_status <> 'E'
5726             );
5727 
5728 BEGIN
5729 	/* Debug */
5730 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5731 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Issue_Info';
5732 	  l_debug_str := 'Entering Get_Issue_Info. p_data_rec.person_id is '||p_data_rec.person_id;
5733 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5734 	END IF;
5735 
5736    Put_Log_Msg(l_api_name||' begins ',0);
5737 
5738    OPEN c_data_rec;
5739    FETCH c_data_rec
5740     INTO p_data_rec.batch_id               ,
5741          p_data_rec.person_id              ,
5742          p_data_rec.record_number          ,
5743          p_data_rec.form_id                ,
5744          p_data_rec.print_form             ,
5745          p_data_rec.record_status          ,
5746          p_data_rec.person_number          ,
5747          p_data_rec.sevis_user_id          ,
5748          p_data_rec.issuing_reason         ,
5749          p_data_rec.curr_session_end_date  ,
5750          p_data_rec.next_session_start_date,
5751          p_data_rec.other_reason           ,
5752          p_data_rec.transfer_from_school   ,
5753          p_data_rec.ev_create_reason       ,
5754          p_data_rec.ev_form_number	   ,
5755 	 p_data_rec.no_show_flag	   ,
5756 	 p_data_rec.last_session_flag;
5757 
5758    IF c_data_rec%NOTFOUND THEN
5759 
5760       Put_Log_Msg('Record not found ',0);
5761       CLOSE c_data_rec;
5762       /* Debug */
5763 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5764 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Issue_Info';
5765 	  l_debug_str := 'Returning N from Get_Issue_Info.';
5766 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5767 	END IF;
5768       RETURN 'N';
5769 
5770    END IF;
5771 
5772    CLOSE c_data_rec;
5773 
5774    Put_Log_Msg(l_api_name||' ends S ',0);
5775 /* Debug */
5776 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5777 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Issue_Info';
5778 	  l_debug_str := 'Returning S from Get_Issue_Info.';
5779 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5780 	END IF;
5781    RETURN 'S';
5782 
5783 EXCEPTION
5784 
5785    WHEN FND_API.G_EXC_ERROR THEN
5786 
5787       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
5788 	/* Debug */
5789 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5790 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Issue_Info';
5791 	  l_debug_str := 'FND_API.G_EXC_ERROR in Get_Issue_Info. '||SQLERRM;
5792 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5793 	END IF;
5794 
5795       RETURN 'U';
5796 
5797    WHEN OTHERS THEN
5798 
5799       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5800          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
5801       END IF;
5802 	/* Debug */
5803 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5804 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Issue_Info';
5805 	  l_debug_str := 'Exception in Get_Issue_Info. '||SQLERRM;
5806 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5807 	END IF;
5808 
5809       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5810 
5811       RETURN  'U';
5812 
5813 END Get_Issue_Info;
5814 
5815 
5816 
5817 /******************************************************************
5818    Created By         : Arkadi Tereshenkov
5819 
5820    Date Created By    : Oct 14, 2002
5821 
5822    Purpose            : Get BIO Information for the student.
5823                         (IGS_SV_BIO_INFO).
5824 
5825    Remarks            :
5826 
5827    Change History
5828    Who                  When            What
5829 ------------------------------------------------------------------------
5830 
5831 ******************************************************************/
5832 FUNCTION  Get_Bio_Info (
5833    p_data_rec  IN OUT NOCOPY  IGS_SV_BIO_INFO%ROWTYPE   -- Data record
5834 ) RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
5835 IS
5836 
5837    l_api_name CONSTANT VARCHAR2(25) := 'Get_Bio_Info';
5838 
5839    CURSOR c_data_rec IS
5840      SELECT birth_date             ,
5841             birth_cntry_code       ,
5842             citizen_cntry_code     ,
5843             last_name              ,
5844             middle_name            ,
5845             first_name             ,
5846             suffix                 ,
5847             gender                 ,
5848             legal_res_cntry_code   ,
5849             position_code          ,
5850             commuter               ,
5851             remarks		   ,
5852 	    birth_cntry_resn_code  ,
5853 	    birth_city
5854        FROM igs_sv_bio_info  cr
5855       WHERE cr.person_id = p_data_rec.person_id
5856         AND cr.batch_id IN
5857             (  SELECT max(prs.batch_id)
5858                  FROM igs_sv_bio_info prs,
5859                       igs_sv_persons pr
5860                 WHERE prs.person_id = pr.person_id
5861                       AND prs.batch_id = pr.batch_id
5862                       AND pr.record_status <> 'E'
5863                       AND prs.person_id = p_data_rec.person_id
5864             );
5865 
5866 BEGIN
5867 	/* Debug */
5868 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5869 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Bio_Info';
5870 	  l_debug_str := 'Entering Get_Bio_Info. p_data_rec.person_id is '||p_data_rec.person_id;
5871 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5872 	END IF;
5873 
5874    Put_Log_Msg(l_api_name||' begins ',0);
5875 
5876    OPEN c_data_rec;
5877    FETCH c_data_rec
5878     INTO p_data_rec.birth_date             ,
5879          p_data_rec.birth_cntry_code       ,
5880          p_data_rec.citizen_cntry_code     ,
5881          p_data_rec.last_name              ,
5882          p_data_rec.middle_name            ,
5883          p_data_rec.first_name             ,
5884          p_data_rec.suffix                 ,
5885          p_data_rec.gender                 ,
5886          p_data_rec.legal_res_cntry_code   ,
5887          p_data_rec.position_code          ,
5888          p_data_rec.commuter               ,
5889          p_data_rec.remarks		   ,
5890 	 p_data_rec.birth_cntry_resn_code  ,
5891 	 p_data_rec.birth_city;
5892 
5893    IF c_data_rec%NOTFOUND THEN
5894 
5895       Put_Log_Msg('Record not found ',0);
5896       CLOSE c_data_rec;
5897       /* Debug */
5898 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5899 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Bio_Info';
5900 	  l_debug_str := 'Returning N from Get_Bio_Info.';
5901 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5902 	END IF;
5903       RETURN 'N';
5904 
5905    END IF;
5906 
5907    CLOSE c_data_rec;
5908 
5909    Put_Log_Msg(l_api_name||' ends S ',0);
5910     /* Debug */
5911 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5912 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Bio_Info';
5913 	  l_debug_str := 'Returning S from Get_Bio_Info.';
5914 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5915 	END IF;
5916 
5917    RETURN 'S';
5918 
5919 EXCEPTION
5920 
5921    WHEN FND_API.G_EXC_ERROR THEN
5922     /* Debug */
5923 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5924 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Bio_Info';
5925 	  l_debug_str := 'FND_API.G_EXC_ERROR in Get_Bio_Info. '||SQLERRM;
5926 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5927 	END IF;
5928 
5929       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
5930 
5931       RETURN 'U';
5932 
5933    WHEN OTHERS THEN
5934 
5935       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
5936          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
5937       END IF;
5938 	/* Debug */
5939 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5940 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Bio_Info';
5941 	  l_debug_str := 'Exception in Get_Bio_Info. '||SQLERRM;
5942 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5943 	END IF;
5944       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
5945 
5946       RETURN  'U';
5947 
5948 END Get_Bio_Info;
5949 
5950 
5951 /******************************************************************
5952    Created By         : Arkadi Tereshenkov
5953 
5954    Date Created By    : Oct 14, 2002
5955 
5956    Purpose            : Get other information on the student
5957                         (IGS_SV_OTH_INFO)
5958 
5959    Remarks            :
5960 
5961    Change History
5962    Who                  When            What
5963 ------------------------------------------------------------------------
5964 
5965 ******************************************************************/
5966 FUNCTION Get_Other_Info (
5967    p_data_rec  IN OUT NOCOPY  IGS_SV_OTH_INFO%ROWTYPE   -- Data record
5968 ) RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
5969 IS
5970 
5971    l_api_name CONSTANT VARCHAR2(25) := 'Get_Other_Info';
5972 
5973    CURSOR c_data_rec IS
5974      SELECT drivers_license        ,
5975             drivers_license_state  ,
5976             ssn                    ,
5977             tax_id
5978        FROM igs_sv_oth_info cr
5979       WHERE cr.person_id = p_data_rec.person_id
5980         AND cr.batch_id IN
5981             (  SELECT max(prs.batch_id)
5982                  FROM igs_sv_oth_info prs,
5983                      igs_sv_persons pr
5984                WHERE prs.person_id = pr.person_id
5985                      AND prs.batch_id = pr.batch_id
5986                      AND pr.record_status <> 'E'
5987                      AND prs.person_id = p_data_rec.person_id
5988             );
5989 
5990 BEGIN
5991 /* Debug */
5992 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
5993    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Other_Info';
5994    l_debug_str := 'Entering Get_Other_Info. p_data_rec.person_id is '||p_data_rec.person_id;
5995    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
5996 END IF;
5997 
5998    Put_Log_Msg(l_api_name||' begins ',0);
5999 
6000    OPEN c_data_rec;
6001    FETCH c_data_rec
6002     INTO p_data_rec.drivers_license        ,
6003          p_data_rec.drivers_license_state  ,
6004          p_data_rec.ssn                    ,
6005          p_data_rec.tax_id                 ;
6006 
6007    IF c_data_rec%NOTFOUND THEN
6008 
6009       Put_Log_Msg('Record not found ',0);
6010       CLOSE c_data_rec;
6011       /* Debug */
6012 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6013 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Other_Info';
6014 	   l_debug_str := 'Returning N from Get_Other_Info.';
6015 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6016 	END IF;
6017 
6018       RETURN 'N';
6019 
6020    END IF;
6021 
6022    CLOSE c_data_rec;
6023 
6024    Put_Log_Msg(l_api_name||' ends S ',0);
6025    /* Debug */
6026 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6027 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Other_Info';
6028 	   l_debug_str := 'Returning S from Get_Other_Info.';
6029 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6030 	END IF;
6031    RETURN 'S';
6032 
6033 EXCEPTION
6034 
6035    WHEN FND_API.G_EXC_ERROR THEN
6036 
6037       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6038       /* Debug */
6039 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6040 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Other_Info';
6041 	   l_debug_str := 'FND_API.G_EXC_ERROR in Get_Other_Info-- Returning U. '||SQLERRM;
6042 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6043 	END IF;
6044       RETURN 'U';
6045 
6046    WHEN OTHERS THEN
6047 
6048       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6049          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6050       END IF;
6051 
6052       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6053       /* Debug */
6054 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6055 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Other_Info';
6056 	   l_debug_str := 'Exception in Get_Other_Info-- Returning U. '||SQLERRM;
6057 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6058 	END IF;
6059       RETURN 'U';
6060 
6061       RETURN  'U';
6062 
6063 END Get_Other_Info;
6064 
6065 
6066 
6067 /******************************************************************
6068    Created By         : Arkadi Tereshenkov
6069 
6070    Date Created By    : Oct 14, 2002
6071 
6072    Purpose            : Get Site of activity information on the student
6073                         (IGS_SV_ADDRESSES).
6074 
6075    Remarks            :
6076 
6077    Change History
6078    Who                  When            What
6079 ------------------------------------------------------------------------
6080 
6081 ******************************************************************/
6082 FUNCTION Get_Address_Info (
6083    p_data_rec  IN OUT NOCOPY  IGS_SV_ADDRESSES%ROWTYPE   -- Data record
6084 )  RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
6085 IS
6086 
6087    l_api_name CONSTANT VARCHAR2(25) := 'Get_Address_Info';
6088 
6089    CURSOR c_data_rec IS
6090      SELECT action_type            ,
6091             address_type           ,
6092             address_line1          ,
6093             address_line2          ,
6094             city                   ,
6095             state                  ,
6096             postal_code            ,
6097             postal_routing_code    ,
6098             country_code           ,
6099             province               ,
6100             stdnt_valid_flag	   ,
6101 	    primary_flag           ,
6102 	    activity_site_cd   ,
6103 		remarks
6104        FROM igs_sv_addresses cr
6105       WHERE cr.person_id = p_data_rec.person_id
6106         AND cr.party_site_id = p_data_rec.party_site_id
6107         AND cr.batch_id IN
6108             (  SELECT max(prs.batch_id)
6109                  FROM igs_sv_addresses prs,
6110                       igs_sv_persons pr
6111                 WHERE prs.person_id = pr.person_id
6112                      AND prs.batch_id = pr.batch_id
6113                      AND pr.record_status <> 'E'
6114                      AND prs.person_id = p_data_rec.person_id
6115                      AND prs.party_site_id = p_data_rec.party_site_id
6116             );
6117 BEGIN
6118 
6119    Put_Log_Msg(l_api_name||' begins ',0);
6120    /* Debug */
6121 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6122    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Address_Info';
6123    l_debug_str := 'Entering Get_Address_Info. p_data_rec.party_site_id is '||p_data_rec.party_site_id;
6124    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6125 END IF;
6126 
6127    OPEN c_data_rec;
6128    FETCH c_data_rec
6129     INTO p_data_rec.action_type            ,
6130          p_data_rec.address_type           ,
6131          p_data_rec.address_line1          ,
6132          p_data_rec.address_line2          ,
6133          p_data_rec.city                   ,
6134          p_data_rec.state                  ,
6135          p_data_rec.postal_code            ,
6136          p_data_rec.postal_routing_code    ,
6137          p_data_rec.country_code           ,
6138          p_data_rec.province               ,
6139          p_data_rec.stdnt_valid_flag       ,
6140 	 p_data_rec.primary_flag	   ,
6141 	 p_data_rec.activity_site_cd  ,
6142 	 p_data_rec.remarks  ;
6143 
6144    IF c_data_rec%NOTFOUND THEN
6145 
6146       Put_Log_Msg('Record not found ',0);
6147       CLOSE c_data_rec;
6148       /* Debug */
6149 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6150 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Address_Info';
6151 	   l_debug_str := 'Returning N from Get_Address_Info.';
6152 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6153 	END IF;
6154 
6155       RETURN 'N';
6156 
6157    END IF;
6158 
6159    CLOSE c_data_rec;
6160 
6161    Put_Log_Msg(l_api_name||' ends S ',0);
6162    /* Debug */
6163 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6164 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Address_Info';
6165 	   l_debug_str := 'Returning S from Get_Address_Info.';
6166 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6167 	END IF;
6168    RETURN 'S';
6169 
6170 EXCEPTION
6171 
6172    WHEN FND_API.G_EXC_ERROR THEN
6173 
6174       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6175       /* Debug */
6176 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6177 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Address_Info';
6178 	   l_debug_str := 'FND_API.G_EXC_ERROR in Get_Address_Info. Returning U... '||SQLERRM;
6179 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6180 	END IF;
6181 
6182       RETURN 'U';
6183 
6184    WHEN OTHERS THEN
6185 
6186       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6187          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6188       END IF;
6189 
6190       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6191       /* Debug */
6192 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6193 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Address_Info';
6194 	   l_debug_str := 'EXCEPTION in Get_Address_Info. Returning U... '||SQLERRM;
6195 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6196 	END IF;
6197 
6198       RETURN  'U';
6199 
6200 END Get_Address_Info;
6201 
6202 
6203 
6204 /******************************************************************
6205    Created By         : Arkadi Tereshenkov
6206 
6207    Date Created By    : Oct 14, 2002
6208 
6209    Purpose            : Get Education information on the student
6210                         (IGS_SV_PRGMS_INFO).
6211 
6212    Remarks            :
6213 
6214    Change History
6215    Who                  When            What
6216 ------------------------------------------------------------------------
6217 
6218 ******************************************************************/
6219 FUNCTION Get_Edu_Info (
6220    p_data_rec  IN OUT NOCOPY  IGS_SV_PRGMS_INFO%ROWTYPE    -- Data record
6221 )  RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
6222 IS
6223 
6224    l_api_name CONSTANT VARCHAR2(25) := 'Get_Edu_Info';
6225 
6226    CURSOR c_data_rec IS
6227      SELECT position_code          ,
6228             subject_field_code     ,
6229             education_level        ,
6230             primary_major          ,
6231             secondary_major        ,
6232             minor                  ,
6233             length_of_study        ,
6234             prgm_start_date        ,
6235             prgm_end_date          ,
6236             english_reqd           ,
6237             english_reqd_met       ,
6238             not_reqd_reason        ,
6239             educ_lvl_remarks	   ,
6240 	    remarks
6241        FROM igs_sv_prgms_info cr
6242       WHERE cr.person_id = p_data_rec.person_id
6243         AND cr.prgm_action_type='EP'
6244         AND cr.batch_id IN
6245             (  SELECT max(prs.batch_id)
6246                  FROM igs_sv_prgms_info prs,
6247                       igs_sv_persons pr
6248                WHERE prs.person_id = pr.person_id
6249                      AND prs.batch_id = pr.batch_id
6250                      AND pr.record_status <> 'E'
6251                      AND prs.person_id        = p_data_rec.person_id
6252                      AND prs.prgm_action_type = 'EP'
6253             );
6254 
6255 BEGIN
6256 
6257    Put_Log_Msg(l_api_name||' begins ',0);
6258    /* Debug */
6259 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6260    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Edu_Info';
6261    l_debug_str := 'Entering Get_Edu_Info. p_data_rec.person_id is '||p_data_rec.person_id;
6262    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6263 END IF;
6264 
6265    OPEN c_data_rec;
6266    FETCH c_data_rec
6267     INTO p_data_rec.position_code          ,
6268          p_data_rec.subject_field_code     ,
6269          p_data_rec.education_level        ,
6270          p_data_rec.primary_major          ,
6271          p_data_rec.secondary_major        ,
6272          p_data_rec.minor                  ,
6273          p_data_rec.length_of_study        ,
6274          p_data_rec.prgm_start_date        ,
6275          p_data_rec.prgm_end_date          ,
6276          p_data_rec.english_reqd           ,
6277          p_data_rec.english_reqd_met       ,
6278          p_data_rec.not_reqd_reason        ,
6279          p_data_rec.educ_lvl_remarks       ,
6280 	 p_data_rec.remarks;
6281 
6282    IF c_data_rec%NOTFOUND THEN
6283 
6284       Put_Log_Msg('Record not found ',0);
6285       CLOSE c_data_rec;
6286       /* Debug */
6287 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6288 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Edu_Info';
6289 	  l_debug_str := 'Returning N from Get_Edu_Info.';
6290 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6291 	END IF;
6292       RETURN 'N';
6293 
6294    END IF;
6295 
6296    CLOSE c_data_rec;
6297 
6298    Put_Log_Msg(l_api_name||' ends S ',0);
6299 	/* Debug */
6300 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6301 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Edu_Info';
6302 	  l_debug_str := 'Returning S from Get_Edu_Info.';
6303 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6304 	END IF;
6305    RETURN 'S';
6306 
6307 EXCEPTION
6308 
6309    WHEN FND_API.G_EXC_ERROR THEN
6310 
6311       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6312 	/* Debug */
6313 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6314 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Edu_Info';
6315 	  l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Get_Edu_Info. '||SQLERRM;
6316 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6317 	END IF;
6318 
6319       RETURN 'U';
6320 
6321    WHEN OTHERS THEN
6322 
6323       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6324          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6325       END IF;
6326 
6327       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6328       /* Debug */
6329 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6330 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Edu_Info';
6331 	  l_debug_str := 'EXCEPTION: Returning U from Get_Edu_Info. '||SQLERRM;
6332 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6333 	END IF;
6334       RETURN  'U';
6335 
6336 END Get_Edu_Info;
6337 
6338 
6339 
6340 
6341 /******************************************************************
6342    Created By         : Arkadi Tereshenkov
6343 
6344    Date Created By    : Oct 14, 2002
6345 
6346    Purpose            : Get Finance information on the student
6347                         (IGS_SV_FINANCE_INFO)
6348 
6349    Remarks            :
6350 
6351    Change History
6352    Who                  When            What
6353 ------------------------------------------------------------------------
6354 
6355 ******************************************************************/
6356 FUNCTION Get_Finance_Info (
6357    p_data_rec  IN OUT NOCOPY  IGS_SV_FINANCE_INFO%ROWTYPE    -- Data record
6358 )  RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
6359 IS
6360 
6361    l_api_name CONSTANT VARCHAR2(25) := 'Get_Finance_Info';
6362 
6363    CURSOR c_data_rec IS
6364      SELECT acad_term_length       ,
6365             tuition                ,
6366             living_exp             ,
6367             personal_funds         ,
6368             dependent_exp          ,
6369             other_exp              ,
6370             other_exp_desc         ,
6371             school_funds           ,
6372             school_funds_desc      ,
6373             other_funds            ,
6374             other_funds_desc       ,
6375             program_sponsor        ,
6376             govt_org1              ,
6377             govt_org2              ,
6378             govt_org1_code         ,
6379             govt_org2_code         ,
6380             intl_org1              ,
6381             intl_org2              ,
6382             intl_org1_code         ,
6383             intl_org2_code         ,
6384             ev_govt                ,
6385             bi_natnl_com           ,
6386             other_org              ,
6387             remarks		   ,
6388 	    govt_org1_othr_name    ,
6389 	    govt_org2_othr_name    ,
6390             intl_org1_othr_name    ,
6391             intl_org2_othr_name    ,
6392 	    other_govt_name	   ,
6393 	    empl_funds
6394        FROM igs_sv_finance_info cr
6395       WHERE cr.person_id = p_data_rec.person_id
6396         AND cr.batch_id IN
6397             (  SELECT max(prs.batch_id)
6398                  FROM igs_sv_finance_info prs,
6399                      igs_sv_persons pr
6400                WHERE prs.person_id = pr.person_id
6401                      AND prs.batch_id = pr.batch_id
6402                      AND pr.record_status <> 'E'
6403                      AND prs.person_id = p_data_rec.person_id
6404             );
6405 BEGIN
6406 
6407    Put_Log_Msg(l_api_name||' begins ',0);
6408 	/* Debug */
6409 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6410 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Finance_Info';
6411 	   l_debug_str := 'Entering Get_Finance_Info. p_data_rec.person_id is '||p_data_rec.person_id;
6412 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6413 	END IF;
6414 
6415    OPEN c_data_rec;
6416    FETCH c_data_rec
6417     INTO p_data_rec.acad_term_length       ,
6418          p_data_rec.tuition                ,
6419          p_data_rec.living_exp             ,
6420          p_data_rec.personal_funds         ,
6421          p_data_rec.dependent_exp          ,
6422          p_data_rec.other_exp              ,
6423          p_data_rec.other_exp_desc         ,
6424          p_data_rec.school_funds           ,
6425          p_data_rec.school_funds_desc      ,
6426          p_data_rec.other_funds            ,
6427          p_data_rec.other_funds_desc       ,
6428          p_data_rec.program_sponsor        ,
6429          p_data_rec.govt_org1              ,
6430          p_data_rec.govt_org2              ,
6431          p_data_rec.govt_org1_code         ,
6432          p_data_rec.govt_org2_code         ,
6433          p_data_rec.intl_org1              ,
6434          p_data_rec.intl_org2              ,
6435          p_data_rec.intl_org1_code         ,
6436          p_data_rec.intl_org2_code         ,
6437          p_data_rec.ev_govt                ,
6438          p_data_rec.bi_natnl_com           ,
6439          p_data_rec.other_org              ,
6440          p_data_rec.remarks                ,
6441 	 p_data_rec.govt_org1_othr_name    ,
6442 	 p_data_rec.govt_org2_othr_name    ,
6443          p_data_rec.intl_org1_othr_name    ,
6444          p_data_rec.intl_org2_othr_name    ,
6445 	 p_data_rec.other_govt_name	   ,
6446 	 p_data_rec.empl_funds	;
6447 
6448    IF c_data_rec%NOTFOUND THEN
6449 
6450       Put_Log_Msg('Record not found ',0);
6451       CLOSE c_data_rec;
6452       /* Debug */
6453 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6454 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Finance_Info';
6455 	  l_debug_str := 'Returning N from Get_Finance_Info.';
6456 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6457 	END IF;
6458       RETURN 'N';
6459 
6460    END IF;
6461 
6462    CLOSE c_data_rec;
6463 
6464    Put_Log_Msg(l_api_name||' ends S ',0);
6465 	/* Debug */
6466 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6467 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Finance_Info';
6468 	  l_debug_str := 'Returning S from Get_Finance_Info.';
6469 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6470 	END IF;
6471    RETURN 'S';
6472 
6473 EXCEPTION
6474 
6475    WHEN FND_API.G_EXC_ERROR THEN
6476 
6477       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6478       /* Debug */
6479 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6480 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Finance_Info';
6481 	  l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Get_Finance_Info. '||SQLERRM;
6482 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6483 	END IF;
6484       RETURN 'U';
6485 
6486    WHEN OTHERS THEN
6487 
6488       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6489          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6490       END IF;
6491 
6492       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6493       /* Debug */
6494 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6495 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Finance_Info';
6496 	  l_debug_str := 'EXCEPTION: Returning U from Get_Finance_Info. '||SQLERRM;
6497 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6498 	END IF;
6499       RETURN  'U';
6500 
6501 END Get_Finance_Info;
6502 
6503 
6504 
6505 /******************************************************************
6506    Created By         : Arkadi Tereshenkov
6507 
6508    Date Created By    : Oct 14, 2002
6509 
6510    Purpose            : Get the student dependent information.
6511                         (IGS_SV_DEPDNT_INFO)
6512 
6513    Remarks            :
6514 
6515    Change History
6516    Who                  When            What
6517 ------------------------------------------------------------------------
6518 
6519 ******************************************************************/
6520 FUNCTION Get_Dependent_Info (
6521    p_data_rec  IN OUT NOCOPY  IGS_SV_DEPDNT_INFO%ROWTYPE     -- Data record
6522 )   RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
6523 IS
6524 
6525    l_api_name CONSTANT VARCHAR2(25) := 'Get_Dependent_Info';
6526 
6527    CURSOR c_data_rec IS
6528      SELECT depdnt_action_type       ,
6529             depdnt_sevis_id        ,
6530             last_name              ,
6531             first_name             ,
6532             middle_name            ,
6533             suffix                 ,
6534             birth_date             ,
6535             gender                 ,
6536             birth_cntry_code       ,
6537             citizen_cntry_code     ,
6538             relationship           ,
6539             termination_reason     ,
6540             relationship_remarks   ,
6541             perm_res_cntry_code    ,
6542             termination_effect_date,
6543             remarks		   ,
6544 	    birth_cntry_resn_code  ,
6545 	    VISA_TYPE
6546        FROM igs_sv_depdnt_info cr
6547       WHERE cr.person_id = p_data_rec.person_id
6548         AND cr.depdnt_id = p_data_rec.depdnt_id
6549         AND cr.batch_id IN
6550             (  SELECT max(prs.batch_id)
6551                  FROM igs_sv_depdnt_info prs,
6552                      igs_sv_persons pr
6553                WHERE prs.person_id = pr.person_id
6554                      AND prs.batch_id = pr.batch_id
6555                      AND pr.record_status <> 'E'
6556                      AND prs.person_id = p_data_rec.person_id
6557                      AND prs.depdnt_id = p_data_rec.depdnt_id
6558             );
6559 
6560 BEGIN
6561    /* Debug */
6562 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6563 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Dependent_Info';
6564 	   l_debug_str := 'Entering Get_Dependent_Info. p_data_rec.person_id is '||p_data_rec.person_id||' and p_data_rec.depdnt_id is '||p_data_rec.depdnt_id;
6565 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6566 	END IF;
6567    Put_Log_Msg(l_api_name||' begins ',0);
6568 
6569    OPEN c_data_rec;
6570    FETCH c_data_rec
6571     INTO p_data_rec.depdnt_action_type       ,
6572          p_data_rec.depdnt_sevis_id        ,
6573          p_data_rec.last_name              ,
6574          p_data_rec.first_name             ,
6575          p_data_rec.middle_name            ,
6576          p_data_rec.suffix                 ,
6577          p_data_rec.birth_date             ,
6578          p_data_rec.gender                 ,
6579          p_data_rec.birth_cntry_code       ,
6580          p_data_rec.citizen_cntry_code     ,
6581          p_data_rec.relationship           ,
6582          p_data_rec.termination_reason     ,
6583          p_data_rec.relationship_remarks   ,
6584          p_data_rec.perm_res_cntry_code    ,
6585          p_data_rec.termination_effect_date,
6586          p_data_rec.remarks		   ,
6587 	 p_data_rec.birth_cntry_resn_code  ,
6588 	 p_data_rec.VISA_TYPE              ;
6589 
6590    IF c_data_rec%NOTFOUND THEN
6591 
6592       Put_Log_Msg('Record not found ',0);
6593       CLOSE c_data_rec;
6594       /* Debug */
6595 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6596 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Dependent_Info';
6597 	  l_debug_str := 'Returning N from Get_Dependent_Info.';
6598 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6599 	END IF;
6600       RETURN 'N';
6601 
6602    END IF;
6603 
6604    CLOSE c_data_rec;
6605 
6606    Put_Log_Msg(l_api_name||' ends S ',0);
6607    /* Debug */
6608 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6609 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Dependent_Info';
6610 	  l_debug_str := 'Returning S from Get_Dependent_Info.';
6611 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6612 	END IF;
6613    RETURN 'S';
6614 
6615 EXCEPTION
6616 
6617    WHEN FND_API.G_EXC_ERROR THEN
6618       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6619       /* Debug */
6620 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6621 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Dependent_Info';
6622 	  l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Get_Dependent_Info. '||SQLERRM;
6623 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6624 	END IF;
6625       RETURN 'U';
6626 
6627    WHEN OTHERS THEN
6628       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6629          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6630       END IF;
6631 
6632       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6633       /* Debug */
6634 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6635 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Dependent_Info';
6636 	  l_debug_str := 'EXCEPTION: Returning U from Get_Dependent_Info. '||SQLERRM;
6637 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6638 	END IF;
6639       RETURN  'U';
6640 
6641 END Get_Dependent_Info;
6642 
6643 
6644 
6645 /******************************************************************
6646    Created By         : Arkadi Tereshenkov
6647 
6648    Date Created By    : Oct 14, 2002
6649 
6650    Purpose            : Get the legal information for the student.
6651                         (IGS_SV_LEGAL_INFO).
6652 
6653    Remarks            :
6654 
6655    Change History
6656    Who                  When            What
6657 ------------------------------------------------------------------------
6658 
6659 ******************************************************************/
6660 FUNCTION Get_Legal_Info (
6661    p_data_rec   IN OUT NOCOPY  IGS_SV_LEGAL_INFO%ROWTYPE    -- Data record
6662 )   RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
6663 IS
6664    l_api_name CONSTANT VARCHAR2(25) := 'Get_Legal_Info';
6665 
6666    CURSOR c_data_rec IS
6667      SELECT psprt_number           ,
6668             psprt_issuing_cntry_code,
6669             psprt_exp_date         ,
6670             visa_number            ,
6671             visa_issuing_post      ,
6672             visa_issuing_cntry_code,
6673             visa_expiration_date   ,
6674             i94_number             ,
6675             port_of_entry          ,
6676             date_of_entry          ,
6677             remarks		   ,
6678 	    visa_issue_date
6679        FROM igs_sv_legal_info cr
6680       WHERE cr.person_id = p_data_rec.person_id
6681         AND cr.batch_id IN
6682             (  SELECT max(prs.batch_id)
6683                  FROM igs_sv_legal_info prs,
6684                      igs_sv_persons pr
6685                WHERE prs.person_id = pr.person_id
6686                      AND prs.batch_id = pr.batch_id
6687                      AND pr.record_status <> 'E'
6688                      AND prs.person_id = p_data_rec.person_id
6689             );
6690 
6691 BEGIN
6692 
6693    Put_Log_Msg(l_api_name||' begins ',0);
6694 	/* Debug */
6695 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6696 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Legal_Info';
6697 	   l_debug_str := 'Entering Get_Legal_Info. p_data_rec.person_id is '||p_data_rec.person_id;
6698 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6699 	END IF;
6700 
6701    OPEN c_data_rec;
6702    FETCH c_data_rec
6703     INTO p_data_rec.psprt_number           ,
6704          p_data_rec.psprt_issuing_cntry_code,
6705          p_data_rec.psprt_exp_date         ,
6706          p_data_rec.visa_number            ,
6707          p_data_rec.visa_issuing_post      ,
6708          p_data_rec.visa_issuing_cntry_code,
6709          p_data_rec.visa_expiration_date   ,
6710          p_data_rec.i94_number             ,
6711          p_data_rec.port_of_entry          ,
6712          p_data_rec.date_of_entry          ,
6713          p_data_rec.remarks                ,
6714 	 p_data_rec.visa_issue_date;
6715 
6716    IF c_data_rec%NOTFOUND THEN
6717 
6718       Put_Log_Msg('Record not found ',0);
6719       CLOSE c_data_rec;
6720       /* Debug */
6721 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6722 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Legal_Info';
6723 	   l_debug_str := 'Returning N from Get_Legal_Info.';
6724 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6725 	END IF;
6726 	g_legal_status := 'NEW';
6727       RETURN 'N';
6728 
6729    END IF;
6730 
6731    CLOSE c_data_rec;
6732    g_legal_status := 'EDIT';
6733    Put_Log_Msg(l_api_name||' ends S ',0);
6734 	/* Debug */
6735 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6736 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Legal_Info';
6737 	   l_debug_str := 'Returning S from Get_Legal_Info.';
6738 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6739 	END IF;
6740 
6741    RETURN 'S';
6742 
6743 EXCEPTION
6744 
6745    WHEN FND_API.G_EXC_ERROR THEN
6746 
6747       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
6748       /* Debug */
6749 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6750 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Legal_Info';
6751 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Get_Legal_Info. '||SQLERRM;
6752 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6753 	END IF;
6754       RETURN 'U';
6755 
6756    WHEN OTHERS THEN
6757 
6758       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6759          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6760       END IF;
6761 
6762       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6763       /* Debug */
6764 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6765 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_Legal_Info';
6766 	   l_debug_str := 'EXCEPTION: Returning U from Get_Legal_Info. '||SQLERRM;
6767 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6768 	END IF;
6769       RETURN  'U';
6770 
6771 END Get_Legal_Info;
6772 
6773 
6774 /******************************************************************
6775    Created By         : Arkadi Tereshenkov
6776 
6777    Date Created By    : Oct 14, 2002
6778 
6779    Purpose            : Updating of person issue information block
6780                         (IGS_SV_PERSONS).
6781 
6782    Remarks            :
6783 
6784    Change History
6785    Who                  When            What
6786 ------------------------------------------------------------------------
6787 
6788 ******************************************************************/
6789 PROCEDURE Update_Issue_Info (
6790    p_data_rec  IN IGS_SV_PERSONS%ROWTYPE   -- Data record
6791 )
6792 IS
6793 
6794    l_api_name CONSTANT VARCHAR(30) := 'Update_Issue_Info';
6795 
6796 BEGIN
6797 /* Debug */
6798 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6799    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Issue_Info';
6800    l_debug_str := 'Entering Update_Issue_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
6801    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6802 END IF;
6803 
6804    UPDATE IGS_SV_PERSONS
6805       SET issuing_reason         = p_data_rec.issuing_reason,
6806           curr_session_end_date  = p_data_rec.curr_session_end_date ,
6807           next_session_start_date= p_data_rec.next_session_start_date ,
6808           other_reason           = p_data_rec.other_reason ,
6809           transfer_from_school   = p_data_rec.transfer_from_school ,
6810           ev_create_reason       = p_data_rec.ev_create_reason ,
6811           ev_form_number         = p_data_rec.ev_form_number,
6812           init_prgm_start_date   = p_data_rec.init_prgm_start_date,
6813 	  no_show_flag		 = p_data_rec.no_show_flag,
6814 	  last_session_flag	 = p_data_rec.last_session_flag,
6815 	  adjudicated_flag       = p_data_rec.adjudicated_flag
6816     WHERE batch_id = p_data_rec.batch_id
6817       AND person_id = p_data_rec.person_id
6818       AND record_number = p_data_rec.record_number;
6819 
6820 EXCEPTION
6821 
6822   WHEN OTHERS THEN
6823 
6824       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6825          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6826       END IF;
6827 	/* Debug */
6828 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6829 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Issue_Info';
6830 	   l_debug_str := 'EXCEPTION in Update_Issue_Info. '||SQLERRM;
6831 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6832 	END IF;
6833       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6834 
6835       RAISE;
6836 
6837 END Update_Issue_Info;
6838 
6839 
6840 
6841 /******************************************************************
6842    Created By         : Arkadi Tereshenkov
6843 
6844    Date Created By    : Oct 14, 2002
6845 
6846    Purpose            : Insert Bio information block.
6847                         (IGS_SV_BIO_INFO).
6848 
6849    Remarks            :
6850 
6851    Change History
6852    Who                  When            What
6853 ------------------------------------------------------------------------
6854 
6855 ******************************************************************/
6856 PROCEDURE Insert_Bio_Info(
6857    p_data_rec  IN  IGS_SV_BIO_INFO%ROWTYPE    -- Data record
6858 )
6859 IS
6860    l_api_name CONSTANT VARCHAR(30) := 'Insert_Bio_Info';
6861 
6862 BEGIN
6863 /* Debug */
6864 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6865    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Bio_Info';
6866    l_debug_str := 'Entering Insert_Bio_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
6867    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6868 END IF;
6869     Insert_Summary_Info(p_data_rec.batch_id,
6870 		       p_data_rec.person_id,
6871 		       g_person_status,
6872 		       'SV_BIO',
6873 		       'SEND',
6874 		       'IGS_SV_BIO_INFO',
6875 		       '');
6876    INSERT INTO IGS_SV_BIO_INFO (
6877        batch_id               ,
6878        person_id              ,
6879        print_form             ,
6880        birth_date             ,
6881        birth_cntry_code       ,
6882        birth_city             ,
6883        citizen_cntry_code     ,
6884        last_name              ,
6885        middle_name            ,
6886        first_name             ,
6887        suffix                 ,
6888        gender                 ,
6889        legal_res_cntry_code   ,
6890        position_code          ,
6891        category_code          ,
6892        remarks                ,
6893        commuter               ,
6894        visa_type              ,
6895        creation_date          ,
6896        created_by             ,
6897        last_updated_by        ,
6898        last_update_date       ,
6899        last_update_login      ,
6900        birth_cntry_resn_code
6901      ) VALUES
6902      (
6903        p_data_rec.batch_id               ,
6904        p_data_rec.person_id              ,
6905        p_data_rec.print_form             ,
6906        p_data_rec.birth_date             ,
6907        p_data_rec.birth_cntry_code       ,
6908        p_data_rec.birth_city             ,
6909        p_data_rec.citizen_cntry_code     ,
6910        p_data_rec.last_name              ,
6911        p_data_rec.middle_name            ,
6912        p_data_rec.first_name             ,
6913        p_data_rec.suffix                 ,
6914        p_data_rec.gender                 ,
6915        p_data_rec.legal_res_cntry_code   ,
6916        p_data_rec.position_code          ,
6917        p_data_rec.category_code          ,
6918        p_data_rec.remarks                ,
6919        p_data_rec.commuter               ,
6920        p_data_rec.visa_type              ,
6921        p_data_rec.creation_date          ,
6922        p_data_rec.created_by             ,
6923        p_data_rec.last_updated_by        ,
6924        p_data_rec.last_update_date       ,
6925        p_data_rec.last_update_login      ,
6926        p_data_rec.birth_cntry_resn_code
6927      );
6928 
6929 EXCEPTION
6930 
6931   WHEN OTHERS THEN
6932       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
6933          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
6934       END IF;
6935       /* Debug */
6936 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6937 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Bio_Info';
6938 	   l_debug_str := 'EXCEPTION in Insert_Bio_Info. '||SQLERRM;
6939 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6940 	END IF;
6941       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
6942       RAISE;
6943 
6944 END Insert_Bio_Info;
6945 
6946 
6947 
6948 /******************************************************************
6949    Created By         : Arkadi Tereshenkov
6950 
6951    Date Created By    : Oct 14, 2002
6952 
6953    Purpose            : Insert Other information block
6954                         (IGS_SV_OTH_INFO)
6955 
6956    remarks            :
6957 
6958    Change History
6959    Who                  When            What
6960 ------------------------------------------------------------------------
6961 
6962 ******************************************************************/
6963 PROCEDURE Insert_Other_Info (
6964    p_data_rec  IN IGS_SV_OTH_INFO%ROWTYPE    -- Data record
6965 )
6966 IS
6967 
6968    l_api_name CONSTANT VARCHAR(30) := 'Insert_Other_Info';
6969 
6970 BEGIN
6971    /* Debug */
6972 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
6973    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Other_Info';
6974    l_debug_str := 'Entering Insert_Other_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
6975    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
6976 END IF;
6977    Insert_Summary_Info(p_data_rec.batch_id,
6978 		       p_data_rec.person_id,
6979 		       g_person_status,
6980 		       'SV_OTHER',
6981 		       'SEND',
6982 		       'IGS_SV_OTH_INFO',
6983 		       '');
6984 
6985    INSERT INTO IGS_SV_OTH_INFO (
6986        batch_id               ,
6987        person_id              ,
6988        print_form             ,
6989        drivers_license        ,
6990        drivers_license_state  ,
6991        ssn                    ,
6992        tax_id                 ,
6993        creation_date          ,
6994        created_by             ,
6995        last_updated_by        ,
6996        last_update_date       ,
6997        last_update_login
6998       ) VALUES
6999       (p_data_rec.batch_id               ,
7000        p_data_rec.person_id              ,
7001        p_data_rec.print_form             ,
7002        p_data_rec.drivers_license        ,
7003        p_data_rec.drivers_license_state  ,
7004        p_data_rec.ssn                    ,
7005        p_data_rec.tax_id                 ,
7006        p_data_rec.creation_date          ,
7007        p_data_rec.created_by             ,
7008        p_data_rec.last_updated_by        ,
7009        p_data_rec.last_update_date       ,
7010        p_data_rec.last_update_login
7011       );
7012 
7013 EXCEPTION
7014 
7015   WHEN OTHERS THEN
7016       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7017          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7018       END IF;
7019 
7020 /* Debug */
7021 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7022    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Other_Info';
7023    l_debug_str := 'EXCEPTION in Insert_Other_Info. '||SQLERRM;
7024    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7025 END IF;
7026       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7027 
7028       RAISE;
7029 
7030 END Insert_Other_Info;
7031 
7032 
7033 
7034 /******************************************************************
7035    Created By         : Arkadi Tereshenkov
7036 
7037    Date Created By    : Oct 14, 2002
7038 
7039    Purpose            : Insert site of activity information.
7040                         (IGS_SV_ADDRESSES).
7041 
7042    Remarks            :
7043 
7044    Change History
7045    Who                  When            What
7046 ------------------------------------------------------------------------
7047 
7048 ******************************************************************/
7049 PROCEDURE Insert_Address_Info (
7050    p_addr_type IN VARCHAR,  -- Address type bein inserted- US, Foreign, Site of Activity
7051    p_data_rec  IN  g_address_rec_type ,  -- Data record
7052    p_records  IN  NUMBER   -- number of addressees found
7053 )
7054 IS
7055    l_api_name CONSTANT VARCHAR(30) := 'Insert_Address_Info';
7056    l_count  NUMBER(10);
7057    l_action VARCHAR2(10);
7058    l_btch_id NUMBER(14);
7059    l_remarks  VARCHAR2(500);
7060 BEGIN
7061 /* Debug */
7062 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7063    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Address_Info';
7064    l_debug_str := 'Entering Insert_Address_Info. Number of records: '||p_records;
7065    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7066 END IF;
7067 
7068    FOR l_count IN 1..p_records LOOP
7069      IF p_data_rec(l_count).batch_id IS NOT NULL THEN
7070 
7071        IF p_addr_type = 'SOA' THEN
7072 	   IF g_person_status = 'NEW' THEN
7073                  l_action := g_person_status;
7074 	   ELSIF p_data_rec(l_count).action_type = 'A' THEN
7075 	         l_action := 'ADD';
7076 	   ELSIF p_data_rec(l_count).action_type = 'D' THEN
7077 	         l_action := 'DELETE';
7078 	   ELSE
7079 	         l_action := 'EDIT';
7080 	   END IF;
7081 	   l_remarks := p_data_rec(l_count).remarks;
7082 	   l_btch_id := chk_mut_exclusive(p_data_rec(l_count).batch_id,
7083 				       p_data_rec(l_count).person_id,
7084 				       l_action,
7085 				       'SV_SOA');
7086 
7087 	   Insert_Summary_Info(l_btch_id,
7088 				       p_data_rec(l_count).person_id,
7089 				       l_action,
7090 				       'SV_SOA',
7091 				       'SEND',
7092 				       'IGS_SV_ADDRESSES',
7093 				       p_data_rec(l_count).party_site_id);
7094        ELSE
7095           l_remarks := null;
7096           l_btch_id := p_data_rec(l_count).batch_id;
7097 	  IF p_addr_type = 'US' THEN
7098 		Insert_Summary_Info(l_btch_id,
7099 		       p_data_rec(l_count).person_id,
7100 		       g_person_status,
7101 		       'SV_US_ADDR',
7102 		       'SEND',
7103 		       'IGS_SV_ADDRESSES',
7104 		       p_data_rec(l_count).party_site_id);
7105           ELSE
7106 	         Insert_Summary_Info(l_btch_id,
7107 		       p_data_rec(l_count).person_id,
7108 		       g_person_status,
7109 		       'SV_F_ADDR',
7110 		       'SEND',
7111 		       'IGS_SV_ADDRESSES',
7112 		       p_data_rec(l_count).party_site_id);
7113           END IF;
7114        END IF;
7115 
7116        INSERT INTO igs_sv_addresses (
7117        batch_id               ,
7118        person_id              ,
7119        party_site_id          ,
7120        print_form             ,
7121        address_type           ,
7122        address_line1          ,
7123        address_line2          ,
7124        city                   ,
7125        state                  ,
7126        postal_code            ,
7127        postal_routing_code    ,
7128        country_code           ,
7129        province               ,
7130        stdnt_valid_flag       ,
7131        creation_date          ,
7132        created_by             ,
7133        last_updated_by        ,
7134        last_update_date       ,
7135        last_update_login      ,
7136        action_type	      ,
7137        primary_flag           ,
7138        activity_site_cd       ,
7139        remarks
7140      ) VALUES (
7141        l_btch_id              ,
7142        p_data_rec(l_count).person_id              ,
7143        p_data_rec(l_count).party_site_id          ,
7144        p_data_rec(l_count).print_form             ,
7145        p_data_rec(l_count).address_type           ,
7146        p_data_rec(l_count).address_line1          ,
7147        p_data_rec(l_count).address_line2          ,
7148        p_data_rec(l_count).city                   ,
7149        p_data_rec(l_count).state                  ,
7150        p_data_rec(l_count).postal_code            ,
7151        p_data_rec(l_count).postal_routing_code    ,
7152        p_data_rec(l_count).country_code           ,
7153        p_data_rec(l_count).province               ,
7154        p_data_rec(l_count).stdnt_valid_flag       ,
7155        p_data_rec(l_count).creation_date          ,
7156        p_data_rec(l_count).created_by             ,
7157        p_data_rec(l_count).last_updated_by        ,
7158        p_data_rec(l_count).last_update_date       ,
7159        p_data_rec(l_count).last_update_login	  ,
7160        p_data_rec(l_count).action_type		  ,
7161        p_data_rec(l_count).primary_flag           ,
7162        p_data_rec(l_count).activity_site_cd       ,
7163        l_remarks
7164      );
7165      END IF;
7166 
7167    END LOOP;
7168 
7169 EXCEPTION
7170 
7171   WHEN OTHERS THEN
7172       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7173          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7174       END IF;
7175 
7176 	/* Debug */
7177 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7178 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Address_Info';
7179 	   l_debug_str := 'EXCEPTION in Insert_Address_Info. '||SQLERRM;
7180 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7181 	END IF;
7182       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7183       RAISE;
7184 
7185 END Insert_Address_Info;
7186 
7187 
7188 
7189 /******************************************************************
7190    Created By         : Arkadi Tereshenkov
7191 
7192    Date Created By    : Oct 14, 2002
7193 
7194    Purpose            : Insert education information on the student
7195                         (IGS_SV_PRGMS_INFO).
7196 
7197    Remarks            :
7198 
7199    Change History
7200    Who                  When            What
7201 ------------------------------------------------------------------------
7202 
7203 ******************************************************************/
7204 PROCEDURE Insert_Edu_Info (
7205    p_edu_type  IN VARCHAR2,
7206    p_data_rec  IN IGS_SV_PRGMS_INFO%ROWTYPE,
7207    p_auth_drp_data_rec IN IGS_SV_PRGMS_INFO%ROWTYPE
7208 )
7209 IS
7210 
7211    l_api_name CONSTANT VARCHAR(30) := 'Insert_Edu_Info';
7212    l_count  NUMBER(10);
7213    l_action VARCHAR2(30);
7214    l_btch_id NUMBER(14);
7215    l_tag_code VARCHAR2(30);
7216    l_edu_status  VARCHAR2(10);
7217    l_cur_rec  IGS_SV_PRGMS_INFO%ROWTYPE;
7218 
7219    l_education_level            igs_pe_nonimg_form.education_level%TYPE;
7220    l_primary_major              igs_pe_nonimg_form.primary_major%TYPE;
7221    l_secondary_major            igs_pe_nonimg_form.secondary_major%TYPE;
7222    l_minor                      igs_pe_nonimg_form.minor%TYPE;
7223    l_length_of_study            igs_pe_nonimg_form.length_of_study%TYPE;
7224    l_prgm_start_date            igs_Sv_prgms_info.prgm_start_date%TYPE;
7225    l_prgm_end_date              igs_Sv_prgms_info.prgm_end_date%TYPE;
7226    l_english_reqd               igs_pe_nonimg_form.english_reqd%TYPE;
7227    l_english_reqd_met           igs_pe_nonimg_form.english_reqd_met%TYPE;
7228    l_not_reqd_reason            igs_pe_nonimg_form.not_reqd_reason%TYPE;
7229    l_educ_lvl_remarks           igs_pe_nonimg_form.educ_lvl_remarks%TYPE;
7230    l_position_code              igs_pe_ev_form.position_code%TYPE;
7231    l_subject_field_code         igs_pe_ev_form.subject_field_code%TYPE;
7232    l_remarks			igs_pe_ev_form.subject_field_remarks%TYPE;
7233 
7234 BEGIN
7235      /* Debug */
7236     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7237 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Edu_Info';
7238 	l_debug_str := 'Entering Insert_Edu_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
7239 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7240     END IF;
7241        l_position_code         := p_data_rec.position_code;
7242        l_subject_field_code    := p_data_rec.subject_field_code;
7243        l_remarks               := p_data_rec.remarks;
7244        l_education_level       := p_data_rec.education_level;
7245        l_primary_major         := p_data_rec.primary_major;
7246        l_secondary_major       := p_data_rec.secondary_major;
7247        l_educ_lvl_remarks      := p_data_rec.educ_lvl_remarks;
7248        l_minor		       := p_data_rec.minor;
7249        l_length_of_study       := p_data_rec.length_of_study;
7250        l_english_reqd	       := p_data_rec.english_reqd;
7251        l_english_reqd_met      := p_data_rec.english_reqd_met;
7252        l_not_reqd_reason       := p_data_rec.not_reqd_reason;
7253        l_prgm_start_date       := p_data_rec.prgm_start_date;
7254        l_prgm_end_date         := p_data_rec.prgm_end_date;
7255 
7256        /* Debug */
7257     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7258 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Edu_Info';
7259 	l_debug_str := 'After assigning values to local variables';
7260 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7261     END IF;
7262     -- Nonimg action types:
7263      -- C  Complete Program
7264      -- T  Terminate Program
7265      -- D  Defer program
7266      -- E  Extend program
7267     -- EV action types:
7268      -- AP  Amend Program
7269      -- AF  Approve Failure
7270      -- CF  Conclude Failure
7271      -- EE Exchange Visitor Extension
7272      -- ED End Program
7273      -- EM Matriculation
7274      -- EF Extend Failure
7275      -- OI Other Infraction
7276      -- TR Terminate Exchange Visitor
7277      IF p_edu_type = 'PRGM' THEN
7278 	   IF p_data_rec.prgm_action_type = 'C' THEN
7279 	      l_action := 'COMPLETE';
7280 	      l_tag_code := 'SV_STATUS';
7281 	   ELSIF p_data_rec.prgm_action_type = 'CE' THEN
7282 	      l_action := 'CANCEL_EXTENSION';
7283 	      l_tag_code := 'SV_PRGMS';
7284 	   ELSIF p_data_rec.prgm_action_type = 'T' OR p_data_rec.prgm_action_type = 'TR' THEN
7285 	      l_action := 'TERMINATE';
7286 	      l_tag_code := 'SV_STATUS';
7287 	   ELSIF p_data_rec.prgm_action_type = 'D' THEN
7288 	      l_action := 'DEFER';
7289 	      l_tag_code := 'SV_PRGMS';
7290 	   ELSIF p_data_rec.prgm_action_type = 'E' OR p_data_rec.prgm_action_type = 'EE' THEN
7291 	      l_action := 'EXTENSION';
7292 	      l_tag_code := 'SV_PRGMS';
7293 	   ELSIF p_data_rec.prgm_action_type = 'S' OR p_data_rec.prgm_action_type = 'SP' THEN
7294 	      l_action := 'SHORTEN';
7295 	      l_tag_code := 'SV_PRGMS';
7296 	  /* ELSIF p_data_rec.prgm_action_type = 'EP' THEN	-- this code is used for educational info
7297 	      l_action := 'EDIT';
7298 	      l_tag_code := 'SV_PRGMS';*/
7299            ELSIF p_data_rec.prgm_action_type = 'CP' THEN
7300 	      l_action := 'CANCEL';
7301 	      l_tag_code := 'SV_STATUS';
7302 	   ELSIF p_data_rec.prgm_action_type = 'AP' THEN
7303 	      l_action := 'AMEND';
7304 	      l_tag_code := 'SV_PRGMS';
7305 	   ELSIF p_data_rec.prgm_action_type = 'US' THEN
7306 	      l_action := 'EDIT_SUBJECT';
7307 	      l_tag_code := 'SV_PRGMS';
7308 	   ELSIF p_data_rec.prgm_action_type = 'EM' THEN
7309 	      l_action := 'MATRICULATE';
7310 	      l_tag_code := 'SV_PRGMS';
7311 	   ELSIF p_data_rec.prgm_action_type = 'ED' THEN
7312 	      l_action := 'END';
7313 	      l_tag_code := 'SV_STATUS';
7314 	  /* ELSIF p_data_rec.prgm_action_type = 'AF' THEN
7315 	      l_action := 'APPROVE_FAILURE';
7316 	      l_tag_code := 'SV_PRGMS';
7317 	   ELSIF p_data_rec.prgm_action_type = 'CF' THEN
7318 	      l_action := 'CONCLUDE_FAILURE';
7319 	      l_tag_code := 'SV_PRGMS';
7320 	   ELSIF p_data_rec.prgm_action_type = 'EF' THEN
7321 	      l_action := 'EXTEND_FAILURE';
7322 	      l_tag_code := 'SV_PRGMS';*/
7323 	   ELSE
7324 	      l_action := 'CORRECT_INFRACTION';
7325 	      l_tag_code := 'SV_STATUS';
7326 	   END IF;
7327 
7328 	   IF g_person_status = 'NEW' THEN
7329 	       l_action := g_person_status;
7330 	   END IF;
7331 	   l_btch_id := chk_mut_exclusive(p_data_rec.batch_id,
7332 					       p_data_rec.person_id,
7333 					       l_action,
7334 					       l_tag_code);
7335 	   Insert_Summary_Info(l_btch_id,
7336 			       p_data_rec.person_id,
7337 			       l_action,
7338 			       l_tag_code,
7339 			       'SEND',
7340 			       'IGS_SV_PRGMS_INFO',
7341 			       p_data_rec.prgm_action_type);
7342 
7343           l_cur_rec.person_id := p_data_rec.person_id;
7344 	  l_edu_status  := Get_Othr_Prgm_Info (p_data_rec   => l_cur_rec);
7345 	  IF l_edu_status = 'S' THEN
7346 	       l_position_code       := l_cur_rec.position_code;
7347 	       l_subject_field_code  := l_cur_rec.subject_field_code ;
7348 	       l_education_level     := l_cur_rec.education_level;
7349 	       l_primary_major       := l_cur_rec.primary_major;
7350 	       l_secondary_major     := l_cur_rec.secondary_major;
7351 	       l_educ_lvl_remarks    := l_cur_rec.educ_lvl_remarks ;
7352 	       l_minor               := l_cur_rec.minor ;
7353 	       l_length_of_study     := l_cur_rec.length_of_study ;
7354 	       l_english_reqd        := l_cur_rec.english_reqd;
7355 	       l_english_reqd_met    := l_cur_rec.english_reqd_met ;
7356 	       l_not_reqd_reason     := l_cur_rec.not_reqd_reason;
7357 	       IF p_data_rec.remarks IS NULL THEN
7358 	            l_remarks := l_cur_rec.remarks;
7359 	       END IF;
7360 	       IF p_data_rec.prgm_start_date IS NULL THEN
7361 	            l_prgm_start_date  := l_cur_rec.prgm_start_date;
7362 	       END IF;
7363                IF p_data_rec.prgm_end_date IS NULL THEN
7364 	            l_prgm_end_date  := l_cur_rec.prgm_end_date;
7365 	       END IF;
7366 		  /* Debug */
7367 	    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7368 		l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Edu_Info';
7369 		l_debug_str := 'After assigning values received from get_othr_prgm_info to local variables';
7370 		fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7371 	    END IF;
7372 	  END IF;
7373 
7374      ELSE
7375           l_btch_id := p_data_rec.batch_id;
7376      END IF;
7377      IF p_edu_type = 'EDU' THEN
7378 	  IF g_person_status = 'NEW' THEN
7379 		l_action := g_person_status;
7380 	   ELSE
7381 	        l_action := 'EDIT';
7382            END IF;
7383 	  Insert_Summary_Info(l_btch_id,
7384 			       p_data_rec.person_id,
7385 			       l_action,
7386 			       'SV_PRGMS',
7387 			       'SEND',
7388 			       'IGS_SV_PRGMS_INFO',
7389 			       p_data_rec.prgm_action_type);
7390      END IF;
7391 	   INSERT INTO igs_sv_prgms_info (
7392 		batch_id               ,
7393 		person_id              ,
7394 		prgm_action_type       ,
7395 		print_form             ,
7396 		form_status_id         ,
7397 		position_code          ,
7398 		subject_field_code     ,
7399 		education_level        ,
7400 		primary_major          ,
7401 		secondary_major        ,
7402 		educ_lvl_remarks       ,
7403 		minor                  ,
7404 		length_of_study        ,
7405 		prgm_start_date        ,
7406 		prgm_end_date          ,
7407 		english_reqd           ,
7408 		english_reqd_met       ,
7409 		not_reqd_reason        ,
7410 		matriculation          ,
7411 		effective_date         ,
7412 		authorization_reason   ,
7413 		termination_reason     ,
7414 		end_prgm_reason        ,
7415 		reprint_reason         ,
7416 		submit_update          ,
7417 		remarks                ,
7418 		creation_date          ,
7419 		created_by             ,
7420 		last_updated_by        ,
7421 		last_update_date       ,
7422 		last_update_login      ,
7423 		auth_action_code
7424 	      ) VALUES
7425 	      ( l_btch_id                        ,
7426 	       p_data_rec.person_id              ,
7427 	       p_data_rec.prgm_action_type       ,
7428 	       p_data_rec.print_form             ,
7429 	       p_data_rec.form_status_id         ,
7430 	       l_position_code          ,
7431 	       l_subject_field_code     ,
7432 	       l_education_level        ,
7433 	       l_primary_major          ,
7434 	       l_secondary_major        ,
7435 	       l_educ_lvl_remarks       ,
7436 	       l_minor                  ,
7437 	       l_length_of_study        ,
7438 	       l_prgm_start_date        ,
7439 	       l_prgm_end_date          ,
7440 	       l_english_reqd           ,
7441 	       l_english_reqd_met       ,
7442 	       l_not_reqd_reason        ,
7443 	       p_data_rec.matriculation          ,
7444 	       p_data_rec.effective_date         ,
7445 	       p_data_rec.authorization_reason   ,
7446 	       p_data_rec.termination_reason     ,
7447 	       p_data_rec.end_prgm_reason        ,
7448 	       p_data_rec.reprint_reason         ,
7449 	       p_data_rec.submit_update          ,
7450 	       l_remarks                ,
7451 	       p_data_rec.creation_date          ,
7452 	       p_data_rec.created_by             ,
7453 	       p_data_rec.last_updated_by        ,
7454 	       p_data_rec.last_update_date       ,
7455 	       p_data_rec.last_update_login      ,
7456 	       p_data_rec.auth_action_code
7457 	      );
7458 
7459       /* Debug */
7460     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7461 	l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Edu_Info';
7462 	l_debug_str := 'Record inserted';
7463 	fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7464     END IF;
7465 
7466 EXCEPTION
7467 
7468   WHEN OTHERS THEN
7469       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7470          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7471       END IF;
7472 
7473 /* Debug */
7474 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7475    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Edu_Info';
7476    l_debug_str := 'EXCEPTION in Insert_Edu_Info. '||SQLERRM;
7477    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7478 END IF;
7479       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7480 
7481       RAISE;
7482 
7483 END Insert_Edu_Info;
7484 
7485 
7486 /******************************************************************
7487    Created By         : Arkadi Tereshenkov
7488 
7489    Date Created By    : Oct 14, 2002
7490 
7491    Purpose            : Insert Finance information on the student
7492                         (IGS_SV_FINANCE_INFO)
7493 
7494    Remarks            :
7495 
7496    Change History
7497    Who                  When            What
7498 ------------------------------------------------------------------------
7499 
7500 ******************************************************************/
7501 PROCEDURE Insert_Finance_Info (
7502    p_data_rec  IN IGS_SV_FINANCE_INFO %ROWTYPE    -- Data record
7503 )
7504 IS
7505 
7506    l_api_name CONSTANT VARCHAR(30) := 'Insert_Finance_Info';
7507 
7508 BEGIN
7509 /* Debug */
7510 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7511    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Finance_Info';
7512    l_debug_str := 'Entering Insert_Finance_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
7513    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7514 END IF;
7515    Insert_Summary_Info(p_data_rec.batch_id,
7516 		       p_data_rec.person_id,
7517 		       g_person_status,
7518 		       'SV_FINANCIAL',
7519 		       'SEND',
7520 		       'IGS_SV_FINANCE_INFO',
7521 		       '');
7522    INSERT INTO igs_sv_finance_info (
7523        batch_id               ,
7524        person_id              ,
7525        print_form             ,
7526        acad_term_length       ,
7527        tuition                ,
7528        living_exp             ,
7529        personal_funds         ,
7530        dependent_exp          ,
7531        other_exp              ,
7532        other_exp_desc         ,
7533        school_funds           ,
7534        school_funds_desc      ,
7535        other_funds            ,
7536        other_funds_desc       ,
7537        program_sponsor        ,
7538        govt_org1              ,
7539        govt_org2              ,
7540        govt_org1_code         ,
7541        govt_org2_code         ,
7542        intl_org1              ,
7543        intl_org2              ,
7544        intl_org1_code         ,
7545        intl_org2_code         ,
7546        ev_govt                ,
7547        bi_natnl_com           ,
7548        other_org              ,
7549        recvd_us_gvt_funds     ,
7550        remarks                ,
7551        creation_date          ,
7552        created_by             ,
7553        last_updated_by        ,
7554        last_update_date       ,
7555        last_update_login      ,
7556        govt_org1_othr_name    ,
7557        govt_org2_othr_name    ,
7558        intl_org1_othr_name    ,
7559        intl_org2_othr_name    ,
7560        other_govt_name	      ,
7561        empl_funds
7562       ) VALUES
7563       (p_data_rec.batch_id               ,
7564        p_data_rec.person_id              ,
7565        p_data_rec.print_form             ,
7566        p_data_rec.acad_term_length       ,
7567        p_data_rec.tuition                ,
7568        p_data_rec.living_exp             ,
7569        p_data_rec.personal_funds         ,
7570        p_data_rec.dependent_exp          ,
7571        p_data_rec.other_exp              ,
7572        p_data_rec.other_exp_desc         ,
7573        p_data_rec.school_funds           ,
7574        p_data_rec.school_funds_desc      ,
7575        p_data_rec.other_funds            ,
7576        p_data_rec.other_funds_desc       ,
7577        p_data_rec.program_sponsor        ,
7578        p_data_rec.govt_org1              ,
7579        p_data_rec.govt_org2              ,
7580        p_data_rec.govt_org1_code         ,
7581        p_data_rec.govt_org2_code         ,
7582        p_data_rec.intl_org1              ,
7583        p_data_rec.intl_org2              ,
7584        p_data_rec.intl_org1_code         ,
7585        p_data_rec.intl_org2_code         ,
7586        p_data_rec.ev_govt                ,
7587        p_data_rec.bi_natnl_com           ,
7588        p_data_rec.other_org              ,
7589        p_data_rec.recvd_us_gvt_funds     ,
7590        p_data_rec.remarks                ,
7591        p_data_rec.creation_date          ,
7592        p_data_rec.created_by             ,
7593        p_data_rec.last_updated_by        ,
7594        p_data_rec.last_update_date       ,
7595        p_data_rec.last_update_login	 ,
7596        p_data_rec.govt_org1_othr_name    ,
7597        p_data_rec.govt_org2_othr_name    ,
7598        p_data_rec.intl_org1_othr_name    ,
7599        p_data_rec.intl_org2_othr_name    ,
7600        p_data_rec.other_govt_name	 ,
7601        p_data_rec.empl_funds
7602       );
7603 
7604 EXCEPTION
7605 
7606   WHEN OTHERS THEN
7607       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7608          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7609       END IF;
7610 
7611 /* Debug */
7612 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7613    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Finance_Info';
7614    l_debug_str := 'EXCEPTION in Insert_Finance_Info. '||SQLERRM;
7615    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7616 END IF;
7617       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7618 
7619       RAISE;
7620 
7621 END Insert_Finance_Info;
7622 
7623 
7624 
7625 /******************************************************************
7626    Created By         : Arkadi Tereshenkov
7627 
7628    Date Created By    : Oct 14, 2002
7629 
7630    Purpose            : Insert dependent information on the student
7631                         (IGS_SV_DEPDNT_INFO).
7632 
7633    Remarks            :
7634 
7635    Change History
7636    Who                  When            What
7637 ------------------------------------------------------------------------
7638 
7639 ******************************************************************/
7640 PROCEDURE Insert_Dependent_Info (
7641    p_data_rec  IN g_dependent_rec_type,    -- Data record
7642    p_records   IN NUMBER    --Number  of dependents found
7643 )
7644 IS
7645 
7646    l_api_name CONSTANT VARCHAR(30) := 'Insert_Dependent_Info';
7647    l_count  NUMBER(10);
7648    l_action VARCHAR2(10);
7649    l_btch_id NUMBER(14);
7650 
7651 BEGIN
7652 /* Debug */
7653 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7654    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Dependent_Info';
7655    l_debug_str := 'Entering Insert_Dependent_Info.Number of records being inserted: '||p_records;
7656    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7657 END IF;
7658 
7659    FOR l_count IN 1..p_records LOOP
7660      IF p_data_rec(l_count).depdnt_id  IS NOT NULL THEN
7661 	   IF g_person_status = 'NEW' THEN
7662 	       l_action := g_person_status;
7663 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'A' THEN
7664 	      l_action := 'ADD';
7665 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'U' THEN
7666 	      l_action := 'EDIT';
7667 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'T' THEN
7668 	      l_action := 'TERMINATE';
7669 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'C' THEN
7670 	      l_action := 'CANCEL';
7671 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'R' THEN
7672 	      l_action := 'REACTIVATE';
7673 	   ELSIF p_data_rec(l_count).depdnt_action_type = 'E' THEN
7674 	      l_action := 'END';
7675 	  -- ELSIF p_data_rec(l_count).print_form = 'Y' THEN
7676 	     -- l_action := 'REPRINT';
7677 	   ELSE
7678 	      l_action := 'DELETE';
7679 	   END IF;
7680 
7681 	   l_btch_id := chk_mut_exclusive(p_data_rec(l_count).batch_id,
7682 				       p_data_rec(l_count).person_id,
7683 				       l_action,
7684 				       'SV_DEPDNT');
7685 	   Insert_Summary_Info(l_btch_id,
7686 				       p_data_rec(l_count).person_id,
7687 				       l_action,
7688 				       'SV_DEPDNT',
7689 				       'SEND',
7690 				       'IGS_SV_DEPDNT_INFO',
7691 				       p_data_rec(l_count).depdnt_id);
7692 
7693        INSERT INTO igs_sv_depdnt_info (
7694           batch_id               ,
7695           person_id              ,
7696           depdnt_id              ,
7697           print_form             ,
7698           person_number          ,
7699           depdnt_action_type     ,
7700           depdnt_sevis_id        ,
7701           visa_type              ,
7702           last_name              ,
7703           first_name             ,
7704           middle_name            ,
7705           suffix                 ,
7706           birth_date             ,
7707           gender                 ,
7708           birth_cntry_code       ,
7709           citizen_cntry_code     ,
7710           relationship           ,
7711           termination_reason     ,
7712           relationship_remarks   ,
7713           perm_res_cntry_code    ,
7714           termination_effect_date,
7715           remarks                ,
7716           creation_date          ,
7717           created_by             ,
7718           last_updated_by        ,
7719           last_update_date       ,
7720           last_update_login	 ,
7721 	  birth_cntry_resn_code
7722          ) VALUES
7723          (l_btch_id              ,  -- prbhardw CP enhancement
7724           p_data_rec(l_count).person_id              ,
7725           p_data_rec(l_count).depdnt_id              ,
7726           p_data_rec(l_count).print_form             ,
7727           p_data_rec(l_count).person_number          ,
7728           p_data_rec(l_count).depdnt_action_type     ,
7729           p_data_rec(l_count).depdnt_sevis_id        ,
7730           p_data_rec(l_count).visa_type              ,
7731           p_data_rec(l_count).last_name              ,
7732           p_data_rec(l_count).first_name             ,
7733           p_data_rec(l_count).middle_name            ,
7734           p_data_rec(l_count).suffix                 ,
7735           p_data_rec(l_count).birth_date             ,
7736           p_data_rec(l_count).gender                 ,
7737           p_data_rec(l_count).birth_cntry_code       ,
7738           p_data_rec(l_count).citizen_cntry_code     ,
7739           p_data_rec(l_count).relationship           ,
7740           p_data_rec(l_count).termination_reason     ,
7741           p_data_rec(l_count).relationship_remarks   ,
7742           p_data_rec(l_count).perm_res_cntry_code    ,
7743           p_data_rec(l_count).termination_effect_date,
7744           p_data_rec(l_count).remarks                ,
7745           p_data_rec(l_count).creation_date          ,
7746           p_data_rec(l_count).created_by             ,
7747           p_data_rec(l_count).last_updated_by        ,
7748           p_data_rec(l_count).last_update_date       ,
7749           p_data_rec(l_count).last_update_login	     ,
7750 	  p_data_rec(l_count).birth_cntry_resn_code
7751          );
7752      END IF;
7753    END LOOP;
7754 
7755 EXCEPTION
7756 
7757   WHEN OTHERS THEN
7758       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7759          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7760       END IF;
7761 	/* Debug */
7762 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7763 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Dependent_Info';
7764 	   l_debug_str := 'EXCEPTION in Insert_Dependent_Info. '||SQLERRM;
7765 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7766 	END IF;
7767       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7768 
7769       RAISE;
7770 
7771 END Insert_Dependent_Info;
7772 
7773 
7774 PROCEDURE Insert_Dependent_Info (
7775    p_data_rec  IN IGS_SV_DEPDNT_INFO%ROWTYPE --g_dependent_rec_type,    -- Data record
7776   -- p_records   IN NUMBER    --Number  of dependents found
7777 )
7778 IS
7779 
7780    l_api_name CONSTANT VARCHAR(30) := 'Insert_Dependent_Info';
7781    l_count  NUMBER(10);
7782    l_action VARCHAR2(10);
7783    l_btch_id NUMBER(14);
7784 
7785 BEGIN
7786 /* Debug */
7787 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7788    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Dependent_Info';
7789    l_debug_str := 'Entering Insert_Dependent_Info.';
7790    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7791 END IF;
7792 
7793      IF p_data_rec.depdnt_id  IS NOT NULL THEN
7794 	   IF g_person_status = 'NEW' THEN
7795 	       l_action := g_person_status;
7796 	   ELSIF p_data_rec.depdnt_action_type = 'A' THEN
7797 	      l_action := 'ADD';
7798 	   ELSIF p_data_rec.depdnt_action_type = 'U' THEN
7799 	      l_action := 'EDIT';
7800 	   ELSIF p_data_rec.depdnt_action_type = 'T' THEN
7801 	      l_action := 'TERMINATE';
7802 	   ELSIF p_data_rec.depdnt_action_type = 'C' THEN
7803 	      l_action := 'CANCEL';
7804 	   ELSIF p_data_rec.depdnt_action_type = 'R' THEN
7805 	      l_action := 'REACTIVATE';
7806 	   ELSIF p_data_rec.depdnt_action_type = 'E' THEN
7807 	      l_action := 'END';
7808 	  -- ELSIF p_data_rec(l_count).print_form = 'Y' THEN
7809 	     -- l_action := 'REPRINT';
7810 	   ELSE
7811 	      l_action := 'DELETE';
7812 	   END IF;
7813 
7814 	   l_btch_id := chk_mut_exclusive(p_data_rec.batch_id,
7815 				       p_data_rec.person_id,
7816 				       l_action,
7817 				       'SV_DEPDNT');
7818 	   Insert_Summary_Info(l_btch_id,
7819 				       p_data_rec.person_id,
7820 				       l_action,
7821 				       'SV_DEPDNT',
7822 				       'SEND',
7823 				       'IGS_SV_DEPDNT_INFO',
7824 				       p_data_rec.depdnt_id);
7825 
7826        INSERT INTO igs_sv_depdnt_info (
7827           batch_id               ,
7828           person_id              ,
7829           depdnt_id              ,
7830           print_form             ,
7831           person_number          ,
7832           depdnt_action_type     ,
7833           depdnt_sevis_id        ,
7834           visa_type              ,
7835           last_name              ,
7836           first_name             ,
7837           middle_name            ,
7838           suffix                 ,
7839           birth_date             ,
7840           gender                 ,
7841           birth_cntry_code       ,
7842           citizen_cntry_code     ,
7843           relationship           ,
7844           termination_reason     ,
7845           relationship_remarks   ,
7846           perm_res_cntry_code    ,
7847           termination_effect_date,
7848           remarks                ,
7849           creation_date          ,
7850           created_by             ,
7851           last_updated_by        ,
7852           last_update_date       ,
7853           last_update_login	 ,
7854 	  birth_cntry_resn_code
7855          ) VALUES
7856          (l_btch_id              ,  -- prbhardw CP enhancement
7857           p_data_rec.person_id              ,
7858           p_data_rec.depdnt_id              ,
7859           p_data_rec.print_form             ,
7860           p_data_rec.person_number          ,
7861           p_data_rec.depdnt_action_type     ,
7862           p_data_rec.depdnt_sevis_id        ,
7863           p_data_rec.visa_type              ,
7864           p_data_rec.last_name              ,
7865           p_data_rec.first_name             ,
7866           p_data_rec.middle_name            ,
7867           p_data_rec.suffix                 ,
7868           p_data_rec.birth_date             ,
7869           p_data_rec.gender                 ,
7870           p_data_rec.birth_cntry_code       ,
7871           p_data_rec.citizen_cntry_code     ,
7872           p_data_rec.relationship           ,
7873           p_data_rec.termination_reason     ,
7874           p_data_rec.relationship_remarks   ,
7875           p_data_rec.perm_res_cntry_code    ,
7876           p_data_rec.termination_effect_date,
7877           p_data_rec.remarks                ,
7878           p_data_rec.creation_date          ,
7879           p_data_rec.created_by             ,
7880           p_data_rec.last_updated_by        ,
7881           p_data_rec.last_update_date       ,
7882           p_data_rec.last_update_login	     ,
7883 	  p_data_rec.birth_cntry_resn_code
7884          );
7885      END IF;
7886 
7887 EXCEPTION
7888 
7889   WHEN OTHERS THEN
7890       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7891          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7892       END IF;
7893 	/* Debug */
7894 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7895 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Dependent_Info';
7896 	   l_debug_str := 'EXCEPTION in Insert_Dependent_Info. '||SQLERRM;
7897 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7898 	END IF;
7899       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7900 
7901       RAISE;
7902 
7903 END Insert_Dependent_Info;
7904 
7905 /******************************************************************
7906    Created By         : Arkadi Tereshenkov
7907 
7908    Date Created By    : Oct 14, 2002
7909 
7910    Purpose            : Insert Conviction information on the student.
7911                         (IGS_SV_CONVICTIONS).
7912 
7913    Remarks            :
7914 
7915    Change History
7916    Who                  When            What
7917 ------------------------------------------------------------------------
7918 
7919 ******************************************************************/
7920 PROCEDURE Insert_Convictions_Info (
7921    p_data_rec  IN IGS_SV_CONVICTIONS%ROWTYPE
7922 ) IS
7923 
7924    l_api_name CONSTANT VARCHAR(30) := 'Insert_Convictions_Info';
7925    l_count  NUMBER(10);
7926 
7927 BEGIN
7928 	/* Debug */
7929 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7930 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Convictions_Info';
7931 	   l_debug_str := 'Entering Insert_Convictions_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
7932 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7933 	END IF;
7934        Insert_Summary_Info(p_data_rec.batch_id,
7935 		       p_data_rec.person_id,
7936 		       g_person_status,
7937 		       'SV_CONVICTION',
7938 		       'SEND',
7939 		       'IGS_SV_CONVICTIONS',
7940 		       '');
7941        INSERT INTO igs_sv_convictions (
7942         batch_id               ,
7943         person_id              ,
7944         conviction_id          ,
7945         print_form             ,
7946         criminal_conviction    ,
7947         remarks                ,
7948         creation_date          ,
7949         created_by             ,
7950         last_updated_by        ,
7951         last_update_date       ,
7952         last_update_login
7953        ) VALUES
7954        (p_data_rec.batch_id               ,
7955         p_data_rec.person_id              ,
7956         p_data_rec.conviction_id          ,
7957         p_data_rec.print_form             ,
7958         p_data_rec.criminal_conviction    ,
7959         p_data_rec.remarks                ,
7960         p_data_rec.creation_date          ,
7961         p_data_rec.created_by             ,
7962         p_data_rec.last_updated_by        ,
7963         p_data_rec.last_update_date       ,
7964         p_data_rec.last_update_login
7965        );
7966 
7967 EXCEPTION
7968 
7969   WHEN OTHERS THEN
7970       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
7971          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
7972       END IF;
7973 
7974 	/* Debug */
7975 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
7976 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Convictions_Info';
7977 	   l_debug_str := 'EXCEPTION in Insert_Convictions_Info. '||SQLERRM;
7978 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
7979 	END IF;
7980       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
7981 
7982       RAISE;
7983 
7984 END Insert_Convictions_Info;
7985 
7986 /******************************************************************
7987    Created By         : Arkadi Tereshenkov
7988 
7989    Date Created By    : Oct 14, 2002
7990 
7991    Purpose            : Insert Legal information on the student.
7992                         (IGS_SV_LEGAL_INFO).
7993 
7994    Remarks            :
7995 
7996    Change History
7997    Who                  When            What
7998 ------------------------------------------------------------------------
7999 
8000 ******************************************************************/
8001 PROCEDURE Insert_Legal_Info (
8002    p_data_rec   IN IGS_SV_LEGAL_INFO%ROWTYPE    -- Data record
8003 )
8004 IS
8005    l_api_name CONSTANT VARCHAR(30) := 'Insert_Legal_Info';
8006 
8007 BEGIN
8008 	/* Debug */
8009 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8010 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Legal_Info';
8011 	   l_debug_str := 'Entering Insert_Legal_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
8012 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8013 	END IF;
8014    Insert_Summary_Info(p_data_rec.batch_id,
8015 		       p_data_rec.person_id,
8016 		       g_legal_status, --g_person_status, commented for bug 5253779
8017 		       'SV_LEGAL',
8018 		       'SEND',
8019 		       'IGS_SV_LEGAL_INFO',
8020 		       '');
8021    INSERT INTO igs_sv_legal_info (
8022        batch_id               ,
8023        person_id              ,
8024        print_form             ,
8025        psprt_number           ,
8026        psprt_issuing_cntry_code,
8027        psprt_exp_date         ,
8028        visa_number            ,
8029        visa_issuing_post      ,
8030        visa_issuing_cntry_code,
8031        visa_expiration_date   ,
8032        i94_number             ,
8033        port_of_entry          ,
8034        date_of_entry          ,
8035        remarks                ,
8036        creation_date          ,
8037        created_by             ,
8038        last_updated_by        ,
8039        last_update_date       ,
8040        last_update_login      ,
8041        VISA_ISSUE_DATE
8042       ) VALUES
8043       (p_data_rec.batch_id               ,
8044        p_data_rec.person_id              ,
8045        p_data_rec.print_form             ,
8046        p_data_rec.psprt_number           ,
8047        p_data_rec.psprt_issuing_cntry_code,
8048        p_data_rec.psprt_exp_date         ,
8049        p_data_rec.visa_number            ,
8050        p_data_rec.visa_issuing_post      ,
8051        p_data_rec.visa_issuing_cntry_code,
8052        p_data_rec.visa_expiration_date   ,
8053        p_data_rec.i94_number             ,
8054        p_data_rec.port_of_entry          ,
8055        p_data_rec.date_of_entry          ,
8056        p_data_rec.remarks                ,
8057        p_data_rec.creation_date          ,
8058        p_data_rec.created_by             ,
8059        p_data_rec.last_updated_by        ,
8060        p_data_rec.last_update_date       ,
8061        p_data_rec.last_update_login      ,
8062        p_data_rec.VISA_ISSUE_DATE
8063       );
8064 
8065 EXCEPTION
8066 
8067   WHEN OTHERS THEN
8068       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
8069          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
8070       END IF;
8071 
8072 /* Debug */
8073 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8074    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Legal_Info';
8075    l_debug_str := 'EXCEPTION in Insert_Legal_Info. '||SQLERRM;
8076    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8077 END IF;
8078       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
8079 
8080       RAISE;
8081 
8082 END Insert_Legal_Info;
8083 
8084 /******************************************************************
8085    Created By         : Arkadi Tereshenkov
8086 
8087    Date Created By    : Oct 14, 2002
8088 
8089    Purpose            : Insert employment information on the student
8090                         (IGS_SV_EMPL_INFO).
8091 
8092    Remarks            :
8093 
8094    Change History
8095    Who                  When            What
8096 ------------------------------------------------------------------------
8097 
8098 ******************************************************************/
8099 PROCEDURE Insert_Empl_Info (
8100    p_data_rec      IN IGS_SV_EMPL_INFO%ROWTYPE     --Data record
8101 )
8102 IS
8103    l_api_name CONSTANT VARCHAR(30) := 'Insert_Empl_Info';
8104    l_action VARCHAR2(6);
8105    l_tag_code VARCHAR2(30);
8106    l_btch_id NUMBER(14);
8107 BEGIN
8108 /* Debug */
8109 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8110    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Empl_Info';
8111    l_debug_str := 'Entering Insert_Empl_Info. p_data_rec.person_id is '||p_data_rec.person_id|| ' and p_data_rec.batch_id is '||p_data_rec.batch_id;
8112    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8113 END IF;
8114    IF g_person_status = 'NEW' THEN
8115       l_action := g_person_status;
8116    ELSIF p_data_rec.action_code = 'C' THEN
8117       l_action := 'CANCEL';
8118    ELSIF p_data_rec.action_code = 'A' OR p_data_rec.empl_rec_type = 'C' OR p_data_rec.empl_rec_type = 'O' THEN
8119       l_action := 'ADD';
8120    ELSE
8121       l_action := 'EDIT';
8122    END IF;
8123    IF p_data_rec.empl_rec_type = 'C' THEN
8124       l_tag_code := 'SV_CPT_EMPL';
8125    ELSIF p_data_rec.empl_rec_type = 'O' THEN
8126       l_tag_code := 'SV_OPT_EMPL';
8127    ELSE
8128       l_tag_code := 'SV_OFF_EMPL';
8129    END IF;
8130 
8131    l_btch_id := chk_mut_exclusive(p_data_rec.batch_id,
8132 			       p_data_rec.person_id,
8133 			       l_action,
8134 			       l_tag_code);
8135    Insert_Summary_Info(l_btch_id,
8136 			       p_data_rec.person_id,
8137 			       l_action,
8138 			       l_tag_code,
8139 			       'SEND',
8140 			       'IGS_SV_EMPL_INFO',
8141 			       p_data_rec.nonimg_empl_id);
8142    /* Debug */
8143         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8144           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
8145           l_debug_str := 'mut_exclusive chk returns '||l_btch_id||' for batch: '||p_data_rec.batch_id||'person: '||p_data_rec.person_id||' action: '||l_action||' tag: '||l_tag_code;
8146           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8147         END IF;
8148 
8149    INSERT INTO igs_sv_empl_info (
8150        batch_id               ,
8151        person_id              ,
8152        nonimg_empl_id         ,
8153        empl_rec_type          ,
8154        print_form             ,
8155        empl_type              ,
8156        recommend_empl         ,
8157        rescind_empl           ,
8158        remarks                ,
8159        empl_start_date        ,
8160        empl_end_date          ,
8161        empl_name              ,
8162        empl_time              ,
8163        course_relevance       ,
8164        empl_addr_line1        ,
8165        empl_addr_line2        ,
8166        city                   ,
8167        state                  ,
8168        postal_code            ,
8169        creation_date          ,
8170        created_by             ,
8171        last_updated_by        ,
8172        last_update_date       ,
8173        last_update_login      ,
8174        action_code
8175       ) VALUES
8176       (l_btch_id               ,    --- prbhardw CP enhancement
8177        p_data_rec.person_id              ,
8178        p_data_rec.nonimg_empl_id         ,
8179        p_data_rec.empl_rec_type          ,
8180        p_data_rec.print_form             ,
8181        p_data_rec.empl_type              ,
8182        p_data_rec.recommend_empl         ,
8183        p_data_rec.rescind_empl           ,
8184        p_data_rec.remarks                ,
8185        p_data_rec.empl_start_date        ,
8186        p_data_rec.empl_end_date          ,
8187        p_data_rec.empl_name              ,
8188        p_data_rec.empl_time              ,
8189        p_data_rec.course_relevance       ,
8190        p_data_rec.empl_addr_line1        ,
8191        p_data_rec.empl_addr_line2        ,
8192        p_data_rec.city                   ,
8193        p_data_rec.state                  ,
8194        p_data_rec.postal_code            ,
8195        p_data_rec.creation_date          ,
8196        p_data_rec.created_by             ,
8197        p_data_rec.last_updated_by        ,
8198        p_data_rec.last_update_date       ,
8199        p_data_rec.last_update_login	 ,
8200        p_data_rec.action_code
8201       );
8202 
8203 EXCEPTION
8204 
8205   WHEN OTHERS THEN
8206       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
8207          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
8208       END IF;
8209 	/* Debug */
8210 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8211    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Empl_Info';
8212    l_debug_str := 'EXCEPTION in Insert_Empl_Info. '||SQLERRM;
8213    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8214 END IF;
8215       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
8216 
8217       RAISE;
8218 
8219 END Insert_Empl_Info;
8220 
8221 
8222 
8223 /******************************************************************
8224    Created By         : Arkadi Tereshenkov
8225 
8226    Date Created By    : Oct 14, 2002
8227 
8228    Purpose            : Update registration block information.
8229 
8230    remarks            :
8231 
8232    Change History
8233    Who                  When            What
8234 ------------------------------------------------------------------------
8235 
8236 ******************************************************************/
8237 FUNCTION Update_Registration_Info (
8238    p_person_rec      IN OUT NOCOPY t_student_rec    --Person record
8239 ) RETURN VARCHAR2
8240 IS
8241 
8242    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_Registration_Info';
8243 
8244    l_cur_rec     IGS_SV_LEGAL_INFO%ROWTYPE;
8245    l_status      VARCHAR2(1);
8246 
8247    l_prev_rec     IGS_SV_LEGAL_INFO%ROWTYPE;
8248 
8249 
8250   -- Old dates
8251    CURSOR c_old_ses_dates IS
8252      SELECT pr.curr_session_end_date,
8253             pr.next_session_start_date,
8254 	    pr.last_session_flag
8255        FROM igs_sv_persons pr
8256       WHERE pr.person_id = p_person_rec.person_id
8257         AND pr.batch_id IN
8258             ( SELECT max(btch.batch_id)
8259                 FROM igs_sv_persons prs,
8260                      igs_sv_batches btch,
8261                      igs_sv_persons pr
8262                WHERE prs.person_id = pr.person_id
8263                      AND prs.batch_id = pr.batch_id
8264                      AND pr.record_status <> 'E'
8265                      AND prs.batch_id = btch.batch_id
8266                      AND btch.batch_type = p_person_rec.batch_type
8267                      AND prs.person_id = p_person_rec.person_id
8268                      AND pr.curr_session_end_date  IS NOT NULL
8269             );
8270 
8271   -- Select current session dates.
8272    CURSOR c_ses_dates IS
8273      SELECT to_char(curr_session_end_date,'YYYY-MM-DD') ,
8274             to_char(next_session_start_date ,'YYYY-MM-DD'),
8275 	    last_session_flag
8276        FROM igs_pe_nonimg_form
8277       WHERE nonimg_form_id = p_person_rec.form_id;
8278 
8279    l_start_date      igs_sv_persons.curr_session_end_date%TYPE;
8280    l_end_date        igs_sv_persons.next_session_start_date%TYPE;
8281    l_old_start_date  igs_sv_persons.curr_session_end_date%TYPE;
8282    l_old_end_date    igs_sv_persons.next_session_start_date%TYPE;
8283    l_old_session_flag  igs_pe_nonimg_form.last_session_flag%TYPE;
8284    l_last_session_flag  igs_pe_nonimg_form.last_session_flag%TYPE;
8285    l_f_addr_rec      g_address_rec_type;
8286    l_count           NUMBER(10);
8287    l_changes_found   VARCHAR2(1) := 'N'; --No changes by default
8288 
8289 
8290 BEGIN
8291 /* Debug */
8292 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8293    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8294    l_debug_str := 'Entering Update_Registration_Info. p_person_rec.person_id is '||p_person_rec.person_id|| ' and p_person_rec.batch_type is '||p_person_rec.batch_type;
8295    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8296 END IF;
8297 
8298    Put_Log_Msg(l_api_name||' begins ',0);
8299 
8300 
8301    --Get current dates
8302    OPEN c_ses_dates;
8303    FETCH c_ses_dates
8304     INTO l_start_date,
8305          l_end_date,
8306 	 l_last_session_flag;
8307    CLOSE c_ses_dates;
8308 
8309    -- Get old dates
8310    OPEN c_old_ses_dates;
8311    FETCH c_old_ses_dates
8312     INTO l_old_start_date,
8313          l_old_end_date,
8314 	 l_old_session_flag;
8315    CLOSE c_old_ses_dates;
8316 
8317 
8318    -- Call Validate_Legal_Info
8319 
8320    p_person_rec.legal_status  := Validate_Legal_Info (p_person_rec => p_person_rec,
8321                                                        p_data_rec   => l_cur_rec);
8322 
8323 
8324    IF p_person_rec.legal_status = 'E'  THEN -- Validation error - mark person as invalid
8325 
8326       p_person_rec.person_status := 'I';
8327 
8328       Put_Log_Msg('Validation error occurs ',1);
8329 	/* Debug */
8330 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8331 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8332 	   l_debug_str := 'Returning S from Update_Registration_Info.';
8333 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8334 	END IF;
8335 
8336       RETURN 'S';
8337 
8338    ELSIF p_person_rec.legal_status = 'U' THEN --Unexpected error - terminate execution
8339 
8340       Put_Log_Msg('Unexpected error returned by validation ',1);
8341       /* Debug */
8342 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8343 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8344 	   l_debug_str := 'Unexpected error in Update_Registration_Info.';
8345 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8346 	END IF;
8347 
8348       RAISE FND_API.G_EXC_ERROR;
8349 
8350    ELSIF p_person_rec.legal_status = 'S' THEN
8351 
8352 
8353      -- Compare ancial Info
8354      l_prev_rec.person_id := p_person_rec.person_id;
8355 
8356      l_status := Get_Legal_Info ( p_data_rec  => l_prev_rec);
8357 
8358      IF l_status = 'U' THEN
8359 	/* Debug */
8360 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8361 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8362 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Registration_Info.';
8363 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8364 	END IF;
8365 
8366         RAISE FND_API.G_EXC_ERROR;
8367 
8368      END IF;
8369 
8370      IF l_status = 'N' OR
8371       ( l_prev_rec.psprt_number
8372         ||g_delimeter||l_prev_rec.psprt_issuing_cntry_code
8373         ||g_delimeter||l_prev_rec.psprt_exp_date
8374         ||g_delimeter||l_prev_rec.visa_number
8375         ||g_delimeter||l_prev_rec.visa_issuing_post
8376         ||g_delimeter||l_prev_rec.visa_issuing_cntry_code
8377         ||g_delimeter||l_prev_rec.visa_expiration_date
8378         ||g_delimeter||l_prev_rec.i94_number
8379         ||g_delimeter||l_prev_rec.port_of_entry
8380         ||g_delimeter||l_prev_rec.date_of_entry
8381         ||g_delimeter||l_prev_rec.remarks
8382 	||g_delimeter||l_prev_rec.visa_issue_date  <>
8383         l_cur_rec.psprt_number
8384         ||g_delimeter||l_cur_rec.psprt_issuing_cntry_code
8385         ||g_delimeter||l_cur_rec.psprt_exp_date
8386         ||g_delimeter||l_cur_rec.visa_number
8387         ||g_delimeter||l_cur_rec.visa_issuing_post
8388         ||g_delimeter||l_cur_rec.visa_issuing_cntry_code
8389         ||g_delimeter||l_cur_rec.visa_expiration_date
8390         ||g_delimeter||l_cur_rec.i94_number
8391         ||g_delimeter||l_cur_rec.port_of_entry
8392         ||g_delimeter||l_cur_rec.date_of_entry
8393         ||g_delimeter||l_cur_rec.remarks
8394 	||g_delimeter||l_cur_rec.visa_issue_date ) THEN
8395 
8396         p_person_rec.legal_status := 'C';  -- Changed
8397         p_person_rec.changes_found := 'Y';
8398 
8399         Put_Log_Msg('Legal info is changed  ',0);
8400 
8401         IF p_person_rec.person_status <> 'I' THEN
8402 
8403           Insert_Legal_Info ( p_data_rec  => l_cur_rec);
8404 
8405         END IF;
8406    -- Call Validate_F_Addr_Info
8407 
8408 
8409     END IF;
8410 
8411    END IF;
8412    IF p_person_rec.legal_status = 'C' OR
8413       (  l_old_start_date <> l_start_date
8414        OR l_old_end_date <> l_end_date
8415        OR ( l_old_start_date IS NULL AND l_start_date IS NOT NULL)
8416        OR ( l_old_end_date IS NULL AND l_end_date IS NOT NULL)
8417        OR (l_old_session_flag <> l_last_session_flag)) THEN		--- prbhardw
8418 
8419     /* IF l_start_date IS NULL OR l_end_date IS NULL THEN
8420 
8421        --Error dates must be not null
8422         Put_Log_Msg('Dates are null  return S',0);
8423 
8424         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_REG_REQD_FLD_ERR'); --Dates not found
8425         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
8426         Put_Log_Msg(FND_MESSAGE.Get,1);
8427 
8428         p_person_rec.person_status := 'I';
8429 	/* Debug
8430 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8431 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8432 	   l_debug_str := 'Returning S from Update_Registration_Info.';
8433 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8434 	END IF;
8435 
8436         RETURN 'S';
8437 
8438      END IF;*/
8439      -- Update session dates for the main record required.
8440 
8441       UPDATE igs_sv_persons
8442          SET curr_session_end_date = l_start_date,
8443              next_session_start_date = l_end_date,
8444 	     last_session_flag = l_last_session_flag		---prbhardw
8445        WHERE person_id = p_person_rec.person_id and
8446              batch_id  = p_person_rec.batch_id;
8447 
8448        -- Check if legal info is present, not changed and hasn't beet inserted yet.
8449 
8450       p_person_rec.changes_found := 'Y';
8451 
8452       Put_Log_Msg('Legal info is changed  ',0);
8453 
8454 
8455       -- Foreign address is required
8456 
8457       p_person_rec.f_addr_status  := Validate_F_Addr_Info (p_person_rec => p_person_rec,
8458                                                            p_data_rec   => l_f_addr_rec,
8459                                                            p_records    => l_count);
8460 
8461       IF p_person_rec.f_addr_status  = 'E' THEN -- Validation error - mark person as invalid
8462 
8463         p_person_rec.person_status := 'I';
8464 
8465         Put_Log_Msg('Validation error occurs - return S ',1);
8466 	/* Debug */
8467 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8468 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8469 	   l_debug_str := 'Returning S from Update_Registration_Info.';
8470 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8471 	END IF;
8472 
8473         RETURN 'S';
8474 
8475       ELSIF p_person_rec.f_addr_status  = 'U' THEN --Unexpected error - terminate execution
8476 
8477         Put_Log_Msg('Unexpected error returned by validation ',1);
8478 
8479         RAISE FND_API.G_EXC_ERROR;
8480 
8481       ELSIF p_person_rec.f_addr_status = 'N' THEN -- Not found
8482 
8483         Put_Log_Msg('F Address block is not found return S',0);
8484 
8485         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_REG_REQD_FLD_ERR'); --f address is not found
8486         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', p_person_rec.person_number);
8487         Put_Log_Msg(FND_MESSAGE.Get,1);
8488 
8489         p_person_rec.person_status := 'I';
8490 	/* Debug */
8491 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8492 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8493 	   l_debug_str := 'Returning S from Update_Registration_Info.';
8494 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8495 	END IF;
8496 
8497         RETURN 'S';
8498 
8499      END IF;
8500 
8501    END IF;
8502 
8503    Put_Log_Msg(l_api_name||' ends ',0);
8504 
8505    RETURN 'S';
8506 
8507 EXCEPTION
8508 
8509    WHEN FND_API.G_EXC_ERROR THEN
8510 
8511       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
8512       /* Debug */
8513 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8514 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8515 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Registration_Info. '||SQLERRM;
8516 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8517 	END IF;
8518       RETURN 'U';
8519 
8520    WHEN OTHERS THEN
8521 
8522       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
8523          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
8524       END IF;
8525 
8526       Put_Log_Msg(l_api_name||' OTHERS return U',1);
8527       /* Debug */
8528 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8529 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Registration_Info';
8530 	   l_debug_str := 'EXCEPTION: Returning U from Update_Registration_Info. '||SQLERRM;
8531 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8532 	END IF;
8533       RETURN  'U';
8534 
8535 END Update_Registration_Info;
8536 
8537 
8538 FUNCTION Update_ev_Legal_Info (
8539    p_person_rec      IN OUT NOCOPY t_student_rec    --Person record
8540 ) RETURN VARCHAR2
8541 IS
8542 
8543    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_ev_Legal_Info';
8544 
8545    l_cur_rec     IGS_SV_LEGAL_INFO%ROWTYPE;
8546    l_status      VARCHAR2(1);
8547 
8548    l_prev_rec     IGS_SV_LEGAL_INFO%ROWTYPE;
8549 
8550    l_count           NUMBER(10);
8551    l_changes_found   VARCHAR2(1) := 'N'; --No changes by default
8552 
8553 
8554 BEGIN
8555 /* Debug */
8556 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8557    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8558    l_debug_str := 'Entering Update_ev_Legal_Info. p_person_rec.person_id is '||p_person_rec.person_id|| ' and p_person_rec.batch_type is '||p_person_rec.batch_type;
8559    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8560 END IF;
8561 
8562    Put_Log_Msg(l_api_name||' begins ',0);
8563 
8564    -- Call Validate_Legal_Info
8565 
8566    p_person_rec.legal_status  := Validate_ev_Legal_Info (p_person_rec => p_person_rec,
8567                                                        p_data_rec   => l_cur_rec);
8568 
8569    IF p_person_rec.legal_status = 'E'  THEN -- Validation error - mark person as invalid
8570 
8571       p_person_rec.person_status := 'I';
8572 
8573       Put_Log_Msg('Validation error occurs ',1);
8574 	/* Debug */
8575 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8576 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8577 	   l_debug_str := 'Returning S from Update_ev_Legal_Info.';
8578 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8579 	END IF;
8580 
8581       RETURN 'S';
8582 
8583    ELSIF p_person_rec.legal_status = 'U' THEN --Unexpected error - terminate execution
8584 
8585       Put_Log_Msg('Unexpected error returned by validation ',1);
8586       /* Debug */
8587 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8588 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8589 	   l_debug_str := 'Unexpected error in Update_ev_Legal_Info.';
8590 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8591 	END IF;
8592 
8593       RAISE FND_API.G_EXC_ERROR;
8594 
8595    ELSIF p_person_rec.legal_status = 'S' THEN
8596 
8597 
8598      -- Compare ancial Info
8599      l_prev_rec.person_id := p_person_rec.person_id;
8600 
8601      l_status := Get_Legal_Info ( p_data_rec  => l_prev_rec);
8602      IF l_status = 'U' THEN
8603 	/* Debug */
8604 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8605 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8606 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_ev_Legal_Info.';
8607 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8608 	END IF;
8609 
8610         RAISE FND_API.G_EXC_ERROR;
8611 
8612      END IF;
8613 
8614 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8615 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Previous_Legal_Info';
8616           l_debug_str :=  'psprt_issuing_cntry_code=' || l_prev_rec.psprt_issuing_cntry_code;
8617           l_debug_str := l_debug_str || 'psprt_exp_date=' || l_prev_rec.psprt_exp_date;
8618           l_debug_str := l_debug_str || 'visa_number=' || l_prev_rec.visa_number ;
8619           l_debug_str := l_debug_str || 'visa_issuing_post=' || l_prev_rec.visa_issuing_post;
8620           l_debug_str := l_debug_str || 'visa_issuing_cntry_code=' || l_prev_rec.visa_issuing_cntry_code;
8621           l_debug_str := l_debug_str || 'visa_expiration_date=' || l_prev_rec.visa_expiration_date;
8622           l_debug_str := l_debug_str || 'i94_number=' || l_prev_rec.i94_number;
8623           l_debug_str := l_debug_str || 'port_of_entry=' || l_prev_rec.port_of_entry;
8624           l_debug_str := l_debug_str || 'date_of_entry=' || l_prev_rec.date_of_entry;
8625           l_debug_str := l_debug_str || 'remarks=' || l_prev_rec.remarks;
8626           l_debug_str := l_debug_str || 'visa_issue_date=' || l_prev_rec.visa_issue_date ;
8627 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8628 	END IF;
8629 
8630 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8631 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Current_Legal_Info';
8632           l_debug_str :=  'psprt_issuing_cntry_code=' || l_cur_rec.psprt_issuing_cntry_code;
8633           l_debug_str := l_debug_str || 'psprt_exp_date=' || l_cur_rec.psprt_exp_date;
8634           l_debug_str := l_debug_str || 'visa_number=' || l_cur_rec.visa_number ;
8635           l_debug_str := l_debug_str || 'visa_issuing_post=' || l_cur_rec.visa_issuing_post;
8636           l_debug_str := l_debug_str || 'visa_issuing_cntry_code=' || l_cur_rec.visa_issuing_cntry_code;
8637           l_debug_str := l_debug_str || 'visa_expiration_date=' || l_cur_rec.visa_expiration_date;
8638           l_debug_str := l_debug_str || 'i94_number=' || l_cur_rec.i94_number;
8639           l_debug_str := l_debug_str || 'port_of_entry=' || l_cur_rec.port_of_entry;
8640           l_debug_str := l_debug_str || 'date_of_entry=' || l_cur_rec.date_of_entry;
8641           l_debug_str := l_debug_str || 'remarks=' || l_cur_rec.remarks;
8642           l_debug_str := l_debug_str || 'visa_issue_date=' || l_cur_rec.visa_issue_date ;
8643 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8644 	END IF;
8645 
8646      IF l_status = 'N' OR
8647       ( l_prev_rec.psprt_number
8648         ||g_delimeter||l_prev_rec.psprt_issuing_cntry_code
8649         ||g_delimeter||l_prev_rec.psprt_exp_date
8650         ||g_delimeter||l_prev_rec.visa_number
8651         ||g_delimeter||l_prev_rec.visa_issuing_post
8652         ||g_delimeter||l_prev_rec.visa_issuing_cntry_code
8653         ||g_delimeter||l_prev_rec.visa_expiration_date
8654         ||g_delimeter||l_prev_rec.i94_number
8655         ||g_delimeter||l_prev_rec.port_of_entry
8656         ||g_delimeter||l_prev_rec.date_of_entry
8657         ||g_delimeter||l_prev_rec.remarks
8658 	||g_delimeter||l_prev_rec.visa_issue_date <>
8659         l_cur_rec.psprt_number
8660         ||g_delimeter||l_cur_rec.psprt_issuing_cntry_code
8661         ||g_delimeter||l_cur_rec.psprt_exp_date
8662         ||g_delimeter||l_cur_rec.visa_number
8663         ||g_delimeter||l_cur_rec.visa_issuing_post
8664         ||g_delimeter||l_cur_rec.visa_issuing_cntry_code
8665         ||g_delimeter||l_cur_rec.visa_expiration_date
8666         ||g_delimeter||l_cur_rec.i94_number
8667         ||g_delimeter||l_cur_rec.port_of_entry
8668         ||g_delimeter||l_cur_rec.date_of_entry
8669         ||g_delimeter||l_cur_rec.remarks
8670 	||g_delimeter||l_cur_rec.visa_issue_date) THEN
8671 
8672         p_person_rec.legal_status := 'C';  -- Changed
8673         p_person_rec.changes_found := 'Y';
8674 
8675         Put_Log_Msg('Legal info is changed  ',0);
8676 
8677         IF p_person_rec.person_status <> 'I' THEN
8678 
8679           Insert_Legal_Info ( p_data_rec  => l_cur_rec);
8680 
8681         END IF;
8682 
8683 
8684     END IF;
8685 
8686    END IF;
8687 
8688    Put_Log_Msg(l_api_name||' ends ',0);
8689 
8690    RETURN 'S';
8691 
8692 EXCEPTION
8693 
8694    WHEN FND_API.G_EXC_ERROR THEN
8695 
8696       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
8697       /* Debug */
8698 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8699 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8700 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_ev_Legal_Info. '||SQLERRM;
8701 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8702 	END IF;
8703       RETURN 'U';
8704 
8705    WHEN OTHERS THEN
8706 
8707       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
8708          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
8709       END IF;
8710 
8711       Put_Log_Msg(l_api_name||' OTHERS return U',1);
8712       /* Debug */
8713 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8714 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_ev_Legal_Info';
8715 	   l_debug_str := 'EXCEPTION: Returning U from Update_ev_Legal_Info. '||SQLERRM;
8716 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8717 	END IF;
8718       RETURN  'U';
8719 
8720 END Update_ev_Legal_Info;
8721 
8722 /******************************************************************
8723    Created By         : Arkadi Tereshenkov
8724 
8725    Date Created By    : Oct 14, 2002
8726 
8727    Purpose            : Update registration block information.
8728 
8729    remarks            :
8730 
8731    Change History
8732    Who                  When            What
8733    pkpatel              30-JUN-2003     Bug 2908378
8734                                         Checked the status of Get_Address_Info properly.
8735 ------------------------------------------------------------------------
8736 
8737 ******************************************************************/
8738 FUNCTION Update_EV_Address_Info (
8739    p_person_rec      IN OUT NOCOPY t_student_rec    --Person record
8740 ) RETURN VARCHAR2
8741 IS
8742 
8743    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_EV_Address_Info';
8744    l_status      VARCHAR2(1);
8745 
8746 
8747   -- Old dates
8748    CURSOR c_valid IS
8749      SELECT is_valid
8750        FROM igs_pe_ev_form
8751       WHERE ev_form_id = p_person_rec.form_id;
8752 
8753   -- Select current session dates.
8754 
8755    l_valid           VARCHAR2(1);
8756    l_statsite        VARCHAR2(1);
8757    l_us_addr_rec     g_address_rec_type;
8758    l_count           NUMBER(10);
8759    l_cur             NUMBER(10);
8760    l_changes_found   VARCHAR2(1) := 'N'; --No changes by default
8761    l_prev_us_addr_rec IGS_SV_ADDRESSES%ROWTYPE;
8762 
8763    l_site_addr_rec     g_address_rec_type;
8764    l_prev_site_addr_rec IGS_SV_ADDRESSES%ROWTYPE;
8765 
8766 
8767 
8768 BEGIN
8769 
8770    Put_Log_Msg(l_api_name||' begins ',0);
8771    /* Debug */
8772 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8773    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8774    l_debug_str := 'Entering Update_EV_Address_Info. p_person_rec.form_id is '||p_person_rec.form_id;
8775    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8776 END IF;
8777 
8778 
8779    --Get valid flag
8780 
8781    OPEN c_valid;
8782    FETCH c_valid INTO l_valid;
8783    CLOSE c_valid;
8784 
8785    -- Foreign address is required
8786 
8787    p_person_rec.us_addr_status  := Validate_US_Addr_Info (p_person_rec => p_person_rec,
8788                                                           p_data_rec   => l_us_addr_rec,
8789                                                           p_records    => l_count);
8790 
8791 
8792    IF p_person_rec.us_addr_status  = 'E' THEN -- Validation error - mark person as invalid
8793 
8794      p_person_rec.person_status := 'I';
8795 
8796      Put_Log_Msg('Validation error occurs - return S ',1);
8797       /* Debug */
8798 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8799 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8800 	   l_debug_str := 'Returning S from Update_EV_Address_Info.';
8801 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8802 	END IF;
8803 
8804      RETURN 'S';
8805 
8806    ELSIF p_person_rec.us_addr_status  = 'U' THEN --Unexpected error - terminate execution
8807 
8808      Put_Log_Msg('Unexpected error returned by validation ',1);
8809      /* Debug */
8810 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8811 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8812 	   l_debug_str := 'Unexpected error in Update_EV_Address_Info.';
8813 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8814 	END IF;
8815 
8816      RAISE FND_API.G_EXC_ERROR;
8817 
8818    ELSIF p_person_rec.us_addr_status = 'N' THEN -- Not found
8819 
8820      Put_Log_Msg('US Address block is not found return S',0);
8821 
8822      FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_NO_US_ADDR_FLD_ERR'); --US address is not found
8823      Put_Log_Msg(FND_MESSAGE.Get,1);
8824 
8825      p_person_rec.person_status := 'I';
8826      /* Debug */
8827 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8828 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8829 	   l_debug_str := 'Returning S from Update_EV_Address_Info.';
8830 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8831 	END IF;
8832 
8833      RETURN 'S';
8834 
8835    END IF;
8836 
8837    -- Get old record and compare
8838 
8839    l_us_addr_rec(1).STDNT_VALID_FLAG := l_valid;
8840    l_prev_us_addr_rec.party_site_id := l_us_addr_rec(1).party_site_id ;
8841    l_prev_us_addr_rec.person_id := l_us_addr_rec(1).person_id ;
8842 
8843    l_status := Get_Address_Info ( p_data_rec  => l_prev_us_addr_rec);
8844 
8845    IF l_status = 'S' THEN
8846 
8847      IF l_prev_us_addr_rec.address_line1
8848         ||g_delimeter||l_prev_us_addr_rec.address_line2
8849         ||g_delimeter||l_prev_us_addr_rec.city
8850         ||g_delimeter||l_prev_us_addr_rec.state
8851         ||g_delimeter||l_prev_us_addr_rec.postal_code
8852         ||g_delimeter||l_prev_us_addr_rec.postal_routing_code
8853         ||g_delimeter||l_prev_us_addr_rec.country_code
8854         ||g_delimeter||l_prev_us_addr_rec.province
8855       --||g_delimeter||l_prev_us_addr_rec.stdnt_valid_flag
8856         ||g_delimeter||l_prev_us_addr_rec.primary_flag <>
8857         l_us_addr_rec(1).address_line1
8858         ||g_delimeter||l_us_addr_rec(1).address_line2
8859         ||g_delimeter||l_us_addr_rec(1).city
8860         ||g_delimeter||l_us_addr_rec(1).state
8861         ||g_delimeter||l_us_addr_rec(1).postal_code
8862         ||g_delimeter||l_us_addr_rec(1).postal_routing_code
8863         ||g_delimeter||l_us_addr_rec(1).country_code
8864         ||g_delimeter||l_us_addr_rec(1).province
8865       --||g_delimeter||l_us_addr_rec(1).stdnt_valid_flag
8866         ||g_delimeter||l_us_addr_rec(1).primary_flag THEN
8867         p_person_rec.us_addr_status := 'C';  -- Changed
8868         p_person_rec.changes_found := 'Y';
8869 
8870         Put_Log_Msg('US address is changed ',0);
8871 
8872      -- 2908378 this end if was placed at the end, hence the job was errored out when there is no change in address
8873      END IF;
8874 
8875    ELSIF l_status = 'N' THEN
8876 
8877          --Not found
8878 
8879          Put_Log_Msg('US info is changed - no prev record ',0);
8880          p_person_rec.us_addr_status := 'C';
8881          p_person_rec.changes_found := 'Y';
8882 
8883    ELSE
8884          --Error found l_status = 'U'
8885 	 /* Debug */
8886 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8887 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8888 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_EV_Address_Info.';
8889 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8890 	END IF;
8891          RAISE FND_API.G_EXC_ERROR;
8892 
8893    END IF;
8894 
8895    IF p_person_rec.us_addr_status  = 'C' AND p_person_rec.person_status <> 'I' THEN
8896       Insert_Address_Info ('US', p_data_rec  => l_us_addr_rec,p_records => 1);
8897    END IF;
8898    IF p_person_rec.person_status <> 'I' THEN --Check if site of activity is changed
8899 
8900 
8901      --Check site of activity
8902      p_person_rec.us_addr_status  := Validate_Site_Info (p_person_rec => p_person_rec,
8903                                                          p_data_rec   => l_site_addr_rec,
8904                                                          p_records    => l_count);
8905      IF p_person_rec.us_addr_status  = 'E' THEN -- Validation error - mark person as invalid
8906 
8907        p_person_rec.person_status := 'I';
8908 
8909        Put_Log_Msg('Validation error occurs - return S ',1);
8910        /* Debug */
8911 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8912 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8913 	   l_debug_str := 'Returning S from Update_EV_Address_Info. us_addr_status is E';
8914 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8915 	END IF;
8916 
8917        RETURN 'S';
8918 
8919      ELSIF p_person_rec.us_addr_status  = 'U' THEN --Unexpected error - terminate execution
8920 
8921        Put_Log_Msg('Unexpected error returned by validation ',1);
8922        /* Debug */
8923 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8924 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8925 	   l_debug_str := 'ERROR in Update_EV_Address_Info. us_addr_status is U';
8926 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8927 	END IF;
8928 
8929        RAISE FND_API.G_EXC_ERROR;
8930 
8931      ELSIF p_person_rec.us_addr_status = 'N' THEN -- Not found
8932 
8933        Put_Log_Msg('Site of activity Address block is not found return S',0);
8934        /* Debug */
8935 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8936 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
8937 	   l_debug_str := 'Returning S from Update_EV_Address_Info. us_addr_status is N';
8938 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8939 	END IF;
8940 
8941        RETURN 'S';
8942 
8943      END IF;
8944 
8945      -- Get old record and compare
8946      p_person_rec.site_addr_status := 'N';
8947 
8948      FOR l_cur IN 1..l_count LOOP
8949 
8950           l_prev_site_addr_rec.party_site_id := l_site_addr_rec(l_cur).party_site_id ;
8951           l_prev_site_addr_rec.person_id := l_site_addr_rec(l_cur).person_id ;
8952 
8953           l_statsite := Get_Address_Info ( p_data_rec  => l_prev_site_addr_rec);
8954 
8955 
8956 
8957 --manoj starts
8958 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8959 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Previous_Site_Info';
8960           l_debug_str :=		'address_line1='		|| l_prev_site_addr_rec.address_line1;
8961           l_debug_str := l_debug_str || 'address_line2='		|| l_prev_site_addr_rec.address_line2;
8962           l_debug_str := l_debug_str || 'city='			        || l_prev_site_addr_rec.city ;
8963           l_debug_str := l_debug_str || 'state='			|| l_prev_site_addr_rec.state;
8964           l_debug_str := l_debug_str || 'postal_code='			|| l_prev_site_addr_rec.postal_code;
8965           l_debug_str := l_debug_str || 'postal_routing_code='		|| l_prev_site_addr_rec.postal_routing_code;
8966           l_debug_str := l_debug_str || 'country_code='			|| l_prev_site_addr_rec.country_code;
8967           l_debug_str := l_debug_str || 'province='			|| l_prev_site_addr_rec.province;
8968           l_debug_str := l_debug_str || 'primary_flag='			|| l_prev_site_addr_rec.primary_flag;
8969           l_debug_str := l_debug_str || 'activity_site_cd='		|| l_prev_site_addr_rec.activity_site_cd;
8970           l_debug_str := l_debug_str || 'remarks='			|| l_prev_site_addr_rec.remarks ;
8971 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8972 	END IF;
8973 
8974 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
8975 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Current_Site_Info';
8976           l_debug_str :=		'address_line1='		|| l_site_addr_rec(l_cur).address_line1;
8977           l_debug_str := l_debug_str || 'address_line2='		|| l_site_addr_rec(l_cur).address_line2;
8978           l_debug_str := l_debug_str || 'city='			        || l_site_addr_rec(l_cur).city ;
8979           l_debug_str := l_debug_str || 'state='			|| l_site_addr_rec(l_cur).state;
8980           l_debug_str := l_debug_str || 'postal_code='			|| l_site_addr_rec(l_cur).postal_code;
8981           l_debug_str := l_debug_str || 'postal_routing_code='		|| l_site_addr_rec(l_cur).postal_routing_code;
8982           l_debug_str := l_debug_str || 'country_code='			|| l_site_addr_rec(l_cur).country_code;
8983           l_debug_str := l_debug_str || 'province='			|| l_site_addr_rec(l_cur).province;
8984           l_debug_str := l_debug_str || 'primary_flag='			|| l_site_addr_rec(l_cur).primary_flag;
8985           l_debug_str := l_debug_str || 'activity_site_cd='		|| l_site_addr_rec(l_cur).activity_site_cd;
8986           l_debug_str := l_debug_str || 'remarks='			|| l_site_addr_rec(l_cur).remarks ;
8987 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
8988 	END IF;
8989 --manoj ends
8990 
8991           IF l_statsite = 'N' THEN
8992 
8993 		--Not found
8994 
8995                Put_Log_Msg('site info is changed - no prev record ',0);
8996                p_person_rec.site_addr_status := 'C';
8997                p_person_rec.changes_found := 'Y';
8998 
8999           ELSIF l_statsite = 'S' THEN
9000 
9001 	       IF l_prev_site_addr_rec.action_type = 'U' THEN
9002 
9003 		    l_prev_site_addr_rec.action_type := 'C';
9004 		    p_person_rec.changes_found := 'Y';
9005 	       END IF;
9006 
9007 	       IF l_site_addr_rec(l_cur).action_type ='D' AND l_prev_site_addr_rec.action_type <> 'D' THEN
9008 		    p_person_rec.site_addr_status := 'C';
9009                     p_person_rec.changes_found := 'Y';
9010 	       ELSIF l_site_addr_rec(l_cur).action_type <> 'D' AND l_prev_site_addr_rec.action_type = 'D' THEN
9011 		    p_person_rec.site_addr_status := 'C';
9012                     p_person_rec.changes_found := 'Y';
9013                ELSIF l_prev_site_addr_rec.address_line1
9014 		    ||g_delimeter||l_prev_site_addr_rec.address_line2
9015 		    ||g_delimeter||l_prev_site_addr_rec.city
9016 		    ||g_delimeter||l_prev_site_addr_rec.state
9017 		    ||g_delimeter||l_prev_site_addr_rec.postal_code
9018 		    ||g_delimeter||l_prev_site_addr_rec.postal_routing_code
9019 		    ||g_delimeter||l_prev_site_addr_rec.country_code
9020 		    ||g_delimeter||l_prev_site_addr_rec.province
9021 		    --||g_delimeter||l_prev_site_addr_rec.stdnt_valid_flag
9022 		    ||g_delimeter||l_prev_site_addr_rec.primary_flag
9023 		    ||g_delimeter||l_prev_site_addr_rec.activity_site_cd
9024 		    ||g_delimeter||l_prev_site_addr_rec.remarks  <>
9025 		    l_site_addr_rec(l_cur).address_line1
9026 		    ||g_delimeter||l_site_addr_rec(l_cur).address_line2
9027 		    ||g_delimeter||l_site_addr_rec(l_cur).city
9028 		    ||g_delimeter||l_site_addr_rec(l_cur).state
9029 		    ||g_delimeter||l_site_addr_rec(l_cur).postal_code
9030 		    ||g_delimeter||l_site_addr_rec(l_cur).postal_routing_code
9031 		    ||g_delimeter||l_site_addr_rec(l_cur).country_code
9032 		    ||g_delimeter||l_site_addr_rec(l_cur).province
9033 		    --||g_delimeter||l_site_addr_rec(l_cur).stdnt_valid_flag
9034 		    ||g_delimeter||l_site_addr_rec(l_cur).primary_flag
9035 		    ||g_delimeter||l_site_addr_rec(l_cur).activity_site_cd
9036 		    ||g_delimeter||l_site_addr_rec(l_cur).remarks THEN
9037 
9038                          p_person_rec.site_addr_status := 'C';  -- Changed
9039 			 p_person_rec.changes_found := 'Y';
9040 
9041 			 l_site_addr_rec(l_cur).action_type := 'U';
9042 
9043 			 Put_Log_Msg('site address is changed ',0);
9044 	       ELSE
9045 
9046 		    l_site_addr_rec(l_cur).batch_id :=NULL;  -- delete from insert
9047 
9048                END IF;
9049 
9050           ELSE
9051            --Error found l_statsite = 'U'
9052 		/* Debug */
9053 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9054 		   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
9055 		   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_EV_Address_Info.';
9056 		   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9057 		END IF;
9058 
9059            RAISE FND_API.G_EXC_ERROR;
9060 
9061           END IF;
9062 
9063          /* IF p_person_rec.changes_found = 'Y' THEN
9064           -- one address only
9065 		/* Debug
9066 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9067 		   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
9068 		   l_debug_str := 'changes_found is Y. Exiting Update_EV_Address_Info.';
9069 		   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9070 		END IF;
9071                EXIT;
9072 
9073           END IF;*/
9074 
9075      END LOOP;
9076 
9077      IF p_person_rec.site_addr_status  = 'C' AND p_person_rec.person_status <> 'I'  THEN
9078 
9079         Insert_Address_Info ('SOA', p_data_rec  => l_site_addr_rec,p_records => l_count);
9080 
9081      END IF;
9082    END IF;
9083 
9084 
9085    Put_Log_Msg(l_api_name||' ends ',0);
9086    /* Debug */
9087 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9088    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
9089    l_debug_str := 'Returning S from Update_EV_Address_Info.';
9090    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9091 END IF;
9092 
9093    RETURN 'S';
9094 
9095 EXCEPTION
9096 
9097    WHEN FND_API.G_EXC_ERROR THEN
9098 
9099       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
9100       /* Debug */
9101 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9102 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
9103 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_EV_Address_Info. '||SQLERRM;
9104 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9105 	END IF;
9106       RETURN 'U';
9107 
9108    WHEN OTHERS THEN
9109 
9110       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
9111          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
9112       END IF;
9113 
9114       Put_Log_Msg(l_api_name||' OTHERS return U',1);
9115       /* Debug */
9116 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9117 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Address_Info';
9118 	   l_debug_str := 'EXCEPTION: Returning U from Update_EV_Address_Info. '||SQLERRM;
9119 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9120 	END IF;
9121 
9122       RETURN  'U';
9123 
9124 END Update_EV_Address_Info;
9125 
9126 
9127 
9128 /******************************************************************
9129    Created By         : Arkadi Tereshenkov
9130 
9131    Date Created By    : Oct 14, 2002
9132 
9133    Purpose            : Update Personal information block.
9134 
9135    Remarks            : 'S' - success
9136                         'U' - Unexpected error
9137 
9138    Change History
9139    Who                  When            What
9140 ------------------------------------------------------------------------
9141 
9142 ******************************************************************/
9143 FUNCTION Update_Personal_Info (
9144    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
9145 ) RETURN VARCHAR2
9146 IS
9147 
9148    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_Personal_Info';
9149    l_bio_rec     IGS_SV_BIO_INFO%ROWTYPE;
9150    l_oth_rec     IGS_SV_OTH_INFO%ROWTYPE;
9151    l_f_addr_rec  g_address_rec_type;
9152    l_us_addr_rec g_address_rec_type;
9153    l_count          NUMBER(10);
9154    l_changes_found  VARCHAR2(1) := 'N'; --No changes by default
9155    l_status      VARCHAR2(1);
9156 
9157    l_prev_bio_rec     IGS_SV_BIO_INFO%ROWTYPE;
9158    l_prev_oth_rec     IGS_SV_OTH_INFO%ROWTYPE;
9159    l_prev_f_addr_rec  IGS_SV_ADDRESSES%ROWTYPE;
9160    l_prev_us_addr_rec IGS_SV_ADDRESSES%ROWTYPE;
9161 
9162 
9163 BEGIN
9164    /* Debug */
9165 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9166    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9167    l_debug_str := 'Entering Update_Personal_Info. p_person_rec.person_id is '||p_person_rec.person_id;
9168    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9169 END IF;
9170 
9171    Put_Log_Msg(l_api_name||' begins ',0);
9172 
9173 
9174    -- Call Validate_Bio_Info
9175 
9176    p_person_rec.bio_status  := Validate_Bio_Info (p_person_rec =>p_person_rec,
9177                                                    p_data_rec  => l_bio_rec);
9178 
9179    IF p_person_rec.batch_type = 'I' THEN
9180      -- Call Validate_Other_Info
9181 
9182      p_person_rec.other_status  := Validate_Other_Info (p_person_rec => p_person_rec,
9183                                                         p_data_rec   => l_oth_rec);
9184 
9185      -- Call Validate_F_Addr_Info
9186 
9187      p_person_rec.f_addr_status  := Validate_F_Addr_Info (p_person_rec => p_person_rec,
9188                                                           p_data_rec   => l_f_addr_rec,
9189                                                           p_records    => l_count);
9190 
9191 
9192      -- Call Validate_US_address_Info
9193 
9194      p_person_rec.us_addr_status  := Validate_Us_Addr_Info (p_person_rec => p_person_rec,
9195                                                             p_data_rec   => l_us_addr_rec,
9196                                                             p_records   => l_count);
9197 
9198    ELSE
9199 
9200      p_person_rec.other_status  := 'N';
9201      p_person_rec.f_addr_status := 'N';
9202      p_person_rec.us_addr_status  := 'N';
9203 
9204    END IF;
9205 
9206    IF p_person_rec.bio_status = 'E'
9207       OR p_person_rec.other_status = 'E'
9208       OR p_person_rec.f_addr_status  = 'E'
9209       OR p_person_rec.us_addr_status = 'E' THEN -- Validation error - mark person as invalid
9210 
9211       p_person_rec.person_status := 'I';
9212 
9213       Put_Log_Msg('UPI - Validation error occurs ',1);
9214       /* Debug */
9215 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9216 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9217 	   l_debug_str := 'Returning S from Update_Personal_Info.';
9218 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9219 	END IF;
9220 
9221       RETURN 'S';
9222 
9223    END IF;
9224 
9225    IF ( p_person_rec.bio_status = 'U'
9226       OR p_person_rec.other_status = 'U'
9227       OR p_person_rec.f_addr_status  = 'U'
9228       OR p_person_rec.us_addr_status = 'U')  THEN --Unexpected error - terminate execution
9229 
9230       Put_Log_Msg('UPI - unexpected error returned by validation ',1);
9231       /* Debug */
9232 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9233 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9234 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Personal_Info.';
9235 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9236 	END IF;
9237 
9238       RAISE FND_API.G_EXC_ERROR;
9239 
9240    ELSIF p_person_rec.bio_status = 'N' THEN -- Not found
9241 
9242       -- These are I-20 blocks and should be found. If this happens - its a bug
9243 
9244       Put_Log_Msg('UPI BIO block is not found ',1);
9245       /* Debug */
9246 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9247 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9248 	   l_debug_str := 'IGS_SV_UNEXP_EXCPT_ERR in Update_Personal_Info. bio_status is N';
9249 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9250 	END IF;
9251 
9252 
9253 
9254       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
9255       FND_MESSAGE.SET_TOKEN('BLOCK_ID',2);
9256       FND_MSG_PUB.Add;
9257 
9258       RAISE FND_API.G_EXC_ERROR;
9259 
9260    END IF;
9261 
9262    -- Compare BIO
9263    l_prev_bio_rec.person_id := l_bio_rec.person_id;
9264 
9265    l_status := Get_Bio_Info ( p_data_rec  => l_prev_bio_rec);
9266 
9267    IF l_status = 'U' THEN
9268 	/* Debug */
9269 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9270 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9271 	   l_debug_str := 'FND_API.G_EXC_ERROR in Update_Personal_Info. l_status is U';
9272 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9273 	END IF;
9274       RAISE FND_API.G_EXC_ERROR;
9275 
9276    END IF;
9277 
9278    IF l_prev_bio_rec.birth_date
9279       ||g_delimeter||l_prev_bio_rec.birth_cntry_code
9280       ||g_delimeter||l_prev_bio_rec.citizen_cntry_code
9281       ||g_delimeter||l_prev_bio_rec.last_name
9282       ||g_delimeter||l_prev_bio_rec.middle_name
9283       ||g_delimeter||l_prev_bio_rec.first_name
9284       ||g_delimeter||l_prev_bio_rec.suffix
9285       ||g_delimeter||l_prev_bio_rec.gender
9286       ||g_delimeter||l_prev_bio_rec.legal_res_cntry_code
9287       ||g_delimeter||l_prev_bio_rec.position_code
9288       ||g_delimeter||l_prev_bio_rec.remarks
9289       ||g_delimeter||l_prev_bio_rec.commuter
9290       ||g_delimeter||l_prev_bio_rec.birth_cntry_resn_code
9291       ||g_delimeter||l_prev_bio_rec.birth_city	    <>
9292       l_bio_rec.birth_date
9293       ||g_delimeter||l_bio_rec.birth_cntry_code
9294       ||g_delimeter||l_bio_rec.citizen_cntry_code
9295       ||g_delimeter||l_bio_rec.last_name
9296       ||g_delimeter||l_bio_rec.middle_name
9297       ||g_delimeter||l_bio_rec.first_name
9298       ||g_delimeter||l_bio_rec.suffix
9299       ||g_delimeter||l_bio_rec.gender
9300       ||g_delimeter||l_bio_rec.legal_res_cntry_code
9301       ||g_delimeter||l_bio_rec.position_code
9302       ||g_delimeter||l_bio_rec.remarks
9303       ||g_delimeter||l_bio_rec.commuter
9304       ||g_delimeter||l_bio_rec.birth_cntry_resn_code
9305       ||g_delimeter||l_bio_rec.birth_city      THEN
9306 
9307       p_person_rec.bio_status := 'C';  -- Changed
9308       p_person_rec.changes_found := 'Y';
9309       Put_Log_Msg('Bio info is changed  ',0);
9310       /* Debug */
9311 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9312 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9313 	   l_debug_str := 'Bio Info changed. l_prev_bio_rec.citizen_cntry_code '||l_prev_bio_rec.citizen_cntry_code||' and l_bio_rec.citizen_cntry_code:'||l_bio_rec.citizen_cntry_code;
9314 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9315 	END IF;
9316 
9317    END IF;
9318 
9319    -- Get other
9320    IF p_person_rec.other_status = 'S' THEN --Found new info
9321 
9322       l_prev_oth_rec.person_id := l_oth_rec.person_id;
9323 
9324       l_status := Get_Other_Info ( p_data_rec  => l_prev_oth_rec);
9325 
9326       IF l_status = 'S' THEN
9327 
9328          IF l_prev_oth_rec.drivers_license
9329             ||g_delimeter||l_prev_oth_rec.drivers_license_state
9330             ||g_delimeter||l_prev_oth_rec.ssn
9331             ||g_delimeter||l_prev_oth_rec.tax_id  <>
9332             l_oth_rec.drivers_license
9333             ||g_delimeter||l_oth_rec.drivers_license_state
9334             ||g_delimeter||l_oth_rec.ssn
9335             ||g_delimeter||l_oth_rec.tax_id  THEN
9336 
9337             p_person_rec.other_status := 'C';  -- Changed
9338             Put_Log_Msg('Other info is changed ',0);
9339             p_person_rec.changes_found := 'Y';
9340 
9341          END IF;
9342 
9343       ELSIF l_status = 'N' THEN
9344 
9345          --Not found
9346          Put_Log_Msg('Other info is changed  ',0);
9347          p_person_rec.other_status := 'C';
9348          p_person_rec.changes_found := 'Y';
9349 
9350 
9351       ELSE
9352 
9353          --Error found l_status = 'U'
9354 	/* Debug */
9355 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9356 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9357 	   l_debug_str := 'FND_API.G_EXC_ERROR in Update_Personal_Info.';
9358 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9359 	END IF;
9360 
9361          RAISE FND_API.G_EXC_ERROR;
9362 
9363       END IF;
9364 
9365    END IF; --End of read and compare
9366 
9367    -- Compare Address
9368 
9369    IF p_person_rec.f_addr_status = 'S' THEN --Found new info
9370 
9371       l_prev_f_addr_rec.person_id := l_f_addr_rec(1).person_id ;
9372       l_prev_f_addr_rec.party_site_id := l_f_addr_rec(1).party_site_id ;
9373 
9374       l_status := Get_Address_Info ( p_data_rec  => l_prev_f_addr_rec);
9375 
9376       IF l_status = 'S' THEN
9377 
9378          IF l_prev_f_addr_rec.address_line1
9379             ||g_delimeter||l_prev_f_addr_rec.address_line2
9380             ||g_delimeter||l_prev_f_addr_rec.city
9381             ||g_delimeter||l_prev_f_addr_rec.state
9382             ||g_delimeter||l_prev_f_addr_rec.postal_code
9383             ||g_delimeter||l_prev_f_addr_rec.postal_routing_code
9384             ||g_delimeter||l_prev_f_addr_rec.country_code
9385             ||g_delimeter||l_prev_f_addr_rec.province
9386           --  ||g_delimeter||l_prev_f_addr_rec.stdnt_valid_flag
9387             ||g_delimeter||l_prev_f_addr_rec.primary_flag <>
9388             l_f_addr_rec(1).address_line1
9389             ||g_delimeter||l_f_addr_rec(1).address_line2
9390             ||g_delimeter||l_f_addr_rec(1).city
9391             ||g_delimeter||l_f_addr_rec(1).state
9392             ||g_delimeter||l_f_addr_rec(1).postal_code
9393             ||g_delimeter||l_f_addr_rec(1).postal_routing_code
9394             ||g_delimeter||l_f_addr_rec(1).country_code
9395             ||g_delimeter||l_f_addr_rec(1).province
9396            -- ||g_delimeter||l_f_addr_rec(1).stdnt_valid_flag
9397             ||g_delimeter||l_f_addr_rec(1).primary_flag THEN
9398 
9399             p_person_rec.f_addr_status := 'C';  -- Changed
9400 
9401             p_person_rec.changes_found := 'Y';
9402             Put_Log_Msg('F Address is changed',0);
9403 
9404          END IF;
9405 
9406       ELSIF l_status = 'N' THEN
9407 
9408          --Not found
9409 
9410          Put_Log_Msg('F address info is changed  ',0);
9411          p_person_rec.f_addr_status := 'C';
9412          p_person_rec.changes_found := 'Y';
9413 
9414       ELSE
9415 
9416          --Error found l_status = 'U'
9417 	 /* Debug */
9418 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9419 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9420 	   l_debug_str := 'FND_API.G_EXC_ERROR in Update_Personal_Info. f_addr_status is S';
9421 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9422 	END IF;
9423 
9424          RAISE FND_API.G_EXC_ERROR;
9425 
9426       END IF;
9427 
9428    END IF; --End of read and compare
9429 
9430 
9431    IF p_person_rec.us_addr_status = 'S' THEN --Found new info
9432 
9433       l_prev_us_addr_rec.party_site_id := l_us_addr_rec(1).party_site_id ;
9434       l_prev_us_addr_rec.person_id := l_us_addr_rec(1).person_id ;
9435 
9436       l_status := Get_Address_Info ( p_data_rec  => l_prev_us_addr_rec);
9437 
9438       IF l_status = 'S' THEN
9439 
9440          IF l_prev_us_addr_rec.address_line1
9441             ||g_delimeter||l_prev_us_addr_rec.address_line2
9442             ||g_delimeter||l_prev_us_addr_rec.city
9443             ||g_delimeter||l_prev_us_addr_rec.state
9444             ||g_delimeter||l_prev_us_addr_rec.postal_code
9445             ||g_delimeter||l_prev_us_addr_rec.postal_routing_code
9446             ||g_delimeter||l_prev_us_addr_rec.country_code
9447             ||g_delimeter||l_prev_us_addr_rec.province
9448           --||g_delimeter||l_prev_us_addr_rec.stdnt_valid_flag
9449             ||g_delimeter||l_prev_us_addr_rec.primary_flag <>
9450             l_us_addr_rec(1).address_line1
9451             ||g_delimeter||l_us_addr_rec(1).address_line2
9452             ||g_delimeter||l_us_addr_rec(1).city
9453             ||g_delimeter||l_us_addr_rec(1).state
9454             ||g_delimeter||l_us_addr_rec(1).postal_code
9455             ||g_delimeter||l_us_addr_rec(1).postal_routing_code
9456             ||g_delimeter||l_us_addr_rec(1).country_code
9457             ||g_delimeter||l_us_addr_rec(1).province
9458          -- ||g_delimeter||l_us_addr_rec(1).stdnt_valid_flag
9459             ||g_delimeter||l_us_addr_rec(1).primary_flag THEN
9460 
9461             p_person_rec.us_addr_status := 'C';  -- Changed
9462             p_person_rec.changes_found := 'Y';
9463 
9464             Put_Log_Msg('US address is changed ',0);
9465 
9466          END IF;
9467 
9468       ELSIF l_status = 'N' THEN
9469 
9470          --Not found
9471 
9472          Put_Log_Msg('US info is changed - no prev record ',0);
9473          p_person_rec.us_addr_status := 'C';
9474          p_person_rec.changes_found := 'Y';
9475 
9476       ELSE
9477          --Error found l_status = 'U'
9478 	 /* Debug */
9479 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9480 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9481 	   l_debug_str := 'FND_API.G_EXC_ERROR in Update_Personal_Info. us_addr_status is S';
9482 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9483 	END IF;
9484 
9485          RAISE FND_API.G_EXC_ERROR;
9486 
9487       END IF;
9488 
9489    END IF; --End of read and compare
9490 
9491    -- Insert
9492    IF p_person_rec.person_status <> 'I'
9493       AND (p_person_rec.bio_status = 'C'
9494         OR p_person_rec.other_status = 'C'
9495         OR p_person_rec.f_addr_status  = 'C'
9496         OR p_person_rec.us_addr_status = 'C') THEN
9497 
9498       p_person_rec.changes_found := 'Y';
9499       Put_Log_Msg('Info is chnaged for the block - do insert',0);
9500 
9501       -- There are changes need to insert data
9502       IF  p_person_rec.bio_status  = 'C'  THEN
9503           Insert_Bio_Info ( p_data_rec  => l_bio_rec);
9504       END IF;
9505 
9506       IF p_person_rec.batch_type = 'I' AND p_person_rec.other_status  = 'C' THEN
9507 
9508          Insert_Other_Info ( p_data_rec  => l_oth_rec);
9509 
9510       END IF;
9511 
9512       IF  p_person_rec.batch_type = 'I' AND   p_person_rec.f_addr_status  = 'C'  THEN
9513 
9514          Insert_Address_Info ('F', p_data_rec  => l_f_addr_rec,p_records => 1);   --- prbhardw CP enhancement
9515 
9516       END IF;
9517 
9518       IF  p_person_rec.batch_type = 'I' AND p_person_rec.us_addr_status  = 'C'  THEN
9519 
9520          Insert_Address_Info ( 'US',p_data_rec  => l_us_addr_rec,p_records => 1);   --- prbhardw CP enhancement
9521 
9522       END IF;
9523 
9524    END IF;
9525 
9526    Put_Log_Msg(l_api_name||' ends ',0);
9527    /* Debug */
9528 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9529    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9530    l_debug_str := 'Returning S from Update_Personal_Info.';
9531    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9532 END IF;
9533 
9534    RETURN 'S';
9535 
9536 EXCEPTION
9537 
9538    WHEN FND_API.G_EXC_ERROR THEN
9539 
9540       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
9541       /* Debug */
9542 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9543 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9544 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Personal_Info. '||SQLERRM;
9545 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9546 	END IF;
9547       RETURN 'U';
9548 
9549    WHEN OTHERS THEN
9550 
9551       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
9552          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
9553       END IF;
9554 
9555       Put_Log_Msg(l_api_name||' OTHERS return U',1);
9556       /* Debug */
9557 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9558 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Personal_Info';
9559 	   l_debug_str := 'EXCEPTION: Returning U from Update_Personal_Info. '||SQLERRM;
9560 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9561 	END IF;
9562       RETURN  'U';
9563 
9564 END Update_Personal_Info;
9565 
9566 FUNCTION Get_EV_Prgm_Info (
9567    p_data_rec  IN OUT NOCOPY  IGS_SV_PRGMS_INFO%ROWTYPE     -- Data record
9568 )   RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
9569 IS
9570 
9571    l_api_name CONSTANT VARCHAR2(25) := 'Get_EV_Prgm_Info';
9572 
9573    CURSOR c_data_rec IS
9574      SELECT  prgm_action_type,
9575 	   prgm_start_date,
9576 	   prgm_end_date ,
9577 	   effective_date,
9578 	   termination_reason,
9579 	   end_prgm_reason,
9580 	   remarks
9581      FROM igs_sv_prgms_info
9582      WHERE person_id = p_data_rec.person_id AND
9583             batch_id IN
9584             (  SELECT max(prg.batch_id)
9585                  FROM igs_sv_prgms_info prg,
9586                       igs_sv_persons pr
9587                 WHERE prg.person_id = pr.person_id
9588                       AND prg.batch_id = pr.batch_id
9589                       AND pr.record_status <> 'E'
9590                       AND prg.person_id = p_data_rec.person_id
9591             )
9592      ORDER BY effective_date;
9593    BEGIN
9594 	/* Debug */
9595 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9596 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_EV_Prgm_Info';
9597 	  l_debug_str := 'Entering Get_EV_Prgm_Info. p_data_rec.person_id is '||p_data_rec.person_id;
9598 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9599 	END IF;
9600 
9601    Put_Log_Msg(l_api_name||' begins ',0);
9602 
9603    OPEN c_data_rec;
9604    FETCH c_data_rec
9605     INTO p_data_rec.prgm_action_type,
9606          p_data_rec.prgm_start_date,
9607          p_data_rec.prgm_end_date ,
9608          p_data_rec.effective_date,
9609          p_data_rec.termination_reason,
9610          p_data_rec.end_prgm_reason,
9611          p_data_rec.remarks ;
9612 
9613    IF c_data_rec%NOTFOUND THEN
9614 
9615       Put_Log_Msg('Record not found ',0);
9616       CLOSE c_data_rec;
9617       /* Debug */
9618 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9619 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_EV_Prgm_Info';
9620 	  l_debug_str := 'Returning N from Get_EV_Prgm_Info';
9621 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9622 	END IF;
9623       RETURN 'N';
9624 
9625    END IF;
9626 
9627    CLOSE c_data_rec;
9628 
9629    Put_Log_Msg(l_api_name||' ends S ',0);
9630 	/* Debug */
9631 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9632 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_EV_Prgm_Info';
9633 	  l_debug_str := 'Returning S from Get_EV_Prgm_Info';
9634 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9635 	END IF;
9636    RETURN 'S';
9637 
9638 EXCEPTION
9639 
9640    WHEN FND_API.G_EXC_ERROR THEN
9641 	 /* Debug */
9642 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9643 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_EV_Prgm_Info';
9644 	  l_debug_str := 'Exception in Get_EV_Prgm_Info '||SQLERRM;
9645 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9646 	END IF;
9647 
9648       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
9649       RETURN 'U';
9650 
9651    WHEN OTHERS THEN
9652       /* Debug */
9653 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9654 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_EV_Prgm_Info';
9655 	  l_debug_str := 'Exception in Get_EV_Prgm_Info '||SQLERRM;
9656 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9657 	END IF;
9658       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
9659          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
9660       END IF;
9661 
9662       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
9663       RETURN  'U';
9664 
9665 END Get_EV_Prgm_Info;
9666 
9667 FUNCTION Get_nonimg_Prgm_Info (
9668    p_data_rec  IN OUT NOCOPY  IGS_SV_PRGMS_INFO%ROWTYPE     -- Data record
9669 )   RETURN VARCHAR2  -- 'S' Record found, 'N' - not found. 'U' - Unexpected error
9670 IS
9671 
9672    l_api_name CONSTANT VARCHAR2(25) := 'Get_nonimg_Prgm_Info';
9673 
9674    CURSOR c_data_rec IS
9675      SELECT effective_date,
9676 	   prgm_action_type,
9677 	   prgm_start_date,
9678 	   prgm_end_date,
9679 	   remarks,
9680 	   termination_reason,
9681 	   print_form
9682      FROM igs_sv_prgms_info
9683      WHERE person_id = p_data_rec.person_id AND
9684             batch_id IN
9685             (  SELECT max(prg.batch_id)
9686                  FROM igs_sv_prgms_info prg,
9687                       igs_sv_persons pr
9688                 WHERE prg.person_id = pr.person_id
9689                       AND prg.batch_id = pr.batch_id
9690                       AND pr.record_status <> 'E'
9691                       AND prg.person_id = p_data_rec.person_id
9692             )
9693      ORDER BY effective_date;
9694    BEGIN
9695 	/* Debug */
9696 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9697 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_nonimg_Prgm_Info';
9698 	  l_debug_str := 'Entering Get_nonimg_Prgm_Info. p_data_rec.person_id is '||p_data_rec.person_id;
9699 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9700 	END IF;
9701 
9702    Put_Log_Msg(l_api_name||' begins ',0);
9703 
9704    OPEN c_data_rec;
9705    FETCH c_data_rec
9706     INTO p_data_rec.effective_date,
9707          p_data_rec.prgm_action_type,
9708          p_data_rec.prgm_start_date,
9709          p_data_rec.prgm_end_date,
9710          p_data_rec.remarks,
9711          p_data_rec.termination_reason,
9712          p_data_rec.print_form  ;
9713    IF c_data_rec%NOTFOUND THEN
9714 
9715       Put_Log_Msg('Record not found ',0);
9716       CLOSE c_data_rec;
9717       /* Debug */
9718 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9719 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_nonimg_Prgm_Info';
9720 	  l_debug_str := 'Returning N from Get_nonimg_Prgm_Info';
9721 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9722 	END IF;
9723       RETURN 'N';
9724 
9725    END IF;
9726 
9727    CLOSE c_data_rec;
9728 
9729    Put_Log_Msg(l_api_name||' ends S ',0);
9730 	/* Debug */
9731 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9732 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_nonimg_Prgm_Info';
9733 	  l_debug_str := 'Returning S from Get_nonimg_Prgm_Info';
9734 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9735 	END IF;
9736    RETURN 'S';
9737 
9738 EXCEPTION
9739 
9740    WHEN FND_API.G_EXC_ERROR THEN
9741 	 /* Debug */
9742 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9743 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_nonimg_Prgm_Info';
9744 	  l_debug_str := 'Exception in Get_nonimg_Prgm_Info '||SQLERRM;
9745 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9746 	END IF;
9747 
9748       Put_Log_Msg(l_api_name||' EXEC ERROR ',1);
9749       RETURN 'U';
9750 
9751    WHEN OTHERS THEN
9752       /* Debug */
9753 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9754 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Get_nonimg_Prgm_Info';
9755 	  l_debug_str := 'Exception in Get_nonimg_Prgm_Info '||SQLERRM;
9756 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9757 	END IF;
9758       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
9759          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
9760       END IF;
9761 
9762       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
9763       RETURN  'U';
9764 
9765 END Get_nonimg_Prgm_Info;
9766 
9767 /******************************************************************
9768    Created By         : Arkadi Tereshenkov
9769 
9770    Date Created By    : Oct 14, 2002
9771 
9772    Purpose            : Update program information block
9773 
9774    Remarks            :
9775 
9776    Change History
9777    Who                  When            What
9778 ------------------------------------------------------------------------
9779 
9780 ******************************************************************/
9781 FUNCTION Update_Program_Info (
9782    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
9783 ) RETURN VARCHAR2
9784 IS
9785 
9786    l_api_name   CONSTANT VARCHAR2(30)   := 'Update_Program_Info';
9787    l_cur_rec    IGS_SV_PRGMS_INFO%ROWTYPE;
9788    l_status     VARCHAR2(1);
9789    l_prev_rec   IGS_SV_PRGMS_INFO%ROWTYPE;
9790    l_count      NUMBER(10);
9791    l_cur_prgm_rec  g_edu_rec_type;
9792    l_cur_authdrp_rec  g_edu_rec_type;
9793    l_auth_rec_count NUMBER := 0;
9794 BEGIN
9795 
9796    Put_Log_Msg(l_api_name||' begins ',0);
9797    /* Debug */
9798 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9799    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9800    l_debug_str := 'Entering Update_Program_Info. p_person_rec.person_id is '||p_person_rec.person_id;
9801    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9802 END IF;
9803 
9804    -- First part - check program Info block
9805 
9806    p_person_rec.edu_status  := Validate_Edu_Info (p_person_rec => p_person_rec,
9807                                                   p_data_rec   => l_cur_rec);
9808 
9809    IF p_person_rec.edu_status = 'E'  THEN -- Validation error - mark person as invalid
9810 
9811       p_person_rec.person_status := 'I';
9812 
9813       Put_Log_Msg('Validation error occurs ',1);
9814        /* Debug */
9815 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9816 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9817 	   l_debug_str := 'Returning S from Update_Program_Info. p_person_rec.edu_status is E';
9818 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9819 	END IF;
9820 
9821       RETURN 'S';
9822 
9823    END IF;
9824 
9825    IF p_person_rec.edu_status = 'U' THEN --Unexpected error - terminate execution
9826 
9827       Put_Log_Msg('Unexpected error returned by validation ',1);
9828       /* Debug */
9829 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9830 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9831 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. p_person_rec.edu_status is U';
9832 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9833 	END IF;
9834 
9835       RAISE FND_API.G_EXC_ERROR;
9836 
9837    ELSIF p_person_rec.edu_status = 'N' THEN -- Not found
9838 
9839       -- These are I-20 blocks and should be found. If this happens - its a bug
9840 
9841       Put_Log_Msg('EDU block is not found ',0);
9842       /* Debug */
9843 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9844 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9845 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. p_person_rec.edu_status is N.';
9846 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9847 	END IF;
9848 
9849       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
9850       FND_MESSAGE.SET_TOKEN('BLOCK_ID',3);
9851       FND_MSG_PUB.Add;
9852 
9853       RAISE FND_API.G_EXC_ERROR;
9854 
9855    END IF;
9856 
9857 
9858    -- Compare EDU Info
9859    l_prev_rec.person_id := p_person_rec.person_id;
9860 
9861    l_status := Get_Edu_Info ( p_data_rec  => l_prev_rec);
9862 
9863    IF l_status = 'U' OR l_status = 'N' THEN
9864 	/* Debug */
9865 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9866 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9867 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. l_status is U or N.';
9868 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9869 	END IF;
9870       RAISE FND_API.G_EXC_ERROR;
9871 
9872    END IF;
9873 
9874    IF l_prev_rec.position_code
9875       ||g_delimeter||l_prev_rec.subject_field_code
9876       ||g_delimeter||l_prev_rec.education_level
9877       ||g_delimeter||l_prev_rec.primary_major
9878       ||g_delimeter||l_prev_rec.secondary_major
9879       ||g_delimeter||l_prev_rec.educ_lvl_remarks
9880       ||g_delimeter||l_prev_rec.minor
9881       ||g_delimeter||l_prev_rec.length_of_study
9882       ||g_delimeter||l_prev_rec.prgm_start_date
9883       ||g_delimeter||l_prev_rec.prgm_end_date
9884       ||g_delimeter||l_prev_rec.english_reqd
9885       ||g_delimeter||l_prev_rec.english_reqd_met
9886       ||g_delimeter||l_prev_rec.not_reqd_reason
9887         <>
9888       l_cur_rec.position_code
9889       ||g_delimeter||l_cur_rec.subject_field_code
9890       ||g_delimeter||l_cur_rec.education_level
9891       ||g_delimeter||l_cur_rec.primary_major
9892       ||g_delimeter||l_cur_rec.secondary_major
9893       ||g_delimeter||l_cur_rec.educ_lvl_remarks
9894       ||g_delimeter||l_cur_rec.minor
9895       ||g_delimeter||l_cur_rec.length_of_study
9896       ||g_delimeter||l_cur_rec.prgm_start_date
9897       ||g_delimeter||l_cur_rec.prgm_end_date
9898       ||g_delimeter||l_cur_rec.english_reqd
9899       ||g_delimeter||l_cur_rec.english_reqd_met
9900       ||g_delimeter||l_cur_rec.not_reqd_reason
9901       THEN
9902 
9903       p_person_rec.edu_status := 'C';  -- Changed
9904 
9905       p_person_rec.changes_found := 'Y';
9906 
9907       Put_Log_Msg('EDU info is changed  ',0);
9908 
9909       IF p_person_rec.person_status <> 'I'  THEN
9910 
9911         Insert_Edu_Info ( 'EDU', p_data_rec  => l_cur_rec, p_auth_drp_data_rec => NULL);
9912 
9913       END IF;
9914 
9915    END IF;
9916 
9917    -- Validate program block
9918 
9919    p_person_rec.edu_status  := Validate_Prgm_Info (p_person_rec =>p_person_rec, p_data_rec  => l_cur_prgm_rec, p_records => l_count, p_auth_drp_data_rec => l_cur_authdrp_rec);
9920    IF p_person_rec.edu_status = 'E'  THEN -- Validation error - mark person as invalid
9921 
9922       p_person_rec.person_status := 'I';
9923 
9924       Put_Log_Msg('Validation error occurs ',1);
9925 	/* Debug */
9926 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9927 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9928 	   l_debug_str := 'Returning S from Update_Program_Info.';
9929 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9930 	END IF;
9931 
9932       RETURN 'S';
9933 
9934    ELSIF p_person_rec.edu_status = 'U' THEN --Unexpected error - terminate execution
9935 
9936       Put_Log_Msg('Unexpected error returned by validation ',1);
9937       /* Debug */
9938 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9939 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
9940 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info.';
9941 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9942 	END IF;
9943 
9944       RAISE FND_API.G_EXC_ERROR;
9945 
9946    END IF;
9947 
9948    FOR l_current IN 1.. l_count LOOP
9949 
9950       Put_Log_Msg('Checking NI programs  '||l_cur_prgm_rec(l_current).person_id,0);
9951       l_prev_rec.person_id := p_person_rec.person_id;
9952 
9953       p_person_rec.edu_status := 'S';  -- Changed
9954 
9955       l_status := Get_nonimg_Prgm_Info ( p_data_rec => l_prev_rec);
9956 
9957       IF l_status = 'U' THEN
9958        /* Debug */
9959         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
9960           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
9961           l_debug_str := 'Unexpected error in Update_Employment_Info. l_status is U.';
9962           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
9963         END IF;
9964          RAISE FND_API.G_EXC_ERROR;
9965       END IF;
9966 
9967       IF  l_status = 'S' THEN
9968           IF
9969 	  (
9970 	   l_prev_rec.prgm_action_type
9971 	   ||g_delimeter||l_prev_rec.effective_date
9972 	   ||g_delimeter||l_prev_rec.print_form
9973 	   ||g_delimeter||l_prev_rec.prgm_start_date
9974 	   ||g_delimeter||l_prev_rec.prgm_end_date
9975 	   ||g_delimeter||l_prev_rec.remarks
9976 	   ||g_delimeter||l_prev_rec.termination_reason
9977 	   <>
9978 	   l_cur_prgm_rec(l_current).prgm_action_type
9979 	   ||g_delimeter||l_cur_prgm_rec(l_current).effective_date
9980 	   ||g_delimeter||l_cur_prgm_rec(l_current).print_form
9981 	   ||g_delimeter||l_cur_prgm_rec(l_current).prgm_start_date
9982 	   ||g_delimeter||l_cur_prgm_rec(l_current).prgm_end_date
9983 	   ||g_delimeter||l_cur_prgm_rec(l_current).remarks
9984 	   ||g_delimeter||l_cur_prgm_rec(l_current).termination_reason
9985 	  ) THEN
9986 		 Put_Log_Msg('Info is changed for  '||l_cur_prgm_rec(l_current).person_id,0);
9987 		 p_person_rec.edu_status := 'C';  -- Changed
9988 		 p_person_rec.changes_found := 'Y';
9989              END IF;
9990 
9991       ELSE   --Remove current person from the insert list
9992         l_cur_prgm_rec(l_current).person_id := NULL;
9993       END IF;
9994 
9995       IF p_person_rec.edu_status = 'C' AND p_person_rec.person_status <> 'I' THEN
9996 	Insert_Edu_Info ('PRGM', p_data_rec  => l_cur_prgm_rec(l_current), p_auth_drp_data_rec => NULL);  -- prbhardw EN change
9997       END IF;
9998    END LOOP;
9999 
10000     -- prbhardw EN change
10001     l_auth_rec_count := l_cur_authdrp_rec.COUNT;
10002      FOR l_current IN 1.. l_auth_rec_count LOOP
10003 	  IF l_cur_authdrp_rec(l_current).auth_action_code IS NOT NULL AND l_cur_authdrp_rec(l_current).prgm_action_type IS NOT NULL THEN
10004 	    Put_Log_Msg('validating Authorization. going to insert record',0);
10005 	    p_person_rec.edu_status := 'C';  -- Changed
10006             p_person_rec.changes_found := 'Y';
10007 	    Put_Log_Msg('Authorization Info is changed for  '||l_cur_authdrp_rec(l_current).person_id,0);
10008 	     Insert_Auth_Code (p_auth_drp_data_rec => l_cur_authdrp_rec(l_current));
10009 	  END IF;
10010      END LOOP;
10011 
10012   Put_Log_Msg(l_api_name||' ends ',0);
10013     /* Debug */
10014 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10015 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10016 	   l_debug_str := 'Final Return S from Update_Program_Info.';
10017 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10018 	END IF;
10019 
10020     RETURN 'S';
10021 
10022 EXCEPTION
10023 
10024    WHEN FND_API.G_EXC_ERROR THEN
10025 
10026       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
10027       /* Debug */
10028 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10029 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10030 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Program_Info. '||SQLERRM;
10031 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10032 	END IF;
10033       RETURN 'U';
10034 
10035    WHEN OTHERS THEN
10036 
10037       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
10038          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
10039       END IF;
10040 
10041       Put_Log_Msg(l_api_name||' OTHERS return U',1);
10042       /* Debug */
10043 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10044 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10045 	   l_debug_str := 'EXCEPTION: Returning U from Update_Program_Info. '||SQLERRM;
10046 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10047 	END IF;
10048 
10049       RETURN  'U';
10050 
10051 END Update_Program_Info;
10052 
10053 
10054 
10055 /******************************************************************
10056    Created By         : Arkadi Tereshenkov
10057 
10058    Date Created By    : Oct 14, 2002
10059 
10060    Purpose            : Update EV program information block
10061 
10062    Remarks            :
10063 
10064    Change History
10065    Who                  When            What
10066 ------------------------------------------------------------------------
10067 
10068 ******************************************************************/
10069 FUNCTION Update_EV_Program_Info (
10070    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
10071 ) RETURN VARCHAR2
10072 IS
10073 
10074    l_api_name   CONSTANT VARCHAR2(30)   := 'Update_EV_Program_Info';
10075    l_cur_rec    IGS_SV_PRGMS_INFO%ROWTYPE;
10076    l_cur_authdrp_rec  g_edu_rec_type;
10077    l_status     VARCHAR2(1);
10078    l_prev_rec   IGS_SV_PRGMS_INFO%ROWTYPE;
10079    l_count      NUMBER(10);
10080    l_cur_prgm_rec  g_edu_rec_type;
10081 
10082 BEGIN
10083 
10084    Put_Log_Msg(l_api_name||' begins ',0);
10085    /* Debug */
10086 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10087    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10088    l_debug_str := 'Entering Update_EV_Program_Info. p_person_rec.person_id is '||p_person_rec.person_id;
10089    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10090 END IF;
10091 
10092 
10093 	p_person_rec.edu_status  := Validate_Edu_Info (p_person_rec => p_person_rec,
10094                                                   p_data_rec   => l_cur_rec);
10095 
10096    IF p_person_rec.edu_status = 'E'  THEN -- Validation error - mark person as invalid
10097 
10098       p_person_rec.person_status := 'I';
10099 
10100       Put_Log_Msg('Validation error occurs ',1);
10101        /* Debug */
10102 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10103 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10104 	   l_debug_str := 'Returning S from Update_Program_Info. p_person_rec.edu_status is E';
10105 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10106 	END IF;
10107 
10108       RETURN 'S';
10109 
10110    END IF;
10111 
10112    IF p_person_rec.edu_status = 'U' THEN --Unexpected error - terminate execution
10113 
10114       Put_Log_Msg('Unexpected error returned by validation ',1);
10115       /* Debug */
10116 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10117 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10118 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. p_person_rec.edu_status is U';
10119 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10120 	END IF;
10121 
10122       RAISE FND_API.G_EXC_ERROR;
10123 
10124    ELSIF p_person_rec.edu_status = 'N' THEN -- Not found
10125 
10126       -- These are I-20 blocks and should be found. If this happens - its a bug
10127 
10128       Put_Log_Msg('EDU block is not found ',0);
10129       /* Debug */
10130 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10131 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10132 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. p_person_rec.edu_status is N.';
10133 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10134 	END IF;
10135 
10136       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
10137       FND_MESSAGE.SET_TOKEN('BLOCK_ID',3);
10138       FND_MSG_PUB.Add;
10139 
10140       RAISE FND_API.G_EXC_ERROR;
10141 
10142    END IF;
10143 
10144 
10145    -- Compare EDU Info
10146    l_prev_rec.person_id := p_person_rec.person_id;
10147 
10148    l_status := Get_Edu_Info ( p_data_rec  => l_prev_rec);
10149 
10150    IF l_status = 'U' OR l_status = 'N' THEN
10151 	/* Debug */
10152 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10153 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Program_Info';
10154 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_Program_Info. l_status is U or N.';
10155 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10156 	END IF;
10157       RAISE FND_API.G_EXC_ERROR;
10158 
10159    END IF;
10160 /*
10161    IF l_prev_rec.position_code
10162       ||g_delimeter||l_prev_rec.remarks
10163       <>
10164       l_cur_rec.position_code
10165       ||g_delimeter||l_cur_rec.remarks
10166       THEN
10167 
10168       p_person_rec.edu_status := 'C';  -- Changed
10169 
10170       p_person_rec.changes_found := 'Y';
10171 
10172       Put_Log_Msg('EDU info is changed  ',0);
10173 
10174       IF p_person_rec.person_status <> 'I'  THEN
10175 
10176         Insert_Edu_Info ( 'EDU', p_data_rec  => l_cur_rec, p_auth_drp_data_rec => l_cur_authdrp_rec);
10177 
10178       END IF;
10179 
10180    END IF;
10181 */
10182    IF l_prev_rec.subject_field_code  <>  l_cur_rec.subject_field_code  THEN
10183 
10184       p_person_rec.edu_status := 'C';  -- Changed
10185 
10186       p_person_rec.changes_found := 'Y';
10187 
10188       Put_Log_Msg('EDU info is changed  ',0);
10189 
10190       IF p_person_rec.person_status <> 'I'  THEN
10191 	l_cur_rec.prgm_action_type := 'US';
10192         Insert_Edu_Info ( 'PRGM', p_data_rec  => l_cur_rec, p_auth_drp_data_rec => NULL);
10193 
10194       END IF;
10195 
10196    END IF;
10197 
10198 
10199 
10200 
10201    -- Validate program block
10202 
10203    p_person_rec.edu_status  := Validate_Prgm_Info (p_person_rec =>p_person_rec, p_data_rec  => l_cur_prgm_rec, p_records => l_count,
10204 						   p_auth_drp_data_rec => l_cur_authdrp_rec);
10205    IF p_person_rec.edu_status = 'E'  THEN -- Validation error - mark person as invalid
10206 
10207       p_person_rec.person_status := 'I';
10208 
10209       Put_Log_Msg('Validation error occurs ',1);
10210        /* Debug */
10211 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10212 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10213 	   l_debug_str := 'Returning S from Update_EV_Program_Info. p_person_rec.edu_status is E.';
10214 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10215 	END IF;
10216 
10217       RETURN 'S';
10218 
10219    ELSIF p_person_rec.edu_status = 'U' THEN --Unexpected error - terminate execution
10220 
10221       Put_Log_Msg('Unexpected error returned by validation ',1);
10222       /* Debug */
10223 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10224 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10225 	   l_debug_str := 'RAISE FND_API.G_EXC_ERROR in Update_EV_Program_Info. p_person_rec.edu_status is U.';
10226 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10227 	END IF;
10228 
10229       RAISE FND_API.G_EXC_ERROR;
10230 
10231    END IF;
10232 
10233 
10234 FOR l_current IN 1.. l_count LOOP
10235 
10236       Put_Log_Msg('Checking ev programs  '||l_cur_prgm_rec(l_current).person_id,0);
10237       l_prev_rec.person_id := p_person_rec.person_id;
10238 
10239       p_person_rec.edu_status := 'S';  -- Changed
10240 
10241       l_status := Get_EV_Prgm_Info ( p_data_rec  => l_prev_rec);
10242 
10243       IF l_status = 'U' THEN
10244        /* Debug */
10245         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10246           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
10247           l_debug_str := 'Unexpected error in Update_Employment_Info. l_status is U.';
10248           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10249         END IF;
10250          RAISE FND_API.G_EXC_ERROR;
10251       END IF;
10252 
10253       IF  l_status = 'S' THEN
10254           IF
10255 	  (
10256 	   l_prev_rec.prgm_action_type
10257 	   ||g_delimeter||l_prev_rec.prgm_start_date
10258 	   ||g_delimeter||l_prev_rec.prgm_end_date
10259 	   ||g_delimeter||l_prev_rec.effective_date
10260 	   ||g_delimeter||l_prev_rec.termination_reason
10261 	   ||g_delimeter||l_prev_rec.end_prgm_reason
10262 	   ||g_delimeter||l_prev_rec.remarks
10263 	   <>
10264 	   l_cur_prgm_rec(l_current).prgm_action_type
10265 	   ||g_delimeter||l_cur_prgm_rec(l_current).prgm_start_date
10266 	   ||g_delimeter||l_cur_prgm_rec(l_current).prgm_end_date
10267 	   ||g_delimeter||l_cur_prgm_rec(l_current).effective_date
10268 	   ||g_delimeter||l_cur_prgm_rec(l_current).termination_reason
10269 	   ||g_delimeter||l_cur_prgm_rec(l_current).end_prgm_reason
10270 	   ||g_delimeter||l_cur_prgm_rec(l_current).remarks
10271 	  ) THEN
10272 		 Put_Log_Msg('Info is changed for  '||l_cur_prgm_rec(l_current).person_id,0);
10273 		 p_person_rec.edu_status := 'C';  -- Changed
10274 		 p_person_rec.changes_found := 'Y';
10275 	     END IF;
10276 
10277       ELSE   --Remove current person from the insert list
10278         l_cur_prgm_rec(l_current).person_id := NULL;
10279       END IF;
10280 
10281       IF p_person_rec.edu_status = 'C' AND p_person_rec.person_status <> 'I' THEN
10282 		 /* Debug */
10283 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10284 		   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10285 		   l_debug_str := 'inserting prgm info.';
10286 		   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10287 		END IF;
10288 	Insert_Edu_Info ('PRGM', p_data_rec  => l_cur_prgm_rec(l_current), p_auth_drp_data_rec => NULL);
10289       END IF;
10290    END LOOP;
10291 
10292    Put_Log_Msg(l_api_name||' ends ',0);
10293     /* Debug */
10294 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10295 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10296 	   l_debug_str := 'Returning S from Update_EV_Program_Info.';
10297 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10298 	END IF;
10299 
10300    RETURN 'S';
10301 
10302 EXCEPTION
10303 
10304    WHEN FND_API.G_EXC_ERROR THEN
10305 
10306       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
10307        /* Debug */
10308 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10309 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10310 	   l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_EV_Program_Info. '||SQLERRM;
10311 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10312 	END IF;
10313 
10314       RETURN 'U';
10315 
10316    WHEN OTHERS THEN
10317 
10318       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
10319          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
10320       END IF;
10321 
10322       Put_Log_Msg(l_api_name||' OTHERS return U',1);
10323        /* Debug */
10324 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10325 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_EV_Program_Info';
10326 	   l_debug_str := 'EXCEPTION: Returning U from Update_EV_Program_Info. '||SQLERRM;
10327 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10328 	END IF;
10329 
10330 
10331       RETURN  'U';
10332 
10333 END Update_EV_Program_Info;
10334 
10335 
10336 /******************************************************************
10337    Created By         : Arkadi Tereshenkov
10338 
10339    Date Created By    : Oct 14, 2002
10340 
10341    Purpose            : Update Finance Information block on student
10342 
10343    Remarks            :
10344 
10345    Change History
10346    Who                  When            What
10347 ------------------------------------------------------------------------
10348 
10349 ******************************************************************/
10350 FUNCTION Update_Finance_Info (
10351    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
10352 ) RETURN VARCHAR2
10353 IS
10354 
10355    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_Finance_Info';
10356    l_cur_rec     IGS_SV_FINANCE_INFO%ROWTYPE;
10357    l_prev_rec    IGS_SV_FINANCE_INFO%ROWTYPE;
10358    l_status      VARCHAR2(1);
10359 
10360 
10361 BEGIN
10362 
10363    Put_Log_Msg(l_api_name||' begins ',0);
10364 	/* Debug */
10365 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10366 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10367 	   l_debug_str := 'Entering Update_Finance_Info. p_person_rec.person_id is '||p_person_rec.person_id;
10368 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10369 	END IF;
10370 
10371    -- Call Validate_Finance_Info
10372    p_person_rec.fin_status  := Validate_Finance_Info (p_person_rec => p_person_rec,
10373                                                       p_data_rec   => l_cur_rec);
10374    IF p_person_rec.fin_status = 'E'  THEN -- Validation error - mark person as invalid
10375 
10376       p_person_rec.person_status := 'I';
10377 
10378       Put_Log_Msg('Validation error occurs ',1);
10379       /* Debug */
10380 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10381 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10382 	   l_debug_str := 'Returning S from Update_Finance_Info. p_person_rec.fin_status is E';
10383 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10384 	END IF;
10385 
10386       RETURN 'S';
10387 
10388    ELSIF p_person_rec.fin_status = 'U' THEN --Unexpected error - terminate execution
10389 
10390       Put_Log_Msg('Unexpected error returned by validation ',1);
10391       /* Debug */
10392 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10393 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10394 	   l_debug_str := 'Raise FND_API.G_EXC_ERROR in Update_Finance_Info. fin_status is U';
10395 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10396 	END IF;
10397 
10398       RAISE FND_API.G_EXC_ERROR;
10399 
10400    ELSIF p_person_rec.fin_status = 'N' THEN -- Not found
10401 
10402       -- These are I-20 blocks and should be found. If this happens - its a bug
10403 
10404       Put_Log_Msg('Finance block is not found ',0);
10405       /* Debug */
10406 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10407 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10408 	   l_debug_str := 'Raise FND_API.G_EXC_ERROR in Update_Finance_Info. fin_status is N';
10409 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10410 	END IF;
10411 
10412 
10413       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
10414       FND_MESSAGE.SET_TOKEN('BLOCK_ID',4);
10415       FND_MSG_PUB.Add;
10416 
10417       RAISE FND_API.G_EXC_ERROR;
10418 
10419    END IF;
10420 
10421 
10422    -- Compare Finance Info
10423    l_prev_rec.person_id := p_person_rec.person_id;
10424 
10425    l_status := Get_Finance_Info ( p_data_rec  => l_prev_rec);
10426 
10427    IF l_status = 'U' OR l_status = 'N' THEN
10428       /* Debug */
10429 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10430 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10431 	   l_debug_str := 'Raise FND_API.G_EXC_ERROR in Update_Finance_Info. l_status is U or N';
10432 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10433 	END IF;
10434 
10435       RAISE FND_API.G_EXC_ERROR;
10436 
10437    END IF;
10438 
10439    IF l_prev_rec.acad_term_length
10440       ||g_delimeter||l_prev_rec.tuition
10441       ||g_delimeter||l_prev_rec.living_exp
10442       ||g_delimeter||l_prev_rec.personal_funds
10443       ||g_delimeter||l_prev_rec.dependent_exp
10444       ||g_delimeter||l_prev_rec.other_exp
10445       ||g_delimeter||l_prev_rec.other_exp_desc
10446       ||g_delimeter||l_prev_rec.school_funds
10447       ||g_delimeter||l_prev_rec.school_funds_desc
10448       ||g_delimeter||l_prev_rec.other_funds
10449       ||g_delimeter||l_prev_rec.other_funds_desc
10450       ||g_delimeter||l_prev_rec.empl_funds
10451       ||g_delimeter||l_prev_rec.program_sponsor
10452       ||g_delimeter||l_prev_rec.govt_org1
10453       ||g_delimeter||l_prev_rec.govt_org2
10454       ||g_delimeter||l_prev_rec.govt_org1_code
10455       ||g_delimeter||l_prev_rec.govt_org2_code
10456       ||g_delimeter||l_prev_rec.intl_org1
10457       ||g_delimeter||l_prev_rec.intl_org2
10458       ||g_delimeter||l_prev_rec.intl_org1_code
10459       ||g_delimeter||l_prev_rec.intl_org2_code
10460       ||g_delimeter||l_prev_rec.ev_govt
10461       ||g_delimeter||l_prev_rec.bi_natnl_com
10462       ||g_delimeter||l_prev_rec.other_org
10463       ||g_delimeter||l_prev_rec.remarks
10464       ||g_delimeter||l_prev_rec.govt_org1_othr_name
10465       ||g_delimeter||l_prev_rec.govt_org2_othr_name
10466       ||g_delimeter||l_prev_rec.intl_org1_othr_name
10467       ||g_delimeter||l_prev_rec.intl_org2_othr_name
10468       ||g_delimeter||l_prev_rec.other_govt_name
10469       <>
10470       l_cur_rec.acad_term_length
10471       ||g_delimeter||l_cur_rec.tuition
10472       ||g_delimeter||l_cur_rec.living_exp
10473       ||g_delimeter||l_cur_rec.personal_funds
10474       ||g_delimeter||l_cur_rec.dependent_exp
10475       ||g_delimeter||l_cur_rec.other_exp
10476       ||g_delimeter||l_cur_rec.other_exp_desc
10477       ||g_delimeter||l_cur_rec.school_funds
10478       ||g_delimeter||l_cur_rec.school_funds_desc
10479       ||g_delimeter||l_cur_rec.other_funds
10480       ||g_delimeter||l_cur_rec.other_funds_desc
10481       ||g_delimeter||l_cur_rec.empl_funds
10482       ||g_delimeter||l_cur_rec.program_sponsor
10483       ||g_delimeter||l_cur_rec.govt_org1
10484       ||g_delimeter||l_cur_rec.govt_org2
10485       ||g_delimeter||l_cur_rec.govt_org1_code
10486       ||g_delimeter||l_cur_rec.govt_org2_code
10487       ||g_delimeter||l_cur_rec.intl_org1
10488       ||g_delimeter||l_cur_rec.intl_org2
10489       ||g_delimeter||l_cur_rec.intl_org1_code
10490       ||g_delimeter||l_cur_rec.intl_org2_code
10491       ||g_delimeter||l_cur_rec.ev_govt
10492       ||g_delimeter||l_cur_rec.bi_natnl_com
10493       ||g_delimeter||l_cur_rec.other_org
10494       ||g_delimeter||l_cur_rec.remarks
10495       ||g_delimeter||l_cur_rec.govt_org1_othr_name
10496       ||g_delimeter||l_cur_rec.govt_org2_othr_name
10497       ||g_delimeter||l_cur_rec.intl_org1_othr_name
10498       ||g_delimeter||l_cur_rec.intl_org2_othr_name
10499       ||g_delimeter||l_cur_rec.other_govt_name
10500       THEN
10501 
10502       p_person_rec.fin_status := 'C';  -- Changed
10503 
10504       Put_Log_Msg('Finance info is changed  ',0);
10505 
10506       p_person_rec.changes_found := 'Y';
10507 
10508       IF p_person_rec.person_status <> 'I'  THEN
10509         Insert_Finance_Info ( p_data_rec  => l_cur_rec);
10510       END IF;
10511 
10512    END IF;
10513    Put_Log_Msg(l_api_name||' ends ',0);
10514    /* Debug */
10515    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10516       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10517       l_debug_str := 'Returning S from Update_Finance_Info.';
10518       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10519    END IF;
10520 
10521    RETURN 'S';
10522 
10523 EXCEPTION
10524 
10525    WHEN FND_API.G_EXC_ERROR THEN
10526 
10527       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
10528       /* Debug */
10529    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10530       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10531       l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Finance_Info. '||SQLERRM;
10532       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10533    END IF;
10534       RETURN 'U';
10535 
10536    WHEN OTHERS THEN
10537 
10538       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
10539          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
10540       END IF;
10541 
10542       Put_Log_Msg(l_api_name||' OTHERS return U',1);
10543       /* Debug */
10544    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10545       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Finance_Info';
10546       l_debug_str := 'EXCEPTION: Returning U from Update_Finance_Info. '||SQLERRM;
10547       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10548    END IF;
10549 
10550       RETURN  'U';
10551 
10552 END Update_Finance_Info;
10553 
10554 
10555 
10556 /******************************************************************
10557    Created By         : Arkadi Tereshenkov
10558 
10559    Date Created By    : Oct 14, 2002
10560 
10561    Purpose            : Update Dependent block information on the student
10562 
10563    Remarks            :
10564 
10565    Change History
10566    Who                  When            What
10567 ------------------------------------------------------------------------
10568 
10569 ******************************************************************/
10570 FUNCTION Update_Dependent_Info (
10571    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
10572 ) RETURN VARCHAR2
10573 IS
10574 
10575    l_api_name   CONSTANT VARCHAR2(30)   := 'Update_Dependent_Info';
10576    l_cur_rec    g_dependent_rec_type;
10577    l_prev_rec   IGS_SV_DEPDNT_INFO%ROWTYPE;
10578    l_status     VARCHAR2(1);
10579    l_count      NUMBER(10);
10580    l_current    NUMBER(10);
10581    l_rel_type_count NUMBER := 0;
10582 
10583   /* CURSOR c_spouse_of_rel IS
10584          SELECT COUNT(1)
10585 	 FROM igs_pe_hz_rel_v hz, igs_pe_depd_active pdep
10586 	 WHERE hz.subject_id = p_person_rec.person_id AND
10587 	 hz.relationship_code= 'SPOUSE_OF' and
10588 	 pdep.relationship_id = hz.relationship_id
10589 	 and pdep.action_code <> 'T'
10590 	 and pdep.last_update_date = (SELECT MAX(last_update_date)
10591 				      FROM igs_pe_depd_active
10592 				      WHERE relationship_id =hz.relationship_id)
10593 	 AND sysdate BETWEEN hz.start_date AND NVL(hz.end_date, sysdate+1);
10594 
10595 */
10596 BEGIN
10597 
10598    Put_Log_Msg(l_api_name||' begins ',0);
10599    /* Debug */
10600    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10601       l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10602       l_debug_str := 'Entering Update_Dependent_Info. p_person_rec.person_id is '||p_person_rec.person_id;
10603       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10604    END IF;
10605 
10606 
10607    -- Call Validate_Empl_Info
10608 
10609    p_person_rec.dep_status  := Validate_Dependent_Info (p_person_rec => p_person_rec,
10610                                                          p_data_rec   => l_cur_rec,
10611                                                          p_records    => l_count);
10612    IF p_person_rec.dep_status = 'E'  THEN -- Validation error - mark person as invalid
10613 
10614       p_person_rec.person_status := 'I';
10615 
10616       Put_Log_Msg('Validation error occurs ',1);
10617       /* Debug */
10618      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10619         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10620         l_debug_str := 'Returning S from Update_Dependent_Info. dep_status is E.';
10621         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10622      END IF;
10623       RETURN 'S';
10624 
10625    ELSIF p_person_rec.dep_status = 'U' THEN --Unexpected error - terminate execution
10626 
10627       Put_Log_Msg('Unexpected error returned by validation ',1);
10628       /* Debug */
10629      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10630         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10631         l_debug_str := 'Raise FND_API.G_EXC_ERROR in Update_Dependent_Info. dep_status is U.';
10632         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10633      END IF;
10634 
10635       RAISE FND_API.G_EXC_ERROR;
10636 
10637    ELSIF p_person_rec.dep_status = 'N' THEN -- Not found
10638 
10639       Put_Log_Msg('Dependent block is not found ',0);
10640       /* Debug */
10641      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10642         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10643         l_debug_str := 'Returning S from Update_Dependent_Info. dep_status is N.';
10644         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10645      END IF;
10646       RETURN 'S';
10647 
10648    END IF;
10649    FOR l_current IN 1.. l_count LOOP
10650 
10651       -- Compare Dependent Info
10652       Put_Log_Msg('Checking dependent '||l_cur_rec(l_current).depdnt_id,0);
10653 
10654       l_prev_rec.person_id := p_person_rec.person_id;
10655       l_prev_rec.depdnt_id := l_cur_rec(l_current).depdnt_id;
10656       p_person_rec.dep_status := 'S';  -- Changed
10657 
10658       l_status := Get_Dependent_Info ( p_data_rec  => l_prev_rec);
10659 
10660 
10661 --manoj stars
10662 
10663 
10664 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10665 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Previous_Dependent_Info';
10666 	  l_debug_str := 'l_prev_rec action_type='||l_prev_rec.depdnt_action_type;
10667           l_debug_str := l_debug_str || 'visa_type=' || l_prev_rec.visa_type;
10668           l_debug_str := l_debug_str || 'last_name=' || l_prev_rec.last_name;
10669           l_debug_str := l_debug_str || 'first_name=' || l_prev_rec.first_name ;
10670           l_debug_str := l_debug_str || 'middle_name=' || l_prev_rec.middle_name;
10671           l_debug_str := l_debug_str || 'suffix=' || l_prev_rec.suffix;
10672           l_debug_str := l_debug_str || 'birth_date=' || l_prev_rec.birth_date;
10673           l_debug_str := l_debug_str || 'gender=' || l_prev_rec.gender;
10674           l_debug_str := l_debug_str || 'birth_cntry_code=' || l_prev_rec.birth_cntry_code;
10675           l_debug_str := l_debug_str || 'citizen_cntry_code=' || l_prev_rec.citizen_cntry_code;
10676           l_debug_str := l_debug_str || 'relationship=' || l_prev_rec.relationship;
10677           l_debug_str := l_debug_str || 'termination_reason=' || l_prev_rec.termination_reason ;
10678           l_debug_str := l_debug_str || 'relationship_remarks=' || l_prev_rec.relationship_remarks;
10679           l_debug_str := l_debug_str || 'perm_res_cntry_code=' || l_prev_rec.perm_res_cntry_code;
10680           l_debug_str := l_debug_str || 'termination_effect_date=' || l_prev_rec.termination_effect_date;
10681           l_debug_str := l_debug_str || 'remarks=' || l_prev_rec.remarks;
10682           l_debug_str := l_debug_str || 'birth_cntry_resn_code=' || l_prev_rec.birth_cntry_resn_code;
10683 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10684 	END IF;
10685 
10686 
10687 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10688 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Current_Dependent_Info';
10689 	  l_debug_str := 'cur dep action type: '||l_cur_rec(l_current).depdnt_action_type;
10690 	  l_debug_str := l_debug_str || 'visa_type=' ||  l_cur_rec(l_current).visa_type;
10691           l_debug_str := l_debug_str || 'last_name=' || l_cur_rec(l_current).last_name;
10692           l_debug_str := l_debug_str || 'first_name=' || l_cur_rec(l_current).first_name;
10693           l_debug_str := l_debug_str || 'middle_name=' || l_cur_rec(l_current).middle_name;
10694           l_debug_str := l_debug_str || 'suffix=' || l_cur_rec(l_current).suffix;
10695           l_debug_str := l_debug_str || 'birth_date=' || l_cur_rec(l_current).birth_date;
10696           l_debug_str := l_debug_str || 'gender=' || l_cur_rec(l_current).gender;
10697           l_debug_str := l_debug_str || 'birth_cntry_code=' || l_cur_rec(l_current).birth_cntry_code;
10698           l_debug_str := l_debug_str || 'citizen_cntry_code=' || l_cur_rec(l_current).citizen_cntry_code;
10699           l_debug_str := l_debug_str || 'relationship=' || l_cur_rec(l_current).relationship;
10700           l_debug_str := l_debug_str || 'termination_reason=' || l_cur_rec(l_current).termination_reason;
10701           l_debug_str := l_debug_str || 'relationship_remarks=' || l_cur_rec(l_current).relationship_remarks;
10702           l_debug_str := l_debug_str || 'perm_res_cntry_code=' || l_cur_rec(l_current).perm_res_cntry_code;
10703           l_debug_str := l_debug_str || 'termination_effect_date=' || l_cur_rec(l_current).termination_effect_date;
10704           l_debug_str := l_debug_str || 'remarks=' || l_cur_rec(l_current).remarks ;
10705 	  l_debug_str := l_debug_str || 'birth_cntry_resn_code=' || l_cur_rec(l_current).birth_cntry_resn_code;
10706 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10707 	END IF;
10708 --manoj ends
10709 
10710       IF l_status = 'U' THEN
10711          /* Debug */
10712 	 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10713 		l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10714 		l_debug_str := 'Raise FND_API.G_EXC_ERROR in Update_Dependent_Info. l_status is U.';
10715 		fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10716          END IF;
10717          RAISE FND_API.G_EXC_ERROR;
10718 
10719       END IF;
10720 
10721       -- check if dependent sevis id is present
10722 
10723       IF l_status = 'S' AND l_cur_rec(l_current).depdnt_sevis_id IS NULL THEN
10724 
10725          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_ID_ERR'); -- SEVIS STUDENT id not found
10726          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_cur_rec(l_current).person_number);
10727          Put_Log_Msg(FND_MESSAGE.Get,1);
10728 
10729          p_person_rec.person_status := 'I';
10730 
10731          Put_Log_Msg('Validation error occurs ',0);
10732 	 /* Debug */
10733         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10734           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10735           l_debug_str := 'Returning S from Update_Dependent_Info. l_status is S.';
10736           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10737         END IF;
10738          RETURN 'S';
10739 
10740       ELSIF l_status = 'N'  THEN
10741         -- New dependent status A;
10742         IF l_cur_rec(l_current).depdnt_action_type = 'A' THEN
10743           l_cur_rec(l_current).depdnt_action_type := 'A';
10744           p_person_rec.dep_status := 'C';  -- Changed
10745           p_person_rec.changes_found := 'Y';
10746 
10747           Put_Log_Msg('Dep info going first time for '||l_cur_rec(l_current).depdnt_id,0);
10748 
10749         END IF;
10750 
10751      ELSIF l_prev_rec.depdnt_action_type IN ('A','R','U') AND
10752            l_cur_rec(l_current).depdnt_action_type ='T' THEN
10753 
10754         -- Person terminated.
10755         l_cur_rec(l_current).depdnt_action_type := 'T';
10756         p_person_rec.dep_status := 'C';  -- Changed
10757         p_person_rec.changes_found := 'Y';
10758 
10759         Put_Log_Msg('Info is changed for  '||l_cur_rec(l_current).depdnt_id,0);
10760 
10761 
10762      ELSIF  l_prev_rec.depdnt_action_type IN ('T') AND
10763             l_cur_rec(l_current).depdnt_action_type ='A' THEN
10764           -- Person reactivated
10765         l_cur_rec(l_current).depdnt_action_type := 'R';
10766         p_person_rec.dep_status := 'C';  -- Changed
10767         p_person_rec.changes_found := 'Y';
10768 
10769         Put_Log_Msg('Info is changed for  '||l_cur_rec(l_current).depdnt_id,0);
10770 
10771 
10772      ELSIF (l_prev_rec.visa_type		--l_cur_rec(l_current).depdnt_action_type ='A'  AND
10773           ||g_delimeter||l_prev_rec.last_name
10774           ||g_delimeter||l_prev_rec.first_name
10775           ||g_delimeter||l_prev_rec.middle_name
10776           ||g_delimeter||l_prev_rec.suffix
10777           ||g_delimeter||l_prev_rec.birth_date
10778           ||g_delimeter||l_prev_rec.gender
10779           ||g_delimeter||l_prev_rec.birth_cntry_code
10780           ||g_delimeter||l_prev_rec.citizen_cntry_code
10781           ||g_delimeter||l_prev_rec.relationship
10782           ||g_delimeter||l_prev_rec.termination_reason
10783           ||g_delimeter||l_prev_rec.relationship_remarks
10784           ||g_delimeter||l_prev_rec.perm_res_cntry_code
10785           ||g_delimeter||l_prev_rec.termination_effect_date
10786           ||g_delimeter||l_prev_rec.remarks
10787 	  ||g_delimeter||l_prev_rec.birth_cntry_resn_code
10788 	 <> l_cur_rec(l_current).visa_type
10789          ||g_delimeter||l_cur_rec(l_current).last_name
10790          ||g_delimeter||l_cur_rec(l_current).first_name
10791          ||g_delimeter||l_cur_rec(l_current).middle_name
10792          ||g_delimeter||l_cur_rec(l_current).suffix
10793          ||g_delimeter||l_cur_rec(l_current).birth_date
10794          ||g_delimeter||l_cur_rec(l_current).gender
10795          ||g_delimeter||l_cur_rec(l_current).birth_cntry_code
10796          ||g_delimeter||l_cur_rec(l_current).citizen_cntry_code
10797          ||g_delimeter||l_cur_rec(l_current).relationship
10798          ||g_delimeter||l_cur_rec(l_current).termination_reason
10799          ||g_delimeter||l_cur_rec(l_current).relationship_remarks
10800          ||g_delimeter||l_cur_rec(l_current).perm_res_cntry_code
10801          ||g_delimeter||l_cur_rec(l_current).termination_effect_date
10802          ||g_delimeter||l_cur_rec(l_current).remarks
10803 	 ||g_delimeter||l_cur_rec(l_current).birth_cntry_resn_code
10804 	 ) THEN
10805 
10806 
10807 
10808 
10809          Put_Log_Msg('Info is changed for  '||l_cur_rec(l_current).depdnt_id,0);
10810 	 /* Debug */
10811 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10812 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10813 	  l_debug_str := 'Update_Dependent_Info. l_prev_rec.depdnt_action_type: '||l_prev_rec.depdnt_action_type||'cur dep action type: '||l_cur_rec(l_current).depdnt_action_type;
10814 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10815 	END IF;
10816            --IF l_prev_rec.depdnt_action_type = l_cur_rec(l_current).depdnt_action_type THEN
10817 	        l_cur_rec(l_current).depdnt_action_type := 'U';  --update mode for the person
10818 	   --END IF;
10819         p_person_rec.dep_status := 'C';  -- Changed
10820         p_person_rec.changes_found := 'Y';
10821 
10822 
10823       ELSE   --Remove current dependent from the insert list
10824         l_cur_rec(l_current).depdnt_id := NULL;
10825       END IF;
10826 
10827      /* IF p_person_rec.dep_status = 'C' AND p_person_rec.record_status ='C' THEN         prbhardw CP enhancement
10828         -- Only one dependent in the update section.
10829 	/* Debug
10830         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10831           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10832           l_debug_str := 'Exiting Update_Dependent_Info. dep_status and record_status is C.';
10833           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10834         END IF;
10835 
10836        -- EXIT;
10837 
10838       END IF;*/
10839       IF  p_person_rec.dep_status = 'C' AND p_person_rec.person_status <> 'I'  THEN
10840 	Insert_Dependent_Info ( p_data_rec  => l_cur_rec(l_current));
10841       END IF;
10842    END LOOP;
10843   /*IF  p_person_rec.dep_status = 'C' AND p_person_rec.person_status <> 'I'  THEN
10844 	Insert_Dependent_Info ( p_data_rec  => l_cur_rec(l_current),p_records => l_count );
10845       END IF; */
10846    Put_Log_Msg(l_api_name||' ends ',0);
10847    /* Debug */
10848    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10849        l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10850        l_debug_str := 'Returning S from Update_Dependent_Info.';
10851        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10852    END IF;
10853 
10854    RETURN 'S';
10855 
10856 EXCEPTION
10857 
10858    WHEN FND_API.G_EXC_ERROR THEN
10859       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
10860       /* Debug */
10861         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10862           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10863           l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Dependent_Info. '||SQLERRM;
10864           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10865         END IF;
10866       RETURN 'U';
10867 
10868    WHEN OTHERS THEN
10869 
10870       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
10871          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
10872       END IF;
10873       Put_Log_Msg(l_api_name||' OTHERS return U',1);
10874       /* Debug */
10875         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10876           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Dependent_Info';
10877           l_debug_str := 'EXCEPTION: Returning U from Update_Dependent_Info. '||SQLERRM;
10878           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10879         END IF;
10880 
10881       RETURN  'U';
10882 
10883 END Update_Dependent_Info;
10884 
10885 
10886 
10887 /******************************************************************
10888    Created By         : Arkadi Tereshenkov
10889 
10890    Date Created By    : Oct 14, 2002
10891 
10892    Purpose            : Update Employment information block
10893 
10894    Remarks            :
10895 
10896    Change History
10897    Who                  When            What
10898 ------------------------------------------------------------------------
10899 
10900 ******************************************************************/
10901 FUNCTION Update_Employment_Info (
10902    p_person_rec      IN OUT NOCOPY  t_student_rec    -- Person record
10903 ) RETURN VARCHAR2
10904 IS
10905 
10906    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_Employment_Info';
10907    l_cur_rec    g_empl_rec_type;  ---IGS_SV_EMPL_INFO%ROWTYPE;  prbhardw
10908    l_prev_rec   IGS_SV_EMPL_INFO%ROWTYPE;
10909    l_status     VARCHAR2(1);
10910 
10911    l_count      NUMBER(10);
10912    l_current    NUMBER(10);
10913 
10914 BEGIN
10915 
10916    Put_Log_Msg(l_api_name||' begins ',0);
10917    /* Debug */
10918   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10919      l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
10920      l_debug_str := 'Entering Update_Employment_Info. p_person_rec.person_id is '||p_person_rec.person_id;
10921      fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10922   END IF;
10923 
10924    -- Call Validate_Empl_Info
10925 
10926     p_person_rec.empl_status  := Validate_Empl_Info (p_person_rec => p_person_rec,
10927                                                     p_data_rec   => l_cur_rec,
10928                                                     p_records    => l_count);
10929 
10930    IF p_person_rec.empl_status = 'E'  THEN -- Validation error - mark person as invalid
10931       p_person_rec.person_status := 'I';
10932       Put_Log_Msg('Validation error occurs ',1);
10933       /* Debug */
10934      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10935         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
10936         l_debug_str := 'Returning S from Update_Employment_Info. empl_status is E.';
10937         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10938      END IF;
10939       RETURN 'S';
10940    ELSIF p_person_rec.empl_status = 'U' THEN --Unexpected error - terminate execution
10941       Put_Log_Msg('Unexpected error returned by validation ',1);
10942       /* Debug */
10943      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10944         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
10945         l_debug_str := 'Unexpected error in Update_Employment_Info. empl_status is U.';
10946         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10947      END IF;
10948       RAISE FND_API.G_EXC_ERROR;
10949    ELSIF p_person_rec.empl_status = 'N' THEN -- Not found
10950       Put_Log_Msg('Employment block is not found ',0);
10951       /* Debug */
10952      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10953         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
10954         l_debug_str := 'Returning S from Update_Employment_Info. empl_status is N.';
10955         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10956      END IF;
10957       RETURN 'S';
10958    END IF;
10959 
10960 FOR l_current IN 1.. l_count LOOP
10961 
10962       Put_Log_Msg('Checking employment  '||l_cur_rec(l_current).person_id,0);
10963       l_prev_rec.person_id := p_person_rec.person_id;
10964       l_prev_rec.nonimg_empl_id := l_cur_rec(l_current).nonimg_empl_id;
10965 
10966       p_person_rec.empl_status := 'S';  -- Changed
10967 
10968       l_status := Get_Empl_Info ( p_data_rec  => l_prev_rec);
10969 
10970 
10971 --manoj starts
10972 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10973 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Previous_empl_Info';
10974           l_debug_str :=		'empl_rec_type='		|| l_prev_rec.empl_rec_type;
10975           l_debug_str := l_debug_str || 'empl_type='			|| l_prev_rec.empl_type;
10976           l_debug_str := l_debug_str || 'recommend_empl='	        || l_prev_rec.recommend_empl ;
10977           l_debug_str := l_debug_str || 'rescind_empl='			|| l_prev_rec.rescind_empl;
10978           l_debug_str := l_debug_str || 'remarks='			|| l_prev_rec.remarks;
10979           l_debug_str := l_debug_str || 'empl_start_date='		|| l_prev_rec.empl_start_date;
10980           l_debug_str := l_debug_str || 'empl_end_date='		|| l_prev_rec.empl_end_date;
10981           l_debug_str := l_debug_str || 'course_relevance='		|| l_prev_rec.course_relevance;
10982           l_debug_str := l_debug_str || 'empl_time='			|| l_prev_rec.empl_time;
10983           l_debug_str := l_debug_str || 'empl_name='			|| l_prev_rec.empl_name;
10984 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
10985 	END IF;
10986 
10987 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
10988 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Current_empl_Info';
10989           l_debug_str :=		'empl_rec_type='		|| l_cur_rec(l_current).empl_rec_type;
10990           l_debug_str := l_debug_str || 'empl_type='			|| l_cur_rec(l_current).empl_type;
10991           l_debug_str := l_debug_str || 'recommend_empl='	        || l_cur_rec(l_current).recommend_empl ;
10992           l_debug_str := l_debug_str || 'rescind_empl='			|| l_cur_rec(l_current).rescind_empl;
10993           l_debug_str := l_debug_str || 'remarks='			|| l_cur_rec(l_current).remarks;
10994           l_debug_str := l_debug_str || 'empl_start_date='		|| l_cur_rec(l_current).empl_start_date;
10995           l_debug_str := l_debug_str || 'empl_end_date='		|| l_cur_rec(l_current).empl_end_date;
10996           l_debug_str := l_debug_str || 'course_relevance='		|| l_cur_rec(l_current).course_relevance;
10997           l_debug_str := l_debug_str || 'empl_time='			|| l_cur_rec(l_current).empl_time;
10998           l_debug_str := l_debug_str || 'empl_name='			|| l_cur_rec(l_current).empl_name;
10999 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11000 	END IF;
11001 
11002 
11003 --manoj ends
11004 
11005 	/* Debug */
11006         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11007           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
11008           l_debug_str := 'l_status from Get_Empl_Info: '||l_status;
11009           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11010         END IF;
11011       IF l_status = 'U' THEN
11012        /* Debug */
11013         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11014           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
11015           l_debug_str := 'Unexpected error in Update_Employment_Info. l_status is U.';
11016           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11017         END IF;
11018          RAISE FND_API.G_EXC_ERROR;
11019       END IF;
11020 
11021       IF l_status = 'N'  THEN
11022         -- New employment record status A;
11023           l_cur_rec(l_current).action_code := 'A';
11024           p_person_rec.empl_status := 'C';  -- Changed
11025           p_person_rec.changes_found := 'Y';
11026           Put_Log_Msg('Info is changed for  '||l_cur_rec(l_current).person_id,0);
11027 
11028       ELSIF  l_status = 'S' THEN
11029 
11030 	    IF l_cur_rec(l_current).action_code IN ('Y') THEN
11031 	        l_cur_rec(l_current).action_code := 'C';  --CANCEL
11032 	    END IF;
11033 
11034         IF (l_cur_rec(l_current).action_code = 'C' AND  l_prev_rec.action_code <> 'C') OR
11035 		    (l_cur_rec(l_current).action_code <> 'C' AND  l_prev_rec.action_code = 'C' ) THEN
11036 		          p_person_rec.empl_status := 'C';  -- Changed
11037                   p_person_rec.changes_found := 'Y';
11038 	    ELSE
11039 				IF (l_cur_rec(l_current).empl_rec_type = 'F'  AND
11040 				(
11041 				   l_prev_rec.empl_rec_type
11042 				 ||g_delimeter||l_prev_rec.empl_type
11043 				 ||g_delimeter||l_prev_rec.recommend_empl
11044 				 ||g_delimeter||l_prev_rec.rescind_empl
11045 				 ||g_delimeter||l_prev_rec.remarks
11046 				 ||g_delimeter||l_prev_rec.empl_start_date
11047 				 ||g_delimeter||l_prev_rec.empl_end_date
11048 				 ||g_delimeter||l_prev_rec.course_relevance
11049 				 ||g_delimeter||l_prev_rec.empl_time
11050 				 ||g_delimeter||l_prev_rec.empl_name
11051 				 <>
11052 				   l_cur_rec(l_current).empl_rec_type
11053 				 ||g_delimeter||l_cur_rec(l_current).empl_type
11054 				 ||g_delimeter||l_cur_rec(l_current).recommend_empl
11055 				 ||g_delimeter||l_cur_rec(l_current).rescind_empl
11056 				 ||g_delimeter||l_cur_rec(l_current).remarks
11057 				 ||g_delimeter||l_cur_rec(l_current).empl_start_date
11058 				 ||g_delimeter||l_cur_rec(l_current).empl_end_date
11059 				 ||g_delimeter||l_cur_rec(l_current).course_relevance
11060 				 ||g_delimeter||l_cur_rec(l_current).empl_time
11061 				 ||g_delimeter||l_cur_rec(l_current).empl_name
11062 				 )) THEN
11063 							 Put_Log_Msg('Info is changed for  '||l_cur_rec(l_current).person_id,0);
11064 							  l_cur_rec(l_current).action_code := 'E';
11065 							  p_person_rec.empl_status := 'C';  -- Changed
11066 							  p_person_rec.changes_found := 'Y';
11067 					 END IF;
11068            END IF;
11069       ELSE   --Remove current person from the insert list
11070         l_cur_rec(l_current).person_id := NULL;
11071       END IF;
11072 
11073       IF p_person_rec.empl_status = 'C' AND p_person_rec.person_status <> 'I' THEN
11074 	Insert_Empl_Info ( p_data_rec  => l_cur_rec(l_current));
11075       END IF;
11076    END LOOP;
11077 
11078    Put_Log_Msg('Employment info is changed  ',0);
11079 
11080    Put_Log_Msg(l_api_name||' ends ',0);
11081    /* Debug */
11082         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11083           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
11084           l_debug_str := 'Returning S from Update_Employment_Info.';
11085           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11086         END IF;
11087    RETURN 'S';
11088 
11089 EXCEPTION
11090 
11091    WHEN FND_API.G_EXC_ERROR THEN
11092 
11093       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
11094       /* Debug */
11095         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11096           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
11097           l_debug_str := 'ND_API.G_EXC_ERROR: Returning U from Update_Employment_Info. '||SQLERRM;
11098           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11099         END IF;
11100       RETURN 'U';
11101 
11102    WHEN OTHERS THEN
11103 
11104       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
11105          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
11106       END IF;
11107 
11108       Put_Log_Msg(l_api_name||' OTHERS return U',1);
11109       /* Debug */
11110         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11111           l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Employment_Info';
11112           l_debug_str := 'EXCEPTION: Returning U from Update_Employment_Info. '||SQLERRM;
11113           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11114         END IF;
11115 
11116       RETURN  'U';
11117 END Update_Employment_Info;
11118 
11119 
11120 
11121 /******************************************************************
11122    Created By         : Arkadi Tereshenkov
11123 
11124    Date Created By    : Oct 14, 2002
11125 
11126    Purpose            : Update Conviction block information.
11127 
11128    Remarks            :
11129 
11130    Change History
11131    Who                  When            What
11132 ------------------------------------------------------------------------
11133 
11134 ******************************************************************/
11135 FUNCTION Update_Conviction_Info (
11136    p_person_rec      IN OUT NOCOPY  t_student_rec    --Person record
11137 ) RETURN VARCHAR2
11138 
11139 IS
11140 
11141    l_api_name    CONSTANT VARCHAR2(30)   := 'Update_Conviction_Info';
11142    l_cur_rec    IGS_SV_CONVICTIONS%ROWTYPE;
11143    l_status     VARCHAR2(1);
11144    l_prev_rec   IGS_SV_CONVICTIONS%ROWTYPE;
11145 
11146 BEGIN
11147 
11148    Put_Log_Msg(l_api_name||' begins ',0);
11149    /* Debug */
11150   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11151      l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11152      l_debug_str := 'Entering Update_Conviction_Info. p_person_rec.person_id is '||p_person_rec.person_id;
11153      fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11154   END IF;
11155 
11156 
11157    -- Call Validate_Convictions_Info
11158 
11159    p_person_rec.conv_status  := Validate_Convictions_Info (p_person_rec => p_person_rec,
11160                                                             p_data_rec   => l_cur_rec);
11161 
11162    IF p_person_rec.conv_status = 'E'  THEN -- Validation error - mark person as invalid
11163 
11164       p_person_rec.person_status := 'I';
11165 
11166       Put_Log_Msg('Validation error occurs ',1);
11167       /* Debug */
11168      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11169         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11170         l_debug_str := 'Returning S from Update_Conviction_Info. conv_status is E.';
11171         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11172      END IF;
11173 
11174       RETURN 'S';
11175 
11176    ELSIF p_person_rec.conv_status = 'U' THEN --Unexpected error - terminate execution
11177 
11178       Put_Log_Msg('Unexpected error returned by validation ',1);
11179       /* Debug */
11180      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11181         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11182         l_debug_str := 'Unexpected error in Update_Conviction_Info. conv_status is U.';
11183         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11184      END IF;
11185 
11186       RAISE FND_API.G_EXC_ERROR;
11187 
11188    ELSIF p_person_rec.conv_status = 'N' THEN -- Not found
11189 
11190       Put_Log_Msg('Convictions block is not found ',0);
11191       /* Debug */
11192      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11193         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11194         l_debug_str := 'Returning S from Update_Conviction_Info. conv_status is N.';
11195         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11196      END IF;
11197 
11198       RETURN 'S';
11199 
11200    END IF;
11201 
11202    -- If something is returned by the procedure - Insert it right away.
11203 
11204    Put_Log_Msg('Convictions info is changed  ',0);
11205 
11206    p_person_rec.changes_found := 'Y';
11207 
11208    IF p_person_rec.person_status <> 'I'  THEN
11209 
11210      Insert_Convictions_Info ( p_data_rec  => l_cur_rec);
11211 
11212    END IF;
11213 
11214    Put_Log_Msg(l_api_name||' ends ',0);
11215    /* Debug */
11216      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11217         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11218         l_debug_str := 'Returning S from Update_Conviction_Info.';
11219         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11220      END IF;
11221 
11222    RETURN 'S';
11223 
11224 EXCEPTION
11225 
11226    WHEN FND_API.G_EXC_ERROR THEN
11227 
11228       Put_Log_Msg(l_api_name||' EXEC_ERROR returns U',1);
11229       /* Debug */
11230      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11231         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11232         l_debug_str := 'FND_API.G_EXC_ERROR: Returning U from Update_Conviction_Info. '||SQLERRM;
11233         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11234      END IF;
11235       RETURN 'U';
11236 
11237    WHEN OTHERS THEN
11238 
11239       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
11240          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
11241       END IF;
11242 
11243       Put_Log_Msg(l_api_name||' OTHERS return U',1);
11244       /* Debug */
11245      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11246         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Update_Conviction_Info';
11247         l_debug_str := 'EXCEPTION: Returning U from Update_Conviction_Info. '||SQLERRM;
11248         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11249      END IF;
11250 
11251       RETURN  'U';
11252 
11253 END Update_Conviction_Info;
11254 
11255 
11256 
11257 /******************************************************************
11258    Created By         : Arkadi Tereshenkov
11259 
11260    Date Created By    : Oct 14, 2002
11261 
11262    Purpose            : This procedure cleans up tables for a person
11263                         if part of the information is not valid.
11264 
11265    Remarks            :
11266 
11267    Change History
11268    Who                  When            What
11269 ------------------------------------------------------------------------
11270 
11271 ******************************************************************/
11272 PROCEDURE Remove_Person_Data (
11273    p_person_id IN NUMBER,
11274    p_batch_id  IN NUMBER
11275 ) IS
11276 
11277 BEGIN
11278     /* Debug */
11279     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11280        l_label := 'igs.plsql.igs_sv_batch_process_pkg.Remove_Person_Data';
11281        l_debug_str := 'Entering Remove_Person_Data. p_person_id is '||p_person_id||' and p_batch_id is '||p_batch_id;
11282        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11283     END IF;
11284    -- Delete from all related tables
11285 
11286    DELETE FROM igs_sv_addresses WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL );
11287 
11288    DELETE FROM igs_sv_bio_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11289 
11290    DELETE FROM igs_sv_convictions WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11291 
11292    DELETE FROM igs_sv_depdnt_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11293 
11294    DELETE FROM igs_sv_empl_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11295 
11296    DELETE FROM igs_sv_finance_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11297 
11298    DELETE FROM igs_sv_legal_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11299 
11300    DELETE FROM igs_sv_oth_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11301 
11302    DELETE FROM igs_sv_prgms_info WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL ) ;
11303 
11304    DELETE FROM igs_sv_persons WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL );
11305 
11306    DELETE FROM igs_sv_btch_summary WHERE batch_id = p_batch_id AND ( person_id = p_person_id OR p_person_id IS NULL );  -- prbhardw
11307 
11308     /* Debug */
11309     IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11310        l_label := 'igs.plsql.igs_sv_batch_process_pkg.Remove_Person_Data';
11311        l_debug_str := 'Exiting Remove_Person_Data.';
11312        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11313     END IF;
11314 
11315 END Remove_Person_Data;
11316 
11317 
11318 
11319 /******************************************************************
11320    Created By         : Arkadi Tereshenkov
11321 
11322    Date Created By    : Oct 14, 2002
11323 
11324    Purpose            : This is the main Concurrent program that is
11325                         called when submitting a request for the
11326                         Exchange Visitors.
11327 
11328    Remarks            :
11329 
11330    Change History
11331    Who                  When            What
11332 ------------------------------------------------------------------------
11333 mmkumar              12-Sep-2005      Added one more parameter for p_org_id
11334 ******************************************************************/
11335 PROCEDURE EV_Batch_Process(
11336    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
11337    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
11338    p_validate_only    IN  VARCHAR2,  -- Validate only flag  'Y'  'N'
11339    p_org_id           IN VARCHAR2,
11340    p_dso_id           IN VARCHAR2
11341 )
11342 IS
11343 
11344    l_api_name    CONSTANT VARCHAR2(30)   := 'EV_Batch_Process';
11345 
11346    l_dso_id VARCHAR2(20) := substr(p_dso_id,1,instr(p_dso_id,'-',-1)-1) ;
11347    l_dso_party_id NUMBER := to_number(substr(p_dso_id,instr(p_dso_id,'-',-1)+1));
11348 
11349    l_org_id VARCHAR2(20) := substr(p_org_id,1,instr(p_org_id,'-',-1)-1) ;
11350    l_org_party_id NUMBER := to_number(substr(p_org_id,instr(p_org_id,'-',-1)+1));
11351 
11352 BEGIN
11353    -- Just call the procedure
11354    /* Debug */
11355    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11356       l_label := 'igs.plsql.igs_sv_batch_process_pkg.EV_Batch_Process';
11357       l_debug_str := 'Entering EV_Batch_Process. p_validate_only is '||p_validate_only;
11358       l_debug_str := l_debug_str || 'l_org_id=' || l_org_id;
11359       l_debug_str := l_debug_str || 'l_dso_id=' || l_dso_id;
11360       l_debug_str := l_debug_str || 'l_dso_party_id=' || l_dso_party_id;
11361       l_debug_str := l_debug_str || 'l_org_party_id=' || l_org_party_id;
11362       l_debug_str := l_debug_str || 'p_org_id=' || p_org_id;
11363       l_debug_str := l_debug_str || 'p_dso_id=' || p_dso_id;
11364       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11365    END IF;
11366    SAVEPOINT EV_Batch_Process;
11367 
11368    Create_Batch(
11369      errbuf           => errbuf ,
11370      retcode          => retcode,
11371      p_batch_type     => 'E',
11372      p_validate_only  => p_validate_only,
11373      p_org_id         => l_org_id,
11374      p_dso_id	      => l_dso_id,
11375      p_dso_party_id   =>  l_dso_party_id,
11376      p_org_party_id   =>  l_org_party_id
11377    );
11378 EXCEPTION
11379 
11380    WHEN OTHERS THEN
11381      /* Debug */
11382    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11383       l_label := 'igs.plsql.igs_sv_batch_process_pkg.EV_Batch_Process';
11384       l_debug_str := 'Exception in EV_Batch_Process. '||SQLERRM;
11385       fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11386    END IF;
11387 
11388      ROLLBACK TO EV_Batch_Process;
11389 
11390       retcode := 2;
11391       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
11392          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
11393       END IF;
11394 
11395       Generate_Message;
11396 
11397 END EV_Batch_Process;
11398 
11399 
11400 FUNCTION Get_pre_noshow_status(p_person_id igs_sv_persons.person_id%TYPE, p_batch_id igs_sv_persons.person_id%TYPE)
11401 RETURN VARCHAR2
11402 IS
11403 l_no_show_status  VARCHAR2(1);
11404 CURSOR no_show_change(c_person_id igs_sv_persons.person_id%TYPE, c_batch_id igs_sv_persons.person_id%TYPE)
11405 IS
11406 SELECT old_per.no_show_flag
11407 FROM igs_sv_persons new_per, igs_sv_persons old_per
11408 WHERE new_per.person_id = c_person_id AND
11409       new_per.batch_id = c_batch_id AND
11410       old_per.batch_id = (SELECT max(batch_id) FROM igs_sv_persons WHERE batch_id < c_batch_id) AND
11411       old_per.person_id = new_per.person_id;
11412 BEGIN
11413 
11414   OPEN no_show_change(p_person_id,p_batch_id);
11415   FETCH no_show_change INTO l_no_show_status;
11416   CLOSE no_show_change;
11417 
11418   RETURN NVL(l_no_show_status,'N');
11419 
11420 END Get_pre_noshow_status;
11421 
11422 
11423 FUNCTION new_batch(
11424      p_batch_id igs_sv_batches.batch_id%TYPE,
11425      p_dso_id           VARCHAR2,
11426      p_org_id	        VARCHAR2,
11427      p_batch_type       VARCHAR2,
11428      p_org_party_id     NUMBER,
11429      p_user_party_id     NUMBER
11430      )
11431 RETURN NUMBER
11432 IS
11433    l_batch_id   igs_sv_batches.batch_id%TYPE;
11434 BEGIN
11435 --   DELETE FROM igs_sv_batches WHERE batch_id = p_batch_id;
11436 
11437      INSERT INTO igs_sv_batches
11438      ( batch_id,
11439        schema_version,
11440        sevis_user_id,
11441        sevis_school_id,
11442        batch_status,
11443        batch_type,
11444        creation_date ,
11445        created_by ,
11446        last_updated_by ,
11447        last_update_date ,
11448        last_update_login,
11449        SEVIS_SCHOOL_ORG_ID   ,
11450        SEVIS_USER_PERSON_ID
11451      )
11452      VALUES
11453      ( igs_sv_batches_id_s.nextval,
11454        1,
11455        p_dso_id,
11456        p_org_id,
11457        'S',
11458        p_batch_type,
11459        sysdate,
11460        g_update_by,
11461        g_update_by,
11462        sysdate,
11463        g_update_login,
11464        p_org_party_id,
11465        p_user_party_id
11466      )
11467      RETURNING batch_id INTO l_batch_id;
11468 
11469      RETURN l_batch_id;
11470 END new_batch;
11471 
11472 /******************************************************************
11473    Created By         : Arkadi Tereshenkov
11474 
11475    Date Created By    : Oct 14, 2002
11476 
11477    Purpose            : This is the main procedure to be called when
11478                         the request has been submitted for either the
11479                         Exchange Visitors or Non Immigrant students.
11480                         This procedure is called from the concurrent
11481                         requests.
11482 
11483    remarks            :
11484 
11485    Change History
11486    Who                  When            What
11487    pkpatel              22-APR-2003     Bug No 2908378
11488                                         Modified the action type to ('TR','ED') for EV records
11489                                         Added the code for inserting Site of Activity Address
11490 ------------------------------------------------------------------------
11491 mmkumar              12-Sep-2005     SEVIS 5 uptake, Added new parameter for Org ID
11492 ******************************************************************/
11493 PROCEDURE Create_Batch(
11494    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
11495    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
11496    p_batch_type       IN  VARCHAR2,  -- Batch type E(ev),  I(international),   B (both)
11497    p_validate_only    IN  VARCHAR2,  -- Validate only flag  'Y'  'N'
11498    p_org_id           IN  VARCHAR2,
11499    p_dso_id	      IN  VARCHAR2,
11500    p_dso_party_id     IN  NUMBER,
11501    p_org_party_id     IN  NUMBER
11502 ) IS
11503 
11504    l_api_name  CONSTANT VARCHAR2(25) := 'Create_Batch';
11505    TYPE student_list_cur IS REF CURSOR;
11506    c_student_list   student_list_cur;
11507    c_student_list_rec  c_stdnt_list;
11508 -- select all persons from I-20 where form status is not Terminated or Completed and reported to SEVIS already
11509 
11510 
11511 
11512    l_batch_id         igs_sv_batches.batch_id%TYPE;
11513    l_person_sevis_id  IGS_SV_PERSONS.SEVIS_USER_ID%TYPE;
11514    l_issue_rec        IGS_SV_PERSONS%ROWTYPE;
11515    l_bio_rec          IGS_SV_BIO_INFO%ROWTYPE;
11516    l_oth_rec          IGS_SV_OTH_INFO%ROWTYPE;
11517    l_edu_rec          IGS_SV_PRGMS_INFO%ROWTYPE;
11518    l_fin_rec          IGS_SV_FINANCE_INFO %ROWTYPE;
11519    l_dep_rec          g_dependent_rec_type;
11520    l_f_addr_rec       g_address_rec_type;
11521    l_us_addr_rec      g_address_rec_type;
11522    l_site_addr_rec    g_address_rec_type;
11523    l_exist            NUMBER(25);
11524    l_submiter_id      NUMBER(25);
11525    l_submiter_number  hz_parties.party_number%TYPE;
11526    no_show_status     VARCHAR2(1);
11527    l_cur_authdrp_rec  IGS_SV_PRGMS_INFO%ROWTYPE;
11528    l_btch_id	      igs_sv_batches.batch_id%TYPE;
11529 
11530    CURSOR C_EV_CUR IS
11531    SELECT fr.person_id, min(ev_form_id) form_id, pr.party_number person_number, fr.no_show_flag, fr.reprint_reason reprint_reason
11532     FROM igs_pe_ev_form fr, hz_parties pr
11533     WHERE pr.party_id = fr.person_id  AND fr.form_effective_date <= trunc(sysdate)
11534     AND fr.ev_form_id NOT IN
11535        (SELECT st.ev_form_id  FROM igs_pe_ev_form_stat st
11536         WHERE st.action_type IN ('TR','ED')
11537               AND st.ev_form_id = fr.ev_form_id
11538                AND st.ev_form_stat_id IN
11539                    ( SELECT NVL(prs.form_status_id,0) FROM igs_sv_prgms_info prs, igs_sv_persons pr
11540                      WHERE prs.person_id = pr.person_id AND prs.batch_id = pr.batch_id
11541                            AND pr.record_status <> 'E' AND prs.person_id = fr.person_id)
11542        ) AND fr.sevis_school_identifier = p_org_party_id AND
11543           ( (p_dso_id IS NULL AND
11544 	     (EXISTS (SELECT rel.object_id
11545 		      FROM hz_relationships rel
11546 		      WHERE rel.object_id =  fr.person_id AND
11547 	                    --rel.DIRECTIONAL_FLAG = 'F' AND	fix for bug 5258405
11548 		            sysdate between rel.start_date AND nvl(end_date, sysdate) AND
11549 		            rel.RELATIONSHIP_CODE = 'DSO_FOR') ))
11550 	   OR
11551 	    fr.person_id IN (SELECT rel.object_id FROM hz_relationships rel
11552 	                          WHERE rel.subject_id = p_dso_party_id
11553 				  --AND rel.DIRECTIONAL_FLAG = 'F'	fix for bug 5258405
11554 				  AND sysdate between rel.start_date AND nvl(end_date, sysdate)
11555 	    AND rel.RELATIONSHIP_CODE = 'DSO_FOR')
11556 	   )
11557   GROUP BY  pr.party_number,fr.person_id,  fr.no_show_flag, fr.reprint_reason;
11558 
11559   CURSOR C_NI_CUR IS
11560    SELECT fr.person_id, min(nonimg_form_id) form_id, pr.party_number person_number, null no_show_flag, fr.reprint_reason reprint_reason
11561    FROM igs_pe_nonimg_form fr, hz_parties pr
11562    WHERE pr.party_id = fr.person_id
11563    AND fr.form_effective_date <= trunc(sysdate)
11564    AND fr.nonimg_form_id NOT IN
11565         ( SELECT st.nonimg_form_id FROM IGS_PE_NONIMG_STAT st
11566          WHERE st.action_type IN ('T','C')
11567          AND st.nonimg_form_id = fr.nonimg_form_id
11568          AND st.nonimg_stat_id IN
11569               ( SELECT NVL(prs.form_status_id,0)
11570                 FROM igs_sv_prgms_info prs, igs_sv_persons pr
11571                 WHERE prs.person_id = pr.person_id AND prs.batch_id = pr.batch_id
11572                 AND pr.record_status <> 'E' AND prs.person_id = fr.person_id
11573                 ) )
11574    AND fr.sevis_school_identifier = p_org_party_id AND
11575    ( (p_dso_id IS NULL AND
11576       (EXISTS (SELECT rel.object_id
11577 	      FROM hz_relationships rel
11578 	      WHERE rel.object_id =  fr.person_id AND
11579 	            --rel.DIRECTIONAL_FLAG = 'F' AND		fix for bug 5258405
11580 		    sysdate between rel.start_date AND nvl(end_date, sysdate) AND
11581 		    rel.RELATIONSHIP_CODE = 'DSO_FOR') ))
11582      OR
11583      fr.person_id IN (SELECT rel.object_id
11584 	                    FROM hz_relationships rel
11585 	                    WHERE rel.subject_id = p_dso_party_id and
11586 	                    --rel.DIRECTIONAL_FLAG = 'F' AND		fix for bug 5258405
11587 	                    sysdate between rel.start_date AND nvl(end_date, sysdate) AND
11588 	                    rel.RELATIONSHIP_CODE = 'DSO_FOR')
11589  )
11590  GROUP BY  pr.party_number,fr.person_id, fr.reprint_reason;
11591 
11592 
11593    CURSOR c_submiter_id IS
11594      SELECT person_party_id
11595        FROM fnd_user
11596       WHERE user_id = g_update_by;
11597 
11598    CURSOR submiter_number_cur(cp_party_id hz_parties.party_id%TYPE) IS
11599    SELECT party_number
11600    FROM   hz_parties
11601    WHERE  party_id = cp_party_id;
11602 
11603    CURSOR c_prev_info( p_id NUMBER, f_id NUMBER) IS
11604      SELECT 1
11605       FROM igs_sv_persons a,
11606            igs_sv_batches b
11607      WHERE person_id = p_id
11608            AND a.batch_id = b.batch_id
11609            AND b.batch_type = p_batch_type
11610            AND a.record_status <> 'E'
11611            AND form_id = f_id;
11612 
11613    CURSOR c_active_batch IS
11614      SELECT batch_id
11615       FROM igs_sv_batches
11616      WHERE batch_status IN ('N')       -- prbhardw
11617            AND batch_type = p_batch_type;
11618 
11619    CURSOR c_print_form (p_form_id NUMBER) IS
11620      SELECT decode(print_form,'Y','1','0') print_form
11621        FROM igs_pe_nonimg_form
11622       WHERE nonimg_form_id = p_form_id
11623             AND p_batch_type = 'I'
11624       UNION
11625      SELECT decode(print_form,'Y','1','0') print_form
11626        FROM igs_pe_ev_form
11627       WHERE ev_form_id = p_form_id
11628             AND p_batch_type = 'E';
11629 
11630 
11631      ---prbhardw
11632      CURSOR c_prgm_print_flag (p_form_id NUMBER) IS
11633      SELECT decode(print_flag,'Y','1','0') print_form
11634        FROM igs_pe_nonimg_stat
11635       WHERE nonimg_form_id = p_form_id
11636             AND p_batch_type = 'I'
11637 	    AND action_type = 'E';
11638 
11639 
11640      CURSOR c_get_dso_id(c_person_id igs_pe_ev_form.person_id%TYPE)
11641      IS
11642           SELECT alt.api_person_id, alt.pe_person_id
11643 	  FROM hz_relationships rel, igs_pe_alt_pers_id alt
11644 	  WHERE rel.subject_id = c_person_id and
11645 	       rel.object_id = alt.pe_person_id AND
11646                sysdate between alt.start_dt and nvl(alt.end_dt,sysdate+1) AND
11647 	       sysdate between rel.start_date AND nvl(end_date, sysdate) AND
11648 	       rel.RELATIONSHIP_CODE = 'HAS_DSO' AND
11649 	       alt.person_id_type
11650 			       IN (SELECT person_id_type
11651 				     FROM igs_pe_person_id_typ
11652 				    WHERE s_person_id_type = 'SEVIS_ID');
11653 
11654 
11655 
11656 
11657    l_batch_status VARCHAR(1) := 'N';  -- batch status  (S)uccess, (E)rror,'N'o new students
11658    l_record_number igs_sv_persons.record_number%TYPE;
11659    l_student_rec   t_student_rec;
11660    l_status        VARCHAR2(1);
11661    l_count         NUMBER(10);
11662    l_soa_count	   NUMBER(5);   -- prbhardw CP enhancement
11663 
11664    l_sevis_user_person_id NUMBER;
11665 
11666    dso_id VARCHAR2(20) := p_dso_id;
11667    dso_party_id VARCHAR2(20) := p_dso_party_id;
11668    -- prbhardw
11669 
11670 BEGIN
11671 	/* Debug */
11672 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11673 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11674 	   l_debug_str := 'Entering Create_Batch. p_batch_type is '||p_batch_type;
11675 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11676 	END IF;
11677 
11678    FND_MSG_PUB.initialize;
11679 
11680    SAVEPOINT Create_Batch;
11681    IF fnd_profile.value('IGS_SV_ENABLED') <> 'Y' THEN
11682 	/* Debug */
11683 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11684 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11685 	   l_debug_str := 'Raise ERROR: Sevis Disabled';
11686 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11687 	END IF;
11688 
11689       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_DISABLED'); -- SEVIS disabled
11690       FND_MSG_PUB.Add;
11691       RAISE FND_API.G_EXC_ERROR;
11692 
11693    END IF;
11694 
11695 
11696    IF fnd_profile.value('IGS_SV_DEBUG') <> 'Y' THEN
11697 
11698       g_debug_level := 1;
11699 
11700    END IF;
11701 
11702    g_update_login            := FND_GLOBAL.LOGIN_ID;
11703    g_update_by               := FND_GLOBAL.USER_ID;
11704 
11705    OPEN c_submiter_id;
11706    FETCH c_submiter_id
11707     INTO l_submiter_id;
11708    CLOSE c_submiter_id;
11709 
11710 
11711    l_record_number := 1;
11712    IF p_dso_id IS NULL THEN
11713 
11714 	   l_person_sevis_id  := get_person_sevis_id(l_submiter_id);
11715 	   IF l_person_sevis_id IS NULL THEN
11716 
11717 	      OPEN submiter_number_cur(l_submiter_id);
11718 	      FETCH submiter_number_cur INTO l_submiter_number;
11719 	      CLOSE submiter_number_cur;
11720 
11721 	      /* Debug */
11722 	      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11723 		 l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11724 		 l_debug_str := 'Raise FND_API.G_EXC_ERROR: l_person_sevis_id is null';
11725 		 fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11726 	      END IF;
11727 
11728 	      FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_SUBMITTER_ID_ERR'); -- SEVIS submitter id not found
11729 	      FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_submiter_number);
11730 	      FND_MSG_PUB.Add;
11731 	      RAISE FND_API.G_EXC_ERROR;
11732 
11733 	   END IF;
11734 	   l_sevis_user_person_id := l_submiter_id;
11735    ELSE
11736 	l_person_sevis_id := p_dso_id;
11737 	l_sevis_user_person_id := p_dso_party_id;
11738 
11739    END IF;
11740    -- Check for active batch
11741    OPEN c_active_batch;
11742    FETCH c_active_batch INTO l_batch_id;
11743    CLOSE c_active_batch;
11744 
11745    IF l_batch_id IS NOT NULL AND p_validate_only = 'N' THEN
11746       /*Debug*/
11747       IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11748 	 l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11749 	 l_debug_str := 'Raise ERROR: message name IGS_SV_BATCH_FOUND';
11750 	 fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11751       END IF;
11752 
11753      -- Active batch is found and mode not validate only - terminate current process
11754       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BATCH_FOUND');
11755       FND_MESSAGE.SET_TOKEN('BATCH_ID', l_batch_id);
11756       FND_MSG_PUB.Add;
11757       RAISE FND_API.G_EXC_ERROR;
11758 
11759    END IF;
11760    -- Create batch record
11761    Put_Log_Msg('Inserting batch record',0);
11762 
11763    INSERT INTO igs_sv_batches
11764      ( batch_id,
11765        schema_version,
11766        sevis_user_id,
11767        sevis_school_id,
11768        batch_status,
11769        batch_type,
11770        creation_date ,
11771        created_by ,
11772        last_updated_by ,
11773        last_update_date ,
11774        last_update_login,
11775        SEVIS_SCHOOL_ORG_ID,
11776        SEVIS_USER_PERSON_ID
11777      )
11778      VALUES
11779      ( igs_sv_batches_id_s.nextval,
11780        1,
11781        l_person_sevis_id,
11782        p_org_id,
11783        'S',
11784        p_batch_type,
11785        sysdate,
11786        g_update_by,
11787        g_update_by,
11788        sysdate,
11789        g_update_login,
11790        p_org_party_id,
11791        l_sevis_user_person_id
11792      )
11793      RETURNING batch_id INTO l_batch_id;
11794      g_running_create_batch := l_batch_id;        -- prbhardw CP enhancement
11795      g_running_update_batch  := l_batch_id;       -- prbhardw CP enhancement
11796      g_running_batches(1) := l_batch_id;
11797    -- Loop for each student
11798      IF p_batch_type ='I' THEN
11799          OPEN C_NI_CUR;
11800          FETCH C_NI_CUR INTO c_student_list_rec;
11801      ELSE
11802         OPEN C_EV_CUR;
11803         FETCH C_EV_CUR INTO c_student_list_rec;
11804      END IF;
11805 
11806    --FOR c_student_list_rec IN c_student_list LOOP
11807    LOOP			-- prbhardw
11808         IF p_batch_type ='I' THEN
11809 	      EXIT WHEN C_NI_CUR%NOTFOUND;
11810 	ELSE
11811 	   EXIT WHEN C_EV_CUR%NOTFOUND;
11812 	END IF;
11813      /*FETCH c_student_list INTO
11814           c_student_list_rec.person_id,
11815 	  c_student_list_rec.form_id,
11816 	  c_student_list_rec.person_number,
11817 	  c_student_list_rec.no_show_flag,
11818 	  c_student_list_rec.reprint_reason;
11819 
11820 	  EXIT WHEN c_student_list%NOTFOUND;*/
11821 
11822 	  -- check for total students
11823 	  IF (MOD(g_create_count,250) = 0 AND g_create_count > 0 ) OR (MOD(g_update_count,250) = 0 AND g_update_count > 0 ) THEN
11824 	       l_batch_id :=  new_batch(l_batch_id, l_person_sevis_id, p_org_id, p_batch_type,p_org_party_id,l_sevis_user_person_id);
11825 	       IF MOD(g_create_count,250) = 0 THEN	-- prbhardw CP enhancement
11826 		    g_running_create_batch := l_batch_id;
11827 		    g_running_batches(g_running_batches.COUNT + 1) := g_running_create_batch;
11828 	       ELSE
11829 		    g_running_update_batch := l_batch_id;
11830 		    g_running_batches(g_running_batches.COUNT + 1) := g_running_update_batch;
11831 	       END IF;
11832 
11833 	       Put_Log_Msg('count exceeded max limmit. new batch created: '||l_batch_id||' g_create_count '||g_create_count||' g_update_count '||g_update_count,0);
11834 
11835           END IF;
11836 
11837 
11838 
11839       Put_Log_Msg('Initializing student record',0);
11840       /* Debug */
11841 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11842 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11843 	   l_debug_str := 'Setting person values in Create_Batch Person ID '||c_student_list_rec.person_id||' Person No: '||c_student_list_rec.person_number;
11844 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11845 	END IF;
11846       --  Initialize record group for the student
11847       l_student_rec.person_id     := c_student_list_rec.person_id;
11848       l_student_rec.record_number := l_record_number;
11849       l_student_rec.record_status := 'N'; -- so far new
11850       l_student_rec.person_number := c_student_list_rec.person_number;
11851       l_student_rec.form_id       := c_student_list_rec.form_id;
11852       l_student_rec.sevis_user_id := get_person_sevis_id(l_student_rec.person_id);
11853       l_student_rec.person_status := 'V';
11854       l_student_rec.batch_type    := p_batch_type;
11855       l_student_rec.batch_id      := l_batch_id;
11856       l_student_rec.changes_found := 'N';
11857       l_student_rec.dep_flag      := 'N';
11858       l_student_rec.no_show_flag := c_student_list_rec.no_show_flag;
11859       l_student_rec.reprint_reason := c_student_list_rec.reprint_reason; --prbhardw
11860 
11861       -- Check if the student has been submitted to sevis
11862 
11863       OPEN c_prev_info ( l_student_rec.person_id , c_student_list_rec.form_id);
11864       FETCH c_prev_info
11865        INTO l_exist;
11866 
11867       -- Assign mode to the record
11868 
11869       Put_Log_Msg('',1);
11870       Put_Log_Msg('*******************Next person '||l_student_rec.person_number||'**************************',1);
11871 
11872       IF c_prev_info%FOUND THEN
11873          l_student_rec.record_status := 'C';  --change mode
11874          -- If mode update - check SEVIS person Id
11875 
11876          FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_UPD'); -- Student is found in Update mode
11877          FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_student_rec.person_number);
11878          Put_Log_Msg(FND_MESSAGE.Get,1);
11879 
11880          IF l_student_rec.sevis_user_id IS NULL THEN
11881 
11882             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_ID_ERR'); -- SEVIS STUDENT id not found
11883             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_student_rec.person_number);
11884             Put_Log_Msg(FND_MESSAGE.Get,1);
11885             Put_Log_Msg('Sevis id not found',0);
11886 
11887             l_student_rec.person_status := 'I';
11888 
11889          END IF;
11890 
11891       ELSE
11892 
11893         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_CRT'); -- Student is found in Create mode
11894         FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_student_rec.person_number);
11895         Put_Log_Msg(FND_MESSAGE.Get,1);
11896 
11897       END IF;
11898 
11899       CLOSE c_prev_info;
11900 
11901       Put_Log_Msg('Person status is: '||l_student_rec.person_status,0);
11902 
11903       IF l_student_rec.person_status = 'V' THEN
11904 
11905         OPEN c_print_form(l_student_rec.form_id);
11906         FETCH c_print_form INTO l_student_rec.print_form;
11907         CLOSE c_print_form;
11908 
11909          -- Create main student record
11910 	 IF p_dso_id IS NULL THEN
11911 	       OPEN c_get_dso_id(l_student_rec.person_id);
11912 	       FETCH c_get_dso_id INTO dso_id, dso_party_id;
11913 	       CLOSE c_get_dso_id;
11914 	 END IF;
11915 	 /* Debug */
11916 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
11917 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
11918 	   l_debug_str := 'Inserting in igs_sv_persons batch id: '||l_batch_id;
11919 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
11920 	END IF;
11921          INSERT INTO igs_sv_persons (
11922              batch_id     ,
11923              person_id    ,
11924              record_number,
11925              form_id      ,
11926              print_form   ,
11927 	     pdso_sevis_id,
11928              record_status,
11929              person_number,
11930              sevis_user_id,
11931              creation_date,
11932              created_by             ,
11933              last_updated_by        ,
11934              last_update_date       ,
11935              last_update_login,
11936 	     no_show_flag,
11937 	     reprint_rsn_code,
11938 	     PDSO_SEVIS_PERSON_ID
11939             ) VALUES (
11940              l_batch_id,
11941              l_student_rec.person_id,
11942              l_student_rec.record_number,
11943              l_student_rec.form_id,
11944              l_student_rec.print_form,
11945 	     dso_id,
11946              l_student_rec.record_status,
11947              l_student_rec.person_number,
11948              l_student_rec.sevis_user_id,
11949              sysdate,
11950              g_update_by,
11951              g_update_by,
11952              sysdate,
11953              g_update_login,
11954 	     l_student_rec.no_show_flag,
11955 	     l_student_rec.reprint_reason,
11956              dso_party_id
11957             );
11958       END IF;
11959 
11960            g_nonimg_form_id := l_student_rec.form_id;
11961 
11962      IF l_student_rec.record_status = 'N' THEN
11963       g_person_status := 'NEW';
11964              -- If mode new
11965 
11966          -- Call Validate_Issue_Info  and Insert_Issue_Info
11967 
11968          -- 'S' - record found and validated 'E' - validation error 'U' - Unexpected error  'N' - data not found
11969 
11970 
11971          l_student_rec.issue_status := Validate_Issue_Info (p_person_rec => l_student_rec,
11972                                                             p_data_rec  => l_issue_rec);
11973          -- Call Validate_Bio_Info  and Insert_Bio_Info
11974          l_student_rec.bio_status  := Validate_Bio_Info (p_person_rec => l_student_rec,
11975                                                          p_data_rec  => l_bio_rec);
11976          -- Call Validate_US_address_Info Insert_Address_Info
11977          l_student_rec.us_addr_status  := Validate_Us_Addr_Info (p_person_rec => l_student_rec,
11978                                                                  p_data_rec   => l_us_addr_rec,
11979                                                                  p_records    => l_count);
11980          -- Call Validate_Finance_Info Insert_Finance_Info
11981          l_student_rec.fin_status  := Validate_Finance_Info (p_person_rec => l_student_rec,
11982                                                              p_data_rec  => l_fin_rec);
11983 
11984          -- Call Validate_EDU_Info Insert_EDU_Info
11985 
11986           l_student_rec.edu_status  := Validate_Edu_Info (p_person_rec => l_student_rec,
11987                                                            p_data_rec   => l_edu_rec);
11988           IF p_batch_type = 'I' THEN
11989 
11990            -- 2908378 added, since site of activity is only specific to EV
11991            l_student_rec.site_addr_status := 'S'; -- For EV only
11992 
11993            -- Call Validate_Other_Info Insert_Other_Info
11994 
11995            l_student_rec.other_status  := Validate_Other_Info (p_person_rec => l_student_rec,
11996                                                                p_data_rec  => l_oth_rec);
11997            -- Call Validate_F_Addr_Info  Insert_Address_Info
11998            l_student_rec.f_addr_status  := Validate_F_Addr_Info (p_person_rec => l_student_rec,
11999                                                                 p_data_rec   => l_f_addr_rec,
12000                                                                 p_records    => l_count);
12001 	  ELSE
12002 
12003             l_student_rec.f_addr_status := 'S'; --for Non-Img only
12004             l_student_rec.other_status := 'S'; --for Non-Img only
12005 
12006            -- 2908378 passed l_site_addr_rec for capturing the Site of Activity Address
12007            l_student_rec.site_addr_status  := Validate_Site_Info (p_person_rec => l_student_rec,
12008                                                                  p_data_rec   => l_site_addr_rec,
12009                                                                  p_records    => l_count);
12010            l_soa_count := l_count;
12011            IF l_student_rec.site_addr_status      = 'U'  THEN --Unexpected error - terminate execution
12012 	      /* Debug */
12013 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12014 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12015 		  l_debug_str := 'Returning U from Create_Batch. site_addr_status is U.';
12016 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12017 		END IF;
12018 
12019               RAISE FND_API.G_EXC_ERROR;
12020 
12021            END IF;
12022 
12023           END IF;
12024 
12025          -- Call Validate_Dependent_Info Insert_Dependent_Info
12026 
12027          l_student_rec.dep_status  := Validate_Dependent_Info (p_person_rec => l_student_rec,
12028                                                                p_data_rec   => l_dep_rec,
12029                                                                p_records    => l_count );
12030 
12031          l_student_rec.dep_count   := l_count;
12032          -- check all statuses
12033          -- 2908378 added validation with l_student_rec.site_addr_status
12034          IF l_student_rec.issue_status = 'E'
12035             OR l_student_rec.bio_status = 'E'
12036             OR l_student_rec.other_status = 'E'
12037             OR l_student_rec.f_addr_status  = 'E'
12038             OR l_student_rec.us_addr_status = 'E'
12039             OR l_student_rec.site_addr_status = 'E'
12040             OR l_student_rec.edu_status  = 'E'
12041             OR l_student_rec.fin_status  = 'E'
12042             OR l_student_rec.dep_status = 'E' THEN -- Validation error - mark person as invalid
12043 
12044             l_student_rec.person_status := 'I';
12045 
12046          END IF;
12047          IF l_student_rec.issue_status      = 'U'
12048             OR l_student_rec.bio_status     = 'U'
12049             OR l_student_rec.other_status   = 'U'
12050             OR l_student_rec.f_addr_status  = 'U'
12051             OR l_student_rec.us_addr_status = 'U'
12052             OR l_student_rec.site_addr_status = 'U'
12053             OR l_student_rec.edu_status     = 'U'
12054             OR l_student_rec.fin_status     = 'U'
12055             OR l_student_rec.dep_status     = 'U'  THEN --Unexpected error - terminate execution
12056 
12057             RAISE FND_API.G_EXC_ERROR;
12058 
12059          ELSIF l_student_rec.issue_status = 'N'
12060             OR l_student_rec.bio_status   = 'N'
12061             OR l_student_rec.edu_status   = 'N'
12062             OR l_student_rec.fin_status   = 'N' THEN -- Not found
12063 
12064             -- These are I-20 blocks and should be found. If this happens - its a bug
12065 
12066             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_UNEXP_EXCPT_ERR'); -- I-20 is missing! Unexpected error
12067             FND_MESSAGE.SET_TOKEN('BLOCK_ID',5);
12068             FND_MSG_PUB.Add;
12069                /* Debug */
12070 		IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12071 		  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12072 		  l_debug_str := 'IGS_SV_UNEXP_EXCPT_ERR in Create_Batch.';
12073 		  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12074 		END IF;
12075 
12076             RAISE FND_API.G_EXC_ERROR;
12077 
12078          END IF;
12079 
12080          -- Check for required blocks
12081 
12082          IF l_student_rec.f_addr_status = 'N' AND p_batch_type = 'I' THEN
12083 
12084             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_NO_F_ADDR_FLD_ERR'); -- Foreign address not found
12085             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_student_rec.person_number);
12086             Put_Log_Msg(FND_MESSAGE.Get,1);
12087 
12088             l_student_rec.person_status := 'I';
12089 
12090          END IF;
12091          IF l_student_rec.us_addr_status = 'N' AND p_batch_type = 'E' THEN
12092 
12093             FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_NO_US_ADDR_FLD_ERR'); -- US address not found
12094             FND_MESSAGE.SET_TOKEN('PERSON_NUMBER', l_student_rec.person_number);
12095             Put_Log_Msg(FND_MESSAGE.Get,1);
12096 
12097             l_student_rec.person_status := 'I';
12098 
12099          END IF;
12100          IF l_student_rec.person_status = 'V' THEN
12101            l_record_number := l_record_number +1;
12102 	   g_create_count := g_create_count +1; -- prbhardw CP enhancement
12103 
12104 	   l_student_rec.record_number := g_create_count;  -- prbhardw CP enhancement
12105 
12106            Put_Log_Msg(' Inserting data ',0);
12107 
12108            l_student_rec.changes_found := 'Y' ;
12109 
12110             -- Insertion of everything.
12111 
12112             Update_Issue_Info ( p_data_rec  => l_issue_rec);
12113 
12114             Insert_Bio_Info ( p_data_rec  => l_bio_rec);
12115 
12116             IF l_student_rec.other_status = 'S' and p_batch_type ='I' THEN
12117 
12118                Insert_Other_Info ( p_data_rec  => l_oth_rec);
12119 
12120             END IF;
12121 
12122             Insert_Edu_Info ('EDU', p_data_rec  => l_edu_rec, p_auth_drp_data_rec => l_cur_authdrp_rec);
12123 
12124             IF p_batch_type ='I' THEN
12125 
12126               Insert_Address_Info ('F', p_data_rec  => l_f_addr_rec,p_records => 1);   --- prbhardw CP enhancement
12127 
12128             END IF;
12129 
12130             IF l_student_rec.us_addr_status = 'S' THEN
12131 
12132                Insert_Address_Info ( 'US',p_data_rec  => l_us_addr_rec,p_records => 1);   --- prbhardw CP enhancement
12133 
12134             END IF;
12135             -- 2908378 added to insert site of activity
12136             IF  l_student_rec.site_addr_status = 'S' AND p_batch_type ='E' THEN
12137                Insert_Address_Info ('SOA', p_data_rec  => l_site_addr_rec,p_records => l_soa_count);   --- prbhardw CP enhancement
12138             END IF;
12139 
12140             Insert_Finance_Info ( p_data_rec  => l_fin_rec);
12141 
12142             IF l_student_rec.dep_status = 'S' THEN
12143 
12144               Insert_Dependent_Info ( p_data_rec  => l_dep_rec,p_records   => l_student_rec.dep_count  );
12145 
12146             END IF;
12147 
12148          ELSE
12149 
12150            Put_Log_Msg(' No insertion, person_status is:'||l_student_rec.person_status ,0);
12151 
12152          END IF;  -- Insertion ends here
12153      ELSIF l_student_rec.person_status = 'V' THEN -- prbhardw Added on 22/03/06
12154           g_person_status := 'EDIT';
12155           l_record_number := l_record_number +1;
12156 	  g_update_count := g_update_count +1; -- prbhardw CP enhancement
12157 	  l_student_rec.record_number := g_update_count; -- prbhardw CP enhancement
12158 	  Put_Log_Msg(' update_count:'||g_update_count,0);
12159           IF p_batch_type = 'I' THEN -- If mode update for Non immigrants
12160 
12161                -- IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12162 
12163 		     -- Call Update_Employment_Info
12164                     l_status := Update_Employment_Info ( p_person_rec  => l_student_rec  );
12165 
12166 		    IF l_status <> 'S' THEN
12167 				/* Debug */
12168 			 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12169 				l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12170 				l_debug_str := 'ERROR in Create_Batch. l_status from Update_Employment_Info is not S';
12171 				fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12172 			 END IF;
12173 			 RAISE FND_API.G_EXC_ERROR;
12174 		    END IF;
12175 
12176              --  END IF;
12177 
12178 	   -- Call Update_Registration_Info
12179 	       l_status := Update_Registration_Info ( p_person_rec  => l_student_rec  );
12180                IF l_status <> 'S' THEN
12181 	      /* Debug */
12182 		    IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12183 		         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12184 		         l_debug_str := 'ERROR in Create_Batch. l_status is not S';
12185 		         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12186 		    END IF;
12187 
12188                     RAISE FND_API.G_EXC_ERROR;
12189                END IF;
12190               -- IF l_student_rec.changes_found <> 'Y' THEN    --- commented by prbhardw
12191 
12192                       -- Call Update_Personal_Info
12193                     l_status := Update_Personal_Info ( p_person_rec  => l_student_rec  );
12194 
12195                     IF l_status <> 'S' THEN
12196 				/* Debug */
12197 		         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12198 		               l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12199 		               l_debug_str := 'ERROR in Create_Batch. changes_found <> Y and l_status is not S';
12200 		               fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12201 		         END IF;
12202                          RAISE FND_API.G_EXC_ERROR;
12203                     END IF;
12204              --  END IF;
12205               -- IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12206 
12207 			-- Call Update_Program_Info
12208                     l_status := Update_Program_Info ( p_person_rec  => l_student_rec  );
12209 
12210                     IF l_status <> 'S' THEN
12211 				/* Debug */
12212 		         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12213 		               l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12214 		               l_debug_str := 'ERROR in Create_Batch. l_status from Update_Program_Info is not S';
12215 		               fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12216 		         END IF;
12217 
12218                          RAISE FND_API.G_EXC_ERROR;
12219                     END IF;
12220             --   END IF;
12221 
12222              --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12223 
12224 			-- Call Update_Finance_Info
12225                     l_status := Update_Finance_Info ( p_person_rec  => l_student_rec  );
12226 
12227                     IF l_status <> 'S' THEN
12228 				/* Debug */
12229 		         IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12230 				l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12231 				l_debug_str := 'ERROR in Create_Batch. l_status from Update_Finance_Info is not S';
12232 				fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12233 		         END IF;
12234                          RAISE FND_API.G_EXC_ERROR;
12235                     END IF;
12236               -- END IF;
12237 
12238              --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12239 
12240 			-- Call Update_Dependent_Info
12241                     l_status := Update_Dependent_Info ( p_person_rec  => l_student_rec  );
12242 
12243 		    IF l_status <> 'S' THEN
12244 				/* Debug */
12245 			 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12246 				l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12247 				l_debug_str := 'ERROR in Create_Batch. l_status from Update_Dependent_Info is not S';
12248 				fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12249 			 END IF;
12250 			 RAISE FND_API.G_EXC_ERROR;
12251 		    END IF;
12252 
12253 	      -- END IF;
12254 
12255              --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12256 
12257 			-- Call Update_Conviction_Info
12258                     l_status := Update_Conviction_Info ( p_person_rec  => l_student_rec  );
12259 
12260 		    IF l_status <> 'S' THEN
12261 				/* Debug */
12262 			 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12263 				l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12264 				l_debug_str := 'ERROR in Create_Batch. l_status from Update_Conviction_Info is not S';
12265 				fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12266 			 END IF;
12267 			 RAISE FND_API.G_EXC_ERROR;
12268                     END IF;
12269 
12270              --  END IF;
12271 
12272           ELSE  -- Update for EV student
12273          -------
12274 	  IF l_student_rec.no_show_flag =  'Y' THEN
12275                IF Get_pre_noshow_status(l_student_rec.person_id,l_student_rec.batch_id) = 'Y' THEN
12276                     l_student_rec.changes_found := 'N';
12277                ELSE
12278 	            l_student_rec.changes_found := 'Y';
12279 		   l_btch_id := chk_mut_exclusive(l_student_rec.batch_id,
12280 				       l_student_rec.person_id,
12281 				       'NOSHOW',
12282 				       'SV_STATUS');
12283 		    Insert_Summary_Info(l_btch_id,
12284 				       l_student_rec.person_id,
12285 				       'NOSHOW',
12286 				       'SV_STATUS',
12287 				       'SEND',
12288 				       'IGS_SV_PERSONS',
12289 				       '');
12290 	       END IF;
12291 	  ELSE
12292 
12293 
12294 
12295 	   --IF no_show_status <> l_student_rec.no_show_flag AND l_student_rec.no_show_flag <> 'Y' THEN
12296 
12297 		   l_status := Update_Personal_Info ( p_person_rec  => l_student_rec  );
12298 
12299 		   IF l_status <> 'S' THEN
12300 			/* Debug */
12301 			IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12302 			  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12303 			  l_debug_str := 'ERROR in Create_Batch. l_status from Update_Personal_Info is not S';
12304 			  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12305 			END IF;
12306 
12307 		      RAISE FND_API.G_EXC_ERROR;
12308 		   END IF;
12309 		    l_status := Update_ev_legal_Info ( p_person_rec  => l_student_rec  );
12310                    IF l_status <> 'S' THEN
12311 	               /* Debug */
12312 		       IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12313 		            l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12314 		            l_debug_str := 'ERROR in Create_Batch. Update_ev_legal_Info status is not S';
12315 		            fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12316 		       END IF;
12317 
12318                        RAISE FND_API.G_EXC_ERROR;
12319                    END IF;
12320 
12321 		 --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12322 		     -- Call Update_Finance_Info
12323 		     l_status := Update_Finance_Info ( p_person_rec  => l_student_rec  );
12324 
12325 
12326 		     IF l_status <> 'S' THEN
12327 		       /* Debug */
12328 			IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12329 			  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12330 			  l_debug_str := 'ERROR in Create_Batch. l_status from Update_Finance_Info is not S';
12331 			  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12332 			END IF;
12333 		       RAISE FND_API.G_EXC_ERROR;
12334 		     END IF;
12335 		 --  END IF;
12336 
12337 		 --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12338 
12339 		     -- Call Update_EV_Program_Info
12340 		     l_status := Update_EV_Program_Info ( p_person_rec  => l_student_rec  );
12341 
12342 
12343 		     IF l_status <> 'S' THEN
12344 		       /* Debug */
12345 			IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12346 			  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12347 			  l_debug_str := 'ERROR in Create_Batch. l_status from Update_EV_Program_Info is not S';
12348 			  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12349 			END IF;
12350 		       RAISE FND_API.G_EXC_ERROR;
12351 		     END IF;
12352 		 --  END IF;
12353 
12354 		 --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12355 
12356 		     -- Call Update_EV_Address_Info
12357 		     l_status := Update_EV_Address_Info ( p_person_rec  => l_student_rec  );
12358 
12359 
12360 		     IF l_status <> 'S' THEN
12361 		       /* Debug */
12362 			IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12363 			  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12364 			  l_debug_str := 'ERROR in Create_Batch. l_status from Update_EV_Address_Info is not S';
12365 			  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12366 			END IF;
12367 		       RAISE FND_API.G_EXC_ERROR;
12368 		     END IF;
12369 
12370 		   --END IF;
12371 		 --  IF l_student_rec.changes_found <> 'Y' THEN   --- commented by prbhardw
12372 
12373 		     -- Call Update_Dependent_Info
12374 		     l_status := Update_Dependent_Info ( p_person_rec  => l_student_rec  );
12375 
12376 
12377 		     IF l_status <> 'S' THEN
12378 		       /* Debug */
12379 			IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12380 			  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12381 			  l_debug_str := 'ERROR in Create_Batch. l_status from Update_Dependent_Info is not S';
12382 			  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12383 			END IF;
12384 		       RAISE FND_API.G_EXC_ERROR;
12385 		     END IF;
12386 
12387 		 --  END IF;
12388 		    --PRBHARDW
12389 		    IF Get_pre_noshow_status(l_student_rec.person_id,l_student_rec.batch_id) = 'Y' THEN
12390 			    l_student_rec.changes_found := 'Y';
12391 		    END IF;
12392 		    IF l_student_rec.reprint_reason = '06' THEN
12393 			l_student_rec.changes_found := 'Y';
12394 		    END IF;
12395 		    --PRBHARDW
12396 
12397 		 END IF;
12398 
12399 	      END IF;
12400 	  END IF;
12401       IF l_student_rec.person_status = 'I' THEN
12402 
12403          --Remove all person data from tables
12404 
12405         Remove_Person_Data(p_person_id => l_student_rec.person_id, p_batch_id => l_batch_id);
12406 
12407         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_INVALID'); -- Student has validation error - not processed
12408         Put_Log_Msg(FND_MESSAGE.Get,1);
12409 
12410       ELSIF l_student_rec.changes_found = 'Y' THEN
12411 
12412         IF  p_validate_only ='N' THEN
12413 
12414           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_SUCCESS'); -- Student successfully processed
12415           Put_Log_Msg(FND_MESSAGE.Get,1);
12416 
12417         ELSE
12418 
12419           FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STDNT_VALID_SUCC'); -- Student successfully processed
12420           Put_Log_Msg(FND_MESSAGE.Get,1);
12421 
12422         END IF;
12423 
12424         l_batch_status :='S';
12425 
12426       ELSIF l_student_rec.changes_found = 'N' THEN
12427 
12428          --Remove all person data from tables
12429         Remove_Person_Data(p_person_id => l_student_rec.person_id, p_batch_id => l_batch_id);
12430 
12431         FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_STUDENT_NO_CHANGE'); -- No changes found for the student
12432         Put_Log_Msg(FND_MESSAGE.Get,1);
12433 
12434       END IF;
12435         IF p_batch_type ='I' THEN
12436 	      FETCH C_NI_CUR INTO c_student_list_rec;
12437 	ELSE
12438 	   FETCH C_EV_CUR INTO c_student_list_rec;
12439 	END IF;
12440    END LOOP;
12441 
12442         IF p_batch_type ='I' THEN
12443 	      CLOSE C_NI_CUR;
12444 	ELSE
12445 	   CLOSE C_EV_CUR ;
12446 	END IF;
12447 
12448 
12449 
12450    IF l_batch_status = 'N' THEN
12451      -- no students for the batch - change
12452 
12453       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_NO_STUDENTS'); -- No students found to submit
12454       Put_Log_Msg(FND_MESSAGE.Get,1);
12455 
12456       DELETE FROM igs_sv_batches WHERE batch_id = l_batch_id;
12457 
12458    END IF;
12459 
12460    /*
12461    IF l_record_number >=250 THEN
12462 
12463       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_MAX_RECORDS'); -- Too many students.
12464       Put_Log_Msg(FND_MESSAGE.Get,1);
12465 
12466    END IF;
12467    */
12468 
12469 
12470 
12471    -- Check batch validate and invalid flag
12472 
12473    -- Rollback since batch shouldn't be saved
12474 
12475    --Raise an event for WF and commit
12476    IF l_batch_status = 'S' AND p_validate_only ='N' THEN
12477 
12478     -- Submit_Event ( p_batch_type, l_batch_id);
12479        null;
12480    ELSE
12481 
12482       FOR i IN 1..g_parallel_batches.COUNT LOOP
12483 	  Remove_Person_Data (p_person_id => NULL, p_batch_id => g_parallel_batches(i) );
12484           DELETE FROM igs_sv_batches WHERE batch_id = g_parallel_batches(i);
12485           Put_Log_Msg(' Removing parallel batch: ' || g_parallel_batches(i),0);
12486       END LOOP;
12487 
12488       FOR i IN 1..g_running_batches.COUNT LOOP
12489 	   Remove_Person_Data (p_person_id => NULL, p_batch_id => g_running_batches(i) );
12490            DELETE FROM igs_sv_batches WHERE batch_id = g_running_batches(i);
12491            Put_Log_Msg(' Removing running batch: ' || g_running_batches(i),0);
12492       END LOOP;
12493 
12494    END IF;
12495 /* Debug */
12496 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12497   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12498   l_debug_str := 'Commiting in Create_Batch. l_batch_status: '||l_batch_status;
12499   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12500 END IF;
12501    compose_log_file;
12502 
12503    COMMIT;
12504 
12505    retcode := 0;
12506 
12507 EXCEPTION
12508 
12509    WHEN FND_API.G_EXC_ERROR THEN
12510       /* Debug */
12511 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12512 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12513 	  l_debug_str := 'FND_API.G_EXC_ERROR exception in Create_Batch. '||SQLERRM;
12514 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12515 	END IF;
12516       ROLLBACK TO Create_Batch;
12517       retcode := 2;
12518       dump_current_person(l_student_rec);
12519         IF C_NI_CUR%ISOPEN THEN
12520 	      CLOSE C_NI_CUR;
12521 	ELSIF C_EV_CUR%ISOPEN THEN
12522 	   CLOSE C_EV_CUR ;
12523 	END IF;
12524       Generate_Message;
12525 
12526    WHEN OTHERS THEN
12527 
12528       /* Debug */
12529 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12530 	  l_label := 'igs.plsql.igs_sv_batch_process_pkg.Create_Batch';
12531 	  l_debug_str := 'Other exception in Create_Batch. '||SQLERRM;
12532 	  fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12533 	END IF;
12534       ROLLBACK TO Create_Batch;
12535       retcode := 2;
12536       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
12537          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
12538       END IF;
12539 
12540       dump_current_person(l_student_rec);
12541         IF C_NI_CUR%ISOPEN THEN
12542 	      CLOSE C_NI_CUR;
12543 	ELSIF C_EV_CUR%ISOPEN THEN
12544 	   CLOSE C_EV_CUR ;
12545 	END IF;
12546       Generate_Message;
12547 
12548 END Create_Batch;
12549 
12550 
12551 
12552 
12553 /******************************************************************
12554    Created By         : Arkadi Tereshenkov
12555 
12556    Date Created By    : Oct 14, 2002
12557 
12558    Purpose            : This is the main concurrent program called when
12559                         submitting request for the non immigrant students
12560 
12561    Remarks            :
12562 
12563    Change History
12564    Who                  When            What
12565 ------------------------------------------------------------------------
12566 
12567 ******************************************************************/
12568 PROCEDURE NIMG_Batch_Process(
12569    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
12570    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
12571    p_validate_only    IN  VARCHAR2,  -- Validate only flag  'Y'  'N'
12572    p_org_id           IN  VARCHAR2,
12573    p_dso_id           IN  VARCHAR2
12574 ) IS
12575 
12576    l_api_name    CONSTANT VARCHAR2(30)   := 'NIMG_Batch_Process';
12577 
12578    l_dso_id VARCHAR2(20) := substr(p_dso_id,1,instr(p_dso_id,'-',-1)-1) ;
12579    l_dso_party_id NUMBER := to_number(substr(p_dso_id,instr(p_dso_id,'-',-1)+1));
12580 
12581    l_org_id VARCHAR2(20) := substr(p_org_id,1,instr(p_org_id,'-',-1)-1) ;
12582    l_org_party_id NUMBER := to_number(substr(p_org_id,instr(p_org_id,'-',-1)+1));
12583 
12584 
12585 BEGIN
12586    /* Debug */
12587   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12588      l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Batch_Process';
12589      l_debug_str := 'Entering NIMG_Batch_Process.';
12590       l_debug_str := l_debug_str || 'l_org_id=' || l_org_id;
12591       l_debug_str := l_debug_str || 'l_dso_id=' || l_dso_id;
12592       l_debug_str := l_debug_str || 'l_dso_party_id=' || l_dso_party_id;
12593       l_debug_str := l_debug_str || 'l_org_party_id=' || l_org_party_id;
12594       l_debug_str := l_debug_str || 'p_org_id=' || p_org_id;
12595       l_debug_str := l_debug_str || 'p_dso_id=' || p_dso_id;
12596 
12597      fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12598   END IF;
12599 
12600    -- Just call the procedure
12601    SAVEPOINT NIMG_Batch_Process;
12602 
12603    Create_Batch(
12604      errbuf           => errbuf ,
12605      retcode          => retcode,
12606      p_batch_type     => 'I',
12607      p_validate_only  => p_validate_only ,
12608      p_org_id         => l_org_id,
12609      p_dso_id         => l_dso_id,
12610      p_dso_party_id   => l_dso_party_id,
12611      p_org_party_id   => l_org_party_id
12612      ) ;
12613 
12614 EXCEPTION
12615 
12616    WHEN OTHERS THEN
12617 
12618       /* Debug */
12619      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12620        l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Batch_Process';
12621        l_debug_str := 'Exception in NIMG_Batch_Process. '||SQLERRM;
12622        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12623      END IF;
12624 
12625       ROLLBACK TO NIMG_Batch_Process;
12626 
12627       retcode := 2;
12628       errbuf := SQLERRM;
12629       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
12630          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
12631       END IF;
12632 
12633       Generate_Message;
12634 
12635 END NIMG_Batch_Process;
12636 
12637 
12638 
12639 /******************************************************************
12640    Created By         : Arkadi Tereshenkov
12641 
12642    Date Created By    : Oct 14, 2002
12643 
12644    Purpose            : This is the main procedure to be called when
12645                         the request has to be purged for
12646                         Exchange Visitors or Non Immigrant students.
12647                         This procedure is called from the concurrent
12648                         requests.
12649 
12650    remarks            :
12651 
12652    Change History
12653    Who                  When            What
12654 ------------------------------------------------------------------------
12655 
12656 ******************************************************************/
12657 PROCEDURE Purge_Batch(
12658    errbuf             OUT NOCOPY VARCHAR2,  -- Request standard error string
12659    retcode            OUT NOCOPY NUMBER  ,  -- Request standard return status
12660    p_batch_type       IN  VARCHAR2   -- Batch type E(ev),  I(international)
12661 ) IS
12662 
12663    l_api_name  CONSTANT VARCHAR2(25) := 'Purge_Batch';
12664    l_batch_id         igs_sv_batches.batch_id%TYPE;
12665 
12666    CURSOR c_active_batch IS
12667      SELECT batch_id
12668       FROM igs_sv_batches
12669      WHERE batch_status IN ('S','N')
12670            AND batch_type = p_batch_type;
12671 
12672 BEGIN
12673 
12674    /* Debug */
12675      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12676        l_label := 'igs.plsql.igs_sv_batch_process_pkg.Purge_Batch';
12677        l_debug_str := 'Entering Purge_Batch. p_batch_type is '||p_batch_type;
12678        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12679      END IF;
12680    FND_MSG_PUB.initialize;
12681 
12682    SAVEPOINT Purge_Batch;
12683 
12684    -- Check for active batch
12685 
12686    OPEN c_active_batch;
12687    FETCH c_active_batch INTO l_batch_id;
12688    CLOSE c_active_batch;
12689 
12690    IF l_batch_id IS NULL THEN
12691      -- Active batch is not found and mode not validate only - terminate current process
12692       FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_NO_BATCH_FOUND');
12693       Put_Log_Msg(FND_MESSAGE.Get,1);
12694 
12695    ELSE
12696 
12697      --Remove batch
12698      /*Remove_Person_Data (p_person_id => NULL, p_batch_id => l_batch_id );
12699 
12700      DELETE FROM igs_sv_batches WHERE batch_id = l_batch_id;
12701      DELETE FROM igs_sv_batches WHERE batch_id > l_batch_id;*/
12702 
12703       FOR i IN 1..g_parallel_batches.COUNT LOOP
12704 	  Remove_Person_Data (p_person_id => NULL, p_batch_id => g_parallel_batches(i) );
12705           DELETE FROM igs_sv_batches WHERE batch_id = g_parallel_batches(i);
12706           Put_Log_Msg(' In purge batch-Removing parallel batch: ' || g_parallel_batches(i),0);
12707       END LOOP;
12708 
12709       FOR i IN 1..g_running_batches.COUNT LOOP
12710 	   Remove_Person_Data (p_person_id => NULL, p_batch_id => g_running_batches(i) );
12711            DELETE FROM igs_sv_batches WHERE batch_id = g_running_batches(i);
12712            Put_Log_Msg(' In purge batch-Removing running batch: ' || g_running_batches(i),0);
12713       END LOOP;
12714 
12715    END IF;
12716 
12717    retcode := 0;
12718    /* Debug */
12719      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12720        l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Batch_Process';
12721        l_debug_str := 'retcode in NIMG_Batch_Process: '||retcode;
12722        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12723      END IF;
12724 EXCEPTION
12725 
12726    WHEN FND_API.G_EXC_ERROR THEN
12727 
12728       /* Debug */
12729      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12730        l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Batch_Process';
12731        l_debug_str := 'FND_API.G_EXC_ERROR Exception in NIMG_Batch_Process. '||SQLERRM;
12732        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12733      END IF;
12734       ROLLBACK TO Purge_Batch;
12735 
12736       retcode := 2;
12737 
12738       Generate_Message;
12739 
12740    WHEN OTHERS THEN
12741 
12742       /* Debug */
12743      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12744        l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Batch_Process';
12745        l_debug_str := 'Exception in NIMG_Batch_Process. '||SQLERRM;
12746        fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12747      END IF;
12748       ROLLBACK TO Purge_Batch;
12749 
12750       retcode := 2;
12751 
12752       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
12753          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
12754       END IF;
12755 
12756       Generate_Message;
12757 
12758 END Purge_Batch;
12759 
12760 
12761 
12762 
12763 /******************************************************************
12764    Created By         : Arkadi Tereshenkov
12765 
12766    Date Created By    : Oct 14, 2002
12767 
12768    Purpose            : This is the main procedure to be called when
12769                         there is a need to purge EV data.
12770 
12771    Remarks            :
12772 
12773    Change History
12774    Who                  When            What
12775 ------------------------------------------------------------------------
12776 
12777 ******************************************************************/
12778 PROCEDURE EV_Purge_Batch (
12779   errbuf         OUT NOCOPY VARCHAR2,  -- Request standard error string
12780   retcode        OUT NOCOPY NUMBER    -- Request standard return status
12781 ) IS
12782    l_api_name       CONSTANT VARCHAR2(30)   := 'EV_Purge_Batch';
12783    l_return_status  VARCHAR2(1);
12784    l_msg_count      NUMBER;
12785    l_msg_data       VARCHAR2(2000);
12786 
12787 BEGIN
12788    /* Debug */
12789   IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12790      l_label := 'igs.plsql.igs_sv_batch_process_pkg.EV_Purge_Batch';
12791      l_debug_str := 'Entering EV_Purge_Batch.';
12792      fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12793   END IF;
12794    -- Just call the procedure
12795 
12796    Purge_Batch(
12797      errbuf           => errbuf ,
12798      retcode          => retcode,
12799      p_batch_type     => 'E') ;
12800 
12801 EXCEPTION
12802 
12803    WHEN OTHERS THEN
12804       /* Debug */
12805      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12806         l_label := 'igs.plsql.igs_sv_batch_process_pkg.EV_Purge_Batch';
12807         l_debug_str := 'EXCEPTION in EV_Purge_Batch. '||SQLERRM;
12808         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12809      END IF;
12810       retcode := 2;
12811 
12812       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
12813          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
12814       END IF;
12815 
12816       Generate_Message;
12817 
12818 END EV_Purge_Batch;
12819 
12820 
12821 
12822 
12823 /******************************************************************
12824    Created By         : Arkadi Tereshenkov
12825 
12826    Date Created By    : Oct 14, 2002
12827 
12828    Purpose            : This is the main procedure to be called when
12829                         there is a need to purge Non immigrant data.
12830 
12831    Remarks            :
12832 
12833    Change History
12834    Who                  When            What
12835 ------------------------------------------------------------------------
12836 
12837 ******************************************************************/
12838 PROCEDURE NIMG_Purge_Batch (
12839   errbuf         OUT NOCOPY VARCHAR2,  -- Request standard error string
12840   retcode        OUT NOCOPY NUMBER    -- Request standard return status
12841 ) IS
12842    l_api_name       CONSTANT VARCHAR2(30)   := 'NIMG_Purge_Batch';
12843    l_return_status  VARCHAR2(1);
12844    l_msg_count      NUMBER;
12845    l_msg_data       VARCHAR2(2000);
12846 
12847 BEGIN
12848 
12849    /* Debug */
12850      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12851         l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Purge_Batch';
12852         l_debug_str := 'Entering NIMG_Purge_Batch.';
12853         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12854      END IF;
12855    -- Just call the procedure
12856 
12857    SAVEPOINT NIMG_Purge_Batch;
12858 
12859    Purge_Batch(
12860      errbuf           => errbuf ,
12861      retcode          => retcode,
12862      p_batch_type     => 'I') ;
12863 
12864 EXCEPTION
12865 
12866    WHEN OTHERS THEN
12867        /* Debug */
12868      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12869         l_label := 'igs.plsql.igs_sv_batch_process_pkg.NIMG_Purge_Batch';
12870         l_debug_str := 'EXCEPTION in NIMG_Purge_Batch. '||SQLERRM;
12871         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12872      END IF;
12873       ROLLBACK TO NIMG_Purge_Batch;
12874 
12875       retcode := 2;
12876 
12877       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
12878          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
12879       END IF;
12880 
12881       Generate_Message;
12882 
12883 END NIMG_Purge_Batch;
12884 
12885 
12886 /******************************************************************
12887    Created By         : Arkadi Tereshenkov
12888 
12889    Date Created By    : Oct 14, 2002
12890 
12891    Purpose            : Used to generate messages that are to be output
12892                         into the concurrent request log.
12893 
12894    Remarks            :
12895 
12896    Change History
12897    Who                  When            What
12898 ------------------------------------------------------------------------
12899 
12900 ******************************************************************/
12901 PROCEDURE Generate_Message
12902 IS
12903 
12904    l_msg_count      NUMBER;
12905    l_msg_data       VARCHAR2(2000);
12906 
12907 BEGIN
12908    /* Debug */
12909      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12910         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Generate_Message';
12911         l_debug_str := 'Entering Generate_Message.';
12912         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12913      END IF;
12914    FND_MSg_PUB.Count_And_Get ( p_count => l_msg_count,
12915                                p_data  => l_msg_data );
12916 
12917    IF (l_msg_count > 0) THEN
12918 
12919       l_msg_data := '';
12920 
12921       FOR l_cur IN 1..l_msg_count LOOP
12922 
12923          l_msg_data := FND_MSg_PUB.GET(l_cur, FND_API.g_FALSE);
12924          Put_Log_Msg(l_msg_data,1);
12925       END LOOP;
12926 
12927    ELSE
12928 
12929          l_msg_data  := 'Error Returned but Error stack has no data';
12930          Put_Log_Msg(l_msg_data,1);
12931 
12932    END IF;
12933     /* Debug */
12934      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
12935         l_label := 'igs.plsql.igs_sv_batch_process_pkg.Generate_Message';
12936         l_debug_str := 'Exiting Generate_Message. l_msg_data is: '||l_msg_data;
12937         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
12938      END IF;
12939 END Generate_Message;
12940 
12941 
12942 
12943 /******************************************************************
12944    Created By         : Arkadi Tereshenkov
12945 
12946    Date Created By    : Oct 14, 2002
12947 
12948    Purpose            : Place the messages that have been generated into
12949                         the appropriate log file for viewing.
12950 
12951    Remarks            :
12952 
12953    Change History
12954    Who                  When            What
12955 ------------------------------------------------------------------------
12956 
12957 ******************************************************************/
12958 PROCEDURE Put_Log_Msg (
12959    p_message IN VARCHAR2,
12960    p_level         IN NUMBER
12961 ) IS
12962 
12963    l_api_name             CONSTANT VARCHAR2(30)   := 'Put_Log_Msg';
12964 
12965 BEGIN
12966 
12967     -- This procedure outputs messages into the log file  Level 0 - System messages. 1 - user messages
12968     IF p_level >= g_debug_level THEN
12969 
12970       fnd_file.put_line (FND_FILE.LOG,p_message);
12971 
12972     END IF;
12973 
12974 END Put_Log_Msg;
12975 
12976 
12977 PROCEDURE process_person_record (
12978   p_BatchID        IN NUMBER,
12979   p_sevisID        IN VARCHAR2,
12980   p_person_id      IN NUMBER,
12981   p_Status         IN VARCHAR2,
12982   p_SEVIS_ErrorCode    IN VARCHAR2,
12983   p_SEVIS_ErrorElement IN VARCHAR2
12984 )
12985 IS
12986   l_rowid  VARCHAR2(255);
12987   l_alt_id igs_pe_person_id_typ.person_id_type%TYPE;
12988 
12989 
12990   CURSOR c_alt IS
12991    SELECT person_id_type
12992      FROM igs_pe_person_id_typ
12993     WHERE s_person_id_type = g_person_sevis_id AND
12994           closed_ind = 'N';
12995 
12996 
12997 BEGIN
12998     /* Debug */
12999      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13000         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_person_record';
13001         l_debug_str := 'Entering process_person_record. p_sevisID is: '||p_sevisID||' and p_person_id is: '||p_person_id;
13002         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13003      END IF;
13004 
13005  IF lower(p_Status) <> 'true' THEN
13006 
13007     UPDATE igs_sv_persons
13008        SET record_status = 'E',
13009            sevis_error_code = p_SEVIS_ErrorCode,
13010            sevis_error_element = p_SEVIS_ErrorElement
13011      WHERE batch_id = p_BatchID
13012            AND person_id = p_person_id;
13013 
13014   -- purge the person data completely.
13015 
13016 --    Remove_Person_Data (p_person_id => p_person_id, p_batch_id => p_BatchID );
13017 
13018   ELSIF  NVL(Get_Person_Sevis_Id (p_person_id),'X') <> p_sevisID THEN
13019 
13020    -- Update sevis id
13021    -- end date current one (if any)
13022 
13023    UPDATE igs_pe_alt_pers_id
13024       SET end_dt = trunc(sysdate)
13025     WHERE pe_person_id = p_person_id
13026           AND person_id_type
13027               IN (SELECT person_id_type
13028                     FROM igs_pe_person_id_typ
13029                    WHERE s_person_id_type = g_person_sevis_id)
13030            AND start_dt <= trunc(sysdate)
13031            AND NVL(end_dt,sysdate+1) >= trunc(sysdate) ;
13032 
13033       OPEN c_alt;
13034       FETCH c_alt INTO l_alt_id;
13035       CLOSE c_alt;
13036 
13037      -- Insert new
13038      IGS_PE_ALT_PERS_ID_PKG.INSERT_ROW (
13039          X_ROWID         => l_rowid,
13040          X_PE_PERSON_ID  => p_person_id,
13041          X_API_PERSON_ID => p_sevisID,
13042          X_API_PERSON_ID_UF => p_sevisID,
13043          X_PERSON_ID_TYPE => l_alt_id,
13044          X_START_DT       => trunc(sysdate),
13045          X_END_DT         => NULL,
13046          X_attribute_category => '',
13047          X_attribute1          => '',
13048          X_attribute2          => '',
13049          X_attribute3          => '',
13050          X_attribute4          => '',
13051          X_attribute5          => '',
13052          X_attribute6          => '',
13053          X_attribute7          => '',
13054          X_attribute8          => '',
13055          X_attribute9          => '',
13056          X_attribute10         => '',
13057          X_attribute11         => '',
13058          X_attribute12         => '',
13059          X_attribute13         => '',
13060          X_attribute14         => '',
13061          X_attribute15         => '',
13062          X_attribute16         => '',
13063          X_attribute17         => '',
13064          X_attribute18         => '',
13065          X_attribute19         => '',
13066          X_attribute20         => '',
13067          X_MODE                => 'I'
13068       );
13069 
13070 
13071   END IF;
13072    /* Debug */
13073      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13074         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_person_record';
13075         l_debug_str := 'Exiting process_person_record';
13076         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13077      END IF;
13078 
13079 END process_person_record;
13080 
13081 PROCEDURE process_trans_header (
13082   p_BatchID        IN NUMBER,
13083   p_FileErrorCode  IN VARCHAR2,
13084   p_FileValidation IN VARCHAR2)
13085 IS
13086 /*----------------------------------------------------------
13087 p_FileErrorCode => The resultCode attribute is set to success if all submitted records process successfully.
13088                                 Otherwise, the resultCode indicates either indicates that:
13089 
13090 				1) file has not yet been processed or
13091 
13092 				2) the file has been processed with at least one record failing business rules validation
13093 				(although all other records are successfully loaded into SEVIS)
13094 
13095 p_FileValidation => The status attribute is set to true if there are no errors associated with this batch submittal.
13096 
13097 ----------------------------------------------------------*/
13098    l_api_name       CONSTANT VARCHAR2(30)   := 'process_trans_header';
13099 
13100   CURSOR c_batch IS
13101     SELECT batch_status
13102       FROM igs_sv_batches
13103      WHERE batch_id = p_BatchID;
13104 
13105   l_status igs_sv_batches.batch_status%TYPE;
13106 
13107 
13108 BEGIN
13109 
13110      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13111         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_trans_header';
13112         l_debug_str := 'Came in with p_BatchID = '||p_BatchID||'  p_FileErrorCode = '||p_FileErrorCode ||' p_FileValidation = '||p_FileValidation||' '||SQLERRM;
13113         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13114      END IF;
13115 
13116   SAVEPOINT process_trans_header;
13117 
13118   -- S0001 - successfull download.
13119   -- p_FileValidation - true
13120 
13121   OPEN c_batch;
13122   FETCH c_batch INTO l_status;
13123 
13124   IF c_batch%NOTFOUND THEN
13125 
13126      CLOSE c_batch;
13127      FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_BATCH_NOT_FOUND'); -- Batch not found
13128      FND_MESSAGE.SET_TOKEN('BATCH_ID',p_BatchID);
13129      FND_MSG_PUB.Add;
13130 
13131      RAISE FND_API.G_EXC_ERROR;
13132 
13133   END IF;
13134 
13135   CLOSE c_batch;
13136 
13137   IF lower(p_FileValidation) = 'true' OR p_FileValidation='1' THEN
13138     -- successfull batch transmition.
13139 
13140     IF l_status <>'S' THEN
13141        FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_INVALID_STATUS'); -- Batch is not in process
13142        FND_MESSAGE.SET_TOKEN('BATCH_ID',p_BatchID);
13143        FND_MSG_PUB.Add;
13144 
13145        RAISE FND_API.G_EXC_ERROR;
13146 
13147     END IF;
13148 
13149     -- Update batch  and set success status
13150     UPDATE igs_sv_batches SET batch_status = 'P' WHERE batch_id = p_BatchID;
13151 
13152   ELSE
13153     -- purge the batch completely.
13154 
13155     Remove_Person_Data (p_person_id => NULL, p_batch_id => p_BatchID );
13156 
13157     UPDATE igs_sv_batches SET batch_status = 'E', SEVIS_ERROR_CODE = NVL(p_FileErrorCode,NVL(p_FileValidation,'X')) WHERE batch_id = p_BatchID;
13158 
13159   END IF;
13160 EXCEPTION
13161    WHEN FND_API.G_EXC_ERROR THEN
13162       /* Debug */
13163      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13164         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_trans_header';
13165         l_debug_str := 'FND_API.G_EXC_ERROR in process_trans_header '||SQLERRM;
13166         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13167      END IF;
13168       ROLLBACK TO process_trans_header;
13169    WHEN OTHERS THEN
13170        /* Debug */
13171        IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13172           l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_trans_header';
13173           l_debug_str := 'Exiting process_trans_header '||SQLERRM;
13174           fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13175        END IF;
13176       ROLLBACK TO process_trans_header;
13177 
13178       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13179          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13180       END IF;
13181 END process_trans_header;
13182 
13183 PROCEDURE process_trans_errors (
13184   p_BatchID        IN NUMBER,
13185   p_ErrorCode      IN VARCHAR2,
13186   p_ErrorMessage   IN VARCHAR2,
13187   x_return_status  OUT NOCOPY VARCHAR2
13188 )
13189 IS
13190 BEGIN
13191   NULL;
13192 END process_trans_errors;
13193 
13194 
13195 PROCEDURE process_student_record (
13196   p_BatchID        IN NUMBER,
13197   p_sevisID        IN VARCHAR2,
13198   p_PersonID   IN VARCHAR2,
13199   p_Status         IN VARCHAR2,
13200   p_SEVIS_ErrorCode    IN VARCHAR2,
13201   p_SEVIS_ErrorElement IN VARCHAR2)
13202 
13203 
13204 IS
13205 /*----------------------------------------------------------
13206 p_SEVIS_ErrorCode => SEVIS defined error code
13207 
13208 p_SEVIS_ErrorElement => Error message
13209 
13210 p_PersonID => User defined field B for principal record
13211 
13212 p_Status => The status attribute is set to true if this record is successfully loaded into SEVIS.  If the attempt failed, then the list of errors appear below this element
13213 
13214 ----------------------------------------------------------*/
13215   l_api_name   CONSTANT VARCHAR2(30)   := 'process_student_record';
13216   l_person_id  NUMBER(15);
13217 
13218 
13219 BEGIN
13220 
13221      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13222         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_student_record';
13223         l_debug_str := 'Came in with p_BatchID = '||p_BatchID||'  p_sevisID = '||p_sevisID
13224 		||'  p_PersonID = '||p_PersonID|| ' p_Status = '||p_Status
13225 		||'  p_SEVIS_ErrorCode = '||p_SEVIS_ErrorCode||'  p_SEVIS_ErrorElement = '||p_SEVIS_ErrorElement||' '||SQLERRM;
13226         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13227      END IF;
13228 
13229 
13230     SAVEPOINT process_student_record;
13231 
13232 
13233   l_person_id := to_number(p_PersonID);
13234 
13235   process_person_record (
13236     p_BatchID        => p_BatchID,
13237     p_sevisID        => p_sevisID,
13238     p_person_id      => l_person_id,
13239     p_Status         => p_Status,
13240     p_SEVIS_ErrorCode    => p_SEVIS_ErrorCode,
13241     p_SEVIS_ErrorElement => p_SEVIS_ErrorElement
13242   );
13243 
13244 update igs_sv_persons set SEVIS_USER_ID = p_sevisID ,
13245         SEVIS_ERROR_CODE = p_SEVIS_ErrorCode, SEVIS_ERROR_ELEMENT  = p_SEVIS_ErrorElement
13246         where person_id = p_PersonID;
13247 
13248 EXCEPTION
13249 
13250    WHEN FND_API.G_EXC_ERROR THEN
13251 
13252       ROLLBACK TO process_student_record;
13253 
13254       RAISE FND_API.G_EXC_ERROR;
13255 
13256    WHEN OTHERS THEN
13257 
13258       ROLLBACK TO process_student_record;
13259 
13260       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13261          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13262       END IF;
13263 
13264       RAISE FND_API.G_EXC_ERROR;
13265 
13266 
13267 END process_student_record;
13268 
13269 PROCEDURE process_dep_record (
13270   p_BatchID        IN NUMBER,
13271   p_DepPersonID        IN NUMBER,
13272   p_DepSevisID        IN VARCHAR2,
13273   p_PersonID   IN VARCHAR2,
13274   p_Status         IN VARCHAR2,
13275   p_SEVIS_ErrorCode    IN VARCHAR2,
13276   p_SEVIS_ErrorElement IN VARCHAR2
13277 
13278   )
13279 IS
13280 /*----------------------------------------------------------
13281 p_SEVIS_ErrorCode => SEVIS defined error code
13282 
13283 p_SEVIS_ErrorElement => Error message
13284 
13285 p_DepPersonID => User defined field B for principal record
13286 
13287 p_Status => The status attribute is set to true if this record is successfully loaded into SEVIS.  If the attempt failed, then the list of errors appear below this element
13288 
13289 ----------------------------------------------------------*/
13290 
13291   l_api_name   CONSTANT VARCHAR2(30)   := 'process_dep_record';
13292   l_person_id  NUMBER(15);
13293   l_temp VARCHAR2(1);
13294 
13295 CURSOR c_dep IS
13296     SELECT  '1'
13297       FROM IGS_SV_DEPDNT_INFO
13298      WHERE PERSON_ID = p_PersonID and DEPDNT_ID  = p_DepPersonID;
13299 
13300 
13301 BEGIN
13302      IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13303         l_label := 'igs.plsql.igs_sv_batch_process_pkg.process_dep_record';
13304         l_debug_str := 'Came in with p_BatchID = '||p_BatchID||'  p_DepPersonID = '||p_DepPersonID
13305 		||'  p_DepSevisID = '||p_DepSevisID||'  p_PersonID = '||p_PersonID
13306 		|| ' p_Status = '||p_Status||'  p_SEVIS_ErrorCode = '
13307 		||p_SEVIS_ErrorCode||'  p_SEVIS_ErrorElement = '||p_SEVIS_ErrorElement||' '||SQLERRM;
13308         fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13309      END IF;
13310 
13311   OPEN c_dep;
13312   FETCH c_dep INTO l_temp;
13313 
13314   IF c_dep%NOTFOUND THEN
13315 
13316      CLOSE c_dep;
13317 
13318      FND_MESSAGE.SET_NAME('IGS', 'IGS_SV_DEP_NOT_FOUND'); -- Dependent not found
13319      FND_MESSAGE.SET_TOKEN('PERSON_ID',p_PersonID);
13320      FND_MSG_PUB.Add;
13321 
13322      RAISE FND_API.G_EXC_ERROR;
13323 
13324   END IF;
13325 
13326   CLOSE c_dep;
13327 
13328   l_person_id := to_number(p_DepPersonID);
13329   process_person_record (
13330     p_BatchID        => p_BatchID,
13331     p_sevisID        => p_DepSevisID,
13332     p_person_id      => l_person_id,
13333     p_Status         => p_Status,
13334     p_SEVIS_ErrorCode    => p_SEVIS_ErrorCode,
13335     p_SEVIS_ErrorElement => p_SEVIS_ErrorElement
13336   );
13337 
13338     UPDATE IGS_SV_DEPDNT_INFO SET DEPDNT_SEVIS_ID = p_DepSevisID WHERE PERSON_ID = p_PersonID and DEPDNT_ID  = p_DepPersonID;
13339 
13340 EXCEPTION
13341 
13342    WHEN FND_API.G_EXC_ERROR THEN
13343       ROLLBACK TO process_dep_record;
13344    WHEN OTHERS THEN
13345       ROLLBACK TO process_dep_record;
13346       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13347          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13348       END IF;
13349 END process_dep_record;
13350 
13351 /******************************************************************
13352    Created By         : prbhardw
13353 
13354    Date Created By    : Dec 30, 2005
13355 
13356    Purpose            : Insert batch summary into igs_sv_btch_summary before inserting in interface tables.
13357 
13358    Change History
13359    Who                  When            What
13360 ------------------------------------------------------------------------
13361 
13362 ******************************************************************/
13363 PROCEDURE Insert_Summary_Info(
13364    p_batch_id  IN  igs_sv_btch_summary.batch_id%TYPE,
13365    p_person_id  IN  igs_sv_btch_summary.person_id%TYPE,
13366    p_action_code  IN  igs_sv_btch_summary.action_code%TYPE,
13367    p_tag_code  IN  igs_sv_btch_summary.tag_code%TYPE,
13368    p_adm_action IN  igs_sv_btch_summary.adm_action_code%TYPE,
13369    p_owner_table_name IN igs_sv_btch_summary.owner_table_name%TYPE,
13370    p_owner_table_id  IN  igs_sv_btch_summary.OWNER_TABLE_IDENTIFIER%TYPE
13371 )
13372 IS
13373    l_api_name CONSTANT VARCHAR(30) := 'Insert_Summary_Info';
13374 l_count NUMBER;
13375 CURSOR c_test IS
13376 SELECT max(batch_id) FROM IGS_SV_BTCH_SUMMARY;
13377 l_batch NUMBER(20) := 0;
13378 BEGIN
13379 /* Debug */
13380 IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13381    l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Summary_Info';
13382    l_debug_str := 'Entering Insert_Summary_Info. p_data_rec.person_id is '||p_person_id|| ' and batch_id is '||p_batch_id;
13383    fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13384 END IF;
13385 
13386    INSERT INTO IGS_SV_BTCH_SUMMARY (
13387         summary_id	       ,
13388         batch_id               ,
13389         person_id              ,
13390         action_code            ,
13391 	tag_code               ,
13392 	adm_action_code        ,
13393 	creation_date          ,
13394 	created_by             ,
13395 	last_updated_by        ,
13396 	last_update_date       ,
13397 	last_update_login      ,
13398 	owner_table_name,
13399 	OWNER_TABLE_IDENTIFIER         --mmkumar, owner_table_id
13400      ) VALUES
13401      (
13402       IGS_SV_BTCH_SUMM_ID_S.nextval    ,
13403        p_batch_id  ,
13404        p_person_id  ,
13405        p_action_code ,
13406        p_tag_code  ,
13407        p_adm_action ,
13408        sysdate,
13409        g_update_by,
13410        g_update_by,
13411        sysdate,
13412        g_update_login,
13413        p_owner_table_name,
13414        p_owner_table_id
13415      );
13416 
13417   OPEN c_test;
13418   FETCH c_test INTO l_batch;
13419   CLOSE c_test;
13420      /* Debug */
13421 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13422 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Summary_Info';
13423 	   l_debug_str := 'record in Insert_Summary_Info max batch_id: '||l_batch;
13424 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13425 	END IF;
13426 EXCEPTION
13427 
13428   WHEN OTHERS THEN
13429       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13430          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13431       END IF;
13432       /* Debug */
13433 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13434 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Insert_Summary_Info';
13435 	   l_debug_str := 'EXCEPTION in Insert_Summary_Info. '||SQLERRM;
13436 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13437 	END IF;
13438       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
13439       RAISE;
13440 
13441 END Insert_Summary_Info;
13442 
13443 
13444 /******************************************************************
13445    Created By         : prbhardw
13446 
13447    Date Created By    : Jan 03, 2006
13448 
13449    Purpose            : Code to submit event and generate XML has been seperated
13450                         from create_batch as part of SEVIS enhancements.
13451 
13452    Change History
13453    Who                  When            What
13454 ------------------------------------------------------------------------
13455 
13456 ******************************************************************/
13457 PROCEDURE Generate_Batch_XML(
13458           errbuf   OUT NOCOPY VARCHAR2,  -- Request standard error string
13459 	  retcode  OUT NOCOPY NUMBER  ,  -- Request standard return status
13460 	  batch_id IN NUMBER
13461 )
13462 IS
13463   CURSOR c_get_batch_type(cp_batch_id igs_sv_batches.batch_id%TYPE)
13464   IS
13465      SELECT batch_type
13466      FROM igs_sv_batches
13467      WHERE batch_id = cp_batch_id;
13468   l_batch_type VARCHAR2(1);
13469   l_batch_id   igs_sv_batches.batch_id%TYPE;
13470  BEGIN
13471        retcode := 0;
13472        /* Debug */
13473 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13474 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Generate_Batch_XML';
13475 	   l_debug_str := 'Batch_id for Generate_Batch_XML: '||batch_id;
13476 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13477 	END IF;
13478       Put_Log_Msg('Batch id for Generate Batch XML: '||batch_id, 0);
13479 
13480      OPEN c_get_batch_type(batch_id);
13481      FETCH c_get_batch_type INTO l_batch_type;
13482      CLOSE c_get_batch_type;
13483      Submit_Event ( l_batch_type, batch_id);
13484      /* fix for bug 5330564 */
13485      l_batch_id := batch_id;
13486      UPDATE igs_sv_batches
13487      SET batch_status = 'X' , xml_gen_date = trunc(sysdate)
13488      WHERE batch_id = l_batch_id;
13489 
13490      xml_log_file(batch_id);
13491 EXCEPTION
13492      WHEN OTHERS THEN
13493         ROLLBACK;
13494         retcode := 2;
13495         fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
13496         fnd_message.set_token ('NAME', 'igs_sv_batch_process_pkg.Generate_Batch_XML'|| '-' || SQLERRM);
13497         igs_ge_msg_stack.conc_exception_hndl;
13498 END Generate_Batch_XML;
13499 
13500 
13501 /******************************************************************
13502    Created By         : prbhardw
13503 
13504    Date Created By    : Jun 09, 2006
13505 
13506    Purpose            : Create log file for Generate_Batch_XML process.
13507 
13508    Change History
13509    Who                  When            What
13510 ------------------------------------------------------------------------
13511 
13512 ******************************************************************/
13513 PROCEDURE xml_log_file(p_batch_id IN igs_sv_btch_summary.batch_id%TYPE)
13514 IS
13515 
13516    l_api_name CONSTANT VARCHAR(30) := 'xml_log_file';
13517    l_per_count NUMBER(5) := 0;
13518    l_person_num hz_parties.party_number%TYPE;
13519    l_info_meaning igs_lookup_values.meaning%TYPE;
13520 
13521    CURSOR c_updated_pers(cp_batch_id igs_sv_btch_summary.batch_id%TYPE)
13522    IS
13523      SELECT summ.person_id, summ.tag_code
13524      FROM igs_sv_btch_summary summ
13525      WHERE summ.batch_id = cp_batch_id AND
13526 	  summ.adm_action_code ='HOLD' AND
13527 	  EXISTS (SELECT 1 FROM igs_sv_persons pers
13528 		  WHERE pers.person_id = summ.person_id AND
13529 		  pers.batch_id = summ.batch_id AND
13530 		  pers.record_status = 'C' );
13531 
13532    CURSOR c_new_pers(cp_batch_id igs_sv_btch_summary.batch_id%TYPE)
13533    IS
13534      SELECT distinct person_number
13535      FROM igs_sv_persons pers
13536      WHERE pers.batch_id = cp_batch_id AND record_status = 'N'
13537            AND EXISTS (SELECT 1
13538 		FROM igs_sv_btch_summary summ
13539 		WHERE summ.person_id = pers.person_id AND
13540                   summ.batch_id=pers.batch_id AND
13541                   summ.adm_action_code ='HOLD' AND
13542                   summ.batch_id = pers.batch_id);
13543    CURSOR c_get_prsn_num(cp_party_id hz_parties.party_id%TYPE)
13544    IS
13545      SELECT party_number
13546      FROM hz_parties
13547      WHERE party_id = cp_party_id;
13548 
13549    CURSOR c_get_info(cp_tag_code igs_sv_btch_summary.tag_code%TYPE)
13550    IS
13551      SELECT lkp.meaning info
13552      FROM  igs_lookup_values lkp
13553      WHERE lkp.lookup_code = cp_tag_code
13554            AND lkp.lookup_type ='IGS_SV_COMP_TREE';
13555 BEGIN
13556 
13557 	FOR c_new_pers_rec IN c_new_pers(p_batch_id) LOOP
13558 	  l_per_count := l_per_count + 1;
13559 	  IF l_per_count = 1 THEN
13560 	        fnd_file.put_line(FND_FILE.LOG,' ');
13561 		fnd_message.set_name('IGS','IGS_SV_PERS_ON_HOLD');
13562 		fnd_file.put_line(fnd_file.log,fnd_message.get());
13563 		fnd_file.put_line(FND_FILE.LOG,' ');
13564 		fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13565 		fnd_file.put_line(fnd_file.log,'	' || fnd_message.get());
13566 		Put_Log_Msg('	--------------',1);
13567 	  END IF;
13568           Put_Log_Msg('	' || c_new_pers_rec.person_number,1);
13569 	END LOOP;
13570 
13571 	l_per_count := 0;
13572 
13573 	FOR c_updated_pers_rec IN c_updated_pers(p_batch_id) LOOP
13574 	  l_per_count := l_per_count + 1;
13575 	  IF l_per_count = 1 THEN
13576 	        fnd_file.put_line(FND_FILE.LOG,' ');
13577 		fnd_message.set_name('IGS','IGS_SV_INFO_ON_HOLD');
13578 		fnd_file.put_line(fnd_file.log,fnd_message.get());
13579 		fnd_file.put_line(FND_FILE.LOG,' ');
13580 		fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13581    	        fnd_file.put(fnd_file.log,'        ' || rpad(fnd_message.get(),30,' '));
13582 	        fnd_message.set_name('IGS','IGS_SV_INFMN');
13583 	        fnd_file.put_line(fnd_file.log,'		' || fnd_message.get());
13584                 Put_Log_Msg('        --------------				------------ ',1);
13585 
13586 	  END IF;
13587 	  OPEN c_get_prsn_num(c_updated_pers_rec.person_id);
13588 	  FETCH c_get_prsn_num INTO l_person_num;
13589 	  CLOSE c_get_prsn_num;
13590 
13591 	  OPEN c_get_info(c_updated_pers_rec.tag_code);
13592 	  FETCH c_get_info INTO l_info_meaning;
13593 	  CLOSE c_get_info;
13594 
13595           Put_Log_Msg('        ' || rpad(l_person_num,30,' ') || '          ' || l_info_meaning,1);
13596 	END LOOP;
13597 
13598 EXCEPTION
13599 
13600   WHEN OTHERS THEN
13601       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13602          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13603       END IF;
13604       /* Debug */
13605 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13606 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.xml_log_file';
13607 	   l_debug_str := 'EXCEPTION in xml_log_file.'||SQLERRM;
13608 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13609 	END IF;
13610       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
13611 
13612       RAISE;
13613 
13614 END xml_log_file;
13615 
13616 
13617 /******************************************************************
13618    Created By         : prbhardw
13619 
13620    Date Created By    : Jan 03, 2006
13621 
13622    Purpose            : Create log file.
13623 
13624    Change History
13625    Who                  When            What
13626 ------------------------------------------------------------------------
13627 
13628 ******************************************************************/
13629 PROCEDURE compose_log_file
13630 IS
13631 
13632    l_api_name CONSTANT VARCHAR(30) := 'compose_log_file';
13633    l_batch_count NUMBER(5) := 1;
13634    l_per_count NUMBER(5) := 0;
13635 
13636    CURSOR c_persons_per_batch(cp_batch_id igs_sv_btch_summary.batch_id%TYPE)
13637    IS
13638      SELECT COUNT(DISTINCT person_id)
13639      FROM igs_sv_btch_summary
13640      WHERE batch_id = cp_batch_id;
13641 
13642    CURSOR c_get_new_persons(cp_batch_id igs_sv_btch_summary.batch_id%TYPE)
13643    IS
13644      SELECT hz.party_number prsn_num, lkp.meaning info
13645      FROM igs_sv_btch_summary svbs, hz_parties hz, igs_lookup_values lkp, igs_sv_persons pers
13646      WHERE svbs.batch_id = cp_batch_id
13647            AND svbs.person_id = hz.party_id
13648            AND svbs.tag_code = lkp.lookup_code
13649            AND lkp.lookup_type ='IGS_SV_COMP_TREE'
13650 	   AND lkp.enabled_flag = 'Y'
13651 	   AND svbs.person_id = pers.person_id
13652            AND svbs.batch_id = pers.batch_id
13653            AND pers.record_status = 'N';
13654 
13655    CURSOR c_get_updated_persons(cp_batch_id igs_sv_btch_summary.batch_id%TYPE)
13656    IS
13657      SELECT hz.party_number prsn_num, lkp.meaning info
13658      FROM igs_sv_btch_summary svbs, hz_parties hz, igs_lookup_values lkp, igs_sv_persons pers
13659      WHERE svbs.batch_id = cp_batch_id
13660            AND svbs.person_id = hz.party_id
13661            AND svbs.tag_code = lkp.lookup_code
13662            AND lkp.lookup_type ='IGS_SV_COMP_TREE'
13663 	   AND lkp.enabled_flag = 'Y'
13664 	   AND svbs.person_id = pers.person_id
13665            AND svbs.batch_id = pers.batch_id
13666            AND pers.record_status = 'C';
13667 
13668 BEGIN
13669         fnd_message.set_name('IGS','IGS_SV_BTCH');
13670         fnd_file.put_line(fnd_file.log,fnd_message.get());
13671         fnd_file.put_line(FND_FILE.LOG,' ');
13672 	--Put_Log_Msg(' Following Batch IDs are generated: ',0);
13673         fnd_message.set_name('IGS','IGS_SV_BTCH_ID');
13674         fnd_file.put(fnd_file.log,'  ' || fnd_message.get());
13675 	fnd_message.set_name('IGS','IGS_SV_PERS_COUNT');
13676         fnd_file.put_line(fnd_file.log,'     ' || fnd_message.get());
13677 	--Put_Log_Msg('  Batch ID     No. of Persons',0);
13678 	--Put_Log_Msg('  --------     --------------',0);
13679   --   g_running_batches(1) := 2020205;
13680 
13681    --  g_parallel_batches(1) := 1010101;
13682 
13683   FOR i IN 1..g_parallel_batches.COUNT LOOP
13684      OPEN c_persons_per_batch(g_parallel_batches(i));
13685      FETCH c_persons_per_batch INTO l_per_count;
13686      CLOSE c_persons_per_batch;
13687      Put_Log_Msg('  ' || g_parallel_batches(i) || '   :  ' || l_per_count,1);
13688      l_batch_count := l_batch_count+1;
13689   END LOOP;
13690 
13691   FOR i IN 1..g_running_batches.COUNT LOOP
13692      OPEN c_persons_per_batch(g_running_batches(i));
13693      FETCH c_persons_per_batch INTO l_per_count;
13694      CLOSE c_persons_per_batch;
13695      Put_Log_Msg('  ' || g_running_batches(i) || '   :  ' || l_per_count,1);
13696      l_batch_count := l_batch_count+1;
13697   END LOOP;
13698 
13699      fnd_file.put_line(FND_FILE.LOG,' ');
13700      fnd_message.set_name('IGS','IGS_SV_BTCH_PERS');
13701      fnd_file.put_line(fnd_file.log,fnd_message.get());
13702      fnd_file.put_line(FND_FILE.LOG,' ');
13703    --  Put_Log_Msg(' ',0);
13704    --  Put_Log_Msg(' Following are the person records included in each batch: ',0);
13705     -- Put_Log_Msg(' ',0);
13706 
13707   FOR i IN 1..g_parallel_batches.COUNT LOOP
13708      fnd_message.set_name('IGS','IGS_SV_BTCH_ID');
13709      fnd_file.put_line(fnd_file.log,'  ' || fnd_message.get() || ': ' || g_parallel_batches(i));
13710   --   Put_Log_Msg('  Batch ID: '||g_parallel_batches(i),0);
13711   --   Put_Log_Msg('  ------------------------',0);
13712      fnd_message.set_name('IGS','IGS_SV_NEW_PERS');
13713      fnd_file.put_line(fnd_file.log,'     ' || fnd_message.get());
13714     --- Put_Log_Msg('     New Persons: ',0);
13715     -- Put_Log_Msg('     ------------',0);
13716      fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13717      fnd_file.put(fnd_file.log,'        ' || rpad(fnd_message.get(),30,' '));
13718      fnd_message.set_name('IGS','IGS_SV_INFMN');
13719      fnd_file.put_line(fnd_file.log,'		' || fnd_message.get());
13720    --  Put_Log_Msg('        Person Number			Information ',0);
13721      Put_Log_Msg('        --------------				------------ ',1);
13722 
13723      FOR new_persons IN c_get_new_persons(g_parallel_batches(i)) LOOP
13724           Put_Log_Msg('        ' || rpad(new_persons.prsn_num,30,' ') || '          ' || new_persons.info,1);
13725      END LOOP;
13726 
13727      fnd_message.set_name('IGS','IGS_SV_UPD_PERS');
13728      fnd_file.put_line(fnd_file.log,'     ' || fnd_message.get());
13729      --Put_Log_Msg('     Updated Persons: ',0);
13730      Put_Log_Msg('     ----------------',1);
13731      fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13732      fnd_file.put(fnd_file.log,'        ' || rpad(fnd_message.get(),30,' '));
13733      fnd_message.set_name('IGS','IGS_SV_INFMN');
13734      fnd_file.put_line(fnd_file.log,'		' || fnd_message.get());
13735      --Put_Log_Msg('        Person Number			Information ',0);
13736      Put_Log_Msg('        --------------				------------ ',1);
13737 
13738      FOR updated_persons IN c_get_updated_persons(g_parallel_batches(i)) LOOP
13739           Put_Log_Msg('        ' || rpad(updated_persons.prsn_num,30,' ') || '          ' || updated_persons.info,1);
13740      END LOOP;
13741 
13742   END LOOP;
13743 
13744   FOR i IN 1..g_running_batches.COUNT LOOP
13745      Put_Log_Msg('  Batch ID: ' || g_running_batches(i),1);
13746      Put_Log_Msg('  ------------------------',1);
13747      fnd_message.set_name('IGS','IGS_SV_NEW_PERS');
13748      fnd_file.put_line(fnd_file.log,'     ' || fnd_message.get());
13749    --  Put_Log_Msg('     New Persons: ',0);
13750      Put_Log_Msg('     ------------',1);
13751      fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13752      fnd_file.put(fnd_file.log,'        ' || rpad(fnd_message.get(),30,' '));
13753      fnd_message.set_name('IGS','IGS_SV_INFMN');
13754      fnd_file.put_line(fnd_file.log,'		' || fnd_message.get());
13755     -- Put_Log_Msg('        Person Number			Information ',0);
13756      Put_Log_Msg('        --------------				------------ ',1);
13757 
13758      FOR new_persons IN c_get_new_persons(g_running_batches(i)) LOOP
13759           Put_Log_Msg('        ' || rpad(new_persons.prsn_num,30,' ') || '          ' || new_persons.info,1);
13760      END LOOP;
13761 
13762      fnd_message.set_name('IGS','IGS_SV_UPD_PERS');
13763      fnd_file.put_line(fnd_file.log,'     ' || fnd_message.get());
13764     -- Put_Log_Msg('     Updated Persons: ',0);
13765      Put_Log_Msg('     ----------------',1);
13766      fnd_message.set_name('IGS','IGS_SV_PER_NUM');
13767      fnd_file.put(fnd_file.log,'        ' || rpad(fnd_message.get(),30,' '));
13768      fnd_message.set_name('IGS','IGS_SV_INFMN');
13769      fnd_file.put_line(fnd_file.log,'		' || fnd_message.get());
13770      --Put_Log_Msg('        Person Number			Information ',0);
13771      Put_Log_Msg('        --------------				------------ ',1);
13772 
13773      FOR updated_persons IN c_get_updated_persons(g_running_batches(i)) LOOP
13774           Put_Log_Msg('        ' || rpad(updated_persons.prsn_num,30,' ') || '          ' || updated_persons.info,1);
13775      END LOOP;
13776   END LOOP;
13777 
13778 
13779 EXCEPTION
13780 
13781   WHEN OTHERS THEN
13782       IF (FND_MSg_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
13783          FND_MSg_PUB.Add_Exc_Msg (g_PKg_NAME, l_api_name);
13784       END IF;
13785       /* Debug */
13786 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13787 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.compose_log_file';
13788 	   l_debug_str := 'EXCEPTION in compose_log_file.'||SQLERRM;
13789 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13790 	END IF;
13791       Put_Log_Msg(l_api_name||' OTHERS ERROR ',1);
13792 
13793       RAISE;
13794 
13795 END compose_log_file;
13796 
13797 /******************************************************************
13798    Created By         : prbhardw
13799 
13800    Date Created By    : Apr 18, 2006
13801 
13802    Purpose            : Assign new DSO.
13803 
13804    Change History
13805    Who                  When            What
13806 ------------------------------------------------------------------------
13807 
13808 ******************************************************************/
13809 
13810  PROCEDURE Assign_DSO(
13811           errbuf   OUT NOCOPY VARCHAR2,
13812 	  retcode  OUT NOCOPY NUMBER  ,
13813 	  p_group_type IN VARCHAR2,
13814 	  p_dummy_1 IN VARCHAR2,
13815 	  p_dummy_2 IN VARCHAR2,
13816 	  p_old_dso_id IN VARCHAR2,
13817 	  p_group_id IN VARCHAR2,
13818 	  p_new_dso_id IN VARCHAR2
13819 )
13820 IS
13821 
13822  CURSOR c_group_members IS
13823      SELECT person_id
13824      FROM igs_pe_prsid_grp_mem_all
13825      WHERE group_id = p_group_id AND SYSDATE BETWEEN start_date AND NVL(end_date, SYSDATE);
13826 
13827  CURSOR c_dso_relation(cp_person_id NUMBER) IS
13828      SELECT subject_id
13829      FROM hz_relationships
13830      WHERE object_id = cp_person_id AND
13831            SYSDATE BETWEEN start_date AND NVL(end_date, SYSDATE)
13832 	   AND relationship_code = 'DSO_FOR';
13833 	  -- AND directional_flag = 'F';	fix for bug 5258405
13834 
13835 CURSOR c_old_dso_rel(cp_person_id NUMBER) IS
13836      SELECT object_id, relationship_id, comments, object_version_number, directional_flag
13837      FROM hz_relationships
13838      WHERE subject_id = cp_person_id AND
13839      SYSDATE BETWEEN start_date AND NVL(end_date, SYSDATE+1)
13840 	   AND relationship_code = 'DSO_FOR';
13841 	  -- AND directional_flag = 'F';	fix for bug 5258405
13842 
13843 CURSOR c_old_rel_values(cp_rel_id HZ_RELATIONSHIPS.RELATIONSHIP_ID%TYPE, cp_dir_flag HZ_RELATIONSHIPS.DIRECTIONAL_FLAG%TYPE) IS
13844      SELECT directional_flag, primary, secondary, joint_salutation, next_to_kin, rep_faculty, rep_staff,
13845             rep_student, rep_alumni, emergency_contact_flag
13846      FROM igs_pe_hz_rel
13847      WHERE relationship_id = cp_rel_id
13848            AND directional_flag = cp_dir_flag;		-- fix for bug 5258405
13849 
13850  CURSOR c_get_person_num(cp_person_id hz_parties.party_id%TYPE) IS
13851      SELECT party_number person_num, person_first_name first_name, person_last_name last_name
13852      FROM hz_parties
13853      WHERE party_id = cp_person_id;
13854 
13855     lv_return_status VARCHAR2(1) ;
13856     lv_msg_count NUMBER;
13857     lv_msg_data VARCHAR2(2000);
13858     lv_party_relationship_id HZ_RELATIONSHIPS.RELATIONSHIP_ID%TYPE ;
13859     lv_party_id HZ_PARTIES.PARTY_ID%TYPE ;
13860     lv_party_number HZ_PARTIES.PARTY_NUMBER%TYPE ;
13861     lv_last_update_date HZ_PARTIES.LAST_UPDATE_DATE%TYPE ;
13862     lv_object_version_number HZ_RELATIONSHIPS.OBJECT_VERSION_NUMBER%TYPE;
13863 
13864     l_subject HZ_RELATIONSHIPS.SUBJECT_ID%TYPE;
13865     l_rel_id HZ_RELATIONSHIPS.RELATIONSHIP_ID%TYPE;
13866     l_old_rel_values c_old_rel_values%ROWTYPE;
13867 
13868     l_file_name igs_pe_persid_group_all.file_name%TYPE;
13869     l_str        VARCHAR2(32767);
13870     lv_status    VARCHAR2(1);
13871     --l_cursor_id  NUMBER (15);
13872     l_person_id HZ_PARTIES.PARTY_ID%TYPE ;
13873     TYPE person_rec IS REF CURSOR;
13874     c_person_rec person_rec;
13875    -- l_num_of_rows   NUMBER (15);
13876 
13877    l_old_dso_id VARCHAR2(20) := substr(p_old_dso_id,1,instr(p_old_dso_id,'-',-1)-1) ;
13878    l_old_dso_partyid NUMBER := to_number(substr(p_old_dso_id,instr(p_old_dso_id,'-',-1)+1));
13879 
13880    l_new_dso_id VARCHAR2(20) := substr(p_new_dso_id,1,instr(p_new_dso_id,'-',-1)-1) ;
13881    l_new_dso_partyid NUMBER := to_number(substr(p_new_dso_id,instr(p_new_dso_id,'-',-1)+1));
13882 
13883    l_obj_id  HZ_RELATIONSHIPS.OBJECT_ID%TYPE;
13884 
13885    TYPE c_person_det IS RECORD
13886    (
13887      person_num        hz_parties.party_number%TYPE,
13888      person_name       VARCHAR2(500),
13889      dso_person_num    hz_parties.party_number%TYPE
13890    );
13891 
13892    TYPE g_existing_rel_tbl IS TABLE OF c_person_det INDEX BY BINARY_INTEGER;
13893 
13894    g_existing_rel  g_existing_rel_tbl;
13895    l_person_num    hz_parties.party_number%TYPE;
13896    l_first_name    hz_parties.person_first_name%TYPE;
13897    l_last_name     hz_parties.person_last_name%TYPE;
13898 
13899    l_new_person_num    hz_parties.party_number%TYPE;
13900    l_new_first_name    hz_parties.person_first_name%TYPE;
13901    l_new_last_name     hz_parties.person_last_name%TYPE;
13902 
13903    l_counter NUMBER := 0;
13904    l_count NUMBER := 0;
13905    l_temp_count NUMBER := 0;
13906 
13907 BEGIN
13908        retcode := 0;
13909        lv_last_update_date  := SYSDATE;
13910        lv_object_version_number := 1;
13911        /* Debug */
13912 	IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13913 	   l_label := 'igs.plsql.igs_sv_batch_process_pkg.Assign_DSO';
13914 	   l_debug_str := 'p_group_type: '||p_group_type||' p_old_dso_id: '||p_old_dso_id||' p_new_dso_id: '||p_new_dso_id||' p_group_id: '||p_group_id;
13915 	   fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13916 	END IF;
13917       Put_Log_Msg('group type: '||p_group_type||'; old dso id: '||p_old_dso_id||'; new dso id: '||p_new_dso_id||'; group id: '||p_group_id, 0);
13918       Put_Log_Msg(' ', 0);
13919        IF p_group_type = 'G' THEN
13920 
13921 	  IF p_group_id IS NULL THEN
13922 	    -- Put_Log_Msg('Group ID cannot be left blank when new DSO is being assigned for a group', 0);
13923 	     FND_MESSAGE.SET_NAME('IGS','IGS_SV_INV_GRP_ID');
13924 	     FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
13925 	     FND_MSG_PUB.Add;
13926 	     RAISE FND_API.G_EXC_ERROR;
13927 	  END IF;
13928 
13929 	  l_str   := igs_pe_dynamic_persid_group.igs_get_dynamic_sql(p_group_id ,lv_status);
13930 	  IF lv_status <> 'S' THEN
13931 	     FND_MESSAGE.SET_NAME('IGF','IGF_AW_NO_QUERY');
13932 	     FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
13933 	     RETURN;
13934 	  END IF;
13935 
13936 	  /* Debug */
13937 	  IF fnd_log.test(fnd_log.level_statement,l_prog_label) THEN
13938 	     l_label := 'igs.plsql.igs_sv_batch_process_pkg.Assign_DSO';
13939 	     l_debug_str := 'Query: '||l_str;
13940 	     fnd_log.string_with_context( fnd_log.level_statement,l_label,l_debug_str, NULL,NULL,NULL,NULL,NULL,NULL);
13941 	  END IF;
13942 
13943           --END IF;
13944 
13945 	  /*l_cursor_id := DBMS_SQL.open_cursor;
13946           fnd_dsql.set_cursor (l_cursor_id);
13947           DBMS_SQL.parse (l_cursor_id, l_str, DBMS_SQL.native);
13948           fnd_dsql.do_binds;
13949 
13950 	  DBMS_SQL.define_column (
13951                   l_cursor_id,
13952                   1,
13953                   l_person_id
13954                );
13955 
13956 	  l_num_of_rows := DBMS_SQL.EXECUTE (l_cursor_id);*/
13957 	  OPEN c_person_rec FOR l_str ;
13958 	  LOOP
13959 	       FETCH c_person_rec INTO l_person_id;
13960 	       EXIT WHEN c_person_rec%NOTFOUND;
13961 	      /* EXIT WHEN DBMS_SQL.FETCH_ROWS (c) = 0;
13962                IF DBMS_SQL.fetch_rows (l_cursor_id) > 0 THEN
13963                     DBMS_SQL.column_value (
13964                         l_cursor_id,
13965                         1,
13966                         l_person_id
13967                     );*/
13968 		   OPEN c_dso_relation(l_person_id);
13969 		   FETCH c_dso_relation INTO l_subject;
13970 		   CLOSE c_dso_relation;
13971 
13972 		   IF l_subject IS NULL THEN
13973 		        l_counter := l_counter + 1;
13974 			IGS_PE_RELATIONSHIPS_PKG.CREATUPDATE_PARTY_RELATIONSHIP (
13975 				     P_ACTION                       => 'INSERT',
13976 				     P_SUBJECT_ID                   => l_new_dso_partyid,
13977 				     P_OBJECT_ID                    => l_person_id,
13978 				     P_PARTY_RELATIONSHIP_TYPE      => 'DESIGNATED_SCHOOL_OFFICIAL',
13979 				     P_RELATIONSHIP_CODE            => 'DSO_FOR',
13980 				     P_COMMENTS                     => NULL,
13981 				     P_START_DATE                   => SYSDATE,
13982 				     P_END_DATE                     => NULL,
13983 				     P_LAST_UPDATE_DATE             => lv_last_update_date,
13984 				     P_RETURN_STATUS                => lv_return_status,
13985 				     P_MSG_COUNT                    => lv_msg_count,
13986 				     P_MSG_DATA                     => lv_msg_data,
13987 				     P_PARTY_RELATIONSHIP_ID        => lv_party_relationship_id,
13988 				     P_PARTY_ID                     => lv_party_id,
13989 				     P_PARTY_NUMBER                 => lv_party_number,
13990 				     P_CALLER                       => 'NOT_FAMILY',
13991 				     P_OBJECT_VERSION_NUMBER        => lv_object_version_number,
13992 				     P_PRIMARY                      => 'N',
13993 				     P_SECONDARY                    => 'N',
13994 				     P_JOINT_SALUTATION             => NULL,
13995 				     P_NEXT_TO_KIN                  => 'N',
13996 				     P_REP_FACULTY                  => 'N',
13997 				     P_REP_STAFF                    => 'N',
13998 				     P_REP_STUDENT                  => 'N',
13999 				     P_REP_ALUMNI                   => 'N',
14000 				     P_EMERGENCY_CONTACT_FLAG       => 'N'
14001 			   );
14002 			 OPEN c_get_person_num(l_new_dso_partyid);
14003 			 FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14004 			 CLOSE c_get_person_num;
14005 
14006 			 IF l_counter = 1 THEN
14007 			     fnd_message.set_name('IGS','IGS_SV_NEW_REL');
14008 			     fnd_message.set_token('PRSN_NAME', l_first_name||' '|| l_last_name);
14009 		             fnd_file.put_line(fnd_file.log,fnd_message.get());
14010 			    -- Put_Log_Msg('New DSO_OF relationship created for following persons with '||l_first_name||' '|| l_last_name, 0);
14011 			     Put_Log_Msg(' ', 1);
14012 			     fnd_message.set_name('IGS','IGS_SV_PRSN_NAME');
14013 			     fnd_file.put(fnd_file.log,'  ' || rpad(fnd_message.get(),60,' '));
14014 			     fnd_message.set_name('IGS','IGS_SV_PER_NUM');
14015 			     fnd_file.put_line(fnd_file.log,'  ' || fnd_message.get());
14016 			     fnd_file.put(fnd_file.log, rpad('  -----------',60,' '));
14017 			     fnd_file.put_line(fnd_file.log,'    -------------');
14018 			    -- Put_Log_Msg('Person Name			Person Number', 0);
14019 			    -- Put_Log_Msg('-----------			-------------', 0);
14020 			 END IF;
14021 		         OPEN c_get_person_num(l_person_id);
14022 			 FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14023 			 CLOSE c_get_person_num;
14024 			 fnd_file.put(fnd_file.log,'  ' || rpad(l_first_name||' '|| l_last_name,60,' '));
14025 			 fnd_file.put_line(fnd_file.log,'  ' || l_person_num);
14026  			 --Put_Log_Msg(l_first_name||' '|| l_last_name||'			'|| l_person_num, 0);
14027 		   ELSE
14028 		         l_temp_count := l_temp_count + 1;
14029 			 OPEN c_get_person_num(l_person_id);
14030 			 FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14031 			 CLOSE c_get_person_num;
14032                          g_existing_rel(l_temp_count).person_num := l_person_num;
14033                          g_existing_rel(l_temp_count).person_name := l_first_name ||' '||l_last_name;
14034 			 OPEN c_get_person_num(l_subject);
14035 			 FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14036 			 CLOSE c_get_person_num;
14037 			 g_existing_rel(l_temp_count).dso_person_num := l_person_num;
14038 		   END IF;
14039 		   l_subject := NULL;
14040 	  END LOOP;
14041 	  --DBMS_SQL.close_cursor (l_cursor_id);
14042 	  CLOSE c_person_rec;
14043 	  FOR i IN 1..g_existing_rel.COUNT LOOP
14044 	     IF i = 1 THEN
14045 	       Put_Log_Msg(' ', 1);
14046 	       fnd_message.set_name('IGS','IGS_SV_REL_EXISTS');
14047 	       fnd_file.put_line(fnd_file.log,fnd_message.get());
14048 	       Put_Log_Msg(' ', 1);
14049 	       fnd_message.set_name('IGS','IGS_SV_PRSN_NAME');
14050 	       fnd_file.put(fnd_file.log,'  ' || rpad(fnd_message.get(),60,' '));
14051 	       fnd_message.set_name('IGS','IGS_SV_PER_NUM');
14052 	       fnd_file.put(fnd_file.log,'  ' || rpad(fnd_message.get(),20,' '));
14053 	       fnd_message.set_name('IGS','IGS_SV_DSO');
14054 	       fnd_file.put_line(fnd_file.log,'   ' || fnd_message.get());
14055 
14056 	       fnd_file.put(fnd_file.log, rpad('  -----------',60,' '));
14057 	       fnd_file.put(fnd_file.log, rpad('    -----------',20,' '));
14058 	       fnd_file.put_line(fnd_file.log,'    -------------');
14059 
14060 	      -- Put_Log_Msg('Relationship not created for following persons:',0);
14061 	      -- Put_Log_Msg('Person Name			Person Number		      Existing DSO',0);
14062 	      -- Put_Log_Msg('-----------			-------------		      ------------',0);
14063 	     END IF;
14064 	     fnd_file.put(fnd_file.log,'  ' || rpad(g_existing_rel(i).person_name,60,' '));
14065              fnd_file.put(fnd_file.log,'  ' || rpad(g_existing_rel(i).person_num,20,' '));
14066 	     fnd_file.put_line(fnd_file.log,'  ' || g_existing_rel(i).dso_person_num);
14067 	    -- Put_Log_Msg(g_existing_rel(i).person_name || '			'||rpad(g_existing_rel(i).person_num,20,' ')||'		' || g_existing_rel(i).dso_person_num,0);
14068 	  END LOOP;
14069 	  Put_Log_Msg(' ', 1);
14070 	  fnd_message.set_name('IGS','IGS_SV_REL_CREATED');
14071           fnd_message.set_token('COUNT', l_counter);
14072           fnd_file.put_line(fnd_file.log,fnd_message.get());
14073           Put_Log_Msg(' ', 1);
14074           fnd_message.set_name('IGS','IGS_SV_REL_NOT_CRTED');
14075           fnd_message.set_token('COUNT', g_existing_rel.COUNT);
14076           fnd_file.put_line(fnd_file.log,fnd_message.get());
14077        ELSE
14078 		IF p_old_dso_id IS NULL THEN
14079 		    --Put_Log_Msg('Enter the old DSO ID for which new relationships have to be created.', 0);
14080 		    FND_MESSAGE.SET_NAME('IGS','IGS_SV_INV_DSO_ID');
14081 		    FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
14082 		    FND_MSG_PUB.Add;
14083 		    RAISE FND_API.G_EXC_ERROR;
14084 		END IF;
14085 		IF p_old_dso_id = p_new_dso_id THEN
14086 		    --Put_Log_Msg('Old DSO ID and new DSO ID cannot be same. Request Terminated', 0);
14087 		    FND_MESSAGE.SET_NAME('IGS','IGS_SV_INV_PARAMS');
14088 		    FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
14089 		    FND_MSG_PUB.Add;
14090 		    RAISE FND_API.G_EXC_ERROR;
14091 		END IF;
14092 		FOR r_old_dso_rel_rec IN c_old_dso_rel(l_old_dso_partyid) LOOP
14093 		        l_count := l_count + 1;
14094 		        l_rel_id := r_old_dso_rel_rec.relationship_id;
14095 			OPEN c_old_rel_values(l_rel_id, r_old_dso_rel_rec.directional_flag);	-- fix for bug 5258405
14096 			FETCH c_old_rel_values INTO l_old_rel_values;
14097 			CLOSE c_old_rel_values;
14098 			l_obj_id := r_old_dso_rel_rec.object_id;
14099 			lv_object_version_number := r_old_dso_rel_rec.object_version_number;
14100 
14101 			IGS_PE_RELATIONSHIPS_PKG.CREATUPDATE_PARTY_RELATIONSHIP (
14102 				     P_ACTION                       => 'UPDATE',
14103 				     P_SUBJECT_ID                   => l_old_dso_partyid,
14104 				     P_OBJECT_ID                    => l_obj_id,
14105 				     P_PARTY_RELATIONSHIP_TYPE      => 'DESIGNATED_SCHOOL_OFFICIAL',
14106 				     P_RELATIONSHIP_CODE            => 'DSO_FOR',
14107 				     P_COMMENTS                     => r_old_dso_rel_rec.comments,
14108 				     P_START_DATE                   => SYSDATE,
14109 				     P_END_DATE                     => SYSDATE,
14110 				     P_LAST_UPDATE_DATE             => lv_last_update_date,
14111 				     P_RETURN_STATUS                => lv_return_status,
14112 				     P_MSG_COUNT                    => lv_msg_count,
14113 				     P_MSG_DATA                     => lv_msg_data,
14114 				     P_PARTY_RELATIONSHIP_ID        => l_rel_id,
14115 				     P_PARTY_ID                     => lv_party_id,
14116 				     P_PARTY_NUMBER                 => lv_party_number,
14117 				     P_CALLER                       => 'NOT_FAMILY',
14118 				     P_OBJECT_VERSION_NUMBER        => lv_object_version_number,
14119 				     P_PRIMARY                      => l_old_rel_values.primary,
14120 				     P_SECONDARY                    => l_old_rel_values.secondary,
14121 				     P_JOINT_SALUTATION             => l_old_rel_values.joint_salutation,
14122 				     P_NEXT_TO_KIN                  => l_old_rel_values.next_to_kin,
14123 				     P_REP_FACULTY                  => l_old_rel_values.rep_faculty,
14124 				     P_REP_STAFF                    => l_old_rel_values.rep_staff,
14125 				     P_REP_STUDENT                  => l_old_rel_values.rep_student,
14126 				     P_REP_ALUMNI                   => l_old_rel_values.rep_alumni,
14127 				     P_DIRECTIONAL_FLAG             => l_old_rel_values.directional_flag,
14128 				     P_EMERGENCY_CONTACT_FLAG       => l_old_rel_values.emergency_contact_flag
14129 				);
14130 			lv_object_version_number := 1;
14131 			IGS_PE_RELATIONSHIPS_PKG.CREATUPDATE_PARTY_RELATIONSHIP (
14132 				     P_ACTION                       => 'INSERT',
14133 				     P_SUBJECT_ID                   => l_new_dso_partyid,
14134 				     P_OBJECT_ID                    => l_obj_id,
14135 				     P_PARTY_RELATIONSHIP_TYPE      => 'DESIGNATED_SCHOOL_OFFICIAL',
14136 				     P_RELATIONSHIP_CODE            => 'DSO_FOR',
14137 				     P_COMMENTS                     => r_old_dso_rel_rec.comments,
14138 				     P_START_DATE                   => SYSDATE,
14139 				     P_END_DATE                     => NULL,
14140 				     P_LAST_UPDATE_DATE             => lv_last_update_date,
14141 				     P_RETURN_STATUS                => lv_return_status,
14142 				     P_MSG_COUNT                    => lv_msg_count,
14143 				     P_MSG_DATA                     => lv_msg_data,
14144 				     P_PARTY_RELATIONSHIP_ID        => lv_party_relationship_id,
14145 				     P_PARTY_ID                     => lv_party_id,
14146 				     P_PARTY_NUMBER                 => lv_party_number,
14147 				     P_CALLER                       => 'NOT_FAMILY',
14148 				     P_OBJECT_VERSION_NUMBER        => lv_object_version_number,
14149 				     P_PRIMARY                      => l_old_rel_values.primary,
14150 				     P_SECONDARY                    => l_old_rel_values.secondary,
14151 				     P_JOINT_SALUTATION             => l_old_rel_values.joint_salutation,
14152 				     P_NEXT_TO_KIN                  => l_old_rel_values.next_to_kin,
14153 				     P_REP_FACULTY                  => l_old_rel_values.rep_faculty,
14154 				     P_REP_STAFF                    => l_old_rel_values.rep_staff,
14155 				     P_REP_STUDENT                  => l_old_rel_values.rep_student,
14156 				     P_REP_ALUMNI                   => l_old_rel_values.rep_alumni,
14157 				     P_EMERGENCY_CONTACT_FLAG       => l_old_rel_values.emergency_contact_flag
14158 			);
14159 			lv_party_relationship_id := NULL;
14160 			IF l_count = 1 THEN
14161 				OPEN c_get_person_num(l_old_dso_partyid);
14162 				FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14163 				CLOSE c_get_person_num;
14164 				--Put_Log_Msg('DSO_OF relationship of following persons is end dated with '||l_first_name||' '|| l_last_name, 0);
14165 				OPEN c_get_person_num(l_new_dso_partyid);
14166 				FETCH c_get_person_num INTO l_new_person_num, l_new_first_name, l_new_last_name;
14167 				CLOSE c_get_person_num;
14168 				fnd_message.set_name('IGS','IGS_SV_REL_UPD');
14169 			        fnd_message.set_token('OLD_DSO_NAME', l_first_name||' '|| l_last_name);
14170 				fnd_message.set_token('NEW_DSO_NAME', l_new_first_name||' '|| l_new_last_name);
14171 		                fnd_file.put_line(fnd_file.log,fnd_message.get());
14172 			        Put_Log_Msg(' ', 1);
14173 			        fnd_message.set_name('IGS','IGS_SV_PRSN_NAME');
14174 			        fnd_file.put(fnd_file.log,'  ' || rpad(fnd_message.get(),60,' '));
14175 			        fnd_message.set_name('IGS','IGS_SV_PER_NUM');
14176 			        fnd_file.put_line(fnd_file.log,'  ' || fnd_message.get());
14177 			        fnd_file.put(fnd_file.log, rpad('  -----------',60,' '));
14178 			        fnd_file.put_line(fnd_file.log,'    -------------');
14179 
14180 				--Put_Log_Msg('and new relationship created with '||l_new_first_name||' '|| l_new_last_name||':', 0);
14181 				--Put_Log_Msg('Person Name			Person Number', 0);
14182 				--Put_Log_Msg('-----------			-------------', 0);
14183 			END IF;
14184 			OPEN c_get_person_num(l_obj_id);
14185 			FETCH c_get_person_num INTO l_person_num, l_first_name, l_last_name;
14186 			CLOSE c_get_person_num;
14187                        -- Put_Log_Msg(l_first_name||' '||l_last_name ||'			'||l_person_num, 0);
14188 		         fnd_file.put(fnd_file.log,'  ' || rpad(l_first_name||' '|| l_last_name,60,' '));
14189 			 fnd_file.put_line(fnd_file.log,'  ' || l_person_num);
14190 
14191 
14192 		END LOOP;
14193 		Put_Log_Msg(' ', 1);
14194 		fnd_message.set_name('IGS','IGS_SV_REL_UPDATED');
14195 		fnd_message.set_token('COUNT', l_count);
14196 		fnd_file.put_line(fnd_file.log,fnd_message.get());
14197        END IF;
14198 
14199 EXCEPTION
14200   WHEN FND_API.G_EXC_ERROR THEN
14201         ROLLBACK;
14202         retcode := 2;
14203         fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
14204         fnd_message.set_token ('NAME', 'igs_sv_batch_process_pkg.Assign_DSO'|| '-' || SQLERRM);
14205         igs_ge_msg_stack.conc_exception_hndl;
14206   WHEN OTHERS THEN
14207         ROLLBACK;
14208         retcode := 2;
14209         fnd_message.set_name ('IGS', 'IGS_GE_UNHANDLED_EXP');
14210         fnd_message.set_token ('NAME', 'igs_sv_batch_process_pkg.Assign_DSO'|| '-' || SQLERRM);
14211         igs_ge_msg_stack.conc_exception_hndl;
14212 END Assign_DSO;
14213 
14214 END igs_sv_batch_process_pkg;