1 <div id="integrations-salesforceAccount" 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-salesforceAccounts-button md-icon-button" aria-label="Go to salesforceAccounts" ng-click="vm.gotoSalesforceAccounts()" translate translate-attr-aria-label="INTEGRATIONS.GO_TO_SALESFORCEACCOUNTS">
7 <md-icon md-font-icon="icon-arrow-left"></md-icon>
10 <div layout="row" layout-align="start center">
12 <div ng-if="vm.salesforceAccount.userpic" class="salesforceAccount-image" hide-xs>
13 <img ng-src="api/users/{{vm.salesforceAccount.id}}/avatar">
16 <div ng-if="!vm.salesforceAccount.userpic" class="salesforceAccount-image" hide-xs>
17 <img ng-src="assets/images/business/salesforceAccounts.jpg">
20 <div layout="column" layout-align="start start">
22 #{{vm.salesforceAccount.id}} {{vm.salesforceAccount.name}}
24 <div class="subtitle secondary-text">
25 <span translate="INTEGRATIONS.CREATED_AT"></span> <span>{{vm.salesforceAccount.createdAt | date:'medium'}}</span>
32 <md-button type="submit" ng-click="vm.saveSalesforceAccount()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (configurationsForm.$invalid)" translate="INTEGRATIONS.SAVE" translate-attr-aria-label="INTEGRATIONS.SAVE">
43 <md-tabs md-selected="vm.selectedTab" md-dynamic-height>
46 <span translate="INTEGRATIONS.ACCOUNT">ACCOUNT</span>
50 <div class="salesforceAccount-detail-form-container general md-background-bg md-whiteframe-1dp">
51 <div class="pb-16" layout="row" layout-align="start center">
52 <div class="h2 secondary-text" translate="INTEGRATIONS.GENERAL">GENERAL</div>
54 <form name="generalForm" novalidate>
55 <md-input-container class="md-block">
56 <label translate="INTEGRATIONS.NAME">Name</label>
57 <input type="text" name="name" ng-model="vm.salesforceAccount.name" required md-autofocus>
58 <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">
59 <div ng-message="required">
60 <span translate="INTEGRATIONS.ERRORS.NAME_REQUIRED">Name field is required</span>
64 <md-input-container class="md-block">
65 <label translate="INTEGRATIONS.USERNAME">Username</label>
66 <input type="text" name="username" ng-model="vm.salesforceAccount.username" required>
67 <div ng-messages="generalForm.username.$error" ng-show="generalForm.username.$touched" role="alert">
68 <div ng-message="required">
69 <span translate="INTEGRATIONS.ERRORS.USERNAME_REQUIRED">Username field is required</span>
73 <md-input-container class="md-block">
74 <label translate="INTEGRATIONS.URI">Uri</label>
75 <input type="url" name="remoteUri" ng-model="vm.salesforceAccount.remoteUri" required>
76 <div ng-messages="generalForm.remoteUri.$error" ng-show="generalForm.remoteUri.$touched" role="alert">
77 <div ng-message="required">
78 <span translate="INTEGRATIONS.ERRORS.URI_REQUIRED">Uri field is required</span>
80 <div ng-message="url">
81 <span translate="INTEGRATIONS.ERRORS.URI_MUST_VALID_URL">Uri must be a valid url http://www.xcally.com</span>
85 <md-input-container class="md-block">
86 <label translate="INTEGRATIONS.PASSWORD">Password</label>
87 <input type="password" name="password" ng-model="vm.salesforceAccount.password" placeholder="Password" translate translate-attr-placeholder="INTEGRATIONS.PASSWORD" required>
88 <div ng-messages="generalForm.password.$error" role="alert">
89 <div ng-message="required">
90 <span translate="INTEGRATIONS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>
94 <md-input-container class="md-block" ng-if="vm.newSalesforceAccount ">
95 <label translate="INTEGRATIONS.CONFIRM_PASSWORD">Confirm Password</label>
96 <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">
97 <div ng-messages="generalForm.confirmPassword.$error" role="alert" multiple>
98 <div ng-message="required">
99 <span translate="INTEGRATIONS.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>
101 <div ng-message="passwordMatch">
102 <span translate="INTEGRATIONS.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>
105 </md-input-container>
106 <md-input-container class="md-block">
107 <label translate="INTEGRATIONS.CLIENTID">ClientId</label>
108 <input type="text" name="clientId" ng-model="vm.salesforceAccount.clientId" required>
109 <div ng-messages="generalForm.clientId.$error" ng-show="generalForm.clientId.$touched" role="alert">
110 <div ng-message="required">
111 <span translate="INTEGRATIONS.ERRORS.CLIENTID_REQUIRED">ClientId field is required</span>
114 </md-input-container>
115 <md-input-container class="md-block">
116 <label translate="INTEGRATIONS.CLIENTSECRET">ClientSecret</label>
117 <input type="text" name="clientSecret" ng-model="vm.salesforceAccount.clientSecret" required>
118 <div ng-messages="generalForm.clientSecret.$error" ng-show="generalForm.clientSecret.$touched" role="alert">
119 <div ng-message="required">
120 <span translate="INTEGRATIONS.ERRORS.CLIENTSECRET_REQUIRED">ClientSecret field is required</span>
123 </md-input-container>
124 <md-input-container class="md-block">
125 <label translate="INTEGRATIONS.SECURITYTOKEN">SecurityToken</label>
126 <input type="text" name="securityToken" ng-model="vm.salesforceAccount.securityToken" required>
127 <div ng-messages="generalForm.securityToken.$error" ng-show="generalForm.securityToken.$touched" role="alert">
128 <div ng-message="required">
129 <span translate="INTEGRATIONS.ERRORS.SECURITYTOKEN_REQUIRED">SecurityToken field is required</span>
132 </md-input-container>
133 <md-input-container class="md-block">
134 <label translate="INTEGRATIONS.MOTIONPROXYADDRESS">MotionProxyAddress</label>
135 <input type="url" name="serverUrl" ng-model="vm.salesforceAccount.serverUrl">
136 <div class="hint"><span translate="INTEGRATIONS.HELP.MOTIONPROXYADDRESS"></span></div>
137 <div ng-messages="generalForm.serverUrl.$error" ng-show="generalForm.serverUrl.$touched" role="alert">
138 <div ng-message="required">
139 <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_REQUIRED">MotionProxyAddress field is required</span>
141 <div ng-message="url">
142 <span translate="INTEGRATIONS.ERRORS.MOTIONPROXYADDRESS_MUST_VALID_URL">MotionProxyAddress must be a valid url http://www.xcally.com</span>
145 </md-input-container>
146 <md-input-container class="md-block">
147 <label translate="INTEGRATIONS.DESCRIPTION">Description</label>
148 <input type="text" name="description" ng-model="vm.salesforceAccount.description">
149 <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">
150 <div ng-message="required">
151 <span translate="INTEGRATIONS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>
154 </md-input-container>
162 <span translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</span>
166 <div class="salesforceAccount-detail-form-container configurations md-background-bg md-whiteframe-1dp">
167 <div class="pb-16" layout="row" layout-align="start center">
168 <div class="h2 secondary-text" translate="INTEGRATIONS.CONFIGURATIONS">CONFIGURATIONS</div>
170 <div ng-controller="SalesforceAccountConfigurationsController as vm_cc" ng-init="vm_cc.init(vm.salesforceAccount)" layout="row">
171 <md-card class="md-whiteframe-1dp" flex="30">
172 <div layout="row" layout-align="center center">
173 <md-subheader flex="75" class="md-no-sticky">{{ 'INTEGRATIONS.CONFIGURATIONS' | translate }}</md-subheader>
174 <md-button flex="25" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" class="md-icon-button" aria-label="create salesforceConfiguration">
175 <md-icon md-font-icon="icon-plus"></md-icon>
179 <md-list-item layout="row" layout-align="center center" ng-repeat="salesforceConfiguration in vm_cc.configurations" class="border-top" md-colors="{background: (vm_cc.selectedSalesforceConfiguration == $index ? 'accent' : 'grey-A100')}" ng-click="vm_cc.getSalesforceConfiguration($index)">
180 <span class="text-truncate" flex="80">{{ salesforceConfiguration.name }}</span>
182 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE">
183 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
185 <md-menu-content width="3">
187 <md-button ng-click="vm_cc.deleteSalesforceConfiguration($event, salesforceConfiguration)" translate="INTEGRATIONS.DELETE_SALESFORCECONFIGURATION">
188 Delete SalesforceConfiguration
197 <md-card class="md-whiteframe-1dp" flex="65">
198 <md-tabs ng-if="vm_cc.configurations.length" md-dynamic-height>
201 <span translate="INTEGRATIONS.SUBJECTS">SUBJECTS</span>
204 <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedSubjects.length">
205 <div class="md-toolbar-tools">
207 <ms-search-bar on-search="vm_cc.query.subject = query" on-collapse="vm_cc.query.subject = undefined" debounce="300"></ms-search-bar>
208 <md-button class="md-icon-button" ng-click="vm_cc.createOrEditSubject($event)" aria-label="add subject" translate translate-attr-label="INTEGRATIONS.ADD_SUBJECT">
209 <md-icon md-font-icon="icon-plus"></md-icon>
213 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedSubjects.length">
214 <div class="md-toolbar-tools">
215 <span class="md-subhead">{{vm_cc.selectedSubjects.length}} {{vm_cc.selectedSubjects.length > 1 ? 'items' : 'item'}} selected</span>
217 <md-button class="md-icon-button" ng-click="vm_cc.deleteSelectedSubjects($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">
218 <md-icon md-font-icon="icon-delete"></md-icon>
222 <md-table-container class="md-whiteframe-1dp padding-horizontal">
223 <table md-table md-row-select multiple ng-model="vm_cc.selectedSubjects">
224 <thead md-head md-order="vm.query.sort">
226 <th md-column md-order-by="id">{{ 'INTEGRATIONS.ID' | translate }}</th>
227 <th md-column md-order-by="type">{{ 'INTEGRATIONS.TYPE' | translate }}</th>
228 <th md-column>{{ 'INTEGRATIONS.CONTENT' | translate }}</th>
229 <th md-column width="10px"></th>
233 <tr md-row md-select="subject" md-select-id="id" ng-repeat="subject in vm_cc.subjects | filter: vm_cc.query.subject">
234 <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="id ">{{subject.id}}</td>
235 <td ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell class="type ">
236 <span ng-if="subject.FieldId">{{subject.nameField}}</span>
237 <span ng-if="!subject.FieldId">{{subject.type}}</span>
239 <td ng-switch="subject.type" ng-click="vm_cc.createOrEditSubject($event, subject)" md-cell>
240 <span ng-switch-when="string">{{subject.content}}</span>
241 <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>
242 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>
243 <span ng-switch-when="keyValue">
245 <span ng-switch="description.keyType">
246 <span ng-switch-when="string">{{subject.keyContent}}</span>
247 <span ng-switch-when="variable" class="text-boxed">{{subject.variableName}}</span>
248 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[subject.VariableId].name }}</span>
251 <span ng-switch-default>{{subject.content}}</span>
253 <td md-cell class="actions">
255 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE">
256 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
259 <md-menu-content width="3">
261 <md-button ng-click="vm_cc.createOrEditSubject($event, subject)" translate="INTEGRATIONS.EDIT_SUBJECT">
266 <md-button ng-click="vm_cc.deleteSubjectConfirm($event, subject)" translate="INTEGRATIONS.DELETE_SUBJECT">
276 </md-table-container>
282 <span translate="INTEGRATIONS.DESCRIPTIONS">DESCRIPTIONS</span>
285 <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedDescriptions.length">
286 <div class="md-toolbar-tools">
288 <ms-search-bar on-search="vm_cc.query.description = query" on-collapse="vm_cc.query.description = undefined" debounce="300"></ms-search-bar>
289 <md-button class="md-icon-button" ng-click="vm_cc.createOrEditDescription($event)" aria-label="add description" translate translate-attr-label="INTEGRATIONS.ADD_DESCRIPTION">
290 <md-icon md-font-icon="icon-plus"></md-icon>
294 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedDescriptions.length">
295 <div class="md-toolbar-tools">
296 <span class="md-subhead">{{vm_cc.selectedDescriptions.length}} {{vm_cc.selectedDescriptions.length > 1 ? 'items' : 'item'}} selected</span>
298 <md-button class="md-icon-button" ng-click="vm_cc.deleteSelectedDescriptions($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">
299 <md-icon md-font-icon="icon-delete"></md-icon>
303 <md-table-container class="md-whiteframe-1dp padding-horizontal">
304 <table md-table md-row-select multiple ng-model="vm_cc.selectedDescriptions">
305 <thead md-head md-order="vm.query.sort">
307 <th md-column md-order-by="id">{{ 'INTEGRATIONS.ID' | translate }}</th>
308 <th md-column md-order-by="type">{{ 'INTEGRATIONS.TYPE' | translate }}</th>
309 <th md-column>{{ 'INTEGRATIONS.CONTENT' | translate }}</th>
310 <th md-column width="10px"></th>
314 <tr md-row md-select="description" md-select-id="id" ng-repeat="description in vm_cc.descriptions | filter: vm_cc.query.description">
315 <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="id ">{{description.id}}</td>
316 <td ng-click="vm_cc.createOrEditDescription($event, description)" md-cell class="type ">
317 <span ng-if="description.FieldId">{{description.nameField}}</span>
318 <span ng-if="!description.FieldId">{{description.type}}</span>
320 <td ng-switch="description.type" ng-click="vm_cc.createOrEditDescription($event, description)" md-cell>
321 <span ng-switch-when="string">{{description.content}}</span>
322 <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>
323 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>
324 <span ng-switch-when="keyValue">
326 <span ng-switch="description.keyType">
327 <span ng-switch-when="string">{{description.keyContent}}</span>
328 <span ng-switch-when="variable" class="text-boxed">{{description.variableName}}</span>
329 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[description.VariableId].name }}</span>
332 <span ng-switch-default>{{description.content}}</span>
334 <td md-cell class="actions">
336 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE">
337 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
340 <md-menu-content width="3">
342 <md-button ng-click="vm_cc.createOrEditDescription($event, description)" translate="INTEGRATIONS.EDIT_DESCRIPTION">
347 <md-button ng-click="vm_cc.deleteDescriptionConfirm($event, description)" translate="INTEGRATIONS.DELETE_DESCRIPTION">
357 </md-table-container>
363 <span translate="INTEGRATIONS.FIELDS">FIELDS</span>
366 <md-toolbar class="md-table-toolbar md-default no-padding" ng-hide="vm_cc.selectedFields.length">
367 <div class="md-toolbar-tools">
369 <ms-search-bar on-search="vm_cc.query.field = query" on-collapse="vm_cc.query.field = undefined" debounce="300"></ms-search-bar>
370 <md-button class="md-icon-button" ng-click="vm_cc.createOrEditField($event)" aria-label="add field" translate translate-attr-label="INTEGRATIONS.ADD_FIELD">
371 <md-icon md-font-icon="icon-plus"></md-icon>
375 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_cc.selectedFields.length">
376 <div class="md-toolbar-tools">
377 <span class="md-subhead">{{vm_cc.selectedFields.length}} {{vm_cc.selectedFields.length > 1 ? 'items' : 'item'}} selected</span>
379 <md-button class="md-icon-button" ng-click="vm_cc.deleteSelectedFields($event)" aria-label="delete selected" translate translate-attr-label="INTEGRATIONS.DELETE_SELECTED">
380 <md-icon md-font-icon="icon-delete"></md-icon>
384 <md-table-container class="md-whiteframe-1dp padding-horizontal">
385 <table md-table md-row-select multiple ng-model="vm_cc.selectedFields">
386 <thead md-head md-order="vm.query.sort">
388 <th md-column md-order-by="id">{{ 'INTEGRATIONS.ID' | translate }}</th>
389 <th md-column md-order-by="type">{{ 'INTEGRATIONS.TYPE' | translate }}</th>
390 <th md-column>{{ 'INTEGRATIONS.CONTENT' | translate }}</th>
391 <th md-column width="10px"></th>
395 <tr md-row md-select="field" md-select-id="id" ng-repeat="field in vm_cc.fields | filter: vm_cc.query.field">
396 <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="id ">{{field.id}}</td>
397 <td ng-click="vm_cc.createOrEditField($event, field)" md-cell class="type ">
398 <span ng-if="field.FieldId">{{field.nameField}}</span>
399 <span ng-if="!field.FieldId">{{field.type}}</span>
401 <td ng-switch="field.type" ng-click="vm_cc.createOrEditField($event, field)" md-cell>
402 <span ng-switch-when="string">{{field.content}}</span>
403 <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>
404 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>
405 <span ng-switch-when="keyValue">
407 <span ng-switch="description.keyType">
408 <span ng-switch-when="string">{{field.keyContent}}</span>
409 <span ng-switch-when="variable" class="text-boxed">{{field.variableName}}</span>
410 <span ng-switch-when="customVariable" class="text-boxed">{{ vm_cc.variablesById[field.VariableId].name }}</span>
413 <span ng-switch-default>{{field.content}}</span>
415 <td md-cell class="actions">
417 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="INTEGRATIONS.MORE">
418 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
421 <md-menu-content width="3">
423 <md-button ng-click="vm_cc.createOrEditField($event, field)" translate="INTEGRATIONS.EDIT_FIELD">
428 <md-button ng-click="vm_cc.deleteFieldConfirm($event, field)" translate="INTEGRATIONS.DELETE_FIELD">
438 </md-table-container>
443 <div class="padding-20" ng-if="!vm_cc.configurations.length" ng-click="vm_cc.createOrEditSalesforceConfiguration($event)" layout="row" layout-sm="column" layout-align="center center" layout-wrap>
444 <div class="padding-20 md-whiteframe-3dp md-accent-bg" layout="column" layout-align="center center">
445 <md-button class="md-icon-button">
446 <md-icon md-font-icon="icon-plus"></md-icon>
448 <span aria-label="add configuration" translate translate-attr-label="INTEGRATIONS.ADD_CONFIGURATION">ADD CONFIGURATION</span>