DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_AR_OPEN_REC_SUMMARY

Source


1 PACKAGE BODY FII_AR_OPEN_REC_SUMMARY AS
2 /* $Header: FIIARDBIORSB.pls 120.17 2007/05/15 20:50:37 vkazhipu ship $ */
3 
4 PROCEDURE get_open_rec_sum (p_page_parameter_tbl IN         BIS_PMV_PAGE_PARAMETER_TBL,
5                             open_rec_sum_sql     OUT NOCOPY VARCHAR2,
6                             open_rec_sum_output  OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
7 IS
8 
9 l_party_select		VARCHAR2(100);
10 l_party_group_by	VARCHAR2(100);
11 l_party_where 		VARCHAR2(250);
12 l_parent_party_where 	VARCHAR2(250);
13 l_collector_where	VARCHAR2(250);
14 l_cust_acct_where	VARCHAR2(250);
15 
16 l_cust_drill            VARCHAR2(500);
17 l_open_drill            VARCHAR2(500);
18 l_pdue_drill            VARCHAR2(500);
19 l_curr_drill            VARCHAR2(500);
20 
21 l_select		VARCHAR2(10000);
22 l_group_by 		VARCHAR2(100) := NULL;
23 l_order_by		VARCHAR2(250);
24 l_order_column		VARCHAR2(250);
25 l_self                  VARCHAR2(30);
26 l_gt_hint varchar2(500);
27 
28 
29 BEGIN
30 
31 -- init all variables
32 fii_ar_util_pkg.reset_globals;
33 
34 -- get global variables assigned
35 fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
36 
37 -- populate dimension combinations in global temp tables
38 fii_ar_util_pkg.populate_summary_gt_tables;
39 
40 -- get viewby id (party_id, cust_account_id, org_id, collector_id)
41 -- fii_ar_util_pkg.get_viewby_id(l_viewby_id);
42 l_gt_hint := ' leading(gt) cardinality(gt 1) ';
43 -- generate where clause for party_id
44 IF (fii_ar_util_pkg.g_party_id <> '-111' OR
45 	fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMERS') THEN
46 	l_party_where := ' AND f.party_id   = t.party_id ';
47 END IF;
48 
49 -- generate where clause for parent_party_id
50 IF(fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMERS') THEN
51 	l_parent_party_where := 'AND f.parent_party_id = t.parent_party_id ';
52 END IF;
53 
54 -- generate where clause for collector_id
55 IF (fii_ar_util_pkg.g_collector_id <> '-111' OR
56 	fii_ar_util_pkg.g_view_by = 'FII_COLLECTOR+FII_COLLECTOR') THEN
57 	l_collector_where := 'AND f.collector_id = t.collector_id ';
58 END IF;
59 
60 -- generate where clause for cust_account_id
61 IF (fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMER_ACCOUNTS') THEN
62 	l_cust_acct_where := 'AND f.cust_account_id = t.cust_account_id';
63 	l_gt_hint := ' leading(gt.gt) cardinality(gt.gt 1) ';
64 END IF;
65 
66 
67 -- handle drills
68 IF (fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMERS' AND fii_ar_util_pkg.g_is_hierarchical_flag='Y') THEN
69 
70 l_self := ' t.is_self_flag,';
71 l_open_drill :=
72 ' DECODE(FII_AR_ORS_OPEN_REC_AMT,0,'''', DECODE(inline_view.is_leaf_flag, ''Y'',''pFunctionName=FII_AR_OPEN_REC_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'',
73 ''pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'')) ';
74 
75 l_pdue_drill :=
76 ' DECODE(FII_AR_ORS_PDUE_REC_AMT,0,'''', DECODE(inline_view.is_leaf_flag, ''Y'',''pFunctionName=FII_AR_PDUE_REC_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'',
77 ''pFunctionName=FII_AR_PASTDUE_REC_AGING&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'')) ';
78 
79 l_curr_drill :=
80 ' DECODE(FII_AR_ORS_CURR_REC_AMT,0,'''', DECODE(inline_view.is_leaf_flag, ''Y'',''pFunctionName=FII_AR_CURR_REC_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'',
81 ''pFunctionName=FII_AR_CURR_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'')) ';
82 
83 l_cust_drill :=
84 ' DECODE(inline_view.is_self_flag,''Y'','''', DECODE(inline_view.is_leaf_flag, ''Y'','''',''pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=VIEW_BY&pParamIds=Y'')) ';
85 
86 
87 -- Add SELF to Customer description for self nodes
88 --l_viewby:= 'DECODE(inline_view.parent_party_id,inline_view.viewby, DECODE(inline_view.is_leaf_flag, ''Y'', inline_view.viewby, inline_view.viewby '||'||'||'''('||fii_ar_util_pkg.g_self_msg||')'''||'), inline_view.viewby) ';
89 l_group_by := ' inline_view.is_self_flag, inline_view.viewby, inline_view.is_leaf_flag, inline_view.viewby_code ';
90 
91 ELSIF (fii_ar_util_pkg.g_view_by= 'FII_COLLECTOR+FII_COLLECTOR'
92 	OR 	fii_ar_util_pkg.g_view_by = 'ORGANIZATION+FII_OPERATING_UNITS') THEN
93  IF (fii_ar_util_pkg.g_party_id <> '-111') THEN
94 		l_open_drill :=
95 			' DECODE(FII_AR_ORS_OPEN_REC_AMT,0,'''',''pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'') ';
96 
97 		l_pdue_drill :=
98 			' DECODE(FII_AR_ORS_PDUE_REC_AMT,0,'''',''pFunctionName=FII_AR_PASTDUE_REC_AGING&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'') ';
99 
100 		l_curr_drill :=
101 		' DECODE(FII_AR_ORS_CURR_REC_AMT,0,'''',''pFunctionName=FII_AR_CURR_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y'') ';
102  ELSE
103    l_open_drill :=
104 			' DECODE(FII_AR_ORS_OPEN_REC_AMT,0,'''',''pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'') ';
105 
106 		l_pdue_drill :=
107 			' DECODE(FII_AR_ORS_PDUE_REC_AMT,0,'''',''pFunctionName=FII_AR_PASTDUE_REC_AGING&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'') ';
108 
109 		l_curr_drill :=
110 		' DECODE(FII_AR_ORS_CURR_REC_AMT,0,'''',''pFunctionName=FII_AR_CURR_REC_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y'') ';
111 
112 END IF;
113 l_cust_drill := '''''';
114 
115 l_group_by := 'inline_view.viewby, inline_view.viewby_code ';
116 
117 ELSE -- this is the case of (fii_ar_util_pkg.g_view_by = 'CUSTOMER+FII_CUSTOMER_ACCOUNTS')
118 
119 l_party_select   := ' t.party_id,';
120 l_party_group_by := ' t.party_id, ';
121 
122 l_open_drill :=
123 ' DECODE(FII_AR_ORS_OPEN_REC_AMT,0,'''',''pFunctionName=FII_AR_OPEN_REC_DTL&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=''||party_id||''&FII_AR_CUST_ACCOUNT=VIEWBYID&pParamIds=Y'') ';
124 
125 l_pdue_drill :=
126 ' DECODE(FII_AR_ORS_PDUE_REC_AMT,0,'''',''pFunctionName=FII_AR_PDUE_REC_DTL&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=''||party_id||''&FII_AR_CUST_ACCOUNT=VIEWBYID&pParamIds=Y'') ';
127 
128 l_curr_drill :=
129 ' DECODE(FII_AR_ORS_CURR_REC_AMT,0,'''',''pFunctionName=FII_AR_CURR_REC_DTL&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=''||party_id||''&FII_AR_CUST_ACCOUNT=VIEWBYID&pParamIds=Y'') ';
130 
131 l_cust_drill := '''''';
132 
133 l_group_by := 'inline_view.viewby, inline_view.viewby_code, inline_view.party_id ';
134 
135 END IF;
136 
137 
138 IF INSTR(fii_ar_util_pkg.g_order_by,',') <> 0 THEN
139 
140    /*This means no particular sort column is selected in the report
141    So sort on the default column in descending order
142    NVL is added to make sure the null values appear last*/
143 
144    l_order_by := 'ORDER BY NVL(FII_AR_ORS_OPEN_REC_AMT, -999999999) DESC';
145 
146 ELSIF instr(fii_ar_util_pkg.g_order_by, ' DESC') <> 0 THEN
147 
148    /*This means a particular sort column is clicked to have descending order
149    in which case we would want all the null values to appear last in the
150    report so add an NVL to that column*/
151 
152    l_order_column := substr(fii_ar_util_pkg.g_order_by,1,instr(fii_ar_util_pkg.g_order_by, ' DESC'));
153    l_order_by := 'ORDER BY NVL('|| l_order_column ||', -999999999) DESC';
154 
155 ELSE
156 
157    /*This is the case when user has asked for an ascending order sort.
158    Use PMV's order by clause*/
159 
160    l_order_by := '&ORDER_BY_CLAUSE';
161 
162 END IF;
163 
164 l_select :=
165 ' SELECT
166 viewby       VIEWBY,
167 viewby_code  VIEWBYID,
168 FII_AR_ORS_OPEN_REC_AMT,
169 FII_AR_ORS_PDUE_REC_AMT,
170 FII_AR_ORS_CURR_REC_AMT,
171 FII_AR_ORS_OPEN_REC_CT,
172 FII_AR_ORS_PDUE_REC_CT,
173 FII_AR_ORS_CURR_REC_CT,
174 FII_AR_ORS_OPEN_REC_WTD_TRM,
175 FII_AR_ORS_PDUE_REC_PERCENT,
176 FII_AR_ORS_PDUE_REC_WTD_DDSO,
177 SUM(FII_AR_ORS_OPEN_REC_AMT) over() FII_AR_ORS_OPEN_R_AMT_GT,
178 SUM(FII_AR_ORS_PDUE_REC_AMT) over() FII_AR_ORS_PDUE_R_AMT_GT,
179 SUM(FII_AR_ORS_CURR_REC_AMT) over() FII_AR_ORS_CURR_R_AMT_GT,
180 SUM(FII_AR_ORS_OPEN_REC_CT)  over() FII_AR_ORS_OPEN_R_CT_GT,
181 SUM(FII_AR_ORS_PDUE_REC_CT)  over() FII_AR_ORS_PDUE_R_CT_GT,
182 SUM(FII_AR_ORS_CURR_REC_CT)  over() FII_AR_ORS_CURR_R_CT_GT,
183 CASE WHEN sum(FII_AR_ORS_OPEN_REC_AMT) over() = 0
184      THEN NULL
185      ELSE sum(FII_AR_ORS_OPEN_REC_WTD_TRM_N) over() / sum(FII_AR_ORS_OPEN_REC_AMT) over()
186      END  FII_AR_ORS_OPEN_R_WTD_TRM_GT,
187 CASE WHEN sum(FII_AR_ORS_OPEN_REC_AMT) over() = 0
188      THEN NULL
189      ELSE (sum(FII_AR_ORS_PDUE_REC_AMT) over() / sum(FII_AR_ORS_OPEN_REC_AMT) over()) * 100
190 	 END FII_AR_ORS_PDUE_R_PERCENT_GT,
191 CASE WHEN sum(FII_AR_ORS_PDUE_REC_AMT) over() = 0
192      THEN NULL
193      ELSE (sum(FII_AR_ORS_PDUE_REC_AMT) over()
194 	       * to_number(to_char(&BIS_CURRENT_ASOF_DATE,''J''))
195 	       - sum(FII_AR_ORS_PDUE_REC_WTD_DDSO_N) over()) / sum(FII_AR_ORS_PDUE_REC_AMT) over()
196      END FII_AR_ORS_PDUE_R_WTD_DDSO_GT,
197 '|| l_cust_drill ||' FII_AR_ORS_CUST_DRILL,
198 '|| l_open_drill ||' FII_AR_ORS_OPEN_DRILL,
199 '|| l_pdue_drill ||' FII_AR_ORS_PDUE_DRILL,
200 '|| l_curr_drill ||' FII_AR_ORS_CURR_DRILL
201 FROM (
202 SELECT  /*+ INDEX(f FII_AR_NET_REC'|| fii_ar_util_pkg.g_cust_suffix ||'_mv_N1)*/
203 t.is_leaf_flag,
204 '||l_self||'
205 '||l_party_select||'
206 t.viewby,
207 t.viewby_code,
208 sum(total_open_amount)                       FII_AR_ORS_OPEN_REC_AMT,
209 sum(past_due_open_amount)                         FII_AR_ORS_PDUE_REC_AMT,
210 sum(current_open_amount)                     FII_AR_ORS_CURR_REC_AMT,
211 sum(total_open_count)                        FII_AR_ORS_OPEN_REC_CT,
212 sum(past_due_count)                          FII_AR_ORS_PDUE_REC_CT,
213 sum(current_open_count)                      FII_AR_ORS_CURR_REC_CT,
214 sum(wtd_terms_out_open_num)                  FII_AR_ORS_OPEN_REC_WTD_TRM_N,
215 sum(wtd_DDSO_due_num)                        FII_AR_ORS_PDUE_REC_WTD_DDSO_N,
216 CASE WHEN abs(sum(total_open_amount)) = 0
217      THEN NULL
218      ELSE sum(wtd_terms_out_open_num) / abs(sum(total_open_amount))
219      END  FII_AR_ORS_OPEN_REC_WTD_TRM,
220 CASE WHEN abs(sum(total_open_amount)) = 0
221      THEN NULL
222      ELSE sum(past_due_open_amount) / abs(sum(total_open_amount)) * 100
223      END  FII_AR_ORS_PDUE_REC_PERCENT,
224 CASE WHEN abs(sum(past_due_open_amount)) = 0
225      THEN NULL
226      ELSE (sum(past_due_open_amount)
227 	       * to_number(to_char(&BIS_CURRENT_ASOF_DATE ,''J''))
228 	       - sum(wtd_DDSO_due_num)) / abs(sum(past_due_open_amount))
229      END FII_AR_ORS_PDUE_REC_WTD_DDSO
230 FROM FII_AR_NET_REC'||fii_ar_util_pkg.g_cust_suffix ||'_mv'|| fii_ar_util_pkg.g_curr_suffix ||' f,
231      (
232      SELECT /*+ no_merge '||l_gt_hint|| ' */ *
233        FROM fii_time_structures cal,
234             '||fii_ar_util_pkg.get_from_statement||' gt
235       WHERE report_date = :ASOF_DATE
236         AND bitand(cal.record_type_id, :BITAND_INC_TODATE) = :BITAND_INC_TODATE
237         AND '  ||fii_ar_util_pkg.get_where_statement||'
238 	  ) t
239 WHERE  f.time_id = t.time_id
240   AND  f.period_type_id = t.period_type_id
241   AND  f.org_id = t.org_id
242   AND '||fii_ar_util_pkg.get_mv_where_statement||' '||l_parent_party_where||l_party_where||l_collector_where|| l_cust_acct_where||'
243 GROUP BY  t.is_leaf_flag, '||l_self||l_party_group_by||' t.viewby, t.viewby_code)  inline_view
244 GROUP BY '||l_group_by||',
245 FII_AR_ORS_OPEN_REC_AMT,
246 FII_AR_ORS_PDUE_REC_AMT,
247 FII_AR_ORS_CURR_REC_AMT,
248 FII_AR_ORS_OPEN_REC_CT,
249 FII_AR_ORS_PDUE_REC_CT,
250 FII_AR_ORS_CURR_REC_CT,
251 FII_AR_ORS_OPEN_REC_WTD_TRM_N,
252 FII_AR_ORS_OPEN_REC_WTD_TRM,
253 FII_AR_ORS_PDUE_REC_PERCENT,
254 FII_AR_ORS_PDUE_REC_WTD_DDSO_N,
255 FII_AR_ORS_PDUE_REC_WTD_DDSO
256 '||l_order_by||' ';
257 
258 fii_ar_util_pkg.bind_variable(l_select, p_page_parameter_tbl, open_rec_sum_sql, open_rec_sum_output);
259 
260 END get_open_rec_sum;
261 
262 END FII_AR_OPEN_REC_SUMMARY;