DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_AR_NET_REC_SUM_PKG

Source


1 PACKAGE BODY fii_ar_net_rec_sum_pkg AS
2 /* $Header: FIIARDBINRB.pls 120.18 2007/05/15 20:50:02 vkazhipu ship $ */
3 
4 PROCEDURE get_net_rec_sum(
5 	p_page_parameter_tbl			IN		BIS_PMV_PAGE_PARAMETER_TBL,
6 	p_net_rec_sum_sql			OUT NOCOPY	VARCHAR2,
7 	p_net_rec_sum_output			OUT NOCOPY	BIS_QUERY_ATTRIBUTES_TBL
8 ) IS
9 
10 sqlstmt 		VARCHAR2(24000);	-- Variable that stores the final SQL query
11 l_view_by		VARCHAR2(240);		-- Variable to store the viewby based on viewby selected in the report
12 l_collector_where	VARCHAR2(240);		-- Variable to store the dynamic collector filter
13 l_customer_where	VARCHAR2(240);		-- Variable to store the dynamic customer filter
14 l_customer_acc_where	VARCHAR2(240);		-- Variable to store the dynamic customer account filter
15 l_child_party_where	VARCHAR2(240);          -- Variable to store the dynamic party id filter
16 l_cust_acc_drill	VARCHAR2(1000);		-- Variable to store drill parameter to view report at customer account level
17 l_cust_drill		VARCHAR2(1000);		-- Variable to store self-drill parameter to view report to explore child nodes
18 l_inv_drill		VARCHAR2(1000);		-- Variable to store drill parameter for Invoice column
19 l_dm_drill		VARCHAR2(1000);		-- Variable to store drill parameter for Debit Memo column
20 l_cb_drill		VARCHAR2(1000);         -- Variable to store drill parameter for Chargeback column
21 l_unapp_drill		VARCHAR2(1000);         -- Variable to store drill parameter for Unapplied column
22 l_unapp_sum_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_order_by              VARCHAR2(240);          -- Variable to store the order by clause
30 l_order_column          VARCHAR2(100);          -- Variable to store the order by column
31 l_self_flag_where	VARCHAR2(100);		-- Variable to retrieve is_self_flag dynamically
32 l_self_flag_where_d	VARCHAR2(100);		-- Variable to retrieve is_self_flag dynamically for dummy purpose
33 l_gt_hint varchar2(500);
34 l_cust_acc_drill_1	VARCHAR2(1000);		-- Variable to store drill parameter to view report at customer account level
35 l_unapp_sum_drill_1	VARCHAR2(1000);         -- Variable to store drill parameter for Unapplied column
36 BEGIN
37 
38 	-- Clear global parameters AND read the new parameters
39 	-- Sets all g_% variables to its default values
40 	fii_ar_util_pkg.reset_globals;
41 
42 	-- Reads the parameters from the parameter portlet
43 	fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
44   l_gt_hint := ' leading(gt) cardinality(gt 1) ';
45 	-- Populates the security related global temporary tables (fii_ar_summary_gt)
46 	fii_ar_util_pkg.populate_summary_gt_tables;
47 
48 	l_view_by := fii_ar_util_pkg.g_view_by;
49 
50 	-- Adding Filter on collector_id only if Collector is 'All'
51 	IF fii_ar_util_pkg.g_collector_id <> '-111' OR l_view_by = 'FII_COLLECTOR+FII_COLLECTOR' THEN
52 		l_collector_where := ' AND f.collector_id = v.collector_id';
53 	ELSE
54 		l_collector_where := '';
55 	END IF;
56 
57 	-- Adding Filter on party_id
58 	IF (fii_ar_util_pkg.g_party_id <> '-111' OR fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMERS') THEN
59 		l_child_party_where := ' AND f.party_id   = v.party_id ';
60 	ELSE
61 		l_child_party_where := '';
62 	END IF;
63 
64 	-- Defining the drills
65 	l_cust_acc_drill 	:= '''pFunctionName=FII_AR_NET_REC_SUM&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
66 	l_cust_drill 		:= '''pFunctionName=FII_AR_NET_REC_SUM&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=VIEW_BY''';
67 	l_inv_drill 		:= '''pFunctionName=FII_AR_OPEN_INV_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
68 	l_dm_drill 		:= '''pFunctionName=FII_AR_OPEN_DM_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
69 	l_cb_drill 		:= '''pFunctionName=FII_AR_OPEN_CB_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
70 	l_unapp_drill 		:= '''pFunctionName=FII_AR_UNAPP_RCT_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
71 	l_unapp_sum_drill 	:= '''pFunctionName=FII_AR_UNAPP_RCT_SUMMARY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
72 
73 	l_self_flag_where := ', v.is_self_flag';
74 	l_self_flag_where_d := ', NULL is_self_flag';
75 
76 	IF l_view_by = 'ORGANIZATION+FII_OPERATING_UNITS' OR l_view_by = 'FII_COLLECTOR+FII_COLLECTOR' THEN
77 		l_viewby_drill 		:= '''''';
78 		IF (fii_ar_util_pkg.g_party_id <> '-111') THEN
79 		 l_cust_acc_drill 	:= '''pFunctionName=FII_AR_NET_REC_SUM&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
80 		 l_unapp_sum_drill 	:= '''pFunctionName=FII_AR_UNAPP_RCT_SUMMARY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
81 		ELSE
82 		 l_cust_acc_drill 	:= '''pFunctionName=FII_AR_NET_REC_SUM&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
83 		 l_unapp_sum_drill 	:= '''pFunctionName=FII_AR_UNAPP_RCT_SUMMARY&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID''';
84 		END IF;
85 		l_amt_inv_drill 	:= 'DECODE(sum(inline_query.inv_amount), 0, '''', ' || l_cust_acc_drill || ')';
86 		l_amt_dm_drill 		:= 'DECODE(sum(inline_query.dm_amount), 0, '''', ' || l_cust_acc_drill || ')';
87 		l_amt_cb_drill 		:= 'DECODE(sum(inline_query.cb_amount), 0, '''', ' || l_cust_acc_drill || ')';
88 		l_amt_unapp_drill 	:= 'DECODE(nvl(sum(inline_query.unapp_amount),0), 0, '''', ' || l_unapp_sum_drill || ')';
89 	ELSIF l_view_by = 'CUSTOMER+FII_CUSTOMER_ACCOUNTS' THEN
90 	  l_gt_hint := ' leading(gt.gt) cardinality(gt.gt 1) ';
91 		l_viewby_drill 		:= '''''';
92 		l_amt_inv_drill 	:=  'DECODE(sum(inline_query.inv_amount), 0, '''', ' ||
93 '''pFunctionName=FII_AR_OPEN_INV_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS='' || max(inline_query.party_id) || ''&FII_AR_CUST_ACCOUNT='' || inline_query.viewby_code)';
94 		l_amt_dm_drill 		:= 'DECODE(sum(inline_query.dm_amount), 0, '''', ' ||
95 '''pFunctionName=FII_AR_OPEN_DM_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS='' || max(inline_query.party_id) || ''&FII_AR_CUST_ACCOUNT='' || inline_query.viewby_code)';
96 		l_amt_cb_drill 		:= 'DECODE(sum(inline_query.cb_amount), 0, '''', ' ||
97 '''pFunctionName=FII_AR_OPEN_CB_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS='' || max(inline_query.party_id) || ''&FII_AR_CUST_ACCOUNT='' || inline_query.viewby_code)';
98 		l_amt_unapp_drill 	:=  'DECODE(nvl(sum(inline_query.unapp_amount),0), 0, '''', ' ||
99 '''pFunctionName=FII_AR_UNAPP_RCT_DTL&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS='' || max(inline_query.party_id) || ''&FII_AR_CUST_ACCOUNT='' || inline_query.viewby_code)';
100 		-- Adding Filter on customer account only when viewby is Customer account
101 		l_customer_acc_where 	:= ' AND f.cust_account_id = v.cust_account_id';
102 		l_self_flag_where := '';
103 		l_self_flag_where_d := '';
104 	ELSIF l_view_by = 'CUSTOMER+FII_CUSTOMERS' THEN
105 		l_viewby_drill 		:= 'DECODE(max(inline_query.is_leaf_flag), ''Y'', '''', DECODE(max(inline_query.is_self_flag), ''Y'', '''',' || l_cust_drill || '))';
106 		l_amt_inv_drill 	:= 'DECODE(sum(inline_query.inv_amount), 0, '''', DECODE(max(inline_query.is_leaf_flag), ''Y'',' || l_inv_drill || ', DECODE(max(inline_query.is_self_flag), ''Y'', ' || l_inv_drill || ',' || l_cust_acc_drill || ')))';
107 		l_amt_dm_drill 		:= 'DECODE(sum(inline_query.dm_amount), 0, '''', DECODE(max(inline_query.is_leaf_flag), ''Y'',' || l_dm_drill || ', DECODE(max(inline_query.is_self_flag), ''Y'', ' || l_dm_drill || ',' || l_cust_acc_drill ||  ')))';
108 		l_amt_cb_drill 		:= 'DECODE(sum(inline_query.cb_amount), 0, '''', DECODE(max(inline_query.is_leaf_flag), ''Y'',' || l_cb_drill || ', DECODE(max(inline_query.is_self_flag), ''Y'', ' || l_cb_drill || ',' || l_cust_acc_drill || ')))';
109 		l_amt_unapp_drill 	:= 'DECODE(nvl(sum(inline_query.unapp_amount),0), 0, '''', DECODE(max(inline_query.is_leaf_flag), ''Y'',' || l_unapp_drill || ', DECODE(max(inline_query.is_self_flag), ''Y'', ' || l_unapp_drill || ',' || l_unapp_sum_drill || ')))';
110 		-- Defining the view by column and the group by clause when viewby is Customer
111 		l_customer_where 	:= ' AND f.parent_party_id = v.parent_party_id';
112 	END IF;
113 
114         -- Constructing the ORDER BY clause
115         IF instr(fii_ar_util_pkg.g_order_by,',') <> 0 THEN
116                 l_order_by := ' ORDER BY NVL(FII_AR_NET_REC_AMT, -999999999) DESC';
117         ELSIF instr(fii_ar_util_pkg.g_order_by, ' DESC') <> 0 THEN
118                 l_order_column := substr(fii_ar_util_pkg.g_order_by,1,instr(fii_ar_util_pkg.g_order_by, ' DESC'));
119                 l_order_by := ' ORDER BY NVL(' || l_order_column || ', -999999999) DESC';
120         ELSE
121                 l_order_by := ' &ORDER_BY_CLAUSE';
122         END IF;
123 
124 	-- Constructing the pmv sql query
125 	sqlstmt := '
126 	SELECT
127 		inline_query.viewby					VIEWBY,
128 		inline_query.viewby_code	 			VIEWBYID,
129 		sum(inline_query.inv_amount) + sum(inline_query.dm_amount) + sum(inline_query.cb_amount) + sum(inline_query.br_amount)
130 		+ sum(inline_query.dep_amount) + sum(inline_query.on_account_credit_amount) - sum(inline_query.unapp_dep_amount)
131 		- nvl(sum(inline_query.unapp_amount), 0) - sum(inline_query.on_account_cash_amount) - sum(inline_query.claim_amount)
132 		- sum(inline_query.prepayment_amount)	 		FII_AR_NET_REC_AMT,
133 		sum(inline_query.inv_amount)				FII_AR_INV_AMT,
134 		sum(inline_query.dm_amount)				FII_AR_DEB_MEMO_AMT,
135 		sum(inline_query.cb_amount)				FII_AR_CHARGEBACK_AMT,
136 		sum(inline_query.br_amount)				FII_AR_BILLS_REC_AMT,
137 		sum(inline_query.dep_amount)				FII_AR_UNP_DEP_AMT,
138 		sum(inline_query.on_account_credit_amount)		FII_AR_ON_ACC_CREDIT_AMT,
139 		sum(inline_query.unapp_dep_amount)			FII_AR_UNAPP_DEP_AMT,
140 		nvl(sum(inline_query.unapp_amount), 0)			FII_AR_UNAPP_AMT,
141 		sum(inline_query.on_account_cash_amount)		FII_AR_ON_ACC_CASH_AMT,
142 		sum(inline_query.claim_amount)				FII_AR_CLAIMS_AMT,
143 		sum(inline_query.prepayment_amount)			FII_AR_PREPAYMENT_AMT,
144 		' || l_viewby_drill || '				FII_AR_VIEW_BY_DRILL,
145 		' || l_amt_inv_drill || '				FII_AR_INV_AMT_DRILL,
146 		' || l_amt_dm_drill || '				FII_AR_DEB_MEMO_AMT_DRILL,
147 		' || l_amt_cb_drill || '				FII_AR_CHARGEBACK_AMT_DRILL,
148 		' || l_amt_unapp_drill || '				FII_AR_UNAPP_AMT_DRILL,
149 		sum(sum(inline_query.inv_amount)) over() + sum(sum(inline_query.dm_amount)) over()
150 		+ sum(sum(inline_query.cb_amount)) over() + sum(sum(inline_query.br_amount)) over()
151 		+ sum(sum(inline_query.dep_amount)) over() + sum(sum(inline_query.on_account_credit_amount)) over()
152 		- sum(sum(inline_query.unapp_dep_amount)) over() - nvl(sum(sum(inline_query.unapp_amount)) over(), 0)
153 		- sum(sum(inline_query.on_account_cash_amount)) over() - sum(sum(inline_query.claim_amount)) over()
154 		- sum(sum(inline_query.prepayment_amount)) over() FII_AR_GT_NET_REC_AMT,
155                 sum(sum(inline_query.inv_amount)) over() 		FII_AR_GT_INV_AMT,
156 		sum(sum(inline_query.dm_amount)) over()			FII_AR_GT_DEB_MEMO_AMT,
157 		sum(sum(inline_query.cb_amount)) over()			FII_AR_GT_CHARGEBACK_AMT,
158 		sum(sum(inline_query.br_amount)) over()			FII_AR_GT_BILLS_REC_AMT,
159 		sum(sum(inline_query.dep_amount)) over()		FII_AR_GT_UNP_DEP_AMT,
160 		sum(sum(inline_query.on_account_credit_amount)) over()	FII_AR_GT_ON_ACC_CREDIT_AMT,
161 		sum(sum(inline_query.unapp_dep_amount)) over()		FII_AR_GT_UNAPP_DEP_AMT,
162 		nvl(sum(sum(inline_query.unapp_amount)) over(), 0)	FII_AR_GT_UNAPP_AMT,
163 		sum(sum(inline_query.on_account_cash_amount)) over()	FII_AR_GT_ON_ACC_CASH_AMT,
164 		sum(sum(inline_query.claim_amount)) over()		FII_AR_GT_CLAIMS_AMT,
165 		sum(sum(inline_query.prepayment_amount)) over()		FII_AR_GT_PREPAYMENT_AMT
166 	FROM
167 	(
168 		SELECT /*+ INDEX(f FII_AR_NET_REC'|| fii_ar_util_pkg.g_cust_suffix ||'_mv_N1)*/
169 			v.viewby, v.viewby_code,
170 			f.inv_amount, f.dm_amount, f.cb_amount, f.br_amount, f.dep_amount,
171 			f.on_account_credit_amount, f.unapp_dep_amount, NULL unapp_amount,
172 			f.on_account_cash_amount, f.claim_amount, f.prepayment_amount
173 			' || l_self_flag_where || ', v.is_leaf_flag, f.party_id
174 		FROM
175 			fii_ar_net_rec' || fii_ar_util_pkg.g_cust_suffix || '_mv' || fii_ar_util_pkg.g_curr_suffix || ' f,
176 			(
177 				SELECT /*+ no_merge '||l_gt_hint|| ' */ *
178 				FROM 	fii_time_structures cal,
179 					' || fii_ar_util_pkg.get_from_statement || ' gt
180 				WHERE 	cal.report_date = :ASOF_DATE
181 					AND bitand(cal.record_type_id, :BITAND_INC_TODATE) = :BITAND_INC_TODATE
182 					AND ' || fii_ar_util_pkg.get_where_statement || '
183 			) v
184 		WHERE
185 			f.time_id = v.time_id
186 			AND f.period_type_id = v.period_type_id
187 			AND f.org_id = v.org_id
188 			AND '||fii_ar_util_pkg.get_mv_where_statement||' '|| l_collector_where
189 			|| l_customer_where
190 			|| l_child_party_where
191 			|| l_customer_acc_where || '
192 		UNION ALL
193 		SELECT /*+ INDEX(f FII_AR_RCT_AGING'|| fii_ar_util_pkg.g_cust_suffix ||'_mv_N1)*/
194 			v.viewby, v.viewby_code,
195 			NULL inv_amount, NULL dm_amount, NULL cb_amount, NULL br_amount, NULL dep_amount,
196 			NULL on_account_credit_amount, NULL unapp_dep_amount, f.unapp_amount,
197 			NULL on_account_cash_amount, NULL claim_amount, NULL prepayment_amount
198 			' || l_self_flag_where_d || ', NULL is_leaf_flag, NULL party_id
199 		FROM
200 			fii_ar_rct_aging' || fii_ar_util_pkg.g_cust_suffix || '_mv' || fii_ar_util_pkg.g_curr_suffix || ' f,
201 			(
202 				SELECT /*+ no_merge '||l_gt_hint|| ' */ *
203 				FROM 	fii_time_structures cal,
204 					' || fii_ar_util_pkg.get_from_statement || ' gt
205 				WHERE 	cal.report_date = :ASOF_DATE
206 					AND bitand(cal.record_type_id, :BITAND_INC_TODATE) = :BITAND_INC_TODATE
207 					AND ' || fii_ar_util_pkg.get_where_statement || '
208 			) v
209 		WHERE
210 			f.time_id = v.time_id
211 			AND f.period_type_id = v.period_type_id
212 			AND f.org_id = v.org_id
213 			AND '||fii_ar_util_pkg.get_rct_mv_where_statement||' '
214 			|| l_collector_where
215 			|| l_customer_where
216 			|| l_child_party_where
217 			|| l_customer_acc_where || '
218 	) inline_query
219 	GROUP BY inline_query.viewby_code, inline_query.viewby'
220 	|| l_order_by;
221 
222 	-- Calling the bind_variable API
223 	fii_ar_util_pkg.bind_variable(
224 		p_sqlstmt 		=> sqlstmt,
225 		p_page_parameter_tbl 	=> p_page_parameter_tbl,
226 		p_sql_output 		=> p_net_rec_sum_sql,
227 		p_bind_output_table 	=> p_net_rec_sum_output
228 	);
229 
230 END get_net_rec_sum;
231 
232 END fii_ar_net_rec_sum_pkg;
233