Passed
Push — master ( 0609f7...f69d02 )
by
unknown
10:47
created

myems-admin/app/controllers/settings/microgrid/microgridbattery.controller.js   F

Complexity

Total Complexity 62
Complexity/F 1.35

Size

Lines of Code 432
Function Count 46

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 62
eloc 312
dl 0
loc 432
rs 3.44
c 0
b 0
f 0
mnd 16
bc 16
fnc 46
bpm 0.3478
cpm 1.3478
noi 0

How to fix   Complexity   

Complexity

Complex classes like myems-admin/app/controllers/settings/microgrid/microgridbattery.controller.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
'use strict';
2
3
app.controller('MicrogridBatteryController', function(
4
	$scope,
5
	$rootScope,
6
	$window,
7
	$translate,
8
	$uibModal,
9
	MicrogridService,
10
	MicrogridBatteryService,
11
	MicrogridDataSourceService,
12
	PointService,
13
	MeterService,
14
	toaster,
15
	SweetAlert) {
16
      $scope.microgrids = [];
17
      $scope.microgridbatteries = [];
18
	  $scope.points = [];
19
	  $scope.meters = [];
20
      $scope.currentMicrogrid = null;
21
	  $scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
22
      $scope.getAllMicrogrids = function() {
23
		let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
24
  		MicrogridService.getAllMicrogrids(headers, function (response) {
25
  			if (angular.isDefined(response.status) && response.status === 200) {
26
  				$scope.microgrids = response.data;
27
  			} else {
28
  				$scope.microgrids = [];
29
  			}
30
  		});
31
  	};
32
33
    $scope.getDataSourcesByMicrogridID = function(id) {
34
      let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
35
      MicrogridDataSourceService.getDataSourcesByMicrogridID(id, headers, function(response) {
36
        if (angular.isDefined(response.status) && response.status === 200) {
37
          $scope.datasources = response.data;
38
        } else {
39
          $scope.datasources = [];
40
        }
41
      });
42
    };
43
44
    $scope.getDataSourcePointsByMicrogridID = function(id) {
45
      let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
46
      MicrogridDataSourceService.getDataSourcePointsByMicrogridID(id, headers, function(response) {
47
        if (angular.isDefined(response.status) && response.status === 200) {
48
          $scope.points = response.data;
49
        } else {
50
          $scope.points = [];
51
        }
52
      });
53
    };
54
55
	$scope.getAllMeters = function() {
56
		let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
57
		MeterService.getAllMeters(headers, function (response) {
58
			if (angular.isDefined(response.status) && response.status === 200) {
59
				$scope.meters = response.data;
60
			} else {
61
				$scope.meters = [];
62
			}
63
		});
64
	};
65
66
  	$scope.getMicrogridBatteriesByMicrogridID = function(id) {
67
		let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
68
  		MicrogridBatteryService.getMicrogridBatteriesByMicrogridID(id, headers, function (response) {
69
			if (angular.isDefined(response.status) && response.status === 200) {
70
				$scope.microgridbatteries = response.data;
71
			} else {
72
          	$scope.microgridbatteries=[];
73
        }
74
			});
75
  	};
76
77
  	$scope.changeMicrogrid=function(item,model){
78
    	$scope.currentMicrogrid=item;
79
    	$scope.currentMicrogrid.selected=model;
80
        $scope.is_show_add_microgrid_battery = true;
81
    	$scope.getMicrogridBatteriesByMicrogridID($scope.currentMicrogrid.id);
82
    	$scope.getDataSourcesByMicrogridID($scope.currentMicrogrid.id);
83
        $scope.getDataSourcePointsByMicrogridID($scope.currentMicrogrid.id);
84
  	};
85
86
  	$scope.addMicrogridBattery = function() {
87
88
  		var modalInstance = $uibModal.open({
89
  			templateUrl: 'views/settings/microgrid/microgridbattery.model.html',
90
  			controller: 'ModalAddMicrogridBatteryCtrl',
91
  			windowClass: "animated fadeIn",
92
  			resolve: {
93
  				params: function() {
94
  					return {
95
						meters: angular.copy($scope.meters),
96
						points: angular.copy($scope.points),
97
  					};
98
  				}
99
  			}
100
  		});
101
  		modalInstance.result.then(function(microgridbattery) {
102
        	microgridbattery.battery_state_point_id = microgridbattery.battery_state_point.id;
103
			microgridbattery.soc_point_id = microgridbattery.soc_point.id;
104
			microgridbattery.power_point_id = microgridbattery.power_point.id;
105
			microgridbattery.charge_meter_id = microgridbattery.charge_meter.id;
106
			microgridbattery.discharge_meter_id = microgridbattery.discharge_meter.id;
107
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
108
  			MicrogridBatteryService.addMicrogridBattery($scope.currentMicrogrid.id, microgridbattery, headers, function (response) {
109
  				if (angular.isDefined(response.status) && response.status === 201) {
110
  					toaster.pop({
111
  						type: "success",
112
  						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
113
  						body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
114
  						showCloseButton: true,
115
  					});
116
  					$scope.getMicrogridBatteriesByMicrogridID($scope.currentMicrogrid.id);
117
  					$scope.getDataSourcesByMicrogridID($scope.currentMicrogrid.id);
118
                    $scope.getDataSourcePointsByMicrogridID($scope.currentMicrogrid.id);
119
            		$scope.$emit('handleEmitMicrogridBatteryChanged');
120
  				} else {
121
  					toaster.pop({
122
  						type: "error",
123
  						title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
124
  						body: $translate.instant(response.data.description),
125
  						showCloseButton: true,
126
  					});
127
  				}
128
  			});
129
  		}, function() {
130
131
  		});
132
		$rootScope.modalInstance = modalInstance;
133
  	};
134
135
  	$scope.editMicrogridBattery = function(microgridbattery) {
136
  		var modalInstance = $uibModal.open({
137
  			templateUrl: 'views/settings/microgrid/microgridbattery.model.html',
138
  			controller: 'ModalEditMicrogridBatteryCtrl',
139
    		windowClass: "animated fadeIn",
140
  			resolve: {
141
  				params: function() {
142
  					return {
143
  						microgridbattery: angular.copy(microgridbattery),
144
						meters: angular.copy($scope.meters),
145
						points: angular.copy($scope.points),
146
  					};
147
  				}
148
  			}
149
  		});
150
151
  		modalInstance.result.then(function(modifiedMicrogridBattery) {
152
			modifiedMicrogridBattery.battery_state_point_id = modifiedMicrogridBattery.battery_state_point.id;
153
			modifiedMicrogridBattery.soc_point_id = modifiedMicrogridBattery.soc_point.id;
154
			modifiedMicrogridBattery.power_point_id = modifiedMicrogridBattery.power_point.id;
155
			modifiedMicrogridBattery.charge_meter_id = modifiedMicrogridBattery.charge_meter.id;
156
			modifiedMicrogridBattery.discharge_meter_id = modifiedMicrogridBattery.discharge_meter.id;
157
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
158
  			MicrogridBatteryService.editMicrogridBattery($scope.currentMicrogrid.id, modifiedMicrogridBattery, headers, function (response) {
159
  				if (angular.isDefined(response.status) && response.status === 200) {
160
  					toaster.pop({
161
  						type: "success",
162
  						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
163
  						body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
164
  						showCloseButton: true,
165
  					});
166
  					$scope.getMicrogridBatteriesByMicrogridID($scope.currentMicrogrid.id);
167
  					$scope.getDataSourcesByMicrogridID($scope.currentMicrogrid.id);
168
                    $scope.getDataSourcePointsByMicrogridID($scope.currentMicrogrid.id);
169
            		$scope.$emit('handleEmitMicrogridBatteryChanged');
170
  				} else {
171
  					toaster.pop({
172
  						type: "error",
173
  						title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
174
  						body: $translate.instant(response.data.description),
175
  						showCloseButton: true,
176
  					});
177
  				}
178
  			});
179
  		}, function() {
180
  			//do nothing;
181
  		});
182
		$rootScope.modalInstance = modalInstance;
183
  	};
184
185
  	$scope.deleteMicrogridBattery = function(microgridbattery) {
186
  		SweetAlert.swal({
187
  				title: $translate.instant("SWEET.TITLE"),
188
  				text: $translate.instant("SWEET.TEXT"),
189
  				type: "warning",
190
  				showCancelButton: true,
191
  				confirmButtonColor: "#DD6B55",
192
  				confirmButtonText: $translate.instant("SWEET.CONFIRM_BUTTON_TEXT"),
193
  				cancelButtonText: $translate.instant("SWEET.CANCEL_BUTTON_TEXT"),
194
  				closeOnConfirm: true,
195
  				closeOnCancel: true
196
  			},
197
  			function(isConfirm) {
198
  				if (isConfirm) {
199
					let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
200
  					MicrogridBatteryService.deleteMicrogridBattery($scope.currentMicrogrid.id, microgridbattery.id, headers, function (response) {
201
  						if (angular.isDefined(response.status) && response.status === 204) {
202
							toaster.pop({
203
								type: "success",
204
								title: $translate.instant("TOASTER.SUCCESS_TITLE"),
205
								body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
206
								showCloseButton: true,
207
							});
208
							$scope.getMicrogridBatteriesByMicrogridID($scope.currentMicrogrid.id);
209
							$scope.$emit('handleEmitMicrogridBatteryChanged');
210
  						} else {
211
							toaster.pop({
212
								type: "error",
213
								title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("MICROGRID.MICROGRID_BATTERY")}),
214
								body: $translate.instant(response.data.description),
215
								showCloseButton: true,
216
							});
217
  				   		}
218
  					});
219
  				}
220
  			});
221
  	};
