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