1
|
|
|
'use strict'; |
2
|
|
|
|
3
|
|
|
app.controller('EquipmentMeterController', function( |
4
|
|
|
$scope, |
5
|
|
|
$rootScope, |
6
|
|
|
$window, |
7
|
|
|
$timeout, |
8
|
|
|
$uibModal, |
9
|
|
|
$translate, |
10
|
|
|
MeterService, |
11
|
|
|
VirtualMeterService, |
12
|
|
|
OfflineMeterService, |
13
|
|
|
EquipmentMeterService, |
14
|
|
|
EquipmentService, |
15
|
|
|
toaster, |
16
|
|
|
SweetAlert) { |
17
|
|
|
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user")); |
18
|
|
|
$scope.currentEquipment = {selected:undefined}; |
19
|
|
|
$scope.currentMeterType = "meters"; |
20
|
|
|
$scope.getAllEquipments = function(id) { |
21
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
22
|
|
|
EquipmentService.getAllEquipments(headers, function (response) { |
23
|
|
|
if (angular.isDefined(response.status) && response.status === 200) { |
24
|
|
|
$scope.equipments = response.data; |
25
|
|
|
} else { |
26
|
|
|
$scope.equipments = []; |
27
|
|
|
} |
28
|
|
|
}); |
29
|
|
|
}; |
30
|
|
|
|
31
|
|
|
$scope.changeEquipment=function(item,model){ |
32
|
|
|
$scope.currentEquipment=item; |
33
|
|
|
$scope.currentEquipment.selected=model; |
34
|
|
|
if ($scope.currentEquipment && $scope.currentEquipment.id) { |
35
|
|
|
$scope.getMetersByEquipmentID($scope.currentEquipment.id); |
36
|
|
|
} else { |
37
|
|
|
// If no device is selected, clear the bound list and refresh the available list |
38
|
|
|
$scope.equipmentmeters = []; |
39
|
|
|
$scope.filterAvailableMeters(); |
40
|
|
|
} |
41
|
|
|
}; |
42
|
|
|
|
43
|
|
|
$scope.getMetersByEquipmentID = function(id) { |
44
|
|
|
var metertypes=['meters','virtualmeters','offlinemeters']; |
45
|
|
|
$scope.equipmentmeters=[]; |
46
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
47
|
|
|
var pending = metertypes.length; |
48
|
|
|
angular.forEach(metertypes,function(value,index){ |
49
|
|
|
EquipmentMeterService.getMetersByEquipmentID(id, value, headers, function (response) { |
50
|
|
|
if (angular.isDefined(response.status) && response.status === 200) { |
51
|
|
|
angular.forEach(response.data,function(item, indx){ |
52
|
|
|
response.data[indx].metertype = value; |
53
|
|
|
}); |
54
|
|
|
$scope.equipmentmeters = $scope.equipmentmeters.concat(response.data); |
55
|
|
|
} |
56
|
|
|
pending--; |
57
|
|
|
if (pending === 0) { |
58
|
|
|
$scope.filterAvailableMeters(); |
59
|
|
|
} |
60
|
|
|
}); |
61
|
|
|
}); |
62
|
|
|
}; |
63
|
|
|
|
64
|
|
|
$scope.colorMeterType=function(type){ |
65
|
|
|
if(type=='meters'){ |
66
|
|
|
return 'btn-primary' |
67
|
|
|
}else if(type=='virtualmeters'){ |
68
|
|
|
return 'btn-info' |
69
|
|
|
}else{ |
70
|
|
|
return 'btn-success' |
71
|
|
|
} |
72
|
|
|
}; |
73
|
|
|
|
74
|
|
|
$scope.changeMeterType=function(){ |
75
|
|
|
switch($scope.currentMeterType){ |
76
|
|
|
case 'meters': |
77
|
|
|
$scope.currentmeters=$scope.filteredMeters || []; |
78
|
|
|
break; |
79
|
|
|
case 'virtualmeters': |
80
|
|
|
$scope.currentmeters=$scope.filteredVirtualMeters || []; |
81
|
|
|
break; |
82
|
|
|
case 'offlinemeters': |
83
|
|
|
$scope.currentmeters=$scope.filteredOfflineMeters || []; |
84
|
|
|
break; |
85
|
|
|
} |
86
|
|
|
}; |
87
|
|
|
|
88
|
|
|
$scope.getAllMeters = function() { |
89
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
90
|
|
|
MeterService.getAllMeters(headers, function (response) { |
91
|
|
|
if (angular.isDefined(response.status) && response.status === 200) { |
92
|
|
|
$scope.meters = response.data; |
93
|
|
|
$scope.currentMeterType="meters"; |
94
|
|
|
$scope.filterAvailableMeters(); |
95
|
|
|
$timeout(function(){ |
96
|
|
|
$scope.changeMeterType(); |
97
|
|
|
},100); |
98
|
|
|
} else { |
99
|
|
|
$scope.meters = []; |
100
|
|
|
} |
101
|
|
|
}); |
102
|
|
|
}; |
103
|
|
|
|
104
|
|
|
$scope.getAllOfflineMeters = function() { |
105
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
106
|
|
|
OfflineMeterService.getAllOfflineMeters(headers, function (response) { |
107
|
|
|
if (angular.isDefined(response.status) && response.status === 200) { |
108
|
|
|
$scope.offlinemeters = response.data; |
109
|
|
|
$scope.filterAvailableMeters(); |
110
|
|
|
} else { |
111
|
|
|
$scope.offlinemeters = []; |
112
|
|
|
} |
113
|
|
|
}); |
114
|
|
|
}; |
115
|
|
|
|
116
|
|
|
$scope.getAllVirtualMeters = function() { |
117
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
118
|
|
|
VirtualMeterService.getAllVirtualMeters(headers, function (response) { |
119
|
|
|
if (angular.isDefined(response.status) && response.status === 200) { |
120
|
|
|
$scope.virtualmeters = response.data; |
121
|
|
|
$scope.filterAvailableMeters(); |
122
|
|
|
} else { |
123
|
|
|
$scope.virtualmeters = []; |
124
|
|
|
} |
125
|
|
|
}); |
126
|
|
|
}; |
127
|
|
|
|
128
|
|
|
$scope.filterAvailableMeters = function() { |
129
|
|
|
|
130
|
|
|
var boundSet = {}; |
131
|
|
|
($scope.equipmentmeters || []).forEach(function(em) { |
132
|
|
|
var keyType = em.metertype || 'meters'; |
133
|
|
|
// em.id should be the id of a specific table |
134
|
|
|
if (angular.isDefined(em.id)) { |
135
|
|
|
boundSet[keyType + '_' + em.id] = true; |
136
|
|
|
} |
137
|
|
|
}); |
138
|
|
|
|
139
|
|
|
$scope.filteredMeters = ($scope.meters || []).filter(function(m){ |
140
|
|
|
return !boundSet['meters_' + m.id]; |
141
|
|
|
}); |
142
|
|
|
$scope.filteredVirtualMeters = ($scope.virtualmeters || []).filter(function(vm){ |
143
|
|
|
return !boundSet['virtualmeters_' + vm.id]; |
144
|
|
|
}); |
145
|
|
|
$scope.filteredOfflineMeters = ($scope.offlinemeters || []).filter(function(om){ |
146
|
|
|
return !boundSet['offlinemeters_' + om.id]; |
147
|
|
|
}); |
148
|
|
|
|
149
|
|
|
$scope.changeMeterType(); |
150
|
|
|
}; |
151
|
|
|
|
152
|
|
|
$scope.pairMeter=function(dragEl,dropEl){ |
153
|
|
|
var tem_uuid = angular.element('#' + dragEl); |
154
|
|
|
if (angular.isDefined(tem_uuid.scope().equipmentmeter)) { |
155
|
|
|
return; |
156
|
|
|
} |
157
|
|
|
var modalInstance = $uibModal.open({ |
158
|
|
|
templateUrl: 'views/settings/equipment/equipmentmeter.model.html', |
159
|
|
|
controller: 'ModalEditEquipmentMeterCtrl', |
160
|
|
|
backdrop: 'static', |
161
|
|
|
size: 'sm' |
162
|
|
|
}); |
163
|
|
|
modalInstance.result.then(function (is_output) { |
164
|
|
|
var meterid=angular.element('#'+dragEl).scope().meter.id; |
165
|
|
|
var equipmentid=$scope.currentEquipment.id; |
166
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
167
|
|
|
EquipmentMeterService.addPair(equipmentid, meterid, $scope.currentMeterType, is_output, headers, function (response) { |
168
|
|
|
if (angular.isDefined(response.status) && response.status === 201) { |
169
|
|
|
toaster.pop({ |
170
|
|
|
type: "success", |
171
|
|
|
title: $translate.instant("TOASTER.SUCCESS_TITLE"), |
172
|
|
|
body: $translate.instant("TOASTER.BIND_METER_SUCCESS"), |
173
|
|
|
showCloseButton: true, |
174
|
|
|
}); |
175
|
|
|
// Reacquire the binding and trigger filtering |
176
|
|
|
$scope.getMetersByEquipmentID($scope.currentEquipment.id); |
177
|
|
|
} else { |
178
|
|
|
toaster.pop({ |
179
|
|
|
type: "error", |
180
|
|
|
title: $translate.instant(response.data.title), |
181
|
|
|
body: $translate.instant(response.data.description), |
182
|
|
|
showCloseButton: true, |
183
|
|
|
}); |
184
|
|
|
} |
185
|
|
|
}); |
186
|
|
|
},function() { |
187
|
|
|
}); |
188
|
|
|
$rootScope.modalInstance = modalInstance; |
189
|
|
|
}; |
190
|
|
|
|
191
|
|
|
$scope.deleteMeterPair = function (dragEl, dropEl) { |
192
|
|
|
if (angular.element('#' + dragEl).hasClass('source')) { |
193
|
|
|
return; |
194
|
|
|
} |
195
|
|
|
var equipmentmeterid = angular.element('#' + dragEl).scope().equipmentmeter.id; |
196
|
|
|
var equipmentid = $scope.currentEquipment.id; |
197
|
|
|
var metertype = angular.element('#' + dragEl).scope().equipmentmeter.metertype; |
198
|
|
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; |
199
|
|
|
EquipmentMeterService.deletePair(equipmentid, equipmentmeterid, metertype, headers, function (response) { |
200
|
|
|
if (angular.isDefined(response.status) && response.status === 204) { |
201
|
|
|
toaster.pop({ |
202
|
|
|
type: "success", |
203
|
|
|
title: $translate.instant("TOASTER.SUCCESS_TITLE"), |
204
|
|
|
body: $translate.instant("TOASTER.UNBIND_METER_SUCCESS"), |
205
|
|
|
showCloseButton: true, |
206
|
|
|
}); |
207
|
|
|
// Reacquire the binding and trigger filtering |
208
|
|
|
$scope.getMetersByEquipmentID($scope.currentEquipment.id); |
209
|
|
|
} else { |
210
|
|
|
toaster.pop({ |
211
|
|
|
type: "error", |
212
|
|
|
title: $translate.instant(response.data.title), |
213
|
|
|
body: $translate.instant(response.data.description), |
214
|
|
|
showCloseButton: true, |
215
|
|
|
}); |
216
|
|
|
} |
217
|
|
|
}); |
218
|
|
|
}; |
219
|
|
|
|
220
|
|
|
$scope.getAllEquipments(); |
221
|
|
|
$scope.getAllMeters(); |
222
|
|
|
$scope.getAllVirtualMeters(); |
223
|
|
|
$scope.getAllOfflineMeters(); |
224
|
|
|
|
225
|
|
|
$scope.$on('handleBroadcastEquipmentChanged', function(event) { |
226
|
|
|
$scope.getAllEquipments(); |
227
|
|
|
}); |
228
|
|
|
}); |
229
|
|
|
|
230
|
|
|
app.controller('ModalEditEquipmentMeterCtrl', function ($scope, $uibModalInstance) { |
231
|
|
|
$scope.is_output = "false"; |
232
|
|
|
|
233
|
|
|
$scope.ok = function () { |
234
|
|
|
$uibModalInstance.close(angular.fromJson($scope.is_output)); |
235
|
|
|
}; |
236
|
|
|
|
237
|
|
|
$scope.cancel = function () { |
238
|
|
|
$uibModalInstance.dismiss('cancel'); |
239
|
|
|
}; |
240
|
|
|
}); |
241
|
|
|
|