DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_US_DEPOSIT_ADVICE_PKG

Source


1 PACKAGE BODY pay_us_deposit_advice_pkg AS
2 /* $Header: payuslivearchive.pkb 120.14.12010000.9 2009/09/25 16:55:20 rnestor 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, CA, 94065.                  *
17    *                                                                *
18    ******************************************************************
19 
20     Name        : pay_us_deposit_advice_pkg.pkb
21 
22     Description : Package used for Deposit Advice Report.
23 
24     Change List
25     -----------
26     Date       Name        Vers	    Bug		 Description
27     ---------- ----------  ------  --------	 -----------------------------------
28     08-JUN-2004 RMONGE     115.0		 Created.
29 						 This package is a copy of the
30 						 pyusdar.pkb.
31 
32 						 Please refer to the old package body
33 						 for a history of changes.
34 
35     25-JUN-2004 RMONGE     115.1		 Replace existing version of this package with the
36 						 version 115.33 from pyusdar.pkb as required.
37 
38     02-JUL-2004 schauhan   115.2   3512116       1.Changed the query for cursor c_paid_actions in
39 						 procedure archive_action_creation for better
40 						 performance.
41 						 2.Removed cursor c_actions_zero_pay in procedure
42 						 archive_action_creation and added its logic to
43 						 function check_if_assignment_paid.
44 						 3.Changed query for range_cursor for better
45 						 performance.
46 						 4.Removed function get_parameter and used function
47 						 pay_us_payroll_utils.get_parameter instead.
48 						 5.Added function get_payroll_action which returns
49 						 payroll_action data.
50    04-AUG-2004 schauhan    115.3  3512116        Added assignment_set_id in the return list of
51                                                  procedure get_payroll_action.
52    18-OCT-2004 schauhan    115.4  3928576        Made changes to cursor c_actions_zero_pay to check
53                                                  only if assignment_action_id for master action is
54 						 is there pay_pre_payments.
55    14-MAR-2005 sackumar    115.5  4222032	Change in the Range Cursor removing redundant
56 						use of bind Variable (:payroll_action_id)
57    29-MAR-2005 sackumar    115.6  4222032	Removing GSCC Errors
58    29-APR-2005 sackumar    115.7  3812668       Merge the concept of Zero pay cursor into c_actions
59                                                 cursor and introduce a new cursor c_actions_assign_set
60 						and also introduce a Zero_pay_flag to process the
61 						Zero pay concept.
62    31-may-2005 djoshi      115.10               Performance Fix for action creation based on
63                                                 city of Chicago tar. 4190348.996
64    06-JUN-2005 rsethupa    115.11 4406538       Changed cursor c_paid_actions in
65                                                 archive_action_creation procedure to use the
66 						exact names TRANSFER_CONSOLIDATION_SET_ID and
67 						TRANSFER_PAYROLL_ID while calling
68 						pay_us_payroll_utils.get_parameter()
69    29-Sep-2005 sackumar    115.12 4631914	Modified the payroll_id join condition in c_paid_actions
70 						query in action_creation procedure
71    06-Oct-2005 sackumar    115.13 4636646	Modified the c_paid_actions cursor query in
72 						action_creation procedure for Zero Pay assignment.
73    26-Nov-2005 sackumar    115.14 4742901	Modified the c_paid_actions cursor query in
74 						action_creation procedure to resolve the
75 						performance issues.
76    16-Dec-2005 tclewis	   115.15		added code to check for the existance of data in the
77 			                        pay_action_information table.  thie is to fix a problem
78 						with the zero (gross, net) pay assignment being picked up
79 						by in the archive_action_creation procedure.
80    23-Jan-2006 sackumar    115.18 4945604       Modified the C_action_asg_set Cursor in action_creation procedure
81    24-May-2007 sudedas     115.21 5635335       Procedure archive_deinit has
82                                                 been added to be used by Archive
83                                                 Deposit Advice (PDF) Process.
84    27-Jun-2007 sudedas     115.22               Added Qualifying Procedure and Function
85                                                 check_if_qualified_for_US. This is for
86                                                 Archive Deposit Advice producing XML
87                                                 using Global Payslip Printing Solution
88    03-OCT-2008 rnestor    115.25              Modified the c_no_prepayments cursor to exclude Third Party Payments
89    15-Jan-2009 sudedas    115.26   7583387   Added function get_DAxml_payroll_action
90                                              ,DAxml_range_cursor and changed
91                                              qualifying_proc.
92    21-Jan-2009 sudedas    115.27   7583387   Changed Function DAxml_range_cursor
93                                              to Procedure.
94                           115.28   7583387   Added NOCOPY hint for OUT variable.
95    17-feb-2009            115.29   8254078   <> NULL replaced with is not NULL
96                                              in the c_no_prepayments cursor
97    01-Apr-2009            115.30   7558310	Modified Cursor c_paid_actions to include all the
98 						assignment actions whose payroll archive falls
99 						between deposit advice's start date and end date.
100    25-SEP-09  rnestor    115.31    8941027 	Removed source_id is null CURSOR csr_inc_asg
101                                            and CURSOR csr_asg.
102     **********************************************************************/
103 
104   /**********************************************************************
105  ** PROCEDURE   : get_payroll_action
106  ** Description: Bug 3512116
107  **              This procedure returns the details for payroll action for
108  **              deposit advice. This is called in the range cursor.
109  **********************************************************************/
110  PROCEDURE get_payroll_action(p_payroll_action_id     in number
111                              ,p_deposit_start_date   out nocopy date
112                              ,p_deposit_end_date     out nocopy date
113                              ,p_assignment_set_id    out nocopy number
114                              ,p_payroll_id           out nocopy number
115                              ,p_consolidation_set_id out nocopy number
116                              )
117  IS
118 
119    cursor c_get_payroll_action
120                  (cp_payroll_action_id in number) is
121      select legislative_parameters,
122             start_date,
123             effective_date
124        from pay_payroll_actions
125       where payroll_action_id = cp_payroll_action_id;
126 
127    lv_legislative_parameters  VARCHAR2(2000);
128 
129    ln_assignment_set_id       NUMBER;
130    ln_payroll_id              NUMBER;
131    ln_consolidation_set_id    NUMBER;
132    ld_deposit_start_date      DATE;
133    ld_deposit_end_date        DATE;
134 
135  BEGIN
136    open c_get_payroll_action(p_payroll_action_id);
137    fetch c_get_payroll_action into lv_legislative_parameters,
138                                    ld_deposit_start_date,
139                                    ld_deposit_end_date;
140    close c_get_payroll_action;
141 
142    ln_assignment_set_id := pay_us_payroll_utils.get_parameter(
143                              'ASG_SET_ID',
144                              lv_legislative_parameters);
145    ln_payroll_id := pay_us_payroll_utils.get_parameter(
146                              'PAYROLL_ID',
147                              lv_legislative_parameters);
148    ln_consolidation_set_id := pay_us_payroll_utils.get_parameter(
149                                 'CONSOLIDATION_SET_ID',
150                                lv_legislative_parameters);
151 
152    p_deposit_start_date   := ld_deposit_start_date;
153    p_deposit_end_date     := ld_deposit_end_date;
154    p_payroll_id           := ln_payroll_id;
155    p_assignment_set_id    := ln_assignment_set_id;
156    p_consolidation_set_id := ln_consolidation_set_id;
157 
158  END get_payroll_action;
159 
160   /**********************************************************************
161  ** PROCEDURE   : get_DAxml_payroll_action
162  **              This procedure returns the details for payroll action for
163  **              Deposit Advice(XML). This is called in the range cursor.
164  **********************************************************************/
165  PROCEDURE get_DAxml_payroll_action(p_payroll_action_id     in number
166                              ,p_deposit_start_date   out nocopy date
167                              ,p_deposit_end_date     out nocopy date
168                              ,p_assignment_set_id    out nocopy number
169                              ,p_payroll_id           out nocopy number
170                              ,p_consolidation_set_id out nocopy number
171                              )
172  IS
173 
174    cursor c_get_payroll_action
175                  (cp_payroll_action_id in number) is
176      select legislative_parameters,
177             start_date,
178             effective_date
179        from pay_payroll_actions
180       where payroll_action_id = cp_payroll_action_id;
181 
182    lv_legislative_parameters  VARCHAR2(2000);
183 
184    ln_assignment_set_id       NUMBER;
185    ln_payroll_id              NUMBER;
186    ln_consolidation_set_id    NUMBER;
187    ld_deposit_start_date      DATE;
188    ld_deposit_end_date        DATE;
189 
190  BEGIN
191    hr_utility.trace('Entering get_DAxml_payroll_action');
192    open c_get_payroll_action(p_payroll_action_id);
193    fetch c_get_payroll_action into lv_legislative_parameters,
194                                    ld_deposit_start_date,
195                                    ld_deposit_end_date;
196    hr_utility.trace('lv_legislative_parameters := ' || lv_legislative_parameters);
197    hr_utility.trace('ld_deposit_start_date := ' || TO_CHAR(ld_deposit_start_date));
198    hr_utility.trace('ld_deposit_end_date := ' || TO_CHAR(ld_deposit_end_date));
199 
200    close c_get_payroll_action;
201 
202    ln_assignment_set_id := pay_us_payroll_utils.get_parameter(
203                              'ASSIGNMENT_SET_ID',
204                              lv_legislative_parameters);
205    ln_payroll_id := pay_us_payroll_utils.get_parameter(
206                              'PAYROLL_ID',
207                              lv_legislative_parameters);
208    ln_consolidation_set_id := pay_us_payroll_utils.get_parameter(
209                                 'CONSOLIDATION_SET_ID',
210                                lv_legislative_parameters);
211 
212    hr_utility.trace('ln_assignment_set_id := ' || ln_assignment_set_id);
213    hr_utility.trace('ln_payroll_id := ' || ln_payroll_id);
214    hr_utility.trace('ln_consolidation_set_id := ' || ln_consolidation_set_id);
215 
216    p_deposit_start_date   := ld_deposit_start_date;
217    p_deposit_end_date     := ld_deposit_end_date;
218    p_payroll_id           := ln_payroll_id;
219    p_assignment_set_id    := ln_assignment_set_id;
220    p_consolidation_set_id := ln_consolidation_set_id;
221 
222    hr_utility.trace('Leaving get_DAxml_payroll_action');
223 
224  END get_DAxml_payroll_action;
225 
226  /********************************************************************
227  ** Procedure  : range_cursor
228  ** Description: This is used for both Live and Archive Deposit
229  **              advice reports.
230  ********************************************************************/
231  PROCEDURE range_cursor (pactid in number, sqlstr out NOCOPY varchar2)
232  IS
233 
234    ln_assignment_set_id       NUMBER;
235    ln_payroll_id              NUMBER;
236    ln_consolidation_set_id    NUMBER;
237    ld_deposit_start_date      DATE;
238    ld_deposit_end_date        DATE;
239 
240    --Bug 3331028
241    l_db_version varchar2(20);
242 
243  BEGIN
244    get_payroll_action(p_payroll_action_id    => pactid
245                      ,p_deposit_start_date   => ld_deposit_start_date
246                      ,p_deposit_end_date     => ld_deposit_end_date
247                      ,p_assignment_set_id    => ln_assignment_set_id
248                      ,p_payroll_id           => ln_payroll_id
249                      ,p_consolidation_set_id => ln_consolidation_set_id);
250 
251   --Database Version --Bug 3331028
252   if (nvl(hr_general2.get_oracle_db_version, 0) < 10.0) then
253      l_db_version := '/*+ RULE */';
254   else
255      l_db_version := '/* NO RULE*/';
256   end if;
257 
258 -- Query is modified for better performance Bug3512116--
259 
260   if ln_payroll_id is not null then
261      sqlstr := 'select '||l_db_version||' distinct paa.assignment_id
262                   from pay_assignment_actions paa,
263                        pay_payroll_actions    ppa
264                  where :payroll_action_id is not null
265                    and ppa.action_type in (''R'',''Q'')
266                    and ppa.consolidation_set_id = ' || ln_consolidation_set_id
267               || ' and ppa.payroll_id = ' || ln_payroll_id
268               || ' and ppa.effective_date between ''' || ld_deposit_start_date
269               ||                            ''' and ''' || ld_deposit_end_date
270               || ''' and paa.payroll_action_id = ppa.payroll_action_id
271                 order by paa.assignment_id';
272 
273   else
274      sqlstr := 'select '||l_db_version||' distinct paa.assignment_id
275                   from pay_assignment_actions paa,
276                        pay_payroll_actions    ppa
277                  where :payroll_action_id is not null
278                    and ppa.action_type in (''R'',''Q'')
279                    and ppa.consolidation_set_id = ' || ln_consolidation_set_id
280               || ' and ppa.effective_date between ''' || ld_deposit_start_date
281               ||                            ''' and ''' || ld_deposit_end_date
282               || ''' and paa.payroll_action_id = ppa.payroll_action_id
283                 order by paa.assignment_id';
284   end if;
285 
286  END RANGE_CURSOR;
287 
288  /**********************************************************************
289  ** FUNCTION   : check_if_assignment_paid
290  ** Parameters :
291  ** Description: Bug 3512116
292  **              Function call is added for eliminating the cursor
293  **              c_actions_zero_pay. This is called in the archive
294  **              action creation cursor
295  **********************************************************************/
296  FUNCTION check_if_assignment_paid(p_prepayment_action_id in number,
297                                    p_deposit_start_date   in date,
298                                    p_deposit_end_date     in date,
299                                    p_consolidation_set_id in number)
300  RETURN VARCHAR2
301  IS
302 
303    cursor c_nacha_run
304              (cp_prepayment_action_id in number,
305               cp_deposit_start_date   in date,
306               cp_deposit_end_date     in date,
307               cp_consolidation_set_id in number
308              ) is
309      select 1
310        from dual
311       where exists
312             (select 1
313                from pay_action_interlocks pai_mag,
314                     pay_assignment_actions paa_mag,
315                     pay_payroll_actions    ppa_mag,
316                     pay_org_payment_methods_f popm,
317                     pay_pre_payments ppp,
318                     pay_payment_types ppt
319               where pai_mag.locked_action_id  = cp_prepayment_action_id
320                 and pai_mag.locking_Action_id = paa_mag.assignment_action_id
321                 and paa_mag.payroll_action_id = ppa_mag.payroll_action_id
322                 and ppa_mag.action_type       = 'M'
323 
324                 and pai_mag.locked_action_id  = ppp.assignment_action_id
325                 and ppp.value > 0
326                 and  ppp.org_payment_method_id = popm.org_payment_method_id
327                 and ppa_mag.effective_date between popm.effective_start_date
328                                                and popm.effective_end_date
329                 and popm.DEFINED_BALANCE_ID is not null
330                 and popm.payment_type_id       = ppt.payment_type_id
331                 and ppt.territory_code = 'US'
332                 and ppt.payment_type_name = 'NACHA'
333 
334                 and ppa_mag.effective_date between cp_deposit_start_date
335                                                and cp_deposit_end_date
336                 and ppa_mag.consolidation_set_id +0 = cp_consolidation_set_id
337                 and ppa_mag.ORG_PAYMENT_METHOD_ID   = popm.org_payment_method_id);
338 
339    cursor c_no_prepayments (cp_prepayment_action_id in number) is
340      select 1
341        from dual
342       where not exists
343                  (select 1
344                    from pay_pre_payments ppp ,
345                         pay_org_payment_methods_f popm
346                    where ppp.assignment_action_id = cp_prepayment_action_id
347                    and popm.ORG_PAYMENT_METHOD_ID = ppp.org_payment_method_id
348                    and popm.defined_balance_id is not NULL );
349 
350    lc_nacha_flag         VARCHAR2(1);
351    lc_no_prepayment_flag VARCHAR2(1);
352 
353    lc_return_flag        VARCHAR2(1);
354 
355  BEGIN
356    hr_utility.trace(' p_prepayment_action_id '|| p_prepayment_action_id);
357    hr_utility.trace(' p_deposit_start_date '  || to_char(p_deposit_start_date));
358    hr_utility.trace(' p_deposit_end_date '    || to_char(p_deposit_end_date));
359    hr_utility.trace(' p_consolidation_set_id '|| p_consolidation_set_id);
360 
361    lc_return_flag := 'N';
362    open c_nacha_run(p_prepayment_action_id,
363                     p_deposit_start_date,
364                     p_deposit_end_date,
365                     p_consolidation_set_id);
366    fetch c_nacha_run into lc_nacha_flag;
367    if c_nacha_run%found then
368       lc_return_flag := 'Y';
369    else
370       open c_no_prepayments(p_prepayment_action_id);
371       fetch c_no_prepayments into lc_no_prepayment_flag;
372       if c_no_prepayments%found then
373          lc_return_flag := 'Y';
374       end if;
375       close c_no_prepayments;
376    end if;
377    close c_nacha_run;
378 
379    return (lc_return_flag);
380 
381  END check_if_assignment_paid;
382  --
383  --
384 FUNCTION check_if_qualified_for_US(p_archive_action_id IN NUMBER
385                                   ,p_assignment_id IN NUMBER
386                                   ,p_deposit_start_date IN DATE
387                                   ,p_deposit_end_date IN DATE
388                                   ,p_consolidation_set_id IN NUMBER)
389 RETURN VARCHAR2
390 IS
391 /****************************************************************
392 ** If archiver is locking the pre-payment assignment_action_id,
393 ** we get it from interlocks.
394 ****************************************************************/
395     cursor c_prepay_arch_action(cp_assignment_action_id in number) is
396       select paa.assignment_action_id
397         from pay_action_interlocks paci,
398              pay_assignment_actions paa,
399              pay_payroll_actions ppa
400        where paci.locking_action_id = cp_assignment_action_id
401          and paa.assignment_action_id = paci.locked_action_id
402          and ppa.payroll_action_id = paa.payroll_action_id
403          and ppa.action_type in ('P', 'U');
404 
405 /****************************************************************
406 ** If archiver is locking the run assignment_action_id, we get
407 ** the corresponding run assignment_action_id and then get
408 ** the pre-payment assignemnt_action_id.
409 ** This cursor is only required when there are child action which
410 ** means there is a seperate check.
411 * ***************************************************************/
412     cursor c_prepay_run_arch_action(cp_assignment_action_id in number) is
413       select paa_pre.assignment_action_id
414         from pay_action_interlocks pai_run,
415              pay_action_interlocks pai_pre,
416              pay_assignment_actions paa_pre,
417              pay_payroll_actions ppa_pre
418        where pai_run.locking_action_id = cp_assignment_action_id
419          and pai_pre.locked_action_id = pai_run.locked_action_id
420          and paa_pre.assignment_Action_id = pai_pre.locking_action_id
421          and ppa_pre.payroll_action_id = paa_pre.payroll_action_id
422          and ppa_pre.action_type in ('P', 'U');
423 
424      ln_prepay_action_id   NUMBER;
425      lv_rev_run_exists     VARCHAR2(1);
426   BEGIN
427     --
428     --
429     hr_utility.trace('Entering check_if_qualified_for_US');
430 
431     OPEN c_prepay_arch_action(p_archive_action_id);
432     FETCH c_prepay_arch_action INTO ln_prepay_action_id;
433     IF c_prepay_arch_action%notfound THEN
434        OPEN c_prepay_run_arch_action(p_archive_action_id);
435        FETCH c_prepay_run_arch_action INTO ln_prepay_action_id;
436        IF c_prepay_run_arch_action%notfound THEN
437           RETURN('N');
438        END IF;
439        CLOSE c_prepay_run_arch_action;
440     END IF;
441     CLOSE c_prepay_arch_action;
442     --
443     --
444     hr_utility.trace('ln_prepay_action_id :='||ln_prepay_action_id);
445 
446     IF  pay_us_employee_payslip_web.get_doc_eit(
447                              'PAYSLIP'
448                              ,'PRINT'
449                              ,'ASSIGNMENT'
450                              ,p_assignment_id
451                              ,p_deposit_end_date) = 'Y'
452         AND pay_us_deposit_advice_pkg.check_if_assignment_paid(
453                                ln_prepay_action_id
454                               ,p_deposit_start_date
455                               ,p_deposit_end_date
456                               ,p_consolidation_set_id) = 'Y' --Bug 3512116
457      THEN
458 
459         lv_rev_run_exists := NULL;
460 
461         BEGIN
462             SELECT '1'
463             INTO   lv_rev_run_exists
464             FROM   dual
465             where exists
466                    (Select  /*+ ORDERED */  1
467                       from pay_action_interlocks   pai_run, --Pre > Run
468                            pay_action_interlocks   pai_rev, --Run > Rev
469                            pay_assignment_actions  paa_rev, --Rev
470                            pay_payroll_actions     ppa_rev  --Rev
471                      where pai_run.locking_action_id = ln_prepay_action_id
472                        and pai_rev.locked_action_id = pai_run.locked_action_id
473                        and paa_rev.assignment_action_id = pai_run.locking_action_id
474                        and ppa_rev.payroll_action_id = paa_rev.payroll_action_id
475                        and ppa_rev.action_type in ('V')
476                     );
477          EXCEPTION
478          WHEN OTHERS THEN
479               lv_rev_run_exists := NULL;
480          END;
481 
482          IF lv_rev_run_exists = '1' then
483             RETURN 'N';
484          ELSE
485             RETURN 'Y';
486          END IF;
487     ELSE
488        RETURN 'N';
489     END IF;
490 END check_if_qualified_for_US;
491 
492  /*********************************************************************
493  ** Name       : archive_action_creation
494  ** Description: Archive Assignment Action for archive deposit advice report
495  **
496  *********************************************************************/
497  PROCEDURE archive_action_creation(pactid    in number,
498                                    stperson  in number,
499                                    endperson in number,
500                                    chunk     in number)
501  IS
502 
503    -- Bug 3512116 -- Cursor changed to improve performance.
504    cursor c_paid_actions
505               (cp_start_person         in number,
506                cp_end_person           in number,
507                cp_payroll_id           in number,
508                cp_consolidation_set_id in number,
509                cp_deposit_start_date   in date,
510                cp_deposit_end_date     in date) is
511      select /*+ ORDERED */
512         paa_xfr.assignment_action_id,
513         paa_xfr.assignment_id,
514         paa_xfr.tax_unit_id
515        from
516             pay_payroll_actions    ppa_xfr,
517             pay_assignment_actions paa_xfr,
518             pay_action_interlocks  pai_pre
519       where ppa_xfr.report_type = 'XFR_INTERFACE'
520         and ppa_xfr.report_category = 'RT'
521         and ppa_xfr.report_qualifier = 'FED'
522 	/* Bug : 7558310
523         and cp_deposit_end_date between ppa_xfr.start_date
524                                     and ppa_xfr.effective_date */
525 	and ppa_xfr.effective_date between cp_deposit_start_date and cp_deposit_end_date
526         and pay_us_payroll_utils.get_parameter('TRANSFER_CONSOLIDATION_SET_ID',
527                                                ppa_xfr.legislative_parameters)
528                  = cp_consolidation_set_id
529         and paa_xfr.payroll_action_id = ppa_xfr.payroll_action_id
530         -- the statement below will make sure only Pre Payment Archive Actions are picked up
531         and substr(paa_xfr.serial_number,1,1) not in ('V', 'B')
532         and pai_pre.locking_Action_id = paa_xfr.assignment_action_id
533         and (cp_payroll_id is null
534              or
535              pay_us_payroll_utils.get_parameter('TRANSFER_PAYROLL_ID',
536                                                 ppa_xfr.legislative_parameters)
537                   = cp_payroll_id
538              )
539         and paa_xfr.assignment_id between cp_start_person and cp_end_person
540         and pay_us_employee_payslip_web.get_doc_eit(
541                              'PAYSLIP','PRINT',
542                              'ASSIGNMENT',paa_xfr.assignment_id,
543                              cp_deposit_end_date) = 'Y'
544         and pay_us_deposit_advice_pkg.check_if_assignment_paid(
545                        pai_pre.locked_action_id,
546                        cp_deposit_start_date,
547                        cp_deposit_end_date,
548                        cp_consolidation_set_id) = 'Y' --Bug 3512116
549         and not exists
550                (Select  /*+ ORDERED */  1
551                   from pay_action_interlocks   pai_run, --Pre > Run
552                        pay_action_interlocks   pai_rev, --Run > Rev
553                        pay_assignment_actions  paa_rev, --Rev
554                        pay_payroll_actions     ppa_rev  --Rev
555                  where pai_run.locking_action_id = pai_pre.locked_action_id
556                    and pai_rev.locked_action_id = pai_run.locked_action_id
557                    and paa_rev.assignment_action_id = pai_run.locking_action_id
558                    and ppa_rev.payroll_action_id = paa_rev.payroll_action_id
559                    and ppa_rev.action_type in ('V')
560                 )
561          and exists ( select 1
562              from   pay_action_information pai
563               where  pai.action_context_id = paa_xfr.assignment_action_id
564               and rownum < 2
565            )     order by  paa_xfr.assignment_id desc;
566 
567    /* cursor c_actions_zero_pay is now removed from here  Bug 3512116*/
568 
569 
570    ln_assignment_id           NUMBER;
571    ln_tax_unit_id             NUMBER;
572    ln_nacha_action_id         NUMBER;
573    ln_deposit_action_id       NUMBER;
574 
575    lv_legislative_parameters  VARCHAR2(2000);
576    ln_assignment_set_id       NUMBER;
577    ln_payroll_id              NUMBER;
578    ln_consolidation_set_id    NUMBER;
579 
580    lc_asg_flag                VARCHAR2(1);
581 
582    -- Bug 3512116
583    ld_deposit_start_date      DATE;
584    ld_deposit_end_date        DATE;
585 
586 
587 
588   BEGIN
589 
590    get_payroll_action(p_payroll_action_id    => pactid
591                      ,p_deposit_start_date   => ld_deposit_start_date
592                      ,p_deposit_end_date     => ld_deposit_end_date
593                      ,p_assignment_set_id    => ln_assignment_set_id
594                      ,p_payroll_id           => ln_payroll_id
595                      ,p_consolidation_set_id => ln_consolidation_set_id);
596 
597    hr_utility.set_location('procdar archive',1);
598    hr_utility.trace('stperson:'||stperson||',endperson:'||endperson||',ln_payroll_id:'||ln_payroll_id||
599 		    ',ln_consolidation_set_id:'||ln_consolidation_set_id||',ld_deposit_start_date:'||
600 		    ld_deposit_start_date||',ld_deposit_end_date:'||ld_deposit_end_date);
601    open c_paid_actions(stperson, endperson,
602                        ln_payroll_id,
603                        ln_consolidation_set_id,
604                        ld_deposit_start_date,
605                        ld_deposit_end_date);
606    loop
607       hr_utility.set_location('procdar archive',2);
608 
609       lc_asg_flag := 'N';
610 
611       fetch c_paid_actions into ln_nacha_action_id,
612                                 ln_assignment_id,
613                                 ln_tax_unit_id;
614       exit WHEN c_paid_actions%NOTFOUND;
615 
616       lc_asg_flag :=  hr_assignment_set.assignment_in_set(
617                                 ln_assignment_set_id,
618                                 ln_assignment_id);
619 
620       IF lc_asg_flag = 'Y' THEN
621          hr_utility.trace(' c_paid_actions.ln_nacha_action_id is'
622                  ||to_char(ln_nacha_action_id));
623 
624 
625 
626 
627          hr_utility.set_location('procdar archive',3);
628          select pay_assignment_actions_s.nextval
629            into ln_deposit_action_id
630            from dual;
631 
632          -- insert the action record.
633          hr_nonrun_asact.insact(ln_deposit_action_id,
634                                 ln_assignment_id,
635                                 pactid, chunk, ln_tax_unit_id);
636          hr_utility.trace('Inserted into paa');
637          -- insert an interlock to this action.
638          hr_nonrun_asact.insint(ln_deposit_action_id, ln_nacha_action_id);
639 
640          update pay_assignment_Actions
641             set serial_number = ln_nacha_action_id
642           where assignment_action_id = ln_deposit_action_id;
643 
644      END IF;
645 
646   end loop;
647   close c_paid_actions;
648 
649   hr_utility.set_location('procdar archive',4);
650 
651  END archive_action_creation;
652 
653  /***********************************************************************
654  ** Name       : sort_action
655  ** Description: This cursor is used to sort the data in the report based
656                  on the parameter entered by the user when submitting the
657                  report.
658 
659                  This procedure is used by both Live and Archive Deposit
660                  Advice Reports.
661  **********************************************************************/
662  PROCEDURE sort_action(procname   in     varchar2,
663                        sqlstr     in out NOCOPY varchar2,
664                        len        out    NOCOPY number)
665  IS
666 
667    --Bug 3331028
668    l_db_version varchar2(20);
669 
670  BEGIN
671    -- Databse Version --Bug 3331028
672    if (nvl(hr_general2.get_oracle_db_version, 0) < 10.0) then
673       l_db_version := '/*+ RULE */';
674    else
675       l_db_version := '/* NO RULE*/';
676    end if;
677 
678    sqlstr := 'select '||l_db_version||' paa.rowid
679                 from hr_all_organization_units  hou,
680                      per_all_people_f           ppf,
681                      per_all_assignments_f      paf,
682                      pay_assignment_actions paa,
683                      pay_payroll_actions    ppa
684                where ppa.payroll_action_id = :pactid
685                  and paa.payroll_action_id = ppa.payroll_action_id
686                  and paa.assignment_id     = paf.assignment_id
687                  and paf.effective_start_date =
688                        (select max(paf1.effective_start_date)
689                           from per_all_assignments_f paf1
690                          where paf1.assignment_id = paf.assignment_id
691                            and paf1.effective_start_date <= ppa.effective_date
692                            and paf1.effective_end_date >= ppa.start_date
693                        )
694                  and paf.person_id = ppf.person_id
695                  and ppa.effective_date between ppf.effective_start_date
696                                                    and ppf.effective_end_date
697                  and hou.organization_id
698                             = nvl(paf.organization_id, paf.business_group_id)
699                order by hou.name,ppf.last_name,ppf.first_name
700                for update of paa.assignment_id';
701 
702    len := length(sqlstr); -- return the length of the string.
703 
704  END sort_action;
705 
706 --Bug 3812668
707  -------------------------- action_creation ---------------------------------
708  PROCEDURE action_creation(pactid in number,
709                           stperson in number,
710                           endperson in number,
711                           chunk in number) is
712 --Bug 3331028
713   l_db_version varchar2(20);
714   l_paid_actions varchar2(5000);
715 
716   TYPE PaidActions is REF CURSOR;
717   c_paid_actions PaidActions;
718 
719 -------------------------------------------Assignment Set concept
720   CURSOR c_actions_asg_set
721       (
722          pactid    number,
723          stperson  number,
724          endperson number,
725          p_assignment_set_id number,
726 	 payid number,
727 	 consetid number
728       ) is
729       select distinct act.assignment_action_id,
730              act.assignment_id,
731              act.tax_unit_id,
732              ppa_mag.effective_date,
733 	     ppa_mag.action_type
734       from   pay_assignment_actions         act,
735              pay_payroll_actions            ppa_dar,
736              pay_payroll_actions            ppa_mag,
737     	     pay_org_payment_methods_f      popm,
738 	         pay_all_payrolls_f             ppf,
739              per_all_assignments_f          paf2,
740              hr_assignment_sets             has,
741              hr_assignment_set_amendments   hasa
742       where  ppa_dar.payroll_action_id   = pactid
743        and   has.assignment_set_id = p_assignment_set_id
744        and   ppa_mag.effective_date between
745              ppa_dar.start_date and ppa_dar.effective_date
746        and   ppa_mag.consolidation_set_id = consetid
747        and  ((    has.payroll_id is null
748               and nvl(ppa_mag.payroll_id,ppf.payroll_id)  =
749                   nvl(payid, nvl(ppa_mag.payroll_id,ppf.payroll_id))
750               ) or
751               nvl(ppa_mag.payroll_id,has.payroll_id)  = has.payroll_id
752             )
753       and    ppa_mag.effective_date between
754              ppf.effective_start_date and ppf.effective_end_date
755       and    ppf.Payroll_id >= 0
756       and    act.payroll_action_id          = ppa_mag.payroll_action_id
757       and    act.action_status              = 'C'
758       and    ppa_mag.action_type            in ('M','P','U')
759       and    decode(ppa_mag.action_type,'M',
760 	            ppa_mag.org_payment_method_id,
761 		        popm.org_payment_method_id)  = popm.org_payment_method_id
762       and    popm.defined_balance_id  is not null
763       and    ppa_mag.effective_date between
764              popm.effective_start_date and popm.effective_end_date
765       and    hasa.assignment_set_id         = has.assignment_set_id
766       and    hasa.assignment_id             = act.assignment_id
767       and    hasa.include_or_exclude        = 'I'
768       and    paf2.assignment_id              = act.assignment_id
769       and    ppa_dar.effective_date between
770              paf2.effective_start_date and paf2.effective_end_date
771       and    paf2.payroll_id + 0             = ppf.payroll_id
772       and    act.assignment_id between stperson and endperson
773 --  No run results.
774       and   NOT EXISTS (SELECT ' '
775                           FROM  pay_pre_payments ppp,
776                                 pay_org_payment_methods_f popm
777                           WHERE ppp.assignment_action_id = decode(act.source_action_id,NULL
778 			                                          ,act.assignment_action_id,
779 								  act.source_action_id) --Bug 3928576.Check only for master actions.
780                           and    ppp.org_payment_method_id = popm.org_payment_method_id
781                           and    popm.defined_balance_id IS NOT NULL)
782 -- and is not a reversal.
783       and  not exists
784              ( select  ''
785                  from pay_action_interlocks   int2,
786                       pay_action_interlocks   int3,
787                       pay_assignment_actions  paa4,
788                       pay_payroll_actions     ppa_run,  --- RUN
789                       pay_payroll_actions     pact4,  --- Reversal
790                       pay_assignment_actions  paa_run,  --- RUN
791                       pay_assignment_actions  paa_pp   --- PREPAY
792                 where int3.locked_action_id   = act.assignment_action_id
793                 and   int3.locking_action_id  = paa_pp.assignment_action_id
794                 and   int2.locked_action_id   = paa_pp.assignment_action_id
795                 and   int2.locking_action_id   = paa_run.assignment_action_id
796                 and   paa_run.payroll_action_id = ppa_run.payroll_action_id
797                 and   ppa_run.action_type in ('R', 'Q')
798                 and   paa_run.assignment_action_id = int3.locked_action_id
799                 and   int3.locking_action_id = paa4.assignment_action_id
800                 and   pact4.payroll_action_id = paa4.payroll_action_id
801                 and   pact4.action_type       = 'V'
802               )
803       order by act.assignment_id;
804 
805 -------------------------------------------
806 
807    /*****************************************************************
808    ** This cursor solves problem when there are multiple pre-payments
809    ** and multiple assignment actions , in this case we only want 1
810    ** assignment action for each pre-payment (bug 890222)
811    *****************************************************************/
812    cursor c_pre_payments (cp_nacha_action_id in number) is
813      select locked_action_id
814        from pay_action_interlocks pai
815       where pai.locking_action_id = cp_nacha_action_id;
816 
817    cursor c_payroll_run (cp_pre_pymt_action_id in number) is
818      select assignment_action_id
819        from pay_action_interlocks pai,
820             pay_assignment_actions paa
821       where pai.locking_action_id = cp_pre_pymt_action_id
822         and paa.assignment_Action_id = pai.locked_action_id
823         and paa.run_type_id is null
824      order by action_sequence desc;
825 
826    /*****************************************************************
827    ** This cursor will get all the source actions for which the
828    ** assignment should get a deposit advice.
829    ** assignment action for each pre-payment (bug 890222) i.e.
830    ** Seperate Depsoit Advice for Seperate Check and Regular Run
831    *****************************************************************/
832    cursor c_payments (cp_pre_pymt_action_id in number,
833                       cp_effective_date     in date) is
834      select distinct ppp.source_action_id
835        from pay_pre_payments ppp,
836             pay_personal_payment_methods_f pppm
837       where ppp.assignment_action_id = cp_pre_pymt_action_id
838         and pppm.personal_payment_method_id = ppp.personal_payment_method_id
839         and pppm.external_account_id is not null
840         and cp_effective_date between pppm.effective_start_date
841                                   and pppm.effective_end_date
842         and nvl(ppp.value,0) <> 0
843       order by ppp.source_action_id;
844 
845    ln_nacha_action_id         NUMBER;
846    ln_deposit_action_id       NUMBER;
847 
848    ln_assignment_id           NUMBER;
849    ln_tax_unit_id             NUMBER;
850    ld_effective_date          DATE;
851 
852    ln_pre_pymt_action_id      NUMBER;
853    ln_prev_pre_pymt_action_id NUMBER := null;
854 
855    ln_source_action_id        NUMBER;
856    ln_prev_source_action_id   NUMBER := null;
857 
858    ln_master_action_id        NUMBER;
859 
860    l_asg_set_id hr_assignment_sets.assignment_set_id%TYPE;
861 
862    ld_deposit_start_date      DATE;
863    ld_deposit_end_date        DATE;
864    ln_payroll_id              NUMBER;
865    ln_consolidation_set_id    NUMBER;
866    lv_ass_set_on              VARCHAR2(10);
867    Zero_Pay_Flag   Varchar2(1);
868    ln_person_id number;
869    lv_action_type varchar2(1);
870   BEGIN
871     hr_utility.set_location('procdar',1);
872 
873 -- Database Version --Bug 3331028
874 	if (nvl(hr_general2.get_oracle_db_version, 0) < 10.0) then
875 		l_db_version := '/*+ RULE */';
876 	  else
877 		l_db_version := '/* NO RULE*/';
878 	end if;
879 
880 --
881       get_payroll_action(p_payroll_action_id => pactid
882                      ,p_deposit_start_date   => ld_deposit_start_date
883                      ,p_deposit_end_date     => ld_deposit_end_date
884                      ,p_assignment_set_id    => l_asg_set_id
885                      ,p_payroll_id           => ln_payroll_id
886                      ,p_consolidation_set_id => ln_consolidation_set_id);
887 
888 	hr_utility.trace('pactid='||pactid);
889 	hr_utility.trace('ln_payroll_id='||ln_payroll_id);
890 	hr_utility.trace('ln_consolidation_set_id='||ln_consolidation_set_id);
891 
892 -- Query string for the reference cursor c_paid_actions
893   l_paid_actions := 'select distinct '||l_db_version||' act.assignment_action_id,
894              act.assignment_id,
895              act.tax_unit_id,
896              ppa_mag.effective_date,
897     	     ppa_mag.action_type
898       from   pay_assignment_actions         act,
899              pay_payroll_actions            ppa_dar,
900              pay_payroll_actions            ppa_mag,
901              per_all_assignments_f          paf2,
902 	         pay_org_payment_methods_f      popm, --Bug 3009643
903              pay_payrolls_f                 pay   --Bug 3343621
904       where  ppa_dar.payroll_action_id          = :pactid
905       and    ppa_mag.consolidation_set_id +0    = '|| nvl(ln_consolidation_set_id,0) ||'
906       and    ppa_mag.effective_date between
907                    ppa_dar.start_date and ppa_dar.effective_date
908       and    act.payroll_action_id          = ppa_mag.payroll_action_id
909       and    act.action_status              = ''C''
910       and    ppa_mag.action_type            in (''M'',''P'',''U'')
911       and    decode(ppa_mag.action_type,''M'',
912 	            ppa_mag.org_payment_method_id,
913 		    popm.org_payment_method_id)  = popm.org_payment_method_id -- Bug 3009643
914       and    popm.defined_balance_id  is not null                        -- Bug 3009643
915       and    ppa_mag.effective_date between
916              popm.effective_start_date and popm.effective_end_date --Bug 3009643
917       and    nvl(ppa_mag.payroll_id,pay.payroll_id) = pay.payroll_id  --Bug 3343621
918       and    ppa_mag.effective_date between
919              pay.effective_start_date and pay.effective_end_date --Bug 3343621
920       and    pay.payroll_id >= 0  --Bug 3343621
921       and    paf2.assignment_id              = act.assignment_id
922       and    ppa_dar.effective_date between
923              paf2.effective_start_date and paf2.effective_end_date
924       and    paf2.payroll_id = pay.payroll_id
925       and    act.assignment_id between :stperson and :endperson
926       and (' || NVL(ln_payroll_id,-99999) || ' = -99999
927              or
928              pay.payroll_id = ' || NVL(ln_payroll_id,-99999) ||'
929              )
930 
931 --  No run results.
932       and   NOT EXISTS (SELECT '' ''
933                           FROM  pay_pre_payments ppp,
934                                 pay_org_payment_methods_f popm
935                           WHERE ppp.assignment_action_id = decode(act.source_action_id,NULL
936 			                                          ,act.assignment_action_id,
937 								  act.source_action_id) --Bug 3928576.Check only for master actions.
938                           and    ppp.org_payment_method_id = popm.org_payment_method_id
939                           and    popm.defined_balance_id IS NOT NULL)
940 -- and is not a reversal.
941       and    not exists
942              (
943                Select  ''''
944                  from pay_action_interlocks   int2,
945                       pay_action_interlocks   int3,
946                       pay_assignment_actions  paa4,
947                       pay_payroll_actions     ppa_run,  --- RUN
948                       pay_payroll_actions     pact4,  --- Reversal
949                       pay_assignment_actions  paa_run,  --- RUN
950                       pay_assignment_actions  paa_pp   --- PREPAY
951                 where
952                       int3.locked_action_id   = act.assignment_action_id
953                 and   int3.locking_action_id  = paa_pp.assignment_action_id
954                 and   int2.locked_action_id   = paa_pp.assignment_action_id
955                 and   int2.locking_action_id   = paa_run.assignment_action_id
956                 and   paa_run.payroll_action_id = ppa_run.payroll_action_id
957                 and   ppa_run.action_type in (''R'', ''Q'')
958                 and   paa_run.assignment_action_id = int3.locked_action_id
959                 and   int3.locking_action_id = paa4.assignment_action_id
960                 and   pact4.payroll_action_id = paa4.payroll_action_id
961                 and   pact4.action_type       = ''V''
962               )
963       order by  act.assignment_id DESC';
964 
965 -- Reference cursor opened for the query string l_paid_actions --Bug 3331028
966         if l_asg_set_id is not null then
967            open c_actions_asg_set(pactid,stperson,endperson,l_asg_set_id,
968 	                          ln_payroll_id,ln_consolidation_set_id);
969     	else
970 	   open c_paid_actions for l_paid_actions using pactid, stperson, endperson;
971     	end if;
972 --
973       loop
974         hr_utility.set_location('procdar',2);
975 	if l_asg_set_id is not null then
976 	  fetch c_actions_asg_set into ln_nacha_action_id, ln_assignment_id,
977                                        ln_tax_unit_id, ld_effective_date,
978 				       lv_action_type;
979 	  exit WHEN c_actions_asg_set%NOTFOUND;
980 	else
981 	  fetch c_paid_actions into ln_nacha_action_id, ln_assignment_id,
982                                     ln_tax_unit_id, ld_effective_date,
983                                     lv_action_type;
984 	  exit WHEN c_paid_actions%NOTFOUND;
985          end if;
986 
987          if lv_action_type ='M' then
988             Zero_Pay_Flag := 'N';
989          else
990             Zero_Pay_Flag := 'Y';
991          end if;
992 
993          hr_utility.trace(' c_paid_actions.ln_nacha_action_id is'
994                  ||to_char(ln_nacha_action_id));
995 
996      	 open c_pre_payments (ln_nacha_action_id);
997          fetch c_pre_payments into ln_pre_pymt_action_id;
998          close c_pre_payments;
999          hr_utility.trace(' c_pre_payments.ln_pre_pymt_action_id is'
1000                            ||to_char(ln_pre_pymt_action_id));
1001 
1002         if Zero_Pay_Flag = 'N' then
1003              hr_utility.trace(' Not a Zero Pay Assignment');
1004 	        /**************************************************************************
1005 		** we need to insert atleast one action for each of the rows that we
1006 	        ** return from the cursor (i.e. one for each assignment/pre-payment action).
1007 	        **************************************************************************/
1008              hr_utility.trace(' ln_prev_pre_pymt_action_id is'
1009                      ||to_char(ln_prev_pre_pymt_action_id));
1010                 if (ln_prev_pre_pymt_action_id is null or
1011                   ln_prev_pre_pymt_action_id <> ln_pre_pymt_action_id) then
1012                    open c_payments (ln_pre_pymt_action_id, ld_effective_date);
1013                    loop
1014                       hr_utility.set_location('procdar',99);
1015                       fetch c_payments into ln_source_action_id;
1016                       hr_utility.trace(' ln_source_action_id is'
1017                                         ||to_char(ln_source_action_id));
1018 
1019                       hr_utility.set_location('procdar',98);
1020                       if c_payments%notfound then
1021                         exit;
1022                       end if;
1023                       hr_utility.set_location('procdar',97);
1024                      /**************************************************************
1025                      ** we need to insert one action for each of the rows that we
1026                      ** return from the cursor (i.e. one for each assignment/pre-payment source).
1027                      **************************************************************/
1028                      hr_utility.trace(' ln_prev_source_action_id is'
1029                                        ||to_char(ln_prev_source_action_id));
1030                      if (ln_prev_source_action_id is null or
1031                         ln_source_action_id <> ln_prev_source_action_id or
1032                         ln_source_action_id is null) then
1033 
1034                         hr_utility.set_location('procdar',3);
1035                         select pay_assignment_actions_s.nextval
1036                           into ln_deposit_action_id
1037                           from dual;
1038 
1039                         -- insert the action record.
1040                         hr_nonrun_asact.insact(ln_deposit_action_id,
1041                                                ln_assignment_id,
1042                                                pactid, chunk, ln_tax_unit_id);
1043                         hr_utility.trace('Inserted into paa');
1044                         -- insert an interlock to this action.
1045                         hr_nonrun_asact.insint(ln_deposit_action_id, ln_nacha_action_id);
1046 
1047                         hr_utility.trace('Inserted into interlock');
1048                         if ln_source_action_id is not null then
1049                            hr_utility.trace('serial number updated if loop ');
1050                            hr_utility.trace('serial number is '||to_char(ln_source_action_id));
1051                            update pay_assignment_Actions
1052                               set serial_number = 'P'||ln_source_action_id
1053                              where assignment_action_id = ln_deposit_action_id;
1054                         else
1055                             hr_utility.trace('serial number else ');
1056                             open c_payroll_run (ln_pre_pymt_action_id);
1057                             fetch c_payroll_run into ln_master_action_id;
1058                             close c_payroll_run;
1059                             hr_utility.trace(' ln_master_action_id is'
1060                                                ||to_char(ln_master_action_id));
1061 
1062                             update pay_assignment_Actions
1063                                set serial_number = 'M'||ln_master_action_id
1064                               where assignment_action_id = ln_deposit_action_id;
1065                          end if;
1066                         -- skip till next source action id
1067                         ln_prev_source_action_id := ln_source_action_id;
1068                    end if;
1069                 end loop;
1070                 close c_payments;
1071                 ln_prev_pre_pymt_action_id := ln_pre_pymt_action_id;
1072              end if;
1073       elsif Zero_Pay_Flag = 'Y' then
1074         hr_utility.trace('Zero Pay Assignment');
1075 	if (ln_prev_pre_pymt_action_id is null or
1076            ln_prev_pre_pymt_action_id <> ln_pre_pymt_action_id) then
1077            hr_utility.set_location('procdar',6);
1078            select pay_assignment_actions_s.nextval
1079              into ln_deposit_action_id
1080              from dual;
1081 
1082            -- insert the action record.
1083            hr_nonrun_asact.insact(ln_deposit_action_id,
1084                                   ln_assignment_id,
1085                                   pactid, chunk, ln_tax_unit_id);
1086 
1087            -- insert an interlock to this action.
1088            hr_nonrun_asact.insint(ln_deposit_action_id, ln_nacha_action_id);
1089            hr_utility.trace(' NZ Inserted into paa');
1090 
1091 
1092 	   open c_payroll_run (ln_nacha_action_id);
1093            fetch c_payroll_run into ln_master_action_id;
1094            close c_payroll_run;
1095 
1096 	   update pay_assignment_Actions
1097               set serial_number = 'M'||ln_master_action_id
1098             where assignment_action_id = ln_deposit_action_id;
1099 
1100 	   hr_utility.trace(' NZ ln_master_action_id is'
1101                             ||to_char(ln_master_action_id));
1102 
1103            -- skip till next pre payment action id
1104            ln_prev_pre_pymt_action_id := ln_pre_pymt_action_id;
1105         end if;
1106       end if; -- ZERO PAY
1107      end loop;
1108 
1109      if l_asg_set_id is not null then
1110         close c_actions_asg_set;
1111      else
1112         close c_paid_actions;
1113      end if;
1114  END action_creation;
1115 
1116  -- Following Procedure has been added for de-initialization
1117  -- To be used by (Archive) Deposit Advice process generating
1118  -- PDF Output.
1119 
1120  procedure archive_deinit(pactid in number) is
1121  begin
1122 
1123  --pay_core_xdo_utils.archive_deinit(pactid) ;
1124  pay_archive.remove_report_actions(pactid) ;
1125 
1126  end archive_deinit ;
1127 --
1128 --------------------------------------------------------------------------------
1129 -- QUALIFYING_PROC
1130 --------------------------------------------------------------------------------
1131 PROCEDURE qualifying_proc(p_assignment_id    IN         NUMBER
1132                          ,p_qualifier        OUT NOCOPY VARCHAR2 ) IS
1133     --
1134     l_actid                 NUMBER;
1135     l_rep_group             pay_report_groups.report_group_name%TYPE;
1136     l_rep_category          pay_report_categories.category_name%TYPE;
1137     l_effective_date        DATE;
1138     l_business_group_id     NUMBER;
1139     l_assignment_set_id     NUMBER;
1140     l_assignment_id         NUMBER;
1141     l_inc_exc               VARCHAR2(1);
1142     l_asg_inc_exc           VARCHAR2(1);
1143     --
1144     l_payroll_id            NUMBER;
1145     l_consolidation_set_id  NUMBER;
1146     l_start_date            VARCHAR2(20);
1147     l_end_date              VARCHAR2(20);
1148     l_legislation_code      VARCHAR2(10);
1149     l_start_dt              DATE;
1150     l_end_dt                DATE;
1151     l_qualifier             VARCHAR2(1);
1152     --
1153     ln_curr_payroll_act_id  NUMBER;
1154     k                       NUMBER;
1155     ln_assignment_id        NUMBER;
1156     ln_action_ctx_id        NUMBER;
1157     --
1158     sql_cur                 NUMBER;
1159     l_rows                  NUMBER;
1160     statem                  VARCHAR2(256);
1161     --
1162     CURSOR csr_asg(c_payroll_id       NUMBER
1163                   ,c_consolidation_set_id NUMBER
1164                   ,c_start_date       DATE
1165                   ,c_end_date         DATE
1166                   ,c_pa_token         VARCHAR2
1167                   ,c_cs_token         VARCHAR2
1168                   ,c_legislation_code VARCHAR2) IS
1169     SELECT /* 'Y' */
1170            distinct paa.assignment_id
1171                    ,pai.action_context_id
1172     FROM pay_assignment_actions paa
1173         ,pay_payroll_actions	ppa
1174         ,hr_lookups             hrl
1175         ,pay_action_information pai
1176         ,per_time_periods       ptp
1177     WHERE /* paa.assignment_id             = c_assignment_id */
1178           ppa.effective_Date   BETWEEN   c_start_date
1179                                AND       c_end_date
1180     AND      ppa.report_type                = hrl.meaning
1181     AND	 hrl.lookup_type                = 'PAYSLIP_REPORT_TYPES'
1182     AND	 hrl.lookup_code                = c_legislation_code
1183     AND	 NVL(c_payroll_id,NVL(pay_payslip_report.get_parameter(ppa.legislative_parameters,c_pa_token),-1))
1184                                         = NVL(pay_payslip_report.get_parameter(ppa.legislative_parameters,c_pa_token),-1)
1185     AND	 c_consolidation_set_id     = pay_payslip_report.get_parameter(ppa.legislative_parameters,c_cs_token)
1186 
1187     --
1188     --
1189     AND  ppa.payroll_action_id          = paa.payroll_action_id
1190    -- AND  paa.source_action_id           IS NULL            --RLN P1 8941027
1191     --
1192     --
1193     AND	 pai.assignment_id              = paa.assignment_id
1194     AND      pai.action_context_type        = 'AAP'
1195     AND      pai.action_information_category    = 'EMPLOYEE DETAILS'
1196     AND	 pai.action_context_id          = paa.assignment_action_id
1197     AND      ptp.time_period_id             = pai.ACTION_INFORMATION16;
1198     /*
1199     AND      check_if_qualified_for_US(pai.action_context_id
1200                                   ,paa.assignment_id
1201                                   ,c_start_date
1202                                   ,c_end_date
1203                                   ,c_consolidation_set_id) = 'Y';
1204     */
1205     --
1206     CURSOR csr_inc_asg(c_payroll_id           NUMBER
1207                       ,c_consolidation_set_id NUMBER
1208                       ,c_start_date           DATE
1209                       ,c_end_date             DATE
1210                       ,c_pa_token             VARCHAR2
1211                       ,c_cs_token             VARCHAR2
1212                       ,c_legislation_code     VARCHAR2
1213                       ,c_assignment_set_id    NUMBER  ) IS
1214     SELECT /* 'Y' */
1215          distinct paa.assignment_id
1216                  ,pai.action_context_id
1217     FROM pay_assignment_actions         paa
1218         ,pay_payroll_actions            ppa
1219         ,hr_lookups                     hrl
1220         ,hr_assignment_set_amendments   hasa
1221         ,pay_action_information         pai
1222         ,per_time_periods               ptp
1223     WHERE ppa.effective_Date   BETWEEN	    c_start_date
1224                               AND		    c_end_date
1225     AND      ppa.report_type 	   			    = hrl.meaning
1226     AND	 hrl.lookup_type                    = 'PAYSLIP_REPORT_TYPES'
1227     AND	 hrl.lookup_code                    = c_legislation_code
1228     AND	 NVL(c_payroll_id,NVL(pay_payslip_report.get_parameter(ppa.legislative_parameters,c_pa_token),-1))
1229                                             = NVL(pay_payslip_report.get_parameter(ppa.legislative_parameters,c_pa_token),-1)
1230     AND	 c_consolidation_set_id             = pay_payslip_report.get_parameter(ppa.legislative_parameters,c_cs_token)
1231     AND      ppa.payroll_action_id	            = paa.payroll_action_id
1232     --AND      paa.source_action_id               IS NULL   --RLN P1 894102
1233     AND	 paa.assignment_id                  = hasa.assignment_id
1234     AND	 hasa.assignment_set_id             = c_assignment_set_id
1235     AND	 hasa.include_or_exclude            = 'I'
1236     AND	 pai.assignment_id                  = paa.assignment_id
1237     AND      pai.action_context_type            = 'AAP'
1238     AND      pai.action_information_category    = 'EMPLOYEE DETAILS'
1239     AND	 pai.action_context_id          = paa.assignment_action_id
1240     AND  ptp.time_period_id                 = pai.ACTION_INFORMATION16;
1241     /*
1242     AND  check_if_qualified_for_US(pai.action_context_id
1243                                   ,paa.assignment_id
1244                                   ,c_start_date
1245                                   ,c_end_date
1246                                   ,c_consolidation_set_id) = 'Y';
1247     */
1248     --
1249     -- The Assignment Set Logic is handled only for either Include or Exclude
1250     -- and not for both. This doesn't handle the assignment_set_criteria.
1251     --
1252     CURSOR csr_inc_exc(c_assignment_set_id NUMBER
1253                       ,c_assignment_id     NUMBER) IS
1254     SELECT include_or_exclude
1255     FROM  hr_assignment_set_amendments
1256     WHERE assignment_set_id = c_assignment_set_id
1257     AND   assignment_id     = nvl(c_assignment_id,assignment_id);
1258     --
1259     --
1260     --
1261 
1262 BEGIN
1263     hr_utility.trace('###### IN Qualifying Proc');
1264     --
1265     l_actid    := pay_proc_environment_pkg.get_pactid;
1266     --
1267     ln_curr_payroll_act_id := l_actid;
1268     hr_utility.trace('In QualProc l_actid := ' || l_actid);
1269     hr_utility.trace('p_assignment_id := ' || p_assignment_id);
1270 
1271     IF pay_us_deposit_advice_pkg.g_payroll_act_id <> ln_curr_payroll_act_id THEN
1272        pay_us_deposit_advice_pkg.g_payroll_act_id := ln_curr_payroll_act_id;
1273 
1274        pay_payslip_report.get_all_parameters(l_actid
1275                       ,l_payroll_id
1276                       ,l_consolidation_set_id
1277                       ,l_start_date
1278                       ,l_end_date
1279                       ,l_rep_group
1280                       ,l_rep_category
1281                       ,l_assignment_set_id
1282                       ,l_assignment_id
1283                       ,l_effective_date
1284                       ,l_business_group_id
1285                       ,l_legislation_code);
1286 
1287           --hr_utility.trace('l_payroll_id :='||l_payroll_id);
1288           --hr_utility.trace('l_consolidation_set_id :='||l_consolidation_set_id);
1289           --hr_utility.trace('l_start_date :='||l_start_date);
1290           --hr_utility.trace('l_end_date :='||l_end_date);
1291           --hr_utility.trace('l_rep_group :='||l_rep_group);
1292           --hr_utility.trace('l_rep_category :='||l_rep_category);
1293           --hr_utility.trace('l_assignment_set_id :='||l_assignment_set_id);
1294           --hr_utility.trace('l_assignment_id :='||l_assignment_id);
1295           --hr_utility.trace('l_effective_date :='||l_effective_date);
1296           --hr_utility.trace('l_business_group_id :='||l_business_group_id);
1297           --hr_utility.trace('l_legislation_code :='||l_legislation_code);
1298 
1299           --
1300           l_start_dt := TO_DATE(l_start_date,'YYYY/MM/DD');
1301           l_end_dt   := TO_DATE(l_end_date,'YYYY/MM/DD');
1302           --
1303           -- Fetching legislative prameters for the very first time
1304           -- And caching them into global variables.
1305 
1306           pay_us_deposit_advice_pkg.g_payroll_id := l_payroll_id;
1307           pay_us_deposit_advice_pkg.g_consolidation_set_id := l_consolidation_set_id;
1308           pay_us_deposit_advice_pkg.g_start_dt := l_start_dt;
1309           pay_us_deposit_advice_pkg.g_end_dt := l_end_dt;
1310           pay_us_deposit_advice_pkg.g_rep_group := l_rep_group;
1311           pay_us_deposit_advice_pkg.g_rep_category := l_rep_category;
1312           pay_us_deposit_advice_pkg.g_assignment_set_id := l_assignment_set_id;
1313           pay_us_deposit_advice_pkg.g_assignment_id := l_assignment_id;
1314           pay_us_deposit_advice_pkg.g_effective_date := l_effective_date;
1315           pay_us_deposit_advice_pkg.g_business_group_id := l_business_group_id;
1316           pay_us_deposit_advice_pkg.g_legislation_code := l_legislation_code;
1317 
1318     --
1319             DECLARE
1320             BEGIN
1321               statem := 'BEGIN pay_'||l_legislation_code||'_rules.get_token_names(:p_pa_token, :p_cs_token); END;';
1322               --hr_utility.trace(statem);
1323               sql_cur := dbms_sql.open_cursor;
1324               dbms_sql.parse(sql_cur
1325                             ,statem
1326                             ,dbms_sql.v7);
1327               dbms_sql.bind_variable(sql_cur, 'p_pa_token', pay_payslip_report.g_pa_token, 50);
1328               dbms_sql.bind_variable(sql_cur, 'p_cs_token', pay_payslip_report.g_cs_token, 50);
1329               l_rows := dbms_sql.execute(sql_cur);
1330               dbms_sql.variable_value(sql_cur, 'p_pa_token', pay_payslip_report.g_pa_token);
1331               dbms_sql.variable_value(sql_cur, 'p_cs_token', pay_payslip_report.g_cs_token);
1332               dbms_sql.close_cursor(sql_cur);
1333             Exception
1334               WHEN OTHERS THEN
1335                   pay_payslip_report.g_pa_token := NVL(pay_payslip_report.g_pa_token,'PAYROLL_ID');
1336                   pay_payslip_report.g_cs_token := NVL(pay_payslip_report.g_cs_token,'CONSOLIDATION_SET_ID');
1337                   --
1338                   IF dbms_sql.IS_OPEN(sql_cur) THEN
1339                      dbms_sql.close_cursor(sql_cur);
1340                   END IF;
1341             END;
1342     --
1343     --
1344     --hr_utility.trace('pay_payslip_report.g_pa_token :='||pay_payslip_report.g_pa_token);
1345     --hr_utility.trace('pay_payslip_report.g_cs_token :='||pay_payslip_report.g_cs_token);
1346 
1347          IF pay_us_deposit_advice_pkg.g_assignment_set_id IS NULL THEN
1348             OPEN csr_asg(pay_us_deposit_advice_pkg.g_payroll_id
1349                         ,pay_us_deposit_advice_pkg.g_consolidation_set_id
1350                         ,pay_us_deposit_advice_pkg.g_start_dt
1351                         ,pay_us_deposit_advice_pkg.g_end_dt
1352                         ,pay_payslip_report.g_pa_token
1353                         ,pay_payslip_report.g_cs_token
1354                         ,pay_us_deposit_advice_pkg.g_legislation_code);
1355             LOOP
1356 
1357             ln_assignment_id := -1;
1358             ln_action_ctx_id := -1;
1359 
1360             FETCH csr_asg INTO ln_assignment_id, ln_action_ctx_id;
1361 
1362             IF csr_asg%NOTFOUND THEN
1363                EXIT;
1364             ELSE
1365                IF check_if_qualified_for_US(ln_action_ctx_id
1366                                            ,ln_assignment_id
1367                                            ,pay_us_deposit_advice_pkg.g_start_dt
1368                                            ,pay_us_deposit_advice_pkg.g_end_dt
1369                                            ,pay_us_deposit_advice_pkg.g_consolidation_set_id) = 'Y' THEN
1370 
1371                   g_tmp_tbl(ln_assignment_id) := ln_assignment_id;
1372                   hr_utility.trace('g_tmp_tbl(' || ln_assignment_id || ') := ' || ln_assignment_id);
1373 
1374                END IF;
1375             END IF;
1376 
1377             END LOOP;
1378             CLOSE csr_asg;
1379             --
1380          ELSE
1381             OPEN csr_inc_asg(pay_us_deposit_advice_pkg.g_payroll_id
1382                         ,pay_us_deposit_advice_pkg.g_consolidation_set_id
1383                         ,pay_us_deposit_advice_pkg.g_start_dt
1384                         ,pay_us_deposit_advice_pkg.g_end_dt
1385                         ,pay_payslip_report.g_pa_token
1386                         ,pay_payslip_report.g_cs_token
1387                         ,pay_us_deposit_advice_pkg.g_legislation_code
1388                         ,pay_us_deposit_advice_pkg.g_assignment_set_id);
1389             LOOP
1390 
1391             ln_assignment_id := -1;
1392             ln_action_ctx_id := -1;
1393 
1394             FETCH csr_inc_asg INTO ln_assignment_id, ln_action_ctx_id;
1395 
1396             IF csr_inc_asg%NOTFOUND THEN
1397                EXIT;
1398             ELSE
1399                IF check_if_qualified_for_US(ln_action_ctx_id
1400                                            ,ln_assignment_id
1401                                            ,pay_us_deposit_advice_pkg.g_start_dt
1402                                            ,pay_us_deposit_advice_pkg.g_end_dt
1403                                            ,pay_us_deposit_advice_pkg.g_consolidation_set_id) = 'Y' THEN
1404 
1405                   g_tmp_tbl(ln_assignment_id) := ln_assignment_id;
1406                   hr_utility.trace('g_tmp_tbl(' || ln_assignment_id || ') := ' || ln_assignment_id);
1407                END IF;
1408             END IF;
1409 
1410             END LOOP;
1411             CLOSE csr_inc_asg;
1412 
1413          END IF;
1414     END IF;
1415 
1416     l_qualifier := 'N';
1417     k := 1;
1418 
1419     hr_utility.trace('g_tmp_tbl.COUNT := ' || g_tmp_tbl.COUNT);
1420 
1421     IF g_tmp_tbl.EXISTS(p_assignment_id) THEN
1422        l_qualifier := 'Y';
1423     END IF;
1424 
1425     hr_utility.trace('B4 Return l_qualifier := ' || l_qualifier);
1426 
1427 
1428     IF l_qualifier = 'Y' THEN
1429        p_qualifier := 'Y' ;
1430     END IF;
1431 
1432   END qualifying_proc;
1433 --
1434 --
1435  /********************************************************************
1436  ** Procedure  : DAxml_range_cursor
1437  ** Description: This is used for DA (XML) program
1438  **
1439  ********************************************************************/
1440  PROCEDURE DAxml_range_cursor(pactid in number
1441                              ,psqlstr out NOCOPY varchar2)
1442  IS
1443 
1444    ln_assignment_set_id       NUMBER;
1445    ln_payroll_id              NUMBER;
1446    ln_consolidation_set_id    NUMBER;
1447    ld_deposit_start_date      DATE;
1448    ld_deposit_end_date        DATE;
1449 
1450    --Bug 3331028
1451    l_db_version varchar2(20);
1452    --
1453    lv_rep_group               pay_report_groups.report_group_name%TYPE;
1454    lv_rep_category            pay_report_categories.category_name%TYPE;
1455    l_assignment_id            NUMBER;
1456    ld_effective_date          DATE;
1457    ln_business_group_id       NUMBER;
1458    lv_legislation_code        VARCHAR2(10);
1459    lv_sqlstr                  VARCHAR2(32000);
1460 
1461  BEGIN
1462    hr_utility.trace('Entering into Func DAxml_range_cursor');
1463    get_DAxml_payroll_action(p_payroll_action_id    => pactid
1464                      ,p_deposit_start_date   => ld_deposit_start_date
1465                      ,p_deposit_end_date     => ld_deposit_end_date
1466                      ,p_assignment_set_id    => ln_assignment_set_id
1467                      ,p_payroll_id           => ln_payroll_id
1468                      ,p_consolidation_set_id => ln_consolidation_set_id);
1469 
1470           hr_utility.trace('ln_payroll_id :='||ln_payroll_id);
1471           hr_utility.trace('ln_consolidation_set_id :='||ln_consolidation_set_id);
1472           hr_utility.trace('ld_deposit_start_date :='||ld_deposit_start_date);
1473           hr_utility.trace('ld_deposit_end_date :='||ld_deposit_end_date);
1474           hr_utility.trace('ln_assignment_set_id :='||ln_assignment_set_id);
1475           --
1476           --
1477 
1478   --Database Version --Bug 3331028
1479   if (nvl(hr_general2.get_oracle_db_version, 0) < 10.0) then
1480      l_db_version := '/*+ RULE */';
1481   else
1482      l_db_version := '/* NO RULE*/';
1483   end if;
1484 
1485   if ln_payroll_id is not null then
1486      if ln_assignment_set_id is not null then
1487 
1488            lv_sqlstr := 'select '||l_db_version||' distinct paf.person_id
1489                         from pay_assignment_actions paa,
1490                              pay_payroll_actions    ppa,
1491                              per_assignments_f paf,
1492                              hr_assignment_set_amendments hasa
1493                        where :payroll_action_id is not null
1494                          and ppa.action_type in (''R'',''Q'')
1495                          and paa.assignment_id = paf.assignment_id
1496                          and ppa.consolidation_set_id = ' || ln_consolidation_set_id
1497                     || ' and ppa.payroll_id = ' || ln_payroll_id
1498                     || ' and ppa.effective_date between ''' || ld_deposit_start_date
1499                     ||                            ''' and ''' || ld_deposit_end_date
1500                     || ''' and paa.payroll_action_id = ppa.payroll_action_id'
1501                     || ' and paa.assignment_id = hasa.assignment_id'
1502                     || ' and hasa.assignment_set_id = ' || ln_assignment_set_id
1503                     || ' and hasa.include_or_exclude = ''I'''
1504                     || ' order by paf.person_id';
1505      else
1506            lv_sqlstr := 'select '||l_db_version||' distinct paf.person_id
1507                         from pay_assignment_actions paa,
1508                              pay_payroll_actions    ppa,
1509                              per_assignments_f paf
1510                        where :payroll_action_id is not null
1511                          and ppa.action_type in (''R'',''Q'')
1512                          and paa.assignment_id = paf.assignment_id
1513                          and ppa.consolidation_set_id = ' || ln_consolidation_set_id
1514                     || ' and ppa.payroll_id = ' || ln_payroll_id
1515                     || ' and ppa.effective_date between ''' || ld_deposit_start_date
1516                     ||                            ''' and ''' || ld_deposit_end_date
1517                     || ''' and paa.payroll_action_id = ppa.payroll_action_id
1518                       order by paf.person_id';
1519      end if; -- ln_assignment_set_id NOT NULL
1520 
1521   else
1522      if ln_assignment_set_id is not null then
1523            lv_sqlstr := 'select '||l_db_version||' distinct paf.person_id
1524                         from pay_assignment_actions paa,
1525                              pay_payroll_actions    ppa,
1526                              per_assignments_f paf,
1527                              hr_assignment_set_amendments hasa
1528                        where :payroll_action_id is not null
1529                          and ppa.action_type in (''R'',''Q'')
1530                          and paa.assignment_id = paf.assignment_id
1531                          and ppa.consolidation_set_id = ' || ln_consolidation_set_id
1532                     || ' and ppa.effective_date between ''' || ld_deposit_start_date
1533                     ||                            ''' and ''' || ld_deposit_end_date
1534                     || ''' and paa.payroll_action_id = ppa.payroll_action_id'
1535                     || ' and paa.assignment_id = hasa.assignment_id'
1536                     || ' and hasa.assignment_set_id = ' || ln_assignment_set_id
1537                     || ' and hasa.include_or_exclude = ''I'''
1538                     || ' order by paf.person_id';
1539 
1540       else
1541            lv_sqlstr := 'select '||l_db_version||' distinct paf.person_id
1542                         from pay_assignment_actions paa,
1543                              pay_payroll_actions    ppa,
1544                              per_assignments_f paf
1545                        where :payroll_action_id is not null
1546                          and ppa.action_type in (''R'',''Q'')
1547                          and paa.assignment_id = paf.assignment_id
1548                          and ppa.consolidation_set_id = ' || ln_consolidation_set_id
1549                     || ' and ppa.effective_date between ''' || ld_deposit_start_date
1550                     ||                            ''' and ''' || ld_deposit_end_date
1551                     || ''' and paa.payroll_action_id = ppa.payroll_action_id
1552                       order by paf.person_id';
1553      end if; -- ln_assignment_set_id NOT NULL
1554 
1555   end if;
1556 
1557   hr_utility.trace('lv_sqlstr := ' || lv_sqlstr);
1558 
1559   psqlstr := lv_sqlstr;
1560 
1561  end DAxml_range_cursor;
1562 --
1563 --
1564 end pay_us_deposit_advice_pkg;