DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_DK_PR_LE

Source


1 PACKAGE BODY PAY_DK_PR_LE AS
2 /* $Header: pydkprle.pkb 120.13 2012/01/19 09:07:59 rpahune ship $ */
3 
4 
5 	g_debug   boolean   :=  hr_utility.debug_enabled;
6 	l_business_group_id		NUMBER;
7 	/* variables to store the input values*/
8 	l_archive		VARCHAR2(3);
9 	l_from_date		DATE;
10 	l_to_date		DATE;
11 	l_effective_date	DATE;
12 	l_payroll_id		NUMBER;
13 	l_legal_employer_id NUMBER ;
14 	l_legal_employer_name VARCHAR2(240);
15 	l_element_set_id     NUMBER;
16 	g_err_num	     NUMBER;
17 
18 ------------------------------------------------------------------------------------------------
19 /* GET PARAMETER */
20 FUNCTION GET_PARAMETER(
21 	 p_parameter_string IN VARCHAR2
22 	,p_token            IN VARCHAR2
23 	,p_segment_number   IN NUMBER default NULL ) RETURN VARCHAR2
24  IS
25 	   l_parameter  pay_payroll_actions.legislative_parameters%TYPE:=NULL;
26 	   l_start_pos  NUMBER;
27 	   l_delimiter  VARCHAR2(1):=' ';
28 
29 BEGIN
30 IF g_debug THEN
31 	  hr_utility.set_location(' Entering Function GET_PARAMETER',10);
32 END IF;
33 
34 	 l_start_pos := instr(' '||p_parameter_string,l_delimiter||p_token||'=');
35 
36 	 IF l_start_pos = 0 THEN
37 		l_delimiter := '|';
38 		l_start_pos := instr(' '||p_parameter_string,l_delimiter||p_token||'=');
39 	 END IF;
40 
41  IF l_start_pos <> 0 THEN
42 	l_start_pos := l_start_pos + length(p_token||'=');
43 	l_parameter := substr(p_parameter_string, l_start_pos,
44 			  instr(p_parameter_string||' ', l_delimiter,l_start_pos) - l_start_pos);
45 
46 	 IF p_segment_number IS NOT NULL THEN
47 		l_parameter := ':'||l_parameter||':';
48 		l_parameter := substr(l_parameter,
49 		instr(l_parameter,':',1,p_segment_number)+1,
50 		instr(l_parameter,':',1,p_segment_number+1) -1
51 		- instr(l_parameter,':',1,p_segment_number));
52 	END IF;
53 END IF;
54 
55    RETURN l_parameter;
56 IF g_debug THEN
57 	      hr_utility.set_location(' Leaving Function GET_PARAMETER',20);
58 END IF;
59 
60  END GET_PARAMETER;
61 
62 ------------------------------------------------------------------------------------------------
63 /* GET ALL PARAMETERS */
64 PROCEDURE GET_ALL_PARAMETERS(
65  		 p_payroll_action_id	IN           NUMBER
66 		,p_business_group_id    OUT  NOCOPY  NUMBER
67 		,p_effective_date	OUT  NOCOPY  DATE
68 		,p_archive		OUT  NOCOPY  VARCHAR2
69 		,p_element_set_id    OUT  NOCOPY  NUMBER
70 		,p_legal_employer_id OUT NOCOPY NUMBER
71 		,p_payroll_id		OUT  NOCOPY  NUMBER
72 		,p_fromdate		OUT NOCOPY DATE
73 		,p_todate		OUT NOCOPY DATE
74 		)IS
75 
76 
77 	CURSOR csr_parameter_info(p_payroll_action_id NUMBER) IS
78 	SELECT
79     	fnd_date.canonical_to_date(PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'FROM_DATE'))
80 		,fnd_date.canonical_to_date(PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'TO_DATE'))
81 	  	,PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'PAYROLL_ID')
82 	  	,PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'LEGAL_EMPLOYER_ID')
83 		,PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'ELEMENT_SET_ID')
84 		,PAY_DK_PR_LE.GET_PARAMETER(legislative_parameters,'ARCHIVE')
85 		,effective_date
86 		,business_group_id
87 	FROM  pay_payroll_actions
88 	WHERE payroll_action_id = p_payroll_action_id;
89 
90 BEGIN
91 
92 	 OPEN csr_parameter_info (p_payroll_action_id);
93 	 FETCH csr_parameter_info  INTO	p_fromdate,p_todate,p_payroll_id ,p_legal_employer_id,
94      p_element_set_id,p_archive,
95 	 p_effective_date ,p_business_group_id;
96 	 CLOSE csr_parameter_info;
97 IF g_debug THEN
98       hr_utility.set_location(' Leaving Procedure GET_ALL_PARAMETERS',30);
99 END IF;
100 
101  END GET_ALL_PARAMETERS;
102 
103 -------------------------------------------------------------------------------------------------------------------------
104 /*FUNCTION TO GET DEFINED BALANCE ID*/
105 FUNCTION GET_DEFINED_BALANCE_ID
106   (p_input_value_id	    IN  VARCHAR2
107   ,p_dbi_suffix     		IN  VARCHAR2)
108    RETURN NUMBER IS
109   l_defined_balance_id 		NUMBER;
110 
111 BEGIN
112 
113 SELECT
114     defined_balance_id
115 INTO
116 	l_defined_balance_id
117 FROM
118 (
119 SELECT
120 	pdb.defined_balance_id defined_balance_id
121 FROM
122 	pay_defined_balances      pdb
123 	,pay_balance_types         pbt
124 	,pay_balance_dimensions    pbd
125 WHERE
126 	pbd.database_item_suffix = p_dbi_suffix
127 	AND    (pbd.legislation_code = 'DK' OR pbt.business_group_id = l_business_group_id)
128     AND     pbt.input_value_id = p_input_value_id
129 	AND    (pbt.legislation_code = 'DK' OR pbt.business_group_id = l_business_group_id)
130 	AND    pdb.balance_type_id = pbt.balance_type_id
131 	AND    pdb.balance_dimension_id = pbd.balance_dimension_id
132 	AND    (pdb.legislation_code = 'DK' OR pbt.business_group_id = l_business_group_id)
133 )
134 WHERE ROWNUM < 2;
135 l_defined_balance_id := NVL(l_defined_balance_id,0);
136 RETURN l_defined_balance_id ;
137 
138 EXCEPTION WHEN OTHERS THEN
139 RETURN NULL ;
140 
141 END get_defined_balance_id;
142 -------------------------------------------------------------------------------------------------------------------------
143 /*Funtion to get the costed code- Bug Fix 4962281*/
144 FUNCTION COSTED_CODE
145 	(p_run_result_id IN NUMBER
146 	,p_input_value_id IN NUMBER)
147 	RETURN VARCHAR2  IS
148 
149 l_costed_code VARCHAR2(250);
150 
151 CURSOR csr_costed_code IS
152 SELECT
153 pcak.concatenated_segments cost_code
154 FROM
155 pay_costs pc
156 ,pay_cost_allocation_keyflex pcak
157 WHERE
158 	NVL (pc.distributed_input_value_id, pc.input_value_id) = p_input_value_id
159 	AND pc.run_result_id = p_run_result_id
160 	AND pc.balance_or_cost       = 'C'
161 	AND pc.cost_allocation_keyflex_id = pcak.cost_allocation_keyflex_id;
162 BEGIN
163 OPEN csr_costed_code;
164 FETCH csr_costed_code INTO l_costed_code;
165 CLOSE csr_costed_code;
166 
167 RETURN l_costed_code;
168 
169 END COSTED_CODE;
170 ------------------------------------------------------------------------------------------------
171 
172  /* RANGE CODE */
173  PROCEDURE RANGE_CODE (pactid    IN    NUMBER
174 		      ,sqlstr    OUT   NOCOPY VARCHAR2)
175  IS
176 
177 -- Variable declarations
178 
179 	l_count			NUMBER := 0;
180 	l_action_info_id	NUMBER;
181 	l_ovn			NUMBER;
182 	l_element_set_name VARCHAR2(240);
183 	l_payroll_name VARCHAR2(240);
184 	l_business_group_name VARCHAR2(240);
185 
186 --cursor to check current archive exists
187 cursor csr_count is
188 select count(*)
189 from   pay_action_information
190 where  action_information_category = 'EMEA REPORT DETAILS'
191 and    action_information1         = 'PYDKPRLEA'
192 and    action_context_id           = pactid;
193 
194 /*Bug fix 4961408-Cursor to get the element ytd*/
195 CURSOR csr_pr_ele_ytd
196 	(p_ele_type_id NUMBER
197 	,p_payroll_id NUMBER
198 	,p_legal_employer_id NUMBER
199 	,p_from_date DATE
200 	,p_to_date DATE)
201 IS
202  SELECT
203 	SUM (pay_balance_pkg.get_value(pay_dk_pr_le.get_defined_balance_id
204         (pivf.input_value_id,'_ASG_RUN')
205         	,paa1.assignment_action_id)) ele_ytd
206 FROM
207 	per_all_assignments_f  paaf
208 	,pay_all_payrolls_f ppf
209 	,pay_assignment_actions paa1
210 	,pay_assignment_actions paa2
211 	,pay_payroll_actions ppa1
212 	,pay_payroll_actions ppa2
213 	,pay_run_results prr
214 	,pay_input_values_f pivf
215 	,pay_element_types_f petf
216 	,pay_action_interlocks  pai
217 
218 WHERE
219 	paaf.business_group_id = l_business_group_id -- BG Check
220 	AND ppf.payroll_id = p_payroll_id
221 	AND petf.element_type_id = p_ele_type_id
222 	AND paa1.tax_unit_id = p_legal_employer_id
223 	AND (petf.legislation_code = 'DK' OR petf.business_group_id = l_business_group_id)
224 	AND  paaf.payroll_id = ppf.payroll_id
225 	AND  paaf.assignment_status_type_id = 1 -- to check for active assignments
226 	AND paa1.assignment_id = paaf.assignment_id
227 	AND paa1.action_status = 'C'  -- Completed
228 
229 	--for payroll actions
230 	AND ppa1.date_earned between p_from_date and p_to_date --date condition
231 	AND ppa1.action_type IN ('R','Q')  -- Payroll Run or Quickpay Run
232 	AND ppa1.payroll_action_id = paa1.payroll_action_id
233 
234 	--for prepayments
235 	AND    paa2.action_status           IN ('C','S') -- 10229494
236 	AND    paa2.assignment_action_id    = pai.locking_action_id
237 	AND    paa2.payroll_action_id       = ppa2.payroll_action_id
238 	AND    ppa2.action_type            IN ('P','U')
239 	AND    ppa2.date_earned between p_from_date and p_to_date
240 
241 	AND paa1.ASSIGNMENT_ACTION_ID = pai.locked_action_id
242 	/*date check*/
243 	AND    ppa2.date_earned between paaf.effective_start_date and paaf.effective_end_date
244 	AND    ppa2.date_earned between ppf.effective_start_date and ppf.effective_end_date
245 	AND    ppa2.date_earned between pivf.effective_start_date and pivf.effective_end_date
246 
247 		-- for run results
248 	AND prr.assignment_action_id = paa1.assignment_action_id
249 
250 	AND petf.element_type_id = prr.element_type_id
251 	AND pivf.element_type_id = prr.element_type_id
252 	AND pivf.name='Pay Value' ;
253 
254 /* Cursor to get details if element set is null -Bug fix 4968059*/
255 CURSOR csr_pr_all_ele(p_payroll_action_id    NUMBER)
256 IS
257 SELECT
258 	organization_id
259 	,organization_name
260 	,tax_unit_id
261 	,legal_employer_name
262 	,payroll_name
263 	,payroll_id
264 	,ele_type_id
265 	,ele_proc_prior
266 	,ele_name
267 	,input_value_id
268 	,date_earned
269 	,costed_code
270 	,SUM(pay_value) pay_value
271 --	,SUM(balance_amount) balance_amount
272 FROM
273 (
274 SELECT
275 	paaf.organization_id organization_id
276 	,haou2.NAME organization_name
277 	,paa1.assignment_action_id	 asg_act_id
278 	,paa1.tax_unit_id	 tax_unit_id
279 	,haou1.NAME legal_employer_name
280 	,ppf.payroll_name payroll_name
281 	,ppf.payroll_id payroll_id
282 	,petf.element_type_id ele_type_id
283 	,petf.processing_priority ele_proc_prior
284     ,NVL(petf.reporting_name,petf.element_name) ele_name
285 	,pay_dk_pr_le.costed_code(prr.run_result_id,pivf.input_value_id) costed_code
286 	,pivf.input_value_id  input_value_id
287 	,to_char(ppa1.date_earned,'DD-MON-RRRR')    date_earned
288 	,pay_balance_pkg.get_value(pay_dk_pr_le.get_defined_balance_id
289         (pivf.input_value_id,'_ASG_RUN')
290         	,paa1.assignment_action_id) pay_value
291 /*	,pay_balance_pkg.get_value(pay_dk_pr_le.get_defined_balance_id
292         (pivf.input_value_id,'_ASG_YTD'),
293         	paa1.assignment_action_id) balance_amount*/
294 FROM
295 	per_all_assignments_f  paaf
296 	,pay_assignment_actions paa1
297 	,pay_assignment_actions paa2
298 	,pay_run_results prr
299 	,pay_input_values_f pivf
300 	,pay_element_types_f petf
301 	,pay_all_payrolls_f ppf
302 	,pay_payroll_actions ppa1
303 	,pay_payroll_actions ppa2
304 	,hr_all_organization_units haou1
305 	,hr_all_organization_units haou2
306 	,pay_action_interlocks  pai
307 
308 WHERE
309 	paaf.business_group_id = l_business_group_id -- BG Check
310 	AND paa1.tax_unit_id = nvl(l_legal_employer_id,paa1.tax_unit_id)
311 	AND ppf.payroll_id = nvl(l_payroll_id,ppf.payroll_id)
312 	AND  paaf.assignment_status_type_id = 1 -- to check for active assignments
313 	AND  paaf.payroll_id = ppf.payroll_id
314 	AND paa1.tax_unit_id= haou1.organization_id
315 	AND paaf.organization_id = haou2.organization_id
316 	AND paa1.assignment_id = paaf.assignment_id
317 	AND paa1.action_status = 'C'  -- Completed
318 
319 	--for payroll actions
320 	AND ppa1.payroll_action_id = paa1.payroll_action_id
321 	AND ppa1.date_earned between l_from_date and l_to_date --date condition
322 	AND ppa1.action_type IN ('R','Q')  -- Payroll Run or Quickpay Run
323 
324 	--for prepayments
325 	AND    paa2.action_status           IN ('C','S') -- 10229494
326 	AND    paa2.assignment_action_id    = pai.locking_action_id
327 	AND    paa2.payroll_action_id       = ppa2.payroll_action_id
328 	AND    ppa2.action_type            IN ('P','U')
329 	AND    ppa2.date_earned between l_from_date and l_to_date
330 
331 	AND paa1.ASSIGNMENT_ACTION_ID = pai.locked_action_id
332 	/*date check*/
333 	AND    ppa2.date_earned between paaf.effective_start_date and paaf.effective_end_date
334 	AND    ppa2.date_earned between ppf.effective_start_date and ppf.effective_end_date
335 	AND    ppa2.date_earned between pivf.effective_start_date and pivf.effective_end_date
336 
337 	-- for run results
338 	AND prr.assignment_action_id = paa1.assignment_action_id
339 
340 	AND petf.element_type_id = prr.element_type_id
341 	AND (petf.legislation_code = 'DK' OR petf.business_group_id = l_business_group_id)
342 	AND petf.element_name <> 'Tax'    --To exclude Tax
343     AND petf.element_name <> 'Mileage Claim' -- To exclude Mileage Claim
344 	AND pivf.element_type_id = prr.element_type_id
345 	AND pivf.name='Pay Value')
346 
347 	GROUP BY
348 	organization_id
349 	,organization_name
350 	,tax_unit_id
351 	,legal_employer_name
352 	,payroll_name
353 	,payroll_id
354 	,ele_type_id
355 	,ele_proc_prior
356 	,ele_name
357 	,input_value_id
358 	,date_earned
359 	,costed_code
360 ORDER BY tax_unit_id,payroll_id,organization_id,ele_proc_prior,ele_type_id;
361 
362 /* Cursor to get details if element set is specified*/
363 CURSOR csr_pr_ele_set(p_payroll_action_id    NUMBER)
364 IS
365 SELECT
366 	organization_id
367 	,organization_name
368 	,tax_unit_id
369 	,legal_employer_name
370 	,payroll_name
371 	,payroll_id
372 	,ele_type_id
373 	,ele_proc_prior
374 	,ele_name
375 	,input_value_id
376 	,date_earned
377 	,costed_code
378 	,SUM(pay_value) pay_value
379 --	,SUM(balance_amount) balance_amount
380 FROM
381 (
382 SELECT
383 	paaf.organization_id organization_id
384 	,haou2.NAME organization_name
385 	,paa1.assignment_action_id	 asg_act_id
386 	,paa1.tax_unit_id	 tax_unit_id
387 	,haou1.NAME legal_employer_name
388 	,ppf.payroll_name payroll_name
389 	,ppf.payroll_id payroll_id
390 	,petf.element_type_id ele_type_id
391 	,petf.processing_priority ele_proc_prior
392     ,NVL(petf.reporting_name,petf.element_name) ele_name
393 	,pay_dk_pr_le.costed_code(prr.run_result_id,pivf.input_value_id) costed_code
394 	,pivf.input_value_id  input_value_id
395 	,to_char(ppa1.date_earned,'DD-MON-RRRR')    date_earned
396 	,pay_balance_pkg.get_value(pay_dk_pr_le.get_defined_balance_id
397         (pivf.input_value_id,'_ASG_RUN')
398         	,paa1.assignment_action_id) pay_value
399 /*	,pay_balance_pkg.get_value(pay_dk_pr_le.get_defined_balance_id
400         (pivf.input_value_id,'_ASG_YTD'),
401         	paa1.assignment_action_id) balance_amount*/
402 FROM
403 	per_all_assignments_f  paaf
404 	,pay_assignment_actions paa1
405 	,pay_assignment_actions paa2
406 	,pay_run_results prr
407 	,pay_input_values_f pivf
408 	,pay_element_types_f petf
409 	,pay_all_payrolls_f ppf
410 	,pay_payroll_actions ppa1
411 	,pay_payroll_actions ppa2
412 	,pay_element_set_members pesm
413 	,hr_all_organization_units haou1
414 	,hr_all_organization_units haou2
415 	,pay_action_interlocks  pai
416 
417 WHERE
418 	paaf.business_group_id = l_business_group_id -- BG Check
419 	AND pesm.element_set_id = l_element_set_id
420 	AND paa1.tax_unit_id = nvl(l_legal_employer_id,paa1.tax_unit_id)
421 	AND ppf.payroll_id = nvl(l_payroll_id,ppf.payroll_id)
422 	AND  paaf.assignment_status_type_id = 1 -- to check for active assignments
423 	AND  paaf.payroll_id = ppf.payroll_id
424 	AND paa1.tax_unit_id= haou1.organization_id
425 	AND paaf.organization_id = haou2.organization_id
426 	AND paa1.assignment_id = paaf.assignment_id
427 	AND paa1.action_status = 'C'  -- Completed
428 
429 	--for payroll actions
430 	AND ppa1.payroll_action_id = paa1.payroll_action_id
431 	AND ppa1.date_earned between l_from_date and l_to_date --date condition
432 	AND ppa1.action_type IN ('R','Q')  -- Payroll Run or Quickpay Run
433 
434 	--for prepayments
435 	AND    paa2.action_status           IN ('C','S') -- 10229494
436 	AND    paa2.assignment_action_id    = pai.locking_action_id
437 	AND    paa2.payroll_action_id       = ppa2.payroll_action_id
438 	AND    ppa2.action_type            IN ('P','U')
439 	AND    ppa2.date_earned between l_from_date and l_to_date
440 
441 	AND paa1.ASSIGNMENT_ACTION_ID = pai.locked_action_id
442 
443 	-- for run results
444 	AND prr.assignment_action_id = paa1.assignment_action_id
445 	/*date check*/
446 	AND    ppa2.date_earned between paaf.effective_start_date and paaf.effective_end_date
447 	AND    ppa2.date_earned between ppf.effective_start_date and ppf.effective_end_date
448 	AND    ppa2.date_earned between pivf.effective_start_date and pivf.effective_end_date
449 
450 	AND prr.element_type_id = pesm.element_type_id
451 	AND petf.element_type_id = prr.element_type_id
452 	AND (petf.legislation_code = 'DK' OR petf.business_group_id = l_business_group_id)
453 	AND petf.element_name <> 'Tax'    --To exclude Tax
454     AND petf.element_name <> 'Mileage Claim' -- To exclude Mileage Claim
455 	AND pivf.element_type_id = prr.element_type_id
456 	AND pivf.name='Pay Value')
457 
458 	GROUP BY
459 	organization_id
460 	,organization_name
461 	,tax_unit_id
462 	,legal_employer_name
463 	,payroll_name
464 	,payroll_id
465 	,ele_type_id
466 	,ele_proc_prior
467 	,ele_name
468 	,input_value_id
469 	,date_earned
470 	,costed_code
471 ORDER BY tax_unit_id,payroll_id,organization_id,ele_proc_prior,ele_type_id;
472 
473 
474 l_actid			NUMBER;
475 l_asgid			NUMBER := -999;
476 l_year_start    DATE ;
477 l_ele_ytd       NUMBER ;
478 --------------------------------------------------------------------------------
479 
480 BEGIN
481  IF g_debug THEN
482       hr_utility.set_location(' Entering Procedure RANGE_CODE',40);
483 END IF;
484 
485 
486  -- the sql string to return
487  sqlstr := 'SELECT DISTINCT person_id
488 	FROM  per_people_f ppf
489 	     ,pay_payroll_actions ppa
490 	WHERE ppa.payroll_action_id = :payroll_action_id
491 	AND   ppa.business_group_id = ppf.business_group_id
492 	ORDER BY ppf.person_id';
493 
494   -- fetch the input parameter values
495  PAY_DK_PR_LE.GET_ALL_PARAMETERS(
496 		 pactid
497 		,l_business_group_id
498 		,l_effective_date
499 		,l_archive
500 		,l_element_set_id
501  		,l_legal_employer_id
502 		,l_payroll_id
503 		,l_from_date
504 		,l_to_date) ;
505 
506  -- check if we have to archive again
507  IF  (l_archive = 'Y')   THEN
508 
509    -- check if record for current archive exists
510    OPEN csr_count;
511    FETCH csr_count INTO l_count;
512    CLOSE csr_count;
513 
514 
515    -- archive Report Details only if no record exists
516   IF (l_count < 1) THEN
517 
518 ---to fetch the element set name
519    BEGIN
520 	SELECT pes.element_set_name INTO
521 		l_element_set_name
522 	FROM
523 		pay_element_sets pes
524 	WHERE pes.element_set_id=l_element_set_id;
525   EXCEPTION
526 	WHEN OTHERS THEN
527 	NULL;
528    END;
529 
530 --to fetch the payroll name
531 BEGIN
532 	SELECT ppf.payroll_name INTO l_payroll_name
533 	FROM
534 	-- Replaced view  pay_payrolls_f with table pay_all_payrolls_f for bug fix 5231458
535 	--pay_payrolls_f ppf
536 	pay_all_payrolls_f ppf
537 	WHERE ppf.payroll_id=l_payroll_id;
538 EXCEPTION
539 	WHEN OTHERS THEN
540 	NULL;
541 END;
542 
543 --to fetch the organization name
544 BEGIN
545 	SELECT haou.name INTO l_business_group_name
546 	FROM hr_all_organization_units haou
547 	WHERE haou.organization_id=l_business_group_id;
548 EXCEPTION
549 	WHEN OTHERS THEN
550 	NULL;
551 END;
552 
553 BEGIN
554 	SELECT haou.name INTO l_legal_employer_name
555 	FROM hr_all_organization_units haou
556 	WHERE haou.organization_id=l_legal_employer_id;
557 EXCEPTION
558 	WHEN OTHERS THEN
559 	NULL;
560 END;
561 
562 
563 
564 -- Archive the REPORT DETAILS
565 
566 	pay_action_information_api.create_action_information (
567 	 p_action_information_id        => l_action_info_id	-- out parameter
568 	,p_object_version_number        => l_ovn		-- out parameter
569 	,p_action_context_id            => pactid		-- context id = payroll action id (of Archive)
570 	,p_action_context_type          => 'PA'			-- context type
571 	,p_effective_date               => l_effective_date	-- Date of running the archive
572 	,p_action_information_category  => 'EMEA REPORT DETAILS' -- Information Category
573 	,p_tax_unit_id                  => NULL			-- Legal Employer ID
574 	,p_jurisdiction_code            => NULL			-- Tax Municipality ID
575 	,p_action_information1          => 'PYDKPRLEA'	-- Conc Prg Short Name
576 	,p_action_information2          => l_business_group_id  	-- Business Group ID
577 	,p_action_information3          => l_from_date		-- Reporting from date
578 	,p_action_information4          => l_to_date		-- Reporting to date
579 	,p_action_information5          => l_business_group_name	--Business Group Name
580 	,p_action_information6          => l_payroll_name	--payroll name
581 	,p_action_information7          => l_legal_employer_name -- Legal Employer Name
582 	,p_action_information8          => l_element_set_name);	-- element set name
583 
584    END IF; -- l_count < 1
585 
586 l_year_start:= TO_DATE ('01/01'||TO_CHAR(l_from_date,'YYYY'),'DD/MM/YYYY');
587 
588 IF (l_element_set_id IS NULL) THEN
589 FOR csr_rec IN csr_pr_all_ele(pactid) LOOP
590 IF (csr_rec.pay_value > 0) THEN -- to archive only elements which have pay value > 0
591 	/*Bug fix 4961408*/
592 	OPEN csr_pr_ele_ytd(csr_rec.ele_type_id
593 			    ,csr_rec.payroll_id
594 			    ,csr_rec.tax_unit_id
595 			    ,l_year_start
596 			    ,csr_rec.date_earned);
597 	FETCH csr_pr_ele_ytd INTO l_ele_ytd;
598 	CLOSE csr_pr_ele_ytd;
599 
600   -- Creating Archive Entries
601   pay_action_information_api.create_action_information (
602 
603 	 p_action_information_id        => l_action_info_id		-- out parameter
604 	,p_object_version_number        => l_ovn			-- out parameter
605 	,p_action_context_id            => pactid      			-- context id = assignment action id (of Archive)
606 	,p_action_context_type          => 'PA'				-- context type
607 	,p_effective_date               => l_effective_date		-- Date of running the archive
608 	,p_assignment_id	        => NULL			        -- Assignment ID
609 	,p_action_information_category  => 'EMEA REPORT INFORMATION'	-- Information Category
610 	,p_tax_unit_id                  => csr_rec.tax_unit_id		-- Legal Employer ID
611 	,p_jurisdiction_code            => NULL			        -- Tax Municipality ID
612 	,p_action_information1          => 'PYDKPRLEA'		        --Con Program Short Name
613 	,p_action_information2          => csr_rec.payroll_id		-- PayrollID
614 	,p_action_information3          => csr_rec.payroll_name		-- Payroll Name
615 	,p_action_information4          => csr_rec.legal_employer_name	-- Legal Employer Name
616 	,p_action_information5          => csr_rec.organization_id	-- Organization ID
617 	,p_action_information6          => csr_rec.organization_name	-- Organization Name
618 	,p_action_information7          =>  csr_rec.ele_type_id		-- element type id
619 	,p_action_information8          =>  csr_rec.ele_proc_prior	-- processing priority
620 	,p_action_information9          =>  csr_rec.ele_name		-- element name
621 	,p_action_information10         => csr_rec.date_earned		-- date_earned
622 	,p_action_information11         =>  csr_rec.costed_code		-- Costed Value
623 	/*Storing in Canonical format to fix issues due to varying numeric formats*/
624 	,p_action_information12         => fnd_number.number_to_canonical(csr_rec.pay_value) -- Pay Value
625 	,p_action_information13         => fnd_number.number_to_canonical(l_ele_ytd)         -- element YTD
626 	);
627 
628 END IF ;
629 END LOOP;
630 
631 ELSIF (l_element_set_id IS NOT NULL) THEN
632 FOR csr_rec IN csr_pr_ele_set(pactid) LOOP
633 IF (csr_rec.pay_value > 0) THEN -- to archive only elements which have pay value > 0
634   -- Creating Archive Entries
635 		/*Bug fix 4961408*/
636 	OPEN csr_pr_ele_ytd(csr_rec.ele_type_id
637 			    ,csr_rec.payroll_id
638 			    ,csr_rec.tax_unit_id
639 			    ,l_year_start
640 			    ,csr_rec.date_earned);
641 	FETCH csr_pr_ele_ytd INTO l_ele_ytd;
642 	CLOSE csr_pr_ele_ytd;
643 
644   pay_action_information_api.create_action_information (
645 
646 	 p_action_information_id        => l_action_info_id		-- out parameter
647 	,p_object_version_number        => l_ovn			-- out parameter
648 	,p_action_context_id            => pactid      			-- context id = assignment action id (of Archive)
649 	,p_action_context_type          => 'PA'				-- context type
650 	,p_effective_date               => l_effective_date		-- Date of running the archive
651 	,p_assignment_id	        => NULL			-- Assignment ID
652 	,p_action_information_category  => 'EMEA REPORT INFORMATION'	-- Information Category
653 	,p_tax_unit_id                  => csr_rec.tax_unit_id		-- Legal Employer ID
654 	,p_jurisdiction_code            => NULL			-- Tax Municipality ID
655 	,p_action_information1          => 'PYDKPRLEA'		 --Con Program Short Name
656 	,p_action_information2          => csr_rec.payroll_id		-- PayrollID
657 	,p_action_information3          => csr_rec.payroll_name		-- Payroll Name
658 	,p_action_information4          => csr_rec.legal_employer_name	-- Legal Employer Name
659 	,p_action_information5          => csr_rec.organization_id	-- Organization ID
660 	,p_action_information6          => csr_rec.organization_name	-- Organization Name
661 	,p_action_information7          =>  csr_rec.ele_type_id		-- element type id
662 	,p_action_information8          =>  csr_rec.ele_proc_prior		-- processing priority
663 	,p_action_information9          =>  csr_rec.ele_name		-- element name
664 	,p_action_information10         => csr_rec.date_earned		-- date_earned
665 	,p_action_information11         =>  csr_rec.costed_code		-- Costed Value
666 	/*Storing in Canonical format to fix issues due to varying numeric formats*/
667 	,p_action_information12         => fnd_number.number_to_canonical(csr_rec.pay_value) -- Pay Value
668 	,p_action_information13         => fnd_number.number_to_canonical(l_ele_ytd)         -- element YTD
669 	);
670 END IF ;
671 END LOOP;
672 END IF ;
673 END IF; -- l_archive = 'Y'
674 ---------------------------------------------------------------------------
675 
676 IF g_debug THEN
677       hr_utility.set_location(' Leaving Procedure RANGE_CODE',50);
678  END IF;
679  END RANGE_CODE;
680 
681 -------------------------------------------------------------------------------------------------------------------------
682  /* INITIALIZATION CODE */
683  PROCEDURE INITIALIZATION_CODE(p_payroll_action_id IN NUMBER)
684  IS
685 
686  BEGIN
687  IF g_debug THEN
688       hr_utility.set_location(' Entering Procedure INITIALIZATION_CODE',80);
689  END IF;
690 	NULL;
691 IF g_debug THEN
692       hr_utility.set_location(' Leaving Procedure INITIALIZATION_CODE',90);
693 END IF;
694 exception when others then
695  g_err_num := SQLCODE;
696   IF g_debug THEN
697       hr_utility.set_location('ORA_ERR: ' || g_err_num || 'In INITIALIZATION_CODE',180);
698 END IF;
699 
700  END INITIALIZATION_CODE;
701 
702 ------------------------------------------------------------------------------------------------
703  /* ASSIGNMENT ACTION CODE */
704 PROCEDURE ASSIGNMENT_ACTION_CODE
705  (p_payroll_action_id     IN NUMBER
706  ,p_start_person          IN NUMBER
707  ,p_end_person            IN NUMBER
708  ,p_chunk                 IN NUMBER)
709  IS
710 
711 BEGIN
712 IF g_debug THEN
713       hr_utility.set_location(' Leaving Procedure ASSIGNMENT_ACTION_CODE',70);
714 END IF;
715  END ASSIGNMENT_ACTION_CODE;
716 
717 ------------------------------------------------------------------------------------------------
718  /* ARCHIVE CODE */
719 PROCEDURE ARCHIVE_CODE(p_assignment_action_id IN NUMBER
720 		      ,p_effective_date    IN DATE)
721  IS
722 BEGIN
723 	 IF g_debug THEN
724 			hr_utility.set_location(' Entering Procedure ARCHIVE_CODE',80);
725 	 END IF;
726 	 IF g_debug THEN
727 			hr_utility.set_location(' Leaving Procedure ARCHIVE_CODE',90);
728 	 END IF;
729 END ARCHIVE_CODE;
730 
731 -------------------------------------------------------------------------------------------------------------------------
732 
733 PROCEDURE POPULATE_DETAILS(p_payroll_action_id in VARCHAR2 ,
734 		  			       p_template_name in VARCHAR2 ,
735 						   p_xml OUT NOCOPY CLOB ) IS
736 l_employer hr_all_organization_units.name%type;
737 l_orgnumber hr_organization_information.org_information1%type;
738 l_from_date DATE;
739 l_to_date DATE;
740 -- For bug fix 5231458
741 --l_payroll_action_id varchar2(150);
742 l_payroll_action_id NUMBER;
743 l_archiver varchar2(150);
744 l_ele_type_id NUMBER:=-999;
745 l_flag NUMBER :=0;
746 l_leg_emp_id NUMBER :=-999 ;
747 l_payroll_id NUMBER :=-999;
748 l_org_id NUMBER := -999;
749 l_tot_ele_run NUMBER := 0;
750 l_tot_ele_ytd NUMBER :=0;
751 l_tot_org_ele_run NUMBER := 0;
752 l_tot_org_ele_ytd NUMBER :=0;
753 l_tot_le_ele_run NUMBER := 0;
754 l_tot_le_ele_ytd NUMBER :=0;
755 --l_prev_date_earned VARCHAR2(30):= '-999';
756 l_IANA_charset VARCHAR2 (50);
757 
758 CURSOR csr_pr_le
759 IS
760 SELECT
761 	pai1.action_information3||' to '||pai1.action_information4 report_period
762 	,pai2.action_information2 payroll_id
763 	,pai2.action_information3 payroll_name
764 	,pai2.tax_unit_id leg_emp_id
765 	,pai2.action_information4 leg_emp_name
766 	,pai2.action_information5 org_id
767 	,pai2.action_information6 org_name
768 	,pai2.action_information7 ele_type_id
769 	,pai2.action_information8 ele_proc_prior
770 	,pai2.action_information9 ele_name
771 	,pai2.action_information10 date_earned
772 	,pai2.action_information11 costed_code
773 	,fnd_number.canonical_to_number(pai2.action_information12) pay_value
774 	,fnd_number.canonical_to_number(pai2.action_information13) balance_amount
775 FROM
776 	pay_action_information pai1
777 	,pay_action_information pai2
778 WHERE
779         -- Removing to_char for bug fix 5231458
780 	--TO_CHAR(pai1.action_context_id)=l_payroll_action_id
781         pai1.action_context_id = l_payroll_action_id
782 	AND pai1.action_information_category='EMEA REPORT DETAILS'
783 	--AND TO_CHAR(pai2.action_context_id)= l_payroll_action_id
784 	AND pai2.action_context_id = l_payroll_action_id
785 	AND pai2.action_information_category='EMEA REPORT INFORMATION'
786 ORDER BY
787 	TO_NUMBER(pai2.action_information2)
788 	,pai2.tax_unit_id
789 	,TO_NUMBER(pai2.action_information5)
790 	,TO_NUMBER(pai2.action_information8)
791 	,TO_NUMBER(pai2.action_information7)
792 	,fnd_date.string_to_date(pai2.action_information10,'dd-mon-rrrr');
793 
794 BEGIN
795 IF p_payroll_action_id  IS NULL THEN
796 	BEGIN
797 	SELECT
798 		payroll_action_id
799 	INTO
800 		l_payroll_action_id
801 	FROM
802 		pay_payroll_actions ppa,
803 		fnd_conc_req_summary_v fcrs,
804 		fnd_conc_req_summary_v fcrs1
805 	WHERE
806 		fcrs.request_id = FND_GLOBAL.CONC_REQUEST_ID
807 		AND fcrs.priority_request_id = fcrs1.priority_request_id
808 		AND ppa.request_id between fcrs1.request_id  and fcrs.request_id
809 		AND ppa.request_id = fcrs1.request_id;
810 	EXCEPTION
811 	WHEN others THEN
812 		NULL;
813 	END ;
814 ELSE
815 	l_payroll_action_id:=p_payroll_action_id;
816 END IF;
817 
818 l_IANA_charset :=PAY_DK_GENERAL.get_IANA_charset ;
819 /*Setting the Character Set Dynamically*/
820 --p_xml := '<?xml version = "1.0" encoding = "UTF-8"?>';
821 p_xml := '<?xml version = "1.0" encoding = "'||l_IANA_charset||'"?>';
822 p_xml:=p_xml || '<START>';
823 
824 FOR csr_rec IN csr_pr_le LOOP
825 
826 IF (csr_rec.payroll_id <> l_payroll_id) THEN
827   IF (csr_pr_le%rowcount <> 1) THEN
828     p_xml:=p_xml || '<Tot_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_run,2),'999G999G990D99')),' ') || '</Tot_ele_run>';
829     p_xml:=p_xml || '<Tot_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_ytd,2),'999G999G990D99')),' ') || '</Tot_ele_ytd>';
830     l_tot_org_ele_run := l_tot_org_ele_run + l_tot_ele_run;
831     l_tot_org_ele_ytd := l_tot_org_ele_ytd + l_tot_ele_ytd;
832     l_tot_ele_run := 0;
833     l_tot_ele_ytd := 0;
834 	p_xml:= p_xml || '</ELEMENT_RECORD>';
835 	p_xml:=p_xml || '<Tot_org_ele_run>' || NVL(TRIM(TO_CHAR(ROUND (l_tot_org_ele_run,2),'999G999G990D99')),' ')|| '</Tot_org_ele_run>';
836     p_xml:=p_xml || '<Tot_org_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_org_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_org_ele_ytd>';
837     l_tot_le_ele_run := l_tot_le_ele_run + l_tot_org_ele_run;
838     l_tot_le_ele_ytd := l_tot_le_ele_ytd + l_tot_org_ele_ytd;
839     l_tot_org_ele_run := 0;
840     l_tot_org_ele_ytd := 0;
841 	p_xml := p_xml ||'</ORGANIZATION_RECORD>';
842 	p_xml:=p_xml || '<Tot_le_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_run,2),'999G999G990D99')),' ')|| '</Tot_le_ele_run>';
843     p_xml:=p_xml || '<Tot_le_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_le_ele_ytd>';
844     l_tot_le_ele_run := 0;
845     l_tot_le_ele_ytd := 0;
846 	p_xml := p_xml ||'</LEGAL_EMPLOYER_RECORD>';
847 	p_xml := p_xml ||'</PAYROLL_RECORD>';
848 	p_xml := p_xml ||'<PAYROLL_RECORD>';
849 	p_xml := p_xml ||'<LEGAL_EMPLOYER_RECORD>';
850 	p_xml := p_xml ||'<ORGANIZATION_RECORD>';
851 	p_xml:=p_xml || '<Report_Period>' || csr_rec.report_period || '</Report_Period>';
852 	p_xml:=p_xml || '<Legal_Employer>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.leg_emp_name) || '</Legal_Employer>';
853 	p_xml:=p_xml || '<Payroll_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.payroll_name) || '</Payroll_Name>';
854 	p_xml:= p_xml || '<ELEMENT_RECORD>';
855  END IF;
856 END IF;
857 IF (csr_rec.leg_emp_id <> l_leg_emp_id AND csr_rec.payroll_id = l_payroll_id) THEN
858   IF (csr_pr_le%rowcount <> 1) THEN
859     p_xml:=p_xml || '<Tot_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_run,2),'999G999G990D99')),' ') || '</Tot_ele_run>';
860     p_xml:=p_xml || '<Tot_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_ytd,2),'999G999G990D99')),' ') || '</Tot_ele_ytd>';
861      l_tot_org_ele_run := l_tot_org_ele_run + l_tot_ele_run;
862     l_tot_org_ele_ytd := l_tot_org_ele_ytd + l_tot_ele_ytd;
863      l_tot_ele_run := 0;
864     l_tot_ele_ytd := 0;
865 	p_xml:= p_xml || '</ELEMENT_RECORD>';
866 	p_xml:=p_xml || '<Tot_org_ele_run>' || NVL(TRIM(TO_CHAR(ROUND (l_tot_org_ele_run,2),'999G999G990D99')),' ')|| '</Tot_org_ele_run>';
867     p_xml:=p_xml || '<Tot_org_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_org_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_org_ele_ytd>';     l_tot_le_ele_run := l_tot_le_ele_run + l_tot_org_ele_run;
868     l_tot_le_ele_ytd := l_tot_le_ele_ytd + l_tot_org_ele_ytd;
869     l_tot_org_ele_run := 0;
870     l_tot_org_ele_ytd := 0;
871 	p_xml := p_xml ||'</ORGANIZATION_RECORD>';
872 	p_xml:=p_xml || '<Tot_le_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_run,2),'999G999G990D99')),' ')|| '</Tot_le_ele_run>';
873     p_xml:=p_xml || '<Tot_le_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_le_ele_ytd>';
874     l_tot_le_ele_run := 0;
875     l_tot_le_ele_ytd := 0;
876 	p_xml:= p_xml || '</LEGAL_EMPLOYER_RECORD>';
877 	p_xml:= p_xml || '<LEGAL_EMPLOYER_RECORD>';
878 	p_xml := p_xml ||'<ORGANIZATION_RECORD>';
879 	p_xml:=p_xml || '<Report_Period>' || csr_rec.report_period || '</Report_Period>';
880 	p_xml:=p_xml || '<Legal_Employer>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.leg_emp_name) || '</Legal_Employer>';
881 	p_xml:=p_xml || '<Payroll_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.payroll_name) || '</Payroll_Name>';
882 	p_xml:= p_xml || '<ELEMENT_RECORD>';
883   END IF;
884 END IF;
885 
886 IF (csr_rec.org_id <> l_org_id AND csr_rec.leg_emp_id = l_leg_emp_id
887 	AND csr_rec.payroll_id = l_payroll_id) THEN
888   IF (csr_pr_le%rowcount <> 1) THEN
889     p_xml:=p_xml || '<Tot_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_run,2),'999G999G990D99')),' ') || '</Tot_ele_run>';
890     p_xml:=p_xml || '<Tot_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_ytd,2),'999G999G990D99')),' ') || '</Tot_ele_ytd>';
891     l_tot_org_ele_run := l_tot_org_ele_run + l_tot_ele_run;
892     l_tot_org_ele_ytd := l_tot_org_ele_ytd + l_tot_ele_ytd;
893     l_tot_ele_run := 0;
894     l_tot_ele_ytd := 0;
895 	p_xml:= p_xml || '</ELEMENT_RECORD>';
896 	p_xml:=p_xml || '<Tot_org_ele_run>' || NVL(TRIM(TO_CHAR(ROUND (l_tot_org_ele_run,2),'999G999G990D99')),' ')|| '</Tot_org_ele_run>';
897     p_xml:=p_xml || '<Tot_org_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_org_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_org_ele_ytd>';    l_tot_le_ele_run := l_tot_le_ele_run + l_tot_org_ele_run;
898     l_tot_le_ele_ytd := l_tot_le_ele_ytd + l_tot_org_ele_ytd;
899     l_tot_org_ele_run := 0;
900     l_tot_org_ele_ytd := 0;
901 	p_xml := p_xml ||'</ORGANIZATION_RECORD>';
902 	p_xml := p_xml ||'<ORGANIZATION_RECORD>';
903 	p_xml:=p_xml || '<Report_Period>' || csr_rec.report_period || '</Report_Period>';
904 	p_xml:=p_xml || '<Legal_Employer>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.leg_emp_name) || '</Legal_Employer>';
905 	p_xml:=p_xml || '<Payroll_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.payroll_name) || '</Payroll_Name>';
906 	p_xml:= p_xml || '<ELEMENT_RECORD>';
907   END IF;
908 END IF;
909 
910 IF (csr_pr_le%ROWCOUNT = 1) THEN
911 	p_xml := p_xml ||'<PAYROLL_RECORD>';
912 	p_xml:= p_xml || '<LEGAL_EMPLOYER_RECORD>';
913 	p_xml := p_xml ||'<ORGANIZATION_RECORD>';
914 	p_xml:=p_xml || '<Report_Period>' || csr_rec.report_period || '</Report_Period>';
915 	p_xml:=p_xml || '<Legal_Employer>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.leg_emp_name) || '</Legal_Employer>';
916 	p_xml:=p_xml || '<Payroll_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.payroll_name) || '</Payroll_Name>';
917 	p_xml:= p_xml || '<ELEMENT_RECORD>';
918 END IF;
919 
920 IF( l_ele_type_id <> csr_rec.ele_type_id
921 	AND csr_rec.org_id = l_org_id AND csr_rec.leg_emp_id = l_leg_emp_id
922 	AND csr_rec.payroll_id = l_payroll_id)
923 THEN
924     p_xml:=p_xml || '<Tot_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_run,2),'999G999G990D99')),' ') || '</Tot_ele_run>';
925     p_xml:=p_xml || '<Tot_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_ytd,2),'999G999G990D99')),' ') || '</Tot_ele_ytd>';
926     l_tot_org_ele_run := l_tot_org_ele_run + l_tot_ele_run;
927     l_tot_org_ele_ytd := l_tot_org_ele_ytd + l_tot_ele_ytd;
928      l_tot_ele_run := 0;
929     l_tot_ele_ytd := 0;
930 	p_xml:= p_xml || '</ELEMENT_RECORD>';
931 	p_xml:= p_xml || '<ELEMENT_RECORD>';
932 END IF;
933 	p_xml:= p_xml || '<ELEMENT_RECORD_PER_RUN>';
934 	p_xml:=p_xml || '<Element_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.ele_name) || '</Element_Name>';
935 	p_xml:=p_xml || '<Organization_Name>' || hr_dk_utility.REPLACE_SPECIAL_CHARS(csr_rec.org_name) || '</Organization_Name>';
936 	p_xml:=p_xml || '<Date_Earned>' || csr_rec.date_earned || '</Date_Earned>';
937 	/*Bug fix - 4961779*/
938 	/*Bug fix-4961408 As seperate cursor csr_pr_ele_ytd has been written this code is no more required*/
939 	/*IF (l_prev_date_earned = csr_rec.date_earned OR l_prev_date_earned = '-999') THEN
940 	    l_tot_ele_ytd := l_tot_ele_ytd + NVL(csr_rec.balance_amount,0);
941 	ELSIF (l_prev_date_earned <> csr_rec.date_earned) THEN
942 	    l_tot_ele_ytd :=NVL(csr_rec.balance_amount,0);
943 	END IF ;
944 	l_prev_date_earned := csr_rec.date_earned;*/
945 	p_xml:=p_xml || '<Costed_code>' || NVL(csr_rec.costed_code,' ') || '</Costed_code>';
946 	p_xml:=p_xml || '<Pay_Value>' || NVL(TRIM(TO_CHAR(ROUND(csr_rec.pay_value,2),'999G999G990D99')),' ')|| '</Pay_Value>';
947 	p_xml:=p_xml || '<Balance_Amount>' || NVL(TRIM(TO_CHAR(ROUND(csr_rec.balance_amount,2),'999G999G990D99')),' ') || '</Balance_Amount>';
948 	p_xml:= p_xml || '</ELEMENT_RECORD_PER_RUN>';
949 
950 l_tot_ele_run := l_tot_ele_run +  NVL(csr_rec.pay_value,0);
951 l_tot_ele_ytd := NVL(csr_rec.balance_amount,0); -- To get the last balance value which will be the total for that element.
952 l_ele_type_id := csr_rec.ele_type_id;
953 l_org_id:=csr_rec.org_id;
954 l_leg_emp_id:=csr_rec.leg_emp_id;
955 l_payroll_id:=csr_rec.payroll_id;
956 l_flag :=1;
957 END LOOP;
958 IF (l_flag = 1) THEN
959     p_xml:=p_xml || '<Tot_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_run,2),'999G999G990D99')),' ') || '</Tot_ele_run>';
960     p_xml:=p_xml || '<Tot_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_ele_ytd,2),'999G999G990D99')),' ') || '</Tot_ele_ytd>';
961     l_tot_org_ele_run := l_tot_org_ele_run + l_tot_ele_run;
962     l_tot_org_ele_ytd := l_tot_org_ele_ytd + l_tot_ele_ytd;
963     l_tot_ele_run := 0;
964     l_tot_ele_ytd := 0;
965 	p_xml:=p_xml || '</ELEMENT_RECORD>';
966 	p_xml:=p_xml || '<Tot_org_ele_run>' || NVL(TRIM(TO_CHAR(ROUND (l_tot_org_ele_run,2),'999G999G990D99')),' ')|| '</Tot_org_ele_run>';
967     p_xml:=p_xml || '<Tot_org_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_org_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_org_ele_ytd>';    l_tot_le_ele_run := l_tot_le_ele_run + l_tot_org_ele_run;
968     l_tot_le_ele_ytd := l_tot_le_ele_ytd + l_tot_org_ele_ytd;
969     l_tot_org_ele_run := 0;
970     l_tot_org_ele_ytd := 0;
971 	p_xml := p_xml ||'</ORGANIZATION_RECORD>';
972 	p_xml:=p_xml || '<Tot_le_ele_run>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_run,2),'999G999G990D99')),' ')|| '</Tot_le_ele_run>';
973         p_xml:=p_xml || '<Tot_le_ele_ytd>' || NVL(TRIM(TO_CHAR(ROUND(l_tot_le_ele_ytd,2),'999G999G990D99')),' ')|| '</Tot_le_ele_ytd>';
974     l_tot_le_ele_run := 0;
975     l_tot_le_ele_ytd := 0;
976 	p_xml:= p_xml || '</LEGAL_EMPLOYER_RECORD>';
977 	p_xml:=p_xml || '</PAYROLL_RECORD>';
978 	p_xml:=p_xml || '</START>';
979 ELSIF (l_flag = 0) THEN
980 p_xml:=p_xml||'<PAYROLL_RECORD><LEGAL_EMPLOYER_RECORD><ORGANIZATION_RECORD><ELEMENT_RECORD><ELEMENT_RECORD_PER_RUN></ELEMENT_RECORD_PER_RUN></ELEMENT_RECORD></ORGANIZATION_RECORD></LEGAL_EMPLOYER_RECORD></PAYROLL_RECORD></START>';
981 END IF;
982 END POPULATE_DETAILS;
983 END PAY_DK_PR_LE;