DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_AR_BILL_ACT_PKG

Source


1 PACKAGE BODY FII_AR_BILL_ACT_PKG AS
2 /*  $Header: FIIARDBIBAB.pls 120.19 2007/05/15 20:46:27 vkazhipu ship $ */
3 
4 --   This package will provide sql statements to retrieve data for Billing Activity
5 
6 
7 -- --------------------------------------------------------------------------
8 -- Name : get_billing_activity
9 -- Type : Procedure
10 -- Description : This procedure passes SQL to PMV for Billing Activity Report
11 -----------------------------------------------------------------------------
12 
13 
14 PROCEDURE get_billing_activity (
15   p_page_parameter_tbl in BIS_PMV_PAGE_PARAMETER_TBL, bill_act_sum_sql out NOCOPY VARCHAR2,
16   bill_sum_output out NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
17 
18   l_sql_stmt			VARCHAR2(30000);
19   l_sql_stmt1                    VARCHAR2(20000);
20   l_view_by_flag                NUMBER(1);
21   l_view_by                     VARCHAR2(120);
22   l_customer_where              VARCHAR2(60);
23   l_cust_acct_where             VARCHAR2(60);
24   l_org_where                   VARCHAR2(30);
25   l_industry_where              VARCHAR2(240);
26   l_where_clause                VARCHAR2(1000);
27   l_inner_from_clause           VARCHAR2(60);
28   l_inner_where_clause          VARCHAR2(60);
29   l_child_party_where           VARCHAR2(60);
30 
31   l_bill_act_amt_drill          VARCHAR2(120);
32   l_cust_acct_or_leaf_amt_drill VARCHAR2(240);
33   l_bill_act_count_drill        VARCHAR2(120);
34   l_acct_or_leaf_count_drill VARCHAR2(120);
35   l_open_rec_drill              VARCHAR2(120);
36   l_cust_acct_or_leaf_rec_drill VARCHAR2(240);
37   l_customer_drill               VARCHAR2(120);
38 
39   l_self_mesg                   VARCHAR2(20);
40   l_dso_period                  NUMBER(3);
41   l_cust_suffix                 VARCHAR2(5);
42   l_curr_suffix                 VARCHAR2(4);
43   l_viewby_id                   VARCHAR2(30);
44 
45   l_inv_flag                    VARCHAR2(1);
46   l_dm_flag                     VARCHAR2(1);
47   l_cb_flag                     VARCHAR2(1);
48   l_br_flag                     VARCHAR2(1);
49   l_dep_flag                    VARCHAR2(1);
50   l_cm_flag                     VARCHAR2(1);
51   l_undep_flag                  VARCHAR2(1);
52   l_unrec_flag                  VARCHAR2(1);
53   l_oacb_flag                   VARCHAR2(1);
54   l_ocb_flag                    VARCHAR2(1);
55 
56   l_class_inclusion             VARCHAR2(1000);
57   l_unapp_amount                VARCHAR2(30);
58 
59   l_order_by			varchar2(500);
60   l_order_column		varchar2(100);
61   l_gt_hint varchar2(500);
62 BEGIN
63 
64 
65 
66     /* Reset Global Variables */
67     fii_ar_util_pkg.reset_globals;
68 
69 
70 
71 
72 /* Get the parameters that the user has selected */
73 fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
74 
75 
76 /* Populate the dimension combination(s) that the user has access to */
77 fii_ar_util_pkg.populate_summary_gt_tables;
78 
79 
80 
81 -- Get the view by
82 l_view_by := fii_ar_util_pkg.g_view_by;
83 
84 /* Check whether join on party is is reqd. or not */
85 IF (fii_ar_util_pkg.g_party_id <> '-111' OR l_view_by = 'CUSTOMER+FII_CUSTOMERS') THEN
86     l_child_party_where := ' AND f.party_id   = gt.party_id ';
87 END IF;
88 
89 -- Check whether we need a filter for parent_party_id. This is applicable only if the Ct. dimension is hierarchial and view by
90 -- is customer.
91 IF fii_ar_util_pkg.g_is_hierarchical_flag = 'Y' and l_view_by = 'CUSTOMER+FII_CUSTOMERS' THEN
92        l_customer_where := ' and f.parent_party_id = gt.parent_party_id';
93        l_view_by_flag :=2; -- for Customer
94 END IF;
95 
96 l_gt_hint := ' leading(t) cardinality(t 1) ';
97 
98 -- Checks whether filter for Ct. acct. is reqd or not
99 IF l_view_by = 'CUSTOMER+FII_CUSTOMER_ACCOUNTS' THEN
100        l_cust_acct_where := ' and f.cust_account_id = gt.cust_account_id';
101        l_view_by_flag:=3;
102        --Added by vkazhipu for performance reasons.
103        l_gt_hint := ' leading(t.gt) cardinality(t.gt 1) ';
104 END IF;
105 
106 /* Org filter will be there in all cases */
107       l_org_where := ' and f.org_id=gt.org_id';
108 
109 /* Check whether industry filter is reqd or not */
110 IF  l_view_by = 'CUSTOMER+FII_CUSTOMERS' THEN
111        l_industry_where := NULL;
112 ELSIF fii_ar_util_pkg.g_industry_id <> '-111' OR l_view_by = 'FII_TRADING_PARTNER_CLASS+FII_TRADING_PARTNER_MKT_CLASS' THEN
113       l_industry_where := ' and f.class_code=gt.class_code and f.class_category=gt.class_category';
114 END IF;
115 
116 -- The below mentioned variable will make the code easy to understand.
117    l_where_clause := l_child_party_where||l_customer_where || l_cust_acct_where || l_org_where||l_industry_where;
118 
119 
120 -- Drills
121   --  Drill on amount to Billing Activity with view by as ct acct
122   --  Drill on Open Receivables. Drill to Open Receivable Summary with view by as ct. acct.
123   --  Drill on View By. This is true only in case the view by is Ct. and the implementation is hierarchial
124   IF (l_view_by_flag = 2 ) /* View by is ct. and implementation is heirarchial */ THEN
125 --vkazhipu changed
126         	l_bill_act_amt_drill := 'pFunctionName=FII_AR_BILLING_ACTIVITY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
127 					l_open_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
128         --   IF (l_view_by = 'CUSTOMER+FII_CUSTOMERS' and fii_ar_util_pkg.g_is_hierarchical_flag='Y' ) THEN
129            --   l_view_by_flag:=2;
130 	        l_customer_drill:= 'pFunctionName=FII_AR_BILLING_ACTIVITY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=VIEW_BY&pParamIds=Y';
131 	       -- END IF;
132 END IF;
133   IF l_view_by = 'ORGANIZATION+FII_OPERATING_UNITS' OR
134      l_view_by = 'FII_TRADING_PARTNER_CLASS+FII_TRADING_PARTNER_MKT_CLASS' THEN
135       IF (fii_ar_util_pkg.g_party_id <> '-111') THEN
136        l_bill_act_amt_drill := 'pFunctionName=FII_AR_BILLING_ACTIVITY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
137 		   l_open_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY=CUSTOMER+FII_CUSTOMER_ACCOUNTS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
138       ELSE
139        --l_bill_act_amt_drill := 'pFunctionName=FII_AR_BILLING_ACTIVITY&VIEW_BY=CUSTOMER+FII_CUSTOMERS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
140 		   --l_open_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_SUMMARY&VIEW_BY=CUSTOMER+FII_CUSTOMERS&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
141        l_bill_act_amt_drill := 'pFunctionName=FII_AR_BILLING_ACTIVITY&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
142 		   l_open_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_SUMMARY&pParamIds=Y&VIEW_BY_NAME=VIEW_BY_ID';
143 
144       END IF;
145        l_view_by_flag := 1; -- for OU, Industry
146   END IF;
147 
148 -- Drill on amount and view by is ct acct or ct is leaf. Drilll to Billing Activity Detail
149 -- added the if for Bug#5140376
150 IF l_view_by_flag = 3 THEN
151   l_cust_acct_or_leaf_amt_drill := 'pFunctionName=FII_AR_BILLING_ACT_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y&FII_AR_CUST_ACCOUNT=VIEWBYID';
152 ELSE
153   l_cust_acct_or_leaf_amt_drill := 'pFunctionName=FII_AR_BILLING_ACT_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y';
154 END IF;
155 
156 
157 -- Drill on Count. Drill to Billing Activity Trend in all cases except when the view by is Ct. acct.
158 -- As per mail from Renu , the drill for count should be enabled even in case of view by as ct acct.
159 /*  IF l_view_by_flag=3 THEN
160      l_bill_act_count_drill := NULL;
161   ELSE */
162      l_bill_act_count_drill := 'pFunctionName=FII_AR_BILLING_ACT_TREND&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y';
163 --  END IF;
164 
165   --Bug#5114003: Pass party_id to trend report for view by ct. acct.
166   IF l_view_by_flag=3 THEN
167      l_bill_act_count_drill:=l_bill_act_count_drill||'&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=';
168   END IF;
169 
170  -- Drill on open rec and view by is ct. acct or ct is leaf. Drill to open rec detail.
171  -- added the if for bug Bug#5140376
172  IF l_view_by_flag = 3 THEN
173      l_cust_acct_or_leaf_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y&FII_AR_CUST_ACCOUNT=VIEWBYID';
174  ELSE
175      l_cust_acct_or_leaf_rec_drill := 'pFunctionName=FII_AR_OPEN_REC_DTL&VIEW_BY_NAME=VIEW_BY_ID&pParamIds=Y';
176  END IF;
177 
178 l_dso_period := fiI_ar_util_pkg.g_dso_period;
179 
180 
181 l_cust_suffix := fii_ar_util_pkg.g_cust_suffix;
182 l_curr_suffix := fii_ar_util_pkg.g_curr_suffix;
183 
184 
185 /* Get the transaction classes based on DSO setup */
186 fii_ar_util_pkg.get_dso_table_values;
187 
188 l_class_inclusion := 0;
189 
190 
191 For i in fii_ar_util_pkg.g_dso_table.FIRST..fii_ar_util_pkg.g_dso_table.LAST LOOP
192 
193     IF fii_ar_util_pkg.g_dso_table(i).dso_value = 'Y' THEN
194         IF fii_ar_util_pkg.g_dso_table(i).dso_type = 'INV' THEN
195            l_class_inclusion := l_class_inclusion ||'+ f.INV_AMOUNT';
196         ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'DM' THEN
197            l_class_inclusion := l_class_inclusion ||'+ f.DM_AMOUNT';
198 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'CB' THEN
199 	   l_class_inclusion := l_class_inclusion ||'+ f.CB_AMOUNT';
200 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'BR' THEN
201 	   l_class_inclusion := l_class_inclusion ||'+ f.BR_AMOUNT';
202 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'DEP' THEN
203 	   l_class_inclusion := l_class_inclusion ||'+ f. DEP_AMOUNT';
204 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'CM' THEN
205 	   l_class_inclusion := l_class_inclusion ||'+ f.ON_ACCOUNT_CREDIT_AMOUNT';
206 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'UNDEP' THEN
207 	   l_class_inclusion := l_class_inclusion ||'- f.UNAPP_DEP_AMOUNT';
208 	 ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'UNREC' THEN
209 	  -- l_class_inclusion := l_class_inclusion ||'- f.UNAPP_AMOUNT';
210 	   l_unapp_amount := '- f.UNAPP_AMOUNT';
211 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'OACB' THEN
212 	   l_class_inclusion := l_class_inclusion ||'- f.ON_ACCOUNT_CASH_AMOUNT';
213 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'OCB' THEN
214 	   l_class_inclusion := l_class_inclusion ||'- f.CLAIM_AMOUNT ';
215 	ELSIF fii_ar_util_pkg.g_dso_table(i).dso_type = 'PREPAY' THEN
216 	   l_class_inclusion := l_class_inclusion ||'- f.PREPAYMENT_AMOUNT ';
217 	END IF;
218 
219    END IF;
220 END LOOP;
221 
222 
223 
224 -- Construct the order by
225 IF(instr(fii_ar_util_pkg.g_order_by,',') <> 0) THEN
226 
227    /*This means no particular sort column is selected in the report
228    So sort on the default column in descending order
229    NVL is added to make sure the NULL values appear last*/
230 
231    l_order_by := 'ORDER BY NVL(FII_AR_BILL_ACT_AMT, -999999999) DESC';
232 
233   ELSIF(instr(fii_ar_util_pkg.g_order_by, ' DESC') <> 0)THEN
234 
235    /*This means a particular sort column is clicked to have descending order
236    in which case we would want all the NULL values to appear last in the
237    report so add an NVL to that column*/
238 
239    l_order_column := substr(fii_ar_util_pkg.g_order_by,1,instr(fii_ar_util_pkg.g_order_by, ' DESC'));
240    l_order_by := 'ORDER BY NVL('|| l_order_column ||', -999999999) DESC';
241 
242   ELSE
243 
244    /*This is the case when user has asked for an ascending order sort.
245    Use PMV's order by clause*/
246 
247    l_order_by := '&ORDER_BY_CLAUSE';
248 
249   END IF;
250 
251   IF l_view_by_flag=3 THEN /* Viewby is Ct. acct */
252     l_inner_from_clause := fii_ar_util_pkg.get_from_statement;
253     l_inner_where_clause := ' and '||fii_ar_util_pkg.get_where_statement;
254   ELSE
255     l_inner_from_clause := 'fii_ar_summary_gt ';
256     l_inner_where_clause := NULL;
257   END IF;
258 
259 -- Now the variable initialization is done, Start to build the PMV Query
260 
261 
262 l_sql_stmt := 'SELECT  VIEWBY,
263                        VIEW_BY_ID VIEWBYID,
264 		       SUM(FII_AR_BILL_ACT_AMT_PRIOR) FII_AR_BILL_ACT_AMT_PRIOR,
265 		       NULLIF(SUM(FII_AR_BILL_ACT_AMT),0) FII_AR_BILL_ACT_AMT,
266                        (( SUM(FII_AR_BILL_ACT_AMT)-SUM(FII_AR_BILL_ACT_AMT_PRIOR) ) /
267                                               NULLIF(SUM(FII_AR_BILL_ACT_AMT_PRIOR),0 )) * 100  FII_AR_BILL_ACT_AMT_CHG,
268 		       SUM(FII_AR_BILL_ACT_COUNT) FII_AR_BILL_ACT_COUNT,
269                        (( SUM(FII_AR_BILL_ACT_COUNT)-SUM(FII_AR_BILL_ACT_COUNT_PRIOR) ) /
270                                               NULLIF(SUM(FII_AR_BILL_ACT_COUNT_PRIOR),0) ) * 100  FII_AR_BILL_ACT_COUNT_CHG,
271                         NULLIF(SUM(FII_AR_OPEN_REC_AMT),0) FII_AR_BILL_OPEN_REC_AMT,
272 			(SUM(net_receivable_amount) / NULLIF(SUM(billed_amount),0)) *'||l_dso_period||' FII_AR_BILL_ACT_DSO,
273                        NULLIF(SUM(SUM(FII_AR_BILL_ACT_AMT)) over(),0) FII_AR_GT_BILL_ACT_AMT ,
274 		       ((SUM(SUM(FII_AR_BILL_ACT_AMT)) over() - SUM(SUM(FII_AR_BILL_ACT_AMT_PRIOR)) over() )/
275                                             NULLIF(SUM(SUM(FII_AR_BILL_ACT_AMT_PRIOR)) over(),0)) *100
276                                                                      FII_AR_GT_BILL_ACT_AMT_CHG,
277                         NULLIF(SUM(SUM(FII_AR_BILL_ACT_COUNT)) over(),0) FII_AR_GT_BILL_ACT_COUNT,
278                                        ((SUM(SUM(FII_AR_BILL_ACT_COUNT)) over() - SUM(SUM(FII_AR_BILL_ACT_COUNT_PRIOR)) over() )/
279                                             NULLIF(SUM(SUM(FII_AR_BILL_ACT_COUNT_PRIOR)) over(),0)) *100
280                                                                      FII_AR_GT_BILL_ACT_COUNT_CHG,
281                        NULLIF(SUM(SUM(FII_AR_OPEN_REC_AMT)) over(),0) FII_AR_GT_OPEN_REC_AMT,
282                        (SUM(SUM(net_receivable_amount)) over()/NULLIF(SUM(SUM(billed_amount)) over(),0) )*'||l_dso_period||' FII_AR_GT_BILL_ACT_DSO,
283 		       (SUM(prior_net_receivable_amount) / NULLIF(SUM(prior_billed_amount),0)) *'||l_dso_period||' FII_AR_PRIOR_DSO_KPI,
284 		       (SUM(SUM(prior_net_receivable_amount)) OVER()/NULLIF(SUM(SUM(prior_billed_amount)) OVER(),0) )*'||l_dso_period||' FII_AR_GT_PRIOR_DSO_KPI,
285 		       SUM (SUM(FII_AR_BILL_ACT_AMT_PRIOR)) OVER () FII_AR_GT_BILL_ACT_PRIOR_AMT, ';
286 
287 IF l_view_by_flag = 1 THEN /* It means that the view by is either ou or Industry */
288 
289           l_sql_stmt := l_sql_stmt ||'DECODE(NVL(SUM(FII_AR_BILL_ACT_AMT),0),0,'''','''|| l_bill_act_amt_drill ||''') FII_AR_BILL_ACT_AMT_DRILL ,
290 	                            DECODE(NVL(SUM(FII_AR_BILL_ACT_COUNT),0),0,'''','''||l_bill_act_count_drill ||''') FII_AR_BILL_ACT_COUNT_DRILL ,
291 				    DECODE(NVL(SUM(FII_AR_OPEN_REC_AMT),0),0,'''','''||l_open_rec_drill || ''') FII_AR_BILL_OPEN_REC_AMT_DRILL ,
292                                   NULL FII_AR_VIEW_BY_DRILL';
293 
294 ELSIF /*( l_view_by_flag = 3 )
295                or */ (l_view_by = 'CUSTOMER+FII_CUSTOMERS' and fii_ar_util_pkg.g_is_hierarchical_flag = 'N' ) THEN
296 
297           l_sql_stmt := l_sql_stmt ||'DECODE(NVL(SUM(FII_AR_BILL_ACT_AMT),0),0,'''','''|| l_cust_acct_or_leaf_amt_drill || ''') FII_AR_BILL_ACT_AMT_DRILL ,
298 	                              DECODE(NVL(SUM(FII_AR_BILL_ACT_COUNT),0),0,'''','''||l_bill_act_count_drill || ''') FII_AR_BILL_ACT_COUNT_DRILL ,
299 				      DECODE(NVL(SUM(FII_AR_OPEN_REC_AMT),0),0,'''','''||l_cust_acct_or_leaf_rec_drill || ''') FII_AR_BILL_OPEN_REC_AMT_DRILL ,
300                                       NULL FII_AR_VIEW_BY_DRILL ';
301 
302 ELSIF l_view_by_flag =2 or l_view_by_flag=3 THEN /* It means that the View by Is ct and implementation is hierarchial */
303 
304     l_sql_stmt := l_sql_stmt || ' DECODE(NVL(SUM(FII_AR_BILL_ACT_AMT),0),0,'''',FII_AR_BILL_ACT_AMT_DRILL) FII_AR_BILL_ACT_AMT_DRILL,
305                                        DECODE(NVL(SUM(FII_AR_BILL_ACT_COUNT),0),0,'''',FII_AR_BILL_ACT_COUNT_DRILL) FII_AR_BILL_ACT_COUNT_DRILL,
306                                        DECODE(NVL(SUM(FII_AR_OPEN_REC_AMT),0),0,'''',FII_AR_BILL_OPEN_REC_AMT_DRILL) FII_AR_BILL_OPEN_REC_AMT_DRILL,
307                                        FII_AR_VIEW_BY_DRILL ';
308 END IF;
309 
310 l_sql_stmt := l_sql_stmt || ' FROM ( select /*+ INDEX(f FII_AR_NET_REC'|| fii_ar_util_pkg.g_cust_suffix ||'_mv_N1)*/
311                 CASE WHEN gt.report_date=:PREVIOUS_ASOF_DATE and BITAND(gt.record_type_id,:BITAND)= :BITAND  THEN
312                      f.billing_activity_amount
313                 ELSE
314                      NULL
315                 END FII_AR_BILL_ACT_AMT_PRIOR,
316                 CASE WHEN gt.report_date=:ASOF_DATE and BITAND(gt.record_type_id,:BITAND)= :BITAND  THEN
317                      f.billing_activity_amount
318                 ELSE
319                      NULL
320                 END FII_AR_BILL_ACT_AMT,
321                 CASE WHEN gt.report_date=:ASOF_DATE and BITAND(gt.record_type_id,:BITAND)= :BITAND  THEN
322                      f.billing_activity_count
323                 ELSE
324                      NULL
325                 END FII_AR_BILL_ACT_COUNT,
326                 CASE WHEN gt.report_date=:PREVIOUS_ASOF_DATE and BITAND(gt.record_type_id,:BITAND)= :BITAND  THEN
327                      f.billing_activity_count
328                 ELSE
329                      NULL
330                 END FII_AR_BILL_ACT_COUNT_PRIOR,
331                 CASE when gt.report_date=:ASOF_DATE and BITAND(gt.record_type_Id,:BITAND_INC_TODATE) = :BITAND_INC_TODATE THEN
332                       f.total_open_amount
333 	        ELSE
334                      NULL
335                 END FII_AR_OPEN_REC_AMT,
336                 CASE when gt.report_date=:ASOF_DATE and BITAND(gt.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE THEN '||
337                      l_class_inclusion ||'
338                 ELSE
339                      NULL
340                 END   NET_RECEIVABLE_AMOUNT,
341                 CASE when gt.report_date=:ASOF_DATE and BITAND(gt.record_type_id,:DSO_BITAND)= :DSO_BITAND  THEN
342                      f.billed_amount
343 	        ELSE
344                      NULL
345                 END BILLED_AMOUNT ,
346 		CASE when gt.report_date=:PREVIOUS_ASOF_DATE and BITAND(gt.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE THEN '||
347                      l_class_inclusion ||'
348                 ELSE
349                      NULL
350                 END   PRIOR_NET_RECEIVABLE_AMOUNT,
351                 CASE when gt.report_date=:PREVIOUS_ASOF_DATE and BITAND(gt.record_type_id,:DSO_BITAND)= :DSO_BITAND  THEN
352                      f.billed_amount
353 	        ELSE
354                      NULL
355                 END PRIOR_BILLED_AMOUNT,
356 		gt.viewby viewby,
357                 gt.viewby_code VIEW_BY_ID';
358 
359 IF l_view_by_flag = 3 THEN
360 
361            l_cust_acct_or_leaf_amt_drill := l_cust_acct_or_leaf_amt_drill||'&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=';
362 	   l_cust_acct_or_leaf_rec_drill := l_cust_acct_or_leaf_rec_drill||'&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=';
363            l_sql_stmt:=l_sql_stmt || ','''||l_cust_acct_or_leaf_amt_drill||'''||gt.party_id||'''' FII_AR_BILL_ACT_AMT_DRILL,';
364            l_sql_stmt:=l_sql_stmt || ''''||l_bill_act_count_drill||'''||gt.party_id||'''' FII_AR_BILL_ACT_COUNT_DRILL,';
365            l_sql_stmt:=l_sql_stmt || ''''||l_cust_acct_or_leaf_rec_drill||'''||gt.party_id||'''' FII_AR_BILL_OPEN_REC_AMT_DRILL,';
366            l_sql_stmt:=l_sql_stmt ||' NULL FII_AR_VIEW_BY_DRILL ';
367 END IF;
368 
369 
370 
371 IF l_view_by_flag = 2 THEN /* The view by is ct. and the implementation is heirarchial */
372    l_sql_stmt1 := ', gt.is_leaf_flag IS_LEAF_FLAG ,';
373    l_sql_Stmt1 :=l_sql_stmt1 || ' CASE WHEN gt.is_leaf_flag = ''Y'' OR gt.is_self_flag = ''Y'' THEN '''||
374                                   l_cust_acct_or_leaf_amt_drill||'''
375 				ELSE '''||
376 				  l_bill_act_amt_drill||'''
377 				END FII_AR_BILL_ACT_AMT_DRILL ,'''||l_bill_act_count_drill  ||''' FII_AR_BILL_ACT_COUNT_DRILL,
378                                 CASE WHEN gt.is_leaf_flag = ''Y'' OR gt.is_self_flag = ''Y'' THEN '''||
379                                   l_cust_acct_or_leaf_rec_drill||'''
380 				ELSE '''||
381 				  l_open_rec_drill||'''
382 				END FII_AR_BILL_OPEN_REC_AMT_DRILL ,
383                                 DECODE(gt.is_self_flag,''Y'','''',DECODE(gt.is_leaf_flag,''Y'','''','''||l_customer_drill||''')) FII_AR_VIEW_BY_DRILL ';
384    l_sql_stmt := l_sql_stmt||l_sql_stmt1;
385 
386 END IF;
387 
388 
389 
390 
391 l_sql_stmt:=l_sql_stmt||' from fii_ar_net_rec'||l_cust_suffix||'_mv'||l_curr_suffix||' f,
392                                 (select /*+ no_merge '||l_gt_hint|| ' */  * from fii_time_structures cal, '||l_inner_from_clause||' t
393 	                         where cal.report_date in(:ASOF_DATE ,:PREVIOUS_ASOF_DATE)
394 				 and (BITAND(cal.record_type_id,:BITAND)= :BITAND
395 				     OR BITAND(cal.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE
396 				     OR BITAND(cal.record_type_id,:DSO_BITAND)=:DSO_BITAND ) '||l_inner_where_clause ||' ) gt
397                         where f.time_id = gt.time_id
398 			and gt.period_type_id=f.period_type_id
399                          '|| l_where_clause||' and '||fii_ar_util_pkg.get_mv_where_statement;
400 	IF l_unapp_amount IS NOT NULL THEN
401 			l_sql_stmt:=l_sql_stmt||' UNION ALL
402 			  SELECT /*+ INDEX(f FII_AR_RCT_AGING'|| fii_ar_util_pkg.g_cust_suffix ||'_MV_N1)*/ NULL FII_AR_BILL_ACT_AMT_PRIOR,
403 			         NULL FII_AR_BILL_ACT_AMT,
404 				 NULL FII_AR_BILL_ACT_COUNT,
405 				 NULL FII_AR_BILL_ACT_COUNT_PRIOR,
406 				 NULL FII_AR_OPEN_REC_AMT,
407 				 CASE when gt.report_date=:ASOF_DATE and BITAND(gt.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE THEN '||
408 				   l_unapp_amount || ' ELSE NULL END NET_RECEIVABLE_AMOUNT,
409 				 NULL BILLED_AMOUNT,
410                                  CASE when gt.report_date=:PREVIOUS_ASOF_DATE and BITAND(gt.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE THEN '||
411 				   l_unapp_amount || ' ELSE NULL END PRIOR_NET_RECEIVABLE_AMOUNT,
412 				 NULL PRIOR_BILLED_AMOUNT,
413 				 gt.viewby viewby,
414 				 gt.viewby_code VIEW_BY_ID';
415 IF l_view_by_flag = 3 THEN
416          -- commented out for bug5107816
417 	 -- This piece was redundant as it was already done for the 1st select and was not reqd for 2nd select
418          /*  l_cust_acct_or_leaf_amt_drill := l_cust_acct_or_leaf_amt_drill||'&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS=';
419 	   l_cust_acct_or_leaf_rec_drill := l_cust_acct_or_leaf_rec_drill||'&BIS_PMV_DRILL_CODE_CUSTOMER+FII_CUSTOMERS='; */
420            l_sql_stmt:=l_sql_stmt || ','''||l_cust_acct_or_leaf_amt_drill||'''||gt.party_id||'''' FII_AR_BILL_ACT_AMT_DRILL,';
421            l_sql_stmt:=l_sql_stmt || ''''||l_bill_act_count_drill||'''||gt.party_id||'''' FII_AR_BILL_ACT_COUNT_DRILL,';
422            l_sql_stmt:=l_sql_stmt || ''''||l_cust_acct_or_leaf_rec_drill||'''||gt.party_id||'''' FII_AR_BILL_OPEN_REC_AMT_DRILL,';
423            l_sql_stmt:=l_sql_stmt ||' NULL FII_AR_VIEW_BY_DRILL ';
424 END IF;
425 
426                IF l_view_by_flag = 2 THEN /* The view by is ct. and the implementation is heirarchial */
427 	             l_sql_stmt:=l_sql_stmt||l_sql_stmt1;
428 	       END IF;
429 
430 	       l_sql_stmt:=l_sql_stmt||' from fii_ar_rct_aging'||l_cust_suffix||'_mv'||l_curr_suffix||' f,
431 	                                  (select /*+ no_merge '||l_gt_hint|| ' */   * from fii_time_structures cal, '||l_inner_from_clause||' t
432 	                                   where cal.report_date in(:ASOF_DATE ,:PREVIOUS_ASOF_DATE)
433 				             and (BITAND(cal.record_type_id,:BITAND)= :BITAND
434 				                 OR BITAND(cal.record_type_id,:BITAND_INC_TODATE)= :BITAND_INC_TODATE
435 				                 OR BITAND(cal.record_type_id,:DSO_BITAND)=:DSO_BITAND ) '||l_inner_where_clause ||' ) gt
436                                          where f.time_id = gt.time_id
437 			                   and gt.period_type_id=f.period_type_id
438 			                   AND '||fii_ar_util_pkg.get_rct_mv_where_statement||' '|| l_where_clause;
439 
440 
441 	END IF;
442 
443        l_sql_stmt:=l_sql_stmt||' ) GROUP BY viewby,view_by_id ';
444 
445 
446 
447 IF l_view_by_flag = 2 or l_view_by_flag= 3 THEN
448    l_sql_stmt := l_sql_stmt || ',FII_AR_BILL_ACT_AMT_DRILL,FII_AR_BILL_ACT_COUNT_DRILL,FII_AR_BILL_OPEN_REC_AMT_DRILL, FII_AR_VIEW_BY_DRILL ';
449 END IF;
450 
451 l_sql_stmt := l_sql_stmt || l_order_by;
452 
453 
454 
455 
456     /* Pass back the pmv sql along with bind variables to PMV */
457     fii_ar_util_pkg.bind_variable(l_sql_stmt, p_page_parameter_tbl, bill_act_sum_sql, bill_sum_output);
458 
459 END get_billing_activity;
460 
461 
462 
463 END ;
464