1 <div id="motiondialer-ivrCampaign" class="page-layout simple tabbed" layout="column">
4 <div class="header md-accent-bg" layout="row" layout-align="start center">
5 <div class="white-fg" layout="row" layout-align="start center" flex>
6 <md-button class="goto-ivrCampaigns-button md-icon-button" aria-label="Go to ivrCampaigns" ng-click="vm.gotoIvrCampaigns()" translate translate-attr-aria-label="MOTIONDIALER.GO_TO_IVRCAMPAIGNS">
7 <md-icon md-font-icon="icon-arrow-left"></md-icon>
10 <div layout="row" layout-align="start center">
12 <div ng-if="vm.ivrCampaign.userpic" class="ivrCampaign-image" hide-xs>
13 <img ng-src="api/users/{{vm.ivrCampaign.id}}/avatar">
16 <div ng-if="!vm.ivrCampaign.userpic" class="ivrCampaign-image" hide-xs>
17 <img ng-src="assets/images/business/ivrCampaigns.jpg">
20 <div layout="column" layout-align="start start">
22 #{{vm.ivrCampaign.id}} {{vm.ivrCampaign.name}}
24 <div class="subtitle secondary-text">
25 <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.ivrCampaign.createdAt | date:'medium'}}</span>
33 <md-button ng-click="vm.listadddialog(vm.ivrCampaign, $event)" class="md-fab md-green-500-bg md-icon-button" aria-label="listadd">
34 <md-tooltip><span translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN"></span></md-tooltip>
35 <md-icon md-font-icon="icon-format-list-numbers"></md-icon>
40 <md-button ng-click="vm.blacklistadddialog(vm.ivrCampaign, $event)" class="md-fab md-warn md-icon-button" aria-label="blacklistadd">
41 <md-tooltip><span translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN"></span></md-tooltip>
42 <md-icon md-font-icon="icon-block-helper"></md-icon>
46 <md-button type="submit" ng-click="vm.saveIvrCampaign()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (campaignForm.$invalid) || (originateForm.$invalid) || (globalForm.$invalid) || (congestionForm.$invalid) || (busyForm.$invalid) || (noanswerForm.$invalid) || (globalintervalForm.$invalid) || (timezoneForm.$invalid) || (hoppersForm.$invalid) || (hopperHistoriesForm.$invalid) || (hopperFinalsForm.$invalid) || (hopperBlacksForm.$invalid)"
47 translate="MOTIONDIALER.SAVE" translate-attr-aria-label="MOTIONDIALER.SAVE">
58 <md-tabs md-selected="vm.selectedTab" md-dynamic-height>
61 <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>
65 <div class="ivrCampaign-detail-form-container general md-background-bg md-whiteframe-1dp">
66 <div class="pb-16" layout="row" layout-align="start center">
67 <div class="h2 secondary-text" translate="MOTIONDIALER.GENERAL">GENERAL</div>
69 <form name="generalForm" novalidate>
70 <md-input-container class="md-block">
71 <label translate="MOTIONDIALER.NAME">Name</label>
72 <input type="text" name="name" ng-model="vm.ivrCampaign.name" required md-autofocus>
73 <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">
74 <div ng-message="required">
75 <span translate="MOTIONDIALER.ERRORS.NAME_REQUIRED">Name field is required</span>
79 <md-input-container class="md-block">
80 <md-switch ng-model="vm.ivrCampaign.active" aria-label="Active"><span translate="MOTIONDIALER.ACTIVE">Active</span></md-switch>
82 <md-input-container class="md-block">
83 <label translate="MOTIONDIALER.TRUNK">Trunk</label>
84 <md-select ng-model="vm.ivrCampaign.TrunkId" required>
85 <md-option ng-value="TrunkId.id" ng-repeat="TrunkId in vm.trunks">{{ TrunkId.name }}</md-option>
87 <div ng-messages="generalForm.TrunkId.$error" ng-show="generalForm.TrunkId.$touched" role="alert">
88 <div ng-message="required">
89 <span translate="MOTIONDIALER.ERRORS.TRUNK_REQUIRED">Trunk field is required</span>
93 <md-input-container class="md-block">
94 <label translate="MOTIONDIALER.BACKUPTRUNK">BackupTrunk</label>
95 <md-select ng-model="vm.ivrCampaign.TrunkBackupId">
96 <md-option ng-value="TrunkBackupId.id" ng-repeat="TrunkBackupId in vm.trunks">{{ TrunkBackupId.name }}</md-option>
97 <md-option ng-value="null">None</md-option>
99 <div ng-messages="generalForm.TrunkBackupId.$error" ng-show="generalForm.TrunkBackupId.$touched" role="alert">
100 <div ng-message="required">
101 <span translate="MOTIONDIALER.ERRORS.BACKUPTRUNK_REQUIRED">BackupTrunk field is required</span>
104 </md-input-container>
105 <md-input-container class="md-block">
106 <label translate="MOTIONDIALER.INTERVAL">Interval</label>
107 <md-select ng-model="vm.ivrCampaign.IntervalId" required>
108 <md-option ng-value="IntervalId.id" ng-repeat="IntervalId in vm.interval">{{ IntervalId.name }}</md-option>
110 <div ng-messages="generalForm.IntervalId.$error" ng-show="generalForm.IntervalId.$touched" role="alert">
111 <div ng-message="required">
112 <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED">Interval field is required</span>
115 </md-input-container>
116 <md-input-container class="md-block">
117 <label translate="MOTIONDIALER.DESCRIPTION">Description</label>
118 <input type="text" name="description" ng-model="vm.ivrCampaign.description">
119 <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">
120 <div ng-message="required">
121 <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>
124 </md-input-container>
132 <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>
136 <div class="ivrCampaign-detail-form-container campaign md-background-bg md-whiteframe-1dp">
137 <div class="pb-16" layout="row" layout-align="start center">
138 <div class="h2 secondary-text" translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</div>
140 <form name="campaignForm" novalidate>
141 <md-input-container class="md-block">
142 <label translate="MOTIONDIALER.CALLYSQUAREPROJECT">CallySquareProject</label>
143 <md-select ng-model="vm.ivrCampaign.SquareProjectId" required md-autofocus>
144 <md-option ng-value="SquareProjectId.id" ng-repeat="SquareProjectId in vm.projects">{{ SquareProjectId.name }}</md-option>
146 <div ng-messages="campaignForm.SquareProjectId.$error" ng-show="campaignForm.SquareProjectId.$touched" role="alert">
147 <div ng-message="required">
148 <span translate="MOTIONDIALER.ERRORS.CALLYSQUAREPROJECT_REQUIRED">CallySquareProject field is required</span>
151 </md-input-container>
152 <md-input-container class="md-block">
153 <label translate="MOTIONDIALER.CONCURRENTCALLS">ConcurrentCalls</label>
154 <input type="number" name="limitCalls" ng-model="vm.ivrCampaign.limitCalls" min="1" max="200" required>
155 <div class="hint"><span translate="MOTIONDIALER.HELP.CONCURRENTCALLS"></span></div>
156 <div ng-messages="campaignForm.limitCalls.$error" ng-show="campaignForm.limitCalls.$touched" role="alert">
157 <div ng-message="required">
158 <span translate="MOTIONDIALER.ERRORS.CONCURRENTCALLS_REQUIRED">ConcurrentCalls field is required</span>
161 </md-input-container>
165 <div class="ivrCampaign-detail-form-container originate md-background-bg md-whiteframe-1dp">
166 <div class="pb-16" layout="row" layout-align="start center">
167 <div class="h2 secondary-text" translate="MOTIONDIALER.ORIGINATE">ORIGINATE</div>
169 <form name="originateForm" novalidate>
170 <md-input-container class="md-block">
171 <label translate="MOTIONDIALER.ORIGINATECALLERIDNAME">OriginateCallerIdName</label>
172 <input type="text" name="dialOriginateCallerIdName" ng-model="vm.ivrCampaign.dialOriginateCallerIdName" md-autofocus>
173 <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNAME"></span></div>
174 <div ng-messages="originateForm.dialOriginateCallerIdName.$error" ng-show="originateForm.dialOriginateCallerIdName.$touched" role="alert">
175 <div ng-message="required">
176 <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNAME_REQUIRED">OriginateCallerIdName field is required</span>
179 </md-input-container>
180 <md-input-container class="md-block">
181 <label translate="MOTIONDIALER.ORIGINATECALLERIDNUMBER">OriginateCallerIdNumber</label>
182 <input type="text" name="dialOriginateCallerIdNumber" ng-model="vm.ivrCampaign.dialOriginateCallerIdNumber">
183 <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATECALLERIDNUMBER"></span></div>
184 <div ng-messages="originateForm.dialOriginateCallerIdNumber.$error" ng-show="originateForm.dialOriginateCallerIdNumber.$touched" role="alert">
185 <div ng-message="required">
186 <span translate="MOTIONDIALER.ERRORS.ORIGINATECALLERIDNUMBER_REQUIRED">OriginateCallerIdNumber field is required</span>
189 </md-input-container>
190 <md-input-container class="md-block">
191 <label translate="MOTIONDIALER.ORIGINATETIMEOUT">OriginateTimeout</label>
192 <input type="number" name="dialOriginateTimeout" ng-model="vm.ivrCampaign.dialOriginateTimeout" min="1" max="999" required>
193 <div class="hint"><span translate="MOTIONDIALER.HELP.ORIGINATETIMEOUT"></span></div>
194 <div ng-messages="originateForm.dialOriginateTimeout.$error" ng-show="originateForm.dialOriginateTimeout.$touched" role="alert">
195 <div ng-message="required">
196 <span translate="MOTIONDIALER.ERRORS.ORIGINATETIMEOUT_REQUIRED">OriginateTimeout field is required</span>
199 </md-input-container>
207 <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>
211 <div class="ivrCampaign-detail-form-container global md-background-bg md-whiteframe-1dp">
212 <div class="pb-16" layout="row" layout-align="start center">
213 <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBAL">GLOBAL</div>
215 <form name="globalForm" novalidate>
216 <md-input-container class="md-block">
217 <label translate="MOTIONDIALER.GLOBALMAXRETRY">GlobalMaxRetry</label>
218 <input type="number" name="dialGlobalMaxRetry" ng-model="vm.ivrCampaign.dialGlobalMaxRetry" min="1" max="999" required md-autofocus>
219 <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALMAXRETRY"></span></div>
220 <div ng-messages="globalForm.dialGlobalMaxRetry.$error" ng-show="globalForm.dialGlobalMaxRetry.$touched" role="alert">
221 <div ng-message="required">
222 <span translate="MOTIONDIALER.ERRORS.GLOBALMAXRETRY_REQUIRED">GlobalMaxRetry field is required</span>
225 </md-input-container>
229 <div class="ivrCampaign-detail-form-container congestion md-background-bg md-whiteframe-1dp">
230 <div class="pb-16" layout="row" layout-align="start center">
231 <div class="h2 secondary-text" translate="MOTIONDIALER.CONGESTION">CONGESTION</div>
233 <form name="congestionForm" novalidate>
234 <md-input-container class="md-block">
235 <label translate="MOTIONDIALER.CONGESTIONMAXRETRY">CongestionMaxRetry</label>
236 <input type="number" name="dialCongestionMaxRetry" ng-model="vm.ivrCampaign.dialCongestionMaxRetry" min="1" max="999" required md-autofocus>
237 <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONMAXRETRY"></span></div>
238 <div ng-messages="congestionForm.dialCongestionMaxRetry.$error" ng-show="congestionForm.dialCongestionMaxRetry.$touched" role="alert">
239 <div ng-message="required">
240 <span translate="MOTIONDIALER.ERRORS.CONGESTIONMAXRETRY_REQUIRED">CongestionMaxRetry field is required</span>
243 </md-input-container>
244 <md-input-container class="md-block">
245 <label translate="MOTIONDIALER.CONGESTIONRETRYTIME">CongestionRetryTime</label>
246 <input type="number" name="dialCongestionRetryFrequency" ng-model="vm.ivrCampaign.dialCongestionRetryFrequency" min="1" max="99999" required>
247 <div class="hint"><span translate="MOTIONDIALER.HELP.CONGESTIONRETRYTIME"></span></div>
248 <div ng-messages="congestionForm.dialCongestionRetryFrequency.$error" ng-show="congestionForm.dialCongestionRetryFrequency.$touched" role="alert">
249 <div ng-message="required">
250 <span translate="MOTIONDIALER.ERRORS.CONGESTIONRETRYTIME_REQUIRED">CongestionRetryTime field is required</span>
253 </md-input-container>
257 <div class="ivrCampaign-detail-form-container busy md-background-bg md-whiteframe-1dp">
258 <div class="pb-16" layout="row" layout-align="start center">
259 <div class="h2 secondary-text" translate="MOTIONDIALER.BUSY">BUSY</div>
261 <form name="busyForm" novalidate>
262 <md-input-container class="md-block">
263 <label translate="MOTIONDIALER.BUSYMAXRETRY">BusyMaxRetry</label>
264 <input type="number" name="dialBusyMaxRetry" ng-model="vm.ivrCampaign.dialBusyMaxRetry" min="1" max="999" required md-autofocus>
265 <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYMAXRETRY"></span></div>
266 <div ng-messages="busyForm.dialBusyMaxRetry.$error" ng-show="busyForm.dialBusyMaxRetry.$touched" role="alert">
267 <div ng-message="required">
268 <span translate="MOTIONDIALER.ERRORS.BUSYMAXRETRY_REQUIRED">BusyMaxRetry field is required</span>
271 </md-input-container>
272 <md-input-container class="md-block">
273 <label translate="MOTIONDIALER.BUSYRETRYTIME">BusyRetryTime</label>
274 <input type="number" name="dialBusyRetryFrequency" ng-model="vm.ivrCampaign.dialBusyRetryFrequency" min="1" max="99999" required>
275 <div class="hint"><span translate="MOTIONDIALER.HELP.BUSYRETRYTIME"></span></div>
276 <div ng-messages="busyForm.dialBusyRetryFrequency.$error" ng-show="busyForm.dialBusyRetryFrequency.$touched" role="alert">
277 <div ng-message="required">
278 <span translate="MOTIONDIALER.ERRORS.BUSYRETRYTIME_REQUIRED">BusyRetryTime field is required</span>
281 </md-input-container>
285 <div class="ivrCampaign-detail-form-container noanswer md-background-bg md-whiteframe-1dp">
286 <div class="pb-16" layout="row" layout-align="start center">
287 <div class="h2 secondary-text" translate="MOTIONDIALER.NOANSWER">NOANSWER</div>
289 <form name="noanswerForm" novalidate>
290 <md-input-container class="md-block">
291 <label translate="MOTIONDIALER.NOANSWERMAXRETRY">NoAnswerMaxRetry</label>
292 <input type="number" name="dialNoAnswerMaxRetry" ng-model="vm.ivrCampaign.dialNoAnswerMaxRetry" min="1" max="999" required md-autofocus>
293 <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERMAXRETRY"></span></div>
294 <div ng-messages="noanswerForm.dialNoAnswerMaxRetry.$error" ng-show="noanswerForm.dialNoAnswerMaxRetry.$touched" role="alert">
295 <div ng-message="required">
296 <span translate="MOTIONDIALER.ERRORS.NOANSWERMAXRETRY_REQUIRED">NoAnswerMaxRetry field is required</span>
299 </md-input-container>
300 <md-input-container class="md-block">
301 <label translate="MOTIONDIALER.NOANSWERRETRYTIME">NoAnswerRetryTime</label>
302 <input type="number" name="dialNoAnswerRetryFrequency" ng-model="vm.ivrCampaign.dialNoAnswerRetryFrequency" min="1" max="99999" required>
303 <div class="hint"><span translate="MOTIONDIALER.HELP.NOANSWERRETRYTIME"></span></div>
304 <div ng-messages="noanswerForm.dialNoAnswerRetryFrequency.$error" ng-show="noanswerForm.dialNoAnswerRetryFrequency.$touched" role="alert">
305 <div ng-message="required">
306 <span translate="MOTIONDIALER.ERRORS.NOANSWERRETRYTIME_REQUIRED">NoAnswerRetryTime field is required</span>
309 </md-input-container>
317 <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>
321 <div class="ivrCampaign-detail-form-container globalinterval md-background-bg md-whiteframe-1dp">
322 <div class="pb-16" layout="row" layout-align="start center">
323 <div class="h2 secondary-text" translate="MOTIONDIALER.GLOBALINTERVAL">GLOBALINTERVAL</div>
325 <form name="globalintervalForm" novalidate>
326 <md-input-container class="md-block">
327 <label translate="MOTIONDIALER.GLOBALINTERVAL">GlobalInterval</label>
328 <input type="text" name="dialGlobalInterval" ng-model="vm.ivrCampaign.dialGlobalInterval" required md-autofocus>
329 <div class="hint"><span translate="MOTIONDIALER.HELP.GLOBALINTERVAL"></span></div>
330 <div ng-messages="globalintervalForm.dialGlobalInterval.$error" ng-show="globalintervalForm.dialGlobalInterval.$touched" role="alert">
331 <div ng-message="required">
332 <span translate="MOTIONDIALER.ERRORS.GLOBALINTERVAL_REQUIRED">GlobalInterval field is required</span>
335 </md-input-container>
339 <div class="ivrCampaign-detail-form-container timezone md-background-bg md-whiteframe-1dp">
340 <div class="pb-16" layout="row" layout-align="start center">
341 <div class="h2 secondary-text" translate="MOTIONDIALER.TIMEZONE">TIMEZONE</div>
343 <form name="timezoneForm" novalidate>
344 <md-input-container class="md-block">
345 <label translate="MOTIONDIALER.TIMEZONE">Timezone</label>
346 <ms-timezone name="dialTimezone" ng-model="vm.ivrCampaign.dialTimezone" md-autofocus>
347 <div class="hint"><span translate="MOTIONDIALER.HELP.TIMEZONE"></span></div>
348 <div ng-messages="timezoneForm.dialTimezone.$error" ng-show="timezoneForm.dialTimezone.$touched" role="alert">
349 <div ng-message="required">
350 <span translate="MOTIONDIALER.ERRORS.TIMEZONE_REQUIRED">Timezone field is required</span>
353 </md-input-container>
361 <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>
365 <div class="ivrCampaign-detail-form-container hoppers md-background-bg md-whiteframe-1dp">
366 <div ng-controller="IvrCampaignHoppersController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign)">
367 <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHoppers.length">
368 <div class="md-toolbar-tools">
369 <span class="md-subhead" translate="MOTIONDIALER.HOPPERS">Hoppers</span>
371 <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
372 <md-button class="md-icon-button" ng-click="vm_dc.createOrEditIvrCampaignHopper($event)" aria-label="add hopper" translate translate-attr-label="MOTIONDIALER.ADD_HOPPER">
373 <md-icon md-font-icon="icon-plus"></md-icon>
377 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHoppers.length">
378 <div class="md-toolbar-tools">
379 <span class="md-subhead">{{vm_dc.selectedIvrCampaignHoppers.length}} {{vm_dc.selectedIvrCampaignHoppers.length > 1 ? 'items' : 'item'}} selected</span>
381 <md-button class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHoppers($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">
382 <md-icon md-font-icon="icon-delete"></md-icon>
387 <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHoppers" md-progress="vm_dc.promise">
388 <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHoppers">
390 <th md-column md-order-by="ContactId">{{ 'MOTIONDIALER.CONTACTID' | translate }}</th>
391 <th md-column md-order-by="phone">{{ 'MOTIONDIALER.PHONE' | translate }}</th>
392 <th md-column md-order-by="countcongestionretry">{{ 'MOTIONDIALER.CONGESTION' | translate }}</th>
393 <th md-column md-order-by="countbusyretry">{{ 'MOTIONDIALER.BUSY' | translate }}</th>
394 <th md-column md-order-by="countnoanswerretry">{{ 'MOTIONDIALER.NOANSWER' | translate }}</th>
395 <th md-column md-order-by="scheduledat">{{ 'MOTIONDIALER.SCHEDULEDAT' | translate }}</th>
396 <th md-column width="10px"></th>
400 <tr md-row md-select="hopper" md-select-id="id" ng-repeat="hopper in vm_dc.ivrCampaignHoppers.rows">
401 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.ContactId}}</td>
402 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.phone}}</td>
403 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countcongestionretry}}</td>
404 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countbusyretry}}</td>
405 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.countnoanswerretry}}</td>
406 <td ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" md-cell>{{hopper.scheduledat | date:'medium'}}</td>
407 <td md-cell class="actions">
409 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE">
410 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
413 <md-menu-content width="3">
415 <md-button ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">
420 <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">
428 <tr md-row ng-if="!vm_dc.ivrCampaignHoppers.rows.length">
429 <td md-cell colspan="9">
430 <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPER_AVAILABLE">No hopper available</span>
435 </md-table-container>
436 <md-table-pagination md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHoppers.count}}" md-on-paginate="vm_dc.getIvrCampaignHoppers" md-page-select></md-table-pagination>
444 <span translate="MOTIONDIALER.HISTORY">HISTORY</span>
448 <div class="ivrCampaign-detail-form-container hopperhistories md-background-bg md-whiteframe-1dp">
449 <div ng-controller="IvrCampaignHopperHistoriesController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign)">
450 <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperHistories.length">
451 <div class="md-toolbar-tools">
452 <span class="md-subhead" translate="MOTIONDIALER.HOPPERHISTORIES">HopperHistories</span>
454 <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
457 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperHistories.length">
458 <div class="md-toolbar-tools">
459 <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperHistories.length}} {{vm_dc.selectedIvrCampaignHopperHistories.length > 1 ? 'items' : 'item'}} selected</span>
461 <md-button class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHopperHistories($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">
462 <md-icon md-font-icon="icon-delete"></md-icon>
467 <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperHistories" md-progress="vm_dc.promise">
468 <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperHistories">
470 <th md-column md-order-by="uniqueid">{{ 'MOTIONDIALER.UNIQUEID' | translate }}</th>
471 <th md-column md-order-by="ContactId">{{ 'MOTIONDIALER.CONTACTID' | translate }}</th>
472 <th md-column md-order-by="calleridnum">{{ 'MOTIONDIALER.PHONE' | translate }}</th>
473 <th md-column md-order-by="calleridname">{{ 'MOTIONDIALER.NAME' | translate }}</th>
474 <th md-column md-order-by="statedesc">{{ 'MOTIONDIALER.STATUS' | translate }}</th>
475 <th md-column md-order-by="scheduledat">{{ 'MOTIONDIALER.SCHEDULEDAT' | translate }}</th>
476 <th md-column md-order-by="starttime">{{ 'MOTIONDIALER.STARTTIME' | translate }}</th>
477 <th md-column md-order-by="endtime">{{ 'MOTIONDIALER.ENDTIME' | translate }}</th>
478 <th md-column width="10px"></th>
482 <tr md-row md-select="hopperHistory" md-select-id="id" ng-repeat="hopperHistory in vm_dc.ivrCampaignHopperHistories.rows">
483 <td md-cell>{{hopperHistory.uniqueid}}</td>
484 <td md-cell>{{hopperHistory.ContactId}}</td>
485 <td md-cell>{{hopperHistory.calleridnum}}</td>
486 <td md-cell>{{hopperHistory.calleridname}}</td>
487 <td md-cell>{{hopperHistory.statedesc}}</td>
488 <td md-cell>{{hopperHistory.scheduledat | date:'medium'}}</td>
489 <td md-cell>{{hopperHistory.starttime | date:'medium'}}</td>
490 <td md-cell>{{hopperHistory.endtime | date:'medium'}}</td>
491 <td md-cell class="actions">
493 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE">
494 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
497 <md-menu-content width="3">
499 <md-button ng-click="vm_dc.deleteConfirm(hopperHistory, $event)" translate="MOTIONDIALER.DELETE_HOPPERHISTORY">
507 <tr md-row ng-if="!vm_dc.ivrCampaignHopperHistories.rows.length">
508 <td md-cell colspan="11">
509 <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERHISTORY_AVAILABLE">No hopperhistory available</span>
514 </md-table-container>
515 <md-table-pagination md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperHistories.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperHistories" md-page-select></md-table-pagination>
523 <span translate="MOTIONDIALER.FINAL">FINAL</span>
527 <div class="ivrCampaign-detail-form-container hopperfinals md-background-bg md-whiteframe-1dp">
528 <div ng-controller="IvrCampaignHopperFinalsController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign)">
529 <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperFinals.length">
530 <div class="md-toolbar-tools">
531 <span class="md-subhead" translate="MOTIONDIALER.HOPPERFINALS">HopperFinals</span>
533 <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
536 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperFinals.length">
537 <div class="md-toolbar-tools">
538 <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperFinals.length}} {{vm_dc.selectedIvrCampaignHopperFinals.length > 1 ? 'items' : 'item'}} selected</span>
540 <md-button class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHopperFinals($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">
541 <md-icon md-font-icon="icon-delete"></md-icon>
546 <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperFinals" md-progress="vm_dc.promise">
547 <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperFinals">
549 <th md-column md-order-by="uniqueid">{{ 'MOTIONDIALER.UNIQUEID' | translate }}</th>
550 <th md-column md-order-by="calleridnum">{{ 'MOTIONDIALER.PHONE' | translate }}</th>
551 <th md-column md-order-by="calleridname">{{ 'MOTIONDIALER.NAME' | translate }}</th>
552 <th md-column md-order-by="statedesc">{{ 'MOTIONDIALER.STATUS' | translate }}</th>
553 <th md-column md-order-by="countcongestionretry">{{ 'MOTIONDIALER.CONGESTION' | translate }}</th>
554 <th md-column md-order-by="countbusyretry">{{ 'MOTIONDIALER.BUSY' | translate }}</th>
555 <th md-column md-order-by="countnoanswerretry">{{ 'MOTIONDIALER.NOANSWER' | translate }}</th>
556 <th md-column md-order-by="starttime">{{ 'MOTIONDIALER.STARTTIME' | translate }}</th>
557 <th md-column md-order-by="endtime">{{ 'MOTIONDIALER.ENDTIME' | translate }}</th>
558 <th md-column md-order-by="disposition">{{ 'MOTIONDIALER.DISPOSITION' | translate }}</th>
559 <th md-column width="10px"></th>
563 <tr md-row md-select="hopperFinal" md-select-id="id" ng-repeat="hopperFinal in vm_dc.ivrCampaignHopperFinals.rows">
564 <td md-cell>{{hopperFinal.uniqueid}}</td>
565 <td md-cell>{{hopperFinal.calleridnum}}</td>
566 <td md-cell>{{hopperFinal.calleridname}}</td>
567 <td md-cell>{{hopperFinal.statedesc}}</td>
568 <td md-cell>{{hopperFinal.countcongestionretry}}</td>
569 <td md-cell>{{hopperFinal.countbusyretry}}</td>
570 <td md-cell>{{hopperFinal.countnoanswerretry}}</td>
571 <td md-cell>{{hopperFinal.starttime | date:'medium'}}</td>
572 <td md-cell>{{hopperFinal.endtime | date:'medium'}}</td>
573 <td md-cell>{{hopperFinal.disposition}}</td>
574 <td md-cell class="actions">
576 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE">
577 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
580 <md-menu-content width="3">
582 <md-button ng-click="vm_dc.deleteConfirm(hopperFinal, $event)" translate="MOTIONDIALER.DELETE_HOPPERFINAL">
590 <tr md-row ng-if="!vm_dc.ivrCampaignHopperFinals.rows.length">
591 <td md-cell colspan="15">
592 <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERFINAL_AVAILABLE">No hopperfinal available</span>
597 </md-table-container>
598 <md-table-pagination md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperFinals.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperFinals" md-page-select></md-table-pagination>
606 <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>
610 <div class="ivrCampaign-detail-form-container hopperblacks md-background-bg md-whiteframe-1dp">
611 <div ng-controller="IvrCampaignHopperBlacksController as vm_dc" ng-init="vm_dc.init(vm.ivrCampaign)">
612 <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedIvrCampaignHopperBlacks.length">
613 <div class="md-toolbar-tools">
614 <span class="md-subhead" translate="MOTIONDIALER.HOPPERBLACKS">HopperBlacks</span>
616 <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
619 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedIvrCampaignHopperBlacks.length">
620 <div class="md-toolbar-tools">
621 <span class="md-subhead">{{vm_dc.selectedIvrCampaignHopperBlacks.length}} {{vm_dc.selectedIvrCampaignHopperBlacks.length > 1 ? 'items' : 'item'}} selected</span>
623 <md-button class="md-icon-button" ng-click="vm_dc.deleteSelectedIvrCampaignHopperBlacks($event)" aria-label="delete selected" translate translate-attr-label="IVRCAMPAIGNS.DELETE_SELECTED">
624 <md-icon md-font-icon="icon-delete"></md-icon>
629 <table md-table md-row-select multiple ng-model="vm_dc.selectedIvrCampaignHopperBlacks" md-progress="vm_dc.promise">
630 <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getIvrCampaignHopperBlacks">
632 <th md-column md-order-by="ContactId">{{ 'MOTIONDIALER.CONTACTID' | translate }}</th>
633 <th md-column md-order-by="phone">{{ 'MOTIONDIALER.PHONE' | translate }}</th>
634 <th md-column width="10px"></th>
638 <tr md-row md-select="hopperBlack" md-select-id="id" ng-repeat="hopperBlack in vm_dc.ivrCampaignHopperBlacks.rows">
639 <td md-cell>{{hopperBlack.ContactId}}</td>
640 <td md-cell>{{hopperBlack.phone}}</td>
641 <td md-cell class="actions">
643 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="MOTIONDIALER.MORE">
644 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
647 <md-menu-content width="3">
649 <md-button ng-click="vm_dc.deleteConfirm(hopperBlack, $event)" translate="MOTIONDIALER.DELETE_HOPPERBLACK">
657 <tr md-row ng-if="!vm_dc.ivrCampaignHopperBlacks.rows.length">
658 <td md-cell colspan="4">
659 <span class="text-boxed-ligth" translate="MOTIONDIALER.NO_HOPPERBLACK_AVAILABLE">No hopperblack available</span>
664 </md-table-container>
665 <md-table-pagination md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20]" md-page="vm_dc.query.page" md-total="{{vm_dc.ivrCampaignHopperBlacks.count}}" md-on-paginate="vm_dc.getIvrCampaignHopperBlacks" md-page-select></md-table-pagination>