[Home] [Help]
PACKAGE BODY: APPS.FII_AR_TRX_ACT_DTL_PKG
Source
1 PACKAGE BODY fii_ar_trx_act_dtl_pkg AS
2 /* $Header: FIIARDBITADB.pls 120.27 2007/07/03 20:17:33 mmanasse ship $ */
3
4 PROCEDURE get_trx_act_dtl(
5 p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
6 p_trx_act_dtl_sql OUT NOCOPY VARCHAR2,
7 p_trx_act_dtl_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL
8 ) IS
9
10 sqlstmt VARCHAR2(24000); -- Variable that stores the final SQL query
11 l_viewby_id VARCHAR2(240); -- Variable to store the viewby_id based on viewby selected in the report
12 l_view_by VARCHAR2(240); -- Variable to store the viewby based on viewby selected in the report
13 l_collector_where VARCHAR2(240); -- Variable to store the dynamic collector filter
14 l_customer_where VARCHAR2(240); -- Variable to store the dynamic customer filter
15 l_customer_acc_where VARCHAR2(240); -- Variable to store the dynamic customer account filter
16 l_child_party_where VARCHAR2(240); -- Variable to store the dynamic party id filter
17 l_cust_acc_drill VARCHAR2(1000); -- Variable to store drill parameter to view report at customer account level
18 l_cust_drill VARCHAR2(1000); -- Variable to store self-drill parameter to view report to explore child nodes
19 l_inv_drill VARCHAR2(1000); -- Variable to store drill parameter for Invoice column
20 l_dm_drill VARCHAR2(1000); -- Variable to store drill parameter for Debit Memo column
21 l_cb_drill VARCHAR2(1000); -- Variable to store drill parameter for Chargeback column
22 l_unapp_drill VARCHAR2(1000); -- Variable to store drill parameter for Unapplied column
23 l_viewby_drill VARCHAR2(1000); -- Variable to store drill parameter for View By column
24 l_amt_inv_drill VARCHAR2(1000); -- Variable to store drill parameter for Invoice column
25 l_amt_dm_drill VARCHAR2(1000); -- Variable to store drill parameter for Debit Memo column
26 l_amt_cb_drill VARCHAR2(1000); -- Variable to store drill parameter for Chargeback column
27 l_amt_unapp_drill VARCHAR2(1000); -- Variable to store drill parameter for Unapplied column
28 l_global_start_date VARCHAR2(240); -- Variable to store the globla start date
29 l_viewby VARCHAR2(240); -- Variable to store the view by column description clause
30 l_group_by VARCHAR2(240); -- Variable to store the group by clause
31 l_order_by VARCHAR2(240); -- Variable to store the order by clause
32 l_order_by_util VARCHAR2(240); -- Variable to store the order by clause returned from the util pkg
33 l_order_column VARCHAR2(100); -- Variable to store the order by column
34 l_where_clause VARCHAR2(1000); -- Variable to store the WHERE clause dynamically
35 l_from_clause VARCHAR2(1000); -- Variable to store the FROM clause dynamically
36 l_cust_account VARCHAR2(30); -- Variable to store Customer Account Id passed from the parent report
37 l_function_name VARCHAR2(100); -- Variable to store the function name that is being called
38 l_sysdate VARCHAR2(30); -- Variable to store sysdate for sending it to child report
39 l_balance_drill VARCHAR2(2000); -- Variable to store the drill on balance column
40 l_balance_col VARCHAR2(1000); -- Variable to store Balance column source dynamically
41 l_col_curr_suffix VARCHAR2(100); -- Variable to store the currency suffix
42
43 BEGIN
44
45 -- Reads the parameters from the parameter portlet
46 fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
47
48 -- Defaulting the View By to OU
49 fii_ar_util_pkg.g_view_by := 'ORGANIZATION+FII_OPERATING_UNITS';
50
51 -- Populates the security related global temporary tables (fii_ar_summary_gt)
52 fii_ar_util_pkg.populate_summary_gt_tables;
53
54 --Logic for sorting
55 l_order_by_util := fii_ar_util_pkg.g_order_by;
56
57 IF instr(substr(l_order_by_util,-3), 'ASC') <> 0 THEN
58 -- Ascending order sorting on any column
59 l_order_by := '&ORDER_BY_CLAUSE';
60 ELSIF instr(l_order_by_util, 'FII_AR_ORIG_AMT DESC') <> 0 THEN
61 -- Default sorting
62 l_order_by := 'ORDER BY NVL(FII_AR_ORIG_AMT, -999999999) DESC';
63 ELSIF instr(l_order_by_util, 'DATE') <> 0 THEN
64 -- Descending order sorting on Date column
65 l_order_by := '&ORDER_BY_CLAUSE';
66 ELSIF instr(l_order_by_util, 'BINARY') <> 0 THEN
67 -- Descending order sorting on Text column
68 l_order_column := substr(l_order_by_util, instr(l_order_by_util, 'FII'), instr(l_order_by_util, ',') - instr(l_order_by_util, 'FII'));
69 l_order_by := 'ORDER BY NVL(' || l_order_column || ', '' '') DESC';
70 ELSE
71 -- Descending order sorting on Amount column
72 l_order_column := substr(l_order_by_util,1,instr(l_order_by_util, ' DESC'));
73 l_order_by := 'ORDER BY NVL('|| l_order_column ||', -999999999) DESC';
74 END IF;
75
76 l_cust_account := fii_ar_util_pkg.g_cust_account;
77
78 -- Adding filter when one or multiple customers selected but not All
79 IF fii_ar_util_pkg.g_party_id <> '-111' THEN
80 l_where_clause := l_where_clause || ' AND hzca.party_id = gt.party_id AND hzca.party_id = :PARTY_ID';
81 END IF;
82
83 -- Adding filter when a single collector is selected
84 IF fii_ar_util_pkg.g_collector_id <> '-111' THEN
85 l_from_clause := ', fii_collectors coll';
86 l_where_clause := l_where_clause
87 || ' AND coll.collector_id = gt.collector_id
88 AND coll.site_use_id = f.bill_to_site_use_id
89 AND coll.cust_account_id = f.bill_to_customer_id';
90 END IF;
91
92 -- Adding filter when a single industry is selected
93 IF fii_ar_util_pkg.g_industry_id <> '-111' THEN
94 l_from_clause := l_from_clause || ' , fii_party_mkt_class ind';
95 l_where_clause := l_where_clause || ' AND ind.class_code = gt.class_code
96 AND ind.party_id = hzca.party_id
97 AND hzca.cust_account_id = f.bill_to_customer_id';
98 END IF;
99
100 IF l_cust_account IS NULL THEN
101 l_cust_account := ' NULL ';
102 ELSE
103 l_where_clause := l_where_clause || ' AND f.bill_to_customer_id = :CUST_ACCOUNT';
104 END IF;
105
106 l_function_name := fii_ar_util_pkg.g_function_name;
107
108 l_col_curr_suffix := fii_ar_util_pkg.g_col_curr_suffix;
109
110 l_balance_col := '
111 sum(ag.current_bucket_1_amount' || l_col_curr_suffix || '
112 + ag.current_bucket_2_amount' || l_col_curr_suffix || '
113 + ag.current_bucket_3_amount' || l_col_curr_suffix || '
114 + ag.past_due_bucket_1_amount' || l_col_curr_suffix || '
115 + ag.past_due_bucket_2_amount' || l_col_curr_suffix || '
116 + ag.past_due_bucket_3_amount' || l_col_curr_suffix || '
117 + ag.past_due_bucket_4_amount' || l_col_curr_suffix || '
118 + ag.past_due_bucket_5_amount' || l_col_curr_suffix || '
119 + ag.past_due_bucket_6_amount' || l_col_curr_suffix || '
120 + ag.past_due_bucket_7_amount' || l_col_curr_suffix || ')';
121
122 IF l_function_name = 'FII_AR_INV_ACT_DTL' THEN
123 l_where_clause := l_where_clause || ' AND f.class = ''INV''';
124 ELSIF l_function_name = 'FII_AR_DM_ACT_DTL' THEN
125 l_where_clause := l_where_clause || ' AND f.class = ''DM''';
126 ELSIF l_function_name = 'FII_AR_CB_ACT_DTL' THEN
127 l_where_clause := l_where_clause || ' AND f.class = ''CB''';
128 ELSIF l_function_name = 'FII_AR_BILLING_ACT_DTL' THEN
129 l_where_clause := l_where_clause || ' AND f.class IN (''INV'',''DM'',''CB'',''CM'',''DEP'',''BR'') ';
130 l_balance_col := '
131 decode(f.class, ''CM'', sum(ag.on_acct_credit_amount' || l_col_curr_suffix || '),
132 sum(ag.current_bucket_1_amount' || l_col_curr_suffix || '
133 + ag.current_bucket_2_amount' || l_col_curr_suffix || '
134 + ag.current_bucket_3_amount' || l_col_curr_suffix || '
135 + ag.past_due_bucket_1_amount' || l_col_curr_suffix || '
136 + ag.past_due_bucket_2_amount' || l_col_curr_suffix || '
137 + ag.past_due_bucket_3_amount' || l_col_curr_suffix || '
138 + ag.past_due_bucket_4_amount' || l_col_curr_suffix || '
139 + ag.past_due_bucket_5_amount' || l_col_curr_suffix || '
140 + ag.past_due_bucket_6_amount' || l_col_curr_suffix || '
141 + ag.past_due_bucket_7_amount' || l_col_curr_suffix || '))';
142 END IF;
143
144 SELECT TO_CHAR(TRUNC(sysdate),'DD/MM/YYYY') INTO l_sysdate FROM dual;
145
146 l_balance_drill := 'DECODE(outer_inner_query.FII_AR_BALANCE_AMT, NULL, NULL, DECODE(outer_inner_query.FII_AR_TRAN_CLASS,''INV'',
147 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_INV_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
148 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
149 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'',
150 ''BR'',
151 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_BR_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
152 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
153 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'',
154 ''CB'',
155 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_CB_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
156 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
157 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'',
158 ''CM'',
159 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_CM_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
160 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
161 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'',
162 ''DEP'',
163 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_DEP_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
164 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
165 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'',
166 ''DM'',
167 ''AS_OF_DATE='||l_sysdate||'&pFunctionName=FII_AR_DM_ACT_HISTORY&FII_AR_CUST_TRX_ID=''||customer_trx_id
168 ||''&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_AR_TRAN_CLASS=''||outer_inner_query.FII_AR_TRAN_CLASS
169 ||''&BIS_PMV_DRILL_CODE_FII_AR_ACCOUNT_NUM=FII_AR_ACCT_NUM&FII_AR_TRAN_CURR=FII_AR_TRAN_CURR&pParamIds=Y'', '''' ))';
170
171
172 -- Constructing the pmv sql query
173 sqlstmt := '
174 SELECT
175 FII_AR_ACCT_NUM,
176 FII_AR_TRAN_NUM,
177 lk.meaning FII_AR_TRAN_CLASS,
178 FII_AR_TRAN_TYPE,
179 FII_AR_TRAN_DATE,
180 FII_AR_GL_DATE,
181 FII_AR_FIRST_DUE_DATE,
182 FII_AR_TRAN_AMT,
183 FII_AR_ORIG_AMT,
184 FII_AR_BALANCE_AMT,
185 FII_AR_TERMS,
186 FII_AR_SOURCE,
187 decode(FII_AR_TRAN_CLASS, ''INV'',
188 ''pFunctionName=ARBPA_TM_REAL_PREVIEW&retainBN=Y&retainAM=Y&addBreadCrumb=Y&TermsSequenceNumber=1&CustomerTrxId=''
189 || customer_trx_id || ''&orgId='' || outer_inner_query.org_id || ''&pParamIds=Y'', '''') FII_AR_TRAN_NUM_DRILL,
190 ''AS_OF_DATE=' || l_sysdate ||
191 '&pFunctionName=FII_AR_SCHD_PMT_DISCNT&BIS_PMV_DRILL_CODE_FII_AR_CUST_ACCOUNT=FII_AR_ACCT_NUM&FII_AR_TRAN_NUM=FII_AR_TRAN_NUM&FII_CURRENCIES='||'''||FII_AR_TRAN_CURR||'''||'&FII_AR_CUST_TRX_ID=''
192 || customer_trx_id || ''&pParamIds=Y'' FII_AR_FIRST_DUE_DATE_DRILL,
193 ' || l_balance_drill || ' FII_AR_BALANCE_AMT_DRILL,
194
195 decode(outer_inner_query.order_ref_number, NULL, '''', ''pFunctionName=ONT_PORTAL_ORDERDETAILS&HeaderId='' || ooh.header_id) FII_AR_SOURCE_DRILL,
196 sum(FII_AR_ORIG_AMT) over() FII_AR_GT_ORIG_AMT,
197 sum(FII_AR_BALANCE_AMT) over() FII_AR_GT_BALANCE_AMT,
198 ' || l_cust_account || ' FII_AR_CUST_ACCOUNT,
199 FII_AR_TRAN_CURR
200 FROM
201 (
202 SELECT
203 inner_query.customer_trx_id, inner_query.org_id,
204 inner_query.order_ref_number order_ref_number,
205 FII_AR_ACCT_NUM,
206 FII_AR_TRAN_NUM,
207 FII_AR_TRAN_CLASS,
208 FII_AR_TRAN_TYPE,
209 FII_AR_TRAN_DATE,
210 FII_AR_GL_DATE,
211 FII_AR_FIRST_DUE_DATE,
212 inner_query.invoice_currency_code || '' '' || to_char(sum(FII_AR_TRAN_AMT),''999,999,999,999'') FII_AR_TRAN_AMT,
213 sum(FII_AR_ORIG_AMT) FII_AR_ORIG_AMT,
214 sum(FII_AR_BALANCE_AMT) FII_AR_BALANCE_AMT,
215 FII_AR_TERMS,
216 FII_AR_SOURCE,
217 inner_query.invoice_currency_code FII_AR_TRAN_CURR
218 FROM
219 (
220 SELECT /*+ leading(gt) cardinality(gt 1) */
221 f.customer_trx_id, f.org_id,
222 f.invoice_currency_code,
223 f.order_ref_number order_ref_number,
224 hzca.account_number FII_AR_ACCT_NUM,
225 f.transaction_number FII_AR_TRAN_NUM,
226 f.class FII_AR_TRAN_CLASS,
227 ractt.DESCRIPTION FII_AR_TRAN_TYPE,
228 f.TRX_DATE FII_AR_TRAN_DATE,
229 f.GL_DATE FII_AR_GL_DATE,
230 min(f.DUE_DATE) FII_AR_FIRST_DUE_DATE,
231 sum(decode(ag.action, ''Transaction'', decode(ag.billing_activity_flag, ''Y'', f.amount_due_original_trx,0),0)) FII_AR_TRAN_AMT,
232 sum(decode(ag.action, ''Transaction'', decode(ag.billing_activity_flag, ''Y'',f.amount_due_original' || l_col_curr_suffix || ',0),0)) FII_AR_ORIG_AMT,
233 ' || l_balance_col || ' FII_AR_BALANCE_AMT,
234 ratt.description FII_AR_TERMS,
235 rabs.description FII_AR_SOURCE
236 FROM
237 fii_ar_pmt_schedules_f f,
238 ra_cust_trx_types_all ractt,
239 ra_terms_tl ratt,
240 ra_batch_sources_all rabs,
241 hz_cust_accounts hzca,
242 fii_ar_aging_receivables ag,
243 fii_ar_summary_gt gt
244 ' || l_from_clause || '
245 WHERE
246 f.cust_trx_type_id = ractt.cust_trx_type_id(+)
247 AND f.class = ractt.type
248 AND f.org_id = ractt.org_id
249 AND f.term_id = ratt.term_id(+)
250 AND nvl(ratt.language,USERENV(''LANG'')) = USERENV(''LANG'')
251 AND f.batch_source_id = rabs.batch_source_id
252 AND f.org_id = rabs.org_id
253 AND gt.org_id = f.org_id
254 AND f.bill_to_customer_id = hzca.cust_account_id
255 AND f.filter_date BETWEEN :CURR_PERIOD_START AND
256 :ASOF_DATE
257 AND ag.event_date BETWEEN :CURR_PERIOD_START AND
258 :ASOF_DATE
259 AND f.payment_schedule_id = ag.payment_schedule_id
260 AND f.org_id = ag.org_id
261 --AND ag.action IN (''Transaction'', ''Adjustment'', ''Application'') // Commented for Bug # 5176544 fix
262 ' || l_where_clause || '
263 GROUP BY f.customer_trx_id, f.order_ref_number, hzca.account_number, f.transaction_number, f.class, ractt.DESCRIPTION,
264 f.TRX_DATE, f.GL_DATE, f.invoice_currency_code, ratt.description, rabs.description, f.org_id
265 ) inner_query
266 GROUP BY inner_query.customer_trx_id, inner_query.order_ref_number, FII_AR_ACCT_NUM, FII_AR_TRAN_NUM, FII_AR_TRAN_CLASS,
267 FII_AR_TRAN_TYPE, FII_AR_TRAN_DATE, FII_AR_GL_DATE, FII_AR_FIRST_DUE_DATE, inner_query.invoice_currency_code, FII_AR_TERMS, FII_AR_SOURCE, inner_query.org_id
268 )outer_inner_query,
269 ar_lookups lk,
270 oe_order_headers_all ooh
271 WHERE
272 outer_inner_query.FII_AR_TRAN_CLASS = lk.lookup_code
273 AND lk.lookup_type= ''INV/CM/ADJ''
274 AND outer_inner_query.order_ref_number = to_char(ooh.order_number(+))
275 ' || l_order_by;
276
277 -- Calling the bind_variable API
278 fii_ar_util_pkg.bind_variable(
279 p_sqlstmt => sqlstmt,
280 p_page_parameter_tbl => p_page_parameter_tbl,
281 p_sql_output => p_trx_act_dtl_sql,
282 p_bind_output_table => p_trx_act_dtl_output
283 );
284
285 END get_trx_act_dtl;
286
287 END fii_ar_trx_act_dtl_pkg;
288