@c8y/ng1-modules 1019.24.2 → 1020.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICES +8357 -6666
- package/app-logs/app-logs.service.js +1 -1
- package/asset-notes/assetNotes.component.js +1 -1
- package/assetPropertyWidget/main.controller.js +1 -1
- package/cell-id-information-activator/cell-id-information-activator.config.js +1 -1
- package/cell-id-information-activator/cell-id-information-activator.service.js +1 -1
- package/cell-id-usage-statistics/cell-id-usage-statistics.component.js +1 -1
- package/cell-id-usage-statistics/cell-id-usage-statistics.service.js +1 -1
- package/commandTemplates/controllers/commandTemplates.js +1 -1
- package/commandTemplates/views/commandTemplates.html +83 -41
- package/core/core/services/alarms.js +1 -1
- package/core/core/services/application.js +1 -1
- package/core/core/services/auth.js +1 -1
- package/core/core/services/base.js +1 -1
- package/core/core/services/deviceShell.js +1 -1
- package/core/core/services/devices.js +1 -1
- package/core/core/services/dynamicGroups.js +1 -1
- package/core/core/services/geo.js +1 -1
- package/core/core/services/groups.js +1 -1
- package/core/core/services/inventory.js +1 -1
- package/core/core/services/kpi.js +1 -1
- package/core/core/services/measurements.js +1 -1
- package/core/core/services/settings.js +1 -1
- package/core/core/services/tenant.js +1 -1
- package/core/core/services/user.js +1 -1
- package/core/core/services/util.js +1 -1
- package/core/locales/de.po +553 -306
- package/core/locales/en.po +69 -0
- package/core/locales/es.po +562 -314
- package/core/locales/fr.po +560 -313
- package/core/locales/ja_JP.po +587 -299
- package/core/locales/ko.po +334 -327
- package/core/locales/nl.po +636 -389
- package/core/locales/pl.po +558 -310
- package/core/locales/pt_BR.po +575 -328
- package/core/locales/ru.po +21 -320
- package/core/locales/zh_CN.po +330 -323
- package/core/locales/zh_TW.po +330 -323
- package/core/ui/components/passwordStrengthChecklist.html +1 -1
- package/core/ui/configurable-device-list-columns/configurable-columns.service.js +1 -1
- package/core/ui/configurable-device-list-columns/modal-columns-configure.component.js +1 -1
- package/core/ui/controllers/deviceList.js +1 -1
- package/core/ui/controllers/eventList.js +1 -1
- package/core/ui/csvExporter/csvExporter.controller.js +1 -1
- package/core/ui/directives/alarmList.js +1 -1
- package/core/ui/directives/map.js +1 -1
- package/core/ui/directives/map2.js +1 -1
- package/core/ui/operations/operations-timeline.html +24 -10
- package/core/ui/properties/lastDeviceMessage.computedProperty.js +1 -1
- package/core/ui/schemaForm/schemaForm.component.js +1 -1
- package/core/ui/services/deviceListColumns.js +1 -1
- package/core/ui/services/measurementsReport.js +1 -1
- package/core/ui/user/editUser.directive.html +2 -0
- package/core/ui/views/eventList.html +3 -1
- package/dataBroker/connectors/connectors.html +1 -0
- package/dataBroker/connectorsAlarms/connectorAlarms.component.js +1 -1
- package/device-protocol-actility/actility-device.provider.js +1 -1
- package/device-protocol-canbus/canbus-device.provider.js +1 -1
- package/device-protocol-canopen/canopen-device.provider.js +1 -1
- package/device-protocol-deviceDatabase4/device-type-protocol-base.provider.js +1 -1
- package/device-protocol-lora/lora-device.provider.js +1 -1
- package/device-protocol-lpwan/lpwan-device.provider.js +1 -1
- package/device-protocol-modbus/modbus-device.provider.js +1 -1
- package/device-protocol-opcua/opcua-device.provider.js +1 -1
- package/device-protocol-profibus/profibus-device.provider.js +1 -1
- package/device-protocol-sigfox/sigfox-device.provider.js +1 -1
- package/device-protocol-snmp/snmp-device.provider.js +1 -1
- package/device-protocols/device-protocol-import-button.component.js +1 -1
- package/deviceDatabase4/detail/device-type-detail.component.js +1 -1
- package/deviceDatabase4/device-database.service.js +1 -1
- package/deviceDatabase4/device-type-list.component.js +1 -1
- package/deviceDatabase4/modals/configure-discrete-io.component.js +1 -1
- package/deviceDatabase4/modals/configure-register.component.js +1 -1
- package/deviceDatabase4/modals/import-device-type.component.js +1 -1
- package/deviceDatabase4/unique.directive.js +1 -1
- package/deviceDetail/cumulocity.json +0 -1
- package/deviceSelector/controllers/deviceSelectorComboCtrl.js +1 -1
- package/deviceStatusWidget/deviceStatus.component.js +1 -1
- package/deviceStatusWidget/ownerStatus.component.js +1 -1
- package/devicemanagement-availability/controllers/availability.js +1 -1
- package/devicemanagement-availability/views/detail.html +2 -2
- package/devicemanagement-eventList/controllers/eventList.js +1 -1
- package/enterpriseEdition/customBranding/brandingConfigurationUi.provider.js +1 -1
- package/enterpriseEdition/sslCertificate/manageCertificateForm.html +1 -1
- package/eventList/eventList.controller.js +1 -1
- package/generic-ui/generic-ui-inventory-property.component.js +1 -1
- package/groupsHierarchy/controllers/groupsListCtrl.js +1 -1
- package/kpi/controllers/pieChart.js +1 -1
- package/measurements/fragmentChart/fragmentChart.component.js +1 -1
- package/modbusConfiguration4/fieldbus-config.component.js +1 -1
- package/modbusConfiguration4/fieldbus-device-list.component.js +1 -1
- package/modbusWidget4/modbus-widget.service.js +1 -1
- package/modbusWidget4/widget-config.component.js +1 -1
- package/modbusWidget4/widget.component.js +1 -1
- package/package.json +5 -5
- package/remoteAccess/remoteAccess.service.js +1 -1
- package/remoteAccess/remoteAccessSettings/remoteAccessSettings.component.js +1 -1
- package/roles/detail/roleDetailInventory.html +33 -14
- package/scada/mapping.directive.js +1 -1
- package/simulators/simulatorsUi.provider.js +1 -1
- package/smartRestEditor/views/list.html +1 -0
- package/smartRules/directives/smartRuleParamInputKpi.js +1 -1
- package/smartRules/list/smartRulesList.html +25 -0
- package/smartRules/views/edit.html +95 -27
- package/smartRules/views/list.html +39 -5
- package/tenantStatistics/tenant-statistics.component.js +1 -1
- package/userRoles/inventoryRolesTab/inventoryRolesTab.component.js +1 -1
- package/users/userListView/userListView.component.js +1 -1
- package/users/userListView/userListView.html +1 -0
- package/users/userRemovalModal/userRemovalModal.component.html +1 -0
- package/alarmAssets/cumulocity.json +0 -14
- package/alarmAssets/img/all-critical-alarms-widget-pr.png +0 -0
- package/alarmAssets/index.js +0 -1
- package/alarmAssets/views/component.html +0 -8
- package/alarms/cumulocity.json +0 -21
- package/alarms/img/alarm-list-widget-pr.png +0 -0
- package/alarms/index.js +0 -1
- package/alarms/index.mock.js +0 -1
- package/alarms/severity.directive.js +0 -1
- package/alarms/severity.html +0 -13
- package/alarms/styles.css +0 -3
- package/alarms/widget-config.controller.js +0 -1
- package/alarms/widget-config.html +0 -116
- package/alarms/widget.config.js +0 -1
- package/alarms/widget.controller.js +0 -1
- package/alarms/widget.html +0 -15
- package/alarms/widget.module.js +0 -1
- package/alarms/widget.module.mock.js +0 -1
- package/cockpit-alarmRecent/cumulocity.json +0 -18
- package/cockpit-alarmRecent/img/recent-alarms-widget-pr.png +0 -0
- package/cockpit-alarmRecent/index.js +0 -1
- package/cockpit-alarmRecent/views/component.html +0 -7
- package/devicemanagement-aclManagement/controllers/aclManagementCtrl.js +0 -1
- package/devicemanagement-aclManagement/cumulocity.json +0 -21
- package/devicemanagement-aclManagement/index.js +0 -1
- package/devicemanagement-aclManagement/views/index.html +0 -207
- package/devicemanagement-alarmList/controllers/alarmList.js +0 -1
- package/devicemanagement-alarmList/cumulocity.json +0 -24
- package/devicemanagement-alarmList/gallery/alarms.png +0 -0
- package/devicemanagement-alarmList/index.js +0 -1
- package/devicemanagement-alarmList/views/index.html +0 -155
- package/devicemanagement-tracking/controllers/config.js +0 -1
- package/devicemanagement-tracking/controllers/tracking.js +0 -1
- package/devicemanagement-tracking/cumulocity.json +0 -19
- package/devicemanagement-tracking/index.js +0 -1
- package/devicemanagement-tracking/views/index.html +0 -103
- package/devicemanagement-vendMeDeviceControl/controllers/vendMeDeviceControl.js +0 -1
- package/devicemanagement-vendMeDeviceControl/cumulocity.json +0 -18
- package/devicemanagement-vendMeDeviceControl/index.js +0 -1
- package/devicemanagement-vendMeDeviceControl/views/index.html +0 -229
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
<div ng-controller="aclManagementCtrl">
|
|
2
|
-
<div class="navbar">
|
|
3
|
-
<div class="nav navbar-right">
|
|
4
|
-
<form class="navbar-form">
|
|
5
|
-
<span
|
|
6
|
-
class="btn-link"
|
|
7
|
-
uib-popover="{{ helpText | translate }}"
|
|
8
|
-
popover-placement="bottom"
|
|
9
|
-
popover-trigger="focus"
|
|
10
|
-
>
|
|
11
|
-
<i c8y-icon="question-circle-o"></i>
|
|
12
|
-
</span>
|
|
13
|
-
<button
|
|
14
|
-
class="btn btn-link"
|
|
15
|
-
type="button"
|
|
16
|
-
title="{{ 'Add permission' | translate }}"
|
|
17
|
-
ng-show="allowEdit"
|
|
18
|
-
ng-click="toggleAddPermission()"
|
|
19
|
-
>
|
|
20
|
-
<i c8y-icon="plus"></i>
|
|
21
|
-
{{ 'Add permission' | translate }}
|
|
22
|
-
</button>
|
|
23
|
-
</form>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
<div class="alert alert-warning">
|
|
28
|
-
<i c8y-icon="exclamation-triangle" class="icon-2x pull-left"></i>
|
|
29
|
-
<span translate>
|
|
30
|
-
This feature is deprecated. You should rather use
|
|
31
|
-
<a href="/apps/administration#roles">Roles</a>
|
|
32
|
-
to set permissions.
|
|
33
|
-
</span>
|
|
34
|
-
</div>
|
|
35
|
-
<div class="panel panel-clean" uib-collapse="addPermission">
|
|
36
|
-
<div class="panel-heading">
|
|
37
|
-
<i c8y-icon="key"></i>
|
|
38
|
-
{{ 'New permission' | translate }}
|
|
39
|
-
</div>
|
|
40
|
-
<form name="newPermission" class="panel-body" novalidate>
|
|
41
|
-
<div class="row">
|
|
42
|
-
<div class="form-group col-lg-3">
|
|
43
|
-
<label class="control-label text-capitalize">
|
|
44
|
-
{{ sourceType.value | translate }}
|
|
45
|
-
</label>
|
|
46
|
-
<ui-select ng-model="permission.source" class="form-control">
|
|
47
|
-
<ui-select-match placeholder="{{ 'Select or search' | translate }}">
|
|
48
|
-
{{ $select.selected.name }}
|
|
49
|
-
</ui-select-match>
|
|
50
|
-
<ui-select-choices repeat="item in sources | filter: $select.search | orderBy:'name'">
|
|
51
|
-
<div ng-bind="item.name"></div>
|
|
52
|
-
</ui-select-choices>
|
|
53
|
-
</ui-select>
|
|
54
|
-
<div class="btn-group pull-left">
|
|
55
|
-
<button
|
|
56
|
-
class="btn btn-primary text-capitalize"
|
|
57
|
-
ng-class="{ active: sourceType == type }"
|
|
58
|
-
type="button"
|
|
59
|
-
title="{{ type.value | translate | lowercase }}"
|
|
60
|
-
ng-click="setSourceType(type)"
|
|
61
|
-
ng-repeat="type in sourceTypes"
|
|
62
|
-
>
|
|
63
|
-
{{ type.value | translate | lowercase }}
|
|
64
|
-
</button>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
<c8y-device-permission
|
|
68
|
-
data-scope="permission.scope"
|
|
69
|
-
data-permission-type="permission.type"
|
|
70
|
-
data-access="permission.access"
|
|
71
|
-
data-device="device"
|
|
72
|
-
></c8y-device-permission>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
<div class="pull-right">
|
|
76
|
-
<button
|
|
77
|
-
class="btn btn-primary"
|
|
78
|
-
type="submit"
|
|
79
|
-
title="{{ 'Save' | translate }}"
|
|
80
|
-
ng-click="create(permission)"
|
|
81
|
-
ng-disabled="!isValid(permission)"
|
|
82
|
-
>
|
|
83
|
-
{{ 'Save' | translate }}
|
|
84
|
-
</button>
|
|
85
|
-
<button
|
|
86
|
-
class="btn btn-default"
|
|
87
|
-
type="button"
|
|
88
|
-
title="{{ 'Cancel' | translate }}"
|
|
89
|
-
ng-click="cancel()"
|
|
90
|
-
>
|
|
91
|
-
Cancel
|
|
92
|
-
</button>
|
|
93
|
-
</div>
|
|
94
|
-
</form>
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
<div class="panel panel-clean">
|
|
98
|
-
<div class="panel-heading">
|
|
99
|
-
<i c8y-icon="user"></i>
|
|
100
|
-
{{ 'Check user permissions' | translate }}
|
|
101
|
-
</div>
|
|
102
|
-
|
|
103
|
-
<div class="panel-body">
|
|
104
|
-
<div>
|
|
105
|
-
<label translate>User</label>
|
|
106
|
-
<ui-select ng-model="user.selected" class="form-control" style="width: 300px">
|
|
107
|
-
<ui-select-match placeholder="{{ 'Select or search user' | translate }}">
|
|
108
|
-
{{ $select.selected.id }}
|
|
109
|
-
</ui-select-match>
|
|
110
|
-
<ui-select-choices
|
|
111
|
-
repeat="item in users | filter: $select.search | orderBy:'id'"
|
|
112
|
-
position="bottom"
|
|
113
|
-
>
|
|
114
|
-
<div ng-bind="item.id"></div>
|
|
115
|
-
</ui-select-choices>
|
|
116
|
-
</ui-select>
|
|
117
|
-
</div>
|
|
118
|
-
<div class="alert alert-warning" data-ng-show="permissions.length == 0" translate>
|
|
119
|
-
No permissions for user.
|
|
120
|
-
</div>
|
|
121
|
-
<table class="table table-hover" ng-show="permissions.length">
|
|
122
|
-
<tr>
|
|
123
|
-
<th translate>Has right to</th>
|
|
124
|
-
</tr>
|
|
125
|
-
<tbody>
|
|
126
|
-
<tr ng-repeat="permission in permissions">
|
|
127
|
-
<td>
|
|
128
|
-
{{ humanizeAccess(permission.access.value) }}
|
|
129
|
-
<strong>{{ humanizeScope(permission.scope.value) }}</strong>
|
|
130
|
-
{{ 'with' | translate }}
|
|
131
|
-
<strong>{{ humanizeFragment(permission.type) }}</strong>
|
|
132
|
-
{{ 'fragment' | translate }}
|
|
133
|
-
</td>
|
|
134
|
-
</tr>
|
|
135
|
-
</tbody>
|
|
136
|
-
</table>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
<div class="panel panel-clean">
|
|
140
|
-
<div class="panel-heading">
|
|
141
|
-
<i c8y-icon="shield"></i>
|
|
142
|
-
{{ 'Granted permission' | translate }}
|
|
143
|
-
</div>
|
|
144
|
-
|
|
145
|
-
<table class="table table-permissions panel-body">
|
|
146
|
-
<thead>
|
|
147
|
-
<tr>
|
|
148
|
-
<th translate>User</th>
|
|
149
|
-
<th translate>Permissions</th>
|
|
150
|
-
<th> </th>
|
|
151
|
-
</tr>
|
|
152
|
-
</thead>
|
|
153
|
-
<tbody ng-repeat="userPermission in userPermissions">
|
|
154
|
-
<tr ng-repeat="permission in userPermission.permissions track by $index">
|
|
155
|
-
<td ng-if="$first" style="width: 200px" rowspan="{{ userPermission.permissions.length }}">
|
|
156
|
-
{{ userPermission.source.id }}
|
|
157
|
-
</td>
|
|
158
|
-
<td>
|
|
159
|
-
{{ translatePermission(permission) }}
|
|
160
|
-
</td>
|
|
161
|
-
<td class="text-right">
|
|
162
|
-
<button
|
|
163
|
-
class="btn btn-dot btn-dot--danger showOnHover"
|
|
164
|
-
title="{{ 'Remove permission' | translate }}"
|
|
165
|
-
ng-show="allowEdit"
|
|
166
|
-
ng-click="removeUserPermission(userPermission, permission)"
|
|
167
|
-
>
|
|
168
|
-
<i c8y-icon="times"></i>
|
|
169
|
-
</button>
|
|
170
|
-
</td>
|
|
171
|
-
</tr>
|
|
172
|
-
</tbody>
|
|
173
|
-
<thead>
|
|
174
|
-
<tr>
|
|
175
|
-
<th translate>Group</th>
|
|
176
|
-
<th translate>Permissions</th>
|
|
177
|
-
<th> </th>
|
|
178
|
-
</tr>
|
|
179
|
-
</thead>
|
|
180
|
-
<tbody ng-repeat="groupPermission in groupPermissions">
|
|
181
|
-
<tr ng-repeat="permission in groupPermission.permissions track by $index">
|
|
182
|
-
<td
|
|
183
|
-
ng-if="$first"
|
|
184
|
-
style="width: 200px"
|
|
185
|
-
rowspan="{{ groupPermission.permissions.length }}"
|
|
186
|
-
>
|
|
187
|
-
{{ groupPermission.source.name }}
|
|
188
|
-
</td>
|
|
189
|
-
<td>
|
|
190
|
-
{{ translatePermission(permission) }}
|
|
191
|
-
</td>
|
|
192
|
-
<td class="text-right">
|
|
193
|
-
<button
|
|
194
|
-
class="btn btn-dot btn-dot--danger showOnHover"
|
|
195
|
-
type="button"
|
|
196
|
-
title="{{ 'Remove permission' | translate }}"
|
|
197
|
-
ng-show="allowEdit"
|
|
198
|
-
ng-click="removeGroupPermission(groupPermission, permission)"
|
|
199
|
-
>
|
|
200
|
-
<i c8y-icon="times"></i>
|
|
201
|
-
</button>
|
|
202
|
-
</td>
|
|
203
|
-
</tr>
|
|
204
|
-
</tbody>
|
|
205
|
-
</table>
|
|
206
|
-
</div>
|
|
207
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ownKeys(t,e){var r,i=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),i.push.apply(i,r)),i}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(r),!0).forEach(function(e){_defineProperty(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function _defineProperty(e,t,r){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,_toPropertyKey(i.key),i)}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function _toPropertyKey(e){e=_toPrimitive(e,"string");return"symbol"==_typeof(e)?e:String(e)}function _toPrimitive(e,t){if("object"!=_typeof(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0===r)return("string"===t?String:Number)(e);r=r.call(e,t||"default");if("object"!=_typeof(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}!function(){function e(r,e,t,i,n,o,s,c,a){var u,l,f=this,d={pageSize:10},y=new WeakMap,v=new WeakMap,p=function(){function t(e){_classCallCheck(this,t),this.name=e,this.active=!1,this.filters={},this.count=null,this.countLoading=!1}return _createClass(t,[{key:"active",get:function(){return y.get(this)},set:function(e){y.set(this,e),this.reloadCount()}},{key:"toggleActive",value:function(){this.active=!this.active}},{key:"filters",get:function(){return v.get(this)},set:function(e){v.set(this,e),this.reloadCount()}},{key:"reloadCount",value:function(){var t=this;this.active&&(this.countLoading=!0,_.isUndefined(this.filters.source)||_.assign(this.filters,{withSourceAssets:!0,withSourceDevices:!0}),i.getDisplayCount(_.omit(this.filters,this.filters.resolved?["pageSize","resolved"]:"pageSize")).then(function(e){t.count=e}).finally(function(){t.countLoading=!1}))}}]),t}(),m="/alarmsWithChildren",h=(_.assign(f,{icon:i.icon,realtime:!0,onVmUnresolvedChange:C,clientSideUnresolved:function(){return e.deviceId?f.unresolved:void 0},resolveAll:function(){return o({title:a("Confirm clearing alarms?"),body:a("Do you really want to clear all alarms of selected severities?"),status:"danger"}).then(E).then(function(e){e.resolvedImmediately?c.success(a("Alarms cleared.")):c.success(a("Alarms are being cleared in background."))}).then(j)},refresh:j,isRefreshing:function(){return _.some(f.severities,"refreshing")}}),_.reverse(_.cloneDeep(i.severityList)));function b(){f.severities.forEach(function(e){e.filters=_objectSpread(_objectSpread({},d),{},{severity:e.name})})}function g(e,t){n.addListener(r.$id,u,e,t)}function w(){j()}function P(e,t){var r,i=_.find(f.severities,{name:t.severity});_.isString(i.count)?i.reloadCount():(r=0,"CREATE"===e&&("ACTIVE"!==t.status&&"ACKNOWLEDGED"!==t.status||(r=i.filters.resolved?0:1),"CLEARED"===t.status)&&(r=i.filters.resolved?1:0),"UPDATE"===e&&"CLEARED"===t.status&&(r=i.filters.resolved?1:-1),i.count+=r)}function S(){n.switchRealtime(r.$id,u)}function C(){d.resolved=!f.unresolved,b()}function E(){var e=_.filter(f.severities,"active"),e=_.map(e,function(e){var e=_objectSpread({resolved:!1},_.pick(e.filters,["source","severity"])),t=(_.isUndefined(e.source)||_.assign(e,{withSourceAssets:!0,withSourceDevices:!0}),{status:i.status.CLEARED});return i.updateBulk(e,t)});return t.all(e).then(function(e){return{resolvedImmediately:_.every(e,function(e){return 200===e.status})}})}function j(){r.$broadcast("alarmListRefresh"),f.severities.forEach(function(e){return e.reloadCount()})}f.severities=_.map(h,function(e){return new p(e)}),f.unresolved=!0,C(),e.deviceId&&(d.source=e.deviceId),b(),f.severities.forEach(function(e){e.active=!0}),s.changeTitle({title:a("Alarms")}),function(){var e="".concat(m,"/*");d.source&&(e="".concat(m,"/").concat(d.source));if(u){if(e===u)return;n.removeSubscriber(r.$id,u),l()}u=e,g("".concat(r.$id,"-subscribed"),w),g("CREATE",P),g("UPDATE",P),l=r.$on("$destroy",function(){n.removeSubscriber(r.$id,u)}),f.realtime&&S()}(),r.$watch("vm.realtime",function(){f.realtime&&j();f.realtime!==n.getStatus(r.$id,u)&&S()})}e.$inject=["$scope","$routeParams","$q","c8yAlarms","c8yRealtime","c8yModal","c8yTitle","c8yAlert","gettext"],angular.module("c8y.parts.alarmList").controller("alarmListCtrl",e)}();
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Alarm management",
|
|
3
|
-
"ngModules": [
|
|
4
|
-
"c8y.parts.alarmList"
|
|
5
|
-
],
|
|
6
|
-
"imports": [
|
|
7
|
-
"core/smartRules"
|
|
8
|
-
],
|
|
9
|
-
"category": "Alarm",
|
|
10
|
-
"icon": "bell",
|
|
11
|
-
"color": "#F2DF0F",
|
|
12
|
-
"description": "Monitor alarms from all device in a common place. Simplify cooperation of monitoring personell with personalized alarm acknowledgment. Filter alarms based on their severity. View alarm details and jump directly to the impacted device. Contributes to the navigator and provides seperate views to browser alarms.",
|
|
13
|
-
"gallery": [
|
|
14
|
-
"gallery/alarms.png"
|
|
15
|
-
],
|
|
16
|
-
"js": [
|
|
17
|
-
"index.js",
|
|
18
|
-
"controllers/alarmList.js"
|
|
19
|
-
],
|
|
20
|
-
"folderName": "alarmList",
|
|
21
|
-
"appsInclude": [
|
|
22
|
-
"devicemanagement"
|
|
23
|
-
]
|
|
24
|
-
}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";angular.module("c8y.parts.alarmList",[]).config(["c8yNavigatorProvider","c8yViewsProvider","gettext",function(e,i,a){var r="bell",t=a("Overviews");e.addNavigation({parent:t,name:a("Alarms"),priority:2480,icon:r,path:"alarms",featureId:"alarms"}),i.when("/alarms",{templateUrl:":::PLUGIN_PATH:::/views/index.html"}),i.when("/device/:deviceId",{name:a("Alarms"),priority:800,icon:r,templateUrl:":::PLUGIN_PATH:::/views/index.html"}),i.when("/service/:deviceId",{name:a("Alarms"),priority:800,icon:r,templateUrl:":::PLUGIN_PATH:::/views/index.html"})}]);
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
TODO: This view is used both in devide management and cockpit
|
|
3
|
-
we need to check the context to display the proper breadcrumbs
|
|
4
|
-
|
|
5
|
-
<c8y-breadcrumbs-set>
|
|
6
|
-
<c8y-breadcrumbs-item
|
|
7
|
-
label="{{ 'Alarms' | translate }}"
|
|
8
|
-
icon="bell"
|
|
9
|
-
></c8y-breadcrumbs-item>
|
|
10
|
-
<c8y-breadcrumbs-item
|
|
11
|
-
label="{{ 'Overviews' | translate }}"
|
|
12
|
-
icon="c8y-overviews"
|
|
13
|
-
></c8y-breadcrumbs-item>
|
|
14
|
-
</c8y-breadcrumbs-set> -->
|
|
15
|
-
|
|
16
|
-
<div ng-controller="alarmListCtrl as vm">
|
|
17
|
-
<c8y-ui-action-bar-set>
|
|
18
|
-
<li
|
|
19
|
-
class="navbar-form"
|
|
20
|
-
action-bar-position="left"
|
|
21
|
-
>
|
|
22
|
-
<div class="btn-group btn-group-sm">
|
|
23
|
-
<button
|
|
24
|
-
class="btn btn-default btn-sm d-flex a-i-center"
|
|
25
|
-
ng-class="{ active: severity.active }"
|
|
26
|
-
title="{{ severity.name | lowercase | humanize | translate }}"
|
|
27
|
-
type="button"
|
|
28
|
-
ng-repeat="severity in vm.severities"
|
|
29
|
-
ng-model="severity.active"
|
|
30
|
-
ng-click="severity.toggleActive()"
|
|
31
|
-
>
|
|
32
|
-
<i
|
|
33
|
-
class="status m-r-4 icon-14 stroked-icon"
|
|
34
|
-
ng-class="severity.name | lowercase"
|
|
35
|
-
c8y-icon="{{ vm.icon(severity.name) }}"
|
|
36
|
-
></i>
|
|
37
|
-
|
|
38
|
-
<span
|
|
39
|
-
class="hidden-md hidden-sm text-truncate m-r-4"
|
|
40
|
-
ng-bind="severity.name | lowercase | humanize | translate"
|
|
41
|
-
></span>
|
|
42
|
-
<span
|
|
43
|
-
class="badge badge-info flex-no-shrink"
|
|
44
|
-
ng-if="severity.active"
|
|
45
|
-
>
|
|
46
|
-
<span ng-if="severity.countLoading">
|
|
47
|
-
<i
|
|
48
|
-
class="icon-spin"
|
|
49
|
-
c8y-icon="circle-o-notch"
|
|
50
|
-
></i>
|
|
51
|
-
</span>
|
|
52
|
-
<span
|
|
53
|
-
ng-if="!severity.countLoading"
|
|
54
|
-
ng-bind="severity.count"
|
|
55
|
-
></span>
|
|
56
|
-
</span>
|
|
57
|
-
</button>
|
|
58
|
-
</div>
|
|
59
|
-
</li>
|
|
60
|
-
</c8y-ui-action-bar-set>
|
|
61
|
-
<c8y-ui-action-bar-set>
|
|
62
|
-
<li
|
|
63
|
-
class="navbar-form"
|
|
64
|
-
action-bar-position="right"
|
|
65
|
-
>
|
|
66
|
-
<label
|
|
67
|
-
class="c8y-switch"
|
|
68
|
-
aria-label="{{ 'Show cleared alarms' | translate }}"
|
|
69
|
-
>
|
|
70
|
-
<input
|
|
71
|
-
type="checkbox"
|
|
72
|
-
ng-model="vm.unresolved"
|
|
73
|
-
ng-change="vm.onVmUnresolvedChange()"
|
|
74
|
-
ng-true-value="false"
|
|
75
|
-
ng-false-value="true"
|
|
76
|
-
/>
|
|
77
|
-
<span></span>
|
|
78
|
-
<span
|
|
79
|
-
class="text-truncate"
|
|
80
|
-
title="{{ 'Show cleared alarms' | translate }}"
|
|
81
|
-
>
|
|
82
|
-
{{ 'Show cleared alarms' | translate }}
|
|
83
|
-
</span>
|
|
84
|
-
</label>
|
|
85
|
-
</li>
|
|
86
|
-
</c8y-ui-action-bar-set>
|
|
87
|
-
<c8y-ui-action-bar-set>
|
|
88
|
-
<li action-bar-position="right">
|
|
89
|
-
<button
|
|
90
|
-
class="btn btn-link d-flex a-i-center"
|
|
91
|
-
title="{{ 'Clear all alarms' | translate }}"
|
|
92
|
-
type="button"
|
|
93
|
-
ng-click="vm.resolveAll()"
|
|
94
|
-
>
|
|
95
|
-
<i
|
|
96
|
-
class="m-r-4"
|
|
97
|
-
c8y-icon="c8y-alert-idle"
|
|
98
|
-
></i>
|
|
99
|
-
<span
|
|
100
|
-
class="text-truncate"
|
|
101
|
-
title="{{ 'Clear all`alarms`' | translate }}"
|
|
102
|
-
>
|
|
103
|
-
{{ 'Clear all`alarms`' | translate }}
|
|
104
|
-
</span>
|
|
105
|
-
</button>
|
|
106
|
-
</li>
|
|
107
|
-
</c8y-ui-action-bar-set>
|
|
108
|
-
<c8y-ui-action-bar-set>
|
|
109
|
-
<li action-bar-position="right">
|
|
110
|
-
<c8y-realtime-switch
|
|
111
|
-
class="d-contents"
|
|
112
|
-
state="vm.realtime"
|
|
113
|
-
></c8y-realtime-switch>
|
|
114
|
-
</li>
|
|
115
|
-
</c8y-ui-action-bar-set>
|
|
116
|
-
<c8y-ui-action-bar-set>
|
|
117
|
-
<li action-bar-position="right">
|
|
118
|
-
<button
|
|
119
|
-
class="btn btn-link d-flex a-i-center"
|
|
120
|
-
title="{{ 'Refresh alarm list contents' | translate }}"
|
|
121
|
-
type="button"
|
|
122
|
-
ng-click="vm.refresh()"
|
|
123
|
-
>
|
|
124
|
-
<i
|
|
125
|
-
ng-class="{ 'icon-spin': vm.isRefreshing() }"
|
|
126
|
-
c8y-icon="refresh"
|
|
127
|
-
></i>
|
|
128
|
-
<span
|
|
129
|
-
class="m-l-4 text-truncate"
|
|
130
|
-
translate
|
|
131
|
-
>
|
|
132
|
-
Reload
|
|
133
|
-
</span>
|
|
134
|
-
</button>
|
|
135
|
-
</li>
|
|
136
|
-
</c8y-ui-action-bar-set>
|
|
137
|
-
|
|
138
|
-
<c8y-help
|
|
139
|
-
src="/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms"
|
|
140
|
-
></c8y-help>
|
|
141
|
-
|
|
142
|
-
<div class="row">
|
|
143
|
-
<c8y-alarm-list
|
|
144
|
-
class="col-lg-6 c8y-alarm-list"
|
|
145
|
-
data-title="{text:(severity.name | lowercase | humanize | translate), icon:vm.icon(severity.name), class:(severity.name | lowercase)}"
|
|
146
|
-
ng-repeat="severity in vm.severities"
|
|
147
|
-
ng-if="severity.active"
|
|
148
|
-
filter="severity.filters"
|
|
149
|
-
active-severities="{[severity.name]: true}"
|
|
150
|
-
realtime="vm.realtime"
|
|
151
|
-
hide-header-actions="true"
|
|
152
|
-
refresh-loading="severity.refreshing"
|
|
153
|
-
></c8y-alarm-list>
|
|
154
|
-
</div>
|
|
155
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";!function(){function e(o,a,r,s,u,d,g){var t=o.$watch("device",function(e){e&&e.id&&(e=e,o.geofence=e.c8y_Geofence&&e.c8y_Geofence.active,o.motion=e.c8y_MotionTracking&&e.c8y_MotionTracking.active||!1,o.radius=e.c8y_Geofence&&e.c8y_Geofence.radius||100,t())});_.assign(o,{supports:function(e){return s.supportsOperation(o.device,e)},updateConfig:function(){var e,t=[],n=o.device,c=n.id,i=n.c8y_Position;o.geofence&&!i?(e=g("Device current position not defined"),o.$emit("message",{text:e,type:"error"})):(s.supportsOperation(n,"c8y_Geofence")&&t.push(function(e,t,n,c){c=g(c?"Activate geofence":"Deactivate geofence");return r.create({deviceId:e,description:c,c8y_Geofence:{lat:t&&t.lat,lng:t&&t.lng,radius:n,active:!0}})}(c,i,o.radius,o.geofence)),s.supportsOperation(n,"c8y_MotionTracking")&&t.push(function(e,t){var n=g(t?"Activate motion tracking":"Deactivate motion tracking");return r.create({deviceId:e,description:n,c8y_MotionTracking:{active:!!t}})}(c,o.motion)),t.length?a.all(t).then(function(){o.$emit("message",{text:g("Operations created"),type:"success"})}):_.isUndefined(o.radius)||(_.assign(n,{c8y_Radius:{value:o.radius}},{c8y_CopyPosition:_.cloneDeep(n.c8y_Position)}),u.save(n).then(function(){d.success(g("Changes saved."))})))}})}e.$inject=["$scope","$q","c8yDeviceControl","c8yDevices","c8yInventory","c8yAlert","gettext"],angular.module("c8y.parts.tracking").controller("trackingConfigCtrl",e)}();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";!function(){function e(e,t,r,a,n,o,c,i,m,l){var d=this,s=(d.deviceId=t.deviceId,{gps:!0,gsm:!0}),t=[{txt:o("Last hour"),time:"hour"},{txt:o("Last day"),time:"day"},{txt:o("Last week"),time:"week"},{txt:o("Last month"),time:"month"},{txt:o("Custom"),time:"custom"}];function k(){return d.map&&d.map.tracker&&d.map.tracker.loadMore&&d.map.tracker.loadMore[d.deviceId]}d.markers={},d.noMarkers=!0,d.checkDateTo=function(){var e=moment(d.dateFrom);d.dateTo&&0<=e.diff(moment(d.dateTo),"days")&&(d.dateTo=e.clone().add("day",1).toDate())},d.toggle=function(e,t){var a;d.markers["p".concat(e)]?(d.map.leafletMap.removeLayer(d.markers["p".concat(e)]),delete d.markers["p".concat(e)]):(a=n.getLocationFragment(t))&&(d.markers["p".concat(e)]=L.marker(L.latLng(a.lat,a.lng)).bindPopup(r("date")(t.time,"medium")).addTo(d.map.leafletMap)),d.noMarkers=!Object.keys(d.markers).length},d.hideAll=function(){_.forEach(d.markers,function(e){d.map.leafletMap.removeLayer(e)}),d.markers={},d.noMarkers=!0},d.events=function(){var e=d.map&&d.map.tracker.events[d.deviceId];return _.filter(e,{type:"c8y_LocationUpdate"})},d.hasLoadMore=k,d.loadMore=function(){var e=k();return e&&e()},d.markerTemplate=c.tracking.markerTemplate||null,d.realtime=c.tracking.realtime||!1,d.legend=c.tracking.legend||!1,d.eventText=c.tracking.eventText||!1,d.timeIntervals=t,d.onTrackingOptionChange=function(){d.hideAll(),s={gps:"all"===d.trackingOption||"gps"===d.trackingOption,gsm:"all"===d.trackingOption||"gsm"===d.trackingOption},d.map.tracker.activate(d.deviceId,s)},d.showTrackingOptions=!1,m.detail(d.deviceId).then(a.getResData).then(l.gsmTrackingAvailable).then(function(e){d.showTrackingOptions=e}),d.trackingOption="all",e.$on("search",function(){d.hideAll();var e=d.dateFrom,t=d.dateTo;d.map.tracker.changeInterval({dateFrom:e&&moment(e).format(a.dateFullFormat),dateTo:t&&moment(t).format(a.dateFullFormat)}).then(function(){d.map.tracker.activate(d.deviceId,s)})})}e.$inject=["$scope","$routeParams","$filter","c8yBase","c8yGeo","gettext","c8yConfig","c8yApplication","c8yDevices","c8yCombain"],angular.module("c8y.parts.tracking").controller("trackingCtrl",e)}();
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "AssetTrack",
|
|
3
|
-
"ngModules": [
|
|
4
|
-
"c8y.parts.tracking"
|
|
5
|
-
],
|
|
6
|
-
"category": "Verticals",
|
|
7
|
-
"icon": "home",
|
|
8
|
-
"color": "#F03F0F",
|
|
9
|
-
"description": "View the historic locations of a device, browser its trace for a given time period. This plugin contributes a new view to the device details.",
|
|
10
|
-
"js": [
|
|
11
|
-
"index.js",
|
|
12
|
-
"controllers/tracking.js",
|
|
13
|
-
"controllers/config.js"
|
|
14
|
-
],
|
|
15
|
-
"folderName": "tracking",
|
|
16
|
-
"appsInclude": [
|
|
17
|
-
"devicemanagement"
|
|
18
|
-
]
|
|
19
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";!function(){function e(e,i){e.when("/device/:deviceId",{name:i("Tracking"),templateUrl:":::PLUGIN_PATH:::/views/index.html",icon:"crosshairs",showIf:["$routeParams","c8yDevices",function(e,i){e=e.deviceId;return i.detailCached(e).then(function(e){e=e.data;return e&&e.c8y_Position})}]})}e.$inject=["c8yViewsProvider","gettext"],angular.module("c8y.parts.tracking",[]).config(e)}();
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
<div ng-controller="trackingCtrl as ctrl">
|
|
2
|
-
<c8y-ui-action-bar-set>
|
|
3
|
-
<c8y-realtime-switch
|
|
4
|
-
get-state="ctrl.map.state()"
|
|
5
|
-
on-start="ctrl.map.startRt()"
|
|
6
|
-
on-stop="ctrl.map.stopRt()"
|
|
7
|
-
></c8y-realtime-switch>
|
|
8
|
-
|
|
9
|
-
<li class="navbar-form">
|
|
10
|
-
<form class="form-inline">
|
|
11
|
-
<div class="c8y-select-wrapper" ng-if="ctrl.showTrackingOptions">
|
|
12
|
-
<select
|
|
13
|
-
class="form-control"
|
|
14
|
-
ng-model="ctrl.trackingOption"
|
|
15
|
-
ng-change="ctrl.onTrackingOptionChange()"
|
|
16
|
-
>
|
|
17
|
-
<option value="all" translate>Show all data</option>
|
|
18
|
-
<option value="gps" translate>Show GPS data only</option>
|
|
19
|
-
<option value="gsm" translate>Show GSM data only</option>
|
|
20
|
-
</select>
|
|
21
|
-
<span></span>
|
|
22
|
-
</div>
|
|
23
|
-
<c8y-time-interval date-from="ctrl.dateFrom" date-to="ctrl.dateTo"></c8y-time-interval>
|
|
24
|
-
</form>
|
|
25
|
-
</li>
|
|
26
|
-
</c8y-ui-action-bar-set>
|
|
27
|
-
|
|
28
|
-
<div class="card content-fullpage card--grid grid__col--8-4--md">
|
|
29
|
-
<div
|
|
30
|
-
class="p-relative"
|
|
31
|
-
style="min-height: 30vh"
|
|
32
|
-
c8y-map-internal
|
|
33
|
-
map="ctrl.map"
|
|
34
|
-
marker-template="ctrl.markerTemplate"
|
|
35
|
-
c8y-legend="ctrl.legend"
|
|
36
|
-
device-id="ctrl.deviceId"
|
|
37
|
-
realtime="ctrl.realtime"
|
|
38
|
-
></div>
|
|
39
|
-
<div class="d-flex d-col bg-inherit content-fullpage">
|
|
40
|
-
<div class="card-header separator">
|
|
41
|
-
<div class="card-title" translate>Tracking events</div>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="inner-scroll">
|
|
44
|
-
<div class="card-block" ng-show="ctrl.events().length == 0">
|
|
45
|
-
<div class="c8y-empty-state text-left">
|
|
46
|
-
<div class="h1 c8y-icon c8y-icon-location c8y-icon-duocolor"></div>
|
|
47
|
-
<p>{{ 'No tracking events found' | translate }}</p>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
<div class="card-block p-t-0 p-b-0">
|
|
52
|
-
<div class="list-group">
|
|
53
|
-
<div
|
|
54
|
-
class="list-group-item d-flex p-l-0 p-r-0"
|
|
55
|
-
ng-repeat="event in ctrl.events()"
|
|
56
|
-
data-cy="index--event-list"
|
|
57
|
-
ng-class="{ 'text-info': !!ctrl.markers['p' + $index] }"
|
|
58
|
-
ng-click="ctrl.toggle($index, event)"
|
|
59
|
-
>
|
|
60
|
-
<div class="list-item-icon">
|
|
61
|
-
<i c8y-icon="c8y-location"></i>
|
|
62
|
-
</div>
|
|
63
|
-
<div class="list-item-body">
|
|
64
|
-
<div class="d-flex">
|
|
65
|
-
<span class="m-r-8">
|
|
66
|
-
{{ event.time | date: 'mediumDate' }}
|
|
67
|
-
</span>
|
|
68
|
-
<span class="m-l-auto">
|
|
69
|
-
{{ event.time | date: 'mediumTime' }}
|
|
70
|
-
</span>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<span ng-if="ctrl.eventText">{{ event.text }}</span>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
<div>
|
|
80
|
-
<button
|
|
81
|
-
type="button"
|
|
82
|
-
title="{{ 'Load more' | translate }}"
|
|
83
|
-
class="btn btn-link fit-w sticky-bottom separator-top"
|
|
84
|
-
ng-click="ctrl.loadMore()"
|
|
85
|
-
ng-if="ctrl.hasLoadMore()"
|
|
86
|
-
>
|
|
87
|
-
{{ 'Load more' | translate }}
|
|
88
|
-
</button>
|
|
89
|
-
</div>
|
|
90
|
-
<div class="card-footer separator" ng-show="ctrl.events().length">
|
|
91
|
-
<button
|
|
92
|
-
title="{{ 'Deselect all markers' | translate }}"
|
|
93
|
-
type="button"
|
|
94
|
-
class="btn btn-default"
|
|
95
|
-
ng-disabled="ctrl.noMarkers"
|
|
96
|
-
ng-click="ctrl.hideAll()"
|
|
97
|
-
>
|
|
98
|
-
{{ 'Deselect all markers' | translate }}
|
|
99
|
-
</button>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";angular.module("c8y.parts.vendMeDeviceControl").controller("vendMeDeviceControlCtrl",["$scope","c8yDeviceControl","c8yDevices","c8yModal","c8yInventory","c8yAlert","gettext",function(a,t,n,o,e,i,c){var r,s=[{text:c("Executive"),code:"EXE",bitmask:"0x0001",val:"a"},{text:c("MDB"),code:"MDB",bitmask:"0x0002",val:"m"},{text:c("Free vend"),code:"FREE",bitmask:"0x0008",val:"f"},{text:c("DDCMP on RS232 #1"),code:"DDCMP1",bitmask:"0x0004",val:"d"},{text:c("DEX on RS232 #1"),code:"DEX1",bitmask:"0x0010",val:"x"},{text:c("DDCMP on RS232 #2"),code:"DDCMP2",bitmask:"0x0100",val:"D"},{text:c("DEX on RS232 #2"),code:"DEX2",bitmask:"0x0200",val:"X"}],d=[{text:c("Operate as MDB Communications Gateway"),code:"MDB_COMMGW",val:"0x00000001",require:"m"},{text:c("VMC supports undefined credit"),code:"MDB_UNCREDIT",val:"0x00000002",require:"m"},{text:c("Force not to use display"),code:"MDB_NODISPLAY",val:"0x00000004",require:"m"},{text:c("Use FTL File Id 2 (default 1)"),code:"MDB_2FTL",val:"0x00000008",require:"m"},{text:c("Deactivate MDB sniffer mode"),code:"MDB_NOSNIFFER",val:"0x00000010",require:"m"},{text:c("Sielaff OLM2 variant of Communications Gateway"),code:"MDB_CGWOLM",val:"0x00000020",require:"m"},{text:c("Sielaff CGW variant of Communications Gateway"),code:"MDB_CGWSIE",val:"0x00000040",require:"m"},{text:c("Remote cashless"),code:"REMOTECL",val:"0x00000080",require:"m"},{text:c("Use DDCMP list #2, RS232 #2"),code:"DDCMP_2LIST2",val:"0x00000400",require:"D"},{text:c("Use enhanced DDCMP @ 2400 on RS232 #2"),code:"DDCMP_ENHANCED2",val:"0x00000800",require:"D"},{text:c("Use DDCMP list 2 on RS232 #1"),code:"DDCMP_2LIST1",val:"0x00004000",require:"d"},{text:c("Use enhanced DDCMP @ 2400 on RS232 #1"),code:"DDCMP_ENHANCED1",val:"0x00008000",require:"d"}];function u(){a.$emit("message",{type:"success",text:c("Operation created")}),a.$emit("update","devicecontrol")}function l(){return s.filter(function(e){return e.active}).map(function(e){return e.val}).join("")}function v(e){var t=l();return!e.require||!(!t||!t.match(e.require))}a.$watch("device",function(e){var t,n,o,i;_.isObjectLike(e)&&0<_.keys(e).length&&(e=e.com_nsn_startups_vendme_fragments_MachineTechnicalInformation)&&((t=e).maxCredit&&(a.credit=t.maxCredit),t.useResetCounters&&(a.useResetCounters=t.useResetCounters),a.coinChanger="DISABLED"!==t.coinChanger,a.billValidator="DISABLED"!==t.bill_validator,a.cashless2="DISABLED"!==t.cashless2,a.cashless1="DISABLED"!==t.cashless1,e.protocolInfo)&&(t=e.protocolInfo.id,e=e.protocolInfo.configuration,t&&(i=t,s.forEach(function(e){var t=new RegExp(e.val);e.active=t.test(i)})),e)&&(n=e)&&(o=parseInt(n,16),isNaN(n)||d.forEach(function(e){var t=parseInt(e.val,16);e.selected=(t|n)===o}))}),a.$watch(l,function(){d.forEach(function(e){e.selected=e.selected&&v(e)})}),a.visible=function(){var e=a.device;return e&&(n.supportsOperation(e,"v4e_Protocol")||n.supportsOperation(e,"v4e_SetMaxCredit"))},a.bitmask=d,a.setProtocol=function(){var e={deviceId:a.device.id,v4e_Protocol:{val:l(),bitmask:"0x".concat(a.bitmask.filter(function(e){return e.selected}).reduce(function(e,t){return e|parseInt(t.val,16)},0).toString(16))},description:c("Set protocol")};t.create(e).then(u,_.noop)},a.updateDevice=function(){e.update({id:a.device.id,com_nsn_startups_vendme_fragments_MachineTechnicalInformation:a.device.com_nsn_startups_vendme_fragments_MachineTechnicalInformation}).then(_.partial(i.success,"Vending machine updated!"))},a.setCredit=function(e){e=Math.round(100*e),e={deviceId:a.device.id,v4e_SetMaxCredit:{value:e},description:c("Set max credit to ")+e+c("cents")},t.create(e).then(u,_.noop)},a.getDeviceLog=function(){var e={deviceId:a.device.id,v4e_Log:{},description:c("Request device Log")};t.create(e).then(u,_.noop)},a.showOption=v,a.confirmFreeVend=function(e){e&&o({title:c("Confirm Free vend mode?"),body:c("This setting will enable all the products to be retrieved without payment. Are you sure you want to activate Free vend?")}).then(null,function(){a.proto.FREE.active=!1})},a.setVendingMachineSettings=function(e,t,n){e.com_nsn_startups_vendme_fragments_MachineTechnicalInformation[t]=n?null:"DISABLED"},a.setUseResetCounters=function(e,t){e.com_nsn_startups_vendme_fragments_MachineTechnicalInformation.useResetCounters=t},a.proto={},r=a.proto,s.forEach(function(e){r[e.code]=e})}]);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "VendMe device control",
|
|
3
|
-
"ngModules": [
|
|
4
|
-
"c8y.parts.vendMeDeviceControl"
|
|
5
|
-
],
|
|
6
|
-
"category": "Verticals",
|
|
7
|
-
"icon": "home",
|
|
8
|
-
"color": "#F03F0F",
|
|
9
|
-
"description": "Configure vending telemetry device specific aspects, including protocols used to communicate with the vending machine. This plugin contributes a view to the device details.",
|
|
10
|
-
"js": [
|
|
11
|
-
"index.js",
|
|
12
|
-
"controllers/vendMeDeviceControl.js"
|
|
13
|
-
],
|
|
14
|
-
"folderName": "vendMeDeviceControl",
|
|
15
|
-
"appsInclude": [
|
|
16
|
-
"devicemanagement"
|
|
17
|
-
]
|
|
18
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";angular.module("c8y.parts.vendMeDeviceControl",[]).config(["c8yViewsProvider","gettext",function(e,t){e.when("/device/:deviceId",{templateUrl:":::PLUGIN_PATH:::/views/index.html",icon:"coffee",name:t("Vendme"),controller:["$scope","$routeParams","c8yBase","c8yDevices",function(t,e,c,n){t.device={},n.detail(e.deviceId).then(c.getResData).then(function(e){t.device=e})}],showIf:["$routeParams","c8yDevices",function(e,t){e=e.deviceId;return t.detailCached(e).then(function(e){e=e.data;return e&&t.isVendme(e)})}]})}]);
|