DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_DK_SICKNESS_DP201

Source


1 PACKAGE BODY PAY_DK_SICKNESS_DP201 AS
2 /* $Header: pydkdp201.pkb 120.9.12000000.2 2007/05/08 07:01:23 saurai noship $ */
3 	g_debug   boolean   :=  hr_utility.debug_enabled;
4 	g_err_num		NUMBER;
5 
6 -------------------------------------------------------------------------------------------------------
7 
8 /*Function to get the defined balance id */
9 FUNCTION GET_DEFINED_BALANCE_ID
10 	(p_balance_name   		IN  VARCHAR2
11 	,p_dbi_suffix     		IN  VARCHAR2
12 	,p_business_group_id		IN NUMBER)
13 	RETURN NUMBER IS
14 
15 l_defined_balance_id 		NUMBER;
16 
17 BEGIN
18 
19 SELECT
20 	pdb.defined_balance_id
21 INTO
22 	l_defined_balance_id
23 FROM
27 WHERE
24 	pay_defined_balances      pdb
25 	,pay_balance_types         pbt
26 	,pay_balance_dimensions    pbd
28 	pbd.database_item_suffix = p_dbi_suffix
29 	AND    (pbd.legislation_code = 'DK' OR pbt.business_group_id = p_business_group_id)
30 	AND    pbt.balance_name = p_balance_name
31 	AND    (pbt.legislation_code = 'DK' OR pbt.business_group_id = p_business_group_id)
32 	AND    pdb.balance_type_id = pbt.balance_type_id
33 	AND    pdb.balance_dimension_id = pbd.balance_dimension_id
34 	AND    (pdb.legislation_code = 'DK' OR pbt.business_group_id = p_business_group_id);
35 
36 l_defined_balance_id := NVL(l_defined_balance_id,0);
37 
38 RETURN l_defined_balance_id ;
39 END GET_DEFINED_BALANCE_ID;
40 ---------------------------------------------------------------------------------------------------
41 
42 /*Procedure which returns the last pay (after pre-Paymnents) of an assignment*/
43 PROCEDURE LAST_PAY
44 	( p_business_group_id IN NUMBER
45 	,p_assignment_id IN NUMBER
46 	,p_effective_date IN DATE
47 	,p_pay OUT NOCOPY VARCHAR2
48 	)
49 		   IS
50 
51 CURSOR csr_asg_act_id IS
52 SELECT
53 *
54 FROM
55 (
56 SELECT
57 	paa1.assignment_action_id
58 FROM
59 	pay_assignment_actions paa1
60 	,pay_payroll_actions ppa1
61 	,pay_assignment_actions paa2
62 	,pay_payroll_actions ppa2
63 	,pay_action_interlocks  pai
64 	,pay_payrolls_f ppf
65 WHERE
66 	paa1.assignment_id = p_assignment_id
67 	AND paa1.action_status = 'C'
68 	AND paa1.payroll_action_id = ppa1.payroll_action_id
69 	AND ppa1.action_type IN ('R','Q')  -- Payroll Run or Quickpay Run
70 	AND ppa1.date_earned <= p_effective_date
71 
72 	--for prepayments
73 	AND    paa2.action_status           = 'C' -- Completed
74 	AND    paa2.assignment_action_id    = pai.locking_action_id
75 	AND    paa2.payroll_action_id       = ppa2.payroll_action_id
76 	AND    ppa2.action_type            IN ('P','U')
77 	AND    ppa2.date_earned <= p_effective_date
78 
79 	AND paa1.ASSIGNMENT_ACTION_ID = pai.locked_action_id
80 
81 	AND ppf.payroll_id = ppa1.payroll_id
82 	ORDER BY ppa1.date_earned desc)
83 WHERE
84 	ROWNUM=1;
85 
86 /*Cursor to fetch the balance values- Sum of balance values belonging to salary reporting category minus
87 Employee AMB Deduction balance value*/
88 
89 CURSOR csr_pay(asg_act_id NUMBER ) IS
90 SELECT
91 	SUM (pay_balance_pkg.get_value(
92 	     get_defined_balance_id(pbt.balance_name,'_ASG_PTD',p_business_group_id)
93 		,asg_act_id)) - pay_balance_pkg.get_value(
94 	     get_defined_balance_id('Employee AMB Deduction','_ASG_PTD',p_business_group_id)
95 		,asg_act_id) pay_value
96 FROM
97 	pay_balance_types pbt
98 	,pay_balance_categories_f pbcf
99 WHERE
100 	pbcf.legislation_code = 'DK'
101 	AND pbcf.category_name = 'Salary Reporting'
102 	AND pbcf.balance_category_id = pbt.balance_category_id;
103 
104 l_asg_act_id number;
105 
106 BEGIN
107 
108 OPEN csr_asg_act_id;
109 FETCH csr_asg_act_id INTO l_asg_act_id;
110 CLOSE csr_asg_act_id;
111 
112 OPEN csr_pay(l_asg_act_id);
113 FETCH csr_pay INTO p_pay;
114 CLOSE csr_pay;
115 
116 END LAST_PAY;
117 -------------------------------------------------------------------------------------------------------------------------
118 /*Function to return the working hours per week of an assignment*/
119 FUNCTION WORKING_HOURS_PER_WEEK
120 		(p_assignment_id IN NUMBER
121 		,p_leg_emp_id IN NUMBER
122 		,p_effective_date IN DATE)
123 		 RETURN NUMBER IS
124 
125 l_hours per_all_assignments_f.normal_hours%TYPE;
126 l_freq per_all_assignments_f.frequency%TYPE;
127 l_default_work_pattern VARCHAR2(30);
128 l_work_days_week NUMBER ;
129 l_value NUMBER ;
130 
131 CURSOR csr_asg_freq_hours IS
132 SELECT
133 	paaf.frequency
134 	,paaf.normal_hours
135 	,hsck.segment10 default_work_pattern
136  FROM
137 	 per_all_assignments_f paaf
138 	,hr_soft_coding_keyflex hsck
139 WHERE
140 	paaf.assignment_id = p_assignment_id
141 	AND paaf.assignment_status_type_id = 1
142 	AND p_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
143 	AND hsck.soft_coding_keyflex_id = paaf.soft_coding_keyflex_id;
144 
145 
146 CURSOR csr_le_freq_hours IS
147 SELECT
148 	hoi1.org_information4
149 	,hoi1.org_information3
150 	,hoi2.org_information1
151 FROM
152 	hr_organization_information hoi1
153 	,hr_organization_information hoi2
154 WHERE
155 	hoi1.organization_id = p_leg_emp_id
156 	AND hoi2.organization_id = hoi1.organization_id
157 	AND hoi1.org_information_context =  'DK_EMPLOYMENT_DEFAULTS'
158 	AND hoi2.org_information_context(+) =  'DK_HOLIDAY_ENTITLEMENT_INFO';
159 
160 BEGIN
161 l_work_days_week := 5; -- By default the work pattern will be 5 days
162 
163 /*To fetch the assignment hours*/
164 OPEN csr_asg_freq_hours;
165 FETCH csr_asg_freq_hours INTO l_freq,l_hours,l_default_work_pattern;
166 CLOSE csr_asg_freq_hours;
167 
168 /* If assignment hours not present then to take the hours from the legal employer EIT 'Work hours'*/
169 IF l_hours IS NULL THEN
170 open csr_le_freq_hours;
171 FETCH csr_le_freq_hours INTO l_freq,l_hours,l_default_work_pattern;
172 CLOSE csr_le_freq_hours;
173 END IF ;
174 
175 IF (l_default_work_pattern = '5DAY') THEN
176 l_work_days_week := 5;
177 ELSIF  (l_default_work_pattern = '6DAY') THEN
178 l_work_days_week := 6;
179 END IF ;
180 
181 IF (l_freq = 'D') THEN
182 l_value := ROUND (l_hours * l_work_days_week,2);
183 ELSIF (l_freq = 'W') THEN
184 l_value := l_hours;
185 ELSIF (l_freq = 'M') THEN
186 l_value := ROUND (l_hours * (l_work_days_week/22),2);
187 ELSIF (l_freq = 'Y') THEN
188 l_value := ROUND (l_hours * (l_work_days_week/260),2);
189 END IF;
190 
191 RETURN l_value;
192 
193 END WORKING_HOURS_PER_WEEK;
194 
195 
196 ----------------------------------------------------------------------------------
197 /*Procudure to get the sick leave details for reporting*/
198 /*Bug 5059274 fix- Added p_start_date and p_end_Date parameters*/
199 PROCEDURE POPULATE_DETAILS
200 	(p_template_name in VARCHAR2
201 	,p_assignment_id NUMBER DEFAULT NULL
202 	,p_person_id NUMBER
203 	,p_start_date IN VARCHAR2
204 	,p_end_date IN VARCHAR2
205 	,p_le_phone_number IN VARCHAR2
206 	,p_le_email_addr IN varchar2
207 	,p_business_group_id NUMBER
208 	, p_xml out nocopy clob) IS
209 
210 /*Parameters to store the start and end dates, in order to provide date validation the parameters
211   are accepeted as varchar2 and converted into date type*/
212 l_start_date DATE;
213 l_end_date DATE;
214 
215 --Cursor to fetch employee details
216 CURSOR csr_emp(p_effective_date DATE) IS
217 SELECT
218 /*	papf.first_name first_name
219 	,papf.middle_names middle_name
220 	,papf.last_name last_name*/
221 	/*Bug 5049222 fix- Employee name formatting*/
222 	--SUBSTR (papf.first_name,1,40)||NVL2(papf.middle_names,','||SUBSTR(papf.middle_names,1,40),NULL)||','||SUBSTR(papf.last_name,1,40) ename
223 	/*Reopened Bug 5049222 fix*/
224      SUBSTR (papf.last_name,1,40)||', '||SUBSTR(papf.first_name,1,40)||NVL2(papf.middle_names,' '||SUBSTR(papf.middle_names,1,40),NULL) ename
225 	,papf.national_identifier national_identifier
226 	,papf.start_date person_start_date
227 	,pa.address_line1 address_line1
228 	,pa.address_line2 address_line2
229 	,pa.postal_code postal_code
230 FROM
231 	per_all_people_f papf
232 	,per_addresses   pa
233 WHERE
234 	papf.person_id = p_person_id
235 	AND p_effective_date between papf.effective_start_date and papf.effective_end_date
236 	AND papf.current_employee_flag = 'Y'
237 	AND pa.person_id(+) = papf.person_id
238 	AND pa.primary_flag(+) = 'Y'
239 	AND p_effective_date BETWEEN pa.date_from(+) AND nvl(pa.date_to(+),TO_DATE('31/12/4712','DD/MM/YYYY'));
240 
241 /*Bug fix- 5059274 cursor to get the assignment details based on p_start_date and p_end_date*/
242 CURSOR csr_asg IS
243 SELECT
244 	paaf.person_id person_id
245 	,paaf.assignment_id asg_id
246 	,paaf.assignment_number asg_num
247 	,pj.name job_title
248 	,MIN(paaf.effective_start_date) asg_start_date
249 	,MAX(paaf.effective_end_date) asg_end_date
250 	,peef.effective_start_date absence_start_date
251 	,peef.effective_end_date absence_end_date
252 	,peevf.screen_entry_value absence_reason
253 	,paaf.payroll_id payroll_id
254 	,ppf.period_type period_type
255 FROM
256 	per_all_assignments_f  paaf
257 	,pay_element_entries_f peef
258 	,pay_element_types_f petf
259 	,per_jobs pj
260 	,pay_element_entry_values_f peevf
261 	,pay_input_values_f pivf
262 	,pay_payrolls_f ppf
263 WHERE
264     paaf.person_id = p_person_id
265 	AND paaf.assignment_id = NVL(p_assignment_id,paaf.assignment_id)
266 	AND paaf.assignment_status_type_id = 1
267 	AND petf.element_name LIKE 'Absent Sick' -- To check for the Sickness element
268 	AND petf.legislation_code ='DK'
269     AND peef.element_type_id = petf.element_type_id
270     AND peef.assignment_id = paaf.assignment_id
271 
272     AND peef.effective_start_date BETWEEN l_start_date and l_end_date
273 
274 	AND pivf.element_type_id = peef.element_type_id
275 	AND pivf.NAME = 'Absent Reason'
276 	AND peevf.element_entry_id= peef.element_entry_id
277 	AND peevf.input_value_id = pivf.input_value_id
278 	AND pj.job_id(+) = paaf.job_id
279 	AND ppf.payroll_id(+) = paaf.payroll_id
280 	GROUP BY paaf.person_id
281 	,paaf.assignment_id
282 	,paaf.assignment_number
283 	,pj.name
284 	,peef.effective_start_date
285 	,peef.effective_end_date
286 	,peevf.screen_entry_value
287 	,paaf.payroll_id
288     ,ppf.period_type;
289 
290 /*Cursor to pick up the legal employer details*/
291 CURSOR csr_le(p_le_id NUMBER) IS
292 SELECT
293 --	haou.organization_id le_id
294 	 SUBSTR(haou.NAME,1,30) le_name
295 	,substr(hl.address_line_1,1,30) le_address1
296 	,decode(hl.postal_code,NULL,' ',','||substr(hl.postal_code,1,5)) le_postalcode
297 	,substr(p_le_phone_number,1,30) le_phone
298 	,substr(p_le_email_addr,1,30) le_email
299 FROM
300 --	per_all_assignments_f paaf
301 --	,hr_soft_coding_keyflex hsck
302 	hr_all_organization_units haou
303 	,hr_locations hl
304 WHERE
305 --	paaf.assignment_id = p_assignment_id
306 --	AND l_run_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
307 --	AND paaf.assignment_status_type_id = 1
308 --	AND hsck.soft_coding_keyflex_id = paaf.soft_coding_keyflex_id
309 	haou.organization_id = p_le_id
310 	AND hl.location_id(+) = haou.location_id;
311 
312 /*Bug 5049222 fix- Cursor to get the cvr number*/
313 CURSOR csr_le_cvr(p_le_id NUMBER) IS
314 SELECT
315 hoi.org_information1 le_cvr_num
316 FROM
317 hr_organization_information hoi
318 WHERE
319 hoi.organization_id = p_le_id
320 AND hoi.org_information_context = 'DK_LEGAL_ENTITY_DETAILS';
321 
322 /*Bug fix- 5059274 cursor to get the payroll period start date in which the
323 absence start date falls*/
324 CURSOR csr_payroll_start_date(p_payroll_id NUMBER,p_absence_start_date DATE)
325 IS
326 SELECT
327     ptp.start_date
328 FROM
329     per_time_periods ptp
330 WHERE
331     ptp.payroll_id = p_payroll_id
332     AND p_absence_start_date BETWEEN ptp.start_date AND ptp.end_Date;
333 
334 /*Bug fix- 5059274 cursor to get the soft coded details based on the payroll period start date*/
335 CURSOR csr_soft_coded_details(p_assignment_id IN NUMBER,p_effective_date DATE) IS
336 SELECT
337     NVL(hsck.segment18,'N') section28
338    	,hsck.segment4 employee_group
339 	,hsck.segment1 le_id
340 	,hsck.segment10 asg_work_pattern
341 FROM
342 	per_all_assignments_f paaf
343 	,hr_soft_coding_keyflex hsck
344 WHERE
345 	paaf.assignment_id = p_assignment_id
346 	AND p_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
347 	AND hsck.soft_coding_keyflex_id = paaf.soft_coding_keyflex_id;
348 
349 /*Bug fix- 5059274 cursor to get the section 27 details based on the payroll period start date*/
350 CURSOR csr_section27(p_effective_date DATE, p_le_id NUMBER) IS
351 SELECT
352     hoi.org_information1
353 FROM
354     hr_organization_information hoi
355 WHERE
356     hoi.organization_id = p_le_id
357     AND hoi.org_information_context = 'DK_SICKPAY_DEFAULTS'
358     AND p_effective_date BETWEEN fnd_date.canonical_to_date(hoi.org_information2) and fnd_date.canonical_to_date(hoi.org_information3)
359 ORDER  BY hoi.org_information2;
360 
361 CURSOR csr_le_work_pattern(p_org_id NUMBER) is
362 SELECT
363     org_information1 le_work_pattern
364 FROM
365     hr_organization_information
366 WHERE
367     organization_id = p_org_id
368     AND org_information_context = 'DK_HOLIDAY_ENTITLEMENT_INFO';
369 
370   /* Bug 5045710 fix- cursor to get the global values*/
371 CURSOR csr_get_global_values(p_global_name VARCHAR2,p_effective_date DATE ) IS
372  SELECT
373        fgf.global_value
374  FROM
375        ff_globals_f fgf
376  WHERE
377  fgf.legislation_code = 'DK'
378  AND fgf.GLOBAL_NAME = p_global_name
379  AND p_effective_date BETWEEN fgf.effective_start_date AND fgf.effective_end_date;
380 
381 -- Variable declaration
382 l_var_work_hrs NUMBER ;
383 l_8weeks_work_hrs NUMBER ;
384 emp_rec csr_emp%ROWTYPE ;
385 asg_rec csr_asg%ROWTYPE ;
386 le_rec csr_le%ROWTYPE ;
387 xml_ctr  number;
388 l_pay VARCHAR2(150);
389 --l_period_type pay_payrolls_f.period_type%TYPE;
390 l_check VARCHAR2(1);
391 le_cvr_rec csr_le_cvr%ROWTYPE; --Bug 5049222 fix
392 l_absence_days NUMBER ;
393 l_section27 hr_organization_information.org_information1%TYPE;
394 --l_section28 VARCHAR2(10) ;
395 soft_coded_rec csr_soft_coded_details%ROWTYPE;
396 l_payroll_proc_start_date DATE ;
397 l_74hrs VARCHAR2(150);
398 l_worked_hours NUMBER ;
399 l_worked_days NUMBER ;
400 
401 
402 l_dk_max_sick_days_allowed NUMBER ;
403 l_dk_5day_pattern_min_days NUMBER ;
404 l_dk_6day_pattern_min_days NUMBER ;
405 l_dk_sickpay_min_work_hours NUMBER ;
406 le_work_pattern_rec csr_le_work_pattern%ROWTYPE ;
407 l_work_pattern VARCHAR2(150);
408 
409 
410 BEGIN
411 l_check := 'X';
412 xml_ctr := 0;
413 l_work_pattern := '5DAY'; -- By default work pattern is 5 days
414 l_start_date :=FND_DATE.CANONICAL_TO_DATE(p_start_date);
415 l_end_date   :=FND_DATE.CANONICAL_TO_DATE(p_end_date);
416 
417 
418 FOR asg_rec IN csr_asg LOOP
419 l_absence_days := NVL(asg_rec.absence_end_date,l_end_date) - asg_rec.absence_start_date+1;
420 
421 OPEN csr_payroll_start_date(asg_rec.payroll_id,asg_rec.absence_start_date);
422 FETCH csr_payroll_start_date INTO l_payroll_proc_start_date;
423 CLOSE csr_payroll_start_date;
424 
425 IF csr_asg%ROWCOUNT = 1 THEN
426 OPEN csr_emp(l_payroll_proc_start_date);
427 FETCH csr_emp INTO emp_rec;
428 CLOSE csr_emp;
429 END IF ;
430 
431 OPEN csr_soft_coded_details(asg_rec.asg_id,l_payroll_proc_start_date);
432 FETCH csr_soft_coded_details INTO soft_coded_rec;
433 CLOSE csr_soft_coded_details;
434 
435 OPEN csr_section27(l_payroll_proc_start_date,soft_coded_rec.le_id);
436 FETCH csr_section27 INTO l_section27;
437 CLOSE csr_section27;
438 
439 /* Bug 5045710 fix- Getting the global values*/
440 OPEN csr_get_global_values('DK_MAX_SICK_DAYS_ALLOWED',l_payroll_proc_start_date);
441 FETCH csr_get_global_values INTO l_dk_max_sick_days_allowed;
442 CLOSE csr_get_global_values;
443 
444 OPEN csr_get_global_values('DK_5DAY_PATTERN_MIN_DAYS',l_payroll_proc_start_date);
445 FETCH csr_get_global_values INTO l_dk_5day_pattern_min_days;
446 CLOSE csr_get_global_values;
447 
448 OPEN csr_get_global_values('DK_6DAY_PATTERN_MIN_DAYS',l_payroll_proc_start_date);
449 FETCH csr_get_global_values INTO l_dk_6day_pattern_min_days;
450 CLOSE csr_get_global_values;
451 
452 OPEN csr_get_global_values('DK_SICKPAY_MIN_WORK_HOURS',l_payroll_proc_start_date);
453 FETCH csr_get_global_values INTO l_dk_sickpay_min_work_hours;
454 CLOSE csr_get_global_values;
455 
456 --IF asg_rec.person_id <> l_person_id THEN
457 IF l_absence_days >=l_dk_max_sick_days_allowed OR soft_coded_rec.section28 ='Y' OR l_section27 = 'Y' OR asg_rec.absence_reason ='ABS_WA' THEN
458 --END IF;
459 
460 OPEN csr_le(soft_coded_rec.le_id);
461 FETCH csr_le INTO le_rec;
462 close csr_le;
463 
464 OPEN csr_le_cvr(soft_coded_rec.le_id);
465 FETCH csr_le_cvr INTO le_cvr_rec;
466 CLOSE csr_le_cvr;
467        /*Bug 5049222 fix*/
468 	xml_tab(xml_ctr).tagname  := 'emp_name';
469 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(emp_rec.ename);
470 	xml_ctr := xml_ctr +1;
471 
472 	xml_tab(xml_ctr).tagname  := 'address_line1';
473 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(substr(emp_rec.address_line1,1,40));
474 	xml_ctr := xml_ctr +1;
475 
476 	xml_tab(xml_ctr).tagname  := 'address_line2';
477 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(substr(emp_rec.address_line2,1,40));
478 	xml_ctr := xml_ctr +1;
479 
480 	xml_tab(xml_ctr).tagname  := 'postal_code';
481 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(substr(emp_rec.postal_code,1,40));
482 	xml_ctr := xml_ctr +1;
483 
484 	xml_tab(xml_ctr).tagname  := 'asg_num';
485 	xml_tab(xml_ctr).tagvalue := asg_rec.asg_num;
486 	xml_ctr := xml_ctr +1;
487 
488        /*Bug 5049222 fix*/
489 	xml_tab(xml_ctr).tagname  := 'le_cvr_number';
490 	xml_tab(xml_ctr).tagvalue := le_cvr_rec.le_cvr_num;
491 	xml_ctr := xml_ctr +1;
492 
493 	xml_tab(xml_ctr).tagname  := 'national_identifier';
494 	xml_tab(xml_ctr).tagvalue := emp_rec.national_identifier;
495 	xml_ctr := xml_ctr +1;
496 
497 	xml_tab(xml_ctr).tagname  := 'job_title';
498 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(asg_rec.job_title);
499 	xml_ctr := xml_ctr +1;
500 
501 	IF ((asg_rec.absence_start_date - asg_rec.asg_start_date) >= 90) THEN
502 	xml_tab(xml_ctr).tagname  := '13_weeks_yes';
503 	xml_tab(xml_ctr).tagvalue := l_check;
504 	xml_ctr := xml_ctr +1;
505 	ELSE
506 	xml_tab(xml_ctr).tagname  := '13_weeks_no';
507 	xml_tab(xml_ctr).tagvalue := l_check;
508 	xml_ctr := xml_ctr +1;
509 	xml_tab(xml_ctr).tagname  := 'asg_start_date';
510 	xml_tab(xml_ctr).tagvalue := asg_rec.asg_start_date;
511 	xml_ctr := xml_ctr +1;
512 	END IF ;
513 
514 	xml_tab(xml_ctr).tagname  := 'last_day_at_work';
515 	xml_tab(xml_ctr).tagvalue := asg_rec.absence_start_date - 1;
516 	xml_ctr := xml_ctr +1;
517 
518 	/*Has the employee resume work*/
519 	IF (asg_rec.absence_end_date <= l_end_date) THEN
520 	xml_tab(xml_ctr).tagname := 'absence_end_yes';
521 	xml_tab(xml_ctr).tagvalue := l_check;
522 	xml_ctr := xml_ctr +1;
523 
524 	xml_tab(xml_ctr).tagname := 'absence_end_date';
525 	/*asg_rec.absence_end_date + 1 to get the date on which the employee resumed work*/
526 	xml_tab(xml_ctr).tagvalue := asg_rec.absence_end_date + 1;
527 	xml_ctr := xml_ctr +1;
528 	ELSE
529 	xml_tab(xml_ctr).tagname := 'absence_end_no';
530 	xml_tab(xml_ctr).tagvalue := l_check;
531 	xml_ctr := xml_ctr +1;
532 	END IF;
533 
534 	/*check whether the absence reason is work accident*/
535 	IF (asg_rec.absence_reason = 'ABS_WA') THEN
536 	xml_tab(xml_ctr).tagname := 'work_accident_yes';
537 	xml_tab(xml_ctr).tagvalue := l_check;
538 	xml_ctr := xml_ctr +1;
539 	ELSE
540 	xml_tab(xml_ctr).tagname := 'work_accident_no';
541 	xml_tab(xml_ctr).tagvalue := l_check;
542 	xml_ctr := xml_ctr +1;
543 	END IF;
544 
545 IF ((asg_rec.absence_start_date - asg_rec.asg_start_date)>=29 ) THEN
546 /*call to get the varying working hours for the last four weeks*/
547 l_var_work_hrs := pay_dk_sickpay_pkg.get_worked_hours(
548 					   asg_rec.asg_id
549 					  ,asg_rec.absence_start_date - 29
550 					  ,asg_rec.absence_start_date - 1) / 4;
551 
552 /*If work schedule is not present then call working_hours_per_week which returns the working_hours
553 based on the details present at the assignment level if not at the LE level*/
554 IF( l_var_work_hrs = -1) THEN
555 l_var_work_hrs:= working_hours_per_week(asg_rec.asg_id,soft_coded_rec.le_id,l_payroll_proc_start_date);
556 END IF ;
557 END IF ;
558 	xml_tab(xml_ctr).tagname := 'var_work_hrs';
559 	xml_tab(xml_ctr).tagvalue := l_var_work_hrs;
560 	xml_ctr := xml_ctr +1;
561 
562 
563 /*Special Employment Arrangement*/
564 
565 IF (soft_coded_rec.employee_group = 7) THEN
566 	xml_tab(xml_ctr).tagname := 'special_job';
567 	xml_tab(xml_ctr).tagvalue := l_check;
568 	xml_ctr := xml_ctr +1;
569 ELSIF (soft_coded_rec.employee_group = 8) THEN
570  	xml_tab(xml_ctr).tagname := 'job_training';
571 	xml_tab(xml_ctr).tagvalue := l_check;
572 	xml_ctr := xml_ctr +1;
573 ELSIF (soft_coded_rec.employee_group = 6) THEN
574 	xml_tab(xml_ctr).tagname := 'flexible_job_sec1';
575 	xml_tab(xml_ctr).tagvalue := l_check;
576     xml_ctr := xml_ctr +1;
577 	xml_tab(xml_ctr).tagname := 'flexible_job_sec3'; --Bug 5049222 fix
578 	xml_tab(xml_ctr).tagvalue := l_check;
579 	xml_ctr := xml_ctr +1;
580 END IF ;
581 
582 
583 
584 /* call to get the last pay for the assignment*/
585 IF asg_rec.absence_end_date IS  NOT  NULL  AND asg_rec.absence_end_date <= l_end_date THEN
586     last_pay(p_business_group_id,asg_rec.asg_id,asg_rec.absence_end_date,l_pay);
587 ELSE
588     last_pay(p_business_group_id,asg_rec.asg_id,l_end_date,l_pay);
589 END IF ;
590 --l_pay := TRIM(TO_CHAR(ROUND(l_pay,2),'99g99g99g990d99','NLS_NUMERIC_CHARACTERS = '',.'''));
591 --l_pay := TRIM(TO_CHAR(ROUND(NVL(FND_NUMBER.canonical_to_number(l_pay),0),2),'999G999G990D99'));
592 l_pay := TRIM(TO_CHAR(ROUND(FND_NUMBER.canonical_to_number(l_pay),2),'999G999G990D99'));
593 	/*The employee's pay condition*/
594 	/* Changes for Lunar Payroll*/
595 	IF (asg_rec.period_type in ('Calendar Month','Lunar Month')) THEN
596 	xml_tab(xml_ctr).tagname := 'sal_per_month';
597 	xml_tab(xml_ctr).tagvalue := l_pay;
598 	xml_ctr := xml_ctr +1;
599 	xml_tab(xml_ctr).tagname := 'monthly_payroll';
600 	xml_tab(xml_ctr).tagvalue := l_check;
601 	xml_ctr := xml_ctr +1;
602 
603 	ELSIF(asg_rec.period_type = 'Bi-Week') THEN
604 	xml_tab(xml_ctr).tagname := 'sal_per_bi_week';
605 	xml_tab(xml_ctr).tagvalue := l_pay;
606 	xml_ctr := xml_ctr +1;
607 	xml_tab(xml_ctr).tagname := 'bi_weekly_payroll';
608 	xml_tab(xml_ctr).tagvalue := l_check;
609 	xml_ctr := xml_ctr +1;
610 
611 	ELSIF(asg_rec.period_type = 'Week') THEN
612 	xml_tab(xml_ctr).tagname := 'sal_per_week';
613 	xml_tab(xml_ctr).tagvalue := l_pay;
614 	xml_ctr := xml_ctr +1;
615 	xml_tab(xml_ctr).tagname := 'weekly_payroll';
616 	xml_tab(xml_ctr).tagvalue := l_check;
617 	xml_ctr := xml_ctr +1;
618 	END IF;
619 
620 	xml_tab(xml_ctr).tagname := 'last_salary';
621 	xml_tab(xml_ctr).tagvalue := l_pay;
622 	xml_ctr := xml_ctr +1;
623 /*Bug 5059274 fix- Continuos payment details not displayed*/
624 /*	IF (asg_rec.asg_end_date <> TO_DATE('31/12/4712','DD/MM/YYYY')) THEN
625 	xml_tab(xml_ctr).tagname := 'cont_payment_no';
626 	xml_tab(xml_ctr).tagvalue := l_check;
627 	xml_ctr := xml_ctr +1;
628 	xml_tab(xml_ctr).tagname := 'asg_end_date';
629 	xml_tab(xml_ctr).tagvalue := asg_rec.asg_end_date;
630 	xml_ctr := xml_ctr +1;
631 
632 	ELSIF  (asg_rec.asg_end_date = TO_DATE('31/12/4712','DD/MM/YYYY')) THEN
633 	xml_tab(xml_ctr).tagname := 'cont_payment_yes';
634 	xml_tab(xml_ctr).tagvalue := l_check;
635 	xml_ctr := xml_ctr +1;
636 	END IF;*/
637 	xml_tab(xml_ctr).tagname := 'abs_start_date';
638 	xml_tab(xml_ctr).tagvalue := asg_rec.absence_start_date;
639 	xml_ctr := xml_ctr +1;
640 
641         /*Bug 5040140 fix- if the end date is null then absence end date field in the report
642 	   should be blank*/
643 	xml_tab(xml_ctr).tagname := 'abs_end_date';
644 	IF asg_rec.absence_end_date = TO_DATE('31/12/4712','DD/MM/YYYY') THEN
645 	xml_tab(xml_ctr).tagvalue := NULL ;
646 	ELSE
647 	xml_tab(xml_ctr).tagvalue := asg_rec.absence_end_date;
648 	END IF ;
649 	xml_ctr := xml_ctr +1;
650 
651 	/*xml_tab(xml_ctr).tagname := 'abs_end_date';
652 	xml_tab(xml_ctr).tagvalue := asg_rec.absence_end_date;
653 	xml_ctr := xml_ctr +1;*/
654 
655 	xml_tab(xml_ctr).tagname := 'le_name';
656 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(le_rec.le_name);
657 	xml_ctr := xml_ctr +1;
658 
659 	xml_tab(xml_ctr).tagname := 'le_address_pcode';
660 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(le_rec.le_address1)||hr_dk_utility.REPLACE_SPECIAL_CHARS(le_rec.le_postalcode);
661 	xml_ctr := xml_ctr +1;
662 
663 	xml_tab(xml_ctr).tagname := 'le_phone';
664 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(le_rec.le_phone);
665 	xml_ctr := xml_ctr +1;
666 
667 	xml_tab(xml_ctr).tagname := 'le_email';
668 	xml_tab(xml_ctr).tagvalue := hr_dk_utility.REPLACE_SPECIAL_CHARS(le_rec.le_email);
669 	xml_ctr := xml_ctr +1;
670 
671 /*Before 8 weeks*/
672 /*IF  ((asg_rec.absence_start_date - asg_rec.asg_start_date) < 57) THEN
673 IF  ((asg_rec.absence_start_date - emp_rec.person_start_date ) <57) THEN
674 	xml_tab(xml_ctr).tagname := 'before_8_weeks';
675 	xml_tab(xml_ctr).tagvalue := l_check;
676 	xml_ctr := xml_ctr +1;
677 END IF ;
678 END IF ;*/
679 
680 /*call to get the  working hours for the last eight weeks*/
681 /*l_8weeks_work_hrs := pay_dk_sickpay_pkg.get_worked_hours(
682 					   asg_rec.asg_id
683 					  ,asg_rec.absence_start_date - 57
684 					  ,asg_rec.absence_start_date - 1) ;
685 
686 
687 IF( l_8weeks_work_hrs = -1) THEN
688 l_8weeks_work_hrs:= working_hours_per_week(asg_rec.asg_id,soft_coded_rec.le_id,l_payroll_proc_start_date) * 8;
689 END IF ;*/
690 
691 /*Bug 5045710 fix*/
692 
693 IF (soft_coded_rec.asg_work_pattern IS NULL) THEN
694 /*if work pattern not defined at the assignment level, get from the legal employer level*/
695     OPEN csr_le_work_pattern(soft_coded_rec.le_id);
696     FETCH csr_le_work_pattern INTO le_work_pattern_rec;
697     l_work_pattern := le_work_pattern_rec.le_work_pattern;
698     CLOSE csr_le_work_pattern;
699 ELSE
700     l_work_pattern := soft_coded_rec.asg_work_pattern;
701 END IF;
702 
703 /*Call to get the worked days*/
704 l_worked_days := pay_dk_sickpay_pkg.get_worked_days
705 			(asg_rec.asg_id
706 			,asg_rec.asg_start_date
707 			,asg_rec.absence_start_date-1);
708 
709 IF (l_work_pattern = '6DAY') THEN
710 /* Reopened bug 5045710 fix- checking the flag if the worked days is less than 48 days*/
711     IF l_worked_days < l_dk_6day_pattern_min_days THEN -- check if the worked days < 48 days
712 	xml_tab(xml_ctr).tagname := 'before_8_weeks';
713 	xml_tab(xml_ctr).tagvalue := l_check;
714 	xml_ctr := xml_ctr +1;
715     ELSE
716 	l_worked_days:= l_dk_6day_pattern_min_days;
717     END IF ;
718 ELSE
719     /*By default work pattern will be 5 days*/
720     /* Reopened bug 5045710 fix- checking the flag if the worked days is less than 40 days*/
721     IF l_worked_days < l_dk_5day_pattern_min_days THEN -- check if the worked days < 40 days
722 	xml_tab(xml_ctr).tagname := 'before_8_weeks';
723 	xml_tab(xml_ctr).tagvalue := l_check;
724 	xml_ctr := xml_ctr +1;
725     ELSE
726        l_worked_days:= l_dk_5day_pattern_min_days;
727     END IF ;
728 END IF ;
729 
730 l_74hrs := pay_dk_sickpay_pkg.get_worked_hours_flag
731                     (asg_rec.asg_id
732                      ,l_worked_days
733                      ,l_dk_sickpay_min_work_hours
734                      ,asg_rec.absence_start_date-1);
735 
736 --IF l_8weeks_work_hrs < 74 THEN
737 
738 IF l_74hrs = 'N' THEN
739 	xml_tab(xml_ctr).tagname := '8weeks_work_hrs';
740 	xml_tab(xml_ctr).tagvalue := l_check;
741 	xml_ctr := xml_ctr +1;
742 
743 END IF ;
744 
745 IF (l_section27 = 'Y') THEN
746 	xml_tab(xml_ctr).tagname := 'section27';
747 	xml_tab(xml_ctr).tagvalue := l_check;
748 	xml_ctr := xml_ctr +1;
749 END IF;
750 
751 IF (soft_coded_rec.section28 = 'Y') THEN
752 	xml_tab(xml_ctr).tagname := 'section28';
753 	xml_tab(xml_ctr).tagvalue := l_check;
754 	xml_ctr := xml_ctr +1;
755 END IF;
756 
757 	xml_tab(xml_ctr).tagname := 'se_nr';
758 	xml_tab(xml_ctr).tagvalue := '   ';
759 	xml_ctr := xml_ctr +1;
760 END IF ;
761 --l_person_id := asg_rec.person_id;
762 END LOOP ;
763 
764 write_to_clob(p_xml);
765 
766 EXCEPTION WHEN OTHERS THEN
767 NULL ;
768 END POPULATE_DETAILS;
769 
770 ------------------------------------------------------------------------------------------------------------
771 
772 procedure WRITE_TO_CLOB (p_xml out nocopy clob) is
773 l_xfdf_string clob;
774 l_str1 varchar2(240);
775 l_str2 varchar2(240);
776 l_str3 varchar2(240);
777 l_str4 varchar2(240);
778 l_str5 varchar2(240);
779 l_IANA_charset VARCHAR2 (50);
780 
781 BEGIN
782 
783 l_str1 := '<field name="';
784 l_str2 := '">';
785 l_str3 := '<value>';
786 l_str4 := '</value></field>';
787 l_str5 := '</xfdf>';
791 dbms_lob.createtemporary(p_xml,false,dbms_lob.call);
788 l_IANA_charset :=PAY_DK_GENERAL.get_IANA_charset ;
789 
790 
792 
793 /*Setting the Character Set Dynamically*/
794 --p_xml := '<?xml version = "1.0" encoding = "UTF-8"?>';
795 p_xml := '<?xml version = "1.0" encoding = "'||l_IANA_charset||'"?>';
796 p_xml := p_xml || '<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">';
797 dbms_lob.open(p_xml,dbms_lob.lob_readwrite);
798 if xml_tab.count > 0 then
799  for xml_ctr in xml_tab.first .. xml_tab.last LOOP
800  dbms_lob.writeappend( p_xml, length(l_str1),l_str1 );
801  dbms_lob.writeappend( p_xml, length(xml_tab(xml_ctr).tagname), xml_tab(xml_ctr).tagname);
802  dbms_lob.writeappend( p_xml, length(l_str2),l_str2 );
803  dbms_lob.writeappend( p_xml, length(l_str3),l_str3 );
804  dbms_lob.writeappend( p_xml, length(nvl(xml_tab(xml_ctr).tagvalue,' ')),nvl(xml_tab(xml_ctr).tagvalue,' '));
805  dbms_lob.writeappend( p_xml, length(l_str4),l_str4 );
806  end loop;
807 end if;
808 dbms_lob.writeappend( p_xml, length(l_str5),l_str5 );
809 --dbms_lob.createtemporary(p_xml,true);
810 --clob_to_blob(l_xfdf_string,p_xml);
811 exception
812 when others then
813 hr_utility.trace('sqleerm ' || sqlerrm);
814 hr_utility.raise_error;
815 end write_to_clob;
816 -------------------------------------------------------------------------------------------------------------------------
817  END PAY_DK_SICKNESS_DP201;