DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_AC_ACTION_ARCH

Source


1 PACKAGE BODY PAY_AC_ACTION_ARCH AS
2 /* $Header: pyacxfrp.pkb 120.62.12020000.18 2013/05/03 09:09:02 pkoduri ship $ */
3 /*
4    ******************************************************************
5    *                                                                *
6    *  Copyright (C) 1993 Oracle Corporation.                        *
7    *  All rights reserved.                                          *
8    *                                                                *
9    *  This material has been provided pursuant to an agreement      *
10    *  containing restrictions on its use.  The material is also     *
11    *  protected by copyright law.  No part of this material may     *
12    *  be copied or distributed, transmitted or transcribed, in      *
13    *  any form or by any means, electronic, mechanical, magnetic,   *
14    *  manual, or otherwise, or disclosed to third parties without   *
15    *  the express written permission of Oracle Corporation,         *
16    *  500 Oracle Parkway, Redwood City, US, 94065.                  *
17    *                                                                *
18    ******************************************************************
19 
20     Name        : pay_ac_action_arch
21 
22     Change List
23     -----------
24     Date        Name       Vers    Bug No   Description
25     ----------- ---------- ------  -------  --------------------------
26     02-May-2013 pkoduri    115.140 16318258   Analyzed the archiver code and
27                                               modified cursors to add missing where
28                                               condition on dates for  -f tables.
29     25-Mar-2013 abellur   115.145  15976832  Reverted the change in 115.141
30     04-Mar-2013 sneelapa  115.144  13905220  Modified the Dynamic queries to use bind variables
31                                              to improve the performance.
32     28-Dec-2012 ybudamal  115.143  13442472  Reverted the changes done for the cursor 'c_prev_ytd_action_elem_rbr'
33                                              as part of bug 13442472.
34     21-Dec-2012 ybudamal  115.142  13442472  Modified the cursor 'c_prev_ytd_action_elem_rbr' to add
35                                              the condition to check for legislation_code and business_group_id
36                                              values are 'US' and NULL respectively.
37     10-Dec-2012 sneelapa  115.141  15975594  Debug package to verify the issue
38     12-Oct-2012 pkoduri   115.140  14658920	 Modified	archive_retro_elements  to remove dependency with
39                                              SPARSE_MATRIX enabling  for null runresults supression in 1221 CL.
40     27-Sep-2012 schowl	  115.139  14605761  Modfied the cursor 'c_multi_asg_prev_information'
41                                              of 'get_last_xfr_info' procedure to match the present
42                                              payroll id with the payroll id of action which is being
43                                              archived. Added a cursor(c_get_payroll_id) to get payroll id
44                                              and passed it to the cursor 'c_multi_asg_prev_information'.
45     16-Aug-2012 pkoduri   115.137  14219126  Deriving the rate in the scenario where rate is modified
46 	                                        in the formula.In this case derived rate differs from
47 											 keyed in rate.
48     14-Aug-2012 pkoduri   115.136  14319807  Fixed the issue,Retroactive entries for a payroll period if
49                                              de-selected from the Quickpay screen are being archived
50 					                         with null values.
51     04-May-2012 Pkoduri	  115.135  13881512  In case of an employee having bounus with separate check then
52                                              retro elements are not being individually archived.
53                                              For this the fix is to revert the chagnes done for the
54                                              bug 9207953.
55     27-Mar-2012	Pkoduri	  115.134  13877047  In this version the fix reverted in the earlier version is
56                                              addressed again but this time carefully handling the YTD issue
57                                             reported in the bug 13785386.
58     02-Mar-2012 pkoduri	  115.132 13785386   Reverting the changes done to the procedure
59                                              Archive_retro_element as that is multiplying the
60                                              YTD Amount and Hours values for a Retro feedin base element case.
61                                              However the changes for the bug#12548215 will be analyzed
62                                             and will be introduced once again.
63 
64     07-Feb-2012 sbachu 	  115.131  8544619  Archiving the rate value rounding it
65                                             off to five digits after decimal.
66     17-Jan-2012 abellur   115.130  13554840 Updated populate_elements, so now
67                                              elements without rate and with
68                                              non zero YTD hours will be archived.
69     21-Nov-2012 tclewis 115.129             added emp_city_jd.delete
70     18-Nov-2011	Pkoduri	115.127	12903160    Skipping the rate derivation formula
71                                             in case multiple is 1- here we get the
72                                             user keyed in rate and store it.
73     27-Sep-2011	Pkoduri	115.126	12819017    Changed the precision for Round
74                                             function for calculated rate to 5-
75                                             this is to be in sync with SOE and
76                                             RATE on all other PDF slips.
77     21-Sep-2011  nkjaladi  115.125 11897283 Modified cursor get_run_action_id
78                                             of procedure get_current_elements
79                                             to add one more parameter
80                                             element_type_id so that correct
81                                             run_action_id is picked up for retro
82                                             and additional
83     21-Sep-2011 abellur    115.124 12548215 Updated archive_retro_elements,
84                                              logic for derived rate is updated.
85     12-Aug-2011  abellur   115.122 12548215 Changed archive_retro_elements
86                                              to pull information from base element
87                                              when hours are not populated and derive rate.
88                                              Also, YTD hours included into loop so it
89                                              calculates for every retro element.
90     03-Dec-2010  tclewis   115.19  10277479 Performance changes on cursors
91                                             c_prev_ytd_action_elem_rbr,
92                                             c_check_baladj.
93     17-May-2010  asgugupt  115.116 10069088 Modified Populate_elements
94     17-May-2010  mikarthi  115.113 8618524  Modified Populate_elements
95     03-Feb-2010  mikarthi  115.112 8688998  Added the Overloaded version
96                                             of procedure get_last_xfr_info.
97                                             Modified cursor c_last_xft_elements
98     18-Dec-2009 nkjaladi    115.111 9207953  Reverted the changes done for bug 8688998 in
99                                              order to remove dependency.
100     18-Dec-2009 nkjaladi    115.110 9207953  Modified the cursor get_run_action_id in procedure
101                                              get_current_elements such that payroll process with
102                                              seperate check are not picked.
103     19-Oct-2009 kagangul   115.109 8688998  Added the Overloaded version
104 					    of procedure get_last_xfr_info.
105 
106     20-Aug-2009 asgugupt   115.108 8324157  Added hint to improve
107                                             performance of process
108     30-Jan-2009 sudedas    115.107 8211926  Changed get_current_elements
109     22-Jan-2009 sudedas    115.106 7661112  Changed archive_retro_element
110                                            ,get_current_element for perf.
111     12-DEC-2008 tclewis     115.105         Added SDI1 EE.
112     04-DEC-2008 tclewis     115.105         Added SUI1 EE.
113     19-NOV-2008 sudedas    115.104 7580440  Changed get_current_elements
114                                            ,Archive_retro_element procs.
115     16-SEP-2008 sudedas    115.103 7348767  Modified get_xfr_elements,
116                                    7348838  get_missing_xfr_info to
117                                             populate action_info24
118     11-SEP-2008 asgugupt   115.102 7197824  Changed get_run_results and
119                                             get_run_results_rate cursors
120                                             in Proc Archive_addnl_elements
121     23-JUN-2008 sudedas    115.101 7197824  Changed get_current_element
122                                             ,archive_retro_element
123                                             ,archive_addnl_element
124                                             for Work at Home Condition
125     02-JUN-2008 sapalani   115.100 7120430  Used fnd_number.canonical_to_number
126                                             in procedure populate_summary.
127                                             Removed trace_off at the end of
128                                             procedure populate_hours_x_rate.
129     14-APR-2008 asgugupt   115.99  6950970  Modified get_current_elements
130     29-FEB-2008 sudedas    115.98  6663135  Changed other similar cursors
131     20-FEB-2008 sudedas    115.97  6831411  Kept Code for Canada intact
132                                             before US California OT Enh
133                                             Changed Cursors in get_current
134                                             _elements
135     23-DEC-2007 sudedas    115.96  6702864  Reverted Back Changes of 115.95
136                                             Changed get_current_elements,
137                                             Archive_retro_element
138                                             populate_elements Changed.
139                                             Changes on Top of 115.94
140     20-DEC-2007 sudedas    115.95           Changed get_current_elements,
141                                             Archive_retro_element,
142                                             Archive_addnl_elements
143     03-DEC-2007 tclewis    115.94  6663135  Removed the code processing cursor
144                                             retro_parent_check_flag and use check_retro
145                                             instead as its identical code.
146     22-SEP-2007 sausingh   115.93  5635335  Cahnged to archive ) value in case the YTD
147                                             value is null .
148     22-SEP-2007 Ahanda     115.92  5635335  Made changes in the to get the the
149                                             orignating date when offset date was
150                                             mentioned.
151     15-sep-2007 sausingh   115.91  5635335  Added nvl condition
152     13-sep-2007 sausingh   115.90  5635335  Added nvl condition while archiving ytd and
153                                             current amount in case of earnings and
154                                             deduction ( withelds)
155     5-Sep-2007  sausingh   115.88  6392875  Archiving rate through balance call
156                                             in populate_elements
157     03-Aug-2007 sausingh   115.87  5635335  Changes Archive_addnl_elements to calculate
158                                             ytd values from balance call
159     30-Aug-2007 sudedas    115.86           Changes Incorporated for Issues
160                                             found by Rick on Aug 24, 2007
161     23-Aug-2007 sudedas    115.82           Closing Cursors as per requirement.
162     21-AUG-2007 sausingh   115.81           Added action information24 to archive                                               display name for deductions
163     17-Aug-2007 sausingh   115.80  5635335  Added two procedures Archive_retro_element
164                                             and Archive_addnl_elements to archive retro
165                                             elements in separate rows depending upon the
166                                             element_entry_id
167     30-Jul-2007 sausingh   115.79  5635335  Added cursors to archive Rate*Multiple
168                                             in a new segment Action_information22
169     06-Jun-2007 sausingh   115.78  5635335  Changed get_current_elements
170                                             to archive Original Date Earned.
171     15-NOV-2006 ahanda     115.77           Changed sql statement to
172                                             use base table instead secure
173                                             views.
174     27-OCT-2006 ahanda     115.76  5582224  Checking PL/SQL table count > 0
175                                             before starting loop.
176     12-OCT-2006 ppanda     115.75  5599167  Cursor c_check_baladj  changed by
177                                             adding hint leading(PPA)
178                                             index(PPA,PAY_PAYROLL_ACTIONS_N51)
179                                             index(PAA,PAY_ASSIGNMENT_ACTIONS_N51)
180                                             Cursor c_prev_elements modified by
181                                             adding hint
182                                             ORDERED  use_nl(PAA, PPA, PPF)
183     19-SEP-2006 sodhingr   115.74  5549032  Added ORDERED hint to c_prev_elements
184     11-JUL-2006 ppanda     115.73           Changed cursor c_prev_ytd_action_elements
185                                             for fixing R12 performance bug 5042715
186     13-APR-2006 ahanda     115.72           Changed populate_hours_x_rate
187                                             to use amount returned by
188                                             pay_hours_by_rate_v
189     08-Mar-2006 vpandya    115.71           Changed populate_hours_x_rate
190                                             procedure to fix retro issue
191                                             for Canada.
192     14-OCT-2005 ahanda     115.70           Changed the prev_ytd .. cursors
193                                             to not do a trunc on year but
194                                             pass it as a parameter.
195     06-OCT-2005 ahanda     115.69  4552807  Added process_baladj_elements
196     28-JUL-2005 ahanda     115.68  4507782  Changed cursor
197                                             c_multi_asg_prev_information
198     29-DEC-2004 ahanda     115.67  4069477  Changed procedure populate_elements
199                                             to remove special logic for
200                                             Non Payroll Payments
201     06-OCT-2004 ahanda     115.66  3940380  Added parameter p_xfr_action_id
202                                             to get_last_xfr_info and check
203                                             in cursor.
204     30-JUL-2004 ssattini   115.65  3498653  Added p_action_type parameter
205                                             to get_current_elements and
206                                             populate_elements procedures,
207                                             also added logic to archive
208                                             reversals and balance adjustments
209                                             in populate_elements procedure.
210     28-JUL-2004 vpandya    115.64  3780256  Added ORDERED hint to
211                                             c_prev_ytd_action_elem_rbr cursor.
212                                             Changed cursor c_last_xfr_elements
213                                             in get_xfr_element procedure to
214                                             get jurisdiction_code from previous
215                                             archived value.
216     19-JUL-2004 ahanda     115.63  3770899  Changed c_prev_ytd_action_elements
217                                             and c_prev_ytd_action_elem_rbr
218                                             to pick up elements processed from
219                                             1st and the passed date.
220     16-JUL-2004 ahanda     115.62  3767301  Added rpad and ltrim for state code
221                                             as JD in run balances might just
222                                             have a space.
223     16-JUL-2004 ahanda     115.61  3767301  Changed the run balance cursor
224                                             to do a substr on jurisdiction code
225                                             to ensure correct distinct JDs are
226                                             fetched. The table has JD values
227                                             like 05, 05-, 05-000-, 05-000-0.
228     20-MAY-2004 rsethupa   115.60  3639249  procedure process_additional_elements
229                                             set the balance context 'TAX_UNIT_ID'
230 					    to p_tax_unit_id in the beginning.
231     10-MAY-2004 ahanda     115.59  3567107  Changed get_xfr_elements procedure
232                                             to check if element is still valid
233                                             before archiving.
234     03-MAY-2004 kvsankar   115.58  3585754  Added a new cursor
235                                             'c_prev_ytd_action_elem_rbr'
236                                             which uses run balances to
237                                             retrieve the elements. This
238                                             cursor has to be executed instead
239                                             of 'c_prev_ytd_action_elements'
240                                             if Balance Initialization elements
241                                             are to be archived.
242     26-APR-2004 rsethupa   115.57  3559626  Removed code at the end of the
243                                             file that was used to initialize
244                                             the global variable
245                                             gv_correspondence_language of the
246 					    package pyempxfrp.pkb to get the
247 					    Accrual Information based on
248 					    Correspondance language.
249     16-APR-2004 rsethupa   115.56  3311866  US SS Payslip currency Format Enh.
250                                             Changed code to archive currency
251                                             in canonical format for the action
252                                             info categories 'AC EARNINGS',
253                                             'AC DEDUCTIONS', 'AC SUMMARY YTD'
254                                             and 'AC SUMMARY CURRENT'.
255     29-JAN-2004 rsethupa   115.55  3370112  11.5.10 Performance Changes
256                                             Modified cursor c_cur_action_elements
257                                             by removing the 'and exists' clause
258     28-JAN-2004 rsethupa   115.54  3370112  11.5.10 Performance Changes
259     14-JAN-2003 RMONGE     115.53  3360805  Remove hr. from pay_action_information
260     25-NOV-2003 vpandya    115.52  3280589  Changed get_xfr_elements:
261                                             modified cursor c_last_per_xfr_run.
262     07-NOV-2003 vpandya    115.51  3225286  Changed c_prev_ytd_action_elements
263                                             cursor and added condition for
264                                             Bal Adj (B) for action_type.
265     06-NOV-2003 vpandya    115.50  3239376  Changed get_xfr_elements:
266                                             Retreving action_information12
267                                             (ytd_hours) and initializing
268                                             variable ln_ytd_hours.
269     04-NOV-2003 vpandya    115.49  3228457  Changed c_last_per_xfr_run cursor:
270                                             Remove extra table
271                                             pay_action_information.
272     20-OCT-2003 vpandya    115.48  3119792  Changed process_additional_elements:
273                                             calling populate_summary to archive
274                                             summary for YTD.
275     04-OCT-2003 ahanda     115.47  3107166  Added date joins when getting
276                                             data from pay_element_types_f
277     10-Sep-2003 ekim       115.46  3119792  1) Added procedure
278                                    2880047  - process_additional_elements
279                                             2) Moved c_prev_ytd_action_elements
280                                                to be global.
281                                             3) Added following in
282                                                get_last_xfr_info procedure.
283                                                Cursor:
284                                                - c_multi_asg_prev_information
285                                                - c_multi_asg_prev_nonsepchk
286                                                Parameter:
287                                                - p_sepchk_flag
288     26-JUN-2003 vpandya    115.45  2950628  Changed populate_summary to archive
289                                             labels for CURRENT and YTD based on
290                                             correspondence language of an
291                                             employee. Also added cursor
292                                             c_arch_labels.
293     19-JUN-2003 ahanda     115.44  3018135  Changed populate_summary to populate
294                                             values for Alien/Expat Earnings.
295     19-JUN-2003 ahanda     115.43  3016946  Changed cursor to do an nvl
296                                             reporting_name and element_name.
297     11-Apr-2003 vpandya    115.42           Changed get_xfr_elements:
298                                             Removed Multi GRE cond. which was
299                                             with Multi Asg and SepChk cond.
300     25-Mar-2003 vpandya    115.41           Changed populate_hours_x_rate:
301                                             Taken out 'Exit' from GRE loop
302                                             and put it at common place so that
303                                             it works for GRE and Tax Group.
304     17-Mar-2003 ekim       115.40           Added index hint in
305                                             c_last_payment_info cursor.
306     14-Mar-2003 ekim      115.39  2851780  Added c_last_per_xfr_run in
307                                             get_xfr_elements.
308     07-Mar-2003 vpandya   115.38  2834674  Changed populate_hours_x_rate:
309                                             Divided hours_by_rate cursor into
310                                             c_run_aa_id and c_hbr cursor.
311     24-Feb-2003 vpandya   115.37           Changed get_current_elements:
312                                             added cursor c_ytd_action_seq and
313                                             changed cursor c_cur_action_elements
314                                             to get sep check elements.
315                                             Changed get_xfr_elements:
316                                             archive all elements of previous
317                                             xfr run when gv_multi_gre_payment
318                                             is 'N'.
319     06-Feb-2003 ekim      115.36  2315822  changed get_xfr_elements:
320                                             Added logic to get YTD for
321                                             the elements in the previous run
322                                             for the given assignment when
323                                             Multi-Asg is 'Y' and SEPCHK = 'Y'
324     06-FEB-2003 vpandya    115.35  2657464  Changed to get translated name of
325                                             an element. Changed all cursors
326                                             wherever reporting name is taken
327                                             from pay_element_types_f, now it is
328                                             taking from pay_element_types_f_tl.
329                                             Also changed populate_hours_x_rate.
330     02-DEC-2002 ahanda     115.34           Changed package to fix GSCC warning
331     19-NOV-2002 vpandya    115.33           Calling set_error_message function
332                                             of pay_emp_action_arch from all
333                                             exceptions to get error message
334                                             Remote Procedure Calls(RPC or Sub
335                                             program)
336     13-NOV-2002 ahanda     115.32  2667749  Changed get_missing_xfr_info
337                                             to set the JD for Tax Deduction
338                                             and insert value only if non Zero
339     01-NOV-2002 ahanda     115.31           Changed error handling.
340     25-OCT-2002 ahanda     115.30           - Changed code to set up
341                                               hours_bal_id
342                                               only for earnings and
343                                    2503094  - Resetting the category in
344                                               get_missing_xfr_info.
345     15-OCT-2002 tmehra     115.29           Added code to archive PQP
346                                             (Alien) Earnings.
347     09-SEP-2002 ahanda     115.26  2558228  Modified code to only set the
348                                             Jurisdiction for Tax Deduction.
349     06-SEP-2002 ahanda     115.25           Added stmts for GSCC warnings.
350     27-JUL-2002 ahanda     115.24           Added code to get the primary
351                                             balance if it is null. This will
352                                             happen only to existing US
353                                             customers for Tax Deduction.
354     12-JUL-2002 ahanda     115.23           Setting JD Balance only for US
355     10-JUL-2002 vpandya    115.22  2455729  Modified populate_elements,
356                                             put condition like don't assign
357                                             hours to pl/sql table if ytd and
358                                             payment amounts are zero.
359     17-JUN-2002 ahanda     115.21  2365908  Changed package to populate tax
360                                             deductions if location has changed.
361     13-JUN-2002 vpandya    115.20           Added populate_hours_x_rate proc.
362                                             to populate Hours by Rate(HBR)
363                                             element.
364                                             Changed check_hours_by_rate to
365                                             check whether HBR element exists in
366                                             PL/SQL table. Setting context for
367                                             'Tax Group' if reporting level is
368                                             'TAXGRP'(Canadian Req.)
369     15-MAY-2002 ahanda     115.19  2339387  Changed get_xfr_elements to reset
370                                             the variable for category.
371                                             Added procedures
372                                               - get_last_xfr_info
373                                               - get_last_pymt_info
374     07-MAY-2002 vpandya    115.18           Modified populate_summanry,
375                                             Added 'Taxable Benefits' in it for
376                                             AC SUMMARY CURRENT, AC CURRENT YTD
377     24-APR-2002 ahanda     115.17           Changed get_current_elements for
378                                             performance.
379     08-APR-2002 ahanda     115.16           Changed
380                                                - get_missing_xfr_info
381                                                - get_current_elements
382                                                - first_time_process
383                                             to pass NULL for hours if the
384                                             classification is of type Dedutions
385     18-MAR-2002 ahanda     115.15  2264358  Changed cursor
386                                             c_prev_ytd_action_elements
387                                             Fixed archiving for Bal Adj for
388                                             which Pre Pay flag is checked.
389     22-JAN-2002 ahanda     115.14           Moved get_multi_assignment_flag
390                                             to global package (pyempxfr.pkb)
391     26-JAN-2002 ahanda     115.13           Added dbdrv commands.
392     22-JAN-2002 ahanda     115.12           Changed package to take care
393                                             of Multi Assignment Processing.
394     01-NOV-2001 asasthan   115.10           2034976
395     30-OCT-2001 asasthan   115.9            YTD Hours BUg
396     26-OCT-2001 asasthan   115.8            Fix for Bug 2080689
397     03-OCT-2001 asasthan   115.7            Fix for Bug 2028415
398     03-OCT-2001 asasthan   115.6            Fix for Bug 2028415
399     02-OCT-2001 vpandya    115.5            canada Changes
400     21-SEP-2001 asasthan   115.4            Removed check for 'Fees' from
401                                             get_current_elements etc.
402     31-AUG-2001 asasthan   115.3            Modified populate_delta_earnings
403     29-AUG-2001 asasthan   115.2            Modified ytd balance calls.
404     17-JUL-2001 vpandya    115.1            Added 'Taxable Benefits'
405                                             classification and 'Hours by Rate'
406                                             for CA.
407     25-JUL-2001 asasthan   115.0            Created.
408 
409   *******************************************************************/
410 
411   /******************************************************************
412   ** Package Local Variables
413   ******************************************************************/
414   gv_package         VARCHAR2(100) := 'pay_ac_action_arch';
415 
416   gv_dim_asg_tg_ytd     VARCHAR2(100) := '_ASG_TG_YTD';
417   gv_dim_asg_gre_ytd    VARCHAR2(100) := '_ASG_GRE_YTD';
418   gv_dim_asg_jd_gre_ytd VARCHAR2(100) := '_ASG_JD_GRE_YTD';
419   gv_ytd_amount         number(20,2)  := 0;
420   gv_ytd_hour           number(20,2)  := 0;
421 
422   cursor c_element_info(cp_element_type_id in number
423                        ,cp_effective_date  in date) is
424     select pet.element_information10 primary_balance,
425            pet.element_information12 hours_balance
426       from pay_element_types_f pet
427      where pet.element_type_id  = cp_element_type_id
428        and cp_effective_date between pet.effective_start_date
429                                  and pet.effective_end_date;
430 
431   cursor c_prev_ytd_action_elements(cp_assignment_id  in number
432                                    ,cp_curr_eff_date  in date
433                                    ,cp_start_eff_date in date
434                                    ,cp_action_type1   in varchar2
435                                    ,cp_action_type2   in varchar2
436                                    ,cp_action_type3   in varchar2
437                                  ) is
438       select /*+ ORDERED use_nl(PAA,PPA,PPF)
439                       INDEX (paa PAY_ASSIGNMENT_ACTIONS_N51)
440                       INDEX(ppa  PAY_PAYROLL_ACTIONS_PK)
441                       INDEX(prr   PAY_RUN_RESULTS_N50)
442                       INDEX(pcc  PAY_ELEMENT_CLASSIFICATION_UK2) */
443              distinct
444              pec.classification_name,
445              pet.processing_priority,
446              nvl(decode(pec.classification_name,
447                        'Tax Deductions', petl.reporting_name || ' Withheld',
448                        petl.reporting_name),pet.element_name) reporting_name,
449              --pet.element_name,
450              decode(pec.classification_name,
451                        'Tax Deductions', null,
452                        prr.element_type_id) element_type_id,
453              --prr.element_type_id,
454              nvl(decode(pec.classification_name,
455                            'Tax Deductions', prr.jurisdiction_code,
456                            'Earnings',prr.jurisdiction_code), '00-000-0000'),
457              pet.element_information10,
458              pet.element_information12
459         from pay_assignment_actions      paa,
460                 pay_payroll_actions            ppa,
461                 pay_run_results                  prr,
462                 pay_element_types_f          pet,
463                 pay_element_classifications pec,
464                 pay_element_types_f_tl       petl
465        where prr.assignment_action_id = paa.assignment_action_id
466          and paa.assignment_id = cp_assignment_id
467          and ppa.payroll_action_id = paa.payroll_action_id
468          and ppa.action_type in (cp_action_type1, cp_action_type2, cp_action_type3)
469          and ppa.effective_date >= cp_start_eff_date
470          and ppa.effective_date <= cp_curr_eff_date
471          and pet.element_type_id = prr.element_type_id
472          and pet.element_information10 is not null
473          and ppa.effective_date between pet.effective_start_date
474                                     and pet.effective_end_date
475          and petl.element_type_id  = pet.element_type_id
476          and petl.language         = gv_person_lang
477          and pec.classification_id = pet.classification_id
478          and pec.business_group_id is NULL
479          and pec.legislation_code = 'US'
480          and pec.classification_name in ('Earnings',
481                                          'Alien/Expat Earnings',
482                                          'Supplemental Earnings',
483                                          'Imputed Earnings',
484                                          'Taxable Benefits',
485                                          'Pre-Tax Deductions',
486                                          'Involuntary Deductions',
487                                          'Voluntary Deductions',
488                                          'Non-payroll Payments',
489                                          'Tax Deductions')
490          and pet.element_name not like '%Calculator'
491          and pet.element_name not like '%Special Inputs'
492          and pet.element_name not like '%Special Features'
493          and pet.element_name not like '%Special Features 2'
494          and pet.element_name not like '%Verifier'
495          and pet.element_name not like '%Priority'
496        order by 1, 3, 4;
497       --pec.classification_name, reporting_name, pet.element_name;
498 
499 -- Bug 3585754
500   cursor c_prev_ytd_action_elem_rbr(cp_assignment_id  in number
501                                    ,cp_curr_eff_date  in date
502                                    ,cp_start_eff_date in date
503                                    ) is
504      select /*+ ORDERED  */
505             distinct pec.classification_name,
506             pet.processing_priority,
507             nvl(decode(pec.classification_name,
508                   'Tax Deductions', petl.reporting_name || ' Withheld',
509                   petl.reporting_name), pet.element_name) reporting_name,
510             decode(pec.classification_name, 'Tax Deductions', null,
511                                             pet.element_type_id) element_type_id,
512             nvl(decode(pec.classification_name,
513                                 'Tax Deductions',
514                   decode(pec.legislation_code,
515                             'CA', substr(jurisdiction_code,1,2),
516                             decode(to_char(length(replace(jurisdiction_code, '-'))),
517                                     '7', jurisdiction_code,
518                               rpad(nvl(substr(rtrim(ltrim(jurisdiction_code)),1,2),'0')
519                                   ,2,'0') || '-'||
520                               rpad(nvl(substr(rtrim(ltrim(jurisdiction_code)),4,3),'0')
521                                   ,3,'0') ||'-' ||
522                               rpad(nvl(substr(rtrim(ltrim(jurisdiction_code)),8,4),'0')
523                                   ,4,'0')))), '00-000-0000') jurisdiction_code,
524             pet.element_information10,
525             pet.element_information12
526        from pay_element_classifications pec
527            ,pay_element_types_f pet
528            ,pay_balance_types pbt
529            ,pay_defined_balances pdb
530            ,pay_run_balances prb
531            ,pay_element_types_f_tl petl
532       where prb.effective_date >= cp_start_eff_date
533         and prb.effective_date <= cp_curr_eff_date
534         and prb.assignment_id = cp_assignment_id
535         and pet.element_information10 is not null
536         and pet.element_information10 = pbt.balance_type_id
537         and pbt.balance_type_id = pdb.balance_type_id
538         and pdb.save_run_balance = 'Y'
539         and pdb.defined_balance_id = prb.defined_balance_id
540         and prb.effective_date between pet.effective_start_date and pet.
541                                         effective_end_date
542         and petl.element_type_id  = pet.element_type_id
543         and petl.language = gv_person_lang
544         and pec.classification_id = pet.classification_id
545         and pec.classification_name in ('Earnings',
546                                         'Alien/Expat Earnings',
547                                         'Supplemental Earnings',
548                                         'Imputed Earnings',
549                                         'Taxable Benefits',
550                                         'Pre-Tax Deductions',
551                                         'Involuntary Deductions',
552                                         'Voluntary Deductions',
553                                         'Non-payroll Payments',
554                                         'Tax Deductions')
555         and pet.element_name not like '%Calculator'
556         and pet.element_name not like '%Special Inputs'
557         and pet.element_name not like '%Special Features'
558         and pet.element_name not like '%Special Features 2'
559         and pet.element_name not like '%Verifier'
560         and pet.element_name not like '%Priority'
561       order by 1, 3, 4;
562 
563   /******************************************************************
564    Name      : initialization_process
565    Purpose   : The procedure initializes the PL/SQL table -
566                  pay_ac_action_arch.lrr_act_tab
567    Arguments :
568    Notes     :
569   ******************************************************************/
570   PROCEDURE initialization_process
571   IS
572      lv_procedure_name VARCHAR2(100) := '.initialization_process';
573 
574      lv_error_message  VARCHAR2(200);
575      ln_step           NUMBER;
576      i                 NUMBER := 0; -- used for label counter
577 
578      cursor c_arch_labels is
579        select language, lookup_code, meaning
580        from   fnd_lookup_values
581        where  lookup_type = 'CA_CHEQUE_LABELS'
582        and    lookup_code in ('CURRENT', 'YTD');
583 
584 
585   BEGIN
586      hr_utility.set_location(gv_package || lv_procedure_name, 10);
587      ln_step := 1;
588 
589      if pay_ac_action_arch.lrr_act_tab.count > 0 then
590         for i in pay_ac_action_arch.lrr_act_tab.first ..
591                  pay_ac_action_arch.lrr_act_tab.last loop
592             pay_ac_action_arch.lrr_act_tab(i).action_context_id := null;
593             pay_ac_action_arch.lrr_act_tab(i).action_context_type := null;
594             pay_ac_action_arch.lrr_act_tab(i).action_info_category := null;
595             pay_ac_action_arch.lrr_act_tab(i).jurisdiction_code := null;
596             pay_ac_action_arch.lrr_act_tab(i).act_info1 := null;
597             pay_ac_action_arch.lrr_act_tab(i).act_info2 := null;
598             pay_ac_action_arch.lrr_act_tab(i).act_info3 := null;
599             pay_ac_action_arch.lrr_act_tab(i).act_info4 := null;
600             pay_ac_action_arch.lrr_act_tab(i).act_info5 := null;
601             pay_ac_action_arch.lrr_act_tab(i).act_info6 := null;
602             pay_ac_action_arch.lrr_act_tab(i).act_info7 := null;
603             pay_ac_action_arch.lrr_act_tab(i).act_info8 := null;
604             pay_ac_action_arch.lrr_act_tab(i).act_info9 := null;
605             pay_ac_action_arch.lrr_act_tab(i).act_info10 := null;
606             pay_ac_action_arch.lrr_act_tab(i).act_info11 := null;
607             pay_ac_action_arch.lrr_act_tab(i).act_info12 := null;
608             pay_ac_action_arch.lrr_act_tab(i).act_info13 := null;
609             pay_ac_action_arch.lrr_act_tab(i).act_info14 := null;
610             pay_ac_action_arch.lrr_act_tab(i).act_info15 := null;
611             pay_ac_action_arch.lrr_act_tab(i).act_info16 := null;
612             pay_ac_action_arch.lrr_act_tab(i).act_info17 := null;
613             pay_ac_action_arch.lrr_act_tab(i).act_info18 := null;
614             pay_ac_action_arch.lrr_act_tab(i).act_info19 := null;
615             pay_ac_action_arch.lrr_act_tab(i).act_info20 := null;
616             pay_ac_action_arch.lrr_act_tab(i).act_info21 := null;
617             pay_ac_action_arch.lrr_act_tab(i).act_info22 := null;
618             pay_ac_action_arch.lrr_act_tab(i).act_info23 := null;
619             pay_ac_action_arch.lrr_act_tab(i).act_info24 := null;
620             pay_ac_action_arch.lrr_act_tab(i).act_info25 := null;
621             pay_ac_action_arch.lrr_act_tab(i).act_info26 := null;
622             pay_ac_action_arch.lrr_act_tab(i).act_info27 := null;
623             pay_ac_action_arch.lrr_act_tab(i).act_info28 := null;
624             pay_ac_action_arch.lrr_act_tab(i).act_info29 := null;
625             pay_ac_action_arch.lrr_act_tab(i).act_info30 := null;
626         end loop;
627      end if;
628 
629      ln_step := 5;
630      pay_ac_action_arch.lrr_act_tab.delete;
631      pay_ac_action_arch.emp_state_jd.delete;
632      pay_ac_action_arch.emp_city_jd.delete;
633      pay_ac_action_arch.emp_psd_jd.delete;
634      pay_ac_action_arch.emp_county_jd.delete;
635      pay_ac_action_arch.emp_school_jd.delete;
636      pay_ac_action_arch.emp_elements_tab.delete;
637      pay_ac_action_arch.lrr_act_tab.delete;
638 
639      if gv_reporting_level = 'TAXGRP' then
640         gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
641      else
642         gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
643      end if;
644 
645      if pay_ac_action_arch.ltr_summary_labels.count = 0 then
646 
647         i := 0;
648 
649         for lbl in c_arch_labels loop
650 
651            pay_ac_action_arch.ltr_summary_labels(i).language    := lbl.language;
652            pay_ac_action_arch.ltr_summary_labels(i).lookup_code := lbl.lookup_code;
653            pay_ac_action_arch.ltr_summary_labels(i).meaning     := lbl.meaning;
654 
655            hr_utility.trace(pay_ac_action_arch.ltr_summary_labels(i).language);
656            hr_utility.trace(pay_ac_action_arch.ltr_summary_labels(i).lookup_code);
657            hr_utility.trace(pay_ac_action_arch.ltr_summary_labels(i).meaning);
658 
659            i := i + 1;
660 
661         end loop;
662 
663      end if;
664 
665      hr_utility.trace('pay_ac_action_arch.lrr_act_tab.count = ' ||
666                         pay_ac_action_arch.lrr_act_tab.count);
667      hr_utility.set_location(gv_package || lv_procedure_name, 50);
668      ln_step := 10;
669 
670   EXCEPTION
671     when others then
672       lv_error_message := 'Error at step ' || ln_step || ' in ' ||
673                            gv_package || lv_procedure_name;
674 
675       hr_utility.trace(lv_error_message || '-' || sqlerrm);
676 
677       lv_error_message :=
678          pay_emp_action_arch.set_error_message(lv_error_message);
679 
680       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
681       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
682       hr_utility.raise_error;
683 
684   END initialization_process;
685 
686 
687   /******************************************************************
688    Name      : get_last_xfr_info
689    Purpose   : This returns the date and action_id of the last
690                External Process Archive run.
691    Arguments :
692    Notes     :
693   ******************************************************************/
694   PROCEDURE get_last_xfr_info(p_assignment_id        in        number
695                              ,p_curr_effective_date  in        date
696                              ,p_action_info_category in        varchar2
697                              ,p_xfr_action_id        in        number
698                              ,p_sepchk_flag          in        varchar2
699                              ,p_last_xfr_eff_date   out nocopy date
700                              ,p_last_xfr_action_id  out nocopy number
701                              )
702   IS
703 
704     cursor c_prev_run_information(cp_assignment_id        in number
705                                  ,cp_action_info_category in varchar2
706                                  ,cp_xfr_action_id        in number
707                                  ,cp_effective_date       in date) is
708       select pai.effective_date,
709              pai.action_context_id
710         from pay_action_information pai
711        where pai.action_context_type = 'AAP'
712          and pai.assignment_id = cp_assignment_id
713          and pai.action_information_category = cp_action_info_category
714          and pai.action_context_id <> cp_xfr_action_id
715          and pai.effective_date <= cp_effective_date
716          order by pai.effective_date desc
717                  ,pai.action_context_id desc;
718 
719     cursor c_multi_asg_prev_information(
720                   cp_assignment_id        in number
721                  ,cp_action_info_category in varchar2
722                  ,cp_xfr_action_id        in number
723                  ,cp_effective_date       in date) is
724       select /*+ index(PAI PAY_ACTION_INFORMATION_N5) */ pai.effective_date,
725              pai.action_context_id
726         from per_all_assignments_f paf2
727             ,per_all_assignments_f paf
728             ,pay_action_information pai
729        where paf2.assignment_id = cp_assignment_id
730          and paf.person_id = paf2.person_id
731          and pai.assignment_id = paf.assignment_id
732          and pai.action_context_type = 'AAP'
733          and pai.action_information_category = cp_action_info_category
734          and pai.effective_date <= cp_effective_date
735          and pai.effective_date >= trunc(cp_effective_date, 'Y')
736          and pai.action_context_id <> cp_xfr_action_id
737       order by pai.effective_date desc
738               ,pai.action_context_id desc;
739 
740     ld_last_xfr_eff_date   DATE;
741     ln_last_xfr_action_id  NUMBER;
742     lv_procedure_name      VARCHAR2(100) := '.get_last_xfr_info';
743 
744     lv_error_message       VARCHAR2(200);
745     ln_step                NUMBER;
746 
747   BEGIN
748      hr_utility.set_location(gv_package || lv_procedure_name, 10);
749      ln_step := 1;
750      if pay_emp_action_arch.gv_multi_payroll_pymt = 'Y' then
751         open c_multi_asg_prev_information(p_assignment_id,
752                                           p_action_info_category,
753                                           p_xfr_action_id,
754                                           p_curr_effective_date);
755         fetch c_multi_asg_prev_information into ld_last_xfr_eff_date
756                                               ,ln_last_xfr_action_id;
757         if c_multi_asg_prev_information%notfound then
758            hr_utility.trace('This process has not been run earlier');
759         end if;
760         close c_multi_asg_prev_information;
761 
762      else
763 
764         open c_prev_run_information(p_assignment_id,
765                                     p_action_info_category,
766                                     p_xfr_action_id,
767                                     p_curr_effective_date);
768         fetch c_prev_run_information into ld_last_xfr_eff_date
769                                          ,ln_last_xfr_action_id;
770         if c_prev_run_information%notfound then
771            hr_utility.trace('This process has not been run earlier');
772         end if;
773         close c_prev_run_information ;
774      end if;
775 
776      ln_step := 5;
777      if ld_last_xfr_eff_date is not null then
778         if trunc(ld_last_xfr_eff_date,'Y') < trunc(p_curr_effective_date,'Y')
779         then
780            ld_last_xfr_eff_date   := null;
781            ln_last_xfr_action_id  := null;
782         end if;
783      end if;
784      hr_utility.trace('ld_last_xfr_eff_date '||to_char(ld_last_xfr_eff_date));
785      hr_utility.trace('ln_last_xfr_action_id '|| ln_last_xfr_action_id);
786 
787      p_last_xfr_eff_date  := ld_last_xfr_eff_date;
788      p_last_xfr_action_id := ln_last_xfr_action_id;
789 
790      hr_utility.set_location(gv_package || lv_procedure_name, 50);
791      ln_step := 10;
792 
793   EXCEPTION
794    when others then
795       lv_error_message := 'Error at step ' || ln_step || ' in ' ||
796                            gv_package || lv_procedure_name;
797 
798       hr_utility.trace(lv_error_message || '-' || sqlerrm);
799 
800       lv_error_message :=
801          pay_emp_action_arch.set_error_message(lv_error_message);
802 
803       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
804       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
805       hr_utility.raise_error;
806 
807   END get_last_xfr_info;
808 
809 /* Start : Bug 8688998 */
810 /******************************************************************
811    Name      : get_last_xfr_info (Overloaded version)
812    Purpose   : This returns the date and action_id of the last
813                External Process Archive run.
814    Arguments : Added the following extract parameters :
815                1. p_arch_bal_info
816 	       2. p_legislation_code
817    Notes     : The only difference with the base version is the usage
818 	       of cursor c_prev_run_information/c_multi_asg_prev_information.
819 	       In base version, cursor c_multi_asg_prev_information is
820 	       used when pay_emp_action_arch.gv_multi_payroll_pymt = 'Y'
821 	       otherwise cursor c_prev_run_information get called.
822 	       However, in the overloaded version for US legislation
823 	       cursor c_multi_asg_prev_information is used when
824 	       pay_emp_action_arch.gv_multi_payroll_pymt = 'Y' AND
825 	       p_arch_bal_info = 'Y' otherwise
826 	       cursor c_prev_run_information get called. For other
827 	       legislations, the cursor usage is like base version only.
828   ******************************************************************/
829   PROCEDURE get_last_xfr_info(p_assignment_id        in        number
830                              ,p_curr_effective_date  in        date
831                              ,p_action_info_category in        varchar2
832                              ,p_xfr_action_id        in        number
833                              ,p_sepchk_flag          in        varchar2
834                              ,p_last_xfr_eff_date   out nocopy date
835                              ,p_last_xfr_action_id  out nocopy number
836 			     ,p_arch_bal_info	     in        varchar2
837 			     ,p_legislation_code     in        varchar2
838                              )
839   IS
840 
841     cursor c_get_payroll_id(cp_xfr_action_id        in number ) is    -- added for the bug 14605761
842       select ppa.payroll_id
843       from pay_payroll_actions ppa
844           ,pay_assignment_actions paa
845       where paa.assignment_action_id=cp_xfr_action_id
846         and paa.payroll_action_id=ppa.payroll_action_id;
847 
848     cursor c_prev_run_information(cp_assignment_id        in number
849                                  ,cp_action_info_category in varchar2
850                                  ,cp_xfr_action_id        in number
851                                  ,cp_effective_date       in date) is
852       select pai.effective_date,
853              pai.action_context_id
854         from pay_action_information pai
855        where pai.action_context_type = 'AAP'
856          and pai.assignment_id = cp_assignment_id
857          and pai.action_information_category = cp_action_info_category
858          and pai.action_context_id <> cp_xfr_action_id
859          and pai.effective_date <= cp_effective_date
860          order by pai.effective_date desc
861                  ,pai.action_context_id desc;
862 
863     cursor c_multi_asg_prev_information(
864                   cp_assignment_id        in number
865                  ,cp_action_info_category in varchar2
866                  ,cp_xfr_action_id        in number
867                  ,cp_payroll_id           in number         -- added for the bug 14605761
868                  ,cp_effective_date       in date) is
869       select /*+ index(PAI PAY_ACTION_INFORMATION_N5) */ pai.effective_date,
870              pai.action_context_id
871         from per_all_assignments_f paf2
872             ,per_all_assignments_f paf
873             ,pay_action_information pai
874        where paf2.assignment_id = cp_assignment_id
875          and paf.person_id = paf2.person_id
876          and pai.assignment_id = paf.assignment_id
877          and paf.payroll_id = cp_payroll_id                  --condition added for the bug 14605761
878          and pai.action_context_type = 'AAP'
879          and pai.action_information_category = cp_action_info_category
880          and pai.effective_date <= cp_effective_date
881          and pai.effective_date >= trunc(cp_effective_date, 'Y')
882          and pai.action_context_id <> cp_xfr_action_id
883       order by pai.effective_date desc
884               ,pai.action_context_id desc;
885 
886     ld_last_xfr_eff_date   DATE;
887     ln_last_xfr_action_id  NUMBER;
888     lv_procedure_name      VARCHAR2(100) := '.get_last_xfr_info';
889     ln_payroll_id          NUMBER;                                   --added for the bug 14605761
890     lv_error_message       VARCHAR2(200);
891     ln_step                NUMBER;
892 
893   BEGIN
894      hr_utility.set_location(gv_package || lv_procedure_name, 10);
895      ln_step := 1;
896 
897      open c_get_payroll_id(p_xfr_action_id);                         --added for the bug 14605761
898      fetch c_get_payroll_id into ln_payroll_id;
899      close c_get_payroll_id;
900 
901 
902      IF p_legislation_code = 'US' THEN
903 
904         if pay_emp_action_arch.gv_multi_payroll_pymt = 'Y' AND p_arch_bal_info = 'Y' then
905            open c_multi_asg_prev_information(p_assignment_id,
906                                              p_action_info_category,
907                                              p_xfr_action_id,
908                                              ln_payroll_id,                 --added for the bug 14605761
909                                              p_curr_effective_date);
910            fetch c_multi_asg_prev_information into ld_last_xfr_eff_date
911                                               ,ln_last_xfr_action_id;
912            if c_multi_asg_prev_information%notfound then
913               hr_utility.trace('This process has not been run earlier');
914            end if;
915            close c_multi_asg_prev_information;
916 
917         else
918 
919            open c_prev_run_information(p_assignment_id,
920                                        p_action_info_category,
921                                        p_xfr_action_id,
922                                        p_curr_effective_date);
923            fetch c_prev_run_information into ld_last_xfr_eff_date
924                                             ,ln_last_xfr_action_id;
925            if c_prev_run_information%notfound then
926               hr_utility.trace('This process has not been run earlier');
927            end if;
928            close c_prev_run_information ;
929          end if;
930 
931      ELSE
932 
933 	 if pay_emp_action_arch.gv_multi_payroll_pymt = 'Y' then
934             open c_multi_asg_prev_information(p_assignment_id,
935                                               p_action_info_category,
936                                               p_xfr_action_id,
937                                               ln_payroll_id,              --added for the bug 14605761
938                                               p_curr_effective_date);
939             fetch c_multi_asg_prev_information into ld_last_xfr_eff_date
940                                                ,ln_last_xfr_action_id;
941             if c_multi_asg_prev_information%notfound then
942                hr_utility.trace('This process has not been run earlier');
943             end if;
944             close c_multi_asg_prev_information;
945 
946          else
947 
948             open c_prev_run_information(p_assignment_id,
949                                         p_action_info_category,
950                                         p_xfr_action_id,
951                                         p_curr_effective_date);
952             fetch c_prev_run_information into ld_last_xfr_eff_date
953                                              ,ln_last_xfr_action_id;
954             if c_prev_run_information%notfound then
955                hr_utility.trace('This process has not been run earlier');
956             end if;
957             close c_prev_run_information ;
958          end if;
959 
960      END IF;
961      ln_step := 5;
962      if ld_last_xfr_eff_date is not null then
963         if trunc(ld_last_xfr_eff_date,'Y') < trunc(p_curr_effective_date,'Y')
964         then
965            ld_last_xfr_eff_date   := null;
966            ln_last_xfr_action_id  := null;
967         end if;
968      end if;
969      hr_utility.trace('ld_last_xfr_eff_date '||to_char(ld_last_xfr_eff_date));
970      hr_utility.trace('ln_last_xfr_action_id '|| ln_last_xfr_action_id);
971 
972      p_last_xfr_eff_date  := ld_last_xfr_eff_date;
973      p_last_xfr_action_id := ln_last_xfr_action_id;
974 
975      hr_utility.set_location(gv_package || lv_procedure_name, 50);
976      ln_step := 10;
977 
978   EXCEPTION
979    when others then
980       lv_error_message := 'Error at step ' || ln_step || ' in ' ||
981                            gv_package || lv_procedure_name;
982 
983       hr_utility.trace(lv_error_message || '-' || sqlerrm);
984 
985       lv_error_message :=
986          pay_emp_action_arch.set_error_message(lv_error_message);
987 
988       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
989       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
990       hr_utility.raise_error;
991 
992   END get_last_xfr_info;
993 
994   /* End : Bug 8688998 */
995 
996   /******************************************************************
997    Name      : get_last_pymt_info
998    Purpose   :
999    Arguments :
1000    Notes     :
1001   ******************************************************************/
1002   PROCEDURE get_last_pymt_info(p_assignment_id        in        number
1003                               ,p_curr_pymt_eff_date   in        date
1004                               ,p_last_pymt_eff_date  out nocopy date
1005                               ,p_last_pymt_action_id out nocopy number
1006                               )
1007   IS
1008     cursor c_last_payment_info(cp_assignment_id     in number
1009                               ,cp_curr_pymt_eff_date in date) is
1010 
1011       select ppa.effective_date, paa.assignment_action_id
1012         from pay_payroll_actions ppa,
1013              pay_assignment_actions paa
1014        where paa.assignment_id = p_assignment_id
1015          and ppa.payroll_action_id = paa.payroll_action_id
1016          and ppa.action_type in ('R','Q')
1017          and ppa.effective_date < p_curr_pymt_eff_date
1018          and ppa.effective_date in
1019              ( select  /*+ index(ppa1, pay_payroll_Actions_pk) */
1020                       max(ppa1.effective_date)
1021                  from pay_payroll_actions ppa1,
1022                       pay_assignment_actions paa1
1023                 where ppa1.payroll_action_id = paa1.payroll_action_id
1024                   and ppa1.action_type in ('R','Q')
1025                   and paa1.assignment_id = p_assignment_id
1026                   and ppa1.effective_date < p_curr_pymt_eff_date);
1027 
1028     ld_last_pymt_eff_date  DATE;
1029     ln_last_pymt_action_id NUMBER;
1030     lv_procedure_name      VARCHAR2(100) := '.get_last_pymt_info';
1031     lv_error_message       VARCHAR2(200);
1032     ln_step                NUMBER;
1033 
1034   BEGIN
1035      hr_utility.set_location(gv_package || lv_procedure_name, 10);
1036      ln_step := 1;
1037      open c_last_payment_info(p_assignment_id,p_curr_pymt_eff_date);
1038      fetch c_last_payment_info into ld_last_pymt_eff_date,
1039                                     ln_last_pymt_action_id ;
1040      close c_last_payment_info ;
1041 
1042      ln_step := 5;
1043      p_last_pymt_eff_date  := ld_last_pymt_eff_date;
1044      p_last_pymt_action_id := ln_last_pymt_action_id;
1045 
1046      hr_utility.set_location(gv_package || lv_procedure_name, 100);
1047      ln_step := 10;
1048 
1049   EXCEPTION
1050     when others then
1051       lv_error_message := 'Error at step ' || ln_step || ' in ' ||
1052                          gv_package || lv_procedure_name;
1053 
1054       hr_utility.trace(lv_error_message || '-' || sqlerrm);
1055 
1056       lv_error_message :=
1057          pay_emp_action_arch.set_error_message(lv_error_message);
1058 
1059       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
1060       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
1061       hr_utility.raise_error;
1062 
1063   END get_last_pymt_info;
1064 
1065 
1066   /******************************************************************
1067    Name      : check_hours_by_rate
1068    Purpose   : The procedure checks whether element has already been
1069                archived or not (Canadian Requirement).
1070    Arguments :
1071    Notes     :
1072   ******************************************************************/
1073   PROCEDURE check_hours_by_rate(
1074                     p_xfr_action_id               in number
1075                    ,p_puv_assignment_action_id    in number
1076                    ,p_element_classification_name in varchar2
1077                    ,p_reporting_name              in varchar2
1078                    ,p_element_type_id             in number
1079                    ,p_primary_balance_id          in number
1080                    ,p_processing_priority         in number
1081                    ,p_tax_unit_id                 in number
1082                    ,p_pymt_eff_date               in date
1083                    ,p_ytd_balcall_aaid            in number
1084                    ,p_ytd_defined_balance_id      in number
1085                    ,p_ytd_hours_balance_id        in number
1086                    ,p_rate_exists                out nocopy varchar2
1087                    )
1088 
1089   IS
1090     lv_procedure_name VARCHAR2(100) := '.check_hours_by_rate';
1091     lv_error_message  VARCHAR2(200);
1092     ln_step           NUMBER;
1093 
1094   BEGIN
1095       ln_step := 1;
1096       p_rate_exists := 'N';
1097 
1098       hr_utility.set_location(gv_package || lv_procedure_name, 10);
1099       if pay_ac_action_arch.lrr_act_tab.count > 0 then
1100          for i in  pay_ac_action_arch.lrr_act_tab.first..
1101                    pay_ac_action_arch.lrr_act_tab.last
1102          loop
1103             if ( ( pay_ac_action_arch.lrr_act_tab(i).action_context_id =
1104                    p_xfr_action_id ) and
1105                  ( pay_ac_action_arch.lrr_act_tab(i).act_info2 =
1106                    p_element_type_id ) )
1107             then
1108                p_rate_exists := 'Y';
1109                exit;
1110             end if;
1111          end loop;
1112       end if;
1113       hr_utility.trace('p_rate_exists = '     || p_rate_exists);
1114 
1115       hr_utility.set_location(gv_package || lv_procedure_name, 20);
1116       ln_step := 10;
1117 
1118   EXCEPTION
1119     when others then
1120       lv_error_message := 'Error at step ' || ln_step || ' in ' ||
1121                            gv_package || lv_procedure_name;
1122 
1123       hr_utility.trace(lv_error_message || '-' || sqlerrm);
1124 
1125       lv_error_message :=
1126          pay_emp_action_arch.set_error_message(lv_error_message);
1127 
1128       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
1129       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
1130       hr_utility.raise_error;
1131 
1132   END check_hours_by_rate;
1133 
1134 
1135   /******************************************************************
1136    Name      : populate_elements
1137    Purpose   :
1138    Arguments :
1139    Notes     :
1140   ******************************************************************/
1141   PROCEDURE populate_elements(p_xfr_action_id             in number
1142                              ,p_pymt_assignment_action_id in number
1143                              ,p_pymt_eff_date               in date
1144                              ,p_element_type_id             in number
1145                              ,p_primary_balance_id          in number
1146                              ,p_hours_balance_id            in number
1147                              ,p_processing_priority         in number
1148                              ,p_element_classification_name in varchar2
1149                              ,p_reporting_name              in varchar2
1150                              ,p_tax_unit_id                 in number
1151                              ,p_ytd_balcall_aaid            in number
1152                              ,p_pymt_balcall_aaid           in number
1153                              ,p_jurisdiction_code           in varchar2
1154                                                             default null
1155                              ,p_legislation_code            in varchar2
1156                              ,p_sepchk_flag                 in varchar2
1157                              ,p_sepchk_run_type_id          in number
1158                              ,p_action_type          in varchar2
1159                                                             default null
1160                              ,p_original_date_earned        in varchar2
1161                                                             default null
1162                              ,p_effective_start_date        in varchar2
1163                                                             default null
1164                              ,p_effective_end_date          in varchar2
1165                                                             default null
1166                               ,p_category                    in varchar2
1167                                                             default null
1168 
1169                               ,p_el_jurisdiction_code            in varchar2
1170                                                             default null
1171                               ,p_final_rate                  in number
1172                                                              default null
1173                               ,p_ytd_flag                    in varchar2
1174                               )
1175   IS
1176 
1177     cursor c_non_sep_check(cp_pymt_assignment_action_id in number
1178                           ,cp_sepchk_run_type_id        in number) is
1179       select paa.assignment_action_id
1180         from pay_action_interlocks pai,
1181              pay_assignment_actions paa,
1182              pay_payroll_actions ppa
1183        where pai.locking_action_id = cp_pymt_assignment_action_id
1184          and paa.assignment_action_id = pai.locked_action_id
1185          and paa.payroll_action_id = ppa.payroll_action_id
1186          and ppa.action_type in ('Q','R')
1187          and ((nvl(paa.run_type_id, ppa.run_type_id) is null and
1188                source_action_id is null) or
1189               (nvl(paa.run_type_id, ppa.run_type_id) is not null and
1190                source_action_id is not null and
1191                paa.run_type_id <> cp_sepchk_run_type_id));
1192 
1193 /*12819017-Start*/
1194  cursor c_hbr(cp_run_action_id in number,p_element_type_id in number) is
1195        select nvl(mul.multiple,1),mul.rate
1196          from pay_hours_by_rate_v mul
1197         where mul.assignment_action_id = cp_run_action_id
1198           and legislation_code = 'US'
1199           and mul.element_type_id >= 0  -- Bug 3370112
1200 					and mul.element_type_id = p_element_type_id
1201         order by mul.processing_priority,mul.element_type_id;
1202 
1203   	ln_rate                NUMBER(15,5);
1204     ln_multiple            NUMBER(15,5);
1205 /*12819017-End*/
1206 
1207     ln_current_hours           NUMBER(15,2);
1208     ln_payments_amount         NUMBER(15,2);
1209     ln_ytd_hours               NUMBER(15,2);
1210     ln_ytd_amount              NUMBER(17,2);
1211 
1212     ln_pymt_defined_balance_id NUMBER;
1213     ln_pymt_hours_balance_id   NUMBER;
1214     ln_ytd_defined_balance_id  NUMBER;
1215     ln_ytd_hours_balance_id    NUMBER;
1216 
1217     lv_rate_exists             VARCHAR2(1) := 'N';
1218     ln_nonpayroll_balcall_aaid NUMBER;
1219 
1220     ln_index                   NUMBER ;
1221     lv_action_category         VARCHAR2(50) := 'AC DEDUCTIONS';
1222     lv_procedure_name          VARCHAR2(100):= '.populate_elements';
1223     lv_error_message           VARCHAR2(200);
1224 
1225     ln_step                    NUMBER;
1226 
1227   BEGIN
1228       ln_step := 1;
1229       hr_utility.set_location(gv_package || lv_procedure_name, 10);
1230       hr_utility.trace('p_pymt_assignment_action_id '
1231                      ||to_char(p_pymt_assignment_action_id));
1232       hr_utility.trace('p_pymt_eff_date      ='||to_char(p_pymt_eff_date));
1233       hr_utility.trace('p_element_type_id    ='||to_char(p_element_type_id));
1234       hr_utility.trace('p_primary_balance_id ='||to_char(p_primary_balance_id));
1235       hr_utility.trace('p_processing_priority='||to_char(p_processing_priority));
1236       hr_utility.trace('p_reporting_name     ='||p_reporting_name);
1237       hr_utility.trace('p_ytd_balcall_aaid   ='||to_char(p_ytd_balcall_aaid));
1238       hr_utility.trace('p_pymt_balcall_aaid  ='||to_char(p_pymt_balcall_aaid));
1239       hr_utility.trace('p_legislation_code   ='||p_legislation_code);
1240       hr_utility.trace('p_hours_balance_id   ='||to_char(p_hours_balance_id));
1241 
1242       if pay_emp_action_arch.gv_multi_leg_rule is null then
1243          pay_emp_action_arch.gv_multi_leg_rule
1244                := pay_emp_action_arch.get_multi_legislative_rule(
1245                                                   p_legislation_code);
1246       end if;
1247 
1248       ln_step := 2;
1249       if p_jurisdiction_code <> '00-000-0000' then
1250          pay_balance_pkg.set_context('JURISDICTION_CODE', p_jurisdiction_code);
1251          gv_ytd_balance_dimension := gv_dim_asg_jd_gre_ytd;
1252       else
1253          pay_balance_pkg.set_context('JURISDICTION_CODE', p_jurisdiction_code);
1254          if gv_reporting_level = 'TAXGRP' then
1255             gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
1256          else
1257             gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
1258          end if;
1259       end if;
1260 
1261 
1262       ln_step := 3;
1263       /*********************************************************
1264       ** Get the defined balance_id for YTD call as it will be
1265       ** same for all classification types.
1266       *********************************************************/
1267       ln_ytd_defined_balance_id
1268                 := pay_emp_action_arch.get_defined_balance_id(
1269                                              p_primary_balance_id,
1270                                              gv_ytd_balance_dimension,
1271                                              p_legislation_code);
1272 
1273       hr_utility.trace('ln_ytd_defined_balance_id = ' ||
1274                           ln_ytd_defined_balance_id);
1275 
1276       ln_step := 4;
1277       if p_hours_balance_id is not null then
1278          hr_utility.set_location(gv_package || lv_procedure_name, 20);
1279          ln_ytd_hours_balance_id
1280                 := pay_emp_action_arch.get_defined_balance_id(
1281                                             p_hours_balance_id,
1282                                             gv_ytd_balance_dimension,
1283                                             p_legislation_code);
1284 
1285            hr_utility.trace('ln_ytd_hours_balance_id = ' ||
1286                              ln_ytd_hours_balance_id);
1287 
1288       end if;
1289 
1290       ln_step := 5;
1291       if p_legislation_code <> 'US' then
1292          hr_utility.set_location(gv_package || lv_procedure_name, 30);
1293          ln_step := 6;
1294          check_hours_by_rate(
1295                  p_xfr_action_id               => p_xfr_action_id
1296                 ,p_puv_assignment_action_id    => p_pymt_assignment_action_id
1297                 ,p_element_classification_name => p_element_classification_name
1298                 ,p_reporting_name              => p_reporting_name
1299                 ,p_element_type_id             => p_element_type_id
1300                 ,p_primary_balance_id          => p_primary_balance_id
1301                 ,p_processing_priority         => p_processing_priority
1302                 ,p_tax_unit_id                 => p_tax_unit_id
1303                 ,p_pymt_eff_date               => p_pymt_eff_date
1304                 ,p_ytd_balcall_aaid            => p_ytd_balcall_aaid
1305                 ,p_ytd_defined_balance_id      => ln_ytd_defined_balance_id
1306                 ,p_ytd_hours_balance_id        => ln_ytd_hours_balance_id
1307                 ,p_rate_exists                 => lv_rate_exists
1308                 );
1309       end if;
1310 
1311       hr_utility.trace('lv_rate_exists = ' || lv_rate_exists);
1312 
1313       if lv_rate_exists = 'N' then
1314          ln_step := 7;
1315          hr_utility.set_location(gv_package || lv_procedure_name, 40);
1316          if ln_ytd_defined_balance_id is not null then
1317             ln_ytd_amount := nvl(pay_balance_pkg.get_value(
1318                                       ln_ytd_defined_balance_id,
1319                                       p_ytd_balcall_aaid),0);
1320          end if;
1321 
1322          if p_hours_balance_id is not null then
1323             hr_utility.set_location(gv_package || lv_procedure_name, 50);
1324             if ln_ytd_hours_balance_id is not null then
1325                ln_ytd_hours := nvl(pay_balance_pkg.get_value(
1326                                       ln_ytd_hours_balance_id,
1327                                       p_ytd_balcall_aaid),0);
1328                hr_utility.set_location(gv_package || lv_procedure_name, 60);
1329             end if;
1330          end if; --Hours
1331 
1332          ln_step := 8;
1333          if p_pymt_balcall_aaid is not null then
1334             ln_step := 10;
1335             /* Added dimension _ASG_GRE_RUN for reversals and Balance
1336                Adjustments for Canada. Bug#3498653 */
1337             if p_action_type in ('B','V') then
1338                ln_pymt_defined_balance_id
1339                     := pay_emp_action_arch.get_defined_balance_id(
1340                                                  p_primary_balance_id,
1341                                                  '_ASG_GRE_RUN',
1342                                                  p_legislation_code);
1343             else
1344                if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
1345                   ln_pymt_defined_balance_id
1346                      := pay_emp_action_arch.get_defined_balance_id(
1347                                                  p_primary_balance_id,
1348                                                  '_ASG_PAYMENTS',
1349                                                  p_legislation_code);
1350                else
1351                   ln_pymt_defined_balance_id
1352                      := pay_emp_action_arch.get_defined_balance_id(
1353                                                  p_primary_balance_id,
1354                                                  '_PAYMENTS',
1355                                                  p_legislation_code);
1356                end if;
1357             end if; -- p_action_type in ('B','V')
1358             /* end of addition for Reversals and bal adjustments */
1359             hr_utility.trace('ln_pymt_defined_balance_id ' ||
1360                               ln_pymt_defined_balance_id);
1361 
1362             if ln_pymt_defined_balance_id is not null then
1363                ln_payments_amount := nvl(pay_balance_pkg.get_value(
1364                                                ln_pymt_defined_balance_id,
1365                                                p_pymt_balcall_aaid),0);
1366                hr_utility.trace('ln_payments_amount = ' ||ln_payments_amount);
1367             end if;
1368 
1369             if p_hours_balance_id is not null then
1370                /* Added dimension _ASG_GRE_RUN for reversals and Balance
1371                   Adjustments for Canada. Bug#3498653 */
1372                if p_action_type in ('B','V') then
1373                   ln_pymt_hours_balance_id
1374                         := pay_emp_action_arch.get_defined_balance_id(
1375                                                    p_hours_balance_id
1376                                                    ,'_ASG_GRE_RUN'
1377                                                    ,p_legislation_code);
1378                else
1379                   if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
1380                      ln_pymt_hours_balance_id
1381                         := pay_emp_action_arch.get_defined_balance_id(
1382                                                    p_hours_balance_id
1383                                                    ,'_ASG_PAYMENTS'
1384                                                    ,p_legislation_code);
1385                   else
1386                      ln_pymt_hours_balance_id
1387                         := pay_emp_action_arch.get_defined_balance_id(
1388                                                    p_hours_balance_id
1389                                                    ,'_PAYMENTS'
1390                                                    ,p_legislation_code);
1391                   end if;
1392                end if; -- p_action_type in ('B','V')
1393                /* end of addition for reversals and bal adjustments */
1394                hr_utility.trace('ln_pymt_hours_balance_id ' ||
1395                                  ln_pymt_hours_balance_id);
1396 
1397                if ln_pymt_hours_balance_id is not null then
1398                   ln_current_hours   := nvl(pay_balance_pkg.get_value(
1399                                                 ln_pymt_hours_balance_id,
1400                                                 p_pymt_balcall_aaid),0);
1401                end if;
1402                hr_utility.set_location(gv_package || lv_procedure_name, 120);
1403             end if; --Hours
1404          end if; -- p_pymt_balcall_aaid is not null
1405 
1406          ln_step := 15;
1407          if nvl(ln_ytd_amount, 0) <> 0 or nvl(ln_payments_amount, 0) <> 0 or (gv_ytd_amount <> ln_payments_amount and p_ytd_flag = 'Y')
1408           or nvl(ln_ytd_hours,0) <> 0
1409          then                                     -- bug 15976832, added ln_ytd_hours to the above if condition
1410             ln_index := pay_ac_action_arch.lrr_act_tab.count;
1411             if p_element_classification_name in ('Earnings',
1412                                                  'Supplemental Earnings',
1413                                                  'Taxable Benefits',
1414                                                  'Imputed Earnings',
1415                                                  'Non-payroll Payments',
1416                                                  'Alien/Expat Earnings') then
1417                hr_utility.set_location(gv_package || lv_procedure_name, 125);
1418                lv_action_category := 'AC EARNINGS';
1419 /* bug 6702864 We are not subtracting the Retro amount from the base element  so added the if condition */
1420 /*               pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
1421                          := fnd_number.number_to_canonical(ln_current_hours);
1422 */
1423                IF p_ytd_flag = 'N' then
1424                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
1425                          := fnd_number.number_to_canonical(ln_current_hours);
1426                ELSE
1427                       pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
1428                          := fnd_number.number_to_canonical((ln_current_hours) - gv_ytd_hour);
1429                END IF;
1430 
1431 	         IF ln_current_hours <> 0 AND ln_payments_amount <> 0 THEN
1432 						/*12819017-Start*/
1433 									open c_hbr(p_ytd_balcall_aaid,p_element_type_id);
1434 													loop
1435 														fetch c_hbr into ln_multiple,ln_rate;
1436 														hr_utility.set_location(gv_package || lv_procedure_name, 1251);
1437 														if c_hbr%notfound then
1438 															hr_utility.set_location(gv_package || lv_procedure_name, 1252);
1439 														exit;
1440 														end if;
1441 												  end loop;
1442    										close c_hbr;
1443 										--Added ln_rate in the If condition for a TimeEntryWages Element with a Payvalue keyed in.
1444 										--In that case we dont need to derive rate (however a Hours By Rate entry will not be created for that TEW)
1445 
1446 									--IF ln_multiple <> 1  OR ln_rate IS NULL THEN		/*12819017-End*/
1447                                     IF round(ln_rate,5) <> round((ln_payments_amount/ln_current_hours),5) OR ln_rate IS NULL THEN	/*14219126*/
1448                                         pay_ac_action_arch.lrr_act_tab(ln_index).act_info22:=
1449                                          round((ln_payments_amount/ln_current_hours),5);/*Bug 3311866 -- 12819017*/
1450                                         hr_utility.trace('Rate derived as multiple is not one ' || round((ln_payments_amount/ln_current_hours),5));
1451 								/*12819017-Start*/
1452 										ELSE
1453 											pay_ac_action_arch.lrr_act_tab(ln_index).act_info22:=ln_rate;
1454 											hr_utility.trace('Rate Not derived as multiple is one ' ||  ln_rate);
1455 									END IF;/*12819017-End*/
1456 
1457                ELSE
1458                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 := null;
1459                END IF;
1460 
1461                IF p_ytd_flag = 'N' then
1462                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
1463                          := fnd_number.number_to_canonical(ln_ytd_hours);
1464                ELSE
1465                       pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
1466                          := fnd_number.number_to_canonical((ln_ytd_hours) - gv_ytd_hour);
1467                END IF;
1468             end if;
1469 
1470             hr_utility.set_location(gv_package || lv_procedure_name, 130);
1471             /* Insert this into the plsql table if Current or YTD
1472                amount is not Zero */
1473              pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
1474                     := lv_action_category;
1475              pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
1476                    := nvl(p_jurisdiction_code, '00-000-0000');
1477              pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
1478                    := p_xfr_action_id;
1479              pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
1480                    := p_element_classification_name;
1481              pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
1482                    := p_element_type_id;
1483              pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
1484                    := p_primary_balance_id;
1485              pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
1486                    := p_processing_priority;
1487 /* bug 6702864 We are not subtracting the Retro amount from the base element  so added the if condition */
1488 /*             pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
1489                    := fnd_number.number_to_canonical(nvl(ln_payments_amount,0));
1490 */
1491 
1492              IF p_ytd_flag = 'N' then
1493                   pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
1494                    := fnd_number.number_to_canonical(nvl(ln_payments_amount,0));
1495              ELSE
1496                   pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
1497                    := fnd_number.number_to_canonical(nvl(ln_payments_amount,0) - gv_ytd_amount);
1498              END IF;
1499 
1500              hr_utility.trace('ln_amount := '||fnd_number.number_to_canonical(nvl(ln_payments_amount,0)));
1501 
1502              IF p_ytd_flag = 'N' then
1503                   pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
1504                       := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
1505              ELSE
1506                   pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
1507                       := fnd_number.number_to_canonical((ln_ytd_amount) - gv_ytd_amount);
1508              END IF;
1509              pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
1510                    := p_reporting_name;
1511              IF lv_action_category = 'AC DEDUCTIONS' THEN
1512                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info24
1513                    := p_reporting_name;
1514              END IF;
1515              pay_ac_action_arch.lrr_act_tab(ln_index).act_info17
1516                    := p_original_date_earned;
1517                                   hr_utility.trace('p_original_date_earned :=' || p_original_date_earned );
1518              pay_ac_action_arch.lrr_act_tab(ln_index).act_info18
1519                    := p_effective_start_date;
1520                    hr_utility.trace('p_effective_start_date := ' || p_effective_start_date );
1521              pay_ac_action_arch.lrr_act_tab(ln_index).act_info19
1522                    := p_effective_end_date ;
1523                   hr_utility.trace('p_effective_end_date:= ' || p_effective_end_date );
1524              pay_ac_action_arch.lrr_act_tab(ln_index).act_info20
1525                    := p_category;
1526                    hr_utility.trace('p_category ' || p_category );
1527              pay_ac_action_arch.lrr_act_tab(ln_index).act_info21
1528                    := p_el_jurisdiction_code;
1529 
1530          end if;
1531 
1532          end if; -- lv_rate_exists = 'N'
1533 
1534 
1535 
1536       hr_utility.set_location(gv_package || lv_procedure_name, 150);
1537       ln_step := 20;
1538 
1539   EXCEPTION
1540      when others then
1541       hr_utility.set_location(gv_package || lv_procedure_name, 200);
1542       lv_error_message := 'Error at step ' || ln_step ||
1543                           ' in ' || gv_package || lv_procedure_name;
1544 
1545       hr_utility.trace(lv_error_message || '-' || sqlerrm);
1546 
1547       lv_error_message :=
1548          pay_emp_action_arch.set_error_message(lv_error_message);
1549 
1550       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
1551       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
1552       hr_utility.raise_error;
1553 
1554   END populate_elements;
1555 
1556   /******************************************************************
1557    Name      : populate_hours_x_rate
1558    Purpose   : The procedure gets all 'Hours by Rate' elements which
1559                have been processed in a given pre-payment.
1560                This also gets current and YTD amount,
1561                stores the values in a PL/SQL table.
1562    Arguments :
1563    Notes     :
1564   ******************************************************************/
1565   PROCEDURE populate_hours_x_rate(p_xfr_action_id        in number
1566                                  ,p_curr_pymt_action_id  in number
1567                                  ,p_curr_pymt_eff_date   in date
1568                                  ,p_assignment_id        in number
1569                                  ,p_tax_unit_id          in number
1570                                  ,p_sepchk_run_type_id   in number
1571                                  ,p_sepchk_flag          in varchar2
1572                                  ,p_pymt_balcall_aaid    in number
1573                                  ,p_ytd_balcall_aaid     in number
1574                                  ,p_legislation_code     in varchar2
1575                                  )
1576 
1577   IS
1578 
1579     cursor c_run_aa_id(cp_pymt_action_id in number
1580                       ,cp_assignment_id  in number ) is
1581     select paa.assignment_action_id
1582           ,paa.run_type_id
1583     from   pay_assignment_actions paa,
1584            pay_action_interlocks pai
1585     where  pai.locking_action_id = cp_pymt_action_id
1586     and    paa.assignment_action_id = pai.locked_action_id
1587     and    paa.assignment_id = cp_assignment_id
1588     and    paa.run_type_id is not null
1589     and    not exists ( select 1
1590                         from   pay_run_types_f prt
1591                         where  prt.legislation_code = 'CA'
1592                         and    prt.run_type_id = paa.run_type_id
1593                         and    prt.run_method  = 'C' );
1594 
1595     cursor c_hbr(cp_assignment_action_id in number) is
1596        select hours.element_type_id,
1597               hours.element_name,
1598               hours.processing_priority,
1599               hours.rate,
1600               hours.multiple,
1601               hours.hours,
1602               hours.amount,
1603               hours.assignment_action_id
1604          from pay_hours_by_rate_v hours
1605         where hours.assignment_action_id = cp_assignment_action_id
1606           and legislation_code in ('US', 'CA') -- Bug 3370112
1607 	  and hours.element_type_id >= 0  -- Bug 3370112
1608         order by hours.processing_priority,hours.element_type_id;
1609 
1610     cursor c_reporting_name(cp_element_type_id in number
1611                            ,cp_language in varchar2) is
1612       select nvl(reporting_name, element_name)
1613         from pay_element_types_f_tl
1614        where element_type_id = cp_element_type_id
1615          and language        = cp_language;
1616 
1617     cursor c_classification(cp_element_type_id in number ) is
1618       select pec.classification_name,
1619              pet.element_information10 primary_balance_id,
1620              pet.element_information12 hours_balance_id
1621         from pay_element_types_f pet,
1622              pay_element_classifications pec
1623        where pet.element_type_id   = cp_element_type_id
1624          and p_curr_pymt_eff_date between pet.effective_start_date
1625                                       and pet.effective_end_date
1626          and pec.classification_id = pet.classification_id;
1627 
1628      cursor c_retro(cp_run_action_id   in number
1629                    ,cp_element_type_id in number
1630                    ,ln_pymt_eff_date in Date) is         -- Bug# 16318258
1631         select pepd.element_entry_id,
1632                sum(decode(piv.name, 'Pay Value', prrv.result_value)),
1633                sum(decode(piv.name, 'Hours', prrv.result_value)),
1634                nvl(sum(decode(piv.name, 'Multiple', prrv.result_value)),1),
1635                sum(decode(piv.name, 'Rate', prrv.result_value))
1636           from pay_run_results prr,
1637                pay_run_result_values prrv,
1638                pay_input_values_f piv,
1639                pay_entry_process_details pepd
1640          where piv.input_value_id = prrv.input_value_id
1641            and prr.element_type_id = cp_element_type_id
1642            and prr.run_result_id = prrv.run_result_id
1643            and prr.assignment_action_id = cp_run_action_id
1644            and prr.source_type = 'E'
1645            and pepd.element_entry_id = prr.source_id
1646            and pepd.source_asg_action_id is not null
1647            and result_value is not null
1648            and ln_pymt_eff_date between piv.effective_start_date and piv.effective_end_date    -- Bug# 16318258
1649          group by pepd.element_entry_id;
1650 
1651 
1652     ln_element_type_id     NUMBER;
1653     lv_element_name        VARCHAR2(150);
1654     ln_processing_priority NUMBER;
1655 
1656     ln_rate            NUMBER;
1657     ln_multiple        NUMBER;
1658     ln_hours           NUMBER;
1659     ln_amount          NUMBER;
1660 
1661     lv_reporting_name      VARCHAR2(150);
1662     lv_classification_name VARCHAR2(150);
1663     ln_primary_balance_id  NUMBER;
1664     ln_hours_balance_id    NUMBER;
1665 
1666     ln_payments_amount NUMBER(15,2);
1667     ln_ytd_hours       NUMBER(15,2) := 0;
1668     ln_ytd_amount      NUMBER(15,2) := 0;
1669 
1670     ln_tot_pymt_amt    NUMBER(15,2);
1671     ln_pymt_def_bal_id NUMBER;
1672     ln_pymt_bal_amt    NUMBER(15,2);
1673 
1674     ln_index           NUMBER ;
1675 
1676     prev_element_type_id  NUMBER := -1;
1677     prev_run_asg_act_id   NUMBER := -1;
1678 
1679     ln_gre_ytd_defined_bal_id   NUMBER;
1680     ln_tg_ytd_defined_bal_id    NUMBER;
1681     ln_hours_ytd_defined_bal_id NUMBER;
1682     lv_procedure_name           VARCHAR2(100) := '.populate_hours_x_rate';
1683     lv_error_message            VARCHAR2(200);
1684     ln_step                     NUMBER;
1685 
1686     ln_assignment_action_id     NUMBER;
1687     ln_run_type_id              NUMBER;
1688 
1689     ln_retro_rate          NUMBER(15,5);
1690     ln_retro_multiple      NUMBER(15,5);
1691     ln_retro_hours         NUMBER(15,5);
1692     ln_retro_payvalue      NUMBER(15,5);
1693     ln_retro_element_entry NUMBER;
1694 
1695     i  NUMBER := 0;
1696 
1697     hbr  pay_ac_action_arch.hbr_table;
1698 
1699   BEGIN
1700 
1701 
1702       ln_step := 1;
1703       hr_utility.set_location(gv_package || lv_procedure_name, 10);
1704       hr_utility.trace('HBR p_curr_pymt_action_id : ' || p_curr_pymt_action_id);
1705       hr_utility.trace('HBR p_assignment_id : ' || p_assignment_id);
1706 
1707       hbr.delete;
1708       ln_tot_pymt_amt := 0;
1709 
1710       open c_run_aa_id(p_curr_pymt_action_id, p_assignment_id);
1711       loop
1712          fetch c_run_aa_id into ln_assignment_action_id
1713                                ,ln_run_type_id;
1714          exit when c_run_aa_id%notfound;
1715 
1716          hr_utility.trace('HBR ln_assignment_action_id : ' ||
1717                                ln_assignment_action_id);
1718 
1719          ln_step := 2;
1720 
1721          open  c_hbr(ln_assignment_action_id);
1722          loop
1723             fetch c_hbr into hbr(i);
1724 
1725             exit when c_hbr%notfound;
1726 
1727             i := i + 1;
1728          end loop;
1729          close c_hbr;
1730 
1731       end loop;
1732       close c_run_aa_id;
1733 
1734       if hbr.count > 0 then
1735       hr_utility.trace(' I came in first if ');
1736 
1737          for j in hbr.first..hbr.last + 1
1738          loop
1739 
1740             if ( j <> i ) then
1741               hr_utility.trace(' It came here one');
1742                ln_element_type_id      := hbr(j).element_type_id;
1743                lv_element_name         := hbr(j).element_name;
1744                ln_processing_priority  := hbr(j).processing_priority;
1745                ln_rate                 := round(hbr(j).rate,5); --Bug 8544619
1746                ln_multiple             := hbr(j).multiple;
1747                ln_hours                := hbr(j).hours;
1748                ln_amount               := hbr(j).amount;
1749                  hr_utility.trace('element_type_id'||hbr(j).element_type_id);
1750                  hr_utility.trace('element_name'||hbr(j).element_name);
1751                  hr_utility.trace('hbr(j).rate'||hbr(j).rate);
1752             end if;
1753 
1754             ln_step := 3;
1755 
1756             if ( ( ln_element_type_id <> prev_element_type_id and
1757                    prev_element_type_id <> -1 ) or
1758                  ( j = i )
1759                 ) then
1760 
1761                 hr_utility.trace('I came here two');
1762 
1763                ln_step := 5;
1764                if gv_reporting_level = 'TAXGRP' then
1765                      ln_tg_ytd_defined_bal_id
1766                          := pay_emp_action_arch.get_defined_balance_id
1767                                            (ln_primary_balance_id,
1768                                             gv_dim_asg_tg_ytd,
1769                                             p_legislation_code);
1770                      ln_hours_ytd_defined_bal_id
1771                          := pay_emp_action_arch.get_defined_balance_id
1772                                            (ln_hours_balance_id,
1773                                             gv_dim_asg_tg_ytd,
1774                                             p_legislation_code);
1775                      if ln_tg_ytd_defined_bal_id is not null then
1776                         ln_ytd_amount := nvl(pay_balance_pkg.get_value(
1777                                                ln_tg_ytd_defined_bal_id,
1778                                                p_ytd_balcall_aaid),0);
1779                      end if;
1780                      if ln_hours_ytd_defined_bal_id is not null then
1781                         ln_ytd_hours  := nvl(pay_balance_pkg.get_value(
1782                                                 ln_hours_ytd_defined_bal_id,
1783                                                 p_ytd_balcall_aaid),0);
1784                      end if;
1785                else
1786                      ln_step := 10;
1787                      ln_gre_ytd_defined_bal_id
1788                          := pay_emp_action_arch.get_defined_balance_id
1789                                            (ln_primary_balance_id,
1790                                             gv_dim_asg_gre_ytd,
1791                                             p_legislation_code);
1792                      ln_hours_ytd_defined_bal_id
1793                          := pay_emp_action_arch.get_defined_balance_id
1794                                            (ln_hours_balance_id,
1795                                             gv_dim_asg_gre_ytd,
1796                                             p_legislation_code);
1797                      if ln_gre_ytd_defined_bal_id is not null then
1798                         ln_ytd_amount := nvl(pay_balance_pkg.get_value(
1799                                                ln_gre_ytd_defined_bal_id,
1800                                                p_ytd_balcall_aaid),0);
1801                      end if;
1802                      if ln_hours_ytd_defined_bal_id is not null then
1803                         ln_ytd_hours  := nvl(pay_balance_pkg.get_value(
1804                                                ln_hours_ytd_defined_bal_id,
1805                                                p_ytd_balcall_aaid),0);
1806                      end if;
1807                end if;
1808 
1809                hr_utility.trace('ytd balance = ' || ln_ytd_amount);
1810                hr_utility.trace('ytd hours = '   || ln_ytd_hours);
1811                pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
1812                       := ln_ytd_amount;
1813                pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
1814                       := ln_ytd_hours;
1815 
1816                ln_ytd_amount := 0;
1817                ln_ytd_hours  := 0;
1818 
1819                ln_pymt_def_bal_id
1820                          := pay_emp_action_arch.get_defined_balance_id
1821                                            (ln_primary_balance_id,
1822                                             '_ASG_PAYMENTS',
1823                                             p_legislation_code);
1824 
1825                ln_pymt_bal_amt := nvl(pay_balance_pkg.get_value(
1826                                                ln_pymt_def_bal_id,
1827                                                p_pymt_balcall_aaid),0);
1828 
1829                hr_utility.trace('ln_pymt_bal_amt : '||ln_pymt_bal_amt);
1830                hr_utility.trace('ln_tot_pymt_amt : '||ln_tot_pymt_amt);
1831                hr_utility.trace('prev_element_type_id: '||prev_element_type_id);
1832                hr_utility.trace('prev_run_asg_act_id : '||prev_run_asg_act_id);
1833 
1834                IF ( ln_tot_pymt_amt <> ln_pymt_bal_amt ) THEN
1835 
1836                hr_utility.trace('i came here third');
1837 
1838                   OPEN c_retro(prev_run_asg_act_id, prev_element_type_id,p_curr_pymt_eff_date);  -- Bug# 16318258
1839                   LOOP
1840                     hr_utility.set_location(gv_package || lv_procedure_name,55);
1841                     fetch c_retro into ln_retro_element_entry
1842                                       ,ln_retro_payvalue
1843                                       ,ln_retro_hours
1844                                       ,ln_retro_multiple
1845                                       ,ln_retro_rate;
1846                     if c_retro%notfound then
1847                        exit;
1848                     end if;
1849 
1850                     hr_utility.trace('HBR Retro Values');
1851                     hr_utility.trace('Pay Value='|| ln_retro_payvalue);
1852                     hr_utility.trace('Hours    ='|| ln_retro_hours);
1853                     hr_utility.trace('Rate     ='|| ln_retro_rate);
1854                     hr_utility.trace('Multiple ='|| ln_retro_multiple);
1855 
1856                     IF nvl(ln_retro_multiple,0) = 0 THEN
1857                        ln_retro_multiple := 1;
1858                     END IF;
1859 
1860                     ln_index := pay_ac_action_arch.lrr_act_tab.count;
1861                     hr_utility.trace('ln_index = ' || ln_index);
1862 
1863 
1864                     ln_step := 20;
1865                     pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
1866                           := 'AC EARNINGS';
1867 
1868                     pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
1869                           := '00-000-0000';
1870                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
1871                           := lv_classification_name;
1872                     hr_utility.trace('action_info_category' || lv_classification_name);
1873                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
1874                           := prev_element_type_id;
1875                     hr_utility.trace('act_info2' || prev_element_type_id);
1876                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
1877                           := ln_primary_balance_id;
1878                     hr_utility.trace('act_info6' || ln_primary_balance_id);
1879                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
1880                           := ln_processing_priority;
1881                     hr_utility.trace('act_info7' || ln_processing_priority);
1882                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
1883                           := fnd_number.number_to_canonical(ln_retro_payvalue);
1884                     hr_utility.trace('act_info8' || fnd_number.number_to_canonical(ln_retro_payvalue));
1885                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
1886                           := 0;
1887                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
1888                           := lv_reporting_name;
1889                     hr_utility.trace('act_info10' || lv_reporting_name);
1890                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
1891                           := fnd_number.number_to_canonical(ln_retro_hours);
1892                     hr_utility.trace('act_info11' || fnd_number.number_to_canonical(ln_retro_hours));
1893                     pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
1894                           := p_xfr_action_id;
1895                     hr_utility.trace('action_context_id' || p_xfr_action_id);
1896 
1897                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info13
1898                           := fnd_number.number_to_canonical(ln_retro_rate * ln_retro_multiple);
1899 		    pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 --13938951
1900                   := fnd_number.number_to_canonical(ln_rate * nvl(ln_multiple,1));
1901                     hr_utility.trace('act_info13' || fnd_number.number_to_canonical(ln_retro_rate * ln_retro_multiple));
1902                   END LOOP;
1903                   CLOSE c_retro;
1904                   hr_utility.set_location(gv_package || lv_procedure_name, 77);
1905 
1906                END IF;
1907 
1908                ln_tot_pymt_amt := 0;
1909                ln_pymt_bal_amt := 0;
1910 
1911                if ( j = i ) then
1912                   exit;
1913                end if;
1914             end if;
1915 
1916             hr_utility.trace('lv_element_name = ' || lv_element_name);
1917             hr_utility.trace('ln_rate = '     || ln_rate);
1918             hr_utility.trace('ln_amount = '   || ln_amount);
1919             hr_utility.trace('ln_multiple = ' || ln_multiple);
1920             hr_utility.trace('ln_hours = '    || ln_hours);
1921 
1922             lv_reporting_name := lv_element_name;
1923 
1924             ln_step := 15;
1925 
1926             open  c_reporting_name(ln_element_type_id,
1927                                    gv_person_lang);
1928             fetch c_reporting_name into lv_reporting_name;
1929             if ( c_reporting_name%notfound ) then
1930                lv_reporting_name := lv_element_name;
1931             end if;
1932             close c_reporting_name;
1933 
1934             open  c_classification(ln_element_type_id);
1935             fetch c_classification into lv_classification_name
1936                                        ,ln_primary_balance_id
1937                                        ,ln_hours_balance_id;
1938             close c_classification;
1939 
1940             ln_payments_amount := ln_amount;
1941             ln_tot_pymt_amt   := ln_tot_pymt_amt + ln_payments_amount;
1942 
1943             /*Insert this into the plsql table */
1944 
1945             hr_utility.set_location(gv_package || lv_procedure_name, 40);
1946             ln_index := pay_ac_action_arch.lrr_act_tab.count;
1947             hr_utility.trace('ln_index = ' || ln_index);
1948 
1949 
1950             ln_step := 20;
1951             pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
1952                   := 'AC EARNINGS';
1953             pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
1954                   := '00-000-0000';
1955             pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
1956                   := lv_classification_name;
1957             hr_utility.trace('action_info_category2' || lv_classification_name);
1958             pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
1959                   := ln_element_type_id;
1960             hr_utility.trace('act_info22' || prev_element_type_id);
1961             pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
1962                   := ln_primary_balance_id;
1963             hr_utility.trace('act_info62' || ln_primary_balance_id);
1964             pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
1965                   := ln_processing_priority;
1966             hr_utility.trace('act_info72' || ln_processing_priority);
1967             pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
1968                   := fnd_number.number_to_canonical(ln_payments_amount);
1969             hr_utility.trace('act_info82' || fnd_number.number_to_canonical(ln_retro_payvalue)); /* Bug 3311866*/
1970             pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
1971                   := fnd_number.number_to_canonical(ln_ytd_amount);
1972 
1973             pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
1974                   := lv_reporting_name;
1975                   hr_utility.trace('act_info102' || lv_reporting_name);
1976             pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
1977                   := fnd_number.number_to_canonical(ln_hours);
1978             hr_utility.trace('act_info112' || fnd_number.number_to_canonical(ln_retro_hours));
1979             pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
1980                   := p_xfr_action_id;
1981 --         pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
1982 --                := fnd_number.number_to_canonical(ln_ytd_hours);
1983             pay_ac_action_arch.lrr_act_tab(ln_index).act_info13
1984                   := fnd_number.number_to_canonical(ln_rate * nvl(ln_multiple,1));
1985  	    pay_ac_action_arch.lrr_act_tab(ln_index).act_info22  --13938951
1986                   := fnd_number.number_to_canonical(ln_rate * nvl(ln_multiple,1));
1987             hr_utility.trace('act_info13' || fnd_number.number_to_canonical(ln_retro_rate * ln_retro_multiple));
1988             prev_element_type_id := ln_element_type_id;
1989             prev_run_asg_act_id  := hbr(j).run_asg_act_id;
1990          end loop;
1991       end if;
1992 
1993       hr_utility.set_location(gv_package || lv_procedure_name, 40);
1994       ln_step := 25;
1995  --hr_utility.trace_off;
1996 
1997   EXCEPTION
1998     when others then
1999       lv_error_message := 'Error at step ' || ln_step ||
2000                           ' in ' || gv_package || lv_procedure_name;
2001 
2002       hr_utility.trace(lv_error_message || '-' || sqlerrm);
2003 
2004       lv_error_message :=
2005          pay_emp_action_arch.set_error_message(lv_error_message);
2006 
2007       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
2008       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
2009       hr_utility.raise_error;
2010 
2011   END populate_hours_x_rate;
2012 
2013 
2014   /******************************************************************
2015    Name      : get_current_elements
2016    Purpose   : The procedure gets all the elements which have
2017                been processed in a given pre-payment.
2018                It also calls the populate_elements procedure
2019                which calls the Current and YTD balances and
2020                stores the values in a PL/SQL table.
2021    Arguments :
2022    Notes     :
2023   ******************************************************************/
2024   PROCEDURE get_current_elements(p_xfr_action_id        in number
2025                                 ,p_curr_pymt_action_id  in number
2026                                 ,p_curr_pymt_eff_date   in date
2027                                 ,p_assignment_id        in number
2028                                 ,p_tax_unit_id          in number
2029                                 ,p_sepchk_run_type_id   in number
2030                                 ,p_sepchk_flag          in varchar2
2031                                 ,p_pymt_balcall_aaid    in number
2032                                 ,p_ytd_balcall_aaid     in number
2033                                 ,p_legislation_code     in varchar2
2034                                 ,p_action_type     in varchar2 default null
2035                                 )
2036 
2037   IS
2038 
2039 
2040 CURSOR get_run_action_id(cp_pre_as_action_id  in number
2041                         ,cp_assignment_id     in number
2042                         ,cp_sepchk_run_type_id in number
2043                         ,cp_element_type_id   in number --#11897283
2044                               ) IS
2045 SELECT paa_run.assignment_action_id
2046   FROM pay_action_interlocks pai
2047       ,pay_assignment_actions paa_run
2048       ,pay_payroll_actions ppa_run
2049  WHERE pai.locking_action_id = cp_pre_as_action_id
2050    AND pai.locked_action_id = paa_run.assignment_action_id
2051    AND paa_run.assignment_id =  cp_assignment_id
2052    AND paa_run.payroll_action_id = ppa_run.payroll_action_id
2053    /* Added for Bug# 7580440 */
2054    AND ppa_run.action_type IN ('R', 'Q')
2055    AND ((nvl(paa_run.run_type_id, ppa_run.run_type_id) is null
2056          and paa_run.source_action_id is null) or
2057         (nvl(paa_run.run_type_id, ppa_run.run_type_id) is not null
2058          and paa_run.source_action_id is not null
2059          and paa_run.run_type_id <> cp_sepchk_run_type_id))
2060    /* Added for Bug#9207953 */
2061   /* AND NOT EXISTS
2062              ( SELECT 1
2063                FROM pay_assignment_actions paa_run2
2064                WHERE paa_run2.run_type_id is not null
2065                 AND paa_run2.source_action_id is not null
2066                 AND paa_run2.source_action_id = paa_run.source_action_id
2067                 AND paa_run2.run_type_id = cp_sepchk_run_type_id
2068               )*/
2069    /* Added for Bug#11897283 */
2070    AND EXISTS
2071               (
2072                 SELECT 1
2073                 FROM pay_run_results prr
2074                 WHERE prr.assignment_action_id = paa_run.assignment_action_id
2075                 AND prr.element_type_id = cp_element_type_id);
2076 
2077 
2078  Cursor get_element_entry_id( cp_run_action_id in number ,
2079                               cp_assignment_id in number ,
2080                               cp_element_type_id in number ) IS
2081  SELECT distinct peef.element_entry_id
2082  FROM pay_element_entries_f peef,
2083                 pay_assignment_actions paa,
2084                 pay_payroll_actions ppa,
2085                 per_time_periods ptp
2086                 WHERE paa.assignment_action_id = cp_run_action_id
2087             AND ppa.payroll_action_id = paa.payroll_action_id
2088             AND ptp.payroll_id = ppa.payroll_id
2089             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
2090             AND peef.assignment_id = cp_assignment_id
2091             AND peef.element_type_id = cp_element_type_id
2092 
2093             /* Commenting as Ele Entry Eff Start / End Date may not match the following
2094             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
2095             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
2096             End of Comment */
2097 
2098             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;
2099 
2100   Cursor check_retro( cp_run_action_id in number ,
2101                               cp_assignment_id in number ,
2102                               cp_element_type_id in number ) IS
2103  SELECT distinct 'Y'
2104  FROM pay_element_entries_f peef,
2105                 pay_assignment_actions paa,
2106                 pay_payroll_actions ppa,
2107                 per_time_periods ptp
2108                 WHERE paa.assignment_action_id = cp_run_action_id
2109             AND ppa.payroll_action_id = paa.payroll_action_id
2110             AND ptp.payroll_id = ppa.payroll_id
2111             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
2112             AND peef.assignment_id = cp_assignment_id
2113             AND peef.element_type_id = cp_element_type_id
2114             AND peef.creator_type IN ('R', 'EE', 'RR', 'NR', 'PR') -- Changed 25.08.2007
2115 
2116 
2117             /* Commenting as Ele Entry Eff Start / End Date may not match the following
2118             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
2119             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
2120             End of Comment*/
2121 
2122             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;
2123 
2124    CURSOR retro_parent_check_flag ( cp_run_action_id in number ,
2125                               cp_assignment_id in number ,
2126                               cp_element_type_id in number ) IS
2127     SELECT DISTINCT 'Y'
2128            FROM pay_element_entries_f peef,
2129                 pay_assignment_actions paa,
2130                 pay_payroll_actions ppa,
2131                 per_time_periods ptp
2132           WHERE paa.assignment_action_id = cp_run_action_id
2133             AND ppa.payroll_action_id = paa.payroll_action_id
2134             AND ptp.payroll_id = ppa.payroll_id
2135             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
2136             AND peef.assignment_id = cp_assignment_id
2137             AND peef.element_type_id = cp_element_type_id
2138             AND peef.creator_type NOT IN ('R', 'EE', 'RR', 'NR', 'PR') -- Changed on 25.08.2007
2139 
2140             /* Commenting as Ele Entry Eff Start / End Date may not match the following
2141             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
2142             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
2143             End of Comment */
2144 
2145             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;
2146 
2147 
2148 CURSOR archive_non_retro_elements ( cp_original_date_paid in varchar2,
2149                                     cp_element_entry_id in number,
2150                                     cp_run_assignment_action_id in number ) IS
2151 
2152           select fnd_date.date_to_canonical(ptp.start_date),
2153                  fnd_date.date_to_canonical(ptp.end_date),
2154                 hr_general.decode_lookup
2155                             (DECODE (UPPER (ec.classification_name),
2156                                      'EARNINGS', 'US_EARNINGS',
2157                                      'SUPPLEMENTAL EARNINGS', 'US_SUPPLEMENTAL_EARNINGS',
2158                                      'IMPUTED EARNINGS', 'US_IMPUTED_EARNINGS',
2159                                      'NON-PAYROLL PAYMENTS', 'US_PAYMENT',
2160                                      'ALIEN/EXPAT EARNINGS', 'PER_US_INCOME_TYPES',
2161                                      NULL
2162                                     ),
2163                              et.element_information1
2164                             ) CATEGORY
2165 from pay_assignment_actions paa,
2166      pay_payroll_actions ppa,
2167      per_time_periods ptp,
2168      pay_element_entries_f peef,
2169      pay_element_classifications ec,
2170      pay_element_types et
2171 where paa.assignment_action_id = cp_run_assignment_action_id
2172 and   paa.payroll_action_id   = ppa.payroll_action_id
2173 and   ptp.payroll_id = ppa.payroll_id
2174 and   cp_original_date_paid between  ptp.start_date AND ptp.end_date
2175 and   peef.element_entry_id = cp_element_entry_id
2176 and   et.element_type_id = peef.element_type_id
2177 and   et.classification_id = ec.classification_id
2178 AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;  -- Bug# 16318258
2179 
2180 CURSOR get_application_column_name IS
2181 
2182 /* Modifying cursor for performance issue
2183    replacing table with FND_DESCR_FLEX_COLUMN_USAGES
2184    translation should not be an issue for US leg
2185 
2186   SELECT application_column_name
2187     FROM FND_DESCR_FLEX_COL_USAGE_VL
2188    WHERE end_user_column_name = 'Originating Pay Period'
2189    AND upper(descriptive_flexfield_name) = upper('PAY_ELEMENT_ENTRIES')
2190      AND upper(descriptive_flex_context_code) = 'US EARNINGS';
2191 */
2192 
2193 SELECT fnd_flex.application_column_name
2194 FROM fnd_application fnd_appl
2195     ,fnd_descr_flex_column_usages fnd_flex
2196  WHERE fnd_appl.application_short_name = 'PAY'
2197  AND   fnd_appl.application_id = fnd_flex.application_id
2198  AND   fnd_flex.descriptive_flexfield_name = 'PAY_ELEMENT_ENTRIES'
2199  AND   UPPER(fnd_flex.descriptive_flex_context_code) = 'US EARNINGS'
2200  and   fnd_flex.end_user_column_name = 'Originating Pay Period';
2201 
2202  CURSOR get_num_addnl_elements ( cp_run_action_id    IN NUMBER,
2203                                  cp_assignment_id    IN NUMBER,
2204                                  cp_element_type_id  IN NUMBER) IS
2205 
2206        SELECT COUNT (*)
2207            FROM pay_element_entries_f peef,
2208                 pay_assignment_actions paa,
2209                 pay_payroll_actions ppa,
2210                 per_time_periods ptp
2211           WHERE paa.assignment_action_id = cp_run_action_id
2212             AND ppa.payroll_action_id = paa.payroll_action_id
2213             AND ptp.payroll_id = ppa.payroll_id
2214             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
2215             AND peef.assignment_id = cp_assignment_id
2216             AND peef.element_type_id = cp_element_type_id
2217             AND peef.creator_type NOT IN ('R', 'EE', 'RR', 'NR', 'PR')
2218 
2219             /* Commenting as Ele Entry Eff Start / End Date may not match the following
2220             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
2221             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
2222             End of Comment */
2223 
2224             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;
2225 
2226 -- Added For Work At Home Condition
2227 
2228     CURSOR c_cur_get_wrkathome(cp_assignment_id IN NUMBER,
2229                               p_curr_pymt_eff_date in Date) is        -- Bug# 16318258
2230       SELECT NVL(paf.work_at_home, 'N')
2231             ,ppf.person_id
2232             ,ppf.business_group_id
2233       FROM per_assignments_f paf
2234           ,per_all_people_f ppf
2235       WHERE paf.assignment_id = cp_assignment_id
2236       AND   paf.person_id = ppf.person_id
2237       and p_curr_pymt_eff_date between paf.effective_start_date and paf.effective_end_date
2238       and p_curr_pymt_eff_date between ppf.effective_start_date and ppf.effective_end_date;  -- Bug# 16318258
2239 
2240     CURSOR c_cur_home_state_jd(cp_person_id IN NUMBER
2241                               ,cp_bg_id     IN NUMBER) IS
2242       SELECT pus.state_code || '-000-0000'
2243       FROM per_addresses pa
2244           ,pay_us_states pus
2245       WHERE pa.person_id = cp_person_id
2246       AND   pa.primary_flag = 'Y'
2247       AND   p_curr_pymt_eff_date between pa.date_from AND NVL(pa.date_to, hr_general.END_OF_TIME)
2248       AND   pa.business_group_id = cp_bg_id
2249       AND   pa.region_2 = pus.state_abbrev
2250       AND   pa.style = p_legislation_code;
2251 
2252     cursor c_cur_sp_action_elements(cp_pymt_action_id   in number
2253                                    ,cp_assignment_id    in number
2254                                    ,cp_sepchk_run_type  in number
2255                                    ,cp_sepchk_flag      in varchar2
2256                                 ) is
2257       select distinct prr.element_type_id,
2258              pec.classification_name,
2259              nvl(petl.reporting_name, petl.element_name),
2260              pet.element_information10,
2261              pet.element_information12,
2262              pet.processing_priority
2263         from pay_assignment_actions paa,
2264              pay_payroll_actions ppa,
2265              pay_run_results prr,
2266              pay_element_types_f pet,
2267              pay_element_classifications pec,
2268              pay_element_types_f_tl petl
2269       where paa.assignment_id = cp_assignment_id
2270         and prr.assignment_action_id = paa.assignment_action_id
2271         and cp_sepchk_flag = 'Y'
2272         and paa.assignment_action_id = cp_pymt_action_id
2273         and nvl(paa.run_type_id, cp_sepchk_run_type) = cp_sepchk_run_type
2274         and ppa.payroll_action_id = paa.payroll_action_id
2275         and pet.element_type_id = prr.element_type_id
2276         and pet.element_information10 is not null
2277         and ppa.effective_date between pet.effective_start_date
2278                                    and pet.effective_end_date
2279         and petl.element_type_id  = pet.element_type_id
2280         and petl.language         = gv_person_lang
2281         and pec.classification_id = pet.classification_id
2282         and pec.classification_name in ('Earnings',
2283                                         'Alien/Expat Earnings',
2284                                         'Supplemental Earnings',
2285                                         'Imputed Earnings',
2286                                         'Taxable Benefits',
2287                                         'Pre-Tax Deductions',
2288                                         'Involuntary Deductions',
2289                                         'Voluntary Deductions',
2290                                         'Non-payroll Payments'
2291                                          )
2292         and pet.element_name not like '%Calculator'
2293         and pet.element_name not like '%Special Inputs'
2294         and pet.element_name not like '%Special Features'
2295         and pet.element_name not like '%Special Features 2'
2296         and pet.element_name not like '%Verifier'
2297         and pet.element_name not like '%Priority'
2298       order by pec.classification_name;
2299 
2300     cursor c_cur_action_elements(cp_pymt_action_id   in number
2301                                 ,cp_assignment_id    in number
2302                                 ,cp_sepchk_run_type  in number
2303                                 ,cp_sepchk_flag      in varchar2
2304                                 ,cp_ytd_act_sequence in number
2305                                 ) is
2306       select distinct pet.element_type_id,
2307              pec.classification_name,
2308              nvl(petl.reporting_name, petl.element_name),
2309              pet.element_information10,
2310              pet.element_information12,
2311              pet.processing_priority
2312         from pay_action_interlocks pai,
2313              pay_assignment_actions paa,
2314              pay_payroll_actions ppa,
2315              pay_all_payrolls_f ppf,
2316              pay_run_results prr,
2317              pay_element_types_f pet,
2318              pay_element_classifications pec,
2319              pay_element_types_f_tl petl
2320       where paa.assignment_id = cp_assignment_id
2321         and prr.assignment_action_id = paa.assignment_action_id
2322         and cp_sepchk_flag = 'N'
2323         and pai.locking_action_id = cp_pymt_action_id
2324         and paa.assignment_action_id = pai.locked_action_id
2325         and paa.action_sequence <= cp_ytd_act_sequence
2326         and ppa.payroll_action_id = paa.payroll_action_id
2327         and pet.element_type_id = prr.element_type_id
2328         and pet.element_information10 is not null
2329         and ppa.effective_date between pet.effective_start_date
2330                                    and pet.effective_end_date
2331         and ppa.payroll_id = ppf.payroll_id  -- Bug 3370112
2332         and ppf.payroll_id >= 0
2333         and ppa.effective_date between ppf.effective_start_date
2334             and ppf.effective_end_date
2335         and petl.element_type_id  = pet.element_type_id
2336         and petl.language         = gv_person_lang
2337         and pec.classification_id = pet.classification_id
2338         and pec.classification_name in ('Earnings',
2339                                         'Alien/Expat Earnings',
2340                                         'Supplemental Earnings',
2341                                         'Imputed Earnings',
2342                                         'Taxable Benefits',
2343                                         'Pre-Tax Deductions',
2344                                         'Involuntary Deductions',
2345                                         'Voluntary Deductions',
2346                                         'Non-payroll Payments'
2347                                          )
2348         and pet.element_name not like '%Calculator'
2349         and pet.element_name not like '%Special Inputs'
2350         and pet.element_name not like '%Special Features'
2351         and pet.element_name not like '%Special Features 2'
2352         and pet.element_name not like '%Verifier'
2353         and pet.element_name not like '%Priority'
2354       order by pec.classification_name;
2355 
2356   cursor c_ytd_action_seq(cp_asg_act_id in number) is
2357     select  paa.action_sequence
2358     from    pay_assignment_actions paa
2359     where   paa.assignment_action_id = cp_asg_act_id;
2360 --Bug 6950970 starts here
2361   CURSOR get_payroll_date_earned(cp_run_action_id    IN NUMBER) IS
2362         SELECT
2363         TO_CHAR(TRUNC(fnd_date.canonical_to_date(fnd_date.date_to_canonical(ppa.date_earned))),'DD-MON-YYYY')
2364          FROM pay_assignment_actions paa,
2365                  pay_payroll_actions ppa
2366            WHERE paa.assignment_action_id = cp_run_action_id
2367             AND ppa.payroll_action_id = paa.payroll_action_id;
2368 l_date_earned                       VARCHAR2(100);
2369 --Bug 6950970 ends here
2370     ln_element_type_id             NUMBER;
2371     lv_element_classification_name VARCHAR2(80);
2372     lv_reporting_name              VARCHAR2(80);
2373     ln_primary_balance_id          NUMBER;
2374     ln_hours_balance_id            NUMBER;
2375     ln_processing_priority         NUMBER;
2376     ln_ytd_action_sequence         NUMBER;
2377 
2378     ln_element_index               NUMBER ;
2379     lv_procedure_name              VARCHAR2(100) := '.get_current_elements';
2380     lv_error_message               VARCHAR2(200);
2381     ln_step                        NUMBER;
2382     lv_original_date_earned        VARCHAR2(100);
2383     lv_effective_start_date        VARCHAR2(100);
2384     lv_effective_end_date          VARCHAR2(100);
2385     lv_category                    VARCHAR2(100);
2386     ln_run_assignment_action_id    NUMBER;
2387     ln_element_entry_id            NUMBER;
2388     lv_original_date_paid          VARCHAR2(100);
2389     lv_application_column_name     VARCHAR2(100);
2390     lv_sqlstr                      varchar2(300);
2391     ld_original_date_paid          date;
2392     ln_flag                        number;
2393     lv_jurisdiction_flag           varchar2(20);
2394     ln_rate                        number := null ;
2395     ln_final_rate                  number := null ;
2396     lv_retro_flag                  varchar2(100) :='N';
2397     ln_multiple                    number ;
2398     ln_addnl_ele_num               number ;
2399     lv_retro_parent_flag           varchar2(10) := 'N';
2400     lv_sqlstr1                     varchar2(2000);
2401     lv_curr_pymt_eff_date          VARCHAR2(100);
2402 -- Added For Work At Home Condition
2403     lv_wrk_at_home                 per_assignments_f.work_at_home%TYPE;
2404     ln_person_id                   per_people_f.person_id%TYPE;
2405     ln_bg_id                       per_people_f.business_group_id%TYPE;
2406 
2407 		-- lv_sqlstr_final, lv_sqlstr_date added by sneelapa for bug 13905220
2408 		lv_sqlstr_final									varchar2(10000);
2409 		lv_sqlstr_date									varchar2(10000);
2410 
2411   BEGIN
2412       ln_flag := 0;
2413       ln_step := 1;
2414       hr_utility.set_location(gv_package || lv_procedure_name, 10);
2415       hr_utility.trace('p_xfr_action_id = ' || p_xfr_action_id);
2416       hr_utility.trace('p_assignment_id '   || p_assignment_id);
2417       hr_utility.trace('p_tax_unit_id '     || p_tax_unit_id);
2418       hr_utility.trace('p_sepchk_flag '     || p_sepchk_flag);
2419       hr_utility.trace('p_legislation_code '|| p_legislation_code);
2420       hr_utility.trace('p_curr_pymt_action_id  '
2421                      ||to_char(p_curr_pymt_action_id ));
2422       hr_utility.trace('p_ytd_balcall_aaid '  || p_ytd_balcall_aaid);
2423       hr_utility.trace('p_pymt_balcall_aaid ' ||p_pymt_balcall_aaid);
2424       hr_utility.trace('p_sepchk_run_type_id '|| p_sepchk_run_type_id);
2425       hr_utility.trace('p_curr_pymt_eff_date '||TO_CHAR(p_curr_pymt_eff_date,'DD-MON-YYYY'));
2426 
2427       hr_utility.set_location(gv_package || lv_procedure_name, 20);
2428 
2429       if p_legislation_code <> 'US' then
2430          ln_step := 5;
2431          populate_hours_x_rate(p_xfr_action_id        => p_xfr_action_id
2432                               ,p_curr_pymt_action_id  => p_curr_pymt_action_id
2433                               ,p_curr_pymt_eff_date   => p_curr_pymt_eff_date
2434                               ,p_assignment_id        => p_assignment_id
2435                               ,p_tax_unit_id          => p_tax_unit_id
2436                               ,p_sepchk_run_type_id   => p_sepchk_run_type_id
2437                               ,p_sepchk_flag          => p_sepchk_flag
2438                               ,p_pymt_balcall_aaid    => p_pymt_balcall_aaid
2439                               ,p_ytd_balcall_aaid     => p_ytd_balcall_aaid
2440                               ,p_legislation_code     => p_legislation_code);
2441       end if;
2442 
2443       ln_step := 6;
2444       open  c_ytd_action_seq(p_ytd_balcall_aaid);
2445       fetch c_ytd_action_seq into ln_ytd_action_sequence;
2446       close c_ytd_action_seq;
2447 
2448       ln_step := 10;
2449       if p_sepchk_flag = 'Y' then
2450          open c_cur_sp_action_elements(p_curr_pymt_action_id ,
2451                                        p_assignment_id,
2452                                        p_sepchk_run_type_id,
2453                                        p_sepchk_flag);
2454 
2455       elsif p_sepchk_flag = 'N' then
2456          open c_cur_action_elements(p_curr_pymt_action_id ,
2457                                     p_assignment_id,
2458                                     p_sepchk_run_type_id,
2459                                     p_sepchk_flag,
2460                                     ln_ytd_action_sequence);
2461       end if;
2462 
2463 
2464 -- Code added by sneelapa for bug 13905220 starts here.
2465 
2466 BEGIN
2467 		SELECT  'select  nvl('|| fdv.application_column_name || ',''AAA'')
2468 										from pay_element_entries_f where element_entry_id = :element_entry_id '
2469 							   ||'  AND  '
2470 							   ||' TO_DATE( :date_earned , ''DD-MON-YYYY'') '
2471 							   ||' BETWEEN effective_start_date AND effective_end_date '
2472 				into lv_sqlstr
2473 		FROM    fnd_descr_flex_col_usage_vl fdv
2474 		WHERE   fdv.application_id = 801
2475 		 	AND   fdv.descriptive_flexfield_name LIKE 'PAY_ELEMENT_ENTRIES'
2476 			AND   fdv.descriptive_flex_context_code = 'US EARNINGS';
2477 
2478 EXCEPTION
2479 	WHEN OTHERS THEN
2480 			hr_utility.trace('Error occurred while preparing query for lv_sqlstr ');
2481 END;
2482 
2483 BEGIN
2484 SELECT  'select count(peef.'|| fdv.application_column_name || ') FROM pay_element_entries_f peef,
2485 																			pay_assignment_actions paa, pay_payroll_actions ppa,
2486 																			per_time_periods ptp WHERE paa.assignment_action_id = :run_assignment_action_id '
2487                                || ' AND ppa.payroll_action_id = paa.payroll_action_id
2488 																		AND ptp.payroll_id = ppa.payroll_id AND ppa.date_earned
2489 																		BETWEEN ptp.start_date AND ptp.end_date AND peef.assignment_id = '
2490                                ||' :assignment_id AND peef.element_type_id = :element_type_id '
2491                                || ' AND NVL(ppa.date_earned, ppa.effective_date)
2492 																		BETWEEN peef.effective_start_date AND peef.effective_end_date AND peef.'||fdv.application_column_name||' is not null'
2493 				into lv_sqlstr1
2494 		FROM    fnd_descr_flex_col_usage_vl fdv
2495 		WHERE   fdv.application_id = 801
2496 		 	AND   fdv.descriptive_flexfield_name LIKE 'PAY_ELEMENT_ENTRIES'
2497 			AND   fdv.descriptive_flex_context_code = 'US EARNINGS';
2498 
2499 EXCEPTION
2500 	WHEN OTHERS THEN
2501 			hr_utility.trace('Error occurred while preparing query for lv_sqlstr1 ');
2502 END;
2503 
2504 BEGIN
2505 
2506 		SELECT  'select max(nvl(peef.'|| fdv.application_column_name || ', ptp.start_date)) FROM pay_element_entries_f peef,
2507 																				pay_assignment_actions paa, pay_payroll_actions ppa,per_time_periods ptp
2508 																				WHERE paa.assignment_action_id = :run_assignment_action_id '
2509 		                               ||' AND ppa.payroll_action_id = paa.payroll_action_id AND ptp.payroll_id = ppa.payroll_id
2510 																				AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date AND
2511 																				peef.assignment_id = :assignment_id AND peef.element_type_id =
2512 		                               :element_type_id AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN
2513 																			peef.effective_start_date AND peef.effective_end_date AND peef.' || fdv.application_column_name || ' is not null '
2514 		INTO lv_sqlstr_final
2515 		FROM    fnd_descr_flex_col_usage_vl fdv
2516 		WHERE   fdv.application_id = 801
2517 		 	AND   fdv.descriptive_flexfield_name LIKE 'PAY_ELEMENT_ENTRIES'
2518 			AND   fdv.descriptive_flex_context_code = 'US EARNINGS';
2519 
2520 EXCEPTION
2521 	WHEN OTHERS THEN
2522 			hr_utility.trace('Error occurred while preparing query for lv_sqlstr_final ');
2523 END;
2524 
2525 BEGIN
2526 		SELECT  'select  nvl('|| fdv.application_column_name || ',''AAA'')
2527 										from pay_element_entries_f where element_entry_id = :element_entry_id '
2528 				into lv_sqlstr_date
2529 		FROM    fnd_descr_flex_col_usage_vl fdv
2530 		WHERE   fdv.application_id = 801
2531 		 	AND   fdv.descriptive_flexfield_name LIKE 'PAY_ELEMENT_ENTRIES'
2532 			AND   fdv.descriptive_flex_context_code = 'US EARNINGS';
2533 
2534 EXCEPTION
2535 	WHEN OTHERS THEN
2536 			hr_utility.trace('Error occurred while preparing query for lv_sqlstr_date ');
2537 END;
2538 
2539 
2540 -- Code added by sneelapa for bug 13905220 ends here.
2541 
2542       loop
2543          if p_sepchk_flag = 'Y' then
2544             fetch c_cur_sp_action_elements into
2545                               ln_element_type_id,
2546                               lv_element_classification_name,
2547                               lv_reporting_name,
2548                               ln_primary_balance_id,
2549                               ln_hours_balance_id,
2550                               ln_processing_priority;
2551            if c_cur_sp_action_elements%notfound then
2552                hr_utility.set_location(gv_package || lv_procedure_name, 30);
2553                exit;
2554              end if;
2555 
2556              elsif p_sepchk_flag = 'N' then
2557             fetch c_cur_action_elements into
2558                               ln_element_type_id,
2559                               lv_element_classification_name,
2560                               lv_reporting_name,
2561                               ln_primary_balance_id,
2562                               ln_hours_balance_id,
2563                               ln_processing_priority;
2564            --- here one thing can be added
2565             if c_cur_action_elements%notfound then
2566                hr_utility.set_location(gv_package || lv_procedure_name, 35);
2567                exit;
2568              end if;
2569 
2570          end if;
2571       --  loop with the first coursor (if not found then exit )
2572       --  if the parameters from second cursor not null then exit loop else move in loop completly
2573 
2574        hr_utility.trace('Element_type_id in get_current_elements = ' || ln_element_type_id);
2575 
2576         if p_legislation_code <> 'US' then
2577            lv_retro_flag := 'N' ;
2578            lv_retro_parent_flag := 'N';
2579            gv_ytd_amount := 0;
2580            gv_ytd_hour   := 0;
2581            lv_original_date_earned := NULL;
2582            lv_effective_start_date := NULL;
2583            lv_effective_end_date := NULL;
2584            lv_category           := NULL;
2585            lv_jurisdiction_flag := NULL;
2586            lv_original_date_paid:= NULL;
2587         end if;
2588 
2589        IF p_legislation_code = 'US' THEN
2590          /* Added for Bug# 7580440 */
2591          IF p_sepchk_flag = 'Y' THEN
2592             ln_run_assignment_action_id := p_curr_pymt_action_id;
2593          ELSE
2594            OPEN get_run_action_id(p_curr_pymt_action_id
2595                                   ,p_assignment_id
2596                                   ,p_sepchk_run_type_id
2597                                   ,ln_element_type_id --#11897283 Added
2598                                   );
2599            /* Should NOT be needed */
2600            --LOOP -- For Each Run Assignment Action ID
2601 
2602            FETCH get_run_action_id INTO ln_run_assignment_action_id;
2603               /*
2604               IF get_run_action_id%NOTFOUND THEN
2605                  CLOSE get_run_action_id ;
2606                  EXIT;
2607               END IF;
2608               */
2609               CLOSE get_run_action_id ;
2610          END IF; -- p_sepchk_flag = 'Y'
2611          ln_step := 99;
2612          --
2613 	   -- Following to Check IF Additional element Entry DFF Configured for the Client
2614 	   -- This would be configured in case Client Does NOT use Retropay Functionality
2615 
2616             ln_step := 100;
2617 
2618             ln_flag := 1;
2619 
2620             OPEN get_application_column_name ;
2621             FETCH get_application_column_name INTO lv_application_column_name;
2622             CLOSE get_application_column_name;
2623 
2624             IF  lv_application_column_name IS NULL THEN
2625                 ln_flag :=1;
2626             ELSE
2627                 ln_flag :=0; -- Addl Ele DFF Info Configured
2628             END IF;
2629 
2630             hr_utility.trace('Step 100: ln_flag before entering into Ele Entry LOOP : '||ln_flag);
2631 
2632             -- Following Code May Need revise
2633 	    -- Here we are NOT Looping Through the Ele Entries
2634 	    -- But Getting ele Entry ID so that we Can Check if Addl Ele Entry Configured
2635 	    --
2636             -- Check if there is any Ele Entry that is NOT created by Retro
2637 
2638             OPEN get_element_entry_id (ln_run_assignment_action_id,
2639                                        p_assignment_id ,
2640                                        ln_element_type_id);
2641 
2642 
2643             FETCH get_element_entry_id INTO ln_element_entry_id;
2644             IF get_element_entry_id%found THEN
2645                 CLOSE get_element_entry_id;
2646                 hr_utility.trace('Ele Entry Found. ln_element_entry_id := '||ln_element_entry_id);
2647 
2648                 IF ln_flag = 0 then -- Addl Ele DFF Info Configured
2649                     hr_utility.trace('Addl Ele DFF Info Configured.');
2650 
2651 		    SELECT TO_CHAR(TRUNC(fnd_date.canonical_to_date(fnd_date.date_to_canonical(p_curr_pymt_eff_date))),'DD-MON-YYYY')
2652 		    INTO lv_curr_pymt_eff_date
2653 		    FROM DUAL;
2654 --bug no 6950970 starts here
2655 	            OPEN get_payroll_date_earned (ln_run_assignment_action_id);
2656 		    FETCH get_payroll_date_earned INTO l_date_earned;
2657 	            CLOSE get_payroll_date_earned;
2658 --bug no 6950970 ends here
2659 		    hr_utility.trace('lv_curr_pymt_eff_date := '|| lv_curr_pymt_eff_date);
2660 	            hr_utility.trace('l_date_earned := '|| l_date_earned);
2661 
2662 /*    Commented for bug 13905220
2663 
2664                     lv_sqlstr := 'select  nvl(' || lv_application_column_name ||
2665                                            ',''AAA'') from pay_element_entries_f where element_entry_id = ' || ln_element_entry_id
2666 					   ||'  AND  '
2667 					   ||' TO_DATE('''
2668 --bug no 6950970 starts here
2669 --					   || lv_curr_pymt_eff_date
2670 					   || l_date_earned
2671 --bug no 6950970 ends here
2672 					   ||''', ''DD-MON-YYYY'') '
2673 					   ||' BETWEEN effective_start_date AND effective_end_date ';
2674 
2675 */
2676 
2677 		     hr_utility.trace('Query := '|| lv_sqlstr);
2678 
2679 --bug no 6950970 starts here
2680 begin
2681 --bug no 6950970 ends here
2682 
2683 /*    Commented for bug 13905220 and redefined below
2684 
2685 		     EXECUTE IMMEDIATE lv_sqlstr INTO  lv_original_date_paid ;
2686                      lv_original_date_earned := lv_original_date_paid ;
2687 */
2688 
2689 		     EXECUTE IMMEDIATE lv_sqlstr INTO  lv_original_date_paid
2690 				 USING	 ln_element_entry_id,
2691 									l_date_earned ;
2692 
2693                      hr_utility.trace('lv_original_date_earned := '||lv_original_date_earned);
2694 
2695                 -- Possibility of Malformed SQL (Added Spaces between)
2696 
2697 /*    Commented for bug 13905220 and redefined below
2698 
2699                      lv_sqlstr1 := 'select count(peef.' || lv_application_column_name
2700                                ||') FROM pay_element_entries_f peef, pay_assignment_actions paa, pay_payroll_actions ppa,per_time_periods ptp WHERE paa.assignment_action_id = '
2701                                || ln_run_assignment_action_id
2702                                || ' AND ppa.payroll_action_id = paa.payroll_action_id AND ptp.payroll_id = ppa.payroll_id AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date AND peef.assignment_id = '
2703                                || p_assignment_id
2704                                ||' AND peef.element_type_id = '
2705                                || ln_element_type_id
2706                                || ' AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date AND peef.'
2707                                || lv_application_column_name
2708                                || ' is not null '  ;
2709 
2710                     EXECUTE IMMEDIATE lv_sqlstr1 into  ln_addnl_ele_num;
2711                     hr_utility.trace('ln_addnl_ele_num' || ln_addnl_ele_num);
2712                     hr_utility.trace('p_curr_pymt_eff_date '|| p_curr_pymt_eff_date);
2713 */
2714 
2715 						       EXECUTE IMMEDIATE lv_sqlstr1 INTO  ln_addnl_ele_num
2716 										USING ln_run_assignment_action_id, p_assignment_id,
2717 										ln_element_type_id;
2718 
2719 --bug no 6950970 starts here
2720 exception
2721     when no_data_found then
2722         ln_addnl_ele_num:=0;
2723 end;
2724 --bug no 6950970 ends here
2725                  END IF; -- Addl Ele DFF Info Configured
2726                  -- Code to be Revised Again
2727 
2728                  -- IF there is Element Entry for which Addl Ele Entry DFF Configured
2729 		 -- AND Originating Date Earned Field Populated
2730 		 --
2731 
2732 
2733                  IF  (( lv_original_date_paid <> 'AAA' and ln_flag =0) OR (ln_addnl_ele_num > 0))THEN
2734 
2735 		     hr_utility.trace('(( lv_original_date_paid <> AAA and ln_flag =0) OR (ln_addnl_ele_num > 0)');
2736 
2737 		     IF ln_addnl_ele_num > 0 THEN
2738                         hr_utility.trace('ln_addnl_ele_num > 0');
2739                         Archive_addnl_elements(
2740                                p_application_column_name         => lv_application_column_name
2741                                 ,p_xfr_action_id               => p_xfr_action_id
2742                                ,p_assignment_id               => p_assignment_id
2743                                ,p_pymt_assignment_action_id   => p_curr_pymt_action_id
2744                                ,p_pymt_eff_date               => p_curr_pymt_eff_date
2745                                ,p_element_type_id             => ln_element_type_id
2746                                ,p_primary_balance_id          => ln_primary_balance_id
2747                                ,p_hours_balance_id            => ln_hours_balance_id
2748                                ,p_processing_priority         => ln_processing_priority
2749                                ,p_element_classification_name => lv_element_classification_name
2750                                ,p_reporting_name              => lv_reporting_name
2751                                ,p_tax_unit_id                 => p_tax_unit_id
2752                                ,p_ytd_balcall_aaid            => p_ytd_balcall_aaid
2753                                ,p_pymt_balcall_aaid           =>  p_pymt_balcall_aaid
2754                                ,p_legislation_code            => p_legislation_code
2755                                ,p_sepchk_flag                 => p_sepchk_flag
2756                                ,p_sepchk_run_type_id          => p_sepchk_run_type_id
2757                                ,p_action_type                 => p_action_type
2758                                ,p_run_assignment_action_id    => ln_run_assignment_action_id
2759                                ,p_multiple                    => ln_multiple
2760                                ,p_rate                        => ln_final_rate
2761 --							p_sqlstr_final, p_sqlstr_date parameters added by sneelapa for bug 13905220
2762 															 ,p_sqlstr_final								=> lv_sqlstr_final
2763 															 ,p_sqlstr_date									=> lv_sqlstr_date);
2764 
2765 
2766                        lv_retro_flag := 'Y' ;
2767 		       -- As Base + Addl Ele DFF Config Non-Retro Entry Both Handled above
2768 		       lv_retro_parent_flag := 'N';
2769                     ELSE -- May Need to be Revised
2770 
2771                        hr_utility.trace('ln_addnl_ele_num <= 0');
2772                        open archive_non_retro_elements( ld_original_date_paid,
2773                                                         ln_element_entry_id,
2774                                                         ln_run_assignment_action_id ) ;
2775                        fetch archive_non_retro_elements
2776                             into lv_effective_start_date,
2777                                  lv_effective_end_date,
2778                                  lv_category;
2779                         close archive_non_retro_elements ;
2780                         close get_run_action_id;
2781 
2782                         -- Added For Work At Home Condition
2783                         OPEN c_cur_get_wrkathome(p_assignment_id,p_curr_pymt_eff_date);   -- Bug# 16318258
2784                         FETCH c_cur_get_wrkathome INTO lv_wrk_at_home
2785                                                       ,ln_person_id
2786                                                       ,ln_bg_id;
2787                         CLOSE c_cur_get_wrkathome;
2788 
2789                         IF lv_wrk_at_home = 'Y' THEN
2790                                 OPEN c_cur_home_state_jd(ln_person_id
2791                                                    ,ln_bg_id);
2792                                 FETCH c_cur_home_state_jd INTO lv_jurisdiction_flag;
2793                                 CLOSE c_cur_home_state_jd;
2794                         ELSE
2795                                 select nvl((select peevf.screen_entry_value  jurisdiction_code
2796                                 from pay_input_values_f pivf,
2797                                      pay_element_entry_values_f peevf
2798                                 where pivf.element_type_id = ln_element_type_id
2799                                 AND pivf.NAME = 'Jurisdiction'
2800                                 AND peevf.element_entry_id =  ln_element_entry_id
2801                                 AND pivf.input_value_id = peevf.input_value_id
2802                                 AND p_curr_pymt_eff_date between pivf.effective_start_date AND pivf.effective_end_date),  -- Bug# 16318258
2803                                 (SELECT   distinct pus.state_code
2804                                    || '-'
2805                                    || puc.county_code
2806                                    || '-'
2807                                    || punc.city_code jurisdiction_code
2808                                    FROM per_all_assignments_f peaf,
2809                                    hr_locations_all hla,
2810                                    pay_us_states pus,
2811                                    pay_us_counties puc,
2812                                    pay_us_city_names punc,
2813                                    pay_assignment_actions paa,
2814                                    pay_payroll_actions ppa
2815                                 WHERE peaf.assignment_id = p_assignment_id
2816                                 AND paa.assignment_action_id = ln_run_assignment_action_id
2817                                 AND peaf.location_id = hla.location_id
2818                                 AND hla.region_2 = pus.state_abbrev
2819                                 AND pus.state_code = puc.state_code
2820                                 AND hla.region_1 = puc.county_name
2821                                 AND hla.town_or_city = punc.city_name
2822                                 AND pus.state_code = punc.state_code
2823                                 AND puc.county_code = punc.county_code
2824                                 AND ppa.payroll_action_id = paa.payroll_action_id
2825                                 AND ppa.effective_date between peaf.effective_start_date and peaf.effective_end_date
2826                                 ))
2827                                 into lv_jurisdiction_flag
2828                                 from dual;
2829                        END IF; -- Work At Home 'N'
2830 
2831                     END IF; -- ln_addnl_ele_num > 0
2832                     /* Commented for Bug# 8211926
2833                     EXIT;
2834                     */
2835                   END IF; -- lv_original_date_paid <> 'AAA' and ln_flag =0
2836 
2837                hr_utility.trace('Before Checking Retro.');
2838 
2839                -- Start Handling Retro Cases
2840 	       -- Checking IF Retro
2841 
2842 	       OPEN check_retro ( ln_run_assignment_action_id,
2843                                     p_assignment_id,
2844                                     ln_element_type_id) ;
2845                 FETCH check_retro into lv_retro_flag ;
2846                 IF check_retro%FOUND THEN
2847                      --
2848 		     -- In Case of Retro Checking IF it is Base + Retro Case
2849 		     --
2850 		     OPEN retro_parent_check_flag(ln_run_assignment_action_id,
2851 					p_assignment_id,
2852 					ln_element_type_id) ;
2853 		     FETCH retro_parent_check_flag INTO lv_retro_parent_flag;
2854 		     CLOSE retro_parent_check_flag ;
2855                      IF lv_retro_parent_flag IS NULL THEN
2856 		        lv_retro_parent_flag := 'N';
2857 		     END IF;
2858 		     --
2859                      -- Archiving ONLY Retro Entries NOT Retrp Base
2860 		     --
2861                      Archive_retro_element( p_xfr_action_id               => p_xfr_action_id
2862                                            ,p_assignment_id               => p_assignment_id
2863                                            ,p_pymt_assignment_action_id   => p_curr_pymt_action_id
2864                                            ,p_pymt_eff_date               => p_curr_pymt_eff_date
2865                                            ,p_element_type_id             => ln_element_type_id
2866                                            ,p_primary_balance_id          => ln_primary_balance_id
2867                                            ,p_hours_balance_id            => ln_hours_balance_id
2868                                            ,p_processing_priority         => ln_processing_priority
2869                                            ,p_element_classification_name => lv_element_classification_name
2870                                            ,p_reporting_name              => lv_reporting_name
2871                                            ,p_tax_unit_id                 => p_tax_unit_id
2872                                            ,p_ytd_balcall_aaid            => p_ytd_balcall_aaid
2873                                            ,p_pymt_balcall_aaid           => p_pymt_balcall_aaid
2874                                            ,p_legislation_code            => p_legislation_code
2875                                            ,p_sepchk_flag                 => p_sepchk_flag
2876                                            ,p_sepchk_run_type_id          => p_sepchk_run_type_id
2877                                            ,p_action_type                 => p_action_type
2878                                            ,p_run_assignment_action_id    => ln_run_assignment_action_id
2879                                            ,p_multiple                    => ln_multiple
2880                                            ,p_rate                        => ln_final_rate
2881 					   ,p_retro_base                  => lv_retro_parent_flag);
2882                  END IF; -- check_retro%FOUND
2883 
2884                 CLOSE check_retro; -- Added
2885             ELSE
2886                 IF check_retro%ISOPEN THEN
2887                    CLOSE check_retro;
2888                 END IF;
2889                 IF get_element_entry_id%ISOPEN THEN
2890                     CLOSE get_element_entry_id;
2891                 END IF;
2892             END IF; -- get_element_entry_id%found
2893         /* NOT Needed
2894         END LOOP; -- For Each Run Assignment Action ID
2895         */
2896 
2897 	    IF get_run_action_id%ISOPEN THEN
2898              CLOSE get_run_action_id;
2899           END IF;
2900         END IF; -- Legislation US
2901 
2902         hr_utility.set_location(gv_package  || lv_procedure_name, 40);
2903         hr_utility.trace('Ele type id = '   || ln_element_type_id);
2904         hr_utility.trace('Primary Bal id = '|| ln_primary_balance_id);
2905         hr_utility.trace('Ele Class = '     || lv_element_classification_name);
2906 
2907          if lv_element_classification_name like '% Deductions' then
2908             ln_hours_balance_id := null;
2909          end if;
2910          ln_step := 15;
2911          ln_element_index := pay_ac_action_arch.emp_elements_tab.count;
2912          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_type_id
2913                   := ln_element_type_id;
2914          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_classfn
2915                   := lv_element_classification_name;
2916          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_primary_balance_id
2917                   := ln_primary_balance_id;
2918          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_processing_priority
2919                   := ln_processing_priority;
2920          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_reporting_name
2921                   := lv_reporting_name;
2922          pay_ac_action_arch.emp_elements_tab(ln_element_index).element_hours_balance_id
2923                   := ln_hours_balance_id;
2924          pay_ac_action_arch.emp_elements_tab(ln_element_index).jurisdiction_code
2925                   := '00-000-0000';
2926 
2927          hr_utility.set_location(gv_package  || lv_procedure_name, 50);
2928          ln_step := 20;
2929          IF ((lv_retro_flag = 'N' ) OR (lv_retro_parent_flag = 'Y')) THEN
2930              IF lv_original_date_earned = 'AAA' THEN
2931                 lv_original_date_earned := null;
2932              END IF;
2933          populate_elements(p_xfr_action_id             => p_xfr_action_id
2934                           ,p_pymt_assignment_action_id => p_curr_pymt_action_id
2935                           ,p_pymt_eff_date             => p_curr_pymt_eff_date
2936                           ,p_element_type_id           => ln_element_type_id
2937                           ,p_primary_balance_id        => ln_primary_balance_id
2938                           ,p_hours_balance_id          => ln_hours_balance_id
2939                           ,p_processing_priority       => ln_processing_priority
2940                           ,p_element_classification_name
2941                                                        => lv_element_classification_name
2942                           ,p_reporting_name            => lv_reporting_name
2943                           ,p_tax_unit_id               => p_tax_unit_id
2944                           ,p_pymt_balcall_aaid         => p_pymt_balcall_aaid
2945                           ,p_ytd_balcall_aaid          => p_ytd_balcall_aaid
2946                           ,p_legislation_code          => p_legislation_code
2947                           ,p_sepchk_flag               => p_sepchk_flag
2948                           ,p_sepchk_run_type_id        => p_sepchk_run_type_id
2949                           ,p_action_type               => p_action_type
2950                           ,p_original_date_earned      => lv_original_date_earned
2951                           ,p_effective_start_date      => lv_effective_start_date
2952                           ,p_effective_end_date        => lv_effective_end_date
2953                           ,p_category                  => lv_category
2954                           ,p_el_jurisdiction_code      => lv_jurisdiction_flag
2955                           ,p_final_rate                => ln_final_rate
2956                           ,p_ytd_flag                  => lv_retro_parent_flag
2957                           );
2958 
2959                           lv_original_date_earned := NULL;
2960                           lv_effective_start_date := NULL;
2961                           lv_effective_end_date := NULL;
2962                           lv_category           := NULL;
2963                           lv_jurisdiction_flag := NULL;
2964                           lv_original_date_paid:= NULL;
2965 
2966        END IF;
2967 
2968        lv_retro_flag := 'N' ;
2969        lv_retro_parent_flag := 'N';
2970        gv_ytd_amount := 0;
2971        gv_ytd_hour   := 0;
2972 
2973        end loop; -- End Loop of c_cur_action_elements OR c_cur_sp_action_elements
2974 
2975        if p_sepchk_flag = 'Y' then
2976          close c_cur_sp_action_elements;
2977          elsif p_sepchk_flag = 'N' then
2978          close c_cur_action_elements;
2979        end if;
2980        hr_utility.set_location(gv_package  || lv_procedure_name, 60);
2981        ln_step := 25;
2982 
2983   EXCEPTION
2984    when others then
2985       lv_error_message := 'Error at step ' || ln_step ||
2986                           ' in ' || gv_package || lv_procedure_name;
2987 
2988       hr_utility.trace(lv_error_message || '-' || sqlerrm);
2989 
2990       lv_error_message :=
2991          pay_emp_action_arch.set_error_message(lv_error_message);
2992 
2993       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
2994       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
2995       hr_utility.raise_error;
2996 
2997   END get_current_elements;
2998 
2999   /******************************************************************
3000    Name      : get_xfr_elements
3001    Purpose   : Check the elements archived in the previous record with
3002                the given assignment and if the element is not archived
3003                in this current run, get YTD for the element found.
3004    Arguments : p_xfr_action_id      => Current xfr action id
3005                p_last_xfr_action_id => Previous xfr action id retrieved
3006                                        from get_last_xfr_info procedure
3007                p_ytd_balcall_aaid   => aaid for YTD balance call.
3008                p_pymt_eff_date      => Current pymt eff date.
3009                p_legislation_code   => Legislation code.
3010                p_sepchk_flag        => Separate Check flag.
3011                p_assignment_id      => Current assignment id that is being
3012                                        processed.
3013    Notes     : If multi assignment is enabled and is a sepchk, then check
3014                the last xfr run for the given person not assignment.
3015   ******************************************************************/
3016   PROCEDURE get_xfr_elements(p_xfr_action_id       in number
3017                             ,p_last_xfr_action_id  in number
3018                             ,p_ytd_balcall_aaid    in number
3019                             ,p_pymt_eff_date       in date
3020                             ,p_legislation_code    in varchar2
3021                             ,p_sepchk_flag         in varchar2
3022                             ,p_assignment_id       in number
3023                             )
3024 
3025   IS
3026     cursor c_last_xfr_elements(cp_xfr_action_id    in number
3027                               ,cp_legislation_code in varchar2) is
3028       select assignment_id, action_information_category,
3029              action_information1  classification_name,
3030              action_information2  element_type_id,
3031              decode(cp_legislation_code,
3032                    'CA', jurisdiction_code,
3033                    'US', decode(jurisdiction_code, NULL, NULL,
3034                          decode(to_char(length(replace(jurisdiction_code,'-')))
3035                                     ,'7', jurisdiction_code,
3036                                 rpad(nvl(substr(rtrim(ltrim(jurisdiction_code))
3037                                      ,1,2),'0'),2,'0') || '-'||
3038                                 rpad(nvl(substr(rtrim(ltrim(jurisdiction_code))
3039                                      ,4,3),'0'),3,'0') ||'-' ||
3040                                 rpad(nvl(substr(rtrim(ltrim(jurisdiction_code))
3041                                      ,8,4),'0'),4,'0')))) jurisdiction_code,
3042              action_information6  primary_balance_id,
3043              action_information7  processing_priority,
3044              action_information9  ytd_amount,
3045              action_information10 reporting_name,
3046              effective_date       effective_date,
3047              action_information12 ytd_hours,
3048 						 action_information24 display_name
3049         from pay_action_information
3050        where action_information_category in ('AC EARNINGS', 'AC DEDUCTIONS')
3051          and action_context_id = cp_xfr_action_id;
3052 
3053 
3054     cursor c_get_balance (cp_balance_name  in varchar2
3055                          ,cp_legislation_code in varchar2) is
3056       select balance_type_id
3057         from pay_balance_types
3058        where legislation_code = cp_legislation_code
3059          and balance_name = cp_balance_name;
3060 
3061     ln_element_type_id             NUMBER;
3062     lv_element_classfication_name  VARCHAR2(80);
3063     lv_jurisdiction_code           VARCHAR2(80);
3064     ln_primary_balance_id          NUMBER;
3065     ln_processing_priority         NUMBER;
3066     lv_reporting_name              VARCHAR2(150);
3067     ld_effective_date              DATE;
3068     ln_hours_balance_id            NUMBER;
3069 
3070     ln_t_primary_balance_id        NUMBER;
3071     lv_t_reporting_name            VARCHAR2(150);
3072 
3073     ln_ele_primary_balance_id      NUMBER;
3074     ln_ele_hours_balance_id        NUMBER;
3075 
3076     ln_ytd_defined_balance_id NUMBER;
3077     ln_ytd_hours_balance_id   NUMBER;
3078     ln_payments_amount        NUMBER;
3079     ln_ytd_hours              NUMBER;
3080     ln_ytd_amount             NUMBER;
3081 
3082     ln_index                  NUMBER := 0;
3083     lv_element_archived       VARCHAR2(1) := 'N';
3084     lv_action_info_category   VARCHAR2(30) := 'AC DEDUCTIONS';
3085     lv_procedure_name         VARCHAR2(100) := '.get_xfr_elements';
3086     lv_error_message          VARCHAR2(200);
3087     ln_step                   NUMBER;
3088     ln_assignment_id          NUMBER;
3089 
3090 lv_display_name 		VARCHAR2(100);
3091 
3092   BEGIN
3093      ln_step:= 1;
3094      hr_utility.set_location(gv_package || lv_procedure_name, 10);
3095      hr_utility.trace('p_xfr_action_id = '||p_xfr_action_id);
3096      hr_utility.trace('p_last_xfr_action_id = '|| p_last_xfr_action_id );
3097      hr_utility.trace('p_assignment_id = '|| p_assignment_id );
3098      hr_utility.trace('gv_multi_payroll_pymt = '||
3099                           pay_emp_action_arch.gv_multi_payroll_pymt);
3100      hr_utility.trace('p_sepchk_flag = '||p_sepchk_flag);
3101 
3102      open c_last_xfr_elements(p_last_xfr_action_id, p_legislation_code);
3103      loop
3104         fetch c_last_xfr_elements into ln_assignment_id,
3105                                        lv_action_info_category,
3106                                        lv_element_classfication_name,
3107                                        ln_element_type_id,
3108                                        lv_jurisdiction_code,
3109                                        ln_primary_balance_id,
3110                                        ln_processing_priority,
3111                                        ln_ytd_amount,
3112                                        lv_reporting_name,
3113                                        ld_effective_date,
3114                                        ln_ytd_hours,
3115                                        lv_display_name;
3116 
3117         hr_utility.set_location(gv_package || lv_procedure_name, 20);
3118         if c_last_xfr_elements%notfound then
3119            hr_utility.set_location(gv_package || lv_procedure_name, 30);
3120            exit;
3121         end if;
3122 
3123         ln_step := 5;
3124         if ln_primary_balance_id is null then
3125            if lv_reporting_name = 'SDI Withheld' then
3126               lv_t_reporting_name := 'SDI EE Withheld';
3127            elsif lv_reporting_name = 'SUI Withheld' then
3128               lv_t_reporting_name := 'SUI EE Withheld';
3129            elsif lv_reporting_name = 'SUI1 Withheld' then
3130               lv_t_reporting_name := 'SUI1 EE Withheld';
3131            elsif lv_reporting_name = 'SDI1 Withheld' then
3132               lv_t_reporting_name := 'SDI1 EE Withheld';
3133            else
3134               lv_t_reporting_name := lv_reporting_name;
3135            end if;
3136 
3137            open c_get_balance(lv_t_reporting_name, p_legislation_code);
3138            fetch c_get_balance into ln_t_primary_balance_id;
3139            close c_get_balance;
3140            ln_primary_balance_id := ln_t_primary_balance_id;
3141         end if;
3142 
3143         hr_utility.trace('Element type id =' || ln_element_type_id);
3144         hr_utility.trace('Reporting Name  =' || lv_reporting_name);
3145         hr_utility.trace('JD Code         =' || lv_jurisdiction_code);
3146         hr_utility.trace('Ele Class       =' || lv_element_classfication_name);
3147 
3148         ln_step := 6;
3149 
3150         hr_utility.trace('p_assignment_id (current) = '||p_assignment_id);
3151         hr_utility.trace('ln_assignment_id (prev) = '||ln_assignment_id);
3152 
3153         if pay_emp_action_arch.gv_multi_payroll_pymt = 'Y' and
3154            p_sepchk_flag = 'Y' and
3155            ln_assignment_id <> p_assignment_id then
3156 
3157            hr_utility.trace('action_info_category = ' ||lv_action_info_category);
3158            hr_utility.trace('ln_element_type_id = '   ||ln_element_type_id);
3159            hr_utility.trace('ln_primary_balance_id = '||ln_primary_balance_id);
3160            hr_utility.trace('ln_ytd_amount = '        ||ln_ytd_amount);
3161 
3162            ln_index := pay_ac_action_arch.lrr_act_tab.count;
3163 
3164            pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
3165                      := lv_action_info_category;
3166            pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
3167                      := lv_jurisdiction_code;
3168            pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
3169                      := p_xfr_action_id;
3170            pay_ac_action_arch.lrr_act_tab(ln_index).assignment_id
3171                      := ln_assignment_id;
3172            pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
3173                      := lv_element_classfication_name;
3174            pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
3175                      := ln_element_type_id;
3176            pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
3177                      := ln_primary_balance_id;
3178            pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
3179                      := ln_processing_priority;
3180            pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
3181                      := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
3182            pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
3183                      := lv_reporting_name;
3184            if lv_action_info_category = 'AC EARNINGS' then
3185               pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
3186                        := fnd_number.number_to_canonical(ln_ytd_hours);
3187            end if;
3188 
3189            -- Added for Bug# 7348767, Bug# 7348838
3190            if lv_action_info_category = 'AC DEDUCTIONS' THEN
3191 	   --Bug 8688998
3192               --pay_ac_action_arch.lrr_act_tab(ln_index).act_info24 := lv_reporting_name;
3193               pay_ac_action_arch.lrr_act_tab(ln_index).act_info24 := lv_display_name;
3194            end if;
3195         end if;
3196 
3197         if ln_assignment_id = p_assignment_id then
3198            if pay_ac_action_arch.emp_elements_tab.count > 0 then
3199               for i in pay_ac_action_arch.emp_elements_tab.first..
3200                        pay_ac_action_arch.emp_elements_tab.last LOOP
3201                   if pay_ac_action_arch.emp_elements_tab(i).element_primary_balance_id
3202                           = ln_primary_balance_id and
3203                      pay_ac_action_arch.emp_elements_tab(i).jurisdiction_code
3204                           = lv_jurisdiction_code then
3205                      lv_element_archived := 'Y';
3206                      exit;
3207                   end if;
3208               end loop;
3209            end if;
3210 
3211            ln_step := 10;
3212            if lv_element_archived = 'N' then
3213               hr_utility.set_location(gv_package || lv_procedure_name, 50);
3214               /**************************************************************
3215               ** Bug 3567107: Check to see if the element is still effective
3216               **              the primary balance is there before archiving
3217               **              the value when picking elements which have
3218               **              already been archived.
3219               ** Note: This will take care of the issue when clients migrate
3220               **       to a new element and only want one entry to be archived
3221               **       and show up in checks, payslip and depsoit advice
3222               **************************************************************/
3223               if lv_element_classfication_name <> 'Tax Deductions' then
3224                  open c_element_info(ln_element_type_id, ld_effective_date);
3225                  fetch c_element_info into ln_ele_primary_balance_id,
3226                                            ln_ele_hours_balance_id;
3227                  if c_element_info%notfound or
3228                     ln_ele_primary_balance_id is null then
3229                     lv_element_archived := 'Y';
3230                  end if;
3231 
3232                  close c_element_info;
3233 
3234                  if lv_element_classfication_name not like '% Deductions' then
3235                     ln_hours_balance_id := ln_ele_hours_balance_id;
3236                  end if;
3237               end if;
3238            end if;
3239 
3240            if lv_element_archived = 'N' then
3241               /* populate the extra element table */
3242               ln_index := pay_ac_action_arch.emp_elements_tab.count;
3243               pay_ac_action_arch.emp_elements_tab(ln_index).element_type_id
3244                    := ln_element_type_id;
3245               pay_ac_action_arch.emp_elements_tab(ln_index).element_classfn
3246                    := lv_element_classfication_name;
3247               pay_ac_action_arch.emp_elements_tab(ln_index).jurisdiction_code
3248                    := lv_jurisdiction_code;
3249               pay_ac_action_arch.emp_elements_tab(ln_index).element_primary_balance_id
3250                    := ln_primary_balance_id;
3251               pay_ac_action_arch.emp_elements_tab(ln_index).element_processing_priority
3252                    := ln_processing_priority;
3253               pay_ac_action_arch.emp_elements_tab(ln_index).element_reporting_name
3254                    := lv_reporting_name;
3255               pay_ac_action_arch.emp_elements_tab(ln_index).element_hours_balance_id
3256                    := ln_hours_balance_id;
3257 
3258               if lv_jurisdiction_code <> '00-000-0000' then
3259                  pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
3260                  gv_ytd_balance_dimension := gv_dim_asg_jd_gre_ytd;
3261               else
3262                  pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
3263                  if gv_reporting_level = 'TAXGRP' then
3264                     gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
3265                  else
3266                     gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
3267                  end if;
3268               end if;
3269 
3270               ln_step := 15;
3271               ln_ytd_defined_balance_id
3272                   := pay_emp_action_arch.get_defined_balance_id
3273                                           (ln_primary_balance_id,
3274                                            gv_ytd_balance_dimension,
3275                                            p_legislation_code);
3276               hr_utility.set_location(gv_package || lv_procedure_name, 60);
3277               if ln_ytd_defined_balance_id is not null then
3278                  ln_ytd_amount := nvl(pay_balance_pkg.get_value(
3279                                         ln_ytd_defined_balance_id,
3280                                         p_ytd_balcall_aaid),0);
3281               end if;
3282               hr_utility.set_location(gv_package || lv_procedure_name, 70);
3283               if ln_hours_balance_id is not null then
3284                  ln_ytd_hours_balance_id
3285                     := pay_emp_action_arch.get_defined_balance_id
3286                                            (ln_hours_balance_id,
3287                                             gv_ytd_balance_dimension,
3288                                             p_legislation_code);
3289                  hr_utility.set_location(gv_package || lv_procedure_name, 80);
3290                  if ln_ytd_hours_balance_id is not null then
3291                     ln_ytd_hours := nvl(pay_balance_pkg.get_value(
3292                                          ln_ytd_hours_balance_id,
3293                                          p_ytd_balcall_aaid),0);
3294                     hr_utility.set_location(gv_package || lv_procedure_name, 90);
3295                  end if;
3296               end if;
3297 
3298               hr_utility.trace('ln_ytd_amount = '||ln_ytd_amount);
3299               hr_utility.trace('ln_ytd_hours = '||ln_ytd_hours);
3300 
3301               if (( nvl(ln_ytd_amount, 0) + nvl(ln_payments_amount, 0) <> 0 ) or
3302                   ( pay_ac_action_arch.gv_multi_gre_payment = 'N' ) ) then
3303 
3304                  hr_utility.set_location(gv_package || lv_procedure_name, 100);
3305                  ln_index := pay_ac_action_arch.lrr_act_tab.count;
3306                  hr_utility.trace('ln_index = ' || ln_index);
3307                  ln_step := 20;
3308                  if lv_element_classfication_name in ('Earnings',
3309                                                       'Alien/Expat Earnings',
3310                                                       'Supplemental Earnings',
3311                                                       'Taxable Benefits',
3312                                                       'Imputed Earnings',
3313                                                       'Non-payroll Payments') then
3314                     lv_action_info_category := 'AC EARNINGS';
3315                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
3316                          := fnd_number.number_to_canonical(ln_ytd_hours);
3317                  end if;
3318 
3319                  pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
3320                          := lv_action_info_category;
3321                  pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
3322                          := lv_jurisdiction_code;
3323                  pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
3324                          := p_xfr_action_id;
3325                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
3326                          := lv_element_classfication_name;
3327                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
3328                          := ln_element_type_id;
3329                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
3330                          := ln_primary_balance_id;
3331                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
3332                          := ln_processing_priority;
3333                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
3334                          := fnd_number.number_to_canonical(nvl(ln_payments_amount,0));
3335                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
3336                          := fnd_number.number_to_canonical(ln_ytd_amount);
3337                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
3338                          := lv_reporting_name;
3339                  -- Added for Bug# 7348767, Bug# 7348838
3340                  if lv_action_info_category = 'AC DEDUCTIONS' THEN
3341 --Bug 8688998
3342 --              pay_ac_action_arch.lrr_act_tab(ln_index).act_info24 := lv_reporting_name;
3343                     pay_ac_action_arch.lrr_act_tab(ln_index).act_info24 := lv_display_name;
3344                  end if;
3345 
3346               end if;
3347            end if;
3348 
3349            lv_element_archived := 'N';
3350            lv_action_info_category := 'AC DEDUCTIONS';
3351            lv_element_classfication_name := null;
3352            ln_element_type_id      := null;
3353            lv_jurisdiction_code    := null;
3354            ln_primary_balance_id   := null;
3355            ln_processing_priority  := null;
3356            lv_reporting_name       := null;
3357            ln_hours_balance_id     := null;
3358            ln_ytd_amount           := null;
3359            ln_ytd_hours            := null;
3360 
3361         end if;
3362      end loop;
3363      close c_last_xfr_elements;
3364 
3365      hr_utility.set_location(gv_package || lv_procedure_name, 50);
3366      ln_step := 25;
3367 
3368 
3369 
3370   EXCEPTION
3371    when others then
3372       lv_error_message := 'Error at step ' || ln_step ||
3373                           ' in ' || gv_package || lv_procedure_name;
3374 
3375       hr_utility.trace(lv_error_message || '-' || sqlerrm);
3376 
3377       lv_error_message :=
3378          pay_emp_action_arch.set_error_message(lv_error_message);
3379 
3380       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
3381       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
3382       hr_utility.raise_error;
3383 
3384   END get_xfr_elements;
3385 
3386 
3387 
3388   /******************************************************************
3389    Name      : get_missing_xfr_info
3390    Purpose   : The procedure gets the elements which have been
3391                processed for a given Payment Action. This procedure
3392                is only called if the archiver has not been run for
3393                all pre-payment actions.
3394    Arguments :
3395    Notes     :
3396   ******************************************************************/
3397   PROCEDURE get_missing_xfr_info(p_xfr_action_id        in number
3398                                 ,p_tax_unit_id          in number
3399                                 ,p_assignment_id        in number
3400                                 ,p_last_pymt_action_id  in number
3401                                 ,p_last_pymt_eff_date   in date
3402                                 ,p_last_xfr_eff_date    in date
3403                                 ,p_ytd_balcall_aaid     in number
3404                                 ,p_pymt_eff_date        in date
3405                                 ,p_legislation_code     in varchar2
3406                                 )
3407 
3408    IS
3409 
3410      cursor c_prev_elements(cp_assignment_id      in number
3411                            ,cp_pymt_eff_date in date
3412                            ,cp_last_xfr_eff_date  in date) is
3413        SELECT /*+ ORDERED  use_nl(PAA,PPA,PPF) */
3414        DISTINCT
3415              pec.classification_name,
3416              pet.processing_priority,
3417              decode(pec.classification_name,
3418                          'Tax Deductions',
3419                          nvl(petl.reporting_name, petl.element_name) || ' Withheld',
3420                          nvl(petl.reporting_name, petl.element_name)) reporting_name,
3421                          decode(pec.classification_name,
3422                                      'Tax Deductions', null,
3423                                      prr.element_type_id) element_type_id,
3424                          nvl(decode(pec.classification_name,
3425                                      'Tax Deductions', prr.jurisdiction_code), '00-000-0000'),
3426              pet.element_information10,
3427              pet.element_information12
3428          from  PAY_ASSIGNMENT_ACTIONS             PAA,
3429                   PAY_PAYROLL_ACTIONS                   PPA,
3430                   PAY_PAYROLLS_F                               PPF,
3431                   PAY_RUN_RESULTS                             PRR,
3432                   PAY_ELEMENT_TYPES_F                    PET ,
3433                   PAY_ELEMENT_CLASSIFICATIONS   PEC,
3434                   PAY_ELEMENT_TYPES_F_TL             PETL
3435             /*changing the order for bug 5549032
3436               pay_run_results prr,
3437               pay_element_types_f pet ,
3438               pay_element_classifications pec,
3439               pay_assignment_actions paa,
3440               pay_payroll_actions ppa,
3441               pay_element_types_f_tl petl,
3442               pay_all_payrolls_f ppf */ -- Bug 3370112
3443         where ppa.action_type in ('R', 'Q', 'B')
3444             and ppa.effective_date > cp_last_xfr_eff_date
3445             and ppa.effective_date <= cp_pymt_eff_date
3446             and ppa.payroll_id = ppf.payroll_id
3447             and ppf.payroll_id >= 0
3448             and ppa.effective_date between ppf.effective_start_date
3449                                                       and ppf.effective_end_date
3450             and paa.payroll_action_id         = ppa.payroll_action_id
3451             and paa.assignment_id             = cp_assignment_id
3452             and paa.assignment_action_id  = prr.assignment_action_id
3453             and pet.element_type_id          = prr.element_type_id
3454             and pet.element_information10 is not null
3455             and ppa.effective_date   between pet.effective_start_date
3456                                                         and pet.effective_end_date
3457             and petl.element_type_id          = pet.element_type_id
3458             and petl.language                     = gv_person_lang
3459             and pec.classification_id           = pet.classification_id
3460             and pec.classification_name in ('Earnings',
3461                                                            'Alien/Expat Earnings',
3462                                                            'Supplemental Earnings',
3463                                                            'Imputed Earnings',
3464                                                            'Taxable Benefits',
3465                                                            'Pre-Tax Deductions',
3466                                                            'Involuntary Deductions',
3467                                                            'Voluntary Deductions',
3468                                                            'Non-payroll Payments',
3469                                                            'Tax Deductions'
3470                                                           )
3471           and pet.element_name not like '%Calculator'
3472           and pet.element_name not like '%Special Inputs'
3473           and pet.element_name not like '%Special Features'
3474           and pet.element_name not like '%Special Features 2'
3475           and pet.element_name not like '%Verifier'
3476           and pet.element_name not like '%Priority'
3477        order by 1, 3, 4;
3478 
3479     lv_element_classfication_name   VARCHAR2(80);
3480     ln_primary_balance_id           NUMBER;
3481     ln_processing_priority          NUMBER;
3482     lv_reporting_name               VARCHAR2(80);
3483     ln_element_type_id              NUMBER;
3484     lv_jurisdiction_code            VARCHAR2(80);
3485     ln_hours_balance_id             NUMBER;
3486 
3487     ln_ytd_hours_balance_id         NUMBER;
3488     ln_ytd_defined_balance_id       NUMBER;
3489     ln_payments_amount              NUMBER;
3490     ln_ytd_hours                    NUMBER;
3491     ln_ytd_amount                   NUMBER(17,2);
3492     lv_action_info_category         VARCHAR2(30) := 'AC DEDUCTIONS';
3493 
3494     ln_index                        NUMBER ;
3495     lv_element_archived             VARCHAR2(1) := 'N';
3496     lv_procedure_name               VARCHAR2(100) := '.get_missing_xfr_info';
3497     lv_error_message                VARCHAR2(200);
3498     ln_step                         NUMBER;
3499 
3500   BEGIN
3501      ln_step := 1;
3502      hr_utility.set_location(gv_package || lv_procedure_name, 10);
3503      hr_utility.trace('p_xfr_action_id       = '|| p_xfr_action_id);
3504      hr_utility.trace('p_tax_unit_id         = '|| p_tax_unit_id);
3505      hr_utility.trace('p_last_pymt_action_id = '|| p_last_pymt_action_id );
3506      hr_utility.trace('p_last_pymt_eff_date  = '|| p_last_pymt_eff_date);
3507      hr_utility.trace('p_last_xfr_eff_date   = '|| p_last_xfr_eff_date);
3508      hr_utility.trace('p_pymt_eff_date       = '|| p_pymt_eff_date);
3509 
3510      open c_prev_elements(p_assignment_id,
3511                           p_pymt_eff_date,
3512                           p_last_xfr_eff_date);
3513      loop
3514         fetch c_prev_elements into lv_element_classfication_name,
3515                                    ln_processing_priority,
3516                                    lv_reporting_name,
3517                                    ln_element_type_id,
3518                                    lv_jurisdiction_code,
3519                                    ln_primary_balance_id,
3520                                    ln_hours_balance_id;
3521         if c_prev_elements%notfound then
3522            hr_utility.set_location(gv_package || lv_procedure_name, 20);
3523            exit;
3524         end if;
3525         hr_utility.set_location(gv_package || lv_procedure_name, 30);
3526 
3527         if lv_element_classfication_name like '% Deductions' then
3528            ln_hours_balance_id := null;
3529         end if;
3530 
3531         ln_step := 5;
3532         if pay_ac_action_arch.emp_elements_tab.count > 0 then
3533            for i in pay_ac_action_arch.emp_elements_tab.first..
3534                     pay_ac_action_arch.emp_elements_tab.last LOOP
3535                if pay_ac_action_arch.emp_elements_tab(i).element_primary_balance_id
3536                        = ln_primary_balance_id and
3537                   pay_ac_action_arch.emp_elements_tab(i).jurisdiction_code
3538                         = lv_jurisdiction_code then
3539                   lv_element_archived := 'Y';
3540                   exit;
3541                end if;
3542            end loop;
3543         end if;
3544 
3545         if lv_element_archived = 'N' then
3546            /* populate the extra element table */
3547            ln_step := 10;
3548            ln_index := pay_ac_action_arch.emp_elements_tab.count;
3549            pay_ac_action_arch.emp_elements_tab(ln_index).element_type_id
3550                 := ln_element_type_id;
3551            pay_ac_action_arch.emp_elements_tab(ln_index).element_classfn
3552                 := lv_element_classfication_name;
3553            pay_ac_action_arch.emp_elements_tab(ln_index).element_primary_balance_id
3554                 := ln_primary_balance_id;
3555            pay_ac_action_arch.emp_elements_tab(ln_index).element_processing_priority
3556                 := ln_processing_priority;
3557            pay_ac_action_arch.emp_elements_tab(ln_index).element_reporting_name
3558                 := lv_reporting_name;
3559            pay_ac_action_arch.emp_elements_tab(ln_index).element_hours_balance_id
3560                 := ln_hours_balance_id;
3561            pay_ac_action_arch.emp_elements_tab(ln_index).jurisdiction_code
3562                 := lv_jurisdiction_code;
3563 
3564            if lv_jurisdiction_code <> '00-000-0000' then
3565               pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
3566               gv_ytd_balance_dimension := gv_dim_asg_jd_gre_ytd;
3567            else
3568               pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
3569               if gv_reporting_level = 'TAXGRP' then
3570                  gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
3571               else
3572                  gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
3573               end if;
3574            end if;
3575 
3576            ln_step := 15;
3577            ln_ytd_defined_balance_id :=
3578                   pay_emp_action_arch.get_defined_balance_id
3579                                            (ln_primary_balance_id,
3580                                             gv_ytd_balance_dimension,
3581                                             p_legislation_code);
3582            hr_utility.set_location(gv_package || lv_procedure_name, 60);
3583            if ln_ytd_defined_balance_id is not null then
3584               ln_ytd_amount := nvl(pay_balance_pkg.get_value(
3585                                    ln_ytd_defined_balance_id,
3586                                    p_ytd_balcall_aaid),0);
3587               hr_utility.set_location(gv_package || lv_procedure_name, 70);
3588            end if;
3589            if ln_hours_balance_id is not null then
3590               ln_ytd_hours_balance_id :=
3591                      pay_emp_action_arch.get_defined_balance_id
3592                                              (ln_hours_balance_id,
3593                                               gv_ytd_balance_dimension,
3594                                               p_legislation_code);
3595               hr_utility.set_location(gv_package || lv_procedure_name, 80);
3596               if ln_ytd_hours_balance_id is not null then
3597                  ln_ytd_hours := nvl(pay_balance_pkg.get_value(
3598                                          ln_ytd_hours_balance_id,
3599                                          p_ytd_balcall_aaid),0);
3600                  hr_utility.set_location(gv_package || lv_procedure_name, 90);
3601               end if;
3602            end if;
3603 
3604            hr_utility.set_location(gv_package || lv_procedure_name, 100);
3605            if nvl(ln_ytd_amount, 0) <> 0 or nvl(ln_payments_amount, 0) <> 0 then
3606               ln_index := pay_ac_action_arch.lrr_act_tab.count;
3607               hr_utility.trace('ln_index = ' || ln_index);
3608               if lv_element_classfication_name in ('Earnings',
3609                                                    'Alien/Expat Earnings',
3610                                                    'Supplemental Earnings',
3611                                                    'Taxable Benefits',
3612                                                    'Imputed Earnings',
3613                                                    'Non-payroll Payments') then
3614                  lv_action_info_category := 'AC EARNINGS';
3615                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
3616                       := fnd_number.number_to_canonical(ln_ytd_hours);  /* Bug 3311866*/
3617               end if;
3618 
3619               ln_step := 20;
3620               pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
3621                       := lv_action_info_category;
3622               pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
3623                       := lv_jurisdiction_code;
3624               pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
3625                       := p_xfr_action_id ;
3626               pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
3627                       := lv_element_classfication_name;
3628               pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
3629                       := ln_element_type_id;
3630               pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
3631                       := ln_primary_balance_id;
3632               pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
3633                       := ln_processing_priority;
3634               pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
3635                       := fnd_number.number_to_canonical(nvl(ln_payments_amount,0));
3636               pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
3637                       := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
3638               pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
3639                       := lv_reporting_name;
3640               -- Added for Bug# 7348767, Bug# 7348838
3641               if lv_action_info_category = 'AC DEDUCTIONS' THEN
3642                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info24 := lv_reporting_name;
3643               end if;
3644            end if;
3645         end if;
3646         lv_element_archived := 'N';
3647         lv_action_info_category := 'AC DEDUCTIONS';
3648         lv_element_classfication_name := null;
3649         ln_element_type_id      := null;
3650         lv_jurisdiction_code    := null;
3651         ln_primary_balance_id   := null;
3652         ln_processing_priority  := null;
3653         lv_reporting_name       := null;
3654         ln_hours_balance_id     := null;
3655      end loop;
3656      close c_prev_elements;
3657      hr_utility.set_location(gv_package || lv_procedure_name, 150);
3658 
3659      ln_step := 30;
3660 
3661 
3662   EXCEPTION
3663     when others then
3664 
3665       lv_error_message := 'Error at step ' || ln_step ||
3666                           ' in ' || gv_package || lv_procedure_name;
3667 
3668       hr_utility.trace(lv_error_message || '-' || sqlerrm);
3669 
3670       lv_error_message :=
3671          pay_emp_action_arch.set_error_message(lv_error_message);
3672 
3673       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
3674       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
3675       hr_utility.raise_error;
3676 
3677   END get_missing_xfr_info;
3678 
3679 
3680   FUNCTION check_run_balance_status(p_assignment_id      in number
3681                                    ,p_curr_pymt_eff_date in date
3682                                    ,p_legislation_code   in varchar2
3683                                    )
3684   RETURN VARCHAR2
3685   IS
3686 
3687    lv_business_grp_id             NUMBER;
3688    lv_rb_status              VARCHAR2(1);
3689 
3690    cursor c_business_grp_id is
3691       select distinct business_group_id
3692         from per_all_assignments_f
3693        where assignment_id = p_assignment_id;
3694 
3695   BEGIN
3696 
3697      -- Populating the PL/SQL table run_bal_stat_tab with the validity status
3698      -- of various attributes. If already populated, we use that to check the
3699      -- validity
3700      if run_bal_stat.COUNT > 0 then
3701         for i in run_bal_stat.first .. run_bal_stat.last loop
3702             if run_bal_stat(i).valid_status = 'N' then
3703                lv_rb_status := 'N';
3704                exit;
3705             end if;
3706         end loop;
3707      else
3708         open c_business_grp_id;
3709         fetch c_business_grp_id into lv_business_grp_id;
3710         close c_business_grp_id;
3711         if p_legislation_code = 'US' then
3712            run_bal_stat(1).attribute_name := 'PAY_US_EARNINGS_AMTS';
3713            run_bal_stat(2).attribute_name := 'PAY_US_PRE_TAX_DEDUCTIONS';
3714            run_bal_stat(3).attribute_name := 'PAY_US_AFTER_TAX_DEDUCTIONS';
3715            run_bal_stat(4).attribute_name := 'PAY_US_TAX_DEDUCTIONS';
3716         else
3717            run_bal_stat(1).attribute_name := 'PAY_CA_EARNINGS';
3718            run_bal_stat(2).attribute_name := 'PAY_CA_DEDUCTIONS';
3719         end if;
3720 
3721         for i in run_bal_stat.first .. run_bal_stat.last loop
3722             run_bal_stat(i).valid_status := pay_us_payroll_utils.check_balance_status(
3723                                                      p_curr_pymt_eff_date,
3724                                                      lv_business_grp_id,
3725                                                      run_bal_stat(i).attribute_name,
3726                                                      p_legislation_code);
3727             if (lv_rb_status is NULL and run_bal_stat(i).valid_status = 'N') then
3728                lv_rb_status := 'N';
3729             end if;
3730          end loop;
3731       end if;
3732 
3733       if lv_rb_status is NULL then
3734          lv_rb_status := 'Y';
3735       end if;
3736 
3737       return (lv_rb_status);
3738 
3739   END check_run_balance_status;
3740 
3741 
3742   PROCEDURE get_prev_ytd_elements(p_assignment_id       in number
3743                                  ,p_xfr_action_id       in number
3744                                  ,p_curr_pymt_action_id in number
3745                                  ,p_curr_pymt_eff_date  in date
3746                                  ,p_start_eff_date      in date
3747                                  ,p_tax_unit_id         in number
3748                                  ,p_ytd_balcall_aaid    in number
3749                                  ,p_sepchk_flag         in varchar2
3750                                  ,p_sepchk_run_type_id  in number
3751                                  ,p_legislation_code    in varchar2
3752                                  ,p_action_type1        in varchar2
3753                                  ,p_action_type2        in varchar2
3754                                  ,p_action_type3        in varchar2
3755                                  )
3756   IS
3757 
3758     lv_element_classification_name VARCHAR2(80);
3759     ln_processing_priority         NUMBER;
3760     lv_reporting_name              VARCHAR2(80);
3761     ln_element_type_id             NUMBER;
3762     lv_jurisdiction_code           VARCHAR2(80);
3763     ln_primary_balance_id          NUMBER;
3764     ln_hours_balance_id            NUMBER;
3765 
3766     ln_element_index               NUMBER ;
3767     lv_element_archived            VARCHAR2(1);
3768     lv_procedure_name              VARCHAR2(100);
3769     lv_error_message               VARCHAR2(200);
3770     ln_step                        NUMBER;
3771     lv_run_bal_status              VARCHAR2(1);
3772 
3773   BEGIN
3774     ln_step := 1;
3775     lv_run_bal_status := NULL;
3776     lv_element_archived := 'N';
3777     lv_procedure_name := '.get_prev_ytd_elements';
3778 
3779     hr_utility.set_location(gv_package || lv_procedure_name, 10);
3780     hr_utility.trace('p_xfr_action_id' || p_xfr_action_id);
3781     hr_utility.trace('p_assignment_id '|| p_assignment_id);
3782     hr_utility.trace('p_tax_unit_id '  || p_tax_unit_id);
3783     hr_utility.trace('p_sepchk_flag '  || p_sepchk_flag);
3784     hr_utility.trace('p_curr_pymt_eff_date '|| p_curr_pymt_eff_date);
3785     hr_utility.trace('p_start_eff_date     '|| p_start_eff_date);
3786     hr_utility.trace('p_legislation_code '  || p_legislation_code);
3787     hr_utility.trace('p_sepchk_run_type_id '|| p_sepchk_run_type_id);
3788     hr_utility.trace('p_ytd_balcall_aaid '  || p_ytd_balcall_aaid);
3789     hr_utility.trace('p_curr_pymt_action_id  '
3790                      ||to_char(p_curr_pymt_action_id ));
3791 
3792 
3793     lv_run_bal_status := check_run_balance_status(
3794                               p_assignment_id      => p_assignment_id
3795                              ,p_curr_pymt_eff_date => p_curr_pymt_eff_date
3796                              ,p_legislation_code   => p_legislation_code);
3797 
3798     if lv_run_bal_status = 'Y' then
3799        open c_prev_ytd_action_elem_rbr(p_assignment_id,
3800                                        p_curr_pymt_eff_date,
3801                                        p_start_eff_date);
3802     else
3803        open c_prev_ytd_action_elements(p_assignment_id
3804                                       ,p_curr_pymt_eff_date
3805                                       ,p_start_eff_date
3806                                       ,p_action_type1
3807                                       ,p_action_type2
3808                                       ,p_action_type3);
3809     end if;
3810 
3811     loop
3812        if lv_run_bal_status = 'Y' then
3813           fetch c_prev_ytd_action_elem_rbr into
3814                                lv_element_classification_name,
3815                                ln_processing_priority,
3816                                lv_reporting_name,
3817                                --lv_element_name,
3818                                ln_element_type_id,
3819                                lv_jurisdiction_code,
3820                                ln_primary_balance_id,
3821                                ln_hours_balance_id;
3822           if c_prev_ytd_action_elem_rbr%notfound then
3823              hr_utility.set_location(gv_package || lv_procedure_name, 40);
3824              exit;
3825           end if;
3826        else
3827           fetch c_prev_ytd_action_elements into
3828                                lv_element_classification_name,
3829                                ln_processing_priority,
3830                                lv_reporting_name,
3831                                --lv_element_name,
3832                                ln_element_type_id,
3833                                lv_jurisdiction_code,
3834                                ln_primary_balance_id,
3835                                ln_hours_balance_id;
3836           if c_prev_ytd_action_elements%notfound then
3837              hr_utility.set_location(gv_package || lv_procedure_name, 45);
3838              exit;
3839           end if;
3840        end if;
3841 
3842        hr_utility.set_location(gv_package  || lv_procedure_name, 50);
3843        hr_utility.trace('Ele type id = '   || ln_element_type_id);
3844        hr_utility.trace('Reporting Name = '|| lv_reporting_name);
3845        hr_utility.trace('Primary Bal id = '|| ln_primary_balance_id);
3846        hr_utility.trace('JD Code = '       || lv_jurisdiction_code);
3847        hr_utility.trace('Ele Class = '     || lv_element_classification_name);
3848 
3849        if lv_element_classification_name like '% Deductions' then
3850           ln_step := 10;
3851           ln_hours_balance_id := null;
3852        end if;
3853 
3854        /**********************************************************
3855        ** check whether the element has already been archived
3856        ** when archiving the Current Action. If it has been archived
3857        ** skip the element
3858        **********************************************************/
3859        ln_step := 15;
3860        if pay_ac_action_arch.emp_elements_tab.count > 0 then
3861           for i in pay_ac_action_arch.emp_elements_tab.first ..
3862                    pay_ac_action_arch.emp_elements_tab.last loop
3863 
3864               if pay_ac_action_arch.emp_elements_tab(i).element_primary_balance_id
3865                            = ln_primary_balance_id and
3866                  pay_ac_action_arch.emp_elements_tab(i).jurisdiction_code
3867                             = lv_jurisdiction_code then
3868 
3869                  hr_utility.set_location(gv_package  || lv_procedure_name, 65);
3870                  lv_element_archived := 'Y';
3871                  exit;
3872               end if;
3873           end loop;
3874        end if;
3875 
3876        if lv_element_archived = 'N' then
3877           ln_step := 20;
3878           hr_utility.set_location(gv_package  || lv_procedure_name, 70);
3879           ln_element_index := pay_ac_action_arch.emp_elements_tab.count;
3880           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_type_id
3881                          := ln_element_type_id;
3882           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_classfn
3883                          := lv_element_classification_name;
3884           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_reporting_name
3885                          := lv_reporting_name;
3886           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_primary_balance_id
3887                          := ln_primary_balance_id;
3888           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_processing_priority
3889                          := ln_processing_priority;
3890           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_hours_balance_id
3891                          := ln_hours_balance_id;
3892           pay_ac_action_arch.emp_elements_tab(ln_element_index).jurisdiction_code
3893                          := lv_jurisdiction_code;
3894 
3895           /*****************************************************************
3896           ** The Payment Assignemnt Action is not passed to this procedure
3897           ** as we do not want to call the Payment Balance.
3898           *****************************************************************/
3899           hr_utility.set_location(gv_package || lv_procedure_name, 80);
3900 
3901           ln_step := 25;
3902           populate_elements(p_xfr_action_id             => p_xfr_action_id
3903                            ,p_pymt_assignment_action_id => p_curr_pymt_action_id
3904                            ,p_pymt_eff_date             => p_curr_pymt_eff_date
3905                            ,p_element_type_id           => ln_element_type_id
3906                            ,p_primary_balance_id        => ln_primary_balance_id
3907                            ,p_hours_balance_id          => ln_hours_balance_id
3908                            ,p_processing_priority       => ln_processing_priority
3909                            ,p_element_classification_name
3910                                                 => lv_element_classification_name
3911                            ,p_reporting_name            => lv_reporting_name
3912                            ,p_tax_unit_id               => p_tax_unit_id
3913                            ,p_pymt_balcall_aaid         => null
3914                            ,p_ytd_balcall_aaid          => p_ytd_balcall_aaid
3915                            ,p_jurisdiction_code         => lv_jurisdiction_code
3916                            ,p_legislation_code          => p_legislation_code
3917                            ,p_sepchk_flag               => p_sepchk_flag
3918                            ,p_sepchk_run_type_id        => p_sepchk_run_type_id
3919                            ,p_original_date_earned      => null
3920                            ,p_effective_start_date      => null
3921                            ,p_effective_end_date        => null
3922                            ,p_final_rate               => null
3923                            ,p_ytd_flag                 => 'N'
3924                            );
3925        end if;
3926        lv_element_archived := 'N'; -- Initilializing the variable back
3927                                    -- to N for the next element
3928        lv_element_classification_name := null;
3929        ln_element_type_id      := null;
3930        lv_jurisdiction_code    := null;
3931        ln_primary_balance_id   := null;
3932        ln_processing_priority  := null;
3933        lv_reporting_name       := null;
3934        ln_hours_balance_id     := null;
3935     end loop;
3936 
3937     -- Bug 3585754
3938     if lv_run_bal_status = 'Y' then
3939        close c_prev_ytd_action_elem_rbr;
3940     else
3941        close c_prev_ytd_action_elements;
3942     end if;
3943 
3944     hr_utility.set_location(gv_package || lv_procedure_name, 90);
3945 
3946 
3947     ln_step := 30;
3948     if pay_ac_action_arch.lrr_act_tab.count > 0 then
3949        for i in pay_ac_action_arch.lrr_act_tab.first ..
3950                 pay_ac_action_arch.lrr_act_tab.last loop
3951 
3952            hr_utility.trace('after populate_elements ftp' ||
3953                  ' action_context_id is '                   ||
3954                  to_char(pay_ac_action_arch.lrr_act_tab(i).action_context_id));
3955            hr_utility.trace('action_info_category '       ||
3956                   pay_ac_action_arch.lrr_act_tab(i).action_info_category);
3957            hr_utility.trace('act_info1 is '              ||
3958                   pay_ac_action_arch.lrr_act_tab(i).act_info1);
3959            hr_utility.trace('act_info10 '                 ||
3960                   pay_ac_action_arch.lrr_act_tab(i).act_info10);
3961            hr_utility.trace('act_info3 '                 ||
3962                   pay_ac_action_arch.lrr_act_tab(i).act_info3);
3963            hr_utility.trace('act_info4 '                 ||
3964                   pay_ac_action_arch.lrr_act_tab(i).act_info4);
3965            hr_utility.trace('act_info5 '                 ||
3966                   pay_ac_action_arch.lrr_act_tab(i).act_info5);
3967            hr_utility.trace('act_info6 '                 ||
3968                   pay_ac_action_arch.lrr_act_tab(i).act_info6);
3969            hr_utility.trace('act_info7 '                 ||
3970                   pay_ac_action_arch.lrr_act_tab(i).act_info7);
3971            hr_utility.trace('act_info8 '                 ||
3972                   pay_ac_action_arch.lrr_act_tab(i).act_info8);
3973 
3974        end loop;
3975     end if;
3976 
3977     hr_utility.set_location(gv_package  || lv_procedure_name, 110);
3978 
3979     ln_step := 35;
3980     if pay_ac_action_arch.emp_elements_tab.count > 0 then
3981        for j in pay_ac_action_arch.emp_elements_tab.first ..
3982                 pay_ac_action_arch.emp_elements_tab.last loop
3983 
3984            hr_utility.trace('EMP_ELEMENTS_TAB.element_type '   ||
3985              to_char(pay_ac_action_arch.emp_elements_tab(j).element_type_id));
3986        end loop;
3987     end if;
3988 
3989     hr_utility.set_location(gv_package  || lv_procedure_name, 200);
3990 
3991    EXCEPTION
3992     when others then
3993 
3994       lv_error_message := 'Error at step ' || ln_step ||
3995                           ' in ' || gv_package || lv_procedure_name;
3996 
3997       hr_utility.trace(lv_error_message || '-' || sqlerrm);
3998 
3999       lv_error_message :=
4000          pay_emp_action_arch.set_error_message(lv_error_message);
4001 
4002       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
4003       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
4004       hr_utility.raise_error;
4005 
4006   END get_prev_ytd_elements;
4007 
4008 
4009   /******************************************************************
4010    Name      : first_time_process
4011    Purpose   : This procedure is called only if the archiver is run
4012                for the first time for an assignment. It gets all the
4013                elements which have been processed within a given
4014                calendar year till current payment date i.e. the
4015                end date of the Archiver run.
4016    Arguments :
4017    Notes     :
4018   ******************************************************************/
4019   PROCEDURE first_time_process(p_assignment_id       in number
4020                               ,p_xfr_action_id       in number
4021                               ,p_curr_pymt_action_id in number
4022                               ,p_curr_pymt_eff_date  in date
4023                               ,p_curr_eff_date       in date
4024                               ,p_tax_unit_id         in number
4025                               ,p_sepchk_run_type_id  in number
4026                               ,p_ytd_balcall_aaid    in number
4027                               ,p_pymt_balcall_aaid   in number
4028                               ,p_sepchk_flag         in varchar2
4029                               ,p_legislation_code    in varchar2
4030                               )
4031 
4032   IS
4033 
4034    lv_procedure_name              VARCHAR2(100);
4035    lv_error_message               VARCHAR2(200);
4036    ln_step                        NUMBER;
4037 
4038   BEGIN
4039       ln_step := 1;
4040       lv_procedure_name := '.first_time_process';
4041 
4042       hr_utility.set_location(gv_package || lv_procedure_name, 10);
4043       hr_utility.trace('p_xfr_action_id' || p_xfr_action_id);
4044       hr_utility.trace('p_assignment_id '|| p_assignment_id);
4045       hr_utility.trace('p_curr_eff_date '|| p_curr_eff_date);
4046       hr_utility.trace('p_tax_unit_id '  || p_tax_unit_id);
4047       hr_utility.trace('p_sepchk_flag '  || p_sepchk_flag);
4048       hr_utility.trace('p_legislation_code '  || p_legislation_code);
4049       hr_utility.trace('p_sepchk_run_type_id '|| p_sepchk_run_type_id);
4050       hr_utility.trace('p_ytd_balcall_aaid '  || p_ytd_balcall_aaid);
4051       hr_utility.trace('p_pymt_balcall_aaid ' || p_pymt_balcall_aaid);
4052       hr_utility.trace('p_curr_pymt_action_id  '
4053                      ||to_char(p_curr_pymt_action_id ));
4054 
4055       hr_utility.set_location(gv_package || lv_procedure_name, 20);
4056       ln_step := 10;
4057       get_current_elements(p_xfr_action_id        => p_xfr_action_id
4058                           ,p_curr_pymt_action_id  => p_curr_pymt_action_id
4059                           ,p_curr_pymt_eff_date   => p_curr_pymt_eff_date
4060                           ,p_assignment_id        => p_assignment_id
4061                           ,p_tax_unit_id          => p_tax_unit_id
4062                           ,p_sepchk_run_type_id   => p_sepchk_run_type_id
4063                           ,p_sepchk_flag          => p_sepchk_flag
4064                           ,p_pymt_balcall_aaid    => p_pymt_balcall_aaid
4065                           ,p_ytd_balcall_aaid     => p_ytd_balcall_aaid
4066                           ,p_legislation_code     => p_legislation_code);
4067       hr_utility.set_location(gv_package  || lv_procedure_name, 30);
4068 
4069       ln_step := 20;
4070       get_prev_ytd_elements(p_assignment_id       => p_assignment_id
4071                            ,p_xfr_action_id       => p_xfr_action_id
4072                            ,p_curr_pymt_action_id => p_curr_pymt_action_id
4073                            ,p_curr_pymt_eff_date  => p_curr_pymt_eff_date
4074                            ,p_start_eff_date      => trunc(p_curr_pymt_eff_date, 'Y')
4075                            ,p_tax_unit_id         => p_tax_unit_id
4076                            ,p_ytd_balcall_aaid    => p_ytd_balcall_aaid
4077                            ,p_sepchk_flag         => p_sepchk_flag
4078                            ,p_sepchk_run_type_id  => p_sepchk_run_type_id
4079                            ,p_legislation_code    => p_legislation_code
4080                            ,p_action_type1        => 'R'
4081                            ,p_action_type2        => 'Q'
4082                            ,p_action_type3        => 'B');
4083 
4084       ln_step := 30;
4085       hr_utility.set_location(gv_package  || lv_procedure_name, 200);
4086 
4087    EXCEPTION
4088     when others then
4089 
4090       lv_error_message := 'Error at step ' || ln_step ||
4091                           ' in ' || gv_package || lv_procedure_name;
4092 
4093       hr_utility.trace(lv_error_message || '-' || sqlerrm);
4094 
4095       lv_error_message :=
4096          pay_emp_action_arch.set_error_message(lv_error_message);
4097 
4098       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
4099       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
4100       hr_utility.raise_error;
4101 
4102   END first_time_process;
4103 
4104 
4105   /******************************************************************
4106    Name      : populate_summary
4107    Purpose   : This procedure add the values for different
4108                classifications and inserts two rows for CURRENT and
4109                YTD Summary.
4110    Arguments :
4111    Notes     :
4112   ******************************************************************/
4113   PROCEDURE populate_summary(p_xfr_action_id in number)
4114   IS
4115     lv_earnings                    VARCHAR2(80):= 0;
4116     lv_supplemental_earnings       VARCHAR2(80):= 0;
4117     lv_imputed_Earnings            VARCHAR2(80):= 0;
4118     lv_non_payroll_payments        VARCHAR2(80):= 0;
4119     lv_pre_tax_deductions          VARCHAR2(80):= 0;
4120     lv_involuntary_deductions      VARCHAR2(80):= 0;
4121     lv_voluntary_deductions        VARCHAR2(80):= 0;
4122     lv_tax_deductions              VARCHAR2(80):= 0;
4123     lv_taxable_benefits            VARCHAR2(80):= 0;
4124     lv_alien_expat_earnings        VARCHAR2(80):= 0;
4125 
4126     lv_ytd_earnings                VARCHAR2(80):= 0;
4127     lv_ytd_supplemental_earnings   VARCHAR2(80):= 0;
4128     lv_ytd_imputed_Earnings        VARCHAR2(80):= 0;
4129     lv_ytd_non_payroll_payments    VARCHAR2(80):= 0;
4130     lv_ytd_pre_tax_deductions      VARCHAR2(80):= 0;
4131     lv_ytd_involuntary_deductions  VARCHAR2(80):= 0;
4132     lv_ytd_voluntary_deductions    VARCHAR2(80):= 0;
4133     lv_ytd_tax_deductions          VARCHAR2(80):= 0;
4134     lv_ytd_taxable_benefits        VARCHAR2(80):= 0;
4135     lv_ytd_alien_expat_earnings    VARCHAR2(80):= 0;
4136 
4137     ln_index                       NUMBER;
4138     lv_procedure_name              VARCHAR2(100) := '.populate_summary';
4139     lv_error_message               VARCHAR2(200);
4140     ln_step                        NUMBER;
4141 
4142     lv_current_label               VARCHAR2(100);
4143     lv_ytd_label                   VARCHAR2(100);
4144     j                              NUMBER := 0;
4145 
4146   BEGIN
4147        ln_step := 1;
4148        hr_utility.set_location(gv_package || lv_procedure_name, 10);
4149        if pay_ac_action_arch.lrr_act_tab.count > 0 then
4150           hr_utility.set_location(gv_package || lv_procedure_name, 20);
4151 
4152           ln_step := 2;
4153           for i in pay_ac_action_arch.lrr_act_tab.first ..
4154                    pay_ac_action_arch.lrr_act_tab.last loop
4155 
4156               if pay_ac_action_arch.lrr_act_tab(i).action_context_id
4157                           = p_xfr_action_id then
4158                  if pay_ac_action_arch.lrr_act_tab(i).action_info_category
4159                             = 'AC EARNINGS' then
4160                     if pay_ac_action_arch.lrr_act_tab(i).act_info1
4161                                = 'Earnings' then
4162                        hr_utility.set_location(gv_package || lv_procedure_name, 30);
4163                        ln_step := 3;
4164                        lv_earnings
4165                           := lv_earnings +
4166                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4167                        lv_ytd_earnings
4168                           := lv_ytd_earnings +
4169                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4170                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4171                                = 'Supplemental Earnings' then
4172                        hr_utility.set_location(gv_package || lv_procedure_name, 40);
4173                        ln_step := 4;
4174                        lv_supplemental_earnings
4175                           := lv_supplemental_earnings +
4176                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4177                        lv_ytd_supplemental_earnings
4178                           := lv_ytd_supplemental_earnings +
4179                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4180                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4181                                = 'Imputed Earnings' then
4182                        hr_utility.set_location(gv_package || lv_procedure_name, 50);
4183                        ln_step := 5;
4184                        lv_imputed_earnings
4185                           := lv_imputed_earnings +
4186                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4187                        lv_ytd_imputed_earnings
4188                           := lv_ytd_imputed_earnings +
4189                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4190                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4191                                = 'Non-payroll Payments' then
4192                        hr_utility.set_location(gv_package || lv_procedure_name, 50);
4193                        ln_step := 6;
4194                        lv_non_payroll_payments
4195                           := lv_non_payroll_payments +
4196                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4197                        lv_ytd_non_payroll_payments
4198                           := lv_ytd_non_payroll_payments +
4199                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4200                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4201                                = 'Taxable Benefits' then
4202                        hr_utility.set_location(gv_package || lv_procedure_name, 55);
4203                        ln_step := 7;
4204                        lv_taxable_benefits
4205                           := lv_taxable_benefits +
4206                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4207                        lv_ytd_taxable_benefits
4208                           := lv_ytd_taxable_benefits +
4209                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4210                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4211                                = 'Alien/Expat Earnings' then
4212                        hr_utility.set_location(gv_package || lv_procedure_name, 56);
4213                        ln_step := 8;
4214                        lv_alien_expat_earnings
4215                           := lv_alien_expat_earnings +
4216                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4217                        lv_ytd_alien_expat_earnings
4218                           := lv_ytd_alien_expat_earnings +
4219                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4220                     end if;
4221 
4222                  elsif pay_ac_action_arch.lrr_act_tab(i).action_info_category
4223                             = 'AC DEDUCTIONS' then
4224                     if pay_ac_action_arch.lrr_act_tab(i).act_info1
4225                             = 'Pre-Tax Deductions' then
4226                        hr_utility.set_location(gv_package || lv_procedure_name, 60);
4227                        ln_step := 15;
4228                        lv_pre_tax_deductions
4229                           := lv_pre_tax_deductions +
4230                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4231                        lv_ytd_pre_tax_deductions
4232                           := lv_ytd_pre_tax_deductions +
4233                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4234                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4235                                    = 'Involuntary Deductions' then
4236                        hr_utility.set_location(gv_package || lv_procedure_name, 70);
4237                        ln_step := 16;
4238                        lv_involuntary_deductions
4239                           := lv_involuntary_deductions +
4240                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4241                        lv_ytd_involuntary_deductions
4242                           := lv_ytd_involuntary_deductions +
4243                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4244                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4245                                    = 'Voluntary Deductions' then
4246                        hr_utility.set_location(gv_package || lv_procedure_name, 80);
4247                        ln_step := 17;
4248                        lv_voluntary_deductions
4249                           := lv_voluntary_deductions +
4250                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4251                        lv_ytd_voluntary_deductions
4252                           := lv_ytd_voluntary_deductions +
4253                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4254                     elsif pay_ac_action_arch.lrr_act_tab(i).act_info1
4255                                    = 'Tax Deductions' then
4256                        hr_utility.set_location(gv_package || lv_procedure_name, 90);
4257                        ln_step := 18;
4258                        lv_tax_deductions
4259                           := lv_tax_deductions +
4260                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info8),0);
4261                        lv_ytd_tax_deductions
4262                           := lv_ytd_tax_deductions +
4263                              nvl(fnd_number.canonical_to_number(pay_ac_action_arch.lrr_act_tab(i).act_info9),0);
4264                     end if;
4265                  end if;
4266               end if;
4267           end loop;
4268        end if;
4269 
4270        hr_utility.set_location(gv_package || lv_procedure_name, 95);
4271        ln_step := 24;
4272        j := 0;
4273        if pay_ac_action_arch.ltr_summary_labels.count > 0 then
4274           for j in pay_ac_action_arch.ltr_summary_labels.first..
4275                    pay_ac_action_arch.ltr_summary_labels.last loop
4276               if pay_ac_action_arch.ltr_summary_labels(j).language
4277                       = pay_ac_action_arch.gv_person_lang and
4278                  pay_ac_action_arch.ltr_summary_labels(j).lookup_code = 'CURRENT' then
4279                  lv_current_label := pay_ac_action_arch.ltr_summary_labels(j).meaning;
4280               end if;
4281 
4282               if pay_ac_action_arch.ltr_summary_labels(j).language
4283                       = pay_ac_action_arch.gv_person_lang and
4284                  pay_ac_action_arch.ltr_summary_labels(j).lookup_code = 'YTD' then
4285                  lv_ytd_label := pay_ac_action_arch.ltr_summary_labels(j).meaning;
4286               end if;
4287           end loop;
4288         end if;
4289 
4290        hr_utility.set_location(gv_package || lv_procedure_name, 100);
4291        /* Insert one row for CURRENT and one for YTD */
4292        if pay_ac_action_arch.lrr_act_tab.count > 0 then
4293           ln_step := 25;
4294           -- CURRENT
4295           ln_index := pay_ac_action_arch.lrr_act_tab.count;
4296           hr_utility.trace('ln_index = ' || ln_index);
4297           pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
4298                 := 'AC SUMMARY CURRENT';
4299           pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
4300                 := '00-000-0000';
4301           pay_ac_action_arch.lrr_act_tab(ln_index).act_info4
4302                 := fnd_number.number_to_canonical(lv_earnings);  /*Bug 3311866*/
4303           pay_ac_action_arch.lrr_act_tab(ln_index).act_info5
4304                 := fnd_number.number_to_canonical(lv_supplemental_earnings) ;
4305           pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
4306                 := fnd_number.number_to_canonical(lv_imputed_earnings);
4307           pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
4308                 := fnd_number.number_to_canonical(lv_pre_tax_deductions) ;
4309           pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
4310                 := fnd_number.number_to_canonical(lv_involuntary_deductions);
4311           pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
4312                 := fnd_number.number_to_canonical(lv_voluntary_deductions) ;
4313           pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
4314                 := fnd_number.number_to_canonical(lv_tax_deductions) ;
4315           pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
4316                 := fnd_number.number_to_canonical(lv_taxable_benefits);
4317           pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
4318                 := fnd_number.number_to_canonical(lv_alien_expat_earnings);
4319           pay_ac_action_arch.lrr_act_tab(ln_index).act_info13
4320                 := fnd_number.number_to_canonical(lv_non_payroll_payments);
4321           pay_ac_action_arch.lrr_act_tab(ln_index).act_info14
4322                 := lv_current_label;
4323 
4324           hr_utility.set_location(gv_package || lv_procedure_name, 120);
4325           -- YTD
4326           ln_index := pay_ac_action_arch.lrr_act_tab.count;
4327           hr_utility.trace('ln_index = ' || ln_index);
4328           pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
4329                 := 'AC SUMMARY YTD';
4330           pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
4331                 := '00-000-0000';
4332           pay_ac_action_arch.lrr_act_tab(ln_index).act_info4
4333                 := fnd_number.number_to_canonical(lv_ytd_earnings);  /*Bug 3311866*/
4334           pay_ac_action_arch.lrr_act_tab(ln_index).act_info5
4335                 := fnd_number.number_to_canonical(lv_ytd_supplemental_earnings) ;
4336           pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
4337                 := fnd_number.number_to_canonical(lv_ytd_imputed_earnings);
4338           pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
4339                 := fnd_number.number_to_canonical(lv_ytd_pre_tax_deductions) ;
4340           pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
4341                 := fnd_number.number_to_canonical(lv_ytd_involuntary_deductions);
4342           pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
4343                 := fnd_number.number_to_canonical(lv_ytd_voluntary_deductions) ;
4344           pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
4345                 := fnd_number.number_to_canonical(lv_ytd_tax_deductions) ;
4346           pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
4347                 := fnd_number.number_to_canonical(lv_ytd_taxable_benefits);
4348           pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
4349                 := fnd_number.number_to_canonical(lv_ytd_alien_expat_earnings);
4350           pay_ac_action_arch.lrr_act_tab(ln_index).act_info13
4351                 := fnd_number.number_to_canonical(lv_ytd_non_payroll_payments);
4352           pay_ac_action_arch.lrr_act_tab(ln_index).act_info14
4353                 := lv_ytd_label;
4354        end if;
4355 
4356        hr_utility.set_location(gv_package || lv_procedure_name, 200);
4357        ln_step := 15;
4358 
4359   EXCEPTION
4360     when others then
4361 
4362       lv_error_message := 'Error at step ' || ln_step ||
4363                           ' in ' || gv_package || lv_procedure_name;
4364 
4365       hr_utility.trace(lv_error_message || '-' || sqlerrm);
4366 
4367       lv_error_message :=
4368          pay_emp_action_arch.set_error_message(lv_error_message);
4369 
4370       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
4371       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
4372       hr_utility.raise_error;
4373 
4374   END populate_summary;
4375 
4376   /******************************************************************
4377    Name      : process_additional_elements
4378    Purpose   : Retrieve the elements processed in the given assignment
4379                and insert YTD balance to pl/sql table.
4380    Arguments : p_assignment_id        => Terminated Assignment Id
4381                p_assignment_action_id => Max assignment action id
4382                                          of given assignment
4383                p_curr_eff_date        => Current effective date
4384                p_xfr_action_id        => Current XFR action id.
4385    Notes     : This process is used to retrieve elements processed
4386                in terminated assignments which is not picked up by
4387                the archiver.
4388   ******************************************************************/
4389   PROCEDURE process_additional_elements(p_assignment_id in number
4390                                   ,p_assignment_action_id in number
4391                                   ,p_curr_eff_date in date
4392                                   ,p_xfr_action_id in number
4393                                   ,p_legislation_code in varchar2
4394                                   ,p_tax_unit_id in number)
4395   IS
4396 
4397     lv_procedure_name           VARCHAR2(50) := '.process_additional_elements';
4398     lv_element_classification_name     VARCHAR2(80);
4399     ln_processing_priority         NUMBER;
4400     lv_reporting_name              VARCHAR2(80);
4401     ln_element_type_id             NUMBER;
4402     lv_jurisdiction_code           VARCHAR2(80);
4403     ln_primary_balance_id          NUMBER;
4404     ln_hours_balance_id            NUMBER;
4405     ln_element_index               NUMBER;
4406     lv_action_category             VARCHAR2(50) := 'AC DEDUCTIONS';
4407     ln_ytd_defined_balance_id      NUMBER;
4408     ln_ytd_amount                  NUMBER(15,2) := 0;
4409     ln_ytd_hours_balance_id        NUMBER;
4410     ln_ytd_hours                   NUMBER(15,2);
4411     ln_current_hours               NUMBER(15,2) := 0;
4412     ln_payments_amount             NUMBER(15,2) := 0;
4413     ln_index                       NUMBER;
4414     ln_check_count                 number;
4415     ln_check_count2                number;
4416     ln_step                        NUMBER;
4417     lv_error_message               VARCHAR2(200);
4418 
4419   BEGIN
4420     hr_utility.set_location(gv_package || lv_procedure_name, 10);
4421 
4422     ln_step := 10;
4423     pay_balance_pkg.set_context('TAX_UNIT_ID',p_tax_unit_id); -- Bug 3639249
4424     OPEN c_prev_ytd_action_elements(p_assignment_id
4425                                    ,p_curr_eff_date
4426                                    ,trunc(p_curr_eff_date, 'Y')
4427                                    ,'R', 'Q', 'B');
4428     LOOP
4429        FETCH c_prev_ytd_action_elements into lv_element_classification_name,
4430                                              ln_processing_priority,
4431                                              lv_reporting_name,
4432                                              ln_element_type_id,
4433                                              lv_jurisdiction_code,
4434                                              ln_primary_balance_id,
4435                                              ln_hours_balance_id;
4436        IF c_prev_ytd_action_elements%NOTFOUND then
4437           hr_utility.set_location(gv_package || lv_procedure_name, 15);
4438           exit;
4439        END IF;
4440 
4441        ln_step := 20;
4442        hr_utility.set_location(gv_package || lv_procedure_name, 20);
4443        hr_utility.trace('================= Fetched Element ==================');
4444        hr_utility.trace('ele classification = '||lv_element_classification_name);
4445        hr_utility.trace('ele type id = ' || ln_element_type_id);
4446        hr_utility.trace('reporting name = ' || lv_reporting_name);
4447        hr_utility.trace('primary balance id = ' || ln_primary_balance_id);
4448        hr_utility.trace('hours balance id = ' || ln_hours_balance_id);
4449 
4450        if lv_jurisdiction_code <> '00-000-0000' then
4451           pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
4452           gv_ytd_balance_dimension := gv_dim_asg_jd_gre_ytd;
4453        else
4454           pay_balance_pkg.set_context('JURISDICTION_CODE', lv_jurisdiction_code);
4455           if gv_reporting_level = 'TAXGRP' then
4456              gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
4457           else
4458              gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
4459           end if;
4460        end if;
4461 
4462        if lv_element_classification_name like '% Deductions' then
4463           ln_hours_balance_id := null;
4464        end if;
4465 
4466        if ln_hours_balance_id is not null then
4467           ln_step := 30;
4468           hr_utility.set_location(gv_package || lv_procedure_name, 22);
4469           ln_ytd_hours_balance_id
4470                 := pay_emp_action_arch.get_defined_balance_id(
4471                                             ln_hours_balance_id,
4472                                             gv_ytd_balance_dimension,
4473                                             p_legislation_code);
4474           hr_utility.trace('ln_ytd_hours_balance_id = '||
4475                              ln_ytd_hours_balance_id);
4476           hr_utility.set_location(gv_package || lv_procedure_name, 24);
4477 
4478           ln_step := 40;
4479           if ln_ytd_hours_balance_id is not null then
4480                ln_ytd_hours := nvl(pay_balance_pkg.get_value(
4481                                       ln_ytd_hours_balance_id,
4482                                       p_assignment_action_id),0);
4483                hr_utility.trace('ln_ytd_hours = '||ln_ytd_hours);
4484                hr_utility.set_location(gv_package || lv_procedure_name, 26);
4485           end if;
4486        end if; --Hours
4487 
4488        ln_step := 50;
4489        ln_ytd_defined_balance_id
4490                   := pay_emp_action_arch.get_defined_balance_id
4491                                           (ln_primary_balance_id,
4492                                            gv_ytd_balance_dimension,
4493                                            p_legislation_code);
4494        hr_utility.trace('ln_ytd_defined_balance_id = '||
4495                          ln_ytd_defined_balance_id);
4496        hr_utility.set_location(gv_package || lv_procedure_name, 30);
4497        if ln_ytd_defined_balance_id is not null then
4498           ln_step := 60;
4499           ln_ytd_amount := nvl(pay_balance_pkg.get_value(
4500                                      ln_ytd_defined_balance_id,
4501                                      p_assignment_action_id),0);
4502           hr_utility.trace('ln_ytd_amount = '||ln_ytd_amount);
4503        end if;
4504        hr_utility.set_location(gv_package || lv_procedure_name, 40);
4505 
4506 
4507        if nvl(ln_ytd_amount, 0) <> 0 then
4508           ln_step := 70;
4509           ln_element_index := pay_ac_action_arch.emp_elements_tab.count;
4510 
4511           hr_utility.trace('ln_element_index = '||ln_element_index);
4512 
4513           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_type_id
4514                         := ln_element_type_id;
4515           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_classfn
4516                         := lv_element_classification_name;
4517           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_reporting_name
4518                         := lv_reporting_name;
4519           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_primary_balance_id
4520                         := ln_primary_balance_id;
4521           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_processing_priority
4522                         := ln_processing_priority;
4523           pay_ac_action_arch.emp_elements_tab(ln_element_index).element_hours_balance_id
4524                         := ln_hours_balance_id;
4525           pay_ac_action_arch.emp_elements_tab(ln_element_index).jurisdiction_code
4526                         := lv_jurisdiction_code;
4527 
4528 
4529           ln_index := pay_ac_action_arch.lrr_act_tab.count;
4530           hr_utility.trace('ln_index = '||ln_index);
4531           if lv_element_classification_name in ('Earnings',
4532                                                'Supplemental Earnings',
4533                                                'Taxable Benefits',
4534                                                'Imputed Earnings',
4535                                                'Non-payroll Payments',
4536                                                'Alien/Expat Earnings') then
4537               hr_utility.set_location(gv_package || lv_procedure_name, 50);
4538               lv_action_category := 'AC EARNINGS';
4539               hr_utility.trace('ln_current_hours = '||ln_current_hours);
4540               hr_utility.trace('ln_ytd_hours = '||ln_ytd_hours);
4541               ln_step := 80;
4542               pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
4543                      := fnd_number.number_to_canonical(ln_current_hours); /*Bug 3311866*/
4544               pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
4545                      := fnd_number.number_to_canonical(ln_ytd_hours);
4546           else
4547               lv_action_category := 'AC DEDUCTIONS';
4548           end if;
4549           hr_utility.set_location(gv_package || lv_procedure_name, 60);
4550           hr_utility.trace('lv_action_category = '||lv_action_category);
4551           hr_utility.trace('ln_ytd_amount = '||ln_ytd_amount);
4552           hr_utility.trace('lv_reporting_name = '||lv_reporting_name);
4553           hr_utility.trace('p_xfr_action_id = '||p_xfr_action_id);
4554           ln_step := 90;
4555 
4556           pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
4557                     := lv_action_category;
4558           pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
4559                    := nvl(lv_jurisdiction_code, '00-000-0000');
4560           pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
4561                    := p_xfr_action_id;
4562           pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
4563                    := lv_element_classification_name;
4564           pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
4565                    := ln_element_type_id;
4566           pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
4567                    := ln_primary_balance_id;
4568           pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
4569                    := ln_processing_priority;
4570           pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
4571                    := fnd_number.number_to_canonical(ln_payments_amount); /*Bug 3311866*/
4572           pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
4573                    := fnd_number.number_to_canonical(ln_ytd_amount);
4574           pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
4575                    := lv_reporting_name;
4576 
4577       end if;
4578       hr_utility.set_location(gv_package || lv_procedure_name, 100);
4579 
4580     END LOOP;
4581     CLOSE c_prev_ytd_action_elements;
4582 
4583     ln_step := 110;
4584     hr_utility.trace('------------Looping to see pl/sql table --------');
4585     ln_check_count := pay_ac_action_arch.emp_elements_tab.count;
4586     ln_check_count2 := pay_ac_action_arch.lrr_act_tab.count;
4587 
4588     hr_utility.trace('ln_check_count = '||ln_check_count);
4589     hr_utility.trace('ln_check_count2 = '||ln_check_count2);
4590     hr_utility.trace('============= End of Processing '||p_assignment_id||
4591                      '=============');
4592     hr_utility.set_location(gv_package || lv_procedure_name,150);
4593 
4594   EXCEPTION
4595     when others then
4596 
4597       lv_error_message := 'Error at step ' || ln_step ||
4598                           ' in ' || gv_package || lv_procedure_name;
4599 
4600       hr_utility.trace(lv_error_message || '-' || sqlerrm);
4601 
4602       lv_error_message :=
4603          pay_emp_action_arch.set_error_message(lv_error_message);
4604 
4605       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
4606       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
4607       hr_utility.raise_error;
4608 
4609   END process_additional_elements;
4610 
4611   /******************************************************************
4612    Name      : process_balance_adjustment_elements
4613    Purpose   : Retrieve the elements processed in the given assignment
4614                and insert YTD balance to pl/sql table.
4615    Arguments : p_assignment_id        => Assignment Id
4616    Notes     : This process is used to retrieve elements processed
4617                in balance adjustment but have never been processed in
4618                payroll run.
4619   ******************************************************************/
4620   PROCEDURE process_baladj_elements(
4621                                p_assignment_id        in number
4622                               ,p_xfr_action_id        in number
4623                               ,p_last_xfr_action_id   in number
4624                               ,p_curr_pymt_action_id  in number
4625                               ,p_curr_pymt_eff_date   in date
4626                               ,p_ytd_balcall_aaid     in number
4627                               ,p_sepchk_flag          in varchar2
4628                               ,p_sepchk_run_type_id   in number
4629                               ,p_payroll_id           in number
4630                               ,p_consolidation_set_id in number
4631                               ,p_legislation_code     in varchar2
4632                               ,p_tax_unit_id          in number)
4633   IS
4634     cursor c_check_baladj(cp_assignment_id in number
4635                                      ,cp_xfr_action_id in number
4636                                      ,cp_tax_unit_id   in number
4637                                      ,cp_payroll_id    in number
4638                                      ,cp_consolidation_set_id in number
4639                                      ,cp_curr_eff_date in date) is
4640       select  /*+ ORDERED */
4641                 min(ppa.effective_date)
4642         from   pay_assignment_actions paa
4643              , pay_payroll_actions        ppa
4644         where ppa.action_type                 = 'B'
4645            and paa.payroll_action_id         = ppa.payroll_action_id
4646            and paa.action_status               = 'C'
4647            and paa.assignment_action_id   > cp_xfr_action_id
4648            and paa.assignment_id             = cp_assignment_id
4649            and paa.tax_unit_id                  = cp_tax_unit_id
4650            and ppa.effective_date             >= trunc(cp_curr_eff_date, 'Y')
4651            and ppa.effective_date             <= cp_curr_eff_date
4652            and ppa.payroll_id                    = cp_payroll_id
4653            and ppa.consolidation_set_id     = cp_consolidation_set_id;
4654 
4655     ld_baladj_date    DATE;
4656     ln_step           NUMBER;
4657     lv_error_message  VARCHAR2(200);
4658     lv_procedure_name VARCHAR2(50);
4659 
4660   BEGIN
4661     ln_step := 1;
4662     lv_procedure_name := '.process_baladj_elements';
4663     hr_utility.set_location(gv_package || lv_procedure_name, 10);
4664 
4665     open c_check_baladj(p_assignment_id
4666                        ,p_last_xfr_action_id
4667                        ,p_tax_unit_id
4668                        ,p_payroll_id
4669                        ,p_consolidation_set_id
4670                        ,p_curr_pymt_eff_date);
4671     fetch c_check_baladj into ld_baladj_date;
4672     hr_utility.set_location(gv_package || lv_procedure_name, 20);
4673     ln_step := 10;
4674     if c_check_baladj%found then
4675        -- There is atleast one balance adjustment done since the last archive
4676        -- run, so, need to find out the element and process it
4677        hr_utility.set_location(gv_package || lv_procedure_name, 30);
4678        get_prev_ytd_elements(p_assignment_id       => p_assignment_id
4679                             ,p_xfr_action_id       => p_xfr_action_id
4680                             ,p_curr_pymt_action_id => p_curr_pymt_action_id
4681                             ,p_curr_pymt_eff_date  => p_curr_pymt_eff_date
4682                             ,p_start_eff_date      => ld_baladj_date
4683                             ,p_tax_unit_id         => p_tax_unit_id
4684                             ,p_ytd_balcall_aaid    => p_ytd_balcall_aaid
4685                             ,p_sepchk_flag         => p_sepchk_flag
4686                             ,p_sepchk_run_type_id  => p_sepchk_run_type_id
4687                             ,p_legislation_code    => p_legislation_code
4688                             ,p_action_type1        => 'B'
4689                             ,p_action_type2        => ''
4690                             ,p_action_type3        => '');
4691     end if;
4692     close c_check_baladj;
4693     hr_utility.set_location(gv_package || lv_procedure_name, 50);
4694     ln_step := 20;
4695 
4696    EXCEPTION
4697     when others then
4698 
4699       lv_error_message := 'Error at step ' || ln_step ||
4700                           ' in ' || gv_package || lv_procedure_name;
4701 
4702       hr_utility.trace(lv_error_message || '-' || sqlerrm);
4703 
4704       lv_error_message :=
4705          pay_emp_action_arch.set_error_message(lv_error_message);
4706 
4707       hr_utility.set_message(801,'HR_ELE_ENTRY_FORMULA_HINT');
4708       hr_utility.set_message_token('FORMULA_TEXT', lv_error_message);
4709       hr_utility.raise_error;
4710 
4711   END process_baladj_elements;
4712 
4713   Procedure Archive_retro_element  (
4714                                      p_xfr_action_id               in  number
4715                                     ,p_assignment_id               in number
4716                                     ,p_pymt_assignment_action_id   in number
4717                                     ,p_pymt_eff_date               in date
4718                                     ,p_element_type_id             in number
4719                                     ,p_primary_balance_id          in number
4720                                     ,p_hours_balance_id            in number
4721                                     ,p_processing_priority         in number
4722                                     ,p_element_classification_name in varchar2
4723                                     ,p_reporting_name              in varchar2
4724                                     ,p_tax_unit_id                 in number
4725                                     ,p_ytd_balcall_aaid            in number
4726                                     ,p_pymt_balcall_aaid           in number
4727                                     ,p_legislation_code            in varchar2
4728                                     ,p_sepchk_flag                 in varchar2
4729                                     ,p_sepchk_run_type_id          in number
4730                                     ,p_action_type                 in varchar2
4731                                     ,p_run_assignment_action_id    in number
4732                                     ,p_multiple                    in number
4733                                     ,p_rate                        in number
4734 				    ,p_retro_base                  IN VARCHAR2 DEFAULT 'N'
4735                                     )
4736  IS
4737  /*
4738  TYPE retro_rec_typ IS RECORD(original_dt_earned DATE
4739                              ,original_st_dt DATE
4740                              ,original_end_dt DATE
4741                              ,category VARCHAR2(100)
4742                              ,jurisdiction VARCHAR2(20)
4743                              ,hours  NUMBER
4744                              ,ytd_hrs NUMBER
4745                              ,amount NUMBER
4746                              ,ytd_amt NUMBER
4747                              );
4748  TYPE retro_tab_typ IS TABLE OF retro_rec_typ INDEX BY BINARY_INTEGER;
4749  */
4750  CURSOR archive_retro_elements ( cp_element_entry_id in number ,
4751                                   cp_run_assignment_action_id in number ) IS
4752 
4753         select fnd_date.date_to_canonical(pay_paywsmee_pkg.get_original_date_earned(cp_element_entry_id)) ,
4754        fnd_date.date_to_canonical(ptp.start_date),
4755                  fnd_date.date_to_canonical(ptp.end_date),
4756                 hr_general.decode_lookup
4757                             (DECODE (UPPER (ec.classification_name),
4758                                      'EARNINGS', 'US_EARNINGS',
4759                                      'SUPPLEMENTAL EARNINGS', 'US_SUPPLEMENTAL_EARNINGS',
4760                                      'IMPUTED EARNINGS', 'US_IMPUTED_EARNINGS',
4761                                      'NON-PAYROLL PAYMENTS', 'US_PAYMENT',
4762                                      'ALIEN/EXPAT EARNINGS', 'PER_US_INCOME_TYPES',
4763                                      NULL
4764                                     ),
4765                              et.element_information1
4766                             ) CATEGORY
4767  from pay_element_entries_f peef,
4768       per_time_periods ptp,
4769       pay_payroll_actions ppa,
4770       pay_assignment_actions paa,
4771       pay_element_types_f et,
4772       pay_element_classifications ec
4773 where peef.element_entry_id = cp_element_entry_id
4774   AND peef.creator_type IN ('EE', 'NR', 'PR', 'R', 'RR')
4775   AND et.element_type_id = peef.element_type_id
4776   AND et.classification_id = ec.classification_id
4777   AND paa.assignment_action_id = cp_run_assignment_action_id
4778   AND ppa.payroll_action_id = paa.payroll_action_id
4779   AND ptp.payroll_id = ppa.payroll_id
4780   AND pay_paywsmee_pkg.get_original_date_earned(cp_element_entry_id)
4781                    BETWEEN ptp.start_date
4782                        AND ptp.end_date
4783  	/*Bug# 16318258 - Start */
4784 	AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND
4785                                                        peef.effective_end_date
4786         AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN et.effective_start_date AND
4787                                                        et.effective_end_date;
4788 	/*Bug# 16318258 - End */
4789 
4790   CURSOR get_element_entry_id(cp_run_action_id in number ,
4791                               cp_assignment_id in number ,
4792                               cp_element_type_id in number ) IS
4793            SELECT peef.element_entry_id,
4794                   peef.creator_type,
4795                   peef.source_start_date
4796            FROM pay_element_entries_f peef,
4797                 pay_assignment_actions paa,
4798                 pay_payroll_actions ppa,
4799                 per_time_periods ptp
4800             WHERE paa.assignment_action_id = cp_run_action_id
4801             AND ppa.payroll_action_id = paa.payroll_action_id
4802             AND ptp.payroll_id = ppa.payroll_id
4803             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
4804             AND peef.assignment_id = cp_assignment_id
4805             AND peef.creator_id is NOT NULL
4806             /* Following Added for Bug# 7580440 */
4807             AND peef.creator_type IN ('EE', 'NR', 'PR', 'R', 'RR')
4808             AND peef.element_type_id = cp_element_type_id
4809 
4810             /* Commenting as Ele Entry Eff Start / End Date may not match the following
4811             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
4812             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
4813             End of Comment */
4814 
4815             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date
4816             /*Start -- 14319807*/
4817             AND EXISTS
4818             (SELECT 1 FROM pay_run_results prr
4819             WHERE
4820             prr.assignment_action_id = paa.assignment_action_id
4821             AND prr.element_entry_id = peef.element_entry_id
4822             )
4823             /*End -- 14319807*/
4824             ORDER BY 3;
4825 
4826 -- Changed for performance issue Bug# 7661112
4827 --
4828 CURSOR get_run_results (cp_run_assignment_action_id IN NUMBER
4829                        ,cp_element_entry_id IN NUMBER
4830                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
4831                         ) IS
4832 SELECT   to_number(prrv.result_value), pivf.NAME
4833     FROM pay_run_results prr,
4834          pay_run_result_values prrv,
4835          pay_input_values_f pivf
4836    WHERE prr.assignment_action_id = cp_run_assignment_action_id
4837      AND prr.element_entry_id = cp_element_entry_id
4838      AND prrv.run_result_id = prr.run_result_id
4839      AND prrv.input_value_id = pivf.input_value_id
4840      AND pivf.NAME IN ('Pay Value', 'Hours', 'Rate')
4841 		AND cp_pymt_eff_date between  pivf.effective_start_date
4842              and  pivf.effective_end_date                   -- Bug# 16318258
4843 ORDER BY 2 ;
4844 
4845 
4846 --Introducing this cursor to pull hours when not pushed by retro pay
4847 CURSOR get_run_results_hours (cp_element_entry_id IN NUMBER
4848                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
4849                         ) is
4850 select PRRV.RESULT_VALUE as original_input_value
4851          from pay_run_results PRR,
4852               pay_run_result_values PRRV,
4853               pay_input_values_f PIVF,
4854               pay_entry_process_details PEPD
4855 WHERE PEPD.ELEMENT_ENTRY_ID = cp_element_entry_id
4856 AND   PEPD.SOURCE_ENTRY_ID = PRR.SOURCE_ID
4857 AND PEPD.RUN_RESULT_ID = PRR.RUN_RESULT_ID
4858 AND   PEPD.SOURCE_ELEMENT_TYPE_ID = PIVF.ELEMENT_TYPE_ID
4859 AND   PIVF.NAME in ('Hours')
4860 AND   PRR.RUN_RESULT_ID = PRRV.RUN_RESULT_ID
4861 AND   PRRV.INPUT_VALUE_ID = PIVF.INPUT_VALUE_ID
4862 AND cp_pymt_eff_date between  pivf.effective_start_date
4863              and  pivf.effective_end_date;              -- Bug# 16318258
4864 
4865 -- Introducing This Cussor in case Hours and Pay Values Both zero
4866 --
4867 -- Changed for performance issue Bug# 7661112
4868 -- Commented the below cursor 12548215 rate is being picked in the above cursor
4869 /**/
4870 CURSOR get_run_results_rate(cp_run_assignment_action_id IN NUMBER
4871                            ,cp_element_entry_id IN NUMBER
4872                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
4873                         ) IS
4874 SELECT   to_number(prrv.result_value)
4875     FROM pay_run_results prr,
4876          pay_run_result_values prrv,
4877          pay_input_values_f pivf
4878    WHERE prr.assignment_action_id = cp_run_assignment_action_id
4879      AND prr.element_entry_id = cp_element_entry_id
4880      AND prrv.run_result_id = prr.run_result_id
4881      AND prrv.input_value_id = pivf.input_value_id
4882      AND pivf.NAME IN ('Rate')
4883      AND cp_pymt_eff_date between  pivf.effective_start_date
4884              and  pivf.effective_end_date;               -- Bug# 16318258
4885 /**/
4886 
4887 -- Added For Work At Home Condition
4888 
4889     CURSOR c_cur_get_wrkathome(cp_assignment_id IN NUMBER
4890                               ,cp_pymt_eff_date in date                   -- Bug# 16318258
4891                               ) IS
4892       SELECT NVL(paf.work_at_home, 'N')
4893             ,ppf.person_id
4894             ,ppf.business_group_id
4895       FROM per_assignments_f paf
4896           ,per_all_people_f ppf
4897       WHERE paf.assignment_id = cp_assignment_id
4898       AND   paf.person_id = ppf.person_id
4899      and cp_pymt_eff_date between paf.effective_start_date and paf.effective_end_date
4900      and cp_pymt_eff_date between ppf.effective_start_date and ppf.effective_end_date;  -- Bug# 16318258
4901 
4902 
4903     CURSOR c_cur_home_state_jd(cp_person_id IN NUMBER
4904                               ,cp_bg_id     IN NUMBER) IS
4905       SELECT pus.state_code || '-000-0000'
4906       FROM per_addresses pa
4907           ,pay_us_states pus
4908       WHERE pa.person_id = cp_person_id
4909       AND   pa.primary_flag = 'Y'
4910       AND   p_pymt_eff_date between pa.date_from AND NVL(pa.date_to, hr_general.END_OF_TIME)
4911       AND   pa.business_group_id = cp_bg_id
4912       AND   pa.region_2 = pus.state_abbrev
4913       AND   pa.style = p_legislation_code;
4914 
4915  --retro_tab                       retro_tab_typ;
4916  --retro_refined_tab               retro_tab_typ;
4917  --cnt                             NUMBER;
4918  --k                               NUMBER;
4919  --k_match_cnt                     NUMBER;
4920  lv_original_date_earned         varchar2(100);
4921  lv_effective_start_date         varchar2(100);
4922  lv_effective_end_date           varchar2(100);
4923  lv_category                     varchar2(100);
4924  lv_el_jurisdiction_code         varchar2(100);
4925  ln_final_rate                   number;
4926  ln_element_entry_id             number;
4927  lv_creator_type                 varchar2(100);
4928  lv_jurisdiction_flag            varchar2(20);
4929  ln_element_index                number;
4930  ln_multiple                     number;
4931  ln_rate                         number(10,2);
4932  ln_current_hours           NUMBER(15,5);
4933  ln_payments_amount         NUMBER(15,5);
4934  ln_ytd_hours               NUMBER(15,5) := 0;
4935  ln_ytd_amount              NUMBER(17,5) := 0;
4936 
4937  ln_pymt_defined_balance_id NUMBER;
4938  ln_pymt_hours_balance_id   NUMBER;
4939  ln_ytd_defined_balance_id  NUMBER;
4940  ln_ytd_hours_balance_id    NUMBER;
4941 
4942  lv_rate_exists             VARCHAR2(1) := 'N';
4943  ln_nonpayroll_balcall_aaid NUMBER;
4944 
4945  ln_index                   NUMBER ;
4946  lv_procedure_name          VARCHAR2(100):= '.Archive_retro_element';
4947  lv_error_message           VARCHAR2(200);
4948 
4949  ln_step                    NUMBER;
4950  ln_final_ytd_value         NUMBER(15,5);
4951  ld_source_start_date       DATE;
4952  lv_action_category         varchar2(100);
4953  lv_pay_value_name          varchar2(100);
4954  ln_pay_value               number (15,5);
4955  ln_hours                   number(15,5) ;
4956  ln_amount                  number(15,5);
4957 -- Added For Work At Home Condition
4958  lv_wrk_at_home                 per_assignments_f.work_at_home%TYPE;
4959  ln_person_id                   per_people_f.person_id%TYPE;
4960  ln_bg_id                       per_people_f.business_group_id%TYPE;
4961 
4962 
4963  ln_rate_disp               NUMBER;      -- 12548215
4964  ln_hours_derv_flag         boolean;     -- 12548215
4965 
4966  BEGIN
4967 
4968  hr_utility.trace('Entering in package Archive_retro_element');
4969  hr_utility.trace('Run_assignment_action_id = ' || p_run_assignment_action_id) ;
4970  OPEN get_element_entry_id ( p_run_assignment_action_id,
4971                              p_assignment_id,
4972                              p_element_type_id);
4973  ln_step := 50;
4974 
4975  /*
4976  	--Bug# 13785386
4977   	-- 12548215 included variable initializations into loop
4978  LOOP -- For Each Ele Entry created by Retro
4979    */
4980        ln_ytd_hours := 0;
4981        ln_ytd_amount := 0;
4982 
4983 -- cnt := 0;
4984  LOOP -- For Each Ele Entry created by Retro
4985       ln_hours_derv_flag := false;  -- Bug# 13877047
4986 
4987        FETCH get_element_entry_id INTO ln_element_entry_id,
4988                                        lv_creator_type,
4989                                        ld_source_start_date;
4990 
4991       /*Bug#-14658920 -On instances(basically 1221) where SPARSE_MATRIX approach to Avoid the creation of Null Run Results and Null Run Result Values while Running
4992       Payroll is enabled - run results with null are not getting created.Existing code as it assumes the null values in run results as zero
4993       resets the counter for hours and Amounts once it sees a null value in there.
4994       Because of this supressing behavior counter is not reset and we see unpredictable results.
4995       this is handle in code with out regard to SPAR_MATRIX enabled/not.*/
4996 
4997        ln_hours := 0;
4998        ln_amount := 0;
4999        /*Bug# 14658920 End */
5000 
5001        IF  get_element_entry_id%NOTFOUND THEN
5002            close get_element_entry_id;
5003            EXIT;
5004        END IF;
5005        hr_utility.trace('Step 50 : ln_element_entry_id := '||ln_element_entry_id);
5006        hr_utility.trace('Step 50 : lv_creator_type := '||lv_creator_type);
5007        hr_utility.trace('Step 50 : ld_source_start_date := '||ld_source_start_date);
5008 
5009        OPEN get_run_results (p_run_assignment_action_id
5010                             ,ln_element_entry_id,p_pymt_eff_date);
5011        LOOP
5012            ln_step := 49;
5013            FETCH get_run_results INTO ln_pay_value ,
5014                                       lv_pay_value_name;
5015            IF get_run_results%FOUND THEN
5016               IF lv_pay_value_name = 'Hours' THEN
5017                  ln_ytd_hours := ln_ytd_hours + nvl(ln_pay_value,0) ;
5018                  ln_hours := nvl(ln_pay_value,0);
5019                  hr_utility.trace('ln_hours := '||ln_hours);
5020                  hr_utility.trace('ln_ytd_hours  is '|| ln_ytd_hours );
5021 
5022               END IF ;
5023 
5024               IF lv_pay_value_name = 'Pay Value' THEN
5025                  ln_ytd_amount := ln_ytd_amount + nvl(ln_pay_value,0) ;
5026                  ln_amount := nvl(ln_pay_value,0) ;
5027                  hr_utility.trace('ln_amount := '||ln_amount);
5028                  hr_utility.trace('ln_ytd_amount  is '|| ln_ytd_amount );
5029               END IF;
5030 
5031 	      IF lv_pay_value_name = 'Rate' THEN     -- 12548215 added if
5032                  ln_rate_disp := nvl(ln_pay_value,0) ;
5033                  ln_rate      := ln_rate_disp;
5034                  hr_utility.trace('ln_rate_disp := '||ln_rate_disp);
5035               END IF;
5036 
5037 	    ELSE
5038 
5039                 EXIT;
5040             END IF;
5041        END LOOP; -- Run Results
5042 
5043        ln_step := 48;
5044 
5045        IF get_run_results%ISOPEN THEN
5046         CLOSE get_run_results ;
5047        END IF;
5048 
5049        /*
5050        IF ln_hours = 0 THEN
5051           IF ln_amount = 0 THEN
5052              OPEN get_run_results_rate(p_run_assignment_action_id
5053                                       ,ln_element_entry_id);
5054              FETCH get_run_results_rate INTO ln_rate;
5055              CLOSE get_run_results_rate;
5056           ELSE
5057              ln_rate := NULL;
5058           END IF;
5059        ELSE
5060            ln_rate := ln_amount/ln_hours;
5061        END IF;
5062        */
5063 
5064         --12548215 added the below block to get hours, if zero - from the base element
5065       IF ln_hours = 0 THEN
5066           OPEN get_run_results_hours(ln_element_entry_id,p_pymt_eff_date);
5067               FETCH get_run_results_hours INTO ln_hours;
5068                IF get_run_results_hours%FOUND then
5069                  ln_hours_derv_flag := true;
5070                END IF;
5071               CLOSE get_run_results_hours;
5072        END IF;
5073 
5074         --12548215 added the below block to check and derive rate if required,
5075 
5076       IF ln_amount = 0 THEN
5077            ln_rate:=NULL;
5078        ELSE
5079          if nvl(ln_hours,0)<>0 then
5080            ln_rate:=ln_amount/ln_hours;
5081          end if;
5082        END IF;
5083 
5084        hr_utility.trace('Before Opening Cursor archive_retro_elements');
5085        OPEN archive_retro_elements ( ln_element_entry_id ,
5086                                      p_run_assignment_action_id );
5087        FETCH archive_retro_elements INTO  lv_original_date_earned
5088                                          ,lv_effective_start_date
5089                                          ,lv_effective_end_date
5090                                          ,lv_category;
5091        CLOSE archive_retro_elements ;
5092        hr_utility.trace('After Closing Cursor archive_retro_elements');
5093        hr_utility.trace('lv_original_date_earned := '||lv_original_date_earned);
5094        hr_utility.trace('lv_effective_start_date := '||lv_effective_start_date);
5095        hr_utility.trace('lv_effective_end_date := '||lv_effective_end_date);
5096        hr_utility.trace('lv_category := '||lv_category);
5097               -- Added For Work At Home Condition
5098        OPEN c_cur_get_wrkathome(p_assignment_id,p_pymt_eff_date);
5099        FETCH c_cur_get_wrkathome INTO lv_wrk_at_home
5100                                       ,ln_person_id
5101                                       ,ln_bg_id;
5102        CLOSE c_cur_get_wrkathome;
5103 
5104        IF lv_wrk_at_home = 'Y' THEN
5105                OPEN c_cur_home_state_jd(ln_person_id
5106                                   ,ln_bg_id);
5107                FETCH c_cur_home_state_jd INTO lv_jurisdiction_flag;
5108                CLOSE c_cur_home_state_jd;
5109        ELSE
5110 
5111           SELECT nvl((select peevf.screen_entry_value  jurisdiction_code
5112                     from pay_input_values_f pivf,
5113                          pay_element_entry_values_f peevf
5114                     where pivf.element_type_id = p_element_type_id
5115                     AND pivf.NAME = 'Jurisdiction'
5116                     AND peevf.element_entry_id =  ln_element_entry_id
5117                     AND pivf.input_value_id = peevf.input_value_id
5118                     AND p_pymt_eff_date between pivf.effective_start_date AND pivf.effective_end_date),  -- Bug# 16318258
5119                (SELECT   distinct pus.state_code
5120                || '-'
5121                || puc.county_code
5122                || '-'
5123                || punc.city_code jurisdiction_code
5124                FROM per_all_assignments_f peaf,
5125                hr_locations_all hla,
5126                pay_us_states pus,
5127                pay_us_counties puc,
5128                pay_us_city_names punc,
5129                pay_assignment_actions paa,
5130                pay_payroll_actions ppa
5131          WHERE peaf.assignment_id = p_assignment_id
5132            AND paa.assignment_action_id = p_run_assignment_action_id
5133            AND peaf.location_id = hla.location_id
5134            AND hla.region_2 = pus.state_abbrev
5135            AND pus.state_code = puc.state_code
5136            AND hla.region_1 = puc.county_name
5137            AND hla.town_or_city = punc.city_name
5138            AND pus.state_code = punc.state_code
5139            AND puc.county_code = punc.county_code
5140            AND ppa.payroll_action_id = paa.payroll_action_id
5141            AND ppa.effective_date between peaf.effective_start_date and peaf.effective_end_date
5142            ))
5143            into lv_jurisdiction_flag
5144            from dual;
5145       END IF; -- Work At Home 'N'
5146 
5147            -- populating temporary plsql table
5148            --
5149            hr_utility.trace('lv_jurisdiction_flag := '||lv_jurisdiction_flag);
5150 -- Comment Starts From Here
5151 -- Comment Till Here
5152 
5153            lv_action_category := 'AC DEDUCTIONS';
5154 
5155            ln_step := 15;
5156            ln_index := pay_ac_action_arch.lrr_act_tab.count;
5157            	   if p_element_classification_name in ('Earnings',
5158                                                  'Supplemental Earnings',
5159                                                  'Taxable Benefits',
5160                                                  'Imputed Earnings',
5161                                                  'Non-payroll Payments',
5162                                                  'Alien/Expat Earnings') then
5163              	     lv_action_category := 'AC EARNINGS';
5164 
5165 	     pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
5166                      := fnd_number.number_to_canonical(ln_hours);
5167                        	     -- YTD Hours
5168              pay_ac_action_arch.lrr_act_tab(ln_index).act_info22
5169                    := round(ln_rate,2);
5170 
5171              pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
5172                          := fnd_number.number_to_canonical(0);
5173              	     end if; -- Classification Earnings
5174 
5175 	     hr_utility.set_location(gv_package || lv_procedure_name, 130);
5176             	    /* Insert this into the plsql table if Current or YTD
5177               amount is not Zero */
5178              	     ln_step :=21;
5179              pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
5180                     := lv_action_category;
5181               ln_step :=22;
5182              pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
5183                    :=  '00-000-0000' ;
5184               ln_step :=23;
5185              pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
5186                    := p_xfr_action_id;
5187               ln_step :=24;
5188              pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
5189                    := p_element_classification_name;
5190               ln_step :=25;
5191              pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
5192                    := p_element_type_id;
5193              pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
5194                    := p_primary_balance_id;
5195              pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
5196                    := p_processing_priority;
5197              pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
5198                    := fnd_number.number_to_canonical(nvl(ln_amount,0));
5199              	     hr_utility.trace('ln_amount := '||fnd_number.number_to_canonical(nvl(ln_amount,0)));
5200        	     pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
5201                    := p_reporting_name;
5202              IF lv_action_category = 'AC DEDUCTIONS' THEN
5203                  pay_ac_action_arch.lrr_act_tab(ln_index).act_info24
5204                    := p_reporting_name;
5205              END IF;
5206              pay_ac_action_arch.lrr_act_tab(ln_index).act_info17
5207                    := lv_original_date_earned;
5208                    hr_utility.trace('lv_original_date_earned :=' || lv_original_date_earned );
5209              pay_ac_action_arch.lrr_act_tab(ln_index).act_info18
5210                    := lv_effective_start_date;
5211                    hr_utility.trace('lv_effective_start_date := ' || lv_effective_start_date );
5212              pay_ac_action_arch.lrr_act_tab(ln_index).act_info19
5213                    := lv_effective_end_date ;
5214                   hr_utility.trace('lv_effective_end_date:= ' || lv_effective_end_date );
5215              pay_ac_action_arch.lrr_act_tab(ln_index).act_info20
5216                    := lv_category;
5217                    hr_utility.trace('lv_category ' || lv_category );
5218              pay_ac_action_arch.lrr_act_tab(ln_index).act_info21
5219                    := lv_jurisdiction_flag;
5220              pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5221                            := fnd_number.number_to_canonical(0);
5222 
5223       hr_utility.set_location(gv_package || lv_procedure_name, 150);
5224 
5225       ln_step := 20;
5226 
5227 
5228       end loop;  --Bug# 13785386
5229    --
5230    -- If For this Element ONLY Retro Entries Exist
5231    -- OR It is Retro + Base Case
5232 
5233    IF p_retro_base = 'N' THEN
5234 
5235        /* Code added for doing balance call for YTD
5236           This is a Case where Element DOES NOT have Base Entry
5237 	  BUT ONLY Retro Entries */
5238 
5239       if pay_emp_action_arch.gv_multi_leg_rule is null then
5240          pay_emp_action_arch.gv_multi_leg_rule
5241                := pay_emp_action_arch.get_multi_legislative_rule(
5242                                                   p_legislation_code);
5243       end if;
5244 
5245       pay_balance_pkg.set_context('JURISDICTION_CODE', NULL);
5246          	 if gv_reporting_level = 'TAXGRP' then
5247             gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
5248          else
5249             gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
5250          end if;
5251 
5252 
5253       ln_ytd_defined_balance_id
5254                 := pay_emp_action_arch.get_defined_balance_id(
5255                                              p_primary_balance_id,
5256                                              gv_ytd_balance_dimension,
5257                                              p_legislation_code);
5258 
5259       hr_utility.trace('ln_ytd_defined_balance_id = ' ||
5260                           ln_ytd_defined_balance_id);
5261 
5262          if ln_ytd_defined_balance_id is not null then
5263             ln_ytd_amount := nvl(pay_balance_pkg.get_value(
5264                                       ln_ytd_defined_balance_id,
5265                                       p_ytd_balcall_aaid),0);
5266          end if;
5267      if p_hours_balance_id is not null then
5268          hr_utility.set_location(gv_package || lv_procedure_name, 20);
5269          ln_ytd_hours_balance_id
5270                 := pay_emp_action_arch.get_defined_balance_id(
5271                                             p_hours_balance_id,
5272                                             gv_ytd_balance_dimension,
5273                                             p_legislation_code);
5274 
5275            hr_utility.trace('ln_ytd_hours_balance_id = ' ||
5276                              ln_ytd_hours_balance_id);
5277 
5278             if ln_ytd_hours_balance_id is not null then
5279                ln_ytd_hours := nvl(pay_balance_pkg.get_value(
5280                                       ln_ytd_hours_balance_id,
5281                                       p_ytd_balcall_aaid),0);
5282                hr_utility.set_location(gv_package || lv_procedure_name, 60);
5283             end if;
5284       end if;
5285 
5286       pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5287           := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
5288       hr_utility.trace('ln_ytd_amount' || ln_ytd_amount);
5289 
5290      /*Bug# 13785386 - Start*/
5291      /* if ln_hours_derv_flag then                      --to pull YTD hours if hours is dervied.
5292         ln_ytd_hours := ln_ytd_hours + ln_hours;      -- as YTD balance would be unaffected as the hours
5293         ln_hours_derv_flag := false;                  -- in this scenario is pulled through SQL and not run results.
5294       end if;
5295      */
5296      /*Bug# 13785386 - End*/
5297 
5298       if pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
5299          = 'AC EARNINGS' then
5300 
5301         pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
5302 		:= fnd_number.number_to_canonical(ln_ytd_hours); 	-- Bug# 13877047
5303 		hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
5304         hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
5305 
5306       end if;
5307        -- End Addition
5308     ELSE
5309        -- Global Variable Setting Needed Here
5310        -- That Can be Subtracted during Base Population
5311        --
5312 	pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5313 	   := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
5314 	hr_utility.trace('ln_ytd_amount' || ln_ytd_amount);
5315 	gv_ytd_amount := ln_ytd_amount ;
5316 	/*gv_ytd_amount := nvl(gv_ytd_amount,0)+ln_ytd_amount ; --Bug# 13785386 */
5317 
5318 	pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
5319           := fnd_number.number_to_canonical(ln_ytd_hours);   -- Bug# 13877047
5320 	gv_ytd_hour := ln_ytd_hours ;
5321 	/*gv_ytd_hour := nvl(gv_ytd_hour,0)+ln_ytd_hours ; --Bug# 13785386 */
5322 
5323 	hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
5324 
5325     END IF; -- p_retro_base 'Y'
5326  /*Bug# 13785386 - Start*/
5327  /*
5328   end loop;  --12548215 included the above YTD calculations into the loop.
5329 */
5330 /*Bug# 13785386 - End*/
5331 
5332    EXCEPTION
5333     when others then
5334     hr_utility.trace(' Error In archive_retro_elements procedure');
5335     hr_utility.trace('error occured at step ' || ln_step );
5336 
5337  END  Archive_retro_element;
5338 Procedure Archive_addnl_elements  (p_application_column_name     in varchar2
5339                                     ,p_xfr_action_id               in  number
5340                                     ,p_assignment_id               in number
5341                                     ,p_pymt_assignment_action_id   in number
5342                                     ,p_pymt_eff_date               in date
5343                                     ,p_element_type_id             in number
5344                                     ,p_primary_balance_id          in number
5345                                     ,p_hours_balance_id            in number
5346                                     ,p_processing_priority         in number
5347                                     ,p_element_classification_name in varchar2
5348                                     ,p_reporting_name              in varchar2
5349                                     ,p_tax_unit_id                 in number
5350                                     ,p_ytd_balcall_aaid            in number
5351                                     ,p_pymt_balcall_aaid           in number
5352                                     ,p_legislation_code            in varchar2
5353                                     ,p_sepchk_flag                 in varchar2
5354                                     ,p_sepchk_run_type_id          in number
5355                                     ,p_action_type                 in varchar2
5356                                     ,p_run_assignment_action_id    in number
5357                                     ,p_multiple                    in number
5358                                     ,p_rate                        in number
5359                                     )
5360  IS
5361  CURSOR archive_non_retro_elements ( cp_original_date_paid in varchar2,
5362                                     cp_element_entry_id in number,
5363                                     cp_run_assignment_action_id in number ) IS
5364 
5365           select fnd_date.date_to_canonical(ptp.start_date),
5366                  fnd_date.date_to_canonical(ptp.end_date),
5367                 hr_general.decode_lookup
5368                             (DECODE (UPPER (ec.classification_name),
5369                                      'EARNINGS', 'US_EARNINGS',
5370                                      'SUPPLEMENTAL EARNINGS', 'US_SUPPLEMENTAL_EARNINGS',
5371                                      'IMPUTED EARNINGS', 'US_IMPUTED_EARNINGS',
5372                                      'NON-PAYROLL PAYMENTS', 'US_PAYMENT',
5373                                      'ALIEN/EXPAT EARNINGS', 'PER_US_INCOME_TYPES',
5374                                      NULL
5375                                     ),
5376                              et.element_information1
5377                             ) CATEGORY
5378 from pay_assignment_actions paa,
5379      pay_payroll_actions ppa,
5380      per_time_periods ptp,
5381      pay_element_entries_f peef,
5382      pay_element_classifications ec,
5383      pay_element_types et
5384 where paa.assignment_action_id = cp_run_assignment_action_id
5385 and   paa.payroll_action_id   = ppa.payroll_action_id
5386 and   ptp.payroll_id = ppa.payroll_id
5387 and   nvl(cp_original_date_paid,ptp.start_date) between  ptp.start_date AND ptp.end_date
5388 and   peef.element_entry_id = cp_element_entry_id
5389 and   et.element_type_id = peef.element_type_id
5390 and   et.classification_id = ec.classification_id
5391 AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;  -- Bug# 16318258
5392 
5393   Cursor get_element_entry_id( cp_run_action_id in number ,
5394                               cp_assignment_id in number ,
5395                               cp_element_type_id in number ) IS
5396            select peef.element_entry_id,
5397                   peef.creator_type,
5398                   peef.source_start_date
5399  FROM pay_element_entries_f peef,
5400                 pay_assignment_actions paa,
5401                 pay_payroll_actions ppa,
5402                 per_time_periods ptp
5403                 WHERE paa.assignment_action_id = cp_run_action_id
5404             AND ppa.payroll_action_id = paa.payroll_action_id
5405             AND ptp.payroll_id = ppa.payroll_id
5406             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
5407             AND peef.assignment_id = cp_assignment_id
5408             AND peef.element_type_id = cp_element_type_id
5409 
5410             /* Commenting as Ele Entry Eff Start / End Date may not match the following
5411             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
5412             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
5413             End of Comment */
5414 
5415             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date
5416 
5417             --ORDER BY 3;
5418             ORDER BY nvl(peef.attribute_category,'Z'), peef.element_entry_id ;
5419 
5420 --bug 7373188
5421 --CURSOR get_run_results ( cp_element_entry_id in number ) IS
5422 CURSOR get_run_results ( cp_run_action_id in number ,cp_element_entry_id in number
5423                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
5424                        ) IS
5425 --bug 7373188
5426 SELECT   to_number(prrv.result_value), pivf.NAME
5427     FROM pay_run_results prr,
5428          pay_run_result_values prrv,
5429          pay_input_values_f pivf
5430    WHERE prr.element_entry_id = cp_element_entry_id
5431 --bug 7373188
5432      and prr.assignment_action_id = cp_run_action_id
5433 --bug 7373188
5434      AND prrv.run_result_id = prr.run_result_id
5435      AND prrv.input_value_id = pivf.input_value_id
5436      AND pivf.NAME IN ('Pay Value', 'Hours')
5437      AND cp_pymt_eff_date between  pivf.effective_start_date and  pivf.effective_end_date        -- Bug# 16318258
5438 ORDER BY 2 ;
5439 -- Introducing This Cussor in case Hours and Pay Values Both zero
5440 --
5441 --bug 7373188
5442 --CURSOR get_run_results_rate( cp_element_entry_id in number ) IS
5443 CURSOR get_run_results_rate( cp_run_action_id in number , cp_element_entry_id in number
5444                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
5445                        ) IS
5446 --bug 7373188
5447 SELECT   to_number(prrv.result_value)
5448     FROM pay_run_results prr,
5449          pay_run_result_values prrv,
5450          pay_input_values_f pivf
5451    WHERE prr.element_entry_id = cp_element_entry_id
5452 --bug 7373188
5453         and prr.assignment_action_id = cp_run_action_id
5454 --bug 7373188
5455      AND prrv.run_result_id = prr.run_result_id
5456      AND prrv.input_value_id = pivf.input_value_id
5457      AND pivf.NAME IN ('Rate')
5458      AND cp_pymt_eff_date between  pivf.effective_start_date and  pivf.effective_end_date;                  -- Bug# 16318258
5459 
5460 -- Added For Work At Home Condition
5461 
5462     CURSOR c_cur_get_wrkathome(cp_assignment_id IN NUMBER
5463                               ,cp_pymt_eff_date in date     -- Bug# 16318258
5464                        ) IS
5465       SELECT NVL(paf.work_at_home, 'N')
5466             ,ppf.person_id
5467             ,ppf.business_group_id
5468       FROM per_assignments_f paf
5469           ,per_all_people_f ppf
5470       WHERE paf.assignment_id = cp_assignment_id
5471       AND   paf.person_id = ppf.person_id
5472       and cp_pymt_eff_date between paf.effective_start_date and paf.effective_end_date
5473       and cp_pymt_eff_date between ppf.effective_start_date and ppf.effective_end_date;  -- Bug# 16318258
5474 
5475     CURSOR c_cur_home_state_jd(cp_person_id IN NUMBER
5476                               ,cp_bg_id     IN NUMBER) IS
5477       SELECT pus.state_code || '-000-0000'
5478       FROM per_addresses pa
5479           ,pay_us_states pus
5480       WHERE pa.person_id = cp_person_id
5481       AND   pa.primary_flag = 'Y'
5482       AND   p_pymt_eff_date between pa.date_from AND NVL(pa.date_to, hr_general.END_OF_TIME)
5483       AND   pa.business_group_id = cp_bg_id
5484       AND   pa.region_2 = pus.state_abbrev
5485       AND   pa.style = p_legislation_code;
5486 
5487  lv_original_date_earned         varchar2(100);
5488  lv_effective_start_date         varchar2(100);
5489  lv_effective_end_date           varchar2(100);
5490  lv_category                     varchar2(100);
5491  lv_el_jurisdiction_code         varchar2(100);
5492  ln_final_rate                   number;
5493  ln_element_entry_id             number;
5494  lv_creator_type                 varchar2(100);
5495  lv_jurisdiction_flag            varchar2(20);
5496  ln_element_index                number;
5497  ln_multiple                     number;
5498  ln_rate                         number(10,2);
5499  ln_current_hours           NUMBER(15,5);
5500  ln_payments_amount         NUMBER(15,5);
5501  ln_ytd_hours               NUMBER(15,5) := 0;
5502  ln_ytd_amount              NUMBER(17,5) := 0;
5503 
5504  ln_pymt_defined_balance_id NUMBER;
5505  ln_pymt_hours_balance_id   NUMBER;
5506  ln_ytd_defined_balance_id  NUMBER;
5507  ln_ytd_hours_balance_id    NUMBER;
5508 
5509  lv_rate_exists             VARCHAR2(1) := 'N';
5510  ln_nonpayroll_balcall_aaid NUMBER;
5511 
5512  ln_index                   NUMBER ;
5513  lv_procedure_name          VARCHAR2(100):= '.Archive_addnl_elements';
5514  lv_error_message           VARCHAR2(200);
5515 
5516  ln_step                    NUMBER;
5517  ln_final_ytd_value         NUMBER(15,5);
5518  ld_source_start_date       DATE;
5519  lv_action_category         varchar2(100);
5520  lv_pay_value_name          varchar2(100);
5521  ln_pay_value               number (15,5);
5522  ln_hours                   number(15,5) ;
5523  ln_amount                  number(15,5);
5524  ld_original_date_paid      date;
5525  count_j                    number := null;
5526  result                     number := 0;
5527  lv_sqlstr                  varchar2(500);
5528  lv_check_date              varchar2(100);
5529  ld_check_date              date;
5530  lv_sqlstr1                 varchar2(2500);
5531  lv_temp_AAA                varchar2(100) :='BBB';
5532  lv_sqlstr2                 varchar2(2500);
5533  lv_sqlstr3                 varchar2(2500);
5534  lv_sqlstr4                 varchar2(2500);
5535  lv_sqlstr_final            varchar2(2500);
5536 
5537 -- Added For Work At Home Condition
5538  lv_wrk_at_home                 per_assignments_f.work_at_home%TYPE;
5539  ln_person_id                   per_people_f.person_id%TYPE;
5540  ln_bg_id                       per_people_f.business_group_id%TYPE;
5541 
5542 BEGIN
5543 
5544  hr_utility.trace('Entering in package Archive_addnl_elements');
5545  hr_utility.trace('Run_assignment_action_id = ' || p_run_assignment_action_id) ;
5546  hr_utility.trace('Element Type Id in Non retro Archiver ' || p_element_type_id);
5547  OPEN get_element_entry_id ( p_run_assignment_action_id,
5548                              p_assignment_id,
5549                              p_element_type_id);
5550  ln_step := 50;
5551 
5552        ln_ytd_hours := 0;
5553        ln_amount := 0;
5554 
5555        lv_sqlstr1 := 'select max(nvl(peef.' || p_application_column_name ||', ptp.start_date)) FROM pay_element_entries_f peef, pay_assignment_actions paa, pay_payroll_actions ppa,per_time_periods ptp WHERE paa.assignment_action_id =' ;
5556        lv_sqlstr2 := p_run_assignment_action_id ;
5557        lv_sqlstr3 :='AND ppa.payroll_action_id = paa.payroll_action_id AND ptp.payroll_id = ppa.payroll_id AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date AND peef.assignment_id =' || p_assignment_id ||'AND peef.element_type_id =' ;
5558        lv_sqlstr4 := p_element_type_id ||' AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date AND peef.' || p_application_column_name || ' is not null '  ;
5559        lv_sqlstr_final := lv_sqlstr1 || lv_sqlstr2 || lv_sqlstr3 || lv_sqlstr4 ;
5560 
5561        execute immediate lv_sqlstr_final into  lv_check_date ;
5562  ln_step :=51;
5563  hr_utility.trace('lv_check_date  == ' || lv_check_date);
5564  LOOP
5565 
5566        FETCH get_element_entry_id INTO ln_element_entry_id,
5567                                        lv_creator_type,
5568                                        ld_source_start_date;
5569      ln_step :=52;
5570        IF  get_element_entry_id%NOTFOUND THEN
5571            close get_element_entry_id;
5572            ln_step :=53;
5573            EXIT;
5574        END IF;
5575                     ln_step :=53;
5576                     lv_sqlstr := 'select  nvl(' || p_application_column_name ||
5577                                ',''AAA'') from pay_element_entries_f where element_entry_id = ' || ln_element_entry_id;
5578             execute immediate lv_sqlstr
5579             into  lv_original_date_earned ;
5580 
5581              IF  lv_original_date_earned = 'AAA' THEN
5582                  lv_original_date_earned := fnd_date.date_to_canonical( p_pymt_eff_date);
5583                  lv_temp_AAA:= 'AAA' ;
5584              END IF;
5585             lv_original_date_earned := nvl(lv_original_date_earned ,p_pymt_eff_date);
5586 
5587 
5588             hr_utility.trace('lv_original_date_earned in step 53 is' || lv_original_date_earned) ;
5589 
5590            ld_original_date_paid := fnd_date.canonical_to_date(lv_original_date_earned);
5591 
5592        ln_step :=54;
5593        ln_hours := 0;
5594        ln_amount := 0;
5595 --bug 7373188
5596 --       OPEN get_run_results ( ln_element_entry_id );
5597        OPEN get_run_results ( p_run_assignment_action_id,ln_element_entry_id,p_pymt_eff_date);   -- Bug# 16318258
5598 --bug 7373188
5599        LOOP
5600        ln_step := 49;
5601        FETCH get_run_results INTO ln_pay_value ,
5602                                   lv_pay_value_name;
5603        IF get_run_results%FOUND THEN
5604           IF lv_pay_value_name = 'Hours' THEN
5605              ln_hours := ln_hours + ln_pay_value;
5606              hr_utility.trace('ln_ytd_hours  is '|| ln_ytd_hours );
5607           END IF ;
5608 
5609           IF lv_pay_value_name = 'Pay Value' THEN
5610              ln_amount := ln_amount + ln_pay_value ;
5611              hr_utility.trace('ln_ytd_amount  is '|| ln_ytd_amount );
5612           END IF;
5613        ELSE
5614             EXIT;
5615        END IF;
5616        END LOOP;
5617 
5618        ln_step := 48;
5619        IF get_run_results%ISOPEN then
5620        CLOSE get_run_results ;
5621        END IF;
5622 
5623        IF ln_hours = 0 THEN
5624           IF ln_amount = 0 THEN
5625 --bug 7373188
5626 --             OPEN get_run_results_rate(ln_element_entry_id);
5627              OPEN get_run_results_rate(p_run_assignment_action_id,ln_element_entry_id,p_pymt_eff_date);   -- Bug# 16318258
5628 --bug 7373188
5629              FETCH get_run_results_rate INTO ln_rate;
5630              CLOSE get_run_results_rate;
5631           ELSE
5632              ln_rate := NULL;
5633           END IF;
5634        ELSE
5635            ln_rate := ln_amount/ln_hours;
5636        END IF;
5637 
5638        hr_utility.trace('ld_original_date_paid := '||ld_original_date_paid);
5639        hr_utility.trace('ln_element_entry_id := '||ln_element_entry_id);
5640        hr_utility.trace('p_run_assignment_action_id := '||p_run_assignment_action_id);
5641 
5642        OPEN archive_non_retro_elements ( ld_original_date_paid,
5643                                          ln_element_entry_id ,
5644                                      p_run_assignment_action_id );
5645        FETCH archive_non_retro_elements INTO lv_effective_start_date
5646                                          ,lv_effective_end_date
5647                                          ,lv_category;
5648        CLOSE archive_non_retro_elements ;
5649        hr_utility.trace('lv_effective_start_date := '||lv_effective_start_date);
5650        hr_utility.trace('lv_effective_end_date := '||lv_effective_end_date);
5651        hr_utility.trace('lv_category := '||lv_category);
5652 
5653        -- Added For Work At Home Condition
5654        OPEN c_cur_get_wrkathome(p_assignment_id,p_pymt_eff_date);    -- Bug# 16318258
5655        FETCH c_cur_get_wrkathome INTO lv_wrk_at_home
5656                                      ,ln_person_id
5657                                      ,ln_bg_id;
5658        CLOSE c_cur_get_wrkathome;
5659        IF lv_wrk_at_home = 'Y' THEN
5660                OPEN c_cur_home_state_jd(ln_person_id
5661                                   ,ln_bg_id);
5662                FETCH c_cur_home_state_jd INTO lv_jurisdiction_flag;
5663                CLOSE c_cur_home_state_jd;
5664        ELSE
5665 
5666           SELECT nvl((select peevf.screen_entry_value  jurisdiction_code
5667                     from pay_input_values_f pivf,
5668                          pay_element_entry_values_f peevf
5669                     where pivf.element_type_id = p_element_type_id
5670                     AND pivf.NAME = 'Jurisdiction'
5671                     AND peevf.element_entry_id =  ln_element_entry_id
5672                     AND pivf.input_value_id = peevf.input_value_id
5673                     AND p_pymt_eff_date between pivf.effective_start_date AND pivf.effective_end_date),  -- Bug# 16318258
5674 	               (SELECT   distinct pus.state_code
5675                || '-'
5676                || puc.county_code
5677                || '-'
5678                || punc.city_code jurisdiction_code
5679                FROM per_all_assignments_f peaf,
5680                hr_locations_all hla,
5681                pay_us_states pus,
5682                pay_us_counties puc,
5683                pay_us_city_names punc,
5684                pay_assignment_actions paa,
5685                pay_payroll_actions ppa
5686          WHERE peaf.assignment_id = p_assignment_id
5687            AND paa.assignment_action_id = p_run_assignment_action_id
5688            AND peaf.location_id = hla.location_id
5689            AND hla.region_2 = pus.state_abbrev
5690            AND pus.state_code = puc.state_code
5691            AND hla.region_1 = puc.county_name
5692            AND hla.town_or_city = punc.city_name
5693            AND pus.state_code = punc.state_code
5694            AND puc.county_code = punc.county_code
5695            AND ppa.payroll_action_id = paa.payroll_action_id
5696            AND ppa.effective_date between peaf.effective_start_date and peaf.effective_end_date
5697            ))
5698            into lv_jurisdiction_flag
5699            from dual;
5700       END IF; -- Work at Home 'N'
5701 
5702            hr_utility.trace('lv_jurisdiction_flag := '||lv_jurisdiction_flag);
5703            lv_action_category := 'AC EARNINGS';
5704            ln_step := 15;
5705            ln_index := pay_ac_action_arch.lrr_act_tab.count;
5706 
5707               pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
5708                      := fnd_number.number_to_canonical(ln_hours);
5709               hr_utility.trace('pay_ac_action_arch.lrr_act_tab(ln_index).act_info11' || pay_ac_action_arch.lrr_act_tab(ln_index).act_info11 );/*Bug 3311866*/
5710              hr_utility.set_location(gv_package || lv_procedure_name, 130);
5711             /* Insert this into the plsql table if Current or YTD
5712                amount is not Zero */
5713               ln_step :=21;
5714              pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
5715                     := lv_action_category;
5716               ln_step :=22;
5717              pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
5718                    :=  '00-000-0000' ;
5719               ln_step :=23;
5720              pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
5721                    := p_xfr_action_id;
5722               ln_step :=24;
5723              pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
5724                    := p_element_classification_name;
5725               ln_step :=25;
5726              pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
5727                    := p_element_type_id;
5728              pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
5729                    := p_primary_balance_id;
5730              pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
5731                    := p_processing_priority;
5732              pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
5733                    := fnd_number.number_to_canonical(nvl(ln_amount,0));
5734                    pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5735                            := fnd_number.number_to_canonical(0);
5736 
5737    hr_utility.trace('ln_amount := '||fnd_number.number_to_canonical(nvl(ln_amount,0)));
5738              pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
5739                    := p_reporting_name;
5740 
5741          IF lv_temp_AAA <> 'AAA' THEN
5742              pay_ac_action_arch.lrr_act_tab(ln_index).act_info17
5743                    := lv_original_date_earned;
5744                    hr_utility.trace('lv_original_date_earned :=' || lv_original_date_earned );
5745 
5746                IF lv_check_date = nvl(lv_original_date_earned,p_pymt_eff_date) THEN
5747                   count_j := ln_index;
5748                END IF;
5749              pay_ac_action_arch.lrr_act_tab(ln_index).act_info18
5750                    := lv_effective_start_date;
5751                    hr_utility.trace('lv_effective_start_date := ' || lv_effective_start_date );
5752              pay_ac_action_arch.lrr_act_tab(ln_index).act_info19
5753                    := lv_effective_end_date ;
5754                   hr_utility.trace('lv_effective_end_date:= ' || lv_effective_end_date );
5755              pay_ac_action_arch.lrr_act_tab(ln_index).act_info20
5756                    := lv_category;
5757                    hr_utility.trace('lv_category ' || lv_category );
5758              pay_ac_action_arch.lrr_act_tab(ln_index).act_info21
5759                    := lv_jurisdiction_flag;
5760          END IF;
5761 
5762               pay_ac_action_arch.lrr_act_tab(ln_index).act_info22
5763                    := round(ln_rate,2);
5764              /*
5765              IF pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 IS NULL THEN
5766                 pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 := 'N/A';
5767              END IF;
5768              */
5769 
5770       hr_utility.set_location(gv_package || lv_procedure_name, 150);
5771       ln_step := 20;
5772       lv_temp_AAA := 'BBB' ;
5773        end loop;
5774 
5775        /* Code added for doing balance call for YTD */
5776                 if pay_emp_action_arch.gv_multi_leg_rule is null then
5777          pay_emp_action_arch.gv_multi_leg_rule
5778                := pay_emp_action_arch.get_multi_legislative_rule(
5779                                                   p_legislation_code);
5780       end if;
5781 
5782       pay_balance_pkg.set_context('JURISDICTION_CODE', null);
5783          if gv_reporting_level = 'TAXGRP' then
5784             gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
5785          else
5786             gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
5787          end if;
5788 
5789             /*********************************************************
5790       ** Get the defined balance_id for YTD call as it will be
5791       ** same for all classification types.
5792       *********************************************************/
5793       ln_ytd_defined_balance_id
5794                 := pay_emp_action_arch.get_defined_balance_id(
5795                                              p_primary_balance_id,
5796                                              gv_ytd_balance_dimension,
5797                                              p_legislation_code);
5798 
5799       hr_utility.trace('ln_ytd_defined_balance_id = ' ||
5800                           ln_ytd_defined_balance_id);
5801 
5802       ln_step := 4;
5803       if p_hours_balance_id is not null then
5804          hr_utility.set_location(gv_package || lv_procedure_name, 20);
5805          ln_ytd_hours_balance_id
5806                 := pay_emp_action_arch.get_defined_balance_id(
5807                                             p_hours_balance_id,
5808                                             gv_ytd_balance_dimension,
5809                                             p_legislation_code);
5810 
5811            hr_utility.trace('ln_ytd_hours_balance_id = ' ||
5812                              ln_ytd_hours_balance_id);
5813 
5814       end if;
5815 
5816       ln_step := 5;
5817       hr_utility.set_location(gv_package || lv_procedure_name, 40);
5818          if ln_ytd_defined_balance_id is not null then
5819             ln_ytd_amount := nvl(pay_balance_pkg.get_value(
5820                                       ln_ytd_defined_balance_id,
5821                                       p_ytd_balcall_aaid),0);
5822          end if;
5823 
5824          if p_hours_balance_id is not null then
5825             hr_utility.set_location(gv_package || lv_procedure_name, 50);
5826             if ln_ytd_hours_balance_id is not null then
5827                ln_ytd_hours := nvl(pay_balance_pkg.get_value(
5828                                       ln_ytd_hours_balance_id,
5829                                       p_ytd_balcall_aaid),0);
5830                hr_utility.set_location(gv_package || lv_procedure_name, 60);
5831             end if;
5832          end if; --Hours
5833 
5834          ln_step := 8;
5835          if p_pymt_balcall_aaid is not null then
5836             ln_step := 10;
5837             /* Added dimension _ASG_GRE_RUN for reversals and Balance
5838                Adjustments for Canada. Bug#3498653 */
5839             if p_action_type in ('B','V') then
5840                ln_pymt_defined_balance_id
5841                     := pay_emp_action_arch.get_defined_balance_id(
5842                                                  p_primary_balance_id,
5843                                                  '_ASG_GRE_RUN',
5844                                                  p_legislation_code);
5845             else
5846                if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
5847                   ln_pymt_defined_balance_id
5848                      := pay_emp_action_arch.get_defined_balance_id(
5849                                                  p_primary_balance_id,
5850                                                  '_ASG_PAYMENTS',
5851                                                  p_legislation_code);
5852                else
5853                   ln_pymt_defined_balance_id
5854                      := pay_emp_action_arch.get_defined_balance_id(
5855                                                  p_primary_balance_id,
5856                                                  '_PAYMENTS',
5857                                                  p_legislation_code);
5858                end if;
5859             end if; -- p_action_type in ('B','V')
5860             /* end of addition for Reversals and bal adjustments */
5861             hr_utility.trace('ln_pymt_defined_balance_id ' ||
5862                               ln_pymt_defined_balance_id);
5863 
5864             if ln_pymt_defined_balance_id is not null then
5865                ln_payments_amount := nvl(pay_balance_pkg.get_value(
5866                                                ln_pymt_defined_balance_id,
5867                                                p_pymt_balcall_aaid),0);
5868                hr_utility.trace('ln_payments_amount = ' ||ln_payments_amount);
5869             end if;
5870 
5871             if p_hours_balance_id is not null then
5872                /* Added dimension _ASG_GRE_RUN for reversals and Balance
5873                   Adjustments for Canada. Bug#3498653 */
5874                if p_action_type in ('B','V') then
5875                   ln_pymt_hours_balance_id
5876                         := pay_emp_action_arch.get_defined_balance_id(
5877                                                    p_hours_balance_id
5878                                                    ,'_ASG_GRE_RUN'
5879                                                    ,p_legislation_code);
5880                else
5881                   if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
5882                      ln_pymt_hours_balance_id
5883                         := pay_emp_action_arch.get_defined_balance_id(
5884                                                    p_hours_balance_id
5885                                                    ,'_ASG_PAYMENTS'
5886                                                    ,p_legislation_code);
5887                   else
5888                      ln_pymt_hours_balance_id
5889                         := pay_emp_action_arch.get_defined_balance_id(
5890                                                    p_hours_balance_id
5891                                                    ,'_PAYMENTS'
5892                                                    ,p_legislation_code);
5893                   end if;
5894                end if; -- p_action_type in ('B','V')
5895                /* end of addition for reversals and bal adjustments */
5896                hr_utility.trace('ln_pymt_hours_balance_id ' ||
5897                                  ln_pymt_hours_balance_id);
5898 
5899                     hr_utility.set_location(gv_package || lv_procedure_name, 120);
5900             end if; --Hours
5901          end if; -- p_pymt_balcall_aaid is not null
5902 
5903          ln_step := 15;
5904 
5905 	 pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5906 	   := fnd_number.number_to_canonical(ln_ytd_amount);
5907 	   hr_utility.trace('ln_ytd_amount' || nvl(ln_ytd_amount,0));
5908 
5909 	 pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
5910 		 := fnd_number.number_to_canonical(ln_ytd_hours);
5911 	    hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
5912 
5913          /* Following later to be re-valuated IF worth doing wrt Cost
5914 
5915 	    IF count_j is null THEN
5916 		   pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
5917 		   := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
5918 		  hr_utility.trace('ln_ytd_amount' || ln_ytd_amount);
5919 		    pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
5920 		    := fnd_number.number_to_canonical(ln_ytd_hours);
5921 		  hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
5922 	   END IF;
5923 	 */
5924 
5925    EXCEPTION
5926     when others then
5927     hr_utility.trace(' Error In archive_addnl_elements procedure');
5928     hr_utility.trace('error occured at step ' || ln_step );
5929 
5930  END  Archive_addnl_elements;
5931 
5932 
5933 -- New Procedure added by sneelapa for bug 13905220,
5934 --		to introduce new parameter p_sqlstr_final
5935 
5936   Procedure Archive_addnl_elements  (p_application_column_name     in varchar2
5937                                     ,p_xfr_action_id               in  number
5938                                     ,p_assignment_id               in number
5939                                     ,p_pymt_assignment_action_id   in number
5940                                     ,p_pymt_eff_date               in date
5941                                     ,p_element_type_id             in number
5942                                     ,p_primary_balance_id          in number
5943                                     ,p_hours_balance_id            in number
5944                                     ,p_processing_priority         in number
5945                                     ,p_element_classification_name in varchar2
5946                                     ,p_reporting_name              in varchar2
5947                                     ,p_tax_unit_id                 in number
5948                                     ,p_ytd_balcall_aaid            in number
5949                                     ,p_pymt_balcall_aaid           in number
5950                                     ,p_legislation_code            in varchar2
5951                                     ,p_sepchk_flag                 in varchar2
5952                                     ,p_sepchk_run_type_id          in number
5953                                     ,p_action_type                 in varchar2
5954                                     ,p_run_assignment_action_id    in number
5955                                     ,p_multiple                    in number
5956                                     ,p_rate                        in number
5957 																		,p_sqlstr_final								 in varchar2
5958 																		,p_sqlstr_date								 in varchar2
5959                                     )
5960  IS
5961  CURSOR archive_non_retro_elements ( cp_original_date_paid in varchar2,
5962                                     cp_element_entry_id in number,
5963                                     cp_run_assignment_action_id in number ) IS
5964 
5965           select fnd_date.date_to_canonical(ptp.start_date),
5966                  fnd_date.date_to_canonical(ptp.end_date),
5967                 hr_general.decode_lookup
5968                             (DECODE (UPPER (ec.classification_name),
5969                                      'EARNINGS', 'US_EARNINGS',
5970                                      'SUPPLEMENTAL EARNINGS', 'US_SUPPLEMENTAL_EARNINGS',
5971                                      'IMPUTED EARNINGS', 'US_IMPUTED_EARNINGS',
5972                                      'NON-PAYROLL PAYMENTS', 'US_PAYMENT',
5973                                      'ALIEN/EXPAT EARNINGS', 'PER_US_INCOME_TYPES',
5974                                      NULL
5975                                     ),
5976                              et.element_information1
5977                             ) CATEGORY
5978 from pay_assignment_actions paa,
5979      pay_payroll_actions ppa,
5980      per_time_periods ptp,
5981      pay_element_entries_f peef,
5982      pay_element_classifications ec,
5983      pay_element_types et
5984 where paa.assignment_action_id = cp_run_assignment_action_id
5985 and   paa.payroll_action_id   = ppa.payroll_action_id
5986 and   ptp.payroll_id = ppa.payroll_id
5987 and   nvl(cp_original_date_paid,ptp.start_date) between  ptp.start_date AND ptp.end_date
5988 and   peef.element_entry_id = cp_element_entry_id
5989 and   et.element_type_id = peef.element_type_id
5990 and   et.classification_id = ec.classification_id
5991 AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date ;  -- Bug# 16318258
5992 
5993 
5994   Cursor get_element_entry_id( cp_run_action_id in number ,
5995                               cp_assignment_id in number ,
5996                               cp_element_type_id in number ) IS
5997            select peef.element_entry_id,
5998                   peef.creator_type,
5999                   peef.source_start_date
6000  FROM pay_element_entries_f peef,
6001                 pay_assignment_actions paa,
6002                 pay_payroll_actions ppa,
6003                 per_time_periods ptp
6004                 WHERE paa.assignment_action_id = cp_run_action_id
6005             AND ppa.payroll_action_id = paa.payroll_action_id
6006             AND ptp.payroll_id = ppa.payroll_id
6007             AND ppa.date_earned BETWEEN ptp.start_date AND ptp.end_date
6008             AND peef.assignment_id = cp_assignment_id
6009             AND peef.element_type_id = cp_element_type_id
6010 
6011             /* Commenting as Ele Entry Eff Start / End Date may not match the following
6012             AND peef.effective_start_date BETWEEN ptp.start_date AND ptp.end_date
6013             AND peef.effective_end_date BETWEEN ptp.start_date AND ptp.end_date
6014             End of Comment */
6015 
6016             AND NVL(ppa.date_earned, ppa.effective_date) BETWEEN peef.effective_start_date AND peef.effective_end_date
6017 
6018             --ORDER BY 3;
6019             ORDER BY nvl(peef.attribute_category,'Z'), peef.element_entry_id ;
6020 
6021 --bug 7373188
6022 --CURSOR get_run_results ( cp_element_entry_id in number ) IS
6023 CURSOR get_run_results ( cp_run_action_id in number ,cp_element_entry_id in number
6024                          ,cp_pymt_eff_date in date                   -- Bug# 16318258
6025                        ) IS
6026 --bug 7373188
6027 SELECT   to_number(prrv.result_value), pivf.NAME
6028     FROM pay_run_results prr,
6029          pay_run_result_values prrv,
6030          pay_input_values_f pivf
6031    WHERE prr.element_entry_id = cp_element_entry_id
6032 --bug 7373188
6033      and prr.assignment_action_id = cp_run_action_id
6034 --bug 7373188
6035      AND prrv.run_result_id = prr.run_result_id
6036      AND prrv.input_value_id = pivf.input_value_id
6037      AND pivf.NAME IN ('Pay Value', 'Hours')
6038      AND cp_pymt_eff_date between  pivf.effective_start_date and  pivf.effective_end_date        -- Bug# 16318258
6039 ORDER BY 2 ;
6040 -- Introducing This Cussor in case Hours and Pay Values Both zero
6041 --
6042 --bug 7373188
6043 --CURSOR get_run_results_rate( cp_element_entry_id in number ) IS
6044 CURSOR get_run_results_rate( cp_run_action_id in number , cp_element_entry_id in number
6045                        ,cp_pymt_eff_date in date                   -- Bug# 16318258
6046                        ) IS
6047 --bug 7373188
6048 SELECT   to_number(prrv.result_value)
6049     FROM pay_run_results prr,
6050          pay_run_result_values prrv,
6051          pay_input_values_f pivf
6052    WHERE prr.element_entry_id = cp_element_entry_id
6053 --bug 7373188
6054         and prr.assignment_action_id = cp_run_action_id
6055 --bug 7373188
6056      AND prrv.run_result_id = prr.run_result_id
6057      AND prrv.input_value_id = pivf.input_value_id
6058      AND pivf.NAME IN ('Rate')
6059      AND cp_pymt_eff_date between  pivf.effective_start_date and  pivf.effective_end_date;                  -- Bug# 16318258
6060 
6061 -- Added For Work At Home Condition
6062 
6063     CURSOR c_cur_get_wrkathome(cp_assignment_id IN NUMBER
6064                               ,cp_pymt_eff_date in date     -- Bug# 16318258
6065 															) IS
6066       SELECT NVL(paf.work_at_home, 'N')
6067             ,ppf.person_id
6068             ,ppf.business_group_id
6069       FROM per_assignments_f paf
6070           ,per_all_people_f ppf
6071       WHERE paf.assignment_id = cp_assignment_id
6072       AND   paf.person_id = ppf.person_id
6073       and cp_pymt_eff_date between paf.effective_start_date and paf.effective_end_date
6074       and cp_pymt_eff_date between ppf.effective_start_date and ppf.effective_end_date;  -- Bug# 16318258
6075 
6076     CURSOR c_cur_home_state_jd(cp_person_id IN NUMBER
6077                               ,cp_bg_id     IN NUMBER) IS
6078       SELECT pus.state_code || '-000-0000'
6079       FROM per_addresses pa
6080           ,pay_us_states pus
6081       WHERE pa.person_id = cp_person_id
6082       AND   pa.primary_flag = 'Y'
6083       AND   p_pymt_eff_date between pa.date_from AND NVL(pa.date_to, hr_general.END_OF_TIME)
6084       AND   pa.business_group_id = cp_bg_id
6085       AND   pa.region_2 = pus.state_abbrev
6086       AND   pa.style = p_legislation_code;
6087 
6088  lv_original_date_earned         varchar2(100);
6089  lv_effective_start_date         varchar2(100);
6090  lv_effective_end_date           varchar2(100);
6091  lv_category                     varchar2(100);
6092  lv_el_jurisdiction_code         varchar2(100);
6093  ln_final_rate                   number;
6094  ln_element_entry_id             number;
6095  lv_creator_type                 varchar2(100);
6096  lv_jurisdiction_flag            varchar2(20);
6097  ln_element_index                number;
6098  ln_multiple                     number;
6099  ln_rate                         number(10,2);
6100  ln_current_hours           NUMBER(15,5);
6101  ln_payments_amount         NUMBER(15,5);
6102  ln_ytd_hours               NUMBER(15,5) := 0;
6103  ln_ytd_amount              NUMBER(17,5) := 0;
6104 
6105  ln_pymt_defined_balance_id NUMBER;
6106  ln_pymt_hours_balance_id   NUMBER;
6107  ln_ytd_defined_balance_id  NUMBER;
6108  ln_ytd_hours_balance_id    NUMBER;
6109 
6110  lv_rate_exists             VARCHAR2(1) := 'N';
6111  ln_nonpayroll_balcall_aaid NUMBER;
6112 
6113  ln_index                   NUMBER ;
6114  lv_procedure_name          VARCHAR2(100):= '.Archive_addnl_elements';
6115  lv_error_message           VARCHAR2(200);
6116 
6117  ln_step                    NUMBER;
6118  ln_final_ytd_value         NUMBER(15,5);
6119  ld_source_start_date       DATE;
6120  lv_action_category         varchar2(100);
6121  lv_pay_value_name          varchar2(100);
6122  ln_pay_value               number (15,5);
6123  ln_hours                   number(15,5) ;
6124  ln_amount                  number(15,5);
6125  ld_original_date_paid      date;
6126  count_j                    number := null;
6127  result                     number := 0;
6128  lv_sqlstr                  varchar2(500);
6129  lv_check_date              varchar2(100);
6130  ld_check_date              date;
6131  lv_sqlstr1                 varchar2(2500);
6132  lv_temp_AAA                varchar2(100) :='BBB';
6133  lv_sqlstr2                 varchar2(2500);
6134  lv_sqlstr3                 varchar2(2500);
6135  lv_sqlstr4                 varchar2(2500);
6136  lv_sqlstr_final            varchar2(2500);
6137 
6138 -- Added For Work At Home Condition
6139  lv_wrk_at_home                 per_assignments_f.work_at_home%TYPE;
6140  ln_person_id                   per_people_f.person_id%TYPE;
6141  ln_bg_id                       per_people_f.business_group_id%TYPE;
6142 
6143 BEGIN
6144 
6145  hr_utility.trace('Entering in package Archive_addnl_elements');
6146  hr_utility.trace('Run_assignment_action_id = ' || p_run_assignment_action_id) ;
6147  hr_utility.trace('Element Type Id in Non retro Archiver ' || p_element_type_id);
6148  hr_utility.trace('p_application_column_name = ' || p_application_column_name) ;
6149  hr_utility.trace('p_element_type_id = ' || p_element_type_id) ;
6150  hr_utility.trace('p_assignment_id = ' || p_assignment_id) ;
6151 
6152  OPEN get_element_entry_id ( p_run_assignment_action_id,
6153                              p_assignment_id,
6154                              p_element_type_id);
6155  ln_step := 50;
6156 
6157        ln_ytd_hours := 0;
6158        ln_amount := 0;
6159 
6160        lv_sqlstr_final := p_sqlstr_final ;
6161 
6162        EXECUTE IMMEDIATE lv_sqlstr_final INTO  lv_check_date
6163 					USING
6164 				p_run_assignment_action_id, p_assignment_id, p_element_type_id;
6165 
6166  ln_step :=51;
6167  hr_utility.trace('Srini lv_check_date  == ' || lv_check_date);
6168 
6169  LOOP
6170 
6171        FETCH get_element_entry_id INTO ln_element_entry_id,
6172                                        lv_creator_type,
6173                                        ld_source_start_date;
6174      ln_step :=52;
6175        IF  get_element_entry_id%NOTFOUND THEN
6176            close get_element_entry_id;
6177            ln_step :=53;
6178            EXIT;
6179        END IF;
6180                     ln_step :=53;
6181 
6182 					 hr_utility.trace('p_application_column_name  == ' || p_application_column_name);
6183 					 hr_utility.trace('ln_element_entry_id  == ' || ln_element_entry_id);
6184 
6185 					  lv_sqlstr := p_sqlstr_date;
6186 
6187             EXECUTE IMMEDIATE lv_sqlstr
6188             INTO  lv_original_date_earned
6189 						USING ln_element_entry_id;
6190 
6191 					 hr_utility.trace('Srini lv_original_date_earned  == ' || lv_original_date_earned);
6192 
6193              IF  lv_original_date_earned = 'AAA' THEN
6194                  lv_original_date_earned := fnd_date.date_to_canonical( p_pymt_eff_date);
6195                  lv_temp_AAA:= 'AAA' ;
6196              END IF;
6197             lv_original_date_earned := nvl(lv_original_date_earned ,p_pymt_eff_date);
6198 
6199 
6200             hr_utility.trace('lv_original_date_earned in step 53 is' || lv_original_date_earned) ;
6201 
6202            ld_original_date_paid := fnd_date.canonical_to_date(lv_original_date_earned);
6203 
6204        ln_step :=54;
6205        ln_hours := 0;
6206        ln_amount := 0;
6207 --bug 7373188
6208 --       OPEN get_run_results ( ln_element_entry_id );
6209        OPEN get_run_results ( p_run_assignment_action_id,ln_element_entry_id,p_pymt_eff_date);    -- Bug# 16318258
6210 --bug 7373188
6211        LOOP
6212        ln_step := 49;
6213        FETCH get_run_results INTO ln_pay_value ,
6214                                   lv_pay_value_name;
6215        IF get_run_results%FOUND THEN
6216           IF lv_pay_value_name = 'Hours' THEN
6217              ln_hours := ln_hours + ln_pay_value;
6218              hr_utility.trace('ln_ytd_hours  is '|| ln_ytd_hours );
6219           END IF ;
6220 
6221           IF lv_pay_value_name = 'Pay Value' THEN
6222              ln_amount := ln_amount + ln_pay_value ;
6223              hr_utility.trace('ln_ytd_amount  is '|| ln_ytd_amount );
6224           END IF;
6225        ELSE
6226             EXIT;
6227        END IF;
6228        END LOOP;
6229 
6230        ln_step := 48;
6231        IF get_run_results%ISOPEN then
6232        CLOSE get_run_results ;
6233        END IF;
6234 
6235        IF ln_hours = 0 THEN
6236           IF ln_amount = 0 THEN
6237 --bug 7373188
6238 --             OPEN get_run_results_rate(ln_element_entry_id);
6239              OPEN get_run_results_rate(p_run_assignment_action_id,ln_element_entry_id,p_pymt_eff_date);   -- Bug# 16318258
6240 --bug 7373188
6241              FETCH get_run_results_rate INTO ln_rate;
6242              CLOSE get_run_results_rate;
6243           ELSE
6244              ln_rate := NULL;
6245           END IF;
6246        ELSE
6247            ln_rate := ln_amount/ln_hours;
6248        END IF;
6249 
6250        hr_utility.trace('ld_original_date_paid := '||ld_original_date_paid);
6251        hr_utility.trace('ln_element_entry_id := '||ln_element_entry_id);
6252        hr_utility.trace('p_run_assignment_action_id := '||p_run_assignment_action_id);
6253 
6254        OPEN archive_non_retro_elements ( ld_original_date_paid,
6255                                          ln_element_entry_id ,
6256                                      p_run_assignment_action_id );
6257        FETCH archive_non_retro_elements INTO lv_effective_start_date
6258                                          ,lv_effective_end_date
6259                                          ,lv_category;
6260        CLOSE archive_non_retro_elements ;
6261        hr_utility.trace('lv_effective_start_date := '||lv_effective_start_date);
6262        hr_utility.trace('lv_effective_end_date := '||lv_effective_end_date);
6263        hr_utility.trace('lv_category := '||lv_category);
6264 
6265        -- Added For Work At Home Condition
6266        OPEN c_cur_get_wrkathome(p_assignment_id,p_pymt_eff_date);   -- Bug# 16318258
6267        FETCH c_cur_get_wrkathome INTO lv_wrk_at_home
6268                                      ,ln_person_id
6269                                      ,ln_bg_id;
6270        CLOSE c_cur_get_wrkathome;
6271        IF lv_wrk_at_home = 'Y' THEN
6272                OPEN c_cur_home_state_jd(ln_person_id
6273                                   ,ln_bg_id);
6274                FETCH c_cur_home_state_jd INTO lv_jurisdiction_flag;
6275                CLOSE c_cur_home_state_jd;
6276        ELSE
6277 
6278           SELECT nvl((select peevf.screen_entry_value  jurisdiction_code
6279                     from pay_input_values_f pivf,
6280                          pay_element_entry_values_f peevf
6281                     where pivf.element_type_id = p_element_type_id
6282                     AND pivf.NAME = 'Jurisdiction'
6283                     AND peevf.element_entry_id =  ln_element_entry_id
6284                     AND pivf.input_value_id = peevf.input_value_id
6285                     AND p_pymt_eff_date between pivf.effective_start_date AND pivf.effective_end_date),  -- Bug# 16318258
6286                (SELECT   distinct pus.state_code
6287                || '-'
6288                || puc.county_code
6289                || '-'
6290                || punc.city_code jurisdiction_code
6291                FROM per_all_assignments_f peaf,
6292                hr_locations_all hla,
6293                pay_us_states pus,
6294                pay_us_counties puc,
6295                pay_us_city_names punc,
6296                pay_assignment_actions paa,
6297                pay_payroll_actions ppa
6298          WHERE peaf.assignment_id = p_assignment_id
6299            AND paa.assignment_action_id = p_run_assignment_action_id
6300            AND peaf.location_id = hla.location_id
6301            AND hla.region_2 = pus.state_abbrev
6302            AND pus.state_code = puc.state_code
6303            AND hla.region_1 = puc.county_name
6304            AND hla.town_or_city = punc.city_name
6305            AND pus.state_code = punc.state_code
6306            AND puc.county_code = punc.county_code
6307            AND ppa.payroll_action_id = paa.payroll_action_id
6308            AND ppa.effective_date between peaf.effective_start_date and peaf.effective_end_date
6309            ))
6310            into lv_jurisdiction_flag
6311            from dual;
6312       END IF; -- Work at Home 'N'
6313 
6314            hr_utility.trace('lv_jurisdiction_flag := '||lv_jurisdiction_flag);
6315            lv_action_category := 'AC EARNINGS';
6316            ln_step := 15;
6317            ln_index := pay_ac_action_arch.lrr_act_tab.count;
6318 
6319               pay_ac_action_arch.lrr_act_tab(ln_index).act_info11
6320                      := fnd_number.number_to_canonical(ln_hours);
6321               hr_utility.trace('pay_ac_action_arch.lrr_act_tab(ln_index).act_info11' || pay_ac_action_arch.lrr_act_tab(ln_index).act_info11 );/*Bug 3311866*/
6322              hr_utility.set_location(gv_package || lv_procedure_name, 130);
6323             /* Insert this into the plsql table if Current or YTD
6324                amount is not Zero */
6325               ln_step :=21;
6326              pay_ac_action_arch.lrr_act_tab(ln_index).action_info_category
6327                     := lv_action_category;
6328               ln_step :=22;
6329              pay_ac_action_arch.lrr_act_tab(ln_index).jurisdiction_code
6330                    :=  '00-000-0000' ;
6331               ln_step :=23;
6332              pay_ac_action_arch.lrr_act_tab(ln_index).action_context_id
6333                    := p_xfr_action_id;
6334               ln_step :=24;
6335              pay_ac_action_arch.lrr_act_tab(ln_index).act_info1
6336                    := p_element_classification_name;
6337               ln_step :=25;
6338              pay_ac_action_arch.lrr_act_tab(ln_index).act_info2
6339                    := p_element_type_id;
6340              pay_ac_action_arch.lrr_act_tab(ln_index).act_info6
6341                    := p_primary_balance_id;
6342              pay_ac_action_arch.lrr_act_tab(ln_index).act_info7
6343                    := p_processing_priority;
6344              pay_ac_action_arch.lrr_act_tab(ln_index).act_info8
6345                    := fnd_number.number_to_canonical(nvl(ln_amount,0));
6346                    pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
6347                            := fnd_number.number_to_canonical(0);
6348 
6349    hr_utility.trace('ln_amount := '||fnd_number.number_to_canonical(nvl(ln_amount,0)));
6350              pay_ac_action_arch.lrr_act_tab(ln_index).act_info10
6351                    := p_reporting_name;
6352 
6353          IF lv_temp_AAA <> 'AAA' THEN
6354              pay_ac_action_arch.lrr_act_tab(ln_index).act_info17
6355                    := lv_original_date_earned;
6356                    hr_utility.trace('lv_original_date_earned :=' || lv_original_date_earned );
6357 
6358                IF lv_check_date = nvl(lv_original_date_earned,p_pymt_eff_date) THEN
6359                   count_j := ln_index;
6360                END IF;
6361              pay_ac_action_arch.lrr_act_tab(ln_index).act_info18
6362                    := lv_effective_start_date;
6363                    hr_utility.trace('lv_effective_start_date := ' || lv_effective_start_date );
6364              pay_ac_action_arch.lrr_act_tab(ln_index).act_info19
6365                    := lv_effective_end_date ;
6366                   hr_utility.trace('lv_effective_end_date:= ' || lv_effective_end_date );
6367              pay_ac_action_arch.lrr_act_tab(ln_index).act_info20
6368                    := lv_category;
6369                    hr_utility.trace('lv_category ' || lv_category );
6370              pay_ac_action_arch.lrr_act_tab(ln_index).act_info21
6371                    := lv_jurisdiction_flag;
6372          END IF;
6373 
6374               pay_ac_action_arch.lrr_act_tab(ln_index).act_info22
6375                    := round(ln_rate,2);
6376              /*
6377              IF pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 IS NULL THEN
6378                 pay_ac_action_arch.lrr_act_tab(ln_index).act_info22 := 'N/A';
6379              END IF;
6380              */
6381 
6382       hr_utility.set_location(gv_package || lv_procedure_name, 150);
6383       ln_step := 20;
6384       lv_temp_AAA := 'BBB' ;
6385        end loop;
6386 
6387        /* Code added for doing balance call for YTD */
6388                 if pay_emp_action_arch.gv_multi_leg_rule is null then
6389          pay_emp_action_arch.gv_multi_leg_rule
6390                := pay_emp_action_arch.get_multi_legislative_rule(
6391                                                   p_legislation_code);
6392       end if;
6393 
6394       pay_balance_pkg.set_context('JURISDICTION_CODE', null);
6395          if gv_reporting_level = 'TAXGRP' then
6396             gv_ytd_balance_dimension := gv_dim_asg_tg_ytd;
6397          else
6398             gv_ytd_balance_dimension := gv_dim_asg_gre_ytd;
6399          end if;
6400 
6401             /*********************************************************
6402       ** Get the defined balance_id for YTD call as it will be
6403       ** same for all classification types.
6404       *********************************************************/
6405       ln_ytd_defined_balance_id
6406                 := pay_emp_action_arch.get_defined_balance_id(
6407                                              p_primary_balance_id,
6408                                              gv_ytd_balance_dimension,
6409                                              p_legislation_code);
6410 
6411       hr_utility.trace('ln_ytd_defined_balance_id = ' ||
6412                           ln_ytd_defined_balance_id);
6413 
6414       ln_step := 4;
6415       if p_hours_balance_id is not null then
6416          hr_utility.set_location(gv_package || lv_procedure_name, 20);
6417          ln_ytd_hours_balance_id
6418                 := pay_emp_action_arch.get_defined_balance_id(
6419                                             p_hours_balance_id,
6420                                             gv_ytd_balance_dimension,
6421                                             p_legislation_code);
6422 
6423            hr_utility.trace('ln_ytd_hours_balance_id = ' ||
6424                              ln_ytd_hours_balance_id);
6425 
6426       end if;
6427 
6428       ln_step := 5;
6429       hr_utility.set_location(gv_package || lv_procedure_name, 40);
6430          if ln_ytd_defined_balance_id is not null then
6431             ln_ytd_amount := nvl(pay_balance_pkg.get_value(
6432                                       ln_ytd_defined_balance_id,
6433                                       p_ytd_balcall_aaid),0);
6434          end if;
6435 
6436          if p_hours_balance_id is not null then
6437             hr_utility.set_location(gv_package || lv_procedure_name, 50);
6438             if ln_ytd_hours_balance_id is not null then
6439                ln_ytd_hours := nvl(pay_balance_pkg.get_value(
6440                                       ln_ytd_hours_balance_id,
6441                                       p_ytd_balcall_aaid),0);
6442                hr_utility.set_location(gv_package || lv_procedure_name, 60);
6443             end if;
6444          end if; --Hours
6445 
6446          ln_step := 8;
6447          if p_pymt_balcall_aaid is not null then
6448             ln_step := 10;
6449             /* Added dimension _ASG_GRE_RUN for reversals and Balance
6450                Adjustments for Canada. Bug#3498653 */
6451             if p_action_type in ('B','V') then
6452                ln_pymt_defined_balance_id
6453                     := pay_emp_action_arch.get_defined_balance_id(
6454                                                  p_primary_balance_id,
6455                                                  '_ASG_GRE_RUN',
6456                                                  p_legislation_code);
6457             else
6458                if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
6459                   ln_pymt_defined_balance_id
6460                      := pay_emp_action_arch.get_defined_balance_id(
6461                                                  p_primary_balance_id,
6462                                                  '_ASG_PAYMENTS',
6463                                                  p_legislation_code);
6464                else
6465                   ln_pymt_defined_balance_id
6466                      := pay_emp_action_arch.get_defined_balance_id(
6467                                                  p_primary_balance_id,
6468                                                  '_PAYMENTS',
6469                                                  p_legislation_code);
6470                end if;
6471             end if; -- p_action_type in ('B','V')
6472             /* end of addition for Reversals and bal adjustments */
6473             hr_utility.trace('ln_pymt_defined_balance_id ' ||
6474                               ln_pymt_defined_balance_id);
6475 
6476             if ln_pymt_defined_balance_id is not null then
6477                ln_payments_amount := nvl(pay_balance_pkg.get_value(
6478                                                ln_pymt_defined_balance_id,
6479                                                p_pymt_balcall_aaid),0);
6480                hr_utility.trace('ln_payments_amount = ' ||ln_payments_amount);
6481             end if;
6482 
6483             if p_hours_balance_id is not null then
6484                /* Added dimension _ASG_GRE_RUN for reversals and Balance
6485                   Adjustments for Canada. Bug#3498653 */
6486                if p_action_type in ('B','V') then
6487                   ln_pymt_hours_balance_id
6488                         := pay_emp_action_arch.get_defined_balance_id(
6489                                                    p_hours_balance_id
6490                                                    ,'_ASG_GRE_RUN'
6491                                                    ,p_legislation_code);
6492                else
6493                   if pay_emp_action_arch.gv_multi_leg_rule = 'Y' then
6494                      ln_pymt_hours_balance_id
6495                         := pay_emp_action_arch.get_defined_balance_id(
6496                                                    p_hours_balance_id
6497                                                    ,'_ASG_PAYMENTS'
6498                                                    ,p_legislation_code);
6499                   else
6500                      ln_pymt_hours_balance_id
6501                         := pay_emp_action_arch.get_defined_balance_id(
6502                                                    p_hours_balance_id
6503                                                    ,'_PAYMENTS'
6504                                                    ,p_legislation_code);
6505                   end if;
6506                end if; -- p_action_type in ('B','V')
6507                /* end of addition for reversals and bal adjustments */
6508                hr_utility.trace('ln_pymt_hours_balance_id ' ||
6509                                  ln_pymt_hours_balance_id);
6510 
6511                     hr_utility.set_location(gv_package || lv_procedure_name, 120);
6512             end if; --Hours
6513          end if; -- p_pymt_balcall_aaid is not null
6514 
6515          ln_step := 15;
6516 
6517 	 pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
6518 	   := fnd_number.number_to_canonical(ln_ytd_amount);
6519 	   hr_utility.trace('ln_ytd_amount' || nvl(ln_ytd_amount,0));
6520 
6521 	 pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
6522 		 := fnd_number.number_to_canonical(ln_ytd_hours);
6523 	    hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
6524 
6525          /* Following later to be re-valuated IF worth doing wrt Cost
6526 
6527 	    IF count_j is null THEN
6528 		   pay_ac_action_arch.lrr_act_tab(ln_index).act_info9
6529 		   := fnd_number.number_to_canonical(nvl(ln_ytd_amount,0));
6530 		  hr_utility.trace('ln_ytd_amount' || ln_ytd_amount);
6531 		    pay_ac_action_arch.lrr_act_tab(ln_index).act_info12
6532 		    := fnd_number.number_to_canonical(ln_ytd_hours);
6533 		  hr_utility.trace('ln_ytd_hours' || ln_ytd_hours);
6534 	   END IF;
6535 	 */
6536 
6537    EXCEPTION
6538     when others then
6539     hr_utility.trace(' Error In archive_addnl_elements procedure');
6540     hr_utility.trace('error occured at step ' || ln_step );
6541 
6542  END  Archive_addnl_elements;
6543 
6544 
6545 
6546 END pay_ac_action_arch;