DBA Data[Home] [Help]

PACKAGE BODY: APPS.AP_TP_STMT_PKG

Source


1 PACKAGE BODY AP_TP_STMT_PKG AS
2 -- $Header: APTPSTMTPB.pls 120.3.12020000.2 2012/11/06 05:29:40 sabadu ship $
3 /*===========================================================================+
4 --*************************************************************************
5 -- Copyright (c)  2000    Oracle                 Product Development
6 -- All rights reserved
7 --*************************************************************************
8 --
9 -- HEADER
10 --  Source control Body
11 --
12 -- PROGRAM NAME
13 --   APARTPSTMTPB.pls
14 --
15 -- DESCRIPTION
16 -- This script creates the package body of AP_TP_STMT_PKG
17 -- This package is used for Supplier Statement Reports.
18 --
19 -- USAGE
20 --   To install        sqlplus <apps_user>/<apps_pwd> @APTPSTMTPB.pls
21 --   To execute        sqlplus <apps_user>/<apps_pwd> AP_TP_STMT_PKG.
22 --
23 -- PROGRAM LIST        DESCRIPTION
24 --
25 -- BEFOREREPORT        This function is used to dynamically get the
26 --                     WHERE clause in SELECT statement.
27 --
28 -- DEPENDENCIES
29 -- None
30 --
31 -- CALLED BY
32 --
33 --
34 -- LAST UPDATE DATE    03-Sep-2007
35 -- Date the program has been modified for the last time.
36 --
37 -- HISTORY
38 -- =======
39 --
40 -- VERSION DATE        AUTHOR(S)       DESCRIPTION
41 -- ------- ----------- --------------- --------------------------------------
42 -- Draft1A 03-Sep-2007 Sandeep Kumar G Initial Creation
43 +===========================================================================*/
44 
45 --=====================================================================
46 --=====================================================================
47 PROCEDURE set_to_payables
48 IS
49 BEGIN
50 FND_FILE.put_line(FND_FILE.log,'In Set to Payables');
51 --****************************************************
52 -- Based on P_REPORTING_ENTITY_ID the data will be filtered
53 -- else we receive all the Org Specific information
54 -- those are accesible for the Responsibility.
55 --****************************************************
56   IF P_REPORTING_LEVEL = 1000 THEN
57   -- Implies Reporting Level is Ledger
58     gc_reporting_entity := ' AND hro.set_of_books_id  = :P_REPORTING_ENTITY_ID ';
59     gc_org_id := ' AND gled.ledger_id  = :P_REPORTING_ENTITY_ID ';
60     gc_pmt_org_id := ' AND gled.ledger_id  = :P_REPORTING_ENTITY_ID ';
61   ELSIF P_REPORTING_LEVEL = 3000 THEN
62   -- Implies Reporting Level is Operating Unit
63     gc_reporting_entity := ' AND hro.organization_id  = :P_REPORTING_ENTITY_ID ';
64     gc_org_id := ' AND ai.org_id  = :P_REPORTING_ENTITY_ID ';
65     gc_pmt_org_id := ' AND ac.org_id = :P_REPORTING_ENTITY_ID ';
66   END IF;
67 
68 --****************************************************
69 -- Based on P_VEND_TYPE the data will be filtered
70 -- else we will fetch all the Supplier Types
71 --****************************************************
72   IF P_VEND_TYPE IS NOT NULL THEN
73     gc_vend_type := ' AND asup.vendor_type_lookup_code = :P_VEND_TYPE ';
74   END IF;
75 FND_FILE.put_line(FND_FILE.log,'gc_vend_type := '||gc_vend_type);
76 --****************************************************
77 -- Based on P_PAY_GROUP the data will be filtered
78 -- else Suppliers irrespective of their Pay Group will be picked
79 --****************************************************
80   IF P_PAY_GROUP IS NOT NULL THEN
81     gc_pay_group := ' AND asup.pay_group_lookup_code = :P_PAY_GROUP ';
82   END IF;
83 FND_FILE.put_line(FND_FILE.log,'gc_pay_group := '||gc_pay_group);
84 --****************************************************
85 -- Based on P_CURRENCY the data will be filtered
86 -- else we receive the information for all Currencies
87 --****************************************************
88   IF P_CURRENCY <> 'ANY' THEN
89     gc_currency := ' AND ai.invoice_currency_code = :P_CURRENCY ';
90     gc_pmt_currency := ' AND ac.currency_code = :P_CURRENCY ';
91   END IF;
92 --****************************************************
93 -- Based on P_ACCOUNTED the data will be filtered
94 -- for 'Accounted' --> Only Accounted Records will be fetched
95 -- for 'Unaccounted' --> Only Unaccounted Records will be fetched
96 -- for 'Both' --> Both Accounted/Unaccounted Records will be fetched
97 --****************************************************
98   IF P_ACCOUNTED = 'ACCOUNTED' THEN
99     gc_pmt_accounted := ' AND aip.posted_flag = ''Y'' ';
100   ELSIF P_ACCOUNTED = 'UNACCOUNTED' THEN
101     gc_pmt_accounted := ' AND aip.posted_flag = ''N'' ';
102   END IF;
103 --****************************************************
104 -- Based on P_UNVALIDATED_TRX the data will be filtered
105 -- for 'Y' --> Pick all Transactions (Validated/Unvalidated)
106 -- for 'N' --> Pick Only Validated Transactions
107 --****************************************************
108   IF P_UNVALIDATED_TRX = 'N' THEN
109     gc_validate_inv := ' AND ai.invoice_id IN  ';
110     gc_validate_inv :=  gc_validate_inv||' (SELECT i.invoice_id';
111     gc_validate_inv :=  gc_validate_inv||' FROM ap_invoices_all i, ap_invoice_distributions d';
112     gc_validate_inv :=  gc_validate_inv||' WHERE d.invoice_id = i.invoice_id';
113     gc_validate_inv :=  gc_validate_inv||' AND i.invoice_id = ai.invoice_id';
114      gc_validate_inv :=  gc_validate_inv||' AND d.posted_flag IN (''N'', ''Y'')';  --Included correct validation status , Bug9397505
115      gc_validate_inv :=  gc_validate_inv||' AND i.validation_request_id IS NULL';
116      gc_validate_inv :=  gc_validate_inv||' AND (   ';
117      gc_validate_inv :=  gc_validate_inv||' NOT EXISTS (';
118      gc_validate_inv :=  gc_validate_inv||' SELECT ''Unreleased Hold exists''';
119      gc_validate_inv :=  gc_validate_inv||' FROM ap_holds h';
120      gc_validate_inv :=  gc_validate_inv||' WHERE h.invoice_id = i.invoice_id';
121      gc_validate_inv :=  gc_validate_inv||' AND h.hold_lookup_code IN';
122      gc_validate_inv :=  gc_validate_inv||' (''QTY ORD'', ''QTY REC'', ''AMT ORD'', ''AMT REC'',';
123      gc_validate_inv :=  gc_validate_inv||' ''QUALITY'', ''PRICE'', ''TAX DIFFERENCE'',';
124      gc_validate_inv :=  gc_validate_inv||' ''CURRENCY DIFFERENCE'', ''REC EXCEPTION'',';
125      gc_validate_inv :=  gc_validate_inv||' ''TAX VARIANCE'', ''PO NOT APPROVED'', ''PO REQUIRED'',';
126      gc_validate_inv :=  gc_validate_inv||' ''MAX SHIP AMOUNT'', ''MAX RATE AMOUNT'',';
127      gc_validate_inv :=  gc_validate_inv||' ''MAX TOTAL AMOUNT'', ''TAX AMOUNT RANGE'',';
128      gc_validate_inv :=  gc_validate_inv||' ''MAX QTY ORD'', ''MAX QTY REC'', ''MAX AMT ORD'',';
129      gc_validate_inv :=  gc_validate_inv||' ''MAX AMT REC'', ''CANT CLOSE PO'', ''CANT TRY PO CLOSE'',';
130      gc_validate_inv :=  gc_validate_inv||' ''LINE VARIANCE'')';
131      gc_validate_inv :=  gc_validate_inv||' AND h.release_lookup_code IS NULL)))';
132   END IF;
133 --****************************************************
134 -- Based on P_UNAPPROVED_TRX the data will be filtered
135 -- The Parameter says to Pick Only Approved Invoices or All
136 -- for 'Y' --> Pick all Transactions (Unapproved/Approved/Approval Not Required)
137 -- for 'N' --> Pick Only Approved/Approval Not Required Transactions
138 --****************************************************
139   IF P_UNAPPROVED_TRX = 'N' THEN
140     gc_unapproved_trx := ' AND ai.wfapproval_status IN (''ACCEPT'',''APPROVED'',''MANUALLY APPROVED'',''NOT REQUIRED'',''WFAPPROVED'',''ACKNOWLEDGE'',''CANCEL'',''CANCELLED'') ';
141   END IF;
142 END set_to_payables;
143 
144 --=====================================================================
145 --=====================================================================
146 FUNCTION beforereport RETURN BOOLEAN
147 IS
148 BEGIN
149     set_to_payables();
150 -- The Parameters that are common to both the Modules are set here
151 --****************************************************
152 -- Based on P_FROM_SUPP_NAME and P_TO_SUPP_NAME the
153 -- data will be filtered else we receive the information
154 -- for all the Customers
155 --****************************************************
156   IF P_FROM_SUPP_NAME IS NOT NULL AND P_TO_SUPP_NAME IS NOT NULL THEN
157     gc_supplier_name := ' AND asup.vendor_name >= :P_FROM_SUPP_NAME
158                           AND asup.vendor_name <= :P_TO_SUPP_NAME ';
159   ELSIF P_FROM_SUPP_NAME IS NULL AND P_TO_SUPP_NAME IS NOT NULL THEN
160     gc_supplier_name := ' AND asup.vendor_name <= :P_TO_SUPP_NAME ';
161   ELSIF P_FROM_SUPP_NAME IS NOT NULL AND P_TO_SUPP_NAME IS NULL THEN
162     gc_supplier_name := ' AND asup.vendor_name >= :P_FROM_SUPP_NAME ';
163   END IF;
164   RETURN (TRUE);
165 END beforereport;
166 
167 --=====================================================================
168 --=====================================================================
169 FUNCTION invoice_validate_status (p_in_inv_id IN NUMBER)
170 RETURN VARCHAR2
171 IS
172   ln_inv_id NUMBER;
173 BEGIN
174   SELECT count(1)
175     INTO ln_inv_id
176     FROM (SELECT i.invoice_id invoice_id
177   FROM ap_invoices_all i, ap_invoice_distributions d
178  WHERE d.invoice_id = i.invoice_id
179    AND i.invoice_id = p_in_inv_id
180    AND d.posted_flag IN ('N', 'Y')  --Included correct validation status , Bug9397505
181    AND i.validation_request_id IS NULL
182    AND (  NOT EXISTS (
183               SELECT 'Unreleased Hold exists'
184                 FROM ap_holds h
185                WHERE h.invoice_id = i.invoice_id
186                  AND h.hold_lookup_code IN
187                         ('QTY ORD', 'QTY REC', 'AMT ORD', 'AMT REC',
188                          'QUALITY', 'PRICE', 'TAX DIFFERENCE',
189                          'CURRENCY DIFFERENCE', 'REC EXCEPTION',
190                          'TAX VARIANCE', 'PO NOT APPROVED', 'PO REQUIRED',
191                          'MAX SHIP AMOUNT', 'MAX RATE AMOUNT',
192                          'MAX TOTAL AMOUNT', 'TAX AMOUNT RANGE',
193                          'MAX QTY ORD', 'MAX QTY REC', 'MAX AMT ORD',
194                          'MAX AMT REC', 'CANT CLOSE PO', 'CANT TRY PO CLOSE',
195                          'LINE VARIANCE')
196                  AND h.release_lookup_code IS NULL)));
197   IF ln_inv_id <> 0 THEN
198   --Bug9252303: Added quotes to sync the return value with return type.
199   --Bug9397505 : changed Y/N to 1/0 to support rft format.
200   RETURN ('Y');
201   ELSE
202   RETURN ('N');
203   END IF;
204 EXCEPTION
205   WHEN NO_DATA_FOUND THEN
206     RETURN('N');
207 END invoice_validate_status;
208 --=====================================================================
209 --=====================================================================
210 FUNCTION balance_brought_forward (p_in_vendor_id      IN NUMBER
211                                  ,p_in_vendor_site_id IN NUMBER
212                                  ,p_in_org_id         IN NUMBER)
213 RETURN NUMBER
214 IS
215   ln_amount NUMBER;
216 BEGIN
217   SELECT SUM(DECODE(transaction_type,'P',-1*accounted_amount,accounted_amount)) amount
218   INTO ln_amount
219   FROM
220     (     SELECT 'I'  transaction_type
221            ,SUM(NVL(ai.invoice_amount * NVL(ai.exchange_rate,1),0)) accounted_amount
222      FROM  ap_invoices ai
223      WHERE ai.vendor_id = p_in_vendor_id
224      AND   ai.vendor_site_id = p_in_vendor_site_id
225      AND   ai.invoice_type_lookup_code  <> 'PREPAYMENT'  --Bug9252303
226      AND   ai.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
227      AND   ai.invoice_currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',ai.invoice_currency_code,P_CURRENCY),ai.invoice_currency_code)
228      AND   ai.org_id = p_in_org_id
229      AND   ((AP_TP_STMT_PKG.invoice_validate_status(ai.invoice_id) = 'Y'    --'Y' Bug9252303
230         AND P_UNVALIDATED_TRX = 'N')
231         OR P_UNVALIDATED_TRX = 'Y')
232      AND  AP_INVOICES_PKG.get_posting_status(ai.invoice_id)
233                              = DECODE(P_ACCOUNTED,'ACCOUNTED','Y'
234                                                  ,'UNACCOUNTED','N'
235                                              ,AP_INVOICES_PKG.get_posting_status(ai.invoice_id))
236      AND ((P_UNAPPROVED_TRX = 'N'
237      AND ai.wfapproval_status IN ('ACCEPT','APPROVED','MANUALLY APPROVED','NOT REQUIRED','WFAPPROVED','ACKNOWLEDGE','CANCEL','CANCELLED'))
238      OR (P_UNAPPROVED_TRX = 'Y' ))
239      UNION ALL
240      SELECT 'P' transaction_type
241            ,SUM(NVL(aip.amount * NVL(aip.exchange_rate,1),0)) accounted_amount
242      FROM   ap_invoice_payments aip
243            ,ap_checks ac
244      WHERE aip.check_id = ac.check_id
245      AND   ac.vendor_id = p_in_vendor_id
246      AND   ac.vendor_site_id = p_in_vendor_site_id
247    --  AND   ac.check_date < TO_DATE(P_FROM_DOC_DATE,'RRRR/MM/DD HH24:MI:SS') Bug 14724500
248      AND   aip.accounting_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
249      AND   ac.org_id = p_in_org_id
250      AND   ac.currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',ac.currency_code,P_CURRENCY),ac.currency_code)
251      AND ((P_ACCOUNTED = 'ACCOUNTED' AND aip.posted_flag = 'Y')
252               OR (P_ACCOUNTED = 'UNACCOUNTED' AND aip.posted_flag = 'N')
253          OR (P_ACCOUNTED = 'BOTH'))
254 	--Bug9252303: Commented below query that selects prepayment applications.
255     /* UNION ALL
256      SELECT 'A' transaction_type
257            ,SUM((NVL(aid.amount,0)* NVL(ai.exchange_rate,1))*-1) amount_applied
258      FROM   ap_invoices ai
259            ,ap_invoice_distributions_all aid
260            ,ap_invoices aipre
261            ,ap_invoice_distributions_all aidpre
262      WHERE ai.invoice_id = aid.invoice_id
263      AND   aid.prepay_distribution_id = aidpre.invoice_distribution_id
264      AND   aipre.invoice_id = aidpre.invoice_id
265      AND   aid.accounting_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
266      AND   ai.vendor_id = p_in_vendor_id
267      AND   ai.vendor_site_id = p_in_vendor_site_id
268      AND   ai.invoice_currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',ai.invoice_currency_code,P_CURRENCY),ai.invoice_currency_code)
269      AND   ai.org_id = p_in_org_id
270      AND   ai.wfapproval_status NOT IN ('CANCEL','CANCELLED')
271      AND  AP_INVOICES_PKG.get_posting_status(ai.invoice_id)
272                              = DECODE(P_ACCOUNTED,'ACCOUNTED','Y'
273                                                   ,'UNACCOUNTED','N'
274                                                   ,AP_INVOICES_PKG.get_posting_status(ai.invoice_id))
275      AND ((P_UNAPPROVED_TRX = 'N'
276      AND ai.wfapproval_status IN ('ACCEPT','APPROVED','MANUALLY APPROVED','NOT REQUIRED','WFAPPROVED','ACKNOWLEDGE'))
277      OR (P_UNAPPROVED_TRX = 'Y' ))*/
278     );
279   RETURN (NVL(ln_amount,0));
280 END balance_brought_forward;
281 
282 END AP_TP_STMT_PKG;