[Home] [Help]
PACKAGE BODY: APPS.BIX_DM_REAL_QUEUE_SUMMARY_PKG
Source
1 PACKAGE BODY BIX_DM_REAL_QUEUE_SUMMARY_PKG AS
2 /*$Header: bixxrqsb.pls 115.7 2003/01/09 20:19:48 achanda noship $ */
3
4
5 FUNCTION GET_CLASSIFICATION (p_classification in varchar2) return NUMBER is
6
7 v_classification_id number;
8 v_classification_count number;
9
10
11 BEGIN
12
13 select count(classification_id)
14 into v_classification_count
15 from cct_classifications
16 where classification = p_classification;
17
18 if (v_classification_count = 0) then
19 v_classification_id := -9999;
20 else
21 select classification_id into v_classification_id from cct_classifications where classification = p_classification;
22 end if;
23
24 return v_classification_id;
25
26 EXCEPTION
27 WHEN OTHERS THEN
28 return NULL;
29 END;
30 -- GET_CALLS collects calls from OLTP to the temporary
31 -- table BIX_DM_REAL_QUEUE_SUM:
32
33
34 PROCEDURE GET_CALLS(p_session_id IN NUMBER)
35 AS
36 v_calls_offered NUMBER;
37 v_calls_abandoned NUMBER;
38 v_abandon_time NUMBER;
39 v_talk_time NUMBER;
40 v_calls_answrd_within_x_time NUMBER;
41 v_queue_time_answered NUMBER;
42 v_calls_answered NUMBER;
43 v_calls_handled NUMBER;
44 v_period_start_date DATE;
45 v_period_start_time VARCHAR2(30);
46 v_period_start_date_time DATE;
47 v_server_group_id NUMBER;
48 v_classification VARCHAR2(64);
49 v_classification_id NUMBER;
50 v_default_goal NUMBER;
51 v_goal NUMBER;
52
53 l_start_date DATE;
54 l_end_date DATE;
55
56
57
58 CURSOR call_info IS
59 SELECT sum(DECODE(UPPER(ih_mitem.direction),'INBOUND',1,0)) CALLS_OFFERED,
60 sum(DECODE(UPPER(ih_mitem.direction),'INBOUND',DECODE(UPPER(ih_mitem.media_abandon_flag),'Y',1,0),0)) CALLS_ABANDONED,
61 ih_mitem.server_group_id SERVER_GROUP_ID,
62 ih_mitem.classification CLASSIFICATION,
63 TRUNC(ih_mitem.start_date_time) PERIOD_START_DATE,
64 LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00') PERIOD_START_TIME,
65 TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0') || DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI') PERIOD_START_DATE_TIME
66 FROM JTF_IH_MEDIA_ITEMS ih_mitem
67 WHERE ih_mitem.start_date_time BETWEEN l_start_date and l_end_date
68 AND
69 (
70 ih_mitem.media_item_type = 'TELE_INB' or
71 ih_mitem.media_item_type = 'TELE_DIRECT' or
72 ih_mitem.media_item_type = 'TELE_MANUAL' or
73 ih_mitem.media_item_type = 'TELE_WEB'
74 )
75 AND ih_mitem.active = 'N'
76 GROUP BY ih_mitem.server_group_id,
77 ih_mitem.classification,
78 TRUNC(ih_mitem.start_date_time),
79 LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),
80 TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0') || DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI');
81
82 CURSOR call_data1(p_server_group_id NUMBER,
83 p_classification VARCHAR2,
84 p_period_start_date DATE,
85 p_period_start_time VARCHAR2,
86 p_period_start_date_time DATE) IS
87 SELECT SUM(NVL(msegs.duration,0)) ABANDON_TIME
88 FROM jtf_ih_media_items ih_mitem,
89 JTF_IH_MEDIA_ITEM_LC_SEGS msegs,
90 JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyps
91 where ih_mitem.server_group_id = p_server_group_id
92 and ih_mitem.classification = p_classification
93 and TRUNC(ih_mitem.start_date_time) = p_period_start_date
94 and LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00') = p_period_start_time
95 and TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0') ||
96 DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI') = p_period_start_date_time
97 and ih_mitem.media_id = msegs.media_id
98 and mtyps.milcs_type_id = msegs.milcs_type_id
99 and mtyps.milcs_code = 'IN_QUEUE'
100 and ih_mitem.direction = 'INBOUND'
101 and ih_mitem.media_abandon_flag = 'Y' ;
102
103 CURSOR call_data2(p_server_group_id NUMBER,
104 p_classification VARCHAR2,
105 p_classification_id NUMBER,
106 p_period_start_date DATE,
107 p_period_start_time VARCHAR2,
108 p_period_start_date_time DATE) IS
109 SELECT count(distinct msegs.media_id) CALLS_ANSWRD_WITHIN_X_TIME
110 FROM jtf_ih_media_items ih_mitem,
111 JTF_IH_MEDIA_ITEM_LC_SEGS msegs,
112 JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyps
113 where ih_mitem.server_group_id = p_server_group_id
114 and ih_mitem.classification = p_classification
115 and TRUNC(ih_mitem.start_date_time) = p_period_start_date
116 and LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00') = p_period_start_time
117 and TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0') ||
118 DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI') = p_period_start_date_time
119 and ih_mitem.media_id = msegs.media_id
120 and mtyps.milcs_type_id = msegs.milcs_type_id
121 and mtyps.milcs_code = 'IN_QUEUE'
122 and ih_mitem.direction = 'INBOUND'
123 and msegs.duration <= v_goal
124 and (ih_mitem.media_abandon_flag = 'N' or ih_mitem.media_abandon_flag is null);
125
126 CURSOR call_data3(p_server_group_id NUMBER,
127 p_classification VARCHAR2,
128 p_period_start_date DATE,
129 p_period_start_time VARCHAR2,
130 p_period_start_date_time DATE) IS
131 SELECT SUM(NVL(msegs.duration,0)) queue_time_answered,
132 count(distinct(ih_mitem.media_id)) calls_answered
133 FROM jtf_ih_media_items ih_mitem,
134 JTF_IH_MEDIA_ITEM_LC_SEGS msegs,
135 JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyps
136 where ih_mitem.server_group_id = p_server_group_id
137 and ih_mitem.classification = p_classification
138 and ih_mitem.active = 'N'
139 and TRUNC(ih_mitem.start_date_time) = p_period_start_date
140 and LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00') = p_period_start_time
141 and TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0') ||
142 DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI') = p_period_start_date_time
143 and ih_mitem.media_id = msegs.media_id
144 and mtyps.milcs_type_id = msegs.milcs_type_id
145 and mtyps.milcs_code = 'IN_QUEUE'
146 and ih_mitem.direction = 'INBOUND'
147 and (ih_mitem.media_abandon_flag = 'N' or ih_mitem.media_abandon_flag is null);
148
149 CURSOR call_data4(p_server_group_id NUMBER,
150 p_classification VARCHAR2,
151 p_period_start_date DATE,
152 p_period_start_time VARCHAR2,
153 p_period_start_date_time DATE) IS
154 SELECT SUM(NVL(msegs.duration,0)) talk_time,
155 count(distinct(msegs.media_id)) calls_handled
156 FROM jtf_ih_media_items ih_mitem,
157 JTF_IH_MEDIA_ITEM_LC_SEGS msegs,
158 JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyps
159 where ih_mitem.server_group_id = p_server_group_id
160 and ih_mitem.classification = p_classification
161 and ih_mitem.active = 'N'
162 and TRUNC(ih_mitem.start_date_time) = p_period_start_date
163 and LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')|| DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00') = p_period_start_time
164 and TO_DATE(TO_CHAR(ih_mitem.start_date_time,'YYYY/MM/DD ')||LPAD(TO_CHAR(ih_mitem.start_date_time,'HH24:'),3,'0')
165 || DECODE(SIGN(TO_NUMBER(TO_CHAR(ih_mitem.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'YYYY/MM/DD HH24:MI') = p_period_start_date_time
166 and ih_mitem.media_id = msegs.media_id
167 and mtyps.milcs_type_id = msegs.milcs_type_id
168 and mtyps.milcs_code = 'WITH_AGENT'
169 and ih_mitem.direction = 'INBOUND';
170
171 CURSOR goal_default_c
172 IS SELECT goals.SL_SECONDS_GOAL goal from bix_dm_goals goals
173 where goals.call_type_id = -999
174 and goals.end_date_active is null;
175
176 CURSOR goal_c
177 IS SELECT goals.SL_SECONDS_GOAL goal from bix_dm_goals goals
178 where goals.call_type_id = v_classification_id
179 and goals.end_date_active is null;
180
181 BEGIN
182 l_start_date := trunc(sysdate);
183 l_end_date := sysdate;
184 delete from bix_dm_real_queue_sum
185 where session_id = p_session_id;
186
187 FOR call in call_info LOOP
188 v_calls_offered := call.calls_offered;
189 v_calls_abandoned := call.calls_abandoned;
190 v_period_start_date := call.period_start_date;
191 v_period_start_time := call.period_start_time;
192 v_period_start_date_time := call.period_start_date_time;
193 v_classification := call.classification;
194 v_server_group_id := call.server_group_id;
195 v_classification_id := GET_CLASSIFICATION(v_classification);
196 v_default_goal := 30;
197 for defaultgoal in goal_default_c
198 LOOP
199 v_default_goal := defaultgoal.goal;
200 END LOOP;
201 v_goal := v_default_goal;
202 for goalclass in goal_c
203 LOOP
204 v_goal := goalclass.goal;
205 END LOOP;
206 for calldata1 in call_data1(v_server_group_id, v_classification,
207 v_period_start_date, v_period_start_time, v_period_start_date_time)
208 LOOP
209 v_abandon_time := calldata1.abandon_time;
210 end LOOP;
211 for calldata2 in call_data2(v_server_group_id, v_classification, v_classification_id ,
212 v_period_start_date, v_period_start_time, v_period_start_date_time)
213 LOOP
214 v_calls_answrd_within_x_time := calldata2.calls_answrd_within_x_time;
215 end LOOP;
216 for calldata3 in call_data3(v_server_group_id, v_classification,
217 v_period_start_date, v_period_start_time, v_period_start_date_time)
218 LOOP
219 v_queue_time_answered := calldata3.queue_time_answered;
220 v_calls_answered := calldata3.calls_answered;
221 end LOOP;
222 for calldata4 in call_data4(v_server_group_id, v_classification,
223 v_period_start_date, v_period_start_time, v_period_start_date_time)
224 LOOP
225 v_talk_time := calldata4.talk_time;
226 v_calls_handled := calldata4.calls_handled;
227 end LOOP;
228
229 insert into BIX_DM_REAL_QUEUE_SUM
230 (
231 calls_offered,
232 calls_abandoned,
233 abandon_time,
234 talk_time,
235 calls_answrd_within_x_time,
236 queue_time_answered,
237 calls_answered,
238 calls_handled,
239 server_group_id,
240 classification,
241 classification_id,
242 period_start_date,
243 period_start_time,
244 period_start_date_time,
245 session_id
246 )
247 values
248 (
249 v_calls_offered,
250 v_calls_abandoned,
251 v_abandon_time,
252 decode(v_talk_time, NULL, 0, v_talk_time),
253 decode(v_calls_answrd_within_x_time, NULL, 0, v_calls_answrd_within_x_time),
254 v_queue_time_answered,
255 v_calls_answered,
256 v_calls_handled,
257 v_server_group_id,
258 v_classification,
259 v_classification_id,
260 v_period_start_date,
261 v_period_start_time,
262 v_period_start_date_time,
263 p_session_id
264 );
265 END LOOP;
266 COMMIT;
267 END GET_CALLS;
268 END BIX_DM_REAL_QUEUE_SUMMARY_PKG;