[Home] [Help]
PACKAGE BODY: APPS.PAY_NL_RETRO_SETUP_REPORT
Source
1 PACKAGE BODY pay_nl_retro_setup_report AS
2 /* $Header: pynlersr.pkb 120.1 2008/02/19 11:57:33 abhgangu noship $ */
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 -- Procedure to Generate XML Data
28 -------------------------------------------------------------------------------
29
30 PROCEDURE generate
31 ( p_business_group_id IN NUMBER,
32 p_eff_date IN VARCHAR2,
33 p_ele_records IN VARCHAR2,
34 p_template_name IN VARCHAR2,
35 p_xml OUT NOCOPY CLOB
36 )
37 IS
38
39 -- Cursor to get classifications of the elements.
40 CURSOR csr_get_ele_class(c_bg_id NUMBER,c_ele_rec VARCHAR2) IS
41
42 SELECT DISTINCT
43 pec.classification_id,
44 pec1.classification_name
45 FROM
46 pay_element_classifications pec ,
47 pay_element_classifications_tl pec1 ,
48 pay_element_types_f pat
49 WHERE
50 pec.legislation_code = 'NL'
51 AND pec.parent_classification_id IS NULL
52 AND pec1.language = USERENV('LANG') -- Bug ref. 5837256
53 AND pat.classification_id = pec.classification_id
54 AND pat.business_group_id = c_bg_id
55 AND pec1.classification_id = pat.classification_id
56 AND (EXISTS (SELECT NULL FROM pay_retro_component_usages prcu WHERE
57 pat.element_type_id = prcu.creator_id
58 AND prcu.creator_type = 'ET') OR c_ele_rec = 'A');
59
60 -- Cursor for getting element retro setup records
61 CURSOR csr_get_element_record(c_bg_id NUMBER,c_eff_date DATE, c_class_id NUMBER) IS
62
63 SELECT
64 pat.element_name,
65 prc.component_name,
66 hr_general.decode_lookup('HR_NL_YES_NO',NVL(prcu.default_component,'N')) default_component,
67 hr_general.decode_lookup('RETRO_REPROCESS_TYPE',prcu.reprocess_type) reprocess_type,
68 hr_general.decode_lookup('HR_NL_YES_NO',NVL(prcu.replace_run_flag,'N')) replace_run_flag,
69 hr_general.decode_lookup('HR_NL_YES_NO',NVL(prcu.use_override_dates,'N')) use_override_dates,
70 pat1.element_name Retro_Element,
71 ptd1.definition_name Time_from ,
72 ptd2.definition_name Time_To ,
73 pec.classification_name
74
75 FROM
76 pay_element_types_f pat,
77 pay_retro_component_usages prcu,
78 pay_element_span_usages pesu,
79 pay_time_spans pts,
80 pay_time_definitions ptd1,
81 pay_time_definitions ptd2,
82 pay_element_types_f pat1,
83 pay_retro_components prc,
84 pay_element_classifications_tl pec
85
86 WHERE
87 pat.business_group_id = c_bg_id
88 AND c_eff_date between pat.effective_start_date AND pat.effective_end_date
89 AND pat.classification_id = c_class_id
90 AND pat.element_type_id = prcu.creator_id
91 AND prcu.creator_type = 'ET'
92 AND pec.language = USERENV('LANG') -- Bug ref. 5837256
93 AND prcu.retro_component_usage_id = pesu.retro_component_usage_id(+)
94 AND pesu.time_span_id = pts.time_span_id(+)
95 AND pts.start_time_def_id = ptd1.time_definition_id(+)
96 AND pts.end_time_def_id = ptd2.time_definition_id(+)
97 AND pesu.retro_element_type_id = pat1.element_type_id(+)
98 AND prcu.retro_component_id = prc.retro_component_id
99 AND pat1.classification_id = pec.classification_id(+)
100 ORDER BY pat.element_name, PRC.component_name ;
101
102 -- Cursor for getting elements without retro components
103
104 CURSOR csr_get_ele_without_ret(c_bg_id NUMBER,c_eff_date DATE, c_class_id NUMBER) IS
105 SELECT DISTINCT
106 pat.element_name
107 FROM
108 pay_element_types_f pat,
109 pay_retro_component_usages prcu
110 WHERE
111 pat.business_group_id = c_bg_id
112 AND c_eff_date between pat.effective_start_date AND pat.effective_end_date
113 AND pat.classification_id = c_class_id
114 AND pat.element_type_id = prcu.creator_id (+)
115 AND prcu.creator_type (+) = 'ET'
116 AND prcu.creator_id IS NULL;
117
118
119
120 -- Getting BG name
121 CURSOR csr_bg_name(c_bg_id per_business_groups.name%TYPE, c_eff_date DATE) IS
122
123 SELECT name FROM per_business_groups
124 WHERE business_group_id = c_bg_id
125 AND c_eff_date BETWEEN date_from AND NVL(date_to,hr_general.end_of_time);
126
127 -- Local Variables
128 vCtr NUMBER := 0;
129 v_get_ele_class csr_get_ele_class%ROWTYPE;
130 v_get_ele_without_ret csr_get_ele_without_ret%ROWTYPE;
131 v_get_element_record csr_get_element_record%ROWTYPE;
132 l_element_name pay_element_types_f.element_name%TYPE := ' ';
133 l_show_element pay_element_types_f.element_name%TYPE := ' ';
134 l_component pay_retro_components.component_name%TYPE := ' ';
135 l_show_component pay_retro_components.component_name%TYPE := ' ';
136 l_default_comp pay_retro_component_usages.default_component%TYPE := ' ';
137 l_replace_run pay_retro_component_usages.replace_run_flag%TYPE := ' ';
138 l_override_dates pay_retro_component_usages.use_override_dates%TYPE := ' ';
139 l_reprocess_type pay_retro_component_usages.reprocess_type%TYPE := ' ';
140 l_bg_name csr_bg_name%ROWTYPE;
141 l_str VARCHAR2(7500);
142 l_str1 varchar2(1000);
143 l_str2 varchar2(20);
144 l_str3 varchar2(20);
145 l_str4 varchar2(20);
146 l_str5 varchar2(20);
147 l_str6 varchar2(30);
148 l_str7 varchar2(1000);
149 l_str8 varchar2(1000);
150 l_str9 varchar2(1000);
151 l_str10 varchar2(1000);
152 l_str11 varchar2(100);
153 l_effec_date DATE;
154 l_xml CLOB;
155
156
157 BEGIN
158
159 --hr_utility.trace_on(NULL,'ERSR');
160 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : Parameters',100);
161 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : p_eff_date'||p_eff_date,140);
162 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : p_ele_records'||p_ele_records,160);
163 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : p_business_group_id'||p_business_group_id,180);
164
165
166 l_effec_date := fnd_date.canonical_to_date(p_eff_date);
167
168 OPEN csr_bg_name(p_business_group_id,l_effec_date);
169 FETCH csr_bg_name INTO l_bg_name;
170 CLOSE csr_bg_name;
171
172 -- Setting PL/SQL table for tags and values of data be reported once.
173 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'EFF_DATE';
174 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := to_char(l_effec_date);
175 vCtr := vCtr + 1;
176
177 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'BG_NAME';
178 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_bg_name.name;
179 vCtr := vCtr + 1;
180
181 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ELE_RECORDS';
182 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := hr_general.decode_lookup('HR_NL_ESR_ELE_REC',p_ele_records);
183 vCtr := vCtr + 1;
184
185 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <EFF_DATE>'||to_char(l_effec_date),600);
186 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <BG_NAME>'||l_bg_name.name,620);
187 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <ELE_RECORDS>'||hr_general.decode_lookup('HR_NL_ESR_ELE_REC',p_ele_records),640);
188
189 -- Setting PL/SQL table for tags and values of the xml data for all the element records
190
191 FOR v_get_ele_class IN csr_get_ele_class(p_business_group_id,p_ele_records)
192 LOOP
193
194 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_CLASS';
195 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := NULL;
196 vCtr := vCtr + 1;
197
198 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ELE_CLASS';
199 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_ele_class.classification_name ;
200 vCtr := vCtr + 1;
201
202 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <G_CONTAINER_CLASS>',660);
203 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <ELE_CLASS>'||NVL(v_get_ele_class.classification_name,'NULL'),680);
204 FOR v_get_element_record
205 IN csr_get_element_record(p_business_group_id,l_effec_date,v_get_ele_class.classification_id)
206 LOOP
207 -- Donot repeat the element name if same.
208 IF l_element_name <> v_get_element_record.element_name THEN
209 l_element_name := v_get_element_record.element_name;
210 l_show_element := v_get_element_record.element_name;
211 l_show_component := v_get_element_record.component_name;
212 l_component := v_get_element_record.component_name;
213 l_default_comp := v_get_element_record.default_component;
214 l_replace_run := v_get_element_record.replace_run_flag;
215 l_override_dates := v_get_element_record.use_override_dates ;
216 l_reprocess_type := v_get_element_record.reprocess_type;
217 ELSE
218 l_show_element := ' ';
219 -- Donot repeat the component data if same
220 IF l_component <> v_get_element_record.component_name THEN
221 l_component := v_get_element_record.component_name;
222 l_show_component := v_get_element_record.component_name;
223 l_default_comp := v_get_element_record.default_component;
224 l_replace_run := v_get_element_record.replace_run_flag;
225 l_override_dates := v_get_element_record.use_override_dates ;
226 l_reprocess_type := v_get_element_record.reprocess_type;
227 ELSE
228 l_show_component := ' ';
229 l_default_comp := ' ';
230 l_replace_run := ' ';
231 l_override_dates := ' ';
232 l_reprocess_type := ' ';
233
234 END IF;
235 END IF;
236
237 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_ELEMENT';
238 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := NULL;
239 vCtr := vCtr + 1;
240
241 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ELEMENT_NAME';
242 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_show_element ;
243 vCtr := vCtr + 1;
244 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'COMPONENT';
245 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_show_component;
246 vCtr := vCtr + 1;
247 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REPROCESS_TYPE';
248 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_reprocess_type;
249 vCtr := vCtr + 1;
250 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'DEFAULT_COMP';
251 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_default_comp;
252 vCtr := vCtr + 1;
253 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'REPLACE_RUN';
254 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_replace_run;
255 vCtr := vCtr + 1;
256 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'OVERRIDE_DATE';
257 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := l_override_dates;
258 vCtr := vCtr + 1;
259 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TIME_FROM';
260 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_element_record.Time_From;
261 vCtr := vCtr + 1;
262 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'TIME_TO';
263 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_element_record.Time_To;
264 vCtr := vCtr + 1;
265 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_ELEMENT';
266 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_element_record.Retro_Element;
267 vCtr := vCtr + 1;
268 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'RETRO_ELE_CLASS';
269 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_element_record.classification_name;
270 vCtr := vCtr + 1;
271 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_ELEMENT';
272 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := 'END';
273 vCtr := vCtr + 1;
274
275 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <G_CONTAINER_ELEMENT>',700);
276 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <ELEMENT_NAME>'||NVL(v_get_element_record.element_name,'NULL'),720);
277
278 END LOOP;
279
280 IF p_ele_records = 'A' THEN
281 FOR v_get_ele_without_ret
282 IN csr_get_ele_without_ret(p_business_group_id,l_effec_date,v_get_ele_class.classification_id)
283 LOOP
284 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_ELEMENT';
285 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := NULL;
286 vCtr := vCtr + 1;
287
288 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'ELEMENT_NAME';
289 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := v_get_ele_without_ret.element_name ;
290 vCtr := vCtr + 1;
291
292 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_ELEMENT';
293 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := 'END';
294 vCtr := vCtr + 1;
295
296 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <G_CONTAINER_ELEMENT>',740);
297 hr_utility.set_location('Inside pay_nl_retro_setup_report.generate : <ELEMENT_NAME>'||NVL(v_get_ele_without_ret.element_name,'NULL'),760);
298 END LOOP;
299 END IF;
300
301 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagName := 'G_CONTAINER_CLASS';
302 PAY_NL_XDO_REPORT.vXMLTable(vCtr).TagValue := 'END';
303 vCtr := vCtr + 1;
304
305 END LOOP;
306
307 -- Generate XML data using the PL/SQL table.
308 hr_utility.set_location('Entered Procedure Write to clob ',100);
309 l_str1 := '<fields>' ;
310 l_str2 := '<';
311 l_str3 := '>';
312 l_str4 := '<value>' ;
313 l_str5 := '</value> </' ;
314 l_str6 := '</fields>';
315 l_str7 := '<fields></fields>';
316 l_str10 := '</';
317 l_str11 := '<?xml version="1.0" encoding="' || get_IANA_charset ||'"?>';
318 dbms_lob.createtemporary(l_xml,FALSE,DBMS_LOB.CALL);
319
320 dbms_lob.open(l_xml,dbms_lob.lob_readwrite);
321 dbms_lob.writeAppend( l_xml, length(l_str11), l_str11 );
322
323 if PAY_NL_XDO_REPORT.vXMLTable.count > 0 then
324 dbms_lob.writeAppend( l_xml, length(l_str1), l_str1 );
325 hr_utility.set_location('Before Procedure Write to clob: before loop',102);
326 FOR ctr_table IN PAY_NL_XDO_REPORT.vXMLTable.FIRST .. PAY_NL_XDO_REPORT.vXMLTable.LAST LOOP
327 hr_utility.set_location('Before Procedure Write to clob: Inside loop'||PAY_NL_XDO_REPORT.vXMLTable(ctr_table).TagName,104);
328 l_str8 := PAY_NL_XDO_REPORT.vXMLTable(ctr_table).TagName;
329 l_str9 := PAY_NL_XDO_REPORT.vXMLTable(ctr_table).TagValue;
330 if (substr(l_str8,1,11) = 'G_CONTAINER') then
331 if (l_str9 is null) then
332 l_str := l_str2||l_str8||l_str3;
333
334 /*dbms_lob.writeAppend( l_xml, length(l_str2), l_str2 );
335 dbms_lob.writeAppend( l_xml, length(l_str8),l_str8);
336 dbms_lob.writeAppend( l_xml, length(l_str3), l_str3 ); */
337 else
338 if (l_str9 = 'END') then
339 l_str := l_str10||l_str8||l_str3;
340 /* dbms_lob.writeAppend( l_xml, length(l_str10), l_str10 );
341 dbms_lob.writeAppend( l_xml, length(l_str8),l_str8);
342 dbms_lob.writeAppend( l_xml, length(l_str3), l_str3 ); */
343 end if;
344 end if;
345 else
346 if (l_str9 is not null) then
347
348 l_str := l_str2||l_str8||l_str3||l_str4||l_str9||l_str5||l_str8||l_str3;
349 /* dbms_lob.writeAppend( l_xml, length(l_str2), l_str2 );
350 dbms_lob.writeAppend( l_xml, length(l_str8),l_str8);
351 dbms_lob.writeAppend( l_xml, length(l_str3), l_str3 );
352 dbms_lob.writeAppend( l_xml, length(l_str4), l_str4 );
353 dbms_lob.writeAppend( l_xml, length(l_str9), l_str9);
354 dbms_lob.writeAppend( l_xml, length(l_str5), l_str5 );
355 dbms_lob.writeAppend( l_xml, length(l_str8),l_str8);
356 dbms_lob.writeAppend( l_xml, length(l_str3),l_str3); */
357 elsif (l_str9 is null and l_str8 is not null) then
358
359 l_str := l_str2||l_str8||l_str3||l_str4||l_str5||l_str8||l_str3;
360 /* dbms_lob.writeAppend(l_xml,length(l_str2),l_str2);
361 dbms_lob.writeAppend(l_xml,length(l_str8),l_str8);
362 dbms_lob.writeAppend(l_xml,length(l_str3),l_str3);
363 dbms_lob.writeAppend(l_xml,length(l_str4),l_str4);
364 dbms_lob.writeAppend(l_xml,length(l_str5),l_str5);
365 dbms_lob.writeAppend( l_xml, length(l_str8),l_str8);
366 dbms_lob.writeAppend( l_xml, length(l_str3),l_str3); */
367 else
368 null;
369 end if;
370 end if;
371 dbms_lob.writeAppend( l_xml, length(l_str),l_str);
372 l_str := '';
373
374 END LOOP;
375 dbms_lob.writeAppend( l_xml, length(l_str6), l_str6 );
376 else
377 dbms_lob.writeAppend( l_xml, length(l_str7), l_str7 );
378 end if;
379 --set return output variable to CLOB xml file
380 p_xml := l_xml;
381
382 /*begin
383 insert into my_table15 values(l_xml);
384 end;*/
385 EXCEPTION
386 WHEN OTHERS then
387 HR_UTILITY.TRACE('sqleerm ' || SQLERRM);
388 HR_UTILITY.RAISE_ERROR;
389
390 END generate;
391
392 END pay_nl_retro_setup_report;