222
223
    $scope.bindMicrogridBatteryPoint = function (battery) {
224
      var modalInstance = $uibModal.open({
225
        templateUrl:
226
          "views/settings/microgrid/microgridbatterypoint.model.html",
227
        controller: "ModalBindMicrogridBatteryCtrl",
228
        windowClass: "animated fadeIn",
229
        resolve: {
230
          params: function () {
231
            return {
232
              user_uuid: $scope.cur_user.uuid,
233
              token: $scope.cur_user.token,
234
              microgridid: $scope.currentMicrogrid.id,
235
              microgridbattery: angular.copy(battery),
236
              meters: angular.copy($scope.meters),
237
              datasources: angular.copy($scope.datasources),
238
              points: angular.copy($scope.points),
239
            };
240
          },
241
        },
242
      });
243
      $rootScope.modalInstance = modalInstance;
244
    };
245
246
  	$scope.getAllMicrogrids();
247
	$scope.getAllMeters();
248
    $scope.$on('handleBroadcastMicrogridChanged', function(event) {
249
      $scope.getAllMicrogrids();
250
  	});
251
252
  });
253
254
255
  app.controller('ModalAddMicrogridBatteryCtrl', function($scope, $uibModalInstance, params) {
256
257
  	$scope.operation = "MICROGRID.ADD_MICROGRID_BATTERY";
258
	$scope.points=params.points;
259
	$scope.meters=params.meters;
260
  	$scope.ok = function() {
261
  		$uibModalInstance.close($scope.microgridbattery);
262
  	};
263
264
  	$scope.cancel = function() {
265
  		$uibModalInstance.dismiss('cancel');
266
  	};
267
  });
