DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_AR_REC_ACTIVITY_TREND_PKG

Source


1 PACKAGE BODY FII_AR_REC_ACTIVITY_TREND_PKG AS
2 /* $Header: FIIARDBIRTB.pls 120.5.12000000.2 2007/04/09 20:20:42 vkazhipu ship $ */
3 
4 PROCEDURE get_rec_activity_trend (
5         p_page_parameter_tbl    IN  BIS_PMV_PAGE_PARAMETER_TBL,
6         open_rec_sql             OUT NOCOPY VARCHAR2,
7         open_rec_output          OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
8 IS
9 
10 l_viewby_id 			VARCHAR2(50);
11 l_viewby			VARCHAR2(250);
12 l_party_where 			VARCHAR2(250);
13 l_parent_party_where 		VARCHAR2(250);
14 l_collector_where		VARCHAR2(250);
15 l_industry_where		VARCHAR2(500);
16 l_cust_acct_where		VARCHAR2(250);
17 l_cust_self_drill		VARCHAR2(500);
18 l_past_due_rec_drill		VARCHAR2(500);
19 l_open_rec_drill		VARCHAR2(500);
20 l_select			VARCHAR2(15000);
21 l_col_select			VARCHAR2(1000);
22 l_prior_column			VARCHAR2(500);
23 l_group_by 			VARCHAR2(100) := NULL;
24 l_order_by			VARCHAR2(250);
25 l_order_column			VARCHAR2(250);
26 l_select_curr_end_prd		VARCHAR2(5000);
27 l_end_date			VARCHAR2(50);
28 l_start_date			VARCHAR2(50);
29 l_per_from 			VARCHAR2(100);
30 
31 BEGIN
32 
33 fii_ar_util_pkg.reset_globals;
34 fii_ar_util_pkg.get_parameters(p_page_parameter_tbl);
35 
36 /* The call populates the AR global temp table. */
37 fii_ar_util_pkg.populate_summary_gt_tables;
38 
39 /* Defining the where clause for PARTY_ID*/
40 IF fii_ar_util_pkg.g_party_id <> '-111' THEN
41 	l_party_where := ' AND f.party_id   = time.party_id ';
42 END IF;
43 
44 /* Defining the where clause for COLLECTOR_ID*/
45 IF fii_ar_util_pkg.g_collector_id <> '-111' THEN
46 	l_collector_where := 'AND f.collector_id = time.collector_id ';
47 END IF;
48 
49 /* Defining industry where clause for specific industry */
50 IF fii_ar_util_pkg.g_industry_id <> '-111' THEN
51         l_industry_where :=  ' AND time.class_code = f.class_code AND time.class_category = f.class_category';
52 END IF;
53 
54 /* Defining the table to be used based on Period Type chosen.*/
55 CASE fii_ar_util_pkg.g_page_period_type
56 WHEN  'FII_TIME_WEEK' THEN
57 	l_per_from:=' fii_time_week ';
58 WHEN 'FII_TIME_ENT_PERIOD' THEN
59 	l_per_from:=' fii_time_ent_period ';
60 WHEN 'FII_TIME_ENT_QTR' THEN
61 	l_per_from:=' fii_time_ent_qtr ';
62 WHEN 'FII_TIME_ENT_YEAR' THEN
63 	l_per_from:=' fii_time_ent_year ';
64 END CASE;
65 
66 /* The select statement checks wethere asofdate chosen is end of current week/month/qtr/year.
67 If True then no need to add a new select ELSE need to add a select statement to get amount
68 upto asofdate chosen for the current period. */
69 
70 IF fii_ar_util_pkg.g_as_of_date = fii_ar_util_pkg.g_curr_per_end THEN
71         l_select_curr_end_prd :=' ';
72         l_end_date := ' :ASOF_DATE ';
73 
74 ELSE
75 
76    	l_select_curr_end_prd := ' UNION ALL
77         /* The select statment will return data for current week/month/qtr/year upto asofdate,
78 	if asofdate<> last day of period*/
79         SELECT
80         per.sequence sequence,
81 	CASE	WHEN	(f.header_filter_date >= per.start_date
82 			AND f.header_filter_date <= :ASOF_DATE)  THEN
83         sum(f.total_receipt_amount) ELSE NULL END    	FII_AR_REC_AMT,
84 	CASE	WHEN	(f.header_filter_date >= per.start_date
85 			AND f.header_filter_date <= :ASOF_DATE) THEN
86         sum(f.total_receipt_count)  ELSE NULL END      	FII_AR_REC_COUNT,
87         sum(f.app_amount)	    		FII_AR_REC_APP_AMT,
88         sum(f.app_count)         		FII_AR_REC_APP_COUNT,
89         NULL    				FII_AR_PRIOR_REC_AMT
90         FROM  '||l_per_from||' per,
91               FII_AR_NET_REC'||fii_ar_util_pkg.g_cust_suffix ||'_mv'|| fii_ar_util_pkg.g_curr_suffix ||'  f,
92               ( SELECT   *  FROM fii_time_structures cal, '||fii_ar_util_pkg.get_from_statement||' gt
93               WHERE report_date = :ASOF_DATE
94               AND bitand(cal.record_type_id, :BITAND) = :BITAND
95 	      AND '||fii_ar_util_pkg.get_where_statement||') time
96         WHERE    f.time_id = time.time_id
97         AND f.period_type_id = time.period_type_id
98         AND f.org_id = time.org_id
99         AND '||fii_ar_util_pkg.get_mv_where_statement||' '||l_party_where||l_collector_where||l_industry_where||'
100         AND per.end_date = :CURR_PERIOD_END
101         GROUP BY report_date, per.sequence, f.header_filter_date, per.start_date
102         ';
103 
104         l_end_date := ' :CURR_PERIOD_START ';
105 
106 END IF;
107 
108 /* This condition handles, wethere parameter compare to chosen is Prior Period and show Prior Data or not. */
109 
110 IF fii_ar_util_pkg.g_time_comp = 'SEQUENTIAL' THEN
111 	l_prior_column:= ' NULL FII_AR_PRIOR_REC_AMT ';
112 	l_start_date := ' :SD_PRIOR ';
113 ELSE
114 	IF fii_ar_util_pkg.g_page_period_type = 'FII_TIME_ENT_YEAR' THEN
115 		l_prior_column:= ' NULL FII_AR_PRIOR_REC_AMT ';
116 		l_start_date := ' :SD_PRIOR ';
117 	ELSE
118 		l_prior_column:= ' CASE	WHEN	time.report_date  <  :SD_SDATE AND f.header_filter_date >= MIN(per.start_date) THEN sum(f.total_receipt_amount) ELSE NULL END	FII_AR_PRIOR_REC_AMT ';
119 		l_start_date := ' :SD_PRIOR_PRIOR ';
120 	END IF;
121 END IF;
122 
123 
124 IF fii_ar_util_pkg.g_page_period_type = 'FII_TIME_ENT_YEAR' THEN
125 
126 l_col_select :=	' sum(f.total_receipt_amount) 	FII_AR_REC_AMT,
127 	sum(f.total_receipt_count) 	FII_AR_REC_COUNT,
128 	sum(f.app_amount) 		FII_AR_REC_APP_AMT,
129 	sum(f.app_count) 		FII_AR_REC_APP_COUNT, ';
130 
131 ELSE
132 
133 l_col_select :=	' CASE	WHEN	time.report_date  >=  :SD_SDATE
134 		AND (f.header_filter_date >= MIN(per.start_date)
135 		AND f.header_filter_date <= time.report_date) THEN
136 	sum(f.total_receipt_amount) ELSE NULL END 	FII_AR_REC_AMT,
137 	CASE	WHEN	time.report_date  >=  :SD_SDATE
138 		AND (f.header_filter_date >= MIN(per.start_date)
139 		AND f.header_filter_date <= time.report_date) THEN
140 	sum(f.total_receipt_count) ELSE NULL END 	FII_AR_REC_COUNT,
141 	CASE	WHEN	time.report_date  >=  :SD_SDATE THEN
142 	sum(f.app_amount) ELSE NULL END 		FII_AR_REC_APP_AMT,
143 	CASE	WHEN	time.report_date  >=  :SD_SDATE THEN
144 	sum(f.app_count) ELSE NULL END 			FII_AR_REC_APP_COUNT, ';
145 END IF;
146 
147 /* Final Select statement */
148 
149 l_select :=
150 '
151 SELECT	 cy_per.name                          VIEWBY,
152 	cy_per.name                          FII_AR_VIEWBY,
153 	to_char(cy_per.end_date,''DD/MM/YYYY'') FII_AR_PERIOD_END_DATE,
154 	SUM(FII_AR_REC_AMT) 		FII_AR_REC_AMT,
155 	SUM(FII_AR_REC_COUNT)  		FII_AR_REC_COUNT,
156 	SUM(FII_AR_REC_APP_AMT) 	FII_AR_REC_APP_AMT,
157 	SUM(FII_AR_REC_APP_COUNT)  	FII_AR_REC_APP_COUNT,
158 	SUM(FII_AR_PRIOR_REC_AMT)	FII_AR_PRIOR_REC_AMT,
159 	SUM(FII_AR_REC_AMT)		FII_AR_REC_AMT_G,
160 	DECODE(SUM(FII_AR_REC_AMT),0,NULL,NULL,NULL,DECODE(SIGN(cy_per.end_date - :ASOF_DATE),1,
161 	''&pFunctionName=FII_AR_REC_ACTIVITY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y'',
162 	''AS_OF_DATE=FII_AR_PERIOD_END_DATE&pFunctionName=FII_AR_REC_ACTIVITY&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ORGANIZATION+FII_OPERATING_UNITS&pParamIds=Y'')) FII_AR_REC_AMT_DRILL
163 FROM
164 	'||l_per_from||'  cy_per,
165 	(SELECT /*+ INDEX(f FII_AR_NET_REC'|| fii_ar_util_pkg.g_cust_suffix ||'_mv_N1)*/
166 	per.sequence sequence,
167 	'||l_col_select||l_prior_column||'
168  	FROM    '||l_per_from||'  per,
169 	    	FII_AR_NET_REC'||fii_ar_util_pkg.g_cust_suffix ||'_mv'|| fii_ar_util_pkg.g_curr_suffix ||' f,
170 	    	( SELECT	/*+ no_merge leading(gt) cardinality(gt 1)*/ *  FROM fii_time_structures cal, '||fii_ar_util_pkg.get_from_statement||' gt
171 		WHERE report_date in
172 			(SELECT end_date from '||l_per_from||' cy_per WHERE cy_per.start_date <  '||l_end_date||'
173 			AND   cy_per.start_date  >= '||l_start_date||'  )
174  		AND bitand(cal.record_type_id, :BITAND) = :BITAND
175 		AND '||fii_ar_util_pkg.get_where_statement||') time
176 	WHERE    f.time_id = time.time_id
177 	AND f.period_type_id = time.period_type_id
178 	AND f.org_id = time.org_id
179 	AND '||fii_ar_util_pkg.get_mv_where_statement||' '||l_party_where||l_collector_where||l_industry_where||'
180  	AND per.end_date = time.report_date
181 	GROUP BY report_date, per.sequence, f.header_filter_date
182  '||l_select_curr_end_prd||'
183 ) inline_view
184 WHERE	cy_per.start_date <= :ASOF_DATE
185 AND   cy_per.start_date  > :SD_PRIOR
186 AND   cy_per.sequence = inline_view.sequence (+)
187 GROUP BY cy_per.name,cy_per.end_date,cy_per.start_date
188 ORDER BY cy_per.start_date
189 ';
190 
191 
192 fii_ar_util_pkg.bind_variable(l_select, p_page_parameter_tbl, open_rec_sql, open_rec_output);
193 
194 
195 END get_rec_activity_trend;
196 
197 /* This function returns the label for the First column in the report, based on period chosen. */
198 FUNCTION get_label RETURN VARCHAR2 IS
199 stmt VARCHAR2(240);
200 BEGIN
201 
202 CASE fii_ar_util_pkg.g_page_period_type
203 WHEN  'FII_TIME_WEEK' THEN
204 	stmt:= FND_MESSAGE.GET_STRING('FII','FII_AR_DBI_WEEK');
205 WHEN 'FII_TIME_ENT_PERIOD' THEN
206 	stmt:= FND_MESSAGE.GET_STRING('FII','FII_AR_DBI_MONTH');
207 WHEN 'FII_TIME_ENT_QTR' THEN
208 	stmt:= FND_MESSAGE.GET_STRING('FII','FII_AR_DBI_QUARTER');
209 WHEN 'FII_TIME_ENT_YEAR' THEN
210 	stmt:= FND_MESSAGE.GET_STRING('FII','FII_AR_DBI_YEAR');
211 END CASE;
212 
213         Return stmt;
214 
215 END get_label;
216 
217 END FII_AR_REC_ACTIVITY_TREND_PKG;
218