DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_NL_IZA_REPORT

Source


1 PACKAGE BODY PAY_NL_IZA_REPORT AS
2 /* $Header: paynliza.pkb 120.0 2005/05/29 02:40:37 appldev noship $ */
3 
4 level_cnt NUMBER;
5 
6 /*Counter for accessing the values in PAY_NL_XDO_REPORT.vXMLTable*/
7 vCtr NUMBER;
8 
9 /*-------------------------------------------------------------------------------
10 |Name           : populate_iza_report_data                                      |
11 |Type		: Procedure						        |
12 |Description    : Procedure to generate the Annual Tax Statement Report         |
13 ------------------------------------------------------------------------------*/
14 
15 procedure populate_iza_report_data(p_bg_id IN NUMBER,
16                                    p_bg_name IN VARCHAR2,
17                                    p_eff_date IN VARCHAR2,
18                                    p_org_struct_id IN NUMBER,
19                                    p_org_struct IN VARCHAR2,
20                                    p_process_month IN VARCHAR2,
21                                    p_employer_id IN NUMBER,
22                                    p_employer IN VARCHAR2,
23                                    p_xfdf_blob OUT NOCOPY BLOB) IS
24 
25 
26 /*Cursors to fetch required data */
27 
28 cursor csr_employer_data is
29 select 'EUR' currency , iza.payroll_center ,
30        iza.province_code||' '||hr_general.decode_lookup('NL_IZA_PROVINCE',iza.province_code) province,
31        lpad(employer_number,3,'0') employer_number , lpad(sub_employer_number,3,'0') sub_employer_number
32 from pay_nl_iza_upld_status iza
33 where iza.business_group_id = p_bg_id
34 and iza.organization_id = p_employer_id
35 and iza.process_year_month = last_day(to_date(p_process_month,'MMYYYY'));
36 
37 cursor csr_employee_data is
38 select lpad(iza.employer_number,3,'0')||lpad(iza.sub_employer_number,3,'0')||'-'||lpad(iza.employee_number,9,'0') exchange_number,iza.process_status,
39 iza.employee_name name,
40 iza.date_of_birth dob,
41 iza.participant_number participant_number,
42 iza.contribution_1 iza_amt_1,iza.contribution_2 iza_amt_2,
43 iza.correction_contribution_1 corr_amt_1,iza.correction_contribution_2 corr_amt_2,
44 iza.date_correction_1,iza.date_correction_2,
45 decode(iza.process_status,'MISSING',hr_general.decode_lookup('NL_IZA_REJECT_REASON',iza.process_status),hr_general.decode_lookup('NL_IZA_REJECT_REASON',iza.reject_reason)) explanation
46 from pay_nl_iza_upld_status iza
47 where iza.business_group_id = p_bg_id
48 and iza.organization_id = p_employer_id
49 and iza.process_year_month = last_day(to_date(p_process_month,'MMYYYY'));
50 
51 v_employer_data csr_employer_data%rowtype;
52 l_record_count number;
53 l_accepted_count number;
54 l_rejected_count number;
55 l_retro_count number;
56 l_missing_count number;
57 l_tape_amt_1 number;
58 l_accepted_amt_1 number;
59 l_rejected_amt_1 number;
60 l_retro_amt_1 number;
61 l_tape_amt_2 number;
62 l_accepted_amt_2 number;
63 l_rejected_amt_2 number;
64 l_retro_amt_2 number;
65 l_tape_corr_1 number;
66 l_accepted_corr_1 number;
67 l_rejected_corr_1 number;
68 l_retro_corr_1 number;
69 l_tape_corr_2 number;
70 l_accepted_corr_2 number;
71 l_rejected_corr_2 number;
72 l_retro_corr_2 number;
73 l_tape_total number;
74 l_accepted_total number;
75 l_rejected_total number;
76 l_retro_total number;
77 l_earliest_correction_date date;
78 l_earliest_correction_date1 varchar2(50);
79 
80 
81 /*Make calls to suppoting procedures to form the XML file*/
82 
83 begin
84         l_record_count := 0;
85 	l_accepted_count := 0;
86 	l_rejected_count := 0;
87 	l_retro_count := 0;
88 	l_missing_count := 0;
89 	l_tape_amt_1 := 0;
90 	l_accepted_amt_1 := 0;
91 	l_rejected_amt_1 := 0;
92         l_retro_amt_1 := 0;
93         l_tape_amt_2 := 0;
94 	l_accepted_amt_2 := 0;
95 	l_rejected_amt_2 := 0;
96         l_retro_amt_2 := 0;
97         l_tape_corr_1 := 0;
98 	l_accepted_corr_1 := 0;
99 	l_rejected_corr_1 := 0;
100 	l_retro_corr_1 := 0;
101 	l_tape_corr_2 := 0;
102 	l_accepted_corr_2 := 0;
103 	l_rejected_corr_2 := 0;
104 	l_retro_corr_2 := 0;
105         l_tape_total := 0;
106 	l_accepted_total := 0;
107 	l_rejected_total := 0;
108         l_retro_total := 0;
109         l_earliest_correction_date := hr_general.end_of_time;
110 
111 
112 	open csr_employer_data;
113 	fetch csr_employer_data into v_employer_data;
114 	close csr_employer_data;
115 
116  	PAY_NL_XDO_REPORT.vXMLTable.DELETE;
117  	vCtr := 0;
118 
119 /*Get all the XML tags and values*/
120         PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'BG_NAME';
121 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := p_bg_name;
122 	vCtr := vCtr + 1;
123 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EFF_DATE';
124 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(fnd_date.canonical_to_date(p_eff_date),'DD-Mon-YYYY');
125 	vCtr := vCtr + 1;
126 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ORG_HIERARCHY';
127 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := p_org_struct;
128 	vCtr := vCtr + 1;
129 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EMPLOYER';
130 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := p_employer;
131 	vCtr := vCtr + 1;
132 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'PROCESS_MONTH';
133 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(to_date(p_process_month,'MMYYYY'),'YYYY / MM');
134 	vCtr := vCtr + 1;
135 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'CURRENCY';
136 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employer_data.currency;
137 	vCtr := vCtr + 1;
138 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'PAYROLL_CENTER';
139 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employer_data.payroll_center;
140 	vCtr := vCtr + 1;
141 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'PROVINCE';
142 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employer_data.province;
143 	vCtr := vCtr + 1;
144 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'IZA_CLIENT_NUMBER';
145 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employer_data.employer_number;
146 	vCtr := vCtr + 1;
147 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'SUB_EMPLOYER_NUMBER';
148 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employer_data.sub_employer_number;
149 
150 	for v_employee_data in csr_employee_data
151 	loop
152 	if (v_employee_data.process_status = 'REJECTED' or v_employee_data.process_status = 'MISSING') then
153 	vCtr := vCtr + 1;
154 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_EMPLOYEE';
155 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := null;
156 	vCtr := vCtr + 1;
157 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EXCHANGE_NUMBER';
158 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employee_data.exchange_number;
159 	vCtr := vCtr + 1;
160 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'NAME';
161 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employee_data.name;
162 	vCtr := vCtr + 1;
163 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'DOB';
164 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(v_employee_data.dob,'DD-MM-YY');
165 	vCtr := vCtr + 1;
166 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'PARTICIPANT_NUMBER';
167 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employee_data.participant_number;
168 	vCtr := vCtr + 1;
169 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'IZA_AMT_1';
170 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(v_employee_data.iza_amt_1,'99G990D00MI');
171 	vCtr := vCtr + 1;
172 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'IZA_AMT_2';
173 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(v_employee_data.iza_amt_2,'99G990D00MI');
174 	vCtr := vCtr + 1;
175 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'CORR_AMT_1';
176 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(v_employee_data.corr_amt_1,'99G990D00MI');
177 	vCtr := vCtr + 1;
178 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'CORR_AMT_2';
179 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(v_employee_data.corr_amt_2,'99G990D00MI');
180 	vCtr := vCtr + 1;
181 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EXPLANATION';
182 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_employee_data.explanation;
183 	vCtr := vCtr + 1;
184 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_EMPLOYEE';
185 	PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := 'END';
186 	if v_employee_data.process_status = 'REJECTED' then
187 	   l_rejected_count := l_rejected_count + 1;
188 	   l_rejected_amt_1 := l_rejected_amt_1 + v_employee_data.iza_amt_1;
189 	   l_rejected_amt_2 := l_rejected_amt_2 + v_employee_data.iza_amt_2;
190 	   l_rejected_corr_1 := l_rejected_corr_1 + v_employee_data.corr_amt_1;
191 	   l_rejected_corr_2 := l_rejected_corr_2 + v_employee_data.corr_amt_2;
192 	else if v_employee_data.process_status = 'MISSING' then
193 	     l_missing_count := l_missing_count + 1;
194 	end if;
195 	end if;
196 	end if;
197 	if l_earliest_correction_date > v_employee_data.date_correction_1 and v_employee_data.process_status = 'PROCESSED' then
198 	   l_earliest_correction_date := v_employee_data.date_correction_1;
199 	end if;
200 	if l_earliest_correction_date > v_employee_data.date_correction_2 and v_employee_data.process_status = 'PROCESSED' then
201 		   l_earliest_correction_date := v_employee_data.date_correction_2;
202 	end if;
203 	if v_employee_data.process_status = 'PROCESSED' then
204 	     l_accepted_count := l_accepted_count + 1;
205 	     l_accepted_amt_1 := l_accepted_amt_1 + v_employee_data.iza_amt_1;
206 	     l_accepted_amt_2 := l_accepted_amt_2 + v_employee_data.iza_amt_2;
207 	     l_accepted_corr_1 := l_accepted_corr_1 + v_employee_data.corr_amt_1;
208 	     l_accepted_corr_2 := l_accepted_corr_2 + v_employee_data.corr_amt_2;
209 	end if;
210 	if ((v_employee_data.corr_amt_1 > 0 or v_employee_data.corr_amt_2 > 0) and v_employee_data.process_status = 'PROCESSED') then
211 	     l_retro_count := l_retro_count + 1;
212 	     l_retro_amt_1 := 0;
213 	     l_retro_amt_2 := 0;
214 	     l_retro_corr_1 := l_retro_corr_1 + v_employee_data.corr_amt_1;
215 	     l_retro_corr_2 := l_retro_corr_2 + v_employee_data.corr_amt_2;
216 	end if;
217 	end loop;
218 
219 /*Fetch XML file as a BLOB*/
220  vCtr := vCtr + 1;
221  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_COUNT';
222  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_accepted_count;
223  vCtr := vCtr + 1;
224  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_COUNT';
225  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_rejected_count;
226  vCtr := vCtr + 1;
227  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'MISSING_COUNT';
228  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_missing_count;
229  l_Record_count := l_accepted_count + l_rejected_count;
230  l_tape_amt_1 := l_accepted_amt_1 + l_rejected_amt_1;
231  l_tape_amt_2 := l_accepted_amt_2 + l_rejected_amt_2;
232  l_tape_corr_1 := l_accepted_corr_1 + l_rejected_corr_1;
233  l_tape_corr_2 := l_accepted_corr_2 + l_rejected_corr_2;
234  l_tape_total := l_tape_amt_1 + l_tape_amt_2 + l_tape_corr_1 + l_tape_corr_2;
235  l_accepted_total := l_accepted_amt_1 + l_accepted_amt_2 + l_accepted_corr_1 + l_accepted_corr_2;
236  l_rejected_total := l_rejected_amt_1 + l_rejected_amt_2 + l_rejected_corr_1 + l_rejected_corr_2;
237  l_retro_total := l_retro_amt_1 + l_retro_amt_2 + l_retro_corr_1 + l_retro_corr_2;
238  vCtr := vCtr + 1;
239  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RECORD_COUNT';
240  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_record_count;
241  vCtr := vCtr + 1;
242  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_COUNT';
243  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_retro_count;
244  vCtr := vCtr + 1;
245  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TAPE_AMT_1';
246  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_tape_amt_1,'9G999G990D00MI');
247  vCtr := vCtr + 1;
248  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_AMT_1';
249  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_accepted_amt_1,'9G999G990D00MI');
250  vCtr := vCtr + 1;
251  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_AMT_1';
252  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_rejected_amt_1,'9G999G990D00MI');
253  vCtr := vCtr + 1;
254  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_AMT_1';
255  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_retro_amt_1,'9G999G990D00MI');
256  vCtr := vCtr + 1;
257  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TAPE_AMT_2';
258  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_tape_amt_2,'9G999G990D00MI');
259  vCtr := vCtr + 1;
260  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_AMT_2';
261  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_accepted_amt_2,'9G999G990D00MI');
262  vCtr := vCtr + 1;
263  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_AMT_2';
264  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_rejected_amt_2,'9G999G990D00MI');
265  vCtr := vCtr + 1;
266  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_AMT_2';
267  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_retro_amt_2,'9G999G990D00MI');
268  vCtr := vCtr + 1;
269  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TAPE_CORR_1';
270  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_tape_corr_1,'9G999G990D00MI');
271  vCtr := vCtr + 1;
272  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_CORR_1';
273  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_accepted_corr_1,'9G999G990D00MI');
274  vCtr := vCtr + 1;
275  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_CORR_1';
276  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_rejected_corr_1,'9G999G990D00MI');
277  vCtr := vCtr + 1;
278  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_CORR_1';
279  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_retro_corr_1,'9G999G990D00MI');
280  vCtr := vCtr + 1;
281  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TAPE_CORR_2';
282  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_tape_corr_2,'9G999G990D00MI');
283  vCtr := vCtr + 1;
284  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_CORR_2';
285  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_accepted_corr_2,'9G999G990D00MI');
286  vCtr := vCtr + 1;
287  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_CORR_2';
288  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_rejected_corr_2,'9G999G990D00MI');
289  vCtr := vCtr + 1;
290  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_CORR_2';
291  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_retro_corr_2,'9G999G990D00MI');
292  vCtr := vCtr + 1;
293  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TAPE_TOTAL';
294  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_tape_total,'99G999G999G990D00MI');
295  vCtr := vCtr + 1;
296  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ACCEPTED_TOTAL';
297  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_accepted_total,'99G999G999G990D00MI');
298  vCtr := vCtr + 1;
299  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REJECTED_TOTAL';
300  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_rejected_total,'99G999G999G990D00MI');
301  vCtr := vCtr + 1;
302  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_TOTAL';
303  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_retro_total,'99G999G999G990D00MI');
304  vCtr := vCtr + 1;
305  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EARLIEST_CORRECTION_DATE';
306  l_earliest_correction_date1 := to_char(l_earliest_correction_date,'DD-MM-YY');
307  if l_earliest_correction_date = hr_general.end_of_time then
308     l_earliest_correction_date1 := NULL;
309  end if;
310  PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_earliest_correction_date1;
311 
312  pay_nl_xdo_Report.WritetoCLOB_rtf(p_xfdf_blob );
313 
314 end populate_iza_report_data;
315 
316 
317 PROCEDURE record_4712(p_file_id NUMBER) IS
318 
319 	l_upload_name       VARCHAR2(1000);
320 	l_file_name         VARCHAR2(1000);
321 	l_start_date        DATE := TO_DATE('01/01/0001', 'dd/mm/yyyy');
322 	l_end_date          DATE := TO_DATE('31/12/4712', 'dd/mm/yyyy');
323 
324 BEGIN
325 	-- program_name will be used to store the file_name
326 	-- this is bcos the file_name in fnd_lobs contains
327 	-- the full patch of the doc and not just the file name
328 	SELECT program_name
329 	INTO l_file_name
330 	FROM fnd_lobs
331 	WHERE file_id = p_file_id;
332 
333 	-- the delete will ensure that the patch is rerunnable
334 	DELETE FROM per_gb_xdo_templates
335 	WHERE file_name = l_file_name AND
336 	effective_start_date = l_start_date AND
337 	effective_end_date = l_end_date;
338 
339 	INSERT INTO per_gb_xdo_templates
340 	(file_id,
341 	file_name,
342 	file_description,
343 	effective_start_date,
344 	effective_end_date)
345 	SELECT p_file_id, l_file_name, 'Template for year 0001-4712',
346 	l_start_date, l_end_date
347 	FROM fnd_lobs
348 	WHERE file_id = p_file_id;
349 END;
350 
351 
352 END PAY_NL_IZA_REPORT;