DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIX_EMAILS_SUMMARY_PKG

Source


1 PACKAGE BODY BIX_EMAILS_SUMMARY_PKG AS
2 /*$Header: bixemlsb.plb 120.6 2006/08/17 08:50:08 pubalasu noship $ */
3 
4   g_request_id                  NUMBER;
5   g_program_appl_id             NUMBER;
6   g_program_id                  NUMBER;
7   g_user_id                     NUMBER;
8   g_collect_start_date          DATE;
9   g_collect_end_date            DATE;
10   g_no_of_jobs                  NUMBER := 0;
11   g_commit_chunk_size           NUMBER;
12   g_rows_ins_upd                NUMBER;
13   g_sysdate                     DATE;
14   g_bix_schema                  VARCHAR2(30) := 'BIX';
15   g_debug_flag                  VARCHAR2(1)  := 'N';
16 
17   MAX_LOOP CONSTANT             NUMBER := 180;
18 
19   G_PARAM_MISMATCH              EXCEPTION;
20   G_TIME_DIM_MISSING            EXCEPTION;
21   G_CHILD_PROCESS_ISSUE         EXCEPTION;
22 
23   TYPE WorkerList is table of NUMBER index by binary_integer;
24   g_worker WorkerList;
25 
26   TYPE g_media_id_tab IS TABLE OF jtf_ih_media_items.media_id%TYPE;
27   TYPE g_email_account_id_tab IS TABLE OF jtf_ih_media_items.source_id%TYPE;
28   TYPE g_email_classification_id_tab IS TABLE OF iem_route_classifications.route_classification_id%TYPE;
29   TYPE g_resource_id_tab IS TABLE OF bix_email_details_f.agent_id%TYPE;
30   TYPE g_start_date_time_tab IS TABLE OF jtf_ih_media_item_lc_segs.start_date_time%TYPE;
31   TYPE g_end_date_time_tab IS TABLE OF jtf_ih_media_item_lc_segs.end_date_time%TYPE;
32   TYPE g_media_start_date_time_tab IS TABLE OF jtf_ih_media_items.start_date_time%TYPE;
33 
34 G_PROCESSING NUMBER;
35 G_REPLY NUMBER;
36 G_A_REPLY NUMBER;
37 G_FETCH NUMBER;
38 G_OPEN NUMBER;
39 G_TRANSFER NUMBER;
40 G_TRANSFERRED NUMBER;
41 G_ASSIGN_OPEN NUMBER;
42 G_ASSIGNED NUMBER;
43 G_A_ROUTED NUMBER;
44 G_A_UPDATED_SR NUMBER;
45 G_ESCALATED NUMBER;
46 G_DELETED NUMBER;
47 G_A_DELETED NUMBER;
48 G_A_REDIRECTED NUMBER;
49 G_RESOLVED NUMBER;
50 G_REROUTED_CLASS NUMBER;
51 G_REROUTED_ACCT NUMBER;
52 G_REQUEUED NUMBER;
53 G_COMPOSE NUMBER;
54 
55 
56 
57 
58 PROCEDURE Write_Log (p_msg IN VARCHAR2) IS
59 BEGIN
60 
61 
62   IF (g_debug_flag = 'Y') THEN
63    BIS_COLLECTION_UTILITIES.log(p_msg);
64   END IF;
65 EXCEPTION
66   WHEN OTHERS THEN
67     RAISE;
68 END Write_Log;
69 
70 PROCEDURE truncate_table (p_table_name in varchar2) is
71 
72   l_stmt varchar2(400);
73 BEGIN
74 
75   write_log('Start of the procedure truncate_table at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
76 
77   l_stmt:='truncate table '||g_bix_schema||'.'|| p_table_name;
78   execute immediate l_stmt;
79 
80   write_log('Table ' || p_table_name || ' has been truncated');
81 
82   write_log('Finished procedure truncate_table at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
83 EXCEPTION
84   WHEN OTHERS THEN
85     write_log('Error in truncate_table : Error : ' || sqlerrm);
86     RAISE;
87 END truncate_table;
88 
89 PROCEDURE init IS
90 
91   l_status   VARCHAR2(30);
92   l_industry VARCHAR2(30);
93 BEGIN
94 
95   IF (BIS_COLLECTION_UTILITIES.SETUP('BIX_EMAIL_DETAILS_F') = FALSE) THEN
96     RAISE_APPLICATION_ERROR(-20000, 'BIS_COLLECTION_UTILITIES.setup has failed');
97   END IF;
98 
99   write_log('Start of the procedure init at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
100 
101   write_log('Initializing global variables');
102 
103   g_request_id         := FND_GLOBAL.CONC_REQUEST_ID();
104   g_program_appl_id    := FND_GLOBAL.PROG_APPL_ID();
105   g_program_id         := FND_GLOBAL.CONC_PROGRAM_ID();
106   g_user_id            := FND_GLOBAL.USER_ID();
107   g_sysdate            := SYSDATE;
108   g_commit_chunk_size  := 10000;
109   g_rows_ins_upd       := 0;
110 
111   write_log('Getting Commit Size');
112 
113   IF (FND_PROFILE.DEFINED('BIX_DM_DELETE_SIZE')) THEN
114     g_commit_chunk_size := TO_NUMBER(FND_PROFILE.VALUE('BIX_DM_DELETE_SIZE'));
115   END IF;
116 
117   write_log('Commit SIZE : ' || g_commit_chunk_size);
118 
119   write_log('Getting Debug Information');
120 
121   IF (FND_PROFILE.DEFINED('BIX_DBI_DEBUG')) THEN
122     g_debug_flag := nvl(FND_PROFILE.VALUE('BIX_DBI_DEBUG'), 'N');
123   END IF;
124 
125   write_log('Debug Flag : ' || g_debug_flag);
126 
127   write_log('Getting schema information');
128 
129   IF(FND_INSTALLATION.GET_APP_INFO('BIX', l_status, l_industry, g_bix_schema)) THEN
130      NULL;
131   END IF;
132 
133   write_log('BIX Schema : ' || g_bix_schema);
134   write_log('Finished procedure init at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
135 
136  /* Truncate_Table('BIX_EMAIL_DETAILS_STG'); */
137 
138 EXCEPTION
139   WHEN OTHERS THEN
140     write_log('Error in init : Error : ' || sqlerrm);
141     RAISE;
142 END init;
143 
144 
145 /*
146 
147 This procedure inserts  rows into BIX_WORKER_JOBS  depening on no of workers and number of days the program need
148 to collect data.
149 
150 */
151 
152 PROCEDURE register_jobs IS
153 
154   l_start_date_range DATE;
155   l_end_date_range   DATE;
156   l_count            NUMBER := 0;
157 
158 BEGIN
159   write_log('Start of the procedure register_jobs at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
160 
161   /* No of jobs to be submitted = Number of 4 hours buckets for which we need to collect data */
162   SELECT ceil(g_collect_end_date - g_collect_start_date)
163   INTO   l_count
164   FROM   dual;
165 
166   g_no_of_jobs := l_count;
167 
168   write_log('Number of workers that need to be instantiated : ' || to_char(l_count));
169 
170   Delete BIX_WORKER_JOBS WHERE OBJECT_NAME = 'BIX_EMAIL_DETAILS_F';
171 
172   IF (l_count > 0) THEN
173     l_start_date_range := g_collect_start_date;
174 
175     /* Register a job for each day of the collection date range */
176     FOR i IN 1..l_count
177     LOOP
178       IF (l_start_date_range > g_collect_end_date) THEN
179         EXIT;
180       END IF;
181 
182       /* End date range is l_start_date_range + (4 hours - 1sec) */
183       l_end_date_range := trunc(l_start_date_range) + 86399/86400;
184 
185       IF (l_end_date_range > g_collect_end_date) THEN
186         l_end_date_range := g_collect_end_date;
187       END IF;
188 
189       INSERT INTO BIX_WORKER_JOBS(OBJECT_NAME
190                                 , START_DATE_RANGE
191                                 , END_DATE_RANGE
192                                 , WORKER_NUMBER
193                                 , STATUS)
194                             VALUES (
195                                  'BIX_EMAIL_DETAILS_F'
196                                 , l_start_date_range
197                                 , l_end_date_range
198                                 , l_count
199                                 , 'UNASSIGNED');
200 
201       l_start_date_range := l_end_date_range + 1/86400;
202     END LOOP;
203   END IF;
204 
205   COMMIT;
206 
207   write_log('Finished procedure register_jobs at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
208 EXCEPTION
209   WHEN OTHERS THEN
210     write_log('Error in register_jobs : Error : ' || sqlerrm);
211     RAISE;
212 END REGISTER_JOBS;
213 
214 /*
215 
216 This function launches  concurrent request which is child job  collects data for one day.
217 */
218 
219 FUNCTION launch_worker(p_worker_no in NUMBER) RETURN NUMBER IS
220 
221   l_request_id NUMBER;
222 
223 BEGIN
224 
225   write_log('Start of the procedure launch_worker at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
226 
227   /* Submit the parallel concurrent request */
228   l_request_id := FND_REQUEST.SUBMIT_REQUEST('BIX',
229                                              'BIX_EMAIL_SUMMARY_SUBWORKER',
230                                              NULL,
231                                              NULL,
232                                              FALSE,
233                                              p_worker_no);
234 
235   write_log('Request ID of the concurrent request launched : ' || to_char(l_request_id));
236 
237   /* if the submission of the request fails , abort the program */
238   IF (l_request_id = 0) THEN
239      rollback;
240      write_log('Error in launching child workers');
241      RAISE G_CHILD_PROCESS_ISSUE;
242   END IF;
243 
244   write_log('Finished procedure launch_worker at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
245   RETURN l_request_id;
246 
247 EXCEPTION
248   WHEN OTHERS THEN
249     write_log('Error in launch_worker : Error : ' || sqlerrm);
250     RAISE;
251 END LAUNCH_WORKER;
252 
253 PROCEDURE get_curr_prev_depth(p_interaction_id IN NUMBER,
254                               p_curr_depth OUT NOCOPY NUMBER,
255                               p_prev_depth OUT NOCOPY NUMBER,
256                               p_intr_thread OUT NOCOPY NUMBER)
257 IS
258 p_parent_depth integer;
259 BEGIN
260 
261   write_log('Start of the procedure get_curr_prev_depth at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
262 
263   /* Get the depth of the interaction that is present in ICI summary table */
264   BEGIN
265 
266     --
267     --If an entry is not there in this table then it means
268     --the interaction has not been collected yet - hence, the number
269     --of interaction thread can be hardcode to 1 since the query is based on
270     --the root interaction_id.
271     --If an entry is found in this table then the number of interaction threads
272     --is set to zero - because it means the data was already collected and
273     --the root interaction count for this root interaction has already been accounted for.
274     --
275     SELECT depth
276     INTO   p_prev_depth
277     FROM   bix_interactions_temp
278     WHERE  interaction_id = p_interaction_id
279     FOR UPDATE OF depth;
280 
281    p_intr_thread := 0;
282   EXCEPTION
283     WHEN NO_DATA_FOUND THEN
284 
285       write_log('No Data found. Defaulting prev and curr depth');
286 	 p_prev_depth := 0;
287       p_intr_thread := 1;
288     WHEN OTHERS THEN
289       RAISE;
290   END;
291 
292   write_log('The previous depth of the interaction : ' || to_char(p_interaction_id) || ' is ' || to_char(p_prev_depth));
293 
294   BEGIN
295     /* Get the current depth of the interaction                            */
296     /* if the interaction is a new one with no child , then the depth is 1 */
297     SELECT /*+ ordered */
298       1
299     INTO   p_curr_depth
300     FROM jtf_ih_activities actv,
301          jtf_ih_media_items imtm,
302          jtf_ih_media_item_lc_segs mseg,
303          jtf_ih_media_itm_lc_seg_tys mtys
304     WHERE actv.interaction_id = p_interaction_id
305     AND   imtm.media_id = actv.media_id
306     AND   mseg.media_id = imtm.media_id
307     AND   mtys.milcs_type_id = mseg.milcs_type_id
308     AND   mtys.milcs_code IN ('EMAIL_REPLY','EMAIL_AUTO_REPLY')
309     AND   NOT EXISTS (
310             SELECT 1
311             FROM   jtf_ih_interaction_inters inter
312             WHERE  inter.interact_interaction_idrelates = actv.interaction_id )
313     AND   rownum <= 1;
314   EXCEPTION
315     WHEN NO_DATA_FOUND THEN
316       BEGIN
317         /* Else get the depth from the table where the thread is maintained */
318 
319 		 SELECT
320 		 --nvl(max(decode(milcs_code,'EMAIL_REPLY',depth,'EMAIL_AUTO_REPLY',depth,0)),0) depth
321 		 count(distinct media_id) depth
322 		 into p_curr_depth
323 		 FROM
324 		 (
325 		  SELECT inv2.interaction_id,
326           mseg.media_id media_id,
327 		  --first_Value(milcs_code) over (partition by mseg.media_id order by mseg.start_Date_time desc) milcs_code,
328            depth
329            FROM
330            (SELECT
331                 interact_interaction_id interaction_id /* Child interaction*/,
332                 level depth
333               FROM
334                 jtf_ih_interaction_inters
335               START WITH interact_interaction_idrelates = p_interaction_id
336               CONNECT BY interact_interaction_idrelates = PRIOR interact_interaction_id
337               ORDER BY creation_date DESC) inv2,      jtf_ih_activities actv,
338              jtf_ih_media_items mitm,
339              jtf_ih_media_item_lc_segs mseg,
340              jtf_ih_media_itm_lc_seg_tys mtys
341            WHERE actv.interaction_id = inv2.interaction_id
342            AND   mitm.media_id = actv.media_id
343            AND   mitm.media_id = mseg.media_id
344            AND   mseg.milcs_type_id = mtys.milcs_type_id
345            AND 	 mitm.direction='INBOUND' and mitm.media_item_type='EMAIL'
346 		   AND   milcs_code in ('EMAIL_REPLY','EMAIL_AUTO_REPLY')
347 		);
348 		/* Check the parent..if it has reply/auto reply , increment the current depth by 1 */
349          p_parent_depth:=0;
350 			 BEGIN
351 				  SELECT /*+ ordered */
352 					  1
353 					INTO   p_parent_depth
354 					FROM jtf_ih_activities actv,
355 						 jtf_ih_media_items imtm,
356 						 jtf_ih_media_item_lc_segs mseg,
357 						 jtf_ih_media_itm_lc_seg_tys mtys
358 					WHERE actv.interaction_id = p_interaction_id
359 					AND   imtm.media_id = actv.media_id
360 					AND   mseg.media_id = imtm.media_id
361 					AND   mtys.milcs_type_id = mseg.milcs_type_id
362 					AND   mtys.milcs_code IN ('EMAIL_REPLY','EMAIL_AUTO_REPLY')
363 					AND   rownum <= 1;
364 			  EXCEPTION
365 			  WHEN NO_DATA_FOUND THEN
366 			  /* parent interaction does not have reply or auto reply and  so...make parent depth as 0 */
367 			   p_parent_depth:=0;
368 			  END;
369          p_curr_depth:=p_curr_depth+p_parent_depth;
370 
371 
372       EXCEPTION
373         WHEN NO_DATA_FOUND THEN
374           p_curr_depth := 0;
375 		WHEN OTHERS THEN
376           RAISE;
377       END;
378     WHEN OTHERS THEN
379       RAISE;
380   END;
381 
385 EXCEPTION
382   write_log('The current depth of the interaction : ' || to_char(p_interaction_id) || ' is ' || to_char(p_curr_depth));
383   write_log('Finished procedure get_curr_prev_depth at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
384 
386   WHEN OTHERS THEN
387     write_log('Error in procedure get_curr_prev_depth : Error : ' || sqlerrm);
388     RAISE;
389 END get_curr_prev_depth;
390 
391 
392 /* This procedure collects One, two , three and Four done resolutiions.  Email center keeps the threads of email
393 interactions in jtf_ih_interaction_inters table. If the customer reply back to the agent response then the entry will
394 be created in the above table with old and new interaction.   This table stores both parent and child interaction id.
395 
396 We can find the depth of thread from this table.  If the table does not have entry in this
397 table for replied email, then the email interaction is one and done ,
398 if the depth is 1 then it is two and done and so on.
399 
400 First the root interaction_id values and the depths are stored.
401 Using these, the corresponding dimensions are figured out. For these dimensions,
402 the time_ids are found out and updated using a sinle MERGE. We do not use a ROLLUP here.
403 
404 */
405 
406 PROCEDURE collect_resolutions IS
407 
408   CURSOR all_root_interactions IS
409   SELECT DISTINCT interaction_id from
410   (
411   SELECT
412     incr.interaction_id
413   FROM    jtf_ih_interactions incr,
414           jtf_ih_activities   actv,
415           jtf_ih_media_items  imtm
416   WHERE incr.start_date_time between g_collect_start_date and g_collect_end_date
417   AND   actv.interaction_id = incr.interaction_id
418   AND   imtm.media_id = actv.media_id
419   AND   imtm.media_item_type = 'EMAIL'
420   AND   imtm.direction = 'INBOUND'
421   AND   NOT EXISTS (
422     SELECT 1
423     FROM   jtf_ih_interaction_inters inter
424     WHERE
425            --?????? comment out???
426            inter.INTERACT_INTERACTION_IDRELATES = incr.interaction_id
427            OR
428             inter.interact_interaction_id = incr.interaction_id
429                     )
430   AND NOT EXISTS (
431     SELECT 1
432     FROM   jtf_ih_media_item_lc_segs mseg1,
433            jtf_ih_media_itm_lc_seg_tys mtys1
434     WHERE mseg1.media_id = imtm.media_id
435     AND   mseg1.milcs_type_id = mtys1.milcs_type_id
436     AND   mtys1.milcs_code IN ( 'EMAIL_REPLY','EMAIL_AUTO_REPLY') )
437   UNION ALL
438   SELECT
439     incr.interaction_id
440   FROM   jtf_ih_interactions          incr,
441          jtf_ih_activities            actv,
442          jtf_ih_media_items           imtm,
443          jtf_ih_media_item_lc_segs    mseg,
444          jtf_ih_media_itm_lc_seg_tys  mtys
445   WHERE actv.interaction_id = incr.interaction_id
446   AND   imtm.media_id = actv.media_id
447   AND   imtm.media_item_type = 'EMAIL'
448   AND   imtm.direction = 'INBOUND'
449   AND   mseg.media_id = imtm.media_id
450   AND   mtys.milcs_type_id = mseg.milcs_type_id
451   AND   mtys.milcs_code IN ( 'EMAIL_REPLY','EMAIL_AUTO_REPLY')
452   AND   mseg.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
453   AND   NOT EXISTS (
454     SELECT 1
455     FROM   jtf_ih_interaction_inters inter
456     WHERE  inter.INTERACT_INTERACTION_IDRELATES = incr.interaction_id
457     OR     inter.interact_interaction_id = incr.interaction_id)
458   UNION ALL
459   SELECT interact_interaction_idrelates
460   FROM (
461     SELECT interact_interaction_idrelates
462     FROM   jtf_ih_interaction_inters
463     START WITH interact_interaction_id IN
464                         (SELECT
465                            intr.interact_interaction_id
466                          FROM    jtf_ih_interaction_inters intr,
467                                  jtf_ih_activities actv,
468                                  jtf_ih_media_items imtm
469                          WHERE intr.creation_date between g_collect_start_date and g_collect_end_date
470                          AND   actv.interaction_id = intr.interact_interaction_id
471                          AND   imtm.media_id = actv.media_id
472                          AND   imtm.media_item_type = 'EMAIL'
473                          AND   imtm.direction = 'INBOUND'
474                          AND   NOT EXISTS (
475                            SELECT 1
476                            FROM   jtf_ih_interaction_inters inter
477                            WHERE  inter.INTERACT_INTERACTION_IDRELATES = intr.interact_interaction_id)
478                          UNION
479                          SELECT
480                            intr.interact_interaction_id
481                          FROM   jtf_ih_interaction_inters    intr,
482                                 jtf_ih_activities            actv,
483                                 jtf_ih_media_items           imtm,
484                                 jtf_ih_media_item_lc_segs    mseg,
485                                 jtf_ih_media_itm_lc_seg_tys  mtys
486                          WHERE actv.interaction_id = intr.interact_interaction_id
487                          AND   imtm.media_id = actv.media_id
488                          AND   mseg.media_id = imtm.media_id
489                          AND   mtys.milcs_type_id = mseg.milcs_type_id
490                          AND   mtys.milcs_code IN ( 'EMAIL_REPLY','EMAIL_AUTO_REPLY')
491                          AND   mseg.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
492                          AND   NOT EXISTS (
493                            SELECT 1
497   WHERE NOT EXISTS (
494                            FROM   jtf_ih_interaction_inters inter
495                            WHERE  inter.INTERACT_INTERACTION_IDRELATES = intr.interact_interaction_id))
496     CONNECT BY PRIOR interact_interaction_idrelates = interact_interaction_id ) inv2
498     SELECT 1 FROM jtf_ih_interaction_inters intr
499     WHERE intr.interact_interaction_id = inv2.interact_interaction_idrelates)
500   AND EXISTS (
501     SELECT 1
502     FROM   jtf_ih_activities actv,
503            jtf_ih_media_items imtm
504     WHERE  actv.interaction_id = inv2.interact_interaction_idrelates
505     AND    actv.media_id = imtm.media_id
506     AND   imtm.media_item_type = 'EMAIL'
507     AND   imtm.direction = 'INBOUND')
508     )
509     ;
510 
511   TYPE root_interaction_id_tab IS TABLE OF jtf_ih_interactions.interaction_id%TYPE;
512   TYPE agent_id_tab IS TABLE OF jtf_ih_interactions.resource_id%TYPE;
513   TYPE party_id_tab IS TABLE OF jtf_ih_interactions.party_id%TYPE;
514   TYPE start_date_time_tab IS TABLE OF jtf_ih_interactions.start_date_time%TYPE;
515   TYPE source_id_tab IS TABLE OF jtf_ih_media_items.source_id%TYPE;
516   TYPE route_classification_id_tab IS TABLE OF iem_route_classifications.route_classification_id%TYPE;
517   TYPE one_done_rsln_tab IS TABLE OF bix_email_details_f.one_rsln_in_period%TYPE;
518   TYPE two_done_rsln_tab IS TABLE OF bix_email_details_f.two_rsln_in_period%TYPE;
519   TYPE three_done_rsln_tab IS TABLE OF bix_email_details_f.three_rsln_in_period%TYPE;
520   TYPE four_done_rsln_tab IS TABLE OF bix_email_details_f.four_rsln_in_period%TYPE;
521   TYPE intr_thread_tab IS TABLE OF bix_email_details_f.interaction_threads_in_period%TYPE;
522   TYPE week_id_tab IS TABLE OF fii_time_day.week_id%TYPE;
523   TYPE ent_period_id_tab IS TABLE OF fii_time_day.ent_period_id%TYPE;
524   TYPE ent_qtr_id_tab IS TABLE OF fii_time_day.ent_qtr_id%TYPE;
525   TYPE ent_year_id_tab IS TABLE OF fii_time_day.ent_year_id%TYPE;
526   TYPE week_start_date_tab IS TABLE OF fii_time_day.week_start_date%TYPE;
527   TYPE ent_period_start_date_tab IS TABLE OF fii_time_day.ent_period_start_date%TYPE;
528   TYPE ent_qtr_start_date_tab IS TABLE OF fii_time_day.ent_qtr_start_date%TYPE;
529   TYPE ent_year_start_date_tab IS TABLE OF fii_time_day.ent_year_start_date%TYPE;
530   TYPE curr_depth_tab IS TABLE OF bix_email_details_f.one_rsln_in_period%TYPE;
531 
532   l_root_interaction_id root_interaction_id_tab;
533   l_agent_id agent_id_tab;
534   l_party_id party_id_tab;
535   l_start_date_time start_date_time_tab;
536   l_email_account_id source_id_tab;
537   l_classification_id route_classification_id_tab;
538   l_one_done_rsln one_done_rsln_tab;
539   l_two_done_rsln two_done_rsln_tab;
540   l_three_done_rsln three_done_rsln_tab;
541   l_four_done_rsln four_done_rsln_tab;
542   l_intr_thread intr_thread_tab;
543   l_week_id week_id_tab;
544   l_ent_period_id ent_period_id_tab;
545   l_ent_qtr_id ent_qtr_id_tab;
546   l_ent_year_id ent_year_id_tab;
547   l_week_start_date week_start_date_tab;
548   l_ent_period_start_date ent_period_start_date_tab;
549   l_ent_qtr_start_date ent_qtr_start_date_tab;
550   l_ent_year_start_date ent_year_start_date_tab;
551   l_curr_depth curr_depth_tab;
552 
553   l_prev_depth NUMBER;
554   l_no_of_records NUMBER;
555   l_ond_day NUMBER;
556 BEGIN
557 
558   write_log('Start of the procedure collect_resolutions at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
559 
560   /* Initialize the variables */
561   l_agent_id := agent_id_tab();
562   l_party_id := party_id_tab();
563   l_start_date_time := start_date_time_tab();
564   l_email_account_id := source_id_tab();
565   l_classification_id := route_classification_id_tab();
566   l_one_done_rsln := one_done_rsln_tab();
567   l_two_done_rsln := two_done_rsln_tab();
568   l_three_done_rsln := three_done_rsln_tab();
569   l_four_done_rsln := four_done_rsln_tab();
570   l_intr_thread := intr_thread_tab();
571   l_week_id := week_id_tab();
572   l_ent_period_id := ent_period_id_tab();
573   l_ent_qtr_id := ent_qtr_id_tab();
574   l_ent_year_id := ent_year_id_tab();
575   l_week_start_date := week_start_date_tab();
576   l_ent_period_start_date := ent_period_start_date_tab();
577   l_ent_qtr_start_date := ent_qtr_start_date_tab();
578   l_ent_year_start_date := ent_year_start_date_tab();
579   l_curr_depth := curr_depth_tab();
580 
581   OPEN all_root_interactions;
582 
583   LOOP
584 
585     /* fetch all leaf interactions that have been created in the collection date range */
586     /* or a reply has been given within the collection date range for the interaction  */
587     FETCH all_root_interactions BULK COLLECT INTO
588       l_root_interaction_id
589     LIMIT g_commit_chunk_size;
590 
591     IF (l_root_interaction_id.COUNT > 0) THEN
592 
593       l_no_of_records := l_root_interaction_id.COUNT;
594 
595       /* Make place for all the interactions */
596       l_agent_id.EXTEND(l_no_of_records);
597       l_party_id.EXTEND(l_no_of_records);
598       l_start_date_time.EXTEND(l_no_of_records);
599       l_email_account_id.EXTEND(l_no_of_records);
600       l_classification_id.EXTEND(l_no_of_records);
601       l_one_done_rsln.EXTEND(l_no_of_records);
602       l_two_done_rsln.EXTEND(l_no_of_records);
603       l_three_done_rsln.EXTEND(l_no_of_records);
604       l_four_done_rsln.EXTEND(l_no_of_records);
605       l_intr_thread.EXTEND(l_no_of_records);
606       l_week_id.EXTEND(l_no_of_records);
607       l_ent_period_id.EXTEND(l_no_of_records);
608       l_ent_qtr_id.EXTEND(l_no_of_records);
609       l_ent_year_id.EXTEND(l_no_of_records);
613       l_ent_year_start_date.EXTEND(l_no_of_records);
610       l_week_start_date.EXTEND(l_no_of_records);
611       l_ent_period_start_date.EXTEND(l_no_of_records);
612       l_ent_qtr_start_date.EXTEND(l_no_of_records);
614       l_curr_depth.EXTEND(l_no_of_records);
615 
616       FOR i IN l_root_interaction_id.FIRST .. l_root_interaction_id.LAST
617       LOOP
618         /* For each interaction , get the associated dimensions */
619         SELECT
620           nvl(intr.resource_id, -1),
621           nvl(intr.party_id, -1),
622           trunc(intr.start_date_time),
623           nvl(mitm.source_id, -1),
624           nvl(irc.route_classification_id, -1)
625         INTO
626           l_agent_id(i),
627           l_party_id(i),
628           l_start_date_time(i),
629           l_email_account_id(i),
630           l_classification_id(i)
631         FROM
632            jtf_ih_interactions intr,
633            jtf_ih_activities actv,
634            jtf_ih_media_items mitm,
635     --
636     --Changes for R12
637     --
638     (
639     select name, max(route_classification_id) route_classification_id
640     from iem_route_classifications
641     group by name
642     ) irc
643         WHERE intr.interaction_id = l_root_interaction_id(i)
644         AND actv.interaction_id = intr.interaction_id
645         AND mitm.media_id = actv.media_id
646         AND mitm.direction = 'INBOUND'
647         AND mitm.media_item_type = 'EMAIL'
648         AND mitm.classification = irc.name(+)
649         AND rownum <= 1;
650 
651         l_one_done_rsln(i) := 0;
652         l_two_done_rsln(i) := 0;
653         l_three_done_rsln(i) := 0;
654         l_four_done_rsln(i) := 0;
655         l_intr_thread(i) := 0;
656 
657         /* Get the current and previous depth of the root interaction */
658         get_curr_prev_depth(l_root_interaction_id(i), l_curr_depth(i), l_prev_depth, l_intr_thread(i));
659 
660 
661         /* Get the time ids from time diemnsion corresponding to interaction start date time */
662         SELECT
663           week_id,
664           week_start_date,
665           ent_period_id,
666           ent_period_start_date,
667           ent_qtr_id,
668           ent_qtr_start_date,
669           ent_year_id,
670           ent_year_start_date
671         INTO
672           l_week_id(i),
673           l_week_start_date(i),
674           l_ent_period_id(i),
675           l_ent_period_start_date(i),
676           l_ent_qtr_id(i),
677           l_ent_qtr_start_date(i),
678           l_ent_year_id(i),
679           l_ent_year_start_date(i)
680         FROM
681           fii_time_day
682         WHERE report_date = trunc(l_start_date_time(i));
683 
684 
685         IF (l_curr_depth(i) = 1) THEN l_one_done_rsln(i) :=1;
686         ELSIF (l_curr_depth(i) = 2) THEN l_two_done_rsln(i) := 1;
687         ELSIF (l_curr_depth(i) = 3) THEN l_three_done_rsln(i) := 1;
688         ELSIF (l_curr_depth(i) = 4) THEN l_four_done_rsln(i) := 1;
689         END IF;
690 
691 	IF (l_prev_depth = 1)     THEN l_one_done_rsln(i) := l_one_done_rsln(i) - 1;
692         ELSIF (l_prev_depth = 2)  THEN l_two_done_rsln(i) := l_two_done_rsln(i) - 1;
693         ELSIF (l_prev_depth = 3)  THEN l_three_done_rsln(i) := l_three_done_rsln(i) - 1;
694         ELSIF (l_prev_depth = 4)  THEN l_four_done_rsln(i) := l_four_done_rsln(i) - 1;
695         END IF;
696 
697 
698 
699         write_log('For this interaction one and done is'||to_char(l_one_done_rsln(i)));
700 --
701 --??Need to review this section of code to make sure for deletes
702 --If curr_depth = priro_depth which might happen if data is being re-collected then do not
703 --subtract the prior depth
704 /***************
705         IF (l_prev_depth = 1)    AND l_curr_depth(i) <> 1 THEN l_one_done_rsln(i) := l_one_done_rsln(i) - 1;
706         ELSIF (l_prev_depth = 2) AND l_curr_depth(i) <> 2 THEN l_two_done_rsln(i) := l_two_done_rsln(i) - 1;
707         ELSIF (l_prev_depth = 3) AND l_curr_depth(i) <> 3 THEN l_three_done_rsln(i) := l_three_done_rsln(i) - 1;
708         ELSIF (l_prev_depth = 4) AND l_curr_depth(i) <> 4 THEN l_four_done_rsln(i) := l_four_done_rsln(i) - 1;
709         END IF;
710 ****************/
711 
712       END LOOP;
713 
714       /* Update the half-hour, day, week, month, quarter and year rows of ICI summary table */
715       /*
716 	 For period type id =1 (day level), we delete the records before arriving at this procedure,
717 	 so one and done becomes 0.. */
718 
719 	 FORALL i IN l_root_interaction_id.FIRST .. l_root_interaction_id.LAST
720 
721 	MERGE INTO bix_email_details_f bed
722 	 USING (
723   		  SELECT
724 		   l_agent_id(i) agent_id
725 		  ,l_email_account_id(i) email_account_id
726 		  ,l_classification_id(i) email_classification_id
727 		  ,l_party_id(i) party_id
728 		  ,to_number(to_char(l_start_date_time(i), 'J')) time_id
729 		  ,1  period_type_id
730 		  ,trunc(l_start_date_time(i)) period_start_date
731 		  ,'00:00' period_start_time
732             ,l_one_done_rsln(i) one_rsln_in_period
733 		  ,l_two_done_rsln(i) two_rsln_in_period
734 		  ,l_three_done_rsln(i) three_rsln_in_period
735 		  ,l_four_done_rsln(i) four_rsln_in_period
736 		  ,l_intr_thread(i) interaction_threads_in_period
737 	     FROM DUAL
738 		UNION ALL
739 		SELECT
740 		   l_agent_id(i) agent_id
741 		  ,l_email_account_id(i) email_account_id
742 		  ,l_classification_id(i) email_classification_id
743 		  ,l_party_id(i) party_id
747 		  ,'00:00' period_start_time
744 		  ,l_week_id(i) time_id
745 		  ,16  period_type_id
746 		  ,l_week_start_date(i) period_start_date
748             ,l_one_done_rsln(i) one_rsln_in_period
749 		  ,l_two_done_rsln(i) two_rsln_in_period
750 		  ,l_three_done_rsln(i) three_rsln_in_period
751 		  ,l_four_done_rsln(i) four_rsln_in_period
752 		  ,l_intr_thread(i) interaction_threads_in_period
753 	     FROM DUAL
754 		UNION ALL
755 		SELECT
756 		   l_agent_id(i) agent_id
757 		  ,l_email_account_id(i) email_account_id
758 		  ,l_classification_id(i) email_classification_id
759 		  ,l_party_id(i) party_id
760 		  ,l_ent_period_id(i) time_id
761 		  ,32  period_type_id
762 		  ,l_ent_period_start_date(i) period_start_date
763 		  ,'00:00' period_start_time
764             ,l_one_done_rsln(i) one_rsln_in_period
765 		  ,l_two_done_rsln(i) two_rsln_in_period
766 		  ,l_three_done_rsln(i) three_rsln_in_period
767 		  ,l_four_done_rsln(i) four_rsln_in_period
768 		  ,l_intr_thread(i) interaction_threads_in_period
769 	     FROM DUAL
770 		UNION ALL
771 		SELECT
772 		   l_agent_id(i) agent_id
773 		  ,l_email_account_id(i) email_account_id
774 		  ,l_classification_id(i) email_classification_id
775 		  ,l_party_id(i) party_id
776 		  ,l_ent_qtr_id(i) time_id
777 		  ,64  period_type_id
778 		  ,l_ent_qtr_start_date(i) period_start_date
779 		  ,'00:00' period_start_time
780             ,l_one_done_rsln(i) one_rsln_in_period
781 		  ,l_two_done_rsln(i) two_rsln_in_period
782 		  ,l_three_done_rsln(i) three_rsln_in_period
783 		  ,l_four_done_rsln(i) four_rsln_in_period
784 		  ,l_intr_thread(i) interaction_threads_in_period
785 	     FROM DUAL
786 		UNION ALL
787 		SELECT
788 		   l_agent_id(i) agent_id
789 		  ,l_email_account_id(i) email_account_id
790 		  ,l_classification_id(i) email_classification_id
791 		  ,l_party_id(i) party_id
792 		  ,l_ent_year_id(i) time_id
793 		  ,128  period_type_id
794 		  ,l_ent_year_start_date(i) period_start_date
795 		  ,'00:00' period_start_time
796             ,l_one_done_rsln(i) one_rsln_in_period
797 		  ,l_two_done_rsln(i) two_rsln_in_period
798 		  ,l_three_done_rsln(i) three_rsln_in_period
799 		  ,l_four_done_rsln(i) four_rsln_in_period
800 		  ,l_intr_thread(i) interaction_threads_in_period
801 	     FROM DUAL) change
802       ON (
803          bed.agent_id = change.agent_id
804          AND bed.party_id = change.party_id
805          AND bed.email_account_id = change.email_account_id
806          AND bed.email_classification_id = change.email_classification_id
807          AND bed.time_id = change.time_id
808          AND bed.period_start_time = change.period_start_time
809          AND bed.period_start_date = change.period_start_date
810          AND bed.period_type_id = change.period_type_id
811          AND bed.outcome_id = -1 AND bed.result_id = -1 AND bed.reason_id = -1
812          )
813 	 WHEN MATCHED THEN
814       UPDATE
815       SET    bed.one_rsln_in_period = decode(change.one_rsln_in_period, 0, bed.one_rsln_in_period,
816                                      decode(nvl(bed.one_rsln_in_period, 0) + change.one_rsln_in_period, 0, to_number(null),
817                                         nvl(bed.one_rsln_in_period, 0) + change.one_rsln_in_period))
818              ,bed.two_rsln_in_period = decode(change.two_rsln_in_period, 0, bed.two_rsln_in_period,
819                                      decode(nvl(bed.two_rsln_in_period, 0) + change.two_rsln_in_period, 0, to_number(null),
820                                         nvl(bed.two_rsln_in_period, 0) + change.two_rsln_in_period))
821              ,bed.three_rsln_in_period = decode(change.three_rsln_in_period, 0, bed.three_rsln_in_period,
822                                      decode(nvl(bed.three_rsln_in_period, 0) + change.three_rsln_in_period, 0, to_number(null),
823                                         nvl(bed.three_rsln_in_period, 0) + change.three_rsln_in_period))
824              ,bed.four_rsln_in_period = decode(change.four_rsln_in_period, 0, bed.four_rsln_in_period,
825                                      decode(nvl(bed.four_rsln_in_period, 0) + change.four_rsln_in_period, 0, to_number(null),
826                                         nvl(bed.four_rsln_in_period, 0) + change.four_rsln_in_period))
827              ,bed.interaction_threads_in_period = decode(change.interaction_threads_in_period, 0,
828 		                        bed.interaction_threads_in_period, decode(nvl(bed.interaction_threads_in_period, 0)
829 						    + change.interaction_threads_in_period, 0, to_number(null),
830                                   nvl(bed.interaction_threads_in_period, 0) + change.interaction_threads_in_period))
831              ,bed.last_updated_by = g_user_id
832              ,bed.last_update_date = g_sysdate
833 	 WHEN NOT MATCHED THEN INSERT (
834 	        bed.agent_id
835 		   ,bed.party_id
836 		   ,bed.email_account_id
837 		   ,bed.email_classification_id
838 		   ,bed.time_id
839 		   ,bed.period_start_time
840 		   ,bed.period_start_date
841 		   ,bed.period_type_id
842 		   ,outcome_id
843                ,result_id
844                ,reason_id
845 		   ,bed.created_by
846 		   ,bed.creation_date
847 		   ,bed.last_updated_by
848 		   ,bed.last_update_date
849 		   ,bed.one_rsln_in_period
850 		   ,bed.two_rsln_in_period
851 		   ,bed.three_rsln_in_period
852 		   ,bed.four_rsln_in_period
853 		   ,bed.interaction_threads_in_period )
854 	 VALUES (
855 	        change.agent_id
856 		   ,change.party_id
857 		   ,change.email_account_id
858 		   ,change.email_classification_id
859 		   ,change.time_id
860 		   ,change.period_start_time
864                ,-1
861 		   ,change.period_start_date
862 		   ,change.period_type_id
863                ,-1
865                ,-1
866              ,g_user_id
867              ,g_sysdate
868              ,g_user_id
869              ,g_sysdate
870 		   ,decode(change.one_rsln_in_period, 0, to_number(null), change.one_rsln_in_period)
871 		   ,decode(change.two_rsln_in_period, 0, to_number(null), change.two_rsln_in_period)
872 		   ,decode(change.three_rsln_in_period, 0, to_number(null), change.three_rsln_in_period)
873 		   ,decode(change.four_rsln_in_period, 0, to_number(null), change.four_rsln_in_period)
874 		   ,decode(change.interaction_threads_in_period, 0, to_number(null), change.interaction_threads_in_period));
875 
876 
877       write_log('Total rows inserted/updated in bix_email_details_f for resolution : ' ||
878       to_char(l_root_interaction_id.COUNT * 6));
879       g_rows_ins_upd := g_rows_ins_upd + (l_root_interaction_id.COUNT * 6);
880 
881       /* Update the bix_interactions_temp table to keep track of depth by interaction */
882       /* This table has an instead of insert trigger which updates/insert the row     */
883       FORALL i IN l_root_interaction_id.FIRST .. l_root_interaction_id.LAST
884         MERGE INTO bix_interactions_temp bit
885         USING (
886           SELECT
887             l_root_interaction_id(i) interaction_id,
888             l_curr_depth(i) depth
889           FROM dual ) change
890         ON (bit.interaction_id = change.interaction_id)
891         WHEN MATCHED THEN
892         UPDATE
893           SET  bit.depth = change.depth,
894                bit.last_updated_by = g_user_id,
895                bit.last_update_date = g_sysdate
896         WHEN NOT MATCHED THEN
897         INSERT (
898           bit.interaction_id,
899           bit.created_by,
900           bit.creation_date,
901           bit.last_updated_by,
902           bit.last_update_date,
903           bit.depth,
904           bit.request_id,
905           bit.program_application_id,
906           bit.program_id,
907           bit.program_update_date )
908         VALUES (
909           l_root_interaction_id(i),
910           g_user_id,
911           g_sysdate,
912           g_user_id,
913           g_sysdate,
914           l_curr_depth(i),
915           g_request_id,
916           g_program_appl_id,
917           g_program_id,
918           g_sysdate);
919 
920       write_log('Total rows inserted/updated in bix_interactions_temp : ' || to_char(l_root_interaction_id.COUNT));
921       g_rows_ins_upd := g_rows_ins_upd + l_root_interaction_id.COUNT;
922 
923       l_agent_id.TRIM(l_no_of_records);
924       l_party_id.TRIM(l_no_of_records);
925       l_start_date_time.TRIM(l_no_of_records);
926       l_email_account_id.TRIM(l_no_of_records);
927       l_classification_id.TRIM(l_no_of_records);
928       l_one_done_rsln.TRIM(l_no_of_records);
929       l_two_done_rsln.TRIM(l_no_of_records);
930       l_three_done_rsln.TRIM(l_no_of_records);
931       l_four_done_rsln.TRIM(l_no_of_records);
932       l_intr_thread.TRIM(l_no_of_records);
933       l_week_id.TRIM(l_no_of_records);
934       l_ent_period_id.TRIM(l_no_of_records);
935       l_ent_qtr_id.TRIM(l_no_of_records);
936       l_ent_year_id.TRIM(l_no_of_records);
937       l_week_start_date.TRIM(l_no_of_records);
938       l_ent_period_start_date.TRIM(l_no_of_records);
939       l_ent_qtr_start_date.TRIM(l_no_of_records);
940       l_ent_year_start_date.TRIM(l_no_of_records);
941       l_curr_depth.TRIM(l_no_of_records);
942 
943       COMMIT;
944     END IF;
945 
946     EXIT WHEN all_root_interactions%NOTFOUND;
947 
948   END LOOP;
949 
950   CLOSE all_root_interactions;
951 
952   write_log('Finished procedure collect_resolutions at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
953 
954 EXCEPTION
955   WHEN OTHERS THEN
956     write_log('Error in procedure collect_resolutions : Error : ' || sqlerrm);
957     IF (all_root_interactions%ISOPEN) THEN
958       CLOSE all_root_interactions;
959     END IF;
960     RAISE;
961 END collect_resolutions;
962 
963 PROCEDURE clean_up IS
964 
965   l_total_rows_deleted NUMBER := 0;
966   l_rows_deleted       NUMBER := 0;
967 
968 BEGIN
969   write_log('Start of the procedure clean_up at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
970 
971   /* rollback the uncommited changes */
972   rollback;
973 
974   l_total_rows_deleted := 0;
975 
976   write_log('Deleting data from summary tables inserted from parallel workers');
977   /* Delete all the rows inserted from subworkers */
978   IF (g_worker.COUNT > 0) THEN
979     FOR i IN g_worker.FIRST .. g_worker.LAST
980     LOOP
981       LOOP
982         DELETE bix_email_details_f
983         WHERE  request_id = g_worker(i)
984         AND    rownum <= g_commit_chunk_size ;
985 
986         l_rows_deleted := SQL%ROWCOUNT;
987         l_total_rows_deleted := l_total_rows_deleted + l_rows_deleted;
988 
989         COMMIT;
990 
991         IF (l_rows_deleted < g_commit_chunk_size) THEN
992           EXIT;
993         END IF;
994       END LOOP;
995     END LOOP;
996   END IF;
997 
998   /* Delete the rows from eMail summary table inserted in the current run */
999   write_log('Deleting data from summary tables inserted through this main program');
1000   LOOP
1001     DELETE bix_email_details_f
1002     WHERE  request_id = g_request_id
1006     l_total_rows_deleted := l_total_rows_deleted + l_rows_deleted;
1003     AND    rownum <= g_commit_chunk_size ;
1004 
1005     l_rows_deleted := SQL%ROWCOUNT;
1007 
1008     COMMIT;
1009 
1010     IF (l_rows_deleted < g_commit_chunk_size) THEN
1011       EXIT;
1012     END IF;
1013   END LOOP;
1014 
1015   write_log('Deleting data from bix_interactions_temp');
1016   LOOP
1017     DELETE bix_interactions_temp
1018     WHERE  request_id = g_request_id
1019     AND    rownum <= g_commit_chunk_size ;
1020 
1021     l_rows_deleted := SQL%ROWCOUNT;
1022     l_total_rows_deleted := l_total_rows_deleted + l_rows_deleted;
1023 
1024     COMMIT;
1025 
1026     IF (l_rows_deleted < g_commit_chunk_size) THEN
1027       EXIT;
1028     END IF;
1029   END LOOP;
1030 
1031   write_log('Total number of rows deleted : ' || to_char(l_total_rows_deleted));
1032   write_log('Finished procedure clean_up at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
1033 
1034 EXCEPTION
1035   WHEN OTHERS THEN
1036     write_log('Error in cleaning up the tables : Error : ' || sqlerrm);
1037     RAISE;
1038 END CLEAN_UP;
1039 
1040 
1041 /*
1042 This procedure collects all the additive measures.
1043 In this procedure we also collect all the measures including queue, open measures.
1044 This is different from the way we do it in INITIAL LOAD.
1045 */
1046 
1047 
1048 PROCEDURE COLLECT_EMAILS IS
1049 
1050   l_email_service_level NUMBER;
1051 
1052 BEGIN
1053 
1054   write_log('Start of the procedure collect_emails at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
1055 
1056   write_log('g_collect_start_date is ' || to_char(g_collect_start_date,'dd-mon-yyyy hh24:mi:ss'));
1057   write_log('g_collect_end_date is ' || to_char(g_collect_end_date,'dd-mon-yyyy hh24:mi:ss'));
1058 
1059   /* Get the service level for the whole email center : if not defined then 1 day is the default */
1060   /* Multiply the profile by 60 * 60 to convert from hour to seconds                             */
1061   IF (FND_PROFILE.DEFINED('BIX_EMAIL_GOAL')) THEN
1062      l_email_service_level := TO_NUMBER(FND_PROFILE.VALUE('BIX_EMAIL_GOAL')) * 60 * 60;
1063   ELSE
1064      l_email_service_level := 24 * 60 * 60;
1065   END IF;
1066   write_log('The service level for the whole email center : ' || to_char(l_email_service_level) || ' seconds');
1067 
1068   write_log('Merging additive measures into table bix_email_details_f');
1069 
1070   --
1071   --Merge additive measures into the staging table - staging table introduced
1072   --to avoid issues with ROLLUP
1073   --
1074 
1075 
1076 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
1077   USING
1078   (
1079   SELECT
1080       inv2.email_account_id
1081         email_account_id,
1082       inv2.email_classification_id
1083         email_classification_id,
1084       inv2.agent_id
1085         agent_id,
1086       inv2.party_id
1087         party_id,
1088       inv2.time_id
1089         time_id,
1090       1 period_type_id,
1091       inv2.period_start_date
1092         period_start_date,
1093       inv2.period_start_time
1094         period_start_time,
1095       inv2.outcome_id
1096         outcome_id,
1097       inv2.result_id
1098         result_id,
1099       inv2.reason_id
1100         reason_id,
1101       g_user_id
1102         created_by,
1103       g_sysdate
1104         creation_date,
1105       g_user_id
1106         last_updated_by,
1107       g_sysdate
1108         last_update_date,
1109       0  emails_offered_in_period,
1110       decode(sum(inv2.emails_fetched_in_period), 0, to_number(null), sum(inv2.emails_fetched_in_period))
1111         emails_fetched_in_period,
1112       decode(sum(inv2.emails_replied_in_period), 0, to_number(null), sum(inv2.emails_replied_in_period))
1113         emails_replied_in_period,
1114       decode(sum(inv2.emails_rpld_by_goal_in_period), 0, to_number(null), sum(inv2.emails_rpld_by_goal_in_period))
1115         emails_rpld_by_goal_in_period,
1116       decode(sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL))
1117         AGENT_EMAILS_RPLD_BY_GOAL,
1118       decode(sum(inv2.emails_deleted_in_period), 0, to_number(null), sum(inv2.emails_deleted_in_period))
1119         emails_deleted_in_period,
1120       decode(sum(inv2.emails_trnsfrd_out_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_out_in_period))
1121         emails_trnsfrd_out_in_period,
1122       decode(sum(inv2.emails_trnsfrd_in_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_in_in_period))
1123         emails_trnsfrd_in_in_period,
1124       decode(sum(inv2.emails_assigned_in_period), 0, to_number(null), sum(inv2.emails_assigned_in_period))
1125         emails_assigned_in_period,
1126       decode(sum(inv2.emails_auto_routed_in_period), 0, to_number(null), sum(inv2.emails_auto_routed_in_period))
1127         emails_auto_routed_in_period,
1128       decode(sum(inv2.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(inv2.emails_auto_uptd_sr_in_period))
1129         emails_auto_uptd_sr_in_period,
1130       decode(round(sum(inv2.email_resp_time_in_period)), 0, to_number(null), round(sum(inv2.email_resp_time_in_period)))
1131         email_resp_time_in_period,
1132       decode(round(sum(inv2.agent_resp_time_in_period)), 0, to_number(null), round(sum(inv2.agent_resp_time_in_period)))
1133         agent_resp_time_in_period,
1134        0   sr_created_in_period,
1135        0   emails_rsl_and_trfd_in_period,
1136       decode(sum(EMAILS_AUTO_REPLIED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_REPLIED_IN_PERIOD))
1137         EMAILS_AUTO_REPLIED_IN_PERIOD,
1138       decode(sum(EMAILS_AUTO_DELETED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_DELETED_IN_PERIOD))
1139         EMAILS_AUTO_DELETED_IN_PERIOD,
1140       decode(sum(EMAILS_AUTO_RESOLVED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_RESOLVED_IN_PERIOD))
1141         EMAILS_AUTO_RESOLVED_IN_PERIOD,
1142      0    emails_composed_in_period,
1143      0   emails_orr_count_in_period,
1144      0   accumulated_open_emails,
1145      0   accumulated_emails_in_queue,
1146      0   accumulated_emails_one_day,
1147      0   accumulated_emails_three_days,
1148      0   accumulated_emails_week,
1149      0   accumulated_emails_week_plus,
1150      0   LEADS_CREATED_IN_PERIOD,
1151       decode(sum(EMAILS_REROUTED_IN_PERIOD), 0, to_number(null), sum(EMAILS_REROUTED_IN_PERIOD))
1152         EMAILS_REROUTED_IN_PERIOD,
1153       g_request_id
1154         request_id,
1155       g_program_appl_id
1156         program_application_id,
1157       g_program_id
1158         program_id,
1159       g_sysdate
1160         program_update_date
1161    FROM
1162     (
1163  /* Query 1 */
1164  SELECT
1165       EMAIL_ACCOUNT_ID,
1166       EMAIL_CLASSIFICATION_ID,
1167       AGENT_ID,
1168       PARTY_ID,
1169       PERIOD_START_DATE,
1170       TIME_ID,
1171       '00:00'                                              PERIOD_START_TIME,
1172       -1                                                   OUTCOME_ID,
1173       -1                                                   RESULT_ID,
1174       -1                                                   REASON_ID,
1175       0                                                      EMAILS_OFFERED_IN_PERIOD,
1176       sum(EMAILS_FETCHED_IN_PERIOD)    EMAILS_FETCHED_IN_PERIOD,
1177       sum(EMAILS_REPLIED_IN_PERIOD)     EMAILS_REPLIED_IN_PERIOD,
1178       sum(AGENT_RESP_TIME_IN_PERIOD)  AGENT_RESP_TIME_IN_PERIOD,
1179       sum(EMAILS_RPLD_BY_GOAL_IN_PERIOD)                                             EMAILS_RPLD_BY_GOAL_IN_PERIOD,
1180      sum(AGENT_EMAILS_RPLD_BY_GOAL)                                          AGENT_EMAILS_RPLD_BY_GOAL,
1181       sum(EMAILS_TRNSFRD_OUT_IN_PERIOD)   EMAILS_TRNSFRD_OUT_IN_PERIOD,
1182       sum(EMAILS_TRNSFRD_IN_IN_PERIOD)   EMAILS_TRNSFRD_IN_IN_PERIOD,
1183       sum(EMAILS_ASSIGNED_IN_PERIOD)   EMAILS_ASSIGNED_IN_PERIOD,
1184       sum(EMAILS_AUTO_ROUTED_IN_PERIOD)   EMAILS_AUTO_ROUTED_IN_PERIOD,
1185       sum(EMAILS_AUTO_UPTD_SR_IN_PERIOD)   EMAILS_AUTO_UPTD_SR_IN_PERIOD,
1186       sum(EMAILS_DELETED_IN_PERIOD)   EMAILS_DELETED_IN_PERIOD,
1187       sum(EMAIL_RESP_TIME_IN_PERIOD)   EMAIL_RESP_TIME_IN_PERIOD,
1188       0                                                    SR_CREATED_IN_PERIOD,
1189       0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
1190       sum(EMAILS_AUTO_REPLIED_IN_PERIOD)    EMAILS_AUTO_REPLIED_IN_PERIOD,
1191       sum(EMAILS_AUTO_DELETED_IN_PERIOD)  EMAILS_AUTO_DELETED_IN_PERIOD,
1192       sum(EMAILS_AUTO_RESOLVED_IN_PERIOD)      EMAILS_AUTO_RESOLVED_IN_PERIOD,
1193       0                                                    emails_composed_in_period,
1194       0                                                    emails_orr_count_in_period,
1198       0                                                    accumulated_emails_three_days,
1195       0                                                    accumulated_open_emails,
1196       0                                                    accumulated_emails_in_queue,
1197       0                                                    accumulated_emails_one_day,
1199       0                                                    accumulated_emails_week,
1200       0                                                    accumulated_emails_week_plus,
1201       sum(EMAILS_REROUTED_IN_PERIOD) EMAILS_REROUTED_IN_PERIOD,
1202       0                                                    LEADS_CREATED_IN_PERIOD
1203     FROM
1204 	(
1205 SELECT /*+ index (mseg jtf_ih_media_item_lc_segs_n3) use_nl(mseg mitm) */
1206       nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
1207       nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
1208       nvl(mseg.resource_id, -1)                            AGENT_ID,
1209       nvl((  SELECT
1210           distinct first_value(intr.party_id) over(order by actv.interaction_id desc) party_id
1211          FROM
1212            jtf_ih_activities actv,
1213            jtf_ih_interactions intr
1214          WHERE
1215          mitm.media_id = actv.media_id
1216         AND actv.interaction_id = intr.interaction_id
1217 		), -1)                               PARTY_ID,
1218       trunc(mseg.start_date_time)                          PERIOD_START_DATE,
1219       to_number(to_char(mseg.start_date_time, 'J'))        TIME_ID,
1220       decode(mtyp.milcs_code,'EMAIL_FETCH',1)         EMAILS_FETCHED_IN_PERIOD,
1221       decode(mtyp.milcs_code,'EMAIL_REPLY',1)         EMAILS_REPLIED_IN_PERIOD,
1222       decode(mtyp.milcs_code,'EMAIL_REPLY', (mseg.start_date_time -
1223 	  (
1224 	  SELECT MAX(mseg2.start_date_time) start_date_time
1225          FROM
1226            jtf_ih_media_item_lc_segs mseg2,
1227            jtf_ih_media_itm_lc_seg_tys mtyp2
1228          WHERE  mseg.media_id      = mseg2.media_id
1229          AND   mseg2.milcs_type_id = mtyp2.milcs_type_id
1230          AND   mtyp2.milcs_code    IN  ('EMAIL_FETCH','EMAIL_TRANSFER', 'EMAIL_ASSIGN_OPEN', 'EMAIL_AUTO_ROUTED', 'EMAIL_ASSIGNED')
1231 	  ) ) * 24 * 60 * 60)  AGENT_RESP_TIME_IN_PERIOD,
1232       decode(mtyp.milcs_code,'EMAIL_REPLY',
1233                decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1)
1234                                 , 'EMAIL_AUTO_REPLY',
1235                decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1) )
1236                                                            EMAILS_RPLD_BY_GOAL_IN_PERIOD,
1237       decode(mtyp.milcs_code,'EMAIL_REPLY',
1238                decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1)
1239                        )                                          AGENT_EMAILS_RPLD_BY_GOAL,
1240       decode(mtyp.milcs_code,'EMAIL_TRANSFERRED',1,'EMAIL_ESCALATED',1)   EMAILS_TRNSFRD_OUT_IN_PERIOD,
1241       decode(mtyp.milcs_code,'EMAIL_TRANSFER',1)     EMAILS_TRNSFRD_IN_IN_PERIOD,
1242       decode(mtyp.milcs_code,'EMAIL_ASSIGNED',1)      EMAILS_ASSIGNED_IN_PERIOD,
1243       decode(mtyp.milcs_code,'EMAIL_AUTO_ROUTED',1)   EMAILS_AUTO_ROUTED_IN_PERIOD,
1244       decode(mtyp.milcs_code,'EMAIL_AUTO_UPDATED_SR',1)
1245                                                     EMAILS_AUTO_UPTD_SR_IN_PERIOD,
1246       decode(mtyp.milcs_code,'EMAIL_DELETED',1)       EMAILS_DELETED_IN_PERIOD,
1247       decode(mtyp.milcs_code,'EMAIL_REPLY', (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60,
1248                           'EMAIL_AUTO_REPLY',(mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60) EMAIL_RESP_TIME_IN_PERIOD,
1249       decode(mtyp.milcs_code,'EMAIL_AUTO_REPLY',1)    EMAILS_AUTO_REPLIED_IN_PERIOD,
1250       decode(mtyp.milcs_code,'EMAIL_AUTO_DELETED',1)  EMAILS_AUTO_DELETED_IN_PERIOD,
1251       decode(mtyp.milcs_code,'EMAIL_RESOLVED',1)      EMAILS_AUTO_RESOLVED_IN_PERIOD,
1252       decode(mtyp.milcs_code,'EMAIL_REROUTED_DIFF_CLASS',1,'EMAIL_REROUTED_DIFF_ACCT',1,'EMAIL_REQUEUED',1) EMAILS_REROUTED_IN_PERIOD
1253     FROM
1254       JTF_IH_MEDIA_ITEMS mitm,
1255       JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
1256       JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyp,
1257 	  (
1258 		select name, max(route_classification_id) route_classification_id
1259 	    from iem_route_classifications
1260 		group by name
1261 	  ) irc
1262     WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
1263     AND   mitm.classification  = irc.name(+)
1264     AND   mitm.direction       = 'INBOUND'
1265     AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
1266     AND   mseg.MILCS_TYPE_ID   = mtyp.MILCS_TYPE_ID
1267     AND   mseg.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
1268 	)
1269     GROUP BY
1270 	 EMAIL_ACCOUNT_ID,
1271       EMAIL_CLASSIFICATION_ID,
1272       AGENT_ID,
1273       PARTY_ID,
1274       PERIOD_START_DATE,
1275       TIME_ID
1276       ) inv2
1277       GROUP BY
1278       inv2.email_account_id,
1279       inv2.email_classification_id,
1280       inv2.agent_id,
1281       inv2.party_id,
1282       inv2.time_id,
1283       inv2.period_start_date,
1284       inv2.period_start_time,
1285       inv2.outcome_id,
1286       inv2.result_id,
1287       inv2.reason_id
1288       )  change
1289   ON (
1290       fact.email_account_id = change.email_account_id
1291       AND fact.email_classification_id = change.email_classification_id
1292       AND fact.agent_id = change.agent_id
1293       AND fact.party_id = change.party_id
1294       AND fact.time_id = change.time_id
1295       AND fact.period_type_id = change.period_type_id
1296       AND fact.period_start_date = change.period_start_date
1297       AND fact.period_start_time = change.period_start_time
1298       AND fact.outcome_id = change.outcome_id
1299       AND fact.result_id = change.result_id
1300       AND fact.reason_id = change.reason_id )
1301   WHEN MATCHED THEN
1302     UPDATE
1303       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
1304              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
1305       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
1306              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
1307       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
1308              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
1312                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
1309       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
1310              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
1311       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
1313       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
1314              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
1315       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
1316              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
1317       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
1318              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
1319       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
1320              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
1321       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
1322              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
1323       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
1324              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
1325       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
1326              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
1327       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
1328              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
1329       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
1330              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
1331       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
1332              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
1333       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
1334              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
1335       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
1336              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
1337       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
1338              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
1339       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
1340              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
1341       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
1342              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
1343 --
1344 --Note that accumulated measures are not added together - they are replaced by the new
1345 --calculated value as they are not additive.
1346 --
1347       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
1348       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
1349       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
1350       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
1351       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
1352       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
1353       ,fact.last_updated_by = change.last_updated_by
1354       ,fact.last_update_date = change.last_update_date
1355       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
1356              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
1357       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
1358              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
1359   WHEN NOT MATCHED THEN
1360     INSERT (
1361       fact.email_account_id,
1362       fact.email_classification_id,
1363       fact.agent_id,
1364       fact.party_id,
1365       fact.time_id,
1366       fact.period_type_id,
1367       fact.period_start_date,
1368       fact.period_start_time,
1369       fact.outcome_id,
1370       fact.result_id,
1371       fact.reason_id,
1372       fact.created_by,
1376       fact.emails_offered_in_period,
1373       fact.creation_date,
1374       fact.last_updated_by,
1375       fact.last_update_date,
1377       fact.emails_fetched_in_period,
1378       fact.emails_replied_in_period,
1379       fact.emails_rpld_by_goal_in_period,
1380       fact.AGENT_EMAILS_RPLD_BY_GOAL,
1381       fact.emails_deleted_in_period,
1382       fact.emails_trnsfrd_out_in_period,
1383       fact.emails_trnsfrd_in_in_period,
1384       fact.emails_assigned_in_period,
1385       fact.emails_auto_routed_in_period,
1386       fact.emails_auto_uptd_sr_in_period,
1387       fact.email_resp_time_in_period,
1388       fact.agent_resp_time_in_period,
1389       fact.sr_created_in_period,
1390       fact.emails_rsl_and_trfd_in_period,
1391       fact.emails_orr_count_in_period,
1392       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
1393       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
1394       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
1395       fact.emails_composed_in_period,
1396       fact.accumulated_open_emails,
1397       fact.accumulated_emails_in_queue,
1398       fact.accumulated_emails_one_day,
1399       fact.accumulated_emails_three_days,
1400       fact.accumulated_emails_week,
1401       fact.accumulated_emails_week_plus,
1402       fact.request_id,
1403       fact.program_application_id,
1404       fact.program_id,
1405       fact.program_update_date,
1406       fact.emails_rerouted_in_period,
1407       fact.leads_created_in_period )
1408     VALUES (
1409       change.email_account_id,
1410       change.email_classification_id,
1411       change.agent_id,
1412       change.party_id,
1413       change.time_id,
1414       change.period_type_id,
1415       change.period_start_date,
1416       change.period_start_time,
1417       change.outcome_id,
1418       change.result_id,
1419       change.reason_id,
1420       change.created_by,
1421       change.creation_date,
1422       change.last_updated_by,
1423       change.last_update_date,
1424       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
1425       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
1426       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
1427       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
1428       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
1429       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
1430       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
1431       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
1432       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
1433       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
1434       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
1435       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
1436       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
1437       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
1438       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
1439       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
1440       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
1441       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
1442       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
1443       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
1444       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
1445       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
1446       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
1447       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
1448       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
1449       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
1450       change.request_id,
1451       change.program_application_id,
1452       change.program_id,
1453       change.program_update_date,
1454       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
1455       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
1456       );
1457 
1458   write_log('Number of rows updated in table bix_email_details_stg for Emails Fetched and Replied  ' || to_char(SQL%ROWCOUNT));
1459 
1460 
1461 
1462 	  MERGE INTO BIX_EMAIL_DETAILS_STG  fact
1463 	  USING
1464 	  (SELECT
1465 	      inv2.email_account_id
1466 		email_account_id,
1467 	      inv2.email_classification_id
1468 		email_classification_id,
1469 	      inv2.agent_id
1470 		agent_id,
1471 	      inv2.party_id
1472 		party_id,
1473 	      inv2.time_id
1474 		time_id,
1475 	      1 period_type_id,
1476 	      inv2.period_start_date
1477 		period_start_date,
1478 	      inv2.period_start_time
1479 		period_start_time,
1480 	      inv2.outcome_id
1484 	      inv2.reason_id
1481 		outcome_id,
1482 	      inv2.result_id
1483 		result_id,
1485 		reason_id,
1486 	      g_user_id
1487 		created_by,
1488 	      g_sysdate
1489 		creation_date,
1490 	      g_user_id
1491 		last_updated_by,
1492 	      g_sysdate
1493 		last_update_date,
1494 	      decode(sum(inv2.emails_offered_in_period), 0, to_number(null), sum(inv2.emails_offered_in_period)) emails_offered_in_period,
1495 		0  emails_fetched_in_period,
1496 		0  emails_replied_in_period,
1497 		0  emails_rpld_by_goal_in_period,
1498 		0  AGENT_EMAILS_RPLD_BY_GOAL,
1499 		0  emails_deleted_in_period,
1500 		0  emails_trnsfrd_out_in_period,
1501 		0  emails_trnsfrd_in_in_period,
1502 		0  emails_assigned_in_period,
1503 		0  emails_auto_routed_in_period,
1504 		0  emails_auto_uptd_sr_in_period,
1505 		0  email_resp_time_in_period,
1506 		0  agent_resp_time_in_period,
1507 		0  sr_created_in_period,
1508 		0  emails_rsl_and_trfd_in_period,
1509 		0  EMAILS_AUTO_REPLIED_IN_PERIOD,
1510 		0  EMAILS_AUTO_DELETED_IN_PERIOD,
1511 		0  EMAILS_AUTO_RESOLVED_IN_PERIOD,
1512 		0  emails_composed_in_period,
1513 		0  emails_orr_count_in_period,
1514 		0  accumulated_open_emails,
1515 		0  accumulated_emails_in_queue,
1516 		0  accumulated_emails_one_day,
1517 		0  accumulated_emails_three_days,
1518 		0  accumulated_emails_week,
1519 		0  accumulated_emails_week_plus,
1520 		0  LEADS_CREATED_IN_PERIOD,
1521 		0  EMAILS_REROUTED_IN_PERIOD,
1522 	      g_request_id
1523 		request_id,
1524 	      g_program_appl_id
1525 		program_application_id,
1526 	      g_program_id
1527 		program_id,
1528 	      g_sysdate
1529 		program_update_date
1530 	   FROM
1531 	    (
1532 	/*Query 2*/
1533 		SELECT
1534 	     EMAIL_ACCOUNT_ID,
1535 	      EMAIL_CLASSIFICATION_ID,
1536 	      -1 AGENT_ID,
1537 	      PARTY_ID,
1538 	      PERIOD_START_DATE,
1539 	      TIME_ID,
1540 	       '00:00'                                              PERIOD_START_TIME,
1541 	      -1                                                   OUTCOME_ID,
1542 	      -1                                                   RESULT_ID,
1543 	      -1                                                   REASON_ID,
1544 	      COUNT(*)                                             EMAILS_OFFERED_IN_PERIOD,
1545 	      0                                                    EMAILS_FETCHED_IN_PERIOD,
1546 	      0                                                    EMAILS_REPLIED_IN_PERIOD,
1547 	      0                                                    AGENT_RESP_TIME_IN_PERIOD,
1548 	      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
1549 	      0                                                    AGENT_EMAILS_RPLD_BY_GOAL,
1550 	      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
1551 	      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
1552 	      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
1553 	      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
1554 	      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
1555 	      0                                                    EMAILS_DELETED_IN_PERIOD,
1556 	      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
1557 	      0                                                    SR_CREATED_IN_PERIOD,
1558 	      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
1559 	      0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
1560 	      0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
1561 	      0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
1562 	      0                                                    emails_composed_in_period,
1563 	      0                                                    emails_orr_count_in_period,
1564 	      0                                                    accumulated_open_emails,
1565 	      0                                                    accumulated_emails_in_queue,
1566 	      0                                                    accumulated_emails_one_day,
1567 	      0                                                    accumulated_emails_three_days,
1568 	      0                                                    accumulated_emails_week,
1569 	      0                                                    accumulated_emails_week_plus,
1570 		 0                                                    EMAILS_REROUTED_IN_PERIOD,
1571 		 0                                                    LEADS_CREATED_IN_PERIOD
1572 	    FROM
1573 	 (
1574 		SELECT
1575 	      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
1576 	      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
1577 	      -1                                                   AGENT_ID,
1578 		  nvl((  SELECT
1579 		  distinct first_value(intr.party_id) over(order by actv.interaction_id desc) party_id
1580 		 FROM
1581 		   jtf_ih_activities actv,
1582 		   jtf_ih_interactions intr
1583 		 WHERE
1584 		 mitm.media_id = actv.media_id
1585 		AND actv.interaction_id = intr.interaction_id
1586 			), -1)                              PARTY_ID,
1587 	      trunc(mitm.start_date_time)                          PERIOD_START_DATE,
1588 	      to_number(to_char(mitm.start_date_time, 'J'))        TIME_ID
1589 	       FROM
1590 	      JTF_IH_MEDIA_ITEMS mitm,
1591 	     (
1592 	    select name, max(route_classification_id) route_classification_id
1593 	    from iem_route_classifications
1597 	    AND   mitm.DIRECTION       = 'INBOUND'
1594 	    group by name
1595 	    ) irc
1596 	    WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
1598 	    AND   mitm.classification  = irc.name(+)
1599 	    AND   mitm.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
1600 		)
1601 	    GROUP BY
1602 		 EMAIL_ACCOUNT_ID,
1603 	      EMAIL_CLASSIFICATION_ID,
1604 	      AGENT_ID,
1605 	      PARTY_ID,
1606 	      PERIOD_START_DATE,
1607 	      TIME_ID
1608 	      ) inv2
1609 	      GROUP BY
1610 	      inv2.email_account_id,
1611 	      inv2.email_classification_id,
1612 	      inv2.agent_id,
1613 	      inv2.party_id,
1614 	      inv2.time_id,
1615 	      inv2.period_start_date,
1616 	      inv2.period_start_time,
1617 	      inv2.outcome_id,
1618 	      inv2.result_id,
1619 	      inv2.reason_id
1620 	      )  change
1621 	  ON (
1622 	      fact.email_account_id = change.email_account_id
1623 	      AND fact.email_classification_id = change.email_classification_id
1624 	      AND fact.agent_id = change.agent_id
1625 	      AND fact.party_id = change.party_id
1626 	      AND fact.time_id = change.time_id
1627 	      AND fact.period_type_id = change.period_type_id
1628 	      AND fact.period_start_date = change.period_start_date
1629 	      AND fact.period_start_time = change.period_start_time
1630 	      AND fact.outcome_id = change.outcome_id
1631 	      AND fact.result_id = change.result_id
1632 	      AND fact.reason_id = change.reason_id )
1633 	  WHEN MATCHED THEN
1634 	    UPDATE
1635 	      SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
1636 		     0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
1637 	      ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
1638 		     0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
1639 	      ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
1640 		     0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
1641 	      ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
1642 		     0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
1643 	      ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
1644 			   0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
1645 	      ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
1646 		     nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
1647 	      ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
1648 		     0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
1649 	      ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
1650 		     0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
1651 	      ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
1652 		     0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
1653 	      ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
1654 		     0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
1655 	      ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
1656 		     0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
1657 	      ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
1658 		     0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
1659 	      ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
1660 		     0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
1661 	      ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
1662 		     0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
1663 	      ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
1664 		     0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
1665 	      ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
1666 		     0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
1667 	      ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
1668 		     0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
1669 	      ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
1670 		     0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
1671 	      ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
1672 		     0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
1676 	--Note that accumulated measures are not added together - they are replaced by the new
1673 	      ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
1674 		     0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
1675 	--
1677 	--calculated value as they are not additive.
1678 	--
1679 	      ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
1680 	      ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
1681 	      ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
1682 	      ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
1683 	      ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
1684 	      ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
1685 	      ,fact.last_updated_by = change.last_updated_by
1686 	      ,fact.last_update_date = change.last_update_date
1687 	      ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
1688 		     0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
1689 	      ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
1690 		     0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
1691 	  WHEN NOT MATCHED THEN
1692 	    INSERT (
1693 	      fact.email_account_id,
1694 	      fact.email_classification_id,
1695 	      fact.agent_id,
1696 	      fact.party_id,
1697 	      fact.time_id,
1698 	      fact.period_type_id,
1699 	      fact.period_start_date,
1700 	      fact.period_start_time,
1701 	      fact.outcome_id,
1702 	      fact.result_id,
1703 	      fact.reason_id,
1704 	      fact.created_by,
1705 	      fact.creation_date,
1706 	      fact.last_updated_by,
1707 	      fact.last_update_date,
1708 	      fact.emails_offered_in_period,
1709 	      fact.emails_fetched_in_period,
1710 	      fact.emails_replied_in_period,
1711 	      fact.emails_rpld_by_goal_in_period,
1712 	      fact.AGENT_EMAILS_RPLD_BY_GOAL,
1713 	      fact.emails_deleted_in_period,
1714 	      fact.emails_trnsfrd_out_in_period,
1715 	      fact.emails_trnsfrd_in_in_period,
1716 	      fact.emails_assigned_in_period,
1717 	      fact.emails_auto_routed_in_period,
1718 	      fact.emails_auto_uptd_sr_in_period,
1719 	      fact.email_resp_time_in_period,
1720 	      fact.agent_resp_time_in_period,
1721 	      fact.sr_created_in_period,
1722 	      fact.emails_rsl_and_trfd_in_period,
1723 	      fact.emails_orr_count_in_period,
1724 	      fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
1725 	      fact.EMAILS_AUTO_DELETED_IN_PERIOD,
1726 	      fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
1727 	      fact.emails_composed_in_period,
1728 	      fact.accumulated_open_emails,
1729 	      fact.accumulated_emails_in_queue,
1730 	      fact.accumulated_emails_one_day,
1731 	      fact.accumulated_emails_three_days,
1732 	      fact.accumulated_emails_week,
1733 	      fact.accumulated_emails_week_plus,
1734 	      fact.request_id,
1735 	      fact.program_application_id,
1736 	      fact.program_id,
1737 	      fact.program_update_date,
1738 	      fact.emails_rerouted_in_period,
1739 	      fact.leads_created_in_period )
1740 	    VALUES (
1741 	      change.email_account_id,
1742 	      change.email_classification_id,
1743 	      change.agent_id,
1744 	      change.party_id,
1745 	      change.time_id,
1746 	      change.period_type_id,
1747 	      change.period_start_date,
1748 	      change.period_start_time,
1749 	      change.outcome_id,
1750 	      change.result_id,
1751 	      change.reason_id,
1752 	      change.created_by,
1753 	      change.creation_date,
1754 	      change.last_updated_by,
1755 	      change.last_update_date,
1756 	      decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
1757 	      decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
1758 	      decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
1759 	      decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
1760 	      decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
1761 	      decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
1762 	      decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
1763 	      decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
1764 	      decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
1765 	      decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
1766 	      decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
1767 	      decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
1768 	      decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
1769 	      decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
1770 	      decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
1774 	      decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
1771 	      decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
1772 	      decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
1773 	      decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
1775 	      decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
1776 	      decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
1777 	      decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
1778 	      decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
1779 	      decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
1780 	      decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
1781 	      decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
1782 	      change.request_id,
1783 	      change.program_application_id,
1784 	      change.program_id,
1785 	      change.program_update_date,
1786 	      decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
1787 	      decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
1788 	      );
1789 
1790 
1791 write_log('Number of rows updated in table bix_email_details_stg for Emails Offered  ' || to_char(SQL%ROWCOUNT));
1792 
1793 
1794 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
1795   USING
1796   (SELECT
1797       inv2.email_account_id
1798         email_account_id,
1799       inv2.email_classification_id
1800         email_classification_id,
1801       inv2.agent_id
1802         agent_id,
1803       inv2.party_id
1804         party_id,
1805       inv2.time_id
1806         time_id,
1807       1 period_type_id,
1808       inv2.period_start_date
1809         period_start_date,
1810       inv2.period_start_time
1811         period_start_time,
1812       inv2.outcome_id
1813         outcome_id,
1814       inv2.result_id
1815         result_id,
1816       inv2.reason_id
1817         reason_id,
1818       g_user_id
1819         created_by,
1820       g_sysdate
1821         creation_date,
1822       g_user_id
1823         last_updated_by,
1824       g_sysdate
1825         last_update_date,
1826       0
1827         emails_offered_in_period,
1828       0
1829         emails_fetched_in_period,
1830       0
1831       emails_replied_in_period,
1832       0
1833         emails_rpld_by_goal_in_period,
1834       0
1835         AGENT_EMAILS_RPLD_BY_GOAL,
1836       0
1837         emails_deleted_in_period,
1838       0
1839         emails_trnsfrd_out_in_period,
1840       0
1841         emails_trnsfrd_in_in_period,
1842       0
1843         emails_assigned_in_period,
1844       0
1845         emails_auto_routed_in_period,
1846       0
1847         emails_auto_uptd_sr_in_period,
1848       0
1849         email_resp_time_in_period,
1850        0
1851         agent_resp_time_in_period,
1852       decode(sum(inv2.sr_created_in_period), 0, to_number(null), sum(inv2.sr_created_in_period))
1853         sr_created_in_period,
1854       0
1855         emails_rsl_and_trfd_in_period,
1856       0
1857         EMAILS_AUTO_REPLIED_IN_PERIOD,
1861         EMAILS_AUTO_RESOLVED_IN_PERIOD,
1858       0
1859         EMAILS_AUTO_DELETED_IN_PERIOD,
1860       0
1862       0
1863         emails_composed_in_period,
1864       0
1865         emails_orr_count_in_period,
1866       0
1867         accumulated_open_emails,
1868       0
1869         accumulated_emails_in_queue,
1870       0
1871         accumulated_emails_one_day,
1872       0
1873         accumulated_emails_three_days,
1874       0
1875         accumulated_emails_week,
1876       0
1877         accumulated_emails_week_plus,
1878       decode(sum(LEADS_CREATED_IN_PERIOD), 0, to_number(null), sum(LEADS_CREATED_IN_PERIOD))
1879        LEADS_CREATED_IN_PERIOD,
1880       0  EMAILS_REROUTED_IN_PERIOD,
1881       g_request_id
1882         request_id,
1883       g_program_appl_id
1884         program_application_id,
1885       g_program_id
1886         program_id,
1887       g_sysdate
1888         program_update_date
1889    FROM
1890     (
1891 	/* Query 3 */
1892 	   SELECT /*+ index(actv jtf_ih_activities_n11) */
1893       nvl(email_account_id, -1)                              EMAIL_ACCOUNT_ID,
1894       nvl(email_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
1895       nvl(agent_id, -1)                            AGENT_ID,
1896       nvl(party_id, -1)                               PARTY_ID,
1897       trunc(period_start_date)                          PERIOD_START_DATE,
1898       time_id        TIME_ID,
1899       '00:00'                                              PERIOD_START_TIME,
1900       -1                                                   OUTCOME_ID,
1901       -1                                                   RESULT_ID,
1902       -1                                                   REASON_ID,
1903       0                                                    EMAILS_OFFERED_IN_PERIOD,
1904       0                                                    EMAILS_FETCHED_IN_PERIOD,
1905       0                                                    EMAILS_REPLIED_IN_PERIOD,
1906       0                                                    AGENT_RESP_TIME_IN_PERIOD,
1907       0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
1908       0                                                    AGENT_EMAILS_RPLD_BY_GOAL,
1909       0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
1910       0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
1911       0                                                    EMAILS_ASSIGNED_IN_PERIOD,
1912       0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
1913       0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
1914       0                                                    EMAILS_DELETED_IN_PERIOD,
1915       0                                                    EMAIL_RESP_TIME_IN_PERIOD,
1916       SUM(DECODE(action_id,13,1))                     SR_CREATED_IN_PERIOD,
1917       0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
1918       0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
1919       0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
1920       0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
1921       0                                                    emails_composed_in_period,
1922       0                                                    emails_orr_count_in_period,
1926       0                                                    accumulated_emails_three_days,
1923       0                                                    accumulated_open_emails,
1924       0                                                    accumulated_emails_in_queue,
1925       0                                                    accumulated_emails_one_day,
1927       0                                                    accumulated_emails_week,
1928 	        0                                                    accumulated_emails_week_plus,
1929          0                                                    EMAILS_REROUTED_IN_PERIOD,
1930          SUM(DECODE(action_id,71,1))                      LEADS_CREATED_IN_PERIOD
1931 	FROM
1932 	(
1933 	SELECT
1934   nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
1935       nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
1936       nvl(intr.resource_id, -1)                            AGENT_ID,
1937       first_value(party_id) over(partition by actv.media_id order by actv.interaction_id DESC) PARTY_ID,
1938       trunc(actv.start_date_time)                          PERIOD_START_DATE,
1939       to_number(to_char(actv.start_date_time, 'J'))        TIME_ID,
1940       actv.action_id                     ACTION_ID
1941     FROM
1942       JTF_IH_ACTIVITIES actv,
1943       JTF_IH_INTERACTIONS intr,
1944       JTF_IH_MEDIA_ITEMS mitm,
1945       (select /*+ index(actv jtf_ih_activities_n11) use_nl(actv actv1 mitm) */
1946          actv.interaction_id interaction_id,
1947          max(mitm.classification) classification
1948        from
1949          jtf_ih_activities actv,
1950          jtf_ih_media_items mitm
1951        where
1952 	  actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
1953       and   actv.media_id = mitm.media_id
1954       and   mitm.direction = 'INBOUND'
1955       and   mitm.media_item_type = 'EMAIL'
1956        group by actv.interaction_id ) inv2,
1957     --
1958     --Changes for R12
1959     --
1960     (
1961     select name, max(route_classification_id) route_classification_id
1962     from iem_route_classifications
1963     group by name
1964     ) irc
1965     WHERE
1966     actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
1967     AND ( ( actv.action_id = 13 AND  actv.action_item_id = 17 ) OR
1968           ( actv.action_id = 71  AND  actv.action_item_id = 8  )
1969         )
1970     AND   actv.media_id = mitm.media_id
1971     AND   mitm.MEDIA_ITEM_TYPE = 'EMAIL'
1972     AND   inv2.classification  = irc.name(+)
1973     AND   actv.interaction_id = intr.interaction_id
1974     AND   actv.interaction_id = inv2.interaction_id(+)
1975 	)
1976     GROUP BY
1977       nvl(email_account_id, -1),
1978       nvl(email_classification_id, -1),
1979       agent_id,
1980       nvl(party_id, -1),
1981 	      trunc(period_start_date),
1982       time_id
1983 )inv2
1984 GROUP BY
1985       inv2.email_account_id,
1986       inv2.email_classification_id,
1987       inv2.agent_id,
1988       inv2.party_id,
1989       inv2.time_id,
1990       inv2.period_start_date,
1991       inv2.period_start_time,
1992       inv2.outcome_id,
1993       inv2.result_id,
1994       inv2.reason_id
1995 )  change
1996   ON (
1997       fact.email_account_id = change.email_account_id
1998       AND fact.email_classification_id = change.email_classification_id
1999       AND fact.agent_id = change.agent_id
2000       AND fact.party_id = change.party_id
2001       AND fact.time_id = change.time_id
2002       AND fact.period_type_id = change.period_type_id
2003       AND fact.period_start_date = change.period_start_date
2004       AND fact.period_start_time = change.period_start_time
2005       AND fact.outcome_id = change.outcome_id
2006       AND fact.result_id = change.result_id
2007       AND fact.reason_id = change.reason_id )
2008   WHEN MATCHED THEN
2009     UPDATE
2010       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
2011              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
2012       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
2013              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
2014       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
2015              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
2016       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
2017              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
2018       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
2022       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
2019                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
2020       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
2021              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
2023              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
2024       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
2025              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
2026       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
2027              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
2028       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
2029              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
2030       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
2031              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
2032       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
2033              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
2034       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
2035              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
2036       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
2037              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
2038       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
2039              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
2040       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
2041              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
2042       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
2043              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
2044       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
2045              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
2046       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2047              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
2048       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
2049              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
2050 --
2051 --Note that accumulated measures are not added together - they are replaced by the new
2052 --calculated value as they are not additive.
2053 --
2054       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
2055       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
2056       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
2057       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
2058       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
2059       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
2060       ,fact.last_updated_by = change.last_updated_by
2061       ,fact.last_update_date = change.last_update_date
2062       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
2063              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
2064       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
2065              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
2066   WHEN NOT MATCHED THEN
2067     INSERT (
2068       fact.email_account_id,
2069       fact.email_classification_id,
2070       fact.agent_id,
2071       fact.party_id,
2072       fact.time_id,
2073       fact.period_type_id,
2074       fact.period_start_date,
2075       fact.period_start_time,
2076       fact.outcome_id,
2077       fact.result_id,
2078       fact.reason_id,
2079       fact.created_by,
2080       fact.creation_date,
2081       fact.last_updated_by,
2082       fact.last_update_date,
2083       fact.emails_offered_in_period,
2084       fact.emails_fetched_in_period,
2085       fact.emails_replied_in_period,
2086       fact.emails_rpld_by_goal_in_period,
2087       fact.AGENT_EMAILS_RPLD_BY_GOAL,
2091       fact.emails_assigned_in_period,
2088       fact.emails_deleted_in_period,
2089       fact.emails_trnsfrd_out_in_period,
2090       fact.emails_trnsfrd_in_in_period,
2092       fact.emails_auto_routed_in_period,
2093       fact.emails_auto_uptd_sr_in_period,
2094       fact.email_resp_time_in_period,
2095       fact.agent_resp_time_in_period,
2096       fact.sr_created_in_period,
2097       fact.emails_rsl_and_trfd_in_period,
2098       fact.emails_orr_count_in_period,
2099       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
2100       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
2101       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2102       fact.emails_composed_in_period,
2103       fact.accumulated_open_emails,
2104       fact.accumulated_emails_in_queue,
2105       fact.accumulated_emails_one_day,
2106       fact.accumulated_emails_three_days,
2107       fact.accumulated_emails_week,
2108       fact.accumulated_emails_week_plus,
2109       fact.request_id,
2110       fact.program_application_id,
2111       fact.program_id,
2112       fact.program_update_date,
2113       fact.emails_rerouted_in_period,
2114       fact.leads_created_in_period )
2115     VALUES (
2116       change.email_account_id,
2117       change.email_classification_id,
2118       change.agent_id,
2119       change.party_id,
2120       change.time_id,
2121       change.period_type_id,
2122       change.period_start_date,
2123       change.period_start_time,
2124       change.outcome_id,
2125       change.result_id,
2126       change.reason_id,
2127       change.created_by,
2128       change.creation_date,
2129       change.last_updated_by,
2130       change.last_update_date,
2131       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
2132       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
2133       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
2134       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
2135       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
2136       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
2137       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
2138       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
2139       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
2140       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
2141       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
2142       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
2143       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
2144       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
2145       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
2146       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
2147       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
2148       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
2149       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
2150       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
2151       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
2152       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
2153       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
2154       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
2155       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
2156       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
2157       change.request_id,
2158       change.program_application_id,
2159       change.program_id,
2160       change.program_update_date,
2161       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
2162       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
2163       );
2164 
2165 write_log('Number of rows updated in table bix_email_details_stg for SR and leads created ' || to_char(SQL%ROWCOUNT));
2166 
2167 
2168 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
2169   USING
2170   (SELECT
2171       inv2.email_account_id
2172         email_account_id,
2173       inv2.email_classification_id
2174         email_classification_id,
2175       inv2.agent_id
2176         agent_id,
2177       inv2.party_id
2178         party_id,
2179       inv2.time_id
2180         time_id,
2181       1 period_type_id,
2182       inv2.period_start_date
2183         period_start_date,
2184       inv2.period_start_time
2185         period_start_time,
2186       inv2.outcome_id
2187         outcome_id,
2188       inv2.result_id
2189         result_id,
2190       inv2.reason_id
2194       g_sysdate
2191         reason_id,
2192       g_user_id
2193         created_by,
2195         creation_date,
2196       g_user_id
2197         last_updated_by,
2198       g_sysdate
2199         last_update_date,
2200       0
2201         emails_offered_in_period,
2202       0
2203         emails_fetched_in_period,
2204       0
2205         emails_replied_in_period,
2206       0
2207         emails_rpld_by_goal_in_period,
2208       0
2209         AGENT_EMAILS_RPLD_BY_GOAL,
2210       0
2211         emails_deleted_in_period,
2212       0
2213         emails_trnsfrd_out_in_period,
2214       0
2215         emails_trnsfrd_in_in_period,
2216       0
2217         emails_assigned_in_period,
2218       0
2219         emails_auto_routed_in_period,
2220       0
2221         emails_auto_uptd_sr_in_period,
2222       0
2223         email_resp_time_in_period,
2224       0
2225         agent_resp_time_in_period,
2226       0
2227         sr_created_in_period,
2228       decode(sum(inv2.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(inv2.emails_rsl_and_trfd_in_period))
2229         emails_rsl_and_trfd_in_period,
2230       0
2231         EMAILS_AUTO_REPLIED_IN_PERIOD,
2232       0
2233         EMAILS_AUTO_DELETED_IN_PERIOD,
2234       0
2235         EMAILS_AUTO_RESOLVED_IN_PERIOD,
2236       0
2237         emails_composed_in_period,
2238       0
2239         emails_orr_count_in_period,
2240       0
2241         accumulated_open_emails,
2242       0
2243         accumulated_emails_in_queue,
2244       0
2245         accumulated_emails_one_day,
2246       0
2247         accumulated_emails_three_days,
2248       0
2249         accumulated_emails_week,
2250       0
2251         accumulated_emails_week_plus,
2252       0
2253        LEADS_CREATED_IN_PERIOD,
2254       0
2255         EMAILS_REROUTED_IN_PERIOD,
2256       g_request_id
2257         request_id,
2258       g_program_appl_id
2259         program_application_id,
2260       g_program_id
2261         program_id,
2262       g_sysdate
2263         program_update_date
2264    FROM
2265     (
2266 
2267 	/* Query 4 */
2268 SELECT
2269    EMAIL_ACCOUNT_ID,
2270       EMAIL_CLASSIFICATION_ID,
2271       AGENT_ID,
2272       PARTY_ID,
2273       PERIOD_START_DATE,
2274       TIME_ID,
2275       '00:00'                                              PERIOD_START_TIME,
2276       -1                                                   OUTCOME_ID,
2277       -1                                                   RESULT_ID,
2278       -1                                                   REASON_ID,
2279       0                                                    EMAILS_OFFERED_IN_PERIOD,
2280       0                                                    EMAILS_FETCHED_IN_PERIOD,
2281       0                                                    EMAILS_REPLIED_IN_PERIOD,
2282       0                                                    AGENT_RESP_TIME_IN_PERIOD,
2283       0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
2284       0                                                    AGENT_EMAILS_RPLD_BY_GOAL,
2285       0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
2286       0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
2287       0                                                    EMAILS_ASSIGNED_IN_PERIOD,
2288       0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
2289       0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
2290       0                                                    EMAILS_DELETED_IN_PERIOD,
2291       0                                                    EMAIL_RESP_TIME_IN_PERIOD,
2292       0                                                    SR_CREATED_IN_PERIOD,
2293       count(*)                                             EMAILS_RSL_AND_TRFD_IN_PERIOD,
2294       0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
2295       0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
2296       0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
2297       0                                                    emails_composed_in_period,
2298       0                                                    emails_orr_count_in_period,
2299       0                                                    accumulated_open_emails,
2300       0                                                    accumulated_emails_in_queue,
2301       0                                                    accumulated_emails_one_day,
2302       0                                                    accumulated_emails_three_days,
2303       0                                                    accumulated_emails_week,
2304       0                                                    accumulated_emails_week_plus,
2305 	 0                                                    EMAILS_REROUTED_IN_PERIOD,
2306 	 0                                                    LEADS_CREATED_IN_PERIOD
2307 	 FROM
2308 (SELECT /*+ index (mseg jtf_ih_media_item_lc_segs_n3) use_nl(mseg mitm) */
2309       nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
2310       nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
2311       nvl(mseg.resource_id, -1)                            AGENT_ID,
2312 	nvl((  SELECT
2316            jtf_ih_interactions intr
2313           distinct first_value(intr.party_id) over(order by actv.interaction_id desc) party_id
2314          FROM
2315            jtf_ih_activities actv,
2317          WHERE
2318          mitm.media_id = actv.media_id
2319         AND actv.interaction_id = intr.interaction_id
2320 	), -1)                                     PARTY_ID,
2321       trunc(mseg.start_date_time)                          PERIOD_START_DATE,
2322       to_number(to_char(mseg.start_date_time, 'J'))        TIME_ID
2323      FROM
2324        JTF_IH_MEDIA_ITEMS mitm,
2325       JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
2326       JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyp,
2327     (
2328     select name, max(route_classification_id) route_classification_id
2329     from iem_route_classifications
2330     group by name
2331     ) irc
2332     WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
2333     AND   mitm.DIRECTION       = 'INBOUND'
2334     AND   mitm.classification  = irc.name(+)
2335     AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
2336     AND   mseg.MILCS_TYPE_ID   = mtyp.MILCS_TYPE_ID
2337     AND   mtyp.MILCS_CODE      IN ('EMAIL_REPLY', 'EMAIL_DELETED')
2338     AND   mseg.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
2339     AND   EXISTS (
2340             SELECT
2341                    1
2342             FROM
2343                    jtf_ih_media_item_lc_segs mseg1,
2344                    jtf_ih_media_itm_lc_seg_tys mtys1
2345             WHERE mseg1.media_id = mitm.media_id
2346             AND   mtys1.milcs_type_id = mseg1.milcs_type_id
2347             AND   mtys1.milcs_code IN ( 'EMAIL_TRANSFERRED','EMAIL_ESCALATED') )
2348 	    )
2349   GROUP BY
2350 	 EMAIL_ACCOUNT_ID,
2351       EMAIL_CLASSIFICATION_ID,
2352       AGENT_ID,
2353       PARTY_ID,
2354       PERIOD_START_DATE,
2355       TIME_ID
2356 )inv2
2357 GROUP BY
2358       inv2.email_account_id,
2359       inv2.email_classification_id,
2360       inv2.agent_id,
2361       inv2.party_id,
2362       inv2.time_id,
2363       inv2.period_start_date,
2364       inv2.period_start_time,
2365       inv2.outcome_id,
2366       inv2.result_id,
2367       inv2.reason_id
2368 )  change
2369   ON (
2370       fact.email_account_id = change.email_account_id
2371       AND fact.email_classification_id = change.email_classification_id
2372       AND fact.agent_id = change.agent_id
2373       AND fact.party_id = change.party_id
2374       AND fact.time_id = change.time_id
2375       AND fact.period_type_id = change.period_type_id
2376       AND fact.period_start_date = change.period_start_date
2377       AND fact.period_start_time = change.period_start_time
2378       AND fact.outcome_id = change.outcome_id
2379       AND fact.result_id = change.result_id
2380       AND fact.reason_id = change.reason_id )
2381   WHEN MATCHED THEN
2382     UPDATE
2383       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
2384              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
2385       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
2386              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
2387       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
2388              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
2389       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
2390              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
2391       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
2392                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
2393       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
2394              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
2395       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
2396              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
2397       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
2398              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
2399       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
2400              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
2401       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
2402              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
2403       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
2404              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
2405       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
2409       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
2406              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
2407       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
2408              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
2410              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
2411       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
2412              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
2413       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
2414              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
2415       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
2416              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
2417       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
2418              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
2419       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2420              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
2421       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
2422              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
2423 --
2424 --Note that accumulated measures are not added together - they are replaced by the new
2425 --calculated value as they are not additive.
2426 --
2427       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
2428       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
2429       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
2430       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
2431       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
2432       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
2433       ,fact.last_updated_by = change.last_updated_by
2434       ,fact.last_update_date = change.last_update_date
2435       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
2436              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
2437       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
2438              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
2439   WHEN NOT MATCHED THEN
2440     INSERT (
2441       fact.email_account_id,
2442       fact.email_classification_id,
2443       fact.agent_id,
2444       fact.party_id,
2445       fact.time_id,
2446       fact.period_type_id,
2447       fact.period_start_date,
2448       fact.period_start_time,
2449       fact.outcome_id,
2450       fact.result_id,
2451       fact.reason_id,
2452       fact.created_by,
2453       fact.creation_date,
2454       fact.last_updated_by,
2455       fact.last_update_date,
2456       fact.emails_offered_in_period,
2457       fact.emails_fetched_in_period,
2458       fact.emails_replied_in_period,
2459       fact.emails_rpld_by_goal_in_period,
2460       fact.AGENT_EMAILS_RPLD_BY_GOAL,
2461       fact.emails_deleted_in_period,
2462       fact.emails_trnsfrd_out_in_period,
2463       fact.emails_trnsfrd_in_in_period,
2464       fact.emails_assigned_in_period,
2465       fact.emails_auto_routed_in_period,
2466       fact.emails_auto_uptd_sr_in_period,
2467       fact.email_resp_time_in_period,
2468       fact.agent_resp_time_in_period,
2469       fact.sr_created_in_period,
2470       fact.emails_rsl_and_trfd_in_period,
2471       fact.emails_orr_count_in_period,
2472       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
2473       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
2474       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2475       fact.emails_composed_in_period,
2476       fact.accumulated_open_emails,
2477       fact.accumulated_emails_in_queue,
2478       fact.accumulated_emails_one_day,
2479       fact.accumulated_emails_three_days,
2480       fact.accumulated_emails_week,
2481       fact.accumulated_emails_week_plus,
2482       fact.request_id,
2483       fact.program_application_id,
2484       fact.program_id,
2485       fact.program_update_date,
2486       fact.emails_rerouted_in_period,
2487       fact.leads_created_in_period )
2488     VALUES (
2489       change.email_account_id,
2490       change.email_classification_id,
2491       change.agent_id,
2492       change.party_id,
2493       change.time_id,
2494       change.period_type_id,
2495       change.period_start_date,
2496       change.period_start_time,
2500       change.created_by,
2497       change.outcome_id,
2498       change.result_id,
2499       change.reason_id,
2501       change.creation_date,
2502       change.last_updated_by,
2503       change.last_update_date,
2504       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
2505       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
2506       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
2507       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
2508       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
2509       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
2510       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
2511       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
2512       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
2513       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
2514       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
2515       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
2516       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
2517       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
2518       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
2519       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
2520       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
2521       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
2522       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
2523       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
2524       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
2525       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
2526       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
2527       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
2528       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
2529       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
2530       change.request_id,
2531       change.program_application_id,
2532       change.program_id,
2533       change.program_update_date,
2534       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
2535       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
2536       );
2537 
2538 write_log('Number of rows updated in table bix_email_details_stg for Emails Resolved and Transferred in period ' || to_char(SQL%ROWCOUNT));
2539 
2540 
2541 
2542 
2543 
2544 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
2545   USING
2546   (SELECT
2547       inv2.email_account_id
2548         email_account_id,
2549       inv2.email_classification_id
2550         email_classification_id,
2551       inv2.agent_id
2552         agent_id,
2553       inv2.party_id
2554         party_id,
2555       inv2.time_id
2556         time_id,
2557       1 period_type_id,
2558       inv2.period_start_date
2559         period_start_date,
2560       inv2.period_start_time
2561         period_start_time,
2562       inv2.outcome_id
2563         outcome_id,
2564       inv2.result_id
2565         result_id,
2566       inv2.reason_id
2567         reason_id,
2568       g_user_id
2569         created_by,
2570       g_sysdate
2571         creation_date,
2572       g_user_id
2573         last_updated_by,
2574       g_sysdate
2575         last_update_date,
2576    0
2577         emails_offered_in_period,
2578    0
2579         emails_fetched_in_period,
2580    0
2581         emails_replied_in_period,
2582    0
2583         emails_rpld_by_goal_in_period,
2584    0
2585         AGENT_EMAILS_RPLD_BY_GOAL,
2586    0
2587         emails_deleted_in_period,
2588    0
2589         emails_trnsfrd_out_in_period,
2590    0
2591         emails_trnsfrd_in_in_period,
2592    0
2593       emails_assigned_in_period,
2594    0
2595         emails_auto_routed_in_period,
2596    0
2597         emails_auto_uptd_sr_in_period,
2598    0
2599         email_resp_time_in_period,
2600    0
2601         agent_resp_time_in_period,
2602    0
2603         sr_created_in_period,
2604    0
2605         emails_rsl_and_trfd_in_period,
2606    0
2607         EMAILS_AUTO_REPLIED_IN_PERIOD,
2608    0
2609         EMAILS_AUTO_DELETED_IN_PERIOD,
2610    0
2611         EMAILS_AUTO_RESOLVED_IN_PERIOD,
2612    0
2613         emails_composed_in_period,
2614       decode(sum(emails_orr_count_in_period), 0, to_number(null), sum(emails_orr_count_in_period))
2615         emails_orr_count_in_period,
2616    0
2617         accumulated_open_emails,
2618    0
2622    0
2619         accumulated_emails_in_queue,
2620    0
2621       accumulated_emails_one_day,
2623         accumulated_emails_three_days,
2624    0
2625       accumulated_emails_week,
2626    0
2627         accumulated_emails_week_plus,
2628    0
2629        LEADS_CREATED_IN_PERIOD,
2630    0
2631         EMAILS_REROUTED_IN_PERIOD,
2632       g_request_id
2633         request_id,
2634       g_program_appl_id
2635         program_application_id,
2636       g_program_id
2637         program_id,
2638       g_sysdate
2639         program_update_date
2640    FROM
2641     (
2642 
2643 /* Query 5 */
2644 SELECT
2645       nvl(email_account_id, -1)                              EMAIL_ACCOUNT_ID,
2646       nvl(email_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
2647       nvl(agent_id, -1)                            AGENT_ID,
2648       nvl(party_id, -1)                               PARTY_ID,
2649       trunc(period_start_date)                         PERIOD_START_DATE,
2650       time_id        TIME_ID,
2651       '00:00'                                              PERIOD_START_TIME,
2652       NVL(outcome_id,-1)                              OUTCOME_ID,
2653       NVL(result_id,-1)                               RESULT_ID,
2654       NVL(reason_id,-1)                               REASON_ID,
2655       0                                                    EMAILS_OFFERED_IN_PERIOD,
2656       0                                                    EMAILS_FETCHED_IN_PERIOD,
2657       0                                                    EMAILS_REPLIED_IN_PERIOD,
2658       0                                                    AGENT_RESP_TIME_IN_PERIOD,
2659       0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
2660       0                                                    AGENT_EMAILS_RPLD_BY_GOAL,
2661       0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
2662       0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
2663       0                                                    EMAILS_ASSIGNED_IN_PERIOD,
2664       0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
2665       0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
2666       0                                                    EMAILS_DELETED_IN_PERIOD,
2667       0                                                    EMAIL_RESP_TIME_IN_PERIOD,
2668       0                                                    SR_CREATED_IN_PERIOD,
2669       0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
2670       0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
2671       0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
2672       0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
2673       0                                                    emails_composed_in_period,
2674       COUNT(DISTINCT interaction_id)                  emails_orr_count_in_period,
2675       0                                                    accumulated_open_emails,
2676       0                                                    accumulated_emails_in_queue,
2677       0                                                    accumulated_emails_one_day,
2678       0                                                    accumulated_emails_three_days,
2679       0                                                    accumulated_emails_week,
2680       0                                                    accumulated_emails_week_plus,
2681          0                                                    EMAILS_REROUTED_IN_PERIOD,
2682          0                                                    LEADS_CREATED_IN_PERIOD
2683 FROM
2684 (
2685 SELECT /*+ use_nl(intr,actv,mitm) */
2686 nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
2687       nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
2688       nvl(intr.resource_id, -1)                            AGENT_ID,
2689       nvl(first_value(intr.party_id)
2690           over(partition by actv.media_id
2691                order by actv.interaction_id desc
2692               ),
2693           -1)                                              PARTY_ID,
2694       trunc(intr.last_update_date)                         PERIOD_START_DATE,
2695       to_number(to_char(intr.last_update_date, 'J'))       TIME_ID,
2696       NVL(intr.outcome_id,-1)                              OUTCOME_ID,
2697       NVL(intr.result_id,-1)                               RESULT_ID,
2698       NVL(intr.reason_id,-1)                               REASON_ID,
2699       intr.interaction_id                                  INTERACTION_ID
2700      FROM
2701       JTF_IH_MEDIA_ITEMS mitm,
2702       JTF_IH_ACTIVITIES actv,
2703       JTF_IH_INTERACTIONS intr,
2704     (
2705     select name, max(route_classification_id) route_classification_id
2706     from iem_route_classifications
2707     group by name
2708     ) irc
2709     WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
2710     AND   mitm.direction = 'INBOUND'
2711     AND   mitm.classification  = irc.name(+)
2712     AND   mitm.media_id        = actv.media_id
2713     AND   actv.interaction_id  = intr.interaction_id
2714     AND   intr.LAST_UPDATE_DATE BETWEEN  g_collect_start_date and g_collect_end_date
2715     AND   intr.outcome_id IS NOT NULL
2716 )
2717     GROUP BY
2718       nvl(email_account_id, -1),
2719       nvl(email_classification_id, -1),
2723       time_id,
2720       nvl(agent_id, -1),
2721       nvl(party_id, -1),
2722       trunc(period_start_date),
2724       NVL(outcome_id,-1),
2725       NVL(result_id,-1),
2726       NVL(reason_id,-1)
2727 
2728 )inv2
2729 GROUP BY
2730       inv2.email_account_id,
2731       inv2.email_classification_id,
2732       inv2.agent_id,
2733       inv2.party_id,
2734       inv2.time_id,
2735       inv2.period_start_date,
2736       inv2.period_start_time,
2737       inv2.outcome_id,
2738       inv2.result_id,
2739       inv2.reason_id
2740 )  change
2741   ON (
2742       fact.email_account_id = change.email_account_id
2743       AND fact.email_classification_id = change.email_classification_id
2744       AND fact.agent_id = change.agent_id
2745       AND fact.party_id = change.party_id
2746       AND fact.time_id = change.time_id
2747       AND fact.period_type_id = change.period_type_id
2748       AND fact.period_start_date = change.period_start_date
2749       AND fact.period_start_time = change.period_start_time
2750       AND fact.outcome_id = change.outcome_id
2751       AND fact.result_id = change.result_id
2752       AND fact.reason_id = change.reason_id )
2753   WHEN MATCHED THEN
2754     UPDATE
2755       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
2756              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
2757       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
2758              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
2759       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
2760              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
2761       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
2762              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
2763       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
2764                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
2765       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
2766              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
2767       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
2768              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
2769       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
2770              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
2771       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
2772              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
2773       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
2774              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
2775       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
2776              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
2777       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
2778              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
2779       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
2780              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
2781       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
2782              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
2783       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
2784              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
2785       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
2786              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
2787       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
2788              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
2789       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
2790              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
2791       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2792              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
2793       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
2794              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
2795 --
2796 --Note that accumulated measures are not added together - they are replaced by the new
2797 --calculated value as they are not additive.
2798 --
2799       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
2800       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
2801       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
2802       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
2803       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
2804       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
2805       ,fact.last_updated_by = change.last_updated_by
2806       ,fact.last_update_date = change.last_update_date
2807       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
2808              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
2809       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
2810              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
2811   WHEN NOT MATCHED THEN
2812     INSERT (
2813       fact.email_account_id,
2814       fact.email_classification_id,
2815       fact.agent_id,
2816       fact.party_id,
2817       fact.time_id,
2818       fact.period_type_id,
2819       fact.period_start_date,
2820       fact.period_start_time,
2821       fact.outcome_id,
2822       fact.result_id,
2823       fact.reason_id,
2824       fact.created_by,
2825       fact.creation_date,
2826       fact.last_updated_by,
2827       fact.last_update_date,
2828       fact.emails_offered_in_period,
2829       fact.emails_fetched_in_period,
2830       fact.emails_replied_in_period,
2831       fact.emails_rpld_by_goal_in_period,
2832       fact.AGENT_EMAILS_RPLD_BY_GOAL,
2836       fact.emails_assigned_in_period,
2833       fact.emails_deleted_in_period,
2834       fact.emails_trnsfrd_out_in_period,
2835       fact.emails_trnsfrd_in_in_period,
2837       fact.emails_auto_routed_in_period,
2838       fact.emails_auto_uptd_sr_in_period,
2839       fact.email_resp_time_in_period,
2840       fact.agent_resp_time_in_period,
2841       fact.sr_created_in_period,
2842       fact.emails_rsl_and_trfd_in_period,
2843       fact.emails_orr_count_in_period,
2844       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
2845       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
2846       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
2847       fact.emails_composed_in_period,
2848       fact.accumulated_open_emails,
2849       fact.accumulated_emails_in_queue,
2850       fact.accumulated_emails_one_day,
2851       fact.accumulated_emails_three_days,
2852       fact.accumulated_emails_week,
2853       fact.accumulated_emails_week_plus,
2854       fact.request_id,
2855       fact.program_application_id,
2856       fact.program_id,
2857       fact.program_update_date,
2858       fact.emails_rerouted_in_period,
2859       fact.leads_created_in_period )
2860     VALUES (
2861       change.email_account_id,
2862       change.email_classification_id,
2863       change.agent_id,
2864       change.party_id,
2865       change.time_id,
2866       change.period_type_id,
2867       change.period_start_date,
2868       change.period_start_time,
2869       change.outcome_id,
2870       change.result_id,
2871       change.reason_id,
2872       change.created_by,
2873       change.creation_date,
2874       change.last_updated_by,
2875       change.last_update_date,
2876       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
2877       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
2878       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
2879       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
2880       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
2881       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
2882       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
2883       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
2884       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
2885       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
2886       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
2887       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
2888       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
2889       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
2890       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
2891       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
2892       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
2893       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
2894       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
2895       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
2896       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
2897       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
2898       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
2899       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
2900       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
2901       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
2902       change.request_id,
2903       change.program_application_id,
2904       change.program_id,
2905       change.program_update_date,
2906       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
2907       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
2908       );
2909 
2910 write_log('Number of rows updated in table bix_email_details_stg for Emails ORR count  ' || to_char(SQL%ROWCOUNT));
2911 
2912 
2913 
2914 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
2915   USING
2916   (SELECT
2917       inv2.email_account_id
2918         email_account_id,
2919       inv2.email_classification_id
2920         email_classification_id,
2921       inv2.agent_id
2922         agent_id,
2923       inv2.party_id
2924         party_id,
2925       inv2.time_id
2926         time_id,
2927       1 period_type_id,
2928       inv2.period_start_date
2929         period_start_date,
2930       inv2.period_start_time
2931         period_start_time,
2932       inv2.outcome_id
2933         outcome_id,
2934       inv2.result_id
2935         result_id,
2936       inv2.reason_id
2937         reason_id,
2938       g_user_id
2939         created_by,
2940       g_sysdate
2941         creation_date,
2942       g_user_id
2943         last_updated_by,
2944       g_sysdate
2945         last_update_date,
2946       decode(sum(inv2.emails_offered_in_period), 0, to_number(null), sum(inv2.emails_offered_in_period))
2947         emails_offered_in_period,
2948       decode(sum(inv2.emails_fetched_in_period), 0, to_number(null), sum(inv2.emails_fetched_in_period))
2949         emails_fetched_in_period,
2950       decode(sum(inv2.emails_replied_in_period), 0, to_number(null), sum(inv2.emails_replied_in_period))
2951         emails_replied_in_period,
2952       decode(sum(inv2.emails_rpld_by_goal_in_period), 0, to_number(null), sum(inv2.emails_rpld_by_goal_in_period))
2953         emails_rpld_by_goal_in_period,
2954       decode(sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL))
2955         AGENT_EMAILS_RPLD_BY_GOAL,
2956       decode(sum(inv2.emails_deleted_in_period), 0, to_number(null), sum(inv2.emails_deleted_in_period))
2957         emails_deleted_in_period,
2958       decode(sum(inv2.emails_trnsfrd_out_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_out_in_period))
2959         emails_trnsfrd_out_in_period,
2960       decode(sum(inv2.emails_trnsfrd_in_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_in_in_period))
2961         emails_trnsfrd_in_in_period,
2962       decode(sum(inv2.emails_assigned_in_period), 0, to_number(null), sum(inv2.emails_assigned_in_period))
2963         emails_assigned_in_period,
2964       decode(sum(inv2.emails_auto_routed_in_period), 0, to_number(null), sum(inv2.emails_auto_routed_in_period))
2965         emails_auto_routed_in_period,
2966       decode(sum(inv2.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(inv2.emails_auto_uptd_sr_in_period))
2967         emails_auto_uptd_sr_in_period,
2968       decode(round(sum(inv2.email_resp_time_in_period)), 0, to_number(null), round(sum(inv2.email_resp_time_in_period)))
2969         email_resp_time_in_period,
2970       decode(round(sum(inv2.agent_resp_time_in_period)), 0, to_number(null), round(sum(inv2.agent_resp_time_in_period)))
2971         agent_resp_time_in_period,
2972       decode(sum(inv2.sr_created_in_period), 0, to_number(null), sum(inv2.sr_created_in_period))
2973         sr_created_in_period,
2974       decode(sum(inv2.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(inv2.emails_rsl_and_trfd_in_period))
2975         emails_rsl_and_trfd_in_period,
2976       decode(sum(EMAILS_AUTO_REPLIED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_REPLIED_IN_PERIOD))
2977         EMAILS_AUTO_REPLIED_IN_PERIOD,
2978       decode(sum(EMAILS_AUTO_DELETED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_DELETED_IN_PERIOD))
2979         EMAILS_AUTO_DELETED_IN_PERIOD,
2980       decode(sum(EMAILS_AUTO_RESOLVED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_RESOLVED_IN_PERIOD))
2981         EMAILS_AUTO_RESOLVED_IN_PERIOD,
2982       decode(sum(emails_composed_in_period), 0, to_number(null), sum(emails_composed_in_period))
2983         emails_composed_in_period,
2984       decode(sum(emails_orr_count_in_period), 0, to_number(null), sum(emails_orr_count_in_period))
2985         emails_orr_count_in_period,
2986       decode(sum(accumulated_open_emails), 0, to_number(null), sum(accumulated_open_emails))
2987         accumulated_open_emails,
2988       decode(sum(accumulated_emails_in_queue), 0, to_number(null), sum(accumulated_emails_in_queue))
2989         accumulated_emails_in_queue,
2990       decode(sum(accumulated_emails_one_day), 0, to_number(null), sum(accumulated_emails_one_day))
2991         accumulated_emails_one_day,
2992       decode(sum(accumulated_emails_three_days), 0, to_number(null), sum(accumulated_emails_three_days))
2993         accumulated_emails_three_days,
2994       decode(sum(accumulated_emails_week), 0, to_number(null), sum(accumulated_emails_week))
2995         accumulated_emails_week,
2996       decode(sum(accumulated_emails_week_plus), 0, to_number(null), sum(accumulated_emails_week_plus))
2997         accumulated_emails_week_plus,
2998       decode(sum(LEADS_CREATED_IN_PERIOD), 0, to_number(null), sum(LEADS_CREATED_IN_PERIOD))
2999        LEADS_CREATED_IN_PERIOD,
3000       decode(sum(EMAILS_REROUTED_IN_PERIOD), 0, to_number(null), sum(EMAILS_REROUTED_IN_PERIOD))
3001         EMAILS_REROUTED_IN_PERIOD,
3002       g_request_id
3003         request_id,
3004       g_program_appl_id
3005         program_application_id,
3006       g_program_id
3007         program_id,
3008       g_sysdate
3009         program_update_date
3010    FROM
3011     (
3012 	/* Query 6 */
3013     SELECT   /*+ use_nl(intr,actv,segs,mitm)  */
3014       nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
3015       nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
3016       nvl(intr.resource_id, -1)                            AGENT_ID,
3017       nvl(intr.party_id, -1)                               PARTY_ID,
3018       trunc(intr.last_update_date)                         PERIOD_START_DATE,
3019       to_number(to_char(intr.last_update_date, 'J'))       TIME_ID,
3020       '00:00'                                              PERIOD_START_TIME,
3021       NVL(intr.outcome_id,-1)                              OUTCOME_ID,
3022       NVL(intr.result_id,-1)                               RESULT_ID,
3023       NVL(intr.reason_id,-1)                               REASON_ID,
3024       0                                                    EMAILS_OFFERED_IN_PERIOD,
3025       0                                                    EMAILS_FETCHED_IN_PERIOD,
3026       0                                                    EMAILS_REPLIED_IN_PERIOD,
3027       0                                                    AGENT_RESP_TIME_IN_PERIOD,
3028       0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
3029       0                                                    AGENT_EMAILS_RPLD_BY_GOAL,
3030       0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
3031       0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
3032       0                                                    EMAILS_ASSIGNED_IN_PERIOD,
3033       0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
3034       0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
3035       0                                                    EMAILS_DELETED_IN_PERIOD,
3036       0                                                    EMAIL_RESP_TIME_IN_PERIOD,
3037       0                                                    SR_CREATED_IN_PERIOD,
3038       0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
3039       0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
3040       0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
3041       0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
3042       COUNT(distinct mitm.media_id)                        emails_composed_in_period,
3043       COUNT(DISTINCT intr.interaction_id)                  emails_orr_count_in_period,
3044       0                                                    accumulated_open_emails,
3045       0                                                    accumulated_emails_in_queue,
3046       0                                                    accumulated_emails_one_day,
3047       0                                                    accumulated_emails_three_days,
3048       0                                                    accumulated_emails_week,
3049       0                                                    accumulated_emails_week_plus,
3050 	 0                                                    EMAILS_REROUTED_IN_PERIOD,
3051 	 0                                                    LEADS_CREATED_IN_PERIOD
3052     FROM
3053       JTF_IH_MEDIA_ITEMS mitm,
3054       JTF_IH_MEDIA_ITEM_LC_SEGS segs,
3055       JTF_IH_MEDIA_ITM_LC_SEG_TYS seg_type,
3056       JTF_IH_ACTIVITIES actv,
3057       JTF_IH_INTERACTIONS intr,
3058     --
3059     --Changes for R12
3060     --
3061     (
3062     select name, max(route_classification_id) route_classification_id
3063     from iem_route_classifications
3064     group by name
3065     ) irc
3066     WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
3067     AND   mitm.direction = 'OUTBOUND'
3068     AND   mitm.media_id = segs.media_id
3069     AND   segs.milcs_type_id = seg_type.milcs_type_id
3070     AND   seg_type.milcs_code = 'EMAIL_COMPOSE'
3071     AND   mitm.classification  = irc.name(+)
3072  --   AND   mitm.media_id        = actv.media_id
3073    AND   segs.media_id        = actv.media_id
3074     AND   actv.interaction_id  = intr.interaction_id
3075     AND   intr.LAST_UPDATE_DATE BETWEEN  g_collect_start_date and g_collect_end_date
3076     AND   intr.outcome_id IS NOT NULL
3077     GROUP BY
3078       nvl(mitm.source_id, -1),
3079       nvl(irc.route_classification_id, -1),
3080       nvl(intr.resource_id, -1),
3081       nvl(intr.party_id, -1),
3082       trunc(intr.last_update_date),
3083       to_number(to_char(intr.last_update_date, 'J')),
3084       NVL(intr.outcome_id,-1),
3085       NVL(intr.result_id,-1),
3086       NVL(intr.reason_id,-1)
3087 )inv2
3088 GROUP BY
3089       inv2.email_account_id,
3090       inv2.email_classification_id,
3091       inv2.agent_id,
3092       inv2.party_id,
3093       inv2.time_id,
3094       inv2.period_start_date,
3098       inv2.reason_id
3095       inv2.period_start_time,
3096       inv2.outcome_id,
3097       inv2.result_id,
3099 )  change
3100   ON (
3101       fact.email_account_id = change.email_account_id
3102       AND fact.email_classification_id = change.email_classification_id
3103       AND fact.agent_id = change.agent_id
3104       AND fact.party_id = change.party_id
3105       AND fact.time_id = change.time_id
3106       AND fact.period_type_id = change.period_type_id
3107       AND fact.period_start_date = change.period_start_date
3108       AND fact.period_start_time = change.period_start_time
3109       AND fact.outcome_id = change.outcome_id
3110       AND fact.result_id = change.result_id
3111       AND fact.reason_id = change.reason_id )
3112   WHEN MATCHED THEN
3113     UPDATE
3114       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
3115              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
3116       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
3117              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
3118       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
3119              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
3120       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
3121              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
3122       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
3123                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
3124       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
3125              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
3126       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
3127              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
3128       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
3129              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
3130       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
3131              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
3132       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
3133              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
3134       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
3135              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
3136       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
3137              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
3138       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
3139              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
3140       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
3141              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
3142       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
3143              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
3144       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
3145              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
3146       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
3147              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
3148       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
3149              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
3150       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
3151              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
3152       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
3153              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
3154 --
3155 --Note that accumulated measures are not added together - they are replaced by the new
3156 --calculated value as they are not additive.
3157 --
3158       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
3159       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
3160       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
3161       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
3162       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
3166       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
3163       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
3164       ,fact.last_updated_by = change.last_updated_by
3165       ,fact.last_update_date = change.last_update_date
3167              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
3168       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
3169              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
3170   WHEN NOT MATCHED THEN
3171     INSERT (
3172       fact.email_account_id,
3173       fact.email_classification_id,
3174       fact.agent_id,
3175       fact.party_id,
3176       fact.time_id,
3177       fact.period_type_id,
3178       fact.period_start_date,
3179       fact.period_start_time,
3180       fact.outcome_id,
3181       fact.result_id,
3182       fact.reason_id,
3183       fact.created_by,
3184       fact.creation_date,
3185       fact.last_updated_by,
3186       fact.last_update_date,
3187       fact.emails_offered_in_period,
3188       fact.emails_fetched_in_period,
3189       fact.emails_replied_in_period,
3190       fact.emails_rpld_by_goal_in_period,
3191       fact.AGENT_EMAILS_RPLD_BY_GOAL,
3192       fact.emails_deleted_in_period,
3193       fact.emails_trnsfrd_out_in_period,
3194       fact.emails_trnsfrd_in_in_period,
3195       fact.emails_assigned_in_period,
3196       fact.emails_auto_routed_in_period,
3197       fact.emails_auto_uptd_sr_in_period,
3198       fact.email_resp_time_in_period,
3199       fact.agent_resp_time_in_period,
3200       fact.sr_created_in_period,
3201       fact.emails_rsl_and_trfd_in_period,
3202       fact.emails_orr_count_in_period,
3203       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
3204       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
3205       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
3206       fact.emails_composed_in_period,
3207       fact.accumulated_open_emails,
3208       fact.accumulated_emails_in_queue,
3209       fact.accumulated_emails_one_day,
3210       fact.accumulated_emails_three_days,
3211       fact.accumulated_emails_week,
3212       fact.accumulated_emails_week_plus,
3213       fact.request_id,
3214       fact.program_application_id,
3215       fact.program_id,
3216       fact.program_update_date,
3217       fact.emails_rerouted_in_period,
3218       fact.leads_created_in_period )
3219     VALUES (
3220       change.email_account_id,
3221       change.email_classification_id,
3222       change.agent_id,
3223       change.party_id,
3224       change.time_id,
3225       change.period_type_id,
3226       change.period_start_date,
3227       change.period_start_time,
3228       change.outcome_id,
3229       change.result_id,
3230       change.reason_id,
3231       change.created_by,
3232       change.creation_date,
3233       change.last_updated_by,
3234       change.last_update_date,
3235       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
3236       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
3237       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
3238       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
3239       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
3240       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
3241       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
3242       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
3243       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
3244       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
3245       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
3246       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
3247       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
3248       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
3249       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
3250       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
3251       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
3252       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
3253       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
3254       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
3255       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
3256       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
3257       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
3258       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
3259       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
3260       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
3261       change.request_id,
3262       change.program_application_id,
3263       change.program_id,
3264       change.program_update_date,
3265       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
3269 write_log('Number of rows updated in table bix_email_details_stg for Emails composed and ORR count  ' || to_char(SQL%ROWCOUNT));
3266       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
3267       );
3268 
3270 
3271 
3272 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
3273   USING
3274   (SELECT
3275       inv2.email_account_id
3276         email_account_id,
3277       inv2.email_classification_id
3278         email_classification_id,
3279       inv2.agent_id
3280         agent_id,
3281       inv2.party_id
3282         party_id,
3283       inv2.time_id
3284         time_id,
3285       1 period_type_id,
3286       inv2.period_start_date
3287         period_start_date,
3288       inv2.period_start_time
3289         period_start_time,
3290       inv2.outcome_id
3291         outcome_id,
3292       inv2.result_id
3293         result_id,
3294       inv2.reason_id
3295         reason_id,
3296       g_user_id
3297         created_by,
3298       g_sysdate
3299         creation_date,
3300       g_user_id
3301         last_updated_by,
3302       g_sysdate
3303         last_update_date,
3304       decode(sum(inv2.emails_offered_in_period), 0, to_number(null), sum(inv2.emails_offered_in_period))
3305         emails_offered_in_period,
3306       decode(sum(inv2.emails_fetched_in_period), 0, to_number(null), sum(inv2.emails_fetched_in_period))
3307         emails_fetched_in_period,
3308       decode(sum(inv2.emails_replied_in_period), 0, to_number(null), sum(inv2.emails_replied_in_period))
3309         emails_replied_in_period,
3310       decode(sum(inv2.emails_rpld_by_goal_in_period), 0, to_number(null), sum(inv2.emails_rpld_by_goal_in_period))
3311         emails_rpld_by_goal_in_period,
3312       decode(sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL))
3313         AGENT_EMAILS_RPLD_BY_GOAL,
3314       decode(sum(inv2.emails_deleted_in_period), 0, to_number(null), sum(inv2.emails_deleted_in_period))
3315         emails_deleted_in_period,
3316       decode(sum(inv2.emails_trnsfrd_out_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_out_in_period))
3317         emails_trnsfrd_out_in_period,
3318       decode(sum(inv2.emails_trnsfrd_in_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_in_in_period))
3319         emails_trnsfrd_in_in_period,
3320       decode(sum(inv2.emails_assigned_in_period), 0, to_number(null), sum(inv2.emails_assigned_in_period))
3321         emails_assigned_in_period,
3322       decode(sum(inv2.emails_auto_routed_in_period), 0, to_number(null), sum(inv2.emails_auto_routed_in_period))
3323         emails_auto_routed_in_period,
3324       decode(sum(inv2.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(inv2.emails_auto_uptd_sr_in_period))
3325         emails_auto_uptd_sr_in_period,
3326       decode(round(sum(inv2.email_resp_time_in_period)), 0, to_number(null), round(sum(inv2.email_resp_time_in_period)))
3327         email_resp_time_in_period,
3328       decode(round(sum(inv2.agent_resp_time_in_period)), 0, to_number(null), round(sum(inv2.agent_resp_time_in_period)))
3329         agent_resp_time_in_period,
3330       decode(sum(inv2.sr_created_in_period), 0, to_number(null), sum(inv2.sr_created_in_period))
3331         sr_created_in_period,
3332       decode(sum(inv2.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(inv2.emails_rsl_and_trfd_in_period))
3333         emails_rsl_and_trfd_in_period,
3334       decode(sum(EMAILS_AUTO_REPLIED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_REPLIED_IN_PERIOD))
3335         EMAILS_AUTO_REPLIED_IN_PERIOD,
3336       decode(sum(EMAILS_AUTO_DELETED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_DELETED_IN_PERIOD))
3337         EMAILS_AUTO_DELETED_IN_PERIOD,
3338       decode(sum(EMAILS_AUTO_RESOLVED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_RESOLVED_IN_PERIOD))
3339         EMAILS_AUTO_RESOLVED_IN_PERIOD,
3340       decode(sum(emails_composed_in_period), 0, to_number(null), sum(emails_composed_in_period))
3341         emails_composed_in_period,
3342       decode(sum(emails_orr_count_in_period), 0, to_number(null), sum(emails_orr_count_in_period))
3343         emails_orr_count_in_period,
3344       decode(sum(accumulated_open_emails), 0, to_number(null), sum(accumulated_open_emails))
3345         accumulated_open_emails,
3346       decode(sum(accumulated_emails_in_queue), 0, to_number(null), sum(accumulated_emails_in_queue))
3347         accumulated_emails_in_queue,
3348       decode(sum(accumulated_emails_one_day), 0, to_number(null), sum(accumulated_emails_one_day))
3349         accumulated_emails_one_day,
3350       decode(sum(accumulated_emails_three_days), 0, to_number(null), sum(accumulated_emails_three_days))
3351         accumulated_emails_three_days,
3352       decode(sum(accumulated_emails_week), 0, to_number(null), sum(accumulated_emails_week))
3353         accumulated_emails_week,
3354       decode(sum(accumulated_emails_week_plus), 0, to_number(null), sum(accumulated_emails_week_plus))
3355         accumulated_emails_week_plus,
3356       decode(sum(LEADS_CREATED_IN_PERIOD), 0, to_number(null), sum(LEADS_CREATED_IN_PERIOD))
3357        LEADS_CREATED_IN_PERIOD,
3358       decode(sum(EMAILS_REROUTED_IN_PERIOD), 0, to_number(null), sum(EMAILS_REROUTED_IN_PERIOD))
3359         EMAILS_REROUTED_IN_PERIOD,
3360       g_request_id
3361         request_id,
3362       g_program_appl_id
3363         program_application_id,
3364       g_program_id
3365         program_id,
3366       g_sysdate
3367         program_update_date
3368    FROM
3369     (
3370 /* Query 7  -Part I*/
3371     SELECT
3372       nvl(iview.email_account_id, -1)          EMAIL_ACCOUNT_ID,
3373       nvl(iview.email_classification_id, -1)   EMAIL_CLASSIFICATION_ID,
3374       nvl(iview.resource_id, -1)               AGENT_ID,
3375       nvl(iview.party_id, -1)                  PARTY_ID,
3376       trunc(ftd.start_date)                    PERIOD_START_DATE,
3377       to_number(to_char(ftd.start_date, 'J'))  TIME_ID,
3378       '00:00'                                  PERIOD_START_TIME,
3382       0                                        EMAILS_OFFERED_IN_PERIOD,
3379       -1                                       OUTCOME_ID,
3380       -1                                       RESULT_ID,
3381       -1                                       REASON_ID,
3383       0                                        EMAILS_FETCHED_IN_PERIOD,
3384       0                                        EMAILS_REPLIED_IN_PERIOD,
3385       0                                        AGENT_RESP_TIME_IN_PERIOD,
3386       0                                        EMAILS_RPLD_BY_GOAL_IN_PERIOD,
3387       0                                        AGENT_EMAILS_RPLD_BY_GOAL,
3388       0                                        EMAILS_TRNSFRD_OUT_IN_PERIOD,
3389       0                                        EMAILS_TRNSFRD_IN_IN_PERIOD,
3390       0                                        EMAILS_ASSIGNED_IN_PERIOD,
3391       0                                        EMAILS_AUTO_ROUTED_IN_PERIOD,
3392       0                                        EMAILS_AUTO_UPTD_SR_IN_PERIOD,
3393       0                                        EMAILS_DELETED_IN_PERIOD,
3394       0                                        EMAIL_RESP_TIME_IN_PERIOD,
3395       0                                        SR_CREATED_IN_PERIOD,
3396       0                                        EMAILS_RSL_AND_TRFD_IN_PERIOD,
3397       0                                        EMAILS_AUTO_REPLIED_IN_PERIOD,
3398       0                                        EMAILS_AUTO_DELETED_IN_PERIOD,
3399       0                                        EMAILS_AUTO_RESOLVED_IN_PERIOD,
3400       0                                        emails_composed_in_period,
3401       0                                        emails_orr_count_in_period,
3402       sum(CASE WHEN ((iview.end_date_time - ftd.start_date) > 1) THEN 1
3403                WHEN (((iview.end_date_time - ftd.start_date) <= 1) AND (flag = 1)) THEN 1
3404                ELSE 0 END)                     accumulated_open_emails,
3405       0                                        accumulated_emails_in_queue,
3406     sum(CASE WHEN
3407           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time >= 0 AND
3408            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 1 AND
3409            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3410                                           accumulated_emails_one_day,
3411       sum(CASE WHEN
3412           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 1 AND
3413            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 3 AND
3414            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3415                                           accumulated_emails_three_days,
3416       sum(CASE WHEN
3417           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 3 AND
3418            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 7 AND
3419            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3420                                           accumulated_emails_week,
3421       sum(CASE WHEN
3422           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 7 AND
3423            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3424                                           accumulated_emails_week_plus,
3425 	 0                                                    EMAILS_REROUTED_IN_PERIOD,
3426 	 0                                                    LEADS_CREATED_IN_PERIOD
3427     FROM
3428       fii_time_day ftd,
3429 (
3430 /* Query 7  -Part I*/SELECT
3431         media_id                               MEDIA_ID,
3432         nvl(email_account_id, -1)              EMAIL_ACCOUNT_ID,
3433         nvl(email_classification_id, -1)       EMAIL_CLASSIFICATION_ID,
3434         nvl(resource_id,-1)                    RESOURCE_ID,
3435         nvl(party_id, -1)                      PARTY_ID,
3436         decode(sign(max(seg_start_date_time) - g_collect_start_date), 1, max(seg_start_date_time),g_collect_start_date)
3437                                                START_DATE_TIME,
3438         g_collect_end_date                     END_DATE_TIME,
3439 	max(media_start_date_time)             MEDIA_START_DATE_TIME,
3440         1                                      FLAG
3441 FROM
3442       (
3443       /* Query 7  -Part I*/
3444 	  SELECT   /*+ ordered INDEX(MSEG JTF_IH_MEDIA_ITEM_LC_SEGS_N3) use_nl(mseg,mitm,act,int) */
3445         mitm.media_id                        MEDIA_ID,
3446 	mseg.milcs_id                        MILCS_ID,
3447         nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
3448         nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
3449         nvl(mseg.resource_id,-1)             RESOURCE_ID,
3450         first_value(int.party_id) over(partition by act.media_id order by act.interaction_id DESC) PARTY_ID,
3451         mseg.start_date_time                 SEG_START_DATE_TIME,
3452         mitm.start_date_time                 MEDIA_START_DATE_TIME
3453       FROM
3454         JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
3455 		JTF_IH_MEDIA_ITEMS mitm,
3456         JTF_IH_ACTIVITIES act,
3457         JTF_IH_INTERACTIONS int,
3458     (
3459     select name, max(route_classification_id) route_classification_id
3460     from iem_route_classifications
3461     group by name
3462     ) cls
3463       WHERE 1=1
3464 	  --mitm.media_item_type = 'EMAIL'
3465       AND   mitm.media_id = act.media_id
3466       AND   int.interaction_id = act.interaction_id
3467       AND   mitm.direction = 'INBOUND'
3468       AND   mitm.classification = cls.name(+)
3472       AND   NOT EXISTS
3469       AND   mitm.media_id = mseg.media_id
3470       AND   mseg.start_date_time < g_collect_end_date
3471       AND   mseg.milcs_type_id in (g_fetch,g_transfer,g_a_routed,g_assigned,g_assign_open)
3473        (
3474         SELECT  1
3475         FROM JTF_IH_MEDIA_ITEM_LC_SEGS mseg1
3476         WHERE mseg.media_id = mseg1.media_id
3477 	 /* Commenting this join out because the supervisor can perform some of the operations below.
3478 	 Irrespective of which user did it, the email is not open any more */
3479        -- AND   mseg.resource_id = mseg1.resource_id
3480         AND   mseg1.milcs_type_id IN (g_deleted,g_transferred,g_reply,g_assigned,g_rerouted_acct,g_rerouted_class,g_Requeued,g_escalated)
3481         AND   mseg1.START_DATE_TIME >= mseg.START_DATE_TIME
3482         AND   mseg1.start_date_time < g_collect_end_date
3483         AND   mseg1.milcs_id <> mseg.milcs_id
3484        )
3485 )
3486 group by media_id, nvl(email_account_id, -1), nvl(email_classification_id, -1),
3487         nvl(resource_id,-1), nvl(party_id, -1), milcs_id
3488       UNION
3489 	  	/* Query 7  -Part II*/
3490 --Not open any more but was open in the past - note this does not need the interactions, activities
3491 --merged into the same query, since act.start_date_time would fall into the collect start and end buckets
3492 SELECT
3493 MEDIA_ID,
3494 EMAIL_ACCOUNT_ID,
3495 EMAIL_CLASSIFICATION_ID,
3496 RESOURCE_ID,
3497 PARTY_ID,
3498 START_DATE_TIME,
3499 min(END_DATE_TIME)             END_DATE_TIME,
3500 MEDIA_START_DATE_TIME,
3501 0                                    FLAG
3502  FROM
3503  (
3504  SELECT /*+ ordered INDEX(MSEG JTF_IH_MEDIA_ITEM_LC_SEGS_N3) use_nl(mseg,mitm)*/
3505         mitm.media_id                        MEDIA_ID,
3506         nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
3507         nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
3508         nvl(mseg.resource_id, -1)            RESOURCE_ID,
3509            nvl((  SELECT
3510           distinct first_value(intr.party_id) over(order by actv.interaction_id desc) party_id
3511          FROM
3512            jtf_ih_activities actv,
3513            jtf_ih_interactions intr
3514          WHERE
3515          mitm.media_id = actv.media_id
3516         AND actv.interaction_id = intr.interaction_id
3517 		), -1)                       PARTY_ID,
3518         decode(sign(mseg.start_date_time - g_collect_start_date), 1, mseg.start_date_time, g_collect_start_date)
3519                                              START_DATE_TIME,
3520         inv2.start_date_time             END_DATE_TIME,
3521         mitm.start_date_time                 MEDIA_START_DATE_TIME
3522            FROM
3523 		      JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
3524 		      JTF_IH_MEDIA_ITEMS mitm,
3525 			   (
3526 			select name, max(route_classification_id) route_classification_id
3527 			from iem_route_classifications
3528 			group by name
3529 				) cls ,
3530 				(
3531 					SELECT  /*+  INDEX(MSEG1 JTF_IH_MEDIA_ITEM_LC_SEGS_N3) */
3532 							mseg1.media_id         MEDIA_ID,
3533 							mseg1.resource_id      RESOURCE_ID,
3534 							mseg1.start_date_time  START_DATE_TIME
3535 					FROM    JTF_IH_MEDIA_ITEM_LC_SEGS mseg1
3536 					WHERE   mseg1.milcs_type_id IN (g_deleted,g_transferred,g_reply,g_assigned,g_rerouted_acct,g_rerouted_class,g_Requeued,g_escalated)
3537 					  AND     mseg1.START_DATE_TIME < g_collect_end_date
3538 				) inv2
3539       WHERE  mitm.media_id=mseg.media_id
3540       AND    inv2.media_id = mseg.media_id
3541 --      AND    inv2.resource_id = mseg.resource_id
3542 	    /* Commenting this join out because the supervisor  performs some  operations like delete and requeued.
3543 	 Irrespective of which user did it, the email was not open. Lets say Email fetched by agent a, email transferred by a,
3544 	 email transfer to b, email requeue to c. If we remove this condition, we anyways take min (inv2.start_date_time),
3545 	 so a will get the email transferred start date time (done by him), b will get requeue start date time (done by c) */
3546       --AND    mitm.media_item_type = 'EMAIL'
3547       AND    mitm.direction = 'INBOUND'
3548       AND    mitm.classification = cls.name(+)
3549       AND    mseg.start_date_time < g_collect_end_date
3550       AND    mseg.milcs_type_id in ( g_fetch,g_transfer,g_a_routed,g_assigned,g_assign_open)
3551       AND    inv2.START_DATE_TIME >= mseg.START_DATE_TIME
3552 
3553 )
3554 GROUP BY
3555 MEDIA_ID,
3556 EMAIL_ACCOUNT_ID,
3557 EMAIL_CLASSIFICATION_ID,
3558 RESOURCE_ID,
3559 PARTY_ID,
3560 START_DATE_TIME,
3561 MEDIA_START_DATE_TIME
3562 
3563 		) iview
3564     WHERE ftd.start_date between trunc(iview.start_date_time) AND iview.end_date_time
3565     GROUP BY
3566       iview.email_account_id
3567       ,iview.email_classification_id
3568       ,iview.resource_id
3569       ,iview.party_id
3570       ,ftd.start_date
3571 )inv2
3572 GROUP BY
3573       inv2.email_account_id,
3574       inv2.email_classification_id,
3575       inv2.agent_id,
3576       inv2.party_id,
3577       inv2.time_id,
3578       inv2.period_start_date,
3579       inv2.period_start_time,
3580       inv2.outcome_id,
3581       inv2.result_id,
3582       inv2.reason_id
3583 )  change
3584   ON (
3585       fact.email_account_id = change.email_account_id
3586       AND fact.email_classification_id = change.email_classification_id
3587       AND fact.agent_id = change.agent_id
3588       AND fact.party_id = change.party_id
3589       AND fact.time_id = change.time_id
3590       AND fact.period_type_id = change.period_type_id
3591       AND fact.period_start_date = change.period_start_date
3592       AND fact.period_start_time = change.period_start_time
3593       AND fact.outcome_id = change.outcome_id
3594       AND fact.result_id = change.result_id
3595       AND fact.reason_id = change.reason_id )
3596   WHEN MATCHED THEN
3597     UPDATE
3601              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
3598       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
3599              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
3600       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
3602       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
3603              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
3604       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
3605              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
3606       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
3607                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
3608       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
3609              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
3610       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
3611              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
3612       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
3613              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
3614       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
3615              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
3616       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
3617              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
3618       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
3619              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
3620       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
3621              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
3622       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
3623              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
3624       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
3625              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
3626       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
3627              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
3628       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
3629              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
3630       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
3631              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
3632       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
3633              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
3634       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
3635              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
3636       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
3637              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
3638 --
3639 --Note that accumulated measures are not added together - they are replaced by the new
3640 --calculated value as they are not additive.
3641 --
3642       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
3643       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
3644       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
3645       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
3646       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
3647       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
3648       ,fact.last_updated_by = change.last_updated_by
3649       ,fact.last_update_date = change.last_update_date
3650       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
3651              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
3652       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
3653              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
3654   WHEN NOT MATCHED THEN
3655     INSERT (
3656       fact.email_account_id,
3657       fact.email_classification_id,
3661       fact.period_type_id,
3658       fact.agent_id,
3659       fact.party_id,
3660       fact.time_id,
3662       fact.period_start_date,
3663       fact.period_start_time,
3664       fact.outcome_id,
3665       fact.result_id,
3666       fact.reason_id,
3667       fact.created_by,
3668       fact.creation_date,
3669       fact.last_updated_by,
3670       fact.last_update_date,
3671       fact.emails_offered_in_period,
3672       fact.emails_fetched_in_period,
3673       fact.emails_replied_in_period,
3674       fact.emails_rpld_by_goal_in_period,
3675       fact.AGENT_EMAILS_RPLD_BY_GOAL,
3676       fact.emails_deleted_in_period,
3677       fact.emails_trnsfrd_out_in_period,
3678       fact.emails_trnsfrd_in_in_period,
3679       fact.emails_assigned_in_period,
3680       fact.emails_auto_routed_in_period,
3681       fact.emails_auto_uptd_sr_in_period,
3682       fact.email_resp_time_in_period,
3683       fact.agent_resp_time_in_period,
3684       fact.sr_created_in_period,
3685       fact.emails_rsl_and_trfd_in_period,
3686       fact.emails_orr_count_in_period,
3687       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
3688       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
3689       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
3690       fact.emails_composed_in_period,
3691       fact.accumulated_open_emails,
3692       fact.accumulated_emails_in_queue,
3693       fact.accumulated_emails_one_day,
3694       fact.accumulated_emails_three_days,
3695       fact.accumulated_emails_week,
3696       fact.accumulated_emails_week_plus,
3697       fact.request_id,
3698       fact.program_application_id,
3699       fact.program_id,
3700       fact.program_update_date,
3701       fact.emails_rerouted_in_period,
3702       fact.leads_created_in_period )
3703     VALUES (
3704       change.email_account_id,
3705       change.email_classification_id,
3706       change.agent_id,
3707       change.party_id,
3708       change.time_id,
3709       change.period_type_id,
3710       change.period_start_date,
3711       change.period_start_time,
3712       change.outcome_id,
3713       change.result_id,
3714       change.reason_id,
3715       change.created_by,
3716       change.creation_date,
3717       change.last_updated_by,
3718       change.last_update_date,
3719       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
3720       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
3721       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
3722       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
3723       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
3724       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
3725       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
3726       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
3727       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
3728       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
3729       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
3730       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
3731       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
3732       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
3733       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
3734       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
3735       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
3736       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
3737       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
3738       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
3739       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
3740       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
3741       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
3742       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
3743       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
3744       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
3745       change.request_id,
3746       change.program_application_id,
3747       change.program_id,
3748       change.program_update_date,
3749       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
3750       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
3751       );
3752 
3753 write_log('Number of rows updated in table bix_email_details_stg for Emails Open  ' || to_char(SQL%ROWCOUNT));
3754 
3755 
3756 
3757 
3758 
3759 MERGE INTO BIX_EMAIL_DETAILS_STG  fact
3760   USING
3761   (SELECT
3762       inv2.email_account_id
3763         email_account_id,
3764       inv2.email_classification_id
3765         email_classification_id,
3766       inv2.agent_id
3767         agent_id,
3768       inv2.party_id
3769         party_id,
3770       inv2.time_id
3771         time_id,
3772       1 period_type_id,
3773       inv2.period_start_date
3774         period_start_date,
3775       inv2.period_start_time
3776         period_start_time,
3780         result_id,
3777       inv2.outcome_id
3778         outcome_id,
3779       inv2.result_id
3781       inv2.reason_id
3782         reason_id,
3783       g_user_id
3784         created_by,
3785       g_sysdate
3786         creation_date,
3787       g_user_id
3788         last_updated_by,
3789       g_sysdate
3790         last_update_date,
3791       decode(sum(inv2.emails_offered_in_period), 0, to_number(null), sum(inv2.emails_offered_in_period))
3792         emails_offered_in_period,
3793       decode(sum(inv2.emails_fetched_in_period), 0, to_number(null), sum(inv2.emails_fetched_in_period))
3794         emails_fetched_in_period,
3795       decode(sum(inv2.emails_replied_in_period), 0, to_number(null), sum(inv2.emails_replied_in_period))
3796         emails_replied_in_period,
3797       decode(sum(inv2.emails_rpld_by_goal_in_period), 0, to_number(null), sum(inv2.emails_rpld_by_goal_in_period))
3798         emails_rpld_by_goal_in_period,
3799       decode(sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL))
3800         AGENT_EMAILS_RPLD_BY_GOAL,
3801       decode(sum(inv2.emails_deleted_in_period), 0, to_number(null), sum(inv2.emails_deleted_in_period))
3802         emails_deleted_in_period,
3803       decode(sum(inv2.emails_trnsfrd_out_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_out_in_period))
3804         emails_trnsfrd_out_in_period,
3805       decode(sum(inv2.emails_trnsfrd_in_in_period), 0, to_number(null), sum(inv2.emails_trnsfrd_in_in_period))
3806         emails_trnsfrd_in_in_period,
3807       decode(sum(inv2.emails_assigned_in_period), 0, to_number(null), sum(inv2.emails_assigned_in_period))
3808         emails_assigned_in_period,
3809       decode(sum(inv2.emails_auto_routed_in_period), 0, to_number(null), sum(inv2.emails_auto_routed_in_period))
3810         emails_auto_routed_in_period,
3811       decode(sum(inv2.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(inv2.emails_auto_uptd_sr_in_period))
3812         emails_auto_uptd_sr_in_period,
3813       decode(round(sum(inv2.email_resp_time_in_period)), 0, to_number(null), round(sum(inv2.email_resp_time_in_period)))
3814         email_resp_time_in_period,
3815       decode(round(sum(inv2.agent_resp_time_in_period)), 0, to_number(null), round(sum(inv2.agent_resp_time_in_period)))
3816         agent_resp_time_in_period,
3817       decode(sum(inv2.sr_created_in_period), 0, to_number(null), sum(inv2.sr_created_in_period))
3818         sr_created_in_period,
3819       decode(sum(inv2.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(inv2.emails_rsl_and_trfd_in_period))
3820         emails_rsl_and_trfd_in_period,
3821       decode(sum(EMAILS_AUTO_REPLIED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_REPLIED_IN_PERIOD))
3822         EMAILS_AUTO_REPLIED_IN_PERIOD,
3823       decode(sum(EMAILS_AUTO_DELETED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_DELETED_IN_PERIOD))
3824         EMAILS_AUTO_DELETED_IN_PERIOD,
3825       decode(sum(EMAILS_AUTO_RESOLVED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_RESOLVED_IN_PERIOD))
3826         EMAILS_AUTO_RESOLVED_IN_PERIOD,
3827       decode(sum(emails_composed_in_period), 0, to_number(null), sum(emails_composed_in_period))
3828         emails_composed_in_period,
3829       decode(sum(emails_orr_count_in_period), 0, to_number(null), sum(emails_orr_count_in_period))
3830         emails_orr_count_in_period,
3831       decode(sum(accumulated_open_emails), 0, to_number(null), sum(accumulated_open_emails))
3832         accumulated_open_emails,
3833       decode(sum(accumulated_emails_in_queue), 0, to_number(null), sum(accumulated_emails_in_queue))
3834         accumulated_emails_in_queue,
3835       decode(sum(accumulated_emails_one_day), 0, to_number(null), sum(accumulated_emails_one_day))
3836         accumulated_emails_one_day,
3837       decode(sum(accumulated_emails_three_days), 0, to_number(null), sum(accumulated_emails_three_days))
3838         accumulated_emails_three_days,
3839       decode(sum(accumulated_emails_week), 0, to_number(null), sum(accumulated_emails_week))
3840         accumulated_emails_week,
3841       decode(sum(accumulated_emails_week_plus), 0, to_number(null), sum(accumulated_emails_week_plus))
3842         accumulated_emails_week_plus,
3843       decode(sum(LEADS_CREATED_IN_PERIOD), 0, to_number(null), sum(LEADS_CREATED_IN_PERIOD))
3844        LEADS_CREATED_IN_PERIOD,
3845       decode(sum(EMAILS_REROUTED_IN_PERIOD), 0, to_number(null), sum(EMAILS_REROUTED_IN_PERIOD))
3846         EMAILS_REROUTED_IN_PERIOD,
3847       g_request_id
3848         request_id,
3849       g_program_appl_id
3850         program_application_id,
3851       g_program_id
3852         program_id,
3853       g_sysdate
3854         program_update_date
3855    FROM
3856     (
3857 
3858  SELECT
3859       nvl(iview.email_account_id, -1)          EMAIL_ACCOUNT_ID,
3860       nvl(iview.email_classification_id, -1)   EMAIL_CLASSIFICATION_ID,
3861       -1                                       AGENT_ID,
3862       nvl(iview.party_id, -1)                  PARTY_ID,
3863       trunc(ftd.start_date)                    PERIOD_START_DATE,
3864       to_number(to_char(ftd.start_date, 'J'))  TIME_ID,
3865       '00:00'                                  PERIOD_START_TIME,
3866 	     -1                                       OUTCOME_ID,
3867       -1                                       RESULT_ID,
3868       -1                                       REASON_ID,
3869       0                                        EMAILS_OFFERED_IN_PERIOD,
3870       0                                        EMAILS_FETCHED_IN_PERIOD,
3871       0                                        EMAILS_REPLIED_IN_PERIOD,
3872       0                                        AGENT_RESP_TIME_IN_PERIOD,
3873       0                                        EMAILS_RPLD_BY_GOAL_IN_PERIOD,
3874       0                                        AGENT_EMAILS_RPLD_BY_GOAL,
3875       0                                        EMAILS_TRNSFRD_OUT_IN_PERIOD,
3876       0                                        EMAILS_TRNSFRD_IN_IN_PERIOD,
3877       0                                        EMAILS_ASSIGNED_IN_PERIOD,
3881       0                                        EMAIL_RESP_TIME_IN_PERIOD,
3878       0                                        EMAILS_AUTO_ROUTED_IN_PERIOD,
3879       0                                        EMAILS_AUTO_UPTD_SR_IN_PERIOD,
3880       0                                        EMAILS_DELETED_IN_PERIOD,
3882       0                                        SR_CREATED_IN_PERIOD,
3883       0                                        EMAILS_RSL_AND_TRFD_IN_PERIOD,
3884       0                                        EMAILS_AUTO_REPLIED_IN_PERIOD,
3885       0                                        EMAILS_AUTO_DELETED_IN_PERIOD,
3886       0                                        EMAILS_AUTO_RESOLVED_IN_PERIOD,
3887       0                                        emails_composed_in_period,
3888       0                                        emails_orr_count_in_period,
3889       0                                        accumulated_open_emails,
3890       sum(CASE WHEN ((iview.end_date_time - ftd.start_date) > 1) THEN 1
3891                WHEN (((iview.end_date_time - ftd.start_date) <= 1) AND (flag = 1)) THEN 1
3892                ELSE 0 END)                     accumulated_emails_in_queue,
3893       sum(CASE WHEN
3894           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time >= 0 AND
3895            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 1 AND
3896            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3897                                           accumulated_emails_one_day,
3898       sum(CASE WHEN
3899           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 1 AND
3900            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 3 AND
3901            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3902                                           accumulated_emails_three_days,
3903       sum(CASE WHEN
3904           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 3 AND
3905            decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time <= 7 AND
3906            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3907                                           accumulated_emails_week,
3908       sum(CASE WHEN
3909           (decode(sign(iview.end_date_time - (ftd.start_date+1)), 1, ftd.start_date+1, iview.end_date_time) - media_start_date_time > 7 AND
3910            decode(sign((iview.end_date_time - ftd.start_date) -1), 1, 1, decode(flag, 1, 1, 0)) = 1) THEN 1 else 0 END)
3911                                           accumulated_emails_week_plus,
3912 	 0                                                    EMAILS_REROUTED_IN_PERIOD,
3913 	 0                                                    LEADS_CREATED_IN_PERIOD
3914     FROM
3915       fii_time_day ftd,
3916 --
3917 --Currently in QUEUE or in QUEUE until collect end date
3918 --
3919 (
3920 SELECT
3921          media_id                             MEDIA_ID,
3922          nvl(email_account_id, -1)            EMAIL_ACCOUNT_ID,
3923          nvl(email_classification_id, -1) EMAIL_CLASSIFICATION_ID,
3924          nvl(party_id, -1)                    PARTY_ID,
3925          decode(sign(max(seg_start_date_time) - g_collect_start_date), 1, max(seg_start_date_time), g_collect_start_date)
3926                                               START_DATE_TIME,
3927          g_collect_end_date                   END_DATE_TIME,
3928          max(media_start_date_time)           MEDIA_START_DATE_TIME,
3929          1                                    FLAG
3930 FROM
3931    (
3932       SELECT  /*+ ordered index(mseg JTF_IH_MEDIA_ITEM_LC_SEGS_N3) use_nl(mseg,mitm,act,int)*/
3933          mitm.media_id                        MEDIA_ID,
3934          mseg.milcs_id                        MILCS_ID,
3935          nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
3936          nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
3937          first_value(int.party_id) over(partition by act.media_id order by act.interaction_id DESC) PARTY_ID,
3938          mseg.start_date_time                 SEG_START_DATE_TIME,
3939          mitm.start_date_time                 MEDIA_START_DATE_TIME
3940        FROM
3941          JTF_IH_MEDIA_ITEM_LC_SEGS   mseg,
3942 		 JTF_IH_MEDIA_ITEMS          mitm,
3943          JTF_IH_ACTIVITIES act,
3944          JTF_IH_INTERACTIONS int,
3945     (
3946     select name, max(route_classification_id) route_classification_id
3947     from iem_route_classifications
3948     group by name
3949     ) cls
3950        WHERE
3951 	   --mitm.MEDIA_ITEM_TYPE = 'EMAIL' /* Is this necessary? Without it the unique filter is getting used*/
3952 	   1=1
3953        AND   mitm.DIRECTION       = 'INBOUND'
3954        AND   int.interaction_id = act.interaction_id
3955        AND   act.media_id         = mitm.media_id
3956        AND   mitm.classification  = cls.name(+)
3957        AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
3958        AND   mseg.START_DATE_TIME < g_collect_end_date
3959        AND   mseg.MILCS_TYPE_ID   = g_processing/* Requeued removed for bug 5337716*/
3960        AND   NOT EXISTS
3961         (
3962          SELECT
3963 	         1
3964          FROM JTF_IH_MEDIA_ITEM_LC_SEGS   mseg1
3965          WHERE  mseg.MEDIA_ID       = mseg1.MEDIA_ID
3966          AND    mseg1.MILCS_TYPE_ID in (
3967 		 G_FETCH, G_RESOLVED, G_A_REDIRECTED, G_A_DELETED, G_A_REPLY, G_OPEN, G_A_ROUTED, G_A_UPDATED_SR,
3968          G_ASSIGNED, G_ASSIGN_OPEN,G_DELETED)
3969          AND    mseg1.START_DATE_TIME >= mseg.START_DATE_TIME
3970          AND    mseg1.START_DATE_TIME < g_collect_end_date
3971         )
3972    )
3973 GROUP BY media_id, milcs_id,nvl(email_account_id, -1), nvl(email_classification_id, -1) ,nvl(party_id, -1)
3977          nvl(mitm2.source_id, -1)              EMAIL_ACCOUNT_ID,
3974        UNION
3975        SELECT /*+ ordered  index(mseg2 JTF_IH_MEDIA_ITEM_LC_SEGS_N3) use_nl(mseg2,mitm2) */
3976          mitm2.media_id                        MEDIA_ID,
3978          nvl(cls2.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
3979          nvl(inv1.party_id, -1)                PARTY_ID,
3980          decode(sign(mseg2.start_date_time - g_collect_start_date), 1, mseg2.start_date_time, g_collect_start_date)
3981                                                START_DATE_TIME,
3982          min(inv2.start_date_time)              END_DATE_TIME,
3983          mitm2.start_date_time                 MEDIA_START_DATE_TIME,
3984          0                                     FLAG
3985        FROM
3986          JTF_IH_MEDIA_ITEM_LC_SEGS mseg2,
3987          JTF_IH_MEDIA_ITEMS mitm2,
3988 	     (
3989 		select name, max(route_classification_id) route_classification_id
3990 	    from iem_route_classifications
3991 	    group by name
3992 		) cls2,
3993          (
3994              SELECT /*+ index(mseg3 JTF_IH_MEDIA_ITEM_LC_SEGS_N3) */
3995                     mseg3.media_id,
3996                     mseg3.resource_id,
3997                     mseg3.start_date_time
3998              FROM   JTF_IH_MEDIA_ITEM_LC_SEGS   mseg3
3999              WHERE  mseg3.milcs_type_id IN (G_FETCH,G_OPEN,G_A_ROUTED,G_RESOLVED,G_ASSIGNED,G_ASSIGN_OPEN,G_A_UPDATED_SR,G_A_REPLY,G_A_DELETED,G_A_REDIRECTED)
4000              AND    mseg3.START_DATE_TIME < g_collect_end_date
4001          ) inv2,
4002          (
4003 			  SELECT /*+ ordered index(segs JTF_IH_MEDIA_ITEM_LC_SEGS_N3)  */
4004            distinct actv.media_id        media_id,
4005            first_value(intr.party_id)
4006            over(partition by actv.media_id order by actv.interaction_id desc) party_id
4007          FROM
4008            jtf_ih_media_item_lc_segs segs,
4009            jtf_ih_activities actv,
4010            jtf_ih_interactions intr
4011          WHERE segs.media_id = actv.media_id
4012          AND actv.interaction_id = intr.interaction_id
4013          AND segs.START_DATE_TIME BETWEEN g_collect_start_date AND g_collect_end_date
4014          AND segs.milcs_type_id IN (
4015 		 G_FETCH, G_RESOLVED, G_A_REDIRECTED, G_A_DELETED, G_A_REPLY, G_OPEN, G_A_ROUTED, G_A_UPDATED_SR,
4016          G_ASSIGNED, G_ASSIGN_OPEN,G_DELETED )
4017          ) inv1
4018        WHERE
4019 	   --mitm2.MEDIA_ITEM_TYPE = 'EMAIL'
4020 	   1=1
4021        AND   mitm2.DIRECTION       = 'INBOUND'
4022        AND   mseg2.media_id        = mitm2.media_id
4023        AND   mitm2.classification  = cls2.name(+)
4024        AND   mitm2.MEDIA_ID        = inv2.MEDIA_ID
4025        AND   mitm2.media_id         = inv1.media_id
4026        AND   mseg2.START_DATE_TIME < g_collect_end_date
4027        AND   mseg2.MILCS_TYPE_ID   = g_processing
4028        AND   inv2.START_DATE_TIME   >= mseg2.START_DATE_TIME
4029        GROUP BY
4030          mitm2.media_id,
4031          nvl(mitm2.source_id, -1),
4032          nvl(cls2.route_classification_id, -1),
4033     inv1.party_id,
4034          mseg2.start_date_time,
4035          mitm2.start_date_time
4036 	 ) iview
4037     WHERE ftd.start_date between trunc(iview.start_date_time) AND iview.end_date_time
4038     GROUP BY
4039       iview.email_account_id
4040       ,iview.email_classification_id
4041       ,iview.party_id
4042       ,ftd.start_date
4043 )inv2
4044 GROUP BY
4045       inv2.email_account_id,
4046       inv2.email_classification_id,
4047       inv2.agent_id,
4048       inv2.party_id,
4049       inv2.time_id,
4050       inv2.period_start_date,
4051       inv2.period_start_time,
4052       inv2.outcome_id,
4053       inv2.result_id,
4054       inv2.reason_id
4055 )  change
4056   ON (
4057       fact.email_account_id = change.email_account_id
4058       AND fact.email_classification_id = change.email_classification_id
4059       AND fact.agent_id = change.agent_id
4060       AND fact.party_id = change.party_id
4061       AND fact.time_id = change.time_id
4062       AND fact.period_type_id = change.period_type_id
4063       AND fact.period_start_date = change.period_start_date
4064       AND fact.period_start_time = change.period_start_time
4065       AND fact.outcome_id = change.outcome_id
4066       AND fact.result_id = change.result_id
4067       AND fact.reason_id = change.reason_id )
4068   WHEN MATCHED THEN
4069     UPDATE
4070       SET fact.emails_offered_in_period = DECODE(nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0),
4071              0, NULL, nvl(fact.emails_offered_in_period,0) + nvl(change.emails_offered_in_period,0))
4072       ,fact.emails_fetched_in_period = DECODE(nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0),
4073              0, NULL, nvl(fact.emails_fetched_in_period,0) + nvl(change.emails_fetched_in_period,0))
4074       ,fact.emails_replied_in_period = DECODE(nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0),
4075              0, NULL, nvl(fact.emails_replied_in_period,0) + nvl(change.emails_replied_in_period,0))
4076       ,fact.emails_rpld_by_goal_in_period = DECODE(nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,
4077              0), 0, NULL, nvl(fact.emails_rpld_by_goal_in_period,0) + nvl(change.emails_rpld_by_goal_in_period,0))
4078       ,fact.AGENT_EMAILS_RPLD_BY_GOAL = DECODE(nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,
4079                    0), 0, NULL, nvl(fact.AGENT_EMAILS_RPLD_BY_GOAL,0) + nvl(change.AGENT_EMAILS_RPLD_BY_GOAL,0))
4080       ,fact.emails_deleted_in_period = DECODE(nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0), 0, NULL,
4081              nvl(fact.emails_deleted_in_period,0) + nvl(change.emails_deleted_in_period,0))
4082       ,fact.emails_trnsfrd_out_in_period = DECODE(nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0),
4083              0, NULL, nvl(fact.emails_trnsfrd_out_in_period,0) + nvl(change.emails_trnsfrd_out_in_period,0))
4087              0, NULL, nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0))
4084       ,fact.emails_trnsfrd_in_in_period = DECODE(nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0),
4085              0, NULL, nvl(fact.emails_trnsfrd_in_in_period,0) + nvl(change.emails_trnsfrd_in_in_period,0))
4086       ,fact.emails_assigned_in_period = DECODE(nvl(fact.emails_assigned_in_period,0) + nvl(change.emails_assigned_in_period,0),
4088       ,fact.emails_auto_routed_in_period = DECODE(nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0),
4089              0, NULL, nvl(fact.emails_auto_routed_in_period,0) + nvl(change.emails_auto_routed_in_period,0))
4090       ,fact.emails_auto_uptd_sr_in_period = DECODE(nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0),
4091              0, NULL, nvl(fact.emails_auto_uptd_sr_in_period,0) + nvl(change.emails_auto_uptd_sr_in_period,0))
4092       ,fact.email_resp_time_in_period = DECODE(nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0),
4093              0, NULL, nvl(fact.email_resp_time_in_period,0) + nvl(change.email_resp_time_in_period,0))
4094       ,fact.agent_resp_time_in_period = DECODE(nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0),
4095              0, NULL, nvl(fact.agent_resp_time_in_period,0) + nvl(change.agent_resp_time_in_period,0))
4096       ,fact.sr_created_in_period = DECODE(nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0),
4097              0, NULL, nvl(fact.sr_created_in_period,0) + nvl(change.sr_created_in_period,0))
4098       ,fact.emails_rsl_and_trfd_in_period = DECODE(nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0),
4099              0, NULL, nvl(fact.emails_rsl_and_trfd_in_period,0) + nvl(change.emails_rsl_and_trfd_in_period,0))
4100       ,fact.emails_orr_count_in_period = DECODE(nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0),
4101              0, NULL, nvl(fact.emails_orr_count_in_period,0) + nvl(change.emails_orr_count_in_period,0))
4102       ,fact.EMAILS_AUTO_REPLIED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0),
4103              0, NULL, nvl(fact.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0))
4104       ,fact.EMAILS_AUTO_DELETED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0),
4105              0, NULL, nvl(fact.EMAILS_AUTO_DELETED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_DELETED_IN_PERIOD,0))
4106       ,fact.EMAILS_AUTO_RESOLVED_IN_PERIOD = DECODE(nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,
4107              0), 0, NULL, nvl(fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + nvl(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0))
4108       ,fact.emails_composed_in_period = DECODE(nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0),
4109              0, NULL, nvl(fact.emails_composed_in_period,0) + nvl(change.emails_composed_in_period,0))
4110 --
4111 --Note that accumulated measures are not added together - they are replaced by the new
4112 --calculated value as they are not additive.
4113 --
4114       ,fact.accumulated_open_emails = decode(change.accumulated_open_emails,0,to_number(NULL),change.accumulated_open_emails)
4115       ,fact.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue,0,to_number(NULL),change.accumulated_emails_in_queue)
4116       ,fact.accumulated_emails_one_day = decode(change.accumulated_emails_one_day,0,to_number(NULL),change.accumulated_emails_one_day)
4117       ,fact.accumulated_emails_three_days = decode(change.accumulated_emails_three_days,0,to_number(NULL),change.accumulated_emails_three_days)
4118       ,fact.accumulated_emails_week = decode(change.accumulated_emails_week,0,to_number(NULL),change.accumulated_emails_week)
4119       ,fact.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus,0,to_number(NULL),change.accumulated_emails_week_plus)
4120       ,fact.last_updated_by = change.last_updated_by
4121       ,fact.last_update_date = change.last_update_date
4122       ,fact.emails_rerouted_in_period = DECODE(nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0),
4123              0, NULL, nvl(fact.emails_rerouted_in_period,0) + nvl(change.emails_rerouted_in_period,0))
4124       ,fact.leads_created_in_period = DECODE(nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0),
4125              0, NULL, nvl(fact.leads_created_in_period,0) + nvl(change.leads_created_in_period,0))
4126   WHEN NOT MATCHED THEN
4127     INSERT (
4128       fact.email_account_id,
4129       fact.email_classification_id,
4130       fact.agent_id,
4131       fact.party_id,
4132       fact.time_id,
4133       fact.period_type_id,
4134       fact.period_start_date,
4135       fact.period_start_time,
4136       fact.outcome_id,
4137       fact.result_id,
4138       fact.reason_id,
4139       fact.created_by,
4140       fact.creation_date,
4141       fact.last_updated_by,
4142       fact.last_update_date,
4143       fact.emails_offered_in_period,
4144       fact.emails_fetched_in_period,
4145       fact.emails_replied_in_period,
4146       fact.emails_rpld_by_goal_in_period,
4147       fact.AGENT_EMAILS_RPLD_BY_GOAL,
4148       fact.emails_deleted_in_period,
4149       fact.emails_trnsfrd_out_in_period,
4150       fact.emails_trnsfrd_in_in_period,
4151       fact.emails_assigned_in_period,
4152       fact.emails_auto_routed_in_period,
4153       fact.emails_auto_uptd_sr_in_period,
4154       fact.email_resp_time_in_period,
4155       fact.agent_resp_time_in_period,
4156       fact.sr_created_in_period,
4157       fact.emails_rsl_and_trfd_in_period,
4158       fact.emails_orr_count_in_period,
4159       fact.EMAILS_AUTO_REPLIED_IN_PERIOD,
4160       fact.EMAILS_AUTO_DELETED_IN_PERIOD,
4161       fact.EMAILS_AUTO_RESOLVED_IN_PERIOD,
4162       fact.emails_composed_in_period,
4163       fact.accumulated_open_emails,
4164       fact.accumulated_emails_in_queue,
4165       fact.accumulated_emails_one_day,
4166       fact.accumulated_emails_three_days,
4167       fact.accumulated_emails_week,
4171       fact.program_id,
4168       fact.accumulated_emails_week_plus,
4169       fact.request_id,
4170       fact.program_application_id,
4172       fact.program_update_date,
4173       fact.emails_rerouted_in_period,
4174       fact.leads_created_in_period )
4175     VALUES (
4176       change.email_account_id,
4177       change.email_classification_id,
4178       change.agent_id,
4179       change.party_id,
4180       change.time_id,
4181       change.period_type_id,
4182       change.period_start_date,
4183       change.period_start_time,
4184       change.outcome_id,
4185       change.result_id,
4186       change.reason_id,
4187       change.created_by,
4188       change.creation_date,
4189       change.last_updated_by,
4190       change.last_update_date,
4191       decode(change.emails_offered_in_period,0,to_number(null), change.emails_offered_in_period),
4192       decode(change.emails_fetched_in_period, 0,to_number(null),change.emails_fetched_in_period),
4193       decode(change.emails_replied_in_period, 0,to_number(null),change.emails_replied_in_period),
4194       decode(change.emails_rpld_by_goal_in_period, 0,to_number(null),change.emails_rpld_by_goal_in_period),
4195       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),change.AGENT_EMAILS_RPLD_BY_GOAL),
4196       decode(change.emails_deleted_in_period, 0,to_number(null),change.emails_deleted_in_period),
4197       decode(change.emails_trnsfrd_out_in_period, 0,to_number(null),change.emails_trnsfrd_out_in_period),
4198       decode(change.emails_trnsfrd_in_in_period, 0,to_number(null),change.emails_trnsfrd_in_in_period),
4199       decode(change.emails_assigned_in_period, 0,to_number(null),change.emails_assigned_in_period),
4200       decode(change.emails_auto_routed_in_period, 0,to_number(null),change.emails_auto_routed_in_period),
4201       decode(change.emails_auto_uptd_sr_in_period, 0,to_number(null),change.emails_auto_uptd_sr_in_period),
4202       decode(change.email_resp_time_in_period, 0,to_number(null),change.email_resp_time_in_period),
4203       decode(change.agent_resp_time_in_period, 0,to_number(null),change.agent_resp_time_in_period),
4204       decode(change.sr_created_in_period, 0,to_number(null),change.sr_created_in_period),
4205       decode(change.emails_rsl_and_trfd_in_period, 0,to_number(null),change.emails_rsl_and_trfd_in_period),
4206       decode(change.emails_orr_count_in_period, 0,to_number(null),change.emails_orr_count_in_period),
4207       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
4208       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
4209       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
4210       decode(change.emails_composed_in_period, 0,to_number(null),change.emails_composed_in_period),
4211       decode(change.accumulated_open_emails, 0,to_number(null),change.accumulated_open_emails),
4212       decode(change.accumulated_emails_in_queue, 0,to_number(null),change.accumulated_emails_in_queue),
4213       decode(change.accumulated_emails_one_day, 0,to_number(null),change.accumulated_emails_one_day),
4214       decode(change.accumulated_emails_three_days, 0,to_number(null),change.accumulated_emails_three_days),
4215       decode(change.accumulated_emails_week, 0,to_number(null),change.accumulated_emails_week),
4216       decode(change.accumulated_emails_week_plus, 0,to_number(null),change.accumulated_emails_week_plus),
4217       change.request_id,
4218       change.program_application_id,
4219       change.program_id,
4220       change.program_update_date,
4221       decode(change.emails_rerouted_in_period, 0,to_number(null),change.emails_rerouted_in_period),
4222       decode(change.leads_created_in_period, 0,to_number(null),change.leads_created_in_period)
4223       );
4224 
4225 
4226 write_log('Number of rows updated in table bix_email_details_stg for Emails in Queue  ' || to_char(SQL%ROWCOUNT));
4227 
4228  COMMIT;
4229 
4230   write_log('Number of rows updated in table bix_email_details_f : ' || to_char(SQL%ROWCOUNT));
4231 
4232   g_rows_ins_upd := g_rows_ins_upd + SQL%ROWCOUNT;
4233 
4234   write_log('Finished procedure collect_emails at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
4235 
4236 EXCEPTION
4237   WHEN OTHERS THEN
4238     write_log('Error in procedure collect_emails : Error : ' || sqlerrm);
4239     RAISE;
4240 END collect_emails;
4241 
4242 
4243 PROCEDURE rollup_negatives ( p_min_date IN DATE)  IS
4244 
4245 BEGIN
4246 
4247   write_log('Start of the procedure rollup_negatives at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
4248 
4249   write_log('Merging day rows to week, month, quarter, year bucket in table bix_email_details_f');
4250 
4251   /* Rollup half hour information to day, week, month, quarter, year time bucket for table bix_email_details_f */
4252 
4253 
4254   MERGE INTO bix_email_details_f bead
4255   USING (
4256   SELECT
4257     rlp.agent_id                                     agent_id,
4258     rlp.email_account_id                             email_account_id,
4259     rlp.email_classification_id                      email_classification_id,
4260     rlp.party_id                                     party_id,
4261     rlp.time_id                                      time_id,
4262     rlp.period_type_id                               period_type_id,
4263     rlp.period_start_date                            period_start_date,
4264     rlp.period_start_time                            period_start_time,
4265     rlp.outcome_id                                   outcome_id,
4266     rlp.result_id                                    result_id,
4267     rlp.reason_id                                    reason_id,
4268     (-1)*decode(sum(rlp.emails_offered_in_period), 0, to_number(null), sum(rlp.emails_offered_in_period))
4269                                                      emails_offered_in_period,
4270     (-1)*decode(sum(rlp.emails_fetched_in_period), 0, to_number(null), sum(rlp.emails_fetched_in_period))
4271                                                      emails_fetched_in_period,
4275                                                      emails_rpld_by_goal_in_period,
4272     (-1)*decode(sum(rlp.emails_replied_in_period), 0, to_number(null), sum(rlp.emails_replied_in_period))
4273                                                      emails_replied_in_period,
4274     (-1)*decode(sum(rlp.emails_rpld_by_goal_in_period), 0, to_number(null), sum(rlp.emails_rpld_by_goal_in_period))
4276     (-1)*decode(sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL))
4277                                                          AGENT_EMAILS_RPLD_BY_GOAL,
4278     (-1)*decode(sum(rlp.emails_deleted_in_period), 0, to_number(null), sum(rlp.emails_deleted_in_period))
4279                                                      emails_deleted_in_period,
4280     (-1)*decode(sum(rlp.emails_trnsfrd_out_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_out_in_period))
4281                                                      emails_trnsfrd_out_in_period,
4282     (-1)*decode(sum(rlp.emails_trnsfrd_in_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_in_in_period))
4283                                                      emails_trnsfrd_in_in_period,
4284     (-1)*decode(sum(rlp.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(rlp.emails_rsl_and_trfd_in_period))
4285                                                      emails_rsl_and_trfd_in_period,
4286     (-1)*decode(sum(rlp.emails_assigned_in_period), 0, to_number(null), sum(rlp.emails_assigned_in_period))
4287                                                      emails_assigned_in_period,
4288     (-1)*decode(sum(rlp.emails_auto_routed_in_period), 0, to_number(null), sum(rlp.emails_auto_routed_in_period))
4289                                                      emails_auto_routed_in_period,
4290     (-1)*decode(sum(rlp.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(rlp.emails_auto_uptd_sr_in_period))
4291                                                      emails_auto_uptd_sr_in_period,
4292     (-1)*decode(sum(rlp.sr_created_in_period), 0, to_number(null), sum(rlp.sr_created_in_period))
4293                                                      sr_created_in_period,
4294     to_date(null)                                    oldest_email_open_date,
4295     to_date(null)                                    oldest_email_queue_date,
4296     (-1)*decode(sum(rlp.email_resp_time_in_period), 0, to_number(null), sum(rlp.email_resp_time_in_period))
4297                                                      email_resp_time_in_period,
4298     (-1)*decode(sum(rlp.agent_resp_time_in_period), 0, to_number(null), sum(rlp.agent_resp_time_in_period))
4299                                                      agent_resp_time_in_period,
4300     (-1)*min(rlp.acc_open_emails)                         acc_open_emails,
4301     to_number(null)                                  acc_open_age,
4302     (-1)*min(rlp.acc_emails_in_queue)                     acc_emails_in_queue,
4303     to_number(null)                                  acc_queue_time,
4304     (-1)*min(rlp.acc_emails_one_day)                      acc_emails_one_day,
4305     (-1)*min(rlp.acc_emails_three_days)                   acc_emails_three_days,
4306     (-1)*min(rlp.acc_emails_week)                         acc_emails_week,
4307     (-1)*min(rlp.acc_emails_week_plus)                    acc_emails_week_plus,
4308     (-1)*decode(sum(rlp.emails_orr_count_in_period),0,to_number(null),sum(emails_orr_count_in_period)) emails_orr_count_in_period,
4309     (-1)*decode(sum(rlp.EMAILS_AUTO_REPLIED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_REPLIED_IN_PERIOD)) EMAILS_AUTO_REPLIED_IN_PERIOD,
4310     (-1)*decode(sum(rlp.EMAILS_AUTO_DELETED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_DELETED_IN_PERIOD)) EMAILS_AUTO_DELETED_IN_PERIOD,
4311     (-1)*decode(sum(rlp.EMAILS_AUTO_RESOLVED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_RESOLVED_IN_PERIOD)) EMAILS_AUTO_RESOLVED_IN_PERIOD,
4312     (-1)*decode(sum(rlp.emails_composed_in_period),0,to_number(null),sum(emails_composed_in_period)) emails_composed_in_period,
4313     (-1)*decode(sum(rlp.emails_rerouted_in_period),0,to_number(null),sum(emails_rerouted_in_period)) emails_rerouted_in_period,
4314     (-1)*decode(sum(rlp.leads_created_in_period),0,to_number(null),sum(leads_created_in_period)) leads_created_in_period ,
4315     (-1)*decode(sum(rlp.ONE_RSLN_IN_PERIOD),0,to_number(null),sum(ONE_RSLN_IN_PERIOD)) ONE_RSLN_IN_PERIOD,
4316     (-1)*decode(sum(rlp.TWO_RSLN_IN_PERIOD),0,to_number(null),sum(TWO_RSLN_IN_PERIOD)) TWO_RSLN_IN_PERIOD,
4317     (-1)*decode(sum(rlp.THREE_RSLN_IN_PERIOD),0,to_number(null),sum(THREE_RSLN_IN_PERIOD)) THREE_RSLN_IN_PERIOD,
4318     (-1)*decode(sum(rlp.FOUR_RSLN_IN_PERIOD),0,to_number(null),sum(FOUR_RSLN_IN_PERIOD)) FOUR_RSLN_IN_PERIOD,
4319     (-1)*decode(sum(rlp.INTERACTION_THREADS_IN_PERIOD),0,to_number(null),sum(INTERACTION_THREADS_IN_PERIOD)) INTERACTION_THREADS_IN_PERIOD
4320   FROM (
4321     SELECT
4322       inv2.agent_id agent_id,
4323       inv2.email_account_id email_account_id,
4324       inv2.email_classification_id email_classification_id,
4325       inv2.party_id party_id,
4326       inv2.outcome_id outcome_id,
4327       inv2.result_id result_id,
4328       inv2.reason_id reason_id,
4329       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4330           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), inv2.ent_year_id),
4331               inv2.ent_qtr_id), inv2.ent_period_id), inv2.week_id) time_id,
4332       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4333           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
4334               128), 64), 32), 16) period_type_id,
4335       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4336           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_date(null), min(inv2.ent_year_start_date)),
4337               min(inv2.ent_qtr_start_date)), min(inv2.ent_period_start_date)), min(inv2.week_start_date)) period_start_date,
4338       '00:00' period_start_time,
4339       sum(inv2.emails_offered_in_period) emails_offered_in_period,
4340       sum(inv2.emails_fetched_in_period) emails_fetched_in_period,
4341       sum(inv2.emails_replied_in_period) emails_replied_in_period,
4342       sum(inv2.emails_rpld_by_goal_in_period) emails_rpld_by_goal_in_period,
4343       sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL) AGENT_EMAILS_RPLD_BY_GOAL,
4347       sum(inv2.emails_rsl_and_trfd_in_period) emails_rsl_and_trfd_in_period,
4344       sum(inv2.emails_deleted_in_period) emails_deleted_in_period,
4345       sum(inv2.emails_trnsfrd_out_in_period) emails_trnsfrd_out_in_period,
4346       sum(inv2.emails_trnsfrd_in_in_period) emails_trnsfrd_in_in_period,
4348       sum(inv2.emails_assigned_in_period) emails_assigned_in_period,
4349       sum(inv2.emails_auto_routed_in_period) emails_auto_routed_in_period,
4350       sum(inv2.emails_auto_uptd_sr_in_period) emails_auto_uptd_sr_in_period,
4351       sum(inv2.sr_created_in_period) sr_created_in_period,
4352       sum(inv2.email_resp_time_in_period) email_resp_time_in_period,
4353       sum(inv2.agent_resp_time_in_period) agent_resp_time_in_period,
4354       sum(inv2.emails_orr_count_in_period) emails_orr_count_in_period,
4355       sum(inv2.EMAILS_AUTO_REPLIED_IN_PERIOD) EMAILS_AUTO_REPLIED_IN_PERIOD,
4356       sum(inv2.EMAILS_AUTO_DELETED_IN_PERIOD) EMAILS_AUTO_DELETED_IN_PERIOD,
4357       sum(inv2.EMAILS_AUTO_RESOLVED_IN_PERIOD) EMAILS_AUTO_RESOLVED_IN_PERIOD,
4358       sum(inv2.emails_composed_in_period) emails_composed_in_period,
4359       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4360           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_open_emails)),
4361               min(inv2.qtr_acc_open_emails)), min(inv2.period_acc_open_emails)), min(inv2.week_acc_open_emails)) acc_open_emails,
4362       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4363           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_in_queue)),
4364               min(inv2.qtr_acc_emails_in_queue)), min(inv2.period_acc_emails_in_queue)), min(inv2.week_acc_emails_in_queue))
4365          acc_emails_in_queue,
4366       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4367           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_one_day)),
4368               min(inv2.qtr_acc_emails_one_day)), min(inv2.period_acc_emails_one_day)), min(inv2.week_acc_emails_one_day)) acc_emails_one_day,
4369       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4370           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_three_days)),
4371               min(inv2.qtr_acc_emails_three_days)), min(inv2.period_acc_emails_three_days)),
4372                 min(inv2.week_acc_emails_three_days))            acc_emails_three_days,
4373       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4374           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week)),
4375               min(inv2.qtr_acc_emails_week)), min(inv2.period_acc_emails_week)), min(inv2.week_acc_emails_week)) acc_emails_week,
4376       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4377           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week_plus)),
4378               min(inv2.qtr_acc_emails_week_plus)), min(inv2.period_acc_emails_week_plus)),
4379                 min(inv2.week_acc_emails_week_plus))  acc_emails_week_plus,
4380       sum(inv2.EMAILS_REROUTED_IN_PERIOD) EMAILS_REROUTED_IN_PERIOD,
4381       sum(inv2.LEADS_CREATED_IN_PERIOD) LEADS_CREATED_IN_PERIOD,
4382       sum(inv2.ONE_RSLN_IN_PERIOD) ONE_RSLN_IN_PERIOD,
4383       sum(inv2.TWO_RSLN_IN_PERIOD) TWO_RSLN_IN_PERIOD,
4384       sum(inv2.THREE_RSLN_IN_PERIOD) THREE_RSLN_IN_PERIOD,
4385       sum(inv2.FOUR_RSLN_IN_PERIOD) FOUR_RSLN_IN_PERIOD,
4386       sum(inv2.INTERACTION_THREADS_IN_PERIOD) INTERACTION_THREADS_IN_PERIOD
4387     FROM
4388       (SELECT /*+ index(bead BIX_EMAIL_DETAILS_F_N1) */
4389          bead.agent_id agent_id,
4390          bead.email_account_id email_account_id,
4391          bead.email_classification_id email_classification_id,
4392          bead.party_id party_id,
4393          bead.outcome_id,
4394          bead.result_id,
4395          bead.reason_id,
4396          ftd.ent_year_id ent_year_id,
4397          ftd.ent_year_start_date ent_year_start_date,
4398          ftd.ent_qtr_id ent_qtr_id,
4399          ftd.ent_qtr_start_date ent_qtr_start_date,
4400          ftd.ent_period_id ent_period_id,
4401          ftd.ent_period_start_date ent_period_start_date,
4402          ftd.week_id  week_id,
4403          ftd.week_start_date week_start_date,
4404          bead.period_start_date period_start_date,
4405          bead.emails_offered_in_period emails_offered_in_period,
4406          bead.emails_fetched_in_period emails_fetched_in_period,
4407          bead.emails_replied_in_period emails_replied_in_period,
4408          bead.emails_rpld_by_goal_in_period emails_rpld_by_goal_in_period,
4409          bead.AGENT_EMAILS_RPLD_BY_GOAL AGENT_EMAILS_RPLD_BY_GOAL,
4410          bead.emails_deleted_in_period emails_deleted_in_period,
4411          bead.emails_trnsfrd_out_in_period emails_trnsfrd_out_in_period,
4412          bead.emails_trnsfrd_in_in_period emails_trnsfrd_in_in_period,
4413          bead.emails_rsl_and_trfd_in_period emails_rsl_and_trfd_in_period,
4414          bead.emails_assigned_in_period emails_assigned_in_period,
4415          bead.emails_auto_routed_in_period emails_auto_routed_in_period,
4416          bead.emails_auto_uptd_sr_in_period emails_auto_uptd_sr_in_period,
4417          bead.sr_created_in_period sr_created_in_period,
4418          bead.email_resp_time_in_period email_resp_time_in_period,
4419          bead.agent_resp_time_in_period agent_resp_time_in_period,
4420          bead.emails_orr_count_in_period emails_orr_count_in_period,
4421          bead.EMAILS_AUTO_REPLIED_IN_PERIOD EMAILS_AUTO_REPLIED_IN_PERIOD,
4422          bead.EMAILS_AUTO_DELETED_IN_PERIOD EMAILS_AUTO_DELETED_IN_PERIOD,
4423          bead.EMAILS_AUTO_RESOLVED_IN_PERIOD EMAILS_AUTO_RESOLVED_IN_PERIOD,
4424          bead.emails_composed_in_period emails_composed_in_period,
4425 	    bead.emails_rerouted_in_period emails_rerouted_in_period,
4426 	    bead.leads_created_in_period leads_created_in_period,
4427          bead.ONE_RSLN_IN_PERIOD ONE_RSLN_IN_PERIOD,
4428          bead.TWO_RSLN_IN_PERIOD TWO_RSLN_IN_PERIOD,
4429          bead.THREE_RSLN_IN_PERIOD THREE_RSLN_IN_PERIOD,
4433            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4430          bead.FOUR_RSLN_IN_PERIOD FOUR_RSLN_IN_PERIOD,
4431          bead.INTERACTION_THREADS_IN_PERIOD INTERACTION_THREADS_IN_PERIOD,
4432          first_value(bead.accumulated_open_emails)
4434 		       bead.outcome_id, bead.result_id, bead.reason_id,
4435                  ftd.week_id
4436                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4437                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_open_emails,
4438          first_value(bead.accumulated_open_emails)
4439            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4440 		       bead.outcome_id, bead.result_id, bead.reason_id,
4441                  ftd.ent_period_id
4442                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4443                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_open_emails,
4444          first_value(bead.accumulated_open_emails)
4445            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4446 		       bead.outcome_id, bead.result_id, bead.reason_id,
4447                  ftd.ent_qtr_id
4448                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4449                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_open_emails,
4450          first_value(bead.accumulated_open_emails)
4451            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4452 		       bead.outcome_id, bead.result_id, bead.reason_id,
4453                  ftd.ent_year_id
4454                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4455                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_open_emails,
4456          first_value(bead.accumulated_emails_in_queue)
4457            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4458 		       bead.outcome_id, bead.result_id, bead.reason_id,
4459                  ftd.week_id
4460                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4461                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_in_queue,
4462          first_value(bead.accumulated_emails_in_queue)
4463            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4464 		       bead.outcome_id, bead.result_id, bead.reason_id,
4465                  ftd.ent_period_id
4466                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4467                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_in_queue,
4468          first_value(bead.accumulated_emails_in_queue)
4469            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4470 		       bead.outcome_id, bead.result_id, bead.reason_id,
4471                  ftd.ent_qtr_id
4472                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4473                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_in_queue,
4474          first_value(bead.accumulated_emails_in_queue)
4475            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4476 		       bead.outcome_id, bead.result_id, bead.reason_id,
4477                  ftd.ent_year_id
4478                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4479                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_in_queue,
4480          first_value(bead.accumulated_emails_one_day)
4481            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4482 		       bead.outcome_id, bead.result_id, bead.reason_id,
4483                  ftd.week_id
4484                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4485                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_one_day,
4486          first_value(bead.accumulated_emails_one_day)
4487            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4488 		       bead.outcome_id, bead.result_id, bead.reason_id,
4489                  ftd.ent_period_id
4490                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4491                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_one_day,
4492          first_value(bead.accumulated_emails_one_day)
4493            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4494 		       bead.outcome_id, bead.result_id, bead.reason_id,
4495                  ftd.ent_qtr_id
4496                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4497                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_one_day,
4498          first_value(bead.accumulated_emails_one_day)
4499            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4500 		       bead.outcome_id, bead.result_id, bead.reason_id,
4501                  ftd.ent_year_id
4502                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4503                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_one_day,
4504          first_value(bead.accumulated_emails_three_days)
4505            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4506 		       bead.outcome_id, bead.result_id, bead.reason_id,
4507                  ftd.week_id
4508                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4509                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_three_days,
4513                  ftd.ent_period_id
4510          first_value(bead.accumulated_emails_three_days)
4511            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4512 		       bead.outcome_id, bead.result_id, bead.reason_id,
4514                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4515                        lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_three_days,
4516          first_value(bead.accumulated_emails_three_days)
4517            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4518 		       bead.outcome_id, bead.result_id, bead.reason_id,
4519                  ftd.ent_qtr_id
4520                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4521                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_three_days,
4522          first_value(bead.accumulated_emails_three_days)
4523            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4524 		       bead.outcome_id, bead.result_id, bead.reason_id,
4525                  ftd.ent_year_id
4526                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4527                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_three_days,
4528          first_value(bead.accumulated_emails_week)
4529            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4530 		       bead.outcome_id, bead.result_id, bead.reason_id,
4531                  ftd.week_id
4532                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4533                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week,
4534          first_value(bead.accumulated_emails_week)
4535            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4536 		       bead.outcome_id, bead.result_id, bead.reason_id,
4537                  ftd.ent_period_id
4538                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4539                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week,
4540          first_value(bead.accumulated_emails_week)
4541            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4542 		       bead.outcome_id, bead.result_id, bead.reason_id,
4543                  ftd.ent_qtr_id
4544                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4545                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week,
4546          first_value(bead.accumulated_emails_week)
4547            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4548 		       bead.outcome_id, bead.result_id, bead.reason_id,
4549                  ftd.ent_year_id
4550                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4551                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week,
4552          first_value(bead.accumulated_emails_week_plus)
4553            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4554 		       bead.outcome_id, bead.result_id, bead.reason_id,
4555                  ftd.week_id
4556                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4557                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week_plus,
4558          first_value(bead.accumulated_emails_week_plus)
4559            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4560 		       bead.outcome_id, bead.result_id, bead.reason_id,
4561                  ftd.ent_period_id
4562                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4563                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week_plus,
4564          first_value(bead.accumulated_emails_week_plus)
4565            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4566 		       bead.outcome_id, bead.result_id, bead.reason_id,
4567                  ftd.ent_qtr_id
4568                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4569                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week_plus,
4570          first_value(bead.accumulated_emails_week_plus)
4571            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
4572 		       bead.outcome_id, bead.result_id, bead.reason_id,
4573                  ftd.ent_year_id
4574                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
4575                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week_plus
4576        FROM bix_email_details_f bead,
4577             fii_time_day ftd
4578        WHERE bead.time_id = ftd.report_date_julian
4579        AND   bead.period_type_id = 1
4580        --AND   bead.period_start_date >= p_min_date     --DOES NOT PERFORM INDEX SCAN IF USING PERIOD_START_DATE
4581 	  AND bead.time_id >= to_number( to_char(p_min_date,'J'))
4582 	  ) inv2
4583     GROUP BY
4584          inv2.agent_id,
4585          inv2.email_account_id,
4586          inv2.email_classification_id,
4587          inv2.party_id,
4588          inv2.outcome_id,
4589     inv2.result_id,
4590     inv2.reason_id,
4591     ROLLUP(
4592          inv2.ent_year_id,
4593          inv2.ent_qtr_id,
4594          inv2.ent_period_id,
4595          inv2.week_id)
4596     HAVING
4597          decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4598                   decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
4602     rlp.email_account_id,
4599                          128), 64), 32), 16) IS NOT NULL) rlp
4600   GROUP BY
4601     rlp.agent_id,
4603     rlp.email_classification_id,
4604     rlp.party_id,
4605     rlp.time_id,
4606     rlp.period_type_id,
4607     rlp.period_start_date,
4608     rlp.period_start_time,
4609     rlp.outcome_id,
4610     rlp.result_id,
4611     rlp.reason_id) change
4612   ON (  bead.agent_id = change.agent_id
4613     AND bead.email_account_id = change.email_account_id
4614     AND bead.email_classification_id = change.email_classification_id
4615     AND bead.party_id = change.party_id
4616     AND bead.time_id  = change.time_id
4617     AND bead.period_type_id = change.period_type_id
4618     AND bead.period_start_date = change.period_start_date
4619     AND bead.period_start_time = change.period_start_time
4620     AND bead.outcome_id        = change.outcome_id
4621     AND bead.result_id         = change.result_id
4622     AND bead.reason_id         = change.reason_id )
4623   WHEN MATCHED THEN
4624   UPDATE SET
4625     bead.emails_offered_in_period =
4626         decode(change.emails_offered_in_period, to_number(null), bead.emails_offered_in_period,
4627            nvl(bead.emails_offered_in_period,0) + change.emails_offered_in_period),
4628     bead.emails_fetched_in_period =
4629         decode(change.emails_fetched_in_period, to_number(null), bead.emails_fetched_in_period,
4630            nvl(bead.emails_fetched_in_period,0) + change.emails_fetched_in_period),
4631     bead.emails_replied_in_period =
4632         decode(change.emails_replied_in_period, to_number(null), bead.emails_replied_in_period,
4633            nvl(bead.emails_replied_in_period,0) + change.emails_replied_in_period),
4634     bead.emails_rpld_by_goal_in_period =
4635         decode(change.emails_rpld_by_goal_in_period, to_number(null), bead.emails_rpld_by_goal_in_period,
4636              nvl(bead.emails_rpld_by_goal_in_period,0) + change.emails_rpld_by_goal_in_period),
4637     bead.AGENT_EMAILS_RPLD_BY_GOAL =
4638             decode(change.AGENT_EMAILS_RPLD_BY_GOAL, to_number(null), bead.AGENT_EMAILS_RPLD_BY_GOAL,
4639                  nvl(bead.AGENT_EMAILS_RPLD_BY_GOAL,0) + change.AGENT_EMAILS_RPLD_BY_GOAL),
4640     bead.emails_deleted_in_period =
4641         decode(change.emails_deleted_in_period, to_number(null), bead.emails_deleted_in_period,
4642            nvl(bead.emails_deleted_in_period,0) + change.emails_deleted_in_period),
4643     bead.emails_trnsfrd_out_in_period =
4644         decode(change.emails_trnsfrd_out_in_period, to_number(null), bead.emails_trnsfrd_out_in_period,
4645            nvl(bead.emails_trnsfrd_out_in_period,0) + change.emails_trnsfrd_out_in_period),
4646     bead.emails_trnsfrd_in_in_period =
4647         decode(change.emails_trnsfrd_in_in_period, to_number(null), bead.emails_trnsfrd_in_in_period,
4648            nvl(bead.emails_trnsfrd_in_in_period,0) + change.emails_trnsfrd_in_in_period),
4649     bead.emails_rsl_and_trfd_in_period =
4650         decode(change.emails_rsl_and_trfd_in_period,to_number(null),bead.emails_rsl_and_trfd_in_period,
4651            nvl(bead.emails_rsl_and_trfd_in_period,0) + change.emails_rsl_and_trfd_in_period),
4652     bead.emails_assigned_in_period =
4653         decode(change.emails_assigned_in_period, to_number(null), bead.emails_assigned_in_period,
4654            nvl(bead.emails_assigned_in_period,0) + change.emails_assigned_in_period),
4655     bead.emails_auto_routed_in_period =
4656         decode(change.emails_auto_routed_in_period, to_number(null), bead.emails_auto_routed_in_period,
4657            nvl(bead.emails_auto_routed_in_period,0) + change.emails_auto_routed_in_period),
4658     bead.emails_auto_uptd_sr_in_period =
4659         decode(change.emails_auto_uptd_sr_in_period, to_number(null), bead.emails_auto_uptd_sr_in_period,
4660            nvl(bead.emails_auto_uptd_sr_in_period,0) + change.emails_auto_uptd_sr_in_period),
4661     bead.sr_created_in_period = decode(change.sr_created_in_period, to_number(null), bead.sr_created_in_period,
4662            nvl(bead.sr_created_in_period,0) + change.sr_created_in_period),
4663     bead.oldest_email_open_date =
4664            decode(change.oldest_email_open_date,NULL,bead.oldest_email_open_date,
4665                decode(bead.oldest_email_open_date,NULL,change.oldest_email_open_date,
4666                  decode(sign(bead.oldest_email_open_date - change.oldest_email_open_date),
4667                     -1,bead.oldest_email_open_date, change.oldest_email_open_date))),
4668     bead.oldest_email_queue_date =
4669            decode(change.oldest_email_queue_date,NULL,bead.oldest_email_queue_date,
4670                decode(bead.oldest_email_queue_date,NULL,change.oldest_email_queue_date,
4671                  decode(sign(bead.oldest_email_queue_date - change.oldest_email_queue_date),
4672                     -1,bead.oldest_email_queue_date, change.oldest_email_queue_date))),
4673     bead.email_resp_time_in_period =
4674         decode(change.email_resp_time_in_period, to_number(null), bead.email_resp_time_in_period,
4675            nvl(bead.email_resp_time_in_period,0) + change.email_resp_time_in_period),
4676     bead.agent_resp_time_in_period =
4677         decode(change.agent_resp_time_in_period, to_number(null), bead.agent_resp_time_in_period,
4678            nvl(bead.agent_resp_time_in_period,0) + change.agent_resp_time_in_period),
4679    bead.accumulated_open_emails =  decode(
4680                                       nvl(bead.accumulated_open_emails,0)+nvl(change.acc_open_emails,0),
4681                                       0,to_number(NULL),
4682                                       nvl(bead.accumulated_open_emails,0)+nvl(change.acc_open_emails,0)
4683                                        ),
4684     bead.accumulated_open_age =  decode(
4685                                       nvl(bead.accumulated_open_age,0)+nvl(change.acc_open_age,0),
4686                                       0,to_number(NULL),
4687                                       nvl(bead.accumulated_open_age,0)+nvl(change.acc_open_age,0)
4688                                       ),
4689     bead.accumulated_emails_in_queue = decode(
4690                                       nvl(bead.accumulated_emails_in_queue,0)+nvl(change.acc_emails_in_queue,0),
4694     bead.accumulated_queue_time = decode(
4691                                       0,to_number(null),
4692                                       nvl(bead.accumulated_emails_in_queue,0)+nvl(change.acc_emails_in_queue,0)
4693                                       ),
4695                                       nvl(bead.accumulated_queue_time,0)+nvl(change.acc_queue_time,0),
4696                                       0,to_number(null),
4697                                       nvl(bead.accumulated_queue_time,0)+nvl(change.acc_queue_time,0)
4698                                       ),
4699     bead.accumulated_emails_one_day = decode(
4700                                       nvl(bead.accumulated_emails_one_day,0)+nvl(change.acc_emails_one_day,0),
4701                                       0,to_number(null),
4702                                       nvl(bead.accumulated_emails_one_day,0)+nvl(change.acc_emails_one_day,0)
4703                                       ),
4704     bead.accumulated_emails_three_days = decode(
4705                                    nvl(bead.accumulated_emails_three_days,0)+nvl(change.acc_emails_three_days,0),
4706                                    0,to_number(null),
4707                                    nvl(bead.accumulated_emails_three_days,0)+nvl(change.acc_emails_three_days,0)
4708                                    ),
4709     bead.accumulated_emails_week =  decode(
4710                                       nvl(bead.accumulated_emails_week,0)+nvl(change.acc_emails_week,0),
4711                                       0,to_number(null),
4712                                       nvl(bead.accumulated_emails_week,0)+nvl(change.acc_emails_week,0)
4713                                       ),
4714     bead.accumulated_emails_week_plus = decode(
4715                                    nvl(bead.accumulated_emails_week_plus,0)+nvl(change.acc_emails_week_plus,0),
4716                                    0,to_number(null),
4717                                    nvl(bead.accumulated_emails_week_plus,0)+nvl(change.acc_emails_week_plus,0)
4718                                       ),
4719     bead.emails_orr_count_in_period  = decode(change.emails_orr_count_in_period,to_number(null), bead.emails_orr_count_in_period ,
4720       nvl(bead.emails_orr_count_in_period,0) + change.emails_orr_count_in_period),
4721     bead.EMAILS_AUTO_REPLIED_IN_PERIOD = decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_REPLIED_IN_PERIOD,
4722        nvl(bead.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + change.EMAILS_AUTO_REPLIED_IN_PERIOD),
4723     bead.EMAILS_AUTO_DELETED_IN_PERIOD = decode(change.EMAILS_AUTO_DELETED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_DELETED_IN_PERIOD,
4724       nvl(bead.EMAILS_AUTO_DELETED_IN_PERIOD,0) + change.EMAILS_AUTO_DELETED_IN_PERIOD),
4725     bead.EMAILS_AUTO_RESOLVED_IN_PERIOD = decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_RESOLVED_IN_PERIOD,
4726       nvl(bead.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
4727     bead.emails_composed_in_period = decode(change.emails_composed_in_period,to_number(null),bead.emails_composed_in_period,
4728                                             nvl(bead.emails_composed_in_period,0) + change.emails_composed_in_period),
4729     bead.emails_rerouted_in_period = decode(change.emails_rerouted_in_period,to_number(null),bead.emails_rerouted_in_period,
4730                                             nvl(bead.emails_rerouted_in_period,0) + change.emails_rerouted_in_period ),
4731     bead.leads_created_in_period = decode(change.leads_created_in_period,to_number(null),bead.leads_created_in_period,
4732                                           nvl(bead.leads_created_in_period,0) + change.leads_created_in_period ),
4733     bead.ONE_RSLN_IN_PERIOD =  decode(
4734     							nvl(bead.ONE_RSLN_IN_PERIOD ,0)+nvl(change.ONE_RSLN_IN_PERIOD ,0),
4735     							0,to_number(null),
4736    							 nvl(bead.ONE_RSLN_IN_PERIOD ,0)+nvl(change.ONE_RSLN_IN_PERIOD ,0)
4737    						 ),
4738     bead.TWO_RSLN_IN_PERIOD =  decode(
4739  							 nvl(bead.TWO_RSLN_IN_PERIOD ,0)+nvl(change.TWO_RSLN_IN_PERIOD ,0),
4740    							 0,to_number(null),
4741  							   nvl(bead.TWO_RSLN_IN_PERIOD ,0)+nvl(change.TWO_RSLN_IN_PERIOD ,0)
4742   						  ),
4743     bead.THREE_RSLN_IN_PERIOD =  decode(
4744 						    nvl(bead.THREE_RSLN_IN_PERIOD ,0)+nvl(change.THREE_RSLN_IN_PERIOD ,0),
4745 						    0,to_number(null),
4746 						    nvl(bead.THREE_RSLN_IN_PERIOD ,0)+nvl(change.THREE_RSLN_IN_PERIOD ,0)
4747    						 ),
4748     bead.FOUR_RSLN_IN_PERIOD =  decode(
4749  						   nvl(bead.FOUR_RSLN_IN_PERIOD ,0)+nvl(change.FOUR_RSLN_IN_PERIOD ,0),
4750 						    0,to_number(null),
4751   						  nvl(bead.FOUR_RSLN_IN_PERIOD ,0)+nvl(change.FOUR_RSLN_IN_PERIOD ,0)
4752    						 ),
4753     bead.INTERACTION_THREADS_IN_PERIOD =  decode(
4754     								nvl(bead.INTERACTION_THREADS_IN_PERIOD,0)+nvl(change.INTERACTION_THREADS_IN_PERIOD,0),
4755  								   0,to_number(null),
4756   								  nvl(bead.INTERACTION_THREADS_IN_PERIOD,0)+nvl(change.INTERACTION_THREADS_IN_PERIOD,0)
4757    						 ),
4758     bead.last_update_date = g_sysdate,
4759     bead.last_updated_by  = g_user_id,
4760     bead.program_update_date = g_sysdate
4761   WHEN NOT MATCHED THEN INSERT
4762      (agent_id,
4763       email_account_id,
4764       email_classification_id,
4765       party_id,
4766       outcome_id,
4767       result_id,
4768       reason_id,
4769       time_id,
4770       period_type_id,
4771       period_start_date,
4772       period_start_time,
4773       created_by,
4774       creation_date,
4775       last_updated_by,
4776       last_update_date,
4777       emails_offered_in_period,
4778       emails_fetched_in_period,
4779       emails_replied_in_period,
4780       emails_rpld_by_goal_in_period,
4781       AGENT_EMAILS_RPLD_BY_GOAL,
4782       emails_deleted_in_period,
4783       emails_trnsfrd_out_in_period,
4784       emails_trnsfrd_in_in_period,
4785       emails_rsl_and_trfd_in_period,
4786       emails_assigned_in_period,
4787       emails_auto_routed_in_period,
4788       emails_auto_uptd_sr_in_period,
4789       sr_created_in_period,
4793       agent_resp_time_in_period,
4790       oldest_email_open_date,
4791       oldest_email_queue_date,
4792       email_resp_time_in_period,
4794       accumulated_open_emails,
4795       accumulated_open_age,
4796       accumulated_emails_in_queue,
4797       accumulated_queue_time,
4798       accumulated_emails_one_day,
4799       accumulated_emails_three_days,
4800       accumulated_emails_week,
4801       accumulated_emails_week_plus,
4802       emails_orr_count_in_period,
4803       EMAILS_AUTO_REPLIED_IN_PERIOD,
4804       EMAILS_AUTO_DELETED_IN_PERIOD,
4805       EMAILS_AUTO_RESOLVED_IN_PERIOD,
4806       emails_composed_in_period,
4807 	 emails_rerouted_in_period,
4808 	 leads_created_in_period,
4809       ONE_RSLN_IN_PERIOD,
4810       TWO_RSLN_IN_PERIOD,
4811       THREE_RSLN_IN_PERIOD,
4812       FOUR_RSLN_IN_PERIOD,
4813 	 INTERACTION_THREADS_IN_PERIOD,
4814       request_id,
4815       program_application_id,
4816       program_id,
4817       program_update_date )
4818     VALUES (
4819       change.agent_id,
4820       change.email_account_id,
4821       change.email_classification_id,
4822       change.party_id,
4823       change.outcome_id,
4824       change.result_id,
4825       change.reason_id,
4826       change.time_id,
4827       change.period_type_id,
4828       change.period_start_date,
4829       change.period_start_time,
4830       g_user_id,
4831       g_sysdate,
4832       g_user_id,
4833       g_sysdate,
4834       decode(change.emails_offered_in_period, 0, to_number(null), change.emails_offered_in_period),
4835       decode(change.emails_fetched_in_period, 0, to_number(null), change.emails_fetched_in_period),
4836       decode(change.emails_replied_in_period, 0, to_number(null), change.emails_replied_in_period),
4837       decode(change.emails_rpld_by_goal_in_period, 0, to_number(null), change.emails_rpld_by_goal_in_period),
4838       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0, to_number(null), change.AGENT_EMAILS_RPLD_BY_GOAL),
4839       decode(change.emails_deleted_in_period, 0, to_number(null), change.emails_deleted_in_period),
4840       decode(change.emails_trnsfrd_out_in_period, 0, to_number(null), change.emails_trnsfrd_out_in_period),
4841       decode(change.emails_trnsfrd_in_in_period, 0, to_number(null), change.emails_trnsfrd_in_in_period),
4842       decode(change.emails_rsl_and_trfd_in_period, 0, to_number(null), change.emails_rsl_and_trfd_in_period),
4843       decode(change.emails_assigned_in_period, 0, to_number(null), change.emails_assigned_in_period),
4844       decode(change.emails_auto_routed_in_period, 0, to_number(null), change.emails_auto_routed_in_period),
4845       decode(change.emails_auto_uptd_sr_in_period, 0, to_number(null), change.emails_auto_uptd_sr_in_period),
4846       decode(change.sr_created_in_period, 0, to_number(null), change.sr_created_in_period),
4847       change.oldest_email_open_date,
4848       change.oldest_email_queue_date,
4849       decode(change.email_resp_time_in_period, 0, to_number(null), change.email_resp_time_in_period),
4850       decode(change.agent_resp_time_in_period, 0, to_number(null), change.agent_resp_time_in_period),
4851       decode(change.acc_open_emails, 0, to_number(null), change.acc_open_emails),
4852       decode(change.acc_open_age, 0, to_number(null), change.acc_open_age),
4853       decode(change.acc_emails_in_queue, 0, to_number(null), change.acc_emails_in_queue),
4854       decode(change.acc_queue_time, 0, to_number(null), change.acc_queue_time),
4855       decode(change.acc_emails_one_day, 0, to_number(null), change.acc_emails_one_day),
4856       decode(change.acc_emails_three_days, 0, to_number(null), change.acc_emails_three_days),
4857       decode(change.acc_emails_week, 0, to_number(null), change.acc_emails_week),
4858       decode(change.acc_emails_week_plus, 0, to_number(null), change.acc_emails_week_plus),
4859       decode(change.emails_orr_count_in_period,0,to_number(null),change.emails_orr_count_in_period),
4860       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
4861       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
4862       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
4863       decode(change.emails_composed_in_period,0,to_number(null),change.emails_composed_in_period),
4864 	 decode(change.emails_rerouted_in_period,0,to_number(null),change.emails_rerouted_in_period),
4865 	 decode(change.leads_created_in_period,0,to_number(null),change.leads_created_in_period),
4866       decode(change.ONE_RSLN_IN_PERIOD,0,to_number(null),change.ONE_RSLN_IN_PERIOD),
4867 	 decode(change.TWO_RSLN_IN_PERIOD,0,to_number(null),change.TWO_RSLN_IN_PERIOD),
4868 	 decode(change.THREE_RSLN_IN_PERIOD,0,to_number(null),change.THREE_RSLN_IN_PERIOD),
4869 	 decode(change.FOUR_RSLN_IN_PERIOD,0,to_number(null),change.FOUR_RSLN_IN_PERIOD),
4870 	 decode(change.INTERACTION_THREADS_IN_PERIOD,0,to_number(null),change.INTERACTION_THREADS_IN_PERIOD),
4871 	 g_request_id,
4872 	 g_program_appl_id,
4873 	 g_program_id,
4874       g_sysdate);
4875 
4876   g_rows_ins_upd := g_rows_ins_upd + SQL%ROWCOUNT;
4877 
4878   COMMIT;
4879 
4880   write_log('Finished procedure rollup_negatives at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
4881 
4882 EXCEPTION
4883   WHEN OTHERS THEN
4884     write_log('Error in procedure rollup_negatives : Error : ' || sqlerrm);
4885     RAISE;
4886 END rollup_negatives;
4887 
4888 
4889 /*====================================================================
4890 
4891 This procedure summarizes  day level rows to week, period, Quarter and Year.
4892 
4893 =======================================================================*/
4894 
4895 PROCEDURE summarize_data IS
4896 
4897 BEGIN
4898 
4899   write_log('Start of the procedure summarize_data at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
4900 
4901   write_log('Merging day rows to week, month, quarter, year bucket in table bix_email_details_f');
4902 
4906   SELECT
4903   /* Rollup half hour informations to day, week, month, quarter, year time bucket for table bix_email_details_f */
4904   MERGE INTO bix_email_details_stg bead
4905   USING (
4907     rlp.agent_id                                     agent_id,
4908     rlp.email_account_id                             email_account_id,
4909     rlp.email_classification_id                      email_classification_id,
4910     rlp.party_id                                     party_id,
4911     rlp.time_id                                      time_id,
4912     rlp.period_type_id                               period_type_id,
4913     rlp.period_start_date                            period_start_date,
4914     rlp.period_start_time                            period_start_time,
4915     rlp.outcome_id                                   outcome_id,
4916     rlp.result_id                                    result_id,
4917     rlp.reason_id                                    reason_id,
4918     decode(sum(rlp.emails_offered_in_period), 0, to_number(null), sum(rlp.emails_offered_in_period))
4919                                                      emails_offered_in_period,
4920     decode(sum(rlp.emails_fetched_in_period), 0, to_number(null), sum(rlp.emails_fetched_in_period))
4921                                                      emails_fetched_in_period,
4922     decode(sum(rlp.emails_replied_in_period), 0, to_number(null), sum(rlp.emails_replied_in_period))
4923                                                      emails_replied_in_period,
4924     decode(sum(rlp.emails_rpld_by_goal_in_period), 0, to_number(null), sum(rlp.emails_rpld_by_goal_in_period))
4925                                                      emails_rpld_by_goal_in_period,
4926     decode(sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL))
4927                                                          AGENT_EMAILS_RPLD_BY_GOAL,
4928     decode(sum(rlp.emails_deleted_in_period), 0, to_number(null), sum(rlp.emails_deleted_in_period))
4929                                                      emails_deleted_in_period,
4930     decode(sum(rlp.emails_trnsfrd_out_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_out_in_period))
4931                                                      emails_trnsfrd_out_in_period,
4932     decode(sum(rlp.emails_trnsfrd_in_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_in_in_period))
4933                                                      emails_trnsfrd_in_in_period,
4934     decode(sum(rlp.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(rlp.emails_rsl_and_trfd_in_period))
4935                                                      emails_rsl_and_trfd_in_period,
4936     decode(sum(rlp.emails_assigned_in_period), 0, to_number(null), sum(rlp.emails_assigned_in_period))
4937                                                      emails_assigned_in_period,
4938     decode(sum(rlp.emails_auto_routed_in_period), 0, to_number(null), sum(rlp.emails_auto_routed_in_period))
4939                                                      emails_auto_routed_in_period,
4940     decode(sum(rlp.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(rlp.emails_auto_uptd_sr_in_period))
4941                                                      emails_auto_uptd_sr_in_period,
4942     decode(sum(rlp.sr_created_in_period), 0, to_number(null), sum(rlp.sr_created_in_period))
4943                                                      sr_created_in_period,
4944     to_date(null)                                    oldest_email_open_date,
4945     to_date(null)                                    oldest_email_queue_date,
4946     decode(sum(rlp.email_resp_time_in_period), 0, to_number(null), sum(rlp.email_resp_time_in_period))
4947                                                      email_resp_time_in_period,
4948     decode(sum(rlp.agent_resp_time_in_period), 0, to_number(null), sum(rlp.agent_resp_time_in_period))
4949                                                      agent_resp_time_in_period,
4950     min(rlp.acc_open_emails)                         acc_open_emails,
4951     to_number(null)                                  acc_open_age,
4952     min(rlp.acc_emails_in_queue)                     acc_emails_in_queue,
4953     to_number(null)                                  acc_queue_time,
4954     min(rlp.acc_emails_one_day)                      acc_emails_one_day,
4955     min(rlp.acc_emails_three_days)                   acc_emails_three_days,
4956     min(rlp.acc_emails_week)                         acc_emails_week,
4957     min(rlp.acc_emails_week_plus)                    acc_emails_week_plus,
4958     decode(sum(rlp.emails_orr_count_in_period),0,to_number(null),sum(emails_orr_count_in_period)) emails_orr_count_in_period,
4959     decode(sum(rlp.EMAILS_AUTO_REPLIED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_REPLIED_IN_PERIOD)) EMAILS_AUTO_REPLIED_IN_PERIOD,
4960     decode(sum(rlp.EMAILS_AUTO_DELETED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_DELETED_IN_PERIOD)) EMAILS_AUTO_DELETED_IN_PERIOD,
4961     decode(sum(rlp.EMAILS_AUTO_RESOLVED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_RESOLVED_IN_PERIOD)) EMAILS_AUTO_RESOLVED_IN_PERIOD,
4962     decode(sum(rlp.emails_composed_in_period),0,to_number(null),sum(emails_composed_in_period)) emails_composed_in_period,
4963     decode(sum(rlp.emails_rerouted_in_period),0,to_number(null),sum(emails_rerouted_in_period)) emails_rerouted_in_period,
4964     decode(sum(rlp.leads_created_in_period),0,to_number(null),sum(leads_created_in_period)) leads_created_in_period
4965   FROM (
4966     SELECT
4967       inv2.agent_id agent_id,
4968       inv2.email_account_id email_account_id,
4969       inv2.email_classification_id email_classification_id,
4970       inv2.party_id party_id,
4971       inv2.outcome_id outcome_id,
4972       inv2.result_id result_id,
4973       inv2.reason_id reason_id,
4974       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4975           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), inv2.ent_year_id),
4976               inv2.ent_qtr_id), inv2.ent_period_id), inv2.week_id) time_id,
4977       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4978           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
4979               128), 64), 32), 16) period_type_id,
4983       '00:00' period_start_time,
4980       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
4981           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_date(null), min(inv2.ent_year_start_date)),
4982               min(inv2.ent_qtr_start_date)), min(inv2.ent_period_start_date)), min(inv2.week_start_date)) period_start_date,
4984       sum(inv2.emails_offered_in_period) emails_offered_in_period,
4985       sum(inv2.emails_fetched_in_period) emails_fetched_in_period,
4986       sum(inv2.emails_replied_in_period) emails_replied_in_period,
4987       sum(inv2.emails_rpld_by_goal_in_period) emails_rpld_by_goal_in_period,
4988       sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL) AGENT_EMAILS_RPLD_BY_GOAL,
4989       sum(inv2.emails_deleted_in_period) emails_deleted_in_period,
4990       sum(inv2.emails_trnsfrd_out_in_period) emails_trnsfrd_out_in_period,
4991       sum(inv2.emails_trnsfrd_in_in_period) emails_trnsfrd_in_in_period,
4992       sum(inv2.emails_rsl_and_trfd_in_period) emails_rsl_and_trfd_in_period,
4993       sum(inv2.emails_assigned_in_period) emails_assigned_in_period,
4994       sum(inv2.emails_auto_routed_in_period) emails_auto_routed_in_period,
4995       sum(inv2.emails_auto_uptd_sr_in_period) emails_auto_uptd_sr_in_period,
4996       sum(inv2.sr_created_in_period) sr_created_in_period,
4997       sum(inv2.email_resp_time_in_period) email_resp_time_in_period,
4998       sum(inv2.agent_resp_time_in_period) agent_resp_time_in_period,
4999       sum(inv2.emails_orr_count_in_period) emails_orr_count_in_period,
5000       sum(inv2.EMAILS_AUTO_REPLIED_IN_PERIOD) EMAILS_AUTO_REPLIED_IN_PERIOD,
5001       sum(inv2.EMAILS_AUTO_DELETED_IN_PERIOD) EMAILS_AUTO_DELETED_IN_PERIOD,
5002       sum(inv2.EMAILS_AUTO_RESOLVED_IN_PERIOD) EMAILS_AUTO_RESOLVED_IN_PERIOD,
5003       sum(inv2.emails_composed_in_period) emails_composed_in_period,
5004       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5005           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_open_emails)),
5006               min(inv2.qtr_acc_open_emails)), min(inv2.period_acc_open_emails)), min(inv2.week_acc_open_emails)) acc_open_emails,
5007       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5008           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_in_queue)),
5009               min(inv2.qtr_acc_emails_in_queue)), min(inv2.period_acc_emails_in_queue)), min(inv2.week_acc_emails_in_queue))
5010          acc_emails_in_queue,
5011       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5012           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_one_day)),
5013               min(inv2.qtr_acc_emails_one_day)), min(inv2.period_acc_emails_one_day)), min(inv2.week_acc_emails_one_day)) acc_emails_one_day,
5014       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5015           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_three_days)),
5016               min(inv2.qtr_acc_emails_three_days)), min(inv2.period_acc_emails_three_days)),
5017                 min(inv2.week_acc_emails_three_days))            acc_emails_three_days,
5018       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5019           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week)),
5020               min(inv2.qtr_acc_emails_week)), min(inv2.period_acc_emails_week)), min(inv2.week_acc_emails_week)) acc_emails_week,
5021       decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5022           decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week_plus)),
5023               min(inv2.qtr_acc_emails_week_plus)), min(inv2.period_acc_emails_week_plus)),
5024                 min(inv2.week_acc_emails_week_plus))  acc_emails_week_plus,
5025       sum(inv2.EMAILS_REROUTED_IN_PERIOD) EMAILS_REROUTED_IN_PERIOD,
5026       sum(inv2.LEADS_CREATED_IN_PERIOD) LEADS_CREATED_IN_PERIOD
5027     FROM
5028       (SELECT /*+ index(bead BIX_EMAIL_DETAILS_F_N1) */
5029          bead.agent_id agent_id,
5030          bead.email_account_id email_account_id,
5031          bead.email_classification_id email_classification_id,
5032          bead.party_id party_id,
5033          bead.outcome_id,
5034          bead.result_id,
5035          bead.reason_id,
5036          ftd.ent_year_id ent_year_id,
5037          ftd.ent_year_start_date ent_year_start_date,
5038          ftd.ent_qtr_id ent_qtr_id,
5039          ftd.ent_qtr_start_date ent_qtr_start_date,
5040          ftd.ent_period_id ent_period_id,
5041          ftd.ent_period_start_date ent_period_start_date,
5042          ftd.week_id  week_id,
5043          ftd.week_start_date week_start_date,
5044          bead.period_start_date period_start_date,
5045          bead.emails_offered_in_period emails_offered_in_period,
5046          bead.emails_fetched_in_period emails_fetched_in_period,
5047          bead.emails_replied_in_period emails_replied_in_period,
5048          bead.emails_rpld_by_goal_in_period emails_rpld_by_goal_in_period,
5049          bead.AGENT_EMAILS_RPLD_BY_GOAL AGENT_EMAILS_RPLD_BY_GOAL,
5050          bead.emails_deleted_in_period emails_deleted_in_period,
5051          bead.emails_trnsfrd_out_in_period emails_trnsfrd_out_in_period,
5052          bead.emails_trnsfrd_in_in_period emails_trnsfrd_in_in_period,
5053          bead.emails_rsl_and_trfd_in_period emails_rsl_and_trfd_in_period,
5054          bead.emails_assigned_in_period emails_assigned_in_period,
5055          bead.emails_auto_routed_in_period emails_auto_routed_in_period,
5056          bead.emails_auto_uptd_sr_in_period emails_auto_uptd_sr_in_period,
5057          bead.sr_created_in_period sr_created_in_period,
5058          bead.email_resp_time_in_period email_resp_time_in_period,
5059          bead.agent_resp_time_in_period agent_resp_time_in_period,
5060          bead.emails_orr_count_in_period emails_orr_count_in_period,
5061          bead.EMAILS_AUTO_REPLIED_IN_PERIOD EMAILS_AUTO_REPLIED_IN_PERIOD,
5062          bead.EMAILS_AUTO_DELETED_IN_PERIOD EMAILS_AUTO_DELETED_IN_PERIOD,
5063          bead.EMAILS_AUTO_RESOLVED_IN_PERIOD EMAILS_AUTO_RESOLVED_IN_PERIOD,
5067          first_value(bead.accumulated_open_emails)
5064          bead.emails_composed_in_period emails_composed_in_period,
5065 	    bead.emails_rerouted_in_period emails_rerouted_in_period,
5066 	    bead.leads_created_in_period leads_created_in_period,
5068            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5069                  bead.outcome_id, bead.result_id, bead.reason_id,
5070                  ftd.week_id
5071                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5072                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_open_emails,
5073          first_value(bead.accumulated_open_emails)
5074            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5075                  bead.outcome_id, bead.result_id, bead.reason_id,
5076                  ftd.ent_period_id
5077                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5078                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_open_emails,
5079          first_value(bead.accumulated_open_emails)
5080            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5081                  bead.outcome_id, bead.result_id, bead.reason_id,
5082                  ftd.ent_qtr_id
5083                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5084                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_open_emails,
5085          first_value(bead.accumulated_open_emails)
5086            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5087                  bead.outcome_id, bead.result_id, bead.reason_id,
5088                  ftd.ent_year_id
5089                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5090                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_open_emails,
5091          first_value(bead.accumulated_emails_in_queue)
5092            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5093                  bead.outcome_id, bead.result_id, bead.reason_id,
5094                  ftd.week_id
5095                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5096                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_in_queue,
5097          first_value(bead.accumulated_emails_in_queue)
5098            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5099                  bead.outcome_id, bead.result_id, bead.reason_id,
5100                  ftd.ent_period_id
5101                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5102                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_in_queue,
5103          first_value(bead.accumulated_emails_in_queue)
5104            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5105                  bead.outcome_id, bead.result_id, bead.reason_id,
5106                  ftd.ent_qtr_id
5107                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5108                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_in_queue,
5109          first_value(bead.accumulated_emails_in_queue)
5110            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5111                  bead.outcome_id, bead.result_id, bead.reason_id,
5112                  ftd.ent_year_id
5113                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5114                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_in_queue,
5115          first_value(bead.accumulated_emails_one_day)
5116            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5117                  bead.outcome_id, bead.result_id, bead.reason_id,
5118                  ftd.week_id
5119                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5120                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_one_day,
5121          first_value(bead.accumulated_emails_one_day)
5122            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5123                  bead.outcome_id, bead.result_id, bead.reason_id,
5124                  ftd.ent_period_id
5125                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5126                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_one_day,
5127          first_value(bead.accumulated_emails_one_day)
5128            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5129                  bead.outcome_id, bead.result_id, bead.reason_id,
5130                  ftd.ent_qtr_id
5131                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5132                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_one_day,
5133          first_value(bead.accumulated_emails_one_day)
5134            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5135                  bead.outcome_id, bead.result_id, bead.reason_id,
5136                  ftd.ent_year_id
5137                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5138                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_one_day,
5139          first_value(bead.accumulated_emails_three_days)
5140            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5141                  bead.outcome_id, bead.result_id, bead.reason_id,
5142                  ftd.week_id
5146            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5143                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5144                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_three_days,
5145          first_value(bead.accumulated_emails_three_days)
5147                  bead.outcome_id, bead.result_id, bead.reason_id,
5148                  ftd.ent_period_id
5149                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5150                        lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_three_days,
5151          first_value(bead.accumulated_emails_three_days)
5152            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5153                  bead.outcome_id, bead.result_id, bead.reason_id,
5154                  ftd.ent_qtr_id
5155                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5156                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_three_days,
5157          first_value(bead.accumulated_emails_three_days)
5158            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5159                  bead.outcome_id, bead.result_id, bead.reason_id,
5160                  ftd.ent_year_id
5161                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5162                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_three_days,
5163          first_value(bead.accumulated_emails_week)
5164            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5165                  bead.outcome_id, bead.result_id, bead.reason_id,
5166                  ftd.week_id
5167                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5168                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week,
5169          first_value(bead.accumulated_emails_week)
5170            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5171                  bead.outcome_id, bead.result_id, bead.reason_id,
5172                  ftd.ent_period_id
5173                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5174                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week,
5175          first_value(bead.accumulated_emails_week)
5176            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5177                  bead.outcome_id, bead.result_id, bead.reason_id,
5178                  ftd.ent_qtr_id
5179                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5180                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week,
5181          first_value(bead.accumulated_emails_week)
5182            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5183                  bead.outcome_id, bead.result_id, bead.reason_id,
5184                  ftd.ent_year_id
5185                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5186                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week,
5187          first_value(bead.accumulated_emails_week_plus)
5188            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5189                  bead.outcome_id, bead.result_id, bead.reason_id,
5190                  ftd.week_id
5191                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5192                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week_plus,
5193          first_value(bead.accumulated_emails_week_plus)
5194            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5195                  bead.outcome_id, bead.result_id, bead.reason_id,
5196                  ftd.ent_period_id
5197                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5198                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week_plus,
5199          first_value(bead.accumulated_emails_week_plus)
5200            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5201                  bead.outcome_id, bead.result_id, bead.reason_id,
5202                  ftd.ent_qtr_id
5203                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5204                         lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week_plus,
5205          first_value(bead.accumulated_emails_week_plus)
5206            over (partition by bead.agent_id, bead.email_account_id, bead.email_classification_id, bead.party_id,
5207                  bead.outcome_id, bead.result_id, bead.reason_id,
5208                  ftd.ent_year_id
5209                     order by to_date(to_char(bead.period_start_date, 'dd/mm/yyyy ') ||
5210                       lpad(bead.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week_plus
5211        FROM bix_email_details_stg bead,
5212             fii_time_day ftd
5213        WHERE bead.time_id = ftd.report_date_julian
5214        AND   bead.period_type_id = 1
5215        --AND   bead.request_id = g_request_id
5216        ) inv2
5217     GROUP BY
5218          inv2.agent_id,
5219          inv2.email_account_id,
5220          inv2.email_classification_id,
5221          inv2.party_id,
5222          inv2.outcome_id,
5223     inv2.result_id,
5224     inv2.reason_id,
5225     ROLLUP(
5226          inv2.ent_year_id,
5227          inv2.ent_qtr_id,
5228          inv2.ent_period_id,
5229          inv2.week_id)
5230     HAVING
5234   GROUP BY
5231          decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
5232                   decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
5233                          128), 64), 32), 16) IS NOT NULL) rlp
5235     rlp.agent_id,
5236     rlp.email_account_id,
5237     rlp.email_classification_id,
5238     rlp.party_id,
5239     rlp.time_id,
5240     rlp.period_type_id,
5241     rlp.period_start_date,
5242     rlp.period_start_time,
5243     rlp.outcome_id,
5244     rlp.result_id,
5245     rlp.reason_id) change
5246   ON (  bead.agent_id = change.agent_id
5247     AND bead.email_account_id = change.email_account_id
5248     AND bead.email_classification_id = change.email_classification_id
5249     AND bead.party_id = change.party_id
5250     AND bead.time_id  = change.time_id
5251     AND bead.period_type_id = change.period_type_id
5252     AND bead.period_start_date = change.period_start_date
5253     AND bead.period_start_time = change.period_start_time
5254     AND bead.outcome_id        = change.outcome_id
5255     AND bead.result_id         = change.result_id
5256     AND bead.reason_id         = change.reason_id )
5257   WHEN MATCHED THEN
5258   UPDATE SET
5259     bead.emails_offered_in_period =
5260         decode(change.emails_offered_in_period, to_number(null), bead.emails_offered_in_period,
5261            nvl(bead.emails_offered_in_period,0) + change.emails_offered_in_period),
5262     bead.emails_fetched_in_period =
5263         decode(change.emails_fetched_in_period, to_number(null), bead.emails_fetched_in_period,
5264            nvl(bead.emails_fetched_in_period,0) + change.emails_fetched_in_period),
5265     bead.emails_replied_in_period =
5266         decode(change.emails_replied_in_period, to_number(null), bead.emails_replied_in_period,
5267            nvl(bead.emails_replied_in_period,0) + change.emails_replied_in_period),
5268     bead.emails_rpld_by_goal_in_period =
5269         decode(change.emails_rpld_by_goal_in_period, to_number(null), bead.emails_rpld_by_goal_in_period,
5270              nvl(bead.emails_rpld_by_goal_in_period,0) + change.emails_rpld_by_goal_in_period),
5271     bead.AGENT_EMAILS_RPLD_BY_GOAL =
5272             decode(change.AGENT_EMAILS_RPLD_BY_GOAL, to_number(null), bead.AGENT_EMAILS_RPLD_BY_GOAL,
5273                  nvl(bead.AGENT_EMAILS_RPLD_BY_GOAL,0) + change.AGENT_EMAILS_RPLD_BY_GOAL),
5274     bead.emails_deleted_in_period =
5275         decode(change.emails_deleted_in_period, to_number(null), bead.emails_deleted_in_period,
5276            nvl(bead.emails_deleted_in_period,0) + change.emails_deleted_in_period),
5277     bead.emails_trnsfrd_out_in_period =
5278         decode(change.emails_trnsfrd_out_in_period, to_number(null), bead.emails_trnsfrd_out_in_period,
5279            nvl(bead.emails_trnsfrd_out_in_period,0) + change.emails_trnsfrd_out_in_period),
5280     bead.emails_trnsfrd_in_in_period =
5281         decode(change.emails_trnsfrd_in_in_period, to_number(null), bead.emails_trnsfrd_in_in_period,
5282            nvl(bead.emails_trnsfrd_in_in_period,0) + change.emails_trnsfrd_in_in_period),
5283     bead.emails_rsl_and_trfd_in_period =
5284         decode(change.emails_rsl_and_trfd_in_period,to_number(null),bead.emails_rsl_and_trfd_in_period,
5285            nvl(bead.emails_rsl_and_trfd_in_period,0) + change.emails_rsl_and_trfd_in_period),
5286     bead.emails_assigned_in_period =
5287         decode(change.emails_assigned_in_period, to_number(null), bead.emails_assigned_in_period,
5288            nvl(bead.emails_assigned_in_period,0) + change.emails_assigned_in_period),
5289     bead.emails_auto_routed_in_period =
5290         decode(change.emails_auto_routed_in_period, to_number(null), bead.emails_auto_routed_in_period,
5291            nvl(bead.emails_auto_routed_in_period,0) + change.emails_auto_routed_in_period),
5292     bead.emails_auto_uptd_sr_in_period =
5293         decode(change.emails_auto_uptd_sr_in_period, to_number(null), bead.emails_auto_uptd_sr_in_period,
5294            nvl(bead.emails_auto_uptd_sr_in_period,0) + change.emails_auto_uptd_sr_in_period),
5295     bead.sr_created_in_period = decode(change.sr_created_in_period, to_number(null), bead.sr_created_in_period,
5296            nvl(bead.sr_created_in_period,0) + change.sr_created_in_period),
5297     bead.oldest_email_open_date =
5298            decode(change.oldest_email_open_date,NULL,bead.oldest_email_open_date,
5299                decode(bead.oldest_email_open_date,NULL,change.oldest_email_open_date,
5300                  decode(sign(bead.oldest_email_open_date - change.oldest_email_open_date),
5301                     -1,bead.oldest_email_open_date, change.oldest_email_open_date))),
5302     bead.oldest_email_queue_date =
5303            decode(change.oldest_email_queue_date,NULL,bead.oldest_email_queue_date,
5304                decode(bead.oldest_email_queue_date,NULL,change.oldest_email_queue_date,
5305                  decode(sign(bead.oldest_email_queue_date - change.oldest_email_queue_date),
5306                     -1,bead.oldest_email_queue_date, change.oldest_email_queue_date))),
5307     bead.email_resp_time_in_period =
5308         decode(change.email_resp_time_in_period, to_number(null), bead.email_resp_time_in_period,
5309            nvl(bead.email_resp_time_in_period,0) + change.email_resp_time_in_period),
5310     bead.agent_resp_time_in_period =
5311         decode(change.agent_resp_time_in_period, to_number(null), bead.agent_resp_time_in_period,
5312            nvl(bead.agent_resp_time_in_period,0) + change.agent_resp_time_in_period),
5313     bead.accumulated_open_emails = change.acc_open_emails,
5314     bead.accumulated_open_age = change.acc_open_age,
5315     bead.accumulated_emails_in_queue = change.acc_emails_in_queue,
5316     bead.accumulated_queue_time = change.acc_queue_time,
5317     bead.accumulated_emails_one_day = change.acc_emails_one_day,
5318     bead.accumulated_emails_three_days = change.acc_emails_three_days,
5319     bead.accumulated_emails_week = change.acc_emails_week,
5320     bead.accumulated_emails_week_plus = change.acc_emails_week_plus,
5321     bead.emails_orr_count_in_period  = decode(change.emails_orr_count_in_period,to_number(null), bead.emails_orr_count_in_period ,
5325     bead.EMAILS_AUTO_DELETED_IN_PERIOD = decode(change.EMAILS_AUTO_DELETED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_DELETED_IN_PERIOD,
5322       nvl(bead.emails_orr_count_in_period,0) + change.emails_orr_count_in_period),
5323     bead.EMAILS_AUTO_REPLIED_IN_PERIOD = decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_REPLIED_IN_PERIOD,
5324        nvl(bead.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + change.EMAILS_AUTO_REPLIED_IN_PERIOD),
5326       nvl(bead.EMAILS_AUTO_DELETED_IN_PERIOD,0) + change.EMAILS_AUTO_DELETED_IN_PERIOD),
5327     bead.EMAILS_AUTO_RESOLVED_IN_PERIOD = decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,to_number(null),bead.EMAILS_AUTO_RESOLVED_IN_PERIOD,
5328       nvl(bead.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
5329     bead.emails_composed_in_period = decode(change.emails_composed_in_period,to_number(null),bead.emails_composed_in_period,
5330                                             nvl(bead.emails_composed_in_period,0) + change.emails_composed_in_period),
5331     bead.emails_rerouted_in_period = decode(change.emails_rerouted_in_period,to_number(null),bead.emails_rerouted_in_period,
5332                                             nvl(bead.emails_rerouted_in_period,0) + change.emails_rerouted_in_period ),
5333     bead.leads_created_in_period = decode(change.leads_created_in_period,to_number(null),bead.leads_created_in_period,
5334                                           nvl(bead.leads_created_in_period,0) + change.leads_created_in_period ),
5335     bead.last_update_date = g_sysdate,
5336     bead.last_updated_by  = g_user_id,
5337     bead.program_update_date = g_sysdate
5338   WHEN NOT MATCHED THEN INSERT
5339      (agent_id,
5340       email_account_id,
5341       email_classification_id,
5342       party_id,
5343       outcome_id,
5344       result_id,
5345       reason_id,
5346       time_id,
5347       period_type_id,
5348       period_start_date,
5349       period_start_time,
5350       created_by,
5351       creation_date,
5352       last_updated_by,
5353       last_update_date,
5354       emails_offered_in_period,
5355       emails_fetched_in_period,
5356       emails_replied_in_period,
5357       emails_rpld_by_goal_in_period,
5358       AGENT_EMAILS_RPLD_BY_GOAL,
5359       emails_deleted_in_period,
5360       emails_trnsfrd_out_in_period,
5361       emails_trnsfrd_in_in_period,
5362       emails_rsl_and_trfd_in_period,
5363       emails_assigned_in_period,
5364       emails_auto_routed_in_period,
5365       emails_auto_uptd_sr_in_period,
5366       sr_created_in_period,
5367       oldest_email_open_date,
5368       oldest_email_queue_date,
5369       email_resp_time_in_period,
5370       agent_resp_time_in_period,
5371       accumulated_open_emails,
5372       accumulated_open_age,
5373       accumulated_emails_in_queue,
5374       accumulated_queue_time,
5375       accumulated_emails_one_day,
5376       accumulated_emails_three_days,
5377       accumulated_emails_week,
5378       accumulated_emails_week_plus,
5379       emails_orr_count_in_period,
5380       EMAILS_AUTO_REPLIED_IN_PERIOD,
5381       EMAILS_AUTO_DELETED_IN_PERIOD,
5382       EMAILS_AUTO_RESOLVED_IN_PERIOD,
5383       emails_composed_in_period,
5384 	 emails_rerouted_in_period,
5385 	 leads_created_in_period,
5386       request_id,
5387       program_application_id,
5388       program_id,
5389       program_update_date )
5390     VALUES (
5391       change.agent_id,
5392       change.email_account_id,
5393       change.email_classification_id,
5394       change.party_id,
5395       change.outcome_id,
5396       change.result_id,
5397       change.reason_id,
5398       change.time_id,
5399       change.period_type_id,
5400       change.period_start_date,
5401       change.period_start_time,
5402       g_user_id,
5403       g_sysdate,
5404       g_user_id,
5405       g_sysdate,
5406       decode(change.emails_offered_in_period, 0, to_number(null), change.emails_offered_in_period),
5407       decode(change.emails_fetched_in_period, 0, to_number(null), change.emails_fetched_in_period),
5408       decode(change.emails_replied_in_period, 0, to_number(null), change.emails_replied_in_period),
5409       decode(change.emails_rpld_by_goal_in_period, 0, to_number(null), change.emails_rpld_by_goal_in_period),
5410       decode(change.AGENT_EMAILS_RPLD_BY_GOAL, 0, to_number(null), change.AGENT_EMAILS_RPLD_BY_GOAL),
5411       decode(change.emails_deleted_in_period, 0, to_number(null), change.emails_deleted_in_period),
5412       decode(change.emails_trnsfrd_out_in_period, 0, to_number(null), change.emails_trnsfrd_out_in_period),
5413       decode(change.emails_trnsfrd_in_in_period, 0, to_number(null), change.emails_trnsfrd_in_in_period),
5414       decode(change.emails_rsl_and_trfd_in_period, 0, to_number(null), change.emails_rsl_and_trfd_in_period),
5415       decode(change.emails_assigned_in_period, 0, to_number(null), change.emails_assigned_in_period),
5416       decode(change.emails_auto_routed_in_period, 0, to_number(null), change.emails_auto_routed_in_period),
5417       decode(change.emails_auto_uptd_sr_in_period, 0, to_number(null), change.emails_auto_uptd_sr_in_period),
5418       decode(change.sr_created_in_period, 0, to_number(null), change.sr_created_in_period),
5419       change.oldest_email_open_date,
5420       change.oldest_email_queue_date,
5421       decode(change.email_resp_time_in_period, 0, to_number(null), change.email_resp_time_in_period),
5422       decode(change.agent_resp_time_in_period, 0, to_number(null), change.agent_resp_time_in_period),
5423       decode(change.acc_open_emails, 0, to_number(null), change.acc_open_emails),
5424       decode(change.acc_open_age, 0, to_number(null), change.acc_open_age),
5425       decode(change.acc_emails_in_queue, 0, to_number(null), change.acc_emails_in_queue),
5426       decode(change.acc_queue_time, 0, to_number(null), change.acc_queue_time),
5427       decode(change.acc_emails_one_day, 0, to_number(null), change.acc_emails_one_day),
5428       decode(change.acc_emails_three_days, 0, to_number(null), change.acc_emails_three_days),
5432       decode(change.EMAILS_AUTO_REPLIED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_REPLIED_IN_PERIOD),
5429       decode(change.acc_emails_week, 0, to_number(null), change.acc_emails_week),
5430       decode(change.acc_emails_week_plus, 0, to_number(null), change.acc_emails_week_plus),
5431       decode(change.emails_orr_count_in_period,0,to_number(null),change.emails_orr_count_in_period),
5433       decode(change.EMAILS_AUTO_DELETED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_DELETED_IN_PERIOD),
5434       decode(change.EMAILS_AUTO_RESOLVED_IN_PERIOD,0,to_number(null),change.EMAILS_AUTO_RESOLVED_IN_PERIOD),
5435       decode(change.emails_composed_in_period,0,to_number(null),change.emails_composed_in_period),
5436 	 decode(change.emails_rerouted_in_period,0,to_number(null),change.emails_rerouted_in_period),
5437 	 decode(change.leads_created_in_period,0,to_number(null),change.leads_created_in_period),
5438       g_request_id,
5439       g_program_appl_id,
5440       g_program_id,
5441       g_sysdate);
5442 
5443   g_rows_ins_upd := g_rows_ins_upd + SQL%ROWCOUNT;
5444 
5445   COMMIT;
5446 
5447   write_log('Finished procedure summarize_data at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
5448 
5449 EXCEPTION
5450   WHEN OTHERS THEN
5451     write_log('Error in procedure summarize_data : Error : ' || sqlerrm);
5452     RAISE;
5453 END summarize_data;
5454 
5455 ---------------------------------------------------------------------------
5456 
5457 PROCEDURE move_stg_to_fact
5458 IS
5459 
5460 BEGIN
5461 
5462 MERGE INTO BIX_EMAIL_DETAILS_F summ
5463 USING
5464 (
5465 SELECT
5466  AGENT_ID,
5467  EMAIL_ACCOUNT_ID,
5468  EMAIL_CLASSIFICATION_ID,
5469  PARTY_ID,
5470  TIME_ID,
5471  PERIOD_TYPE_ID,
5472  PERIOD_START_DATE,
5473  PERIOD_START_TIME,
5474  CREATED_BY,
5475  CREATION_DATE,
5476  LAST_UPDATED_BY,
5477  LAST_UPDATE_DATE,
5478  LAST_UPDATE_LOGIN,
5479  nvl(EMAILS_OFFERED_IN_PERIOD,0) EMAILS_OFFERED_IN_PERIOD,
5480  nvl(EMAILS_FETCHED_IN_PERIOD,0) EMAILS_FETCHED_IN_PERIOD,
5481  nvl(EMAILS_REPLIED_IN_PERIOD,0) EMAILS_REPLIED_IN_PERIOD,
5482  nvl(EMAILS_RPLD_BY_GOAL_IN_PERIOD,0) EMAILS_RPLD_BY_GOAL_IN_PERIOD,
5483  nvl(AGENT_EMAILS_RPLD_BY_GOAL,0) AGENT_EMAILS_RPLD_BY_GOAL,
5484  nvl(EMAILS_DELETED_IN_PERIOD,0) EMAILS_DELETED_IN_PERIOD,
5485  nvl(EMAILS_TRNSFRD_OUT_IN_PERIOD,0) EMAILS_TRNSFRD_OUT_IN_PERIOD,
5486  nvl(EMAILS_TRNSFRD_IN_IN_PERIOD,0) EMAILS_TRNSFRD_IN_IN_PERIOD,
5487  nvl(EMAILS_RSL_AND_TRFD_IN_PERIOD,0) EMAILS_RSL_AND_TRFD_IN_PERIOD,
5488  nvl(EMAILS_ASSIGNED_IN_PERIOD,0) EMAILS_ASSIGNED_IN_PERIOD,
5489  nvl(EMAILS_AUTO_ROUTED_IN_PERIOD,0) EMAILS_AUTO_ROUTED_IN_PERIOD,
5490  nvl(EMAILS_AUTO_UPTD_SR_IN_PERIOD,0) EMAILS_AUTO_UPTD_SR_IN_PERIOD,
5491  nvl(SR_CREATED_IN_PERIOD,0) SR_CREATED_IN_PERIOD,
5492  nvl(ACCUMULATED_OPEN_EMAILS,0) ACCUMULATED_OPEN_EMAILS,
5493  NULL ACCUMULATED_OPEN_AGE,
5494  to_date(NULL) OLDEST_EMAIL_OPEN_DATE,
5495  nvl(ACCUMULATED_EMAILS_IN_QUEUE,0) ACCUMULATED_EMAILS_IN_QUEUE,
5496  NULL ACCUMULATED_QUEUE_TIME,
5497  to_date(NULL) OLDEST_EMAIL_QUEUE_DATE,
5498  nvl(EMAIL_RESP_TIME_IN_PERIOD,0) EMAIL_RESP_TIME_IN_PERIOD,
5499  nvl(AGENT_RESP_TIME_IN_PERIOD,0) AGENT_RESP_TIME_IN_PERIOD,
5500  nvl(ACCUMULATED_EMAILS_ONE_DAY,0) ACCUMULATED_EMAILS_ONE_DAY,
5501  nvl(ACCUMULATED_EMAILS_THREE_DAYS,0) ACCUMULATED_EMAILS_THREE_DAYS,
5502  nvl(ACCUMULATED_EMAILS_WEEK,0) ACCUMULATED_EMAILS_WEEK,
5503  nvl(ACCUMULATED_EMAILS_WEEK_PLUS,0) ACCUMULATED_EMAILS_WEEK_PLUS,
5504  nvl(ONE_RSLN_IN_PERIOD,0) ONE_RSLN_IN_PERIOD,
5505  nvl(TWO_RSLN_IN_PERIOD,0) TWO_RSLN_IN_PERIOD,
5506  nvl(THREE_RSLN_IN_PERIOD,0) THREE_RSLN_IN_PERIOD,
5507  nvl(FOUR_RSLN_IN_PERIOD,0) FOUR_RSLN_IN_PERIOD,
5508  nvl(INTERACTION_THREADS_IN_PERIOD,0) INTERACTION_THREADS_IN_PERIOD,
5509  OUTCOME_ID,
5510  RESULT_ID,
5511  REASON_ID,
5512  nvl(EMAILS_AUTO_REPLIED_IN_PERIOD,0) EMAILS_AUTO_REPLIED_IN_PERIOD,
5513  nvl(EMAILS_AUTO_DELETED_IN_PERIOD,0) EMAILS_AUTO_DELETED_IN_PERIOD,
5514  nvl(EMAILS_AUTO_RESOLVED_IN_PERIOD,0) EMAILS_AUTO_RESOLVED_IN_PERIOD,
5515  nvl(EMAILS_ORR_COUNT_IN_PERIOD,0) EMAILS_ORR_COUNT_IN_PERIOD,
5516  nvl(EMAILS_COMPOSED_IN_PERIOD,0) EMAILS_COMPOSED_IN_PERIOD,
5517  nvl(LEADS_CREATED_IN_PERIOD,0) LEADS_CREATED_IN_PERIOD,
5518  nvl(EMAILS_REROUTED_IN_PERIOD,0) EMAILS_REROUTED_IN_PERIOD
5519 FROM BIX_EMAIL_DETAILS_STG
5520 ) STG
5521 ON
5522 (
5523 summ.AGENT_ID = stg.AGENT_ID
5524 AND summ.EMAIL_ACCOUNT_ID = stg.EMAIL_ACCOUNT_ID
5525 AND summ.EMAIL_CLASSIFICATION_ID = stg.EMAIL_CLASSIFICATION_ID
5526 AND summ.PARTY_ID = stg.PARTY_ID
5527 AND summ.TIME_ID = stg.TIME_ID
5528 AND summ.PERIOD_TYPE_ID = stg.PERIOD_TYPE_ID
5529 AND summ.PERIOD_START_DATE = stg.PERIOD_START_DATE
5530 AND summ.PERIOD_START_TIME = stg.PERIOD_START_TIME
5531 AND summ.OUTCOME_ID = stg.OUTCOME_ID
5532 AND summ.RESULT_ID = stg.RESULT_ID
5533 AND summ.REASON_ID = stg.REASON_ID
5534 )
5535 WHEN MATCHED
5536 THEN
5537 UPDATE
5538 SET
5539  EMAILS_OFFERED_IN_PERIOD  =
5540      decode (
5541      nvl(summ.EMAILS_OFFERED_IN_PERIOD,0) + stg.EMAILS_OFFERED_IN_PERIOD,0,NULL,
5542      nvl(summ.EMAILS_OFFERED_IN_PERIOD,0) + stg.EMAILS_OFFERED_IN_PERIOD
5543             ),
5544  EMAILS_FETCHED_IN_PERIOD =
5545      decode (
5546      nvl(summ.EMAILS_FETCHED_IN_PERIOD,0) + stg.EMAILS_FETCHED_IN_PERIOD ,0,NULL,
5547      nvl(summ.EMAILS_FETCHED_IN_PERIOD,0) + stg.EMAILS_FETCHED_IN_PERIOD
5548             ),
5549  EMAILS_REPLIED_IN_PERIOD =
5550      decode (
5551      nvl(summ.EMAILS_REPLIED_IN_PERIOD,0) + stg.EMAILS_REPLIED_IN_PERIOD ,0,NULL,
5552      nvl(summ.EMAILS_REPLIED_IN_PERIOD,0) + stg.EMAILS_REPLIED_IN_PERIOD
5553             ),
5554  EMAILS_RPLD_BY_GOAL_IN_PERIOD =
5555      decode (
5556      nvl(summ.EMAILS_RPLD_BY_GOAL_IN_PERIOD,0) + stg.EMAILS_RPLD_BY_GOAL_IN_PERIOD ,0,NULL,
5557      nvl(summ.EMAILS_RPLD_BY_GOAL_IN_PERIOD,0) + stg.EMAILS_RPLD_BY_GOAL_IN_PERIOD
5558             ),
5559  AGENT_EMAILS_RPLD_BY_GOAL =
5560       decode (
5564  EMAILS_DELETED_IN_PERIOD =
5561       nvl(summ.AGENT_EMAILS_RPLD_BY_GOAL,0) + stg.AGENT_EMAILS_RPLD_BY_GOAL ,0,NULL,
5562       nvl(summ.AGENT_EMAILS_RPLD_BY_GOAL,0) + stg.AGENT_EMAILS_RPLD_BY_GOAL
5563              ),
5565      decode (
5566      nvl(summ.EMAILS_DELETED_IN_PERIOD,0) + stg.EMAILS_DELETED_IN_PERIOD ,0,NULL,
5567      nvl(summ.EMAILS_DELETED_IN_PERIOD,0) + stg.EMAILS_DELETED_IN_PERIOD
5568             ),
5569  EMAILS_TRNSFRD_OUT_IN_PERIOD =
5570      decode (
5571      nvl(summ.EMAILS_TRNSFRD_OUT_IN_PERIOD,0) + stg.EMAILS_TRNSFRD_OUT_IN_PERIOD ,0,NULL,
5572      nvl(summ.EMAILS_TRNSFRD_OUT_IN_PERIOD,0) + stg.EMAILS_TRNSFRD_OUT_IN_PERIOD
5573             ),
5574  EMAILS_TRNSFRD_IN_IN_PERIOD =
5575      decode (
5576      nvl(summ.EMAILS_TRNSFRD_IN_IN_PERIOD,0) + stg.EMAILS_TRNSFRD_IN_IN_PERIOD ,0,NULL,
5577      nvl(summ.EMAILS_TRNSFRD_IN_IN_PERIOD,0) + stg.EMAILS_TRNSFRD_IN_IN_PERIOD
5578             ),
5579  EMAILS_RSL_AND_TRFD_IN_PERIOD =
5580      decode (
5581      nvl(summ.EMAILS_RSL_AND_TRFD_IN_PERIOD,0) + stg.EMAILS_RSL_AND_TRFD_IN_PERIOD ,0,NULL,
5582      nvl(summ.EMAILS_RSL_AND_TRFD_IN_PERIOD,0) + stg.EMAILS_RSL_AND_TRFD_IN_PERIOD
5583             ),
5584  EMAILS_ASSIGNED_IN_PERIOD =
5585      decode (
5586      nvl(summ.EMAILS_ASSIGNED_IN_PERIOD,0) + stg.EMAILS_ASSIGNED_IN_PERIOD ,0,NULL,
5587      nvl(summ.EMAILS_ASSIGNED_IN_PERIOD,0) + stg.EMAILS_ASSIGNED_IN_PERIOD
5588             ),
5589  EMAILS_AUTO_ROUTED_IN_PERIOD =
5590      decode (
5591      nvl(summ.EMAILS_AUTO_ROUTED_IN_PERIOD,0) + stg.EMAILS_AUTO_ROUTED_IN_PERIOD ,0,NULL,
5592      nvl(summ.EMAILS_AUTO_ROUTED_IN_PERIOD,0) + stg.EMAILS_AUTO_ROUTED_IN_PERIOD
5593             ),
5594  EMAILS_AUTO_UPTD_SR_IN_PERIOD =
5595      decode (
5596      nvl(summ.EMAILS_AUTO_UPTD_SR_IN_PERIOD,0) + stg.EMAILS_AUTO_UPTD_SR_IN_PERIOD ,0,NULL,
5597      nvl(summ.EMAILS_AUTO_UPTD_SR_IN_PERIOD,0) + stg.EMAILS_AUTO_UPTD_SR_IN_PERIOD
5598             ),
5599  SR_CREATED_IN_PERIOD =
5600      decode (
5601      nvl(summ.SR_CREATED_IN_PERIOD,0) + stg.SR_CREATED_IN_PERIOD ,0,NULL,
5602      nvl(summ.SR_CREATED_IN_PERIOD,0) + stg.SR_CREATED_IN_PERIOD
5603             ),
5604  ACCUMULATED_OPEN_EMAILS = stg.ACCUMULATED_OPEN_EMAILS,
5605  ACCUMULATED_EMAILS_IN_QUEUE = stg.ACCUMULATED_EMAILS_IN_QUEUE,
5606  EMAIL_RESP_TIME_IN_PERIOD =
5607      decode (
5608      nvl(summ.EMAIL_RESP_TIME_IN_PERIOD,0) + stg.EMAIL_RESP_TIME_IN_PERIOD ,0,NULL,
5609      nvl(summ.EMAIL_RESP_TIME_IN_PERIOD,0) + stg.EMAIL_RESP_TIME_IN_PERIOD
5610             ),
5611  AGENT_RESP_TIME_IN_PERIOD =
5612      decode (
5613      nvl(summ.AGENT_RESP_TIME_IN_PERIOD,0) + stg.AGENT_RESP_TIME_IN_PERIOD ,0,NULL,
5614      nvl(summ.AGENT_RESP_TIME_IN_PERIOD,0) + stg.AGENT_RESP_TIME_IN_PERIOD
5615             ),
5616  ACCUMULATED_EMAILS_ONE_DAY = decode(stg.ACCUMULATED_EMAILS_ONE_DAY,0,to_number(null),stg.ACCUMULATED_EMAILS_ONE_DAY),
5617  ACCUMULATED_EMAILS_THREE_DAYS = decode(stg.ACCUMULATED_EMAILS_THREE_DAYS,0,to_number(null),stg.ACCUMULATED_EMAILS_THREE_DAYS),
5618  ACCUMULATED_EMAILS_WEEK = decode(stg.ACCUMULATED_EMAILS_WEEK,0,to_number(null),stg.ACCUMULATED_EMAILS_WEEK),
5619  ACCUMULATED_EMAILS_WEEK_PLUS = decode(stg.ACCUMULATED_EMAILS_WEEK_PLUS,0,to_number(null),stg.ACCUMULATED_EMAILS_WEEK_PLUS),
5620  ONE_RSLN_IN_PERIOD =
5621      decode (
5622      nvl(summ.ONE_RSLN_IN_PERIOD,0) + stg.ONE_RSLN_IN_PERIOD ,0,NULL,
5623      nvl(summ.ONE_RSLN_IN_PERIOD,0) + stg.ONE_RSLN_IN_PERIOD
5624             ),
5625  TWO_RSLN_IN_PERIOD =
5626      decode (
5627      nvl(summ.TWO_RSLN_IN_PERIOD,0) + stg.TWO_RSLN_IN_PERIOD ,0,NULL,
5628      nvl(summ.TWO_RSLN_IN_PERIOD,0) + stg.TWO_RSLN_IN_PERIOD
5629             ),
5630  THREE_RSLN_IN_PERIOD =
5631      decode (
5632      nvl(summ.THREE_RSLN_IN_PERIOD,0) + stg.THREE_RSLN_IN_PERIOD ,0,NULL,
5633      nvl(summ.THREE_RSLN_IN_PERIOD,0) + stg.THREE_RSLN_IN_PERIOD
5634             ),
5635  FOUR_RSLN_IN_PERIOD =
5636      decode (
5637      nvl(summ.FOUR_RSLN_IN_PERIOD,0) + stg.FOUR_RSLN_IN_PERIOD ,0,NULL,
5638      nvl(summ.FOUR_RSLN_IN_PERIOD,0) + stg.FOUR_RSLN_IN_PERIOD
5639             ),
5640  INTERACTION_THREADS_IN_PERIOD =
5641      decode (
5642      nvl(summ.INTERACTION_THREADS_IN_PERIOD,0) + stg.INTERACTION_THREADS_IN_PERIOD ,0,NULL,
5643      nvl(summ.INTERACTION_THREADS_IN_PERIOD,0) + stg.INTERACTION_THREADS_IN_PERIOD
5644             ),
5645  EMAILS_AUTO_REPLIED_IN_PERIOD =
5646      decode (
5647      nvl(summ.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + stg.EMAILS_AUTO_REPLIED_IN_PERIOD ,0,NULL,
5648      nvl(summ.EMAILS_AUTO_REPLIED_IN_PERIOD,0) + stg.EMAILS_AUTO_REPLIED_IN_PERIOD
5649             ),
5650  EMAILS_AUTO_DELETED_IN_PERIOD =
5651      decode (
5652      nvl(summ.EMAILS_AUTO_DELETED_IN_PERIOD,0) + stg.EMAILS_AUTO_DELETED_IN_PERIOD ,0,NULL,
5653      nvl(summ.EMAILS_AUTO_DELETED_IN_PERIOD,0) + stg.EMAILS_AUTO_DELETED_IN_PERIOD
5654             ),
5655  EMAILS_AUTO_RESOLVED_IN_PERIOD =
5656      decode (
5657      nvl(summ.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + stg.EMAILS_AUTO_RESOLVED_IN_PERIOD ,0,NULL,
5658      nvl(summ.EMAILS_AUTO_RESOLVED_IN_PERIOD,0) + stg.EMAILS_AUTO_RESOLVED_IN_PERIOD
5659             ),
5660  EMAILS_ORR_COUNT_IN_PERIOD =
5661      decode (
5662      nvl(summ.EMAILS_ORR_COUNT_IN_PERIOD,0) + stg.EMAILS_ORR_COUNT_IN_PERIOD ,0,NULL,
5663      nvl(summ.EMAILS_ORR_COUNT_IN_PERIOD,0) + stg.EMAILS_ORR_COUNT_IN_PERIOD
5664             ),
5665  EMAILS_COMPOSED_IN_PERIOD =
5666      decode (
5667      nvl(summ.EMAILS_COMPOSED_IN_PERIOD,0) + stg.EMAILS_COMPOSED_IN_PERIOD ,0,NULL,
5668      nvl(summ.EMAILS_COMPOSED_IN_PERIOD,0) + stg.EMAILS_COMPOSED_IN_PERIOD
5669             ),
5670  LEADS_CREATED_IN_PERIOD =
5671      decode (
5672      nvl(summ.LEADS_CREATED_IN_PERIOD,0) + stg.LEADS_CREATED_IN_PERIOD ,0,NULL,
5673      nvl(summ.LEADS_CREATED_IN_PERIOD,0) + stg.LEADS_CREATED_IN_PERIOD
5674             ),
5675  EMAILS_REROUTED_IN_PERIOD =
5676      decode (
5677      nvl(summ.EMAILS_REROUTED_IN_PERIOD,0) + stg.EMAILS_REROUTED_IN_PERIOD ,0,NULL,
5681 THEN
5678      nvl(summ.EMAILS_REROUTED_IN_PERIOD,0) + stg.EMAILS_REROUTED_IN_PERIOD
5679             )
5680 WHEN NOT MATCHED
5682 INSERT
5683 (
5684  summ.AGENT_ID,
5685  summ.EMAIL_ACCOUNT_ID,
5686  summ.EMAIL_CLASSIFICATION_ID,
5687  summ.PARTY_ID,
5688  summ.TIME_ID,
5689  summ.PERIOD_TYPE_ID,
5690  summ.PERIOD_START_DATE,
5691  summ.PERIOD_START_TIME,
5692  summ.CREATED_BY,
5693  summ.CREATION_DATE,
5694  summ.LAST_UPDATED_BY,
5695  summ.LAST_UPDATE_DATE,
5696  summ.LAST_UPDATE_LOGIN,
5697  summ.EMAILS_OFFERED_IN_PERIOD,
5698  summ.EMAILS_FETCHED_IN_PERIOD,
5699  summ.EMAILS_REPLIED_IN_PERIOD,
5700  summ.EMAILS_RPLD_BY_GOAL_IN_PERIOD,
5701  summ.AGENT_EMAILS_RPLD_BY_GOAL,
5702  summ.EMAILS_DELETED_IN_PERIOD,
5703  summ.EMAILS_TRNSFRD_OUT_IN_PERIOD,
5704  summ.EMAILS_TRNSFRD_IN_IN_PERIOD,
5705  summ.EMAILS_RSL_AND_TRFD_IN_PERIOD,
5706  summ.EMAILS_ASSIGNED_IN_PERIOD,
5707  summ.EMAILS_AUTO_ROUTED_IN_PERIOD,
5708  summ.EMAILS_AUTO_UPTD_SR_IN_PERIOD,
5709  summ.SR_CREATED_IN_PERIOD,
5710  summ.ACCUMULATED_OPEN_EMAILS,
5711  summ.ACCUMULATED_OPEN_AGE,
5712  summ.OLDEST_EMAIL_OPEN_DATE,
5713  summ.ACCUMULATED_EMAILS_IN_QUEUE,
5714  summ.ACCUMULATED_QUEUE_TIME,
5715  summ.OLDEST_EMAIL_QUEUE_DATE,
5716  summ.EMAIL_RESP_TIME_IN_PERIOD,
5717  summ.AGENT_RESP_TIME_IN_PERIOD,
5718  summ.ACCUMULATED_EMAILS_ONE_DAY,
5719  summ.ACCUMULATED_EMAILS_THREE_DAYS,
5720  summ.ACCUMULATED_EMAILS_WEEK,
5721  summ.ACCUMULATED_EMAILS_WEEK_PLUS,
5722  summ.ONE_RSLN_IN_PERIOD,
5723  summ.TWO_RSLN_IN_PERIOD,
5724  summ.THREE_RSLN_IN_PERIOD,
5725  summ.FOUR_RSLN_IN_PERIOD,
5726  summ.INTERACTION_THREADS_IN_PERIOD,
5727  summ.OUTCOME_ID,
5728  summ.RESULT_ID,
5729  summ.REASON_ID,
5730  summ.EMAILS_AUTO_REPLIED_IN_PERIOD,
5731  summ.EMAILS_AUTO_DELETED_IN_PERIOD,
5732  summ.EMAILS_AUTO_RESOLVED_IN_PERIOD,
5733  summ.EMAILS_ORR_COUNT_IN_PERIOD,
5734  summ.EMAILS_COMPOSED_IN_PERIOD,
5735  summ.LEADS_CREATED_IN_PERIOD,
5736  summ.EMAILS_REROUTED_IN_PERIOD
5737 )
5738 values
5739 (
5740  stg.AGENT_ID,
5741  stg.EMAIL_ACCOUNT_ID,
5742  stg.EMAIL_CLASSIFICATION_ID,
5743  stg.PARTY_ID,
5744  stg.TIME_ID,
5745  stg.PERIOD_TYPE_ID,
5746  stg.PERIOD_START_DATE,
5747  stg.PERIOD_START_TIME,
5748  stg.CREATED_BY,
5749  stg.CREATION_DATE,
5750  stg.LAST_UPDATED_BY,
5751  stg.LAST_UPDATE_DATE,
5752  stg.LAST_UPDATE_LOGIN,
5753  decode(stg.EMAILS_OFFERED_IN_PERIOD, 0,to_number(null),stg.EMAILS_OFFERED_IN_PERIOD),
5754  decode(stg.EMAILS_FETCHED_IN_PERIOD, 0,to_number(null),stg.EMAILS_FETCHED_IN_PERIOD),
5755  decode(stg.EMAILS_REPLIED_IN_PERIOD, 0,to_number(null),stg.EMAILS_REPLIED_IN_PERIOD),
5756  decode(stg.EMAILS_RPLD_BY_GOAL_IN_PERIOD, 0,to_number(null),stg.EMAILS_RPLD_BY_GOAL_IN_PERIOD),
5757  decode(stg.AGENT_EMAILS_RPLD_BY_GOAL, 0,to_number(null),stg.AGENT_EMAILS_RPLD_BY_GOAL),
5758  decode(stg.EMAILS_DELETED_IN_PERIOD, 0,to_number(null),stg.EMAILS_DELETED_IN_PERIOD),
5759  decode(stg.EMAILS_TRNSFRD_OUT_IN_PERIOD, 0,to_number(null),stg.EMAILS_TRNSFRD_OUT_IN_PERIOD),
5760  decode(stg.EMAILS_TRNSFRD_IN_IN_PERIOD, 0,to_number(null),stg.EMAILS_TRNSFRD_IN_IN_PERIOD),
5761  decode(stg.EMAILS_RSL_AND_TRFD_IN_PERIOD, 0,to_number(null),stg.EMAILS_RSL_AND_TRFD_IN_PERIOD),
5762  decode(stg.EMAILS_ASSIGNED_IN_PERIOD, 0,to_number(null),stg.EMAILS_ASSIGNED_IN_PERIOD),
5763  decode(stg.EMAILS_AUTO_ROUTED_IN_PERIOD, 0,to_number(null),stg.EMAILS_AUTO_ROUTED_IN_PERIOD),
5764  decode(stg.EMAILS_AUTO_UPTD_SR_IN_PERIOD, 0,to_number(null),stg.EMAILS_AUTO_UPTD_SR_IN_PERIOD),
5765  decode(stg.SR_CREATED_IN_PERIOD, 0,to_number(null),stg.SR_CREATED_IN_PERIOD),
5766  decode(stg.ACCUMULATED_OPEN_EMAILS, 0,to_number(null),stg.ACCUMULATED_OPEN_EMAILS),
5767  decode(stg.ACCUMULATED_OPEN_AGE, 0,to_number(null),stg.ACCUMULATED_OPEN_AGE),
5768  stg.OLDEST_EMAIL_OPEN_DATE,
5769  decode(stg.ACCUMULATED_EMAILS_IN_QUEUE, 0,to_number(null),stg.ACCUMULATED_EMAILS_IN_QUEUE),
5770  decode(stg.ACCUMULATED_QUEUE_TIME, 0,to_number(null),stg.ACCUMULATED_QUEUE_TIME),
5771  stg.OLDEST_EMAIL_QUEUE_DATE,
5772  decode(stg.EMAIL_RESP_TIME_IN_PERIOD, 0,to_number(null),stg.EMAIL_RESP_TIME_IN_PERIOD),
5773  decode(stg.AGENT_RESP_TIME_IN_PERIOD, 0,to_number(null),stg.AGENT_RESP_TIME_IN_PERIOD),
5774  decode(stg.ACCUMULATED_EMAILS_ONE_DAY, 0,to_number(null),stg.ACCUMULATED_EMAILS_ONE_DAY),
5775  decode(stg.ACCUMULATED_EMAILS_THREE_DAYS, 0,to_number(null),stg.ACCUMULATED_EMAILS_THREE_DAYS),
5776  decode(stg.ACCUMULATED_EMAILS_WEEK, 0,to_number(null),stg.ACCUMULATED_EMAILS_WEEK),
5777  decode(stg.ACCUMULATED_EMAILS_WEEK_PLUS, 0,to_number(null),stg.ACCUMULATED_EMAILS_WEEK_PLUS),
5778  decode(stg.ONE_RSLN_IN_PERIOD, 0,to_number(null),stg.ONE_RSLN_IN_PERIOD),
5779  decode(stg.TWO_RSLN_IN_PERIOD, 0,to_number(null),stg.TWO_RSLN_IN_PERIOD),
5780  decode(stg.THREE_RSLN_IN_PERIOD, 0,to_number(null),stg.THREE_RSLN_IN_PERIOD),
5781  decode(stg.FOUR_RSLN_IN_PERIOD, 0,to_number(null),stg.FOUR_RSLN_IN_PERIOD),
5782  decode(stg.INTERACTION_THREADS_IN_PERIOD, 0,to_number(null),stg.INTERACTION_THREADS_IN_PERIOD),
5783  stg.OUTCOME_ID,
5784  stg.RESULT_ID,
5785  stg.REASON_ID,
5786  decode(stg.EMAILS_AUTO_REPLIED_IN_PERIOD, 0,to_number(null),stg.EMAILS_AUTO_REPLIED_IN_PERIOD),
5787  decode(stg.EMAILS_AUTO_DELETED_IN_PERIOD, 0,to_number(null),stg.EMAILS_AUTO_DELETED_IN_PERIOD),
5788  decode(stg.EMAILS_AUTO_RESOLVED_IN_PERIOD, 0,to_number(null),stg.EMAILS_AUTO_RESOLVED_IN_PERIOD),
5789  decode(stg.EMAILS_ORR_COUNT_IN_PERIOD, 0,to_number(null),stg.EMAILS_ORR_COUNT_IN_PERIOD),
5790  decode(stg.EMAILS_COMPOSED_IN_PERIOD, 0,to_number(null),stg.EMAILS_COMPOSED_IN_PERIOD),
5791  decode(stg.LEADS_CREATED_IN_PERIOD, 0,to_number(null),stg.LEADS_CREATED_IN_PERIOD),
5792  decode(stg.EMAILS_REROUTED_IN_PERIOD, 0,to_number(null),stg.EMAILS_REROUTED_IN_PERIOD)
5793 );
5794 
5795 g_rows_ins_upd := g_rows_ins_upd + SQL%ROWCOUNT;
5796   --IF (g_debug_flag = 'Y') THEN
5797 --write_log('Total rows moved into BIX_EMAIL_DETAILS_F : ' ||
5798                    --g_rows_ins_upd);
5799   --END IF;
5800 
5801 COMMIT;
5802 
5806   WHEN OTHERS THEN
5803     --write_log(to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss: ')||
5804 
5805 EXCEPTION
5807     write_log('Error in procedure move_stg_to_fact : Error : ' || sqlerrm);
5808     RAISE;
5809 
5810 END move_stg_to_fact;
5811 
5812 ---------------------------------------------------------------------------
5813 
5814 
5815 /* This is the starting procedure called from worker Concurrent program */
5816 
5817 
5818 PROCEDURE worker(errbuf      OUT   NOCOPY VARCHAR2,
5819                  retcode     OUT   NOCOPY VARCHAR2,
5820                  p_worker_no IN NUMBER) IS
5821 
5822   l_unassigned_cnt       NUMBER := 0;
5823   l_failed_cnt           NUMBER := 0;
5824   l_wip_cnt              NUMBER := 0;
5825   l_completed_cnt        NUMBER := 0;
5826   l_total_cnt            NUMBER := 0;
5827   l_count                NUMBER :=0;
5828   l_start_date_range     DATE;
5829   l_end_date_range       DATE;
5830 
5831 BEGIN
5832 
5833   write_log('Start of the procedure worker at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
5834 
5835   errbuf  := NULL;
5836   retcode := 0;
5837 
5838   write_log('Calling procedure init');
5839   init;
5840   write_log('End procedure init');
5841 
5842   l_count:= 0;
5843 
5844   LOOP
5845 
5846     /* Get the status of all the jobs in BIX_WORKER_JOBS */
5847     SELECT NVL(sum(decode(status,'UNASSIGNED', 1, 0)),0),
5848            NVL(sum(decode(status,'FAILED', 1, 0)),0),
5849            NVL(sum(decode(status,'IN PROCESS', 1, 0)),0),
5850            NVL(sum(decode(status,'COMPLETED',1 , 0)),0),
5851            count(*)
5852     INTO   l_unassigned_cnt,
5853            l_failed_cnt,
5854            l_wip_cnt,
5855            l_completed_cnt,
5856            l_total_cnt
5857     FROM   BIX_WORKER_JOBS
5858     WHERE  object_name = 'BIX_EMAIL_DETAILS_F';
5859 
5860     write_log('Job status - Unassigned: '||l_unassigned_cnt||
5861                        ' In Process: '||l_wip_cnt||
5862                        ' Completed: '||l_completed_cnt||
5863                        ' Failed: '||l_failed_cnt||
5864                        ' Total: '|| l_total_cnt);
5865 
5866     IF (l_failed_cnt > 0) THEN
5867       write_log('Another worker have errored out.  Stop processing.');
5868       EXIT;
5869     ELSIF (l_unassigned_cnt = 0) THEN
5870       write_log('No more jobs left.  Terminating.');
5871       EXIT;
5872     ELSIF (l_completed_cnt = l_total_cnt) THEN
5873       write_log('All jobs completed, no more job.  Terminating');
5874       EXIT;
5875     ELSIF (l_unassigned_cnt > 0) THEN
5876       /* Pickup any one unassigned job to process */
5877       write_log('Picking up an unassigned job');
5878       UPDATE BIX_WORKER_JOBS
5879       SET    status        = 'IN PROCESS',
5880              worker_number = p_worker_no
5881       WHERE  status = 'UNASSIGNED'
5882       AND    rownum < 2
5883       AND    object_name = 'BIX_EMAIL_DETAILS_F';
5884 
5885       l_count := sql%rowcount;
5886       COMMIT;
5887     END IF;
5888 
5889     -- -----------------------------------
5890     -- There could be rare situations where
5891     -- between Section 30 and Section 50
5892     -- the unassigned job gets taken by
5893     -- another worker.  So, if unassigned
5894     -- job no longer exist.  Do nothing.
5895     -- -----------------------------------
5896 
5897     IF (l_count > 0) THEN
5898 
5899       DECLARE
5900       BEGIN
5901 
5902         /* Collect data for half hour time buckets for the date range of the job */
5903         SELECT start_date_range, end_date_range
5904         INTO   l_start_date_range, l_end_date_range
5905         FROM   BIX_WORKER_JOBS
5906         WHERE worker_number = p_worker_no
5907         AND   status        = 'IN PROCESS'
5908         AND   object_name   = 'BIX_EMAIL_DETAILS_F';
5909 
5910         g_collect_start_date := l_start_date_range;
5911         g_collect_end_date   := l_end_date_range;
5912 
5913 
5914         write_log('Calling procedure collect_emails from worker');
5915         collect_emails;
5916         write_log('End procedure collect_emails');
5917 
5918         /* Update the status of job to 'COMPLETED' */
5919         UPDATE BIX_WORKER_JOBS
5920         SET    status = 'COMPLETED'
5921         WHERE  status = 'IN PROCESS'
5922         AND    worker_number = p_worker_no
5923         AND    object_name = 'BIX_EMAIL_DETAILS_F';
5924 
5925         COMMIT;
5926 
5927       EXCEPTION
5928         WHEN OTHERS THEN
5929           retcode := -1;
5930 
5931           UPDATE BIX_WORKER_JOBS
5932           SET    status = 'FAILED'
5933           WHERE  worker_number = p_worker_no
5934           AND    status = 'IN PROCESS'
5935           AND    object_name = 'BIX_EMAIL_DETAILS_F';
5936 
5937           COMMIT;
5938           write_log('Error in worker');
5939           RAISE G_CHILD_PROCESS_ISSUE;
5940       END;
5941 
5942     END IF; /* IF (l_count> 0) */
5943 
5944   END LOOP;
5945 
5946   write_log('Finished procedure worker at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
5947 EXCEPTION
5948    WHEN OTHERS THEN
5949      write_log('Error in procedure worker : Error : ' || sqlerrm);
5950      RAISE;
5951 END WORKER;
5952 
5953 /*
5954 
5955 This procedure make use of worker archetecture to  collect the measures parallely for different days.
5956 each worker loads data  1 day at a time.
5957 if the collection date range is more than 1 day and user has specified to launch more than 1 worker ,
5958 then launch parallel workers to do the collection of each day
5959 
5960 Once the data is collected at day level, it summarizes the data by calling summarize_data procedure.
5961 
5965 depending on its current status in all rows  including all type of rows ( week, month, quarter and Year).
5962 Resolution collection is done at the end after summarizing the data.
5963 This is because if there was an interaction one and done some time back now
5964 it is no longer one and done. It needs to be subtracted from one and done  and add to two or three or four done
5966 
5967 */
5968 
5969 
5970 PROCEDURE MAIN ( errbuf       OUT NOCOPY VARCHAR2,
5971                  retcode      OUT NOCOPY VARCHAR2,
5972                  p_start_date IN  VARCHAR2,
5973                  p_end_date   IN  VARCHAR2,
5974                  p_number_of_processes IN NUMBER) IS
5975 
5976   l_has_missing_date  BOOLEAN := FALSE;
5977   l_no_of_workers NUMBER;
5978 
5979 BEGIN
5980   errbuf  := null;
5981   retcode := 0;
5982 
5983   write_log('Collection start date as specified by the user : ' || p_start_date);
5984   write_log('Collection end date as specified by the user : ' || p_end_date);
5985 
5986   /* get the collection date range */
5987   g_collect_start_date := TO_DATE(p_start_date, 'YYYY/MM/DD HH24:MI:SS');
5988   g_collect_end_date   := TO_DATE(p_end_date, 'YYYY/MM/DD HH24:MI:SS');
5989 
5990 
5991 
5992 
5993 
5994 
5995 
5996   /* Check if the time dimension is populated for the collection date range ; if not exit */
5997   fii_time_api.check_missing_date(g_collect_start_date, g_collect_end_date, l_has_missing_date);
5998   IF (l_has_missing_date) THEN
5999     write_log('Time dimension is not populated for the entire collection date range');
6000     RAISE G_TIME_DIM_MISSING;
6001   END IF;
6002 
6003   /* if the collection date range is more than 1 day and user has specified to launch more than 1 worker , */
6004   /* then launch parallel workers to do the half hour collection of each day */
6005   IF (((g_collect_end_date - g_collect_start_date) > 1) AND
6006           (p_number_of_processes > 1)) THEN
6007     write_log('Calling procedure register_jobs');
6008     register_jobs;
6009     write_log('End procedure register_jobs');
6010 
6011     l_no_of_workers := least(g_no_of_jobs, p_number_of_processes);
6012 
6013     write_log('Launching Workers');
6014     /* Launch a parallel worker for each day of the collection date range or number of processes */
6015     /* user has requested for , whichever is less */
6016     FOR i IN 1 .. l_no_of_workers
6017     LOOP
6018       g_worker(i) := LAUNCH_WORKER(i);
6019     END LOOP;
6020     write_log('Number of Workers launched : ' || to_char(l_no_of_workers));
6021 
6022     COMMIT;
6023 
6024     write_log('Monitoring child processess .....');
6025     /* Monitor child processes after launching them */
6026     DECLARE
6027 
6028       l_unassigned_cnt       NUMBER := 0;
6029       l_completed_cnt        NUMBER := 0;
6030       l_wip_cnt              NUMBER := 0;
6031       l_failed_cnt           NUMBER := 0;
6032       l_tot_cnt              NUMBER := 0;
6033       l_last_unassigned_cnt  NUMBER := 0;
6034       l_last_completed_cnt   NUMBER := 0;
6035       l_last_wip_cnt         NUMBER := 0;
6036       l_cycle                NUMBER := 0;
6037 
6038     BEGIN
6039       LOOP
6040 
6041         SELECT NVL(sum(decode(status,'UNASSIGNED',1,0)),0),
6042                NVL(sum(decode(status,'COMPLETED',1,0)),0),
6043                NVL(sum(decode(status,'IN PROCESS',1,0)),0),
6044                NVL(sum(decode(status,'FAILED',1,0)),0),
6045                count(*)
6046         INTO   l_unassigned_cnt,
6047                l_completed_cnt,
6048                l_wip_cnt,
6049                l_failed_cnt,
6050                l_tot_cnt
6051         FROM   BIX_WORKER_JOBS
6052         WHERE  OBJECT_NAME = 'BIX_EMAIL_DETAILS_F';
6053 
6054         IF (l_failed_cnt > 0) THEN
6055           RAISE G_CHILD_PROCESS_ISSUE;
6056         END IF;
6057 
6058         IF (l_tot_cnt = l_completed_cnt) THEN
6059              EXIT;
6060         END IF;
6061 
6062         IF (l_unassigned_cnt = l_last_unassigned_cnt AND
6063             l_completed_cnt = l_last_completed_cnt AND
6064             l_wip_cnt = l_last_wip_cnt) THEN
6065           l_cycle := l_cycle + 1;
6066         ELSE
6067           l_cycle := 1;
6068         END IF;
6069 /*
6070         IF (l_cycle > MAX_LOOP) THEN
6071             RAISE G_CHILD_PROCESS_ISSUE;
6072         END IF;
6073 
6074 		*/
6075 
6076         dbms_lock.sleep(60);
6077 
6078         l_last_unassigned_cnt := l_unassigned_cnt;
6079         l_last_completed_cnt := l_completed_cnt;
6080         l_last_wip_cnt := l_wip_cnt;
6081 
6082       END LOOP;
6083 
6084     END;   -- Monitor child process Ends here.
6085     write_log('Done monitoring child processes');
6086   ELSE
6087     /* if no child process , then collect the day's data for the entire date range */
6088     write_log('Calling procedure collect_emails');
6089     collect_emails;
6090     write_log('End procedure collect_emails');
6091   END IF;
6092 
6093   /* Summarize data to day, week, month, quater and year time buckets */
6094   write_log('Calling procedure summarize_data');
6095   summarize_data;
6096 
6097   --REMOVE COMMENTED ABOVE????????????????????????????
6098 
6099   write_log('End procedure summarize_data');
6100 
6101   write_log('Calling procedure move_stg_to_fact');
6102   move_stg_to_fact;
6103 
6104   write_log('Total Rows Inserted/Updated : ' || to_char(g_rows_ins_upd));
6105 
6106   /* Collect the resolutions measures */
6107     write_log('Calling procedure collect_resolutions');
6108       collect_resolutions;
6109 	   write_log('End procedure collect_resolutions');
6110 
6111 
6112 
6113 
6114 
6115 
6116   /* Insert the status into collect log table */
6120       p_count       => g_rows_ins_upd,
6117   write_log('Calling procedure WRAPUP');
6118   bis_collection_utilities.wrapup(
6119       p_status      => TRUE,
6121       p_message     => NULL,
6122       p_period_from => g_collect_start_date,
6123       p_period_to   => g_collect_end_date);
6124   write_log('End Proceddure WRAPUP');
6125 
6126   write_log('Finished Procedure BIX_EMALS_SUMMARY_PKG with success at : ' || to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss'));
6127 
6128 EXCEPTION
6129   WHEN G_PARAM_MISMATCH THEN
6130     bis_collection_utilities.wrapup(
6131       p_status      => FALSE,
6132       p_count       => 0,
6133       p_message     => '0 rows collected : wait for at least half hour between two executions of this program',
6134       p_period_from => g_collect_start_date,
6135       p_period_to   => g_collect_end_date);
6136   WHEN G_TIME_DIM_MISSING THEN
6137     retcode := -1;
6138     errbuf := 'Time Dimension is not populated for the entire collection range';
6139     bis_collection_utilities.wrapup(
6140       p_status      => FALSE,
6141       p_count       => 0,
6142       p_message     => 'eMail summary package failed : Error : Time dimension is not populated',
6143       p_period_from => g_collect_start_date,
6144       p_period_to   => g_collect_end_date);
6145   WHEN G_CHILD_PROCESS_ISSUE THEN
6146     clean_up;
6147     retcode := SQLCODE;
6148     errbuf := SQLERRM;
6149     bis_collection_utilities.wrapup(
6150       p_status      => FALSE,
6151       p_count       => 0,
6152       p_message     => 'eMail summary package failed : error : ' || sqlerrm,
6153       p_period_from => g_collect_start_date,
6154       p_period_to   => g_collect_end_date);
6155   WHEN OTHERS THEN
6156     clean_up;
6157     retcode := SQLCODE;
6158     errbuf := SQLERRM;
6159     bis_collection_utilities.wrapup(
6160       p_status      => FALSE,
6161       p_count       => 0,
6162       p_message     => 'eMail summary package failed : error : ' || sqlerrm,
6163       p_period_from => g_collect_start_date,
6164       p_period_to   => g_collect_end_date);
6165 END MAIN;
6166 
6167 
6168 /*
6169 
6170 This procedure is called from the Update Email Summary concurrent program.
6171 This procedure calls init to do some initialization and calls  MAIN procedure with start and End Dates.
6172 
6173 */
6174 
6175 
6176 PROCEDURE  load (errbuf                OUT  NOCOPY VARCHAR2,
6177                  retcode               OUT  NOCOPY VARCHAR2,
6178                  p_number_of_processes IN   NUMBER)
6179 IS
6180   l_last_start_date  DATE;
6181   l_last_end_date    DATE;
6182   l_last_period_from DATE;
6183   l_last_period_to   DATE;
6184   l_end_date         DATE;
6185   l_min_media_date   DATE;
6186 BEGIN
6187 
6188 
6189 
6190   init;
6191   write_log('End procedure init');
6192 
6193 
6194 SELECT
6195 MAX(Decode(milcs_code,'EMAIL_PROCESSING',milcs_type_id)) ,
6196 MAX(Decode(milcs_code,'EMAIL_REPLY',milcs_type_id)) ,
6197 MAX(Decode(milcs_code,'EMAIL_AUTO_REPLY',milcs_type_id)) ,
6198 MAX(Decode(milcs_code,'EMAIL_FETCH',milcs_type_id)) ,
6199 MAX(Decode(milcs_code,'EMAIL_OPEN',milcs_type_id)) ,
6200 MAX(Decode(milcs_code,'EMAIL_TRANSFER',milcs_type_id)) ,
6201 MAX(Decode(milcs_code,'EMAIL_TRANSFERRED',milcs_type_id)) ,
6202 MAX(Decode(milcs_code,'EMAIL_ASSIGN_OPEN',milcs_type_id)) ,
6203 MAX(Decode(milcs_code,'EMAIL_ASSIGNED',milcs_type_id)) ,
6204 MAX(Decode(milcs_code,'EMAIL_AUTO_ROUTED',milcs_type_id)) ,
6205 MAX(Decode(milcs_code,'EMAIL_AUTO_UPDATED_SR',milcs_type_id)) ,
6206 MAX(Decode(milcs_code,'EMAIL_ESCALATED',milcs_type_id)) ,
6207 MAX(Decode(milcs_code,'EMAIL_DELETED',milcs_type_id)) ,
6208 MAX(Decode(milcs_code,'EMAIL_AUTO_DELETED',milcs_type_id)) ,
6209 MAX(Decode(milcs_code,'EMAIL_AUTO_REDIRECTED',milcs_type_id)) ,
6210 MAX(Decode(milcs_code,'EMAIL_RESOLVED',milcs_type_id)) ,
6211 MAX(Decode(milcs_code,'EMAIL_REROUTED_DIFF_CLASS',milcs_type_id)) ,
6212 MAX(Decode(milcs_code,'EMAIL_REROUTED_DIFF_ACCT',milcs_type_id)) ,
6213 MAX(Decode(milcs_code,'EMAIL_REQUEUED',milcs_type_id)) ,
6214 MAX(Decode(milcs_code,'EMAIL_COMPOSE',milcs_type_id))
6215 INTO
6216 G_PROCESSING,
6217 G_REPLY,
6218 G_A_REPLY,
6219 G_FETCH,
6220 G_OPEN,
6221 G_TRANSFER,
6222 G_TRANSFERRED,
6223 G_ASSIGN_OPEN,
6224 G_ASSIGNED,
6225 G_A_ROUTED,
6226 G_A_UPDATED_SR,
6227 G_ESCALATED,
6228 G_DELETED,
6229 G_A_DELETED,
6230 G_A_REDIRECTED,
6231 G_RESOLVED,
6232 G_REROUTED_CLASS,
6233 G_REROUTED_ACCT,
6234 G_REQUEUED,
6235 G_COMPOSE
6236 FROM jtf_ih_media_itm_lc_seg_tys
6237 WHERE milcs_code IN
6238 (
6239 'EMAIL_PROCESSING'
6240 ,'EMAIL_REPLY','EMAIL_AUTO_REPLY'
6241 ,'EMAIL_FETCH'
6242 ,'EMAIL_OPEN'
6243 ,'EMAIL_TRANSFER','EMAIL_TRANSFERRED'
6244 ,'EMAIL_ASSIGN_OPEN','EMAIL_ASSIGNED'
6245 ,'EMAIL_AUTO_ROUTED', 'EMAIL_AUTO_UPDATED_SR'
6246 ,'EMAIL_ESCALATED'
6247 ,'EMAIL_DELETED','EMAIL_AUTO_DELETED' ,'EMAIL_AUTO_REDIRECTED'
6248 ,'EMAIL_RESOLVED'
6249 ,'EMAIL_REROUTED_DIFF_CLASS','EMAIL_REROUTED_DIFF_ACCT','EMAIL_REQUEUED'
6250 ,'EMAIL_COMPOSE'
6251 );
6252 
6253 
6254 
6255 
6256 
6257   BIS_COLLECTION_UTILITIES.get_last_refresh_dates('BIX_EMAIL_DETAILS_F',
6258                                                    l_last_start_date,
6259                                                    l_last_end_date,
6260                                                    l_last_period_from,
6261                                                    l_last_period_to);
6262 
6263 
6264   IF l_last_period_to IS NULL THEN
6265     l_last_period_to := to_date(fnd_profile.value('BIS_GLOBAL_START_DATE'),'MM/DD/YYYY');
6266   END IF;
6267   l_last_period_to := l_last_period_to + 1/86400;
6268 
6269   --
6270   --Go back 5 mins so that all the data commits etc would be done
6274 
6271   --
6272   --l_end_date := sysdate - 5/(60*24);
6273   l_end_date := sysdate;
6275     Truncate_Table('BIX_EMAIL_DETAILS_STG');
6276   -- ?? Need code review for date logic - do we need TRUNC etc
6277   --Check to see if the media or interaction table was updated after the last time the ICI program
6278   --was run.  If so, store the date so that we go back and recollect those dates to get the latest
6279   --information. This will happen in case of re-routes where the ACCOUNT/CLASSIFICATION on
6280   --JTF_IH_MEDIA_ITEMS changes or it can happen when the PARTY_ID changes.
6281   --
6282 
6283   SELECT min(med.start_date_time)
6284   INTO l_min_media_date
6285   FROM jtf_ih_media_items med, jtf_ih_interactions int, jtf_ih_activities act,
6286         jtf_ih_media_item_lc_segs segs, jtf_ih_media_itm_lc_seg_tys tys
6287   WHERE med.media_item_type = 'EMAIL'
6288   AND int.interaction_id = act.interaction_id
6289   AND med.media_id = act.media_id
6290   AND med.media_id = segs.media_id
6291   AND segs.milcs_type_id = tys.milcs_type_id
6292   AND (
6293         (med.last_update_date BETWEEN l_last_period_to AND l_end_date
6294          --AND milcs_code in ('EMAIL_REROUTED_DIFF_ACCT', 'EMAIL_REROUTED_DIFF_CLASS')
6295          )
6296         OR int.last_update_date BETWEEN l_last_period_to AND l_end_date
6297        );
6298 
6299   IF l_min_media_date >= l_last_period_to OR l_min_media_date IS NULL   THEN
6300      --
6301 	--This means there were no medias or interactions which got changed after ICI
6302 	--collected them.
6303 	--
6304 	write_log('No updates to media or interaction which have already been collected');
6305      write_log('l_min_media_date ' || l_min_media_date || ' greater than last_period_to ' ||
6306                 to_char(l_last_period_to,'DD-MON-YYYY HH24:MI:SS'));
6307      NULL;
6308   ELSIF l_min_media_date < l_last_period_to
6309   THEN
6310 
6311 
6312     write_log('l_min_media_date ' || l_min_media_date || ' less than last_period_to ' ||
6313                 to_char(l_last_period_to,'DD-MON-YYYY HH24:MI:SS'));
6314 
6315      --
6316 	--Using the values which are going to be deleted, ROLLUP as negative values
6317 	--so that the higher level period types get subtracted. This is needed since we cannot
6318 	--do FIRST_VALUE in MV. Hence ROLLUP cannot be moved into the MV layer.
6319 	--
6320 	--?????
6321 	--we are changing the original ROLLUP and forcing to do a SUM even for the queue measures so
6322 	--that they will cancel out with the newly added negative numbers. Is this okay to do??
6323 	--also, what to do about oldest open age and oldest open date etc?
6324 	--???
6325 	--
6326  rollup_negatives(trunc(l_min_media_date));
6327  write_log ('FInished rolling up negative values');
6328 
6329      --
6330 	--This means there are some old medias or old interactions which changed after ICI
6331 	--collected them.
6332 	--
6333 
6334 
6335 /*
6336 	DELETE BIX_EMAIL_DETAILS_F
6337 	WHERE period_start_date >= trunc(l_min_media_date)
6338 	AND period_type_id = 1;
6339   */
6340     --Update all the measures to 0 except the onedone,twodone resolution measures and interaction threads
6341 update bix_email_details_f
6342 set
6343 LAST_UPDATED_BY                 =g_user_id,
6344 LAST_UPDATE_DATE                =g_sysdate,
6345 EMAILS_OFFERED_IN_PERIOD        =null,
6346 EMAILS_FETCHED_IN_PERIOD        =null,
6347 EMAILS_REPLIED_IN_PERIOD        =null,
6348 EMAILS_RPLD_BY_GOAL_IN_PERIOD   =null,
6349 AGENT_EMAILS_RPLD_BY_GOAL	=null,
6350 EMAILS_DELETED_IN_PERIOD        =null,
6351 EMAILS_TRNSFRD_OUT_IN_PERIOD    =null,
6352 EMAILS_TRNSFRD_IN_IN_PERIOD     =null,
6353 EMAILS_RSL_AND_TRFD_IN_PERIOD   =null,
6354 EMAILS_ASSIGNED_IN_PERIOD       =null,
6355 EMAILS_AUTO_ROUTED_IN_PERIOD    =null,
6356 EMAILS_AUTO_UPTD_SR_IN_PERIOD   =null,
6357 SR_CREATED_IN_PERIOD            =null,
6358 ACCUMULATED_OPEN_EMAILS         =null,
6359 ACCUMULATED_OPEN_AGE            =null,
6360 OLDEST_EMAIL_OPEN_DATE          =to_date(null),
6361 ACCUMULATED_EMAILS_IN_QUEUE     =null,
6362 ACCUMULATED_QUEUE_TIME          =null,
6363 OLDEST_EMAIL_QUEUE_DATE         =to_date(null),
6364 EMAIL_RESP_TIME_IN_PERIOD       =null,
6365 AGENT_RESP_TIME_IN_PERIOD       =null,
6366 ACCUMULATED_EMAILS_ONE_DAY      =null,
6367 ACCUMULATED_EMAILS_THREE_DAYS   =null,
6368 ACCUMULATED_EMAILS_WEEK         =null,
6369 ACCUMULATED_EMAILS_WEEK_PLUS    =null,
6370 EMAILS_AUTO_REPLIED_IN_PERIOD   =null,
6371 EMAILS_AUTO_DELETED_IN_PERIOD   =null,
6372 EMAILS_AUTO_RESOLVED_IN_PERIOD  =null,
6373 EMAILS_ORR_COUNT_IN_PERIOD      =null,
6374 EMAILS_COMPOSED_IN_PERIOD       =null,
6375 LEADS_CREATED_IN_PERIOD       	=null,
6376 EMAILS_REROUTED_IN_PERIOD       =null,
6377 ONE_RSLN_IN_PERIOD              =null,
6378 TWO_RSLN_IN_PERIOD              =null,
6379 THREE_RSLN_IN_PERIOD            =null,
6380 FOUR_RSLN_IN_PERIOD             =null,
6381 INTERACTION_THREADS_IN_PERIOD   =null,
6382 REQUEST_ID=g_request_id
6383 --WHERE period_start_date >= trunc(l_min_media_date)
6384 WHERE time_id >= to_number(to_char(trunc(l_min_media_date),'J'))
6385 AND period_type_id = 1;
6386 
6387 
6388 --
6389 --??SHOULD WE DELETE OR JUST UPDATE TO ALL ZERO VALUES - LATTER MIGHT
6390 --PERFORM BETTER
6391 --
6392 
6393 	COMMIT;
6394 	write_log ('Finished deleting bix_email_details_f');
6395 
6396      DELETE BIX_INTERACTIONS_TEMP BIXTEMP
6397 	WHERE EXISTS
6398 	      (
6399 		 SELECT INTERACTION_ID
6400 		 FROM JTF_IH_INTERACTIONS INT
6401 		 WHERE START_DATE_TIME >= trunc(l_min_media_date)
6402 		 AND INT.INTERACTION_ID = BIXTEMP.INTERACTION_ID
6403 		 );
6404 
6405      COMMIT;
6406 
6407 	write_log ('Finished deleting bix_interactions_temp');
6408 
6409      --
6410      --Set l_last_period_to to l_min_media_date to recollect the days
6411      --it might turn out that even days which werent affected need to be recollected - but the most frequent
6412      --case where this happens is the change of the default customer which should happen
6413      --within a few days of the email coming in, it should not have a signifcant performance impact.
6414      --
6415      l_last_period_to := trunc(l_min_media_date);
6416 
6417    END IF;
6418 
6419 
6420 --l_last_period_to:=to_date('25/7/2004','dd/mm/yyyy');
6421 --l_end_date:=to_date('07/19/2004 01:00','mm/dd/yyyy hh24:mi');
6422 
6423   write_log ('Calling MAIN with start date ' || l_last_period_to || ' l_end_date ' || l_end_date);
6424   Main(errbuf,
6425        retcode,
6426        TO_CHAR(l_last_period_to, 'YYYY/MM/DD HH24:MI:SS'),
6427        TO_CHAR(l_end_date, 'YYYY/MM/DD HH24:MI:SS'),
6428        p_number_of_processes);
6429 EXCEPTION
6430   WHEN OTHERS THEN
6431     RAISE;
6432 END load;
6433 
6434 END BIX_EMAILS_SUMMARY_PKG;