DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_ADVANCE_PAY_PKG

Source


1 package body pay_advance_pay_pkg as
2 /* $Header: paywsahp.pkb 120.2 2012/01/19 08:27:56 rpahune ship $ */
3 --
4 --------------------------------------------------------------------------------
5 /*
9 |			        All rights reserved.			       |
6 +==============================================================================+
7 |			Copyright (c) 1994 Oracle Corporation		       |
8 |			   Redwood Shores, California, USA		       |
10 +==============================================================================+
11 --
12 Name
13 	  PAY_ADVANCE_PAY_PKG
14 
15 Purpose
16           Server agent for PAYWSAHP form.
17 
18 History
19 
20 Date	  Ver   WW Bug  By		Comment
21 -----------------------------------------------------------------------------
22 18 Feb 97 40.00 	M.Lisiecki      Created
23           40.1-40.3     M.Lisiecki      Pre release changes.
24 17 Jun 97 40.4          M.Lisiecki      Changed advanced_periods.
25 25 Jun 97 40.5          M.Lisiecki      Changed get_balance and advance_amount
26 					to return char values, without any
27 					formating.
28 25 Jun 97 40.6          M.Lisiecki      Changed get_balance return statement
29 					back to number value.
30 10 Feb 98 110.2 620296  T.Battoo        Added parameter to advance amount and
31                                         get processed flag function
32 
33 25 Mar 98 110.3 634019  M.Lisiecki      Changed advance_amount and get_processed_flag
34 					adding effective date conditions.
35 24 Mar 99 115.1         S.Doshi         Flexible Dates Conversion - to_date
36 06 Apr 99 115.2         S.Doshi         Flexible Dates Conversion - to_char
37 24 Nov 99 115.4         SuSivasu        Passed Extrernal Date value to the element
38                                         entry api rather than canonical format.
39 20 Nov 04 115.5         SuSivasu        Fixed the get_balance procedure restrict
40                                         the user entity to the given legislation.
41 21 Jul 04 115.6         SuSivasu        Fixes for GSCC errors.
42 17 Aug 04 115.7         SuSivasu        Added get_advance_period_start_date
43                                         and get_advance_period_end_date.
44 10 Mar 11 120.0.12000000.2  bkeshary    Modified for International calender support
45                                         Bug no 11830805
46 
47 
48 -----------------------------------------------------------------------------
49 */
50 function advance_amount
51 --
52 -- Returns calculated advance amount for the assignment based on
53 -- Advance element entry's Pay Value.
54 --
55 (
56 p_advance_pay_start_date   date,
57 p_target_entry_id          number,
58 p_assignment_id          number
59 ) return varchar2
60 is
61 --
62 l_advance_amount   varchar2(60);
63 
64 cursor advance_amount is
65   select peevf.screen_entry_value
66   from pay_element_entries_f peef,
67        pay_element_entry_values_f peevf
68   where peef.assignment_id = p_assignment_id and
69         peef.target_entry_id = p_target_entry_id and
70 	peef.effective_start_date < p_advance_pay_start_date and
71 	peef.element_entry_id = peevf.element_entry_id and
72 	peef.effective_start_date = peevf.effective_start_date and
73 	peef.effective_end_date = peevf.effective_end_date;
74 
75 --
76 begin
77 --
78 open advance_amount;
79 fetch advance_amount into l_advance_amount;
80 close advance_amount;
81 
82 return l_advance_amount;
83 
84 end advance_amount;
85 -------------------------------------------------------------------------------
86 function get_balance
87 (
88 p_legislation_code         varchar2,
89 p_balance_lookup_name      varchar2,
90 p_assignment_id            number,
91 p_session_date             date
92 ) return number
93 is
94 --
95 -- Returns up to date balance amount for the assignment.
96 --
97 l_balance_value    number;
98 l_creator_id       number;
99 
100 cursor creator_id is
101   select fue.creator_id
102   from   ff_user_entities fue,
103   ff_database_items fdi,
104   pay_legislation_rules plr
105   where
106   plr.rule_type = p_balance_lookup_name and
107   plr.legislation_code = p_legislation_code and
108   plr.rule_mode = fdi.user_name and
109   fdi.user_entity_id = fue.user_entity_id and
110   fue.creator_type = 'B' and
111   ((fue.business_group_id is null and
112     fue.legislation_code = plr.legislation_code) or
113    (fue.business_group_id is not null and
114     exists (select null
115               from per_all_assignments_f asg
116              where asg.assignment_id = p_assignment_id
117                and fue.business_group_id = asg.business_group_id)));
118 --
119 begin
120 --
121 hr_utility.set_location('pay_advance_pay_pkg.get_balance', 5);
122 
123 open creator_id;
124 fetch creator_id into l_creator_id;
125 --
126 if creator_id%found then
127  l_balance_value := pay_balance_pkg.get_value(l_creator_id,
128 					      p_assignment_id,
129 				    	      p_session_date);
130   --
131 end if;
132 --
133 close creator_id;
134 
135 return l_balance_value;
136 
137 hr_utility.set_location('pay_advance_pay_pkg.get_balance', 80);
138 
139 end get_balance;
140 -------------------------------------------------------------------------------
141 function get_processed_flag
142   (
143   p_advance_pay_start_date      date,
144   p_target_entry_id            number,
145   p_assignment_id          number
146   ) return varchar2
147 is
148 --
149 -- Returns the processed flag for advance payment.
150 -- This flag is 'Y' after the advance pay process
154 
151 -- has been run.
152 --
153 l_processed_flag    varchar2(30);
155 cursor processed_flag is
156   select 'Y'
157   from pay_element_entries_f peef,
158        pay_element_entry_values_f peevf
159   where peef.assignment_id = p_assignment_id and
160         peef.target_entry_id = p_target_entry_id and
161 	peef.effective_start_date < p_advance_pay_start_date and
162 	peef.element_entry_id = peevf.element_entry_id and
163 	peef.effective_start_date = peevf.effective_start_date and
164 	peef.effective_end_date = peevf.effective_end_date;
165 --
166 begin
167 --
168   l_processed_flag := 'N';
169 --
170   open processed_flag;
171   fetch processed_flag into l_processed_flag;
172   close processed_flag;
173 
174   return l_processed_flag;
175 
176 end get_processed_flag;
177 -------------------------------------------------------------------------------
178 function advanced_periods
179    (
180    p_assignment_id             number,
181    p_advance_pay_start_date    date,
182    p_advance_pay_end_date      date
183    )
184    return number
185 is
186 --
187 -- Returns number of periods within advanced payment dates.
188 --
189 l_advanced_periods    number;
190 
191 cursor advanced_periods is
192   select count(ptp.time_period_id)
193   from per_time_periods ptp,
194        per_assignments_f paf
195   where paf.assignment_id = p_assignment_id and
196 	p_advance_pay_start_date between paf.effective_start_date
197 				     and paf.effective_end_date and
198         ptp.payroll_id = paf.payroll_id and
199 	ptp.start_date >= p_advance_pay_start_date and
200 	ptp.end_date <= p_advance_pay_end_date;
201 --
202 begin
203 --
204 open advanced_periods;
205 fetch advanced_periods into l_advanced_periods;
206 if advanced_periods%notfound then
207   l_advanced_periods := 0;
208 end if;
209 close advanced_periods;
210 --
211 return l_advanced_periods;
212 --
213 end advanced_periods;
214 ------------------------------------------------------------------------
215 function get_period_end_date
216    (
217    p_assignment_id             number,
218    p_session_date              date
219    )
220    return date
221 is
222 --
223 -- Returns payroll period end date based on the session date.
224 --
225 l_period_end_date    date;
226 
227 cursor period_end_date is
228 select ptp.end_date
229 from
230   per_time_periods ptp,
231   pay_payrolls_f ppf,
232   per_assignments_f paf
233 where
234   paf.assignment_id = p_assignment_id and
235   p_session_date between paf.effective_start_date
236 		     and paf.effective_end_date and
237   ppf.payroll_id = paf.payroll_id and
238   p_session_date between ppf.effective_start_date
239 		     and ppf.effective_end_date and
240   ptp.payroll_id = ppf.payroll_id and
241   ptp.start_date <= p_session_date and
242   ptp.end_date >= p_session_date;
243 --
244 begin
245 --
246 hr_utility.set_location('pay_advance_pay_pkg.get_period_end_date'   , 5);
247 
248 open period_end_date;
249 fetch period_end_date into l_period_end_date;
250 
251 if period_end_date%notfound then
252   hr_utility.trace('session_date'|| fnd_date.date_to_canonical(p_session_date));
253   hr_utility.set_message (801,'PAY_52103_PERIOD_NOT_EXIST');
254   hr_utility.raise_error;
255 end if;
256 --
257 close period_end_date;
258 --
259 return l_period_end_date;
260 --
261 hr_utility.set_location('pay_advance_pay_pkg.get_period_end_date'   , 80);
262 --
263 end get_period_end_date;
264 ------------------------------------------------------------------------
265 function get_period_start_date
266    (
267    p_assignment_id             number,
268    p_session_date            date
269    )
270    return date
271 is
272 --
273 -- Returns payroll period start date based on the session date.
274 --
275 l_period_start_date    date;
276 
277 cursor period_start_date is
278 select ptp.start_date
279 from
280   per_time_periods ptp,
281   pay_payrolls_f ppf,
282   per_assignments_f paf
283 where
284   paf.assignment_id = p_assignment_id and
285   p_session_date between paf.effective_start_date
286 		     and paf.effective_end_date and
287   ppf.payroll_id = paf.payroll_id and
288   p_session_date between ppf.effective_start_date
289 		     and ppf.effective_end_date and
290   ptp.payroll_id = ppf.payroll_id and
291   ptp.start_date <= p_session_date and
292   ptp.end_date >= p_session_date;
293 
294 begin
295 
296 hr_utility.set_location('pay_advance_pay_pkg.get_period_start_date'   , 5);
297 
298 open period_start_date;
299 fetch period_start_date into l_period_start_date;
300 
301 if period_start_date%notfound then
302   hr_utility.set_message (801, 'PAY_52103_PERIOD_NOT_EXIST');
303   hr_utility.raise_error;
304 end if;
305 --
306 close period_start_date;
307 --
308 return l_period_start_date;
309 --
310 hr_utility.set_location('pay_advance_pay_pkg.get_period_start_date'   , 80);
311 --
312 end get_period_start_date;
313 ------------------------------------------------------------------------
314 function get_advance_period_start_date
315    (
316    p_assignment_id             number,
317    p_session_date            date,
318    p_flag                    varchar2
319    )
320    return date
321 is
322 --
326 
323 -- Returns payroll period start date based on the session date.
324 --
325 l_period_start_date    date;
327 cursor period_start_date is
328 select aptp.start_date
329 from
330   per_time_periods ptp,
331   pay_payrolls_f ppf,
332   per_assignments_f paf,
333   per_time_periods aptp
334 where
335   paf.assignment_id = p_assignment_id and
336   p_session_date between paf.effective_start_date
337 		     and paf.effective_end_date and
338   ppf.payroll_id = paf.payroll_id and
339   p_session_date between ppf.effective_start_date
340 		     and ppf.effective_end_date and
341   ptp.payroll_id = ppf.payroll_id and
342   ptp.start_date <= p_session_date and
343   ptp.end_date >= p_session_date and
344   aptp.payroll_id = ppf.payroll_id and
345   ptp.start_date <= aptp.regular_payment_date and
346   ptp.end_date >= aptp.regular_payment_date;
347 --
348 cursor r_period_start_date is
349 select aptp.start_date
350 from
351   per_time_periods ptp,
352   pay_payrolls_f ppf,
353   per_assignments_f paf,
354   per_time_periods aptp
355 where
356   paf.assignment_id = p_assignment_id and
357   p_session_date between paf.effective_start_date
358 		     and paf.effective_end_date and
359   ppf.payroll_id = paf.payroll_id and
360   p_session_date between ppf.effective_start_date
361 		     and ppf.effective_end_date and
362   ptp.payroll_id = ppf.payroll_id and
363   ptp.start_date <= p_session_date and
364   ptp.end_date >= p_session_date and
365   aptp.payroll_id = ppf.payroll_id and
366   aptp.start_date <= ptp.regular_payment_date and
367   aptp.end_date >= ptp.regular_payment_date;
368 
369 begin
370 
371 hr_utility.set_location('pay_advance_pay_pkg.get_advance_period_start_date'   , 5);
372 if p_flag = 'N' then
373    open period_start_date;
374    fetch period_start_date into l_period_start_date;
375 
376    if period_start_date%notfound then
377      hr_utility.set_message (801, 'PAY_52103_PERIOD_NOT_EXIST');
378      hr_utility.raise_error;
379    end if;
380    --
381    close period_start_date;
382    --
383 else
384    open r_period_start_date;
385    fetch r_period_start_date into l_period_start_date;
386 
387    if r_period_start_date%notfound then
388      hr_utility.set_message (801, 'PAY_52103_PERIOD_NOT_EXIST');
389      hr_utility.raise_error;
390    end if;
391    --
392    close r_period_start_date;
393    --
394 end if;
395 --
396 return l_period_start_date;
397 --
398 hr_utility.set_location('pay_advance_pay_pkg.get_advance_period_start_date'   , 80);
399 --
400 end get_advance_period_start_date;
401 ------------------------------------------------------------------------
402 function get_advance_period_end_date
403    (
404    p_assignment_id             number,
405    p_session_date            date,
406    p_flag                    varchar2
407    )
408    return date
409 is
410 --
411 -- Returns payroll period end date based on the session date.
412 --
413 l_period_start_date    date;
414 
415 cursor period_start_date is
416 select aptp.end_date
417 from
418   per_time_periods ptp,
419   pay_payrolls_f ppf,
420   per_assignments_f paf,
421   per_time_periods aptp
422 where
423   paf.assignment_id = p_assignment_id and
424   p_session_date between paf.effective_start_date
425 		     and paf.effective_end_date and
426   ppf.payroll_id = paf.payroll_id and
427   p_session_date between ppf.effective_start_date
428 		     and ppf.effective_end_date and
429   ptp.payroll_id = ppf.payroll_id and
430   ptp.start_date <= p_session_date and
431   ptp.end_date >= p_session_date and
432   aptp.payroll_id = ppf.payroll_id and
433   ptp.start_date <= aptp.regular_payment_date and
434   ptp.end_date >= aptp.regular_payment_date;
435 --
436 cursor r_period_start_date is
437 select aptp.end_date
438 from
439   per_time_periods ptp,
440   pay_payrolls_f ppf,
441   per_assignments_f paf,
442   per_time_periods aptp
443 where
444   paf.assignment_id = p_assignment_id and
445   p_session_date between paf.effective_start_date
446 		     and paf.effective_end_date and
447   ppf.payroll_id = paf.payroll_id and
448   p_session_date between ppf.effective_start_date
449 		     and ppf.effective_end_date and
450   ptp.payroll_id = ppf.payroll_id and
451   ptp.start_date <= p_session_date and
452   ptp.end_date >= p_session_date and
453   aptp.payroll_id = ppf.payroll_id and
454   aptp.start_date <= ptp.regular_payment_date and
455   aptp.end_date >= ptp.regular_payment_date;
456 
457 begin
458 
459 hr_utility.set_location('pay_advance_pay_pkg.get_advance_period_end_date'   , 5);
460 
461 if p_flag = 'N' then
462    --
463    open period_start_date;
464    fetch period_start_date into l_period_start_date;
465 
466    if period_start_date%notfound then
467      hr_utility.set_message (801, 'PAY_52103_PERIOD_NOT_EXIST');
468      hr_utility.raise_error;
469    end if;
470    --
471    close period_start_date;
472    --
473 else
474    --
475    open r_period_start_date;
476    fetch r_period_start_date into l_period_start_date;
477 
478    if r_period_start_date%notfound then
479      hr_utility.set_message (801, 'PAY_52103_PERIOD_NOT_EXIST');
480      hr_utility.raise_error;
481    end if;
482    --
483    close r_period_start_date;
484    --
485 end if;
486 --
487 return l_period_start_date;
488 --
492 ------------------------------------------------------------------------
489 hr_utility.set_location('pay_advance_pay_pkg.get_advance_period_end_date'   , 80);
490 --
491 end get_advance_period_end_date;
493 procedure insert_indicator_entries
494   (
495    p_defer_flag in varchar2,
496    p_assignment_id in number,
497    p_session_date in out nocopy date,
498    p_pai_element_entry_id in out nocopy number,
499    p_pai_element_type_id  in number,
500    p_pai_sd_input_value_id in number,
501    p_pai_ed_input_value_id in number,
502    p_pai_start_date in date,
503    p_pai_end_date in date,
504    p_advance_pay_start_date in date,
505    p_advance_pay_end_date in date,
506    p_arrears_flag in varchar2,
507    p_periods_advanced in number,
508    p_ai_element_type_id in number,
509    p_ai_af_input_value_id in number,
510    p_ai_dpf_input_value_id in number
511   )
512 is
513 --
514 -- Inserts entry for Pay Advance Indicator and corresponding entries
515 -- for Advance Indicator.
516 --
517   l_element_entry_start_date date;
518   l_element_entry_end_date date; --to be worked out by entry API
519   l_ai_element_entry_id number;
520   l_pay_periods number;
521   l_arrears_offset number;
522   l_advance_pay varchar2(30);
523   l_defer_pay varchar2(30);
524   --
525   l_session_date date;
526   l_pai_element_entry_id number;
527 --
528 begin
529   --
530   hr_utility.set_location('pay_advance_pay_pkg.insert_indicator_entries', 5);
531   --
532   l_arrears_offset := 0;
533   l_advance_pay := 'Y';
534   l_defer_pay := p_defer_flag;
535   --
536   l_session_date := p_session_date;
537   l_pai_element_entry_id :=  p_pai_element_entry_id;
538   --
539   -- Pay Advance Indicator Entry.
540   --
541   -- entry start and end dates are both end of the period. If assignment starts
542   -- or finishes in the middle of the period, entry will still be created.
543   l_element_entry_start_date := pay_advance_pay_pkg.get_period_end_date
544      			        (
545 				 p_assignment_id,
546 			         l_session_date
547 				);
548   --
549   l_element_entry_end_date := l_element_entry_start_date;
550 
551   hr_utility.set_location('pay_advance_pay_pkg.insert_indicator_entries', 60);
552   --
553   hr_entry_api.insert_element_entry
554     (
555      p_effective_start_date       => l_element_entry_start_date,
556      p_effective_end_date         => l_element_entry_end_date,
557      p_element_entry_id           => l_pai_element_entry_id,
558      p_assignment_id              => p_assignment_id,
559      p_element_link_id            => hr_entry_api.get_link
560 			             (
561 		       		      p_assignment_id,
562 				      p_pai_element_type_id,
563 				      l_session_date
564 			             ),
565      p_creator_type	          => 'DF',
566      p_entry_type	          => 'E',
567      p_input_value_id1            => p_pai_sd_input_value_id,
568      p_input_value_id2            => p_pai_ed_input_value_id,
569      p_entry_value1               => fnd_date.date_to_displaydate(p_pai_start_date,calendar_aware=>fnd_date.calendar_aware_alt),  --modified as per bug 11830805
570      p_entry_value2               => fnd_date.date_to_displaydate(p_pai_end_date,calendar_aware=>fnd_date.calendar_aware_alt)     --modified as per bug 11830805
571    );
572 
573   -- set out value
574   l_session_date := l_element_entry_start_date;
575 
576   --
577   -- Advance Indicator entries.
578   --
579 
580   -- In case of arrears payroll there will be one additional entry.
581 
582   if p_arrears_flag = 'Y' then
583        l_arrears_offset := 1;
584   end if;
585   --
586   -- dates changed in the loop to fall within each pay period
587 
588   l_element_entry_start_date := p_advance_pay_start_date;
589 
590   hr_utility.trace('l_element_entry_start_date (1): ' ||
591 	fnd_date.date_to_canonical(l_element_entry_start_date));
592 
593   l_element_entry_end_date := pay_advance_pay_pkg.get_period_end_date
594   			        (
595 			         p_assignment_id,
596 			         l_element_entry_start_date
597 			        );
598     --
599   for l_pay_periods in 1..(p_periods_advanced + l_arrears_offset) loop
600     --
601     -- set advance pay flag to 'N' for 1st period in arrears
602 
603     if p_arrears_flag = 'Y' and l_pay_periods = 1 then
604       l_advance_pay := 'N';
605     else
606       l_advance_pay := 'Y';
607     end if;
608 
609     -- set defer pay flag to 'N' for last period in arrears
610     if p_arrears_flag = 'Y' and
611        l_pay_periods = (p_periods_advanced + l_arrears_offset) then
612       l_defer_pay := 'N';
613     end if;
614     --
615     hr_utility.set_location('pay_advance_pay_pkg.insert_indicator_entries', 70);
616     --
617     hr_entry_api.insert_element_entry
618     (
619      p_effective_start_date	=> l_element_entry_start_date,
620      p_effective_end_date       => l_element_entry_end_date,
621      p_element_entry_id         => l_ai_element_entry_id,
622      p_assignment_id		=> p_assignment_id,
623      p_element_link_id          => hr_entry_api.get_link
624 				   (
625 				    p_assignment_id,
626 				    p_ai_element_type_id,
627 				    l_element_entry_start_date
628 				   ),
629      p_creator_type		=> 'DF',
630      p_entry_type		=> 'E',
631      p_input_value_id1          => p_ai_af_input_value_id,
632      p_input_value_id2          => p_ai_dpf_input_value_id,
633      p_entry_value1		=> hr_general.decode_lookup
634 				   ('YES_NO',l_advance_pay),
635      p_entry_value2		=> hr_general.decode_lookup
636 				   ('YES_NO',l_defer_pay)
637     );
638     --
639     -- move to the next pay period
640     --
641     hr_utility.trace('l_element_entry_start_date (2): ' ||
642 	    fnd_date.date_to_canonical(l_element_entry_start_date));
643     l_element_entry_start_date := pay_advance_pay_pkg.get_period_end_date
644 				  (
645 				   p_assignment_id,
646 				   l_element_entry_start_date
647 				  ) + 1;
648     --
649     hr_utility.trace('l_element_entry_start_date (3): ' ||
650 	fnd_date.date_to_canonical(l_element_entry_start_date));
651     --
652     l_element_entry_end_date := pay_advance_pay_pkg.get_period_end_date
653 				(
654 				 p_assignment_id,
655 				 l_element_entry_start_date
656 				);
657   --
658   end loop;
659   --
660   p_session_date := l_session_date;
661   p_pai_element_entry_id := l_pai_element_entry_id;
662   --
663   hr_utility.set_location('pay_advance_pay_pkg.insert_indicator_entries', 80);
664   --
665 end insert_indicator_entries;
666 ------------------------------------------------------------------------
667 procedure delete_indicator_entries
668   (
669     p_assignment_id in number,
670     p_legislation_code in varchar2,
671     p_session_date in date,
672     p_pai_element_entry_id in number,
673     p_arrears_flag in varchar2
674   )
675 is
676 --
677 -- Deletes entry for Pay Advance Indicator and corresponding
678 -- entries for Advance Indicator.
679 
680   l_ai_element_entry_id number;
681   l_effective_start_date date;
682   l_indicators_start_date date;
683   l_indicators_end_date date;
684   --
685   cursor advance_dates is
686     select
687     -- min of two input values - advance pay period start date
688     min(fnd_date.canonical_to_date(peevf.screen_entry_value)),
689     -- max of two input values - advance pay period end date
690     max(fnd_date.canonical_to_date(peevf.screen_entry_value))
691       from pay_element_entry_values_f peevf
692       where peevf.element_entry_id = p_pai_element_entry_id;
693   --
694   cursor corresponding_ai_entries is
695   --returns element_entry_ids of all Advance Indicator entries that
696   --correspond to the Pay Advance Indicator in question.
697   --
698     select peef.element_entry_id, peef.effective_start_date
699       from
700 	   pay_legislation_rules plr,
701 	   pay_element_types_f petf,
702 	   pay_element_links_f pelf,
703 	   pay_element_entries_f peef
704       where
705 	   -- entry belongs to this assignment
706 	   peef.assignment_id = p_assignment_id and
707 	   -- entry is of Advance Indicator type
708 	   peef.element_link_id = pelf.element_link_id and
709 	   pelf.element_type_id = petf.element_type_id and
710 	   petf.element_type_id = plr.rule_mode and
711 	   plr.legislation_code = p_legislation_code and
712 	   plr.rule_type = 'ADVANCE_INDICATOR' and
713 	   -- entry exists within advance period for the assignment
714 	   peef.effective_start_date between l_indicators_start_date
715 	                                 and l_indicators_end_date;
716 
717 begin
718 --
719 hr_utility.set_location('pay_advance_pay_pkg.delete_indicator_entries' , 5);
720 --
721 -- fetch advance dates
722 open advance_dates;
723 fetch advance_dates into l_indicators_start_date,
724                          l_indicators_end_date;
725 close advance_dates;
726 
727 -- delete Pay Advance Indicator.
728 
729 hr_entry_api.delete_element_entry
730 (
731   p_dt_delete_mode              => 'ZAP',
732   p_session_date                => p_session_date,
733   p_element_entry_id            => p_pai_element_entry_id
734 );
735 --
736 -- for arrears payroll, there will be an aditional Advance Indicator entry
737 if p_arrears_flag = 'Y' then
738   l_indicators_start_date := pay_advance_pay_pkg.get_period_start_date
739 				  (
740 				  p_assignment_id,
741 				  l_indicators_start_date - 1
742 				  );
743 end if;
744 
745 -- trace dates used to remove Advance Indicators
746 hr_utility.trace('p_pai_element_entry_id: ' || to_char(p_pai_element_entry_id));
747 hr_utility.trace('l_indicators_start_date: ' || fnd_date.date_to_canonical(l_indicators_start_date));
748 hr_utility.trace('l_indicators_end_date: ' || fnd_date.date_to_canonical(l_indicators_end_date));
749 
750 -- Advance Indicator(s)
751 
752 -- first Advance Indicator element_entry_id
753 
754 open corresponding_ai_entries;
755 fetch corresponding_ai_entries into l_ai_element_entry_id,
756 				    l_effective_start_date;
757 
758 while corresponding_ai_entries%found loop
759 
760 hr_utility.set_location('pay_advance_pay_pkg.delete_indicator_entries' , 10);
761 
762   hr_entry_api.delete_element_entry
763   (
764     p_dt_delete_mode		=>'ZAP',
765     p_session_date		=>l_effective_start_date,
766     p_element_entry_id		=>l_ai_element_entry_id
767    );
768 
769 -- fetch next Advance Indicator
770 fetch corresponding_ai_entries into l_ai_element_entry_id,
771 				    l_effective_start_date;
772 
773 end loop;
774 
775 close corresponding_ai_entries;
776 
777 hr_utility.set_location('pay_advance_pay_pkg.delete_indicator_entries' , 80);
778 
779 end delete_indicator_entries;
780 ------------------------------------------------------------------------
781 end pay_advance_pay_pkg;