[Home] [Help]
PACKAGE BODY: APPS.BIX_PMV_EMC_KPI_PRTLT_PKG
Source
1 PACKAGE BODY BIX_PMV_EMC_KPI_PRTLT_PKG AS
2 /*$Header: bixekpib.plb 115.11 2003/12/20 02:14:42 djambula 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_as_of_date DATE;
11 l_period_type varchar2(2000);
12 l_comp_type varchar2(2000);
13 l_account varchar2(1000);
14 l_record_type_id NUMBER;
15 l_sql_errm varchar2(32000);
16 l_agent_cost NUMBER := 0;
17 l_cust_resp_time_goal NUMBER;
18 l_service_level_goal NUMBER;
19 l_custom_rec BIS_QUERY_ATTRIBUTES;
20 l_period_type_id NUMBER := 1;
21 l_start_date DATE;
22 l_end_date DATE;
23 l_period_from DATE;
24 l_period_to DATE;
25 l_max_collect_date VARCHAR2(100);
26 l_period_start_Date DATE;
27 l_dummy_cust NUMBER;
28 l_application_id NUMBER := 680;
29 l_classification VARCHAR2(32000);
30 l_where_clause VARCHAR2(32000);
31 l_view_by varchar2(1000);
32 l_row_type varchar2(10) := 'ACP';
33
34 BEGIN
35 p_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
36 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
37
38 /*
39 l_sqltext := '
40 SELECT
41 75 BIX_EMC_SVCLVL,
42 80 BIX_PMV_TOTAL1,
43 90 BIX_EMC_GOAL,
44 90 BIX_PMV_TOTAL2,
45 36 BIX_EMC_CRTIME,
46 34.2 BIX_PMV_TOTAL3,
47 30 BIX_EMC_MSGSGOAL,
48 30 BIX_PMV_TOTAL4,
49 273000 BIX_EMC_RCVD,
50 242970 BIX_PMV_TOTAL5,
51 268000 BIX_EMC_REPLD,
52 246560 BIX_PMV_TOTAL6,
53 18500 BIX_EMC_BACKLOG,
54 19240 BIX_PMV_TOTAL7,
55 5.2 BIX_EMC_REPPERHR,
56 5.824 BIX_PMV_TOTAL8,
57 56 BIX_EMC_ONE_DONE,
58 54.5 BIX_PMV_TOTAL9,
59 15 BIX_EMC_TRANRATIO,
60 7 BIX_PMV_TOTAL10,
61 0.7 BIX_EMC_DELRATIO,
62 -0.3 BIX_PMV_TOTAL11,
63 357 BIX_EMC_CUST_COUNT,
64 317.73 BIX_PMV_TOTAL12,
65 44250 BIX_EMC_SR,
66 40267.5 BIX_PMV_TOTAL13,
67 3.2 BIX_EMC_COSTPERMSG,
68 2.88 BIX_PMV_TOTAL14,
69 110000 BIX_EMC_LABOR_COST,
70 101750 BIX_PMV_TOTAL15
71 FROM DUAL';
72 */
73
74 BEGIN
75 IF (FND_PROFILE.DEFINED('BIX_EMAIL_GOAL')) THEN
76 l_cust_resp_time_goal := TO_NUMBER(FND_PROFILE.VALUE('BIX_EMAIL_GOAL'));
77 END IF;
78
79 IF l_cust_resp_time_goal IS NULL THEN
80 l_cust_resp_time_goal := 0;
81 END IF;
82 EXCEPTION
83 WHEN OTHERS THEN
84 l_cust_resp_time_goal := 0;
85 END;
86
87 BEGIN
88 IF (FND_PROFILE.DEFINED('BIX_EMAIL_SLVL_GOAL')) THEN
89 l_service_level_goal := ROUND(TO_NUMBER(FND_PROFILE.VALUE('BIX_EMAIL_SLVL_GOAL')),1);
90 END IF;
91
92 IF l_service_level_goal IS NULL THEN
93 l_service_level_goal := 0;
94 END IF;
95
96 EXCEPTION
97 WHEN OTHERS THEN
98 l_service_level_goal := 0;
99 END;
100
101 --
102 --Retrieve the dummy (unidentified) customer id which is used by EMC
103 --
104 IF (FND_PROFILE.DEFINED('IEM_DEFAULT_CUSTOMER_ID')) THEN
105 l_dummy_cust := TO_NUMBER(FND_PROFILE.VALUE('IEM_DEFAULT_CUSTOMER_ID'));
106 END IF;
107
108 IF l_dummy_cust IS NULL THEN
109 l_dummy_cust := -1;
110 END IF;
111
112 -- Get the parameters
113
114 BIX_PMV_DBI_UTL_PKG.get_emc_page_params( p_page_parameter_tbl,
115 l_as_of_date,
116 l_period_type,
117 l_record_type_id,
118 l_comp_type,
119 l_account,
120 l_classification,
121 l_view_by
122 );
123
124
125 -- If the account is not 'All'
126
127 IF l_account IS NOT NULL THEN
128 l_where_clause := 'AND email_account_id IN (:l_account) ';
129 END IF;
130
131
132 IF l_classification IS NOT NULL THEN
133 l_where_clause := l_where_clause || ' AND email_classification_id IN (:l_classification) ';
134 END IF;
135
136 l_period_start_Date := BIX_PMV_DBI_UTL_PKG.period_start_date(l_as_of_date,l_period_type);
137
138 /* Get the MAX date for which data is collected in Email Summary table */
139
140 BIS_COLLECTION_UTILITIES.get_last_refresh_dates('BIX_EMAIL_DETAILS_F',
141 l_start_date,
142 l_end_date,
143 l_period_from,
144 l_period_to
145 );
146
147
148 /* if the data is not collected till AS OF DATE
149 then get the accumulated measures from the MAX collected DATE time bucket
150 if the max collect date falls between current period */
151
152 IF (NVL(l_period_to,l_as_of_date) >= l_as_of_date ) THEN
153 l_max_collect_date := TO_CHAR(l_as_of_date,'DD/MM/YYYY');
154 ELSIF ( l_period_to < l_period_start_date ) THEN
155 l_max_collect_date := TO_CHAR(l_as_of_date,'DD/MM/YYYY');
156 ELSE
157 l_max_collect_date := TO_CHAR(l_period_to,'DD/MM/YYYY');
158 END IF;
159
160
161 l_sqltext :=
162 'SELECT
163 ROUND(SUM(curr_slvl) * 100,1) BIX_EMC_SVCLVL,
164 ROUND(SUM(prev_slvl) * 100,1) BIX_PMV_TOTAL1,
165 ' || l_service_level_goal || ' BIX_EMC_GOAL,'|| l_service_level_goal || ' BIX_PMV_TOTAL2,
166 ROUND(SUM(curr_avg_resp_time)/3600,1) BIX_EMC_CRTIME,
167 ROUND(SUM(prev_avg_resp_time)/3600,1) BIX_PMV_TOTAL3,
168 ' || l_cust_resp_time_goal || ' BIX_EMC_MSGSGOAL,'|| l_cust_resp_time_goal || ' BIX_PMV_TOTAL4,
169 NVL(SUM(curr_received),0) BIX_EMC_RCVD,
170 SUM(prev_received) BIX_PMV_TOTAL5,
171 SUM(NVL(curr_replied,0)+ NVL(curr_auto_replied,0)) BIX_EMC_REPLD,
172 SUM(NVL(prev_replied,0)+ NVL(prev_auto_replied,0)) BIX_PMV_TOTAL6,
173 NVL(SUM(curr_backlog),0) BIX_EMC_BACKLOG,
174 DECODE(SUM(prev_backlog),0,NULL,SUM(prev_backlog)) BIX_PMV_TOTAL7,
175 ROUND(NVL(SUM(curr_replied),0)/sum(CURR_LOGIN_TIME_IN_PERIOD),1) BIX_EMC_REPPERHR,
176 ROUND(SUM(prev_replied)/ sum(PREV_LOGIN_TIME_IN_PERIOD),1) BIX_PMV_TOTAL8,
177 ROUND(SUM(curr_one_done)*100,1) BIX_EMC_ONE_DONE,
178 ROUND(SUM(prev_one_done)*100,1) BIX_PMV_TOTAL9,
179 ROUND(NVL(SUM(curr_transferred),0)/ DECODE(SUM(NVL(curr_deleted,0) + NVL(curr_replied,0)),0,NULL,
180 SUM(NVL(curr_deleted,0) + NVL(curr_replied,0)))*100,1) BIX_EMC_TRANRATIO,
181 ROUND(SUM(prev_transferred)/ DECODE(SUM(NVL(prev_deleted,0) + NVL(prev_replied,0)),0,NULL,
182 SUM(NVL(prev_deleted,0) + NVL(prev_replied,0)))*100,1) BIX_PMV_TOTAL10,
183 ROUND((NVL(SUM(curr_deleted),0)+NVL(SUM(curr_auto_deleted),0))/
184 DECODE(SUM(curr_completed) ,0,NULL,SUM(curr_completed))*100,1) BIX_EMC_DELRATIO,
185 ROUND((NVL(SUM(prev_deleted),0)+NVL(SUM(prev_auto_deleted),0))/
186 DECODE(SUM(prev_completed) ,0,NULL,SUM(prev_completed))*100,1) BIX_PMV_TOTAL11,
187 NVL(SUM(curr_customer_count),0) BIX_EMC_CUST_COUNT,
188 DECODE(SUM(prev_customer_count),0,NULL,SUM(prev_customer_count)) BIX_PMV_TOTAL12,
189 NVL(SUM(curr_sr_created),0) BIX_EMC_SR,
190 SUM(prev_sr_created) BIX_PMV_TOTAL13,
191 NVL(SUM(curr_composed),0) BIX_EMC_COMPOSED,
192 SUM(prev_composed) BIX_PMV_TOTAL14,
193 NVL(SUM(curr_leads),0) BIX_EMC_LEADS,
194 SUM(prev_leads) BIX_PMV_TOTAL15
195 FROM
196 (
197 SELECT
198 NVL(SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_RPLD_BY_GOAL_IN_PERIOD)),0)/
199 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,
200 DECODE(NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0),0,NULL,
201 NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) )
202 )) curr_slvl,
203 NVL(SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_RPLD_BY_GOAL_IN_PERIOD)),0)/
204 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,
205 DECODE(NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0),0,NULL,
206 NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) )
207 )) prev_slvl,
208 NVL(SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAIL_RESP_TIME_IN_PERIOD)),0)/
209 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,
210 DECODE(NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0),0,NULL,
211 NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) ))) curr_avg_resp_time,
212 NVL(SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAIL_RESP_TIME_IN_PERIOD)),0)/
213 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,
214 DECODE(NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0),0,NULL,
215 NVL(EMAILS_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) ))) prev_avg_resp_time,
216 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_OFFERED_IN_PERIOD)) curr_received,
217 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_OFFERED_IN_PERIOD)) prev_received,
218 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_REPLIED_IN_PERIOD)) curr_replied,
219 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_REPLIED_IN_PERIOD)) prev_replied,
220 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_AUTO_REPLIED_IN_PERIOD)) curr_auto_replied,
221 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_AUTO_REPLIED_IN_PERIOD)) prev_auto_replied,
222 NVL(SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,ONE_RSLN_IN_PERIOD)),0)/
223 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,INTERACTION_THREADS_IN_PERIOD)) curr_one_done,
224 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,ONE_RSLN_IN_PERIOD))/
225 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,INTERACTION_THREADS_IN_PERIOD)) prev_one_done,
226 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_RSL_AND_TRFD_IN_PERIOD)) curr_transferred,
227 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_RSL_AND_TRFD_IN_PERIOD)) prev_transferred,
228 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_DELETED_IN_PERIOD)) curr_deleted,
229 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_DELETED_IN_PERIOD)) prev_deleted,
230 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_AUTO_DELETED_IN_PERIOD)) curr_auto_deleted,
231 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_AUTO_DELETED_IN_PERIOD)) prev_auto_deleted,
232 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,NVL(EMAILS_REPLIED_IN_PERIOD,0) +
233 NVL(EMAILS_DELETED_IN_PERIOD,0) + NVL(EMAILS_AUTO_UPTD_SR_IN_PERIOD,0) +
234 NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_DELETED_IN_PERIOD,0) +
235 NVL(EMAILS_AUTO_RESOLVED_IN_PERIOD,0))) curr_completed,
236 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,NVL(EMAILS_REPLIED_IN_PERIOD,0) +
237 NVL(EMAILS_DELETED_IN_PERIOD,0) + NVL(EMAILS_AUTO_UPTD_SR_IN_PERIOD,0) +
238 NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0) + NVL(EMAILS_AUTO_DELETED_IN_PERIOD,0) +
239 NVL(EMAILS_AUTO_RESOLVED_IN_PERIOD,0))) prev_completed,
240 COUNT(DISTINCT(CASE WHEN calendar.report_date = &BIS_CURRENT_ASOF_DATE
241 AND fact.party_id <> -1
242 AND fact.party_id <> ' || l_dummy_cust ||
243 ' THEN fact.PARTY_ID END )) curr_customer_count,
244 COUNT(DISTINCT(CASE WHEN calendar.report_date = &BIS_PREVIOUS_ASOF_DATE
245 AND fact.party_id <> -1
246 AND fact.party_id <> ' || l_dummy_cust ||
247 ' THEN fact.PARTY_ID END )) prev_customer_count,
248 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,SR_CREATED_IN_PERIOD)) curr_sr_created,
249 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,SR_CREATED_IN_PERIOD)) prev_sr_created,
250 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,EMAILS_COMPOSED_IN_PERIOD)) curr_composed,
251 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,EMAILS_COMPOSED_IN_PERIOD)) prev_composed,
252 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,LEADS_CREATED_IN_PERIOD)) curr_leads,
253 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,LEADS_CREATED_IN_PERIOD)) prev_leads
254 FROM bix_email_details_mv fact,
255 fii_time_rpt_struct calendar
256 WHERE fact.time_id = calendar.time_id
257 AND fact.row_type = :l_row_type
258 AND fact.period_type_id = calendar.period_type_id
259 AND calendar.report_date IN (&BIS_CURRENT_ASOF_DATE,&BIS_PREVIOUS_ASOF_DATE)
260 AND bitand(calendar.record_type_id,&BIS_NESTED_PATTERN ) = calendar.record_type_id ';
261 l_sqltext := l_sqltext || l_where_clause || ' ),
262 (
263 SELECT
264 SUM(DECODE(period_start_date,:l_max_collect_date,
265 NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) curr_backlog,
266 SUM(DECODE(period_start_date,&BIS_PREVIOUS_ASOF_DATE,
267 NVL(ACCUMULATED_OPEN_EMAILS,0) + NVL(ACCUMULATED_EMAILS_IN_QUEUE,0) )) prev_backlog
268 FROM bix_email_details_mv
269 WHERE time_id IN (TO_CHAR(:l_max_collect_date,''J''),TO_CHAR(&BIS_PREVIOUS_ASOF_DATE,''J''))
270 ANd row_type = :l_row_type
271 AND period_type_id = :l_period_type_id ';
272 l_sqltext := l_sqltext || l_where_clause || ' ),
273 (
274 SELECT
275 SUM(DECODE(calendar.report_date,&BIS_CURRENT_ASOF_DATE,LOGIN_TIME))/3600 CURR_LOGIN_TIME_IN_PERIOD,
276 SUM(DECODE(calendar.report_date,&BIS_PREVIOUS_ASOF_DATE,LOGIN_TIME))/3600 PREV_LOGIN_TIME_IN_PERIOD
277 FROM bix_agent_session_f fact,
278 fii_time_rpt_struct calendar
279 WHERE fact.application_id = :l_application_id
280 AND fact.time_id = calendar.time_id
281 AND fact.period_type_id = calendar.period_type_id
282 AND calendar.report_date IN (&BIS_CURRENT_ASOF_DATE,&BIS_PREVIOUS_ASOF_DATE)
283 AND bitand(calendar.record_type_id,&BIS_NESTED_PATTERN) = calendar.record_type_id
284 ) ';
285
286
287 p_sql_text := l_sqltext;
288
289
290 l_custom_rec.attribute_name := ':l_period_type_id' ;
291 l_custom_rec.attribute_value:= l_period_type_id;
292 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
293 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.NUMERIC_BIND;
294
295 p_custom_output.Extend();
296 p_custom_output(p_custom_output.count) := l_custom_rec;
297
298 l_custom_rec.attribute_name := ':l_max_collect_date' ;
299 l_custom_rec.attribute_value:= l_max_collect_date;
300 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
301 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
302
303 p_custom_output.Extend();
304 p_custom_output(p_custom_output.count) := l_custom_rec;
305
306
307 l_custom_rec.attribute_name := ':l_application_id';
308 l_custom_rec.attribute_value:= l_application_id;
309 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
310 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.NUMERIC_BIND;
311
312 p_custom_output.EXTEND;
313 p_custom_output(p_custom_output.COUNT) := l_custom_rec;
314
315 IF ( l_account IS NOT NULL) THEN
316 l_custom_rec.attribute_name := ':l_account' ;
317 l_custom_rec.attribute_value:= l_account;
318 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
319 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
320
321 p_custom_output.Extend();
322 p_custom_output(p_custom_output.count) := l_custom_rec;
323 END IF;
324
325 IF ( l_classification IS NOT NULL) THEN
326 l_custom_rec.attribute_name := ':l_classification' ;
327 l_custom_rec.attribute_value:= l_classification;
328 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
329 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
330
331 p_custom_output.Extend();
332 p_custom_output(p_custom_output.count) := l_custom_rec;
333 END IF;
334
335 l_custom_rec.attribute_name := ':l_row_type' ;
336 l_custom_rec.attribute_value:= l_row_type;
337 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
338 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
339
340 p_custom_output.Extend();
341 p_custom_output(p_custom_output.count) := l_custom_rec;
342
343 EXCEPTION
344 WHEN OTHERS THEN
345 NULL;
346 END GET_SQL;
347 END BIX_PMV_EMC_KPI_PRTLT_PKG;