DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_IE_P35_XML_PKG

Source


1 PACKAGE BODY PAY_IE_P35_XML_PKG AS
2 /* $Header: pyiep35p.pkb 120.15.12020000.4 2013/02/04 11:44:12 rsahai ship $ */
3 
4 -------------------------------------------------------------------------------
5 -- get_IANA_charset
6 -------------------------------------------------------------------------------
7 FUNCTION get_IANA_charset RETURN VARCHAR2 IS
8     CURSOR csr_get_iana_charset IS
9         SELECT tag
10           FROM fnd_lookup_values
11          WHERE lookup_type = 'FND_ISO_CHARACTER_SET_MAP'
12            AND lookup_code = SUBSTR(USERENV('LANGUAGE'),
13                                     INSTR(USERENV('LANGUAGE'), '.') + 1)
14            AND language = 'US';
15 
16     lv_iana_charset fnd_lookup_values.tag%type;
17 BEGIN
18     OPEN csr_get_iana_charset;
19         FETCH csr_get_iana_charset INTO lv_iana_charset;
20     CLOSE csr_get_iana_charset;
21 
22     hr_utility.trace('IANA Charset = '||lv_iana_charset);
23     RETURN (lv_iana_charset);
24 END get_IANA_charset;
25 --
26 	-------------------------------------------------------------------------------
27 	-- WRITETOCLOB
28 	--------------------------------------------------------------------------------
29 	PROCEDURE WritetoCLOB (p_xfdf_string out nocopy clob)
30 	IS
31 	  l_str varchar2(240);
32 	  l_str1 varchar2(6000);
33 	BEGIN
34 	-- bug 5852148
35        --l_str := '<?xml version="1.0" encoding="UTF-8"?> <P35LFile></P35LFile>';
36          l_str := '<?xml version="1.0" encoding="' || get_IANA_charset ||'"?> <P35LFile></P35LFile>';
37 		dbms_lob.createtemporary(p_xfdf_string,FALSE,DBMS_LOB.CALL);
38 		dbms_lob.open(p_xfdf_string,dbms_lob.lob_readwrite);
39   	    hr_utility.set_location('TableCnt' || to_char(vXMLTable.count),13);
40 	    IF vXMLTable.count > 0 THEN
41 		FOR ctr_table IN vXMLTable.FIRST .. vXMLTable.LAST LOOP
42                   -- Bug 4705094
43 		l_str1 := vXMLTable(ctr_table).xmlString;
44 		dbms_lob.writeAppend( p_xfdf_string, length(l_str1), l_str1);
45 		hr_utility.set_location(to_char(ctr_table),15);
46 		END LOOP;
47 		ELSE
48 		  l_str1 := l_str;
49 		  dbms_lob.writeAppend( p_xfdf_string, length(l_str1), l_str1 );
50 	   END IF;
51 	END WritetoCLOB;
52 	--------------------------------------------------------------------------------
53 	-- POPULATE_P35_REPORT
54 	--------------------------------------------------------------------------------
55 	PROCEDURE populate_p35_rep
56 	  (p_bg_id IN NUMBER
57 	   ,p_emp_no IN VARCHAR2
58 	   ,p_payroll        IN NUMBER
59    	   ,p_assignment_set        IN NUMBER
60 	   ,p_end_date IN VARCHAR2
61 	   ,p_weeks IN VARCHAR2
62    	   ,p_template_name IN VARCHAR2
63        ,p_xml         OUT NOCOPY CLOB
64 	   )IS
65 	BEGIN
66 	--hr_utility.TRACE_ON( null, 'IEP35XML' );
67 	  populate_plsql_table(p_bg_id
68 			   ,p_emp_no
69 			   ,p_payroll
70    			   ,p_assignment_set
71 			   ,p_end_date
72 			   ,p_weeks);
73 	  WritetoCLOB (p_xml);
74 	END populate_p35_rep;
75 	--------------------------------------------------------------------------------
76 	-- POPULATE_PLSQL_TABLE
77 	--------------------------------------------------------------------------------
78 	PROCEDURE populate_plsql_table
79 	  (p_bg_id IN NUMBER
80 	   ,p_emp_no IN VARCHAR2
81 	   ,p_payroll        IN NUMBER
82    	   ,p_assignment_set        IN NUMBER
83 	   ,p_end_date IN VARCHAR2
84 	    ,p_weeks IN VARCHAR2) IS
85 
86      l_start_date DATE;
87 	l_end_date DATE;
88 	l_p_payroll number;
89 	l_assignment_set number;
90     l_set_flag	hr_assignment_set_amendments.include_or_exclude%TYPE;
91 
92 	CURSOR csr_get_flag_from_set
93     is
94 	select distinct hasa.include_or_exclude from hr_assignment_set_amendments hasa, hr_assignment_sets has
95 	where hasa.assignment_set_id = has.assignment_set_id
96 	and has.business_group_id = p_bg_id
97 	and has.assignment_set_id = l_assignment_set;
98 
99 	CURSOR getPayrollAction IS
100       SELECT distinct paa.payroll_action_id, paa.assignment_action_id,
101  	    nvl(SUBSTR(pactd.action_information1,1,9),' ') PPSN,
102 	    -- for bug 5301598
103         nvl(SUBSTR(pactd.action_information2,1,12),' ') Works,
104         pactd.action_information3 TotIWeeks,
105         pactd.action_information4 IClass,
106         pactd.action_information5 SClass,
107         pactd.action_information6 SWeeks,
108         pactd.action_information7 TClass,
109         pactd.action_information8 TWeeks,
110         pactd.action_information9 FClass,
111         pactd.action_information10 FWeeks,
112         substr(pactd.action_information11,1,instr(pactd.action_information11,'-',1)-1) FifthClass,
113 	  substr(pactd.action_information11,instr(pactd.action_information11,'-',1)+1,length(pactd.action_information11)) FifthWeek,
114         pactd.action_information12 NetTax,
115         pactd.action_information13 TaxPaid,
116         pactd.action_information14 EmpPRSI,
117         pactd.action_information15 TotPRSI,
118         pactd.action_information16 Pay,
119         pactd.action_information17 TaxBasis,
120         pactd.action_information18 SurName,
121         pactd.action_information19 FirstName,
122         to_char(to_date(trim(pactd.action_information20),'DD-MM-YYYY'),'DD/MM/YYYY') DOB,
123         pactd.action_information21 Address1,
124         pactd.action_information22 Address2,
125         pactd.action_information23 Address3,
126         to_char(to_date(trim(pactd.action_information24),'DD-MM-YYYY'),'DD/MM/YYYY') StartDate,
127         decode(to_char(to_date(trim(pactd.action_information25),'DD-MM-YYYY'),'DD/MM/YYYY'),'31/12/4712',null,to_char(to_date(trim(pactd.action_information25),'DD-MM-YYYY'),'DD/MM/YYYY')) EndDate,
128         pactd.action_information26 Credit,
129         pactd.action_information27
130         FROM pay_assignment_actions   paa,
131                   pay_payroll_actions      ppa,
132  				  pay_assignment_actions  paad,
133                   pay_action_information  pactd,
134                   pay_action_information   pai,
135 			per_assignments_f    paaf,
136 			pay_all_payrolls_f           ppf,
137 			hr_soft_coding_keyflex   flex
138         WHERE paa.payroll_action_id = ppa.payroll_action_id
139               AND paa.action_status = 'C'
140               AND ppa.action_type ='X'
141               AND ppa.business_group_id = p_bg_id
142 		  AND paa.source_action_id is null
143 		  AND pai.action_context_id = paa.assignment_action_id
144 	      AND pai.action_information_category = 'IE P35 DETAIL'
145 	      AND ppa.report_type = 'IEP35'
146 	      AND paa.assignment_id = pai.assignment_id
147 	      AND paaf.assignment_id = paa.assignment_id
148           AND paaf.business_group_id = ppa.business_group_id
149 		  --For Detail Record
150 		  AND  paad.payroll_action_id = paa.payroll_action_id
151           AND pactd.action_information_category   = 'IE P35 DETAIL'
152           AND pactd.action_context_type           = 'AAP'
153           AND paad.assignment_action_id = pactd.action_context_id
154 		  AND paad.assignment_action_id = paa.assignment_action_id
155   	      --End of Detail Record
156 	      AND paaf.payroll_id = ppf.payroll_id
157       	  AND ppf.effective_start_date <= l_end_date
158           AND ppf.effective_end_date >= l_start_date
159 	      AND flex.soft_coding_keyflex_id = ppf.soft_coding_keyflex_id
160 	      AND flex.segment4 = p_emp_no
161           AND paaf.effective_start_date <= l_end_date
162           AND paaf.effective_end_date >= l_start_date
163 	    AND paaf.ASSIGNMENT_TYPE <> 'A'  --16210193
164 	      AND TO_DATE (
165                                   pay_ie_p35.get_parameter (
166                                      ppa.payroll_action_id,
167                                      'END_DATE'
168                                   ),
169                                   'YYYY/MM/DD'
170                                ) BETWEEN l_start_date AND l_end_date
171 	      AND (ppf.payroll_id in (select b.payroll_id from per_assignments_f a,per_assignments_f b
172 				       where a.payroll_id = l_p_payroll
173 					and a.person_id = b.person_id
174 					and a.person_id = paaf.person_id
175 					--bug 6642916
176 					and a.effective_start_date<= l_end_date
177                                          and  a.effective_end_date >= l_start_date) or l_p_payroll is null)
178 	      AND ((l_assignment_set is not null
179 	     AND (l_set_flag ='I' AND EXISTS(SELECT 1
180 						    FROM  hr_assignment_set_amendments hasa
181 							 ,  hr_assignment_sets has
182 							 ,  per_assignments_f paf
183 					 WHERE has.assignment_set_id = hasa.assignment_set_id
184 					  AND   has.business_group_id = p_bg_id
185 					  AND   has.assignment_set_id = l_assignment_set
186 					  AND   hasa.assignment_id    = paf.assignment_id
187 					  AND   paf.person_id         = paaf.person_id)
188 
189 		OR l_set_flag = 'E' AND NOT EXISTS(SELECT 1
190 						    FROM  hr_assignment_set_amendments hasa
191 							 ,  hr_assignment_sets has
192 							 ,  per_assignments_f paf
193 				  WHERE has.assignment_set_id = hasa.assignment_set_id
194 					  AND   has.business_group_id = p_bg_id
195 					  AND   has.assignment_set_id = l_assignment_set
196 					  AND   hasa.assignment_id    = paf.assignment_id
197 					  AND   paf.person_id         = paaf.person_id)))
198 	  OR l_assignment_set IS NULL)
199 	  ORDER BY SurName, FirstName;
200 
201      CURSOR csr_get_pension_details (p_payroll_action_id NUMBER, p_assignment_action_id NUMBER) IS
202      SELECT count(decode(pact.action_information2,0,null,null,null,1)) EMP_RBS,
203        sum(to_number(pact.action_information2)) EMP_RBS_BAL,
204        count(decode(pact.action_information3,0,null,null,null,1)) EMPR_RBS,
205 	 sum(to_number(pact.action_information3)) EMPR_RBS_BAL,
206        count(decode(pact.action_information4,0,null,null,null,1)) EMP_PRSA,
207 	 sum(to_number(pact.action_information4)) EMP_PRSA_BAL,
208        count(decode(pact.action_information5,0,null,null,null,1)) EMPR_PRSA,
209 	 sum(to_number(pact.action_information5)) EMPR_PRSA_BAL,
210        count(decode(pact.action_information6,0,null,null,null,1)) EMP_RAC,
211 	 sum(to_number(pact.action_information6)) EMP_RAC_BAL,
212 	 sum(to_number(pact.action_information1)) TAXABLEBENEFITS,
213        count(decode(pact.action_information23,0,null,null,null,1)) EMP_PARKING, /* knadhan */
214 	 sum(to_number(pact.action_information23)) EMP_PARKING_BAL,
215 	 sum(to_number(pact.action_information19)) EMP_INCOME_LEVY_BAL,
216 	 sum(to_number(pact.action_information18)) EMP_GROSS_INCOME
217 --12382953
218 	 ,sum(to_number(pact.action_information7)) EMP_USC_BAL,
219 	 sum(to_number(pact.action_information27)) EMP_GROSS_INCOME_USC,
220 	 sum(to_number(pact.action_information28)) EXCLUSIONORDER
221 --12382953
222 	 ,sum(to_number(pact.action_information22)) EMP_IB --14656910
223      FROM   pay_assignment_actions  paa
224       ,pay_action_information  pact
225      WHERE paa.payroll_action_id        = p_payroll_action_id
226 	 and paa.assignment_action_id = pact.action_context_id
227 	 and paa.assignment_action_id = p_assignment_action_id
228     and   paa.source_action_id         is null
229     and   pact.action_information_category  = 'IE P35 ADDITIONAL DETAILS'
230     and   pact.action_context_type           = 'AAP';
231 
232 	CURSOR csr_header_footer_info(p_payroll_action_id NUMBER) IS
233 	SELECT
234           to_char(ppa.request_id),
235           p_end_date,
236 	      to_char(ppa.effective_date,'dd-mm-yyyy'),
237           pact.action_information1,
238           pact.action_information26 ,
239           pact.action_information27 ,
240           pact.action_information28 ,
241           pact.action_information5 ,
242           pact.action_information6 ,
243           pact.action_information7 ,
244           decode(trim(p_weeks),'Y','1','0'),
245 	      'Oracle HRMS',
246 	      'E'
247          FROM   pay_payroll_actions                ppa
248         ,pay_action_information             pact
249         WHERE  ppa.payroll_action_id  = p_payroll_action_id
250 	  AND    pact.action_context_id = ppa.payroll_action_id
251 	  AND    pact.action_information_category  = 'ADDRESS DETAILS'
252 	  AND    pact.action_context_type          = 'PA';
253 
254 	r_payroll_action_id NUMBER;
255 	r_assgt_action_id NUMBER;
256 	l_request_id NUMBER;
257 	l_tax_year VARCHAR2(30);
258 	l_date VARCHAR2(30);
259 	l_empr_no VARCHAR2(50);
260 	l_empr_name VARCHAR2(150);
261     l_contact_name VARCHAR2 (150);
262 	l_phone VARCHAR2 (30);
263 	l_addr1 VARCHAR2 (240);
264 	l_addr2 VARCHAR2 (240);
265 	l_addr3 VARCHAR2 (240);
266 	l_week53 VARCHAR2 (15);
267 	l_payroll VARCHAR2 (50);
268 	l_currency VARCHAR2 (30);
269 	l_tot_pay NUMBER := 0;
270 	l_tot_pay_rnd NUMBER := 0;
271     l_tot_tax NUMBER := 0;
272 	l_tot_prsi NUMBER := 0;
273 	l_tot_emp_prsi NUMBER := 0;
274     l_emp_rbs NUMBER := 0;
275     l_emp_rbs_bal NUMBER := 0;
276 	l_empr_rbs NUMBER := 0;
277     l_empr_rbs_bal NUMBER := 0;
278 	l_emp_prsa NUMBER := 0;
279 	l_emp_prsa_bal NUMBER := 0;
280     l_empr_prsa NUMBER := 0;
281 	l_empr_prsa_bal NUMBER := 0;
282 	l_emp_rac NUMBER := 0;
283 	l_emp_rac_bal NUMBER := 0;
284 	l_taxable_benefits NUMBER := 0;
285 	flag NUMBER := 0;
286 	l_emp_parking NUMBER := 0; /* knadhan */
287         l_emp_parking_bal NUMBER := 0;
288         l_emp_income_levy_bal NUMBER := 0;
289 	l_emp_gross_income_bal NUMBER := 0;
290 	c_pension csr_get_pension_details%ROWTYPE;
291     l_cess_date VARCHAR2(30);
292     l_initial_class pay_action_information.action_information4%TYPE;
293 
294 --12382953
295 	l_emp_usc_bal NUMBER := 0;
296 	l_emp_gross_income_bal_usc NUMBER := 0;
297 	l_reporting_year VARCHAR2(10);
298 --12382953
299 	BEGIN
300 
301 
302      -- hr_utility.trace_on(null,'vikp35');
303 	hr_utility.set_location('Start of Generation...', 1);
304 
305    vXMLTable.DELETE;
306 	vCtr := 1;
307 	--vXMLTable(vCtr).xmlString := '<?xml version="1.0" encoding="UTF-8"?> <P35LFile>';  -- get_IANA_charset
308 	vXMLTable(vCtr).xmlString := '<?xml version="1.0" encoding="'|| get_IANA_charset ||'"?> <P35LFile>';
309 	vCtr := vCtr + 1;
310 	l_start_date := PAY_IE_P35_XML_PKG.get_start_date();
311         -- l_end_date := PAY_IE_P35_XML_PKG.get_end_date();
312         l_end_date := fnd_date.canonical_to_date(p_end_date);                              --4641756
313         hr_utility.set_location('End Date : '||p_end_date,100);
314 
315 	l_reporting_year := to_char(l_start_date,'RRRR'); --12382953
316 
317 
318 	IF p_payroll = 0 then
319 	    l_p_payroll := NULL;
320 	 ELSE
321 	    l_p_payroll := p_payroll;
322 	 END IF;
323 	IF p_assignment_set = 0 then
324 	    l_assignment_set := NULL;
325 	ELSE
326 	    l_assignment_set := p_assignment_set;
327 	END IF;
328 	OPEN csr_get_flag_from_set;
329     FETCH csr_get_flag_from_set into l_set_flag;
330     CLOSE csr_get_flag_from_set;
331 
332 	FOR c_action IN getPayrollAction LOOP
333 	flag := flag + 1;
334 	hr_utility.set_location('Loop Count ' || to_char(flag), 1);
335 	hr_utility.set_location('pactid' || to_char(r_payroll_action_id),13);
336 	IF flag = 1 THEN
337     OPEN csr_header_footer_info(c_action.payroll_action_id);
338 	FETCH csr_header_footer_info into l_request_id, l_tax_year,l_date,l_empr_no,l_empr_name,
339 	      l_contact_name,l_phone,l_addr1,l_addr2,l_addr3,l_week53,l_payroll,l_currency;
340 	CLOSE csr_header_footer_info;
341     hr_utility.set_location('emprno' || to_char(l_empr_no),13);
342 
343 	vXMLTable(vCtr).xmlString := '<TaxYear>' || to_char(fnd_date.canonical_to_date(l_tax_year),'YYYY') || '</TaxYear>';
344 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RequestID>' || l_request_id || '</RequestID>';
345 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Date>' || l_date || '</Date>';
346 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<EmployerNumber>' || l_empr_no || '</EmployerNumber>';
347 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<EmployerName>' || l_empr_name || '</EmployerName>';
348 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<ContactName>' || l_contact_name || '</ContactName>';
349 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Phone>' || l_phone || '</Phone>';
350 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Address1><![CDATA[' || l_addr1 || ']]></Address1>';
351 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Address2><![CDATA[' || l_addr2 || ']]></Address2>';
352 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Address3><![CDATA[' || l_addr3 || ']]></Address3>';
353 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Week53>' || l_week53 || '</Week53>';
354 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Payroll>' || l_payroll || '</Payroll>';
355 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Currency>' || l_currency || '</Currency>';
356     vCtr := vCtr + 1;
357 	END IF;
358 	hr_utility.set_location('Fetching detail...', 3);
359 	hr_utility.set_location('Fetching Pension...', 3);
360 	OPEN csr_get_pension_details (c_action.payroll_action_id, c_action.assignment_action_id);
361     FETCH csr_get_pension_details into c_pension;
362     CLOSE csr_get_pension_details;
363 	l_emp_rbs := l_emp_rbs +  c_pension.EMP_RBS;
364 	l_emp_rbs_bal := l_emp_rbs_bal + c_pension.EMP_RBS_BAL;
365 	l_empr_rbs := l_empr_rbs + c_pension.EMPR_RBS;
366 	l_empr_rbs_bal := l_empr_rbs_bal +  c_pension.EMPR_RBS_BAL;
367 	l_emp_prsa := l_emp_prsa + c_pension.EMP_PRSA;
368 	l_emp_prsa_bal := l_emp_prsa_bal + c_pension.EMP_PRSA_BAL;
369 	l_empr_prsa := l_empr_prsa + c_pension.EMPR_PRSA;
370 	l_empr_prsa_bal := l_empr_prsa_bal + c_pension.EMPR_PRSA_BAL;
371 	l_emp_rac := l_emp_rac + c_pension.EMP_RAC;
372 	l_emp_rac_bal := l_emp_rac_bal + c_pension.EMP_RAC_BAL;
373 	l_emp_parking:=l_emp_parking+c_pension.EMP_PARKING; /* knadhan */
374 	l_emp_parking_bal:=l_emp_parking_bal+c_pension.EMP_PARKING_BAL;
375 	l_emp_income_levy_bal :=l_emp_income_levy_bal+c_pension.EMP_INCOME_LEVY_BAL;
376 	l_emp_gross_income_bal :=c_pension.EMP_GROSS_INCOME;
377 --12382953
378 	l_emp_usc_bal := l_emp_usc_bal + c_pension.EMP_USC_BAL; --14656910  --14656910V9
379 	l_emp_gross_income_bal_usc :=c_pension.EMP_GROSS_INCOME_USC;
380 --12382953
381     l_taxable_benefits := l_taxable_benefits + c_pension.TAXABLEBENEFITS;
382 	hr_utility.set_location('Generating...', 5);
383 	hr_utility.set_location('TableCnt' || to_char(vXMLTable.count),13);
384 
385 	l_cess_date:=c_action.EndDate;
386 	IF trim(l_cess_date) = '31-12-4712' THEN
387 	  l_cess_date := ' ';
388 	END IF;
389 	      hr_utility.set_location('P1..'||c_action.Works,100);
390 		vXMLTable(vCtr).xmlString := '<G_P35L>';
391 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<PPSN>' || (c_action.PPSN) || '</PPSN>';
392 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Works>' || (c_action.Works) || '</Works>';
393 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotIWeeks>' || (c_action.TotIWeeks) || '</TotIWeeks>';
394 		hr_utility.set_location('P2..'||c_action.Works,100);
395 		if instr(c_action.IClass,'-') > 0 then
396 			l_initial_class := substr(c_action.IClass,1,instr(c_action.IClass,'-',1)-1);
397 			vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<IClass>' || (l_initial_class) || '</IClass>';
398 		else
399 			vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<IClass>' || (c_action.IClass) || '</IClass>';
400 		end if;
401 		hr_utility.set_location('P3..'||c_action.Works,100);
402 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<SClass>' || (c_action.SClass) || '</SClass>';
403 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<SWeeks>' || (c_action.SWeeks) || '</SWeeks>';
404 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TClass>' || (c_action.TClass) || '</TClass>';
405 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TWeeks>' || (c_action.TWeeks) || '</TWeeks>';
406 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<FClass>' || (c_action.FClass) || '</FClass>';
407 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<FWeeks>' || (c_action.FWeeks) || '</FWeeks>';
408 		hr_utility.set_location('P4..'||c_action.Works,100);
409 		IF c_action.FifthClass is not null then
410 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<FifthClass> Note-: PRSI Fifth Class ' || (c_action.FifthClass) || ' with Insurable Weeks </FifthClass>';
411 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Fmessage>' || (c_action.FifthWeek) || ' exists </Fmessage>';
412 		ELSE
413 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<FifthClass>' || (c_action.FifthClass) || '</FifthClass>';
414 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Fmessage>' || (c_action.FifthClass) || '</Fmessage>';
415 		END IF;
416 		hr_utility.set_location('P5..'||c_action.Works,100);
417 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<NetTax>' || to_char(to_number(c_action.NetTax),'FM99999999990D00') || '</NetTax>'; --14656910  --14656910V9
418     		l_tot_tax := l_tot_tax + to_number(c_action.NetTax);  --14656910 --14656910V9
419 		vCtr := vCtr + 1;
420 		vXMLTable(vCtr).xmlString := '<TaxPaid>' || (c_action.TaxPaid) || '</TaxPaid>';
421 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<EmpPRSI>' || to_char(to_number(c_action.EmpPRSI),'FM99999999990D00') || '</EmpPRSI>';  --14656910 --14656910V9
422 		l_tot_emp_prsi := l_tot_emp_prsi + to_number(c_action.EmpPRSI);  --14656910 --14656910V9
423 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotPRSI>' || to_char(to_number(c_action.TotPRSI),'FM99999999990D00') || '</TotPRSI>';  --14656910 --14656910V9
424 		l_tot_prsi := l_tot_prsi + to_number(c_action.TotPRSI);  --14656910 --14656910V9
425 		hr_utility.set_location('After Adding....TotPRSI=' || l_tot_prsi, 10);
426 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Pay>' || to_char(to_number(c_action.Pay),'FM99999999990D00') || '</Pay>';  --14656910 --14656910V9
427 		l_tot_pay := l_tot_pay + to_number(c_action.Pay); --14656910 --14656910V9
428 		l_tot_pay_rnd := l_tot_pay_rnd + round(to_number(c_action.Pay),0);  --14656910 --14656910V9
429 --12382953
430 		IF l_reporting_year >= '2011' THEN
431                l_emp_gross_income_bal := l_emp_gross_income_bal_usc;
432 		END IF;
433 --12382953
434 
435 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<GrossIncome>' || to_char(l_emp_gross_income_bal,'FM99999999990D00') || '</GrossIncome>';  --14656910  --14656910V9
436 --12382953
437 		IF l_reporting_year < '2011' THEN
438 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<IncomeLevy>' || to_char(to_number(c_pension.EMP_INCOME_LEVY_BAL),'FM99999999990D00') || '</IncomeLevy>';   /* knadhan 8520684 */
439 		ELSE
440             vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<usc>' || to_char(to_number(c_pension.EMP_USC_BAL),'FM99999999990D00') || '</usc>'; --14656910 --14656910V9
441 		END IF;
442             vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<ib>' || to_char(to_number(c_pension.EMP_IB),'FM99999999990D00') || '</ib>';   --14656910 --14656910V9
443 
444 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<exclusionOrder>' || (c_pension.EXCLUSIONORDER) || '</exclusionOrder>';
445 --12382953
446 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TaxBasis>' || (c_action.TaxBasis) || '</TaxBasis>';
447 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<SurName><![CDATA[' || (c_action.SurName) || ']]></SurName>';
448 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<FirstName><![CDATA[' || (c_action.FirstName) || ']]></FirstName>';
449 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<DOB>' || (c_action.DOB) || '</DOB>';
450 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Address><![CDATA[' || (c_action.Address1) || ']]></Address>';
451 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<StartDate>' || (c_action.StartDate) || '</StartDate>';
452 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<EndDate>' || l_cess_date || '</EndDate>';
453 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<Credit>' || to_char(to_number(c_action.Credit),'FM99999999990D00') || '</Credit>';
454 		vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '</G_P35L>';
455 		vCtr := vCtr + 1;
456 		hr_utility.set_location('TableCnt' || to_char(vXMLTable.count),18);
457 	END LOOP;
458 	hr_utility.set_location('Generated...', 6);
459 	IF flag = 0 THEN
460   	  vXMLTable(vCtr).xmlString := '<Exception>No Data Found</Exception>';
461 	  vCtr := vCtr + 1;
462 	END IF;
463 	l_emp_parking_bal:= round(to_number(l_emp_parking_bal));  --14656910  --14656910V9
464       l_emp_income_levy_bal:=round(to_number(l_emp_income_levy_bal));
465 
466 	l_emp_usc_bal := round(to_number(l_emp_usc_bal));  --12382953  --14656910 --14656910V9
467 
468 	vXMLTable(vCtr).xmlString := '<TotPay>' || to_char(to_number(l_tot_pay),'FM99999999990D00') || '</TotPay>';
469 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotPayRnd>' || l_tot_pay_rnd || '</TotPayRnd>';
470 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotTax>' || to_char(to_number(l_tot_tax),'FM99999999990D00') || '</TotTax>';
471 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotalPRSI>' || to_char(to_number(l_tot_prsi),'FM99999999990D00') || '</TotalPRSI>';
472 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotEmpPRSI>' || to_char(to_number(l_tot_emp_prsi),'FM99999999990D00') || '</TotEmpPRSI>';
473 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RBSEENum>' || l_emp_rbs || '</RBSEENum>';
474 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RBSEEAmt>' || l_emp_rbs_bal || '</RBSEEAmt>';  --14656910 --14656910V9
475 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RBSERNum>' || l_empr_rbs || '</RBSERNum>';
476 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RBSERAmt>' || l_empr_rbs_bal || '</RBSERAmt>'; --14656910 --14656910V9
477 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<PRSAEENum>' || l_emp_prsa || '</PRSAEENum>';
478 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<PRSAEEAmt>' || l_emp_prsa_bal || '</PRSAEEAmt>';  --14656910 --14656910V9
479 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<PRSAERNum>' || l_empr_prsa || '</PRSAERNum>';
480 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<PRSAERAmt>' || l_empr_prsa_bal || '</PRSAERAmt>';  --14656910 --14656910V9
481 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RACEENum>' || l_emp_rac || '</RACEENum>';
482 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<RACEEAmt>' || l_emp_rac_bal || '</RACEEAmt>';  --14656910 --14656910V9
483 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<TotNotPay>' || l_taxable_benefits || '</TotNotPay>';  --14656910 --14656910V9
484       vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<CARPARKNum>' || l_emp_parking || '</CARPARKNum>';   /* knadhan */
485 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<CARPARKAmt>' || l_emp_parking_bal || '</CARPARKAmt>';
486 --12382953
487       IF l_reporting_year < '2011' THEN
488 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<IncomeLevyAmt>' || l_emp_income_levy_bal || '</IncomeLevyAmt>';
489 	ELSE
490       vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '<totalUSC>' || l_emp_usc_bal || '</totalUSC>';
491 	END IF;
492 --12382953
493 	vXMLTable(vCtr).xmlString := vXMLTable(vCtr).xmlString || '</P35LFile>';
494 	vCtr := vCtr + 1;
495 
496   	hr_utility.set_location('TableCnt' || to_char(vXMLTable.count),13);
497    EXCEPTION
498       WHEN OTHERS  THEN
499 	  null;
500   END populate_plsql_table;
501 	--
502   FUNCTION get_start_date
503       RETURN DATE
504    AS
505       l_start_date   DATE;
506    BEGIN
507       SELECT fnd_date.canonical_to_date (
508                    SUBSTR (fpov.profile_option_value, 1, 4)
509                 || '01/01 00:00:00'
510              )
511         INTO l_start_date
512         FROM fnd_profile_option_values fpov, fnd_profile_options fpo
513        WHERE fpo.profile_option_id = fpov.profile_option_id
514          AND fpo.application_id = fpov.application_id
515          AND fpo.profile_option_name = 'PAY_IE_P35_REPORTING_YEAR'
516          AND fpov.level_id = 10001
517          AND fpov.level_value = 0;
518 
519       RETURN l_start_date;
520    END get_start_date;
521 
522 
523 --
524    FUNCTION get_end_date
525       RETURN DATE
526    AS
527       l_end_date   DATE;
528    BEGIN
529       SELECT fnd_date.canonical_to_date (
530                    SUBSTR (fpov.profile_option_value, 1, 4)
531                 || '12/31 23:59:59'
532              )
533         INTO l_end_date
534         FROM fnd_profile_option_values fpov, fnd_profile_options fpo
535        WHERE fpo.profile_option_id = fpov.profile_option_id
536          AND fpo.application_id = fpov.application_id
537          AND fpo.profile_option_name = 'PAY_IE_P35_REPORTING_YEAR'
538          AND fpov.level_id = 10001
539          AND fpov.level_value = 0;
540 
541       RETURN l_end_date;
542    END get_end_date;
543    --
544 END PAY_IE_P35_XML_PKG;