Built motion from commit b598105.|2.0.4
[motion2.git] / public / app / main / apps / motiondialer / views / ivrCampaigns / edit / view.html
1 <div id="motiondialer-ivrCampaign" class="page-layout simple tabbed" layout="column">
2
3     <!-- HEADER -->
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>
8             </md-button>
9
10             <div layout="row" layout-align="start center">
11
12                 <div ng-if="vm.ivrCampaign.userpic" class="ivrCampaign-image" hide-xs>
13                     <img ng-src="api/users/{{vm.ivrCampaign.id}}/avatar">
14                 </div>
15
16                 <div ng-if="!vm.ivrCampaign.userpic" class="ivrCampaign-image" hide-xs>
17                     <img ng-src="assets/images/business/ivrCampaigns.jpg">
18                 </div>
19
20                 <div layout="column" layout-align="start start">
21                     <div class="h2">
22                         #{{vm.ivrCampaign.id}} {{vm.ivrCampaign.name}}
23                     </div>
24                     <div class="subtitle secondary-text">
25                         <span translate="MOTIONDIALER.CREATED_AT"></span> <span>{{vm.ivrCampaign.createdAt | date:'medium'}}</span>
26                     </div>
27                 </div>
28             </div>
29         </div>
30
31
32         <div ng-cloak>
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>
36             </md-button>
37         </div>
38
39         <div ng-cloak>
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>
43             </md-button>
44         </div>
45         <div>
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">
48                 SAVE
49             </md-button>
50         </div>
51
52     </div>
53     <!-- / HEADER -->
54
55     <!-- CONTENT -->
56     <div class="content">
57
58         <md-tabs md-selected="vm.selectedTab" md-dynamic-height>
59             <md-tab>
60                 <md-tab-label>
61                     <span translate="MOTIONDIALER.SETTINGS">SETTINGS</span>
62                 </md-tab-label>
63
64                 <md-tab-body>
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>
68                         </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>
76                                     </div>
77                                 </div>
78                             </md-input-container>
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>
81                             </md-input-container>
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>
86                                 </md-select>
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>
90                                     </div>
91                                 </div>
92                             </md-input-container>
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>
98                                 </md-select>
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>
102                                     </div>
103                                 </div>
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>
109                                 </md-select>
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>
113                                     </div>
114                                 </div>
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>
122                                     </div>
123                                 </div>
124                             </md-input-container>
125
126                         </form>
127                     </div>
128                 </md-tab-body>
129             </md-tab>
130             <md-tab>
131                 <md-tab-label>
132                     <span translate="MOTIONDIALER.CAMPAIGN">CAMPAIGN</span>
133                 </md-tab-label>
134
135                 <md-tab-body>
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>
139                         </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>
145                                 </md-select>
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>
149                                     </div>
150                                 </div>
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>
159                                     </div>
160                                 </div>
161                             </md-input-container>
162
163                         </form>
164                     </div>
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>
168                         </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>
177                                     </div>
178                                 </div>
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>
187                                     </div>
188                                 </div>
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>
197                                     </div>
198                                 </div>
199                             </md-input-container>
200
201                         </form>
202                     </div>
203                 </md-tab-body>
204             </md-tab>
205             <md-tab>
206                 <md-tab-label>
207                     <span translate="MOTIONDIALER.RETRYANDFREQUENCY">RETRYANDFREQUENCY</span>
208                 </md-tab-label>
209
210                 <md-tab-body>
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>
214                         </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>
223                                     </div>
224                                 </div>
225                             </md-input-container>
226
227                         </form>
228                     </div>
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>
232                         </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>
241                                     </div>
242                                 </div>
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>
251                                     </div>
252                                 </div>
253                             </md-input-container>
254
255                         </form>
256                     </div>
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>
260                         </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>
269                                     </div>
270                                 </div>
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>
279                                     </div>
280                                 </div>
281                             </md-input-container>
282
283                         </form>
284                     </div>
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>
288                         </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>
297                                     </div>
298                                 </div>
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>
307                                     </div>
308                                 </div>
309                             </md-input-container>
310
311                         </form>
312                     </div>
313                 </md-tab-body>
314             </md-tab>
315             <md-tab>
316                 <md-tab-label>
317                     <span translate="MOTIONDIALER.ADVANCED">ADVANCED</span>
318                 </md-tab-label>
319
320                 <md-tab-body>
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>
324                         </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>
333                                     </div>
334                                 </div>
335                             </md-input-container>
336
337                         </form>
338                     </div>
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>
342                         </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>
351                                         </div>
352                                     </div>
353                             </md-input-container>
354
355                         </form>
356                     </div>
357                 </md-tab-body>
358             </md-tab>
359             <md-tab>
360                 <md-tab-label>
361                     <span translate="MOTIONDIALER.HOPPERS">HOPPERS</span>
362                 </md-tab-label>
363
364                 <md-tab-body>
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>
370                                     <div flex></div>
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>
374                                     </md-button>
375                                 </div>
376                             </md-toolbar>
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>
380                                     <div flex></div>
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>
383                                     </md-button>
384                                 </div>
385                             </md-toolbar>
386                             <md-table-container>
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">
389                                         <tr md-row>
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>
397                                         </tr>
398                                     </thead>
399                                     <tbody md-body>
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">
408                                                 <md-menu>
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>
411                                                     </md-button>
412
413                                                     <md-menu-content width="3">
414                                                         <md-menu-item>
415                                                             <md-button ng-click="vm_dc.createOrEditIvrCampaignHopper($event, hopper)" translate="MOTIONDIALER.EDIT_HOPPER">
416                                                                 Edit Hopper
417                                                             </md-button>
418                                                         </md-menu-item>
419                                                         <md-menu-item>
420                                                             <md-button ng-click="vm_dc.deleteConfirm(hopper, $event)" translate="MOTIONDIALER.DELETE_HOPPER">
421                                                                 Delete Hopper
422                                                             </md-button>
423                                                         </md-menu-item>
424                                                     </md-menu-content>
425                                                 </md-menu>
426                                             </td>
427                                         </tr>
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>
431                                             </td>
432                                         </tr>
433                                     </tbody>
434                                 </table>
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>
437                         </div>
438
439                     </div>
440                 </md-tab-body>
441             </md-tab>
442             <md-tab>
443                 <md-tab-label>
444                     <span translate="MOTIONDIALER.HISTORY">HISTORY</span>
445                 </md-tab-label>
446
447                 <md-tab-body>
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>
453                                     <div flex></div>
454                                     <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
455                                 </div>
456                             </md-toolbar>
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>
460                                     <div flex></div>
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>
463                                     </md-button>
464                                 </div>
465                             </md-toolbar>
466                             <md-table-container>
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">
469                                         <tr md-row>
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>
479                                         </tr>
480                                     </thead>
481                                     <tbody md-body>
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">
492                                                 <md-menu>
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>
495                                                     </md-button>
496
497                                                     <md-menu-content width="3">
498                                                         <md-menu-item>
499                                                             <md-button ng-click="vm_dc.deleteConfirm(hopperHistory, $event)" translate="MOTIONDIALER.DELETE_HOPPERHISTORY">
500                                                                 Delete HopperHistory
501                                                             </md-button>
502                                                         </md-menu-item>
503                                                     </md-menu-content>
504                                                 </md-menu>
505                                             </td>
506                                         </tr>
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>
510                                             </td>
511                                         </tr>
512                                     </tbody>
513                                 </table>
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>
516                         </div>
517
518                     </div>
519                 </md-tab-body>
520             </md-tab>
521             <md-tab>
522                 <md-tab-label>
523                     <span translate="MOTIONDIALER.FINAL">FINAL</span>
524                 </md-tab-label>
525
526                 <md-tab-body>
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>
532                                     <div flex></div>
533                                     <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
534                                 </div>
535                             </md-toolbar>
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>
539                                     <div flex></div>
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>
542                                     </md-button>
543                                 </div>
544                             </md-toolbar>
545                             <md-table-container>
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">
548                                         <tr md-row>
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>
560                                         </tr>
561                                     </thead>
562                                     <tbody md-body>
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">
575                                                 <md-menu>
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>
578                                                     </md-button>
579
580                                                     <md-menu-content width="3">
581                                                         <md-menu-item>
582                                                             <md-button ng-click="vm_dc.deleteConfirm(hopperFinal, $event)" translate="MOTIONDIALER.DELETE_HOPPERFINAL">
583                                                                 Delete HopperFinal
584                                                             </md-button>
585                                                         </md-menu-item>
586                                                     </md-menu-content>
587                                                 </md-menu>
588                                             </td>
589                                         </tr>
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>
593                                             </td>
594                                         </tr>
595                                     </tbody>
596                                 </table>
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>
599                         </div>
600
601                     </div>
602                 </md-tab-body>
603             </md-tab>
604             <md-tab>
605                 <md-tab-label>
606                     <span translate="MOTIONDIALER.BLACKLIST">BLACKLIST</span>
607                 </md-tab-label>
608
609                 <md-tab-body>
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>
615                                     <div flex></div>
616                                     <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
617                                 </div>
618                             </md-toolbar>
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>
622                                     <div flex></div>
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>
625                                     </md-button>
626                                 </div>
627                             </md-toolbar>
628                             <md-table-container>
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">
631                                         <tr md-row>
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>
635                                         </tr>
636                                     </thead>
637                                     <tbody md-body>
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">
642                                                 <md-menu>
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>
645                                                     </md-button>
646
647                                                     <md-menu-content width="3">
648                                                         <md-menu-item>
649                                                             <md-button ng-click="vm_dc.deleteConfirm(hopperBlack, $event)" translate="MOTIONDIALER.DELETE_HOPPERBLACK">
650                                                                 Delete HopperBlack
651                                                             </md-button>
652                                                         </md-menu-item>
653                                                     </md-menu-content>
654                                                 </md-menu>
655                                             </td>
656                                         </tr>
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>
660                                             </td>
661                                         </tr>
662                                     </tbody>
663                                 </table>
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>
666                         </div>
667
668                     </div>
669                 </md-tab-body>
670             </md-tab>
671         </md-tabs>
672
673     </div>
674     <!-- / CONTENT -->
675
676 </div>