DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_SE_ABSENCE_USER

Source


1 PACKAGE BODY PAY_SE_ABSENCE_USER AS
2 /*$Header: pyseabsence.pkb 120.1 2007/06/28 12:47:02 rravi noship $*/
3 
4 -------------------------------------------------------------------------------------------------------------------------
5 /*  Element populate function to return Input values of absence element */
6    -- NAME
7    --  Element_populate
8    -- PURPOSE
9    --  To populate element input values for absence recording.
10    -- ARGUMENTS
11    --  P_ASSIGNMENT_ID         - Assignment id
12    --  P_PERSON_ID 	       - Person id,
13    --  P_ABSENCE_ATTENDANCE_ID - Absence attendance id,
14    --  P_ELEMENT_TYPE_ID       - Element type id,
15    --  P_ABSENCE_CATEGORY      - Absence category ( Sickness ),
16    --  P_INPUT_VALUE_NAME 1-4,6 - Output variable holds element input value name.
17    --  P_INPUT_VALUE 1-4,6      - Output variable holds element input value.
18    -- USES
19    -- NOTES
20 
21 -------------------------------------------------------------------------------------------------------------------------
22 Function Element_populate(p_assignment_id         in number,
23                 p_person_id 	in number,
24         p_absence_attendance_id in number,
25 		        p_element_type_id 	    in number,
26         p_absence_category 	    in varchar2,
27         p_original_entry_id          OUT NOCOPY NUMBER,
28                 p_input_value_name1 	OUT NOCOPY VARCHAR2,
29 		p_input_value1	    	OUT NOCOPY VARCHAR2,
30                 p_input_value_name2 	OUT NOCOPY VARCHAR2,
31 		p_input_value2	    	OUT NOCOPY VARCHAR2,
32                 p_input_value_name3 	OUT NOCOPY VARCHAR2,
33 		p_input_value3	    	OUT NOCOPY VARCHAR2,
34                 p_input_value_name4 	OUT NOCOPY VARCHAR2,
35 		p_input_value4	    	OUT NOCOPY VARCHAR2,
36                 p_input_value_name5 	OUT NOCOPY VARCHAR2,
37 		p_input_value5	    	OUT NOCOPY VARCHAR2,
38                 p_input_value_name6 	OUT NOCOPY VARCHAR2,
39 		p_input_value6	    	OUT NOCOPY VARCHAR2,
40                 p_input_value_name7 	OUT NOCOPY VARCHAR2,
41 		p_input_value7	    	OUT NOCOPY VARCHAR2,
42                 p_input_value_name8 	OUT NOCOPY VARCHAR2,
43 		p_input_value8	    	OUT NOCOPY VARCHAR2,
44                 p_input_value_name9 	OUT NOCOPY VARCHAR2,
45 		p_input_value9	    	OUT NOCOPY VARCHAR2,
46                 p_input_value_name10 	OUT NOCOPY VARCHAR2,
47 		p_input_value10	    	OUT NOCOPY VARCHAR2,
48                 p_input_value_name11 	OUT NOCOPY VARCHAR2,
49 		p_input_value11	    	OUT NOCOPY VARCHAR2,
50                 p_input_value_name12 	OUT NOCOPY VARCHAR2,
51 		p_input_value12	    	OUT NOCOPY VARCHAR2,
52                 p_input_value_name13 	OUT NOCOPY VARCHAR2,
53 		p_input_value13	    	OUT NOCOPY VARCHAR2,
54                 p_input_value_name14 	OUT NOCOPY VARCHAR2,
55 		p_input_value14	    	OUT NOCOPY VARCHAR2,
56                 p_input_value_name15 	OUT NOCOPY VARCHAR2,
57 		p_input_value15	    	OUT NOCOPY VARCHAR2 ) RETURN VARCHAR2 IS
58 
59 l_start_date            date;
60 l_end_date              date;
61 l_days                  number;
62 l_hours                 number;
63 l_absent_reason         number;
64 l_start_time            varchar2(20);
65 l_end_time              varchar2(20);
66 l_abs_cat_meaning       varchar2(100);
67 l_start_time_char varchar2(5) := '00:00';
68 l_end_time_char varchar2(5) := '23:59';
69 l_Absence_Percentage Number(10,2);
70 l_wrk_start_date date;
71 
72 l_absence_start_date date;
73 l_absence_end_date   date;
74 
75 l_weekends number;
76 l_public_holidays number;
77 l_Total_absence_days number;
78 
79 BEGIN
80 
81 
82 
83 
84        -- Fetch absence attendance details
85        BEGIN
86           SELECT abs.date_start
87                  ,abs.date_end
88                  ,abs.ABS_ATTENDANCE_REASON_ID
89 --                 ,abs.TIME_START
90   --               ,abs.TIME_END
91                  ,abs.absence_Days
92                  ,abs.absence_Hours
93           INTO   l_start_date
94                  ,l_end_date
95                  ,l_absent_reason
96 --                 ,l_start_time
97   --               ,l_end_time
98                  ,l_days
99                  ,l_hours
100           FROM   per_absence_attendances      abs
101           WHERE  abs.absence_attendance_id      = p_absence_attendance_id;
102        EXCEPTION
103           WHEN OTHERS THEN
104                NULL;
105        END;
106     -- Check if absence category is S ( Sickness )
107     IF p_absence_category in ('S') THEN
108                 p_input_value_name1 := 'Start Date';
109 		p_input_value1	    := 	l_start_date;
110                 p_input_value_name2 := 'End Date';
111 		p_input_value2	    := 	l_end_date;
112 		p_input_value_name3 := 'Entitlement Days';
113 		p_input_value3	    := 	l_days;
114 		p_input_value_name4 := 'Hours';
115 		p_input_value4	    := 	l_hours;
116                 --p_input_value_name5 := 'Absence Category';
117 
118 		     -- To select absence category meaning by passing code
119 		     BEGIN
120 		        SELECT MEANING
121 			INTO   l_abs_cat_meaning
122 			FROM   hr_lookups
123 			WHERE  LOOKUP_TYPE = 'ABSENCE_CATEGORY'
124 			  AND  ENABLED_FLAG = 'Y'
125 			  AND  LOOKUP_CODE = p_absence_category;
126 		     EXCEPTION
127 		        WHEN OTHERS THEN
128 			       l_abs_cat_meaning := null;
129 		     END;
130 		p_input_value_name5 := 'Absence Category';
131 		p_input_value5	    := 	l_abs_cat_meaning;
132 
133 		--p_input_value5	    := 	l_abs_cat_meaning;
134 		p_input_value_name6 := 'CREATOR_ID';
135 		p_input_value6	    := 	p_absence_attendance_id;
136 
137 		SELECT fnd_number.canonical_to_number(PAA.ABS_INFORMATION3)  INTO
138 		l_absence_percentage
139 		FROM PER_ABSENCE_ATTENDANCES PAA
140           	WHERE PAA.ABSENCE_ATTENDANCE_ID =p_absence_attendance_id;
141 
142 		p_input_value_name7 := 'Absence Percentage';
143 		p_input_value7	    := 	l_absence_percentage;
144 
145 
146 		/*GET_WEEKEND_PUBLIC_HOLIDAYS(p_assignment_id
147                             ,fnd_date.date_to_chardate(p_input_value1)
148 			    ,fnd_date.date_to_chardate(p_input_value2)
149 			    ,nvl(l_start_time,l_start_time_char)
150 			    ,nvl(l_end_time,l_end_time_char)
151 			    ,l_weekends
152     			    ,l_public_holidays
153     			    ,l_Total_absence_days);
154 
155   	       p_input_value3	    := 	l_Total_absence_days;
156 	       p_input_value7	    := 	l_Total_absence_days-(l_weekends+l_public_holidays);*/
157     END IF;
158 
159 -- Return Y indicating to process the element for the input assignment id.
160 RETURN 'Y';
161 END Element_populate;
162 
163 PROCEDURE GET_WEEKEND_PUBLIC_HOLIDAYS(p_assignment_id in number
164 	,P_START_DATE in varchar2
165 	,P_END_DATE in varchar2
166 	,p_start_time in varchar2
167 	,p_end_time in varchar2
168 	,p_weekends OUT	NOCOPY NUMBER
169 	,p_public_holidays OUT NOCOPY NUMBER
170 	,p_Total_holidays OUT NOCOPY NUMBER
171 	) IS
172 
173 l_return_frm_wrk_schd number;
174 
175 l_DAYS_WTH_PUBLIC NUMBER;
176 l_DAYS_WTHOUT_PUBLIC NUMBER;
177 
178 l_TOTAL_DAYS number;
179 l_CURRENT_PUBLIC_HOLIDAYS NUMBER;
180 l_CURRENT_WEEKENDS NUMBER;
181 l_start_date date;
182 l_end_date  date;
183 
184 CURSOR get_total_days(csr_end_date date,csr_start_date date)
185 is
186 select floor(csr_end_date-csr_start_date) from dual;
187 --  select (TO_DATE(P_END_DATE)	||' '||replace(trim(to_char(p_end_time,'00.00')),'.',':'),'DD-MM-YYYY HH24:MI')) from dual;
188 
189 --  select floor(TO_DATE(TO_DATE(P_END_DATE) ||' '||replace(trim(to_char(p_end_time,'00.00')),'.',':'),'DD-MM-YYYY HH24:MI')-
190   --TO_DATE(TO_DATE(P_START_DATE) ||' '||replace(trim(to_char(p_start_time,'00.00')),'.',':'),'DD-MM-YYYY HH24:MI'))  from dual;
191 
192 CURSOR get_time_format(l_time varchar2)	is
193 SELECT replace(trim(l_time),':','.') FROM dual;
194 
195   l_start_time	    VARCHAR2(5);
196   l_end_time	    VARCHAR2(5);
197 
198 BEGIN
199 
200 -- Get Total days including Public Holidays including Weekends
201 --l_TOTAL_DAYS := 5.5;
202 --l_TOTAL_DAYS := to_number(floor(TO_DATE(TO_DATE(P_END_DATE) ||' '||to_char(p_end_time),'DD-MM-YYYY HH24:MI')-	TO_DATE(TO_DATE(P_START_DATE) ||' '||to_char(p_start_time),'DD-MM-YYYY HH24:MI')));
203 OPEN get_time_format(p_start_time);
204 	FETCH	get_time_format	INTO l_start_time;
205 CLOSE	get_time_format;
206 
207 OPEN get_time_format(p_end_time);
208 	FETCH	get_time_format	INTO l_end_time;
209 CLOSE	get_time_format;
210 
211 l_start_date :=	TO_DATE(TO_CHAR(TO_DATE(P_START_DATE,'DD-MON-YYYY'),'DD-MM-YYYY')||' '||l_start_time,'DD-MM-YYYY HH24:MI');
212 l_end_date := TO_DATE(TO_CHAR(TO_DATE(p_end_date,'DD-MON-YYYY'),'DD-MM-YYYY')||' '||l_end_time,'DD-MM-YYYY HH24:MI');
213 
214 OPEN  get_total_days(l_end_date,l_start_date);
215 	FETCH get_total_days INTO l_TOTAL_DAYS;
216 CLOSE get_total_days;
217 
218 -- Get Total days including Public Holidays exculding Weekends
219 l_return_frm_wrk_schd := hr_loc_work_schedule.calc_sch_based_dur
220 				( p_assignment_id,
221 				'D',
222 				'Y',
223 				P_START_DATE,
224 				P_END_DATE,
225 				l_start_time,
226 				l_end_time,
227 				l_DAYS_WTH_PUBLIC
228 				);
229 
230 -- Get Total days Excluding Public Holidays exculding Weekends
231 l_return_frm_wrk_schd := hr_loc_work_schedule.calc_sch_based_dur
232 				( p_assignment_id,
233 				'D',
234 				'N',
235 				P_START_DATE,
236 				P_END_DATE,
237 				l_start_time,
238 				l_end_time,
239 				l_DAYS_WTHOUT_PUBLIC
240 				);
241 
242 l_CURRENT_PUBLIC_HOLIDAYS := l_DAYS_WTH_PUBLIC - l_DAYS_WTHOUT_PUBLIC;
243 l_CURRENT_WEEKENDS:= l_TOTAL_DAYS - l_DAYS_WTH_PUBLIC;
244 
245 p_weekends	  :=l_CURRENT_WEEKENDS;
246 p_public_holidays :=l_CURRENT_PUBLIC_HOLIDAYS;
247 p_Total_holidays  :=l_TOTAL_DAYS;
248 
249 
250 
251 
252 END GET_WEEKEND_PUBLIC_HOLIDAYS;
253 
254 Function holiday_Element_populate(p_assignment_id         in number,
255                 p_person_id 		in number,
256 		p_absence_attendance_id in number,
257 		p_element_type_id 	in number,
258 		p_absence_category 	in varchar2,
259 		p_original_entry_id     OUT NOCOPY NUMBER,
260                 p_input_value_name1 	OUT NOCOPY VARCHAR2,
261 		p_input_value1	    	OUT NOCOPY VARCHAR2,
262                 p_input_value_name2 	OUT NOCOPY VARCHAR2,
263 		p_input_value2	    	OUT NOCOPY VARCHAR2,
264                 p_input_value_name3 	OUT NOCOPY VARCHAR2,
265 		p_input_value3	    	OUT NOCOPY VARCHAR2,
266                 p_input_value_name4 	OUT NOCOPY VARCHAR2,
267 		p_input_value4	    	OUT NOCOPY VARCHAR2,
268                 p_input_value_name5 	OUT NOCOPY VARCHAR2,
269 		p_input_value5	    	OUT NOCOPY VARCHAR2,
270                 p_input_value_name6 	OUT NOCOPY VARCHAR2,
271 		p_input_value6	    	OUT NOCOPY VARCHAR2,
272                 p_input_value_name7 	OUT NOCOPY VARCHAR2,
273 		p_input_value7	    	OUT NOCOPY VARCHAR2,
274                 p_input_value_name8 	OUT NOCOPY VARCHAR2,
275 		p_input_value8	    	OUT NOCOPY VARCHAR2,
276                 p_input_value_name9 	OUT NOCOPY VARCHAR2,
277 		p_input_value9	    	OUT NOCOPY VARCHAR2,
278                 p_input_value_name10 	OUT NOCOPY VARCHAR2,
279 		p_input_value10	    	OUT NOCOPY VARCHAR2,
280                 p_input_value_name11 	OUT NOCOPY VARCHAR2,
281 		p_input_value11	    	OUT NOCOPY VARCHAR2,
282                 p_input_value_name12 	OUT NOCOPY VARCHAR2,
283 		p_input_value12	    	OUT NOCOPY VARCHAR2,
284                 p_input_value_name13 	OUT NOCOPY VARCHAR2,
285 		p_input_value13	    	OUT NOCOPY VARCHAR2,
286                 p_input_value_name14 	OUT NOCOPY VARCHAR2,
287 		p_input_value14	    	OUT NOCOPY VARCHAR2,
288                 p_input_value_name15 	OUT NOCOPY VARCHAR2,
289 		p_input_value15	    	OUT NOCOPY VARCHAR2 ) RETURN VARCHAR2 IS
290 
291 l_start_date            date;
292 l_end_date              date;
293 l_days                  number;
294 l_hours                 number;
295 l_absent_reason         number;
296 l_start_time            varchar2(5);
297 l_end_time              varchar2(5);
298 l_abs_cat_meaning       varchar2(100);
299 l_ABS_TYPE    varchar2(240);
300 l_ABS_CATEGORY  varchar2(240);
301 l_wrk_schd_return number;
302 l_wrk_duration number;
303 l_start_time_char varchar2(5) := '00:00';
304 l_end_time_char varchar2(5) := '23:59';
305 l_Absence_Percentage Number(10);
306 l_wrk_start_date date;
307 
308 l_absence_start_date date;
309 l_absence_end_date   date;
310 
311 l_weekends number;
312 l_public_holidays number;
313 l_Total_absence_days number;
314 
315 
316 CURSOR CSR_GET_ABSENCE  is   SELECT PAAT.NAME,--             PAAT.ABSENCE_ATTENDANCE_TYPE_ID,
317              PAAT.ABSENCE_CATEGORY,
318              PAA.date_start,
319              PAA.date_end,
320              PAA.absence_Days,
321              PAA.absence_Hours,
322              PAA.TIME_START,
323              PAA.TIME_END,
324              PAA.ABS_INFORMATION3
325              FROM   per_absence_attendances      PAA,
326 	     per_absence_attendance_types PAAT
327              WHERE  PAA.absence_attendance_id      = p_absence_attendance_id
328              and PAA.ABSENCE_ATTENDANCE_TYPE_ID    =PAAT.ABSENCE_ATTENDANCE_TYPE_ID   ;
329 
330 row_get_absence CSR_GET_ABSENCE%ROWTYPE;
331 
332 CURSOR CSR_GET_ABCAT  is   SELECT MEANING
333 	     FROM   HR_LOOKUPS
334 	     WHERE  LOOKUP_TYPE = 'ABSENCE_CATEGORY'
335              AND  ENABLED_FLAG = 'Y'
336 	     AND  LOOKUP_CODE = p_absence_category;
337 
338 ROW_GET_ABCAT CSR_GET_ABCAT%ROWTYPE;
339 
340 
341 
342 BEGIN
343 
344 -- Fetch absence attendance details
345 OPEN  CSR_GET_ABSENCE;
346 	FETCH CSR_GET_ABSENCE INTO row_get_absence;
347 CLOSE CSR_GET_ABSENCE;
348 
349 l_ABS_TYPE   := row_get_absence.NAME;
350 l_ABS_CATEGORY := row_get_absence.ABSENCE_CATEGORY;
351 l_start_date :=row_get_absence.date_start;
352 l_end_date :=row_get_absence.date_end;
353 l_days :=row_get_absence.absence_Days;
354 l_hours :=row_get_absence.absence_Hours;
355 l_Absence_Percentage :=row_get_absence.ABS_INFORMATION3;
356 l_start_time := row_get_absence.TIME_START;
357 l_end_time := row_get_absence.TIME_END ;
358 
359 
360 		     -- To select absence category meaning by passing code
361 OPEN  CSR_GET_ABCAT;
362 	FETCH CSR_GET_ABCAT INTO row_GET_ABCAT;
363 CLOSE CSR_GET_ABCAT;
364 
365 l_abs_cat_meaning :=ROW_GET_ABCAT.MEANING;
366 
367 
368     -- Check if absence category is S ( Sickness )
369 IF p_absence_category in ('V') THEN
370         p_input_value_name1 := 'Absence Category';
371 	p_input_value1	    := 	l_abs_cat_meaning;
372 
373 --        p_input_value_name2 := 'Absence Type';
374 --		p_input_value2	    := 	l_ABS_TYPE;
375 
376         p_input_value_name2 := 'Absence Percentage';
377 	p_input_value2	    := 	l_Absence_Percentage;
378 
379         p_input_value_name3 := 'Start Date';
380 	p_input_value3	    := 	l_start_date;
381 
382         p_input_value_name4 := 'End Date';
383 	p_input_value4	    := 	l_end_date;
384 
385 	p_input_value_name5 := 'Days';
386 	p_input_value5	    := 	l_days;
387 
388 	p_input_value_name6 := 'Hours';
389 	p_input_value6	    := 	l_hours;
390 
391 	p_input_value_name7 := 'CREATOR_ID';
392 	p_input_value7	    := 	p_absence_attendance_id;
393 
394     END IF;
395 
396 
397 --    IF p_input_value7 IS NOT NULL or p_input_value6 IS NOT NULL
398 -- User entered the value manually
399 -- apply working perccentage and absence percentage and return
400 --THEN
401 
402 --hr_utility.set_location(' Null ',10);
403 --ELSE
404 -- equivalent to p_input_value5 IS NULL and p_input_value6 IS NULL
405 /*l_absence_start_date :=fnd_date.date_to_chardate(p_input_value3);
406 l_absence_end_date   := fnd_date.date_to_chardate(p_input_value4);
407 
408 --send starting date,time  and ending date,time to get weekends and public holidays
409 GET_WEEKEND_PUBLIC_HOLIDAYS(p_assignment_id
410                             ,fnd_date.date_to_chardate(p_input_value3)
411 			    ,fnd_date.date_to_chardate(p_input_value4)
412 			    ,nvl(l_start_time,l_start_time_char)
413 			    ,nvl(l_end_time,l_end_time_char)
414 			    ,l_weekends
415     			    ,l_public_holidays
416     			    ,l_Total_absence_days);		   */
417 
418 --END IF;
419 
420 --		p_input_value5	    := 	l_Total_absence_days;
421 
422 
423 -- Return Y indicating to process the element for the input assignment id.
424 
425 RETURN 'Y';
426 
427 END holiday_Element_populate;
428 
429 FUNCTION GET_DAYS_WITH_ABS_PERCENTAGE(
430 		p_date_earned in date,
431 		p_tax_unit_id in Number,
432 		p_assignment_action_id IN NUMBER,
433 		p_assignment_id IN NUMBER,
434 		p_business_group_id in NUMBER,
435 		p_days IN NUMBER,
436 		p_Absence_percentage IN Number,
437 		p_category_code IN VARCHAR2
438 		)
439 
440 RETURN NUMBER IS
441 
442 lr_Get_Defined_Balance_Id number;
443 l_generate char(1);
444 l_max_days number;
445 l_DAYS_IN_BALANCE number;
446 l_check_interrupted char(1);
447 
448 l_absence_days NUMBER:=0;
449 
450 
451 
452 
453      Cursor csr_Generate_Max_Days  IS
454      SELECT hoi2.org_information2,hoi2.org_information3
455      FROM HR_ORGANIZATION_UNITS hou
456      ,HR_ORGANIZATION_INFORMATION hoi1
457      ,HR_ORGANIZATION_INFORMATION hoi2
458     WHERE hou.organization_id =p_tax_unit_id
459     AND	hoi1.organization_id = hou.organization_id
460     AND	hoi1.org_information_context = 'CLASS'
461     AND hoi1.ORG_INFORMATION1='HR_LEGAL_EMPLOYER'
462     AND	hoi2.ORG_INFORMATION_CONTEXT='SE_ABSENCE_CATEGORY_LIMIT'
463     AND	hoi1.organization_id = hoi2.organization_id
464     AND	hoi2.org_information1 IS NOT NULL
465     AND hoi2.org_information1=p_category_code;
466 
467 /*     SELECT hoi4.ORG_INFORMATION2,hoi4.ORG_INFORMATION3
468      FROM HR_ORGANIZATION_UNITS o1
469     ,HR_ORGANIZATION_INFORMATION hoi1
470     ,HR_ORGANIZATION_INFORMATION hoi2
471     ,HR_ORGANIZATION_INFORMATION hoi3
472     ,HR_ORGANIZATION_INFORMATION hoi4
473     ,( SELECT TRIM(SCL.SEGMENT2) AS ORG_ID
474     FROM PER_ALL_ASSIGNMENTS_F ASG
475     ,HR_SOFT_CODING_KEYFLEX SCL
476     WHERE ASG.ASSIGNMENT_ID = p_assignment_id
477     AND	ASG.SOFT_CODING_KEYFLEX_ID = SCL.SOFT_CODING_KEYFLEX_ID
478     AND	p_date_earned BETWEEN ASG.EFFECTIVE_START_DATE AND ASG.EFFECTIVE_END_DATE ) X
479     WHERE o1.business_group_id = l_business_group_id
480     AND	hoi1.organization_id = o1.organization_id
481     AND	hoi1.organization_id = X.ORG_ID
482     --AND	hoi1.org_information1 =	'SE_LOCAL_UNIT'
483     AND	hoi1.org_information_context = 'CLASS'
484     AND	o1.organization_id = hoi2.org_information1
485     AND	hoi2.ORG_INFORMATION_CONTEXT='SE_LOCAL_UNITS'
486     AND	hoi2.organization_id =	hoi3.organization_id
487     AND	hoi3.ORG_INFORMATION_CONTEXT='CLASS'
488     AND	hoi3.org_information1 =	'HR_LEGAL_EMPLOYER'
489     AND	hoi3.organization_id = hoi4.organization_id
490     AND	hoi4.ORG_INFORMATION_CONTEXT='SE_ABSENCE_CATEGORY_LIMIT'
491     AND	hoi4.org_information1 IS NOT NULL
492     AND hoi4.org_information1=p_category_code;
493 */
494 Cursor csr_Earning_Year is
495 	SELECT	substr(hoi2.ORG_INFORMATION2,4,2)
496 	FROM	HR_ORGANIZATION_UNITS o1
497 	,HR_ORGANIZATION_INFORMATION hoi1
498 	,HR_ORGANIZATION_INFORMATION hoi2
499 	WHERE
500 	hoi1.organization_id = o1.organization_id
501 	AND hoi1.organization_id = p_tax_unit_id
502 	AND hoi1.ORG_INFORMATION_CONTEXT='CLASS'
503 	AND hoi1.org_information1 = 'HR_LEGAL_EMPLOYER'
504 	AND hoi1.organization_id = hoi2.organization_id
505 	AND hoi2.ORG_INFORMATION_CONTEXT='SE_HOLIDAY_YEAR_DEFN'
506 	AND hoi2.org_information1 IS NOT NULL;
507 
508 	Cursor csr_Get_Defined_Balance_Id(csr_v_Balance_Name FF_DATABASE_ITEMS.USER_NAME%TYPE) IS
509       SELECT	  ue.creator_id
510       FROM     ff_user_entities	 ue,
511       ff_database_items	di
512       WHERE	di.user_name = csr_v_Balance_Name
513       AND     ue.user_entity_id	= di.user_entity_id
514       AND     ue.legislation_code = 'SE'
515       AND     ue.business_group_id is NULL
516       AND     ue.creator_type =	'B';
517 
518 
519 BEGIN
520 		/*Check for the interruption of Sick Pay*/
521 	        l_check_interrupted:=CHECK_SICK_INTERUPTED(p_date_earned,p_assignment_id,p_tax_unit_id,p_business_group_id,p_category_code);
522 
523 		IF  l_check_interrupted='Y' THEN
524 		/*If the sick leave is interupted*/
525 			OPEN  csr_Get_Defined_Balance_Id( 'TOTAL_ABSENCE_DAYS_HOLIDAY_PAY_ASG_LE_ABS_CAT_HY_YEAR');
526 				FETCH csr_Get_Defined_Balance_Id INTO lr_Get_Defined_Balance_Id;
527 			CLOSE csr_Get_Defined_Balance_Id;
528 
529 			pay_balance_pkg.set_context('SOURCE_TEXT',p_category_code);
530 			pay_balance_pkg.set_context('ASSIGNMENT_ACTION_ID',p_assignment_action_id);
531 			pay_balance_pkg.set_context('TAX_UNIT_ID',p_tax_unit_id);
532 
533 			l_DAYS_IN_BALANCE := pay_balance_pkg.get_value(
534 			P_DEFINED_BALANCE_ID      => lr_Get_Defined_Balance_Id,
535 			P_ASSIGNMENT_ACTION_ID    =>  p_assignment_action_id,
536 			P_TAX_UNIT_ID             => p_tax_unit_id,
537 			P_JURISDICTION_CODE       => null,
538 			P_SOURCE_ID               => null,
539 			P_SOURCE_TEXT             =>p_category_code,
540 			P_TAX_GROUP               => null,
541 			P_DATE_EARNED             =>p_date_earned  );
542 
543 			OPEN csr_Generate_Max_Days;
544 				FETCH csr_Generate_Max_Days INTO l_generate,l_max_days;
545 			CLOSE csr_Generate_Max_Days;
546 
547 	l_absence_days := 0;
548 			/* If generate is Y
549 		then value greater than the max is considered as absence,
550 		else whole value */
551 		IF l_generate='Y' THEN
552 		    /* If the Maxmimum days for this category has been already exceeded
553 		    In that case apply the absence percentage directly and return */
554 		    IF l_DAYS_IN_BALANCE+p_days <= l_max_days
555 		    THEN
556 					l_absence_days := p_days;
557 		    ELSIF l_DAYS_IN_BALANCE>=l_max_days THEN
558 		    /*When the absence has already crossed the limit in previous period*/
559 		          l_absence_days := round(p_days*p_Absence_percentage/100);
560 		    ELSE
561 		    /* Find the no of days with 100 perc tobe added to balance
562 		    till it exceeds Max days
563 		    for the rest , abscence percentage to be applied.            */
564 			l_absence_days := abs(l_max_days - l_DAYS_IN_BALANCE);
565 			l_absence_days := l_absence_days + round(abs(p_days - l_absence_days)*p_Absence_percentage/100);
566 
567 		    END IF;
568 		ELSE
569 		/* If the generate is not set to 'Y' then consider the total absence days without applying absence percentage*/
570 			--l_absence_days:=l_absence_days + l_DAYS_IN_BALANCE;
571 			l_absence_days := p_days;
572 	        END IF;
573 	ELSE
574 
575 	/*If the sick leave is not interupted*/
576 	l_absence_days := p_days;
577 	END if;
578 
579 return l_absence_days;
580 
581 END GET_DAYS_WITH_ABS_PERCENTAGE;
582 
583 FUNCTION CHECK_SICK_INTERUPTED(p_date_earned IN date,
584 		p_assignment_id IN NUMBER,
585 		p_tax_unit_id IN NUMBER,
586 		p_business_group_id in NUMBER,
587 		p_category_code IN VARCHAR2
588 		)
589 RETURN VARCHAR2
590 IS
591 l_end_month NUMBER;
592 l_earn_year NUMBER;
593 l_earning_end_date DATE;
594 l_earning_start_date DATE;
595 l_prev_end_date DATE;
596 l_return VARCHAR2(1);
597 l_counter NUMBER:=0;
598 
599 CURSOR csr_sick_interrupted(csr_v_assignment_id NUMBER,
600 csr_v_effective_date DATE,
601 csr_v_earn_start_date DATE,
602 csr_v_category_code VARCHAR2 ) --,
603 --csr_v_earn_end_date DATE)
604 IS
605 SELECT fnd_date.canonical_to_date(peevf1.SCREEN_ENTRY_VALUE) start_date
606 ,fnd_date.canonical_to_date(peevf2.SCREEN_ENTRY_VALUE) end_date
607 ,fnd_number.canonical_to_number(peevf4.SCREEN_ENTRY_VALUE) Absence_Percentage
608 FROM   per_all_assignments_f      paaf
609 ,pay_element_types_f	      et
610 ,pay_element_entries_f      ee
611 ,pay_element_entry_values_f peevf1
612 ,pay_element_entry_values_f peevf2
613 ,pay_element_entry_values_f peevf3
614 ,pay_element_entry_values_f peevf4
615 ,pay_input_values_f pivf1
616 ,pay_input_values_f pivf2
617 ,pay_input_values_f pivf3
618 ,pay_input_values_f pivf4
619 WHERE  paaf.assignment_id=csr_v_assignment_id
620 AND csr_v_effective_date BETWEEN paaf.effective_start_date AND paaf.effective_end_date
621 AND et.element_name= 'Sickness Details'
622 AND et.legislation_code= 'SE'
623 AND ee.assignment_id= paaf.assignment_id
624 AND ee.ELEMENT_TYPE_ID=et.ELEMENT_TYPE_ID
625 AND ee.ELEMENT_ENTRY_ID=peevf1.ELEMENT_ENTRY_ID
626 AND pivf1.element_type_id= et.element_type_id
627 AND pivf1.name='Start Date'
628 AND peevf1.input_value_id=pivf1.input_value_id
629 and ee.ELEMENT_ENTRY_ID=peevf2.ELEMENT_ENTRY_ID
630 AND pivf2.element_type_id=et.element_type_id
631 AND pivf2.name='End Date'
632 AND peevf2.input_value_id=pivf2.input_value_id
633 AND ee.ELEMENT_ENTRY_ID =peevf3.ELEMENT_ENTRY_ID
634 AND pivf3.element_type_id=et.element_type_id
635 AND pivf3.name='Absence Category'
636 AND peevf3.input_value_id=pivf3.input_value_id
637 AND peevf3.SCREEN_ENTRY_VALUE=csr_v_category_code
638 AND ee.ELEMENT_ENTRY_ID=peevf4.ELEMENT_ENTRY_ID
639 AND pivf4.element_type_id=et.element_type_id
640 AND pivf4.name='Absence Percentage'
641 AND peevf4.input_value_id=pivf4.input_value_id
642 AND ee.effective_start_date<=csr_v_effective_date
643 AND ee.effective_end_date>=csr_v_earn_start_date
644 AND peevf1.effective_start_date<=csr_v_effective_date
645 AND peevf1.effective_end_date>=csr_v_earn_start_date
646 AND peevf2.effective_start_date<=csr_v_effective_date
647 AND peevf2.effective_end_date>=csr_v_earn_start_date
648 AND peevf3.effective_start_date<=csr_v_effective_date
649 AND peevf3.effective_end_date>=csr_v_earn_start_date
650 AND peevf4.effective_start_date<=csr_v_effective_date
651 AND peevf4.effective_end_date>=csr_v_earn_start_date
652 ORDER BY fnd_date.canonical_to_date(peevf1.SCREEN_ENTRY_VALUE);
653 
654 CURSOR csr_end_earn_month(csr_v_assignment_id NUMBER,
655 csr_v_effective_date DATE,
656 csr_v_business_group_id NUMBER)
657 IS
658 SELECT substr(hoi4.ORG_INFORMATION2,4,2)
659 FROM HR_ORGANIZATION_UNITS o1
660 ,HR_ORGANIZATION_INFORMATION hoi1
661 ,HR_ORGANIZATION_INFORMATION hoi2
662 ,HR_ORGANIZATION_INFORMATION hoi3
663 ,HR_ORGANIZATION_INFORMATION hoi4
664 ,( SELECT TRIM(SCL.SEGMENT2) AS ORG_ID
665 FROM PER_ALL_ASSIGNMENTS_F ASG
666 ,HR_SOFT_CODING_KEYFLEX SCL
667 WHERE ASG.ASSIGNMENT_ID	= csr_v_assignment_id
668 AND ASG.SOFT_CODING_KEYFLEX_ID = SCL.SOFT_CODING_KEYFLEX_ID
669 AND csr_v_effective_date BETWEEN ASG.EFFECTIVE_START_DATE	AND ASG.EFFECTIVE_END_DATE ) X
670 WHERE o1.business_group_id = csr_v_business_group_id
671 AND hoi1.organization_id = o1.organization_id
672 AND hoi1.organization_id = X.ORG_ID
673 AND hoi1.org_information1 = 'SE_LOCAL_UNIT'
674 AND hoi1.org_information_context = 'CLASS'
675 AND o1.organization_id = hoi2.org_information1
676 AND hoi2.ORG_INFORMATION_CONTEXT='SE_LOCAL_UNITS'
677 AND hoi2.organization_id =  hoi3.organization_id
678 AND hoi3.ORG_INFORMATION_CONTEXT='CLASS'
679 AND hoi3.org_information1 = 'HR_LEGAL_EMPLOYER'
680 AND hoi3.organization_id = hoi4.organization_id
681 AND hoi4.ORG_INFORMATION_CONTEXT='SE_HOLIDAY_YEAR_DEFN'
682 AND hoi4.org_information1 IS NOT NULL;
683 
684 BEGIN
685 /*Get the Earn Year end date*/
686 l_earn_year:=PAY_SE_HOLIDAY_PAY.Get_Earning_Year(p_date_earned,p_tax_unit_id);
687 OPEN csr_end_earn_month(p_assignment_id,p_date_earned,p_business_group_id);
688 	FETCH csr_end_earn_month INTO l_end_month;
689 CLOSE csr_end_earn_month;
690 l_earning_end_date:=last_day(to_date('01/'||l_end_month|| '/' ||l_earn_year,'dd/mm/yyyy'));
691 /*find the starting date of the holiday year two years back*/
692 l_earning_start_date:=add_months(l_earning_end_date,-24)+1;
693 /*check for the sick pay whether it is interrupted*/
694 FOR csr_sick IN csr_sick_interrupted(p_assignment_id,l_earning_end_date,l_earning_start_date,p_category_code) LOOP
695 	l_counter:=l_counter+1;
696 	IF (csr_sick.start_date-(l_prev_end_date+1))>14 OR ((csr_sick.start_date-l_earning_start_date)>14 AND l_counter=1) OR (csr_sick.Absence_Percentage<>100) THEN
697 		l_return:='Y';
698 		EXIT;
699 	END IF;
700         l_prev_end_date:=csr_sick.end_date;
701 END LOOP csr_sick_interrupted;
702 
703 IF l_return IS NULL THEN
704 	l_return:='N';
705 END IF;
706 RETURN l_return;
707 END CHECK_SICK_INTERUPTED;
708 
709 END PAY_SE_ABSENCE_USER;
710