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.query.filter = query; vm.onInit()"
8 on-collapse="vm.query.filter = undefined; vm.onInit()"
12 ng-model="vm.query.globalStatusFilter"
14 ng-change="vm.query.pauseTypeFilter = ''; vm.onInit()"
16 <md-option ng-value="''">{{ 'APP.ALL' | translate }}</md-option>
17 <md-option value="pause">{{ 'APP.PAUSE' | translate }}</md-option>
18 <md-option value="*pause">{{ 'APP.PARTIALPAUSE' | translate }}</md-option>
19 <md-option value="busy">{{ 'APP.BUSY' | translate }}</md-option>
20 <md-option value="idle">{{ 'APP.IDLE' | translate }}</md-option>
24 ng-if="vm.isPause(vm.query.globalStatusFilter)"
25 ng-model="vm.query.pauseTypeFilter"
27 ng-change="vm.onInit()"
29 <md-option ng-value="''">All</md-option>
30 <md-option value="DEFAULT PAUSE">DEFAULT PAUSE</md-option>
31 <md-option value="ACW">ACW</md-option>
32 <md-option value="LOGININPAUSE">LOGININPAUSE</md-option>
33 <md-option value="Auto-Pause">AUTOPAUSE</md-option>
34 <md-option ng-value="pause.name" ng-repeat="pause in vm.pauses.rows"
35 >{{pause.name}}</md-option
43 <table md-table multiple md-progress="vm.promise">
44 <thead md-head md-order="vm.query.order" md-on-reorder="vm.onInit">
45 <tr md-row border="1">
46 <th class="bv text-center" colspan="5">
47 {{ 'APP.AGENT' | translate }}
49 <th class="bv bl text-center" colspan="2">
50 {{ 'APP.VOICE' | translate }}
52 <th ng-if="vm.license.chat" class="bv bl text-center" colspan="2">
53 {{ 'APP.CHAT' | translate }}
55 <th ng-if="vm.license.mail" class="bv bl text-center" colspan="2">
56 {{ 'APP.MAIL' | translate }}
58 <th ng-if="vm.license.messaging" class="bv bl text-center" colspan="2">
59 {{ 'APP.SMS' | translate }}
62 ng-if="vm.license.openchannel"
63 class="bv bl text-center"
66 {{ 'APP.OPENCHANNEL' | translate }}
68 <th ng-if="vm.license.fax" class="bv bl text-center" colspan="2">
69 {{ 'APP.FAX' | translate }}
71 <th ng-if="vm.license.whatsapp" class="bv bl text-center" colspan="2">
72 {{ 'APP.WHATSAPP' | translate }}
74 <th width="10px" class="bt bl" rowspan="2"></th>
77 <th class="bl" colspan="2" md-column md-order-by="fullname">
78 {{ 'APP.NAME' | translate }}
80 <th class="bl custom-column" md-column md-order-by="globalStatus">
81 {{ 'APP.STATUS' | translate }}
83 <th class="bl custom-column" md-column md-order-by="lastLoginAt">
84 {{ 'APP.LOGIN_TIME' | translate }}
86 <th class="bl custom-column" md-column md-order-by="lastPauseAt">
87 {{ 'APP.PAUSE_TIME' | translate }}
90 <th class="bl custom-column">{{ 'APP.STATUS' | translate }}</th>
91 <th class="bl custom-column">Info</th>
93 <th ng-if="vm.license.chat" class="bl text-center">
94 {{ 'APP.STATUS' | translate }}
96 <th ng-if="vm.license.chat" class="text-center">
97 <md-icon md-font-icon="icon-battery-standard">
98 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
102 <th ng-if="vm.license.mail" class="bl text-center">
103 {{ 'APP.STATUS' | translate }}
105 <th ng-if="vm.license.mail" class="text-center">
106 <md-icon md-font-icon="icon-battery-standard">
107 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
111 <th ng-if="vm.license.messaging" class="bl text-center">
112 {{ 'APP.STATUS' | translate }}
114 <th ng-if="vm.license.messaging" class="text-center">
115 <md-icon md-font-icon="icon-battery-standard">
116 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
120 <th ng-if="vm.license.openchannel" class="bl text-center">
121 {{ 'APP.STATUS' | translate }}
123 <th ng-if="vm.license.openchannel" class="text-center">
124 <md-icon md-font-icon="icon-battery-standard">
125 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
129 <th ng-if="vm.license.fax" class="bl text-center">
130 {{ 'APP.STATUS' | translate }}
132 <th ng-if="vm.license.fax" class="text-center">
133 <md-icon md-font-icon="icon-battery-standard">
134 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
138 <th ng-if="vm.license.whatsapp" class="bl text-center">
139 {{ 'APP.STATUS' | translate }}
141 <th ng-if="vm.license.whatsapp" class="text-center">
142 <md-icon md-font-icon="icon-battery-standard">
143 <md-tooltip>{{ 'APP.CAPACITY' | translate }}</md-tooltip>
149 <tr md-row ng-hide="vm.order.length">
150 <td md-cell colspan="19">
151 <div layout="row" layout-align="center center">
152 <span>{{ 'APP.NO_AGENT_ONLINE' | translate }}</span>
157 md-select="vm.agents[value]"
159 ng-repeat="(id, value) in vm.order"
161 <td class="bt padding-5">
162 <div layout="row" layout-align="start center">
165 ng-src="{{vm.agents[value].userpic && 'api/users/'+vm.agents[value].id+'/avatar' || 'assets/images/avatars/profile.png'}}"
167 <div layout="column">
168 <span>{{vm.agents[value].fullname}}</span>
169 <span>{{vm.agents[value].internal}}</span>
173 <td class="bt padding-5">
176 layout-align="start center"
177 ng-if="vm.license.screenrecording && (vm.agents[value].phoneBarEnableScreenRecordingByAgent || vm.agents[value].phoneBarEnableAutomaticScreenRecording)"
179 <div class="column" ng-if="vm.agents[value].screenrecording">
182 md-font-icon="icon-camcorder-box"
183 style="color: green; font-size: 36px"
184 aria-label="icon-camcorder-box26"
187 {{ 'APP.TOOLTIP_SCREENRECORDING_ON' | translate }}
192 <div class="column" ng-if="!vm.agents[value].screenrecording">
195 md-font-icon="icon-camcorder-box"
197 aria-label="icon-camcorder-box26"
200 {{ 'APP.TOOLTIP_SCREENRECORDING_OFF' | translate }}
210 class="text-boxed md-background-bg bl bt padding-5"
211 ng-class="{'idle':'lime-300-bg','busy':'indigo-100-bg','*pause':'amber-50-bg','pause':'amber-200-bg'}[vm.agents[value].globalStatus]"
212 >{{ vm.isPause(vm.agents[value].globalStatus) ? '' :
213 vm.agents[value].globalStatus | uppercase }} {{
214 vm.isPause(vm.agents[value].globalStatus) ?
215 (vm.isPartialPause(vm.agents[value].globalStatus) ?
216 '*'+vm.agents[value].pauseType || 'DEFAULT PAUSE' :
217 vm.agents[value].pauseType || 'DEFAULT PAUSE') : ''}}</span
220 <td class="bt custom-column">
221 <timer start-time="vm.agents[value].lastLoginAt" interval="1000"
222 >{{ days > 0 ? days + 'd' : '' }}
223 {{hhours}}:{{mminutes}}:{{sseconds}}</timer
226 <td class="bt custom-column">
228 ng-if="vm.isPause(vm.agents[value].globalStatus) || vm.isPartialPause(vm.agents[value].globalStatus)"
229 start-time="vm.agents[value].lastPauseAt"
231 >{{ days > 0 ? days + 'd' : '' }}
232 {{hhours}}:{{mminutes}}:{{sseconds}}</timer
238 ng-if="!vm.agents[value].onhold"
239 class="text-boxed md-background-bg bl bt padding-5"
240 ng-class="{'idle':'lime-300-bg','talking':'indigo-100-bg','ringing':'orange-400-bg','pause':'amber-200-bg'}[vm.agents[value].voiceStatus]"
241 >{{ vm.agents[value].voiceStatus | uppercase }}</span
244 ng-if="vm.agents[value].onhold"
245 class="text-boxed md-background-bg bl bt padding-5 orange-400-bg"
251 <div layout="column">
253 ng-if="vm.agents[value].queue"
255 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
256 >{{ vm.agents[value].queue }}</span
259 ng-if="vm.agents[value].destconnectedlinenum"
261 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
262 >{{ vm.agents[value].destconnectedlinenum }}</span
266 ng-if="vm.agents[value].queue || vm.agents[value].destconnectedlinenum"
269 start-time="vm.agents[value].voiceStatusTime"
271 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].voiceStatus]"
273 {{hhours}}:{{mminutes}}:{{sseconds}}</timer
279 <td class="bt bl" ng-if="vm.license.chat">
281 <div layout="column" layout-align="center center">
283 class="text-boxed md-background-bg bl bt padding-5"
284 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].chatStatus]"
285 >{{ vm.agents[value].chatStatus | uppercase }}</span
292 class="bt text-center font-size-20"
293 ng-if="vm.license.chat"
294 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].chatStatus]"
296 {{ vm.agents[value].chatCurrentCapacity }}
299 <td class="bl bt" ng-if="vm.license.mail">
301 <div layout="column" layout-align="center center">
303 class="text-boxed md-background-bg bl bt padding-5"
304 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].mailStatus]"
305 >{{ vm.agents[value].mailStatus | uppercase }}</span
311 class="bt padding-5 text-center font-size-20"
312 ng-if="vm.license.mail"
313 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].mailStatus]"
315 {{ vm.agents[value].mailCurrentCapacity }}
318 <td class="bl bt" ng-if="vm.license.messaging">
320 <div layout="column" layout-align="center center">
322 class="text-boxed md-background-bg bl bt padding-5"
323 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].smsStatus]"
324 >{{ vm.agents[value].smsStatus | uppercase }}</span
330 class="bt padding-5 text-center font-size-20"
331 ng-if="vm.license.messaging"
332 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].smsStatus]"
334 {{ vm.agents[value].smsCurrentCapacity }}
337 <td class="bt bl" ng-if="vm.license.openchannel">
339 <div layout="column" layout-align="center center">
341 class="text-boxed md-background-bg bl bt padding-5"
342 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].openchannelStatus]"
343 >{{ vm.agents[value].openchannelStatus | uppercase }}</span
349 class="bt padding-5 text-center font-size-20"
350 ng-if="vm.license.openchannel"
351 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].openchannelStatus]"
353 {{ vm.agents[value].openchannelCurrentCapacity }}
356 <td class="bt bl" ng-if="vm.license.fax">
358 <div layout="column" layout-align="center center">
360 class="text-boxed md-background-bg bl bt padding-5"
361 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].faxStatus]"
362 >{{ vm.agents[value].faxStatus | uppercase }}</span
368 class="bt padding-5 text-center font-size-20"
369 ng-if="vm.license.fax"
370 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].faxStatus]"
372 {{ vm.agents[value].faxCurrentCapacity }}
375 <td class="bl bt" ng-if="vm.license.whatsapp">
377 <div layout="column" layout-align="center center">
379 class="text-boxed md-background-bg bl bt padding-5"
380 ng-class="{'idle':'lime-300-bg','maxcapacity':'red-A200-bg','working':'indigo-100-bg','pause':'amber-200-bg'}[vm.agents[value].whatsappStatus]"
381 >{{ vm.agents[value].whatsappStatus | uppercase }}</span
387 class="bt padding-5 text-center font-size-20"
388 ng-if="vm.license.whatsapp"
389 ng-class="{'idle':'lime-300-fg','maxcapacity':'red-A200-fg','working':'indigo-100-fg','pause':'amber-200-fg'}[vm.agents[value].whatsappStatus]"
391 {{ vm.agents[value].whatsappCurrentCapacity }}
395 class="bl bt padding-5 text-center"
396 ng-if="vm.crudPermissions.canEdit"
400 class="md-icon-button"
403 translate-attr-aria-label="APP.MORE"
404 ng-click="$mdMenu.open($event)"
406 <md-icon md-font-icon="icon-dots-vertical"></md-icon>
409 <md-menu-content width="4">
412 ng-click="vm.logout(vm.agents[value], $event)"
413 translate="APP.LOGOUT"
420 ng-click="vm.queueAdd(vm.agents[value], $event)"
421 translate="FAX.AGENTADD_QUEUE"
428 ng-if="vm.license.screenrecording && vm.agents[value].phoneBarEnableScreenRecordingByAgent"
432 ng-click="$mdMenu.open()"
433 class="text-capitalize"
434 translate="APP.SCREENRECORDING"
438 <md-menu-item ng-if="!vm.agents[value].screenrecording">
440 ng-click="vm.screenRecording(vm.agents[value], true)"
441 ><em translate="APP.START_SCREENRECORDING"
442 >Start Screen Recording</em
446 <md-menu-item ng-if="vm.agents[value].screenrecording">
448 ng-click="vm.screenRecording(vm.agents[value], false)"
449 ><em translate="APP.STOP_SCREENRECORDING"
450 >Stop Screen Recording</em
461 ng-click="$mdMenu.open()"
462 class="text-capitalize"
463 translate="APP.PAUSE"
469 ng-disabled=" vm.agents[value].voicePause && 'DEFAULT PAUSE' === vm.agents[value].pauseType"
470 ng-click="vm.pause(vm.agents[value])"
471 ><em translate="APP.DEFAULT_PAUSE">Default Pause</em>
475 ng-if="vm.pauses.rows.length"
476 ng-repeat="pause in vm.pauses.rows"
479 ng-disabled="vm.agents[value].voicePause && pause.name === vm.agents[value].pauseType"
480 ng-click="vm.pause(vm.agents[value], pause.name)"
487 <md-menu-item ng-if="vm.isPause(vm.agents[value].globalStatus)">
489 ng-click="vm.unPause(vm.agents[value])"
490 translate="APP.UNPAUSE"
501 </md-table-container>
504 md-label="{page: '{{'FAX.PAGE' | translate}}:', rowsPerPage: '{{'FAX.ROWSPERPAGE' | translate}}:', of: '{{'FAX.OF' | translate}}'}"
505 md-limit="vm.query.limit"
506 md-limit-options="[10, 15, 20, 50, 100, 250]"
507 md-page="vm.query.page"
508 md-total="{{vm.filteredAgents.length}}"
509 md-on-paginate="vm.onInit"
511 ></md-table-pagination>
512 <!-- / AGENT TABLE -->