DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIX_PMV_EMC_BACK_ACT_RPT_PKG

Source


1 PACKAGE BODY BIX_PMV_EMC_BACK_ACT_RPT_PKG AS
2 /*$Header: bixebacr.plb 120.1 2006/05/11 02:15:47 pubalasu noship $ */
3 
4 PROCEDURE GET_SQL(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
5                   p_sql_text           OUT NOCOPY VARCHAR2,
6                   p_custom_output      OUT NOCOPY bis_query_attributes_TBL
7                   )
8 AS
9 l_sqltext	      VARCHAR2(32000) ;
10 l_where_clause        VARCHAR2(1000) ;
11 l_as_of_date   DATE;
12 l_period_type	varchar2(2000);
13 l_comp_type    varchar2(2000);
14 l_sql_errm      varchar2(32000);
15 l_custom_rec       BIS_QUERY_ATTRIBUTES;
16 l_period_type_id   NUMBER := 1;
17 l_record_type_id   NUMBER ;
18 l_account      VARCHAR2(32000);
19 l_start_date   DATE;
20 l_end_date     DATE;
21 l_period_from  DATE;
22 l_period_to    DATE;
23 l_max_collect_date   VARCHAR2(100);
24 l_period_start_date  DATE;
25 l_application_id NUMBER := 680;
26 l_classification VARCHAR2(32000);
27 l_view_by  varchar2(1000);
28 l_row_type varchar2(10) := 'AC';
29 
30 
31 BEGIN
32 
33 --
34 --Initialize p_custom_output
35 --
36 
37  p_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
38  l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
39 
40 -- Get the parameters
41 
42 BIX_PMV_DBI_UTL_PKG.get_emc_page_params( p_page_parameter_tbl,
43                                          l_as_of_date,
44                                          l_period_type,
45                                          l_record_type_id,
46                                          l_comp_type,
47                                          l_account,
48 					                l_classification,
49 					                l_view_by
50                                        );
51 
52 
53 -- If the account is not 'All'
54 
55  IF l_account IS NOT NULL THEN
56  l_where_clause := 'AND email_account_id IN (:l_account) ';
57  END IF;
58 
59 
60  IF l_classification IS NOT NULL THEN
61  l_where_clause := l_where_clause || ' AND email_classification_id IN (:l_classification) ';
62  END IF;
63 
64  /* Get the MAX date for which data is collected in Email Summary table */
65 
66     BIS_COLLECTION_UTILITIES.get_last_refresh_dates('BIX_EMAIL_DETAILS_F',
67                                                      l_start_date,
68                                                      l_end_date,
69                                                      l_period_from,
70                                                      l_period_to
71                                                    );
72 
73 
74 l_period_start_Date := BIX_PMV_DBI_UTL_PKG.period_start_date(l_as_of_date,l_period_type);
75 
76  /* Get the MAX date for which data is collected in Email Summary table */
77 
78     BIS_COLLECTION_UTILITIES.get_last_refresh_dates('BIX_EMAIL_DETAILS_F',
79                                                      l_start_date,
80                                                      l_end_date,
81                                                      l_period_from,
82                                                      l_period_to
83                                                    );
84 
85 
86  /* if the data is not collected till AS OF DATE
87     then get the accumulated measures from the MAX collected DATE time bucket
88     if the max collect date falls between current period */
89 
90   IF (NVL(l_period_to,l_as_of_date) >= l_as_of_date ) THEN
91    l_max_collect_date := TO_CHAR(l_as_of_date,'DD/MM/YYYY');
92   ELSIF ( l_period_to < l_period_start_date ) THEN
93     l_max_collect_date := TO_CHAR(l_as_of_date,'DD/MM/YYYY');
94   ELSE
95     l_max_collect_date := TO_CHAR(l_period_to,'DD/MM/YYYY');
96   END IF;
97 
98 /*
99  l_sqltext :=  '
100 SELECT
101 ''[email protected]'' VIEWBY,
102 10 BIX_EMC_BACKLOG,
103 20 BIX_EMC_BACKCHANGE,
104 30 BIX_EMC_AGT_HR_EQ,
105 40 BIX_EMC_COST_EQ,
106 50 BIX_EMC_0_1_DAY,
107 60 BIX_EMC_0_1_DAY_CHANGE,
108 70 BIX_EMC_2_3_DAY,
109 80 BIX_EMC_2_3_DAY_CHANGE,
110 90 BIX_EMC_4_7_DAY,
111 100 BIX_EMC_4_7_DAY_CHANGE,
112 110 BIX_EMC_OVER_7_DAY,
113 120 BIX_EMC_OVER_7_DAY_CHANGE,
114 130 BIX_PMV_TOTAL1,
115 140 BIX_PMV_TOTAL2,
116 150 BIX_PMV_TOTAL3,
117 160 BIX_PMV_TOTAL4,
118 170 BIX_PMV_TOTAL5,
119 180 BIX_PMV_TOTAL6,
120 190 BIX_PMV_TOTAL7,
121 200 BIX_PMV_TOTAL8,
122 210 BIX_PMV_TOTAL9,
123 220 BIX_PMV_TOTAL10,
124 230 BIX_PMV_TOTAL11,
125 240 BIX_PMV_TOTAL12
126 FROM DUAL';
127 
128 p_sql_text := l_sqltext;
129 */
130 
131    l_sqltext :=
132   '
133   SELECT * FROM (
134   SELECT
135     lookup_table.value VIEWBY,
136     lookup_table.id    VIEWBYID,
137     SUM(curr_backlog)  BIX_EMC_BACKLOG_CP,
138     (NVL(SUM(curr_backlog),0) -SUM(prev_backlog))/
139            DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog)) * 100 BIX_EMC_BACKCHANGE,
140     SUM(prev_backlog) BIX_EMC_PREVBACKLOG,
141     SUM(curr_backlog)/(SUM(total_emails_replied)/SUM(total_login_hours)) BIX_EMC_AGT_HR_EQ,
142     NVL(SUM(curr_one_day),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog))*100 BIX_EMC_0_1_DAY_CP,
143     (NVL(SUM(curr_one_day),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog)) -
144            NVL(SUM(prev_one_day),0)/DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog))) * 100 BIX_EMC_0_1_DAY_CHANGE,
145     NVL(SUM(curr_three_day),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog))*100 BIX_EMC_2_3_DAY_CP,
146     (NVL(SUM(curr_three_day),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog)) -
147            NVL(SUM(prev_three_day),0)/DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog))) * 100 BIX_EMC_2_3_DAY_CHANGE,
148     NVL(SUM(curr_week),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog))*100 BIX_EMC_4_7_DAY_CP,
149     (NVL(SUM(curr_week),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog)) -
150            NVL(SUM(prev_week),0)/DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog))) * 100 BIX_EMC_4_7_DAY_CHANGE,
151     NVL(SUM(curr_week_plus),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog))*100 BIX_EMC_OVER_7_DAY_CP,
152     (NVL(SUM(curr_week_plus),0)/DECODE(SUM(curr_backlog),0,NULL,SUM(curr_backlog)) -
153            NVL(SUM(prev_week_plus),0)/DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog))) * 100 BIX_EMC_OVER_7_DAY_CHANGE,
154     SUM(SUM(curr_backlog)) OVER() BIX_PMV_TOTAL1,
155     (NVL(SUM(SUM(curr_backlog)) OVER(),0) - SUM(SUM(prev_backlog)) OVER())/
156            DECODE(SUM(SUM(prev_backlog)) OVER(),0,NULL,SUM(SUM(prev_backlog)) OVER()) * 100 BIX_PMV_TOTAL2,
157     SUM(SUM(curr_backlog)) OVER()/(SUM(SUM(total_emails_replied)) OVER()/SUM(SUM(total_login_hours)) OVER()) BIX_PMV_TOTAL3,
158     NVL(SUM(SUM(curr_one_day)) OVER(),0)/DECODE(SUM(SUM(curr_backlog))  OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER())*100 BIX_PMV_TOTAL5,
159     (NVL(SUM(SUM(curr_one_day)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER()) -
160            NVL(SUM(SUM(prev_one_day)) OVER(),0)/DECODE(SUM(SUM(prev_backlog)) OVER(),0,NULL,SUM(SUM(prev_backlog)) OVER())) * 100 BIX_PMV_TOTAL6,
161     NVL(SUM(SUM(curr_three_day)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER())*100 BIX_PMV_TOTAL7,
162     (NVL(SUM(SUM(curr_three_day)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER()) -
163            NVL(SUM(SUM(prev_three_day)) OVER(),0)/DECODE(SUM(SUM(prev_backlog)) OVER(),0,NULL,SUM(SUM(prev_backlog)) OVER())) * 100 BIX_PMV_TOTAL8,
164     NVL(SUM(SUM(curr_week)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER())*100 BIX_PMV_TOTAL9,
165     (NVL(SUM(SUM(curr_week)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER()) -
166            NVL(SUM(SUM(prev_week)) OVER(),0)/DECODE(SUM(SUM(prev_backlog)) OVER(),0,NULL,SUM(SUM(prev_backlog)) OVER())) * 100 BIX_PMV_TOTAL10,
167     NVL(SUM(SUM(curr_week_plus)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER())*100 BIX_PMV_TOTAL11,
168     (NVL(SUM(SUM(curr_week_plus)) OVER(),0)/DECODE(SUM(SUM(curr_backlog)) OVER(),0,NULL,SUM(SUM(curr_backlog)) OVER()) -
169            NVL(SUM(SUM(prev_week_plus)) OVER(),0)/DECODE(SUM(SUM(prev_backlog)) OVER(),0,NULL,SUM(SUM(prev_backlog)) OVER())) * 100 BIX_PMV_TOTAL12
170   FROM
171   ( ';
172 
173   IF l_view_by = 'EMAIL ACCOUNT+EMAIL ACCOUNT' THEN
174   l_sqltext := l_sqltext || '  SELECT
175    email_account_id id,
176    SUM(DECODE(period_start_date,:l_max_collect_date,
177         NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) curr_backlog,
178    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,
179        NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) prev_backlog,
180    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_ONE_DAY)),0) curr_one_day,
181    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_ONE_DAY)) prev_one_day,
182    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_THREE_DAYS)),0) curr_three_day,
183    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_THREE_DAYS)) prev_three_day,
184    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_WEEK)),0) curr_week,
185    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_WEEK)) prev_week,
186    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_WEEK_PLUS)),0) curr_week_plus,
187    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_WEEK_PLUS)) prev_week_plus
188    FROM   bix_email_details_mv
189    WHERE  time_id IN (TO_CHAR(:l_max_collect_date,''J''),TO_CHAR(&BIS_PREVIOUS_ASOF_DATE,''J''))
190    AND    row_type = :l_row_type
191    AND   period_type_id = :l_period_type_id ' || l_where_clause || '
192    GROUP BY email_account_id
193    ) fact, ';
194   ELSE
195   l_sqltext := l_sqltext || '  SELECT
196    email_classification_id id,
197    SUM(DECODE(period_start_date,:l_max_collect_date,
198         NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) curr_backlog,
199    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,
200        NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) prev_backlog,
201    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_ONE_DAY)),0) curr_one_day,
202    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_ONE_DAY)) prev_one_day,
203    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_THREE_DAYS)),0) curr_three_day,
204    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_THREE_DAYS)) prev_three_day,
205    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_WEEK)),0) curr_week,
206    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_WEEK)) prev_week,
207    NVL(SUM(DECODE(period_start_date,:l_max_collect_date,ACCUMULATED_EMAILS_WEEK_PLUS)),0) curr_week_plus,
208    SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,ACCUMULATED_EMAILS_WEEK_PLUS)) prev_week_plus
209    FROM   bix_email_details_mv
210    WHERE  time_id IN (TO_CHAR(:l_max_collect_date,''J''),TO_CHAR(&BIS_PREVIOUS_ASOF_DATE,''J''))
211    AND    row_type = :l_row_type
212    AND   period_type_id = :l_period_type_id ' || l_where_clause || '
213    GROUP BY email_classification_id
214    ) fact, ';
215   END IF;
216 
217   l_sqltext := l_sqltext || '  (
218       SELECT SUM(EMAILS_REPLIED_IN_PERIOD) total_emails_replied
219       FROM bix_email_details_mv fact,
220            fii_time_rpt_struct calendar
221       WHERE fact.time_id = calendar.time_id
222       AND fact.period_type_id = calendar.period_type_id
223       AND calendar.report_date = &BIS_CURRENT_ASOF_DATE
224 	 AND fact.row_type = :l_row_type
225       AND bitand(calendar.record_type_id,&BIS_NESTED_PATTERN ) =  calendar.record_type_id
226      ),
227     (
228       SELECT SUM(LOGIN_TIME)/3600 total_login_hours
229       FROM bix_agent_session_f fact,
230            fii_time_rpt_struct calendar
231       WHERE fact.application_id = :l_application_id
232       AND  fact.time_id = calendar.time_id
233       AND fact.period_type_id = calendar.period_type_id
234       AND calendar.report_date = &BIS_CURRENT_ASOF_DATE
235       AND bitand(calendar.record_type_id,&BIS_NESTED_PATTERN ) =  calendar.record_type_id
236      ), ';
237 
238 
239 	IF l_view_by = 'EMAIL ACCOUNT+EMAIL ACCOUNT' THEN
240 	l_sqltext := l_sqltext || ' bix_email_accounts_v lookup_table ';
241 	ELSE
242 	l_sqltext := l_sqltext || ' bix_email_classifications_v lookup_table ';
243 	END IF;
244 
245 
246      l_sqltext := l_sqltext || ' WHERE fact.id = lookup_table.id
247      GROUP BY lookup_table.value,lookup_table.id
248 	)
249      where
250 	(
251 	nvl(BIX_EMC_PREVBACKLOG,0)+
252 	nvl(BIX_EMC_BACKLOG_CP,0)+
253 	abs(nvl(BIX_EMC_BACKCHANGE,0))+
254 	nvl(BIX_EMC_AGT_HR_EQ,0)+
255 	nvl(BIX_EMC_0_1_DAY_CP,0)+
256 	abs(nvl(BIX_EMC_0_1_DAY_CHANGE,0))+
257 	nvl(BIX_EMC_2_3_DAY_CP,0)+
258 	abs(nvl(BIX_EMC_2_3_DAY_CHANGE,0))+
259 	nvl(BIX_EMC_4_7_DAY_CP,0)+
260 	abs(nvl(BIX_EMC_4_7_DAY_CHANGE,0))+
261 	nvl(BIX_EMC_OVER_7_DAY_CP,0)+
262 	abs(nvl(BIX_EMC_OVER_7_DAY_CHANGE,0))
263 	) <> 0
264 	&ORDER_BY_CLAUSE ';
265 
266 p_sql_text := l_sqltext;
267 
268 
269 -- insert Period Type ID bind variable
270 
271 l_custom_rec.attribute_name := ':l_period_type_id' ;
272 l_custom_rec.attribute_value:= l_period_type_id;
273 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
274 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.NUMERIC_BIND;
275 
276 p_custom_output.Extend();
277 p_custom_output(p_custom_output.count) := l_custom_rec;
278 
279 -- Insert account Bind Variable
280 
281 IF ( l_account IS NOT NULL) THEN
282 l_custom_rec.attribute_name := ':l_account' ;
283 l_custom_rec.attribute_value:= l_account;
284 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
285 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
286 
287 p_custom_output.Extend();
288 p_custom_output(p_custom_output.count) := l_custom_rec;
289 END IF;
290 
291 IF ( l_classification IS NOT NULL) THEN
292 l_custom_rec.attribute_name := ':l_classification' ;
293 l_custom_rec.attribute_value:= l_classification;
294 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
295 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
296 
297 p_custom_output.Extend();
298 p_custom_output(p_custom_output.count) := l_custom_rec;
299 END IF;
300 
301 l_custom_rec.attribute_name := ':l_max_collect_date' ;
302 l_custom_rec.attribute_value:= l_max_collect_date;
303 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
304 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
305 
306 p_custom_output.Extend();
307 p_custom_output(p_custom_output.count) := l_custom_rec;
308 
309 l_custom_rec.attribute_name := ':l_application_id';
310 l_custom_rec.attribute_value:= l_application_id;
311 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
312 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.NUMERIC_BIND;
313 
314 p_custom_output.EXTEND;
315 p_custom_output(p_custom_output.COUNT) := l_custom_rec;
316 
317 l_custom_rec.attribute_name := BIS_PMV_PARAMETERS_PUB.VIEW_BY_VALUE;
318 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.View_By_Type;
319 l_custom_rec.attribute_value := l_view_by;
320 
321 p_custom_output.EXTEND();
322 p_custom_output(p_custom_output.COUNT) := l_custom_rec;
323 
324 l_custom_rec.attribute_name := ':l_row_type' ;
325 l_custom_rec.attribute_value:= l_row_type;
326 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
327 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
328 
329 p_custom_output.Extend();
330 p_custom_output(p_custom_output.count) := l_custom_rec;
331 
332 EXCEPTION
333 WHEN OTHERS THEN
334 NULL;
335 END GET_SQL;
336 END  BIX_PMV_EMC_BACK_ACT_RPT_PKG;