1 <md-dialog class="queueCampaign-dialog" aria-label="New QueueCampaign">
2 <form name="queueCampaignForm" class="md-inline-form" novalidate>
3 <md-toolbar class="md-accent md-hue-2">
5 class="md-toolbar-tools"
7 layout-align="space-between center"
9 <span class="title">{{ vm.title | translate }}</span>
10 <md-button class="md-icon-button" ng-click="vm.closeDialog()">
12 md-font-icon="icon-close"
13 aria-label="Close dialog"
19 <md-dialog-content ms-scroll>
20 <div class="error-list">
22 ng-repeat="error in vm.errors"
25 layout-align="space-between center"
28 <span class="message">{{error.message}}</span>
29 <span class="type">({{error.type}})</span>
31 <md-button class="md-icon-button">
33 md-font-icon="icon-alert-box"
34 aria-label="alert error"
40 <md-input-container class="md-block">
41 <label translate="APP.NAME">Name</label>
45 ng-model="vm.queueCampaign.name"
46 ng-pattern="/^[A-Za-z0-9\.\_]+$/i"
49 ng-disabled="!vm.newQueueCampaign"
52 <div class="hint"><span translate="APP.HELP.NAME"></span></div>
54 ng-messages="queueCampaignForm['name'].$error"
55 ng-show="queueCampaignForm['name'].$touched"
58 <div ng-message="required">
59 <span translate="APP.ERRORS.NAME_REQUIRED"
60 >Name field is required</span
63 <div ng-message="pattern">
65 translate="APP.ERRORS.NAME_MUST_VALID_PATTERN"
66 translate-values="{ regex: '/^[A-Za-z0-9\.\_]+$/i' }"
67 >Name must be valid pattern
72 <md-input-container class="md-block">
73 <md-switch ng-model="vm.queueCampaign.dialActive" aria-label="Active"
74 ><span translate="APP.ACTIVE">Active</span>
77 <md-input-container class="md-block">
78 <label translate="APP.TRUNK">Trunk</label>
79 <md-select name="TrunkId" ng-model="vm.queueCampaign.TrunkId" required>
82 ng-repeat="TrunkId in vm.trunks"
83 ng-disabled="TrunkId.canSelect === false"
85 {{ TrunkId.name }}</md-option
89 ng-messages="queueCampaignForm['TrunkId'].$error"
90 ng-show="queueCampaignForm['TrunkId'].$touched"
93 <div ng-message="required">
94 <span translate="APP.ERRORS.TRUNK_REQUIRED"
95 >Trunk field is required</span
101 ng-if="vm.queueCampaign.dialMethod != 'preview'"
104 <label translate="APP.INTERVAL">Interval</label>
107 ng-model="vm.queueCampaign.IntervalId"
111 ng-value="IntervalId.id"
112 ng-repeat="IntervalId in vm.interval"
113 ng-disabled="IntervalId.canSelect === false"
114 >{{ IntervalId.name }}</md-option
118 ng-messages="queueCampaignForm['IntervalId'].$error"
119 ng-show="queueCampaignForm['IntervalId'].$touched"
122 <div ng-message="required">
123 <span translate="MOTIONDIALER.ERRORS.INTERVAL_REQUIRED"
124 >Interval field is required</span
128 </md-input-container>
129 <md-input-container class="md-block">
130 <label translate="MOTIONDIALER.CHECKDUPLICATE">CheckDuplicate</label>
132 name="dialCheckDuplicateType"
133 ng-model="vm.queueCampaign.dialCheckDuplicateType"
136 <md-option ng-value="'always'">
137 {{ 'APP.ALWAYS' | translate }}
140 <md-option ng-value="'never'">
141 {{ 'MOTIONDIALER.NEVER' | translate }}
144 <md-option ng-value="'onlyIfOpen'">
145 {{ 'MOTIONDIALER.ONLY_IF_OPEN' | translate }}
149 ng-messages="queueCampaignForm['dialCheckDuplicateType'].$error"
150 ng-show="queueCampaignForm['dialCheckDuplicateType'].$touched"
153 <div ng-message="required">
154 <span translate="MOTIONDIALER.ERRORS.CHECKDUPLICATE_REQUIRED"
155 >CheckDuplicate field is required</span
159 </md-input-container>
160 <md-input-container class="md-block">
161 <label translate="APP.METHOD">Method</label>
164 ng-model="vm.queueCampaign.dialMethod"
167 <md-option ng-value="'progressive'">Progressive</md-option>
168 <md-option ng-value="'power'">PowerDialing</md-option>
169 <md-option ng-value="'predictive'">Predictive</md-option>
170 <md-option ng-value="'preview'">Preview</md-option>
171 <md-option ng-value="'booked'">BookedProgressive</md-option>
174 <span translate="MOTIONDIALER.HELP.METHOD"></span>
177 ng-messages="queueCampaignForm['dialMethod'].$error"
178 ng-show="queueCampaignForm['dialMethod'].$touched"
181 <div ng-message="required">
182 <span translate="APP.ERRORS.METHOD_REQUIRED"
183 >Method field is required</span
187 </md-input-container>
189 ng-if="vm.queueCampaign.dialMethod == 'power'"
192 <span translate="MOTIONDIALER.POWERLEVEL">PowerLevel</span>
194 <span translate="MOTIONDIALER.HELP.POWERLEVEL"></span>
199 ng-model="vm.queueCampaign.dialPowerLevel"
205 </md-input-container>
207 ng-if="vm.queueCampaign.dialMethod == 'predictive'"
210 <label translate="MOTIONDIALER.PREDICTIVEOPTIMIZATION"
211 >PredictiveOptimization</label
214 name="dialPredictiveOptimization"
215 ng-model="vm.queueCampaign.dialPredictiveOptimization"
217 <md-option ng-value="'agentBusyFactor'">
218 {{ 'MOTIONDIALER.AGENTBUSYFACTOR' | translate }}
221 <md-option ng-value="'dropRate'">
222 {{ 'MOTIONDIALER.DROPRATE' | translate }}
226 <span translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATION"></span>
229 ng-messages="queueCampaignForm['dialPredictiveOptimization'].$error"
230 ng-show="queueCampaignForm['dialPredictiveOptimization'].$touched"
233 <div ng-message="required">
235 translate="MOTIONDIALER.ERRORS.PREDICTIVEOPTIMIZATION_REQUIRED"
236 >PredictiveOptimization field is required</span
240 </md-input-container>
242 ng-if="vm.queueCampaign.dialMethod == 'predictive'"
245 <span translate="MOTIONDIALER.PREDICTIVEOPTIMIZATIONPERCENTAGE"
246 >PredictiveOptimizationPercentage</span
250 translate="MOTIONDIALER.HELP.PREDICTIVEOPTIMIZATIONPERCENTAGE"
256 ng-model="vm.queueCampaign.dialPredictiveOptimizationPercentage"
262 </md-input-container>
264 ng-if="vm.queueCampaign.dialMethod == 'predictive'"
267 <span translate="MOTIONDIALER.PREDICTIVEINTERVAL"
268 >PredictiveInterval</span
271 <span translate="MOTIONDIALER.HELP.PREDICTIVEINTERVAL"></span>
276 ng-model="vm.queueCampaign.dialPredictiveInterval"
282 </md-input-container>
284 ng-if="vm.queueCampaign.dialMethod != 'preview'"
287 <label translate="MOTIONDIALER.MAXCONCURRENTCALLS"
288 >MaxConcurrentCalls</label
292 name="dialLimitQueue"
293 ng-model="vm.queueCampaign.dialLimitQueue"
300 <span translate="MOTIONDIALER.HELP.MAXCONCURRENTCALLS"></span>
303 ng-messages="queueCampaignForm['dialLimitQueue'].$error"
304 ng-show="queueCampaignForm['dialLimitQueue'].$touched"
307 <div ng-message="required">
308 <span translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_REQUIRED"
309 >MaxConcurrentCalls field is required</span
312 <div ng-message="min">
314 translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
315 >MaxConcurrentCalls must be a valid greater or equal than</span
319 <div ng-message="max">
321 translate="MOTIONDIALER.ERRORS.MAXCONCURRENTCALLS_MUST_BE_LESS_THAN_OR_EQUAL_TO"
322 >MaxConcurrentCalls must be a valid greater or equal than</span
327 </md-input-container>
329 ng-if="vm.queueCampaign.dialMethod === 'progressive' || vm.queueCampaign.dialMethod === 'predictive' || vm.queueCampaign.dialMethod === 'power'"
332 <label translate="MOTIONDIALER.QUEUETIMEOUT">QueueTimeout</label>
335 name="dialQueueTimeout"
336 ng-model="vm.queueCampaign.dialQueueTimeout"
343 <span translate="MOTIONDIALER.HELP.QUEUETIMEOUT"></span>
346 ng-messages="queueCampaignForm['dialQueueTimeout'].$error"
347 ng-show="queueCampaignForm['dialQueueTimeout'].$touched"
350 <div ng-message="required">
351 <span translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_REQUIRED"
352 >QueueTimeout field is required</span
355 <div ng-message="min">
357 translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
358 >QueueTimeout must be a valid greater or equal than</span
362 <div ng-message="max">
364 translate="MOTIONDIALER.ERRORS.QUEUETIMEOUT_MUST_BE_LESS_THAN_OR_EQUAL_TO"
365 >QueueTimeout must be a valid greater or equal than</span
370 </md-input-container>
371 <md-input-container class="md-block">
372 <label translate="MOTIONDIALER.AGENTTIMEOUT">AgentTimeout</label>
376 ng-model="vm.queueCampaign.timeout"
382 <span translate="MOTIONDIALER.HELP.AGENTTIMEOUT"></span>
385 ng-messages="queueCampaignForm['timeout'].$error"
386 ng-show="queueCampaignForm['timeout'].$touched"
389 <div ng-message="required">
390 <span translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_REQUIRED"
391 >AgentTimeout field is required</span
394 <div ng-message="min">
396 translate="MOTIONDIALER.ERRORS.AGENTTIMEOUT_MUST_BE_GREATER_THAN_OR_EQUAL_TO"
397 >AgentTimeout must be a valid greater or equal than</span
402 </md-input-container>
403 <md-input-container class="md-block">
404 <label translate="APP.DESCRIPTION">Description</label>
408 ng-model="vm.queueCampaign.description"
412 ng-messages="queueCampaignForm['description'].$error"
413 ng-show="queueCampaignForm['description'].$touched"
416 <div ng-message="required">
417 <span translate="MOTIONDIALER.ERRORS.DESCRIPTION_REQUIRED"
418 >Description field is required</span
422 </md-input-container>
424 <div class="error-list">
426 ng-repeat="error in vm.errors"
429 layout-align="space-between center"
432 <span class="message">{{error.message}}</span>
433 <span class="type">({{error.type}})</span>
435 <md-button class="md-icon-button">
437 md-font-icon="icon-alert-box"
438 aria-label="alert error"
448 layout-align="space-between center"
449 ng-if="!vm.crudPermissions.readOnly"
451 <div layout="row" layout-align="start center">
454 ng-if="vm.crudPermissions.canEdit && !vm.newQueueCampaign"
455 ng-click="vm.saveQueueCampaign()"
456 class="send-button md-accent md-raised"
457 ng-disabled="queueCampaignForm.$invalid || queueCampaignForm.$pristine"
460 translate-attr-aria-label="APP.SAVE"
467 ng-if="vm.crudPermissions.canEdit && vm.newQueueCampaign"
468 ng-click="vm.addNewQueueCampaign()"
469 class="send-button md-accent md-raised"
470 ng-disabled="queueCampaignForm.$invalid"
472 translate="MOTIONDIALER.ADD_QUEUECAMPAIGN"
473 translate-attr-aria-label="MOTIONDIALER.ADD_QUEUECAMPAIGN"
480 class="md-icon-button"
481 ng-if="vm.crudPermissions.canDelete && !vm.newQueueCampaign"
482 ng-click="vm.deleteQueueCampaign($event)"
485 translate-attr-aria-label="APP.DELETE"
487 <md-icon md-font-icon="icon-delete"></md-icon>
488 <md-tooltip><span translate="APP.DELETE">DELETE</span></md-tooltip>