268
269
  app.controller('ModalEditMicrogridBatteryCtrl', function($scope, $uibModalInstance, params) {
270
  	$scope.operation = "MICROGRID.EDIT_MICROGRID_BATTERY";
271
  	$scope.microgridbattery = params.microgridbattery;
272
	$scope.points=params.points;
273
	$scope.meters=params.meters;
274
  	$scope.ok = function() {
275
  		$uibModalInstance.close($scope.microgridbattery);
276
  	};
277
278
  	$scope.cancel = function() {
279
  		$uibModalInstance.dismiss('cancel');
280
  	};
281
  });
282
283
  app.controller(
284
  "ModalBindMicrogridBatteryCtrl",
285
  function (
286
    $scope,
287
    $uibModalInstance,
288
    toaster,
289
    $translate,
290
    MicrogridBatteryService,
291
    PointService,
292
    params
293
  ) {
294
    $scope.operation = "MICROGRID.MICROGRID_BATTERY";
295
    $scope.microgridid = params.microgridid;
296
    $scope.microgridbattery = params.microgridbattery;
297
    $scope.datasources = params.datasources;
298
    $scope.boundpoints = [];
299
300
    let headers = { "User-UUID": params.user_uuid, Token: params.token };
301
    MicrogridBatteryService.getPointsByBatteryID(
302
      $scope.microgridid,
303
      $scope.microgridbattery.id,
304
      headers,
305
      function (response) {
306
        if (angular.isDefined(response.status) && response.status === 200) {
307
          $scope.boundpoints = response.data;
308
        } else {
309
          $scope.boundpoints = [];
310
        }
311
      }
312
    );
313
314
    $scope.cancel = function () {
315
      $uibModalInstance.dismiss("cancel");
316
    };
317
318
    $scope.changeDataSource = function (item, model) {
319
      $scope.currentDataSource = model;
320
      $scope.getPointsByDataSourceID($scope.currentDataSource);
321
    };
322
323
    $scope.getPointsByDataSourceID = function (id) {
324
      let headers = { "User-UUID": params.user_uuid, Token: params.token };
325
      PointService.getPointsByDataSourceID(id, headers, function (response) {
326
        if (angular.isDefined(response.status) && response.status === 200) {
327
          $scope.points = response.data;
328
        } else {
329
          $scope.points = [];
330
        }
331
      });
332
    };
333
334
    $scope.pairPoint = function (dragEl, dropEl) {
335
      var pointid = angular.element("#" + dragEl).scope().point.id;
336
      let headers = { "User-UUID": params.user_uuid, Token: params.token };
337
      MicrogridBatteryService.addBatteryPair(
338
        params.microgridid,
339
        params.microgridbattery.id,
340
        pointid,
341
        headers,
342
        function (response) {
343
          if (angular.isDefined(response.status) && response.status === 201) {
344
            toaster.pop({
345
              type: "success",
346
              title: $translate.instant("TOASTER.SUCCESS_TITLE"),
347
              body: $translate.instant("TOASTER.BIND_POINT_SUCCESS"),
348
              showCloseButton: true,
349
            });
350
            let headers = {
351
              "User-UUID": params.user_uuid,
352
              Token: params.token,
353
            };
354
            MicrogridBatteryService.getPointsByBatteryID(
355
              params.microgridid,
356
              params.microgridbattery.id,
357
              headers,
358
              function (response) {
359
                if (
360
                  angular.isDefined(response.status) &&
361
                  response.status === 200
362
                ) {
363
                  $scope.boundpoints = response.data;
364
                } else {
365
                  $scope.boundpoints = [];
366
                }
367
              }
368
            );
369
          } else {
370
            toaster.pop({
371
              type: "error",
372
              title: $translate.instant(response.data.title),
373
              body: $translate.instant(response.data.description),
374
              showCloseButton: true,
375
            });
376
          }
377
        }
378
      );
379
    };
380
381
    $scope.deletePointPair = function (dragEl, dropEl) {
382
      if (angular.element("#" + dragEl).hasClass("source")) {
383
        return;
384
      }
385
386
      var pointid = angular.element("#" + dragEl).scope().boundpoint.id;
387
      let headers = { "User-UUID": params.user_uuid, Token: params.token };
388
      MicrogridBatteryService.deleteBatteryPair(
389
        params.microgridid,
390
        params.microgridbattery.id,
391
        pointid,
392
        headers,
393
        function (response) {
394
          if (angular.isDefined(response.status) && response.status === 204) {
395
            toaster.pop({
396
              type: "success",
397
              title: $translate.instant("TOASTER.SUCCESS_TITLE"),
398
              body: $translate.instant("TOASTER.UNBIND_POINT_SUCCESS"),
399
              showCloseButton: true,
400
            });
401
            let headers = {
402
              "User-UUID": params.user_uuid,
403
              Token: params.token,
404
            };
405
            MicrogridBatteryService.getPointsByBatteryID(
406
              params.microgridid,
407
              params.microgridbattery.id,
408
              headers,
409
              function (response) {
410
                if (
411
                  angular.isDefined(response.status) &&
412
                  response.status === 200
413
                ) {
414
                  $scope.boundpoints = response.data;
415
                } else {
416
                  $scope.boundpoints = [];
417
                }
418
              }
419
            );
420
          } else {
421
            toaster.pop({
422
              type: "error",
423
              title: $translate.instant(response.data.title),
424
              body: $translate.instant(response.data.description),
425
              showCloseButton: true,
426
            });
427
          }
428
        }
429
      );
430
    };
431
  }
432
);
433