DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_US_PAYMENT_PKG

Source


1 PACKAGE BODY pay_us_payment_pkg AS
2 /* $Header: pyuspymt.pkb 120.0 2005/05/29 09:52:43 appldev noship $ */
3 /*
4    ******************************************************************
5    *                                                                *
6    *  Copyright (C) 2005 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_payment_pkg
21 
22     Description : This package contains the function get_trx_date to
23                   fetch the payment date.
24 
25     Change List
26     -----------
27     Date        Name       Vers    Bug No   Description
28     ----------- ---------- ------  -------  -------------------------
29     27-APR-2005 rsethupa   115.0            Created
30 
31     *****************************************************************
32 
33     ****************************************************************************
34     Function Name: get_trx_date
35     Description: Returns the Payment Date for a Check Payroll Action
36     ***************************************************************************/
37    FUNCTION get_trx_date (
38       p_business_group_id       pay_payroll_actions.business_group_id%TYPE,
39       p_payroll_action_id       pay_payroll_actions.payroll_action_id%TYPE,
40       p_assignment_action_id    pay_assignment_actions.assignment_action_id%TYPE
41             DEFAULT NULL,
42       p_payroll_id              pay_payroll_actions.payroll_id%TYPE
43             DEFAULT NULL,
44       p_consolidation_set_id    pay_payroll_actions.consolidation_set_id%TYPE
45             DEFAULT NULL,
46       p_org_payment_method_id   pay_payroll_actions.org_payment_method_id%TYPE
47             DEFAULT NULL,
48       p_effective_date          pay_payroll_actions.effective_date%TYPE
49             DEFAULT NULL,
50       p_date_earned             pay_payroll_actions.date_earned%TYPE
51             DEFAULT NULL,
52       p_override_date           pay_payroll_actions.overriding_dd_date%TYPE
53             DEFAULT NULL,
54       p_pre_payment_id          pay_pre_payments.pre_payment_id%TYPE
55             DEFAULT NULL,
56       p_payment_date            pay_payroll_actions.effective_date%TYPE
57             DEFAULT NULL
58    )
59       RETURN DATE
60    IS
61       /**************************************************************************
62        Cursor Name: c_get_override_date
63        Description: Fetches the value of the overriding_dd_date column for the
64                     the Check Writer payroll Action. More number of parameters
65           are passed as input to improve performance
66        *************************************************************************/
67       CURSOR c_get_override_date (
68          cp_business_group_id       IN   NUMBER,
69          cp_payroll_action_id       IN   NUMBER,
70          cp_payroll_id              IN   NUMBER,
71          cp_consolidation_set_id    IN   NUMBER,
72          cp_org_payment_method_id   IN   NUMBER,
73          cp_effective_date          IN   DATE,
74          cp_date_earned             IN   DATE
75       )
76       IS
77          SELECT overriding_dd_date
78            FROM pay_payroll_actions
79           WHERE business_group_id = cp_business_group_id
80             AND payroll_action_id = cp_payroll_action_id
81             AND payroll_id = NVL (cp_payroll_id, payroll_id)
82             AND consolidation_set_id =
83                              NVL (cp_consolidation_set_id, consolidation_set_id)
84             AND org_payment_method_id =
85                            NVL (cp_org_payment_method_id, org_payment_method_id)
86             AND effective_date = NVL (cp_effective_date, effective_date)
87             AND date_earned = NVL (cp_date_earned, date_earned);
88 
89       /**************************************************************************
90        Cursor Name: c_get_pymt_effective_date
91        Description: Takes as INPUT the payroll_action_id of Check Writer and
92                     other optional parameters. By checking for ASSACT interlocks
93           it fetches the effective_date of the prepayment action
94           locked by the Check Writer action
95        *************************************************************************/
96       CURSOR c_get_pymt_effective_date (
97          cp_business_group_id       IN   NUMBER,
98          cp_payroll_action_id       IN   NUMBER,
99          cp_assignment_action_id    IN   NUMBER,
100          cp_payroll_id              IN   NUMBER,
101          cp_consolidation_set_id    IN   NUMBER,
102          cp_org_payment_method_id   IN   NUMBER,
103          cp_effective_date          IN   DATE,
104          cp_date_earned             IN   DATE,
105          cp_pre_payment_id          IN   NUMBER
106       )
107       IS
108          SELECT NVL (ppa_chk.overriding_dd_date, ppa_pre.effective_date)
109            FROM pay_payroll_actions ppa_chk,
110                 pay_assignment_actions paa_chk,
111                 pay_payroll_actions ppa_pre,
112                 pay_assignment_actions paa_pre,
113                 pay_action_interlocks pai,
114                 pay_pre_payments ppp
115           WHERE ppa_chk.payroll_action_id = cp_payroll_action_id
116             AND ppa_chk.business_group_id = cp_business_group_id
117             AND ppa_chk.payroll_id = NVL (cp_payroll_id, ppa_chk.payroll_id)
118             AND ppa_chk.consolidation_set_id =
119                      NVL (cp_consolidation_set_id, ppa_chk.consolidation_set_id)
120             AND ppa_chk.org_payment_method_id =
121                    NVL (cp_org_payment_method_id, ppa_chk.org_payment_method_id)
122             AND ppa_chk.effective_date =
123                                  NVL (cp_effective_date, ppa_chk.effective_date)
124             AND ppa_chk.date_earned = NVL (cp_date_earned, ppa_chk.date_earned)
125             AND ppa_chk.action_type = 'H'
126             AND ppa_chk.payroll_action_id = paa_chk.payroll_action_id
127             AND paa_chk.action_status = 'C'
128             AND paa_chk.assignment_action_id = pai.locking_action_id
129             AND pai.locked_action_id = paa_pre.assignment_action_id
130             AND paa_pre.payroll_action_id = ppa_pre.payroll_action_id
131             AND paa_pre.action_status = 'C'
132             AND ppa_pre.action_type IN ('P', 'U')
133             AND paa_pre.assignment_action_id = ppp.assignment_action_id
134             AND ppp.pre_payment_id = NVL (cp_pre_payment_id, ppp.pre_payment_id)
135             AND ppp.pre_payment_id = paa_chk.pre_payment_id
136             AND ppp.org_payment_method_id = ppa_chk.org_payment_method_id;
137 
138       /**************************************************************************
139        Cursor Name: c_get_pymt_date_with_prepay_id
140        Description: Takes as INPUT the pre_payment_id and fetches effective_date
141                     of the prepayment action. This cursor is opened only if the
142           the overriding_dd_date column for the Check Writer action is
143           NULL and a pre_payment_id is passed
144        *************************************************************************/
145       CURSOR c_get_pymt_date_with_prepay_id (cp_pre_payment_id IN NUMBER)
146       IS
147          SELECT ppa.effective_date
148            FROM pay_pre_payments ppp,
149                 pay_assignment_actions paa,
150                 pay_payroll_actions ppa
151           WHERE ppp.pre_payment_id = cp_pre_payment_id
152             AND ppp.assignment_action_id = paa.assignment_action_id
153             AND paa.payroll_action_id = ppa.payroll_action_id
154             AND ppa.action_type IN ('P', 'U');
155 
156       l_override_date   pay_payroll_actions.overriding_dd_date%TYPE;
157       l_table_count     NUMBER;
158    BEGIN
159       -- hr_utility.trace_on (NULL, 'PYMT');
160       hr_utility.set_location ('pay_us_payment_pkg.get_trx_date', 10);
161       hr_utility.TRACE ('p_business_group_id: ' || p_business_group_id);
162       hr_utility.TRACE ('p_payroll_action_id: ' || p_payroll_action_id);
163       hr_utility.TRACE ('p_assignment_action_id: ' || p_assignment_action_id);
164       hr_utility.TRACE ('p_payroll_id: ' || p_payroll_id);
165       hr_utility.TRACE ('p_consolidation_set_id: ' || p_consolidation_set_id);
166       hr_utility.TRACE ('p_org_payment_method_id: ' || p_org_payment_method_id);
167       hr_utility.TRACE ('p_effective_date: ' || p_effective_date);
168       hr_utility.TRACE ('p_date_earned: ' || p_date_earned);
169       hr_utility.TRACE ('p_override_date: ' || p_override_date);
170       hr_utility.TRACE ('p_pre_payment_id: ' || p_pre_payment_id);
171       hr_utility.TRACE ('p_payment_date: ' || p_payment_date);
172 
173       IF p_override_date IS NOT NULL
174       THEN
175          l_override_date := p_override_date;
176       ELSE
177          /* Check if the override_date is already cached for a payroll_Action_id */
178          IF ltr_override_date_table.COUNT > 0
179          THEN
180             FOR j IN
181                ltr_override_date_table.FIRST .. ltr_override_date_table.LAST
182             LOOP
183                IF ltr_override_date_table (j).payroll_action_id =
184                                                             p_payroll_action_id
185                THEN
186                   l_override_date := ltr_override_date_table (j).override_date;
187                   hr_utility.set_location ('pay_us_payment_pkg.get_trx_date',
188                                            20
189                                           );
190                   EXIT;
191                END IF;
192             END LOOP;
193          ELSIF ltr_override_date_table.COUNT = 0
194          THEN
195             /* Check if OVERRIDING_DD_DATE has a value for the Check Writer Action */
196             OPEN c_get_override_date (p_business_group_id,
197                                       p_payroll_action_id,
198                                       p_payroll_id,
199                                       p_consolidation_set_id,
200                                       p_org_payment_method_id,
201                                       p_effective_date,
202                                       p_date_earned
203                                      );
204 
205             FETCH c_get_override_date
206              INTO l_override_date;
207 
208             CLOSE c_get_override_date;
209 
210             hr_utility.set_location ('pay_us_payment_pkg.get_trx_date', 30);
211             l_table_count := ltr_override_date_table.COUNT;
212             ltr_override_date_table (l_table_count).payroll_action_id :=
213                                                              p_payroll_action_id;
214             ltr_override_date_table (l_table_count).override_date :=
215                                                                  l_override_date;
216          END IF;                                            -- check for caching
217 
218          IF l_override_date IS NULL
219          THEN
220             IF p_payment_date IS NOT NULL
221             THEN
222                l_override_date := p_payment_date;
223                hr_utility.set_location ('pay_us_payment_pkg.get_trx_date', 40);
224             ELSIF p_pre_payment_id IS NOT NULL
225             THEN
226                /* Just fetch prepayment action's effective_date with pre_payment_id.
227                   This improves performance by not checking for interlocks */
228                OPEN c_get_pymt_date_with_prepay_id (p_pre_payment_id);
229 
230                FETCH c_get_pymt_date_with_prepay_id
231                 INTO l_override_date;
232 
233                CLOSE c_get_pymt_date_with_prepay_id;
234 
235                hr_utility.set_location ('pay_us_payment_pkg.get_trx_date', 50);
236             ELSE
237                /* With the help of interlocks, get prepayment effective_date */
238                OPEN c_get_pymt_effective_date (p_business_group_id,
239                                                p_payroll_action_id,
240                                                p_assignment_action_id,
241                                                p_payroll_id,
242                                                p_consolidation_set_id,
243                                                p_org_payment_method_id,
244                                                p_effective_date,
245                                                p_date_earned,
246                                                p_pre_payment_id
247                                               );
248 
249                FETCH c_get_pymt_effective_date
250                 INTO l_override_date;
251 
252                CLOSE c_get_pymt_effective_date;
253 
254                hr_utility.set_location ('pay_us_payment_pkg.get_trx_date', 60);
255             END IF;                             -- if p_payment_date is not null
256          END IF;                                   -- if l_override_date is null
257       END IF;
258 
259       -- if p_override_date is not null
260       RETURN l_override_date;
261    END;
262 END pay_us_payment_pkg;