3 self.queues = []; // TYPE ARRAY
6 function getCalls(type) {
8 self.queues.forEach(function(elm) {
14 function getAvgAnswerTime() {
18 self.queues.forEach(function(elm) {
19 complete += elm.complete || 0;
20 holdtime += elm.holdtime || 0;
23 return complete ? (holdtime / complete) : 0;
26 function getAvgTalkTime() {
30 self.queues.forEach(function(elm) {
31 complete += elm.complete || 0;
32 talktime += elm.talktime || 0;
35 return complete ? (talktime / complete) : 0;
41 for (var key in data.queues) {
42 if (data.queues.hasOwnProperty(key)) {
43 queue = _.find(self.queues, {
48 queue.waiting = data.queues[key].waiting || 0;
49 queue.active = data.queues[key].active || 0;
50 queue.abandon = data.queues[key].abandon || 0;
51 queue.unmanaged = data.queues[key].unmanaged || 0;
52 queue.complete = data.queues[key].complete || 0;
53 queue.holdtime = data.queues[key].holdtime || 0;
54 queue.talktime = data.queues[key].talktime || 0;
60 evt: 'dashboard:voice:init',
61 waiting: getCalls('waiting'),
62 active: getCalls('active'),
63 complete: getCalls('complete'),
64 abandon: getCalls('abandon'),
65 unmanaged: getCalls('unmanaged'),
66 avgAnswerTime: getAvgAnswerTime(),
67 avgTalkTime: getAvgTalkTime(),
68 answerRate: (getCalls('complete') / (getCalls('complete') + getCalls('abandon')) * 100) || 0,
69 abandonRate: (getCalls('abandon') / (getCalls('complete') + getCalls('abandon')) * 100) || 0,
70 totalOffered: getCalls('complete') + getCalls('abandon'),
72 answered: data.outbound.answered,
73 manualOutbound: data.outbound.manualOutbound,
74 globalDuration: data.outbound.globalDuration,
75 avgDuration: data.outbound.avgDuration,
76 answerRate: (data.outbound.answered / data.outbound.manualOutbound) * 100
80 self.postMessage(self.voice);
83 function update(data) {
84 var queue = _.find(self.queues, {
90 case 'dashboard:voice:waiting':
91 queue.waiting = data.waiting;
92 self.voice.waiting = getCalls('waiting');
94 case 'dashboard:voice:active':
95 queue.active = data.active;
96 self.voice.active = getCalls('active');
98 case 'dashboard:voice:complete':
99 queue.complete = data.complete;
100 self.voice.complete = getCalls('complete');
101 self.voice.answerRate = (getCalls('complete') / (getCalls('complete') + getCalls('abandon')) * 100) || 0;
102 self.voice.abandonRate = (getCalls('abandon') / (getCalls('complete') + getCalls('abandon')) * 100) || 0;
103 self.voice.totalOffered = self.voice.complete + self.voice.abandon;
105 case 'dashboard:voice:abandon':
106 queue.abandon = data.abandon;
107 self.voice.abandon = getCalls('abandon');
108 self.voice.answerRate = (getCalls('complete') / (getCalls('complete') + getCalls('abandon')) * 100) || 0;
109 self.voice.abandonRate = (getCalls('abandon') / (getCalls('complete') + getCalls('abandon')) * 100) || 0;
110 self.voice.totalOffered = self.voice.complete + self.voice.abandon;
112 case 'dashboard:voice:active':
113 queue.unmanaged = data.unmanaged;
114 self.voice.unmanaged = getCalls('unmanaged');
116 case 'dashboard:voice:holdtime':
117 queue.holdtime = data.holdtime;
118 self.voice.avgAnswerTime = getAvgAnswerTime();
120 case 'dashboard:voice:talktime':
121 queue.talktime = data.talktime;
122 self.voice.avgTalkTime = getAvgTalkTime();
127 self.postMessage(self.voice);
132 if ('function' === typeof importScripts) {
133 importScripts('/bower_components/lodash/dist/lodash.js');
135 addEventListener('message', function(e) {
136 switch (e.data.evt) {
138 self.queues = _.map(e.data.queues, function(elm) {
160 case 'dashboard:voice:init':
164 case 'dashboard:voice:outbound':
165 self.voice.outbound = e.data;
166 self.postMessage(self.voice);