DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_AR_UNAPP_RCT_TREND_PKG

Source


1 PACKAGE BODY fii_ar_unapp_rct_trend_pkg AS
2 /*  $Header: FIIARDBIURTB.pls 120.4.12000000.2 2007/04/09 20:16:44 vkazhipu ship $ */
3 
4 -- This package will provide SQL statements to retrieve data for Unapplied Receipts Trend report
5 
6 PROCEDURE get_unapp_rct_trend ( p_page_parameter_tbl      IN BIS_PMV_PAGE_PARAMETER_TBL
7                                ,p_unapp_rct_trend_sql     OUT NOCOPY VARCHAR2
8 			       ,p_unapp_rct_trend_output  OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL
9 			      ) IS
10 
11   l_sqlstmt                     VARCHAR2(30000);
12 
13 -- Variables for where clauses
14   l_child_party_where 		VARCHAR2(300);
15   l_collector_where		VARCHAR2(300);
16 
17 -- Variables related to TIME table
18   l_curr_per_sequence           NUMBER;
19   l_curr_end_date		DATE;
20 
21 -- Variables used for forming PMV SQL when report date <> end date of the month
22   l_curr_period_unapp_rec_sql   VARCHAR2(10000);
23   l_curr_period_total_rec_sql   VARCHAR2(10000);
24 
25 
26 BEGIN
27   -- Call to reset the parameter variables
28   fii_ar_util_pkg.reset_globals;
29 
30   -- Call to get all the parameters in the report
31   fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
32 
33   -- Call to populate fii_ar_summary_gt table
34   fii_ar_util_pkg.populate_summary_gt_tables;
35 
36  -- Customer Dimension WHERE clause based on the report parameter
37  IF (fii_ar_util_pkg.g_party_id <> '-111') THEN
38      l_child_party_where := ' AND f.party_id   = inner_time.party_id ';
39  END IF;
40 
41  -- Collector Dimension WHERE clause based on the report parameter
42 
43   IF (fii_ar_util_pkg.g_collector_id <> '-111') THEN
44      l_collector_where := 'AND f.collector_id = inner_time.collector_id';
45   END IF;
46 
47 -- Getting the sequence and the last day of the month corresponding to the REPORT DATE
48 -- Putting NVL to ensure that SELECT clause doesn't fail when AsOfDate is not available in TIME table
49 
50    SELECT NVL(MAX(sequence),0),NVL(MAX(end_date),SYSDATE)
51      INTO l_curr_per_sequence,l_curr_end_date
52      FROM fii_time_ent_period
53     WHERE fii_ar_util_pkg.g_as_of_date BETWEEN start_date AND end_date;
54 
55 -- Framing SQL statement for the current month for as of date <> end date of the month
56 
57  IF fii_ar_util_pkg.g_as_of_date <> l_curr_end_date THEN
58 
59   -- Following variable stores the SQL for Unapplied Receipt Amount
60 
61      l_curr_period_unapp_rec_sql :=
62 		'	UNION ALL
63 		 SELECT	/*+ INDEX(f FII_AR_RCT_AGING_BASE_MV_N1)*/  '||l_curr_per_sequence||'     period_sequence
64 		       ,f.total_unapplied_amount      FII_AR_UNAPP_REC_AMT
65 		       ,f.total_unapplied_count       FII_AR_UNAPP_REC_COUNT
66 		       ,NULL			      FII_AR_PRIOR_UNAPP_REC_AMT
67 		       ,NULL			      FII_AR_PRIOR_UNAPP_REC_COUNT
68 		       ,NULL                          FII_AR_TOTAL_REC_AMT
69 		       ,NULL                          FII_AR_TOTAL_REC_COUNT
70 		  FROM  fii_ar_rct_aging_base_mv'||fii_ar_util_pkg.g_curr_suffix||'   f
71 		       ,(SELECT  /*+ no_merge leading(gt) cardinality(gt 1)*/ cal.time_id		time_id
72 				,cal.period_type_id	period_type_id
73 				,gt.*
74 		           FROM fii_time_structures	cal
75 			       ,fii_ar_summary_gt       gt
76 			  WHERE cal.report_date = :ASOF_DATE
77 		            AND BITAND(cal.record_type_id, :BITAND_INC_TODATE) = :BITAND_INC_TODATE
78 		        ) inner_time
79 		 WHERE inner_time.time_id = f.time_id
80 		   AND inner_time.period_type_id = f.period_type_id
81 		   AND f.org_id = inner_time.org_id
82 		   AND '||fii_ar_util_pkg.get_rct_mv_where_statement||' '||l_child_party_where||' '||l_collector_where;
83 
84 -- Following variable stores the SQL for Total Receipt Amount
85 
86      l_curr_period_total_rec_sql :=
87 		'	UNION ALL
88 		 SELECT	/*+ INDEX(f FII_AR_NET_REC_BASE_MV_N1)*/  '||l_curr_per_sequence||'  period_sequence
89 		        ,NULL                      FII_AR_UNAPP_REC_AMT
90 			,NULL                      FII_AR_UNAPP_REC_COUNT
91 			,NULL                      FII_AR_PRIOR_UNAPP_REC_AMT
92 			,NULL                      FII_AR_PRIOR_UNAPP_REC_COUNT
93 			,CASE WHEN f.header_filter_date > LAST_DAY(ADD_MONTHS(:ASOF_DATE,-1))
94 			 THEN f.total_receipt_amount
95 			 ELSE NULL
96 			  END			   FII_AR_TOTAL_REC_AMT
97 			,CASE WHEN f.header_filter_date > LAST_DAY(ADD_MONTHS(:ASOF_DATE,-1))
98 			 THEN f.total_receipt_count
99 			 ELSE NULL
100 			  END			   FII_AR_TOTAL_REC_COUNT
101 		   FROM  fii_ar_net_rec_base_mv'||fii_ar_util_pkg.g_curr_suffix||'   f
102 			,(SELECT /*+no_merge leading(gt) cardinality(gt 1)*/ cal.time_id		time_id
103 				,cal.period_type_id	period_type_id
104 				,gt.*
105 		            FROM fii_time_structures       cal
106 			        ,fii_ar_summary_gt         gt
107 			   WHERE cal.report_date = :ASOF_DATE
108 		             AND BITAND(cal.record_type_id, :BITAND) =  :BITAND
109 		         ) inner_time
110 		  WHERE inner_time.time_id = f.time_id
111 		    AND inner_time.period_type_id     = f.period_type_id
112 		    AND f.org_id = inner_time.org_id
113 		    AND '||fii_ar_util_pkg.get_mv_where_statement||' '||l_child_party_where||' '||l_collector_where;
114 
115  END IF;
116 
117 -- PMV SQL to display data on Unapplied Receipts Trend Report
118 
119 l_sqlstmt :=
120  'SELECT time.name		                      VIEWBY
121 	,TO_CHAR(time.end_date,''DD/MM/YYYY'')        FII_AR_MONTH_END_DATE
122 	,FII_AR_UNAPP_REC_AMT
123 	,FII_AR_UNAPP_REC_COUNT
124 	,FII_AR_TOTAL_REC_AMT
125 	,FII_AR_TOTAL_REC_COUNT
126 -- Drill on Unapplied Receipts Amount column should go to Unapplied Receipts Summary report,VIEWBY = OU
127 	,CASE WHEN FII_AR_UNAPP_REC_AMT = 0 OR FII_AR_UNAPP_REC_AMT IS NULL THEN NULL
128 	      WHEN time.end_date < :ASOF_DATE
129 	      THEN ''AS_OF_DATE=FII_AR_MONTH_END_DATE&pFunctionName=FII_AR_UNAPP_RCT_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y''
130 	 ELSE ''pFunctionName=FII_AR_UNAPP_RCT_SUMMARY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y''
131 	  END                    FII_AR_UNAPP_REC_AMT_DRILL
132 -- Drill on Total Receipts Amount column should go to Receipts Activity report,VIEWBY = OU
133 	,CASE WHEN FII_AR_TOTAL_REC_AMT = 0 OR FII_AR_TOTAL_REC_AMT IS NULL THEN NULL
134 	      WHEN time.end_date < :ASOF_DATE
135 	      THEN ''AS_OF_DATE=FII_AR_MONTH_END_DATE&pFunctionName=FII_AR_REC_ACTIVITY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y''
136 	 ELSE ''pFunctionName=FII_AR_REC_ACTIVITY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y''
137 	  END                    FII_AR_TOTAL_REC_AMT_DRILL
138 	,FII_AR_PRIOR_UNAPP_REC_AMT
139 	,FII_AR_PRIOR_UNAPP_REC_COUNT
140    FROM
141       ( SELECT   inner_inline_view.period_sequence      period_sequence
142 		,SUM(FII_AR_UNAPP_REC_AMT)		FII_AR_UNAPP_REC_AMT
143 		,SUM(FII_AR_UNAPP_REC_COUNT)		FII_AR_UNAPP_REC_COUNT
144 		,SUM(FII_AR_TOTAL_REC_AMT)		FII_AR_TOTAL_REC_AMT
145 		,SUM(FII_AR_TOTAL_REC_COUNT)		FII_AR_TOTAL_REC_COUNT
146 		,NULL					FII_AR_UNAPP_REC_AMT_DRILL
147 		,NULL					FII_AR_TOTAL_REC_AMT_DRILL
148 		,SUM(FII_AR_PRIOR_UNAPP_REC_AMT)	FII_AR_PRIOR_UNAPP_REC_AMT
149 		,SUM(FII_AR_PRIOR_UNAPP_REC_COUNT)	FII_AR_PRIOR_UNAPP_REC_COUNT
150 	   FROM
151 	       (SELECT /*+ INDEX(f FII_AR_RCT_AGING_BASE_mv_N1)*/ time.sequence		      period_sequence
152 		      ,CASE WHEN inner_time.report_date  >= :SD_SDATE
153 		       THEN f.total_unapplied_amount
154 		       ELSE NULL
155 			END                           FII_AR_UNAPP_REC_AMT
156 		      ,CASE WHEN inner_time.report_date  >= :SD_SDATE
157 			THEN f.total_unapplied_count
158 			ELSE NULL
159 			 END                          FII_AR_UNAPP_REC_COUNT
160 		      ,CASE WHEN inner_time.report_date < :SD_SDATE
161 			    THEN f.total_unapplied_amount
162 			ELSE NULL
163 			 END			      FII_AR_PRIOR_UNAPP_REC_AMT
164 		      ,CASE WHEN inner_time.report_date < :SD_SDATE
165 			THEN f.total_unapplied_count
166 			ELSE NULL
167 			 END                          FII_AR_PRIOR_UNAPP_REC_COUNT
168 		       ,NULL                          FII_AR_TOTAL_REC_AMT
169 		       ,NULL                          FII_AR_TOTAL_REC_COUNT
170 -- Since VIEWBY is always MONTH, base MV would be used
171 		  FROM fii_ar_rct_aging_base_mv'||fii_ar_util_pkg.g_curr_suffix||'   f
172 		      ,fii_time_ent_period       time
173 		      ,(SELECT  /*+ no_merge leading(gt) cardinality(gt 1)*/ cal.time_id		time_id
174 			       ,cal.period_type_id	period_type_id
175 			       ,cal.report_date		report_date
176 			       ,gt.*
177 		          FROM fii_time_structures       cal
178 			      ,fii_ar_summary_gt         gt
179 			 WHERE report_date IN (SELECT end_date
180 			                         FROM fii_time_ent_period
181 						WHERE start_date >= :SD_PRIOR_PRIOR
182 						  AND end_date <= :ASOF_DATE
183 					       )
184 			   AND BITAND(cal.record_type_id,:BITAND_INC_TODATE) = :BITAND_INC_TODATE
185 			) inner_time
186 		 WHERE inner_time.time_id = f.time_id
187 		   AND f.period_type_id = inner_time.period_type_id
188 		   AND f.org_id = inner_time.org_id
189 		   AND time.end_date = inner_time.report_date
190 		   AND '||fii_ar_util_pkg.get_rct_mv_where_statement||' '||l_child_party_where||'
191 		   '||l_collector_where||'
192 					UNION ALL
193 		SELECT /*+ INDEX(f FII_AR_NET_REC_BASE_mv_N1)*/
194 		inner_time.sequence          period_sequence
195 		      ,NULL                         FII_AR_UNAPP_REC_AMT
196 		      ,NULL                         FII_AR_UNAPP_REC_COUNT
197 		      ,NULL                         FII_AR_PRIOR_UNAPP_REC_AMT
198                       ,NULL                         FII_AR_PRIOR_UNAPP_REC_COUNT
199 		      ,CASE WHEN f.header_filter_date >= inner_time.start_date
200 		          THEN total_receipt_amount
201 		       ELSE NULL
202 		        END			    FII_AR_TOTAL_REC_AMT
203 		      ,CASE WHEN f.header_filter_date >= inner_time.start_date
204 		          THEN total_receipt_count
205 		       ELSE NULL
206 		        END			    FII_AR_TOTAL_REC_COUNT
207 		  FROM fii_ar_net_rec_base_mv'||fii_ar_util_pkg.g_curr_suffix||'   f
208 		       ,(SELECT /*+no_merge leading(gt) cardinality(gt 1)*/ time.ent_period_id	ent_period_id
209 			       ,time.sequence		sequence
210 			       ,time.start_date         start_date
211 		               ,gt.*
212 		           FROM fii_time_ent_period     time
213 			       ,fii_ar_summary_gt	gt
214 			  WHERE time.start_date > :SD_PRIOR  -- Need to Pick only one year data
215 		            AND time.end_date   <= :ASOF_DATE
216 			) inner_time
217 		 WHERE inner_time.ent_period_id = f.time_id
218 		   AND f.period_type_id = 32
219 		   AND f.org_id = inner_time.org_id
220 		   AND '||fii_ar_util_pkg.get_mv_where_statement||' '||l_child_party_where||'
221 		   '||l_collector_where||''||l_curr_period_unapp_rec_sql||''||l_curr_period_total_rec_sql||'
222 		) inner_inline_view
223 	GROUP BY inner_inline_view.period_sequence
224       ) inner_view
225      ,fii_time_ent_period	time
226 WHERE time.start_date <= :ASOF_DATE
227   AND time.start_date  > :SD_PRIOR
228   AND time.sequence = inner_view.period_sequence (+)
229 -- Outer join to display all the 12 months irrespective of whether data is available or not for those months
230 ORDER BY time.start_date
231 ';
232 
233 -- Call to UTIL package to bind the variables
234 
235    fii_ar_util_pkg.bind_variable(l_sqlstmt
236                                 ,p_page_parameter_tbl
237 				,p_unapp_rct_trend_sql
238 				,p_unapp_rct_trend_output
239 				);
240 
241 END get_unapp_rct_trend;
242 
243 END fii_ar_unapp_rct_trend_pkg;