DBA Data[Home] [Help]

PACKAGE BODY: APPS.AR_TP_STMT_PKG

Source


1 PACKAGE BODY AR_TP_STMT_PKG AS
2 -- $Header: ARSTMTRPTPB.pls 120.2 2008/03/05 13:54:33 sgudupat noship $
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 --   ARSTMTRPTPB.pls
14 --
15 -- DESCRIPTION
16 -- This script creates the package body of AR_TP_STMT_PKG
17 -- This package is used for Supplier/Customer Statement Reports.
18 --
19 -- USAGE
20 --   To install        sqlplus <apps_user>/<apps_pwd> @ARSTMTRPTPB.pls
21 --   To execute        sqlplus <apps_user>/<apps_pwd> AR_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 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
48 PROCEDURE set_to_receivables
49 IS
50 BEGIN
51 --****************************************************
52 -- Based on P_REPORTING_LEVEL 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_ORG_ID IS NOT NULL THEN
57 --    gc_org_id := ' AND rct.org_id  = :P_ORG_ID ';
58 --    gc_rcpt_org_id := ' AND acr.org_id = :P_ORG_ID ';
59 --  END IF;
60 
61   IF P_REPORTING_LEVEL = 1000 THEN
62   -- Implies Reporting Level is Ledger
63     gc_reporting_entity := ' AND hou.set_of_books_id  = :P_REPORTING_ENTITY_ID ';
64     gc_org_id := ' AND gled.ledger_id  = :P_REPORTING_ENTITY_ID ';
65     gc_rcpt_org_id := ' AND gled.ledger_id = :P_REPORTING_ENTITY_ID ';
66   ELSIF P_REPORTING_LEVEL = 3000 THEN
67   -- Implies Reporting Level is Operating Unit
68     gc_reporting_entity := ' AND hou.organization_id  = :P_REPORTING_ENTITY_ID ';
69     gc_org_id := ' AND rct.org_id  = :P_REPORTING_ENTITY_ID ';
70     gc_rcpt_org_id := ' AND acr.org_id = :P_REPORTING_ENTITY_ID ';
71   ELSIF P_REPORTING_LEVEL = 2000 THEN
72   -- Implies Reporting Level is Legal Entity
73 --    gc_reporting_entity := ' AND hou.organization_id  = :P_REPORTING_ENTITY_ID ';
74     gc_org_id := ' AND rct.legal_entity_id  = :P_REPORTING_ENTITY_ID ';
75     gc_rcpt_org_id := ' AND acr.legal_entity_id = :P_REPORTING_ENTITY_ID ';
76   END IF;
77   IF PG_DEBUG in ('Y', 'C') THEN
78     arp_util.debug('gc_reporting_entity : ' || gc_reporting_entity);
79     arp_util.debug('gc_org_id : ' || gc_org_id);
80     arp_util.debug('gc_rcpt_org_id : ' || gc_rcpt_org_id);
81   END IF;
82 --****************************************************
83 -- Based on P_CUST_CLASS the data will be filtered
84 -- else we will fetch all the Customers of any Customer Class
85 --****************************************************
86   IF P_CUST_CLASS IS NOT NULL THEN
87     gc_cust_class := ' AND hca.customer_class_code = :P_CUST_CLASS ';
88   END IF;
89   IF PG_DEBUG in ('Y', 'C') THEN
90     arp_util.debug('gc_cust_class : ' || gc_cust_class);
91   END IF;
92 --****************************************************
93 -- Based on P_CUST_CATEGORY the data will be filtered
94 -- else we will fetch all the Customers of any Customer Category
95 --****************************************************
96   IF P_CUST_CATEGORY IS NOT NULL THEN
97     gc_cust_category := ' AND hpar.category_code = :P_CUST_CATEGORY ';
98   END IF;
99   IF PG_DEBUG in ('Y', 'C') THEN
100     arp_util.debug('gc_cust_category : ' || gc_cust_category);
101   END IF;
102 --****************************************************
103 -- Based on P_CURRENCY the data will be filtered
104 -- else we receive the information for all Currencies
105 --****************************************************
106   IF P_CURRENCY <> 'ANY' THEN
107     gc_currency := ' AND rct.invoice_currency_code = :P_CURRENCY ';
108     gc_rcpt_currency := ' AND acr.currency_code = :P_CURRENCY ';
109   END IF;
110   IF PG_DEBUG in ('Y', 'C') THEN
111     arp_util.debug('gc_currency : ' || gc_currency);
112     arp_util.debug('gc_rcpt_currency : ' || gc_rcpt_currency);
113   END IF;
114 --****************************************************
115 -- Based on P_ACCOUNTED the data will be filtered
116 -- for 'Accounted' --> Only Accounted Records will be fetched
117 -- for 'Unaccounted' --> Only Unaccounted Records will be fetched
118 -- for 'Both' --> Both Accounted/Unaccounted Records will be fetched
119 --****************************************************
120   IF P_ACCOUNTED = 'ACCOUNTED' THEN
121     gc_accounted := ' AND rctld.posting_control_id <> -3 ';
122     gc_rcpt_accounted := ' AND acrh.posting_control_id <> -3 ';
123     gc_adj_accounted := ' AND aa.posting_control_id <> -3 ';
124 	gc_app_accounted := ' AND ara.posting_control_id <> -3 ';
125   ELSIF P_ACCOUNTED = 'UNACCOUNTED' THEN
126     gc_accounted := ' AND rctld.posting_control_id = -3 ';
127     gc_rcpt_accounted := ' AND acrh.posting_control_id = -3 ';
128     gc_adj_accounted := ' AND aa.posting_control_id = -3 ';
129 	gc_app_accounted := ' AND ara.posting_control_id = -3 ';
130   END IF;
131   IF PG_DEBUG in ('Y', 'C') THEN
132     arp_util.debug('gc_accounted : ' || gc_accounted);
133     arp_util.debug('gc_rcpt_accounted : ' || gc_rcpt_accounted);
134     arp_util.debug('gc_adj_accounted : ' || gc_adj_accounted);
135     arp_util.debug('gc_app_accounted : ' || gc_app_accounted);
136   END IF;
137 --****************************************************
138 -- Based on P_INCOMPLETE_TRX the data will be filtered
139 -- for 'Y' --> Pick all Transactions (Complete/Incomplete)
140 -- for 'N' --> Pick Only Completed Transactions
141 --****************************************************
142   IF P_INCOMPLETE_TRX = 'N' THEN
143     gc_incomplete_trx := ' AND rct.complete_flag = ''Y'' ';
144   END IF;
145   IF PG_DEBUG in ('Y', 'C') THEN
146     arp_util.debug('gc_incomplete_trx : ' || gc_incomplete_trx);
147   END IF;
148 END set_to_receivables;
149 --**********************************************************
150 -- Before Report function used to obtain the Dynamic Queries
151 -- Based on the Input Parameter Values
152 --**********************************************************
153 FUNCTION beforereport RETURN BOOLEAN
154 IS
155 BEGIN
156   IF PG_DEBUG in ('Y', 'C') THEN
157     arp_util.debug('P_REPORTING_LEVEL       : '||P_REPORTING_LEVEL);
158     arp_util.debug('P_REPORTING_ENTITY_ID   : '||P_REPORTING_ENTITY_ID);
159     arp_util.debug('P_REPORTING_ENTITY_NAME : '||P_REPORTING_ENTITY_NAME);
160     arp_util.debug('P_FROM_DOC_DATE         : '||P_FROM_DOC_DATE);
161     arp_util.debug('P_TO_DOC_DATE           : '||P_TO_DOC_DATE);
162     arp_util.debug('P_FROM_GL_DATE          : '||P_FROM_GL_DATE);
163     arp_util.debug('P_TO_GL_DATE            : '||P_TO_GL_DATE);
164     arp_util.debug('P_FROM_CUST_NAME        : '||P_FROM_CUST_NAME);
165     arp_util.debug('P_TO_CUST_NAME          : '||P_TO_CUST_NAME);
166     arp_util.debug('P_CURRENCY              : '||P_CURRENCY);
167     arp_util.debug('P_CUST_CATEGORY         : '||P_CUST_CATEGORY);
168     arp_util.debug('P_CUST_CLASS            : '||P_CUST_CLASS);
169     arp_util.debug('P_INCOMPLETE_TRX        : '||P_INCOMPLETE_TRX);
170     arp_util.debug('P_ACCOUNTED             : '||P_ACCOUNTED);
171   END IF;
172   set_to_receivables();
173 --****************************************************
174 -- Based on P_FROM_CUST_NAME and P_TO_CUST_NAME the
175 -- data will be filtered else we receive the information
176 -- for all the Customers
177 --****************************************************
178   IF P_FROM_CUST_NAME IS NOT NULL AND P_TO_CUST_NAME IS NOT NULL THEN
179     gc_customer_name := ' AND hpar.party_name >= :P_FROM_CUST_NAME
180                           AND hpar.party_name <= :P_TO_CUST_NAME ';
181   ELSIF P_FROM_CUST_NAME IS NULL AND P_TO_CUST_NAME IS NOT NULL THEN
182     gc_customer_name := ' AND hpar.party_name <= :P_TO_CUST_NAME ';
183   ELSIF P_FROM_CUST_NAME IS NOT NULL AND P_TO_CUST_NAME IS NULL THEN
184     gc_customer_name := ' AND hpar.party_name >= :P_FROM_CUST_NAME ';
185   ELSE
186     gc_customer_name := ' AND 1 = 1 ';
187   END IF;
188   IF PG_DEBUG in ('Y', 'C') THEN
189     arp_util.debug('gc_customer_name : ' || gc_customer_name);
190   END IF;
191   RETURN (TRUE);
192 END beforereport;
193 --**********************************************************
194 -- Balance forward function used to obtain the Opening Balance
195 -- Of a Customer at Site Level
196 --**********************************************************
197 
198 FUNCTION balance_brought_forward (p_in_cust_account_id IN NUMBER
199                                  ,p_in_site_use_id     IN NUMBER
200                                  ,p_in_org_id          IN NUMBER)
201 RETURN NUMBER
202 IS
203   ln_amount NUMBER := 0;
204 BEGIN
205   SELECT SUM(DECODE(trx_type,'R',-1*accounted_amount,accounted_amount)) amount
206   INTO ln_amount
207   FROM (SELECT 'T'                    trx_type
208       ,SUM(NVL(rctld.acctd_amount,0)) accounted_amount
209  FROM  ra_customer_trx          rct
210       ,ra_cust_trx_line_gl_dist_all rctld
211 	  ,ra_cust_trx_types_all    rctt
212  WHERE rct.customer_trx_id     = rctld.customer_trx_id
213    AND rct.cust_trx_type_id       = rctt.cust_trx_type_id
214    AND rct.org_id                 = rctt.org_id
215    AND rctld.latest_rec_flag   = 'Y'
216    AND rctld.account_class     = 'REC'
217    AND rctt.post_to_gl = 'Y'
218    AND rctt.type IN ('CB','INV','DM','CM','BR','DEP')
219    AND rctld.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
220    AND rct.bill_to_customer_id = p_in_cust_account_id
221    AND rct.bill_to_site_use_id  = p_in_site_use_id
222    AND rct.org_id = p_in_org_id
223    AND rct.invoice_currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',rct.invoice_currency_code,P_CURRENCY),rct.invoice_currency_code)
224    AND rct.complete_flag = DECODE(P_INCOMPLETE_TRX,'N','Y', rct.complete_flag)
225    AND ( (P_ACCOUNTED = 'ACCOUNTED' AND rctld.posting_control_id <> -3 )
226      OR (P_ACCOUNTED = 'UNACCOUNTED' AND rctld.posting_control_id = -3 )
227 	 OR (P_ACCOUNTED = 'BOTH'))
228 UNION ALL
229 SELECT 'R'                      trx_type
230       ,SUM(NVL(acr.amount * NVL(acr.exchange_rate,1),0)) accounted_amount
231  FROM  ar_cash_receipts          acr
232       ,ar_cash_receipt_history_all acrh
233  WHERE acr.cash_receipt_id     = acrh.cash_receipt_id
234    AND acr.org_id              = acrh.org_id
235    AND acrh.first_posted_record_flag = 'Y'
236    AND acrh.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
237    AND acr.pay_from_customer = p_in_cust_account_id
238    AND acr.customer_site_use_id  = p_in_site_use_id
239    AND acr.org_id = p_in_org_id
240    AND acr.currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',acr.currency_code,P_CURRENCY),acr.currency_code)
241    AND ( (P_ACCOUNTED = 'ACCOUNTED' AND acrh.posting_control_id <> -3 )
242       OR (P_ACCOUNTED = 'UNACCOUNTED' AND acrh.posting_control_id = -3 )
243 	  OR (P_ACCOUNTED = 'BOTH'))
244 UNION ALL
245 SELECT 'RE'                      trx_type
246       ,SUM(NVL(acr.amount * NVL(acr.exchange_rate,1),0)) accounted_amount
247  FROM  ar_cash_receipts          acr
248       ,ar_cash_receipt_history_all acrh
249  WHERE acr.cash_receipt_id     = acrh.cash_receipt_id
250    AND acr.org_id              = acrh.org_id
251    AND acr.reversal_date IS NOT NULL
252    AND acrh.current_record_flag = 'Y'
253    AND acrh.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
254    AND acr.pay_from_customer = p_in_cust_account_id
255    AND acr.customer_site_use_id  = p_in_site_use_id
256    AND acr.org_id = p_in_org_id
257    AND acr.currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',acr.currency_code,P_CURRENCY),acr.currency_code)
258    AND ( (P_ACCOUNTED = 'ACCOUNTED' AND acrh.posting_control_id <> -3 )
259        OR (P_ACCOUNTED = 'UNACCOUNTED' AND acrh.posting_control_id = -3 )
260 	   OR (P_ACCOUNTED = 'BOTH'))
261 UNION ALL
262 SELECT 'A'                         trx_type
263       ,SUM(NVL(aa.acctd_amount,0)) accounted_amount
264  FROM  ar_adjustments           aa
265       ,ra_customer_trx_all      rct
266 	  ,ra_cust_trx_types_all    rctt
267  WHERE rct.customer_trx_id     = aa.customer_trx_id
268    AND rct.org_id              = aa.org_id
269    AND rct.cust_trx_type_id    = rctt.cust_trx_type_id
270    AND rct.org_id              = rctt.org_id
271    AND aa.status = 'A' -- For approved Adjustments
272    AND aa.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
273    AND rct.bill_to_customer_id = p_in_cust_account_id
274    AND rct.bill_to_site_use_id  = p_in_site_use_id
275    AND rct.org_id  = p_in_org_id
276    AND rctt.post_to_gl         = 'Y' -- Only Postable to GL are picked
277    AND rctt.type  IN ('CB','INV','DM','CM','BR','DEP') -- Guarantees are not picked
278    AND rct.invoice_currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',rct.invoice_currency_code,P_CURRENCY),rct.invoice_currency_code)
279    AND rct.complete_flag = DECODE(P_INCOMPLETE_TRX,'N','Y', rct.complete_flag)
280    AND ( (P_ACCOUNTED = 'ACCOUNTED' AND aa.posting_control_id <> -3)
281       OR (P_ACCOUNTED = 'UNACCOUNTED' AND aa.posting_control_id = -3)
282 	  OR (P_ACCOUNTED = 'BOTH'))
283 UNION ALL
284 SELECT 'RE'                               trx_type
285       ,SUM(ara.acctd_amount_applied_from) accounted_amount
286 FROM  ar_cash_receipts               acr
287      ,ar_receivable_applications_all ara
288      ,ar_receivables_trx_all         art
289 WHERE acr.cash_receipt_id        = ara.cash_receipt_id
290   AND acr.org_id                 = ara.org_id
291   AND ara.receivables_trx_id     = art.receivables_trx_id
292   AND ara.org_id                 = art.org_id
293   AND ara.gl_date < TO_DATE(P_FROM_GL_DATE,'RRRR/MM/DD HH24:MI:SS')
294   AND acr.pay_from_customer = p_in_cust_account_id
295   AND acr.customer_site_use_id  = p_in_site_use_id
296   AND acr.org_id = p_in_org_id
297   AND art.type  = 'WRITEOFF'
298   AND acr.currency_code = NVL2(P_CURRENCY,DECODE(P_CURRENCY,'ANY',acr.currency_code,P_CURRENCY),acr.currency_code)
299   AND ( (P_ACCOUNTED = 'ACCOUNTED' AND ara.posting_control_id <> -3)
300      OR (P_ACCOUNTED = 'UNACCOUNTED' AND ara.posting_control_id = -3)
301 	 OR (P_ACCOUNTED = 'BOTH')));
302   RETURN (NVL(ln_amount,0));
303 END balance_brought_forward;
304 
305 FUNCTION contact_details(p_owner_table_id IN NUMBER
306                         ,p_contact_type IN VARCHAR2)
307 RETURN VARCHAR2
308 IS
309   lc_cust_phone_number VARCHAR2(1000);
310   lc_primary_flag      VARCHAR2(1);
311 BEGIN
312   IF p_contact_type <> 'FAX' THEN
313   BEGIN
314     SELECT REPLACE(LTRIM(hcp.phone_area_code||'-'||
315                    hcp.phone_country_code||'-'||
316                    hcp.phone_number,'-'),'--','-')
317           ,hcp.primary_flag
318     INTO   lc_cust_phone_number
319           ,lc_primary_flag
320     FROM   hz_contact_points hcp
321     WHERE  hcp.status = 'A'
322     AND    hcp.owner_table_id = p_owner_table_id
323     AND    hcp.contact_point_type = 'PHONE'
324     AND    hcp.phone_line_type IN ('GEN','PHONE','MOBILE')
325     AND    hcp.primary_flag = 'Y';
326   EXCEPTION
327     WHEN NO_DATA_FOUND THEN
328       SELECT REPLACE(LTRIM(hcp.phone_area_code||'-'||
329                    hcp.phone_country_code||'-'||
330                    hcp.phone_number,'-'),'--','-')
331             ,hcp.primary_flag
332       INTO   lc_cust_phone_number
333             ,lc_primary_flag
334       FROM   hz_contact_points hcp
335       WHERE  hcp.contact_point_id = (SELECT MIN(hcp1.contact_point_id)
336                                      FROM   hz_contact_points hcp1
337                                      WHERE  hcp1.status = 'A'
338                                      AND    hcp1.owner_table_id = p_owner_table_id
339                                      AND    hcp1.contact_point_type = 'PHONE'
340                                      AND    hcp1.phone_line_type IN ('GEN','PHONE','MOBILE'));
341   END;
342   ELSE
343   BEGIN
344     SELECT REPLACE(LTRIM(hcp.phone_area_code||'-'||
345                    hcp.phone_country_code||'-'||
346                    hcp.phone_number,'-'),'--','-')
347           ,hcp.primary_flag
348     INTO   lc_cust_phone_number
349           ,lc_primary_flag
350     FROM   hz_contact_points hcp
351     WHERE  hcp.status = 'A'
352     AND    hcp.owner_table_id = p_owner_table_id
353     AND    hcp.contact_point_type = 'PHONE'
354     AND    hcp.phone_line_type = 'FAX'
355     AND    hcp.primary_flag = 'Y';
356   EXCEPTION
357     WHEN NO_DATA_FOUND THEN
358       SELECT REPLACE(LTRIM(hcp.phone_area_code||'-'||
359                    hcp.phone_country_code||'-'||
360                    hcp.phone_number,'-'),'--','-')
361             ,hcp.primary_flag
362       INTO   lc_cust_phone_number
363             ,lc_primary_flag
364       FROM   hz_contact_points hcp
365       WHERE  hcp.contact_point_id = (SELECT MIN(hcp1.contact_point_id)
366                                      FROM   hz_contact_points hcp1
367                                      WHERE  hcp1.status = 'A'
368                                      AND    hcp1.owner_table_id = p_owner_table_id
369                                      AND    hcp1.contact_point_type = 'PHONE'
370                                      AND    hcp1.phone_line_type  = 'FAX');
371   END;
372   END IF;
373 RETURN (lc_primary_flag||lc_cust_phone_number);
374 END contact_details;
375 
376 END AR_TP_STMT_PKG;