2 <md-toolbar class="md-table-toolbar md-default">
3 <div class="md-toolbar-tools">
4 <span class="md-subhead" translate="APP.AGENTS">Agents</span>
7 on-search="vm.onInit()"
9 on-collapse="vm.query.filter = undefined; vm.onInit()"
13 ng-model="vm.query.globalStatusFilter"
15 ng-change="vm.query.pauseTypeFilter = ''; vm.onInit()"
17 <md-option ng-value="''">{{ 'APP.ALL' | translate }}</md-option>
18 <md-option value="pause">{{ 'APP.PAUSE' | translate }}</md-option>
19 <md-option value="*pause">{{ 'APP.PARTIALPAUSE' | translate }}</md-option>
20 <md-option value="busy">{{ 'APP.BUSY' | translate }}</md-option>
21 <md-option value="idle">{{ 'APP.IDLE' | translate }}</md-option>
25 ng-if="vm.isPause(vm.query.globalStatusFilter)"
26 ng-model="vm.query.pauseTypeFilter"
28 ng-change="vm.onInit()"
30 <md-option ng-value="''">All</md-option>
31 <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>
32 <md-option value="ACW">ACW</md-option>
33 <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>
34 <md-option value="Auto-Pause">AUTOPAUSE</md-option>
35 <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows"
36 >{{pause.name}}</md-option
44 <table md-table multiple md-progress="vm.promise">
45 <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">
46 <tr md-row border="1">
47 <th class="bv text-center" colspan="5">
48 {{ 'APP.AGENT' | translate }}
50 <th class="bv bl text-center" colspan="2">
51 {{ 'APP.VOICE' | translate }}
53 <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">
54 {{ 'APP.CHAT' | translate }}
56 <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">
57 {{ 'APP.MAIL' | translate }}
59 <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">
60 {{ 'APP.SMS' | translate }}
63 ng-if="vm.license.openchannel"
64 class="bv bl text-center"
67 {{ 'APP.OPENCHANNEL' | translate }}
69 <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">
70 {{ 'APP.FAX' | translate }}
72 <th ng-if="vm.license.whatsapp" class="bv bl text-center" colspan="2">
73 {{ 'APP.WHATSAPP' | translate }}
75 <th width="10px" class="bt bl" rowspan="2"></th>
78 <th class="bl" colspan="2" md-column md-order-by="fullname">
79 {{ 'APP.NAME' | translate }}
81 <th class="bl custom-column" md-column md-order-by="globalStatus">
82 {{ 'APP.STATUS' | translate }}
84 <th class="bl custom-column" md-column md-order-by="lastLoginAt">
85 {{ 'APP.LOGIN_TIME' | translate }}
87 <th class="bl custom-column" md-column md-order-by="lastPauseAt">
88 {{ 'APP.PAUSE_TIME' | translate }}
91 <th class="bl custom-column">{{ 'APP.STATUS' | translate }}</th>
92 <th class="bl custom-column">Info</th>
94 <th ng-if="vm.license.chat" class="bl text-center">
95 {{ 'APP.STATUS' | translate }}
97 <th ng-if="vm.license.chat" class="text-center">
98 <md-icon md-font-icon="icon-battery-standard">
99 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
103 <th ng-if="vm.license.mail" class="bl text-center">
104 {{ 'APP.STATUS' | translate }}
106 <th ng-if="vm.license.mail" class="text-center">
107 <md-icon md-font-icon="icon-battery-standard">
108 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
112 <th ng-if="vm.license.messaging" class="bl text-center">
113 {{ 'APP.STATUS' | translate }}
115 <th ng-if="vm.license.messaging" class="text-center">
116 <md-icon md-font-icon="icon-battery-standard">
117 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
121 <th ng-if="vm.license.openchannel" class="bl text-center">
122 {{ 'APP.STATUS' | translate }}
124 <th ng-if="vm.license.openchannel" class="text-center">
125 <md-icon md-font-icon="icon-battery-standard">
126 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
130 <th ng-if="vm.license.fax" class="bl text-center">
131 {{ 'APP.STATUS' | translate }}
133 <th ng-if="vm.license.fax" class="text-center">
134 <md-icon md-font-icon="icon-battery-standard">
135 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
139 <th ng-if="vm.license.whatsapp" class="bl text-center">
140 {{ 'APP.STATUS' | translate }}
142 <th ng-if="vm.license.whatsapp" class="text-center">
143 <md-icon md-font-icon="icon-battery-standard">
144 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
150 <tr md-row ng-hide="vm.order.length">
151 <td md-cell colspan="19">
152 <div layout="row" layout-align="center center">
153 <span>{{ 'APP.NO_AGENT_ONLINE' | translate }}</span>
158 md-select="vm.agents[value]"
160 ng-repeat="(id, value) in vm.order"
162 <td class="bt padding-5">
163 <div layout="row" layout-align="start center">
166 ng-src="{{vm.agents[value].userpic && vm.baseUrl+'api/users/'+vm.agents[value].id+'/avatar' || 'assets/images/avatars/profile.png'}}"
168 <div layout="column">
169 <span>{{vm.agents[value].fullname}}</span>
170 <span>{{vm.agents[value].internal}}</span>
174 <td class="bt padding-5">
177 layout-align="start center"
178 ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)"
180 <div class="column" ng-if="vm.agents[value].screenrecording">
183 md-font-icon="icon-camcorder-box"
184 style="color: green; font-size: 36px"
185 aria-label="icon-camcorder-box26"
188 {{ 'APP.TOOLTIP_SCREENRECORDING_ON' | translate }}
193 <div class="column" ng-if="!vm.agents[value].screenrecording">
196 md-font-icon="icon-camcorder-box"
198 aria-label="icon-camcorder-box26"
201 {{ 'APP.TOOLTIP_SCREENRECORDING_OFF' | translate }}
211 class="text-boxed md-background-bg bl bt padding-5"
212 ng-class="{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]"
213 >{{ vm.isPause(vm.agents[value].globalStatus) ? '' :
214 vm.agents[value].globalStatus | uppercase }} {{
215 vm.isPause(vm.agents[value].globalStatus) ?
216 (vm.isPartialPause(vm.agents[value].globalStatus) ?
217 '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE' :
218 vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span
221 <td class="bt custom-column">
222 <timer start-time="vm.agents[value].lastLoginAt"></timer>
224 <td class="bt custom-column">
226 ng-if="vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)"
227 start-time="vm.agents[value].lastPauseAt"
233 ng-if="!vm.agents[value].onhold"
234 class="text-boxed md-background-bg bl bt padding-5"
235 ng-class="{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]"
236 >{{ vm.agents[value].voiceStatus | uppercase }}</span
239 ng-if="vm.agents[value].onhold"
240 class="text-boxed md-background-bg bl bt padding-5 orange-400-bg"
246 <div layout="column">
248 ng-if="vm.agents[value].queue"
250 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
251 >{{ vm.agents[value].queue }}</span
254 ng-if="vm.agents[value].destconnectedlinenum"
256 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
257 >{{ vm.agents[value].destconnectedlinenum }}</span
261 ng-if="vm.agents[value].queue || vm.agents[value].destconnectedlinenum"
264 start-time="vm.agents[value].voiceStatusTime"
265 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
271 <td class="bt bl" ng-if="vm.license.chat">
273 <div layout="column" layout-align="center center">
275 class="text-boxed md-background-bg bl bt padding-5"
276 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]"
277 >{{ vm.agents[value].chatStatus | uppercase }}</span
284 class="bt text-center font-size-20"
285 ng-if="vm.license.chat"
286 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]"
288 {{ vm.agents[value].chatCurrentCapacity }}
291 <td class="bl bt" ng-if="vm.license.mail">
293 <div layout="column" layout-align="center center">
295 class="text-boxed md-background-bg bl bt padding-5"
296 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]"
297 >{{ vm.agents[value].mailStatus | uppercase }}</span
303 class="bt padding-5 text-center font-size-20"
304 ng-if="vm.license.mail"
305 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]"
307 {{ vm.agents[value].mailCurrentCapacity }}
310 <td class="bl bt" ng-if="vm.license.messaging">
312 <div layout="column" layout-align="center center">
314 class="text-boxed md-background-bg bl bt padding-5"
315 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]"
316 >{{ vm.agents[value].smsStatus | uppercase }}</span
322 class="bt padding-5 text-center font-size-20"
323 ng-if="vm.license.messaging"
324 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]"
326 {{ vm.agents[value].smsCurrentCapacity }}
329 <td class="bt bl" ng-if="vm.license.openchannel">
331 <div layout="column" layout-align="center center">
333 class="text-boxed md-background-bg bl bt padding-5"
334 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]"
335 >{{ vm.agents[value].openchannelStatus | uppercase }}</span
341 class="bt padding-5 text-center font-size-20"
342 ng-if="vm.license.openchannel"
343 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]"
345 {{ vm.agents[value].openchannelCurrentCapacity }}
348 <td class="bt bl" ng-if="vm.license.fax">
350 <div layout="column" layout-align="center center">
352 class="text-boxed md-background-bg bl bt padding-5"
353 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]"
354 >{{ vm.agents[value].faxStatus | uppercase }}</span
360 class="bt padding-5 text-center font-size-20"
361 ng-if="vm.license.fax"
362 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]"
364 {{ vm.agents[value].faxCurrentCapacity }}
367 <td class="bl bt" ng-if="vm.license.whatsapp">
369 <div layout="column" layout-align="center center">
371 class="text-boxed md-background-bg bl bt padding-5"
372 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].whatsappStatus]"
373 >{{ vm.agents[value].whatsappStatus | uppercase }}</span
379 class="bt padding-5 text-center font-size-20"
380 ng-if="vm.license.whatsapp"
381 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].whatsappStatus]"
383 {{ vm.agents[value].whatsappCurrentCapacity }}
387 class="bl bt padding-5 text-center"
388 ng-if="vm.crudPermissions.canEdit"
392 class="md-icon-button"
395 translate-attr-aria-label="APP.MORE"
396 ng-click="$mdMenu.open($event)"
398 <md-icon md-font-icon="icon-dots-vertical"></md-icon>
401 <md-menu-content width="4">
404 ng-click="vm.logout(vm.agents[value], $event)"
405 translate="APP.LOGOUT"
412 ng-click="vm.queueAdd(vm.agents[value], $event)"
413 translate="WHATSAPP.AGENTADD_QUEUE"
420 ng-if="vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent"
424 ng-click="$mdMenu.open()"
425 class="text-capitalize"
426 translate="APP.SCREENRECORDING"
430 <md-menu-item ng-if="!vm.agents[value].screenrecording">
432 ng-click="vm.screenRecording(vm.agents[value], true)"
433 ><em translate="APP.START_SCREENRECORDING"
434 >Start Screen Recording</em
438 <md-menu-item ng-if="vm.agents[value].screenrecording">
440 ng-click="vm.screenRecording(vm.agents[value], false)"
441 ><em translate="APP.STOP_SCREENRECORDING"
442 >Stop Screen Recording</em
453 ng-click="$mdMenu.open()"
454 class="text-capitalize"
455 translate="APP.PAUSE"
461 ng-disabled=" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType"
462 ng-click="vm.pause(vm.agents[value])"
463 ><em translate="APP.DEFAULT_PAUSE">Default Pause</em>
467 ng-if="vm.pauses.rows.length"
468 ng-repeat="pause in vm.pauses.rows"
471 ng-disabled="vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType"
472 ng-click="vm.pause(vm.agents[value], pause.name)"
479 <md-menu-item ng-if="vm.isPause(vm.agents[value].globalStatus)">
481 ng-click="vm.unPause(vm.agents[value])"
482 translate="APP.UNPAUSE"
493 </md-table-container>
496 md-label="{page: '{{'APP.PAGE' | translate}}:', rowsPerPage: '{{'APP.ROWSPERPAGE' | translate}}:', of: '{{'APP.OF' | translate}}'}"
497 md-limit="vm.query.limit"
498 md-limit-options="[10, 15, 20, 50, 100, 250]"
499 md-page="vm.query.page"
500 md-total="{{vm.filteredAgents.length}}"
501 md-on-paginate="vm.onInit"
503 ></md-table-pagination>
504 <!-- / AGENT TABLE -->