2 id="openchannel-openchannelAccount"
3 class="page-layout simple tabbed"
7 <div class="header md-accent-bg" layout="row" layout-align="start center">
8 <div class="white-fg" layout="row" layout-align="start center" flex>
10 class="goto-openchannelAccounts-button md-icon-button"
11 aria-label="Go to openchannelAccounts"
12 ng-click="vm.gotoOpenchannelAccounts()"
14 translate-attr-aria-label="OPENCHANNEL.GO_TO_OPENCHANNELACCOUNTS"
16 <md-icon md-font-icon="icon-arrow-left"></md-icon>
19 <div layout="row" layout-align="start center">
20 <div class="openchannelAccount-image" hide-xs>
21 <img ng-src="assets/images/business/openchannelAccounts.jpg" />
24 <div layout="column" layout-align="start start">
26 #{{vm.openchannelAccount.id}}
27 <span ng-if="vm.openchannelAccount.name"
28 >{{vm.openchannelAccount.name}}</span
31 <div class="subtitle secondary-text">
32 <span translate="OPENCHANNEL.CREATED_AT"></span>
33 <span>{{vm.openchannelAccount.createdAt | date:'medium'}}</span>
41 ng-click="vm.agentadddialog(vm.openchannelAccount, $event)"
42 class="md-fab md-warn md-icon-button"
46 ><span translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT"></span
48 <md-icon md-font-icon="icon-account-multiple-plus"></md-icon>
54 ng-click="vm.saveOpenchannelAccount()"
55 ng-if="vm.crudPermissions.canEdit"
56 class="send-button md-accent md-raised"
57 ng-disabled="(generalForm.$invalid) || (notificationForm.$invalid) || (transferForm.$invalid) || (proxyForm.$invalid) || (dispositionForm.$invalid) || (openchannelDispositionsForm.$invalid) || (openchannelCannedAnswersForm.$invalid) || (actionsForm.$invalid) || (interactionsForm.$invalid)"
58 translate="OPENCHANNEL.SAVE"
59 translate-attr-aria-label="OPENCHANNEL.SAVE"
70 md-selected="vm.selectedTab"
71 md-stretch-tabs="always"
78 <span translate="OPENCHANNEL.SETTINGS">SETTINGS</span>
82 class="openchannelAccount-detail-form-container general md-background-bg md-whiteframe-1dp"
84 <div class="pb-16" layout="row" layout-align="start center">
85 <div class="h2 secondary-text" translate="OPENCHANNEL.GENERAL">
89 <form name="generalForm" novalidate>
90 <md-input-container class="md-block">
91 <label translate="OPENCHANNEL.NAME">Name</label>
95 ng-model="vm.openchannelAccount.name"
102 ng-messages="generalForm['name'].$error"
103 ng-show="generalForm['name'].$touched"
106 <div ng-message="required">
107 <span translate="OPENCHANNEL.ERRORS.NAME_REQUIRED"
108 >Name field is required</span
112 </md-input-container>
113 <md-input-container class="md-block">
114 <label translate="OPENCHANNEL.KEY">key</label>
118 ng-model="vm.openchannelAccount.key"
121 ng-disabled="!vm.crudPermissions.canEdit"
125 ng-messages="generalForm['key'].$error"
126 ng-show="generalForm['key'].$touched"
129 <div ng-message="required">
130 <span translate="OPENCHANNEL.ERRORS.KEY_REQUIRED"
131 >key field is required</span
134 <div ng-message="md-maxlength">
136 translate="OPENCHANNEL.ERRORS.KEY_MAX_LENGTH"
137 translate-values="{max: 5}"
138 >key must have a maximum length equal to 5</span
142 </md-input-container>
143 <md-input-container class="md-block">
144 <label translate="OPENCHANNEL.REPLYURI">replyUri</label>
148 ng-model="vm.openchannelAccount.replyUri"
149 ng-disabled="!vm.crudPermissions.canEdit"
153 <span translate="OPENCHANNEL.HELP.REPLYURI"></span>
156 ng-messages="generalForm['replyUri'].$error"
157 ng-show="generalForm['replyUri'].$touched"
160 <div ng-message="required">
161 <span translate="OPENCHANNEL.ERRORS.REPLYURI_REQUIRED"
162 >replyUri field is required</span
165 <div ng-message="url">
166 <span translate="OPENCHANNEL.ERRORS.REPLYURI_MUST_VALID_URL"
167 >replyUri must be a valid url http://www.xcally.com</span
171 </md-input-container>
172 <md-input-container class="md-block">
173 <label translate="OPENCHANNEL.LIST">List</label>
176 ng-model="vm.openchannelAccount.ListId"
178 ng-disabled="!vm.crudPermissions.canEdit"
182 ng-repeat="ListId in vm.lists"
183 ng-disabled="ListId.canSelect === false"
184 >{{ ListId.name }}</md-option
188 <span translate="OPENCHANNEL.HELP.LIST"></span>
191 ng-messages="generalForm['ListId'].$error"
192 ng-show="generalForm['ListId'].$touched"
195 <div ng-message="required">
196 <span translate="OPENCHANNEL.ERRORS.LIST_REQUIRED"
197 >List field is required</span
201 </md-input-container>
202 <md-input-container class="md-block">
203 <label translate="OPENCHANNEL.WAITFORTHEASSIGNEDAGENT"
204 >WaitForTheAssignedAgent</label
208 name="waitForTheAssignedAgent"
209 ng-model="vm.openchannelAccount.waitForTheAssignedAgent"
213 ng-disabled="!vm.crudPermissions.canEdit"
217 ng-messages="generalForm['waitForTheAssignedAgent'].$error"
218 ng-show="generalForm['waitForTheAssignedAgent'].$touched"
221 <div ng-message="required">
223 translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_REQUIRED"
224 >WaitForTheAssignedAgent field is required</span
227 <div ng-message="min">
229 translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
230 >WaitForTheAssignedAgent must be a valid greater or equal
235 <div ng-message="max">
237 translate="OPENCHANNEL.ERRORS.WAITFORTHEASSIGNEDAGENT_MUST_BE_LESS_THAN_OR_EQUAL_TO"
238 >WaitForTheAssignedAgent must be a valid greater or equal
244 </md-input-container>
245 <md-input-container class="md-block">
246 <label translate="OPENCHANNEL.MAPKEY">MapKey</label>
249 ng-model="vm.openchannelAccount.mapKey"
250 ng-disabled="!vm.crudPermissions.canEdit"
252 <md-option ng-value="''">None</md-option>
253 <md-optgroup label="standard">
255 ng-value="mapKey.columnName"
256 ng-repeat="mapKey in vm.fields"
257 ng-if="!mapKey.columnName.toString().startsWith('cf_')"
258 ng-disabled="mapKey.canSelect === false"
259 >{{ mapKey.displayName }}</md-option
262 <md-optgroup label="custom">
264 ng-value="mapKey.columnName"
265 ng-repeat="mapKey in vm.fields"
266 ng-if="mapKey.columnName.toString().startsWith('cf_')"
267 ng-disabled="mapKey.canSelect === false"
268 >{{ mapKey.displayName }}</md-option
273 ng-messages="generalForm['mapKey'].$error"
274 ng-show="generalForm['mapKey'].$touched"
277 <div ng-message="required">
278 <span translate="OPENCHANNEL.ERRORS.MAPKEY_REQUIRED"
279 >MapKey field is required</span
283 </md-input-container>
284 <md-input-container class="md-block">
285 <label translate="OPENCHANNEL.DESCRIPTION">Description</label>
289 ng-model="vm.openchannelAccount.description"
290 ng-disabled="!vm.crudPermissions.canEdit"
294 ng-messages="generalForm['description'].$error"
295 ng-show="generalForm['description'].$touched"
298 <div ng-message="required">
299 <span translate="OPENCHANNEL.ERRORS.DESCRIPTION_REQUIRED"
300 >Description field is required</span
304 </md-input-container>
305 <md-input-container class="md-block">
306 <label translate="OPENCHANNEL.RECEIVEURI">receiveUri</label>
307 <div layout="row" layout-align="center center">
309 class="md-button md-fab md-mini md-primary"
311 data-clipboard-target="#copytoclipboard-receiveUri"
312 ngclipboard-success="vm.alert({title: 'copied to clipboard', msg: e.text});"
313 ngclipboard-error="vm.alert({title: 'error', msg: 'copy to clipboard failed'});"
315 <md-icon md-font-icon="icon-clipboard-text"></md-icon>
320 id="copytoclipboard-receiveUri"
322 ng-value="vm.location + '/api/openchannel/accounts/' + vm.openchannelAccount.id + '/notify'"
327 <span translate="OPENCHANNEL.HELP.RECEIVEURI"></span>
329 </md-input-container>
333 class="openchannelAccount-detail-form-container notification md-background-bg md-whiteframe-1dp"
335 <div class="pb-16" layout="row" layout-align="start center">
337 class="h2 secondary-text"
338 translate="OPENCHANNEL.NOTIFICATION"
343 <form name="notificationForm" novalidate>
344 <md-input-container class="md-block">
346 ng-model="vm.openchannelAccount.notificationSound"
347 aria-label="notificationSound"
348 ng-disabled="!vm.crudPermissions.canEdit"
349 ><span translate="OPENCHANNEL.NOTIFICATIONSOUND"
350 >notificationSound</span
353 </md-input-container>
354 <md-input-container class="md-block">
356 ng-model="vm.openchannelAccount.notificationShake"
357 aria-label="notificationShake"
358 ng-disabled="!vm.crudPermissions.canEdit"
359 ><span translate="OPENCHANNEL.NOTIFICATIONSHAKE"
360 >notificationShake</span
363 </md-input-container>
364 <div class="md-block">
366 class="md-caption grey-fg"
367 translate="OPENCHANNEL.NOTIFICATIONTEMPLATE"
368 >notificationTemplate</label
371 aria-label="notificationTemplate notificationTemplate"
372 ckeditor="{ skin: 'office2013', language: 'en', allowedContent: true, extraPlugins: 'font,colorbutton,autoembed,autocorrect,googlethisterm,pastebase64', toolbarGroups: [{ name: 'styles', groups: ['styles'] }, { name: 'clipboard', groups: ['undo'] }, { name: 'colors', groups: ['colors'] }, { name: 'basicstyles', groups: ['basicstyles'] }, { name: 'paragraph', groups: ['list', 'indent', 'align'] }, { name: 'mode' }], autocorrect_enabled: true, disableNativeSpellChecker: false, fontSize_sizes: '8/8pt;9/9pt;10/10pt;11/11pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;72/72pt', removePlugins: 'magicline' }"
373 ng-model="vm.openchannelAccount.notificationTemplate"
379 class="openchannelAccount-detail-form-container transfer md-background-bg md-whiteframe-1dp"
381 <div class="pb-16" layout="row" layout-align="start center">
382 <div class="h2 secondary-text" translate="OPENCHANNEL.TRANSFER">
386 <form name="transferForm" novalidate>
387 <md-input-container class="md-block">
389 ng-model="vm.openchannelAccount.queueTransfer"
390 aria-label="queueTransfer"
391 ng-disabled="!vm.crudPermissions.canEdit"
392 ><span translate="OPENCHANNEL.QUEUETRANSFER"
396 </md-input-container>
398 ng-if="vm.openchannelAccount.queueTransfer == true"
401 <label translate="OPENCHANNEL.QUEUETRANSFERTIMEOUT"
402 >queueTransferTimeout</label
406 name="queueTransferTimeout"
407 ng-model="vm.openchannelAccount.queueTransferTimeout"
411 ng-disabled="!vm.crudPermissions.canEdit"
415 ng-messages="transferForm['queueTransferTimeout'].$error"
416 ng-show="transferForm['queueTransferTimeout'].$touched"
419 <div ng-message="required">
421 translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_REQUIRED"
422 >queueTransferTimeout field is required</span
425 <div ng-message="min">
427 translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
428 >queueTransferTimeout must be a valid greater or equal
433 <div ng-message="max">
435 translate="OPENCHANNEL.ERRORS.QUEUETRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO"
436 >queueTransferTimeout must be a valid greater or equal
442 </md-input-container>
443 <md-input-container class="md-block">
445 ng-model="vm.openchannelAccount.agentTransfer"
446 aria-label="agentTransfer"
447 ng-disabled="!vm.crudPermissions.canEdit"
448 ><span translate="OPENCHANNEL.AGENTTRANSFER"
452 </md-input-container>
454 ng-if="vm.openchannelAccount.agentTransfer == true"
457 <label translate="OPENCHANNEL.AGENTTRANSFERTIMEOUT"
458 >agentTransferTimeout</label
462 name="agentTransferTimeout"
463 ng-model="vm.openchannelAccount.agentTransferTimeout"
467 ng-disabled="!vm.crudPermissions.canEdit"
471 ng-messages="transferForm['agentTransferTimeout'].$error"
472 ng-show="transferForm['agentTransferTimeout'].$touched"
475 <div ng-message="required">
477 translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_REQUIRED"
478 >agentTransferTimeout field is required</span
481 <div ng-message="min">
483 translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
484 >agentTransferTimeout must be a valid greater or equal
489 <div ng-message="max">
491 translate="OPENCHANNEL.ERRORS.AGENTTRANSFERTIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO"
492 >agentTransferTimeout must be a valid greater or equal
498 </md-input-container>
505 <span translate="OPENCHANNEL.ADVANCED">ADVANCED</span>
509 class="openchannelAccount-detail-form-container proxy md-background-bg md-whiteframe-1dp"
511 <div class="pb-16" layout="row" layout-align="start center">
512 <div class="h2 secondary-text" translate="OPENCHANNEL.PROXY">
516 <form name="proxyForm" novalidate>
517 <md-input-container class="md-block">
518 <label translate="OPENCHANNEL.TOKEN">token</label>
522 ng-model="vm.openchannelAccount.token"
528 <span translate="OPENCHANNEL.HELP.TOKEN"></span>
531 ng-messages="proxyForm['token'].$error"
532 ng-show="proxyForm['token'].$touched"
535 <div ng-message="required">
536 <span translate="OPENCHANNEL.ERRORS.TOKEN_REQUIRED"
537 >token field is required</span
541 </md-input-container>
545 class="openchannelAccount-detail-form-container disposition md-background-bg md-whiteframe-1dp"
547 <div class="pb-16" layout="row" layout-align="start center">
549 class="h2 secondary-text"
550 translate="OPENCHANNEL.DISPOSITION"
555 <form name="dispositionForm" novalidate>
556 <md-input-container class="md-block">
558 ng-model="vm.openchannelAccount.mandatoryDisposition"
559 aria-label="MandatoryDisposition"
560 ng-disabled="!vm.crudPermissions.canEdit"
561 ><span translate="OPENCHANNEL.MANDATORYDISPOSITION"
562 >MandatoryDisposition</span
565 </md-input-container>
567 ng-if="vm.openchannelAccount.mandatoryDisposition"
570 <label translate="OPENCHANNEL.MANDATORYDISPOSITIONPAUSEID"
571 >MandatoryDispositionPauseId</label
574 name="mandatoryDispositionPauseId"
575 ng-model="vm.openchannelAccount.mandatoryDispositionPauseId"
577 ng-disabled="!vm.crudPermissions.canEdit"
580 ng-value="mandatoryDispositionPauseId.id"
581 ng-repeat="mandatoryDispositionPauseId in vm.pauses"
582 ng-disabled="mandatoryDispositionPauseId.canSelect === false"
583 >{{ mandatoryDispositionPauseId.name }}</md-option
588 translate="OPENCHANNEL.HELP.MANDATORYDISPOSITIONPAUSEID"
592 ng-messages="dispositionForm['mandatoryDispositionPauseId'].$error"
593 ng-show="dispositionForm['mandatoryDispositionPauseId'].$touched"
596 <div ng-message="required">
598 translate="OPENCHANNEL.ERRORS.MANDATORYDISPOSITIONPAUSEID_REQUIRED"
599 >MandatoryDispositionPauseId field is required</span
603 </md-input-container>
610 <span translate="OPENCHANNEL.DISPOSITIONS">DISPOSITIONS</span>
614 ng-controller="OpenchannelAccountDispositionsController as vm_dc"
615 ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)"
618 <div class="column" flex="20">
619 <md-card class="mt-0">
622 layout-align="center center"
624 ng-click="vm_dc.query.level = null; vm_dc.getDispositions()"
626 <div layout="row" layout-align="start center">
627 <md-icon md-font-icon="icon-refresh"></md-icon>
629 >{{ 'TOOLS.ALL_DISPOSITIONS' | translate }}</span
637 <md-input-container class="md-block" flex-gt-sm="">
638 <label translate="TOOLS.SELECT_LEVEL"
639 >Select a level</label
642 placeholder="{{ 'TOOLS.SELECT_LEVEL' | translate }}"
643 ng-model="vm_dc.query.level"
644 ng-change="vm_dc.getDispositions()"
646 <md-option ng-value="null"
647 ><em translate="TOOLS.ALL">All</em></md-option
651 ng-repeat="(key, value) in vm_dc.levels"
652 >{{ value }}</md-option
655 </md-input-container>
660 class="openchannelAccount-detail-form-container openchanneldispositions md-background-bg md-whiteframe-1dp"
664 class="md-table-toolbar md-default"
665 ng-hide="vm_dc.selectedOpenchannelAccountDispositions.length"
667 <div class="md-toolbar-tools">
670 translate="OPENCHANNEL.DISPOSITIONS"
674 on-search="vm_dc.query.filter = query"
675 on-collapse="vm_dc.query.filter = undefined"
681 ng-if="vm_dc.crudPermissions.canEdit"
682 class="md-icon-button"
683 ng-click="vm_dc.createOrEditDisposition($event)"
684 aria-label="Add openchannel dispositions"
686 translate-attr-label="OPENCHANNEL.ADD_DISPOSITION"
688 <md-icon md-font-icon="icon-plus"></md-icon>
693 class="md-table-toolbar md-accent"
694 ng-show="vm_dc.selectedDispositions.length"
696 <div class="md-toolbar-tools">
697 <span class="md-subhead"
698 >{{vm_dc.selectedDispositions.length}}
699 {{vm_dc.selectedDispositions.length > 1 ? 'items' :
700 'item'}} selected</span
704 class="md-icon-button"
705 ng-csv="vm_dc.exportSelectedDispositions"
707 filename="openchannelAccounts.csv"
709 <md-icon md-font-icon="icon-file-excel"></md-icon>
712 ng-if="vm_dc.crudPermissions.canDelete"
713 class="md-icon-button"
714 ng-click="vm_dc.deleteSelectedDispositions($event)"
715 aria-label="delete selected"
717 translate-attr-label="OPENCHANNEL.DELETE_SELECTED"
719 <md-icon md-font-icon="icon-delete"></md-icon>
728 ng-model="vm_dc.selectedDispositions"
729 md-progress="vm_dc.promise"
733 md-order="vm_dc.query.sort"
734 md-on-reorder="vm_dc.getDispositions"
737 <th md-column md-order-by="id">
738 {{ 'OPENCHANNEL.ID' | translate }}
740 <th md-column md-order-by="level">
741 {{ 'TOOLS.LEVEL' | translate }}
743 <th md-column md-order-by="name">
744 {{ 'OPENCHANNEL.NAME' | translate }}
746 <th md-column md-order-by="description">
747 {{ 'OPENCHANNEL.DESCRIPTION' | translate }}
749 <th md-column width="10px"></th>
753 <tr md-row ng-hide="vm_dc.dispositions.rows.length">
754 <td md-cell colspan="5">
755 <div layout="row" layout-align="center center">
756 <span translate="OPENCHANNEL.NO_AVAILABLE_INFO"
757 >No Available Info</span
764 md-select="disposition"
766 ng-repeat="disposition in vm_dc.dispositions.rows"
769 ng-click="vm_dc.createOrEditDisposition($event, disposition)"
776 ng-click="vm_dc.createOrEditDisposition($event, disposition)"
780 {{ vm_dc.levels[disposition.level] }}
783 ng-click="vm_dc.createOrEditDisposition($event, disposition)"
790 ng-click="vm_dc.createOrEditDisposition($event, disposition)"
794 {{disposition.description}}
799 ng-if="!vm_dc.crudPermissions.readOnly"
803 class="md-icon-button"
806 translate-attr-aria-label="OPENCHANNEL.MORE"
807 ng-click="$mdOpenMenu($event)"
810 md-font-icon="icon-dots-vertical"
813 <md-menu-content width="3">
817 ng-if="vm_dc.crudPermissions.canEdit"
820 ng-click="vm_dc.createOrEditDisposition($event, disposition)"
821 translate="TOOLS.EDIT_DISPOSITION"
829 ng-if="vm_dc.crudPermissions.canDelete"
832 ng-click="vm_dc.deleteConfirm(disposition, $event)"
833 translate="TOOLS.DELETE_DISPOSITION"
844 </md-table-container>
846 md-label="{page: '{{'OPENCHANNEL.PAGE' | translate}}:', rowsPerPage: '{{'OPENCHANNEL.ROWSPERPAGE' | translate}}:', of: '{{'OPENCHANNEL.OF' | translate}}'}"
847 md-limit="vm_dc.query.limit"
848 md-limit-options="[10, 15, 20, 50, 100, 250]"
849 md-page="vm_dc.query.page"
850 md-total="{{vm_dc.dispositions.count}}"
851 md-on-paginate="vm_dc.getDispositions"
854 </md-table-pagination>
862 <span translate="OPENCHANNEL.CANNEDANSWERS">CANNEDANSWERS</span>
866 class="openchannelAccount-detail-form-container openchannelcannedanswers md-background-bg md-whiteframe-1dp"
869 ng-controller="OpenchannelAccountOpenchannelCannedAnswersController as vm_dc"
870 ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)"
873 class="md-table-toolbar md-default"
874 ng-hide="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length"
876 <div class="md-toolbar-tools">
879 translate="OPENCHANNEL.OPENCHANNELCANNEDANSWERS"
880 >OpenchannelCannedAnswers</span
883 on-search="vm_dc.query.filter = query"
884 on-collapse="vm_dc.query.filter = undefined"
890 ng-if="vm_dc.crudPermissions.canEdit"
891 class="md-icon-button"
892 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event)"
893 aria-label="add openchannelCannedAnswer"
895 translate-attr-label="OPENCHANNEL.ADD_OPENCHANNELCANNEDANSWER"
897 <md-icon md-font-icon="icon-plus"></md-icon>
902 class="md-table-toolbar md-accent"
903 ng-show="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length"
905 <div class="md-toolbar-tools">
906 <span class="md-subhead"
907 >{{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length}}
908 {{vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers.length
909 > 1 ? 'items' : 'item'}} selected</span
913 class="md-icon-button"
914 ng-csv="vm_dc.exportSelectedOpenchannelAccountOpenchannelCannedAnswers"
916 filename="openchannelAccounts.csv"
918 <md-icon md-font-icon="icon-file-excel"></md-icon>
921 ng-if="vm_dc.crudPermissions.canDelete"
922 class="md-icon-button"
923 ng-click="vm_dc.deleteSelectedOpenchannelAccountOpenchannelCannedAnswers($event)"
924 aria-label="delete selected"
926 translate-attr-label="OPENCHANNEL.DELETE_SELECTED"
928 <md-icon md-font-icon="icon-delete"></md-icon>
932 <md-table-container class="font-size-12">
937 ng-model="vm_dc.selectedOpenchannelAccountOpenchannelCannedAnswers"
938 md-progress="vm_dc.promise"
942 md-order="vm_dc.query.sort"
943 md-on-reorder="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers"
946 <th md-column md-order-by="id">
947 {{ 'OPENCHANNEL.ID' | translate }}
949 <th md-column md-order-by="key">
950 {{ 'OPENCHANNEL.KEY' | translate }}
952 <th md-column md-order-by="value">
953 {{ 'OPENCHANNEL.VALUE' | translate }}
955 <th md-column md-order-by="description">
956 {{ 'OPENCHANNEL.DESCRIPTION' | translate }}
958 <th md-column md-order-by="createdAt">
959 {{ 'OPENCHANNEL.CREATED_AT' | translate }}
961 <th md-column width="10px"></th>
967 md-select="openchannelCannedAnswer"
969 ng-repeat="openchannelCannedAnswer in vm_dc.openchannelAccountOpenchannelCannedAnswers.rows"
972 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
975 {{openchannelCannedAnswer.id}}
978 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
981 {{openchannelCannedAnswer.key}}
984 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
987 {{openchannelCannedAnswer.value}}
990 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
993 {{openchannelCannedAnswer.description}}
996 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
999 {{ openchannelCannedAnswer.createdAt | formatdate }}
1004 ng-if="!vm_dc.crudPermissions.readOnly"
1008 class="md-icon-button"
1011 translate-attr-aria-label="OPENCHANNEL.MORE"
1012 ng-click="$mdOpenMenu($event)"
1015 md-font-icon="icon-dots-vertical"
1019 <md-menu-content width="3">
1020 <md-menu-item ng-if="vm_dc.crudPermissions.canEdit">
1022 ng-click="vm_dc.createOrEditOpenchannelAccountOpenchannelCannedAnswer($event, openchannelCannedAnswer)"
1023 translate="OPENCHANNEL.EDIT_OPENCHANNELCANNEDANSWER"
1025 Edit OpenchannelCannedAnswer
1029 ng-if="vm_dc.crudPermissions.canDelete"
1032 ng-click="vm_dc.deleteConfirm(openchannelCannedAnswer, $event)"
1033 translate="OPENCHANNEL.DELETE_OPENCHANNELCANNEDANSWER"
1035 Delete OpenchannelCannedAnswer
1044 ng-if="!vm_dc.openchannelAccountOpenchannelCannedAnswers.rows.length"
1046 <td md-cell colspan="7">
1047 <div layout="row" layout-align="center center">
1049 class="text-boxed-light"
1050 translate="OPENCHANNEL.NO_OPENCHANNELCANNEDANSWER_AVAILABLE"
1051 >No openchannelcannedanswer available</span
1058 </md-table-container>
1059 <md-table-pagination
1060 md-label="{page: '{{'OPENCHANNEL.PAGE' | translate}}:', rowsPerPage: '{{'OPENCHANNEL.ROWSPERPAGE' | translate}}:', of: '{{'OPENCHANNEL.OF' | translate}}'}"
1061 md-limit="vm_dc.query.limit"
1062 md-limit-options="[10, 15, 20, 50, 100, 250]"
1063 md-page="vm_dc.query.page"
1064 md-total="{{vm_dc.openchannelAccountOpenchannelCannedAnswers.count}}"
1065 md-on-paginate="vm_dc.getOpenchannelAccountOpenchannelCannedAnswers"
1067 ></md-table-pagination>
1074 <span translate="OPENCHANNEL.ACTIONS">ACTIONS</span>
1078 class="openchannelAccount-detail-form-container actions md-background-bg md-whiteframe-1dp"
1081 ng-controller="OpenchannelAccountActionsController as vm_ac"
1082 ng-init="vm_ac.init(vm.openchannelAccount, vm.crudPermissions)"
1086 layout-align="start start"
1090 class="navigation-simple sidenav main-sidenav md-background-bg md-whiteframe-1dp"
1094 ng-if="vm_ac.crudPermissions.canEdit"
1096 <!-- SIDENAV CONTENT -->
1097 <md-list class="no-padding">
1098 <md-subheader class="md-no-sticky">
1099 <span translate="VOICE.APPLICATIONS_LIST">
1104 <md-divider></md-divider>
1105 <md-list ng-sortable="vm_ac.list">
1106 <md-list-item class="handle" ng-repeat="a in vm_ac.apps">
1107 <md-icon md-font-icon="{{a.icon}}" class="s16"></md-icon>
1109 class="text-truncate"
1110 translate="OPENCHANNEL.{{(a.alias || a.appType) | uppercase}}"
1112 {{a.alias || a.appType}}
1116 <!-- / SIDENAV CONTENT -->
1122 class="main scrollable md-background-bg md-whiteframe-1dp"
1125 flex="{{vm_ac.crudPermissions.canEdit ? 75 : 100}}"
1128 class="md-table-toolbar md-default"
1129 ng-hide="vm_ac.selectedOpenchannelAccountApps.length"
1131 <div class="md-toolbar-tools">
1132 <span class="md-subhead">Drag & Drop Routing</span>
1135 on-search="vm_ac.query.filter = query"
1136 on-collapse="vm_ac.query.filter = undefined"
1142 class="md-table-toolbar md-accent"
1143 ng-show="vm_ac.selectedOpenchannelAccountApps.length"
1145 <div class="md-toolbar-tools">
1146 <span class="md-subhead"
1147 >{{vm_ac.selectedOpenchannelAccountApps.length}}
1148 {{vm_ac.selectedOpenchannelAccountApps.length > 1 ?
1149 'items' : 'item'}} selected</span
1153 ng-if="vm_ac.crudPermissions.canDelete"
1154 class="md-icon-button"
1155 ng-click="vm_ac.deleteSelectedOpenchannelAccountApps($event)"
1156 aria-label="delete selected"
1158 translate-attr-label="OPENCHANNEL.DELETE_SELECTED"
1160 <md-icon md-font-icon="icon-delete"></md-icon>
1165 <!-- QUEUES TABLE -->
1166 <md-table-container>
1171 ng-model="vm_ac.selectedOpenchannelAccountApps"
1175 <th md-column width="10px"></th>
1176 <th md-column width="10px">
1177 <span translate="VOICE.PRIORITY">Priority</span>
1183 <span>Appdata</span>
1186 <span>Interval</span>
1188 <th md-column width="10px"></th>
1189 <th md-column width="10px"></th>
1192 <tbody md-body ng-sortable="vm_ac.applications">
1197 ng-repeat="app in vm_ac.openchannelAccountApps.rows | filter: vm_ac.query.filter"
1201 md-font-icon="icon-drag-vertical"
1207 ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"
1209 <span>{{app.priority}}</span>
1213 ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"
1215 {{app.app.toLowerCase() === 'agi' ? 'Cally-Square' :
1216 app.app | ucfirst}}<span
1217 ng-if="app.appType.toLowerCase() === 'custom'"
1223 ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"
1225 <span class="text-truncate" style="width: 200px"
1226 >{{app.appdata}}</span
1231 ng-click="vm_ac.editInterval($event, $index)"
1233 {{app.IntervalId ? 'From List' : app.interval}}
1237 ng-click="vm_ac.editInterval($event, $index)"
1238 class="md-icon-button"
1239 aria-label="Interval"
1241 <md-icon md-font-icon="icon-timer"></md-icon>
1243 {{app.IntervalId ? 'From List' : (app.interval ===
1244 '*,*,*,*' ? 'Always' : 'Custom')}}
1251 ng-if="!vm_ac.crudPermissions.readOnly"
1255 class="md-icon-button"
1258 translate-attr-aria-label="VOICE.MORE"
1259 ng-click="$mdOpenMenu($event)"
1262 md-font-icon="icon-dots-vertical"
1266 <md-menu-content width="3">
1268 ng-if="vm_ac.crudPermissions.canEdit"
1271 ng-click="vm_ac.editOpenchannelAccountApp($event, $index)"
1272 translate="VOICE.EDIT_APP"
1278 ng-if="vm_ac.crudPermissions.canEdit"
1281 ng-click="vm_ac.editInterval($event, $index)"
1282 translate="VOICE.EDIT_INTERVAL"
1288 ng-if="vm_ac.crudPermissions.canDelete"
1291 ng-click="vm_ac.deleteConfirm(app, $index, $event)"
1292 translate="VOICE.DELETE_APP"
1303 ng-hide="vm_ac.openchannelAccountApps.rows.length"
1305 <td md-cell colspan="7">
1307 class="text-boxed-light"
1308 translate="VOICE.NO_APPS_AVAILABLE"
1309 >No apps available</span
1315 </md-table-container>
1316 <!-- / QUEUES TABLE -->
1320 <!-- / NO RESULTS -->
1329 <span translate="OPENCHANNEL.INTERACTIONS">INTERACTIONS</span>
1333 class="openchannelAccount-detail-form-container interactions md-background-bg md-whiteframe-1dp"
1336 ng-controller="OpenchannelAccountInteractionsController as vm_dc"
1337 ng-init="vm_dc.init(vm.openchannelAccount, vm.crudPermissions)"
1340 class="md-table-toolbar md-default"
1341 ng-hide="vm_dc.selectedOpenchannelAccountInteractions.length"
1343 <div class="md-toolbar-tools">
1344 <span class="md-subhead" translate="OPENCHANNEL.INTERACTIONS"
1348 on-search="vm_dc.query.filter = query"
1349 on-collapse="vm_dc.query.filter = undefined"
1355 filters="vm_dc.quickFilters"
1357 search="vm_dc.getOpenchannelAccountInteractions()"
1359 <div layout="column">
1361 class="md-icon-button advanced-search"
1362 ng-class="{ 'md-fab md-mini md-accent-bg': vm_dc.query.search }"
1365 translate-attr-aria-label="DASHBOARDS.FILTER"
1366 ng-click="vm_dc.openAdvancedSearch()"
1369 md-font-icon="{{ vm_dc.query.search ? 'icon-filter' : 'icon-filter-outline' }}"
1370 ng-class="{ 'blink': vm_dc.query.search }"
1375 class="md-icon-button"
1376 ng-click="vm_dc.getOpenchannelAccountInteractions()"
1377 aria-label="refresh Interactions"
1379 translate-attr-label="OPENCHANNEL.REFRESH_INTERACTIONS"
1381 <md-icon md-font-icon="icon-refresh"></md-icon>
1386 class="md-table-toolbar md-accent"
1387 ng-show="vm_dc.selectedOpenchannelAccountInteractions.length"
1389 <div class="md-toolbar-tools">
1390 <span class="md-subhead"
1391 >{{vm_dc.selectedOpenchannelAccountInteractions.length}}
1392 {{vm_dc.selectedOpenchannelAccountInteractions.length > 1 ?
1393 'items' : 'item'}} selected</span
1397 class="md-icon-button"
1398 ng-csv="vm_dc.exportSelectedOpenchannelAccountInteractions"
1400 filename="openchannelAccounts.csv"
1402 <md-icon md-font-icon="icon-file-excel"></md-icon>
1405 ng-if="vm_dc.crudPermissions.canDelete"
1406 class="md-icon-button"
1407 ng-click="vm_dc.deleteSelectedOpenchannelAccountInteractions($event)"
1408 aria-label="delete selected"
1410 translate-attr-label="OPENCHANNEL.DELETE_SELECTED"
1412 <md-icon md-font-icon="icon-delete"></md-icon>
1416 <md-table-container class="font-size-12">
1421 ng-model="vm_dc.selectedOpenchannelAccountInteractions"
1422 md-progress="vm_dc.promise"
1426 md-order="vm_dc.query.sort"
1427 md-on-reorder="vm_dc.getOpenchannelAccountInteractions"
1430 <th md-column md-order-by="id">
1431 {{ 'OPENCHANNEL.ID' | translate }}
1433 <th md-column class="no-padding">
1434 <md-icon md-font-icon="icon-eye" class="s16"></md-icon>
1436 <th md-column class="no-padding"></th>
1437 <th md-column class="no-padding"></th>
1438 <th md-column>{{ 'OPENCHANNEL.CONTACT' | translate }}</th>
1439 <th md-column md-order-by="createdAt">
1440 {{ 'OPENCHANNEL.STARTEDAT' | translate }}
1442 <th md-column md-order-by="lastMsgAt">
1443 {{ 'OPENCHANNEL.LASTMESSAGE' | translate }}
1445 <th md-column md-order-by="closed">
1446 {{ 'OPENCHANNEL.STATUS' | translate }}
1448 <th md-column>{{ 'OPENCHANNEL.AGENT' | translate }}</th>
1449 <th md-column md-order-by="tag">
1450 {{ 'OPENCHANNEL.TAGS' | translate }}
1452 <th md-column width="10px"></th>
1458 md-select="interaction"
1460 ng-repeat="interaction in vm_dc.openchannelAccountInteractions.rows"
1461 ng-class="{'text-bold text-italic': interaction.unreadMessages > 0}"
1463 <td md-cell>{{interaction.id}}</td>
1464 <td md-cell class="no-padding">
1466 ng-if="!interaction.closed && interaction.Users.length"
1469 md-font-icon="icon-eye"
1473 <span ng-repeat="user in interaction.Users"
1474 >{{ user.fullname | translate }}
1475 <span ng-if="!$last">, </span>
1480 <td md-cell class="no-padding">
1482 ng-if="interaction.unreadMessages > 0"
1484 layout-align="start center"
1487 class="badge white-fg md-primary-bg"
1489 >{{ interaction.unreadMessages}}</span
1493 <td md-cell class="no-padding">
1494 <div ng-if="interaction.attach">
1496 md-font-icon="icon-paperclip"
1502 <div layout="column" layout-align="start start">
1504 class="font-size-12 text-truncate contact-text"
1505 ng-class="{'margin-bottom-0' : interaction.contactInfo}"
1507 >{{ interaction.contactName }}</span
1510 ng-if="interaction.contactInfo"
1511 class="font-size-12 text-truncate contact-text margin-top-0"
1513 >{{ interaction.contactInfo }}</span
1517 <td md-cell>{{ interaction.createdAt | formatdate }}</td>
1522 md-font-icon="{{interaction.lastMsgDirection == 'in' ? 'icon-arrow-down-bold blue-grey-800-fg' : 'icon-arrow-up-bold blue-grey-300-fg'}}"
1525 <div layout="column" layout-align="center center">
1526 <span class="text-truncate"
1527 >{{ interaction.lastMsgAt | formatdate }}</span
1533 <span ng-if="interaction.closed === 0" class="green-fg">
1534 {{ 'OPENCHANNEL.OPENED' | translate }}
1535 <span ng-if="interaction.substatus">
1536 - {{ interaction.substatus }}
1539 <span ng-if="interaction.closed === 1" class="red-fg">
1540 {{ 'OPENCHANNEL.CLOSED' | translate }}
1541 <span ng-if="interaction.disposition">
1542 - {{ interaction.thirdDisposition ||
1543 interaction.secondDisposition ||
1544 interaction.disposition }}
1546 <md-tooltip class="multiline">
1547 <div layout="column">
1548 <div layout="column">
1550 >{{ 'DASHBOARDS.CLOSED_AT' |
1553 <span class="text-bold"
1554 >{{ interaction.closedAt | formatdate }}</span
1558 ng-if="interaction.disposition"
1562 >{{ 'DASHBOARDS.DISPOSITION' |
1565 <span class="text-bold"
1566 >{{ interaction.disposition }}</span
1570 ng-if="interaction.secondDisposition"
1574 >{{ 'DASHBOARDS.SECOND_LEVEL_DISPOSITION' |
1577 <span class="text-bold"
1578 >{{ interaction.secondDisposition }}</span
1582 ng-if="interaction.thirdDisposition"
1586 >{{ 'DASHBOARDS.THIRD_LEVEL_DISPOSITION' |
1589 <span class="text-bold"
1590 >{{ interaction.thirdDisposition }}</span
1598 <td md-cell>{{interaction.Owner.name}}</td>
1600 <div ng-if="interaction.Tags.length">
1601 <md-tooltip md-direction="left" layout="row">
1602 <span ng-repeat="tag in interaction.Tags"
1603 >{{tag.name}}<span ng-if="!$last">, </span></span
1607 md-font-icon="icon-tag"
1608 ng-style="{'color': interaction.Tags.length == 1 && interaction.Tags[0].color }"
1613 <td md-cell class="actions">
1616 class="md-icon-button"
1619 translate-attr-aria-label="OPENCHANNEL.MORE"
1620 ng-click="$mdOpenMenu($event)"
1623 md-font-icon="icon-dots-vertical"
1627 <md-menu-content width="3">
1630 ng-click="vm_dc.spyopenchannelInteraction($event, interaction)"
1631 translate="OPENCHANNEL.SPYINTERACTION"
1639 ng-click="vm_dc.openchannelInteractionDownload(interaction, $event, true)"
1640 translate="OPENCHANNEL.DOWNLOAD_WITH_ATTACHMENTS"
1642 Download with attachments
1648 ng-click="vm_dc.openchannelInteractionDownload(interaction, $event)"
1649 translate="OPENCHANNEL.DOWNLOAD_WITHOUT_ATTACHMENTS"
1651 Download without attachments
1655 ng-if="vm_dc.crudPermissions.canDelete"
1658 ng-click="vm_dc.deleteConfirm(interaction, $event)"
1659 translate="OPENCHANNEL.DELETE_INTERACTION"
1670 ng-if="!vm_dc.openchannelAccountInteractions.rows.length"
1672 <td md-cell colspan="12">
1673 <div layout="row" layout-align="center center">
1675 class="text-boxed-light"
1676 translate="OPENCHANNEL.NO_INTERACTION_AVAILABLE"
1677 >No interaction available</span
1684 </md-table-container>
1685 <md-table-pagination
1686 md-label="{page: '{{'OPENCHANNEL.PAGE' | translate}}:', rowsPerPage: '{{'OPENCHANNEL.ROWSPERPAGE' | translate}}:', of: '{{'OPENCHANNEL.OF' | translate}}'}"
1687 md-limit="vm_dc.query.limit"
1688 md-limit-options="[10, 15, 20, 50, 100, 250]"
1689 md-page="vm_dc.query.page"
1690 md-total="{{vm_dc.openchannelAccountInteractions.count}}"
1691 md-on-paginate="vm_dc.getOpenchannelAccountInteractions"
1693 ></md-table-pagination>