DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_AE_SI_REPORTS

Source


1 PACKAGE BODY pay_ae_SI_reports AS
2 /* $Header: pyaesirp.pkb 120.24 2012/01/19 08:37:15 rpahune ship $ */
3   lg_format_mask varchar2(50);
4   PROCEDURE set_currency_mask
5     (p_business_group_id IN NUMBER) IS
6     /* Cursor to retrieve Currency */
7     CURSOR csr_currency IS
8     SELECT org_information10
9     FROM   hr_organization_information
10     WHERE  organization_id = p_business_group_id
11     AND    org_information_context = 'Business Group Information';
12     l_currency VARCHAR2(40);
13   BEGIN
14     OPEN csr_currency;
15     FETCH csr_currency into l_currency;
16     CLOSE csr_currency;
17     lg_format_mask := FND_CURRENCY.GET_FORMAT_MASK(l_currency,40);
18   END set_currency_mask;
19 -------------------------------------------------------------------------------------------
20     FUNCTION get_index (p_index IN NUMBER) return VARCHAR2
21     IS
22     l_label varchar2(40);
23     BEGIN
24     	If p_index = 1 THEN
25     		l_label := 'Basic Salary';
26     	ElsIf p_index = 2 THEN
27     		l_label := 'Housing Allowance';
28     	ElsIf p_index = 3 THEN
29     		l_label := 'Social Allowance';
30     	ElsIf p_index = 4 THEN
31     		l_label := 'Child Social Allowance';
32     	ElsIf p_index = 5 THEN
33     		l_label := 'Cost of Living Allowance';
34     	ElsIf p_index = 6 THEN
35     		l_label := 'Transportation Allowance';
36     	ElsIf p_index = 7 THEN
37     		l_label := 'Allowance 1';
38     	ElsIf p_index = 8 THEN
39     		l_label := 'Allowance 2';
40     	ElsIf p_index = 9 THEN
41     		l_label := 'Allowance 3';
42     	ElsIf p_index = 10 THEN
43     		l_label := 'Allowance 4';
44     	ElsIf p_index = 11 THEN
45     		l_label := 'Other Allowance';
46     	End If;
47     	return l_label;
48     END get_index;
49 -------------------------------------------------------------------------------------------
50   FUNCTION get_lookup_meaning
51     (p_lookup_type varchar2
52     ,p_lookup_code varchar2)
53     RETURN VARCHAR2 IS
54     CURSOR csr_lookup IS
55     select meaning
56     from   hr_lookups
57     where  lookup_type = p_lookup_type
58     and    lookup_code = p_lookup_code;
59     l_meaning hr_lookups.meaning%type;
60   BEGIN
61     OPEN csr_lookup;
62     FETCH csr_lookup INTO l_Meaning;
63     CLOSE csr_lookup;
64     RETURN l_meaning;
65   END get_lookup_meaning;
66 ------------------------------------------------------------------------------------------
67   PROCEDURE FORM1
68     (p_request_id              NUMBER
69     ,p_report                  VARCHAR2
70     ,p_business_group_id       NUMBER
71     ,p_employer_id             NUMBER
72     ,p_effective_month         VARCHAR2
73     ,p_effective_year          VARCHAR2
74     ,l_xfdf_blob               OUT NOCOPY BLOB
75     )
76    AS
77 
78 
79 
80 
81     /*Cursor for fetching Local nationality for the BG */
82      CURSOR csr_get_loc_nat IS
83      SELECT org_information1
84      FROM   hr_organization_information
85      WHERE  organization_id = p_business_group_id
86      AND    org_information_context = 'AE_BG_DETAILS';
87 
88     /*Cursor for fetching Employer SSN*/
89      CURSOR csr_employer_ssn IS
90      SELECT org_information1
91      FROM   hr_organization_information
92      WHERE  organization_id = p_employer_id
93      AND    org_information_context = 'AE_LEGAL_EMPLOYER_DETAILS';
94 
95      /*Cursor for fetching Employer Name*/
96      CURSOR csr_employer_name IS
97      SELECT name
98      FROM   hr_organization_units
99     WHERE  organization_id = p_employer_id;
100 
101     /* Cursor for fetching current employer type */
102     CURSOR csr_cur_employer_type IS
103     SELECT	org_information6
104     FROM	hr_organization_information hoi
105     WHERE	hoi.organization_id = p_employer_id
106     AND		hoi.org_information_context = 'AE_LEGAL_EMPLOYER_DETAILS';
107 
108      /*Cursor for fetching Employer's PO Box and Emirate Code */
109      CURSOR csr_employer_address (l_loc_id number) IS
110      SELECT loc.address_line_3, loc.LOC_INFORMATION15
111      FROM   hr_locations loc
112      WHERE  loc.location_id = l_loc_id;
113 
114      /*Cursor for fetching Employer's Emirate */
115      CURSOR csr_employer_emirate (l_emirate varchar2) IS
116      SELECT hl.meaning
117      FROM   hr_lookups hl
118      WHERE  hl.lookup_code = l_emirate
119      AND    hl.lookup_type = 'AE_EMIRATE'
120      AND    hl.enabled_flag = 'Y';
121 
122     /* Cursor for fetching organization phone types */
123     	CURSOR csr_get_org_phone_types (l_bg_id number) IS
124     	SELECT  hoi.org_information1,hoi.org_information2,hoi.org_information3,hoi.org_information4
125     	FROM	hr_organization_information hoi
126     	WHERE 	hoi.organization_id = l_bg_id
127     	AND 	hoi.org_information_context = 'AE_HR_BG_INFO';
128 
129     /* Cursor for fetching person's phone details */
130     	CURSOR csr_p_phone_data (l_person_id number,l_ph_type varchar2,l_effective_date date) IS
131     	SELECT  pp.phone_number
132     	FROM	per_phones pp,per_all_people_f ppf
133     	WHERE 	pp.parent_id = ppf.person_id
134     	AND 	pp.phone_type = l_ph_type
135     	AND     ppf.person_id = l_person_id
136     	AND 	l_effective_date between pp.date_from and nvl(pp.date_to,to_date('31-12-4712','DD-MM-YYYY'));
137 
138     /* Cursor for fetching the New Employees coming under legal employer*/
139 	CURSOR csr_get_emp (l_employer_id number, l_effective_date date, l_nat_cd varchar2) IS
140     	SELECT distinct asg.person_id
141                         ,paa.assignment_action_id
142                         ,ppa.date_earned
143                         ,pos.date_start
144         FROM   per_all_assignments_f asg
145                ,pay_assignment_actions paa
146                ,pay_payroll_actions ppa
147                ,hr_soft_coding_keyflex hscl
148                ,per_periods_of_service pos
149                ,per_all_people_f ppf
150         WHERE  asg.assignment_id = paa.assignment_id
151         AND    paa.payroll_action_id = ppa.payroll_action_id
152         AND    pos.period_of_service_id = asg.period_of_service_id
153         AND    ppa.action_type in ('R','Q')
154         AND    ppa.action_status = 'C'
155         AND    paa.action_status IN ('C','S')
156         AND    trunc(ppa.date_earned,'MM') = TRUNC(l_effective_date, 'MM')
157         AND    trunc(pos.date_start, 'MM') = trunc(l_effective_date, 'MM')
158         AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
159         AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
160         AND    hscl.segment1 = to_char(l_employer_id)
161         AND    ppf.person_id = asg.person_id
162         AND    trunc(l_effective_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
163         AND    ppf.per_information18 = l_nat_cd;
164 
165     /* Cursor for fetching the person data */
166     	CURSOR csr_p_data (l_person_id number,l_effective_date date) IS
167     	SELECT ppf.full_name,ppf.employee_number,ppf.date_of_birth,ppf.marital_status,ppf.sex,fnd_date.canonical_to_date(ppf.per_information16),ppf.per_information17
168     	FROM	per_all_people_f ppf
169     	WHERE 	ppf.person_id = l_person_id
170     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
171 
172     /* Cursor for fetching the person's gender meaning */
173     	CURSOR csr_p_gender (l_sex varchar2) IS
174     	SELECT hl.meaning
175     	FROM	hr_lookups hl
176     	WHERE 	hl.lookup_type = 'SEX'
177     	AND	hl.lookup_code = l_sex
178     	AND	hl.enabled_flag = 'Y';
179 
180     /* Cursor for fetching the person's marital status */
181     	CURSOR csr_p_mar_status (l_mar_stat varchar2) IS
182     	SELECT hl.meaning
183     	FROM	hr_lookups hl
184     	WHERE 	hl.lookup_type = 'MAR_STATUS'
185     	AND	hl.lookup_code = l_mar_stat
186     	AND	hl.enabled_flag = 'Y';
187 
188     /* Cursor for fetching the person's assignment data */
189     	CURSOR csr_p_asg_data (l_person_id number,l_effective_date date) IS
190     	SELECT hsck.segment2,hsck.segment3,fnd_date.canonical_to_date(hsck.segment4),hsck.segment5,paf.location_id
191     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
192     	WHERE 	paf.person_id = l_person_id
193     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
194     	AND     hsck.segment1 = p_employer_id
195     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
196 
197     /* Cursor for fetching the person's job */
198     	CURSOR csr_p_job (l_person_id number,l_effective_date date) IS
199     	SELECT pjb.name
200     	FROM	per_all_assignments_f paf,per_jobs pjb
201     	WHERE 	paf.person_id = l_person_id
202     	AND     pjb.job_id = paf.job_id
203     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
204 
205     /* Cursor for fetching the person's qualification data */
206     	CURSOR csr_p_qual_data (l_person_id number,l_qual_id number) IS
207     	SELECT  pq.title , pq.attendance_id , hl.meaning
208     	FROM	per_qualifications_v pq , per_subjects_taken pst ,hr_lookups hl
209     	WHERE 	pq.person_id = l_person_id
210     	AND	pq.qualification_id = l_qual_id
211     	AND     pst.qualification_id = pq.qualification_id
212     	AND     pst.major = 'Y'
213     	AND 	hl.lookup_type = 'PER_SUBJECTS'
214     	AND	hl.lookup_code = pst.subject
215     	AND     rownum < 2;
216 
217     /* Cursor to fetch establishment name */
218         CURSOR get_est_name (l_attendance_id number) IS
219 	select est.name
220 	from per_establishments est, per_establishment_attendances pea, per_qualifications pq
221 	where pq.attendance_id = l_attendance_id
222 	and   pq.attendance_id = pea.attendance_id
223 	and   est.establishment_id = pea.establishment_id;
224 
225     /* Cursor for fetching the person's ex-employer's name */
226     	CURSOR csr_p_ex_emp_data (l_person_id number) IS
227     	SELECT  pr.employer_name ,pr.previous_employer_id,pr.employer_type, pr.PEM_INFORMATION1 , fnd_date.canonical_to_date(pr.PEM_INFORMATION2),pr.PEM_INFORMATION3,pr.PEM_INFORMATION4
228     	FROM	per_previous_employers pr
229     	WHERE 	pr.person_id = l_person_id
230     	AND     pr.PEM_INFORMATION_CATEGORY ='AE'
231     	AND	nvl(pr.end_date,sysdate) in (SELECT 	nvl(max(end_date),sysdate)
232     				FROM	per_previous_employers
233     				WHERE 	person_id = l_person_id ) order by nvl(start_date,sysdate) desc,employer_name desc ;
234 
235     /* Cursor for fetching the person's spouse's ex-employer's name */
236     	CURSOR csr_p_s_ex_emp_data (l_person_id number) IS
237     	SELECT  pr.employer_name ,pr.previous_employer_id
238     	FROM	per_previous_employers pr
239     	WHERE 	pr.person_id = l_person_id
240     	AND	nvl(pr.end_date,sysdate) in (SELECT 	nvl(max(end_date),sysdate)
241     				FROM	per_previous_employers
242     				WHERE 	person_id = l_person_id ) order by nvl(start_date,sysdate) desc,employer_name desc ;
243 
244      /* Cursor for fetching the person's ex-employer's transfer date */
245     	CURSOR csr_p_ex_emp_date_data (l_person_id number,l_ex_emp_id number) IS
246     	SELECT  pr.end_date
247     	FROM	per_previous_employers pr
248     	WHERE 	pr.person_id = l_person_id
249     	AND 	pr.previous_employer_id = l_ex_emp_id
250     	AND     pr.employer_type = 'FG'
251     	AND     pr.PEM_INFORMATION1 = 'EMP_TRANS';
252 
253     /* Cursor for fetching person's Address */
254     	CURSOR csr_p_address_data (l_person_id number,l_effective_date date) IS
255     	SELECT  substr(addr.ADDRESS_LINE1 || ' ' ||addr.address_line2,1,60)
256     	FROM	per_addresses addr
257     	WHERE 	addr.person_id = l_person_id
258     	AND 	l_effective_date between addr.date_from and nvl(addr.date_to,to_date('31-12-4712','dd-mm-yyyy'))
259     	AND     addr.primary_flag = 'Y';
260 
261     /* Cursor for fetching person's Disability */
262     	CURSOR csr_p_disability_data (l_person_id number,l_effective_date date) IS
263     	SELECT  substr(dis.reason,1,60),dis.degree,dis.effective_start_date
264     	FROM	per_disabilities_f dis
265     	WHERE 	dis.person_id = l_person_id
266     	AND 	l_effective_date between dis.effective_start_date and dis.effective_end_date
267 --    	AND     dis.status = 'A'
268     	AND  	dis.dis_information1 = 'Y';
269 
270     /* Cursor for fetching meaning of disability reason */
271       CURSOR csr_get_dis_meaning (l_lookup_code varchar2) IS
272       SELECT meaning
273       FROM hr_lookups
274       WHERE lookup_type = 'DISABILITY_REASON'
275       and lookup_code = l_lookup_code
276       and enabled_flag = 'Y';
277 
278     /* Cursor for fetching person's spouse's person id */
279     	CURSOR csr_p_spouse_id (l_person_id number,l_type varchar2, l_gender varchar2,l_effective_date date) IS
280     	SELECT  CONTACT_PERSON_ID
281     	FROM	per_contact_relationships cont
282     	WHERE 	cont.person_id = l_person_id
283     	AND 	cont.contact_type = l_type;
284 
285     /* Cursor for fetching person's spouse's qualification details */
286     	CURSOR csr_get_spouse_details (l_spouse_person_id number) IS
287     	SELECT  pq.title , hl.meaning
288     	FROM	per_qualifications_v pq , per_subjects_taken pst ,hr_lookups hl
289     	WHERE 	pq.person_id = l_spouse_person_id
290     	AND     pst.qualification_id = pq.qualification_id
291     	AND     pst.major = 'Y'
292     	AND 	hl.lookup_type = 'PER_SUBJECTS'
293     	AND	hl.lookup_code = pst.subject
294     	AND     rownum < 2;
295 
296     /* Cursor for fetching person's contact counts */
297     	CURSOR csr_p_contact_count_data (l_person_id number,l_type varchar2, l_gender varchar2, l_effective_date date) IS
298     	SELECT  count(*)
299     	FROM	per_contact_relationships cont , per_all_people_f ppf
300     	WHERE 	cont.person_id = l_person_id
301     	AND 	cont.contact_type = l_type
302     	AND     ppf.person_id = cont.CONTACT_PERSON_ID
303     	AND  	ppf.sex = l_gender
304     	AND 	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
305 
306     /* Cursor for fetching Defined balance ids from Org EIT */
307         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
308         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10
309         FROM    HR_ORGANIZATION_INFORMATION
310         WHERE   Organization_id = l_bg_id
311         AND	org_information_context = 'AE_SI_DETAILS';
312 
313     /*Cursor for fetching defined balance id for subject_to_social_asg_run*/
314     CURSOR csr_get_def_id(p_user_name VARCHAR2)  IS
315     SELECT  u.creator_id
316     FROM    ff_user_entities  u,
317             ff_database_items d
318     WHERE   d.user_name = p_user_name
319     AND     u.user_entity_id = d.user_entity_id
320     AND     u.legislation_code = 'AE'
321     AND     u.business_group_id is null
322     AND     u.creator_type = 'B';
323 
324 
325     TYPE def_bal_rec IS RECORD
326     (def_bal_id                  NUMBER
327     ,label_index		 VARCHAR2(40));
328     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
329     t_store_def_bal   t_def_bal_table;
330     TYPE assact_rec IS RECORD
331     (person_id                 NUMBER
332     ,assignment_action_id      NUMBER
333     ,date_earned                DATE
334     ,date_start                DATE);
335     TYPE t_assact_table IS TABLE OF assact_rec INDEX BY BINARY_INTEGER;
336     t_store_assact   t_assact_table;
337     l_employer_name varchar2(240);
338     l_input_date varchar2(30);
339     l_effective_date date;
340     l_employer_ssn number;
341     l_basic_sal_id number;
342     z number;
343     l_accomodation_id number;
344     l_social_id number;
345     l_child_social_id number;
346     l_tp_id number;
347     l_ol1_id number;
348     l_ol2_id number;
349     l_ol3_id number;
350     l_ol4_id number;
351     l_cost_of_living_id number;
352     l_index number;
353     i number;
354     k number;
355     m number;
356     j number;
357     x number;
358     l_new_processed number;
359     l_all_processed number;
360     l_new_count number;
361     l_basic_val number (15,2);
362     l_accomodation_val number(15,2);
363     l_allowance_1_val number(15,2);
364     l_allowance_2_val number(15,2);
365     l_allowance_3_val number(15,2);
366     l_allowance_4_val number(15,2);
367     l_allowance_5_val number(15,2);
368     l number;
369     L_FULL_NAME varchar2(240);
370     l_insured_ssn number;
371     l_employee_number varchar2(180);
372     l_uae_civil_reg_number number;
373     l_asg_location_id number;
374     l_work_emirate varchar2(100);
375     l_work_emirate_code varchar2(100);
376     l_home_phone_number varchar2(100);
377     l_work_phone_number varchar2(100);
378     l_home_fax_number varchar2(100);
379     l_work_fax_number varchar2(100);
380     L_MARITAL_STATUS varchar2(100);
381     l_mar_p_status varchar2(30);
382     l_job varchar2(100);
383     l_latest_qual_id number;
384     l_p_qual_name varchar2(100);
385     l_p_address varchar2(100);
386     l_gender varchar2(100);
387     l_gender_c varchar2(100);
388     l_number_of_sons number;
389     l_number_of_daughters number;
390     l_number_of_wives number;
391     L_NAT_DATE date;
392     L_AWARDING_BODY varchar2(100);
393     L_S_EX_EMPLOYER_NAME varchar2(100);
394     l_s_qual varchar2(100);
395     L_DIS_DETAILS varchar2(100);
396     L_MAJOR    varchar2(100);
397     l_dis_date date;
398     l_dis_percent number;
399     l_dis_meaning varchar2(100);
400     l_s_major varchar2(100);
401     L_S_EX_EMPLOYER_ID number;
402     l_nat_reason varchar2(100);
403     L_S_PERSON_ID number;
404     l_home_phone varchar2(100);
405     l_work_phone varchar2(100);
406     l_home_fax varchar2(100);
407     l_work_fax varchar2(100);
408     L_P_EX_EMPLOYER varchar2(100);
409     L_P_EX_EMPLOYER_id number;
410     l_transfer_date date;
411     l_tr_date date;
412     l_sector_name varchar2(60);
413     l_paid_flag varchar2(10);
414     l_dob date;
415     L_CONT_START_DATE date;
416     l_work_po_box varchar2(100);
417     L_TOTAL number(15,2);
418     L_FM_TOTAL_VAL varchar2(100);
419     l_fm_l_basic_val varchar2(100);
420     L_FM_L_ACCOMODATION_VAL varchar2(100);
421     L_FM_L_ALLOWANCE_1_VAL varchar2(100);
422     L_FM_L_ALLOWANCE_2_VAL varchar2(100);
423     L_FM_L_ALLOWANCE_3_VAL varchar2(100);
424     L_FM_L_ALLOWANCE_4_VAL varchar2(100);
425     L_FM_L_ALLOWANCE_5_VAL varchar2(100);
426     l_subject_to_social_id number;
427     l_p_ex_employer_type varchar2(100);
428     l_cur_employer_type varchar2(100);
429     l_p_term_reason varchar2(100);
430     rec_get_emp        csr_get_emp%ROWTYPE;
431     l_nat_cd varchar2(30);
432     l_est_name varchar2(240);
433 
434   BEGIN
435 
436     set_currency_mask(p_business_group_id);
437 
438     l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
439     l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
440 
441     INSERT INTO fnd_sessions (session_id, effective_date)
442     VALUES (userenv('sessionid'), l_effective_date);
443 
444     -- To clear the PL/SQL Table values.
445     t_store_def_bal.DELETE;
446     vXMLTable.DELETE;
447     vCtr := 1;
448     hr_utility.set_location('Entering FORM1 ',10);
449 
450     /* Fetch local nationality */
451     OPEN csr_get_loc_nat;
452     FETCH csr_get_loc_nat into l_nat_cd;
453     CLOSE csr_get_loc_nat;
454 
455     /* Fetch current employer type */
456     OPEN csr_cur_employer_type;
457     FETCH csr_cur_employer_type into l_cur_employer_type;
458     CLOSE csr_cur_employer_type;
459 
460 
461     /*Fetch Employer SSN*/
462     OPEN csr_employer_ssn;
463     FETCH csr_employer_ssn INTO l_employer_ssn;
464     CLOSE csr_employer_ssn;
465 
466     /*Fetch Employer Name*/
467     OPEN csr_employer_name;
468     FETCH csr_employer_name INTO l_employer_name;
469     CLOSE csr_employer_name;
470 
471     OPEN csr_get_def_bal_ids (p_employer_id);
472     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accomodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id;
473     CLOSE csr_get_def_bal_ids;
474 
475     OPEN csr_get_def_id('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
476     FETCH csr_get_def_id into l_subject_to_social_id;
477     CLOSE csr_get_def_id;
478 
479     z := 1;
480     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
481     t_store_def_bal(z).label_index := get_index(1);
482 
483     z:= z+1;
484 
485     l_index := 2;
486 
487     LOOP
488 
489         If l_accomodation_id is not null THEN
490                 t_store_def_bal(z).def_bal_id := l_accomodation_id;
491                 t_store_def_bal(z).label_index := get_index(3);
492                 z := z + 1;
493                 l_index := l_index + 1;
494                 EXIT WHEN z > 7;
495         End if;
496 
497     	If l_social_id is not null THEN
498     		t_store_def_bal(z).def_bal_id := l_social_id;
499     		t_store_def_bal(z).label_index := get_index(3);
500     		z := z + 1;
501     		l_index := l_index + 1;
502     		EXIT WHEN z > 7;
503     	End if;
504     	If l_child_social_id is not null THEN
505     		t_store_def_bal(z).def_bal_id := l_child_social_id;
506     		t_store_def_bal(z).label_index := get_index(4);
507     		z := z + 1;
508     		l_index := l_index + 1;
509 		EXIT WHEN z > 7;
510     	End if;
511     	If l_cost_of_living_id is not null THEN
512     		t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
513     		t_store_def_bal(z).label_index := get_index(5);
514     		z := z + 1;
515     		l_index := l_index + 1;
516     		EXIT WHEN z > 7;
517     	End if;
518     	If l_tp_id is not null THEN
519     		t_store_def_bal(z).def_bal_id := l_tp_id;
520     	        t_store_def_bal(z).label_index := get_index(6);
521     		z := z + 1;
522     		l_index := l_index + 1;
523 		EXIT WHEN z > 7;
524     	End if;
525     	If l_ol1_id is not null THEN
526     		t_store_def_bal(z).def_bal_id := l_ol1_id;
527     		t_store_def_bal(z).label_index := get_index(7);
528     		z := z + 1;
529     		l_index := l_index + 1;
530     		EXIT WHEN z > 7;
531     	End if;
532     	If l_ol2_id is not null THEN
533     		t_store_def_bal(z).def_bal_id := l_ol2_id;
534 		t_store_def_bal(z).label_index := get_index(8);
535     		z := z + 1;
536     		l_index := l_index + 1;
537     		EXIT WHEN z > 7;
538     	End if;
539     	If l_ol3_id is not null THEN
540     		t_store_def_bal(z).def_bal_id := l_ol3_id;
541     		t_store_def_bal(z).label_index := get_index(9);
542     		z := z + 1;
543     		l_index := l_index + 1;
544     		EXIT WHEN z > 7;
545     	End if;
546     	If l_ol4_id is not null THEN
547     		t_store_def_bal(z).def_bal_id := l_ol4_id;
548     		t_store_def_bal(z).label_index := get_index(10);
549     		z := z + 1;
550     		l_index := l_index + 1;
551     		EXIT WHEN z > 7;
552     	End if;
553     	If z < 8 then
554     		WHILE Z <= 8 LOOP
555     			t_store_def_bal(z).def_bal_id := NULL;
556     			t_store_def_bal(z).label_index := get_index(11);
557     			z := z + 1;
558     			EXIT WHEN z > 8;
559     		END LOOP;
560 	End If;
561     	EXIT WHEN z >= 8;
562     END LOOP;
563 
564     l := 3;
565     i := 0;
566     k := 0;
567     m := 0;
568 
569     OPEN csr_get_emp(p_employer_id , l_effective_date , l_nat_cd);
570     LOOP
571       FETCH csr_get_emp INTO rec_get_emp;
572       EXIT WHEN csr_get_emp%NOTFOUND;
573       i := i + 1;
574       t_store_assact(i).person_id := rec_get_emp.person_id;
575       t_store_assact(i).assignment_action_id := rec_get_emp.assignment_action_id;
576       t_store_assact(i).date_earned := rec_get_emp.date_earned;
577       t_store_assact(i).date_start := rec_get_emp.date_earned;
578     END LOOP;
579     CLOSE csr_get_emp;
580 
581     IF i > 0  THEN
582       l_new_processed := 0;
583     ELSE
584       l_new_processed := 1;
585     END IF;
586 
587     l_all_processed := 0;
588         j := 1;
589 
590     WHILE j <= i LOOP
591             vXMLTable(vCtr).TagName := 'Employer_ssn';
592             vXMLTable(vCtr).TagValue := l_employer_ssn;
593             vctr := vctr + 1;
594             vXMLTable(vCtr).TagName := 'Employer_name';
595             vXMLTable(vCtr).TagValue := l_employer_name;
596             vctr := vctr + 1;
597 /********* Reset all the local variables **********/
598 l_full_name := null;
599 l_employee_number := null;
600 l_dob := null;
601 l_marital_status := null;
602 l_mar_p_status := null;
603 l_gender := null;
604 l_nat_date := null;
605 l_nat_reason := null;
606 l_insured_ssn := null;
607 l_uae_civil_reg_number := null;
608 l_cont_start_date := null;
609 l_job := null;
610 l_latest_qual_id := null;
611 l_asg_location_id := null;
612 l_work_emirate := null;
613 l_work_po_box := null;
614 l_home_phone := null;
615 l_work_phone := null;
616 l_home_fax := null;
617 l_work_fax := null;
618 l_home_phone_number := null;
619 l_work_phone_number := null;
620 l_home_fax_number := null;
621 l_work_fax_number := null;
622 l_p_ex_employer := null;
623 l_p_ex_employer_id := null;
624 l_transfer_date := null;
625 l_p_qual_name := null;
626 l_awarding_body := null;
627 l_major := null;
628 l_p_address := null;
629 l_number_of_wives := null;
630 l_number_of_sons := null;
631 l_number_of_daughters := null;
632 l_s_person_id := null;
633 l_s_qual := null;
634 l_s_major := null;
635 l_s_ex_employer_name := null;
636 l_s_ex_employer_id := null;
637 l_dis_details := null;
638 l_dis_percent := null;
639 l_dis_date := null;
640 l_dis_meaning := null;
641 l_est_name := null;
642      l_basic_val := 0;
643       l_accomodation_val := 0;
644       l_allowance_1_val := 0;
645       l_allowance_2_val := 0;
646       l_allowance_3_val := 0;
647       l_allowance_4_val := 0;
648       l_total := 0;
649 
650       OPEN csr_p_data(t_store_assact(j).person_id,l_effective_date);
651       FETCH csr_p_data INTO l_full_name,l_employee_number,l_dob,l_marital_status,l_gender_c,l_nat_date,l_nat_reason;
652       CLOSE csr_p_data;
653 
654       OPEN csr_p_gender(l_gender_c);
655       FETCH csr_p_gender INTO l_gender;
656       CLOSE csr_p_gender;
657 
658       OPEN csr_p_mar_status(l_marital_status);
659       FETCH csr_p_mar_status into l_mar_p_status;
660       CLOSE csr_p_mar_status;
661 
662       OPEN csr_p_asg_data(t_store_assact(j).person_id, l_effective_date);
663       FETCH csr_p_asg_data into l_uae_civil_reg_number,l_insured_ssn,l_cont_start_date,l_latest_qual_id,l_asg_location_id;
664       CLOSE csr_p_asg_data;
665 
666       OPEN csr_p_job(t_store_assact(j).person_id, l_effective_date);
667       FETCH csr_p_job into l_job;
668       CLOSE csr_p_job;
669 
670       OPEN csr_employer_address (l_asg_location_id);
671       FETCH csr_employer_address into l_work_emirate_code, l_work_po_box;
672       CLOSE csr_employer_address;
673 
674       OPEN csr_employer_emirate (l_work_emirate_code);
675       FETCH csr_employer_emirate into l_work_emirate;
676       CLOSE csr_employer_emirate;
677 
678       OPEN csr_get_org_phone_types (p_business_group_id);
679       FETCH csr_get_org_phone_types into l_home_phone,l_work_phone,l_home_fax,l_work_fax;
680       CLOSE csr_get_org_phone_types;
681 
682       OPEN csr_p_phone_data(t_store_assact(j).person_id,'H1',l_effective_date);
683       FETCH csr_p_phone_data into l_home_phone_number;
684       CLOSE csr_p_phone_data;
685 
686       OPEN csr_p_phone_data(t_store_assact(j).person_id,'W1',l_effective_date);
687       FETCH csr_p_phone_data into l_work_phone_number;
688       CLOSE csr_p_phone_data;
689 
690       OPEN csr_p_phone_data(t_store_assact(j).person_id,'HF',l_effective_date);
691       FETCH csr_p_phone_data into l_home_fax_number;
692       CLOSE csr_p_phone_data;
693 
694       OPEN csr_p_phone_data(t_store_assact(j).person_id,'WF',l_effective_date);
695       FETCH csr_p_phone_data into l_work_fax_number;
696       CLOSE csr_p_phone_data;
697 
698 
699       OPEN csr_p_ex_emp_data (t_store_assact(j).person_id);
700       FETCH csr_p_ex_emp_data into l_p_ex_employer,l_p_ex_employer_id, l_p_ex_employer_type , l_p_term_reason , l_tr_date,l_sector_name,l_paid_flag;
701       CLOSE csr_p_ex_emp_data;
702 
703 
704       OPEN csr_p_ex_emp_date_data (t_store_assact(j).person_id,l_p_ex_employer_id);
705       FETCH csr_p_ex_emp_date_data into l_transfer_date;
706       CLOSE csr_p_ex_emp_date_data;
707 
708       OPEN csr_p_qual_data(t_store_assact(j).person_id,l_latest_qual_id);
709       FETCH csr_p_qual_data into l_p_qual_name,l_awarding_body , l_major;
710       CLOSE csr_p_qual_data;
711 
712      If l_awarding_body is not null then
713 	OPEN get_est_name(l_awarding_body);
714 	FETCH get_est_name into l_est_name;
715 	CLOSE get_est_name;
716       End If;
717 
718       OPEN csr_p_address_data (t_store_assact(j).person_id,l_effective_date);
719       FETCH csr_p_address_data into l_p_address;
720       CLOSE csr_p_address_data;
721 
722       IF l_gender_c = 'M' then
723       	OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'S','F',l_effective_date);
724       	FETCH csr_p_contact_count_data into l_number_of_wives;
725       	CLOSE csr_p_contact_count_data;
726       Else
727       	l_number_of_wives := 0;
728       END IF;
729 
730       OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'C','M',l_effective_date);
731       FETCH csr_p_contact_count_data into l_number_of_sons;
732       CLOSE csr_p_contact_count_data;
733 
734       OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'C','F',l_effective_date);
735       FETCH csr_p_contact_count_data into l_number_of_daughters;
736       CLOSE csr_p_contact_count_data;
737 
738       OPEN csr_p_spouse_id (t_store_assact(j).person_id,'S',l_gender,l_effective_date);
739       FETCH csr_p_spouse_id into l_s_person_id;
740       CLOSE csr_p_spouse_id;
741 
742       OPEN csr_get_spouse_details (l_s_person_id);
743       FETCH csr_get_spouse_details into l_s_qual,l_s_major;
744       CLOSE csr_get_spouse_details;
745 
746       OPEN csr_p_s_ex_emp_data(l_s_person_id);
747       FETCH csr_p_s_ex_emp_data into l_s_ex_employer_name, l_s_ex_employer_id;
748       CLOSE csr_p_s_ex_emp_data;
749 
750       OPEN csr_p_disability_data (t_store_assact(j).person_id,l_effective_date);
751       FETCH csr_p_disability_data into l_dis_details,l_dis_percent,l_dis_date;
752       CLOSE csr_p_disability_data;
753 
754 	OPEN csr_get_dis_meaning(l_dis_details);
755 	FETCH  csr_get_dis_meaning  into l_dis_meaning;
756 	CLOSE csr_get_dis_meaning;
757 
758       x := 1;
759 
760       IF t_store_def_bal(x).def_bal_id is not null THEN
761 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
762 		x:= x + 1;
763       ELSE
764       		l_basic_val := 0;
765       		x:= x + 1;
766       END IF;
767 
768       IF t_store_def_bal(x).def_bal_id is not null THEN
769 		l_accomodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
770 		x:= x + 1;
771       ELSE
772       		l_accomodation_val := 0;
773       		x:= x + 1;
774       END IF;
775 
776       IF t_store_def_bal(x).def_bal_id is not null THEN
777 		l_allowance_1_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
778 		x:= x + 1;
779       ELSE
780       		l_allowance_1_val := 0;
781       		x:= x + 1;
782       END IF;
783 
784       IF t_store_def_bal(x).def_bal_id is not null THEN
785 		l_allowance_2_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
786 		x:= x + 1;
787       ELSE
788       		l_allowance_2_val := 0;
789       		x:= x + 1;
790       END IF;
791 
792       IF t_store_def_bal(x).def_bal_id is not null THEN
793 		l_allowance_3_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
794 		x:= x + 1;
795       ELSE
796       		l_allowance_3_val := 0;
797       		x:= x + 1;
798       END IF;
799 
800       IF t_store_def_bal(x).def_bal_id is not null THEN
801 		l_allowance_4_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
802 		x:= x + 1;
803       ELSE
804       		l_allowance_4_val := 0;
805       		x:= x + 1;
806       END IF;
807 
808       IF t_store_def_bal(x).def_bal_id is not null THEN
809 		l_allowance_5_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
810       ELSE
811       		l_allowance_5_val := 0;
812       END IF;
813 
814       l_new_count := l_new_count+1;
815       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
816       l_fm_l_accomodation_val := to_char(abs(l_accomodation_val),lg_format_mask);
817       l_fm_l_allowance_1_val := to_char(abs(l_allowance_1_val),lg_format_mask);
818       l_fm_l_allowance_2_val := to_char(abs(l_allowance_2_val),lg_format_mask);
819       l_fm_l_allowance_3_val := to_char(abs(l_allowance_3_val),lg_format_mask);
820       l_fm_l_allowance_4_val := to_char(abs(l_allowance_4_val),lg_format_mask);
821       l_fm_l_allowance_5_val := to_char(abs(l_allowance_5_val),lg_format_mask);
822 
823       /** Populate the XML file **/
824 
825       vXMLTable(vCtr).TagName := 'po_box';
826       vXMLTable(vCtr).TagValue := l_work_po_box;
827       vctr := vctr + 1;
828 
829       vXMLTable(vCtr).TagName := 'Emirate_name';
830       vXMLTable(vCtr).TagValue := l_work_emirate;
831       vctr := vctr + 1;
832 
833       vXMLTable(vCtr).TagName := 'fax';
834       vXMLTable(vCtr).TagValue := l_work_fax_number;
835       vctr := vctr + 1;
836 
837       vXMLTable(vCtr).TagName := 'phone';
838       vXMLTable(vCtr).TagValue := l_work_phone_number;
839       vctr := vctr + 1;
840 
841       vXMLTable(vCtr).TagName := 'Insured_ssn';
842       vXMLTable(vCtr).TagValue := l_insured_ssn;
843       vctr := vctr + 1;
844 
845       vXMLTable(vCtr).TagName := 'Insured_name';
846       vXMLTable(vCtr).TagValue := SUBSTR(l_full_name,1,60);
847       vctr := vctr + 1;
848 
849       vXMLTable(vCtr).TagName := 'Employee_number';
850       vXMLTable(vCtr).TagValue := l_employee_number;
851       vctr := vctr + 1;
852 
853       vXMLTable(vCtr).TagName := 'job';
854       vXMLTable(vCtr).TagValue := l_job;
855       vctr := vctr + 1;
856 
857       vXMLTable(vCtr).TagName := 'contribution_start_day';
858       vXMLTable(vCtr).TagValue := to_char(l_cont_start_date,'DD');
859       vctr := vctr + 1;
860 
861       vXMLTable(vCtr).TagName := 'contribution_start_month';
862       vXMLTable(vCtr).TagValue := to_char(l_cont_start_date,'MM');
863       vctr := vctr + 1;
864 
865       vXMLTable(vCtr).TagName := 'contribution_start_year';
866       vXMLTable(vCtr).TagValue := to_char(l_cont_start_date,'YYYY');
867       vctr := vctr + 1;
868 
869       vXMLTable(vCtr).TagName := 'salary_start_day';
870       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_earned,'DD');
871       vctr := vctr + 1;
872 
873       vXMLTable(vCtr).TagName := 'salary_start_month';
874       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_earned,'MM');
875       vctr := vctr + 1;
876 
877       vXMLTable(vCtr).TagName := 'salary_start_year';
878       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_earned,'YYYY');
879       vctr := vctr + 1;
880 
881       vXMLTable(vCtr).TagName := 'joining_day';
882       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_start,'DD');
883       vctr := vctr + 1;
884 
885       vXMLTable(vCtr).TagName := 'joining_month';
886       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_start,'MM');
887       vctr := vctr + 1;
888 
889       vXMLTable(vCtr).TagName := 'joining_year';
890       vXMLTable(vCtr).TagValue := to_char(t_store_assact(j).date_start,'YYYY');
891       vctr := vctr + 1;
892 
893       If (l_p_ex_employer_type = 'FG' and l_cur_employer_type = 'F') and l_p_term_reason = 'EMP_TRANS' then
894 
895 	      vXMLTable(vCtr).TagName := 'transfer_day';
896 	      vXMLTable(vCtr).TagValue := nvl(to_char(l_tr_date,'DD'),' ');
897 	      vctr := vctr + 1;
898 
899 	      vXMLTable(vCtr).TagName := 'transfer_month';
900 	      vXMLTable(vCtr).TagValue := nvl(to_char(l_tr_date,'MM'),' ');
901 	      vctr := vctr + 1;
902 
903 	      vXMLTable(vCtr).TagName := 'transfer_year';
904 	      vXMLTable(vCtr).TagValue := nvl(to_char(l_tr_date,'YYYY'),' ');
905 	      vctr := vctr + 1;
906 
907 	      vXMLTable(vCtr).TagName := 'sector_name';
908 	      vXMLTable(vCtr).TagValue := nvl(l_sector_name,' ');
909 	      vctr := vctr + 1;
910 
911       End If;
912 
913       If l_paid_flag = 'Y' then
914 	      vXMLTable(vCtr).TagName := 'other_income_flag_y';
915 	      vXMLTable(vCtr).TagValue := 'X';
916 	      vctr := vctr + 1;
917       End If;
918 
919       If l_paid_flag = 'N' then
920 	      vXMLTable(vCtr).TagName := 'other_income_flag_n';
921 	      vXMLTable(vCtr).TagValue := 'X';
922 	      vctr := vctr + 1;
923       End If;
924 
925       vXMLTable(vCtr).TagName := 'Ex_Employer_name';
926       vXMLTable(vCtr).TagValue := l_p_ex_employer;
927       vctr := vctr + 1;
928 
929       vXMLTable(vCtr).TagName := 'Basic_Salary';
930 
931       BEGIN
932       	SELECT nvl(decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val),' ')
933       	INTO l_fm_l_basic_val
934       	FROM dual;
935 
936       	EXCEPTION
937       		WHEN no_data_found then
938       		NULL;
939       END;
940 
941       vXMLTable(vCtr).TagValue := nvl(l_fm_l_basic_val,' ');
942       vctr := vctr + 1;
943 
944       vXMLTable(vCtr).TagName := 'Allowance_1';
945 
946       BEGIN
947       	SELECT decode(l_accomodation_val/(abs(decode(l_accomodation_val,0,1,l_accomodation_val))*-1),1,'-'||l_fm_l_accomodation_val,l_fm_l_accomodation_val)
948       	INTO l_fm_l_accomodation_val
949       	FROM dual;
950 
951       	EXCEPTION
952       		WHEN no_data_found then
953       		NULL;
954       END;
955 
956 
957       vXMLTable(vCtr).TagValue := l_fm_l_accomodation_val;
958       vctr := vctr + 1;
959 
960       vXMLTable(vCtr).TagName := 'Allowance_2';
961 
962       BEGIN
963       	SELECT decode(l_allowance_1_val/(abs(decode(l_allowance_1_val,0,1,l_allowance_1_val))*-1),1,'-'||l_fm_l_allowance_1_val,l_fm_l_allowance_1_val)
964       	INTO l_fm_l_allowance_1_val
965       	FROM dual;
966 
967       	EXCEPTION
968       		WHEN no_data_found then
969       		NULL;
970       END;
971 
972 
973       vXMLTable(vCtr).TagValue := l_fm_l_allowance_1_val;
974       vctr := vctr + 1;
975 
976       vXMLTable(vCtr).TagName := 'Allowance_3';
977 
978             BEGIN
979             	SELECT decode(l_allowance_2_val/(abs(decode(l_allowance_2_val,0,1,l_allowance_2_val))*-1),1,'-'||l_fm_l_allowance_2_val,l_fm_l_allowance_2_val)
980             	INTO l_fm_l_allowance_2_val
981             	FROM dual;
982 
983             	EXCEPTION
984             		WHEN no_data_found then
985             		NULL;
986             END;
987 
988       vXMLTable(vCtr).TagValue := l_fm_l_allowance_2_val;
989       vctr := vctr + 1;
990 
991       vXMLTable(vCtr).TagName := 'Allowance_4';
992 
993             BEGIN
994             	SELECT decode(l_allowance_3_val/(abs(decode(l_allowance_3_val,0,1,l_allowance_3_val))*-1),1,'-'||l_fm_l_allowance_3_val,l_fm_l_allowance_3_val)
995             	INTO l_fm_l_allowance_3_val
996             	FROM dual;
997 
998             	EXCEPTION
999             		WHEN no_data_found then
1000             		NULL;
1001             END;
1002 
1003       vXMLTable(vCtr).TagValue := l_fm_l_allowance_3_val;
1004       vctr := vctr + 1;
1005 
1006       vXMLTable(vCtr).TagName := 'Allowance_5';
1007 
1008             BEGIN
1009             	SELECT decode(l_allowance_4_val/(abs(decode(l_allowance_4_val,0,1,l_allowance_4_val))*-1),1,'-'||l_fm_l_allowance_4_val,l_fm_l_allowance_4_val)
1010             	INTO l_fm_l_allowance_4_val
1011             	FROM dual;
1012 
1013             	EXCEPTION
1014             		WHEN no_data_found then
1015             		NULL;
1016             END;
1017 
1018       vXMLTable(vCtr).TagValue := l_fm_l_allowance_4_val;
1019       vctr := vctr + 1;
1020 
1021       vXMLTable(vCtr).TagName := 'Allowance_6';
1022 
1023             BEGIN
1024             	SELECT decode(l_allowance_5_val/(abs(decode(l_allowance_5_val,0,1,l_allowance_5_val))*-1),1,'-'||l_fm_l_allowance_5_val,l_fm_l_allowance_5_val)
1025             	INTO l_fm_l_allowance_5_val
1026             	FROM dual;
1027 
1028             	EXCEPTION
1029             		WHEN no_data_found then
1030             		NULL;
1031             END;
1032 
1033       vXMLTable(vCtr).TagValue := l_fm_l_allowance_5_val;
1034       vctr := vctr + 1;
1035 
1036       l_total := pay_balance_pkg.get_value(l_subject_to_social_id , t_store_assact(j).assignment_action_id);
1037       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
1038 
1039       vXMLTable(vCtr).TagName := 'total_cont_salary';
1040 
1041             BEGIN
1042             	SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
1043             	INTO l_fm_total_val
1044             	FROM dual;
1045 
1046             	EXCEPTION
1047             		WHEN no_data_found then
1048             		NULL;
1049             END;
1050 
1051       vXMLTable(vCtr).TagValue :=  l_fm_total_val;
1052       vctr := vctr + 1;
1053 
1054       vXMLTable(vCtr).TagName := 'major';
1055       vXMLTable(vCtr).TagValue :=  l_major;
1056       vctr := vctr + 1;
1057 
1058       vXMLTable(vCtr).TagName := 'from';
1059       vXMLTable(vCtr).TagValue :=  l_est_name;
1060       vctr := vctr + 1;
1061 
1062       vXMLTable(vCtr).TagName := 'last_qualification';
1063       vXMLTable(vCtr).TagValue :=  l_p_qual_name;
1064       vctr := vctr + 1;
1065 
1066       vXMLTable(vCtr).TagName := 'per_fax';
1067       vXMLTable(vCtr).TagValue :=  l_home_fax_number;
1068       vctr := vctr + 1;
1069 
1070       vXMLTable(vCtr).TagName := 'residence_phone';
1071       vXMLTable(vCtr).TagValue :=  l_home_phone_number;
1072       vctr := vctr + 1;
1073 
1074       vXMLTable(vCtr).TagName := 'residense_address';
1075       vXMLTable(vCtr).TagValue :=  l_p_address;
1076       vctr := vctr + 1;
1077 
1078       vXMLTable(vCtr).TagName := 'nationality_day';
1079       vXMLTable(vCtr).TagValue := nvl(to_char(l_nat_date,'DD'),' ');
1080       vctr := vctr + 1;
1081 
1082       vXMLTable(vCtr).TagName := 'nationality_month';
1083       vXMLTable(vCtr).TagValue := nvl(to_char(l_nat_date,'MM'),' ');
1084       vctr := vctr + 1;
1085 
1086       vXMLTable(vCtr).TagName := 'nationality_year';
1087       vXMLTable(vCtr).TagValue := nvl(to_char(l_nat_date,'YYYY'),' ');
1088       vctr := vctr + 1;
1089 
1090       vXMLTable(vCtr).TagName := 'how_nationality_obtained';
1091       vXMLTable(vCtr).TagValue := l_nat_reason;
1092       vctr := vctr + 1;
1093 
1094       vXMLTable(vCtr).TagName := 'uae_civil_reg_number';
1095       vXMLTable(vCtr).TagValue := l_uae_civil_reg_number;
1096       vctr := vctr + 1;
1097 
1098       vXMLTable(vCtr).TagName := 'gender';
1099       vXMLTable(vCtr).TagValue := l_gender;
1100       vctr := vctr + 1;
1101 
1102       vXMLTable(vCtr).TagName := 'dob_day';
1103       vXMLTable(vCtr).TagValue := nvl(to_char(l_dob,'DD'),' ');
1104       vctr := vctr + 1;
1105 
1106       vXMLTable(vCtr).TagName := 'dob_month';
1107       vXMLTable(vCtr).TagValue := nvl(to_char(l_dob,'MM'),' ');
1108       vctr := vctr + 1;
1109 
1110       vXMLTable(vCtr).TagName := 'dob_year';
1111       vXMLTable(vCtr).TagValue := nvl(to_char(l_dob,'YYYY'),' ');
1112       vctr := vctr + 1;
1113 
1114       vXMLTable(vCtr).TagName := 'major_spouse';
1115       vXMLTable(vCtr).TagValue := l_s_major;
1116       vctr := vctr + 1;
1117 
1118       vXMLTable(vCtr).TagName := 'last_qualification_spouse';
1119       vXMLTable(vCtr).TagValue := l_s_qual;
1120       vctr := vctr + 1;
1121 
1122       vXMLTable(vCtr).TagName := 'employer_name_spouse';
1123       vXMLTable(vCtr).TagValue := l_s_ex_employer_name;
1124       vctr := vctr + 1;
1125 
1126       vXMLTable(vCtr).TagName := 'number_of_sons';
1127       vXMLTable(vCtr).TagValue := l_number_of_sons;
1128       vctr := vctr + 1;
1129 
1130       vXMLTable(vCtr).TagName := 'number_of_daughters';
1131       vXMLTable(vCtr).TagValue := l_number_of_daughters;
1132       vctr := vctr + 1;
1133 
1134       vXMLTable(vCtr).TagName := 'number_of_wives';
1135       vXMLTable(vCtr).TagValue := l_number_of_wives;
1136       vctr := vctr + 1;
1137 
1138       vXMLTable(vCtr).TagName := 'marital_status';
1139       vXMLTable(vCtr).TagValue := l_mar_p_status;
1140       vctr := vctr + 1;
1141 
1142       vXMLTable(vCtr).TagName := 'percent';
1143       vXMLTable(vCtr).TagValue := l_dis_percent;
1144       vctr := vctr + 1;
1145 
1146       vXMLTable(vCtr).TagName := 'disablity_day';
1147       vXMLTable(vCtr).TagValue := nvl(to_char(l_dis_date,'DD'),' ');
1148       vctr := vctr + 1;
1149 
1150       vXMLTable(vCtr).TagName := 'disablity_month';
1151       vXMLTable(vCtr).TagValue := nvl(to_char(l_dis_date,'MM'),' ');
1152       vctr := vctr + 1;
1153 
1154       vXMLTable(vCtr).TagName := 'disablity_year';
1155       vXMLTable(vCtr).TagValue := nvl(to_char(l_dis_date,'YYYY'),' ');
1156       vctr := vctr + 1;
1157 
1158       vXMLTable(vCtr).TagName := 'disablity_reason';
1159       vXMLTable(vCtr).TagValue := l_dis_meaning;
1160       vctr := vctr + 1;
1161 
1162       j := j + 1;
1163 
1164       vXMLTable(vCtr).TagName := 'PAGE-BK';
1165       vXMLTable(vCtr).TagValue := '    ';
1166       vctr := vctr + 1;
1167 
1168       IF j > i THEN
1169         l_new_processed := 1;
1170         EXIT;
1171       END IF;
1172     END LOOP;
1173 
1174     hr_utility.set_location('Finished creating xml data for Procedure FORM1 ',20);
1175     WritetoCLOB ( l_xfdf_blob );
1176 
1177 EXCEPTION
1178         WHEN utl_file.invalid_path then
1179                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
1180                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1181                 hr_utility.raise_error;
1182 --
1183     WHEN utl_file.invalid_mode then
1184         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
1185         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1186                 hr_utility.raise_error;
1187 --
1188     WHEN utl_file.invalid_filehandle then
1189         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
1190         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1191                 hr_utility.raise_error;
1192 --
1193     WHEN utl_file.invalid_operation then
1194         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
1195         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1196                 hr_utility.raise_error;
1197 --
1198     WHEN utl_file.read_error then
1199         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
1200         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1201                 hr_utility.raise_error;
1202 --
1203     WHEN others THEN
1204        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
1205        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
1206        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
1207            hr_utility.raise_error;
1208   END FORM1;
1209 -------------------------------------------------------------------------------------------
1210   PROCEDURE FORM2
1211     (p_request_id              NUMBER
1212     ,p_report                  VARCHAR2
1213     ,p_business_group_id       NUMBER
1214     ,p_employer_id             NUMBER
1215     ,p_effective_month         VARCHAR2
1216     ,p_effective_year          VARCHAR2
1217     ,l_xfdf_blob               OUT NOCOPY BLOB
1218     )
1219    AS
1220 
1221     /*Cursor for fetching Local nationality for the BG */
1222      CURSOR csr_get_loc_nat IS
1223      SELECT org_information1
1224      FROM   hr_organization_information
1225      WHERE  organization_id = p_business_group_id
1226      AND    org_information_context = 'AE_BG_DETAILS';
1227 
1228     /*Cursor for fetching Employer SSN*/
1229      CURSOR csr_employer_ssn IS
1230      SELECT org_information1
1231      FROM   hr_organization_information
1232      WHERE  organization_id = p_employer_id
1233      AND    org_information_context = 'AE_LEGAL_EMPLOYER_DETAILS';
1234 
1235      /*Cursor for fetching Employer Name*/
1236      CURSOR csr_employer_name IS
1237      SELECT name
1238      FROM   hr_organization_units
1239     WHERE  organization_id = p_employer_id;
1240 
1241     /* Cursor for fetching organization phone types */
1242     	CURSOR csr_get_org_phone_types (l_bg_id number) IS
1243     	SELECT  hoi.org_information1,hoi.org_information2,hoi.org_information3,hoi.org_information4
1244     	FROM	hr_organization_information hoi
1245     	WHERE 	hoi.organization_id = l_bg_id
1246     	AND 	hoi.org_information_context = 'AE_HR_BG_INFO';
1247 
1248     /* Cursor for fetching person's phone details */
1249     	CURSOR csr_p_phone_data (l_person_id number,l_ph_type varchar2,l_effective_date date) IS
1250     	SELECT  pp.phone_number
1251     	FROM	per_phones pp,per_all_people_f ppf
1252     	WHERE 	pp.parent_id = ppf.person_id
1253     	AND 	pp.phone_type = l_ph_type
1254     	AND     ppf.person_id = l_person_id
1255     	AND 	l_effective_date between pp.date_from and nvl(pp.date_to,to_date('31-12-4712','DD-MM-YYYY'));
1256 
1257     /* Cursor for fetching person's Address */
1258     	CURSOR csr_p_address_data (l_person_id number,l_effective_date date) IS
1259     	SELECT  substr(addr.ADDRESS_LINE1 || ' ' ||addr.address_line2,1,60)
1260     	FROM	per_addresses addr
1261     	WHERE 	addr.person_id = l_person_id
1262     	AND 	l_effective_date between addr.date_from and nvl(addr.date_to,to_date('31-12-4712','dd-mm-yyyy'))
1263     	AND     addr.primary_flag = 'Y';
1264 
1265     /* Cursor for fetching the Terminated Employees coming under legal employer*/
1266 	CURSOR csr_get_emp (l_employer_id number, l_effective_date date , l_nat_cd varchar2) IS
1267     	SELECT distinct asg.person_id
1268                     ,paa.assignment_action_id
1269                     ,pos.actual_termination_date
1270 		    ,pos.LEAVING_REASON
1271                     ,ppa.date_earned
1272     	FROM   per_all_assignments_f asg
1273            ,pay_assignment_actions paa
1274            ,pay_payroll_actions ppa
1275            ,hr_soft_coding_keyflex hscl
1276            ,per_periods_of_service pos
1277            ,per_all_people_f ppf
1278     	WHERE  asg.assignment_id = paa.assignment_id
1279     	AND    paa.payroll_action_id = ppa.payroll_action_id
1280     	AND    pos.period_of_service_id = asg.period_of_service_id
1281     	AND    ppa.action_type in ('R','Q')
1282     	AND    ppa.action_status = 'C'
1283     	AND    paa.action_status IN ('C','S')
1284     	AND    trunc(ppa.date_earned,'MM') = TRUNC(l_effective_date, 'MM')
1285     	AND    trunc(NVL(pos.actual_termination_date, to_date('31-12-4712','DD-MM-YYYY')),'MM') = TRUNC(l_effective_date, 'MM')
1286     	AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
1287     	AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
1288     	AND    hscl.segment1 = to_char(l_employer_id)
1289     	AND    ppf.person_id = asg.person_id
1290     	AND    trunc(l_effective_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
1291     	AND    ppf.per_information18 = l_nat_cd;
1292 
1293     /* Cursor for fetching the Terminated Employees coming under legal employer*/
1294 	CURSOR csr_get_leav_reas (l_code varchar2) IS
1295 	SELECT hl.meaning
1296 	FROM hr_lookups hl
1297 	WHERE hl.lookup_type = 'LEAV_REAS'
1298 	AND   hl.lookup_code = l_code;
1299 
1300     /* Cursor for fetching the person data */
1301     	CURSOR csr_p_data (l_person_id number,l_effective_date date) IS
1302     	SELECT ppf.full_name,ppf.marital_status,ppf.sex
1303     	FROM	per_all_people_f ppf
1304     	WHERE 	ppf.person_id = l_person_id
1305     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
1306 
1307     /* Cursor for fetching the person's marital status */
1308     	CURSOR csr_p_mar_status (l_mar_stat varchar2) IS
1309     	SELECT hl.meaning
1310     	FROM	hr_lookups hl
1311     	WHERE 	hl.lookup_type = 'MAR_STATUS'
1312     	AND	hl.lookup_code = l_mar_stat
1313     	AND	hl.enabled_flag = 'Y';
1314 
1315     /* Cursor for fetching the person's assignment data */
1316     	CURSOR csr_p_asg_data (l_person_id number,l_effective_date date) IS
1317     	SELECT paf.assignment_id , hsck.segment3,paf.location_id
1318     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
1319     	WHERE 	paf.person_id = l_person_id
1320     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
1321     	AND     hsck.segment1 = p_employer_id
1322     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
1323 
1324     /* Cursor for fetching person's contact counts */
1325     	CURSOR csr_p_contact_count_data (l_person_id number,l_type varchar2, l_gender varchar2, l_effective_date date) IS
1326     	SELECT  count(*)
1327     	FROM	per_contact_relationships cont , per_all_people_f ppf
1328     	WHERE 	cont.person_id = l_person_id
1329     	AND 	cont.contact_type = l_type
1330     	AND     ppf.person_id = cont.CONTACT_PERSON_ID
1331     	AND  	ppf.sex = l_gender
1332     	AND 	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
1333 
1334     /* Cursor for fetching External account id and org payment method id*/
1335     	CURSOR csr_get_ext_id_org_paymeth (l_assignment_id number,l_effective_date date) IS
1336     	SELECT  external_account_id,org_payment_method_id
1337     	FROM	pay_personal_payment_methods_f
1338     	WHERE 	assignment_id = l_assignment_id
1339     	AND 	l_effective_date between effective_start_date and effective_end_date
1340     	AND	ppm_information_category = 'AE_AE DIRECT DEPOSIT AED'
1341     	AND	ppm_information1 = 'Y';
1342 
1343     /* Cursor for fetching external account id for org payment method*/
1344     	CURSOR csr_get_ext_id (l_org_paymeth_id number,l_effective_date date) IS
1345     	SELECT  external_account_id
1346     	FROM	pay_org_payment_methods_f pom
1347     	WHERE 	pom.org_payment_method_id = l_org_paymeth_id
1348     	And	l_effective_date between effective_start_date and effective_end_date;
1349 
1350     /* Cursor for fetching Bank details for external account id*/
1351     	CURSOR csr_get_bank_det_ext (l_external_account_id number) IS
1352     	SELECT  segment1,segment2,segment4
1353     	FROM	pay_external_accounts
1354     	WHERE 	external_account_id = l_external_account_id;
1355 
1356     /* Cursor for fetching the Bank name */
1357        CURSOR csr_get_bank_name (l_code VARCHAR2) IS
1358        SELECT hl.meaning
1359        FROM   hr_lookups hl
1360        WHERE  hl.lookup_type = 'AE_BANK_NAMES'
1361        AND    hl.lookup_code = l_code
1362        AND    hl.enabled_flag = 'Y';
1363 
1364     /* Cursor for fetching the Branch name */
1365        CURSOR csr_get_branch_name (l_code VARCHAR2) IS
1366        SELECT hl.meaning
1367        FROM   hr_lookups hl
1368        WHERE  hl.lookup_type = 'AE_BRANCH_NAMES'
1369        AND    hl.lookup_code = l_code
1370        AND    hl.enabled_flag = 'Y';
1371 
1372     /* Cursor for fetching Defined balance ids from Org EIT */
1373         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
1374         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10 ,ORG_INFORMATION11
1375         FROM    HR_ORGANIZATION_INFORMATION
1376         WHERE   Organization_id = l_bg_id
1377         AND	org_information_context = 'AE_SI_DETAILS';
1378 
1379     /*Cursor for fetching defined balance id*/
1380     CURSOR csr_get_def_bal_id(p_user_name VARCHAR2)  IS
1381     SELECT  u.creator_id
1382     FROM    ff_user_entities  u,
1383             ff_database_items d
1384     WHERE   d.user_name = p_user_name
1385     AND     u.user_entity_id = d.user_entity_id
1386     AND     u.legislation_code = 'AE'
1387     AND     u.business_group_id is null
1388     AND     u.creator_type = 'B';
1389 
1390     TYPE def_bal_rec IS RECORD
1391     (def_bal_id                  NUMBER
1392     ,label_index		 VARCHAR2(40));
1393     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
1394     t_store_def_bal   t_def_bal_table;
1395     TYPE assact_rec IS RECORD
1396     (person_id                 NUMBER
1397     ,assignment_action_id      NUMBER
1398     ,actual_term_date          DATE
1399     ,leaving_reason            VARCHAR2(100)
1400     ,date_earned                DATE);
1401     TYPE t_assact_table IS TABLE OF assact_rec INDEX BY BINARY_INTEGER;
1402     t_store_assact   t_assact_table;
1403     l_employer_name varchar2(240);
1404     l_input_date varchar2(30);
1405     l_effective_date date;
1406     l_employer_ssn number;
1407     l_basic_sal_id number;
1408     z number;
1409     l_accomodation_id number;
1410     l_social_id number;
1411     l_child_social_id number;
1412     l_tp_id number;
1413     l_ol1_id number;
1414     l_ol2_id number;
1415     l_ol3_id number;
1416     l_ol4_id number;
1417     l_cost_of_living_id number;
1418     l_index number;
1419     i number;
1420     k number;
1421     m number;
1422     j number;
1423     x number;
1424     l_new_processed number;
1425     l_all_processed number;
1426     l_new_count number;
1427     l_basic_val number(12,2);
1428     l_accomodation_val number(12,2);
1429     l_allowance_1_val number(12,2);
1430     l_allowance_2_val number(12,2);
1431     l_allowance_3_val number(12,2);
1432     l_allowance_4_val number(12,2);
1433     l_allowance_5_val number(12,2);
1434     l number;
1435     L_FULL_NAME varchar2(240);
1436     l_insured_ssn number;
1437     l_uae_civil_reg_number number;
1438     l_asg_location_id number;
1439     l_work_emirate varchar2(100);
1440     l_home_phone_number varchar2(100);
1441     l_home_fax_number varchar2(100);
1442     L_MARITAL_STATUS varchar2(100);
1443     l_mar_p_status varchar2(30);
1444     l_asg_id number;
1445     l_gender varchar2(100);
1446     l_p_address varchar2(240);
1447     l_number_of_sons number;
1448     l_number_of_daughters number;
1449     l_number_of_wives number;
1450     l_home_phone varchar2(100);
1451     l_work_phone varchar2(100);
1452     l_work_fax varchar2(100);
1453     l_home_fax varchar2(100);
1454     L_TOTAL number(12,2);
1455     L_FM_TOTAL_VAL varchar2(100);
1456     l_fm_l_basic_val varchar2(100);
1457     L_FM_L_ACCOMODATION_VAL varchar2(100);
1458     L_FM_L_ALLOWANCE_1_VAL varchar2(100);
1459     L_FM_L_ALLOWANCE_2_VAL varchar2(100);
1460     L_FM_L_ALLOWANCE_3_VAL varchar2(100);
1461     L_FM_L_ALLOWANCE_4_VAL varchar2(100);
1462     L_FM_L_ALLOWANCE_5_VAL varchar2(100);
1463     l_fm_ee_arrears varchar2(100);
1464     l_ee_arrears number(12,2);
1465     l_bank_name varchar2(80);
1466     l_bank_branch_name varchar2(80);
1467     l_seg1 varchar2(30);
1468     l_seg2 varchar2(30);
1469     l_seg4 varchar2(100);
1470     l_org_ext_act_id number;
1471     l_ext_act_id number;
1472     l_org_pm_id number;
1473     l_no_flag varchar2(1);
1474     l_arrears_def_bal_id number;
1475     l_subject_si_id number;
1476     rec_get_emp        csr_get_emp%ROWTYPE;
1477     l_leaving_reason varchar2(100);
1478     l_ded_id number;
1479     l_ded_val number(15,2);
1480     l_fm_l_ded_val varchar2(100);
1481     l_nat_cd varchar2(30);
1482 
1483   BEGIN
1484 
1485     set_currency_mask(p_business_group_id);
1486     l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
1487     l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
1488 
1489     INSERT INTO fnd_sessions (session_id, effective_date)
1490     VALUES (userenv('sessionid'), l_effective_date);
1491 
1492     -- To clear the PL/SQL Table values.
1493     vXMLTable.DELETE;
1494     vCtr := 1;
1495     hr_utility.set_location('Entering FORM1 ',10);
1496 
1497     /* Fetch local nationality */
1498     OPEN csr_get_loc_nat;
1499     FETCH csr_get_loc_nat into l_nat_cd;
1500     CLOSE csr_get_loc_nat;
1501 
1502 
1503       /*Fetch Employer SSN*/
1504       OPEN csr_employer_ssn;
1505       FETCH csr_employer_ssn INTO l_employer_ssn;
1506       CLOSE csr_employer_ssn;
1507 
1508       /*Fetch Employer Name*/
1509       OPEN csr_employer_name;
1510       FETCH csr_employer_name INTO l_employer_name;
1511       CLOSE csr_employer_name;
1512 
1513     OPEN csr_get_def_bal_ids (p_employer_id);
1514     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accomodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id,l_ded_id;
1515     CLOSE csr_get_def_bal_ids;
1516 
1517     z := 1;
1518     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
1519     t_store_def_bal(z).label_index := get_index(1);
1520 
1521     z:= z+1;
1522     t_store_def_bal(z).def_bal_id := l_accomodation_id;
1523     t_store_def_bal(z).label_index := get_index(2);
1524 
1525     z := z + 1;
1526     l_index := 2;
1527 
1528     LOOP
1529     	If l_social_id is not null THEN
1530     		t_store_def_bal(z).def_bal_id := l_social_id;
1531     		t_store_def_bal(z).label_index := get_index(3);
1532     		z := z + 1;
1533     		l_index := l_index + 1;
1534     		EXIT WHEN z > 6;
1535     	End if;
1536 
1537     	If l_child_social_id is not null THEN
1538     		t_store_def_bal(z).def_bal_id := l_child_social_id;
1539     		t_store_def_bal(z).label_index := get_index(4);
1540     		z := z + 1;
1541     		l_index := l_index + 1;
1542 		EXIT WHEN z > 6;
1543     	End if;
1544 
1545     	If l_cost_of_living_id is not null THEN
1546     		t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
1547     		t_store_def_bal(z).label_index := get_index(5);
1548     		z := z + 1;
1549     		l_index := l_index + 1;
1550     		EXIT WHEN z > 6;
1551     	End if;
1552 
1553     	If l_tp_id is not null THEN
1554     		t_store_def_bal(z).def_bal_id := l_tp_id;
1555     	        t_store_def_bal(z).label_index := get_index(6);
1556     		z := z + 1;
1557     		l_index := l_index + 1;
1558 		EXIT WHEN z > 6;
1559     	End if;
1560 
1561     	If l_ol1_id is not null THEN
1562     		t_store_def_bal(z).def_bal_id := l_ol1_id;
1563     		t_store_def_bal(z).label_index := get_index(7);
1564     		z := z + 1;
1565     		l_index := l_index + 1;
1566     		EXIT WHEN z > 6;
1567     	End if;
1568 
1569     	If l_ol2_id is not null THEN
1570     		t_store_def_bal(z).def_bal_id := l_ol2_id;
1571 		t_store_def_bal(z).label_index := get_index(8);
1572     		z := z + 1;
1573     		l_index := l_index + 1;
1574     		EXIT WHEN z > 6;
1575     	End if;
1576 
1577     	If l_ol3_id is not null THEN
1578     		t_store_def_bal(z).def_bal_id := l_ol3_id;
1579     		t_store_def_bal(z).label_index := get_index(9);
1580     		z := z + 1;
1581     		l_index := l_index + 1;
1582     		EXIT WHEN z > 6;
1583     	End if;
1584 
1585     	If l_ol4_id is not null THEN
1586     		t_store_def_bal(z).def_bal_id := l_ol4_id;
1587     		t_store_def_bal(z).label_index := get_index(10);
1588     		z := z + 1;
1589     		l_index := l_index + 1;
1590     		EXIT WHEN z > 6;
1591     	End if;
1592 
1593     	If z <7 then
1594     		WHILE Z <= 7 LOOP
1595     			t_store_def_bal(z).def_bal_id := NULL;
1596     			t_store_def_bal(z).label_index := get_index(11);
1597     			z := z + 1;
1598     			EXIT WHEN z > 7;
1599     		END LOOP;
1600 	End If;
1601     	EXIT WHEN z >=7;
1602     END LOOP;
1603 
1604     l := 3;
1605     i := 0;
1606     k := 0;
1607     m := 0;
1608 
1609     OPEN csr_get_emp(p_employer_id , l_effective_date,l_nat_cd);
1610     LOOP
1611       FETCH csr_get_emp INTO rec_get_emp;
1612       EXIT WHEN csr_get_emp%NOTFOUND;
1613       i := i + 1;
1614       t_store_assact(i).person_id := rec_get_emp.person_id;
1615       t_store_assact(i).assignment_action_id := rec_get_emp.assignment_action_id;
1616       t_store_assact(i).actual_term_date := rec_get_emp.actual_termination_date;
1617       t_store_assact(i).leaving_reason := rec_get_emp.LEAVING_REASON;
1618       t_store_assact(i).date_earned := rec_get_emp.date_earned;
1619     END LOOP;
1620     CLOSE csr_get_emp;
1621 
1622     IF i > 0  THEN
1623       l_new_processed := 0;
1624     ELSE
1625       l_new_processed := 1;
1626     END IF;
1627 
1628     l_all_processed := 0;
1629         j := 1;
1630     WHILE j <= i LOOP
1631 /********* Reset all the local variables **********/
1632 l_full_name := null;
1633 l_marital_status := null;
1634 l_mar_p_status := null;
1635 l_gender := null;
1636 l_insured_ssn := null;
1637 l_asg_location_id := null;
1638 l_asg_id := null;
1639 l_work_emirate := null;
1640 l_home_phone := null;
1641 l_home_fax := null;
1642 l_home_phone_number := null;
1643 l_home_fax_number := null;
1644 l_p_address := null;
1645 l_number_of_wives := null;
1646 l_number_of_sons := null;
1647 l_number_of_daughters := null;
1648 l_bank_name := null;
1649 l_bank_branch_name := null;
1650 l_seg1 := null;
1651 l_seg2 := null;
1652 l_seg4 := null;
1653 l_org_ext_act_id := null;
1654 l_ext_act_id := null;
1655 l_org_pm_id := null;
1656 l_arrears_def_bal_id := null;
1657 l_no_flag := null;
1658 
1659       OPEN csr_p_data(t_store_assact(j).person_id,l_effective_date);
1660       FETCH csr_p_data INTO l_full_name,l_marital_status,l_gender;
1661       CLOSE csr_p_data;
1662 
1663       OPEN csr_p_mar_status(l_marital_status);
1664       FETCH csr_p_mar_status into l_mar_p_status;
1665       CLOSE csr_p_mar_status;
1666 
1667       OPEN csr_p_asg_data(t_store_assact(j).person_id, l_effective_date);
1668       FETCH csr_p_asg_data into l_asg_id , l_insured_ssn,l_asg_location_id;
1669       CLOSE csr_p_asg_data;
1670 
1671       OPEN csr_get_org_phone_types (p_business_group_id);
1672       FETCH csr_get_org_phone_types into l_home_phone,l_work_phone,l_home_fax,l_work_fax;
1673       CLOSE csr_get_org_phone_types;
1674 
1675       OPEN csr_p_phone_data(t_store_assact(j).person_id,'H1',l_effective_date);
1676       FETCH csr_p_phone_data into l_home_phone_number;
1677       CLOSE csr_p_phone_data;
1678 
1679       OPEN csr_p_phone_data(t_store_assact(j).person_id,'HF',l_effective_date);
1680       FETCH csr_p_phone_data into l_home_fax_number;
1681       CLOSE csr_p_phone_data;
1682 
1683       OPEN csr_p_address_data (t_store_assact(j).person_id,l_effective_date);
1684       FETCH csr_p_address_data into l_p_address;
1685       CLOSE csr_p_address_data;
1686       IF l_gender = 'M' then
1687       	OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'S','F',l_effective_date);
1688       	FETCH csr_p_contact_count_data into l_number_of_wives;
1689       	CLOSE csr_p_contact_count_data;
1690       Else
1691       	l_number_of_wives := 0;
1692       END IF;
1693       OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'C','M',l_effective_date);
1694       FETCH csr_p_contact_count_data into l_number_of_sons;
1695       CLOSE csr_p_contact_count_data;
1696       OPEN csr_p_contact_count_data(t_store_assact(j).person_id,'C','F',l_effective_date);
1697       FETCH csr_p_contact_count_data into l_number_of_daughters;
1698       CLOSE csr_p_contact_count_data;
1699       OPEN csr_get_ext_id_org_paymeth(l_asg_id,l_effective_date);
1700       FETCH csr_get_ext_id_org_paymeth into l_ext_act_id , l_org_pm_id;
1701       CLOSE csr_get_ext_id_org_paymeth;
1702       If l_ext_act_id is null and l_org_pm_id is null then
1703       	l_no_flag := 'Y';
1704       Else
1705       	l_no_flag := 'N';
1706       End If;
1707       If l_ext_act_id is null then
1708       	OPEN csr_get_ext_id(l_org_pm_id,l_effective_date);
1709       	FETCH csr_get_ext_id into l_org_ext_act_id;
1710       	CLOSE csr_get_ext_id;
1711       	OPEN csr_get_bank_det_ext (l_org_ext_act_id);
1712       	FETCH csr_get_bank_det_ext into l_seg1,l_seg2,l_seg4;
1713       	CLOSE csr_get_bank_det_ext;
1714       Else
1715       	OPEN csr_get_bank_det_ext (l_ext_act_id);
1716         FETCH csr_get_bank_det_ext into l_seg1,l_seg2,l_seg4;
1717       	CLOSE csr_get_bank_det_ext;
1718       End If;
1719       OPEN csr_get_bank_name (l_seg1);
1720       FETCH csr_get_bank_name into l_bank_name;
1721       CLOSE csr_get_bank_name;
1722       OPEN csr_get_branch_name (l_seg2);
1723       FETCH csr_get_branch_name into l_bank_branch_name;
1724       CLOSE csr_get_branch_name;
1725       OPEN csr_get_def_bal_id ('EMPLOYEE_SOCIAL_INSURANCE_ARREARS_ASG_ITD');
1726       FETCH csr_get_def_bal_id into l_arrears_def_bal_id;
1727       CLOSE csr_get_def_bal_id;
1728       OPEN csr_get_def_bal_id('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
1729       FETCH csr_get_def_bal_id into l_subject_si_id;
1730       CLOSE csr_get_def_bal_id;
1731 
1732       l_basic_val := 0;
1733       l_accomodation_val := 0;
1734       l_allowance_1_val := 0;
1735       l_allowance_2_val := 0;
1736       l_allowance_3_val := 0;
1737       l_allowance_4_val := 0;
1738       l_allowance_5_val := 0;
1739 
1740       l_ded_val := 0;
1741 
1742       If l_ded_id is not null then
1743       		l_ded_val := pay_balance_pkg.get_value(l_ded_id,t_store_assact(j).assignment_action_id);
1744       End if;
1745 
1746       x := 1;
1747       IF t_store_def_bal(x).def_bal_id is not null THEN
1748 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1749 		x:= x + 1;
1750       ELSE
1751       		l_basic_val := 0;
1752       		x:= x + 1;
1753       END IF;
1754       IF t_store_def_bal(x).def_bal_id is not null THEN
1755 		l_accomodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1756 		x:= x + 1;
1757       ELSE
1758       		l_accomodation_val := 0;
1759       		x:= x + 1;
1760       END IF;
1761       IF t_store_def_bal(x).def_bal_id is not null THEN
1762 		l_allowance_1_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1763 		x:= x + 1;
1764       ELSE
1765       		l_allowance_1_val := 0;
1766       		x:= x + 1;
1767       END IF;
1768       IF t_store_def_bal(x).def_bal_id is not null THEN
1769 		l_allowance_2_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1770 		x:= x + 1;
1771       ELSE
1772       		l_allowance_2_val := 0;
1773       		x:= x + 1;
1774       END IF;
1775       IF t_store_def_bal(x).def_bal_id is not null THEN
1776 		l_allowance_3_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1777 		x:= x + 1;
1778       ELSE
1779       		l_allowance_3_val := 0;
1780       		x:= x + 1;
1781       END IF;
1782       IF t_store_def_bal(x).def_bal_id is not null THEN
1783 		l_allowance_4_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
1784       ELSE
1785       		l_allowance_4_val := 0;
1786       END IF;
1787       l_new_count := l_new_count+1;
1788       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
1789       l_fm_l_accomodation_val := to_char(abs(l_accomodation_val),lg_format_mask);
1790       l_fm_l_allowance_1_val := to_char(abs(l_allowance_1_val),lg_format_mask);
1791       l_fm_l_allowance_2_val := to_char(abs(l_allowance_2_val),lg_format_mask);
1792       l_fm_l_allowance_3_val := to_char(abs(l_allowance_3_val),lg_format_mask);
1793       l_fm_l_allowance_4_val := to_char(abs(l_allowance_4_val),lg_format_mask);
1794 
1795       l_fm_l_ded_val := to_char(abs(l_ded_val),lg_format_mask);
1796 
1797 
1798       If l_arrears_def_bal_id is not null then
1799       	l_ee_arrears := pay_balance_pkg.get_value(l_arrears_def_bal_id,t_store_assact(j).assignment_action_id);
1800       Else
1801       	l_ee_arrears := 0;
1802       End If;
1803       l_fm_ee_arrears := to_char(abs(l_ee_arrears),lg_format_mask);
1804       /** Populate the XML file **/
1805       vXMLTable(vCtr).TagName := 'Employer_ssn';
1806       vXMLTable(vCtr).TagValue := l_employer_ssn;
1807       vctr := vctr + 1;
1808       vXMLTable(vCtr).TagName := 'Employer_name';
1809       vXMLTable(vCtr).TagValue := l_employer_name;
1810       vctr := vctr + 1;
1811       vXMLTable(vCtr).TagName := 'Employee_ssn';
1812       vXMLTable(vCtr).TagValue := l_insured_ssn;
1813       vctr := vctr + 1;
1814       vXMLTable(vCtr).TagName := 'Employee_name';
1815       vXMLTable(vCtr).TagValue := SUBSTR(l_full_name,1,60);
1816       vctr := vctr + 1;
1817       vXMLTable(vCtr).TagName := 'Employee_fax';
1818       vXMLTable(vCtr).TagValue :=  l_home_fax_number;
1819       vctr := vctr + 1;
1820       vXMLTable(vCtr).TagName := 'Employee_phone';
1821       vXMLTable(vCtr).TagValue :=  l_home_phone_number;
1822       vctr := vctr + 1;
1823       vXMLTable(vCtr).TagName := 'Address';
1824       vXMLTable(vCtr).TagValue :=  nvl(l_p_address,' ');
1825       vctr := vctr + 1;
1826       vXMLTable(vCtr).TagName := 'basic_salary';
1827 
1828             BEGIN
1829             	SELECT decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val)
1830             	INTO l_fm_l_basic_val
1831             	FROM dual;
1832 
1833             	EXCEPTION
1834             		WHEN no_data_found then
1835             		NULL;
1836             END;
1837 
1838       vXMLTable(vCtr).TagValue := l_fm_l_basic_val;
1839       vctr := vctr + 1;
1840 
1841       vXMLTable(vCtr).TagName := 'housing_allowance';
1842 
1843             BEGIN
1844             	SELECT decode(l_accomodation_val/(abs(decode(l_accomodation_val,0,1,l_accomodation_val))*-1),1,'-'||l_fm_l_accomodation_val,l_fm_l_accomodation_val)
1845             	INTO l_fm_l_accomodation_val
1846             	FROM dual;
1847 
1848             	EXCEPTION
1849             		WHEN no_data_found then
1850             		NULL;
1851             END;
1852 
1853       vXMLTable(vCtr).TagValue := l_fm_l_accomodation_val;
1854       vctr := vctr + 1;
1855 
1856       vXMLTable(vCtr).TagName := 'allowance_1';
1857 
1858             BEGIN
1859             	SELECT decode(l_allowance_1_val/(abs(decode(l_allowance_1_val,0,1,l_allowance_1_val))*-1),1,'-'||l_fm_l_allowance_1_val,l_fm_l_allowance_1_val)
1860             	INTO l_fm_l_allowance_1_val
1861             	FROM dual;
1862 
1863             	EXCEPTION
1864             		WHEN no_data_found then
1865             		NULL;
1866             END;
1867 
1868       vXMLTable(vCtr).TagValue := l_fm_l_allowance_1_val;
1869       vctr := vctr + 1;
1870 
1871       vXMLTable(vCtr).TagName := 'allowance_2';
1872 
1873             BEGIN
1874             	SELECT decode(l_allowance_2_val/(abs(decode(l_allowance_2_val,0,1,l_allowance_2_val))*-1),1,'-'||l_fm_l_allowance_2_val,l_fm_l_allowance_2_val)
1875             	INTO l_fm_l_allowance_2_val
1876             	FROM dual;
1877 
1878             	EXCEPTION
1879             		WHEN no_data_found then
1880             		NULL;
1881             END;
1882 
1883       vXMLTable(vCtr).TagValue := l_fm_l_allowance_2_val;
1884       vctr := vctr + 1;
1885 
1886       vXMLTable(vCtr).TagName := 'allowance_3';
1887 
1888             BEGIN
1889             	SELECT decode(l_allowance_3_val/(abs(decode(l_allowance_3_val,0,1,l_allowance_3_val))*-1),1,'-'||l_fm_l_allowance_3_val,l_fm_l_allowance_3_val)
1890             	INTO l_fm_l_allowance_3_val
1891             	FROM dual;
1892 
1893             	EXCEPTION
1894             		WHEN no_data_found then
1895             		NULL;
1896             END;
1897 
1898       vXMLTable(vCtr).TagValue := l_fm_l_allowance_3_val;
1899       vctr := vctr + 1;
1900 
1901       vXMLTable(vCtr).TagName := 'allowance_4';
1902 
1903             BEGIN
1904             	SELECT decode(l_allowance_4_val/(abs(decode(l_allowance_4_val,0,1,l_allowance_4_val))*-1),1,'-'||l_fm_l_allowance_4_val,l_fm_l_allowance_4_val)
1905             	INTO l_fm_l_allowance_4_val
1906             	FROM dual;
1907 
1908             	EXCEPTION
1909             		WHEN no_data_found then
1910             		NULL;
1911             END;
1912 
1913       vXMLTable(vCtr).TagValue := l_fm_l_allowance_4_val;
1914       vctr := vctr + 1;
1915 
1916       --l_total := l_basic_val + l_accomodation_val + l_allowance_1_val + l_allowance_2_val + l_allowance_3_val + l_allowance_4_val+l_allowance_5_val;
1917 
1918       l_total := pay_balance_pkg.get_value(l_subject_si_id,t_store_assact(j).assignment_action_id);
1919 
1920       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
1921 
1922       vXMLTable(vCtr).TagName := 'contributory_salary_at_termination';
1923 
1924             BEGIN
1925             	SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
1926             	INTO l_fm_total_val
1927             	FROM dual;
1928 
1929             	EXCEPTION
1930             		WHEN no_data_found then
1931             		NULL;
1932             END;
1933 
1934       vXMLTable(vCtr).TagValue :=  l_fm_total_val;
1935       vctr := vctr + 1;
1936 
1937 
1938       OPEN csr_get_leav_reas (t_store_assact(j).leaving_reason);
1939       FETCH csr_get_leav_reas into l_leaving_reason;
1940       CLOSE csr_get_leav_reas;
1941 
1942       vXMLTable(vCtr).TagName := 'termination_reason';
1943       vXMLTable(vCtr).TagValue := nvl(l_leaving_reason,' ');
1944       vctr := vctr + 1;
1945       vXMLTable(vCtr).TagName := 'termination_day';
1946       vXMLTable(vCtr).TagValue := nvl(to_char(t_store_assact(j).actual_term_date,'DD'),' ');
1947       vctr := vctr + 1;
1948       vXMLTable(vCtr).TagName := 'termination_month';
1949       vXMLTable(vCtr).TagValue := nvl(to_char(t_store_assact(j).actual_term_date,'MM'),' ');
1950       vctr := vctr + 1;
1951       vXMLTable(vCtr).TagName := 'termination_year';
1952       vXMLTable(vCtr).TagValue := nvl(to_char(t_store_assact(j).actual_term_date,'YYYY'),' ');
1953       vctr := vctr + 1;
1954       vXMLTable(vCtr).TagName := 'number_of_sons';
1955       vXMLTable(vCtr).TagValue := l_number_of_sons;
1956       vctr := vctr + 1;
1957       vXMLTable(vCtr).TagName := 'number_of_daughters';
1958       vXMLTable(vCtr).TagValue := l_number_of_daughters;
1959       vctr := vctr + 1;
1960       vXMLTable(vCtr).TagName := 'number_of_wives';
1961       vXMLTable(vCtr).TagValue := l_number_of_wives;
1962       vctr := vctr + 1;
1963       vXMLTable(vCtr).TagName := 'marital_status';
1964       vXMLTable(vCtr).TagValue := l_mar_p_status;
1965       vctr := vctr + 1;
1966       If l_no_flag = 'Y' then
1967 	      vXMLTable(vCtr).TagName := 'collect_EOS_pension_n';
1968 	      vXMLTable(vCtr).TagValue := 'X';
1969 	      vctr := vctr + 1;
1970       Else
1971 	      vXMLTable(vCtr).TagName := 'collect_EOS_pension_y';
1972 	      vXMLTable(vCtr).TagValue := 'X';
1973 	      vctr := vctr + 1;
1974 	      vXMLTable(vCtr).TagName := 'account_number_pension';
1975 	      vXMLTable(vCtr).TagValue := l_seg4;
1976 	      vctr := vctr + 1;
1977 	      vXMLTable(vCtr).TagName := 'branch_pension';
1978 	      vXMLTable(vCtr).TagValue := l_bank_branch_name;
1979 	      vctr := vctr + 1;
1980 	      vXMLTable(vCtr).TagName := 'bank_pension';
1981 	      vXMLTable(vCtr).TagValue := l_bank_name;
1982 	      vctr := vctr + 1;
1983       End If;
1984 
1985       If l_ee_arrears <>0 then
1986       	vXMLTable(vCtr).TagName := 'deduction_type_1';
1987       	vXMLTable(vCtr).TagValue := get_lookup_meaning('AE_FORM_LABELS','ARR_LABEL');
1988       	vctr := vctr + 1;
1989 
1990       	vXMLTable(vCtr).TagName := 'dinars_1';
1991       	vXMLTable(vCtr).TagValue := substr(l_fm_ee_arrears,1,length(l_fm_ee_arrears)-3);
1992       	vctr := vctr + 1;
1993 
1994       	vXMLTable(vCtr).TagName := 'fills_1';
1995       	vXMLTable(vCtr).TagValue := substr(l_fm_ee_arrears,length(l_fm_ee_arrears)-1);
1996       	vctr := vctr + 1;
1997       End If;
1998 
1999       If l_ee_arrears <> 0 and l_ded_val <> 0 then
2000       	vXMLTable(vCtr).TagName := 'deduction_type_2';
2001       	vXMLTable(vCtr).TagValue := get_lookup_meaning('AE_FORM_LABELS','OTH_DED');
2002       	vctr := vctr + 1;
2003 
2004       	vXMLTable(vCtr).TagName := 'dinars_2';
2005       	vXMLTable(vCtr).TagValue := substr(l_fm_l_ded_val,1,length(l_fm_l_ded_val)-3);
2006       	vctr := vctr + 1;
2007 
2008       	vXMLTable(vCtr).TagName := 'fills_2';
2009       	vXMLTable(vCtr).TagValue := substr(l_fm_l_ded_val,length(l_fm_l_ded_val)-1);
2010       	vctr := vctr + 1;
2011       ElsIf l_ee_arrears = 0 and l_ded_val <> 0 then
2012       	vXMLTable(vCtr).TagName := 'deduction_type_1';
2013 	vXMLTable(vCtr).TagValue := get_lookup_meaning('AE_FORM_LABELS','OTH_DED');
2014 	vctr := vctr + 1;
2015 
2016 	vXMLTable(vCtr).TagName := 'dinars_1';
2017 	vXMLTable(vCtr).TagValue := substr(l_fm_l_ded_val,1,length(l_fm_l_ded_val)-3);
2018 	vctr := vctr + 1;
2019 
2020 	vXMLTable(vCtr).TagName := 'fills_1';
2021 	vXMLTable(vCtr).TagValue := substr(l_fm_l_ded_val,length(l_fm_l_ded_val)-1);
2022       	vctr := vctr + 1;
2023       End If;
2024 
2025       j := j + 1;
2026       vXMLTable(vCtr).TagName := 'PAGE-BK';
2027       vXMLTable(vCtr).TagValue := '    ';
2028       vctr := vctr + 1;
2029       IF j > i THEN
2030         l_new_processed := 1;
2031         EXIT;
2032       END IF;
2033     END LOOP;
2034     hr_utility.set_location('Finished creating xml data for Procedure FORM1 ',20);
2035     WritetoCLOB ( l_xfdf_blob );
2036 EXCEPTION
2037         WHEN utl_file.invalid_path then
2038                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
2039                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2040                 hr_utility.raise_error;
2041 --
2042     WHEN utl_file.invalid_mode then
2043         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
2044         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2045                 hr_utility.raise_error;
2046 --
2047     WHEN utl_file.invalid_filehandle then
2048         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
2049         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2050                 hr_utility.raise_error;
2051 --
2052     WHEN utl_file.invalid_operation then
2053         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
2054         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2055                 hr_utility.raise_error;
2056 --
2057     WHEN utl_file.read_error then
2058         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
2059         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2060                 hr_utility.raise_error;
2061 --
2062     WHEN others THEN
2063        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
2064        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
2065        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2066            hr_utility.raise_error;
2067   END FORM2;
2068 -------------------------------------------------------------------------------------------
2069   PROCEDURE FORM6
2070     (p_request_id              NUMBER
2071     ,p_report                  VARCHAR2
2072     ,p_business_group_id       NUMBER
2073     ,p_employer_id             NUMBER
2074     ,p_effective_month         VARCHAR2
2075     ,p_effective_year          VARCHAR2
2076     ,l_xfdf_blob               OUT NOCOPY BLOB
2077     )
2078    AS
2079 
2080     /*Cursor for fetching Local nationality for the BG */
2081      CURSOR csr_get_loc_nat IS
2082      SELECT org_information1
2083      FROM   hr_organization_information
2084      WHERE  organization_id = p_business_group_id
2085      AND    org_information_context = 'AE_BG_DETAILS';
2086 
2087     /*Cursor for fetching Employer SSN*/
2088      CURSOR csr_employer_ssn IS
2089      SELECT org_information1
2090      FROM   hr_organization_information
2091      WHERE  organization_id = p_employer_id
2092      AND    org_information_context = 'AE_LEGAL_EMPLOYER_DETAILS';
2093 
2094      /*Cursor for fetching Employer Name*/
2095      CURSOR csr_employer_name IS
2096      SELECT name
2097      FROM   hr_organization_units
2098     WHERE  organization_id = p_employer_id;
2099 
2100      /*Cursor for fetching employees*/
2101     CURSOR csr_get_emp (l_employer number , l_date date , l_nat_cd varchar2) IS
2102     SELECT distinct asg.person_id
2103                     ,paa.assignment_action_id
2104                     ,ppa.date_earned
2105     FROM   per_all_assignments_f asg
2106            ,pay_assignment_actions paa
2107            ,pay_payroll_actions ppa
2108            ,hr_soft_coding_keyflex hscl
2109            ,per_periods_of_service pos
2110            ,per_all_people_f ppf
2111     WHERE  asg.assignment_id = paa.assignment_id
2112     AND    paa.payroll_action_id = ppa.payroll_action_id
2113     AND    pos.period_of_service_id = asg.period_of_service_id
2114     AND    ppa.action_type in ('R','Q')
2115     AND    ppa.action_status = 'C'
2116     AND    paa.action_status IN ('C','S')
2117     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_date, 'MM')
2118     AND    trunc(l_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
2119     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
2120     AND    hscl.segment1 = to_char(l_employer)
2121     AND    ppf.person_id = asg.person_id
2122     AND    trunc(l_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
2123     AND    ppf.per_information18 = l_nat_cd;
2124 
2125     /* Cursor for fetching the person data */
2126     	CURSOR csr_get_person_data (l_person_id number,l_effective_date date) IS
2127     	SELECT ppf.full_name
2128     	FROM	per_all_people_f ppf
2129     	WHERE 	ppf.person_id = l_person_id
2130     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
2131 
2132     /* Cursor for fetching the person's assignment data */
2133     	CURSOR csr_get_person_asg_data (l_person_id number,l_effective_date date) IS
2134     	SELECT hsck.segment3
2135     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
2136     	WHERE 	paf.person_id = l_person_id
2137     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
2138     	AND     hsck.segment1 = p_employer_id
2139     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
2140 
2141     /* Cursor for fetching Defined balance ids from Org EIT */
2142         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
2143         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10
2144         FROM    HR_ORGANIZATION_INFORMATION
2145         WHERE   Organization_id = l_bg_id
2146         AND	org_information_context = 'AE_SI_DETAILS';
2147 
2148     /* Cursor for fetching Subject to SI defined balance ID */
2149     CURSOR csr_get_si_id(p_user_name VARCHAR2)  IS
2150     SELECT  u.creator_id
2151     FROM    ff_user_entities  u,
2152             ff_database_items d
2153     WHERE   d.user_name = p_user_name
2154     AND     u.user_entity_id = d.user_entity_id
2155     AND     u.legislation_code = 'AE'
2156     AND     u.business_group_id is null
2157     AND     u.creator_type = 'B';
2158 
2159     TYPE def_bal_rec IS RECORD
2160     (def_bal_id                  NUMBER
2161     ,label_index		 VARCHAR2(40));
2162     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
2163     t_store_def_bal   t_def_bal_table;
2164     TYPE assact_rec IS RECORD
2165     (person_id                 NUMBER
2166     ,assignment_action_id      NUMBER
2167     ,date_start                DATE);
2168     TYPE t_assact_table IS TABLE OF assact_rec INDEX BY BINARY_INTEGER;
2169     t_store_assact   t_assact_table;
2170     l_employer_name varchar2(240);
2171     l_input_date varchar2(30);
2172     l_effective_date date;
2173     l_employer_ssn number;
2174     l_basic_sal_id number;
2175     z number;
2176     l_accomodation_id number;
2177     l_social_id number;
2178     l_child_social_id number;
2179     l_tp_id number;
2180     l_ol1_id number;
2181     l_ol2_id number;
2182     l_ol3_id number;
2183     l_ol4_id number;
2184     l_cost_of_living_id number;
2185     l_index number;
2186     i number;
2187     k number;
2188     m number;
2189     j number;
2190     x number;
2191     l_new_processed number;
2192     l_all_processed number;
2193     l_new_count number;
2194     l_basic_val number(15,2);
2195     l_accomodation_val number(15,2);
2196     l_allowance_1_val number(15,2);
2197     l_allowance_2_val number(15,2);
2198     l_allowance_3_val number(15,2);
2199     l_allowance_4_val number(15,2);
2200     l number;
2201     l_tot_count number;
2202     L_FULL_NAME varchar2(240);
2203     l_insured_ssn varchar2(30);
2204     L_TOTAL number(15,2);
2205     L_FM_TOTAL_VAL varchar2(100);
2206     l_fm_l_basic_val varchar2(100);
2207     L_FM_L_ACCOMODATION_VAL varchar2(100);
2208     L_FM_L_ALLOWANCE_1_VAL varchar2(100);
2209     L_FM_L_ALLOWANCE_2_VAL varchar2(100);
2210     L_FM_L_ALLOWANCE_3_VAL varchar2(100);
2211     L_FM_L_ALLOWANCE_4_VAL varchar2(100);
2212     rec_get_emp        csr_get_emp%ROWTYPE;
2213     l_xfdf_string              CLOB;
2214     l_str_er_name varchar2(240);
2215     l_str_er_ssn varchar2(240);
2216     l_str_ee_name varchar2(240);
2217     l_str_ee_ssn varchar2(240);
2218     l_str_year varchar2(240);
2219     l_str_seq_no varchar2(240);
2220     l_str_bsd varchar2(240);
2221     l_str_bsf varchar2(240);
2222     l_str_aad varchar2(240);
2223     l_str_aaf varchar2(240);
2224     l_str_a1d varchar2(240);
2225     l_str_a1f varchar2(240);
2226     l_str_a2d varchar2(240);
2227     l_str_a2f varchar2(240);
2228     l_str_a3d varchar2(240);
2229     l_str_a3f varchar2(240);
2230     l_str_a4d varchar2(240);
2231     l_str_a4f varchar2(240);
2232     l_str_a5d varchar2(240);
2233     l_str_a5f varchar2(240);
2234     l_subject_si_id number;
2235     l_nat_cd varchar2(30);
2236     l_str_pb varchar2(240);
2237     l_str_mon varchar2(240);
2238     l_str_dd varchar2(240);
2239 
2240   BEGIN
2241     set_currency_mask(p_business_group_id);
2242     l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
2243     l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
2244     INSERT INTO fnd_sessions (session_id, effective_date)
2245     VALUES (userenv('sessionid'), l_effective_date);
2246     hr_utility.set_location('Entering FORM6 ',10);
2247 
2248     /* Fetch Local Nationality */
2249     OPEN csr_get_loc_nat;
2250     FETCH csr_get_loc_nat INTO l_nat_cd;
2251     CLOSE csr_get_loc_nat;
2252 
2253     /*Fetch Employer SSN*/
2254     OPEN csr_employer_ssn;
2255     FETCH csr_employer_ssn INTO l_employer_ssn;
2256     CLOSE csr_employer_ssn;
2257 
2258     /*Fetch Employer Name*/
2259     OPEN csr_employer_name;
2260     FETCH csr_employer_name INTO l_employer_name;
2261     CLOSE csr_employer_name;
2262 
2263     dbms_lob.createtemporary(l_xfdf_string,FALSE,DBMS_LOB.CALL);
2264     dbms_lob.open(l_xfdf_string,dbms_lob.lob_readwrite);
2265     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
2266     clob_to_blob(l_xfdf_string,l_xfdf_blob);
2267 
2268     dbms_lob.writeAppend( l_xfdf_string, length('<START>'),'<START>');
2269 
2270     OPEN csr_get_def_bal_ids (p_employer_id);
2271     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accomodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id;
2272     CLOSE csr_get_def_bal_ids;
2273 
2274     z := 1;
2275     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
2276     t_store_def_bal(z).label_index := get_index(1);
2277     z:= z+1;
2278     t_store_def_bal(z).def_bal_id := l_accomodation_id;
2279     t_store_def_bal(z).label_index := get_index(2);
2280     z := z + 1;
2281     l_index := 2;
2282     LOOP
2283    	If l_social_id is not null THEN
2284     		t_store_def_bal(z).def_bal_id := l_social_id;
2285     		t_store_def_bal(z).label_index := get_index(3);
2286     		z := z + 1;
2287     		l_index := l_index + 1;
2288     		EXIT WHEN z > 6;
2289     	End if;
2290     	If l_child_social_id is not null THEN
2291     		t_store_def_bal(z).def_bal_id := l_child_social_id;
2292     		t_store_def_bal(z).label_index := get_index(4);
2293     		z := z + 1;
2294     		l_index := l_index + 1;
2295 		EXIT WHEN z > 6;
2296     	End if;
2297     	If l_cost_of_living_id is not null THEN
2298     		t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
2299     		t_store_def_bal(z).label_index := get_index(5);
2300     		z := z + 1;
2301     		l_index := l_index + 1;
2302     		EXIT WHEN z > 6;
2303     	End if;
2304     	If l_tp_id is not null THEN
2305     		t_store_def_bal(z).def_bal_id := l_tp_id;
2306     	        t_store_def_bal(z).label_index := get_index(6);
2307     		z := z + 1;
2308     		l_index := l_index + 1;
2309 		EXIT WHEN z > 6;
2310     	End if;
2311     	If l_ol1_id is not null THEN
2312     		t_store_def_bal(z).def_bal_id := l_ol1_id;
2313     		t_store_def_bal(z).label_index := get_index(7);
2314     		z := z + 1;
2315     		l_index := l_index + 1;
2316     		EXIT WHEN z > 6;
2317     	End if;
2318     	If l_ol2_id is not null THEN
2319     		t_store_def_bal(z).def_bal_id := l_ol2_id;
2320 		t_store_def_bal(z).label_index := get_index(8);
2321     		z := z + 1;
2322     		l_index := l_index + 1;
2323     		EXIT WHEN z > 6;
2324     	End if;
2325     	If l_ol3_id is not null THEN
2326     		t_store_def_bal(z).def_bal_id := l_ol3_id;
2327     		t_store_def_bal(z).label_index := get_index(9);
2328     		z := z + 1;
2329     		l_index := l_index + 1;
2330     		EXIT WHEN z > 6;
2331     	End if;
2332     	If l_ol4_id is not null THEN
2333     		t_store_def_bal(z).def_bal_id := l_ol4_id;
2334     		t_store_def_bal(z).label_index := get_index(10);
2335     		z := z + 1;
2336     		l_index := l_index + 1;
2337     		EXIT WHEN z > 6;
2338     	End if;
2339     	If z < 7 then
2340     		WHILE Z <= 7 LOOP
2341     			t_store_def_bal(z).def_bal_id := NULL;
2342     			t_store_def_bal(z).label_index := get_index(11);
2343     			z := z + 1;
2344     			EXIT WHEN z > 7;
2345     		END LOOP;
2346 	End If;
2347     	EXIT WHEN z >= 7;
2348     END LOOP;
2349     i := 0;
2350     k := 0;
2351     m := 0;
2352 
2353     OPEN csr_get_emp(p_employer_id , l_effective_date, l_nat_cd);
2354     LOOP
2355       FETCH csr_get_emp INTO rec_get_emp;
2356       EXIT WHEN csr_get_emp%NOTFOUND;
2357       i := i + 1;
2358       t_store_assact(i).person_id := rec_get_emp.person_id;
2359       t_store_assact(i).assignment_action_id := rec_get_emp.assignment_action_id;
2360       t_store_assact(i).date_start := rec_get_emp.date_earned;
2361     END LOOP;
2362     CLOSE csr_get_emp;
2363 
2364         /*Fetch Defined Balance Id*/
2365     OPEN csr_get_si_id('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
2366     FETCH csr_get_si_id INTO l_subject_si_id;
2367     CLOSE csr_get_si_id;
2368 
2369     IF i > 0  THEN
2370       l_new_processed := 0;
2371     ELSE
2372       l_new_processed := 1;
2373     END IF;
2374     l_all_processed := 0;
2375         j := 1;
2376         l := 1;
2377 
2378 	l_tot_count := 0;
2379 
2380     WHILE l_all_processed  <> 1 LOOP
2381     --Writing data for new employees
2382     l_new_count := 0;
2383       dbms_lob.writeAppend( l_xfdf_string, length('<EMP-REC>'),'<EMP-REC>');
2384     WHILE j <= i LOOP
2385 /**** RESET ALL THE VARIABLES *****/
2386       l_basic_val := 0;
2387       l_accomodation_val := 0;
2388       l_allowance_1_val := 0;
2389       l_allowance_2_val := 0;
2390       l_allowance_3_val := 0;
2391       l_allowance_4_val := 0;
2392       l_total := 0;
2393       x := 1;
2394       IF t_store_def_bal(x).def_bal_id is not null THEN
2395 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2396 		x:= x + 1;
2397       ELSE
2398       		l_basic_val := 0;
2399       		x:= x + 1;
2400       END IF;
2401       IF t_store_def_bal(x).def_bal_id is not null THEN
2402 		l_accomodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2403 		x:= x + 1;
2404       ELSE
2405       		l_accomodation_val := 0;
2406       		x:= x + 1;
2407       END IF;
2408       IF t_store_def_bal(x).def_bal_id is not null THEN
2409 		l_allowance_1_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2410 		x:= x + 1;
2411       ELSE
2412       		l_allowance_1_val := 0;
2413       		x:= x + 1;
2414       END IF;
2415       IF t_store_def_bal(x).def_bal_id is not null THEN
2416 		l_allowance_2_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2417 		x:= x + 1;
2418       ELSE
2419       		l_allowance_2_val := 0;
2420       		x:= x + 1;
2421       END IF;
2422       IF t_store_def_bal(x).def_bal_id is not null THEN
2423 		l_allowance_3_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2424 		x:= x + 1;
2425       ELSE
2426       		l_allowance_3_val := 0;
2427       		x:= x + 1;
2428       END IF;
2429       IF t_store_def_bal(x).def_bal_id is not null THEN
2430 		l_allowance_4_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
2431       ELSE
2432       		l_allowance_4_val := 0;
2433       END IF;
2434 
2435       l_new_count := l_new_count+1;
2436       l_tot_count := l_tot_count + 1;
2437 
2438       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
2439       l_fm_l_accomodation_val := to_char(abs(l_accomodation_val),lg_format_mask);
2440       l_fm_l_allowance_1_val := to_char(abs(l_allowance_1_val),lg_format_mask);
2441       l_fm_l_allowance_2_val := to_char(abs(l_allowance_2_val),lg_format_mask);
2442       l_fm_l_allowance_3_val := to_char(abs(l_allowance_3_val),lg_format_mask);
2443       l_fm_l_allowance_4_val := to_char(abs(l_allowance_4_val),lg_format_mask);
2444       l_total := pay_balance_pkg.get_value(l_subject_si_id,t_store_assact(j).assignment_action_id);
2445       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
2446 
2447       BEGIN
2448 
2449             	SELECT decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val)
2450             	INTO l_fm_l_basic_val
2451             	FROM dual;
2452 
2453             	SELECT decode(l_accomodation_val/(abs(decode(l_accomodation_val,0,1,l_accomodation_val))*-1),1,'-'||l_fm_l_accomodation_val,l_fm_l_accomodation_val)
2454             	INTO l_fm_l_accomodation_val
2455             	FROM dual;
2456 
2457             	SELECT decode(l_allowance_1_val/(abs(decode(l_allowance_1_val,0,1,l_allowance_1_val))*-1),1,'-'||l_fm_l_allowance_1_val,l_fm_l_allowance_1_val)
2458             	INTO l_fm_l_allowance_1_val
2459             	FROM dual;
2460 
2461             	SELECT decode(l_allowance_2_val/(abs(decode(l_allowance_2_val,0,1,l_allowance_2_val))*-1),1,'-'||l_fm_l_allowance_2_val,l_fm_l_allowance_2_val)
2462             	INTO l_fm_l_allowance_2_val
2463             	FROM dual;
2464 
2465             	SELECT decode(l_allowance_3_val/(abs(decode(l_allowance_3_val,0,1,l_allowance_3_val))*-1),1,'-'||l_fm_l_allowance_3_val,l_fm_l_allowance_3_val)
2466             	INTO l_fm_l_allowance_3_val
2467             	FROM dual;
2468 
2469             	SELECT decode(l_allowance_4_val/(abs(decode(l_allowance_4_val,0,1,l_allowance_4_val))*-1),1,'-'||l_fm_l_allowance_4_val,l_fm_l_allowance_4_val)
2470             	INTO l_fm_l_allowance_4_val
2471             	FROM dual;
2472 
2473             	SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
2474             	INTO l_fm_total_val
2475             	FROM dual;
2476 
2477       EXCEPTION
2478       		WHEN no_data_found then
2479       			null;
2480       END;
2481 
2482       OPEN csr_get_person_data(t_store_assact(j).person_id,l_effective_date);
2483       FETCH csr_get_person_data INTO l_full_name;
2484       CLOSE csr_get_person_data;
2485 
2486       OPEN csr_get_person_asg_data(t_store_assact(j).person_id, l_effective_date);
2487       FETCH csr_get_person_asg_data into l_insured_ssn;
2488       CLOSE csr_get_person_asg_data;
2489 
2490       l_str_er_name := '<ERNAME>'||l_employer_name||'</ERNAME>';
2491       l_str_er_ssn :=  '<ERSSN>'||l_employer_ssn||'</ERSSN>';
2492       l_str_year := '<YEAR>'||substr(p_effective_year,4,1)||'</YEAR>';
2493       l_str_mon  := '<MM>' || p_effective_month || '</MM>';
2494       l_str_dd  := '<DD>' || '01' || '</DD>';
2495       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_name), l_str_er_name);
2496       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_ssn), l_str_er_ssn);
2497       dbms_lob.writeAppend( l_xfdf_string, length(l_str_year), l_str_year);
2498       dbms_lob.writeAppend( l_xfdf_string, length(l_str_mon), l_str_mon);
2499       dbms_lob.writeAppend( l_xfdf_string, length(l_str_dd), l_str_dd);
2500       l_str_seq_no := '<SER-' || l ||'>'||l_tot_count||'</SER-'|| l || '>';
2501       l_str_ee_ssn :=  '<EMPLOYEE-SSN-' || l || '>'||l_insured_ssn ||'</EMPLOYEE-SSN-' || l || '>';
2502       l_str_ee_name := '<EMPLOYEE-NAME-'|| l || '>'|| substr(l_full_name,1,60) ||'</EMPLOYEE-NAME-'|| l || '>';
2503       l_str_bsd := '<BASIC-SALARY-DINARS-' || l ||'>'||substr(l_fm_l_basic_val,1,length(l_fm_l_basic_val)-3)||'</BASIC-SALARY-DINARS-'|| l || '>';
2504       l_str_bsf := '<BASIC-SALARY-FILLS-' || l ||'>'||substr(l_fm_l_basic_val,length(l_fm_l_basic_val)-1)||'</BASIC-SALARY-FILLS-'|| l || '>';
2505       l_str_aad := '<AA-DINARS-' || l ||'>'||substr(l_fm_l_accomodation_val,1,length(l_fm_l_accomodation_val)-3)||'</AA-DINARS-'|| l || '>';
2506       l_str_aaf := '<AA-FILLS-' || l ||'>'||substr(l_fm_l_accomodation_val,length(l_fm_l_accomodation_val)-1)||'</AA-FILLS-'|| l || '>';
2507       l_str_a1d := '<A1-DINARS-' || l ||'>'||substr(l_fm_l_allowance_1_val,1,length(l_fm_l_allowance_1_val)-3)||'</A1-DINARS-'|| l || '>';
2508       l_str_a1f := '<A1-FILLS-' || l ||'>'||substr(l_fm_l_allowance_1_val,length(l_fm_l_allowance_1_val)-1)||'</A1-FILLS-'|| l || '>';
2509       l_str_a2d := '<A2-DINARS-' || l ||'>'||substr(l_fm_l_allowance_2_val,1,length(l_fm_l_allowance_2_val)-3)||'</A2-DINARS-'|| l || '>';
2510       l_str_a2f := '<A2-FILLS-' || l ||'>'||substr(l_fm_l_allowance_2_val,length(l_fm_l_allowance_2_val)-1)||'</A2-FILLS-'|| l || '>';
2511       l_str_a3d := '<A3-DINARS-' || l ||'>'||substr(l_fm_l_allowance_3_val,1,length(l_fm_l_allowance_3_val)-3)||'</A3-DINARS-'|| l || '>';
2512       l_str_a3f := '<A3-FILLS-' || l ||'>'||substr(l_fm_l_allowance_3_val,length(l_fm_l_allowance_3_val)-1)||'</A3-FILLS-'|| l || '>';
2513       l_str_a4d := '<A4-DINARS-' || l ||'>'||substr(l_fm_l_allowance_4_val,1,length(l_fm_l_allowance_4_val)-3)||'</A4-DINARS-'|| l || '>';
2514       l_str_a4f := '<A4-FILLS-' || l ||'>'||substr(l_fm_l_allowance_4_val,length(l_fm_l_allowance_4_val)-1)||'</A4-FILLS-'|| l || '>';
2515       l_str_a5d := '<A5-DINARS-'|| l ||'>'||substr(l_fm_total_val,1,length(l_fm_total_val)-3)||'</A5-DINARS-'|| l || '>';
2516       l_str_a5f := '<A5-FILLS-' || l ||'>'||substr(l_fm_total_val,length(l_fm_total_val)-1)||'</A5-FILLS-'|| l || '>';
2517       dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
2518       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_ssn), l_str_ee_ssn);
2519       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
2520       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
2521       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
2522       dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
2523       dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
2524       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
2525       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
2526       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
2527       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
2528       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
2529       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
2530       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4d), l_str_a4d);
2531       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4f), l_str_a4f);
2532       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5d), l_str_a5d);
2533       dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5f), l_str_a5f);
2534       j := j + 1;
2535       l := l + 1;
2536       IF j > i THEN
2537         l_new_processed := 1;
2538       END IF;
2539       IF l_new_count = 12/*8*/ THEN
2540         l_str_pb := '<PB>'||'  '||'</PB>';
2541         dbms_lob.writeAppend( l_xfdf_string, length(l_str_pb),l_str_pb);
2542       	dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
2543       	l := 1;
2544         EXIT;
2545       END IF;
2546     END LOOP;
2547     IF l_new_processed = 1 THEN
2548       l_all_processed := 1;
2549 	If l_new_count <> 12 then
2550               l_str_pb := '<PB>'||'  '||'</PB>';
2551               dbms_lob.writeAppend( l_xfdf_string, length(l_str_pb),l_str_pb);
2552 	      dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
2553 	End If;
2554     END IF;
2555     END LOOP;
2556     dbms_lob.writeAppend( l_xfdf_string, length('</START>'),'</START>');
2557     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
2558     clob_to_blob(l_xfdf_string,l_xfdf_blob);
2559     hr_utility.set_location('Finished creating xml data for Procedure FORM6 ',20);
2560 EXCEPTION
2561         WHEN utl_file.invalid_path then
2562                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
2563                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2564                 hr_utility.raise_error;
2565 --
2566     WHEN utl_file.invalid_mode then
2567         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
2568         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2569                 hr_utility.raise_error;
2570 --
2571     WHEN utl_file.invalid_filehandle then
2572         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
2573         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2574                 hr_utility.raise_error;
2575 --
2576     WHEN utl_file.invalid_operation then
2577         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
2578         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2579                 hr_utility.raise_error;
2580 --
2581     WHEN utl_file.read_error then
2582         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
2583         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2584                 hr_utility.raise_error;
2585 --
2586     WHEN others THEN
2587        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
2588        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
2589        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
2590            hr_utility.raise_error;
2591   END FORM6;
2592   -------------------------------------------------------------------------------------------
2593   -------------------------------------------------------------------------------------------
2594   PROCEDURE FORM7
2595     (p_request_id              NUMBER
2596     ,p_report                  VARCHAR2
2597     ,p_business_group_id       NUMBER
2598     ,p_employer_id             NUMBER
2599     ,p_effective_month         VARCHAR2
2600     ,p_effective_year          VARCHAR2
2601     ,l_xfdf_blob               OUT NOCOPY BLOB
2602     )
2603    AS
2604 
2605     /*Cursor for fetching Local nationality for the BG */
2606      CURSOR csr_get_loc_nat IS
2607      SELECT org_information1
2608      FROM   hr_organization_information
2609      WHERE  organization_id = p_business_group_id
2610      AND    org_information_context = 'AE_BG_DETAILS';
2611 
2612     /*Cursor for fetching Employer SSN*/
2613      CURSOR csr_employer_ssn IS
2614      SELECT org_information1
2615      FROM   hr_organization_information
2616      WHERE  organization_id = p_employer_id
2617      AND    org_information_context = 'AE_LEGAL_EMPLOYER_DETAILS';
2618 
2619      /*Cursor for fetching Employer Name*/
2620      CURSOR csr_employer_name IS
2621      SELECT name
2622      FROM   hr_organization_units
2623     WHERE  organization_id = p_employer_id;
2624 
2625     /*Cursor for fetching list of new employees*/
2626     CURSOR csr_get_new_emp (l_effective_date date, l_nat_cd varchar2) IS
2627     SELECT distinct asg.person_id
2628                     ,paa.assignment_action_id
2629                     ,pos.date_start
2630     FROM   per_all_assignments_f asg
2631            ,pay_assignment_actions paa
2632            ,pay_payroll_actions ppa
2633            ,hr_soft_coding_keyflex hscl
2634            ,per_periods_of_service pos
2635            ,per_all_people_f ppf
2636     WHERE  asg.assignment_id = paa.assignment_id
2637     AND    paa.payroll_action_id = ppa.payroll_action_id
2638     AND    pos.period_of_service_id = asg.period_of_service_id
2639     AND    ppa.action_type in ('R','Q')
2640     AND    ppa.action_status = 'C'
2641     AND    paa.action_status IN ('C','S')
2642     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_effective_date, 'MM')
2643     AND    trunc(NVL(pos.actual_termination_date, to_date('31-12-4712','DD-MM-YYYY')),'MM') <> TRUNC(l_effective_date, 'MM')
2644     AND    trunc(pos.date_start, 'MM') = trunc(l_effective_date, 'MM')
2645     AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
2646     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
2647     AND    hscl.segment1 = to_char(p_employer_id)
2648     AND    ppf.person_id = asg.person_id
2649     AND    trunc(l_effective_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
2650     AND    ppf.per_information18 = l_nat_cd;
2651 
2652     rec_get_new_emp        csr_get_new_emp%ROWTYPE;
2653     /*Cursor for fetching list of terminated employees*/
2654     CURSOR csr_get_ter_emp(l_effective_date date , l_nat_cd varchar2) IS
2655     SELECT distinct asg.person_id
2656                     ,paa.assignment_action_id
2657                     ,pos.actual_termination_date
2658                     ,ppa.date_earned
2659     FROM   per_all_assignments_f asg
2660            ,pay_assignment_actions paa
2661            ,pay_payroll_actions ppa
2662            ,hr_soft_coding_keyflex hscl
2663            ,per_periods_of_service pos
2664            ,per_all_people_f ppf
2665     WHERE  asg.assignment_id = paa.assignment_id
2666     AND    paa.payroll_action_id = ppa.payroll_action_id
2667     AND    pos.period_of_service_id = asg.period_of_service_id
2668     AND    ppa.action_type in ('R','Q')
2669     AND    ppa.action_status = 'C'
2670     AND    paa.action_status IN ('C','S')
2671     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_effective_date, 'MM')
2672     AND    trunc(NVL(pos.actual_termination_date, to_date('31-12-4712','DD-MM-YYYY')),'MM') = TRUNC(l_effective_date, 'MM')
2673     AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
2674     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
2675     AND    hscl.segment1 = to_char(p_employer_id)
2676     AND    ppf.person_id = asg.person_id
2677     AND    trunc(l_effective_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
2678     AND    ppf.per_information18 = l_nat_cd;
2679 
2680     rec_get_ter_emp        csr_get_ter_emp%ROWTYPE;
2681     /*Cursor for fetching effective date of salary change*/
2682     CURSOR csr_get_salary_date (p_person_id NUMBER, l_effective_date date) IS
2683     SELECT date_earned, paa.assignment_action_id
2684     FROM   per_all_assignments_f asg
2685            ,pay_assignment_actions paa
2686            ,pay_payroll_actions ppa
2687            ,per_periods_of_service pos
2688     WHERE  asg.assignment_id = paa.assignment_id
2689     AND    paa.payroll_action_id = ppa.payroll_action_id
2690     AND    pos.period_of_service_id = asg.period_of_service_id
2691     AND    ppa.action_type in ('R','Q')
2692     AND    ppa.action_status = 'C'
2693     AND    paa.action_status IN ('C','S')
2694     AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
2695     AND    trunc(ppa.date_earned, 'MM') < TRUNC(l_effective_date, 'MM')
2696     AND    asg.person_id = p_person_id
2697     order by date_earned desc;
2698     rec_get_salary_date     csr_get_salary_date%ROWTYPE;
2699 
2700     /*Cursor for fetching list of employees who are neither new nor terminated*/
2701     CURSOR csr_get_cha_emp(l_effective_date date, l_nat_cd varchar2) IS
2702     SELECT distinct asg.person_id
2703                     ,paa.assignment_action_id
2704                     ,date_earned
2705     FROM   per_all_assignments_f asg
2706            ,pay_assignment_actions paa
2707            ,pay_payroll_actions ppa
2708            ,hr_soft_coding_keyflex hscl
2709            ,per_periods_of_service pos
2710            ,per_all_people_f ppf
2711     WHERE  asg.assignment_id = paa.assignment_id
2712     AND    paa.payroll_action_id = ppa.payroll_action_id
2713     AND    pos.period_of_service_id = asg.period_of_service_id
2714     AND    ppa.action_type in ('R','Q')
2715     AND    ppa.action_status = 'C'
2716     AND    paa.action_status IN ('C','S')
2717     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_effective_date, 'MM')
2718     AND    trunc(pos.date_start, 'MM') <> trunc(l_effective_date, 'MM')
2719     AND    trunc(NVL(pos.actual_termination_date, to_date('31-12-4712','DD-MM-YYYY')),'MM') <> TRUNC(l_effective_date, 'MM')
2720     AND    trunc(l_effective_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
2721     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
2722     AND    hscl.segment1 = to_char(p_employer_id)
2723     AND    ppf.person_id = asg.person_id
2724     AND    trunc(l_effective_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
2725     AND    ppf.per_information18 = l_nat_cd;
2726 
2727     rec_get_cha_emp        csr_get_cha_emp%ROWTYPE;
2728 
2729     /* Cursor for fetching the person data */
2730     	CURSOR csr_get_person_data (l_person_id number,l_effective_date date) IS
2731     	SELECT ppf.full_name
2732     	FROM	per_all_people_f ppf
2733     	WHERE 	ppf.person_id = l_person_id
2734     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
2735 
2736     /* Cursor for fetching the person's assignment data */
2737     	CURSOR csr_get_person_asg_data (l_person_id number,l_effective_date date) IS
2738     	SELECT hsck.segment3
2739     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
2740     	WHERE 	paf.person_id = l_person_id
2741     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
2742     	AND     hsck.segment1 = p_employer_id
2743     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
2744 
2745     /* Cursor for fetching Defined balance ids from Org EIT */
2746         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
2747         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10
2748         FROM    HR_ORGANIZATION_INFORMATION
2749         WHERE   Organization_id = l_bg_id
2750         AND	org_information_context = 'AE_SI_DETAILS';
2751 
2752     /*Cursor for fetching defined balance id*/
2753     CURSOR csr_get_si_id(p_user_name VARCHAR2)  IS
2754     SELECT  u.creator_id
2755     FROM    ff_user_entities  u,
2756             ff_database_items d
2757     WHERE   d.user_name = p_user_name
2758     AND     u.user_entity_id = d.user_entity_id
2759     AND     u.legislation_code = 'AE'
2760     AND     u.business_group_id is null
2761     AND     u.creator_type = 'B';
2762 
2763     TYPE def_bal_rec IS RECORD
2764     (def_bal_id                  NUMBER
2765     ,label_index		 VARCHAR2(40));
2766     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
2767     t_store_def_bal   t_def_bal_table;
2768     TYPE new_assact_rec IS RECORD
2769     (person_id                 NUMBER
2770     ,assignment_action_id      NUMBER
2771     ,date_start                DATE);
2772     TYPE t_new_assact_table IS TABLE OF new_assact_rec INDEX BY BINARY_INTEGER;
2773     t_new_store_assact   t_new_assact_table;
2774     TYPE ter_assact_rec IS RECORD
2775     (person_id                  NUMBER
2776     ,assignment_action_id       NUMBER
2777     ,actual_termination_date    DATE
2778     ,date_earned                DATE);
2779     TYPE t_ter_assact_table IS TABLE OF ter_assact_rec INDEX BY BINARY_INTEGER;
2780     t_ter_store_assact   t_ter_assact_table;
2781     TYPE cha_assact_rec IS RECORD
2782     (person_id                  NUMBER
2783     ,assignment_action_id       NUMBER
2784     ,date_earned                DATE
2785     ,changed_salary             NUMBER);
2786     TYPE t_cha_assact_table IS TABLE OF cha_assact_rec INDEX BY BINARY_INTEGER;
2787     t_cha_store_assact   t_cha_assact_table;
2788     l_employer_name varchar2(240);
2789     l_input_date varchar2(30);
2790     l_effective_date date;
2791     l_employer_ssn number;
2792     l_basic_sal_id number;
2793     z number;
2794     l_accomodation_id number;
2795     l_social_id number;
2796     l_child_social_id number;
2797     l_tp_id number;
2798     l_ol1_id number;
2799     l_ol2_id number;
2800     l_ol3_id number;
2801     l_ol4_id number;
2802     l_cost_of_living_id number;
2803     l_index number;
2804     i number;
2805     k number;
2806     m number;
2807     n number;
2808     j number;
2809     x number;
2810     l_tot_new_count number;
2811     l_tot_change_count number;
2812     l_tot_term_count number;
2813     l_new_processed number;
2814     l_ter_processed            NUMBER;
2815     l_all_processed number;
2816     l_new_count number;
2817     l_cha_processed            NUMBER;
2818     l_basic_val number(15,2);
2819     l_accomodation_val number(15,2);
2820     l_allowance_1_val number(15,2);
2821     l_allowance_2_val number(15,2);
2822     l_allowance_3_val number(15,2);
2823     l_allowance_4_val number(15,2);
2824     l number;
2825     L_FULL_NAME varchar2(240);
2826     l_insured_ssn varchar2(30);
2827     L_TOTAL number(15,2);
2828     l_total_term 	number(15,2);
2829     l_total_change 	number(15,2) ;
2830     l_fm_l_total_term	varchar2(100);
2831     l_fm_l_total_change	varchar2(100);
2832     L_FM_TOTAL_VAL varchar2(100);
2833     l_fm_l_basic_val varchar2(100);
2834     L_FM_L_ACCOMODATION_VAL varchar2(100);
2835     L_FM_L_ALLOWANCE_1_VAL varchar2(100);
2836     L_FM_L_ALLOWANCE_2_VAL varchar2(100);
2837     L_FM_L_ALLOWANCE_3_VAL varchar2(100);
2838     L_FM_L_TOTAL_HA varchar2(100);
2839     L_FM_L_TOTAL_A1 varchar2(100);
2840     L_FM_L_TOTAL_A2 varchar2(100);
2841     L_FM_L_TOTAL_A3 varchar2(100);
2842     L_FM_L_TOTAL_TOTAL varchar2(100);
2843     L_FM_L_TOTAL_A4 varchar2(100);
2844     L_FM_L_TOTAL_BASIC varchar2(100);
2845     L_TOTAL_HA number(15,2);
2846     L_TOTAL_A1 number(15,2);
2847     L_TOTAL_A2 number(15,2);
2848     L_TOTAL_A3 number(15,2);
2849     L_TOTAL_TOTAL number(15,2);
2850     L_TOTAL_A4 number(15,2);
2851     L_TOTAL_BASIC number(15,2);
2852     L_FM_SUBJECT_SI_VAL varchar2(100);
2853     L_FM_L_ALLOWANCE_4_VAL varchar2(100);
2854     L_FM_CHANGED_SALARY varchar2(100);
2855     l_xfdf_string              CLOB;
2856     l_diff_exist               NUMBER := 0;
2857     l_subject_si_val           NUMBER(15,2);
2858     l_subject_si_id		NUMBER;
2859     l_salary_effective_date    DATE;
2860     l_prev_salary              NUMBER(15,2);
2861     l_str_er_name varchar2(240);
2862     l_str_er_ssn varchar2(240);
2863     l_str_ee_name varchar2(240);
2864     l_str_ee_ssn varchar2(240);
2865     l_str_year varchar2(240);
2866     l_str_seq_no varchar2(240);
2867     l_str_bsd varchar2(240);
2868     l_str_bsf varchar2(240);
2869     l_str_aad varchar2(240);
2870     l_str_aaf varchar2(240);
2871     l_str_a1d varchar2(240);
2872     l_str_a1f varchar2(240);
2873     l_str_a2d varchar2(240);
2874     l_str_a2f varchar2(240);
2875     l_str_a3d varchar2(240);
2876     l_str_a3f varchar2(240);
2877     l_str_a4d varchar2(240);
2878     l_str_a4f varchar2(240);
2879     l_str_a5d varchar2(240);
2880     l_str_a5f varchar2(240);
2881     L_SI_ER_MONTH_ID number;
2882     L_SI_ADJ_ER_MONTH_ID number;
2883     L_CUR_SI_ER number (15,2);
2884     L_CUR_SI_ER_ADJ number (15,2);
2885     L_CUR_TOTAL number(15,2);
2886     L_PREV_SI_ER number (15,2);
2887     L_PREV_SI_ER_ADJ number (15,2);
2888     L_PREV_TOTAL number(15,2);
2889     L_DIFF_TOTAL number(15,2);
2890     L_FM_L_CUR_TOTAL varchar2(100);
2891     L_FM_L_PREV_TOTAL varchar2(100);
2892     L_FM_L_DIFF_TOTAL varchar2(100);
2893     L_STR_ER_CUR_TOTAL_D varchar2(240);
2894     L_STR_ER_CUR_TOTAL_F varchar2(240);
2895     L_STR_ER_PREV_TOTAL_D varchar2(240);
2896     L_STR_ER_PREV_TOTAL_F varchar2(240);
2897     L_STR_ER_DIFF_TOTAL_D varchar2(240);
2898     L_STR_ER_DIFF_TOTAL_F varchar2(240);
2899     tp number;
2900     l_subject_to_id number;
2901     l_nat_cd varchar2(30);
2902     l_si_ee_month_id number;
2903     l_si_adj_ee_month_id number;
2904     l_cur_si_ee number(15,2);
2905     l_cur_si_ee_adj number(15,2);
2906     l_prev_si_ee number(15,2);
2907     l_prev_si_ee_adj number(15,2);
2908     l_str_mon varchar2(240);
2909 
2910   BEGIN
2911       set_currency_mask(p_business_group_id);
2912       l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
2913       l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
2914       INSERT INTO fnd_sessions (session_id, effective_date)
2915     VALUES (userenv('sessionid'), l_effective_date);
2916     hr_utility.set_location('Entering FORM6 ',10);
2917 
2918     /* Fetch Local Nationality */
2919     OPEN csr_get_loc_nat;
2920     FETCH csr_get_loc_nat INTO l_nat_cd;
2921     CLOSE csr_get_loc_nat;
2922 
2923     /*Fetch Employer SSN*/
2924     OPEN csr_employer_ssn;
2925     FETCH csr_employer_ssn INTO l_employer_ssn;
2926     CLOSE csr_employer_ssn;
2927 
2928     /*Fetch Employer Name*/
2929     OPEN csr_employer_name;
2930     FETCH csr_employer_name INTO l_employer_name;
2931     CLOSE csr_employer_name;
2932 
2933     /* Fetch defined balance for defined balance EMPLOYER_SOCIAL_INSURANCE_EMPLOYER_MONTH and EMPLOYER_SOCIAL_INSURANCE_ADJUSTMENT_EMPLOYER_MONTH*/
2934     OPEN csr_get_si_id ('EMPLOYER_SOCIAL_INSURANCE_EMPLOYER_MONTH');
2935     FETCH csr_get_si_id into l_si_er_month_id;
2936     CLOSE csr_get_si_id;
2937 
2938     OPEN csr_get_si_id ('EMPLOYER_SOCIAL_INSURANCE_ADJUSTMENT_EMPLOYER_MONTH');
2939     FETCH csr_get_si_id into l_si_adj_er_month_id;
2940     CLOSE csr_get_si_id;
2941 
2942     OPEN csr_get_si_id ('EMPLOYEE_SOCIAL_INSURANCE_EMPLOYER_MONTH');
2943     FETCH csr_get_si_id into l_si_ee_month_id;
2944     CLOSE csr_get_si_id;
2945 
2946     OPEN csr_get_si_id ('EMPLOYEE_SOCIAL_INSURANCE_ADJUSTMENT_EMPLOYER_MONTH');
2947     FETCH csr_get_si_id into l_si_adj_ee_month_id;
2948     CLOSE csr_get_si_id;
2949 
2950     OPEN csr_get_si_id ('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
2951     FETCH csr_get_si_id into l_subject_to_id;
2952     CLOSE csr_get_si_id;
2953 
2954     /* Fetch values for Social insurance contribution values for Employer */
2955     /* Set the contexts for date earned as effective date*/
2956     pay_balance_pkg.set_context('DATE_EARNED', fnd_date.date_to_canonical(l_effective_date));
2957     pay_balance_pkg.set_context('TAX_UNIT_ID', p_employer_id);
2958     l_cur_si_er := pay_balance_pkg.get_value(l_si_er_month_id,NULL);
2959     l_cur_si_er_adj := pay_balance_pkg.get_value(l_si_adj_er_month_id,NULL);
2960     l_cur_si_ee := pay_balance_pkg.get_value(l_si_ee_month_id,NULL);
2961     l_cur_si_ee_adj := pay_balance_pkg.get_value(l_si_adj_ee_month_id,NULL);
2962     l_cur_total := l_cur_si_er + l_cur_si_er_adj + l_cur_si_ee + l_cur_si_ee_adj;
2963 
2964     /* Set the contexts for date earned as previous month*/
2965     pay_balance_pkg.set_context('DATE_EARNED', fnd_date.date_to_canonical(add_months(l_effective_date,-1)));
2966     pay_balance_pkg.set_context('TAX_UNIT_ID', p_employer_id);
2967     l_prev_si_er := pay_balance_pkg.get_value(l_si_er_month_id,NULL);
2968     l_prev_si_er_adj := pay_balance_pkg.get_value(l_si_adj_er_month_id,NULL);
2969     l_prev_si_ee := pay_balance_pkg.get_value(l_si_ee_month_id,NULL);
2970     l_prev_si_ee_adj := pay_balance_pkg.get_value(l_si_adj_ee_month_id,NULL);
2971     l_prev_total := l_prev_si_er + l_prev_si_er_adj + l_prev_si_ee + l_prev_si_ee_adj;
2972 
2973     l_diff_total := l_cur_total - l_prev_total;
2974 
2975       l_fm_l_cur_total := to_char(abs(l_cur_total),lg_format_mask);
2976       l_fm_l_prev_total := to_char(abs(l_prev_total),lg_format_mask);
2977       l_fm_l_diff_total := to_char(abs(l_diff_total),lg_format_mask);
2978 
2979      BEGIN
2980 
2981             	SELECT decode(l_cur_total/(abs(decode(l_cur_total,0,1,l_cur_total))*-1),1,'-'||l_fm_l_cur_total,l_fm_l_cur_total)
2982             	INTO l_fm_l_cur_total
2983             	FROM dual;
2984 
2985             	SELECT decode(l_prev_total/(abs(decode(l_prev_total,0,1,l_prev_total))*-1),1,'-'||l_fm_l_prev_total,l_fm_l_prev_total)
2986             	INTO l_fm_l_prev_total
2987             	FROM dual;
2988 
2989             	SELECT decode(l_diff_total/(abs(decode(l_diff_total,0,1,l_diff_total))*-1),1,'-'||l_fm_l_diff_total,l_fm_l_diff_total)
2990             	INTO l_fm_l_diff_total
2991             	FROM dual;
2992 
2993 
2994       EXCEPTION
2995       		WHEN no_data_found then
2996       			null;
2997       END;
2998 
2999 
3000     dbms_lob.createtemporary(l_xfdf_string,FALSE,DBMS_LOB.CALL);
3001     dbms_lob.open(l_xfdf_string,dbms_lob.lob_readwrite);
3002     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
3003     clob_to_blob(l_xfdf_string,l_xfdf_blob);
3004     dbms_lob.writeAppend( l_xfdf_string, length('<START>'),'<START>');
3005 
3006     OPEN csr_get_def_bal_ids (p_employer_id);
3007     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accomodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id;
3008     CLOSE csr_get_def_bal_ids;
3009 
3010     /*Fetch Defined Balance Id*/
3011     OPEN csr_get_si_id('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
3012     FETCH csr_get_si_id INTO l_subject_si_id;
3013     CLOSE csr_get_si_id;
3014     z := 1;
3015     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
3016     t_store_def_bal(z).label_index := get_index(1);
3017     z:= z+1;
3018     t_store_def_bal(z).def_bal_id := l_accomodation_id;
3019     t_store_def_bal(z).label_index := get_index(2);
3020     z := z + 1;
3021     l_index := 2;
3022     LOOP
3023    	If l_social_id is not null THEN
3024     		t_store_def_bal(z).def_bal_id := l_social_id;
3025     		t_store_def_bal(z).label_index := get_index(3);
3026     		z := z + 1;
3027     		l_index := l_index + 1;
3028     		EXIT WHEN z > 6;
3029     	End if;
3030     	If l_child_social_id is not null THEN
3031     		t_store_def_bal(z).def_bal_id := l_child_social_id;
3032     		t_store_def_bal(z).label_index := get_index(4);
3033     		z := z + 1;
3034     		l_index := l_index + 1;
3035 		EXIT WHEN z > 6;
3036     	End if;
3037     	If l_cost_of_living_id is not null THEN
3038     		t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
3039     		t_store_def_bal(z).label_index := get_index(5);
3040     		z := z + 1;
3041     		l_index := l_index + 1;
3042     		EXIT WHEN z > 6;
3043     	End if;
3044     	If l_tp_id is not null THEN
3045     		t_store_def_bal(z).def_bal_id := l_tp_id;
3046     	        t_store_def_bal(z).label_index := get_index(6);
3047     		z := z + 1;
3048     		l_index := l_index + 1;
3049 		EXIT WHEN z > 6;
3050     	End if;
3051     	If l_ol1_id is not null THEN
3052     		t_store_def_bal(z).def_bal_id := l_ol1_id;
3053     		t_store_def_bal(z).label_index := get_index(7);
3054     		z := z + 1;
3055     		l_index := l_index + 1;
3056     		EXIT WHEN z > 6;
3057     	End if;
3058     	If l_ol2_id is not null THEN
3059     		t_store_def_bal(z).def_bal_id := l_ol2_id;
3060 		t_store_def_bal(z).label_index := get_index(8);
3061     		z := z + 1;
3062     		l_index := l_index + 1;
3063     		EXIT WHEN z > 6;
3064     	End if;
3065     	If l_ol3_id is not null THEN
3066     		t_store_def_bal(z).def_bal_id := l_ol3_id;
3067     		t_store_def_bal(z).label_index := get_index(9);
3068     		z := z + 1;
3069     		l_index := l_index + 1;
3070     		EXIT WHEN z > 6;
3071     	End if;
3072     	If l_ol4_id is not null THEN
3073     		t_store_def_bal(z).def_bal_id := l_ol4_id;
3074     		t_store_def_bal(z).label_index := get_index(10);
3075     		z := z + 1;
3076     		l_index := l_index + 1;
3077     		EXIT WHEN z > 6;
3078     	End if;
3079     	If z < 7then
3080     		WHILE Z <=7LOOP
3081     			t_store_def_bal(z).def_bal_id := NULL;
3082     			t_store_def_bal(z).label_index := get_index(11);
3083     			z := z + 1;
3084     			EXIT WHEN z > 7;
3085     		END LOOP;
3086 	End If;
3087     	EXIT WHEN z >= 7;
3088     END LOOP;
3089     i := 0;
3090     k := 0;
3091     m := 0;
3092 
3093     OPEN csr_get_new_emp(l_effective_date,l_nat_cd);
3094     LOOP
3095       FETCH csr_get_new_emp INTO rec_get_new_emp;
3096       EXIT WHEN csr_get_new_emp%NOTFOUND;
3097       i := i + 1;
3098       t_new_store_assact(i).person_id := rec_get_new_emp.person_id;
3099       t_new_store_assact(i).assignment_action_id := rec_get_new_emp.assignment_action_id;
3100       t_new_store_assact(i).date_start := rec_get_new_emp.date_start;
3101     END LOOP;
3102     CLOSE csr_get_new_emp;
3103 
3104     OPEN csr_get_ter_emp(l_effective_date,l_nat_cd);
3105     LOOP
3106       FETCH csr_get_ter_emp INTO rec_get_ter_emp;
3107       EXIT WHEN csr_get_ter_emp%NOTFOUND;
3108       k := k + 1;
3109       t_ter_store_assact(k).person_id := rec_get_ter_emp.person_id;
3110       t_ter_store_assact(k).assignment_action_id := rec_get_ter_emp.assignment_action_id;
3111       t_ter_store_assact(k).actual_termination_date := rec_get_ter_emp.actual_termination_date;
3112       t_ter_store_assact(k).date_earned := rec_get_ter_emp.date_earned;
3113     END LOOP;
3114     CLOSE csr_get_ter_emp;
3115 
3116     OPEN csr_get_cha_emp(l_effective_date,l_nat_cd);
3117     LOOP
3118       FETCH csr_get_cha_emp INTO rec_get_cha_emp;
3119       EXIT WHEN csr_get_cha_emp%NOTFOUND;
3120       l_diff_exist := 0;
3121       l_subject_si_val := 0;
3122       l_subject_si_val := pay_balance_pkg.get_value(l_subject_si_id,rec_get_cha_emp.assignment_action_id);
3123       l_salary_effective_date := rec_get_cha_emp.date_earned;
3124       OPEN csr_get_salary_date (rec_get_cha_emp.person_id,l_effective_date);
3125       LOOP
3126         FETCH csr_get_salary_date INTO rec_get_salary_date;
3127         EXIT WHEN csr_get_salary_date%NOTFOUND;
3128         l_prev_salary := pay_balance_pkg.get_value(l_subject_si_id,rec_get_salary_date.assignment_action_id);
3129         IF l_prev_salary <> l_subject_si_val THEN
3130           l_diff_exist := 1;
3131           EXIT;
3132         END IF;
3133         EXIT;
3134       END LOOP;
3135       CLOSE csr_get_salary_date;
3136 
3137       IF l_diff_exist = 1 THEN
3138         m := m + 1;
3139         t_cha_store_assact(m).person_id := rec_get_cha_emp.person_id;
3140         t_cha_store_assact(m).assignment_action_id := rec_get_cha_emp.assignment_action_id;
3141         t_cha_store_assact(m).date_earned := rec_get_cha_emp.date_earned;
3142         t_cha_store_assact(m).changed_salary := l_subject_si_val;
3143       END IF;
3144     END LOOP;
3145     CLOSE csr_get_cha_emp;
3146 
3147     j := 1;
3148     l := 1;
3149     n := 1;
3150     IF i > 0  THEN
3151       l_new_processed := 0;
3152     ELSE
3153       l_new_processed := 1;
3154     END IF;
3155     IF k > 0  THEN
3156       l_ter_processed := 0;
3157     ELSE
3158       l_ter_processed := 1;
3159     END IF;
3160     IF m > 0  THEN
3161       l_cha_processed := 0;
3162     ELSE
3163       l_cha_processed := 1;
3164     END IF;
3165     l_all_processed := 0;
3166 
3167     l_tot_new_count := 0;
3168     l_tot_change_count := 0;
3169     l_tot_term_count := 0;
3170 
3171     WHILE l_all_processed  <> 1 LOOP
3172     --Writing data for new employees
3173     l_new_count := 0;
3174     dbms_lob.writeAppend( l_xfdf_string, length('<EMP-REC>'),'<EMP-REC>');
3175       l_str_er_name := '<ERNAME>'||l_employer_name||'</ERNAME>';
3176       l_str_er_ssn :=  '<ERSSN>'||l_employer_ssn||'</ERSSN>';
3177       l_str_year := '<YEAR>'||substr(p_effective_year,4,1)||'</YEAR>';
3178       l_str_mon := '<MONTH>'||p_effective_month||'</MONTH>';
3179       l_str_er_cur_total_d := '<CURRENT-TOTAL-DINARS>'||substr(l_fm_l_cur_total,1,length(l_fm_l_cur_total)-3)||'</CURRENT-TOTAL-DINARS>';
3180       l_str_er_cur_total_f := '<CURRENT-TOTAL-FILLS>'||substr(l_fm_l_cur_total,length(l_fm_l_cur_total)-1)||'</CURRENT-TOTAL-FILLS>';
3181       l_str_er_prev_total_d :=  '<PREV-TOTAL-DINARS>'||substr(l_fm_l_prev_total,1,length(l_fm_l_prev_total)-3)||'</PREV-TOTAL-DINARS>';
3182       l_str_er_prev_total_f :=  '<PREV-TOTAL-FILLS>'||substr(l_fm_l_prev_total,length(l_fm_l_prev_total)-1)||'</PREV-TOTAL-FILLS>';
3183       l_str_er_diff_total_d := '<DIFFERENCE-DINARS>'||substr(l_fm_l_diff_total,1,length(l_fm_l_diff_total)-3)||'</DIFFERENCE-DINARS>';
3184       l_str_er_diff_total_f := '<DIFFERENCE-FILLS>'||substr(l_fm_l_diff_total,length(l_fm_l_diff_total)-1)||'</DIFFERENCE-FILLS>';
3185       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_name), l_str_er_name);
3186       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_ssn), l_str_er_ssn);
3187       dbms_lob.writeAppend( l_xfdf_string, length(l_str_year), l_str_year);
3188       dbms_lob.writeAppend( l_xfdf_string, length(l_str_mon), l_str_mon);
3189       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_cur_total_d), l_str_er_cur_total_d);
3190       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_cur_total_f), l_str_er_cur_total_f);
3191       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_prev_total_d), l_str_er_prev_total_d);
3192       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_prev_total_f), l_str_er_prev_total_f);
3193       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_diff_total_d), l_str_er_diff_total_d);
3194       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_diff_total_f), l_str_er_diff_total_f);
3195       l_total_total := 0 ;
3196       l_total_basic := 0;
3197       l_total_ha :=0;
3198       L_TOTAL_A1 :=0;
3199       L_TOTAL_A2 :=0;
3200       L_TOTAL_A3 :=0;
3201       L_TOTAL_A4 :=0;
3202     WHILE j <= i LOOP
3203 /**** RESET ALL THE VARIABLES *****/
3204       l_basic_val := 0;
3205       l_accomodation_val := 0;
3206       l_allowance_1_val := 0;
3207       l_allowance_2_val := 0;
3208       l_allowance_3_val := 0;
3209       l_allowance_4_val := 0;
3210       l_total := 0;
3211       x := 1;
3212       IF t_store_def_bal(x).def_bal_id is not null THEN
3213 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3214 		x:= x + 1;
3215       ELSE
3216       		l_basic_val := 0;
3217       		x:= x + 1;
3218       END IF;
3219       IF t_store_def_bal(x).def_bal_id is not null THEN
3220 		l_accomodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3221 		x:= x + 1;
3222       ELSE
3223       		l_accomodation_val := 0;
3224       		x:= x + 1;
3225       END IF;
3226       IF t_store_def_bal(x).def_bal_id is not null THEN
3227 		l_allowance_1_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3228 		x:= x + 1;
3229       ELSE
3230       		l_allowance_1_val := 0;
3231       		x:= x + 1;
3232       END IF;
3233       IF t_store_def_bal(x).def_bal_id is not null THEN
3234 		l_allowance_2_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3235 		x:= x + 1;
3236       ELSE
3237       		l_allowance_2_val := 0;
3238       		x:= x + 1;
3239       END IF;
3240       IF t_store_def_bal(x).def_bal_id is not null THEN
3241 		l_allowance_3_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3242 		x:= x + 1;
3243       ELSE
3244       		l_allowance_3_val := 0;
3245       		x:= x + 1;
3246       END IF;
3247       IF t_store_def_bal(x).def_bal_id is not null THEN
3248 		l_allowance_4_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_new_store_assact(j).assignment_action_id);
3249       ELSE
3250       		l_allowance_4_val := 0;
3251       END IF;
3252       l_new_count := l_new_count+1;
3253 
3254 	If l_new_count <> 6 then
3255 	      l_tot_new_count := l_tot_new_count + 1;
3256 	End If;
3257       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
3258       l_fm_l_accomodation_val := to_char(abs(l_accomodation_val),lg_format_mask);
3259       l_fm_l_allowance_1_val := to_char(abs(l_allowance_1_val),lg_format_mask);
3260       l_fm_l_allowance_2_val := to_char(abs(l_allowance_2_val),lg_format_mask);
3261       l_fm_l_allowance_3_val := to_char(abs(l_allowance_3_val),lg_format_mask);
3262       l_fm_l_allowance_4_val := to_char(abs(l_allowance_4_val),lg_format_mask);
3263 
3264 /*      l_total := l_basic_val + l_accomodation_val + l_allowance_1_val + l_allowance_2_val + l_allowance_3_val + l_allowance_4_val;*/
3265 
3266       l_total := pay_balance_pkg.get_value(l_subject_to_id ,t_new_store_assact(j).assignment_action_id);
3267       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
3268       l_subject_si_val := 0;
3269       l_subject_si_val := pay_balance_pkg.get_value(l_subject_si_id,t_new_store_assact(j).assignment_action_id);
3270       l_fm_subject_si_val := to_char(abs(l_subject_si_val),lg_format_mask);
3271 
3272 
3273      BEGIN
3274 
3275             	SELECT decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val)
3276             	INTO l_fm_l_basic_val
3277             	FROM dual;
3278 
3279             	SELECT decode(l_accomodation_val/(abs(decode(l_accomodation_val,0,1,l_accomodation_val))*-1),1,'-'||l_fm_l_accomodation_val,l_fm_l_accomodation_val)
3280             	INTO l_fm_l_accomodation_val
3281             	FROM dual;
3282 
3283             	SELECT decode(l_allowance_1_val/(abs(decode(l_allowance_1_val,0,1,l_allowance_1_val))*-1),1,'-'||l_fm_l_allowance_1_val,l_fm_l_allowance_1_val)
3284             	INTO l_fm_l_allowance_1_val
3285             	FROM dual;
3286 
3287             	SELECT decode(l_allowance_2_val/(abs(decode(l_allowance_2_val,0,1,l_allowance_2_val))*-1),1,'-'||l_fm_l_allowance_2_val,l_fm_l_allowance_2_val)
3288             	INTO l_fm_l_allowance_2_val
3289             	FROM dual;
3290 
3291             	SELECT decode(l_allowance_3_val/(abs(decode(l_allowance_3_val,0,1,l_allowance_3_val))*-1),1,'-'||l_fm_l_allowance_3_val,l_fm_l_allowance_3_val)
3292             	INTO l_fm_l_allowance_3_val
3293             	FROM dual;
3294 
3295             	SELECT decode(l_allowance_4_val/(abs(decode(l_allowance_4_val,0,1,l_allowance_4_val))*-1),1,'-'||l_fm_l_allowance_4_val,l_fm_l_allowance_4_val)
3296             	INTO l_fm_l_allowance_4_val
3297             	FROM dual;
3298 
3299             	SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
3300             	INTO l_fm_total_val
3301             	FROM dual;
3302 
3303             	SELECT decode(l_subject_si_val/(abs(decode(l_subject_si_val,0,1,l_subject_si_val))*-1),1,'-'||l_fm_subject_si_val,l_fm_subject_si_val)
3304             	INTO l_fm_subject_si_val
3305             	FROM dual;
3306 
3307       EXCEPTION
3308       		WHEN no_data_found then
3309       			null;
3310       END;
3311 
3312 
3313       OPEN csr_get_person_data(t_new_store_assact(j).person_id,l_effective_date);
3314       FETCH csr_get_person_data INTO l_full_name;
3315       CLOSE csr_get_person_data;
3316 
3317       OPEN csr_get_person_asg_data(t_new_store_assact(j).person_id, l_effective_date);
3318       FETCH csr_get_person_asg_data into l_insured_ssn;
3319       CLOSE csr_get_person_asg_data;
3320 
3321 	If l_new_count <> 6 then
3322 	      l_str_seq_no := '<SER-' || l_new_count ||'>'||l_tot_new_count||'</SER-'|| l_new_count || '>';
3323 	      l_str_ee_name := '<EMPLOYEE-NAME-'|| l_new_count || '>'|| substr(l_full_name,1,60) ||'</EMPLOYEE-NAME-'|| l_new_count || '>';
3324 	      l_str_bsd := '<BASIC-SALARY-DINARS-' || l_new_count 		||'>'||substr(l_fm_l_basic_val,1,length(l_fm_l_basic_val)-3)||'</BASIC-SALARY-DINARS-'|| l_new_count || '>';
3325 	      l_str_bsf := '<BASIC-SALARY-FILLS-' || l_new_count ||'>'||substr(l_fm_l_basic_val,length(l_fm_l_basic_val)-1)||'</BASIC-SALARY-FILLS-'|| 		l_new_count || '>';
3326 	      l_str_aad := '<HOUSING-ALLOWANCE-DINARS-' || l_new_count 		||'>'||substr(l_fm_l_accomodation_val,1,length(l_fm_l_accomodation_val)-3)||'</HOUSING-ALLOWANCE-DINARS-'|| l_new_count || '>';
3327 	      l_str_aaf := '<HOUSING-ALLOWANCE-FILLS-' || l_new_count 		||'>'||substr(l_fm_l_accomodation_val,length(l_fm_l_accomodation_val)-1)||'</HOUSING-ALLOWANCE-FILLS-'|| l_new_count || '>';
3328 	      l_str_a1d := '<A1-DINARS-' || l_new_count ||'>'||substr(l_fm_l_allowance_1_val,1,length(l_fm_l_allowance_1_val)-3)||'</A1-DINARS-'|| l_new_count 		|| '>';
3329 	      l_str_a1f := '<A1-FILLS-' || l_new_count ||'>'||substr(l_fm_l_allowance_1_val,length(l_fm_l_allowance_1_val)-1)||'</A1-FILLS-'|| l_new_count || 		'>';
3330 	      l_str_a2d := '<A2-DINARS-' || l_new_count ||'>'||substr(l_fm_l_allowance_2_val,1,length(l_fm_l_allowance_2_val)-3)||'</A2-DINARS-'|| l_new_count 		|| '>';
3331 	      l_str_a2f := '<A2-FILLS-' || l_new_count ||'>'||substr(l_fm_l_allowance_2_val,length(l_fm_l_allowance_2_val)-1)||'</A2-FILLS-'|| l_new_count || 		'>';
3332 	      l_str_a3d := '<A3-DINARS-' || l_new_count ||'>'||substr(l_fm_l_allowance_3_val,1,length(l_fm_l_allowance_3_val)-3)||'</A3-DINARS-'|| l_new_count 		|| '>';
3333 	      l_str_a3f := '<A3-FILLS-' || l_new_count ||'>'||substr(l_fm_l_allowance_3_val,length(l_fm_l_allowance_3_val)-1)||'</A3-FILLS-'|| l_new_count || 		'>';
3334 	      l_str_a4d := '<A4-DINARS-' || l_new_count ||'>'||substr(l_fm_l_allowance_4_val,1,length(l_fm_l_allowance_4_val)-3)||'</A4-DINARS-'|| l_new_count 		|| '>';
3335 	      l_str_a4f := '<A4-FILLS-' || l_new_count ||'>'||substr(l_fm_l_allowance_4_val,length(l_fm_l_allowance_4_val)-1)||'</A4-FILLS-'|| l_new_count || 		'>';
3336 	      l_str_a5d := '<TOTAL-DINARS-'|| l_new_count ||'>'||substr(l_fm_total_val,1,length(l_fm_total_val)-3)||'</TOTAL-DINARS-'|| l_new_count || '>';
3337 	      l_str_a5f := '<TOTAL-FILLS-' || l_new_count ||'>'||substr(l_fm_total_val,length(l_fm_total_val)-1)||'</TOTAL-FILLS-'|| l_new_count || 		'>';
3338 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3339 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
3340 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3341 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3342 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
3343 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
3344 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
3345 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
3346 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
3347 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
3348 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
3349 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
3350 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4d), l_str_a4d);
3351 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4f), l_str_a4f);
3352 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5d), l_str_a5d);
3353 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5f), l_str_a5f);
3354 	          L_TOTAL_HA := L_TOTAL_HA + l_accomodation_val;
3355 	          L_TOTAL_A1 := L_TOTAL_A1 + l_allowance_1_val;
3356 	          L_TOTAL_A2 := L_TOTAL_A2 + l_allowance_2_val;
3357 	          L_TOTAL_A3 := L_TOTAL_A3 + l_allowance_3_val;
3358 	          L_TOTAL_TOTAL := L_TOTAL_TOTAL + l_total;
3359 	          L_TOTAL_A4  := L_TOTAL_A4 + l_allowance_4_val;
3360 	          l_total_basic := l_total_basic + l_basic_val;
3361 	END If;
3362 	If l_new_count <> 6 then
3363    		j := j + 1;
3364       	End if;
3365 	IF (j > i and l_new_count <> 6) then
3366 
3367 	                tp := l_new_count;
3368                         WHILE tp <=6 LOOP
3369                                 l_str_seq_no := '<SER-' || tp ||'>'||'   ' ||'</SER-'|| tp || '>';
3370                                 dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3371                                 tp := tp + 1;
3372                         END LOOP;
3373 
3374 
3375 		      l_fm_l_total_basic := to_char(abs(l_total_basic),lg_format_mask);
3376 		      l_fm_l_total_ha := to_char(abs(L_TOTAL_HA),lg_format_mask);
3377 		      l_fm_l_total_a1 := to_char(abs(L_TOTAL_A1),lg_format_mask);
3378 		      l_fm_l_total_a2 := to_char(abs(L_TOTAL_A2),lg_format_mask);
3379 		      l_fm_l_total_a3 := to_char(abs(L_TOTAL_A3),lg_format_mask);
3380       		      l_fm_l_total_a4 := to_char(abs(L_TOTAL_A4),lg_format_mask);
3381       		      l_fm_l_total_total := to_char(abs(L_TOTAL_TOTAL),lg_format_mask);
3382 
3383 
3384 		     BEGIN
3385 
3386 				SELECT decode(l_total_basic/(abs(decode(l_total_basic,0,1,l_total_basic))*-1),1,'-'||l_fm_l_total_basic,l_fm_l_total_basic)
3387 				INTO l_fm_l_total_basic
3388 				FROM dual;
3389 
3390 				SELECT decode(L_TOTAL_HA/(abs(decode(L_TOTAL_HA,0,1,L_TOTAL_HA))*-1),1,'-'||l_fm_l_total_ha,l_fm_l_total_ha)
3391 				INTO l_fm_l_total_ha
3392 				FROM dual;
3393 
3394 				SELECT decode(L_TOTAL_A1/(abs(decode(L_TOTAL_A1,0,1,L_TOTAL_A1))*-1),1,'-'||l_fm_l_total_a1,l_fm_l_total_a1)
3395 				INTO l_fm_l_total_a1
3396 				FROM dual;
3397 
3398 				SELECT decode(L_TOTAL_A2/(abs(decode(L_TOTAL_A2,0,1,L_TOTAL_A2))*-1),1,'-'||l_fm_l_total_a2,l_fm_l_total_a2)
3399 				INTO l_fm_l_total_a2
3400 				FROM dual;
3401 
3402 				SELECT decode(L_TOTAL_A3/(abs(decode(L_TOTAL_A3,0,1,L_TOTAL_A3))*-1),1,'-'||l_fm_l_total_a3,l_fm_l_total_a3)
3403 				INTO l_fm_l_total_a3
3404 				FROM dual;
3405 
3406 				SELECT decode(L_TOTAL_A4/(abs(decode(L_TOTAL_A4,0,1,L_TOTAL_A4))*-1),1,'-'||l_fm_l_total_a4,l_fm_l_total_a4)
3407 				INTO l_fm_l_total_a4
3408 				FROM dual;
3409 
3410 				SELECT decode(L_TOTAL_TOTAL/(abs(decode(L_TOTAL_TOTAL,0,1,L_TOTAL_TOTAL))*-1),1,'-'||l_fm_l_total_total,l_fm_l_total_total)
3411 				INTO l_fm_l_total_total
3412 				FROM dual;
3413 
3414 		      EXCEPTION
3415 				WHEN no_data_found then
3416 					null;
3417 		      END;
3418 
3419 
3420 	      l_str_bsd := '<BASIC-DINARS-TOTAL>'||substr(l_fm_l_total_basic,1,length(l_fm_l_total_basic)-3)||'</BASIC-DINARS-TOTAL>';
3421 	      l_str_bsf := '<BASIC-FILLS-TOTAL>'||substr(l_fm_l_total_basic,length(l_fm_l_total_basic)-1)||'</BASIC-FILLS-TOTAL>';
3422 	      l_str_aad := '<HOUSING-DINARS-TOTAL>'||substr(l_fm_l_total_ha,1,length(l_fm_l_total_ha)-3)||'</HOUSING-DINARS-TOTAL>';
3423 	      l_str_aaf := '<HOUSING-FILLS-TOTAL>'||substr(l_fm_l_total_ha,length(l_fm_l_total_ha)-1)||'</HOUSING-FILLS-TOTAL>';
3424 	      l_str_a1d := '<A1-DINARS-TOTAL>'||substr(l_fm_l_total_a1,1,length(l_fm_l_total_a1)-3)||'</A1-DINARS-TOTAL>';
3425 	      l_str_a1f := '<A1-FILLS-TOTAL>'||substr(l_fm_l_total_a1,length(l_fm_l_total_a1)-1)||'</A1-FILLS-TOTAL>';
3426 	      l_str_a2d := '<A2-DINARS-TOTAL>'||substr(l_fm_l_total_a2,1,length(l_fm_l_total_a2)-3)||'</A2-DINARS-TOTAL>';
3427 	      l_str_a2f := '<A2-FILLS-TOTAL>'||substr(l_fm_l_total_a2,length(l_fm_l_total_a2)-1)||'</A2-FILLS-TOTAL>';
3428 	      l_str_a3d := '<A3-DINARS-TOTAL>'||substr(l_fm_l_total_a3,1,length(l_fm_l_total_a3)-3)||'</A3-DINARS-TOTAL>';
3429 	      l_str_a3f := '<A3-FILLS-TOTAL>'||substr(l_fm_l_total_a3,length(l_fm_l_total_a3)-1)||'</A3-FILLS-TOTAL>';
3430 	      l_str_a4d := '<A4-DINARS-TOTAL>'||substr(l_fm_l_total_a4,1,length(l_fm_l_total_a4)-3)||'</A4-DINARS-TOTAL>';
3431 	      l_str_a4f := '<A4-FILLS-TOTAL>'||substr(l_fm_l_total_a4,length(l_fm_l_total_a4)-1)||'</A4-FILLS-TOTAL>';
3432 	      l_str_a5d := '<TOTAL-DINARS-TOTAL>'||substr(l_fm_l_total_total,1,length(l_fm_l_total_total)-3)||'</TOTAL-DINARS-TOTAL>';
3433 	      l_str_a5f := '<TOTAL-FILLS-TOTAL>'||substr(l_fm_l_total_total,length(l_fm_l_total_total)-1)||'</TOTAL-FILLS-TOTAL>';
3434 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3435 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3436 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
3437 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
3438 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
3439 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
3440 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
3441 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
3442 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
3443 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
3444 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4d), l_str_a4d);
3445 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4f), l_str_a4f);
3446 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5d), l_str_a5d);
3447 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5f), l_str_a5f);
3448 	  /**************    dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); **********/
3449 	END IF;
3450       IF j > i THEN
3451         l_new_processed := 1;
3452         EXIT;
3453       END IF;
3454       IF l_new_count = 6 THEN
3455 		      l_fm_l_total_basic := to_char(abs(l_total_basic),lg_format_mask);
3456 		      l_fm_l_total_ha := to_char(abs(L_TOTAL_HA),lg_format_mask);
3457 		      l_fm_l_total_a1 := to_char(abs(L_TOTAL_A1),lg_format_mask);
3458 		      l_fm_l_total_a2 := to_char(abs(L_TOTAL_A2),lg_format_mask);
3459 		      l_fm_l_total_a3 := to_char(abs(L_TOTAL_A3),lg_format_mask);
3460       		      l_fm_l_total_a4 := to_char(abs(L_TOTAL_A4),lg_format_mask);
3461       		      l_fm_l_total_total := to_char(abs(L_TOTAL_TOTAL),lg_format_mask);
3462 
3463 		     BEGIN
3464 
3465 				SELECT decode(l_total_basic/(abs(decode(l_total_basic,0,1,l_total_basic))*-1),1,'-'||l_fm_l_total_basic,l_fm_l_total_basic)
3466 				INTO l_fm_l_total_basic
3467 				FROM dual;
3468 
3469 				SELECT decode(L_TOTAL_HA/(abs(decode(L_TOTAL_HA,0,1,L_TOTAL_HA))*-1),1,'-'||l_fm_l_total_ha,l_fm_l_total_ha)
3470 				INTO l_fm_l_total_ha
3471 				FROM dual;
3472 
3473 				SELECT decode(L_TOTAL_A1/(abs(decode(L_TOTAL_A1,0,1,L_TOTAL_A1))*-1),1,'-'||l_fm_l_total_a1,l_fm_l_total_a1)
3474 				INTO l_fm_l_total_a1
3475 				FROM dual;
3476 
3477 				SELECT decode(L_TOTAL_A2/(abs(decode(L_TOTAL_A2,0,1,L_TOTAL_A2))*-1),1,'-'||l_fm_l_total_a2,l_fm_l_total_a2)
3478 				INTO l_fm_l_total_a2
3479 				FROM dual;
3480 
3481 				SELECT decode(L_TOTAL_A3/(abs(decode(L_TOTAL_A3,0,1,L_TOTAL_A3))*-1),1,'-'||l_fm_l_total_a3,l_fm_l_total_a3)
3482 				INTO l_fm_l_total_a3
3483 				FROM dual;
3484 
3485 				SELECT decode(L_TOTAL_A4/(abs(decode(L_TOTAL_A4,0,1,L_TOTAL_A4))*-1),1,'-'||l_fm_l_total_a4,l_fm_l_total_a4)
3486 				INTO l_fm_l_total_a4
3487 				FROM dual;
3488 
3489 				SELECT decode(L_TOTAL_TOTAL/(abs(decode(L_TOTAL_TOTAL,0,1,L_TOTAL_TOTAL))*-1),1,'-'||l_fm_l_total_total,l_fm_l_total_total)
3490 				INTO l_fm_l_total_total
3491 				FROM dual;
3492 
3493 		      EXCEPTION
3494 				WHEN no_data_found then
3495 					null;
3496 		      END;
3497 
3498 
3499 	      l_str_bsd := '<BASIC-DINARS-TOTAL>'||substr(l_fm_l_total_basic,1,length(l_fm_l_total_basic)-3)||'</BASIC-DINARS-TOTAL>';
3500 	      l_str_bsf := '<BASIC-FILLS-TOTAL>'||substr(l_fm_l_total_basic,length(l_fm_l_total_basic)-1)||'</BASIC-FILLS-TOTAL>';
3501 	      l_str_aad := '<HOUSING-DINARS-TOTAL>'||substr(l_fm_l_total_ha,1,length(l_fm_l_total_ha)-3)||'</HOUSING-DINARS-TOTAL>';
3502 	      l_str_aaf := '<HOUSING-FILLS-TOTAL>'||substr(l_fm_l_total_ha,length(l_fm_l_total_ha)-1)||'</HOUSING-FILLS-TOTAL>';
3503 	      l_str_a1d := '<A1-DINARS-TOTAL>'||substr(l_fm_l_total_a1,1,length(l_fm_l_total_a1)-3)||'</A1-DINARS-TOTAL>';
3504 	      l_str_a1f := '<A1-FILLS-TOTAL>'||substr(l_fm_l_total_a1,length(l_fm_l_total_a1)-1)||'</A1-FILLS-TOTAL>';
3505 	      l_str_a2d := '<A2-DINARS-TOTAL>'||substr(l_fm_l_total_a2,1,length(l_fm_l_total_a2)-3)||'</A2-DINARS-TOTAL>';
3506 	      l_str_a2f := '<A2-FILLS-TOTAL>'||substr(l_fm_l_total_a2,length(l_fm_l_total_a2)-1)||'</A2-FILLS-TOTAL>';
3507 	      l_str_a3d := '<A3-DINARS-TOTAL>'||substr(l_fm_l_total_a3,1,length(l_fm_l_total_a3)-3)||'</A3-DINARS-TOTAL>';
3508 	      l_str_a3f := '<A3-FILLS-TOTAL>'||substr(l_fm_l_total_a3,length(l_fm_l_total_a3)-1)||'</A3-FILLS-TOTAL>';
3509 	      l_str_a4d := '<A4-DINARS-TOTAL>'||substr(l_fm_l_total_a4,1,length(l_fm_l_total_a4)-3)||'</A4-DINARS-TOTAL>';
3510 	      l_str_a4f := '<A4-FILLS-TOTAL>'||substr(l_fm_l_total_a4,length(l_fm_l_total_a4)-1)||'</A4-FILLS-TOTAL>';
3511 	      l_str_a5d := '<TOTAL-DINARS-TOTAL>'||substr(l_fm_l_total_total,1,length(l_fm_l_total_total)-3)||'</TOTAL-DINARS-TOTAL>';
3512 	      l_str_a5f := '<TOTAL-FILLS-TOTAL>'||substr(l_fm_l_total_total,length(l_fm_l_total_total)-1)||'</TOTAL-FILLS-TOTAL>';
3513 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3514 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3515 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
3516 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
3517 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
3518 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
3519 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
3520 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
3521 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
3522 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
3523 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4d), l_str_a4d);
3524 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a4f), l_str_a4f);
3525 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5d), l_str_a5d);
3526 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a5f), l_str_a5f);
3527 	     /************** dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); **********/
3528         EXIT;
3529       END IF;
3530     END LOOP;
3531     --Writing data for terminated employees
3532     l_new_count := 0;
3533     l_total_term := 0;
3534 
3535     WHILE l <= k LOOP
3536       l_subject_si_val := 0;
3537       l_subject_si_val := pay_balance_pkg.get_value(l_subject_si_id,t_ter_store_assact(l).assignment_action_id);
3538 
3539       OPEN csr_get_person_data(t_ter_store_assact(l).person_id,l_effective_date);
3540       FETCH csr_get_person_data INTO l_full_name;
3541       CLOSE csr_get_person_data;
3542 
3543       OPEN csr_get_person_asg_data(t_ter_store_assact(l).person_id, l_effective_date);
3544       FETCH csr_get_person_asg_data into l_insured_ssn;
3545       CLOSE csr_get_person_asg_data;
3546 
3547       l_new_count := l_new_count+1;
3548 	If l_new_count <> 5 then
3549 	      l_tot_term_count := l_tot_term_count + 1;
3550 	End If;
3551 
3552       l_fm_subject_si_val := to_char(abs(l_subject_si_val),lg_format_mask);
3553 
3554 	BEGIN
3555 		SELECT decode(l_subject_si_val/(abs(decode(l_subject_si_val,0,1,l_subject_si_val))*-1),1,'-'||l_fm_subject_si_val,l_fm_subject_si_val)
3556 		INTO l_fm_subject_si_val
3557 		FROM dual;
3558 
3559       EXCEPTION
3560 		WHEN no_data_found then
3561 			null;
3562       END;
3563 
3564 	IF l_new_count <> 5 then
3565 	      l_str_seq_no := '<SER-T-' || l_new_count ||'>'||l_tot_term_count||'</SER-T-'|| l_new_count || '>';
3566 	      l_str_ee_ssn := '<TERM-SSN-'|| l_new_count || '>'|| l_insured_ssn ||'</TERM-SSN-'|| l_new_count || '>';
3567 	      l_str_ee_name := '<TERM-EMPLOYEE-NAME-'|| l_new_count || '>'|| substr(l_full_name,1,60) ||'</TERM-EMPLOYEE-NAME-'|| l_new_count || '>';
3568 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3569 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_ssn), l_str_ee_ssn);
3570 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
3571 	      l_str_a1d := '<TERM-DINARS-' || l_new_count ||'>'||substr(l_fm_subject_si_val,1,length(l_fm_subject_si_val)-3)||'</TERM-DINARS-'|| l_new_count || 		'>';
3572 	      l_str_a1f := '<TERM-FILLS-' || l_new_count ||'>'||substr(l_fm_subject_si_val,length(l_fm_subject_si_val)-1)||'</TERM-FILLS-'|| l_new_count || '>';
3573 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
3574 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
3575 	      l_total_term := l_total_term + l_subject_si_val;
3576 	END If;
3577 	If l_new_count <> 5 then
3578 		l:= l + 1;
3579 	End If;
3580 	If (l > k and  l_new_count <> 5) then
3581 
3582 	                tp := l_new_count;
3583                         WHILE tp <= 5  LOOP
3584                                 l_str_seq_no := '<SER-T-' || tp ||'>'||'  '||'</SER-T-'|| tp || '>';
3585                                 dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3586                                 tp := tp + 1;
3587                         END LOOP;
3588 
3589 
3590 	      l_fm_l_total_term := to_char(abs(l_total_term),lg_format_mask);
3591 
3592 		BEGIN
3593 			SELECT decode(l_total_term/(abs(decode(l_total_term,0,1,l_total_term))*-1),1,'-'||l_fm_l_total_term,l_fm_l_total_term)
3594 			INTO l_fm_l_total_term
3595 			FROM dual;
3596 
3597 	      EXCEPTION
3598 			WHEN no_data_found then
3599 				null;
3600 	      END;
3601 
3602 	      l_str_bsd := '<TERM-DINARS-TOTAL>'||substr(l_fm_l_total_term,1,length(l_fm_l_total_term)-3)||'</TERM-DINARS-TOTAL>';
3603 	      l_str_bsf := '<TERM-FILLS-TOTAL>'||substr(l_fm_l_total_term,length(l_fm_l_total_term)-1)||'</TERM-FILLS-TOTAL>';
3604 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3605 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3606 	     /************** dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); **********/
3607 	End If;
3608       IF l > k THEN
3609         l_ter_processed := 1;
3610         EXIT;
3611       END IF;
3612       IF l_new_count = 5 THEN
3613 	      l_fm_l_total_term := to_char(l_total_term,lg_format_mask);
3614 
3615 		BEGIN
3616 			SELECT decode(l_total_term/(abs(decode(l_total_term,0,1,l_total_term))*-1),1,'-'||l_fm_l_total_term,l_fm_l_total_term)
3617 			INTO l_fm_l_total_term
3618 			FROM dual;
3619 
3620 	      EXCEPTION
3621 			WHEN no_data_found then
3622 				null;
3623 	      END;
3624 
3625 	      l_str_bsd := '<TERM-DINARS-TOTAL>'||substr(l_fm_l_total_term,1,length(l_fm_l_total_term)-3)||'</TERM-DINARS-TOTAL>';
3626 	      l_str_bsf := '<TERM-FILLS-TOTAL>'||substr(l_fm_l_total_term,length(l_fm_l_total_term)-1)||'</TERM-FILLS-TOTAL>';
3627 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3628 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3629 	    /***********  dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); ************/
3630         EXIT;
3631       END IF;
3632     END LOOP;
3633     --Writing data for employees with changed salary
3634     l_new_count := 0;
3635     l_total_change := 0;
3636 
3637     WHILE n <= m LOOP
3638       l_subject_si_val := 0;
3639       l_subject_si_val := pay_balance_pkg.get_value(l_subject_si_id,t_cha_store_assact(n).assignment_action_id);
3640 
3641       OPEN csr_get_person_data(t_cha_store_assact(n).person_id,l_effective_date);
3642       FETCH csr_get_person_data INTO l_full_name;
3643       CLOSE csr_get_person_data;
3644 
3645       OPEN csr_get_person_asg_data(t_cha_store_assact(n).person_id, l_effective_date);
3646       FETCH csr_get_person_asg_data into l_insured_ssn;
3647       CLOSE csr_get_person_asg_data;
3648 
3649       l_new_count := l_new_count+1;
3650 	If l_new_count <> 5 then
3651 	      l_tot_change_count := l_tot_change_count + 1;
3652 	End If;
3653       l_fm_changed_salary := to_char(abs(l_subject_si_val),lg_format_mask);
3654 
3655 		BEGIN
3656 			SELECT decode(l_subject_si_val/(abs(decode(l_subject_si_val,0,1,l_subject_si_val))*-1),1,'-'||l_fm_changed_salary,l_fm_changed_salary)
3657 			INTO l_fm_changed_salary
3658 			FROM dual;
3659 
3660 	      EXCEPTION
3661 			WHEN no_data_found then
3662 				null;
3663 	      END;
3664 
3665 	IF l_new_count <> 5 then
3666 	      l_str_seq_no := '<SER-C-' || l_new_count ||'>'||l_tot_change_count||'</SER-C-'|| l_new_count || '>';
3667 	      l_str_ee_ssn := '<CHANGE-SSN-'|| l_new_count || '>'|| l_insured_ssn ||'</CHANGE-SSN-'|| l_new_count || '>';
3668 	      l_str_ee_name := '<CHANGE-EMPLOYEE-NAME-'|| l_new_count || '>'|| substr(l_full_name,1,60) ||'</CHANGE-EMPLOYEE-NAME-'|| l_new_count || '>';
3669 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3670 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_ssn), l_str_ee_ssn);
3671 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
3672 	      l_str_a1d := '<CHANGE-WAGE-DINARS-' || l_new_count ||'>'||substr(l_fm_changed_salary,1,length(l_fm_changed_salary)-3)||'</CHANGE-WAGE-DINARS-'|| l_new_count ||'>';
3673 	      l_str_a1f := '<CHANGE-FILLS-' || l_new_count	||'>'||substr(l_fm_changed_salary,length(l_fm_changed_salary)-1)||'</CHANGE-FILLS-'|| l_new_count || '>';
3674 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
3675 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
3676 	      l_total_change := l_total_change + l_subject_si_val;
3677 	END If;
3678 	If l_new_count <> 5 then
3679 		n := n + 1;
3680 	End If;
3681 	If (n > m and  l_new_count <> 5) then
3682 
3683 	                tp := l_new_count;
3684                         WHILE tp <= 5 LOOP
3685                                 l_str_seq_no := '<SER-C-' || tp ||'>'||'   '||'</SER-C-'|| tp || '>';
3686                                 dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
3687                                 tp := tp + 1;
3688                         END LOOP;
3689 
3690 
3691 		l_fm_l_total_change := to_char(abs(l_total_change),lg_format_mask);
3692 
3693 		BEGIN
3694 			SELECT decode(l_total_change/(abs(decode(l_total_change,0,1,l_total_change))*-1),1,'-'||l_fm_l_total_change,l_fm_l_total_change)
3695 			INTO l_fm_l_total_change
3696 			FROM dual;
3697 
3698 	      EXCEPTION
3699 			WHEN no_data_found then
3700 				null;
3701 	      END;
3702 
3703 	      l_str_bsd := '<CHANGE-DINARS-TOTAL>'||substr(l_fm_l_total_change,1,length(l_fm_l_total_change)-3)||'</CHANGE-DINARS-TOTAL>';
3704 	      l_str_bsf := '<CHANGE-FILLS-TOTAL>'||substr(l_fm_l_total_change,length(l_fm_l_total_change)-1)||'</CHANGE-FILLS-TOTAL>';
3705 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3706 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3707 	    /*************  dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); ***********/
3708 	End If;
3709       IF n > m THEN
3710         l_cha_processed := 1;
3711         EXIT;
3712       END IF;
3713       IF l_new_count = 5 THEN
3714 		l_fm_l_total_change := to_char(abs(l_total_change),lg_format_mask);
3715 
3716 		BEGIN
3717 			SELECT decode(l_total_change/(abs(decode(l_total_change,0,1,l_total_change))*-1),1,'-'||l_fm_l_total_change,l_fm_l_total_change)
3718 			INTO l_fm_l_total_change
3719 			FROM dual;
3720 
3721 	      EXCEPTION
3722 			WHEN no_data_found then
3723 				null;
3724 	      END;
3725 
3726 	      l_str_bsd := '<CHANGE-DINARS-TOTAL>'||substr(l_fm_l_total_change,1,length(l_fm_l_total_change)-3)||'</CHANGE-DINARS-TOTAL>';
3727 	      l_str_bsf := '<CHANGE-FILLS-TOTAL>'||substr(l_fm_l_total_change,1,length(l_fm_l_total_change)-3)||'</CHANGE-FILLS-TOTAL>';
3728 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
3729 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
3730 	/***********      dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>'); **********/
3731         EXIT;
3732       END IF;
3733     END LOOP;
3734 
3735     IF l_ter_processed = 1 AND l_new_processed = 1 AND l_cha_processed = 1 THEN
3736       l_all_processed := 1;
3737     END IF;
3738     dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
3739     END LOOP;
3740 
3741     dbms_lob.writeAppend( l_xfdf_string, length('</START>'),'</START>');
3742     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
3743     clob_to_blob(l_xfdf_string,l_xfdf_blob);
3744 
3745     hr_utility.set_location('Finished creating xml data for Procedure FORM6 ',20);
3746 EXCEPTION
3747         WHEN utl_file.invalid_path then
3748                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
3749                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3750                 hr_utility.raise_error;
3751 --
3752     WHEN utl_file.invalid_mode then
3753         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
3754         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3755                 hr_utility.raise_error;
3756 --
3757     WHEN utl_file.invalid_filehandle then
3758         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
3759         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3760                 hr_utility.raise_error;
3761 --
3762     WHEN utl_file.invalid_operation then
3763         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
3764         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3765                 hr_utility.raise_error;
3766 --
3767     WHEN utl_file.read_error then
3768         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
3769         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3770                 hr_utility.raise_error;
3771 --
3772     WHEN others THEN
3773        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
3774        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
3775        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
3776            hr_utility.raise_error;
3777   END FORM7;
3778   -------------------------------------------------------------------------------------------
3779   PROCEDURE MCP
3780     (p_request_id              NUMBER
3781     ,p_report                  VARCHAR2
3782     ,p_business_group_id       NUMBER
3783     ,p_employer_id             NUMBER
3784     ,p_effective_month         VARCHAR2
3785     ,p_effective_year          VARCHAR2
3786     ,l_xfdf_blob               OUT NOCOPY BLOB
3787     )
3788    AS
3789 
3790     /*Cursor for fetching Local nationality for the BG */
3791      CURSOR csr_get_loc_nat IS
3792      SELECT org_information1
3793      FROM   hr_organization_information
3794      WHERE  organization_id = p_business_group_id
3795      AND    org_information_context = 'AE_BG_DETAILS';
3796 
3797      /*Cursor for fetching Employer Name*/
3798      CURSOR csr_employer_name IS
3799      SELECT name
3800      FROM   hr_organization_units
3801     WHERE  organization_id = p_employer_id;
3802 
3803      /*Cursor for fetching employees*/
3804     CURSOR csr_get_emp (l_employer number , l_date date , l_nat_cd varchar2) IS
3805     SELECT distinct asg.person_id
3806                     ,paa.assignment_action_id
3807                     ,ppa.date_earned
3808     FROM   per_all_assignments_f asg
3809            ,pay_assignment_actions paa
3810            ,pay_payroll_actions ppa
3811            ,hr_soft_coding_keyflex hscl
3812            ,per_periods_of_service pos
3813            ,per_all_people_f ppf
3814     WHERE  asg.assignment_id = paa.assignment_id
3815     AND    paa.payroll_action_id = ppa.payroll_action_id
3816     AND    pos.period_of_service_id = asg.period_of_service_id
3817     AND    ppa.action_type in ('R','Q')
3818     AND    ppa.action_status = 'C'
3819     AND    paa.action_status IN ('C','S')
3820     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_date, 'MM')
3821     AND    trunc(l_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
3822     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
3823     AND    hscl.segment1 = to_char(l_employer)
3824     AND    ppf.person_id = asg.person_id
3825     AND    trunc(l_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
3826     AND    ppf.per_information18 = l_nat_cd;
3827 
3828     /* Cursor for fetching the person data */
3829     	CURSOR csr_get_person_data (l_person_id number,l_effective_date date) IS
3830     	SELECT ppf.full_name, ppf.employee_number
3831     	FROM	per_all_people_f ppf
3832     	WHERE 	ppf.person_id = l_person_id
3833     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
3834 
3835     /* Cursor for fetching the person's assignment data */
3836     	CURSOR csr_get_person_asg_data (l_person_id number,l_effective_date date) IS
3837     	SELECT hsck.segment3
3838     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
3839     	WHERE 	paf.person_id = l_person_id
3840     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
3841     	AND     hsck.segment1 = p_employer_id
3842     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
3843 
3844     /* Cursor for fetching Defined balance ids from Org EIT */
3845         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
3846         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10
3847         FROM    HR_ORGANIZATION_INFORMATION
3848         WHERE   Organization_id = l_bg_id
3849         AND	org_information_context = 'AE_SI_DETAILS';
3850 
3851     /* Cursor for fetching Defined balance ids for UAE balances */
3852         CURSOR csr_get_seeded_def_bal_ids (l_user_name varchar2) IS
3853 	SELECT  u.creator_id
3854     	FROM    ff_user_entities  u,ff_database_items d
3855     	WHERE   d.user_name = l_user_name
3856     	AND     u.user_entity_id = d.user_entity_id
3857     	AND     u.legislation_code = 'AE'
3858     	AND     u.business_group_id is null
3859     	AND     u.creator_type = 'B';
3860 
3861     TYPE def_bal_rec IS RECORD
3862     (def_bal_id                  NUMBER);
3863     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
3864     t_store_def_bal   t_def_bal_table;
3865     TYPE assact_rec IS RECORD
3866     (person_id                 NUMBER
3867     ,assignment_action_id      NUMBER
3868     ,date_start                DATE);
3869     TYPE t_assact_table IS TABLE OF assact_rec INDEX BY BINARY_INTEGER;
3870     t_store_assact   t_assact_table;
3871     l_employer_name varchar2(240);
3872     l_input_date varchar2(30);
3873     l_effective_date date;
3874     l_employer_ssn number;
3875     l_basic_sal_id number;
3876     z number;
3877     l_accomodation_id number;
3878     l_social_id number;
3879     l_child_social_id number;
3880     l_tp_id number;
3881     l_ol1_id number;
3882     l_ol2_id number;
3883     l_ol3_id number;
3884     l_ol4_id number;
3885     l_cost_of_living_id number;
3886     l_index number;
3887     i number;
3888     k number;
3889     m number;
3890     j number;
3891     x number;
3892     l_tot_count number;
3893     l_new_processed number;
3894     l_all_processed number;
3895     l_new_count number;
3896     l_basic_val number(15,2);
3897     l_accomodation_val number(15,2);
3898     l_allowance_1_val number(15,2);
3899     l_allowance_2_val number(15,2);
3900     l_allowance_3_val number(15,2);
3901     l_allowance_4_val number(15,2);
3902     l number;
3903     L_FULL_NAME varchar2(240);
3904     l_insured_ssn varchar2(30);
3905     L_TOTAL number(15,2);
3906     L_FM_TOTAL_VAL varchar2(100);
3907     l_fm_l_basic_val varchar2(100);
3908     L_FM_L_ACCOMODATION_VAL varchar2(100);
3909     L_FM_L_ALLOWANCE_1_VAL varchar2(100);
3910     L_FM_L_ALLOWANCE_2_VAL varchar2(100);
3911     L_FM_L_ALLOWANCE_3_VAL varchar2(100);
3912     L_FM_L_ALLOWANCE_4_VAL varchar2(100);
3913     l_total_basic number(15,2);
3914     l_total_aa number(15,2);
3915     l_total_a1 number(15,2);
3916     l_total_a2 number(15,2);
3917     l_total_a3 number(15,2);
3918     l_total_ee number(15,2);
3919     l_total_er number(15,2);
3920     l_total_total number(15,2);
3921     l_fm_total_basic varchar2(100);
3922     l_fm_total_aa varchar2(100);
3923     l_fm_total_a1 varchar2(100);
3924     l_fm_total_a2 varchar2(100);
3925     l_fm_total_a3 varchar2(100);
3926     l_fm_total_ee varchar2(100);
3927     l_fm_total_er varchar2(100);
3928     l_fm_total_total varchar2(100);
3929     rec_get_emp        csr_get_emp%ROWTYPE;
3930     l_xfdf_string              CLOB;
3931     l_str_er_name varchar2(240);
3932     l_str_er_ssn varchar2(240);
3933     l_str_ee_name varchar2(240);
3934     l_str_ee_ssn varchar2(240);
3935     l_str_year varchar2(240);
3936     l_str_month varchar2(240);
3937     l_str_seq_no varchar2(240);
3938     l_str_bsd varchar2(240);
3939     l_str_bsf varchar2(240);
3940     l_str_aad varchar2(240);
3941     l_str_aaf varchar2(240);
3942     l_str_a1d varchar2(240);
3943     l_str_a1f varchar2(240);
3944     l_str_a2d varchar2(240);
3945     l_str_a2f varchar2(240);
3946     l_str_a3d varchar2(240);
3947     l_str_a3f varchar2(240);
3948     l_str_a4d varchar2(240);
3949     l_str_a4f varchar2(240);
3950     l_str_a5d varchar2(240);
3951     l_str_a5f varchar2(240);
3952     l_ee_soc_ins_id number(15,2);
3953     l_er_soc_ins_id number(15,2);
3954     l_ee_soc_ins_adj_id number(15,2);
3955     l_er_soc_ins_adj_id number(15,2);
3956     l_ee_si_val number(15,2);
3957     l_er_si_val number(15,2);
3958     l_ee_si_adj_val number(15,2);
3959     l_er_si_adj_val number(15,2);
3960     l_er_contribution number(15,2);
3961     l_ee_contribution number(15,2);
3962     l_total_contribution number(15,2);
3963     l_fm_er_contribution varchar2(100);
3964     l_fm_ee_contribution varchar2(100);
3965     l_fm_total_contribution varchar2(100);
3966     l_employee_number varchar2(100);
3967     l_str_ee_eno varchar2(240);
3968     l_str_eecd varchar2(240);
3969     l_str_eecf varchar2(240);
3970     l_str_ercd varchar2(240);
3971     l_str_ercf varchar2(240);
3972     l_str_tcd varchar2(240);
3973     l_str_tcf varchar2(240);
3974     L_EE_SOC_INS_ARR_ID number;
3975     L_EE_SI_ARR_VAL number(15,2);
3976     l_subject_to_id number;
3977     l_nat_cd varchar2(30);
3978 
3979   BEGIN
3980     set_currency_mask(p_business_group_id);
3981     l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
3982     l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
3983     INSERT INTO fnd_sessions (session_id, effective_date)
3984     VALUES (userenv('sessionid'), l_effective_date);
3985     hr_utility.set_location('Entering FORM6 ',10);
3986 
3987     /* Fetch Local Nationality */
3988     OPEN csr_get_loc_nat;
3989     FETCH csr_get_loc_nat into l_nat_cd;
3990     CLOSE csr_get_loc_nat;
3991 
3992     /*Fetch Employer Name*/
3993     OPEN csr_employer_name;
3994     FETCH csr_employer_name INTO l_employer_name;
3995     CLOSE csr_employer_name;
3996 
3997     dbms_lob.createtemporary(l_xfdf_string,FALSE,DBMS_LOB.CALL);
3998     dbms_lob.open(l_xfdf_string,dbms_lob.lob_readwrite);
3999     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
4000     clob_to_blob(l_xfdf_string,l_xfdf_blob);
4001     dbms_lob.writeAppend( l_xfdf_string, length('<START>'),'<START>');
4002 
4003     OPEN csr_get_def_bal_ids (p_employer_id);
4004     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accomodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id;
4005     CLOSE csr_get_def_bal_ids;
4006 
4007     OPEN csr_get_seeded_def_bal_ids ('EMPLOYEE_SOCIAL_INSURANCE_ASG_RUN'); /**** Change this to EMPLOYEE *******/
4008     FETCH csr_get_seeded_def_bal_ids into l_ee_soc_ins_id;
4009     CLOSE csr_get_seeded_def_bal_ids;
4010 
4011     OPEN csr_get_seeded_def_bal_ids ('EMPLOYER_SOCIAL_INSURANCE_ASG_RUN'); /**** Change this to EMPLOYER *******/
4012     FETCH csr_get_seeded_def_bal_ids into l_er_soc_ins_id;
4013     CLOSE csr_get_seeded_def_bal_ids;
4014 
4015     OPEN csr_get_seeded_def_bal_ids ('EMPLOYEE_SOCIAL_INSURANCE_ADJUSTMENT_ASG_RUN'); /**** Change this to EMPLOYEE *******/
4016     FETCH csr_get_seeded_def_bal_ids into l_ee_soc_ins_adj_id;
4017     CLOSE csr_get_seeded_def_bal_ids;
4018 
4019     OPEN csr_get_seeded_def_bal_ids ('EMPLOYER_SOCIAL_INSURANCE_ADJUSTMENT_ASG_RUN'); /**** Change this to EMPLOYER *******/
4020     FETCH csr_get_seeded_def_bal_ids into l_er_soc_ins_adj_id;
4021     CLOSE csr_get_seeded_def_bal_ids;
4022 
4023     OPEN csr_get_seeded_def_bal_ids ('EMPLOYEE_SOCIAL_INSURANCE_ARREARS_ASG_RUN'); /**** Change this to EMPLOYER *******/
4024     FETCH csr_get_seeded_def_bal_ids into l_ee_soc_ins_arr_id;
4025     CLOSE csr_get_seeded_def_bal_ids;
4026 
4027     OPEN csr_get_seeded_def_bal_ids ('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
4028     FETCH csr_get_seeded_def_bal_ids into l_subject_to_id;
4029     CLOSE csr_get_seeded_def_bal_ids;
4030 
4031     z := 1;
4032     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
4033     z:= z+1;
4034     t_store_def_bal(z).def_bal_id := l_accomodation_id;
4035     z := z + 1;
4036     l_index := 2;
4037     LOOP
4038    	If l_social_id is not null THEN
4039     		t_store_def_bal(z).def_bal_id := l_social_id;
4040     		z := z + 1;
4041     		l_index := l_index + 1;
4042     		EXIT WHEN z > 6;
4043     	End if;
4044     	If l_child_social_id is not null THEN
4045     		t_store_def_bal(z).def_bal_id := l_child_social_id;
4046     		z := z + 1;
4047     		l_index := l_index + 1;
4048 		EXIT WHEN z > 6;
4049     	End if;
4050     	If l_cost_of_living_id is not null THEN
4051     		t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
4052     		z := z + 1;
4053     		l_index := l_index + 1;
4054     		EXIT WHEN z > 6;
4055     	End if;
4056     	If l_tp_id is not null THEN
4057     		t_store_def_bal(z).def_bal_id := l_tp_id;
4058     		z := z + 1;
4059     		l_index := l_index + 1;
4060 		EXIT WHEN z > 6;
4061     	End if;
4062     	If l_ol1_id is not null THEN
4063     		t_store_def_bal(z).def_bal_id := l_ol1_id;
4064     		z := z + 1;
4065     		l_index := l_index + 1;
4066     		EXIT WHEN z > 6;
4067     	End if;
4068     	If l_ol2_id is not null THEN
4069     		t_store_def_bal(z).def_bal_id := l_ol2_id;
4070     		z := z + 1;
4071     		l_index := l_index + 1;
4072     		EXIT WHEN z > 6;
4073     	End if;
4074     	If l_ol3_id is not null THEN
4075     		t_store_def_bal(z).def_bal_id := l_ol3_id;
4076     		z := z + 1;
4077     		l_index := l_index + 1;
4078     		EXIT WHEN z > 6;
4079     	End if;
4080     	If l_ol4_id is not null THEN
4081     		t_store_def_bal(z).def_bal_id := l_ol4_id;
4082     		z := z + 1;
4083     		l_index := l_index + 1;
4084     		EXIT WHEN z > 6;
4085     	End if;
4086     	If z < 7 then
4087     		WHILE Z <=7LOOP
4088     			t_store_def_bal(z).def_bal_id := NULL;
4089     			z := z + 1;
4090     			EXIT WHEN z >7;
4091     		END LOOP;
4092 	End If;
4093     	EXIT WHEN z >= 7;
4094     END LOOP;
4095     i := 0;
4096     k := 0;
4097     m := 0;
4098     OPEN csr_get_emp(p_employer_id , l_effective_date , l_nat_cd);
4099     LOOP
4100       FETCH csr_get_emp INTO rec_get_emp;
4101       EXIT WHEN csr_get_emp%NOTFOUND;
4102       i := i + 1;
4103       t_store_assact(i).person_id := rec_get_emp.person_id;
4104       t_store_assact(i).assignment_action_id := rec_get_emp.assignment_action_id;
4105       t_store_assact(i).date_start := rec_get_emp.date_earned;
4106     END LOOP;
4107     CLOSE csr_get_emp;
4108     IF i > 0  THEN
4109       l_new_processed := 0;
4110     ELSE
4111       l_new_processed := 1;
4112     END IF;
4113     l_all_processed := 0;
4114         j := 1;
4115     l_total_basic := 0 ;
4116     l_total_aa := 0 ;
4117     l_total_a1 := 0 ;
4118     l_total_a2 := 0 ;
4119     l_total_a3 := 0 ;
4120     l_total_ee := 0 ;
4121     l_total_er := 0 ;
4122     l_total_total := 0 ;
4123 
4124 	l_tot_count := 0;
4125 
4126     WHILE l_all_processed  <> 1 LOOP
4127     --Writing data for new employees
4128     l_new_count := 0;
4129     l := 0;
4130       dbms_lob.writeAppend( l_xfdf_string, length('<EMP-REC>'),'<EMP-REC>');
4131     WHILE j <= i LOOP
4132 /**** RESET ALL THE VARIABLES *****/
4133       l_basic_val := 0;
4134       l_accomodation_val := 0;
4135       l_allowance_1_val := 0;
4136       l_allowance_2_val := 0;
4137       l_allowance_3_val := 0;
4138       l_allowance_4_val := 0;
4139       l_total := 0;
4140       x := 1;
4141       IF t_store_def_bal(x).def_bal_id is not null THEN
4142 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4143 		x:= x + 1;
4144       ELSE
4145       		l_basic_val := 0;
4146       		x:= x + 1;
4147       END IF;
4148       IF t_store_def_bal(x).def_bal_id is not null THEN
4149 		l_accomodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4150 		x:= x + 1;
4151       ELSE
4152       		l_accomodation_val := 0;
4153       		x:= x + 1;
4154       END IF;
4155       IF t_store_def_bal(x).def_bal_id is not null THEN
4156 		l_allowance_1_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4157 		x:= x + 1;
4158       ELSE
4159       		l_allowance_1_val := 0;
4160       		x:= x + 1;
4161       END IF;
4162       IF t_store_def_bal(x).def_bal_id is not null THEN
4163 		l_allowance_2_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4164 		x:= x + 1;
4165       ELSE
4166       		l_allowance_2_val := 0;
4167       		x:= x + 1;
4168       END IF;
4169       IF t_store_def_bal(x).def_bal_id is not null THEN
4170 		l_allowance_3_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4171       ELSE
4172       		l_allowance_3_val := 0;
4173       END IF;
4174 
4175       pay_balance_pkg.set_context('DATE_EARNED',fnd_date.date_to_canonical(l_effective_date));
4176       pay_balance_pkg.set_context('TAX_UNIT_ID',p_employer_id);
4177 
4178       l_ee_si_val := pay_balance_pkg.get_value(l_ee_soc_ins_id,t_store_assact(j).assignment_action_id);
4179       l_er_si_val := pay_balance_pkg.get_value(l_er_soc_ins_id,t_store_assact(j).assignment_action_id);
4180       l_ee_si_adj_val := pay_balance_pkg.get_value(l_ee_soc_ins_adj_id,t_store_assact(j).assignment_action_id);
4181       l_er_si_adj_val := pay_balance_pkg.get_value(l_er_soc_ins_adj_id,t_store_assact(j).assignment_action_id);
4182       l_ee_si_arr_val := pay_balance_pkg.get_value(l_ee_soc_ins_arr_id,t_store_assact(j).assignment_action_id);
4183       l_er_contribution := l_er_si_val + l_er_si_adj_val;
4184       l_ee_contribution := l_ee_si_val + l_ee_si_adj_val+l_ee_si_arr_val;
4185       l_total_contribution := l_er_contribution + l_ee_contribution;
4186 
4187       l_fm_ee_contribution := to_char(abs(l_ee_contribution),lg_format_mask);
4188       l_fm_er_contribution := to_char(abs(l_er_contribution),lg_format_mask);
4189       l_fm_total_contribution := to_char(abs(l_total_contribution) ,lg_format_mask);
4190 
4191       l_new_count := l_new_count+1;
4192 
4193       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
4194       l_fm_l_accomodation_val := to_char(abs(l_accomodation_val),lg_format_mask);
4195       l_fm_l_allowance_1_val := to_char(abs(l_allowance_1_val),lg_format_mask);
4196       l_fm_l_allowance_2_val := to_char(abs(l_allowance_2_val),lg_format_mask);
4197       l_fm_l_allowance_3_val := to_char(abs(l_allowance_3_val),lg_format_mask);
4198       l_fm_l_allowance_4_val := to_char(abs(l_allowance_4_val),lg_format_mask);
4199       /*l_total := l_basic_val + l_accomodation_val + l_allowance_1_val + l_allowance_2_val + l_allowance_3_val + l_allowance_4_val;*/
4200 
4201       l_total := pay_balance_pkg.get_value(l_subject_to_id,t_store_assact(j).assignment_action_id);
4202 
4203       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
4204 
4205 
4206 		BEGIN
4207 			SELECT decode(l_ee_contribution/(abs(decode(l_ee_contribution,0,1,l_ee_contribution))*-1),1,'-'||l_fm_ee_contribution,l_fm_ee_contribution)
4208 			INTO l_fm_ee_contribution
4209 			FROM dual;
4210 
4211 			SELECT decode(l_er_contribution/(abs(decode(l_er_contribution,0,1,l_er_contribution))*-1),1,'-'||l_fm_er_contribution,l_fm_er_contribution)
4212 			INTO l_fm_er_contribution
4213 			FROM dual;
4214 
4215 			SELECT decode(l_total_contribution/(abs(decode(l_total_contribution,0,1,l_total_contribution))*-1),1,'-'||l_fm_total_contribution,l_fm_total_contribution)
4216 			INTO l_fm_total_contribution
4217 			FROM dual;
4218 
4219 			SELECT decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val)
4220 			INTO l_fm_l_basic_val
4221 			FROM dual;
4222 
4223 			SELECT decode(l_accomodation_val/(abs(decode(l_accomodation_val,0,1,l_accomodation_val))*-1),1,'-'||l_fm_l_accomodation_val,l_fm_l_accomodation_val)
4224 			INTO l_fm_l_accomodation_val
4225 			FROM dual;
4226 
4227 			SELECT decode(l_allowance_1_val/(abs(decode(l_allowance_1_val,0,1,l_allowance_1_val))*-1),1,'-'||l_fm_l_allowance_1_val,l_fm_l_allowance_1_val)
4228 			INTO l_fm_l_allowance_1_val
4229 			FROM dual;
4230 
4231 			SELECT decode(l_allowance_2_val/(abs(decode(l_allowance_2_val,0,1,l_allowance_2_val))*-1),1,'-'||l_fm_l_allowance_2_val,l_fm_l_allowance_2_val)
4232 			INTO l_fm_l_allowance_2_val
4233 			FROM dual;
4234 
4235 			SELECT decode(l_allowance_3_val/(abs(decode(l_allowance_3_val,0,1,l_allowance_3_val))*-1),1,'-'||l_fm_l_allowance_3_val,l_fm_l_allowance_3_val)
4236 			INTO l_fm_l_allowance_3_val
4237 			FROM dual;
4238 
4239 			SELECT decode(l_allowance_4_val/(abs(decode(l_allowance_4_val,0,1,l_allowance_4_val))*-1),1,'-'||l_fm_l_allowance_4_val,l_fm_l_allowance_4_val)
4240 			INTO l_fm_l_allowance_4_val
4241 			FROM dual;
4242 
4243 			SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
4244 			INTO l_fm_total_val
4245 			FROM dual;
4246 
4247 		EXCEPTION
4248 			WHEN no_data_found then
4249 				null;
4250 	      END;
4251 
4252       OPEN csr_get_person_data(t_store_assact(j).person_id,l_effective_date);
4253       FETCH csr_get_person_data INTO l_full_name, l_employee_number;
4254       CLOSE csr_get_person_data;
4255 
4256       OPEN csr_get_person_asg_data(t_store_assact(j).person_id, l_effective_date);
4257       FETCH csr_get_person_asg_data into l_insured_ssn;
4258       CLOSE csr_get_person_asg_data;
4259 
4260       l_str_er_name := '<ERNAME>'||l_employer_name||'</ERNAME>';
4261       l_str_year := '<YEAR>'||p_effective_year||'</YEAR>';
4262       l_str_month := '<MONTH>'||p_effective_month||'</MONTH>';
4263       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_name), l_str_er_name);
4264       dbms_lob.writeAppend( l_xfdf_string, length(l_str_year), l_str_year);
4265       dbms_lob.writeAppend( l_xfdf_string, length(l_str_month), l_str_month);
4266 	      l := l + 1;
4267 
4268 	If l <> 11 then
4269 		l_tot_count := l_tot_count + 1;
4270 	End If;
4271       If l <> 11 then
4272 	      l_str_seq_no := '<SER-' || l ||'>'||l_tot_count||'</SER-'|| l || '>';
4273 	      l_str_ee_ssn :=  '<SSN-' || l || '>'||l_insured_ssn ||'</SSN-' || l || '>';
4274 	      l_str_ee_eno :=  '<ENO-' || l || '>'||l_employee_number ||'</ENO-' || l || '>';
4275 	      l_str_ee_name := '<EEN-'|| l || '>'|| initcap(substr(l_full_name,1,60)) ||'</EEN-'|| l || '>';
4276 	      l_str_bsd := '<BSD-' || l ||'>'||substr(l_fm_l_basic_val,1,length(l_fm_l_basic_val)-3)||'</BSD-'|| l || '>';
4277 	      l_str_bsf := '<BSF-' || l ||'>'||substr(l_fm_l_basic_val,length(l_fm_l_basic_val)-1)||'</BSF-'|| l || '>';
4278 	      l_str_aad := '<AAD-' || l ||'>'||substr(l_fm_l_accomodation_val,1,length(l_fm_l_accomodation_val)-3)||'</AAD-'|| l || '>';
4279 	      l_str_aaf := '<AAF-' || l ||'>'||substr(l_fm_l_accomodation_val,length(l_fm_l_accomodation_val)-1)||'</AAF-'|| l || '>';
4280 	      l_str_a1d := '<A1D-' || l ||'>'||substr(l_fm_l_allowance_1_val,1,length(l_fm_l_allowance_1_val)-3)||'</A1D-'|| l || '>';
4281 	      l_str_a1f := '<A1F-' || l ||'>'||substr(l_fm_l_allowance_1_val,length(l_fm_l_allowance_1_val)-1)||'</A1F-'|| l || '>';
4282 	      l_str_a2d := '<A2D-' || l ||'>'||substr(l_fm_l_allowance_2_val,1,length(l_fm_l_allowance_2_val)-3)||'</A2D-'|| l || '>';
4283 	      l_str_a2f := '<A2F-' || l ||'>'||substr(l_fm_l_allowance_2_val,length(l_fm_l_allowance_2_val)-1)||'</A2F-'|| l || '>';
4284 	      l_str_a3d := '<A3D-' || l ||'>'||substr(l_fm_total_val,1,length(l_fm_total_val)-3)||'</A3D-'|| l || '>';
4285 	      l_str_a3f := '<A3F-' || l ||'>'||substr(l_fm_total_val,length(l_fm_total_val)-1)||'</A3F-'|| l || '>';
4286 	      l_str_eecd := '6<EECD-' || l ||'>'||substr(l_fm_ee_contribution,1,length(l_fm_ee_contribution)-3)||'</EECD-'|| l || '>';
4287 	      l_str_eecf := '<EECF-' || l ||'>'||substr(l_fm_ee_contribution,length(l_fm_ee_contribution)-1)||'</EECF-'|| l || '>';
4288 	      l_str_ercd := '<ERCD-' || l ||'>'||substr(l_fm_er_contribution,1,length(l_fm_er_contribution)-3)||'</ERCD-'|| l || '>';
4289 	      l_str_ercf := '<ERCF-' || l ||'>'||substr(l_fm_er_contribution,length(l_fm_er_contribution)-1)||'</ERCF-'|| l || '>';
4290 	      l_str_tcd := '<TCD-' || l ||'>'||substr(l_fm_total_contribution,1,length(l_fm_total_contribution)-3)||'</TCD-'|| l || '>';
4291 	      l_str_tcf := '<TCF-' || l ||'>'||substr(l_fm_total_contribution,length(l_fm_total_contribution)-1)||'</TCF-'|| l || '>';
4292 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
4293 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_ssn), l_str_ee_ssn);
4294 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_eno), l_str_ee_eno);
4295 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
4296 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
4297 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
4298 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
4299 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
4300 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
4301 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
4302 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
4303 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
4304 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
4305 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
4306 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecd), l_str_eecd);
4307 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecf), l_str_eecf);
4308 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercd), l_str_ercd);
4309 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercf), l_str_ercf);
4310 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcd), l_str_tcd);
4311 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcf), l_str_tcf);
4312 		l_total_basic := l_total_basic + l_basic_val;
4313 		l_total_aa := l_total_aa + l_accomodation_val;
4314 		l_total_a1 := l_total_a1 + l_allowance_1_val;
4315 		l_total_a2 := l_total_a2 + l_allowance_2_val;
4316 		l_total_a3 := l_total_a3 + l_total;
4317 		l_total_ee := l_total_ee + l_ee_contribution;
4318 		l_total_er := l_total_er + l_er_contribution;
4319 		l_total_total := l_total_total + l_total_contribution;
4320 	 ElsIf l = 11 then
4321 		l_fm_total_basic :=  to_char(abs(l_total_basic),lg_format_mask);
4322 		l_fm_total_aa :=to_char(abs(l_total_aa),lg_format_mask);
4323 		l_fm_total_a1 := to_char(abs(l_total_a1),lg_format_mask);
4324 		l_fm_total_a2 :=to_char(abs(l_total_a2),lg_format_mask);
4325 		l_fm_total_a3 := to_char(abs(l_total_a3),lg_format_mask);
4326 		l_fm_total_ee := to_char(abs(l_total_ee),lg_format_mask);
4327 		l_fm_total_er := to_char(abs(l_total_er),lg_format_mask);
4328 		l_fm_total_total := to_char(abs(l_total_total),lg_format_mask);
4329 
4330 		BEGIN
4331 			SELECT decode(l_total_basic/(abs(decode(l_total_basic,0,1,l_total_basic))*-1),1,'-'||l_fm_total_basic,l_fm_total_basic)
4332 			INTO l_fm_total_basic
4333 			FROM dual;
4334 
4335 			SELECT decode(l_total_aa/(abs(decode(l_total_aa,0,1,l_total_aa))*-1),1,'-'||l_fm_total_aa,l_fm_total_aa)
4336 			INTO l_fm_total_aa
4337 			FROM dual;
4338 
4339 			SELECT decode(l_total_a1/(abs(decode(l_total_a1,0,1,l_total_a1))*-1),1,'-'||l_fm_total_a1,l_fm_total_a1)
4340 			INTO l_fm_total_a1
4341 			FROM dual;
4342 
4343 			SELECT decode(l_total_a2/(abs(decode(l_total_a2,0,1,l_total_a2))*-1),1,'-'||l_fm_total_a2,l_fm_total_a2)
4344 			INTO l_fm_total_a2
4345 			FROM dual;
4346 
4347 			SELECT decode(l_total_a3/(abs(decode(l_total_a3,0,1,l_total_a3))*-1),1,'-'||l_fm_total_a3,l_fm_total_a3)
4348 			INTO l_fm_total_a3
4349 			FROM dual;
4350 
4351 			SELECT decode(l_total_ee/(abs(decode(l_total_ee,0,1,l_total_ee))*-1),1,'-'||l_fm_total_ee,l_fm_total_ee)
4352 			INTO l_fm_total_ee
4353 			FROM dual;
4354 
4355 			SELECT decode(l_total_er/(abs(decode(l_total_er,0,1,l_total_er))*-1),1,'-'||l_fm_total_er,l_fm_total_er)
4356 			INTO l_fm_total_er
4357 			FROM dual;
4358 
4359 			SELECT decode(l_total_total/(abs(decode(l_total_total,0,1,l_total_total))*-1),1,'-'||l_fm_total_total,l_fm_total_total)
4360 			INTO l_fm_total_total
4361 			FROM dual;
4362 
4363 
4364 		EXCEPTION
4365 			WHEN no_data_found then
4366 				null;
4367 	      END;
4368 
4369 	      l_str_bsd := '<BSD-' || l ||'>'||substr(l_fm_total_basic,1,length(l_fm_total_basic)-3)||'</BSD-'|| l || '>';
4370 	      l_str_bsf := '<BSF-' || l ||'>'||substr(l_fm_total_basic,length(l_fm_total_basic)-1)||'</BSF-'|| l || '>';
4371 	      l_str_aad := '<AAD-' || l ||'>'||substr(l_fm_total_aa,1,length(l_fm_total_aa)-3)||'</AAD-'|| l || '>';
4372 	      l_str_aaf := '<AAF-' || l ||'>'||substr(l_fm_total_aa,length(l_fm_total_aa)-1)||'</AAF-'|| l || '>';
4373 	      l_str_a1d := '<A1D-' || l ||'>'||substr(l_fm_total_a1,1,length(l_fm_total_a1)-3)||'</A1D-'|| l || '>';
4374 	      l_str_a1f := '<A1F-' || l ||'>'||substr(l_fm_total_a1,length(l_fm_total_a1)-1)||'</A1F-'|| l || '>';
4375 	      l_str_a2d := '<A2D-' || l ||'>'||substr(l_fm_total_a2,1,length(l_fm_total_a2)-3)||'</A2D-'|| l || '>';
4376 	      l_str_a2f := '<A2F-' || l ||'>'||substr(l_fm_total_a2,length(l_fm_total_a2)-1)||'</A2F-'|| l || '>';
4377 	      l_str_a3d := '<A3D-' || l ||'>'||substr(l_fm_total_a3,1,length(l_fm_total_a3)-3)||'</A3D-'|| l || '>';
4378 	      l_str_a3f := '<A3F-' || l ||'>'||substr(l_fm_total_a3,length(l_fm_total_a3)-1)||'</A3F-'|| l || '>';
4379 	      l_str_eecd := '<EECD-' || l ||'>'||substr(l_fm_total_ee,1,length(l_fm_total_ee)-3)||'</EECD-'|| l || '>';
4380 	      l_str_eecf := '<EECF-' || l ||'>'||substr(l_fm_total_ee,length(l_fm_total_ee)-1)||'</EECF-'|| l || '>';
4381 	      l_str_ercd := '<ERCD-' || l ||'>'||substr(l_fm_total_er,1,length(l_fm_total_er)-3)||'</ERCD-'|| l || '>';
4382 	      l_str_ercf := '<ERCF-' || l ||'>'||substr(l_fm_total_er,length(l_fm_total_er)-1)||'</ERCF-'|| l || '>';
4383 	      l_str_tcd := '<TCD-' || l ||'>'||substr(l_fm_total_total,1,length(l_fm_total_total)-3)||'</TCD-'|| l || '>';
4384 	      l_str_tcf := '<TCF-' || l ||'>'||substr(l_fm_total_total,length(l_fm_total_total)-1)||'</TCF-'|| l || '>';
4385 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
4386 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
4387 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
4388 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
4389 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
4390 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
4391 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
4392 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
4393 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
4394 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
4395 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecd), l_str_eecd);
4396 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecf), l_str_eecf);
4397 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercd), l_str_ercd);
4398 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercf), l_str_ercf);
4399 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcd), l_str_tcd);
4400 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcf), l_str_tcf);
4401 	 End If;
4402 	 If l <> 11 then
4403       		j := j + 1;
4404       	End if;
4405      IF j > i THEN
4406         l_new_processed := 1;
4407       END IF;
4408       IF l = 11/*8*/ THEN
4409       	dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
4410     	l_total_basic := 0 ;
4411     	l_total_aa := 0 ;
4412     	l_total_a1 := 0 ;
4413     	l_total_a2 := 0 ;
4414     	l_total_a3 := 0 ;
4415     	l_total_ee := 0 ;
4416     	l_total_er := 0 ;
4417     	l_total_total := 0 ;
4418       	l := 1;
4419         EXIT;
4420       END IF;
4421     END LOOP;
4422     IF l_new_processed = 1 THEN
4423       l_all_processed := 1;
4424 	If l <> 11 then
4425 		l_fm_total_basic :=  to_char(abs(l_total_basic),lg_format_mask);
4426 		l_fm_total_aa :=to_char(abs(l_total_aa),lg_format_mask);
4427 		l_fm_total_a1 := to_char(abs(l_total_a1),lg_format_mask);
4428 		l_fm_total_a2 :=to_char(abs(l_total_a2),lg_format_mask);
4429 		l_fm_total_a3 := to_char(abs(l_total_a3),lg_format_mask);
4430 		l_fm_total_ee := to_char(abs(l_total_ee),lg_format_mask);
4431 		l_fm_total_er := to_char(abs(l_total_er),lg_format_mask);
4432 		l_fm_total_total := to_char(abs(l_total_total),lg_format_mask);
4433 
4434 		BEGIN
4435 			SELECT decode(l_total_basic/(abs(decode(l_total_basic,0,1,l_total_basic))*-1),1,'-'||l_fm_total_basic,l_fm_total_basic)
4436 			INTO l_fm_total_basic
4437 			FROM dual;
4438 
4439 			SELECT decode(l_total_aa/(abs(decode(l_total_aa,0,1,l_total_aa))*-1),1,'-'||l_fm_total_aa,l_fm_total_aa)
4440 			INTO l_fm_total_aa
4441 			FROM dual;
4442 
4443 			SELECT decode(l_total_a1/(abs(decode(l_total_a1,0,1,l_total_a1))*-1),1,'-'||l_fm_total_a1,l_fm_total_a1)
4444 			INTO l_fm_total_a1
4445 			FROM dual;
4446 
4447 			SELECT decode(l_total_a2/(abs(decode(l_total_a2,0,1,l_total_a2))*-1),1,'-'||l_fm_total_a2,l_fm_total_a2)
4448 			INTO l_fm_total_a2
4449 			FROM dual;
4450 
4451 			SELECT decode(l_total_a3/(abs(decode(l_total_a3,0,1,l_total_a3))*-1),1,'-'||l_fm_total_a3,l_fm_total_a3)
4452 			INTO l_fm_total_a3
4453 			FROM dual;
4454 
4455 			SELECT decode(l_total_ee/(abs(decode(l_total_ee,0,1,l_total_ee))*-1),1,'-'||l_fm_total_ee,l_fm_total_ee)
4456 			INTO l_fm_total_ee
4457 			FROM dual;
4458 
4459 			SELECT decode(l_total_er/(abs(decode(l_total_er,0,1,l_total_er))*-1),1,'-'||l_fm_total_er,l_fm_total_er)
4460 			INTO l_fm_total_er
4461 			FROM dual;
4462 
4463 			SELECT decode(l_total_total/(abs(decode(l_total_total,0,1,l_total_total))*-1),1,'-'||l_fm_total_total,l_fm_total_total)
4464 			INTO l_fm_total_total
4465 			FROM dual;
4466 
4467 
4468 		EXCEPTION
4469 			WHEN no_data_found then
4470 				null;
4471 	      END;
4472 
4473 	      l_str_bsd := '<BSD-' || 11 ||'>'||substr(l_fm_total_basic,1,length(l_fm_total_basic)-3)||'</BSD-'|| 11 || '>';
4474 	      l_str_bsf := '<BSF-' || 11 ||'>'||substr(l_fm_total_basic,length(l_fm_total_basic)-1)||'</BSF-'|| 11 || '>';
4475 	      l_str_aad := '<AAD-' || 11 ||'>'||substr(l_fm_total_aa,1,length(l_fm_total_aa)-3)||'</AAD-'|| 11 || '>';
4476 	      l_str_aaf := '<AAF-' || 11 ||'>'||substr(l_fm_total_aa,length(l_fm_total_aa)-1)||'</AAF-'|| 11 || '>';
4477 	      l_str_a1d := '<A1D-' || 11 ||'>'||substr(l_fm_total_a1,1,length(l_fm_total_a1)-3)||'</A1D-'|| 11 || '>';
4478 	      l_str_a1f := '<A1F-' || 11 ||'>'||substr(l_fm_total_a1,length(l_fm_total_a1)-1)||'</A1F-'|| 11 || '>';
4479 	      l_str_a2d := '<A2D-' || 11 ||'>'||substr(l_fm_total_a2,1,length(l_fm_total_a2)-3)||'</A2D-'|| 11 || '>';
4480 	      l_str_a2f := '<A2F-' || 11 ||'>'||substr(l_fm_total_a2,length(l_fm_total_a2)-1)||'</A2F-'|| 11 || '>';
4481 	      l_str_a3d := '<A3D-' || 11 ||'>'||substr(l_fm_total_a3,1,length(l_fm_total_a3)-3)||'</A3D-'|| 11 || '>';
4482 	      l_str_a3f := '<A3F-' ||11 ||'>'||substr(l_fm_total_a3,length(l_fm_total_a3)-1)||'</A3F-'|| 11 || '>';
4483 	      l_str_eecd := '<EECD-' || 11 ||'>'||substr(l_fm_total_ee,1,length(l_fm_total_ee)-3)||'</EECD-'|| 11 || '>';
4484 	      l_str_eecf := '<EECF-' ||11 ||'>'||substr(l_fm_total_ee,length(l_fm_total_ee)-1)||'</EECF-'|| 11 || '>';
4485 	      l_str_ercd := '<ERCD-' || 11 ||'>'||substr(l_fm_total_er,1,length(l_fm_total_er)-3)||'</ERCD-'|| 11 || '>';
4486 	      l_str_ercf := '<ERCF-' || 11 ||'>'||substr(l_fm_total_er,length(l_fm_total_er)-1)||'</ERCF-'|| 11 || '>';
4487 	      l_str_tcd := '<TCD-' || 11 ||'>'||substr(l_fm_total_total,1,length(l_fm_total_total)-3)||'</TCD-'|| 11 || '>';
4488 	      l_str_tcf := '<TCF-' || 11 ||'>'||substr(l_fm_total_total,length(l_fm_total_total)-1)||'</TCF-'|| 11 || '>';
4489 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
4490 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
4491 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aad), l_str_aad);
4492 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_aaf), l_str_aaf);
4493 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1d), l_str_a1d);
4494 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a1f), l_str_a1f);
4495 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2d), l_str_a2d);
4496 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a2f), l_str_a2f);
4497 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3d), l_str_a3d);
4498 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_a3f), l_str_a3f);
4499 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecd), l_str_eecd);
4500 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_eecf), l_str_eecf);
4501 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercd), l_str_ercd);
4502 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_ercf), l_str_ercf);
4503 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcd), l_str_tcd);
4504 	      dbms_lob.writeAppend( l_xfdf_string, length(l_str_tcf), l_str_tcf);
4505 	end if;
4506 	If l <> 11 then
4507 	      dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
4508 	End If;
4509       EXIT;
4510     END IF;
4511     END LOOP;
4512     dbms_lob.writeAppend( l_xfdf_string, length('</START>'),'</START>');
4513     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
4514     clob_to_blob(l_xfdf_string,l_xfdf_blob);
4515     hr_utility.set_location('Finished creating xml data for Procedure FORM6 ',20);
4516 /*EXCEPTION
4517         WHEN utl_file.invalid_path then
4518                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
4519                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4520                 hr_utility.raise_error;
4521 --
4522     WHEN utl_file.invalid_mode then
4523         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
4524         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4525                 hr_utility.raise_error;
4526 --
4527     WHEN utl_file.invalid_filehandle then
4528         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
4529         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4530                 hr_utility.raise_error;
4531 --
4532     WHEN utl_file.invalid_operation then
4533         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
4534         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4535                 hr_utility.raise_error;
4536 --
4537     WHEN utl_file.read_error then
4538         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
4539         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4540                 hr_utility.raise_error;
4541 --
4542     WHEN others THEN
4543        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
4544        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
4545        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
4546            hr_utility.raise_error;*/
4547   END MCP;
4548   -------------------------------------------------------------------------------------------
4549     PROCEDURE MCF
4550     (p_request_id              NUMBER
4551     ,p_report                  VARCHAR2
4552     ,p_business_group_id       NUMBER
4553     ,p_employer_id             NUMBER
4554     ,p_effective_month         VARCHAR2
4555     ,p_effective_year          VARCHAR2
4556     ,l_xfdf_blob               OUT NOCOPY BLOB
4557     )
4558    AS
4559 
4560     /*Cursor for fetching Local nationality for the BG */
4561      CURSOR csr_get_loc_nat IS
4562      SELECT org_information1
4563      FROM   hr_organization_information
4564      WHERE  organization_id = p_business_group_id
4565      AND    org_information_context = 'AE_BG_DETAILS';
4566 
4567    /*Cursor for fetching Employer Name*/
4568      CURSOR csr_employer_name IS
4569      SELECT name
4570      FROM   hr_organization_units
4571      WHERE  organization_id = p_employer_id;
4572 
4573    /*Cursor for fetching employees*/
4574     CURSOR csr_get_emp (l_employer number , l_date date , l_nat_cd varchar2) IS
4575     SELECT distinct asg.person_id
4576                     ,paa.assignment_action_id
4577                     ,ppa.date_earned
4578     FROM   per_all_assignments_f asg
4579            ,pay_assignment_actions paa
4580            ,pay_payroll_actions ppa
4581            ,hr_soft_coding_keyflex hscl
4582            ,per_periods_of_service pos
4583            ,per_all_people_f ppf
4584     WHERE  asg.assignment_id = paa.assignment_id
4585     AND    paa.payroll_action_id = ppa.payroll_action_id
4586     AND    pos.period_of_service_id = asg.period_of_service_id
4587     AND    ppa.action_type in ('R','Q')
4588     AND    ppa.action_status = 'C'
4589     AND    paa.action_status IN ('C','S')
4590     AND    trunc(ppa.date_earned,'MM') = TRUNC(l_date, 'MM')
4591     AND    trunc(l_date, 'MM') between trunc(asg.effective_start_date,'MM') and asg.effective_end_date
4592     AND    hscl.soft_coding_keyflex_id = asg.soft_coding_keyflex_id
4593     AND    hscl.segment1 = to_char(l_employer)
4594     AND    ppf.person_id = asg.person_id
4595     AND    trunc(l_date, 'MM') between trunc(ppf.effective_start_date,'MM') and ppf.effective_end_date
4596     AND    ppf.per_information18 = l_nat_cd;
4597 
4598     /* Cursor for fetching the person data */
4599     	CURSOR csr_get_person_data (l_person_id number,l_effective_date date) IS
4600     	SELECT ppf.full_name, ppf.employee_number
4601     	FROM	per_all_people_f ppf
4602     	WHERE 	ppf.person_id = l_person_id
4603     	AND	l_effective_date between ppf.effective_start_date and ppf.effective_end_date;
4604 
4605     /* Cursor for fetching the person's assignment data */
4606     	CURSOR csr_get_person_asg_data (l_person_id number,l_effective_date date) IS
4607     	SELECT hsck.segment3
4608     	FROM	per_all_assignments_f paf,hr_soft_coding_keyflex hsck
4609     	WHERE 	paf.person_id = l_person_id
4610     	AND     paf.soft_coding_keyflex_id = hsck.soft_coding_keyflex_id
4611     	AND     hsck.segment1 = p_employer_id
4612     	AND	l_effective_date between paf.effective_start_date and paf.effective_end_date;
4613 
4614     /* Cursor for fetching Defined balance ids from Org EIT */
4615         CURSOR csr_get_def_bal_ids (l_bg_id number) IS
4616         SELECT  ORG_INFORMATION1,ORG_INFORMATION2,ORG_INFORMATION3,ORG_INFORMATION4,ORG_INFORMATION5,ORG_INFORMATION6,ORG_INFORMATION7,ORG_INFORMATION8,ORG_INFORMATION9,ORG_INFORMATION10
4617         FROM    HR_ORGANIZATION_INFORMATION
4618         WHERE   Organization_id = l_bg_id
4619         AND	org_information_context = 'AE_SI_DETAILS';
4620 
4621    /* Cursor to retrieve Defined Balance Id */
4622         CURSOR csr_def_bal_id(p_user_name VARCHAR2) IS
4623 	SELECT  u.creator_id
4624 	FROM    ff_user_entities  u,
4625 	        ff_database_items d
4626 	WHERE   d.user_name = p_user_name
4627 	AND     u.user_entity_id = d.user_entity_id
4628 	AND     (u.legislation_code = 'AE' )
4629 	AND     (u.business_group_id IS NULL )
4630 	AND     u.creator_type = 'B';
4631 
4632     TYPE def_bal_rec IS RECORD
4633     (def_bal_id                  NUMBER);
4634     TYPE t_def_bal_table IS TABLE OF def_bal_rec INDEX BY BINARY_INTEGER;
4635     t_store_def_bal   t_def_bal_table;
4636     TYPE assact_rec IS RECORD
4637     (person_id                 NUMBER
4638     ,assignment_action_id      NUMBER
4639     ,date_start                DATE);
4640     TYPE t_assact_table IS TABLE OF assact_rec INDEX BY BINARY_INTEGER;
4641     t_store_assact   t_assact_table;
4642     l_employer_name varchar2(240);
4643     l_input_date varchar2(30);
4644     l_effective_date date;
4645     l_employer_ssn number;
4646     l_basic_sal_id number;
4647     z number;
4648     l_accommodation_id number;
4649     l_social_id number;
4650     l_child_social_id number;
4651     l_tp_id number;
4652     l_ol1_id number;
4653     l_ol2_id number;
4654     l_ol3_id number;
4655     l_ol4_id number;
4656     l_cost_of_living_id number;
4657     l_index number;
4658     i number;
4659     k number;
4660     m number;
4661     j number;
4662     x number;
4663     l_new_processed number;
4664     l_all_processed number;
4665     l_new_count number;
4666     l_basic_val number(15,2);
4667     l_accommodation_val number(15,2);
4668     l_cost_of_living_val number(15,2);
4669     l_child_allow_val number(15,2);
4670     l_social_allow_val number(15,2);
4671     l number;
4672     l_full_name varchar2(240);
4673     l_emp_ssn varchar2(30);
4674     l_employee_cont number(15,2);
4675     l_employer_cont number(15,2);
4676     l_employee_adj_cont number(15,2);
4677     l_employer_adj_cont number(15,2);
4678     l_total_cont number(15,2);
4679     l_basic_total number(15,2) := 0;
4680     l_col_total number(15,2) := 0;
4681     l_social_total number(15,2) := 0;
4682     l_child_total number(15,2) := 0;
4683     l_acco_total number(15,2) := 0;
4684     l_total_allow_total number(15,2) := 0;
4685     l_total_ee_cont_total number(15,2) := 0;
4686     l_total_er_cont_total number(15,2) := 0;
4687     l_total_cont_total number(15,2) := 0;
4688     L_TOTAL number(15,2);
4689     L_FM_TOTAL_VAL varchar2(100);
4690     l_fm_l_basic_val varchar2(100);
4691     l_fm_l_accommodation_val varchar2(100);
4692     l_fm_l_cost_of_living_val varchar2(100);
4693     l_fm_l_child_allow_val varchar2(100);
4694     l_fm_l_social_allow_val varchar2(100);
4695     l_fm_l_total_allow_total varchar2(100);
4696     l_fm_l_basic_total varchar2(100);
4697     l_fm_l_col_total varchar2(100);
4698     l_fm_l_social_total varchar2(100);
4699     l_fm_l_child_total varchar2(100);
4700     l_fm_l_acco_total varchar2(100);
4701     l_fm_ee_cont_total varchar2(240);
4702     l_fm_er_cont_total varchar2(240);
4703     l_fm_total_cont varchar2(240);
4704     l_fm_total_ee_cont_total varchar2(240);
4705     l_fm_total_er_cont_total varchar2(240);
4706     l_fm_total_cont_total varchar2(240);
4707     rec_get_emp        csr_get_emp%ROWTYPE;
4708     l_xfdf_string              CLOB;
4709     l_str_er_name varchar2(240);
4710     l_str_er_ssn varchar2(240);
4711     l_str_ee_name varchar2(240);
4712     l_str_ee_ssn varchar2(240);
4713     l_str_year varchar2(240);
4714     l_str_month varchar2(240);
4715     l_str_seq_no varchar2(240);
4716     l_str_bsd varchar2(240);
4717     l_str_bsf varchar2(240);
4718     l_str_cold varchar2(240);
4719     l_str_colf varchar2(240);
4720     l_str_socd varchar2(240);
4721     l_str_socf varchar2(240);
4722     l_str_chd varchar2(240);
4723     l_str_chf varchar2(240);
4724     l_str_accd varchar2(240);
4725     l_str_accf varchar2(240);
4726     l_str_total_dinars varchar2(240);
4727     l_str_total_fills varchar2(240);
4728     l_str_total_allow_total_f varchar2(240);
4729     l_str_total_allow_total_d varchar2(240);
4730     l_str_ee_cont_f_total varchar2(240);
4731     l_str_ee_cont_d_total varchar2(240);
4732     l_str_er_cont_f_total varchar2(240);
4733     l_str_er_cont_d_total varchar2(240);
4734     l_str_total_cont_f varchar2(240);
4735     l_str_total_cont_d varchar2(240);
4736     l_str_bf_total varchar2(240);
4737     l_str_bd_total varchar2(240);
4738     l_str_colf_total varchar2(240);
4739     l_str_cold_total varchar2(240);
4740     l_str_socf_total varchar2(240);
4741     l_str_socd_total varchar2(240);
4742     l_str_chf_total varchar2(240);
4743     l_str_chd_total varchar2(240);
4744     l_str_accf_total varchar2(240);
4745     l_str_accd_total varchar2(240);
4746     l_str_total_ee_cont_f_total varchar2(240);
4747     l_str_total_ee_cont_d_total varchar2(240);
4748     l_str_total_er_cont_f_total varchar2(240);
4749     l_str_total_er_cont_d_total varchar2(240);
4750     l_str_total_cont_f_total varchar2(240);
4751     l_str_total_cont_d_total varchar2(240);
4752 
4753     l_employee_number varchar2(100);
4754     l_str_ee_eno varchar2(240);
4755     l_defined_balance_id number;
4756     L_EMPLOYEE_ARR_CONT number(15,2);
4757     l_nat_cd varchar2(30);
4758 
4759    BEGIN
4760 
4761     set_currency_mask(p_business_group_id);
4762     l_input_date := '01-'||p_effective_month||'-'||p_effective_year;
4763     l_effective_date := last_day(to_date(l_input_date,'DD-MM-YYYY'));
4764     INSERT INTO fnd_sessions (session_id, effective_date)
4765     VALUES (userenv('sessionid'), l_effective_date);
4766     hr_utility.set_location('Entering Monthly Contribution Federal',10);
4767 
4768     /* Fetch Local Nationality */
4769     OPEN csr_get_loc_nat;
4770     FETCH csr_get_loc_nat into l_nat_cd;
4771     CLOSE csr_get_loc_nat;
4772 
4773     /*Fetch Employer Name*/
4774     OPEN csr_employer_name;
4775     FETCH csr_employer_name INTO l_employer_name;
4776     CLOSE csr_employer_name;
4777 
4778     dbms_lob.createtemporary(l_xfdf_string,FALSE,DBMS_LOB.CALL);
4779     dbms_lob.open(l_xfdf_string,dbms_lob.lob_readwrite);
4780     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
4781     clob_to_blob(l_xfdf_string,l_xfdf_blob);
4782     dbms_lob.writeAppend( l_xfdf_string, length('<START>'),'<START>');
4783 
4784     /* Fetch Defined Balance IDs from EIT */
4785     OPEN csr_get_def_bal_ids (p_employer_id);
4786     FETCH csr_get_def_bal_ids into l_basic_sal_id,l_accommodation_id,l_social_id,l_child_social_id,l_cost_of_living_id,l_ol1_id,l_tp_id,l_ol2_id,l_ol3_id,l_ol4_id;
4787     CLOSE csr_get_def_bal_ids;
4788 
4789     z := 1;
4790     t_store_def_bal(z).def_bal_id := l_basic_sal_id;
4791     z := z + 1;
4792     t_store_def_bal(z).def_bal_id := l_cost_of_living_id;
4793     z := z + 1;
4794     t_store_def_bal(z).def_bal_id := l_social_id;
4795     z := z + 1;
4796     t_store_def_bal(z).def_bal_id := l_child_social_id;
4797     z := z + 1;
4798     t_store_def_bal(z).def_bal_id := l_accommodation_id;
4799     z := z + 1;
4800     i := 0;
4801     k := 0;
4802     m := 0;
4803     /* Fetch Employee Details */
4804     OPEN csr_get_emp(p_employer_id , l_effective_date , l_nat_cd);
4805     LOOP
4806       FETCH csr_get_emp INTO rec_get_emp;
4807       EXIT WHEN csr_get_emp%NOTFOUND;
4808       i := i + 1;
4809       t_store_assact(i).person_id := rec_get_emp.person_id;
4810       t_store_assact(i).assignment_action_id := rec_get_emp.assignment_action_id;
4811       t_store_assact(i).date_start := rec_get_emp.date_earned;
4812     END LOOP;
4813     CLOSE csr_get_emp;
4814     IF i > 0  THEN
4815       l_new_processed := 0;
4816     ELSE
4817       l_new_processed := 1;
4818     END IF;
4819     l_all_processed := 0;
4820         j := 1;
4821         l := 1;
4822     WHILE l_all_processed  <> 1 LOOP
4823     --Writing data for new employees
4824     l_new_count := 0;
4825       dbms_lob.writeAppend( l_xfdf_string, length('<EMP-REC>'),'<EMP-REC>');
4826     WHILE j <= i LOOP
4827 /**** RESET ALL THE VARIABLES *****/
4828       l_basic_val := 0;
4829       l_cost_of_living_val := 0;
4830       l_social_allow_val := 0;
4831       l_child_allow_val := 0;
4832       l_accommodation_val := 0;
4833       l_total := 0;
4834       l_employee_cont := 0;
4835       l_employer_cont := 0;
4836       l_employee_adj_cont := 0;
4837       l_employer_adj_cont := 0;
4838       x := 1;
4839       IF t_store_def_bal(x).def_bal_id is not null THEN
4840 		l_basic_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4841 		x:= x + 1;
4842       ELSE
4843       		l_basic_val := 0;
4844       		x:= x + 1;
4845       END IF;
4846       IF t_store_def_bal(x).def_bal_id is not null THEN
4847 		l_cost_of_living_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4848 		x:= x + 1;
4849       ELSE
4850       		l_cost_of_living_val := 0;
4851       		x:= x + 1;
4852       END IF;
4853       IF t_store_def_bal(x).def_bal_id is not null THEN
4854 		l_social_allow_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4855 		x:= x + 1;
4856       ELSE
4857       		l_social_allow_val := 0;
4858       		x:= x + 1;
4859       END IF;
4860       IF t_store_def_bal(x).def_bal_id is not null THEN
4861 		l_child_allow_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4862 		x:= x + 1;
4863       ELSE
4864       		l_child_allow_val := 0;
4865       		x:= x + 1;
4866       END IF;
4867       IF t_store_def_bal(x).def_bal_id is not null THEN
4868 		l_accommodation_val := pay_balance_pkg.get_value(t_store_def_bal(x).def_bal_id,t_store_assact(j).assignment_action_id);
4869 		x:= x + 1;
4870       ELSE
4871       		l_accommodation_val := 0;
4872       		x:= x + 1;
4873       END IF;
4874 
4875       l_new_count := l_new_count + 1;
4876       l_fm_l_basic_val := to_char(abs(l_basic_val),lg_format_mask);
4877       l_fm_l_cost_of_living_val := to_char(abs(l_cost_of_living_val),lg_format_mask);
4878       l_fm_l_social_allow_val := to_char(abs(l_social_allow_val),lg_format_mask);
4879       l_fm_l_child_allow_val := to_char(abs(l_child_allow_val),lg_format_mask);
4880       l_fm_l_accommodation_val := to_char(abs(l_accommodation_val),lg_format_mask);
4881 
4882 		BEGIN
4883 			SELECT decode(l_basic_val/(abs(decode(l_basic_val,0,1,l_basic_val))*-1),1,'-'||l_fm_l_basic_val,l_fm_l_basic_val)
4884 			INTO l_fm_l_basic_val
4885 			FROM dual;
4886 
4887 			SELECT decode(l_cost_of_living_val/(abs(decode(l_cost_of_living_val,0,1,l_cost_of_living_val))*-1),1,'-'||l_fm_l_cost_of_living_val,l_fm_l_cost_of_living_val)
4888 			INTO l_fm_l_cost_of_living_val
4889 			FROM dual;
4890 
4891 			SELECT decode(l_social_allow_val/(abs(decode(l_social_allow_val,0,1,l_social_allow_val))*-1),1,'-'||l_fm_l_social_allow_val,l_fm_l_social_allow_val)
4892 			INTO l_fm_l_social_allow_val
4893 			FROM dual;
4894 
4895 			SELECT decode(l_child_allow_val/(abs(decode(l_child_allow_val,0,1,l_child_allow_val))*-1),1,'-'||l_fm_l_child_allow_val,l_fm_l_child_allow_val)
4896 			INTO l_fm_l_child_allow_val
4897 			FROM dual;
4898 
4899 			SELECT decode(l_accommodation_val/(abs(decode(l_accommodation_val,0,1,l_accommodation_val))*-1),1,'-'||l_fm_l_accommodation_val,l_fm_l_accommodation_val)
4900 			INTO l_fm_l_accommodation_val
4901 			FROM dual;
4902 
4903 
4904 		EXCEPTION
4905 			WHEN no_data_found then
4906 				null;
4907 	      END;
4908 
4909 
4910       /* Fetch balance values for Employee SI Contribution and Employer SI Contribution */
4911       pay_balance_pkg.set_context('DATE_EARNED',fnd_date.date_to_canonical(l_effective_date));
4912       pay_balance_pkg.set_context('TAX_UNIT_ID',p_employer_id);
4913 
4914       OPEN csr_def_bal_id('EMPLOYEE_SOCIAL_INSURANCE_ADJUSTMENT_ASG_RUN');
4915       FETCH csr_def_bal_id INTO l_defined_balance_id;
4916       CLOSE csr_def_bal_id;
4917 
4918       l_employee_adj_cont := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id);
4919       OPEN csr_def_bal_id('EMPLOYEE_SOCIAL_INSURANCE_ARREARS_ASG_RUN');
4920 	FETCH csr_def_bal_id INTO l_defined_balance_id;
4921       CLOSE csr_def_bal_id;
4922 
4923       l_employee_arr_cont := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id);
4924       OPEN csr_def_bal_id('EMPLOYEE_SOCIAL_INSURANCE_ASG_RUN');
4925 	FETCH csr_def_bal_id INTO l_defined_balance_id;
4926       CLOSE csr_def_bal_id;
4927 
4928       l_employee_cont := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id) + l_employee_adj_cont + l_employee_arr_cont;
4929       OPEN csr_def_bal_id('EMPLOYER_SOCIAL_INSURANCE_ADJUSTMENT_ASG_RUN');
4930 	FETCH csr_def_bal_id INTO l_defined_balance_id;
4931       CLOSE csr_def_bal_id;
4932 
4933       l_employer_adj_cont := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id);
4934       OPEN csr_def_bal_id('EMPLOYER_SOCIAL_INSURANCE_ASG_RUN');
4935 	FETCH csr_def_bal_id INTO l_defined_balance_id;
4936       CLOSE csr_def_bal_id;
4937 
4938       l_employer_cont := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id) + l_employer_adj_cont;
4939       OPEN csr_def_bal_id('SUBJECT_TO_SOCIAL_INSURANCE_ASG_RUN');
4940 	FETCH csr_def_bal_id INTO l_defined_balance_id;
4941       CLOSE csr_def_bal_id;
4942 
4943       l_total := pay_balance_pkg.get_value(l_defined_balance_id,t_store_assact(j).assignment_action_id);
4944       l_fm_total_val := to_char(abs(l_total),lg_format_mask);
4945       l_total_cont := l_employee_cont + l_employer_cont;
4946       l_fm_ee_cont_total := to_char(abs(l_employee_cont),lg_format_mask);
4947       l_fm_er_cont_total := to_char(abs(l_employer_cont),lg_format_mask);
4948       l_fm_total_cont := to_char(abs(l_total_cont),lg_format_mask);
4949 
4950 
4951 		BEGIN
4952 			SELECT decode(l_total/(abs(decode(l_total,0,1,l_total))*-1),1,'-'||l_fm_total_val,l_fm_total_val)
4953 			INTO l_fm_total_val
4954 			FROM dual;
4955 
4956 			SELECT decode(l_employee_cont/(abs(decode(l_employee_cont,0,1,l_employee_cont))*-1),1,'-'||l_fm_ee_cont_total,l_fm_ee_cont_total)
4957 			INTO l_fm_ee_cont_total
4958 			FROM dual;
4959 
4960 			SELECT decode(l_employer_cont/(abs(decode(l_employer_cont,0,1,l_employer_cont))*-1),1,'-'||l_fm_er_cont_total,l_fm_er_cont_total)
4961 			INTO l_fm_er_cont_total
4962 			FROM dual;
4963 
4964 			SELECT decode(l_total_cont/(abs(decode(l_total_cont,0,1,l_total_cont))*-1),1,'-'||l_fm_total_cont,l_fm_total_cont)
4965 			INTO l_fm_total_cont
4966 			FROM dual;
4967 
4968 		EXCEPTION
4969 			WHEN no_data_found then
4970 				null;
4971 	      END;
4972 
4973       /* Fetch Person details */
4974       OPEN csr_get_person_data(t_store_assact(j).person_id,l_effective_date);
4975       FETCH csr_get_person_data INTO l_full_name,l_employee_number;
4976       CLOSE csr_get_person_data;
4977 
4978       OPEN csr_get_person_asg_data(t_store_assact(j).person_id, l_effective_date);
4979       FETCH csr_get_person_asg_data into l_emp_ssn;
4980       CLOSE csr_get_person_asg_data;
4981 
4982       l_str_er_name := '<EMPLOYER_NAME>'||l_employer_name||'</EMPLOYER_NAME>';
4983       l_str_year := '<YEAR>'||p_effective_year||'</YEAR>';
4984       l_str_month := '<MONTH>' || p_effective_month || '</MONTH>';
4985       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_name), l_str_er_name);
4986       dbms_lob.writeAppend( l_xfdf_string, length(l_str_year), l_str_year);
4987       dbms_lob.writeAppend( l_xfdf_string, length(l_str_month), l_str_month);
4988 
4989       /* Write into allowances columns and Employee Details columns */
4990       l_str_seq_no := '<SER-' || l ||'>'||l||'</SER-'|| l || '>';
4991       l_str_ee_ssn :=  '<SSN-' || l || '>'||l_emp_ssn ||'</SSN-' || l || '>';
4992       l_str_ee_eno :=  '<EMPLOYEE-NUMBER-' || l || '>'||l_employee_number ||'</EMPLOYEE-NUMBER-' || l || '>';
4993       l_str_ee_name := '<EMPLOYEE-NAME-'|| l || '>'|| substr(l_full_name,1,60) ||'</EMPLOYEE-NAME-'|| l || '>';
4994       l_str_bsd := '<BASIC-SALARY-DINARS-' || l ||'>'||substr(l_fm_l_basic_val,1,length(l_fm_l_basic_val)-3)||'</BASIC-SALARY-DINARS-'|| l || '>';
4995       l_str_bsf := '<BASIC-SALARY-FILLS-' || l ||'>'||substr(l_fm_l_basic_val,length(l_fm_l_basic_val)-1)||'</BASIC-SALARY-FILLS-'|| l || '>';
4996       l_str_cold := '<COL-DINARS-'|| l || '>' ||substr(l_fm_l_cost_of_living_val,1,length(l_fm_l_cost_of_living_val)-3)||'</COL-DINARS-'|| l || '>';
4997       l_str_colf := '<COL-FILLS-'|| l || '>' ||substr(l_fm_l_cost_of_living_val,length(l_fm_l_cost_of_living_val)-1)||'</COL-FILLS-'|| l || '>';
4998       l_str_socd := '<SOCIAL-DINARS-'|| l || '>' ||substr(l_fm_l_social_allow_val,1,length(l_fm_l_social_allow_val)-3)||'</SOCIAL-DINARS-'|| l || '>';
4999       l_str_socf := '<SOCIAL-FILLS-'|| l || '>' ||substr(l_fm_l_social_allow_val,length(l_fm_l_social_allow_val)-1)||'</SOCIAL-FILLS-'|| l || '>';
5000       l_str_chd := '<CHILD-DINARS-'|| l || '>' ||substr(l_fm_l_child_allow_val,1,length(l_fm_l_child_allow_val)-3)||'</CHILD-DINARS-'|| l || '>';
5001       l_str_chf := '<CHILD-FILLS-'|| l || '>' ||substr(l_fm_l_child_allow_val,length(l_fm_l_child_allow_val)-1)||'</CHILD-FILLS-'|| l || '>';
5002       l_str_accd := '<HOUSING-DINARS-'|| l || '>' ||substr(l_fm_l_accommodation_val,1,length(l_fm_l_accommodation_val)-3)||'</HOUSING-DINARS-'|| l || '>';
5003       l_str_accf := '<HOUSING-FILLS-'|| l || '>' ||substr(l_fm_l_accommodation_val,length(l_fm_l_accommodation_val)-1)||'</HOUSING-FILLS-'|| l || '>';
5004       l_str_total_dinars := '<TOTAL-DINARS-'|| l || '>' ||substr(l_fm_total_val,1,length(l_fm_total_val)-3)||'</TOTAL-DINARS-'|| l || '>';
5005       l_str_total_fills := '<TOTAL-FILLS-'|| l || '>' ||substr(l_fm_total_val,length(l_fm_total_val)-1)||'</TOTAL-FILLS-'|| l || '>';
5006       /* Write into contribution columns */
5007       l_str_ee_cont_f_total := '<INSURANCE-CONT-FILLS-'|| l || '>' ||substr(l_fm_ee_cont_total,length(l_fm_ee_cont_total)-1)||'</INSURANCE-CONT-FILLS-'|| l || '>';
5008       l_str_ee_cont_d_total := '<INSURED-CONT-DINARS-' || l ||'>'||substr(l_fm_ee_cont_total,1,length(l_fm_ee_cont_total)-3)||'</INSURED-CONT-DINARS-'|| l || '>';
5009       l_str_er_cont_f_total := '<EMPLOYER-CONT-FILLS-'|| l || '>' ||substr(l_fm_er_cont_total,length(l_fm_er_cont_total)-1)||'</EMPLOYER-CONT-FILLS-'|| l || '>';
5010       l_str_er_cont_d_total := '<EMPLOYER-CONT-DINARS-' || l ||'>'||substr(l_fm_er_cont_total,1,length(l_fm_er_cont_total)-3)||'</EMPLOYER-CONT-DINARS-'|| l || '>';
5011       l_str_total_cont_f := '<TOTAL-CONT-FILLS-'|| l || '>' ||substr(l_fm_total_cont,length(l_fm_total_cont)-1)||'</TOTAL-CONT-FILLS-'|| l || '>';
5012       l_str_total_cont_d := '<TOTAL-CONT-DINARS-' || l ||'>'||substr(l_fm_total_cont,1,length(l_fm_total_cont)-3)||'</TOTAL-CONT-DINARS-'|| l || '>';
5013       dbms_lob.writeAppend( l_xfdf_string, length(l_str_seq_no), l_str_seq_no);
5014       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_ssn), l_str_ee_ssn);
5015       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_eno), l_str_ee_eno);
5016       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_name), l_str_ee_name);
5017       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsd), l_str_bsd);
5018       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bsf), l_str_bsf);
5019       dbms_lob.writeAppend( l_xfdf_string, length(l_str_cold), l_str_cold);
5020       dbms_lob.writeAppend( l_xfdf_string, length(l_str_colf), l_str_colf);
5021       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socd), l_str_socd);
5022       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socf), l_str_socf);
5023       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chd), l_str_chd);
5024       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chf), l_str_chf);
5025       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accd), l_str_accd);
5026       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accf), l_str_accf);
5027       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_dinars), l_str_total_dinars);
5028       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_fills), l_str_total_fills);
5029       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_cont_f_total), l_str_ee_cont_f_total);
5030       dbms_lob.writeAppend( l_xfdf_string, length(l_str_ee_cont_d_total), l_str_ee_cont_d_total);
5031       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_cont_f_total), l_str_er_cont_f_total);
5032       dbms_lob.writeAppend( l_xfdf_string, length(l_str_er_cont_d_total), l_str_er_cont_d_total);
5033       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_f), l_str_total_cont_f);
5034       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_d), l_str_total_cont_d);
5035       /* Calculate the total values of allowances for each row */
5036       l_basic_total := l_basic_total + l_basic_val;
5037       l_col_total := l_col_total + l_cost_of_living_val;
5038       l_social_total := l_social_total + l_social_allow_val;
5039       l_child_total := l_child_total + l_child_allow_val;
5040       l_acco_total := l_acco_total + l_accommodation_val;
5041       l_total_allow_total := l_total_allow_total + l_total;
5042       /* Calculate the total contribution of Employees and Employers, i.e., for last 6 (dinars and fills included) columns of report */
5043       l_total_ee_cont_total := l_total_ee_cont_total + l_employee_cont;
5044       l_total_er_cont_total := l_total_er_cont_total + l_employer_cont;
5045       l_total_cont_total := l_total_cont_total + l_total_cont;
5046 
5047       l_fm_l_basic_total := to_char(abs(l_basic_total),lg_format_mask);
5048       l_fm_l_col_total := to_char(abs(l_basic_total),lg_format_mask);
5049       l_fm_l_social_total := to_char(abs(l_social_total),lg_format_mask);
5050       l_fm_l_child_total := to_char(abs(l_child_total),lg_format_mask);
5051       l_fm_l_acco_total := to_char(abs(l_acco_total),lg_format_mask);
5052       l_fm_l_total_allow_total := to_char(abs(l_total_allow_total),lg_format_mask);
5053       l_fm_total_ee_cont_total := to_char(abs(l_total_ee_cont_total),lg_format_mask);
5054       l_fm_total_er_cont_total := to_char(abs(l_total_er_cont_total),lg_format_mask);
5055       l_fm_total_cont_total := to_char(abs(l_total_cont_total),lg_format_mask);
5056 
5057 		BEGIN
5058 			SELECT decode(l_basic_total/(abs(decode(l_basic_total,0,1,l_basic_total))*-1),1,'-'||l_fm_l_basic_total,l_fm_l_basic_total)
5059 			INTO l_fm_l_basic_total
5060 			FROM dual;
5061 
5062 			SELECT decode(l_basic_total/(abs(decode(l_basic_total,0,1,l_basic_total))*-1),1,'-'||l_fm_l_col_total,l_fm_l_col_total)
5063 			INTO l_fm_l_col_total
5064 			FROM dual;
5065 
5066 			SELECT decode(l_social_total/(abs(decode(l_social_total,0,1,l_social_total))*-1),1,'-'||l_fm_l_social_total,l_fm_l_social_total)
5067 			INTO l_fm_l_social_total
5068 			FROM dual;
5069 
5070 			SELECT decode(l_child_total/(abs(decode(l_child_total,0,1,l_child_total))*-1),1,'-'||l_fm_l_child_total,l_fm_l_child_total)
5071 			INTO l_fm_l_child_total
5072 			FROM dual;
5073 
5074 			SELECT decode(l_acco_total/(abs(decode(l_acco_total,0,1,l_acco_total))*-1),1,'-'||l_fm_l_acco_total,l_fm_l_acco_total)
5075 			INTO l_fm_l_acco_total
5076 			FROM dual;
5077 
5078 			SELECT decode(l_total_allow_total/(abs(decode(l_total_allow_total,0,1,l_total_allow_total))*-1),1,'-'||l_fm_l_total_allow_total,l_fm_l_total_allow_total)
5079 			INTO l_fm_l_total_allow_total
5080 			FROM dual;
5081 
5082 			SELECT decode(l_total_ee_cont_total/(abs(decode(l_total_ee_cont_total,0,1,l_total_ee_cont_total))*-1),1,'-'||l_fm_total_ee_cont_total,l_fm_total_ee_cont_total)
5083 			INTO l_fm_total_ee_cont_total
5084 			FROM dual;
5085 
5086 			SELECT decode(l_total_er_cont_total/(abs(decode(l_total_er_cont_total,0,1,l_total_er_cont_total))*-1),1,'-'||l_fm_total_er_cont_total,l_fm_total_er_cont_total)
5087 			INTO l_fm_total_er_cont_total
5088 			FROM dual;
5089 
5090 			SELECT decode(l_total_cont_total/(abs(decode(l_total_cont_total,0,1,l_total_cont_total))*-1),1,'-'||l_fm_total_cont_total,l_fm_total_cont_total)
5091 			INTO l_fm_total_cont_total
5092 			FROM dual;
5093 
5094 		EXCEPTION
5095 			WHEN no_data_found then
5096 				null;
5097 	      END;
5098 
5099       j := j + 1;
5100       l := l + 1;
5101       IF j > i THEN
5102         l_new_processed := 1;
5103       END IF;
5104       IF l_new_count = 7 THEN
5105     /* Write into total of allowances total row , at the end of each page */
5106     l_str_bf_total := '<BASIC-SALARY-FILLS-TOTAL>' ||substr(l_fm_l_basic_total,length(l_fm_l_basic_total)-1)||'</BASIC-SALARY-FILLS-TOTAL>';
5107     l_str_bd_total := '<BASIC-SALARY-DINARS-TOTAL>'||substr(l_fm_l_basic_total,1,length(l_fm_l_basic_total)-3)||'</BASIC-SALARY-DINARS-TOTAL>';
5108     l_str_colf_total := '<COL-FILLS-TOTAL>' ||substr(l_fm_l_col_total,length(l_fm_l_col_total)-1)||'</COL-FILLS-TOTAL>';
5109     l_str_cold_total := '<COL-DINARS-TOTAL>'||substr(l_fm_l_col_total,1,length(l_fm_l_col_total)-3)||'</COL-DINARS-TOTAL>';
5110     l_str_socf_total := '<SOCIAL-FILLS-TOTAL>' ||substr(l_fm_l_social_total,length(l_fm_l_social_total)-1)||'</SOCIAL-FILLS-TOTAL>';
5111     l_str_socd_total := '<SOCIAL-DINARS-TOTAL>'||substr(l_fm_l_social_total,1,length(l_fm_l_social_total)-3)||'</SOCIAL-DINARS-TOTAL>';
5112     l_str_chf_total := '<CHILD-FILLS-TOTAL>' ||substr(l_fm_l_child_total,length(l_fm_l_child_total)-1)||'</CHILD-FILLS-TOTAL>';
5113     l_str_chd_total := '<CHILD-DINARS-TOTAL>'||substr(l_fm_l_child_total,1,length(l_fm_l_child_total)-3)||'</CHILD-DINARS-TOTAL>';
5114     l_str_accf_total := '<HOUSING-FILLS-TOTAL>' ||substr(l_fm_l_acco_total,length(l_fm_l_acco_total)-1)||'</HOUSING-FILLS-TOTAL>';
5115     l_str_accd_total := '<HOUSING-DINARS-TOTAL>'||substr(l_fm_l_acco_total,1,length(l_fm_l_acco_total)-3)||'</HOUSING-DINARS-TOTAL>';
5116     l_str_total_allow_total_f := '<TOTAL-FILLS-TOTAL>' ||substr(l_fm_l_total_allow_total,length(l_fm_l_total_allow_total)-1)||'</TOTAL-FILLS-TOTAL>';
5117     l_str_total_allow_total_d := '<TOTAL-DINARS-TOTAL>'||substr(l_fm_l_total_allow_total,1,length(l_fm_l_total_allow_total)-3)||'</TOTAL-DINARS-TOTAL>';
5118     /* Write into contributions total row at the end of each page */
5119     l_str_total_ee_cont_f_total := '<INSURED-FILLS-TOTAL>' ||substr(l_fm_total_ee_cont_total,length(l_fm_total_ee_cont_total)-1)||'</INSURED-FILLS-TOTAL>';
5120     l_str_total_ee_cont_d_total := '<INSURED-DINARS-TOTAL>'||substr(l_fm_total_ee_cont_total,1,length(l_fm_total_ee_cont_total)-3)||'</INSURED-DINARS-TOTAL>';
5121     l_str_total_er_cont_f_total := '<EMPLOYER-CONT-FILLS-TOTAL>' ||substr(l_fm_total_er_cont_total,length(l_fm_total_er_cont_total)-1)||'</EMPLOYER-CONT-FILLS-TOTAL>';
5122     l_str_total_er_cont_d_total := '<EMPLOYER-CONT-DINARS-TOTAL>'||substr(l_fm_total_er_cont_total,1,length(l_fm_total_er_cont_total)-3)||'</EMPLOYER-CONT-DINARS-TOTAL>';
5123     l_str_total_cont_f_total := '<TOTAL-CONT-FILLS-TOTAL>' ||substr(l_fm_total_cont_total,length(l_fm_total_cont_total)-1)||'</TOTAL-CONT-FILLS-TOTAL>';
5124     l_str_total_cont_d_total := '<TOTAL-CONT-DINARS-TOTAL>'||substr(l_fm_total_cont_total,1,length(l_fm_total_cont_total)-3)||'</TOTAL-CONT-DINARS-TOTAL>';
5125       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bf_total), l_str_bf_total);
5126       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bd_total), l_str_bd_total);
5127       dbms_lob.writeAppend( l_xfdf_string, length(l_str_colf_total), l_str_colf_total);
5128       dbms_lob.writeAppend( l_xfdf_string, length(l_str_cold_total), l_str_cold_total);
5129       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socf_total), l_str_socf_total);
5130       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socd_total), l_str_socd_total);
5131       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chf_total), l_str_chf_total);
5132       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chd_total), l_str_chd_total);
5133       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accf_total), l_str_accf_total);
5134       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accd_total), l_str_accd_total);
5135       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_allow_total_f), l_str_total_allow_total_f);
5136       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_allow_total_d), l_str_total_allow_total_d);
5137       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_ee_cont_f_total), l_str_total_ee_cont_f_total);
5138       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_ee_cont_d_total), l_str_total_ee_cont_d_total);
5139       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_er_cont_f_total), l_str_total_er_cont_f_total);
5140       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_er_cont_d_total), l_str_total_er_cont_d_total);
5141       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_f_total), l_str_total_cont_f_total);
5142       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_d_total), l_str_total_cont_d_total);
5143       	dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
5144       /* Reset total values, displayed at the end of each page */
5145       l_basic_total := 0;
5146       l_col_total := 0;
5147       l_social_total := 0;
5148       l_child_total := 0;
5149       l_acco_total := 0;
5150       l_total_allow_total := 0;
5151       l_total_ee_cont_total := 0;
5152       l_total_er_cont_total := 0;
5153       l_total_cont_total := 0;
5154 --      	l := 1;
5155         EXIT;
5156       END IF;
5157     END LOOP;
5158     IF l_new_processed = 1 and l_new_count <> 7 THEN
5159       l_all_processed := 1;
5160     /* Write into total of allowances total row , at the end of each page */
5161     l_str_bf_total := '<BASIC-SALARY-FILLS-TOTAL>' ||substr(l_fm_l_basic_total,length(l_fm_l_basic_total)-1)||'</BASIC-SALARY-FILLS-TOTAL>';
5162     l_str_bd_total := '<BASIC-SALARY-DINARS-TOTAL>'||substr(l_fm_l_basic_total,1,length(l_fm_l_basic_total)-3)||'</BASIC-SALARY-DINARS-TOTAL>';
5163     l_str_colf_total := '<COL-FILLS-TOTAL>' ||substr(l_fm_l_col_total,length(l_fm_l_col_total)-1)||'</COL-FILLS-TOTAL>';
5164     l_str_cold_total := '<COL-DINARS-TOTAL>'||substr(l_fm_l_col_total,1,length(l_fm_l_col_total)-3)||'</COL-DINARS-TOTAL>';
5165     l_str_socf_total := '<SOCIAL-FILLS-TOTAL>' ||substr(l_fm_l_social_total,length(l_fm_l_social_total)-1)||'</SOCIAL-FILLS-TOTAL>';
5166     l_str_socd_total := '<SOCIAL-DINARS-TOTAL>'||substr(l_fm_l_social_total,1,length(l_fm_l_social_total)-3)||'</SOCIAL-DINARS-TOTAL>';
5167     l_str_chf_total := '<CHILD-FILLS-TOTAL>' ||substr(l_fm_l_child_total,length(l_fm_l_child_total)-1)||'</CHILD-FILLS-TOTAL>';
5168     l_str_chd_total := '<CHILD-DINARS-TOTAL>'||substr(l_fm_l_child_total,1,length(l_fm_l_child_total)-3)||'</CHILD-DINARS-TOTAL>';
5169     l_str_accf_total := '<HOUSING-FILLS-TOTAL>' ||substr(l_fm_l_acco_total,length(l_fm_l_acco_total)-1)||'</HOUSING-FILLS-TOTAL>';
5170     l_str_accd_total := '<HOUSING-DINARS-TOTAL>'||substr(l_fm_l_acco_total,1,length(l_fm_l_acco_total)-3)||'</HOUSING-DINARS-TOTAL>';
5171     l_str_total_allow_total_f := '<TOTAL-FILLS-TOTAL>' ||substr(l_fm_l_total_allow_total,length(l_fm_l_total_allow_total)-1)||'</TOTAL-FILLS-TOTAL>';
5172     l_str_total_allow_total_d := '<TOTAL-DINARS-TOTAL>'||substr(l_fm_l_total_allow_total,1,length(l_fm_l_total_allow_total)-3)||'</TOTAL-DINARS-TOTAL>';
5173     /* Write into contributions total row at the end of each page */
5174     l_str_total_ee_cont_f_total := '<INSURED-FILLS-TOTAL>' ||substr(l_fm_total_ee_cont_total,length(l_fm_total_ee_cont_total)-1)||'</INSURED-FILLS-TOTAL>';
5175     l_str_total_ee_cont_d_total := '<INSURED-DINARS-TOTAL>'||substr(l_fm_total_ee_cont_total,1,length(l_fm_total_ee_cont_total)-3)||'</INSURED-DINARS-TOTAL>';
5176     l_str_total_er_cont_f_total := '<EMPLOYER-CONT-FILLS-TOTAL>' ||substr(l_fm_total_er_cont_total,length(l_fm_total_er_cont_total)-1)||'</EMPLOYER-CONT-FILLS-TOTAL>';
5177     l_str_total_er_cont_d_total := '<EMPLOYER-CONT-DINARS-TOTAL>'||substr(l_fm_total_er_cont_total,1,length(l_fm_total_er_cont_total)-3)||'</EMPLOYER-CONT-DINARS-TOTAL>';
5178     l_str_total_cont_f_total := '<TOTAL-CONT-FILLS-TOTAL>' ||substr(l_fm_total_cont_total,length(l_fm_total_cont_total)-1)||'</TOTAL-CONT-FILLS-TOTAL>';
5179     l_str_total_cont_d_total := '<TOTAL-CONT-DINARS-TOTAL>'||substr(l_fm_total_cont_total,1,length(l_fm_total_cont_total)-3)||'</TOTAL-CONT-DINARS-TOTAL>';
5180       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bf_total), l_str_bf_total);
5181       dbms_lob.writeAppend( l_xfdf_string, length(l_str_bd_total), l_str_bd_total);
5182       dbms_lob.writeAppend( l_xfdf_string, length(l_str_colf_total), l_str_colf_total);
5183       dbms_lob.writeAppend( l_xfdf_string, length(l_str_cold_total), l_str_cold_total);
5184       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socf_total), l_str_socf_total);
5185       dbms_lob.writeAppend( l_xfdf_string, length(l_str_socd_total), l_str_socd_total);
5186       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chf_total), l_str_chf_total);
5187       dbms_lob.writeAppend( l_xfdf_string, length(l_str_chd_total), l_str_chd_total);
5188       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accf_total), l_str_accf_total);
5189       dbms_lob.writeAppend( l_xfdf_string, length(l_str_accd_total), l_str_accd_total);
5190       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_allow_total_f), l_str_total_allow_total_f);
5191       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_allow_total_d), l_str_total_allow_total_d);
5192       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_ee_cont_f_total), l_str_total_ee_cont_f_total);
5193       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_ee_cont_d_total), l_str_total_ee_cont_d_total);
5194       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_er_cont_f_total), l_str_total_er_cont_f_total);
5195       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_er_cont_d_total), l_str_total_er_cont_d_total);
5196       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_f_total), l_str_total_cont_f_total);
5197       dbms_lob.writeAppend( l_xfdf_string, length(l_str_total_cont_d_total), l_str_total_cont_d_total);
5198       dbms_lob.writeAppend( l_xfdf_string, length('</EMP-REC>'),'</EMP-REC>');
5199       /* Reset total values, displayed at the end of each page */
5200       l_basic_total := 0;
5201       l_col_total := 0;
5202       l_social_total := 0;
5203       l_child_total := 0;
5204       l_acco_total := 0;
5205       l_total_allow_total := 0;
5206       l_total_ee_cont_total := 0;
5207       l_total_er_cont_total := 0;
5208       l_total_cont_total := 0;
5209     END IF;
5210     END LOOP;
5211     dbms_lob.writeAppend( l_xfdf_string, length('</START>'),'</START>');
5212     DBMS_LOB.CREATETEMPORARY(l_xfdf_blob,TRUE);
5213     clob_to_blob(l_xfdf_string,l_xfdf_blob);
5214     hr_utility.set_location('Finished creating xml data for Procedure Monthly Contribution Federal ',20);
5215    EXCEPTION
5216         WHEN utl_file.invalid_path then
5217                 hr_utility.set_message(8301, 'GHR_38830_INVALID_UTL_FILE_PATH');
5218                 fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5219                 hr_utility.raise_error;
5220 --
5221     WHEN utl_file.invalid_mode then
5222         hr_utility.set_message(8301, 'GHR_38831_INVALID_FILE_MODE');
5223         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5224                 hr_utility.raise_error;
5225 --
5226     WHEN utl_file.invalid_filehandle then
5227         hr_utility.set_message(8301, 'GHR_38832_INVALID_FILE_HANDLE');
5228         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5229                 hr_utility.raise_error;
5230 --
5231     WHEN utl_file.invalid_operation then
5232         hr_utility.set_message(8301, 'GHR_38833_INVALID_OPER');
5233         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5234                 hr_utility.raise_error;
5235 --
5236     WHEN utl_file.read_error then
5237         hr_utility.set_message(8301, 'GHR_38834_FILE_READ_ERROR');
5238         fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5239                 hr_utility.raise_error;
5240 --
5241     WHEN others THEN
5242        hr_utility.set_message(800,'FFU10_GENERAL_ORACLE_ERROR');
5243        hr_utility.set_message_token('2',substr(sqlerrm,1,200));
5244        fnd_file.put_line(fnd_file.log,HR_UTILITY.get_message);
5245            hr_utility.raise_error;
5246    END MCF;
5247 ---------------------------------------------------------------------------------------------------------
5248   PROCEDURE WritetoCLOB
5249     (p_xfdf_blob out nocopy blob)
5250   IS
5251     l_xfdf_string clob;
5252     l_str1 varchar2(1000);
5253     l_str2 varchar2(20);
5254     l_str3 varchar2(20);
5255     l_str4 varchar2(20);
5256     l_str5 varchar2(20);
5257     l_str6 varchar2(30);
5258     l_str7 varchar2(1000);
5259     l_str8 varchar2(240);
5260     l_str9 varchar2(240);
5261   BEGIN
5262     hr_utility.set_location('Entered Procedure Write to clob ',100);
5263     l_str1 := '<?xml version="1.0" encoding="UTF-8"?>
5264       		 <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
5265       		 <fields> ' ;
5266     l_str2 := '<field name="';
5267     l_str3 := '">';
5268     l_str4 := '<value>' ;
5269     l_str5 := '</value> </field>' ;
5270     l_str6 := '</fields> </xfdf>';
5271     l_str7 := '<?xml version="1.0" encoding="UTF-8"?>
5272 	       <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
5273        	       <fields>
5274        	       </fields> </xfdf>';
5275     dbms_lob.createtemporary(l_xfdf_string,FALSE,DBMS_LOB.CALL);
5276     dbms_lob.open(l_xfdf_string,dbms_lob.lob_readwrite);
5277     if vXMLTable.COUNT > 0 then
5278       dbms_lob.writeAppend( l_xfdf_string, length(l_str1), l_str1 );
5279       FOR ctr_table IN vXMLTable.FIRST .. vXMLTable.LAST LOOP
5280         l_str8 := vXMLTable(ctr_table).TagName;
5281         l_str9 := vXMLTable(ctr_table).TagValue;
5282         if (l_str9 is not null) then
5283 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str2), l_str2 );
5284 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str8),l_str8);
5285 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str3), l_str3 );
5286 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str4), l_str4 );
5287 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str9), l_str9);
5288 	  dbms_lob.writeAppend( l_xfdf_string, length(l_str5), l_str5 );
5289 	elsif (l_str9 is null and l_str8 is not null) then
5290 	  dbms_lob.writeAppend(l_xfdf_string,length(l_str2),l_str2);
5291 	  dbms_lob.writeAppend(l_xfdf_string,length(l_str8),l_str8);
5292 	  dbms_lob.writeAppend(l_xfdf_string,length(l_str3),l_str3);
5293 	  dbms_lob.writeAppend(l_xfdf_string,length(l_str4),l_str4);
5294 	  dbms_lob.writeAppend(l_xfdf_string,length(l_str5),l_str5);
5295 	else
5296 	  null;
5297 	end if;
5298       END LOOP;
5299       dbms_lob.writeAppend( l_xfdf_string, length(l_str6), l_str6 );
5300     else
5301       dbms_lob.writeAppend( l_xfdf_string, length(l_str7), l_str7 );
5302     end if;
5303     DBMS_LOB.CREATETEMPORARY(p_xfdf_blob,TRUE);
5304     clob_to_blob(l_xfdf_string,p_xfdf_blob);
5305     hr_utility.set_location('Finished Procedure Write to CLOB ,Before clob to blob ',110);
5306 	--return p_xfdf_blob;
5307   EXCEPTION
5308     WHEN OTHERS then
5309       HR_UTILITY.TRACE('sqleerm ' || SQLERRM);
5310       HR_UTILITY.RAISE_ERROR;
5311   END WritetoCLOB;
5312 ----------------------------------------------------------------
5313   Procedure  clob_to_blob
5314     (p_clob clob,
5315     p_blob IN OUT NOCOPY Blob)
5316   is
5317     l_length_clob number;
5318     l_offset pls_integer;
5319     l_varchar_buffer varchar2(32767);
5320     l_raw_buffer raw(32767);
5321     l_buffer_len number;
5322     l_chunk_len number;
5323     l_blob blob;
5324     g_nls_db_char varchar2(60);
5325     l_raw_buffer_len pls_integer;
5326     l_blob_offset    pls_integer := 1;
5327   begin
5328     l_buffer_len := 20000;
5329     hr_utility.set_location('Entered Procedure clob to blob',120);
5330     select userenv('LANGUAGE') into g_nls_db_char from dual;
5331     l_length_clob := dbms_lob.getlength(p_clob);
5332     l_offset := 1;
5333     while l_length_clob > 0 loop
5334       hr_utility.trace('l_length_clob '|| l_length_clob);
5335       if l_length_clob < l_buffer_len then
5336         l_chunk_len := l_length_clob;
5337       else
5338         l_chunk_len := l_buffer_len;
5339       end if;
5340       DBMS_LOB.READ(p_clob,l_chunk_len,l_offset,l_varchar_buffer);
5341       fnd_file.put_line(fnd_file.log,l_varchar_buffer);
5342       --l_raw_buffer := utl_raw.cast_to_raw(l_varchar_buffer);
5343       l_raw_buffer := utl_raw.convert(utl_raw.cast_to_raw(l_varchar_buffer),'American_America.UTF8',g_nls_db_char);
5344       l_raw_buffer_len := utl_raw.length(utl_raw.convert(utl_raw.cast_to_raw(l_varchar_buffer),'American_America.UTF8',g_nls_db_char));
5345       hr_utility.trace('l_varchar_buffer '|| l_varchar_buffer);
5346       --dbms_lob.write(p_blob,l_chunk_len, l_offset, l_raw_buffer);
5347       dbms_lob.write(p_blob,l_raw_buffer_len, l_blob_offset, l_raw_buffer);
5348       l_blob_offset := l_blob_offset + l_raw_buffer_len;
5349       l_offset := l_offset + l_chunk_len;
5350       l_length_clob := l_length_clob - l_chunk_len;
5351       hr_utility.trace('l_length_blob '|| dbms_lob.getlength(p_blob));
5352     end loop;
5353     hr_utility.set_location('Finished Procedure clob to blob ',130);
5354   end clob_to_blob;
5355 ------------------------------------------------------------------
5356   Procedure fetch_pdf_blob
5357 	(p_report in varchar2,
5358 	 p_pdf_blob OUT NOCOPY blob)
5359   IS
5360   BEGIN
5361     IF (p_report='FORM1') THEN
5362       Select file_data
5363       Into p_pdf_blob
5364       From fnd_lobs
5365       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_F1_ar_AE.pdf');
5366     ELSIF (p_report = 'FORM2') THEN
5367       Select file_data
5368       Into p_pdf_blob
5369       From fnd_lobs
5370       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_F2_ar_AE.pdf');
5371     ELSIF (p_report ='FORM6') THEN
5372       Select file_data
5373       Into p_pdf_blob
5374       From fnd_lobs
5375       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_F6_ar_AE.rtf');
5376     ELSIF (p_report ='MCP') THEN
5377       Select file_data
5378       Into p_pdf_blob
5379       From fnd_lobs
5380       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_MCP_ar_AE.rtf');
5381     ELSIF (p_report ='MCF') THEN
5382       Select file_data
5383       Into p_pdf_blob
5384       From fnd_lobs
5385       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_MCF_ar_AE.rtf');
5386     ELSIF (p_report ='FORM7') THEN
5387       Select file_data
5388       Into p_pdf_blob
5389       From fnd_lobs
5390       Where file_id = (select max(file_id) from fnd_lobs where file_name like '%PAY_F7_ar_AE.rtf');
5391     END IF;
5392   EXCEPTION
5393     when no_data_found then
5394       null;
5395   END fetch_pdf_blob;
5396 -------------------------------------------------------------------
5397 END pay_ae_SI_reports;