1 PACKAGE BODY BIX_PMV_EMC_CWT_PRTLT_PKG AS
2 /*$Header: bixecwtb.plb 120.0 2005/05/25 17:20:21 appldev noship $ */
3
4 PROCEDURE GET_SQL(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
5 p_custom_sql 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_record_type_id NUMBER;
13 l_comp_type varchar2(2000);
14 l_account varchar2(32000);
15 l_sql_errm varchar2(32000);
16 l_previous_report_start_date DATE;
17 l_current_report_start_date DATE;
18 l_previous_as_of_date DATE;
19 l_period_type_id NUMBER;
20 l_time_id_column VARCHAR2(1000);
21 l_goal NUMBER;
22 l_custom_rec BIS_QUERY_ATTRIBUTES := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
23 l_classification VARCHAR2(32000);
24 l_where_clause VARCHAR2(32000);
25 l_view_by varchar2(1000);
26 l_row_type varchar2(10) := 'AC';
27
28 BEGIN
29
30
31
32 --
33 --Initialize p_custom_output
34 --
35 p_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
36
37 bix_pmv_dbi_utl_pkg.get_emc_page_params (p_page_parameter_tbl,
38 l_as_of_date,
39 l_period_type,
40 l_record_type_id,
41 l_comp_type,
42 l_account,
43 l_classification,
44 l_view_by
45 );
46
47
48 -- If the account is not 'All'
49
50 IF l_account IS NOT NULL THEN
51 l_where_clause := 'AND email_account_id IN (:l_account) ';
52 END IF;
53
54
55 IF l_classification IS NOT NULL THEN
56 l_where_clause := l_where_clause || ' AND email_classification_id IN (:l_classification) ';
57 END IF;
58
59
60
61 IF (FND_PROFILE.DEFINED('BIX_EMAIL_GOAL')) THEN
62 begin
63 l_goal := TO_NUMBER(FND_PROFILE.VALUE('BIX_EMAIL_GOAL'));
64 exception
65 when others then
66 l_goal:=0;
67 end;
68 ELSE
69 l_goal := 0;
70 END IF;
71
72
73
74
75
76 IF ( l_comp_type = 'YEARLY' AND l_period_type = 'FII_TIME_ENT_YEAR' )
77 THEN
78 --This is for year over year comparison and period type is year. We need to get the prior year's values
79 --for display.
80 l_sqltext
81 :='
82 /*Outermost query does the calculations of service level goal and constrains
83 display between current report start date and current year only
84 */
85 select name VIEWBY,
86 ROUND((nvl(sum(CURR_ERT),0)/DECODE(SUM(CURR_REPLD),0,NULL,SUM(CURR_REPLD)))/3600,1) BIX_EMC_CRTIME,
87 ROUND((nvl(sum(PREV_ERT),0)/DECODE(SUM(PREV_REPLD),0,NULL,SUM(PREV_REPLD)))/3600,1) BIX_EMC_PRCRTIME,
88 ' || l_goal ||' BIX_EMC_GOAL
89 from
90 (
91 /* Outer most iview .Uses lag to select prior values for the corresponding year*/
92 select cal.name,cal.start_date,
93 SUM(
94 CASE when (cal.start_date between &BIS_CURRENT_REPORT_START_DATE and &BIS_CURRENT_ASOF_DATE
95 and cal.report_date = least(cal.end_date,&BIS_CURRENT_ASOF_DATE))
96 then
97 EMAIL_RESP_TIME_IN_PERIOD
98 else
99 null
100 end
101 ) CURR_ERT
102 ,lag(
103 SUM(
104 CASE WHEN (cal.start_date between &BIS_PREVIOUS_REPORT_START_DATE and &BIS_PREVIOUS_ASOF_DATE
105 and cal.report_date = least(cal.end_date,&BIS_PREVIOUS_ASOF_DATE ))
106 then
107 EMAIL_RESP_TIME_IN_PERIOD
108 else
109 null
110 end
111 )
112 ) over (order by cal.start_date) PREV_ERT
113 ,
114 SUM(
115 CASE when (cal.start_date between &BIS_CURRENT_REPORT_START_DATE and &BIS_CURRENT_ASOF_DATE
116 and cal.report_date = least(cal.end_date,&BIS_CURRENT_ASOF_DATE))
117 then
118 NVL(EMAILS_REPLIED_IN_PERIOD,0)+NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0)
119 else
120 null
121 end
122 ) CURR_REPLD
123 ,
124 lag(
125 SUM (
126 CASE WHEN (cal.start_date between &BIS_PREVIOUS_REPORT_START_DATE and &BIS_PREVIOUS_ASOF_DATE
127 and cal.report_date = least(cal.end_date,&BIS_PREVIOUS_ASOF_DATE ))
128 then
129 NVL(EMAILS_REPLIED_IN_PERIOD,0)+NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0)
130 else
131 null
132 end
133 )
134 ) over (order by cal.start_date) PREV_REPLD
135 from
136 (
137 /* Selects measures for all years in time range from previous report start date to current as of date*/
138 select fii604.name,fii604.start_date,fii604.end_date,cal.report_Date,cal.period_type_id,cal.time_id
139 from fii_time_ent_year fii604, fii_time_rpt_struct cal
140 where
141 fii604.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE AND &BIS_CURRENT_ASOF_DATE
142 and cal.report_date between fii604.start_date and fii604.end_date
143 and cal.report_date in (least(fii604.end_date, &BIS_CURRENT_ASOF_DATE) , &BIS_PREVIOUS_ASOF_DATE)
144 AND bitAND(cal.record_type_id,&BIS_NESTED_PATTERN ) = cal.record_type_id
145 order by fii604.sequence
146 )cal,(
147 select period_type_id,time_id,
148 EMAIL_RESP_TIME_IN_PERIOD,
149 EMAILS_REPLIED_IN_PERIOD,
150 EMAILS_AUTO_REPLIED_IN_PERIOD
151 from bix_Email_Details_mv
152 where row_type=:l_row_type '|| l_where_clause || '
153 )mv
154 where mv.period_type_id(+)=cal.period_type_id
155 and mv.time_id(+)=cal.time_id
156 group by cal.name,cal.start_date
157 ) recset /*End of outermost view */
158 WHERE recset.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE AND &BIS_CURRENT_ASOF_DATE
159 group by name';
160
161
162
163 ELSIF ( l_comp_type = 'YEARLY' AND l_period_type <> 'FII_TIME_ENT_YEAR' )
164 THEN
165 --
166 --If it enters here it means the comparison is for Week, Month or Quarter
167 --and it is a Year over Year comparison.
168 --
169 l_sqltext := '
170 SELECT fii2.name VIEWBY,
171 ROUND((nvl(sum(CURR_ERT),0)/DECODE(SUM(CURR_REPLD),0,NULL,SUM(CURR_REPLD)))/3600,1) BIX_EMC_CRTIME,
172 ROUND((nvl(sum(PREV_ERT),0)/DECODE(SUM(PREV_REPLD),0,NULL,SUM(PREV_REPLD)))/3600,1) BIX_EMC_PRCRTIME,
173 ' || l_goal ||' BIX_EMC_GOAL
174 FROM
175 ( SELECT fiitb.sequence SEQUENCE,
176 SUM( CASE when
177 (
178 fiitb.start_date between &BIS_CURRENT_REPORT_START_DATE
179 and &BIS_CURRENT_ASOF_DATE
180 and cal.report_date = least(fiitb.end_date,&BIS_CURRENT_ASOF_DATE)
181 )
182 then
183 EMAIL_RESP_TIME_IN_PERIOD
184 else
185 NULL
186 end
187 ) CURR_ERT,
188 SUM( CASE when
189 (
190 fiitb.start_date between &BIS_CURRENT_REPORT_START_DATE
191 and &BIS_CURRENT_ASOF_DATE
192 and cal.report_date = least(fiitb.end_date,&BIS_CURRENT_ASOF_DATE)
193 )
194 then
195 NVL(EMAILS_REPLIED_IN_PERIOD,0)+NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0)
196 else
197 NULL
198 end
199 ) CURR_REPLD,
200 SUM( CASE when
201 (
202 fiitb.start_date between &BIS_PREVIOUS_REPORT_START_DATE
203 and &BIS_PREVIOUS_ASOF_DATE
204 and cal.report_date = least(fiitb.end_date,&BIS_PREVIOUS_ASOF_DATE)
205 )
206 then
207 EMAIL_RESP_TIME_IN_PERIOD
208 else
209 NULL
210 end
211 ) PREV_ERT,
212 SUM( CASE when
213 (
214 fiitb.start_date between &BIS_PREVIOUS_REPORT_START_DATE
215 and &BIS_PREVIOUS_ASOF_DATE
216 and cal.report_date = least(fiitb.end_date,&BIS_PREVIOUS_ASOF_DATE)
217 )
218 then
219 NVL(EMAILS_REPLIED_IN_PERIOD,0)+NVL(EMAILS_AUTO_REPLIED_IN_PERIOD,0)
220 else
221 NULL
222 end
223 ) PREV_REPLD
224 FROM '||l_period_type||' fiitb,
225 bix_email_details_mv eml,
226 fii_time_rpt_struct cal
227 WHERE eml.time_id = cal.time_id
228 ANd eml.row_type = :l_row_type
229 AND bitand(cal.record_type_id,&BIS_NESTED_PATTERN)=cal.record_type_id
230 AND fiitb.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE AND
231 &BIS_CURRENT_ASOF_DATE
232 AND cal.report_date = (CASE WHEN(
233 fiitb.start_date between
234 &BIS_PREVIOUS_REPORT_START_DATE and
235 &BIS_PREVIOUS_ASOF_DATE
236 )
237 THEN
238 least(fiitb.end_date, &BIS_PREVIOUS_ASOF_DATE)
239 ELSE
240 least(fiitb.end_date, &BIS_CURRENT_ASOF_DATE)
241 END
242 )
243 AND cal.period_type_id = eml.period_type_id ';
244 l_sqltext := l_sqltext || l_where_clause || ' GROUP BY fiitb.sequence
245 ) summ, '
246 ||l_period_type||' fii2
247 WHERE fii2.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
248 AND &BIS_CURRENT_ASOF_DATE
249 AND fii2.sequence = summ.sequence (+)
250 GROUP BY fii2.name, fii2.start_date, summ.sequence
251 ORDER BY fii2.start_date ';
252
253 ELSE
254 --
255 --If it reaches here it means it is either a Sequential comparison for
256 --week, month or quarter OR it is a YEAR period type. For YEAR period type
257 --it does not matter whether it is a Y/Y comparison or a Sequential comparison
258 --as both will be treated the same.
259 --
260 l_sqltext := '
261 SELECT fii2.name VIEWBY,
262 ROUND((nvl(sum(CURR_ERT),0)/DECODE(SUM(CURR_REPLD),0,NULL,SUM(CURR_REPLD)))/3600,1) BIX_EMC_CRTIME,
263 NULL BIX_EMC_PRCRTIME,
264 ' || l_goal ||' BIX_EMC_GOAL
265 FROM
266 ( SELECT fiitb.name NAME,
267 sum(EMAIL_RESP_TIME_IN_PERIOD) CURR_ERT,
268 NVL(sum(EMAILS_REPLIED_IN_PERIOD),0) + NVL(SUM(EMAILS_AUTO_REPLIED_IN_PERIOD),0) CURR_REPLD
269 FROM '||l_period_type||' fiitb,
270 bix_email_details_mv eml,
271 fii_time_rpt_struct cal
272 WHERE eml.time_id = cal.time_id
273 AND eml.row_type = :l_row_type
274 AND bitand(cal.record_type_id,&BIS_NESTED_PATTERN)=cal.record_type_id
275 AND fiitb.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE AND
276 &BIS_CURRENT_ASOF_DATE
277 AND cal.report_date = least(&BIS_CURRENT_ASOF_DATE,fiitb.end_date)
278 AND cal.period_type_id = eml.period_type_id ';
279 l_sqltext := l_sqltext || l_where_clause || ' GROUP BY fiitb.name
280 ) curr, ' ||
281 l_period_type || ' fii2
282 WHERE fii2.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
283 AND &BIS_CURRENT_ASOF_DATE
284 AND fii2.name = curr.name (+)
285 GROUP BY fii2.name,fii2.start_date
286 ORDER BY fii2.start_date
287 ';
288
289 END IF;
290
291 p_custom_sql := l_sqltext;
292
293 l_custom_rec.attribute_name := BIS_PMV_PARAMETERS_PUB.VIEW_BY_VALUE;
294 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.View_By_Type;
295 l_custom_rec.attribute_value := 'TIME+'||l_period_type;
296
297 p_custom_output.EXTEND();
298 p_custom_output(p_custom_output.COUNT) := l_custom_rec;
299
300 IF ( l_account IS NOT NULL) THEN
301 l_custom_rec.attribute_name := ':l_account' ;
302 l_custom_rec.attribute_value:= l_account;
303 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
304 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
305
306 p_custom_output.Extend();
307 p_custom_output(p_custom_output.count) := l_custom_rec;
308 END IF;
309
310 IF ( l_classification IS NOT NULL) THEN
311 l_custom_rec.attribute_name := ':l_classification' ;
312 l_custom_rec.attribute_value:= l_classification;
313 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
314 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
315
316 p_custom_output.Extend();
317 p_custom_output(p_custom_output.count) := l_custom_rec;
318 END IF;
319
320 l_custom_rec.attribute_name := ':l_row_type' ;
321 l_custom_rec.attribute_value:= l_row_type;
322 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
323 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
324
325 p_custom_output.Extend();
326 p_custom_output(p_custom_output.count) := l_custom_rec;
327
328 EXCEPTION
329 WHEN OTHERS THEN
330 NULL;
331 END GET_SQL;
332 END BIX_PMV_EMC_CWT_PRTLT_PKG;