1 PACKAGE BODY pay_in_exc AS
2 /* $Header: pyinexc.pkb 120.4.12020000.4 2013/02/07 12:48:06 pthummal ship $ */
3 g_package CONSTANT VARCHAR2(100) := 'pay_in_exc.';
4 g_debug BOOLEAN;
5
6 --------------------------------------------------------------------------
7 -- --
8 -- Name : NEXT_PERIOD --
12 -- date of the day after the end of the --
9 -- Type : FUNCTION --
10 -- Access : Private --
11 -- Description : Given a date and a payroll action id, returns the --
13 -- containing pay period. --
14 -- --
15 -- Parameters : --
16 -- IN : p_pactid NUMBER --
17 -- p_date DATE --
18 -- RETURN : date --
19 -- --
20 -- Change History : --
21 --------------------------------------------------------------------------
22 -- Rev# Date Userid Description --
23 --------------------------------------------------------------------------
24 -- 1.0 16-JUL-04 lnagaraj Created this function --
25 --------------------------------------------------------------------------
26 FUNCTION next_period ( p_pactid IN NUMBER
27 , p_date IN DATE
28 )
29 RETURN DATE
30 IS
31
32 l_return_val DATE := NULL;
33
34 CURSOR cur_end_date ( p_pactid NUMBER
35 , p_date DATE
36 ) IS
37 SELECT TP.end_date + 1
38 FROM per_time_periods TP
39 , pay_payroll_actions PACT
40 WHERE PACT.payroll_action_id = p_pactid
41 AND PACT.payroll_id = TP.payroll_id
42 AND p_date BETWEEN TP.start_date AND TP.end_date;
43
44 BEGIN
45
46
47 OPEN cur_end_date ( p_pactid
48 , p_date
49 );
50 FETCH cur_end_date INTO l_return_val;
51 CLOSE cur_end_date;
52
53 RETURN l_return_val;
54
55 EXCEPTION
56 WHEN OTHERS THEN
57 IF cur_end_date%ISOPEN THEN
58 CLOSE cur_end_date;
59 END IF;
60
61 RAISE;
62 END next_period;
63
64 --------------------------------------------------------------------------
65 -- --
66 -- Name : NEXT_PERIOD --
67 -- Type : FUNCTION --
68 -- Access : Private --
69 -- Description : Given a payroll action id, returns the --
70 -- date of the day after the end of the --
71 -- containing pay period. --
72 -- --
73 -- Parameters : --
74 -- IN : p_pactid NUMBER --
75 -- RETURN : date --
76 -- --
77 -- Change History : --
78 --------------------------------------------------------------------------
79 -- Rev# Date Userid Description --
80 --------------------------------------------------------------------------
81 -- 1.0 07-Feb-2013 pthummal Created this overloaded function --
82 --------------------------------------------------------------------------
83 FUNCTION next_period ( p_pactid IN NUMBER
84 )
85 RETURN DATE
86 IS
87
88 l_return_val DATE := NULL;
89
90 CURSOR cur_end_date ( p_pactid NUMBER
91 ) IS
92 SELECT TP.end_date + 1
93 FROM per_time_periods TP
94 , pay_payroll_actions PACT
95 WHERE PACT.payroll_action_id = p_pactid
96 AND PACT.payroll_id = TP.payroll_id
97 AND PACT.date_earned BETWEEN TP.start_date AND TP.end_date;
98
99 BEGIN
100
101
102 OPEN cur_end_date ( p_pactid
103 );
104 FETCH cur_end_date INTO l_return_val;
105 CLOSE cur_end_date;
106
107 RETURN l_return_val;
108
109 EXCEPTION
110 WHEN OTHERS THEN
111 IF cur_end_date%ISOPEN THEN
112 CLOSE cur_end_date;
113 END IF;
114
115 RAISE;
116 END next_period;
117
118 --------------------------------------------------------------------------
119 -- --
120 -- Name : NEXT_MONTH --
121 -- Type : FUNCTION --
122 -- Access : Private --
123 -- Description : Given a date, returns the date of the first day of --
124 -- the next month. --
125 -- --
126 -- Parameters : --
127 -- IN : p_date DATE --
128 -- RETURN : date --
129 -- --
130 -- Change History : --
131 --------------------------------------------------------------------------
135 --------------------------------------------------------------------------
132 -- Rev# Date Userid Description --
133 --------------------------------------------------------------------------
134 -- 1.0 16-JUL-2004 lnagaraj Created this function --
136 FUNCTION next_month ( p_date IN DATE
137 )
138 RETURN DATE
139 IS
140 l_procedure VARCHAR2(100);
141 BEGIN
142
143 RETURN TRUNC(add_months(p_date,1),'MM');
144
145 END next_month;
146
147 --------------------------------------------------------------------------
148 -- --
149 -- Name : NEXT_QUARTER --
150 -- Type : FUNCTION --
151 -- Access : Private --
152 -- Description : Given a date returns the first day of the next --
153 -- quarter. --
154 -- Parameters : --
155 -- IN : p_date DATE --
156 -- RETURN : date --
157 -- --
158 -- Change History : --
159 --------------------------------------------------------------------------
160 -- Rev# Date Userid Description --
161 --------------------------------------------------------------------------
162 -- 1.0 16-JUL-2004 lnagaraj Created this function --
163 --------------------------------------------------------------------------
164 FUNCTION next_quarter ( p_date IN DATE
165 )
166 RETURN DATE
167 IS
168
169 BEGIN
170
171 RETURN TRUNC(ADD_MONTHS(p_date,3),'Q');
172
173 END next_quarter;
174
175
176 --------------------------------------------------------------------------
177 -- --
178 -- Name : NEXT_TAX_YEAR --
179 -- Type : FUNCTION --
180 -- Access : Private --
181 -- Description : Given a date, returns the date of the first day of --
182 -- the next tax year. --
183 -- --
184 -- Parameters : --
185 -- IN : p_date DATE --
186 -- OUT : date --
187 -- --
188 -- Change History : --
189 --------------------------------------------------------------------------
190 -- Rev# Date Userid Description --
191 --------------------------------------------------------------------------
192 -- 1.0 16-JUL-2004 lnagaraj Created this function --
193 --------------------------------------------------------------------------
194 FUNCTION next_tax_year ( p_date IN DATE
195 )
196 RETURN DATE
197 IS
198 l_year number(4);
199 l_start DATE;
200 l_start_dd_mm VARCHAR2(6);
201 BEGIN
202 l_year := TO_NUMBER(TO_CHAR(p_date,'yyyy'));
203 l_start_dd_mm := '01-04-';
204
205 IF p_date >= TO_DATE(l_start_dd_mm||TO_CHAR(l_year),'dd-mm-yyyy') THEN
206 l_start := TO_DATE(l_start_dd_mm||TO_CHAR(l_year+1),'dd-mm-yyyy');
207 ELSE
208 l_start := TO_DATE(l_start_dd_mm||TO_CHAR(l_year),'dd-mm-yyyy');
209 END IF;
210 RETURN l_start;
211 END next_tax_year;
212
213 --------------------------------------------------------------------------
214 -- --
215 -- Name : NEXT_CAL_YEAR --
216 -- Type : FUNCTION --
217 -- Access : Private --
218 -- Description : Given a date, returns the date of the first day of --
219 -- the next calendar year. --
220 -- --
221 -- Parameters : --
222 -- IN : p_date DATE --
223 -- OUT : date --
224 -- --
225 -- Change History : --
226 --------------------------------------------------------------------------
227 -- Rev# Date Userid Description --
228 --------------------------------------------------------------------------
229 -- 1.0 16-JUL-2004 lnagaraj Created this function --
230 --------------------------------------------------------------------------
231 FUNCTION next_cal_year ( p_date IN DATE
232 )
233 RETURN DATE
234 IS
235 BEGIN
236 RETURN TRUNC(ADD_MONTHS(p_date,12),'Y');
237 END next_cal_year;
238
239 --------------------------------------------------------------------------
240 -- --
241 -- Name : NEXT_MAR_FEB_YEAR --
242 -- Type : FUNCTION --
243 -- Access : Private --
244 -- Description : Given a date, returns the date of the first day of --
245 -- the next Mar-Feb year. --
246 -- --
247 -- Parameters : --
248 -- IN : p_date DATE --
249 -- OUT : date --
250 -- --
251 -- Change History : --
252 --------------------------------------------------------------------------
253 -- Rev# Date Userid Description --
254 --------------------------------------------------------------------------
255 -- 1.0 16-JUL-2004 lnagaraj Created this function --
256 --------------------------------------------------------------------------
257 FUNCTION next_mar_feb_year ( p_date IN DATE
258 )
259 RETURN DATE
260 IS
261 l_year number(4);
262 l_start DATE;
263 l_start_dd_mm VARCHAR2(6);
264 BEGIN
265 l_year := TO_NUMBER(TO_CHAR(p_date,'yyyy'));
266 l_start_dd_mm := '01-03-';
267
268 IF p_date >= TO_DATE(l_start_dd_mm||TO_CHAR(l_year),'dd-mm-yyyy') THEN
269 l_start := TO_DATE(l_start_dd_mm||TO_CHAR(l_year+1),'dd-mm-yyyy');
270 ELSE
271 l_start := TO_DATE(l_start_dd_mm||TO_CHAR(l_year ),'dd-mm-yyyy');
272 END IF;
273 RETURN l_start;
274 END next_mar_feb_year;
275
276 --------------------------------------------------------------------------
277 -- --
278 -- Name : NEXT_HALF_YEAR --
279 -- Type : FUNCTION --
280 -- Access : Private --
281 -- Description : Given a date, returns the date of the first day of --
282 -- the NEXT Half Tax year. --
283 -- --
284 -- Parameters : --
285 -- IN : p_date DATE --
286 -- OUT : date --
287 -- --
288 -- Change History : --
289 --------------------------------------------------------------------------
290 -- Rev# Date Userid Description --
291 --------------------------------------------------------------------------
295 )
292 -- 1.0 16-JUL-2004 lnagaraj Created this function --
293 --------------------------------------------------------------------------
294 FUNCTION next_half_year ( p_date IN DATE
296 RETURN DATE
297 IS
298 l_year number(4);
299 l_month number(2);
300 l_start DATE;
301 l_half_start1 constant VARCHAR2(6) := '01-04-';
302 l_half_start2 constant VARCHAR2(6) := '01-10-';
303 BEGIN
304 l_year := TO_NUMBER(TO_CHAR(p_date,'yyyy'));
305 l_month:= TO_NUMBER(TO_CHAR(p_date,'mm'));
306
307 IF l_month BETWEEN 4 AND 9 THEN
308 l_start := TO_DATE(l_half_start2||TO_CHAR(l_year),'dd-mm-yyyy');
309 ELSIF l_month BETWEEN 10 and 12 THEN
310 l_start := TO_DATE(l_half_start1||TO_CHAR(l_year+1),'dd-mm-yyyy');
311 ELSE
312 l_start := TO_DATE(l_half_start1||TO_CHAR(l_year),'dd-mm-yyyy');
313 END IF;
314
315
316 RETURN l_start;
317 END next_half_year;
318
319 --------------------------------------------------------------------------
320 -- --
321 -- Name : NEXT_CAL_HALF_YEAR --
322 -- Type : FUNCTION --
323 -- Access : Private --
324 -- Description : Given a date, returns the date of the first day of --
325 -- the NEXT Half Tax year. --
326 -- --
327 -- Parameters : --
328 -- IN : p_date DATE --
329 -- OUT : date --
330 -- --
331 -- Change History : --
332 --------------------------------------------------------------------------
333 -- Rev# Date Userid Description --
334 --------------------------------------------------------------------------
335 -- 1.0 02-JUN-2008 rsaharay Created this function --
336 --------------------------------------------------------------------------
337 FUNCTION next_cal_half_year ( p_date IN DATE
338 )
339 RETURN DATE
340 IS
341 l_year number(4);
342 l_month number(2);
343 l_start DATE;
344 l_half_start1 constant VARCHAR2(6) := '01-01-';
345 l_half_start2 constant VARCHAR2(6) := '01-07-';
346 BEGIN
347 l_year := TO_NUMBER(TO_CHAR(p_date,'yyyy'));
348 l_month:= TO_NUMBER(TO_CHAR(p_date,'mm'));
349
350 IF l_month BETWEEN 1 AND 6 THEN
351 l_start := TO_DATE(l_half_start2||TO_CHAR(l_year),'dd-mm-yyyy');
352 ELSE
353 l_start := TO_DATE(l_half_start1||TO_CHAR(l_year+1),'dd-mm-yyyy');
354 END IF;
355
356
357 RETURN l_start;
358 END next_cal_half_year;
359
360 --------------------------------------------------------------------------
361
362 -- --
363 -- Name : DATE_EC --
364 -- Type : PROCEDURE --
365 -- Access : Public --
366 -- Description : This procedure assumes the date portion of the --
367 -- dimension name is always at the end to allow --
368 -- accurate identification since this is used for many --
369 -- dimensions. --
370 -- --
371 -- Parameters : --
372 -- IN : p_owner_payroll_action_id NUMBER --
373 -- p_user_payroll_action_id NUMBER --
374 -- p_owner_assignment_action_id NUMBER --
375 -- p_user_assignment_action_id NUMBER --
376 -- p_owner_effective_date DATE --
377 -- p_user_effective_date DATE --
378 -- p_dimension_name VARCHAR2 --
379 -- OUT : p_expiry_information NUMBER --
380 -- --
381 -- Change History : --
382 --------------------------------------------------------------------------
383 -- Rev# Date Userid Description --
384 --------------------------------------------------------------------------
385 -- 1.0 16-JUL-04 lnagaraj Created this procedure --
386 -- 1.1 07-OCT-04 lnagaraj Added Code for LTD dimensions --
387 --------------------------------------------------------------------------
388 PROCEDURE date_ec ( p_owner_payroll_action_id IN NUMBER
389 , p_user_payroll_action_id IN NUMBER
390 , p_owner_assignment_action_id IN NUMBER
391 , p_user_assignment_action_id IN NUMBER
392 , p_owner_effective_date IN DATE
393 , p_user_effective_date IN DATE
394 , p_dimension_name IN VARCHAR2
395 , p_expiry_information OUT NOCOPY NUMBER
396 )
397 IS
398
399 l_message VARCHAR2(255);
400 l_expiry_date DATE := NULL;
401 l_procedure VARCHAR2(100);
402
403
404 BEGIN
405
406 g_debug := hr_utility.debug_enabled;
410 IF g_debug THEN
407 l_procedure := g_package ||'date_ec1';
408 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
409
411 pay_in_utils.trace('**************************************************','********************');
412 pay_in_utils.trace('Owner Payroll Action id ',p_owner_payroll_action_id);
413 pay_in_utils.trace('User Payroll Action id ',p_user_payroll_action_id);
414 pay_in_utils.trace('Owner Assignment Action id ',p_owner_assignment_action_id);
415 pay_in_utils.trace('User Assignment Action id ',p_user_assignment_action_id);
416 pay_in_utils.trace('Owner Effective Date ',p_owner_effective_date);
417 pay_in_utils.trace('User Effective Date ',p_user_effective_date);
418 pay_in_utils.trace('Dimension Name ',p_dimension_name);
419 pay_in_utils.trace('**************************************************','********************');
420 END IF;
421
422 IF p_dimension_name LIKE '%RUN' THEN
423 -- must check for special case: if payroll action id's are the same,
424 -- then don't expire. This facilitates meaningful access of these
425 -- balances outside of runs.
426
427 IF p_owner_payroll_action_id <> p_user_payroll_action_id THEN
428 l_expiry_date := p_user_effective_date; -- always must expire.
429 ELSE
430 p_expiry_information := 0;
431 RETURN;
432 END IF;
433
434 ELSIF p_dimension_name LIKE '%PAYMENTS' THEN
435 -- must check for special case: if payroll action id's are the same,
436 -- then don't expire. This facilitates meaningful access of these
437 -- balances outside of runs.
438
439 IF p_owner_payroll_action_id <> p_user_payroll_action_id THEN
440 l_expiry_date := p_user_effective_date; -- always must expire.
441 ELSE
442 p_expiry_information := 0;
443 RETURN;
444 END IF;
445
446 ELSIF p_dimension_name LIKE '%DE_PTD' THEN
447 l_expiry_date := next_period ( p_owner_payroll_action_id
448 );
449
450 ELSIF p_dimension_name LIKE '%PTD' THEN
451 l_expiry_date := next_period ( p_owner_payroll_action_id
452 , p_owner_effective_date
453 );
454
455 ELSIF p_dimension_name LIKE '%MTD' THEN
456 l_expiry_date := next_month ( p_owner_effective_date);
457
458 ELSIF p_dimension_name LIKE '%QTD' THEN
459 l_expiry_date := next_quarter ( p_owner_effective_date);
460
461 ELSIF p_dimension_name LIKE '%CYTD' THEN
462
463 l_expiry_date := next_cal_year ( p_owner_effective_date);
464
465 ELSIF p_dimension_name LIKE '%MAR_FEB_YTD' THEN
466
467 l_expiry_date := next_mar_feb_year ( p_owner_effective_date);
468 ELSIF p_dimension_name LIKE '%CHYTD' THEN
469
470 l_expiry_date := next_cal_half_year ( p_owner_effective_date);
471
472 ELSIF p_dimension_name LIKE '%HYTD' THEN
473
474 l_expiry_date := next_half_year ( p_owner_effective_date);
475
476 ELSIF p_dimension_name LIKE '%YTD' THEN
477 l_expiry_date := next_tax_year ( p_owner_effective_date);
478 /* Changes for 3839878 Start */
479 ELSIF p_dimension_name LIKE '%LTD' THEN
480 p_expiry_information := 0;
481 RETURN;
482 /* Changes for 3839878 End */
483
484 ELSE
485 hr_utility.set_message(801,'NO_EXP_CHECK_FOR_DIMENSION');
486 hr_utility.raise_error;
487
488 END IF;
489
490 IF p_user_effective_date >= l_expiry_date THEN
491 p_expiry_information := 1;
492 ELSE
493 p_expiry_information := 0;
494 END IF;
495
496 IF g_debug THEN
497 pay_in_utils.trace('**************************************************','********************');
498 pay_in_utils.trace('Expiry Date ',l_expiry_date);
499 pay_in_utils.trace('Expiry Information ',p_expiry_information);
500 pay_in_utils.trace('**************************************************','********************');
501 END IF;
502 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
503
504 END date_ec;
505
506 --------------------------------------------------------------------------
507 -- --
508 -- Name : DATE_EC --
509 -- Type : PROCEDURE --
510 -- Access : Public --
511 -- Description : This procedure assumes the date portion of the --
512 -- dimension name is always at the end to allow --
513 -- accurate identification since this is used for many --
514 -- dimensions. --
515 -- --
516 -- Parameters : --
517 -- IN : p_owner_payroll_action_id NUMBER --
518 -- p_user_payroll_action_id NUMBER --
519 -- p_owner_assignment_action_id NUMBER --
520 -- p_user_assignment_action_id NUMBER --
521 -- p_owner_effective_date DATE --
522 -- p_user_effective_date DATE --
523 -- p_dimension_name VARCHAR2 --
524 -- OUT : p_expiry_information DATE --
525 -- --
529 --------------------------------------------------------------------------
526 -- Change History : --
527 --------------------------------------------------------------------------
528 -- Rev# Date Userid Description --
530 -- 1.0 16-JUL-04 lnagaraj Created this procedure --
531 -- 1.1 07-OCT-04 lnagaraj Added Code for LTD dimension --
532 --------------------------------------------------------------------------
533
534 PROCEDURE date_ec ( p_owner_payroll_action_id IN NUMBER
535 , p_user_payroll_action_id IN NUMBER
536 , p_owner_assignment_action_id IN NUMBER
537 , p_user_assignment_action_id IN NUMBER
538 , p_owner_effective_date IN DATE
539 , p_user_effective_date IN DATE
540 , p_dimension_name IN VARCHAR2
541 , p_expiry_information OUT NOCOPY DATE
542 )
543 IS
544
545
546 l_expiry_date DATE := NULL;
547 l_procedure VARCHAR2(100);
548 l_message VARCHAR2(255);
549
550
551 BEGIN
552
553 g_debug := hr_utility.debug_enabled;
554 l_procedure := g_package ||'date_ec2';
555 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
556
557 IF g_debug THEN
558 pay_in_utils.trace('**************************************************','********************');
559 pay_in_utils.trace('Owner Payroll Action id ',p_owner_payroll_action_id);
560 pay_in_utils.trace('User Payroll Action id ',p_user_payroll_action_id);
561 pay_in_utils.trace('Owner Assignment Action id ',p_owner_assignment_action_id);
562 pay_in_utils.trace('User Assignment Action id ',p_user_assignment_action_id);
563 pay_in_utils.trace('Owner Effective Date ',p_owner_effective_date);
564 pay_in_utils.trace('User Effective Date ',p_user_effective_date);
565 pay_in_utils.trace('Dimension Name ',p_dimension_name);
566 pay_in_utils.trace('**************************************************','********************');
567 END IF;
568
569
570 IF p_dimension_name LIKE '%RUN' THEN
571 -- must check for special case: if payroll action id's are the same,
572 -- then don't expire. This facilitates meaningful access of these
573 -- balances outside of runs.
574
575 p_expiry_information := p_owner_effective_date;
576
577 ELSIF p_dimension_name LIKE '%PAYMENTS' THEN
578
579 p_expiry_information := p_owner_effective_date;
580
581 ELSIF p_dimension_name LIKE '%DE_PTD' THEN
582 p_expiry_information := next_period ( p_owner_payroll_action_id
583 ) - 1 ;
584
585 ELSIF p_dimension_name LIKE '%PTD' THEN
586 p_expiry_information := next_period ( p_owner_payroll_action_id
587 , p_owner_effective_date
588 ) - 1 ;
589
590 ELSIF p_dimension_name LIKE '%MTD' THEN
591 p_expiry_information := next_month ( p_owner_effective_date) - 1 ;
592
593 ELSIF p_dimension_name LIKE '%QTD' THEN
594 p_expiry_information := next_quarter ( p_owner_effective_date) - 1 ;
595
596 ELSIF p_dimension_name LIKE '%CYTD' THEN
597
598 p_expiry_information := next_cal_year ( p_owner_effective_date)-1;
599
600 ELSIF p_dimension_name LIKE '%CHYTD' THEN
601
602 p_expiry_information := next_cal_half_year ( p_owner_effective_date)-1;
603
604
605 ELSIF p_dimension_name LIKE '%MAR_FEB_YTD' THEN
606
607 p_expiry_information := next_mar_feb_year ( p_owner_effective_date)-1;
608 ELSIF p_dimension_name LIKE '%HYTD' THEN
609
610 p_expiry_information := next_half_year ( p_owner_effective_date)-1;
611
612 ELSIF p_dimension_name LIKE '%YTD' THEN
613 p_expiry_information := next_tax_year ( p_owner_effective_date) - 1 ;
614 /* Changes for 3839878 Start */
615 ELSIF p_dimension_name LIKE '%LTD' THEN
616 p_expiry_information := fnd_date.canonical_to_date('4712/12/31');
617 /* Changes for 3839878 End */
618 ELSE
619 hr_utility.set_message(801,'NO_EXP_CHECK_FOR_DIMENSION');
620 hr_utility.raise_error;
621
622 END IF;
623
624 IF g_debug THEN
625 pay_in_utils.trace('**************************************************','********************');
626 pay_in_utils.trace('Expiry Information ',p_expiry_information);
627 pay_in_utils.trace('**************************************************','********************');
628 END IF;
629
630 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
631
632 END date_ec;
633
634 PROCEDURE cal_hy_start(p_effective_date IN DATE ,
635 p_start_date OUT NOCOPY DATE,
636 p_start_date_code IN VARCHAR2 DEFAULT NULL,
637 p_payroll_id IN NUMBER DEFAULT NULL,
638 p_bus_grp IN NUMBER DEFAULT NULL,
639 p_action_type IN VARCHAR2 DEFAULT NULL,
640 p_asg_action IN NUMBER DEFAULT NULL)
641 AS
642
643 l_year NUMBER(4);
644 l_month NUMBER(2);
645 l_half_start1 CONSTANT VARCHAR2(6):='01-01-';
646 l_half_start2 CONSTANT VARCHAR2(6):= '01-07-';
647 l_procedure VARCHAR2(100);
648 l_message VARCHAR2(255);
649
650 BEGIN
651 g_debug := hr_utility.debug_enabled;
652 l_procedure := g_package ||'cal_hy_start';
653 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
654
655 p_start_date :=NULL;
656 l_year := TO_NUMBER (TO_CHAR(p_effective_date,'yyyy'));
657 l_month := TO_NUMBER (TO_CHAR(p_effective_date,'mm'));
658
659 IF l_month BETWEEN 1 and 6 THEN
660 p_start_date:=TO_DATE(l_half_start1||TO_CHAR(l_year),'DD-MM-YYYY');
661 ELSE
662 p_start_date:=TO_DATE(l_half_start2||TO_CHAR(l_year),'DD-MM-YYYY');
663 END IF;
664
665 IF g_debug THEN
666 pay_in_utils.trace('**************************************************','********************');
667 pay_in_utils.trace('Effective Date ',p_effective_date);
668 pay_in_utils.trace('Start Date ',p_start_date);
669 pay_in_utils.trace('**************************************************','********************');
670 END IF;
671
672 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
673
674 END;
675
676
677
678
679 PROCEDURE prov_ytd_start(p_effective_date IN DATE ,
680 p_start_date OUT NOCOPY DATE,
681 p_start_date_code IN VARCHAR2 DEFAULT NULL,
682 p_payroll_id IN NUMBER DEFAULT NULL,
683 p_bus_grp IN NUMBER DEFAULT NULL,
684 p_action_type IN VARCHAR2 DEFAULT NULL,
685 p_asg_action IN NUMBER DEFAULT NULL)
686 AS
687
688 l_year NUMBER(4);
689 l_message VARCHAR2(255);
690 l_procedure VARCHAR2(100);
691
692 BEGIN
693 g_debug := hr_utility.debug_enabled;
694 l_procedure := g_package ||'prov_ytd_start';
695 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
696
697 p_start_date :=NULL;
698 l_year := TO_NUMBER (TO_CHAR(p_effective_date,'yyyy'));
699
700 IF p_effective_date>=TO_DATE('01-03-'||TO_CHAR(l_year),'DD-MM-YYYY') THEN
701 p_start_date := TO_DATE('01-03-'||TO_CHAR(l_year),'DD-MM-YYYY');
702 ELSE
703 p_start_date := TO_DATE('01-03-'||TO_CHAR(l_year-1),'DD-MM-YYYY');
704 END IF;
705
706 IF g_debug THEN
707 pay_in_utils.trace('**************************************************','********************');
708 pay_in_utils.trace('Effective Date ',p_effective_date);
709 pay_in_utils.trace('Start Date ',p_start_date);
710 END IF;
711
712 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
713
714 END;
715
716 PROCEDURE hytd_start(p_effective_date IN DATE ,
717 p_start_date OUT NOCOPY DATE,
718 p_start_date_code IN VARCHAR2 DEFAULT NULL,
719 p_payroll_id IN NUMBER DEFAULT NULL,
720 p_bus_grp IN NUMBER DEFAULT NULL,
721 p_action_type IN VARCHAR2 DEFAULT NULL,
722 p_asg_action IN NUMBER DEFAULT NULL)
723 AS
724
725 l_year NUMBER(4);
726 l_month NUMBER(2);
727 l_half_start1 CONSTANT VARCHAR2(6):='01-04-';
728 l_half_start2 CONSTANT VARCHAR2(6):= '01-10-';
729 l_procedure VARCHAR2(100);
730 l_message VARCHAR2(255);
731
732 BEGIN
733 g_debug := hr_utility.debug_enabled;
734 l_procedure := g_package ||'hytd_start';
735 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
736
737 p_start_date :=NULL;
738 l_year := TO_NUMBER (TO_CHAR(p_effective_date,'yyyy'));
739 l_month := TO_NUMBER (TO_CHAR(p_effective_date,'mm'));
740
741 IF l_month BETWEEN 4 and 9 THEN
742 p_start_date:=TO_DATE(l_half_start1||TO_CHAR(l_year),'DD-MM-YYYY');
743 ELSIF l_month BETWEEN 10 and 12 THEN
744 p_start_date:=TO_DATE(l_half_start2||TO_CHAR(l_year),'DD-MM-YYYY');
745 ELSE
746 p_start_date:=TO_DATE(l_half_start2||TO_CHAR(l_year-1),'DD-MM-YYYY');
747 END IF;
748
749 IF g_debug THEN
750 pay_in_utils.trace('**************************************************','********************');
751 pay_in_utils.trace('Effective Date ',p_effective_date);
752 pay_in_utils.trace('Start Date ',p_start_date);
753 pay_in_utils.trace('**************************************************','********************');
754 END IF;
755
756 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
757
758 END;
759
760 PROCEDURE get_td_start(p_effective_date in date,
761 p_start_date out nocopy date,
762 p_bus_grp in number default null,
763 p_payroll_id in number default null,
764 p_asg_action in number default null)
765 AS
766
767 l_year NUMBER(4);
768 l_month NUMBER(2);
769 l_half_start1 CONSTANT VARCHAR2(6):='01-04-';
770 l_half_start2 CONSTANT VARCHAR2(6):= '01-10-';
771 l_procedure VARCHAR2(100);
772 l_message VARCHAR2(255);
773 l_frequency NUMBER := 12;
774 l_assignment_id NUMBER;
775 l_start_date DATE;
776 l_end_date DATE;
777
778 cursor csr_freq IS
779 select target.org_information2
780 from per_all_assignments_f assign,
781 hr_soft_coding_keyflex hsc,
782 hr_organization_information target,
783 pay_assignment_actions paa
784 WHERE paa.assignment_action_id = p_asg_action
785 AND paa.assignment_id = assign.assignment_id
786 AND p_effective_date BETWEEN ASSIGN.effective_start_date AND ASSIGN.effective_end_date
787 AND assign.business_group_id = target.organization_id
788 AND target.org_information_context = 'PER_IN_PT_FREQUENCY'
789 AND assign.soft_coding_keyflex_id = hsc.soft_coding_keyflex_id
790 AND pay_in_prof_tax_pkg.get_state(hsc.segment3) = target.org_information1
791 AND p_effective_date BETWEEN fnd_date.canonical_to_date(target.org_information3)
792 AND fnd_date.canonical_to_date(nvl(target.org_information4,'4712/12/31 00:00:00'));
793
794 BEGIN
795 g_debug := hr_utility.debug_enabled;
796 l_procedure := g_package ||'get_td_start';
797 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
798
799 p_start_date :=NULL;
800 l_year := TO_NUMBER (TO_CHAR(p_effective_date,'yyyy'));
801 l_month := TO_NUMBER (TO_CHAR(p_effective_date,'mm'));
802
803 OPEN csr_freq;
804 FETCH csr_freq INTO l_frequency;
805 CLOSE csr_freq;
806
807 IF l_frequency = 2 THEN
808
809 IF l_month BETWEEN 4 and 9 THEN
810 p_start_date:=TO_DATE(l_half_start1||TO_CHAR(l_year),'DD-MM-YYYY');
811 ELSIF l_month BETWEEN 10 and 12 THEN
812 p_start_date:=TO_DATE(l_half_start2||TO_CHAR(l_year),'DD-MM-YYYY');
813 ELSE
814 p_start_date:=TO_DATE(l_half_start2||TO_CHAR(l_year-1),'DD-MM-YYYY');
815 END IF;
816
817 ELSIF l_frequency = 1 THEN
818
819 p_start_date := TO_DATE('01-'||to_char(l_month)||'-'||to_char(l_year),'DD-MM-YYYY');
820
821 ELSIF l_frequency = 12 THEN
822
823 IF l_month BETWEEN 4 and 12 THEN
824 p_start_date := TO_DATE('01-04-'||TO_CHAR(l_year),'DD-MM-YYYY');
825 ELSE
826 p_start_date := TO_DATE('01-04-'||TO_CHAR(l_year-1),'DD-MM-YYYY');
827 END IF;
828
829 END IF;
830 IF g_debug THEN
831 pay_in_utils.trace('**************************************************','********************');
832 pay_in_utils.trace('Frequency ',l_frequency );
833 pay_in_utils.trace('Effective Date ',p_effective_date);
834 pay_in_utils.trace('Start Date ',p_start_date);
835 pay_in_utils.trace('**************************************************','********************');
836 END IF;
837
838 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
839
840 END;
841
842 --------------------------------------------------------------------------
843 -- --
844 -- Name : START_CODE_PMTH --
845 -- Type : PROCEDURE --
846 -- Access : Public --
847 -- Description : This procedure finds the start date based on the --
848 -- effective date for the dimension name _ASG_PMTH --
849 -- --
850 -- Parameters : --
851 -- IN : p_effective_date DATE --
852 -- p_payroll_id NUMBER --
853 -- p_bus_grp NUMBER --
854 -- p_asg_action NUMBER --
855 -- OUT : p_start_date DATE --
856 -- RETURN : N/A --
857 -- --
858 -- Change History : --
859 --------------------------------------------------------------------------
860 -- Rev# Date Userid Description --
861 --------------------------------------------------------------------------
862 -- 1.0 15-Sep-2004 abhjain Created the procedure --
863 --------------------------------------------------------------------------
864 PROCEDURE start_code_pmth ( p_effective_date IN DATE
865 , p_start_date OUT NOCOPY DATE
866 , p_payroll_id IN NUMBER
867 , p_bus_grp IN NUMBER
868 , p_asg_action IN NUMBER
869 )
870 IS
871 l_procedure VARCHAR2(100);
872 l_message VARCHAR2(255);
873 BEGIN
874 g_debug := hr_utility.debug_enabled;
875 l_procedure := g_package ||'start_code_pmth';
876 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
877
878 p_start_date := last_day(add_months(p_effective_date, -2))+1;
879
880 IF g_debug THEN
881 pay_in_utils.trace('**************************************************','********************');
882 pay_in_utils.trace('Effective Date ',p_effective_date);
883 pay_in_utils.trace('Start Date ',p_start_date);
884 pay_in_utils.trace('**************************************************','********************');
885 END IF;
886
887 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
888
889
890 END start_code_pmth;
891
892 --------------------------------------------------------------------------
893 -- --
894 -- Name : START_CODE_P10MTH --
895 -- Type : PROCEDURE --
896 -- Access : Public --
897 -- Description : This procedure finds the start date based on the --
898 -- effective date for the dimension name _ASG_P10MTH --
899 -- --
900 -- Parameters : --
901 -- IN : p_effective_date DATE --
902 -- p_payroll_id NUMBER --
903 -- p_bus_grp NUMBER --
904 -- p_asg_action NUMBER --
905 -- OUT : p_start_date DATE --
906 -- RETURN : N/A --
907 -- --
908 -- Change History : --
909 --------------------------------------------------------------------------
910 -- Rev# Date Userid Description --
911 --------------------------------------------------------------------------
912 -- 1.0 14-Oct-2004 lnagaraj Created the procedure --
913 --------------------------------------------------------------------------
914 PROCEDURE start_code_p10mth ( p_effective_date IN DATE
915 , p_start_date OUT NOCOPY DATE
916 , p_payroll_id IN NUMBER
917 , p_bus_grp IN NUMBER
918 , p_asg_action IN NUMBER
919 )
920 IS
921 l_procedure VARCHAR2(100);
922 l_message VARCHAR2(255);
923 BEGIN
924 g_debug := hr_utility.debug_enabled;
925 l_procedure := g_package ||'start_code_p10mth';
926 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
927
928 p_start_date := last_day(add_months(p_effective_date, -11))+1;
929
930 IF g_debug THEN
931 pay_in_utils.trace('**************************************************','********************');
932 pay_in_utils.trace('Effective Date ',p_effective_date);
933 pay_in_utils.trace('Start Date ',p_start_date);
934 pay_in_utils.trace('**************************************************','********************');
935 END IF;
936 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 20);
937
938 END start_code_p10mth;
939
940
941 END pay_in_exc;