DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_SE_ABSENCE

Source


1 PACKAGE BODY PAY_SE_ABSENCE AS
2 /* $Header: pysesick.pkb 120.5 2007/08/20 15:18:16 rravi noship $ */
3 FUNCTION GET_HOURLY_RATE(
4    p_assignment_id               IN         NUMBER
5   ,p_effective_date              IN         DATE
6   ,p_abs_start_date              IN         DATE
7   ,p_abs_end_date                IN         DATE
8   ,p_Monthly_Pay                 IN         NUMBER
9   ,p_hourly_rate_option1	 OUT	    NOCOPY VARCHAR
10   ,p_hourly_rate_option2	 OUT	    NOCOPY VARCHAR
11   ,p_hourly_rate_option3	 OUT	    NOCOPY VARCHAR
12   ,p_hourly_rate_option4	 OUT	    NOCOPY VARCHAR
13   ,p_hourly_rate_option5	 OUT	    NOCOPY VARCHAR
14   ,p_hourly_rate_option6	 OUT	    NOCOPY VARCHAR
15   ,p_hourly_rate_option7	 OUT	    NOCOPY VARCHAR
16   ,p_hourly_rate_option8	 OUT	    NOCOPY VARCHAR
17   ,p_hourly_rate_option9	 OUT	    NOCOPY VARCHAR
18   ,p_hourly_rate_option10	 OUT	    NOCOPY VARCHAR
19   ,p_hourly_rate		 OUT        NOCOPY NUMBER
20   ,p_normal_hours		 OUT        NOCOPY NUMBER
21   ,p_working_perc		 OUT        NOCOPY NUMBER
22   ,p_salary_rate_option1	 OUT	    NOCOPY VARCHAR
23   ,p_salary_rate_option2	 OUT	    NOCOPY VARCHAR
24   ,p_salary_rate_option3	 OUT	    NOCOPY VARCHAR
25   ,p_salary_rate_option4	 OUT	    NOCOPY VARCHAR
26   ,p_salary_rate_option5	 OUT	    NOCOPY VARCHAR
27   ,p_salary_rate_option6	 OUT	    NOCOPY VARCHAR
28   ,p_salary_rate_option7	 OUT	    NOCOPY VARCHAR
29   ,p_salary_rate_option8	 OUT	    NOCOPY VARCHAR
30   ,p_salary_rate_option9	 OUT	    NOCOPY VARCHAR
31   ,p_salary_rate_option10	 OUT	    NOCOPY VARCHAR
32   ,p_salary_rate		 OUT	    NOCOPY NUMBER
33   ,p_hour_sal			 OUT        NOCOPY VARCHAR
34   )
35   RETURN NUMBER IS
36 
37 l_le_hourly_rate varchar2(20);
38  l_pe_hourly_rate varchar2(20);
39  l_ab_hourly_rate varchar2(20);
40  l_gen_hourly_rate varchar2(20);
41  l_le_salary_rate varchar2(20);
42  l_pe_salary_rate varchar2(20);
43  l_ab_salary_rate varchar2(20);
44  l_gen_salary_rate varchar2(20);
45  l_person_id NUMBER;
46  l_working_percentage NUMBER;
47  l_abs_attendance_id NUMBER;
48  l_business_group_id NUMBER;
49  l_normal_hours NUMBER;
50  l_frequency CHAR(1);
51  l_hour_sal CHAR(1);
52  l_employee_category CHAR(2);
53   --To Fetch the hourly rate from EIT for Legal Employer
54 CURSOR csr_Legal_Employer_Hourly_Rate IS
55 SELECT	hoi4.ORG_INFORMATION1
56 
57                FROM	HR_ORGANIZATION_UNITS o1
58                     ,HR_ORGANIZATION_INFORMATION hoi1
59                     ,HR_ORGANIZATION_INFORMATION hoi2
60                     ,HR_ORGANIZATION_INFORMATION hoi3
61                     ,HR_ORGANIZATION_INFORMATION hoi4
62                     ,( SELECT TRIM(SCL.SEGMENT2) AS ORG_ID
63                          FROM PER_ALL_ASSIGNMENTS_F ASG
64                               ,HR_SOFT_CODING_KEYFLEX SCL
65                         WHERE ASG.ASSIGNMENT_ID = p_assignment_id
66                           AND ASG.SOFT_CODING_KEYFLEX_ID = SCL.SOFT_CODING_KEYFLEX_ID
67                           AND p_effective_date BETWEEN ASG.EFFECTIVE_START_DATE AND ASG.EFFECTIVE_END_DATE ) X
68               WHERE o1.business_group_id = l_business_group_id
69                 AND hoi1.organization_id = o1.organization_id
70                 AND hoi1.organization_id = X.ORG_ID
71                 AND hoi1.org_information1 = 'SE_LOCAL_UNIT'
72                 AND hoi1.org_information_context = 'CLASS'
73                 AND o1.organization_id = hoi2.org_information1
74                 AND hoi2.ORG_INFORMATION_CONTEXT='SE_LOCAL_UNITS'
75                 AND hoi2.organization_id =  hoi3.organization_id
76                 AND hoi3.ORG_INFORMATION_CONTEXT='CLASS'
77                 AND hoi3.org_information1 = 'HR_LEGAL_EMPLOYER'
78                 AND hoi3.organization_id = hoi4.organization_id
79                 AND hoi4.ORG_INFORMATION_CONTEXT='SE_HOURLY_RATE_DETAILS'
80                 AND HOI4.org_information1 IS NOT NULL;
81 
82 CURSOR csr_Legal_Employer_Salary_Rate IS
83 SELECT	hoi4.ORG_INFORMATION1
84 
85                FROM	HR_ORGANIZATION_UNITS o1
86                     ,HR_ORGANIZATION_INFORMATION hoi1
87                     ,HR_ORGANIZATION_INFORMATION hoi2
88                     ,HR_ORGANIZATION_INFORMATION hoi3
89                     ,HR_ORGANIZATION_INFORMATION hoi4
90                     ,( SELECT TRIM(SCL.SEGMENT2) AS ORG_ID
91                          FROM PER_ALL_ASSIGNMENTS_F ASG
92                               ,HR_SOFT_CODING_KEYFLEX SCL
93                         WHERE ASG.ASSIGNMENT_ID = p_assignment_id
94                           AND ASG.SOFT_CODING_KEYFLEX_ID = SCL.SOFT_CODING_KEYFLEX_ID
95                           AND p_effective_date BETWEEN ASG.EFFECTIVE_START_DATE AND ASG.EFFECTIVE_END_DATE ) X
96               WHERE o1.business_group_id = l_business_group_id
97                 AND hoi1.organization_id = o1.organization_id
98                 AND hoi1.organization_id = X.ORG_ID
99                 AND hoi1.org_information1 = 'SE_LOCAL_UNIT'
100                 AND hoi1.org_information_context = 'CLASS'
101                 AND o1.organization_id = hoi2.org_information1
102                 AND hoi2.ORG_INFORMATION_CONTEXT='SE_LOCAL_UNITS'
103                 AND hoi2.organization_id =  hoi3.organization_id
104                 AND hoi3.ORG_INFORMATION_CONTEXT='CLASS'
105                 AND hoi3.org_information1 = 'HR_LEGAL_EMPLOYER'
106                 AND hoi3.organization_id = hoi4.organization_id
107                 AND hoi4.ORG_INFORMATION_CONTEXT='SE_HOURLY_RATE_DETAILS'
108                 AND HOI4.org_information2 IS NOT NULL;
109 
110 --To fetch the hourly rate from person form
111 
112 CURSOR csr_Person_Hourly_Rate IS
113 SELECT PER_INFORMATION6   AS Hourly_Rate	 --Hourly/Salaried
114               FROM PER_ALL_PEOPLE_F PER
115       	      WHERE PER.PERSON_ID = l_person_id
116      	      AND P_EFFECTIVE_DATE BETWEEN PER.EFFECTIVE_START_DATE
117               AND PER.EFFECTIVE_END_DATE;
118 
119 CURSOR csr_Person_Salary_Rate IS
120 SELECT PER_INFORMATION7   AS Salary_Rate	 --Hourly/Salaried
121               FROM PER_ALL_PEOPLE_F PER
122       	      WHERE PER.PERSON_ID = l_person_id
123      	      AND P_EFFECTIVE_DATE BETWEEN PER.EFFECTIVE_START_DATE
124               AND PER.EFFECTIVE_END_DATE;
125 
126 CURSOR csr_Absence_Hourly_Rate IS
127 SELECT PAA.ABS_INFORMATION1   AS Hourly_Rate		--Daily Rate Calculation
128 		FROM PER_ABSENCE_ATTENDANCES PAA
129           	WHERE PAA.ABSENCE_ATTENDANCE_ID =l_abs_attendance_id;
130 
131 
132 CURSOR csr_Absence_Salary_Rate IS
133 SELECT PAA.ABS_INFORMATION2   AS Salary_Rate		--Daily Rate Calculation
134 		FROM PER_ABSENCE_ATTENDANCES PAA
135           	WHERE PAA.ABSENCE_ATTENDANCE_ID =l_abs_attendance_id;
136 
137 
138 CURSOR csr_abs_attendance_id (l_asg_id number, l_eff_dt date, l_inp_val_name varchar2, l_start_dt date, l_end_dt date) IS
139     SELECT eev1.screen_entry_value  screen_entry_value
140     FROM   per_all_assignments_f      asg1
141           ,per_all_assignments_f      asg2
142           ,per_all_people_f           per
143           ,pay_element_links_f        el
144           ,pay_element_types_f        et
145           ,pay_input_values_f         iv1
146           ,pay_element_entries_f      ee
147           ,pay_element_entry_values_f eev1
148     WHERE  asg1.assignment_id    = l_asg_id
149       AND l_eff_dt BETWEEN asg1.effective_start_date AND asg1.effective_end_date
150       AND l_eff_dt BETWEEN asg2.effective_start_date AND asg2.effective_end_date
151       AND  per.person_id         = asg1.person_id
152       AND  asg2.person_id        = per.person_id
153       --AND  asg2.primary_flag     = 'Y'
154       AND  asg1.assignment_id=asg2.assignment_id
155       AND  et.element_name       = 'Sickness Details'
156       AND  et.legislation_code   = 'SE'
157       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
158       AND  iv1.element_type_id   = et.element_type_id
159       AND  iv1.name              = l_inp_val_name
160       AND  el.business_group_id  = per.business_group_id
161       AND  el.element_type_id    = et.element_type_id
162       AND  ee.assignment_id      = asg2.assignment_id
163       AND  ee.element_link_id    = el.element_link_id
164       AND  eev1.element_entry_id = ee.element_entry_id
165       AND  eev1.input_value_id   = iv1.input_value_id
166       AND  ee.effective_start_date  >= l_start_dt
167       AND  ee.effective_end_date <= l_end_dt
168       AND  eev1.effective_start_date <= l_start_dt
169       AND  eev1.effective_end_date >= l_end_dt
170       AND ROWNUM < 2 ;
171 
172 
173 
174   BEGIN
175 
176   BEGIN
177 		SELECT papf.person_id
178 		,papf.business_group_id
179 		,segment9
180 		,normal_hours
181 		,frequency
182 		,hourly_salaried_code
183 		,employee_category
184 		INTO l_person_id
185 		,l_business_group_id
186 		,l_working_percentage
187 		,l_normal_hours
188 		,l_frequency
189 		,l_hour_sal
190 		,l_employee_category
191 		FROM per_all_assignments_f paaf,
192 		per_all_people_f papf,
193 		hr_soft_coding_keyflex hsck
194 		WHERE paaf.assignment_id = p_assignment_id
195 		AND paaf.soft_coding_keyflex_id=hsck.soft_coding_keyflex_id
196 		AND papf.person_id=paaf.person_id
197                 AND p_effective_date BETWEEN paaf.effective_start_date
198                 AND paaf.effective_end_date
199 		AND p_effective_date BETWEEN papf.effective_start_date
200                 AND papf.effective_end_date;
201 
202 
203         EXCEPTION
204 		WHEN OTHERS THEN
205 		RETURN 0;
206         END;
207 
208 	OPEN csr_abs_attendance_id (p_assignment_id,p_effective_date,'CREATOR_ID',p_abs_start_date, p_abs_end_date);
209 		FETCH csr_abs_attendance_id INTO l_abs_attendance_id;
210 	CLOSE csr_abs_attendance_id;
211 
212 	IF l_hour_sal='H' THEN
213 		OPEN csr_Absence_Hourly_Rate;
214 			FETCH csr_Absence_Hourly_Rate INTO l_ab_hourly_rate;
215 		CLOSE csr_Absence_Hourly_Rate;
216 
217 		OPEN csr_Person_Hourly_Rate;
218 			FETCH csr_Person_Hourly_Rate INTO l_pe_hourly_rate;
219 		CLOSE csr_Person_Hourly_Rate;
220 
221 		OPEN csr_Legal_Employer_Hourly_Rate;
222 			FETCH csr_Legal_Employer_Hourly_Rate INTO l_le_hourly_rate;
223 		CLOSE csr_Legal_Employer_Hourly_Rate;
224 
225 
226 		l_gen_hourly_rate:=nvl(nvl(l_ab_hourly_rate,l_pe_hourly_rate),l_le_hourly_rate);
227 
228 		IF l_gen_hourly_rate='HRATE_OPTION1' THEN
229 			p_hourly_rate_option1:='Y';
230 		ELSIF l_gen_hourly_rate='HRATE_OPTION2' THEN
231 			p_hourly_rate_option2:='Y';
232 		ELSIF l_gen_hourly_rate='HRATE_OPTION3' THEN
233 			p_hourly_rate_option3:='Y';
234 		ELSIF l_gen_hourly_rate='HRATE_OPTION4' THEN
235 			p_hourly_rate_option4:='Y';
236 		ELSIF l_gen_hourly_rate='HRATE_OPTION5' THEN
237 			p_hourly_rate_option5:='Y';
238 		ELSIF l_gen_hourly_rate='HRATE_OPTION6' THEN
239 			p_hourly_rate_option6:='Y';
240 		ELSIF l_gen_hourly_rate='HRATE_OPTION7' THEN
241 			p_hourly_rate_option7:='Y';
242 		ELSIF l_gen_hourly_rate='HRATE_OPTION8' THEN
243 			p_hourly_rate_option8:='Y';
244 		ELSIF l_gen_hourly_rate='HRATE_OPTION9' THEN
245 			p_hourly_rate_option9:='Y';
246 		ELSIF l_gen_hourly_rate='HRATE_OPTION10' THEN
247 			p_hourly_rate_option10:='Y';
248 		ELSE
249 			p_hourly_rate_option1  := null;
250 			p_hourly_rate_option2  := null;
251 			p_hourly_rate_option3  := null;
252 			p_hourly_rate_option4  := null;
253 			p_hourly_rate_option5  := null;
254 			p_hourly_rate_option6  := null;
255 			p_hourly_rate_option7  := null;
256 			p_hourly_rate_option8  := null;
257 			p_hourly_rate_option9  := null;
258 			p_hourly_rate_option10 := null;
259 			/*IF l_hour_sal IS NULL THEN
260 				p_hourly_rate:=0;
261 			ELSIF (l_hour_sal='S' AND l_frequency='W') OR (l_employee_category='WC' AND l_frequency='W') THEN
262 				p_hourly_rate:=round(((p_Monthly_Pay*12)/(52*l_normal_hours)*l_working_percentage/100),2);
263 			ELSE
264 				p_hourly_rate:=0;*/
265 			END IF;
266 	ELSIF l_hour_sal='S' THEN
267 
268 		OPEN csr_Absence_Salary_Rate;
269 			FETCH csr_Absence_Salary_Rate INTO l_ab_salary_rate;
270 		CLOSE csr_Absence_Salary_Rate;
271 
272 		OPEN csr_Person_Salary_Rate;
273 			FETCH csr_Person_Salary_Rate INTO l_pe_salary_rate;
274 		CLOSE csr_Person_Salary_Rate;
275 
276 		OPEN csr_Legal_Employer_Salary_Rate;
277 			FETCH csr_Legal_Employer_Salary_Rate INTO l_le_salary_rate;
278 		CLOSE csr_Legal_Employer_Salary_Rate;
279 
280 
281 		l_gen_salary_rate:=nvl(nvl(l_ab_salary_rate,l_pe_salary_rate),l_le_salary_rate);
282 
283 		IF l_gen_salary_rate='OPTION1' THEN
284 			p_salary_rate_option1:='Y';
285 		ELSIF l_gen_salary_rate='OPTION2' THEN
286 			p_salary_rate_option2:='Y';
287 		ELSIF l_gen_salary_rate='OPTION3' THEN
288 			p_salary_rate_option3:='Y';
289 		ELSIF l_gen_salary_rate='OPTION4' THEN
290 			p_salary_rate_option4:='Y';
291 		ELSIF l_gen_salary_rate='OPTION5' THEN
292 			p_salary_rate_option5:='Y';
293 		ELSIF l_gen_salary_rate='OPTION6' THEN
294 			p_salary_rate_option6:='Y';
295 		ELSIF l_gen_salary_rate='OPTION7' THEN
296 			p_salary_rate_option7:='Y';
297 		ELSIF l_gen_salary_rate='OPTION8' THEN
298 			p_salary_rate_option8:='Y';
299 		ELSIF l_gen_salary_rate='OPTION9' THEN
300 			p_salary_rate_option9:='Y';
301 		ELSIF l_gen_salary_rate='OPTION10' THEN
302 			p_salary_rate_option10:='Y';
303 		ELSE
304 			p_salary_rate_option1  := null;
305 			p_salary_rate_option2  := null;
306 			p_salary_rate_option3  := null;
307 			p_salary_rate_option4  := null;
308 			p_salary_rate_option5  := null;
309 			p_salary_rate_option6  := null;
310 			p_salary_rate_option7  := null;
311 			p_salary_rate_option8  := null;
312 			p_salary_rate_option9  := null;
313 			p_salary_rate_option10 := null;
314 		    IF (l_hour_sal='S' AND l_frequency='W') OR (l_employee_category='WC' AND l_frequency='W') THEN
315 			 p_salary_rate:=round(((p_Monthly_Pay*12)/(52*l_normal_hours)*l_working_percentage/100),2);
316 		    END IF;
317 		END IF;
318 
319 	ELSE
320 			p_hourly_rate_option1  := null;
321 			p_hourly_rate_option2  := null;
322 			p_hourly_rate_option3  := null;
323 			p_hourly_rate_option4  := null;
324 			p_hourly_rate_option5  := null;
325 			p_hourly_rate_option6  := null;
326 			p_hourly_rate_option7  := null;
327 			p_hourly_rate_option8  := null;
328 			p_hourly_rate_option9  := null;
329 			p_hourly_rate_option10 := null;
330 			p_salary_rate_option1  := null;
331 			p_salary_rate_option2  := null;
332 			p_salary_rate_option3  := null;
333 			p_salary_rate_option4  := null;
334 			p_salary_rate_option5  := null;
335 			p_salary_rate_option6  := null;
336 			p_salary_rate_option7  := null;
337 			p_salary_rate_option8  := null;
338 			p_salary_rate_option9  := null;
339 			p_salary_rate_option10 := null;
340 			p_hourly_rate:=0;
341 			p_salary_rate:=0;
342 	END IF;
343 	p_normal_hours:=nvl(l_normal_hours,0);
344 	p_working_perc:=nvl(l_working_percentage,0);
345     p_hour_sal:=l_hour_sal;
346   RETURN 1;
347   EXCEPTION
348   WHEN OTHERS THEN
349   RETURN 0;
350 END GET_HOURLY_RATE;
351 
352 FUNCTION GET_GROUP(
353    p_assignment_id               IN         NUMBER
354   ,p_effective_date              IN         DATE
355   ,p_abs_start_date              IN         DATE
356   ,p_abs_end_date                IN         DATE
357   ,p_group_start_date1		 OUT	    NOCOPY DATE
358   ,p_group_start_date2		 OUT	    NOCOPY DATE
359   ,p_group_start_date3		 OUT	    NOCOPY DATE
360   ,p_group_start_date4		 OUT	    NOCOPY DATE
361   ,p_group_start_date5		 OUT	    NOCOPY DATE
362   ,p_group_start_date6		 OUT	    NOCOPY DATE
363   ,p_group_start_date7		 OUT	    NOCOPY DATE
364   ,p_group_start_date8		 OUT	    NOCOPY DATE
365   ,p_group_start_date9		 OUT	    NOCOPY DATE
366   ,p_group_start_date10		 OUT	    NOCOPY DATE
367   ,p_group_start_date11		 OUT	    NOCOPY DATE
368   ,p_group_end_date1		 OUT	    NOCOPY DATE
369   ,p_group_end_date2		 OUT	    NOCOPY DATE
370   ,p_group_end_date3		 OUT	    NOCOPY DATE
371   ,p_group_end_date4		 OUT	    NOCOPY DATE
372   ,p_group_end_date5		 OUT	    NOCOPY DATE
373   ,p_group_end_date6		 OUT	    NOCOPY DATE
374   ,p_group_end_date7		 OUT	    NOCOPY DATE
375   ,p_group_end_date8		 OUT	    NOCOPY DATE
376   ,p_group_end_date9		 OUT	    NOCOPY DATE
377   ,p_group_end_date10		 OUT	    NOCOPY DATE
378   ,p_group_end_date11		 OUT	    NOCOPY DATE
379   ,p_group_option1		 OUT	    NOCOPY VARCHAR2
380   ,p_group_option2		 OUT	    NOCOPY VARCHAR2
381   ,p_group_option3		 OUT	    NOCOPY VARCHAR2
382   ,p_group_option4		 OUT	    NOCOPY VARCHAR2
383   ,p_group_option5		 OUT	    NOCOPY VARCHAR2
384   ,p_group_option6		 OUT	    NOCOPY VARCHAR2
385   ,p_group_option7		 OUT	    NOCOPY VARCHAR2
386   ,p_group_option8		 OUT	    NOCOPY VARCHAR2
387   ,p_group_option9		 OUT	    NOCOPY VARCHAR2
388   ,p_group_option10		 OUT	    NOCOPY VARCHAR2
389   ,p_group_option11		 OUT	    NOCOPY VARCHAR2
390   ,p_asg_hour_sal		 OUT        NOCOPY VARCHAR2
391   )
392 RETURN NUMBER IS
393 
394 l_st_date date;
395 
396 CURSOR csr_absence(l_person_id Number) is
397 	/*SELECT paa.absence_attendance_id
398         ,paa.date_start
399         ,nvl(paa.date_end,p_abs_end_date) date_end
400         ,paa.time_start
401         ,paa.time_end
402         ,DECODE(paa.date_start, paa.date_end, 1, (paa.date_end-paa.date_start)+1) AS days_diff
403 	FROM per_absence_attendances paa,
404     per_absence_attendance_types pat
405 	WHERE paa.person_id = l_person_id
406         AND ((paa.date_start between l_st_date and p_abs_end_date)
407         OR  (paa.date_end between l_st_date and p_abs_end_date))
408         AND paa.date_start IS NOT NULL /*AND paa.date_end IS NOT NULL*/
409         /*AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
410         AND pat.absence_category IN ('S')
411         ORDER BY paa.date_end  desc;*/
412 
413 	--Fix for bug no. 5355937
414 
415 SELECT paa.absence_attendance_id
416         ,paa.date_start
417         --,nvl(paa.date_end,'31-jan-2000') date_end
418         ,least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date)) date_end
419         ,paa.time_start
420         ,paa.time_end
421         ,DECODE(paa.date_start,least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date)), 1,
422 	(least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date))-paa.date_start)+1) AS days_diff
423 	FROM per_absence_attendances paa,
424 	per_absence_attendance_types pat
425 	WHERE paa.person_id = l_person_id
426         /*AND paa.date_start >=p_abs_start_date
427 	AND nvl(paa.date_end,p_abs_end_date)<=p_abs_end_date*/
428 	AND ((paa.date_start between l_st_date and p_abs_end_date)
429         OR  (paa.date_end between l_st_date and p_abs_end_date))
430         /*AND paa.date_start IS NOT NULL AND paa.date_end IS NOT NULL*/
431         AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
432         AND pat.absence_category IN ('S')
433         AND paa.absence_attendance_id IN(
434 --        ORDER BY paa.date_end  ;
435 
436 
437    SELECT eev1.screen_entry_value  screen_entry_value
438     FROM   per_all_assignments_f      asg1
439           ,per_all_assignments_f      asg2
440           ,per_all_people_f           per
441           ,pay_element_links_f        el
442           ,pay_element_types_f        et
443           ,pay_input_values_f         iv1
444           ,pay_element_entries_f      ee
445           ,pay_element_entry_values_f eev1
446     WHERE  asg1.assignment_id    = p_assignment_id --34040 --l_asg_id
447       AND  p_effective_date BETWEEN asg1.effective_start_date AND asg1.effective_end_date
448       AND  p_effective_date BETWEEN asg2.effective_start_date AND asg2.effective_end_date
449       AND  per.person_id         = asg1.person_id
450       AND  asg2.person_id        = per.person_id
451       --AND  asg2.primary_flag     = 'Y'
452       AND asg1.assignment_id=asg2.assignment_id
453       AND  et.element_name       = 'Sickness Details'
454       AND  et.legislation_code   = 'SE'
455       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
456       AND  iv1.element_type_id   = et.element_type_id
457       AND  iv1.name              = 'CREATOR_ID'
458       AND  el.business_group_id  = per.business_group_id
459       AND  el.element_type_id    = et.element_type_id
460       AND  ee.assignment_id      = asg2.assignment_id
461       AND  ee.element_link_id    = el.element_link_id
462       AND  eev1.element_entry_id = ee.element_entry_id
463       AND  eev1.input_value_id   = iv1.input_value_id
464       /*AND  ee.effective_start_date  >= p_abs_start_date
465       AND  ee.effective_end_date <= p_abs_end_date
466       AND  eev1.effective_start_date >= p_abs_start_date
467       AND  eev1.effective_end_date <= p_abs_end_date*/
468       ) ORDER BY paa.date_end desc ;
469 
470 TYPE l_date IS
471       TABLE OF DATE
472       INDEX BY BINARY_INTEGER;
473 
474 TYPE l_char IS
475       TABLE OF char
476       INDEX BY BINARY_INTEGER;
477 
478       l_start_date l_date;
479       l_end_date l_date;
480       l_gp_char l_char;
481       l_prev_start_date DATE :=NULL;
482       l_group_start_date DATE;
483       l_group_end_date DATE;
484       l_person_id NUMBER;
485       l_counter NUMBER :=1;
486 
487 BEGIN
488 l_st_date :=to_date('01010001','DDMMYYYY');
489 
490 FOR l_counter IN 1..10 LOOP
491 l_start_date(l_counter):=NULL;
492 l_end_date(l_counter):=NULL;
493 l_gp_char(l_counter):=NULL;
494 END LOOP;
495 
496 	BEGIN
497 		SELECT papf.person_id ,
498 		hourly_salaried_code
499 		INTO l_person_id ,
500 		p_asg_hour_sal
501 		FROM per_all_assignments_f paaf,
502 		per_all_people_f papf,
503 		hr_soft_coding_keyflex hsck
504 		WHERE paaf.assignment_id = p_assignment_id
505 		AND paaf.soft_coding_keyflex_id=hsck.soft_coding_keyflex_id
506 		AND papf.person_id=paaf.person_id
507                 AND p_effective_date BETWEEN paaf.effective_start_date
508                 AND paaf.effective_end_date
509 		AND p_effective_date BETWEEN papf.effective_start_date
510                 AND papf.effective_end_date;
511 
512 
513 	  EXCEPTION
514 		WHEN OTHERS THEN
515 		RETURN 0;
516         END;
517 
518 
519 
520 	FOR c_abs IN csr_absence(l_person_id) LOOP
521 		IF (l_prev_start_date-c_abs.date_end) <= 5 OR (l_prev_start_date-c_abs.date_end) IS NULL THEN
522 			IF (l_prev_start_date-c_abs.date_end) IS NULL THEN
523 				l_group_end_date:=c_abs.date_end;
524 			END IF;
525 		ELSE
526 
527 		IF ((l_prev_start_date-c_abs.date_end) > 5) and (c_abs.date_end<p_abs_start_date) THEN
528 		  exit;
529 		END IF;
530 			l_group_start_date:=l_prev_start_date;
531 			l_start_date(l_counter):=l_group_start_date;
532 			l_end_date(l_counter):=l_group_end_date;
533 			l_gp_char(l_counter):='Y';
534 			l_group_end_date:=c_abs.date_end;
535 			l_counter:=l_counter+1;
536 		END IF;
537 		l_prev_start_date:=c_abs.date_start;
538 	END LOOP;
539 	l_group_start_date:=l_prev_start_date;
540 	l_start_date(l_counter):=l_group_start_date;
541 	l_end_date(l_counter):=l_group_end_date;
542 	l_gp_char(l_counter):='Y';
543 	/* Fix for bug 5985088 */
544        	IF l_group_end_date>=p_abs_start_date THEN
545 	    if l_counter >=1 then
546 		p_group_start_date1:=l_start_date(1);
547 		   p_group_end_date1:=l_end_date(1);
548 		p_group_option1:=l_gp_char(1);
549 
550 	    end if;
551 	    if l_counter>=2 then
552 		p_group_start_date2:=l_start_date(2);
553 		    p_group_end_date2:=l_end_date(2);
554 		p_group_option2:=l_gp_char(2);
555 		end if;
556 		if l_counter>=3 then
557 		    p_group_start_date3:=l_start_date(3);
558 		    p_group_end_date3:=l_end_date(3);
559 		    p_group_option3:=l_gp_char(3);
560 	    end if;
561 	    if l_counter>=4 then
562 		    p_group_start_date4:=l_start_date(4);
563 		    p_group_end_date4:=l_end_date(4);
564 		    p_group_option4:=l_gp_char(4);
565 	    end if;
566 	    if l_counter>=5 then
567 		   p_group_start_date5:=l_start_date(5);
568 		   p_group_end_date5:=l_end_date(5);
569 		   p_group_option5:=l_gp_char(5);
570 		end if;
571 		IF l_counter>=6 then
572 		   p_group_start_date6:=l_start_date(6);
573 		   p_group_end_date6:=l_end_date(6);
574 		   p_group_option6:=l_gp_char(6);
575 		end if;
576 		if l_counter>=7 then
577 		   p_group_start_date7:=l_start_date(7);
578 		   p_group_end_date7:=l_end_date(7);
579 		   p_group_option7:=l_gp_char(7);
580 	    end if;
581 	    if l_counter>=8 then
582 		   p_group_start_date8:=l_start_date(8);
583 		   p_group_end_date8:=l_end_date(8);
584 		   p_group_option8:=l_gp_char(8);
585 	    end if;
586 	    if l_counter>=9 then
587 		   p_group_start_date1:=l_start_date(9);
588 		   p_group_end_date1:=l_end_date(9);
589 		   p_group_option9:=l_gp_char(9);
590 	    end if;
591 	    if l_counter>=10 then
592 		   p_group_start_date1:=l_start_date(10);
593 		   p_group_end_date1:=l_end_date(10);
594 		   p_group_option10:=l_gp_char(10);
595 	    end if;
596 	END IF;
597 	RETURN 1;
598     EXCEPTION
599 	WHEN OTHERS THEN
600 	RETURN 0;
601 
602 END GET_GROUP;
603 
604 
605 FUNCTION GET_WAITING_HOURS(p_abs_hours IN VARCHAR2,
606 p_normal_hours IN VARCHAR2
607 )
608 RETURN NUMBER
609 IS
610 l_abs_hours number;
611 l_abs_mins number;
612 l_nor_hours number;
613 l_nor_mins number;
614 l_hours number;
615 l_mins number;
616 BEGIN
617 
618 l_abs_hours:=substr(p_abs_hours,1,2);
619 
620 l_abs_mins:=substr(p_abs_hours,4,2);
621 l_nor_hours:=substr(p_normal_hours,1,2);
622 l_nor_mins:=substr(p_normal_hours,4,2);
623 
624 IF (l_abs_mins>l_nor_hours) THEN
625 
626 	l_mins:=(60-l_abs_mins);
627 	l_hours:=(l_nor_hours-(l_abs_hours+1));
628 ELSE
629 	l_mins:=(l_nor_mins-l_abs_mins);
630 	l_hours:=(l_nor_hours-l_abs_hours);
631 END IF;
632 
633 RETURN l_hours+(l_mins * .0167);
634 END GET_WAITING_HOURS;
635 
636 
637 FUNCTION CALCULATE_PAYMENT(
638    p_assignment_id               IN         NUMBER
639   ,p_effective_date              IN         DATE
640   ,p_assignment_action_id	 IN	    NUMBER
641   ,p_pay_start_date		 IN	    DATE
642   ,p_pay_end_date		 IN	    DATE
643   ,p_abs_start_date              IN         DATE
644   ,p_abs_end_date                IN         DATE
645   ,p_monthly_pay		 IN	    NUMBER
646   ,p_hourly_rate		 IN	    OUT NOCOPY   NUMBER
647   ,p_tot_waiting_day_hours	 OUT        NOCOPY NUMBER
648   ,p_tot_waiting_day		 OUT	    NOCOPY NUMBER
649   ,p_total_sickness_deduction    OUT	    NOCOPY NUMBER
650   ,p_tot_sickness_ded_14_above   OUT	    NOCOPY NUMBER
651   ,p_total_sick_pay		 OUT	    NOCOPY NUMBER
652   ,p_total_sick_pay_14_above     OUT	    NOCOPY NUMBER
653   ,p_tot_waiting_day_ded	 OUT	    NOCOPY NUMBER
654   ,p_sickness_14_below_days      OUT        NOCOPY NUMBER
655   ,p_sickness_above_14_days      OUT        NOCOPY NUMBER
656   ,p_sickness_pay_hours_14_below OUT        NOCOPY NUMBER
657   ,p_sickness_pay_hours_above_14 OUT        NOCOPY  NUMBER
658   ,p_sex			 OUT	    NOCOPY VARCHAR2
659   ,p_tot_sick_pay_days		 OUT	    NOCOPY NUMBER
660   ,p_asg_hour_sal		 OUT        NOCOPY VARCHAR2
661   ,p_waiting_date		 OUT	    NOCOPY DATE
662   ,p_salary_rate		 IN OUT	    NOCOPY   NUMBER
663   ,p_fourteenth_date		 OUT	    NOCOPY DATE
664   ,p_full_days			 OUT	    NOCOPY NUMBER
665   ,p_override_monthly_basic	 OUT	    NOCOPY NUMBER
666   ,p_override_monthly_basic_day  OUT	    NOCOPY NUMBER
667   ,p_exceeds_14_days		 OUT	    NOCOPY VARCHAR2
668   ,p_sickness_after_14_days_month OUT	    NOCOPY NUMBER
669   ,p_group_calendar_days          OUT       NOCOPY NUMBER
670   ,p_group_working_days           OUT       NOCOPY NUMBER
671   ,p_group_working_hours          OUT       NOCOPY NUMBER
672 
673 
674   )
675 RETURN NUMBER IS
676 
677 CURSOR csr_absence(l_person_id Number) is
678 	/*SELECT paa.absence_attendance_id
679         ,paa.date_start
680         ,nvl(paa.date_end,p_abs_end_date) date_end
681         ,paa.time_start
682         ,paa.time_end
683         ,DECODE(paa.date_start, paa.date_end, 1, (paa.date_end-paa.date_start)+1) AS days_diff
684 	FROM per_absence_attendances paa,
685 	per_absence_attendance_types pat
686 	WHERE paa.person_id = l_person_id
687         AND paa.date_start >=p_abs_start_date
688 	AND nvl(paa.date_end,p_abs_end_date)<=p_abs_end_date
689         AND paa.date_start IS NOT NULL /*AND paa.date_end IS NOT NULL*/
690         /*AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
691         AND pat.absence_category IN ('S')
692         ORDER BY paa.date_end  ;*/
693 
694 	SELECT paa.absence_attendance_id
695         ,paa.date_start
696         --,nvl(paa.date_end,'31-jan-2000') date_end
697         ,least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date)) date_end
698         ,paa.time_start
699         ,paa.time_end
700         ,DECODE(paa.date_start,least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date)), 1,
701 	(least(nvl(paa.date_end,p_abs_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=l_person_id),p_abs_end_date))-paa.date_start)+1) AS days_diff
702 	FROM per_absence_attendances paa,
703 	per_absence_attendance_types pat
704 	WHERE paa.person_id = l_person_id
705         AND paa.date_start >=p_abs_start_date
706 	AND paa.date_start<=p_abs_end_date
707 	AND least(nvl(paa.date_end,p_abs_end_date),p_abs_end_date)<=p_abs_end_date
708         /*AND paa.date_start IS NOT NULL AND paa.date_end IS NOT NULL*/
709         AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
710         AND pat.absence_category IN ('S')
711 	/* Fix for bug 5383707 */
712 	AND paa.absence_attendance_id IN(
713 --        ORDER BY paa.date_end  ;
714 
715 
716    SELECT eev1.screen_entry_value  screen_entry_value
717     FROM   per_all_assignments_f      asg1
718           ,per_all_assignments_f      asg2
719           ,per_all_people_f           per
720           ,pay_element_links_f        el
721           ,pay_element_types_f        et
722           ,pay_input_values_f         iv1
723           ,pay_element_entries_f      ee
724           ,pay_element_entry_values_f eev1
725     WHERE  asg1.assignment_id    = p_assignment_id --34040 --l_asg_id
726       AND  p_effective_date BETWEEN asg1.effective_start_date AND asg1.effective_end_date
727       AND  p_effective_date BETWEEN asg2.effective_start_date AND asg2.effective_end_date
728       AND  per.person_id         = asg1.person_id
729       AND  asg2.person_id        = per.person_id
730       --AND  asg2.primary_flag     = 'Y'
731       AND asg1.assignment_id=asg2.assignment_id
732       AND  et.element_name       = 'Sickness Details'
733       AND  et.legislation_code   = 'SE'
734       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
735       AND  iv1.element_type_id   = et.element_type_id
736       AND  iv1.name              = 'CREATOR_ID'
737       AND  el.business_group_id  = per.business_group_id
738       AND  el.element_type_id    = et.element_type_id
739       AND  ee.assignment_id      = asg2.assignment_id
740       AND  ee.element_link_id    = el.element_link_id
741       AND  eev1.element_entry_id = ee.element_entry_id
742       AND  eev1.input_value_id   = iv1.input_value_id
743       /*AND  ee.effective_start_date  >= p_abs_start_date
744       AND  ee.effective_end_date <= p_abs_end_date
745       AND  eev1.effective_start_date >= p_abs_start_date
746       AND  eev1.effective_end_date <= p_abs_end_date*/
747       ) ORDER BY paa.date_end /*desc*/ ;  /*Bug Fix 5649509*/
748         --ORDER BY paa.date_end  ;
749 
750 CURSOR csr_check_override (l_asg_id number, l_eff_dt date, l_inp_val_name varchar2, l_start_dt date, l_end_dt date) IS
751     SELECT eev1.screen_entry_value  screen_entry_value
752     FROM   per_all_assignments_f      asg1
753           ,per_all_assignments_f      asg2
754           ,per_all_people_f           per
755           ,pay_element_links_f        el
756           ,pay_element_types_f        et
757           ,pay_input_values_f         iv1
758           ,pay_element_entries_f      ee
759           ,pay_element_entry_values_f eev1
760     WHERE  asg1.assignment_id    = l_asg_id
761       AND l_eff_dt BETWEEN asg1.effective_start_date AND asg1.effective_end_date
762       AND l_eff_dt BETWEEN asg2.effective_start_date AND asg2.effective_end_date
763       AND  per.person_id         = asg1.person_id
764       AND  asg2.person_id        = per.person_id
765       AND  asg2.primary_flag     = 'Y'
766       AND  et.element_name       = 'Sickness Details'
767       AND  et.legislation_code   = 'SE'
768       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
769       AND  iv1.element_type_id   = et.element_type_id
770       AND  iv1.name              = l_inp_val_name
771       AND  el.business_group_id  = per.business_group_id
772       AND  el.element_type_id    = et.element_type_id
773       AND  ee.assignment_id      = asg2.assignment_id
774       AND  ee.element_link_id    = el.element_link_id
775       AND  eev1.element_entry_id = ee.element_entry_id
776       AND  eev1.input_value_id   = iv1.input_value_id
777       AND  ee.effective_start_date  = l_start_dt
778       AND  ee.effective_end_date = l_end_dt
779       AND  eev1.effective_start_date = l_start_dt
780       AND  eev1.effective_end_date = l_end_dt ;
781 
782 Cursor csr_Get_Defined_Balance_Id(csr_v_Balance_Name FF_DATABASE_ITEMS.USER_NAME%TYPE)
783 	IS
784         SELECT      ue.creator_id
785         FROM     ff_user_entities  ue,
786         ff_database_items di
787         WHERE     di.user_name = csr_v_Balance_Name
788         AND     ue.user_entity_id = di.user_entity_id
789         AND     ue.legislation_code = 'SE'
790         AND     ue.business_group_id is NULL
791         AND     ue.creator_type = 'B';
792 
793 CURSOR csr_group_start_end_date
794 	( p_assignment_id NUMBER,
795 	p_element_type_id NUMBER,
796 	p_start_date_iv NUMBER,
797 	p_waiting_day_iv NUMBER,
798 	p_start_date DATE,
799 	p_end_date DATE
800 	) IS
801   /*         (p_element_name varchar2,
802             p_input_name varchar2,
803             p_group_start_date DATE,
804             p_group_end_date DATE,
805             p_assignment_id NUMBER) IS
806 
807 	    SELECT SUM(RESULT_VALUE)--prrv1.* ,paa.assignment_id
808 /*         prrv2.result_value fourteenth_date,
809          prrv3.result_value end_date*/
810   /*FROM   pay_assignment_actions paa,
811          pay_payroll_actions ppa,
812          pay_run_results prr,
813          pay_run_result_values prrv1,
814          pay_input_values_f pivf,
815          pay_element_types_f petf
816 /*         pay_run_result_values prrv2,
817          pay_run_result_values prrv3*/
818   /*WHERE  ppa.effective_date BETWEEN p_group_start_date --'01-jun-1999' --p_report_start_date
819    /* AND  p_group_end_date /*'01-jun-2000' */--p_report_end_date
820    /* AND  ppa.payroll_action_id = paa.payroll_action_id
821     AND  paa.assignment_id =p_assignment_id --21035 --p_assignment_id
822     AND  paa.assignment_action_id = prr.assignment_action_id
823     AND  prr.element_type_id = petf.element_type_id  --62358 -- p_element_type_id
824     AND  petf.element_name=p_element_name	--'Sick Pay 1 to 14 days'
825     AND  petf.element_type_id=pivf.element_type_id
826     AND  pivf.element_type_id=prr.element_type_id
827     AND  prr.run_result_id = prrv1.run_result_id
828     AND  prrv1.input_value_id =pivf.input_value_id --139722 --p_input_value_id;
829     AND  pivf.NAME=p_input_name; --'Waiting Day'*/
830 
831     SELECT SUM(prrv2.RESULT_VALUE) /*fnd_date.canonical_to_date(prrv1.RESULT_VALUE),prrv2.RESULT_VALUE,
832 ADD_MONTHS('15-nov-2000',-12), '15-nov-2000' --*, prrv1.result_value*/
833   FROM   pay_assignment_actions paa,
834          pay_payroll_actions ppa,
835          pay_run_results prr,
836          pay_run_result_values prrv1,
837          pay_run_result_values prrv2--,
838        --  pay_run_result_values prrv3
839   WHERE  ppa.effective_date BETWEEN p_start_date --ADD_MONTHS('15-nov-2000',-12)
840     AND  p_end_date --'15-nov-2000'
841     AND  ppa.payroll_action_id = paa.payroll_action_id
842     AND  paa.assignment_id = p_assignment_id --22145 -- p_assignment_id
843     AND  paa.assignment_action_id = prr.assignment_action_id
844     AND  prr.element_type_id = p_element_type_id--62358 --p_element_type_id
845     AND  prr.run_result_id = prrv1.run_result_id
846     AND  prrv1.input_value_id = p_start_date_iv --139718 --p_start_date_iv
847     AND  prr.run_result_id = prrv2.run_result_id
848     AND  prrv2.input_value_id = p_waiting_day_iv  --139722 --p_full_day_iv
849     AND  fnd_date.canonical_to_date(prrv1.result_value) BETWEEN p_start_date --ADD_MONTHS('15-nov-2000',-12)
850     AND  p_end_date ; --'15-nov-2000'
851 
852 
853 CURSOR csr_element(p_element_name VARCHAR2)
854     IS
855     SELECT element_type_id FROM
856     pay_element_types_f
857     WHERE element_name=p_element_name
858     AND legislation_code='SE';
859 
860 CURSOR csr_input(p_element_type_id number,p_input_value varchar2)
861     IS
862     SELECT input_value_id FROM
863     pay_input_values_f
864     WHERE name=p_input_value
865     AND element_type_id=p_element_type_id;
866 
867 CURSOR csr_run_result_value(csr_v_assignment_id NUMBER,
868 csr_v_element_type_id NUMBER,
869 csr_v_input_type_id1 NUMBER,
870 --csr_v_input_type_id2 NUMBER,
871 csr_v_start_date DATE,
872 csr_v_end_date DATE)
873 IS
874 SELECT nvl(SUM(prrv1.RESULT_VALUE),0)
875 FROM   pay_assignment_actions paa,
876 pay_payroll_actions ppa,
877 pay_run_results prr,
878 pay_run_result_values prrv1--,
879 --pay_run_result_values prrv2
880 WHERE  ppa.effective_date BETWEEN csr_v_start_date --ADD_MONTHS('15-nov-2000',-12)
881 AND  csr_v_end_date --'15-nov-2000'
882 AND  ppa.payroll_action_id = paa.payroll_action_id
883 AND  paa.assignment_id = csr_v_assignment_id --22145 -- p_assignment_id
884 AND  paa.assignment_action_id = prr.assignment_action_id
885 AND  prr.element_type_id = csr_v_element_type_id--62358 --p_element_type_id
886 AND  prr.run_result_id = prrv1.run_result_id
887 AND  prrv1.input_value_id = csr_v_input_type_id1; --139718 --p_start_date_iv
888 /*AND  prr.run_result_id = prrv2.run_result_id
889 AND  prrv2.input_value_id = csr_v_input_type_id2; --139718 --p_start_date_iv*/
890 
891 CURSOR csr_global_value(csr_v_global_name VARCHAR2,csr_v_effective_date DATE )
892 IS
893 SELECT nvl(global_value,0) FROM ff_globals_f WHERE --ROWNUM<3
894 legislation_code='SE'
895 AND GLOBAL_NAME=csr_v_global_name --'SE_BASIC_AMOUNT'
896 AND csr_v_effective_date /*'28-feb-2007'*/ BETWEEN effective_start_date
897 AND effective_end_date;
898 
899 CURSOR csr_absence_period(csr_v_assignment_id NUMBER,
900 csr_v_start_date DATE, csr_v_end_date DATE )
901 IS
902    SELECT greatest(fnd_date.canonical_to_date(peevf1.SCREEN_ENTRY_VALUE),csr_v_start_date) date_start,
903    least(fnd_date.canonical_to_date(peevf2.SCREEN_ENTRY_VALUE),csr_v_end_date) date_end
904     FROM   per_all_assignments_f      paaf
905 	  ,pay_element_types_f	      et
906 	  ,pay_element_entries_f      ee
907 	  ,pay_element_entry_values_f peevf1
908 	  ,pay_element_entry_values_f peevf2
909 	  ,pay_input_values_f pivf1
910 	  ,pay_input_values_f pivf2
911     WHERE  paaf.assignment_id	 = csr_v_assignment_id --38399 --p_assignment_id
912       AND csr_v_end_date /*p_effective_date*/ BETWEEN paaf.effective_start_date AND paaf.effective_end_date
913       AND  et.element_name	 = 'Sickness Details'
914       AND  et.legislation_code	 = 'SE'
915       AND  ee.assignment_id	 = paaf.assignment_id
916       AND  ee.ELEMENT_TYPE_ID = et.ELEMENT_TYPE_ID
917       AND  ee.effective_start_date <= csr_v_end_date--p_payroll_start_date
918       AND  ee.effective_end_date >= csr_v_start_date--p_payroll_end_date
919       and  ee.ELEMENT_ENTRY_ID =peevf1.ELEMENT_ENTRY_ID
920       AND  pivf1.element_type_id	 = et.element_type_id
921       AND  pivf1.name		 = 'Start Date'
922       AND  peevf1.input_value_id	 = pivf1.input_value_id
923 --      AND  peevf1.SCREEN_ENTRY_VALUE='V'
924       and  ee.ELEMENT_ENTRY_ID =peevf2.ELEMENT_ENTRY_ID
925       AND  pivf2.element_type_id	 = et.element_type_id
926       AND  pivf2.name		 = 'End Date'
927       AND  peevf2.input_value_id	 = pivf2.input_value_id
928       AND csr_v_end_date /*p_payroll_start_date*/ BETWEEN et.effective_start_date AND et.effective_end_date
929       AND csr_v_end_date /*p_payroll_end_date*/ BETWEEN et.effective_start_date AND et.effective_end_date;
930 
931 l_person_id number;
932 l_business_group_id number;
933 l_asg_hour_sal varchar2(10);
934 l_prev_start_date DATE :=NULL;
935 l_prev_end_date DATE:=NULL;
936 l_p_end_date DATE:=NULL;
937 l_prev_duration number:=0;
938 l_working_percentage NUMBER;
939 l_normal_start_date DATE;
940 l_normal_end_date DATE;
941 l_sickness_days NUMBER:=0;
942 l_total_sickness_days NUMBER:=0;
943 l_sickness_pay_days NUMBER:=0;
944 l_wrk_schd_return NUMBER;
945 l_start_time_char Varchar2(10) := '0';
946 l_end_time_char Varchar2(10) := '23.59';
947 l_duration NUMBER;
948 l_wrk_duration NUMBER;
949 l_include_event CHAR :='Y';
950 l_date_start DATE;
951 l_date_end DATE;
952 l_waiting_day NUMBER :=0;
953 l_employee_category varchar2(10);
954 l_normal_hours NUMBER;
955 l_sickness_deduction NUMBER :=0;
956 l_sick_pay NUMBER :=0;
957 l_waiting_day_deduction NUMBER :=0;
958 l_total_sickness_deduction NUMBER :=0;
959 l_total_sick_pay NUMBER :=0;
960 l_total_waiting_day_deduction NUMBER :=0;
961 l_normal_time_start varchar2(10);
962 l_normal_time_end varchar2(10);
963 l_time_start char(5);
964 l_prev_time_start char(5);
965 l_prev_time_end char(5);
966 l_prev_sicknness_days number;
967 l_time_end char(5);
968 l_return number;
969 l_waiting_date date;
970 l_waiting_day_hours number;
971 l_total_waiting_day NUMBER:=0;
972 l_total_waiting_day_hours number:=0;
973 l_loop_entered number:=0;
974 l_override_sickness_pay_hours NUMBER:=-1;
975 l_override_sickness_days NUMBER:=-1;
976 l_override_waiting_hours NUMBER:=-1;
977 l_sickness_deduction_14_above NUMBER:=0;
978 l_sickness_deduction_14_less NUMBER:=0;
979 l_sick_pay_14_above NUMBER:=0;
980 l_sick_pay_14_less NUMBER:=0;
981 l_tot_waiting_day_hours NUMBER:=0;
982 l_total_sickness_ded_14_above NUMBER:=0;
983 l_total_sick_pay_14_above NUMBER:=0;
984 l_prev_sickness_days NUMBER:=0;
985 l_curr_sickness_days NUMBER:=0;
986 l_sickness_14_below_days NUMBER:=0;
987 l_sick_pay_days_14_below_days NUMBER:=0;
988 l_sickness_above_14_days NUMBER :=0;
989 l_sickness_pay_hours_14_below NUMBER:=0;
990 l_sickness_pay_hours_above_14 NUMBER:=0;
991 l_sickness_pay_hours NUMBER:=0;
992 l_waiting_day_ded NUMBER:=0;
993 l_fourteenth_date DATE;
994 l_fourteenth_difference NUMBER;
995 l_sickness_last_date DATE;
996 l_group_start_date DATE;
997 lr_Get_Defined_Balance_Id NUMBER(10);
998 l_value NUMBER(10);
999 l_total_waiting_days NUMBER(10);
1000 l_start_date_iv NUMBER;
1001 l_waiting_day_iv NUMBER;
1002 l_element_type_id NUMBER;
1003 l_input_type_id NUMBER;
1004 --l_input_type_id2 NUMBER;
1005 l_days Char(1):='D';
1006 l_hours Char(1):='H';
1007 l_global_value NUMBER;
1008 l_sick_after_14_year_limit NUMBER;
1009 l_sick_after_14_year_taken NUMBER;
1010 l_total_sick_after_14 NUMBER;
1011 l_absence_period NUMBER:=0;
1012 BEGIN
1013 
1014 	BEGIN
1015 		SELECT papf.person_id
1016                 ,papf.business_group_id
1017                 ,hourly_salaried_code
1018 		,segment9
1019 		,employee_category
1020 		,normal_hours
1021 		,time_normal_start
1022 		,time_normal_finish
1023 		,sex
1024 		INTO l_person_id
1025                 ,l_business_group_id
1026                 ,l_asg_hour_sal
1027 		,l_working_percentage
1028 		,l_employee_category
1029 		,l_normal_hours
1030 		,l_normal_time_start
1031 		,l_normal_time_end
1032 		,p_sex
1033 		FROM per_all_assignments_f paaf,
1034 		per_all_people_f papf,
1035 		hr_soft_coding_keyflex hsck
1036 		WHERE paaf.assignment_id = p_assignment_id
1037 		AND paaf.soft_coding_keyflex_id=hsck.soft_coding_keyflex_id
1038 		AND papf.person_id=paaf.person_id
1039                 AND p_effective_date BETWEEN paaf.effective_start_date
1040                 AND paaf.effective_end_date
1041 		AND p_effective_date BETWEEN papf.effective_start_date
1042                 AND papf.effective_end_date;
1043 		p_asg_hour_sal:=l_asg_hour_sal;
1044 
1045         EXCEPTION
1046 		WHEN OTHERS THEN
1047 		l_person_id := null;
1048                 l_business_group_id := null;
1049                 l_asg_hour_sal := null;
1050         END;
1051 
1052 	IF l_asg_hour_sal='S' THEN
1053 
1054 	FOR c_abs IN csr_absence(l_person_id) LOOP
1055 
1056 		--if the period falls in previous payroll period
1057 		IF c_abs.date_end<p_pay_start_date THEN
1058 			--first entry need to check for waiting day
1059 			IF l_loop_entered=0 THEN
1060 				l_waiting_date:=GET_WAITING_DAY(p_assignment_id,c_abs.date_start,c_abs.date_end);
1061 				l_group_start_date:=l_waiting_date;
1062 				--Sickness day calculation
1063 				l_duration:=c_abs.date_end-l_waiting_date+1;
1064 				--if the sickness days is less than 14 days then
1065 				IF (l_sickness_days+l_duration)<14 THEN
1066 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1067 					l_sickness_days:=l_sickness_days+l_duration;
1068 
1069 					l_sickness_last_date:=c_abs.date_end;
1070 
1071 				--if the period falls across 14 days
1072 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>=14) THEN
1073 					--l_fourteenth_difference:=13-l_sickness_14_below_days;
1074 					l_fourteenth_date:=l_waiting_date+13;
1075 
1076 
1077 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1078 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1079 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1080 				--sickness days greater than 14 days
1081 				ELSE
1082 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1083 					l_sickness_days:=l_sickness_days+l_duration;
1084 				END IF;
1085 				l_waiting_day_hours:=0;
1086 			ELSE
1087 
1088 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
1089 				--if the sickness days is less than 14 days then
1090 				IF (l_sickness_days+l_duration)<=14 THEN
1091 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1092 					l_sickness_days:=l_sickness_days+l_duration;
1093 
1094 					l_sickness_last_date:=c_abs.date_end;
1095 
1096 				--if the period falls across 14 days
1097 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
1098 					l_fourteenth_difference:=13-l_sickness_14_below_days;
1099 					l_fourteenth_date:=c_abs.date_start + l_fourteenth_difference;
1100 
1101 
1102 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1103 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1104 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1105 
1106 				--sickness days greater than 14 days
1107 				ELSE
1108 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1109 					l_sickness_days:=l_sickness_days+l_duration;
1110 
1111 				END IF;
1112 			END IF;
1113 			/*l_sickness_days:=l_sickness_days+(cbs.date_end-l_waiting_date);
1114 			l_waiting_day_hours:=0; */
1115 		--if the absence start date falls in previous payroll period
1116 		--and absence end date fall is current payroll period
1117 		ELSIF c_abs.date_start<p_pay_start_date AND c_abs.date_end<p_pay_end_date THEN
1118 
1119 			--first entry need to check for waiting day
1120 			IF l_loop_entered=0 THEN
1121 
1122 				l_waiting_date:=GET_WAITING_DAY(p_assignment_id,c_abs.date_start,c_abs.date_end);
1123 				l_group_start_date:=l_waiting_date;
1124 				--Sickness days calculation
1125 				--l_duration:=c_abs.date_end-l_waiting_date;
1126 				l_duration:=least(c_abs.date_end,p_abs_end_date) -l_waiting_date+1;
1127 				--if the sickness days is less than 14 days then
1128 				IF (l_sickness_days+l_duration)<14 THEN
1129 
1130 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1131 					l_sickness_days:=l_sickness_days+l_duration;
1132 
1133 					l_sickness_last_date:=c_abs.date_end;
1134 
1135 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1136 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1137 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1138 					CLOSE csr_check_override;
1139 
1140 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1141 
1142 						--sickness pay hours calculation
1143 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1144 							( p_assignment_id, l_hours, l_include_event,
1145 							greatest(p_pay_start_date,l_waiting_date+1), c_abs.date_end, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1146 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1147 							l_end_time_char)),':','.'), l_wrk_duration
1148 							);
1149 
1150 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1151 
1152 					ELSE
1153 
1154 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1155 						l_override_sickness_pay_hours:=-1;
1156 					END IF;
1157 					/* Calculating the Sick Pay days less than 14 days*/
1158 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1159 							( p_assignment_id, l_days, l_include_event,
1160 							greatest(p_pay_start_date,l_waiting_date+1), c_abs.date_end, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1161 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1162 							l_end_time_char)),':','.'), l_wrk_duration
1163 							);
1164 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1165 				--if the period falls across 14 days
1166 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>=14) THEN
1167 
1168 					--l_fourteenth_difference:=14-l_sickness_14_below_days;
1169 					--l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1170 					l_fourteenth_date:=l_waiting_date+13;
1171 
1172 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1173 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1174 
1175 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1176 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1177 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1178 					CLOSE csr_check_override;
1179 
1180 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1181 
1182 						--check whether the end period for 14 days fall within payroll period
1183 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
1184 
1185 							--sickness pay hours calculation
1186 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1187 								( p_assignment_id, l_hours, l_include_event,
1188 								greatest(p_pay_start_date,l_waiting_date+1), (c_abs.date_start + 14-(l_sickness_days)+1),
1189 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1190 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1191 								);
1192 
1193 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1194 						END IF;
1195 					ELSE
1196 
1197 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1198 						l_override_sickness_pay_hours:=-1;
1199 					END IF;
1200 
1201 					/* Calculating the Sick Pay days less than 14 days*/
1202 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1203 								( p_assignment_id, l_days, l_include_event,
1204 								greatest(p_pay_start_date,l_waiting_date+1), (c_abs.date_start + 14-(l_sickness_days)+1),
1205 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1206 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1207 								);
1208 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1209 
1210 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1211 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1212 						FETCH csr_check_override INTO l_override_sickness_days;
1213 					CLOSE csr_check_override;
1214 
1215 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1216 						--sickness pay hours calculation
1217 
1218 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1219 							( p_assignment_id, l_hours, l_include_event,
1220 							greatest((c_abs.date_start + 14-l_sickness_days+1),p_pay_start_date) ,
1221 							c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1222 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1223 							);
1224 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1225 
1226 
1227 					ELSE
1228 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
1229 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1230 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1231 						l_override_sickness_pay_hours:=-1;
1232 					END IF;
1233 
1234 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1235 				--sickness days greater than 14 days
1236 				ELSE
1237 
1238 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1239 					l_sickness_days:=l_sickness_days+l_duration;
1240 
1241 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1242 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1243 						FETCH csr_check_override INTO l_override_sickness_days;
1244 					CLOSE csr_check_override;
1245 
1246 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1247 
1248 						--sickness pay hours calculation
1249 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1250 							( p_assignment_id, l_hours, l_include_event,
1251 							greatest(p_pay_start_date,l_waiting_date+1), c_abs.date_start,
1252 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1253 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1254 							);
1255 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1256 
1257 
1258 					ELSE
1259 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
1260 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1261 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1262 						l_override_sickness_pay_hours:=-1;
1263 					END IF;
1264 
1265 				END IF;
1266 				IF l_waiting_date>=p_pay_start_date THEN
1267 				    --Checking Override input value for waiting day
1268 				    OPEN csr_check_override (p_assignment_id,p_effective_date,'Override Waiting Day in Hours',c_abs.date_start, c_abs.date_end);
1269 					   FETCH csr_check_override INTO l_override_waiting_hours;
1270 				    CLOSE csr_check_override;
1271 
1272 				    IF l_override_waiting_hours =-1 OR l_override_waiting_hours IS NULL THEN
1273 					IF (l_waiting_date<>c_abs.date_end) THEN
1274 					   l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1275 						  ( p_assignment_id, l_hours, l_include_event,
1276 						  l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1277 						  nvl(l_normal_time_start,l_start_time_char)),':','.'),
1278 						  replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1279 						  );
1280 					ELSE
1281 					   l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1282 						  ( p_assignment_id, l_hours, l_include_event,
1283 						  l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1284 						  nvl(l_normal_time_start,l_start_time_char)),':','.'),
1285 						  replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
1286 						  );
1287 					END IF;
1288 					   l_waiting_day_hours:=l_wrk_duration;
1289 
1290 				    ELSE
1291 
1292 					   l_waiting_day_hours:=l_override_waiting_hours;
1293 					   l_override_waiting_hours:=-1;
1294 				    END IF;
1295                 ELSE
1296                     l_waiting_day_hours:=0;
1297                 END IF;
1298 
1299 			ELSE
1300 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
1301 				--if the sickness days is less than 14 days then
1302 				IF (l_sickness_days+l_duration)<=14 THEN
1303 
1304 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1305 					l_sickness_days:=l_sickness_days+l_duration;
1306 
1307 					l_sickness_last_date:=c_abs.date_end;
1308 
1309 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1310 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1311 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1312 					CLOSE csr_check_override;
1313 
1314 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1315 
1316 						--sickness pay hours calculation
1317 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1318 							( p_assignment_id, l_hours, l_include_event,
1319 							greatest(p_pay_start_date,c_abs.date_start), c_abs.date_end, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1320 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1321 							l_end_time_char)),':','.'), l_wrk_duration
1322 							);
1323 
1324 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1325 
1326 					ELSE
1327 
1328 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1329 						l_override_sickness_pay_hours:=-1;
1330 					END IF;
1331 					/* Calculating the Sick Pay days less than 14 days*/
1332 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1333 							( p_assignment_id, l_days, l_include_event,
1334 							greatest(p_pay_start_date,c_abs.date_start), c_abs.date_end, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1335 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1336 							l_end_time_char)),':','.'), l_wrk_duration
1337 							);
1338 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1339 
1340 				--if the period falls across 14 days
1341 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
1342 
1343 					l_fourteenth_difference:=13-l_sickness_14_below_days;
1344 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1345 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1346 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1347 
1348 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1349 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1350 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1351 					CLOSE csr_check_override;
1352 
1353 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1354 
1355 						--check whether the end period for 14 days fall within payroll period
1356 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
1357 
1358 							--sickness pay hours calculation
1359 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1360 								( p_assignment_id, l_hours, l_include_event,
1361 								greatest(p_pay_start_date,c_abs.date_start), (c_abs.date_start + 14-(l_sickness_days+1)),
1362 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1363 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_duration
1364 								);
1365 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_duration;
1366 						END IF;
1367 					ELSE
1368 
1369 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1370 						l_override_sickness_pay_hours:=-1;
1371 					END IF;
1372 					/* Calculating the Sick Pay days less than 14 days*/
1373 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1374 								( p_assignment_id, l_days, l_include_event,
1375 								greatest(p_pay_start_date,c_abs.date_start), (c_abs.date_start + 14-(l_sickness_days+1)),
1376 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1377 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_duration
1378 								);
1379 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1380 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1381 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1382 						FETCH csr_check_override INTO l_override_sickness_days;
1383 					CLOSE csr_check_override;
1384 
1385 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1386 						--sickness pay hours calculation
1387 
1388 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1389 							( p_assignment_id, l_hours, l_include_event,
1390 							greatest((c_abs.date_start + 14-l_sickness_days+1),p_pay_start_date) ,
1391 							c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1392 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1393 							);
1394 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1395 
1396 
1397 					ELSE
1398 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
1399 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1400 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1401 						l_override_sickness_pay_hours:=-1;
1402 					END IF;
1403 
1404 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1405 				--sickness days greater than 14 days
1406 				ELSE
1407 
1408 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1409 					l_sickness_days:=l_sickness_days+l_duration;
1410 
1411 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1412 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1413 						FETCH csr_check_override INTO l_override_sickness_days;
1414 					CLOSE csr_check_override;
1415 
1416 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1417 
1418 						--sickness pay hours calculation
1419 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1420 							( p_assignment_id, l_hours, l_include_event,
1421 							greatest(p_pay_start_date,c_abs.date_start), c_abs.date_start,
1422 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1423 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1424 							);
1425 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1426 
1427 					ELSE
1428 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
1429 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1430 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1431 						l_override_sickness_pay_hours:=-1;
1432 					END IF;
1433 
1434 				END IF;
1435 			END IF;
1436 		--if the absence start date falls in previous period and absence end date falls in
1437 		--next payroll period
1438 		ELSIF c_abs.date_start<p_pay_start_date AND c_abs.date_end>p_pay_end_date THEN
1439 
1440 			--first entry need to check for waiting day
1441 			IF l_loop_entered=0 THEN
1442 
1443 				l_waiting_date:=GET_WAITING_DAY(p_assignment_id,c_abs.date_start,c_abs.date_end);
1444 				l_group_start_date:=l_waiting_date;
1445 				--Sickness days calculation
1446 				l_duration:=c_abs.date_end-l_waiting_date+1;
1447 				--if the sickness days is less than 14 days then
1448 				IF (l_sickness_days+l_duration)<14 THEN
1449 
1450 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1451 					l_sickness_days:=l_sickness_days+l_duration;
1452 
1453 					l_sickness_last_date:=c_abs.date_end;
1454 
1455 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1456 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1457 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1458 					CLOSE csr_check_override;
1459 
1460 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1461 
1462 						--sickness pay hours calculation
1463 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1464 							( p_assignment_id, l_hours, l_include_event,
1465 							greatest(p_pay_start_date,l_waiting_date+1), p_pay_end_date, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1466 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1467 							l_end_time_char)),':','.'), l_wrk_duration
1468 							);
1469 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1470 
1471 					ELSE
1472 
1473 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1474 						l_override_sickness_pay_hours:=-1;
1475 					END IF;
1476 					/* Calculating the Sick Pay days less than 14 days*/
1477 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1478 							( p_assignment_id, l_days, l_include_event,
1479 							greatest(p_pay_start_date,l_waiting_date+1), p_pay_end_date, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1480 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1481 							l_end_time_char)),':','.'), l_wrk_duration
1482 							);
1483 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1484 				--if the period falls across 14 days
1485 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>=14) THEN
1486 
1487 					--l_fourteenth_difference:=14-l_sickness_14_below_days;
1488 					--l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1489 					l_fourteenth_date:=l_waiting_date+13;
1490 
1491 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1492 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1493 					--l_sickness_14_below_days:=14;
1494 					--l_sickness_above_14_days:=(l_duration-14);
1495 
1496 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1497 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1498 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1499 					CLOSE csr_check_override;
1500 
1501 					IF l_override_sickness_pay_hours = -1 or l_override_sickness_pay_hours is null THEN
1502 						--check whether the end period for 14 days fall within payroll period
1503 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
1504 
1505 							--sickness pay hours calculation
1506 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1507 								( p_assignment_id, l_hours, l_include_event,
1508 								greatest(p_pay_start_date,l_waiting_date+1), (c_abs.date_start + 14-(l_sickness_days+1+(c_abs.date_end-p_pay_end_date))),
1509 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1510 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1511 								);
1512 
1513 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1514 						END IF;
1515 					ELSE
1516 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1517 						l_override_sickness_pay_hours:=-1;
1518 					END IF;
1519 					/* Calculating the Sick Pay days less than 14 days*/
1520 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1521 								( p_assignment_id, l_days, l_include_event,
1522 								greatest(p_pay_start_date,l_waiting_date+1), (c_abs.date_start + 14-(l_sickness_days+1+(c_abs.date_end-p_pay_end_date))),
1523 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1524 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1525 								);
1526 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1527 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1528 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1529 						FETCH csr_check_override INTO l_override_sickness_days;
1530 					CLOSE csr_check_override;
1531 
1532 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL  THEN
1533 
1534 						--sickness pay hours calculation
1535 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1536 							( p_assignment_id, l_hours, l_include_event,
1537 							greatest((l_waiting_date + 14-(l_sickness_days)),p_pay_start_date) ,
1538 							p_pay_end_date,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1539 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1540 							);
1541 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1542 
1543 					ELSE
1544 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
1545 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1546 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1547 						l_override_sickness_pay_hours:=-1;
1548 					END IF;
1549 
1550 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1551 
1552 				--sickness days greater than 14 days
1553 ELSE
1554 
1555 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1556 					l_sickness_days:=l_sickness_days+l_duration;
1557 
1558 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1559 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1560 						FETCH csr_check_override INTO l_override_sickness_days;
1561 					CLOSE csr_check_override;
1562 
1563 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1564 
1565 						--sickness pay hours calculation
1566 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1567 							( p_assignment_id, l_hours, l_include_event,
1568 							greatest(p_pay_start_date,l_waiting_date+1), p_pay_end_date,
1569 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1570 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1571 							);
1572 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1573 
1574 
1575 					ELSE
1576 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
1577 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1578 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1579 						l_override_sickness_pay_hours:=-1;
1580 					END IF;
1581 
1582 				END IF;
1583 				IF l_waiting_date>=p_pay_start_date THEN
1584 				    --Checking Override input value for waiting day
1585 				    OPEN csr_check_override (p_assignment_id,p_effective_date,'Override Waiting Day in Hours',c_abs.date_start, c_abs.date_end);
1586 					   FETCH csr_check_override INTO l_override_waiting_hours;
1587 				    CLOSE csr_check_override;
1588 
1589 				    IF l_override_waiting_hours =-1 OR l_override_waiting_hours IS NULL THEN
1590 					IF (l_waiting_date<>c_abs.date_end) THEN
1591 					   l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1592 						  ( p_assignment_id, l_hours, l_include_event,
1593 						  l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1594 						  nvl(l_normal_time_start,l_start_time_char)),':','.'),
1595 						  replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_duration
1596 						  );
1597 					ELSE
1598 					   l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1599 						  ( p_assignment_id, l_hours, l_include_event,
1600 						  l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1601 						  nvl(l_normal_time_start,l_start_time_char)),':','.'),
1602 						  replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
1603 						  );
1604 					END IF;
1605 					   l_waiting_day_hours:=l_wrk_duration;
1606 
1607 				    ELSE
1608 
1609 					   l_waiting_day_hours:=l_override_waiting_hours;
1610 					   l_override_waiting_hours:=-1;
1611 				    END IF;
1612                 ELSE
1613                     l_waiting_day_hours:=0;
1614                 END IF;
1615 
1616 			ELSE
1617 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
1618 				--if the sickness days is less than 14 days then
1619 				IF (l_sickness_days+l_duration)<=14 THEN
1620 
1621 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1622 					l_sickness_days:=l_sickness_days+l_duration;
1623 
1624 					l_sickness_last_date:=c_abs.date_end;
1625 
1626 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1627 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1628 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1629 					CLOSE csr_check_override;
1630 
1631 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1632 						--sickness pay hours calculation
1633 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1634 							( p_assignment_id, l_hours, l_include_event,
1635 							greatest(p_pay_start_date,c_abs.date_start), p_pay_end_date, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1636 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1637 							l_end_time_char)),':','.'), l_wrk_duration
1638 							);
1639 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1640 
1641 					ELSE
1642 
1643 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1644 						l_override_sickness_pay_hours:=-1;
1645 					END IF;
1646 					/* Calculating the Sick Pay days less than 14 days*/
1647 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1648 							( p_assignment_id, l_days, l_include_event,
1649 							greatest(p_pay_start_date,c_abs.date_start), p_pay_end_date, replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1650 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
1651 							l_end_time_char)),':','.'), l_wrk_duration
1652 							);
1653 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1654 				--if the period falls across 14 days
1655 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
1656 
1657 					l_fourteenth_difference:=13-l_sickness_14_below_days;
1658 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1659 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1660 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1661 
1662 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1663 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1664 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1665 					CLOSE csr_check_override;
1666 
1667 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1668 						--check whether the end period for 14 days fall within payroll period
1669 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
1670 
1671 							--sickness pay hours calculation
1672 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1673 								( p_assignment_id, l_hours, l_include_event,
1674 								greatest(p_pay_start_date,c_abs.date_start), (c_abs.date_start + 14-(l_sickness_days+1)),
1675 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1676 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1677 								);
1678 
1679 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1680 						END IF;
1681 					ELSE
1682 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1683 						l_override_sickness_pay_hours:=-1;
1684 					END IF;
1685 					/* Calculating the Sick Pay days less than 14 days*/
1686 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1687 								( p_assignment_id, l_days, l_include_event,
1688 								greatest(p_pay_start_date,c_abs.date_start), (c_abs.date_start + 14-(l_sickness_days+1)),
1689 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1690 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1691 								);
1692 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1693 
1694 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1695 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1696 						FETCH csr_check_override INTO l_override_sickness_days;
1697 					CLOSE csr_check_override;
1698 
1699 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1700 
1701 						--sickness pay hours calculation
1702 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1703 							( p_assignment_id, l_hours, l_include_event,
1704 							greatest((c_abs.date_start + 14-l_sickness_days+1),p_pay_start_date) ,
1705 							p_pay_end_date,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1706 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1707 							);
1708 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1709 
1710 					ELSE
1711 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
1712 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1713 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1714 						l_override_sickness_pay_hours:=-1;
1715 					END IF;
1716 
1717 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1718 
1719 				--sickness days greater than 14 days
1720 				ELSE
1721 
1722 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1723 					l_sickness_days:=l_sickness_days+l_duration;
1724 
1725 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1726 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1727 						FETCH csr_check_override INTO l_override_sickness_days;
1728 					CLOSE csr_check_override;
1729 
1730 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1731 
1732 						--sickness pay hours calculation
1733 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1734 							( p_assignment_id, l_hours, l_include_event,
1735 							greatest(p_pay_start_date,c_abs.date_start), p_pay_end_date,
1736 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1737 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1738 							);
1739 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1740 
1741 
1742 					ELSE
1743 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
1744 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1745 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1746 						l_override_sickness_pay_hours:=-1;
1747 					END IF;
1748 
1749 				END IF;
1750 			END IF;
1751 		--if absence start date falls in the current payroll period and the absence end date
1752 		--falls in next payroll period
1753 		ELSIF c_abs.date_start > p_pay_start_date AND c_abs.date_end > p_pay_end_date THEN
1754 
1755 			--first entry need to check for waiting day
1756 
1757 			IF l_loop_entered=0 THEN
1758 
1759 				l_waiting_date:=GET_WAITING_DAY(p_assignment_id,c_abs.date_start,c_abs.date_end);
1760 				l_group_start_date:=l_waiting_date;
1761 				--Sickness days calculation
1762 				--l_duration:=c_abs.date_end-l_waiting_date;
1763 				l_duration:=least(c_abs.date_end,p_pay_end_date)-l_waiting_date+1;
1764 				--if the sickness days is less than 14 days then
1765 				IF (l_sickness_days+l_duration)<14 THEN
1766 
1767 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1768 					l_sickness_days:=l_sickness_days+l_duration;
1769 
1770 					l_sickness_last_date:=c_abs.date_end;
1771 
1772 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1773 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1774 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1775 					CLOSE csr_check_override;
1776 
1777 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1778 						IF l_waiting_date<p_pay_end_date THEN
1779 							--sickness pay hours calculation
1780 
1781 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1782 								( p_assignment_id, l_hours, l_include_event,
1783 								(l_waiting_date+1),p_pay_end_date, replace(nvl(l_normal_time_start,
1784 								l_start_time_char),':','.'),replace(nvl(l_normal_time_end,
1785 								l_end_time_char),':','.'), l_wrk_duration
1786 								);
1787 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1788 
1789 						END IF;
1790 					ELSE
1791 
1792 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1793 						l_override_sickness_pay_hours:=-1;
1794 					END IF;
1795 					/* Calculating the Sick Pay days less than 14 days*/
1796 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1797 								( p_assignment_id, l_days, l_include_event,
1798 								(l_waiting_date+1),p_pay_end_date, replace(nvl(l_normal_time_start,
1799 								l_start_time_char),':','.'),replace(nvl(l_normal_time_end,
1800 								l_end_time_char),':','.'), l_wrk_duration
1801 								);
1802 
1803 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1804 				--if the period falls across 14 days
1805 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>=14) THEN
1806 
1807 					--l_fourteenth_difference:=14-l_sickness_14_below_days;
1808 					--l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1809 					l_fourteenth_date:=l_waiting_date+13;
1810 
1811 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1812 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1813 
1814 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1815 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1816 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1817 					CLOSE csr_check_override;
1818 
1819 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1820 
1821 						--check whether the end period for 14 days fall within payroll period
1822 						/*IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date then*/
1823 							--sickness pay hours calculation
1824 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1825 								( p_assignment_id, l_hours, l_include_event,
1826 								l_waiting_date+1, least((l_waiting_date + 14-(l_sickness_days+1)),p_pay_end_date),
1827 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1828 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1829 								);
1830 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1831 
1832 						/*END IF;*/
1833 					ELSE
1834 
1835 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1836 						l_override_sickness_pay_hours:=-1;
1837 					END IF;
1838 					/* Calculating the Sick Pay days less than 14 days*/
1839 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1840 								( p_assignment_id, l_days, l_include_event,
1841 								l_waiting_date+1, least((l_waiting_date + 14-(l_sickness_days+1)),p_pay_end_date),
1842 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1843 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1844 								);
1845 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1846 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1847 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1848 						FETCH csr_check_override INTO l_override_sickness_days;
1849 					CLOSE csr_check_override;
1850 
1851 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1852 						IF (l_waiting_date + 14-l_sickness_days+1)<=p_pay_end_date THEN
1853 
1854 							--sickness pay hours calculation
1855 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1856 								( p_assignment_id, l_hours, l_include_event,
1857 								(l_waiting_date + 14-l_sickness_days+1),
1858 								p_pay_end_date,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1859 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1860 								);
1861 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1862 
1863 							END IF;
1864 					ELSE
1865 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
1866 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1867 
1868 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1869 						l_override_sickness_pay_hours:=-1;
1870 					END IF;
1871 
1872 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
1873 
1874 				--sickness days greater than 14 days
1875 				ELSE
1876 
1877 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
1878 					l_sickness_days:=l_sickness_days+l_duration;
1879 
1880 					--Checking Override input value for Sick Pay Days above 14 days in Hours
1881 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
1882 						FETCH csr_check_override INTO l_override_sickness_days;
1883 					CLOSE csr_check_override;
1884 
1885 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
1886 						IF l_waiting_date < p_pay_end_date THEN
1887 
1888 							--sickness pay hours calculation
1889 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1890 								( p_assignment_id, l_hours, l_include_event,
1891 								least(p_pay_start_date,l_waiting_date+1), p_pay_end_date,
1892 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
1893 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
1894 								);
1895 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
1896 
1897 						END IF;
1898 					ELSE
1899 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
1900 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
1901 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
1902 						l_override_sickness_pay_hours:=-1;
1903 					END IF;
1904 
1905 				END IF;
1906 				--Checking Override input value for waiting day
1907 				OPEN csr_check_override (p_assignment_id,p_effective_date,'Override Waiting Day in Hours',c_abs.date_start, c_abs.date_end);
1908 					FETCH csr_check_override INTO l_override_waiting_hours;
1909 				CLOSE csr_check_override;
1910 
1911 				IF (l_override_waiting_hours =-1 OR l_override_waiting_hours IS NULL ) AND (l_waiting_date<=p_pay_end_date) THEN
1912 
1913 					if (l_waiting_date<>c_abs.date_end) then
1914 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1915 							( p_assignment_id, l_hours, l_include_event,
1916 							l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1917 							nvl(l_normal_time_start,l_start_time_char)),':','.'),
1918 							replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1919 							);
1920 					ELSE
1921 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1922 							( p_assignment_id, l_hours, l_include_event,
1923 							  l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
1924 							  nvl(l_normal_time_start,l_start_time_char)),':','.'),
1925 							  replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
1926 							  );
1927 					END IF;
1928 					l_waiting_day_hours:=l_wrk_duration;
1929 
1930 				ELSE
1931 					l_waiting_day_hours:=l_override_waiting_hours;
1932 					l_override_waiting_hours:=-1;
1933 				END IF;
1934 
1935 			ELSE
1936 			l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
1937 				--if the sickness days is less than 14 days then
1938 				IF (l_sickness_days+l_duration)<=14 THEN
1939 
1940 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
1941 					l_sickness_days:=l_sickness_days+l_duration;
1942 
1943 					l_sickness_last_date:=c_abs.date_end;
1944 
1945 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1946 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1947 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1948 					CLOSE csr_check_override;
1949 
1950 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1951 						IF l_waiting_date<p_pay_end_date THEN
1952 							--sickness pay hours calculation
1953 
1954 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1955 								( p_assignment_id, l_hours, l_include_event,
1956 								(c_abs.date_start),p_pay_end_date, replace(nvl(l_normal_time_start,
1957 								l_start_time_char),':','.'),replace(nvl(l_normal_time_end,
1958 								l_end_time_char),':','.'), l_wrk_duration
1959 								);
1960 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
1961 
1962 						END IF;
1963 					ELSE
1964 
1965 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
1966 						l_override_sickness_pay_hours:=-1;
1967 					END IF;
1968 					/* Calculating the Sick Pay days less than 14 days*/
1969 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1970 								( p_assignment_id, l_days, l_include_event,
1971 								(c_abs.date_start),p_pay_end_date, replace(nvl(l_normal_time_start,
1972 								l_start_time_char),':','.'),replace(nvl(l_normal_time_end,
1973 								l_end_time_char),':','.'), l_wrk_duration
1974 								);
1975 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
1976 				--if the period falls across 14 days
1977 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
1978 
1979 					l_fourteenth_difference:=13-l_sickness_14_below_days;
1980 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
1981 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
1982 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
1983 
1984 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
1985 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
1986 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
1987 					CLOSE csr_check_override;
1988 
1989 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
1990 
1991 						--check whether the end period for 14 days fall within payroll period
1992 						/*IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date then*/
1993 							--sickness pay hours calculation
1994 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
1995 								( p_assignment_id, l_hours, l_include_event,
1996 								c_abs.date_start, least((c_abs.date_start + 14-(l_sickness_days+1)),p_pay_end_date),
1997 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
1998 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
1999 								);
2000 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2001 
2002 						/*END IF;*/
2003 					ELSE
2004 
2005 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2006 						l_override_sickness_pay_hours:=-1;
2007 					END IF;
2008 					/* Calculating the Sick Pay days less than 14 days*/
2009 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2010 								( p_assignment_id, l_days, l_include_event,
2011 								c_abs.date_start, least((c_abs.date_start + 14-(l_sickness_days+1)),p_pay_end_date),
2012 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2013 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2014 								);
2015 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2016 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2017 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2018 						FETCH csr_check_override INTO l_override_sickness_days;
2019 					CLOSE csr_check_override;
2020 
2021 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2022 						IF (l_waiting_date + 14-l_sickness_days+1)<=p_pay_end_date THEN
2023 
2024 							--sickness pay hours calculation
2025 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2026 								( p_assignment_id, l_hours, l_include_event,
2027 								(c_abs.date_start + 14-l_sickness_days+1),
2028 								p_pay_end_date,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2029 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2030 								);
2031 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2032 
2033 
2034 							END IF;
2035 					ELSE
2036 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2037 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2038 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2039 						l_override_sickness_pay_hours:=-1;
2040 					END IF;
2041 
2042 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2043 
2044 				--sickness days greater than 14 days
2045 				ELSE
2046 
2047 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2048 					l_sickness_days:=l_sickness_days+l_duration;
2049 
2050 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2051 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2052 						FETCH csr_check_override INTO l_override_sickness_days;
2053 					CLOSE csr_check_override;
2054 
2055 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2056 						IF l_waiting_date < p_pay_end_date THEN
2057 
2058 							--sickness pay hours calculation
2059 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2060 								( p_assignment_id, l_hours, l_include_event,
2061 								least(p_pay_start_date,c_abs.date_start), p_pay_end_date,
2062 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2063 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2064 								);
2065 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2066 
2067 
2068 						END IF;
2069 					ELSE
2070 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2071 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2072 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2073 						l_override_sickness_pay_hours:=-1;
2074 					END IF;
2075 
2076 				END IF;
2077 			END IF;
2078 		--if the absence falls within the payroll period
2079 	   	ELSE
2080 
2081 			--first entry need to check for waiting day
2082 			IF l_loop_entered=0 THEN
2083 
2084 				l_waiting_date:=GET_WAITING_DAY(p_assignment_id,c_abs.date_start,c_abs.date_end);
2085 				l_group_start_date:=l_waiting_date;
2086 				--Sickness days calculation
2087 				l_duration:=c_abs.date_end-l_waiting_date+1;
2088 				--if the sickness days is less than 14 days then
2089 				IF (l_sickness_days+l_duration)<14 THEN
2090 
2091 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2092 					l_sickness_days:=l_sickness_days+l_duration;
2093 
2094 					l_sickness_last_date:=c_abs.date_end;
2095 
2096 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2097 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2098 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2099 					CLOSE csr_check_override;
2100 
2101 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2102 						/*IF l_waiting_day<p_pay_end_date THEN */
2103 							--sickness pay hours calculation
2104 
2105 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2106 								( p_assignment_id, l_hours, l_include_event,
2107 								(l_waiting_date+1),c_abs.date_end, replace(nvl(l_normal_time_start,
2108 								l_start_time_char),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2109 								l_end_time_char)),':','.'), l_wrk_duration
2110 								);
2111 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2112 
2113 						/*END IF;*/
2114 					ELSE
2115 
2116 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2117 						l_override_sickness_pay_hours:=-1;
2118 					END IF;
2119 					/* Calculating the Sick Pay days less than 14 days*/
2120 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2121 								( p_assignment_id, l_days, l_include_event,
2122 								(l_waiting_date+1),c_abs.date_end, replace(nvl(l_normal_time_start,
2123 								l_start_time_char),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2124 								l_end_time_char)),':','.'), l_wrk_duration
2125 								);
2126  				        l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2127 				--if the period falls across 14 days
2128 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>=14) THEN
2129 
2130 					--l_fourteenth_difference:=14-l_sickness_14_below_days;
2131 					--l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2132 					l_fourteenth_date:=l_waiting_date+13;
2133 
2134 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2135 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
2136 
2137 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2138 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2139 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2140 					CLOSE csr_check_override;
2141 
2142 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2143 
2144 						--check whether the end period for 14 days fall within payroll period
2145 						/*IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date then*/
2146 							--sickness pay hours calculation
2147 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2148 								( p_assignment_id, l_hours, l_include_event,
2149 								l_waiting_date+1, least(l_fourteenth_date/*(l_waiting_date + 14-(l_sickness_days+1))*/,p_pay_end_date),
2150 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2151 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2152 								);
2153 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2154 
2155 						/*END IF;*/
2156 					ELSE
2157 
2158 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2159 						l_override_sickness_pay_hours:=-1;
2160 					END IF;
2161 				       /* Calculating the Sick Pay days less than 14 days*/
2162 				       l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2163 								( p_assignment_id, l_days, l_include_event,
2164 								l_waiting_date+1, least(l_fourteenth_date/*(l_waiting_date + 14-(l_sickness_days+1))*/,p_pay_end_date),
2165 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2166 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2167 								);
2168 				       l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2169 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2170 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2171 						FETCH csr_check_override INTO l_override_sickness_days;
2172 					CLOSE csr_check_override;
2173 
2174 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2175 
2176 						/*IF (l_waiting_day + 14-l_sickness_days+1)<=p_pay_end_date THEN */
2177 							--sickness pay hours calculation
2178 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2179 								( p_assignment_id, l_hours, l_include_event,
2180 								(l_fourteenth_date+1/*l_waiting_date + 14-l_sickness_days+1*/),
2181 								c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2182 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2183 								);
2184 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2185 
2186 						/*END IF;*/
2187 					ELSE
2188 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2189 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2190 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2191 						l_override_sickness_pay_hours:=-1;
2192 					END IF;
2193 
2194 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2195 				--sickness days greater than 14 days
2196 				ELSE
2197 
2198 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2199 					l_sickness_days:=l_sickness_days+l_duration;
2200 
2201 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2202 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2203 						FETCH csr_check_override INTO l_override_sickness_days;
2204 
2205 
2206 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2207 						IF l_waiting_date < p_pay_end_date THEN
2208 
2209 							--sickness pay hours calculation
2210 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2211 								( p_assignment_id, l_hours, l_include_event,
2212 								(l_waiting_date+1), c_abs.date_end,
2213 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2214 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2215 								);
2216 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2217 
2218 						END IF;
2219 					ELSE
2220 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2221 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2222 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2223 						l_override_sickness_pay_hours:=-1;
2224 					END IF;
2225 
2226 				END IF;
2227 				--Checking Override input value for waiting day
2228 				OPEN csr_check_override (p_assignment_id,p_effective_date,'Override Waiting Day in Hours',c_abs.date_start, c_abs.date_end);
2229 					FETCH csr_check_override INTO l_override_waiting_hours;
2230 				CLOSE csr_check_override;
2231 
2232 				IF (l_override_waiting_hours =-1 OR l_override_waiting_hours IS NULL) AND (l_waiting_date<=p_pay_end_date) THEN
2233 					IF (l_waiting_date<>c_abs.date_end) THEN
2234 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2235 							( p_assignment_id, l_hours, l_include_event,
2236 							l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
2237 							nvl(l_normal_time_start,l_start_time_char)),':','.'),
2238 							replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2239 							);
2240 					ELSE
2241 
2242 					   l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2243 						( p_assignment_id, l_hours, l_include_event,
2244 						l_waiting_date, l_waiting_date, replace(nvl(c_abs.time_start,
2245 						nvl(l_normal_time_start,l_start_time_char)),':','.'),
2246 						replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
2247 						);
2248 					END IF;
2249 
2250 					l_waiting_day_hours:=l_wrk_duration;
2251 
2252 				ELSE
2253 
2254 					l_waiting_day_hours:=l_override_waiting_hours;
2255 					l_override_waiting_hours:=-1;
2256 				END IF;
2257 
2258 			ELSE
2259 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
2260 				--if the sickness days is less than 14 days then
2261 				IF (l_sickness_days+l_duration)<=14 THEN
2262 
2263 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2264 					l_sickness_days:=l_sickness_days+l_duration;
2265 
2266 					l_sickness_last_date:=c_abs.date_end;
2267 
2268 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2269 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2270 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2271 					CLOSE csr_check_override;
2272 
2273 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2274 						/*IF l_waiting_day<p_pay_end_date THEN */
2275 							--sickness pay hours calculation
2276 
2277 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2278 								( p_assignment_id, l_hours, l_include_event,
2279 								(c_abs.date_start),c_abs.date_end, replace(nvl(l_normal_time_start,
2280 								l_start_time_char),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2281 								l_end_time_char)),':','.'), l_wrk_duration
2282 								);
2283 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2284 
2285 						/*END IF;*/
2286 					ELSE
2287 
2288 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2289 						l_override_sickness_pay_hours:=-1;
2290 					END IF;
2291 					/* Calculating the Sick Pay days less than 14 days*/
2292 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2293 								( p_assignment_id, l_days, l_include_event,
2294 								(c_abs.date_start),c_abs.date_end, replace(nvl(l_normal_time_start,
2295 								l_start_time_char),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2296 								l_end_time_char)),':','.'), l_wrk_duration
2297 								);
2298 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2299 				--if the period falls across 14 days
2300 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2301 
2302 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2303 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2304 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2305 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration)-14);
2306 
2307 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2308 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2309 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2310 					CLOSE csr_check_override;
2311 
2312 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2313 
2314 						--check whether the end period for 14 days fall within payroll period
2315 						/*IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date then*/
2316 							--sickness pay hours calculation
2317 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2318 								( p_assignment_id, l_hours, l_include_event,
2319 								c_abs.date_start, least(l_fourteenth_date/*(c_abs.date_start + 14-(l_sickness_days+2))*/,p_pay_end_date),
2320 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2321 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2322 								);
2323 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2324 
2325 						/*END IF;*/
2326 					ELSE
2327 
2328 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2329 						l_override_sickness_pay_hours:=-1;
2330 					END IF;
2331 					/* Calculating the Sick Pay days less than 14 days*/
2332 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2333 								( p_assignment_id, l_days, l_include_event,
2334 								c_abs.date_start, least(l_fourteenth_date/*(c_abs.date_start + 14-(l_sickness_days+2))*/,p_pay_end_date),
2335 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2336 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2337 								);
2338 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2339 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2340 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2341 						FETCH csr_check_override INTO l_override_sickness_days;
2342 					CLOSE csr_check_override;
2343 
2344 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2345 
2346 						/*IF (l_waiting_day + 14-l_sickness_days+1)<=p_pay_end_date THEN */
2347 							--sickness pay hours calculation
2348 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2349 								( p_assignment_id, l_hours, l_include_event,
2350 								(l_fourteenth_date/*c_abs.date_start + 14-l_sickness_days+2*/),
2351 								c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2352 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2353 								);
2354 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2355 
2356 						/*END IF;*/
2357 					ELSE
2358 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2359 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2360 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2361 						l_override_sickness_pay_hours:=-1;
2362 					END IF;
2363 
2364 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2365 				--sickness days greater than 14 days
2366 				ELSE
2367 
2368 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2369 					l_sickness_days:=l_sickness_days+l_duration;
2370 
2371 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2372 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2373 						FETCH csr_check_override INTO l_override_sickness_days;
2374 					CLOSE csr_check_override;
2375 
2376 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2377 						IF l_waiting_date < p_pay_end_date THEN
2378 
2379 							--sickness pay hours calculation
2380 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2381 								( p_assignment_id, l_hours, l_include_event,
2382 								(c_abs.date_start), c_abs.date_end,
2383 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2384 								nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2385 								);
2386 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2387 
2388 						END IF;
2389 					ELSE
2390 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2391 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2392 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2393 						l_override_sickness_pay_hours:=-1;
2394 					END IF;
2395 
2396 			    END IF;
2397 			END IF;
2398 		END IF;
2399    		l_loop_entered:=1;
2400 	END LOOP;
2401 	ELSE
2402 		FOR c_abs IN csr_absence(l_person_id) LOOP
2403 			IF l_loop_entered=0 THEN
2404 			     l_group_start_date:=c_abs.date_start;
2405 			END IF;
2406 			--if the absence ends before the payroll start date
2407 			IF c_abs.date_end <p_pay_start_date THEN
2408 
2409 				--Sickness day calculation
2410 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
2411 
2412 				--if the sickness days is less than 14 days then
2413 				IF (l_sickness_days+l_duration)<=14 THEN
2414 
2415 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2416 					l_sickness_days:=l_sickness_days+l_duration;
2417 
2418 					l_sickness_last_date:=c_abs.date_end;
2419 
2420 				--if the period falls across 14 days
2421 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2422 
2423 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2424 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2425 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2426 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration+1)-14);
2427 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2428 
2429 				--sickness days greater than 14 days
2430 				ELSE
2431 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2432 					l_sickness_days:=l_sickness_days+l_duration;
2433 				END IF;
2434 
2435 			--if the absence start date falls in previous payroll period
2436 			--and absence end date fall is current payroll period
2437 			ELSIF c_abs.date_start<p_pay_start_date AND c_abs.date_end<p_pay_end_date THEN
2438 
2439 				--Sickness days calculation
2440 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
2441 
2442 				--if the sickness days is less than 14 days then
2443 				IF (l_sickness_days+l_duration)<=14 THEN
2444 
2445 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2446 					l_sickness_days:=l_sickness_days+l_duration;
2447 
2448 					l_sickness_last_date:=c_abs.date_end;
2449 
2450 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2451 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2452 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2453 					CLOSE csr_check_override;
2454 
2455 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2456 						--sickness pay hours calculation
2457 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2458 							( p_assignment_id, l_hours, l_include_event,
2459 							p_pay_start_date, c_abs.date_end, l_start_time_char,
2460 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2461 							l_end_time_char)),':','.'), l_wrk_duration
2462 							);
2463 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2464 					ELSE
2465 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2466 						l_override_sickness_pay_hours:=-1;
2467 					END IF;
2468 					/* Calculating the Sick Pay days less than 14 days*/
2469 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2470 							( p_assignment_id, l_days, l_include_event,
2471 							p_pay_start_date, c_abs.date_end, l_start_time_char,
2472 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end,
2473 							l_end_time_char)),':','.'), l_wrk_duration
2474 							);
2475 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2476 				--if the period falls across 14 days
2477 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2478 
2479 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2480 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2481 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2482 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration+1)-14);
2483 
2484 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2485 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2486 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2487 					CLOSE csr_check_override;
2488 
2489 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2490 
2491 						--check whether the end period for 14 days fall within payroll period
2492 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
2493 
2494 							--sickness pay hours calculation
2495 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2496 								( p_assignment_id, l_hours, l_include_event,
2497 								p_pay_start_date, (c_abs.date_start + 14-l_sickness_days),
2498 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2499 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2500 								);
2501 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2502 						END IF;
2503 					ELSE
2504 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2505 						l_override_sickness_pay_hours:=-1;
2506 					END IF;
2507 					/* Calculating the Sick Pay days less than 14 days*/
2508 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2509 								( p_assignment_id, l_days, l_include_event,
2510 								p_pay_start_date, (c_abs.date_start + 14-l_sickness_days),
2511 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2512 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2513 								);
2514 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2515 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2516 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2517 						FETCH csr_check_override INTO l_override_sickness_days;
2518 					CLOSE csr_check_override;
2519 
2520 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2521 
2522 						--sickness pay hours calculation
2523 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2524 							( p_assignment_id, l_hours, l_include_event,
2525 							greatest((c_abs.date_start + 14-l_sickness_days+1),p_pay_start_date) ,
2526 							c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2527 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2528 							);
2529 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2530 
2531 					ELSE
2532 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2533 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2534 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2535 						l_override_sickness_pay_hours:=-1;
2536 					END IF;
2537 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2538 
2539 				--sickness days greater than 14 days
2540 				ELSE
2541 
2542 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2543 					l_sickness_days:=l_sickness_days+l_duration;
2544 
2545 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2546 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2547 						FETCH csr_check_override INTO l_override_sickness_days;
2548 					CLOSE csr_check_override;
2549 
2550 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2551 
2552 						--sickness pay hours calculation
2553 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2554 							( p_assignment_id, l_hours, l_include_event,
2555 							p_pay_start_date, c_abs.date_start,
2556 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'), replace(nvl(c_abs.time_end,
2557 							nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2558 							);
2559 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2560 
2561 					ELSE
2562 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2563 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2564 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2565 						l_override_sickness_pay_hours:=-1;
2566 					END IF;
2567 
2568 				END IF;
2569 
2570 			--if the absence start date falls in previous period and absence end date falls in
2571 			--next payroll period
2572 			ELSIF c_abs.date_start<p_pay_start_date AND c_abs.date_end>p_pay_end_date THEN
2573 
2574 				--Sickness days calculation
2575 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
2576 
2577 				--if the sickness days is less than 14 days then
2578 				IF (l_sickness_days+l_duration)<=14 THEN
2579 
2580 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2581 					l_sickness_days:=l_sickness_days+l_duration;
2582 
2583 					l_sickness_last_date:=c_abs.date_end;
2584 
2585 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2586 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2587 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2588 					CLOSE csr_check_override;
2589 
2590 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2591 
2592 						--sickness pay hours calculation
2593 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2594 							( p_assignment_id, l_hours, l_include_event,
2595 							p_pay_start_date, p_pay_end_date, replace(nvl(l_normal_time_end,
2596 							l_start_time_char),':','.'),replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2597 							);
2598 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2599 					ELSE
2600 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2601 						l_override_sickness_pay_hours:=-1;
2602 					END IF;
2603 					/* Calculating the Sick Pay days less than 14 days*/
2604 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2605 							( p_assignment_id, l_days, l_include_event,
2606 							p_pay_start_date, p_pay_end_date, replace(nvl(l_normal_time_end,
2607 							l_start_time_char),':','.'),replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2608 							);
2609 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2610 				--if the period falls across 14 days
2611 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2612 
2613 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2614 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2615 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2616 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration+1)-14);
2617 
2618 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2619 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2620 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2621 					CLOSE csr_check_override;
2622 
2623 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2624 
2625 						--check whether the end period for 14 days fall within payroll period
2626 						IF (c_abs.date_start + 14-l_sickness_days) > p_pay_start_date THEN
2627 
2628 							--sickness pay hours calculation
2629 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2630 								( p_assignment_id, l_hours, l_include_event,
2631 								p_pay_start_date, (c_abs.date_start + 14-l_sickness_days),
2632 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2633 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2634 								);
2635 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2636 						END IF;
2637 					ELSE
2638 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2639 						l_override_sickness_pay_hours:=-1;
2640 					END IF;
2641 					/* Calculating the Sick Pay days less than 14 days*/
2642 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2643 								( p_assignment_id, l_days, l_include_event,
2644 								p_pay_start_date, (c_abs.date_start + 14-l_sickness_days),
2645 								replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2646 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2647 								);
2648 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2649 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2650 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2651 						FETCH csr_check_override INTO l_override_sickness_days;
2652 					CLOSE csr_check_override;
2653 
2654 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2655 
2656 						--sickness pay hours calculation
2657 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2658 							( p_assignment_id, l_hours, l_include_event,
2659 							greatest((c_abs.date_start + 14-l_sickness_days+1),p_pay_start_date) ,
2660 							c_abs.date_end,replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2661 							replace(nvl(l_normal_time_end, l_end_time_char),':','.'), l_wrk_duration
2662 							);
2663 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2664 
2665 					ELSE
2666 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2667 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2668 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2669 						l_override_sickness_pay_hours:=-1;
2670 					END IF;
2671 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2672 
2673 				--sickness days greater than 14 days
2674 				ELSE
2675 
2676 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2677 					l_sickness_days:=l_sickness_days+l_duration;
2678 
2679 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2680 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2681 						FETCH csr_check_override INTO l_override_sickness_days;
2682 					CLOSE csr_check_override;
2683 
2684 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2685 
2686 						--sickness pay hours calculation
2687 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2688 							( p_assignment_id, l_hours, l_include_event,
2689 							p_pay_start_date, p_pay_end_date,
2690 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2691 							replace(nvl(l_normal_time_end, l_end_time_char),':','.'), l_wrk_duration
2692 							);
2693 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2694 
2695 					ELSE
2696 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2697 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2698 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2699 						l_override_sickness_pay_hours:=-1;
2700 					END IF;
2701 
2702 				END IF;
2703 
2704 
2705 			--if absence start date falls in current payroll period and the absence end date
2706 			--falls in next payroll period
2707 			ELSIF c_abs.date_start > p_pay_start_date AND c_abs.date_end > p_pay_end_date THEN
2708 
2709 				--Sickness days calculation
2710 				l_duration:=least(c_abs.date_end,p_pay_end_date)-c_abs.date_start+1;
2711 
2712 				--if the sickness days is less than 14 days then
2713 				IF (l_sickness_days+l_duration)<=14 THEN
2714 
2715 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2716 					l_sickness_days:=l_sickness_days+l_duration;
2717 
2718 					l_sickness_last_date:=c_abs.date_end;
2719 
2720 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2721 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2722 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2723 					CLOSE csr_check_override;
2724 
2725 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2726 
2727 						--sickness pay hours calculation
2728 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2729 							( p_assignment_id, l_hours, l_include_event,
2730 							c_abs.date_start, p_pay_end_date, replace(nvl(l_normal_time_end,
2731 							l_start_time_char),':','.'),replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2732 							);
2733 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2734 					ELSE
2735 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2736 						l_override_sickness_pay_hours:=-1;
2737 					END IF;
2738 					/* Calculating the Sick Pay days less than 14 days*/
2739 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2740 							( p_assignment_id, l_days, l_include_event,
2741 							c_abs.date_start, p_pay_end_date, replace(nvl(l_normal_time_end,
2742 							l_start_time_char),':','.'),replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2743 							);
2744 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2745 				--if the period falls across 14 days
2746 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2747 
2748 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2749 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2750 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2751 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration+1)-14);
2752 
2753 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2754 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2755 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2756 					CLOSE csr_check_override;
2757 
2758 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2759 
2760 						--check whether the end period for 14 days fall within payroll period
2761 						/*IF (c_abs.date_start + 14-l_sickness_days) < p_pay_end_date then*/
2762 							--sickness pay hours calculation
2763 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2764 								( p_assignment_id, l_hours, l_include_event,
2765 								c_abs.date_start, least((c_abs.date_start + 14-l_sickness_days),
2766 								p_pay_end_date),replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2767 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2768 								);
2769 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2770 						/*END IF;*/
2771 					ELSE
2772 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2773 						l_override_sickness_pay_hours:=-1;
2774 					END IF;
2775 					/* Calculating the Sick Pay days less than 14 days*/
2776 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2777 								( p_assignment_id, l_days, l_include_event,
2778 								c_abs.date_start, least((c_abs.date_start + 14-l_sickness_days),
2779 								p_pay_end_date),replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2780 								replace(nvl(l_normal_time_end,l_end_time_char),':','.'), l_wrk_duration
2781 								);
2782 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2783 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2784 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2785 						FETCH csr_check_override INTO l_override_sickness_days;
2786 					CLOSE csr_check_override;
2787 
2788 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2789 
2790 						IF (c_abs.date_start + 14-l_sickness_days+1) < p_pay_end_date THEN
2791 							--sickness pay hours calculation
2792 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2793 								( p_assignment_id, l_hours, l_include_event,
2794 								c_abs.date_start + 14-l_sickness_days+1 ,
2795 								p_pay_end_date,replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2796 								replace(nvl(l_normal_time_end, l_end_time_char),':','.'), l_wrk_duration
2797 								);
2798 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2799 
2800 						END IF;
2801 					ELSE
2802 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2803 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2804 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2805 						l_override_sickness_pay_hours:=-1;
2806 					END IF;
2807 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2808 
2809 				--sickness days greater than 14 days
2810 				ELSE
2811 
2812 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2813 					l_sickness_days:=l_sickness_days+l_duration;
2814 
2815 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2816 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2817 						FETCH csr_check_override INTO l_override_sickness_days;
2818 					CLOSE csr_check_override;
2819 
2820 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2821 
2822 						--sickness pay hours calculation
2823 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2824 							( p_assignment_id, l_hours, l_include_event,
2825 							c_abs.date_start, p_pay_end_date,
2826 							replace(nvl(l_normal_time_start,l_start_time_char),':','.'),
2827 							replace(nvl(l_normal_time_end, l_end_time_char),':','.'), l_wrk_duration
2828 							);
2829 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2830 
2831 					ELSE
2832 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2833 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2834 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2835 						l_override_sickness_pay_hours:=-1;
2836 					END IF;
2837 
2838 				END IF;
2839 
2840 
2841 			--if the absence falls within the payroll period
2842 		   	ELSE
2843 
2844 				--Sickness days calculation
2845 				l_duration:=c_abs.date_end-c_abs.date_start+1;
2846 
2847 				--if the sickness days is less than 14 days then
2848 				IF (l_sickness_days+l_duration)<=14 THEN
2849 
2850 					l_sickness_14_below_days:=l_sickness_14_below_days+l_duration;
2851 					l_sickness_days:=l_sickness_days+l_duration;
2852 
2853 					l_sickness_last_date:=c_abs.date_end;
2854 
2855 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2856 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2857 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2858 					CLOSE csr_check_override;
2859 
2860 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2861 
2862 						--sickness pay hours calculation
2863 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2864 							( p_assignment_id, l_hours, l_include_event,
2865 							c_abs.date_start, c_abs.date_end, replace(nvl(c_abs.time_start,nvl(l_normal_time_end,
2866 							l_start_time_char)),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
2867 							);
2868 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2869 					ELSE
2870 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2871 						l_override_sickness_pay_hours:=-1;
2872 					END IF;
2873 					/* Calculating the Sick Pay days less than 14 days*/
2874 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2875 							( p_assignment_id, l_days, l_include_event,
2876 							c_abs.date_start, c_abs.date_end, replace(nvl(c_abs.time_start,nvl(l_normal_time_end,
2877 							l_start_time_char)),':','.'),replace(nvl(c_abs.time_end,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
2878 							);
2879 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2880 				--if the period falls across 14 days
2881 				ELSIF (l_sickness_days<=14) AND (l_sickness_days+l_duration>14) THEN
2882 
2883 					l_fourteenth_difference:=13-l_sickness_14_below_days;
2884 					l_fourteenth_date:=c_abs.date_start+l_fourteenth_difference;
2885 					l_sickness_14_below_days:=l_sickness_14_below_days+(14-l_sickness_days);
2886 					l_sickness_above_14_days:=l_sickness_above_14_days+(l_sickness_days+(l_duration+1)-14);
2887 
2888 					--Checking Override input value for Sick Pay Days 14 days and below in Hours
2889 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override below 14 day in Hour',c_abs.date_start, c_abs.date_end);
2890 						FETCH csr_check_override INTO l_override_sickness_pay_hours;
2891 					CLOSE csr_check_override;
2892 
2893 					IF l_override_sickness_pay_hours = -1 OR l_override_sickness_pay_hours IS NULL THEN
2894 
2895 						--check whether the end period for 14 days fall within payroll period
2896 						/*IF (c_abs.date_start + 14-l_sickness_days) < p_pay_end_date then*/
2897 							--sickness pay hours calculation
2898 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2899 								( p_assignment_id, l_hours, l_include_event,
2900 								c_abs.date_start, (c_abs.date_start + 14-l_sickness_days),
2901 								replace(nvl(c_abs.time_start,nvl(l_normal_time_start,l_start_time_char)),':','.'),
2902 								replace(nvl(c_abs.time_start,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
2903 								);
2904 							l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below + l_wrk_duration;
2905 						/*END IF;*/
2906 					ELSE
2907 						l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_override_sickness_pay_hours;
2908 						l_override_sickness_pay_hours:=-1;
2909 					END IF;
2910 					/* Calculating the Sick Pay days less than 14 days*/
2911 					l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2912 								( p_assignment_id, l_days, l_include_event,
2913 								c_abs.date_start, (c_abs.date_start + 14-l_sickness_days),
2914 								replace(nvl(c_abs.time_start,nvl(l_normal_time_start,l_start_time_char)),':','.'),
2915 								replace(nvl(c_abs.time_start,nvl(l_normal_time_end,l_end_time_char)),':','.'), l_wrk_duration
2916 								);
2917 					l_sick_pay_days_14_below_days:=l_sick_pay_days_14_below_days+ l_wrk_duration;
2918 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2919 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2920 						FETCH csr_check_override INTO l_override_sickness_days;
2921 					CLOSE csr_check_override;
2922 
2923 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2924 
2925 						/*IF (c_abs.date_start + 14-l_sickness_days+1) < p_pay_end_date THEN */
2926 							--sickness pay hours calculation
2927 							l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2928 								( p_assignment_id, l_hours, l_include_event,
2929 								c_abs.date_start + 14-l_sickness_days+1 ,c_abs.date_end,
2930 								replace(nvl(c_abs.time_start,nvl(l_normal_time_start,l_start_time_char)),':','.'),
2931 								replace(nvl(c_abs.time_end,nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2932 								);
2933 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2934 
2935 						/*END IF;*/
2936 					ELSE
2937 						l_sickness_above_14_days:=l_sickness_above_14_days-(l_sickness_days+(l_duration+1)-14);
2938 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2939 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2940 						l_override_sickness_pay_hours:=-1;
2941 					END IF;
2942 					l_sickness_days:=l_sickness_days+l_sickness_14_below_days+l_sickness_above_14_days;
2943 
2944 				--sickness days greater than 14 days
2945 				ELSE
2946 
2947 					l_sickness_above_14_days:=l_sickness_above_14_days+l_duration;
2948 					l_sickness_days:=l_sickness_days+l_duration;
2949 
2950 					--Checking Override input value for Sick Pay Days above 14 days in Hours
2951 					OPEN csr_check_override (p_assignment_id,p_effective_date,'Override beyond 14 day in Day',c_abs.date_start, c_abs.date_end);
2952 						FETCH csr_check_override INTO l_override_sickness_days;
2953 					CLOSE csr_check_override;
2954 
2955 					IF l_override_sickness_days = -1 OR l_override_sickness_days IS NULL THEN
2956 						--sickness pay hours calculation
2957 						l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
2958 							( p_assignment_id, l_hours, l_include_event,
2959 							c_abs.date_start, c_abs.date_end,
2960 							replace(nvl(c_abs.time_start,nvl(l_normal_time_start,l_start_time_char)),':','.'),
2961 							replace(nvl(c_abs.time_end,nvl(l_normal_time_end, l_end_time_char)),':','.'), l_wrk_duration
2962 							);
2963 							l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_wrk_duration;
2964 
2965 					ELSE
2966 						l_sickness_above_14_days:=l_sickness_above_14_days-l_duration;
2967 						l_sickness_above_14_days:=l_sickness_above_14_days+l_override_sickness_days;
2968 						l_sickness_pay_hours_above_14:=l_sickness_pay_hours_above_14 + l_override_sickness_pay_hours;
2969 						l_override_sickness_pay_hours:=-1;
2970 					END IF;
2971 
2972 				END IF;
2973 
2974 			END IF;
2975 		END LOOP;
2976 	END IF;
2977 
2978     /* Logic to change the Sick Pay and Sickness Deduction, if the waiting day has crossed  for bug 5718434 */
2979      /* Get the value from the balance */
2980     /*If balance value is less than 10 then waiting day can be one */
2981 
2982     pay_balance_pkg.set_context('ASSIGNMENT_ACTION_ID',p_assignment_action_id/*189398*/);
2983     OPEN  csr_Get_Defined_Balance_Id( 'TOTAL_WAITING_DAY_ASG_13MONTH');
2984 	FETCH csr_Get_Defined_Balance_Id INTO lr_Get_Defined_Balance_Id;
2985 
2986     CLOSE csr_Get_Defined_Balance_Id;
2987     l_value:=pay_balance_pkg.get_value(P_DEFINED_BALANCE_ID =>lr_Get_Defined_Balance_Id,
2988     P_ASSIGNMENT_ID => p_assignment_id, --22145,
2989     P_VIRTUAL_DATE=> p_pay_end_date/*TO_DATE('28-feb-2000')*/);
2990 
2991     /*If the balance value is greater than 10 then check from the run results,
2992     whether it has actually crossed 10 waiting days by run results*/
2993     IF l_value>=10 THEN
2994 
2995 	OPEN csr_element('Sick Pay 1 to 14 days');
2996 		FETCH csr_element INTO l_element_type_id;
2997 	CLOSE  csr_element;
2998 
2999 	OPEN csr_input(l_element_type_id,'Waiting Day');
3000 		FETCH csr_input INTO l_waiting_day_iv;
3001 	CLOSE csr_input;
3002 
3003 	OPEN csr_input(l_element_type_id,'Start Date');
3004 		FETCH csr_input INTO l_start_date_iv;
3005 	CLOSE csr_input;
3006 
3007 	OPEN csr_group_start_end_date(p_assignment_id,l_element_type_id,l_start_date_iv,l_waiting_day_iv,add_months(p_abs_start_date,-12),p_abs_start_date);
3008 		FETCH  csr_group_start_end_date INTO l_total_waiting_days;
3009 	CLOSE csr_group_start_end_date;
3010 
3011     --ELSE
3012 
3013     END IF;
3014     /*checking whether the total waiting days before one year is greater than 10 */
3015     IF l_total_waiting_days>=10 THEN
3016 	/* checking whether the absence has crossed 10 days */
3017 	IF  l_sickness_above_14_days >0 THEN
3018 		/* Increasing the sickness days above 14 by one */
3019 		--l_sickness_above_14_days:=l_sickness_above_14_days+1;
3020 		/* check whether it is one day absence, only waiting day */
3021 		IF l_sickness_pay_hours_14_below<>0  THEN
3022 			l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_waiting_day_hours;
3023 		END IF;
3024 		l_waiting_day_hours:=0;
3025 	ELSE
3026 		/*absence has not crossed 10 days */
3027 		/*Increasing the sick pay 1 to 14 day  hours by waiting day hours*/
3028 		/* check whether it is one day absence, only waiting day */
3029 		IF l_sickness_pay_hours_14_below<>0  THEN
3030 			l_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below+l_waiting_day_hours;
3031 		END IF;
3032 		l_waiting_day_hours:=0;
3033 	END IF;
3034     END IF;
3035 
3036     OPEN csr_element('Sick Pay after 14 days');
3037 		FETCH csr_element INTO l_element_type_id;
3038     CLOSE  csr_element;
3039     OPEN csr_input(l_element_type_id,'Sick Days in Period');
3040 		FETCH csr_input INTO l_input_type_id;
3041     CLOSE csr_input;
3042 
3043     /*OPEN csr_input(l_element_type_id,'Start Date');
3044 		FETCH csr_input INTO l_input_type_id2;
3045     CLOSE csr_input;
3046     hr_utility.set_location('l_input_type_id2'||l_input_type_id2,10);*/
3047     OPEN csr_global_value('SE_SICK_PAY_AFTER_14_DAYS_YEAR_LIMIT',p_effective_date);
3048 	FETCH csr_global_value INTO l_global_value;
3049     CLOSE csr_global_value;
3050 
3051     l_sick_after_14_year_limit:=l_global_value;
3052 
3053     /* Get the values from run results one year before the processing date */
3054     OPEN csr_run_result_value(p_assignment_id,l_element_type_id,l_input_type_id,add_months(p_effective_date,-12)+1,p_abs_start_date-1);
3055 	FETCH csr_run_result_value INTO l_sick_after_14_year_taken;
3056     CLOSE csr_run_result_value;
3057 /*    FOR csr_run IN csr_run_result_value(p_assignment_id,l_element_type_id,l_input_type_id1,l_input_type_id2,add_months(p_effective_date,-12)+1,p_abs_start_date-1) LOOP
3058 
3059     END LOOP;*/
3060 
3061 
3062     l_total_sick_after_14:=(l_sick_after_14_year_taken+l_sickness_above_14_days);
3063 
3064     IF l_total_sick_after_14 > l_sick_after_14_year_limit THEN
3065 	--l_sickness_above_14_days:=l_total_sick_after_14-l_sick_after_14_year_limit;
3066 	/* Bug 5985088 fix */
3067 	FOR csr_abs in csr_absence_period(p_assignment_id,p_pay_start_date,p_abs_end_date) LOOP
3068 		l_absence_period:=l_absence_period+(csr_abs.date_end-csr_abs.date_start +1);
3069 	END LOOP;
3070 
3071 	IF l_sick_after_14_year_taken>=l_sick_after_14_year_limit THEN
3072 	       p_sickness_after_14_days_month:=0;
3073 	ELSIF (l_total_sick_after_14-l_absence_period>= l_sick_after_14_year_limit) THEN
3074 	         p_sickness_after_14_days_month:=0;
3075    	         l_sickness_above_14_days:=0;
3076 	ELSE
3077  	   /*p_sickness_after_14_days_month:=(p_pay_end_date-p_pay_start_date+1)-(l_sickness_above_14_days-l_sick_after_14_year_limit);
3078   	   l_sickness_above_14_days:=l_sick_after_14_year_limit-l_sick_after_14_year_taken; */
3079 	   /*Fix for bug No. 5985088 */
3080 	   p_sickness_after_14_days_month:=(p_pay_end_date-p_pay_start_date+1)- (l_total_sick_after_14-l_sick_after_14_year_limit); --l_sick_after_14_year_taken; -- (l_sickness_above_14_days-l_sick_after_14_year_limit);
3081 	   /*If there is no absence before the current absence within the year*/
3082  	   IF l_sick_after_14_year_taken <>0 then
3083         	   l_sickness_above_14_days:=l_sick_after_14_year_limit-(l_total_sick_after_14-l_sick_after_14_year_limit)+1; --l_sick_after_14_year_taken;
3084 	   /*If there is absence before the current absence within the year*/
3085   	   ELSE
3086           	   l_sickness_above_14_days:=l_sick_after_14_year_limit; --l_sick_after_14_year_taken;
3087   	   END IF;
3088 
3089     end if;
3090 	p_exceeds_14_days:='Y';
3091     END IF;
3092     /* Check whether Sickness above 14 days exist, because when sickness is less than
3093     14 days also we have fourteenth date */
3094     --IF l_sickness_above_14_days > 0 THEN
3095 	    /* check whether the absence days has exceeded the limit*/
3096 	    /*If exceeded then same as l_sickness_above_14_days */
3097 	    IF p_exceeds_14_days IS NULL  THEN
3098 		    IF l_fourteenth_date IS NULL THEN
3099 
3100 
3101 			p_sickness_after_14_days_month:=GET_SICKNESS_AFTER_14_PERIOD(l_person_id,p_assignment_id,
3102 			p_pay_start_date,p_pay_end_date,p_pay_end_date);
3103 
3104 			--p_fourteenth_date:=l_sickness_last_date;
3105 		    ELSE
3106 
3107 			p_sickness_after_14_days_month:=GET_SICKNESS_AFTER_14_PERIOD(l_person_id,p_assignment_id,
3108 			p_pay_start_date,p_pay_end_date,l_fourteenth_date);
3109 
3110 
3111 		--	p_sickness_after_14_days_month:=GET_SICKNESS_AFTER_14_PERIOD(l_person_id,p_pay_start_date,
3112 		--	p_pay_end_date,p_fourteenth_date);
3113 		--	hr_utility.set_location('p_sickness_after_14_days_month'||p_sickness_after_14_days_month,10);
3114 		    END IF;
3115 		    /* Checking if l_sickness_above_14_days less than the days in period then
3116 		    assign it to days in the period*/
3117 	   /* ELSIF l_sickness_above_14_days <=(p_pay_start_date-P_pay_end_date) THEN
3118 		p_sickness_after_14_days_month:=l_sickness_above_14_days;*/
3119 	    END IF;
3120 --    END IF;
3121     l_return:=GET_SICKPAY_DETAILS(p_assignment_id,p_abs_start_date,p_abs_end_date,l_sickness_14_below_days,
3122     /*l_sickness_above_14_days*/p_sickness_after_14_days_month,l_sickness_pay_hours_14_below,l_sickness_pay_hours_above_14,
3123     p_monthly_pay,l_asg_hour_sal,l_working_percentage,l_normal_hours,p_hourly_rate,
3124     l_waiting_day_hours,l_waiting_day_deduction,l_waiting_day,l_sickness_deduction_14_above,
3125     l_sickness_deduction_14_less,l_sick_pay_14_above,l_sick_pay_14_less,p_salary_rate,p_effective_date,
3126     p_assignment_action_id,p_override_monthly_basic,p_override_monthly_basic_day);
3127 
3128 
3129 
3130     p_sickness_14_below_days:=l_sick_pay_days_14_below_days; /*l_sickness_14_below_days;*/
3131     p_sickness_above_14_days:=l_sickness_above_14_days;
3132     p_sickness_pay_hours_14_below:=l_sickness_pay_hours_14_below;
3133     p_sickness_pay_hours_above_14:=nvl(l_sickness_pay_hours_above_14,0);
3134     p_tot_waiting_day_hours:=l_waiting_day_hours;
3135     p_tot_waiting_day:=l_waiting_day;
3136     p_total_sick_pay:=l_sick_pay_14_less;
3137     p_total_sick_pay_14_above:=l_sick_pay_14_above;
3138     p_tot_waiting_day_ded:=l_waiting_day_deduction;
3139     p_tot_sick_pay_days:=1;
3140     p_total_sickness_deduction:=l_sickness_deduction_14_less;
3141     p_tot_sickness_ded_14_above:=l_sickness_deduction_14_above;
3142     p_waiting_date:=l_waiting_date;
3143     p_fourteenth_date:=l_fourteenth_date;
3144     p_override_monthly_basic:=nvl(p_override_monthly_basic,0);
3145     p_override_monthly_basic_day:=nvl(p_override_monthly_basic_day,0);
3146 
3147     IF l_total_waiting_days>=10 THEN
3148 	/*waiting day is 0 */
3149 	p_tot_waiting_day:=0;
3150 	p_tot_waiting_day_hours:=0;
3151 	/* making waiting date to be null*/
3152 	p_waiting_date:=null;
3153     END IF;
3154 
3155     IF l_fourteenth_date IS NULL then
3156 	p_fourteenth_date:=l_sickness_last_date;
3157 	/* To get the sickness days after 14th day in the month*/
3158     /*ELSE
3159 	p_sickness_after_14_days_month:=GET_SICKNESS_AFTER_14_PERIOD(l_person_id,p_pay_start_date,
3160 	p_pay_end_date,p_fourteenth_date);
3161 	hr_utility.set_location('p_sickness_after_14_days_month'||p_sickness_after_14_days_month,10);		        */
3162     END IF;
3163     /* Bug Fix for 5981860 */
3164     IF p_fourteenth_date <p_pay_start_date THEN
3165        p_tot_waiting_day_ded:=0;
3166        p_total_sickness_deduction:=0;
3167     END IF;
3168     l_asg_hour_sal:='D';
3169     l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3170 	( p_assignment_id, l_asg_hour_sal, l_include_event,
3171 	l_group_start_date, p_fourteenth_date,
3172 	l_start_time_char,l_end_time_char, l_wrk_duration
3173 	);
3174     p_full_days:=l_wrk_duration;
3175         /*Call the function to get the Sickness Group level values */
3176     l_return:=Get_Sickness_Group_Details(l_person_id,p_assignment_id,p_pay_start_date,
3177     p_pay_end_date,p_abs_start_date,p_abs_end_date,p_group_calendar_days,
3178     p_group_working_days,p_group_working_hours);
3179 
3180 
3181 
3182 RETURN 1;
3183 EXCEPTION
3184 	WHEN OTHERS THEN
3185                 l_person_id := null;
3186                 l_business_group_id := null;
3187                 l_asg_hour_sal := null;
3188 
3189 END CALCULATE_PAYMENT;
3190 
3191 
3192 
3193 FUNCTION GET_SICKPAY_DETAILS(p_assignment_id IN NUMBER,
3194 p_abs_start_date IN DATE,
3195 p_abs_end_date IN DATE,
3196 p_sickness_14_below_days IN NUMBER,
3197 --p_sickness_above_14_days IN NUMBER,
3198 p_sickness_after_14_days_month IN NUMBER,
3199 p_sickness_pay_hours_14_below IN NUMBER,
3200 p_sickness_pay_hours_above_14 IN NUMBER,
3201 p_monthly_pay IN NUMBER,
3202 p_asg_hour_sal IN varchar2,
3203 p_working_percentage IN NUMBER,
3204 p_normal_hours IN NUMBER,
3205 p_hourly_rate IN NUMBER,
3206 p_waiting_day_hours IN OUT NOCOPY NUMBER,
3207 p_waiting_day_deduction OUT NOCOPY NUMBER,
3208 p_waiting_day OUT NOCOPY NUMBER,
3209 p_sickness_deduction_14_above OUT NOCOPY NUMBER,
3210 p_sickness_deduction_14_less OUT NOCOPY NUMBER,
3211 p_sick_pay_14_above OUT NOCOPY NUMBER,
3212 p_sick_pay_14_less OUT NOCOPY NUMBER,
3213 p_salary_rate    IN   NUMBER,
3214 p_effective_date IN DATE,
3215 p_assignment_action_id IN NUMBER,
3216 p_override_monthly_basic OUT NOCOPY NUMBER,
3217 p_override_monthly_basic_day OUT NOCOPY NUMBER
3218 )
3219 RETURN NUMBER IS
3220 
3221 CURSOR csr_get_schedule_id(
3222    b_schdl_cat      VARCHAR2,
3223    b_object_type    VARCHAR2,
3224    b_object_id      NUMBER,
3225    b_start_dt       DATE,
3226    b_end_dt         DATE
3227   )
3228 IS
3229  SELECT CSSB.SCHEDULE_ID
3230     from
3231     CAC_SR_SCHDL_OBJECTS CSSO,
3232     CAC_SR_SCHEDULES_B CSSB
3233     where
3234     CSSO.OBJECT_TYPE = b_object_type
3235     AND CSSO.OBJECT_ID = b_object_id
3236     AND CSSO.START_DATE_ACTIVE <= b_end_dt
3237     AND CSSO.END_DATE_ACTIVE >= b_start_dt
3238     AND CSSO.SCHEDULE_ID = CSSB.SCHEDULE_ID
3239     AND CSSB.DELETED_DATE IS NULL
3240     AND (CSSB.SCHEDULE_CATEGORY = b_schdl_cat
3241          OR CSSB.SCHEDULE_ID IN (SELECT SCHEDULE_ID
3242                                  FROM CAC_SR_PUBLISH_SCHEDULES
3243                                  WHERE OBJECT_TYPE = b_object_type
3244                                  AND OBJECT_ID = b_object_id
3245                                  AND b_schdl_cat IS NULL
3246                                 ));
3247 CURSOR csr_get_template_details(b_schedule_id number)
3248 IS
3249 select CSTB.Template_Id,CSTB.TEMPLATE_LENGTH_DAYS from CAC_SR_SCHEDULES_B CSSB,
3250 CAC_SR_TEMPLATES_B CSTB
3251 where
3252 CSSB.Template_Id=CSTB.Template_Id
3253 and CSSB.Schedule_id=b_schedule_id; --10206
3254 
3255 CURSOR csr_get_shift_duration(b_template_id number)
3256 IS
3257 select CSRB.DURATION from
3258 CAC_SR_TEMPLATES_B CSTB,
3259 CAC_SR_TMPL_DETAILS CSTD,
3260 CAC_SR_PERIODS_B CSRB
3261 where
3262 CSTB.Template_id =CSTD.Template_Id
3263 and CSTD.Child_Period_Id=CSRB.Period_ID
3264 and CSTB.Template_Id=b_template_id; --10284
3265 
3266 CURSOR csr_global_value(csr_v_global_name VARCHAR2,csr_v_effective_date DATE )
3267 IS
3268 SELECT nvl(global_value,0) FROM ff_globals_f WHERE --ROWNUM<3
3269 legislation_code='SE'
3270 AND GLOBAL_NAME=csr_v_global_name --'SE_BASIC_AMOUNT'
3271 AND csr_v_effective_date /*'28-feb-2007'*/ BETWEEN effective_start_date
3272 AND effective_end_date;
3273 
3274 Cursor csr_Get_Defined_Balance_Id(csr_v_Balance_Name FF_DATABASE_ITEMS.USER_NAME%TYPE)
3275 IS
3276 SELECT ue.creator_id
3277 FROM ff_user_entities  ue,
3278 ff_database_items di
3279 WHERE di.user_name = csr_v_Balance_Name
3280 AND ue.user_entity_id = di.user_entity_id
3281 AND ue.legislation_code = 'SE'
3282 AND ue.business_group_id is NULL
3283 AND ue.creator_type = 'B';
3284 
3285 l_weekly_working_hours NUMBER;
3286 l_hourly_rate NUMBER;
3287 l_hours_day NUMBER;
3288 l_schedule_id NUMBER;
3289 l_template_id NUMBER;
3290 l_pattern_length NUMBER;
3291 l_shift_duration NUMBER;
3292 l_waiting_day_hours NUMBER;
3293 l_curr_sickness_14_less NUMBER;
3294 l_curr_sickness_14_above NUMBER;
3295 l_global_value NUMBER;
3296 l_basic_amount_month NUMBER;
3297 l_monthly_salary NUMBER;
3298 l_override_monthly_basic NUMBER;
3299 l_override_monthly_basic_day NUMBER;
3300 lr_Get_Defined_Balance_Id number(10);
3301 l_value number(10);
3302 
3303 BEGIN
3304 --getting the hours per day
3305 
3306 OPEN csr_get_schedule_id(NULL, 'PERSON_ASSIGNMENT', p_assignment_id,add_months(p_abs_start_date,-1),p_abs_end_date);
3307 	FETCH csr_get_schedule_id INTO l_schedule_id;
3308 CLOSE csr_get_schedule_id;
3309 
3310 OPEN csr_get_template_details(l_schedule_id);
3311 	FETCH csr_get_template_details --.Template_Id,csr_get_template_details.TEMPLATE_LENGTH_DAYS
3312 	INTO l_template_id,l_pattern_length;
3313 CLOSE csr_get_template_details;
3314 
3315 OPEN csr_get_shift_duration(l_template_id);
3316 	FETCH csr_get_shift_duration INTO l_hours_day;
3317 CLOSE csr_get_shift_duration;
3318 
3319 OPEN csr_global_value('SE_BASIC_AMOUNT',p_effective_date);
3320 	FETCH csr_global_value INTO l_global_value;
3321 CLOSE csr_global_value;
3322 
3323 l_basic_amount_month:=(7.5*l_global_value/12);
3324 
3325 /* Get the monthly Salary value from balance */
3326 /*pay_balance_pkg.set_context('ASSIGNMENT_ACTION_ID',p_assignment_action_id/*1305752*/--);
3327 /*pay_balance_pkg.set_context('DATE_EARNED',p_effective_date/*'28-feb-2000'*/--);
3328 
3329 /*OPEN  csr_Get_Defined_Balance_Id( 'SICK_PAY_AFTER_14_MONTHLY_PAY_ASG_MONTH');
3330 	FETCH csr_Get_Defined_Balance_Id INTO lr_Get_Defined_Balance_Id;
3331 CLOSE csr_Get_Defined_Balance_Id;
3332 
3333 l_value :=nvl(pay_balance_pkg.get_value(P_DEFINED_BALANCE_ID =>lr_Get_Defined_Balance_Id,
3334 	P_ASSIGNMENT_ACTION_ID =>p_assignment_action_id/*1305752*/--),0);
3335 /*l_monthly_salary:=l_value;*/
3336 l_monthly_salary:=p_monthly_pay;
3337 --checking salaried person
3338 IF p_asg_hour_sal='S' THEN
3339 	/*l_hourly_rate:=round(nvl(((p_Monthly_Pay*12)/(52*p_normal_hours)*p_working_percentage/100),0),2);*/
3340 	IF p_waiting_day_hours <> 0 then
3341 		p_waiting_day:=1;
3342 	ELSE
3343 		p_waiting_day:=0;
3344 	END IF;
3345 	p_waiting_day_deduction:=round((p_waiting_day_hours*p_salary_rate),2);
3346 
3347 	p_sick_pay_14_less:=round((0.8*p_sickness_pay_hours_14_below*p_salary_rate),2);
3348 
3349 	IF l_monthly_salary>=l_basic_amount_month THEN
3350 		l_override_monthly_basic_day:=round((((l_monthly_salary-l_basic_amount_month)*12)/365),2);
3351 		l_override_monthly_basic:=round((0.8*l_override_monthly_basic_day*/*p_sickness_above_14_days*/p_sickness_after_14_days_month),2);
3352 
3353 		p_override_monthly_basic:=l_override_monthly_basic;
3354 		p_override_monthly_basic_day:=l_override_monthly_basic_day;
3355 		p_sick_pay_14_above:=round((0.1*((p_monthly_pay*12)/365)*(/*p_sickness_above_14_days*/p_sickness_after_14_days_month)),2);
3356 	ELSE
3357 		p_sick_pay_14_above:=round((0.1*((p_monthly_pay*12)/365)*(/*p_sickness_above_14_days*/p_sickness_after_14_days_month)),2);
3358 	END IF;
3359 
3360 	p_sickness_deduction_14_less:=round((p_sickness_pay_hours_14_below * p_salary_rate),2);
3361 
3362 
3363 	p_sickness_deduction_14_above:=round(((p_monthly_pay*12)/365)*(/*p_sickness_above_14_days*/p_sickness_after_14_days_month),2);
3364 
3365 ELSE
3366 	p_sick_pay_14_less:=round((0.8*(p_sickness_pay_hours_14_below)*p_hourly_rate),2);
3367 
3368 END IF;
3369 return 1;
3370 
3371 END GET_SICKPAY_DETAILS;
3372 
3373 FUNCTION GET_WAITING_DAY(p_assignment_id NUMBER, p_abs_start_date DATE, p_abs_end_date date)
3374 RETURN DATE IS
3375 
3376 l_starting_date DATE;
3377 l_found BOOLEAN :=false;
3378 l_asg_hour_sal CHAR :='D';
3379 l_include_event CHAR :='Y';
3380 l_start_time_char Varchar2(10) := '0';
3381 l_end_time_char Varchar2(10) := '23.59';
3382 l_duration Number;
3383 l_wrk_schd_return NUMBER;
3384 BEGIN
3385 l_starting_date:=p_abs_start_date;
3386 
3387 	WHILE (l_starting_date <=  p_abs_end_date) AND l_found = false LOOP
3388 		l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3389 			( p_assignment_id, l_asg_hour_sal, l_include_event,
3390 			l_starting_date,l_starting_date, l_start_time_char,
3391 			l_end_time_char, l_duration
3392     			);
3393 
3394 		IF l_duration=1 THEN
3395 			l_found:=true;
3396 		ELSE
3397 			l_starting_date:=l_starting_date +1;
3398 		END IF;
3399 		IF l_starting_date>p_abs_end_date THEN
3400 		  l_starting_date:=TO_DATE('01/01/0001','dd/mm/yyyy');
3401 		  l_found:=true;
3402 		END IF;
3403 	END LOOP;
3404 	RETURN l_starting_date;
3405 END GET_WAITING_DAY;
3406 
3407 FUNCTION Get_Entitlement_Days(
3408 p_assignment_id in NUMBER,
3409 p_effective_date IN DATE,
3410 p_absence_start_date IN DATE,
3411 p_absence_end_date IN DATE,
3412 p_entitlement_days OUT NOCOPY NUMBER,
3413 p_sickness_days OUT NOCOPY NUMBER
3414 )
3415 RETURN NUMBER IS
3416 l_wrk_schd_return NUMBER;
3417 l_start_time_char Varchar2(10) := '0';
3418 l_end_time_char Varchar2(10) := '23.59';
3419 l_include_event CHAR;
3420 l_wrk_duration NUMBER;
3421 l_asg_hour_sal CHAR:='D';
3422 
3423 BEGIN
3424 
3425 /*SELECT  hourly_salaried_code
3426 		INTO
3427         l_asg_hour_sal
3428 		FROM per_all_assignments_f paaf,
3429 		per_all_people_f papf,
3430 		hr_soft_coding_keyflex hsck
3431 		WHERE paaf.assignment_id = p_assignment_id
3432 		AND paaf.soft_coding_keyflex_id=hsck.soft_coding_keyflex_id
3433 		AND papf.person_id=paaf.person_id
3434                 AND p_effective_date BETWEEN paaf.effective_start_date
3435                 AND paaf.effective_end_date
3436 		AND p_effective_date BETWEEN papf.effective_start_date
3437                 AND papf.effective_end_date;*/
3438 /*get the entitlement days with public holidays and weekends*/
3439 --l_include_event:='Y';
3440 /*l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3441 							( p_assignment_id, l_asg_hour_sal, l_include_event,
3442 							p_absence_start_date, p_absence_end_date,l_start_time_char,
3443 							l_end_time_char, l_wrk_duration
3444 							); */
3445 
3446 p_entitlement_days:=(p_absence_end_date-p_absence_start_date)+1;
3447 /*get the sickness days without public holidays and weekends*/
3448 l_include_event:='Y';
3449 l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3450 							( p_assignment_id, l_asg_hour_sal, l_include_event,
3451 							p_absence_start_date, p_absence_end_date,l_start_time_char,
3452 							l_end_time_char, l_wrk_duration
3453 							);
3454 
3455 p_sickness_days:=l_wrk_duration;
3456 RETURN 0;
3457 END Get_entitlement_days;
3458 
3459 FUNCTION GET_SICKNESS_AFTER_14_PERIOD(p_person_id IN NUMBER,
3460 p_assignment_id IN NUMBER,
3461 p_payroll_start IN DATE,
3462 p_payroll_end IN DATE,
3463 p_fourteenth_date IN DATE)
3464 RETURN NUMBER IS
3465 l_14_days_month NUMBER:=0;
3466 CURSOR csr_sickness_after_14_period(csr_v_person_id NUMBER,
3467 csr_v_assignment_id number,
3468 csr_v_payroll_start_date DATE,
3469 csr_v_payroll_end_date DATE,
3470 csr_v_fourteenth_date DATE)
3471 IS
3472 SELECT paa.absence_attendance_id
3473         ,greatest(paa.date_start,csr_v_fourteenth_date,csr_v_payroll_start_date) date_start
3474         ,least(nvl(paa.date_end,csr_v_payroll_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=csr_v_person_id),csr_v_payroll_end_date)) date_end
3475         ,paa.time_start
3476         ,paa.time_end
3477 	--,(date_end-date_start) date_diff
3478 	FROM per_absence_attendances paa,
3479 	per_absence_attendance_types pat
3480 	WHERE paa.person_id = csr_v_person_id --37732
3481         AND paa.date_start <= csr_v_payroll_end_date--'31-mar-2000' --p_abs_end_date
3482 	AND least(nvl(paa.date_end,csr_v_payroll_end_date),csr_v_payroll_end_date)>=greatest(paa.date_start,csr_v_fourteenth_date,csr_v_payroll_start_date)--'01-mar-2000' --p_abs_end_date
3483         /*AND paa.date_start IS NOT NULL AND paa.date_end IS NOT NULL*/
3484         AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
3485         AND pat.absence_category IN ('S')
3486 	/*Fix for Bug No. 5383707*/
3487 	AND paa.absence_attendance_id IN(
3488 --        ORDER BY paa.date_end  ;
3489 
3490 
3491    SELECT eev1.screen_entry_value  screen_entry_value
3492     FROM   per_all_assignments_f      asg1
3493           ,per_all_assignments_f      asg2
3494           ,per_all_people_f           per
3495           ,pay_element_links_f        el
3496           ,pay_element_types_f        et
3497           ,pay_input_values_f         iv1
3498           ,pay_element_entries_f      ee
3499           ,pay_element_entry_values_f eev1
3500     WHERE  asg1.assignment_id    = csr_v_assignment_id --34040 --l_asg_id
3501       AND  p_payroll_end BETWEEN asg1.effective_start_date AND asg1.effective_end_date
3502       AND  p_payroll_end BETWEEN asg2.effective_start_date AND asg2.effective_end_date
3503       AND  per.person_id         = asg1.person_id
3504       AND  asg2.person_id        = per.person_id
3505       --AND  asg2.primary_flag     = 'Y'
3506       AND asg1.assignment_id=asg2.assignment_id
3507       AND  et.element_name       = 'Sickness Details'
3508       AND  et.legislation_code   = 'SE'
3509       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
3510       AND  iv1.element_type_id   = et.element_type_id
3511       AND  iv1.name              = 'CREATOR_ID'
3512       AND  el.business_group_id  = per.business_group_id
3513       AND  el.element_type_id    = et.element_type_id
3514       AND  ee.assignment_id      = asg2.assignment_id
3515       AND  ee.element_link_id    = el.element_link_id
3516       AND  eev1.element_entry_id = ee.element_entry_id
3517       AND  eev1.input_value_id   = iv1.input_value_id
3518       /*AND  ee.effective_start_date  >= p_abs_start_date
3519       AND  ee.effective_end_date <= p_abs_end_date
3520       AND  eev1.effective_start_date >= p_abs_start_date
3521       AND  eev1.effective_end_date <= p_abs_end_date*/
3522       ) ORDER BY paa.date_end desc ;
3523 
3524 --        ORDER BY paa.date_end  ;
3525 
3526 BEGIN
3527 
3528 	--OPEN csr_sickness_after_14_payroll_period(p_person_id,p_payroll_start,p_payroll_end,p_fourteenth_date);
3529 	FOR csr_sick IN csr_sickness_after_14_period(p_person_id,p_assignment_id,p_payroll_start,p_payroll_end,p_fourteenth_date) LOOP
3530 		/*check for whether the start_date is same as fourteenth date*/
3531 		IF csr_sick.date_start=p_fourteenth_date THEN
3532 			l_14_days_month:=l_14_days_month+(csr_sick.date_end-csr_sick.date_start);
3533 		/*IF start_date is not equal to fourteenth date */
3534 		ELSE
3535 			l_14_days_month:=l_14_days_month+(csr_sick.date_end-csr_sick.date_start)+1;
3536 		END IF;
3537 	END LOOP csr_sickness_after_14_period;
3538 	--	FETCH csr_sickness_after_14_payroll_period.date_diff INTO l_14_days_month
3539 	--CLOSE csr_sickness_after_14_payroll_period;
3540 	RETURN l_14_days_month;
3541 END GET_SICKNESS_AFTER_14_PERIOD;
3542 FUNCTION Get_Sickness_Group_Details(p_person_id IN NUMBER,
3543 					p_assignment_id IN NUMBER,
3544 					p_pay_start_date IN DATE,
3545 					p_pay_end_date IN DATE,
3546 					p_abs_group_start_date IN DATE,
3547 					p_abs_group_end_date IN DATE,
3548 					p_group_calendar_days OUT NOCOPY NUMBER,
3549 					p_group_working_days OUT NOCOPY NUMBER,
3550 					p_group_working_hours OUT NOCOPY NUMBER )
3551 RETURN NUMBER IS
3552 
3553 l_working_days	 NUMBER:=0;
3554 l_calendar_days  NUMBER:=0;
3555 l_working_hours  NUMBER:=0;
3556 l_days Char(1):='D';
3557 l_hours Char(1):='H';
3558 l_include_event CHAR :='Y';
3559 l_start_time_char Varchar2(10) := '0';
3560 l_end_time_char Varchar2(10) := '23.59';
3561 l_wrk_schd_return NUMBER;
3562 l_hour_duration NUMBER;
3563 l_day_duration NUMBER;
3564 
3565 CURSOR csr_absence_period(csr_v_person_id NUMBER,
3566 csr_v_start_date DATE, csr_v_end_date DATE )
3567 IS
3568         SELECT paa.absence_attendance_id
3569         ,greatest(paa.date_start,csr_v_start_date) date_start
3570         ,least(nvl(paa.date_end,csr_v_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=csr_v_person_id),csr_v_end_date)) date_end
3571         ,paa.time_start
3572         ,paa.time_end
3573 	--,(date_end-date_start) date_diff
3574 	FROM per_absence_attendances paa,
3575 	per_absence_attendance_types pat
3576 	WHERE paa.person_id = csr_v_person_id --37732
3577         AND paa.date_start <= csr_v_end_date--'31-mar-2000' --p_abs_end_date
3578 	AND least(nvl(paa.date_end,csr_v_end_date),csr_v_end_date)>=greatest(paa.date_start,csr_v_start_date)--'01-mar-2000' --p_abs_end_date
3579         /*AND paa.date_start IS NOT NULL AND paa.date_end IS NOT NULL*/
3580         AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
3581         AND pat.absence_category IN ('S')
3582 	/*Fix for Bug No. 5383707*/
3583 	AND paa.absence_attendance_id IN(
3584 --        ORDER BY paa.date_end  ;
3585 
3586 
3587    SELECT eev1.screen_entry_value  screen_entry_value
3588     FROM   per_all_assignments_f      asg1
3589           ,per_all_assignments_f      asg2
3590           ,per_all_people_f           per
3591           ,pay_element_links_f        el
3592           ,pay_element_types_f        et
3593           ,pay_input_values_f         iv1
3594           ,pay_element_entries_f      ee
3595           ,pay_element_entry_values_f eev1
3596     WHERE  asg1.assignment_id    = p_assignment_id --34040 --l_asg_id
3597       AND  p_pay_end_date BETWEEN asg1.effective_start_date AND asg1.effective_end_date
3598       AND  p_pay_end_date BETWEEN asg2.effective_start_date AND asg2.effective_end_date
3599       AND  per.person_id         = asg1.person_id
3600       AND  asg2.person_id        = per.person_id
3601       --AND  asg2.primary_flag     = 'Y'
3602       AND asg1.assignment_id=asg2.assignment_id
3603       AND  et.element_name       = 'Sickness Details'
3604       AND  et.legislation_code   = 'SE'
3605       --OR et.business_group_id=3261      ) --checking for the business group, it should be removed
3606       AND  iv1.element_type_id   = et.element_type_id
3607       AND  iv1.name              = 'CREATOR_ID'
3608       AND  el.business_group_id  = per.business_group_id
3609       AND  el.element_type_id    = et.element_type_id
3610       AND  ee.assignment_id      = asg2.assignment_id
3611       AND  ee.element_link_id    = el.element_link_id
3612       AND  eev1.element_entry_id = ee.element_entry_id
3613       AND  eev1.input_value_id   = iv1.input_value_id
3614       /*AND  ee.effective_start_date  >= p_abs_start_date
3615       AND  ee.effective_end_date <= p_abs_end_date
3616       AND  eev1.effective_start_date >= p_abs_start_date
3617       AND  eev1.effective_end_date <= p_abs_end_date*/
3618       ) ORDER BY paa.date_end desc ;
3619 
3620 --        ORDER BY paa.date_end  ;
3621 
3622 	/*SELECT paa.absence_attendance_id
3623         ,paa.date_start
3624         --,nvl(paa.date_end,'31-jan-2000') date_end
3625         ,least(nvl(paa.date_end,csr_v_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=csr_v_person_id),csr_v_end_date)) date_end
3626         ,paa.time_start
3627         ,paa.time_end
3628         ,DECODE(paa.date_start,least(nvl(paa.date_end,csr_v_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=csr_v_person_id),csr_v_end_date)), 1,
3629 	(least(nvl(paa.date_end,csr_v_end_date),nvl((select actual_termination_date from per_periods_of_service where person_id=csr_v_person_id),csr_v_end_date))-paa.date_start)+1) AS days_diff
3630 	FROM per_absence_attendances paa,
3631 	per_absence_attendance_types pat
3632 	WHERE paa.person_id = csr_v_person_id
3633         AND paa.date_start >=csr_v_start_date
3634 	AND paa.date_start<=csr_v_end_date
3635 	AND least(nvl(paa.date_end,csr_v_end_date),csr_v_end_date)<=csr_v_end_date
3636         /*AND paa.date_start IS NOT NULL AND paa.date_end IS NOT NULL*/
3637         /*AND paa.absence_attendance_type_id = pat.absence_attendance_type_id
3638         AND pat.absence_category IN ('S')
3639         ORDER BY paa.date_end  ;*/
3640 
3641 
3642 BEGIN
3643 	FOR csr_abs IN  csr_absence_period(p_person_id,greatest(p_pay_start_date,p_abs_group_start_date),least(p_pay_end_date,p_abs_group_end_date)) LOOP
3644 
3645 	      l_calendar_days:=l_calendar_days+(csr_abs.date_end-csr_abs.date_start+1);
3646 
3647 	      l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3648 							( p_assignment_id, l_days, l_include_event,
3649 							csr_abs.date_start, csr_abs.date_end, replace(nvl(csr_abs.time_start,l_start_time_char),':','.'),
3650 							replace(nvl(csr_abs.time_end,l_end_time_char),':','.'), l_day_duration
3651 							);
3652 
3653 	      l_working_days:=l_working_days+l_day_duration;
3654 
3655 	      l_wrk_schd_return := hr_loc_work_schedule.calc_sch_based_dur
3656 							( p_assignment_id, l_hours, l_include_event,
3657 							csr_abs.date_start, csr_abs.date_end, replace(l_start_time_char,':','.'),
3658 							replace(l_end_time_char,':','.'), l_hour_duration
3659 							);
3660 
3661 	      l_working_hours:=l_working_hours+l_hour_duration;
3662 
3663 
3664 	END LOOP csr_absence_period;
3665 
3666 	p_group_calendar_days:=l_calendar_days;
3667 	p_group_working_days:=l_working_days;
3668 	p_group_working_hours:=l_working_hours;
3669 
3670 	RETURN 1;
3671         EXCEPTION
3672 	WHEN OTHERS THEN
3673 	RETURN 0;
3674 
3675 END Get_Sickness_Group_Details;
3676 END PAY_SE_ABSENCE;