Passed
Push — master ( d89231...86b994 )
by Guangyu
07:51 queued 13s
created

myems-admin/app/controllers/settings/meter/meter.controller.js   C

Complexity

Total Complexity 57
Complexity/F 1.63

Size

Lines of Code 343
Function Count 35

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 57
eloc 242
mnd 22
bc 22
fnc 35
dl 0
loc 343
rs 5.04
bpm 0.6284
cpm 1.6285
noi 0
c 0
b 0
f 0

How to fix   Complexity   

Complexity

Complex classes like myems-admin/app/controllers/settings/meter/meter.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('MeterController', function($scope,  
4
	$window,
5
	$translate, 
6
	$uibModal, 
7
	MeterService, 
8
	CategoryService, 
9
	CostCenterService, 
10
	EnergyItemService,
11
	toaster, 
12
	SweetAlert) {
13
	$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
14
	$scope.getAllCostCenters = function() {
15
		CostCenterService.getAllCostCenters(function (response) {
16
			if (angular.isDefined(response.status) && response.status === 200) {
17
				$scope.costcenters = response.data;
18
			} else {
19
				$scope.costcenters = [];
20
			}
21
		});
22
	};
23
24
	$scope.getAllCategories = function() {
25
		CategoryService.getAllCategories(function (response) {
26
			if (angular.isDefined(response.status) && response.status === 200) {
27
				$scope.categories = response.data;
28
			} else {
29
				$scope.categories = [];
30
			}
31
		});
32
33
	};
34
35
	$scope.getAllEnergyItems = function() {
36
		EnergyItemService.getAllEnergyItems(function (response) {
37
			if (angular.isDefined(response.status) && response.status === 200) {
38
				$scope.energyitems = response.data;
39
			} else {
40
				$scope.energyitems = [];
41
			}
42
	});
43
44
};
45
	$scope.getAllMeters = function() {
46
		MeterService.getAllMeters(function (response) {
47
			if (angular.isDefined(response.status) && response.status === 200) {
48
				$scope.meters = response.data;
49
				$scope.parentmeters = response.data;
50
			} else {
51
				$scope.meters = [];
52
				$scope.parentmeters = [];
53
			}
54
			//create meter tree
55
			var treedata = {'core': {'data': [], "multiple" : false,}, "plugins" : [ "wholerow" ]};
56
			for(var i=0; i < $scope.meters.length; i++) {
57
					if ($scope.meters[i].master_meter == null) {
58
						var node = {"id": $scope.meters[i].id.toString(),
59
																"parent": '#',
60
																"text": $scope.meters[i].name,
61
																"state": {  'opened' : true,  'selected' : false },
62
															 };
63
					} else {
64
							var node = {"id": $scope.meters[i].id.toString(),
65
																	"parent": $scope.meters[i].master_meter.id.toString(),
66
																	"text": $scope.meters[i].name,
67
																 };
68
					};
69
					treedata['core']['data'].push(node);
70
			}
71
72
			angular.element(metertree).jstree(treedata);
73
			//meter tree selected changed event handler
74
			angular.element(metertree).on("changed.jstree", function (e, data) {
75
				$scope.currentMeterID = parseInt(data.selected[0]);
76
				$scope.getMeterSubmeters($scope.currentMeterID);
77
			});
78
		});
79
80
	};
81
82
	$scope.refreshMeterTree = function() {
83
		MeterService.getAllMeters(function (response) {
84
			if (angular.isDefined(response.status) && response.status === 200) {
85
				$scope.meters = response.data;
86
				$scope.parentmeters = response.data;
87
			} else {
88
				$scope.meters = [];
89
				$scope.parentmeters = [];
90
			}
91
			//create meter tree
92
			var treedata = {'core': {'data': [], "multiple" : false,}, "plugins" : [ "wholerow" ]};
93
			for(var i=0; i < $scope.meters.length; i++) {
94
				if ($scope.meters[i].master_meter == null) {
95
					var node = {"id": $scope.meters[i].id.toString(),
96
								"parent": '#',
97
								"text": $scope.meters[i].name,
98
								"state": {  'opened' : true,  'selected' : false },
99
								};
100
				} else {
101
					var node = {"id": $scope.meters[i].id.toString(),
102
								"parent": $scope.meters[i].master_meter.id.toString(),
103
								"text": $scope.meters[i].name,
104
								};
105
				};
106
				treedata['core']['data'].push(node);
107
			}
108
			var metertree = document.getElementById("metertree");
109
			angular.element(metertree).jstree(true).settings.core.data = treedata['core']['data'];
110
			angular.element(metertree).jstree(true).refresh();
111
		});
112
	};
113
114
	$scope.getMeterSubmeters = function(meterid) {
115
		MeterService.getMeterSubmeters(meterid, function (response) {
116
		if (angular.isDefined(response.status) && response.status === 200) {
117
			$scope.currentMeterSubmeters = response.data;
118
		} else {
119
			$scope.currentMeterSubmeters = [];
120
		}
121
		});
122
	};
123
124
	$scope.addMeter = function() {
125
		var modalInstance = $uibModal.open({
126
			templateUrl: 'views/settings/meter/meter.model.html',
127
			controller: 'ModalAddMeterCtrl',
128
			windowClass: "animated fadeIn",
129
			resolve: {
130
				params: function() {
131
					return {
132
						meters: angular.copy($scope.meters),
133
						parentmeters: angular.copy($scope.parentmeters),
134
						categories: angular.copy($scope.categories),
135
						costcenters: angular.copy($scope.costcenters),
136
						energyitems: angular.copy($scope.energyitems),
137
					};
138
				}
139
			}
140
		});
141
		modalInstance.result.then(function(meter) {
142
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
143
			meter.energy_category_id = meter.energy_category.id;
144
			meter.cost_center_id = meter.cost_center.id;
145
			if(angular.isDefined(meter.energy_item)) {
146
				meter.energy_item_id = meter.energy_item.id;
147
			} else {
148
				meter.energy_item_id = undefined;
149
			}
150
			if(angular.isDefined(meter.master_meter)) {
151
				meter.master_meter_id = meter.master_meter.id;
152
			} else {
153
				meter.master_meter_id = undefined;
154
			}
155
			MeterService.addMeter(meter, headers, function (response) {
156
				if (angular.isDefined(response.status) && response.status === 201) {
157
					toaster.pop({
158
						type: "success",
159
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
160
						body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("SETTING.METER")}),
161
						showCloseButton: true,
162
					});
163
					$scope.getAllMeters();
164
					$scope.$emit('handleEmitMeterChanged');
165
				} else {
166
					toaster.pop({
167
						type: "error",
168
						title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.METER")}),
169
						body: $translate.instant(response.data.description),
170
						showCloseButton: true,
171
					});
172
				}
173
			});
174
		}, function() {
175
176
		});
177
	};
178
179
	$scope.editMeter = function(meter) {
180
		var modalInstance = $uibModal.open({
181
			windowClass: "animated fadeIn",
182
			templateUrl: 'views/settings/meter/meter.model.html',
183
			controller: 'ModalEditMeterCtrl',
184
			resolve: {
185
				params: function() {
186
					return {
187
						meter: angular.copy(meter),
188
						meters: angular.copy($scope.meters),
189
						parentmeters: angular.copy($scope.parentmeters),
190
						categories: angular.copy($scope.categories),
191
						costcenters: angular.copy($scope.costcenters),
192
						energyitems: angular.copy($scope.energyitems),
193
					};
194
				}
195
			}
196
		});
197
198
		modalInstance.result.then(function(modifiedMeter) {
199
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
200
			modifiedMeter.energy_category_id = modifiedMeter.energy_category.id;
201
			modifiedMeter.cost_center_id = modifiedMeter.cost_center.id;
202
			if (modifiedMeter.energy_item != null && modifiedMeter.energy_item.id != null ) {
203
				modifiedMeter.energy_item_id = modifiedMeter.energy_item.id;
204
			} else {
205
				modifiedMeter.energy_item_id = undefined;
206
			}
207
			if (modifiedMeter.master_meter != null && modifiedMeter.master_meter.id != null ) {
208
				modifiedMeter.master_meter_id = modifiedMeter.master_meter.id;
209
			} else {
210
				modifiedMeter.master_meter_id = undefined;
211
			}
212
			MeterService.editMeter(modifiedMeter, headers,function (response) {
213
				if (angular.isDefined(response.status) && response.status === 200) {
214
					toaster.pop({
215
						type: "success",
216
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
217
						body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}),
218
						showCloseButton: true,
219
					});
220
					$scope.getAllMeters();
221
					$scope.$emit('handleEmitMeterChanged');
222
				} else {
223
					toaster.pop({
224
						type: "error",
225
						title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}),
226
						body: $translate.instant(response.data.description),
227
						showCloseButton: true,
228
					});
229
				}
230
			});
231
		}, function() {
232
			//do nothing;
233
		});
234
	};
235
236
	$scope.deleteMeter = function(meter) {
237
		SweetAlert.swal({
238
				title: $translate.instant("SWEET.TITLE"),
239
				text: $translate.instant("SWEET.TEXT"),
240
				type: "warning",
241
				showCancelButton: true,
242
				confirmButtonColor: "#DD6B55",
243
				confirmButtonText: $translate.instant("SWEET.CONFIRM_BUTTON_TEXT"),
244
				cancelButtonText: $translate.instant("SWEET.CANCEL_BUTTON_TEXT"),
245
				closeOnConfirm: true,
246
				closeOnCancel: true
247
			},
248
			function(isConfirm) {
249
				if (isConfirm) {
250
					let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
251
					MeterService.deleteMeter(meter, headers, function (response) {
252
						if (angular.isDefined(response.status) && response.status === 204) {
253
							toaster.pop({
254
								type: "success",
255
								title: $translate.instant("TOASTER.SUCCESS_TITLE"),
256
								body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("SETTING.METER")}),
257
								showCloseButton: true,
258
							});
259
							$scope.getAllMeters();
260
							$scope.$emit('handleEmitMeterChanged');
261
						} else {
262
							toaster.pop({
263
								type: "error",
264
								title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.METER")}),
265
								body: $translate.instant(response.data.description),
266
								showCloseButton: true,
267
							});
268
						}
269
					});
270
				}
271
			});
272
	};
273
274
	$scope.getAllMeters();
275
	$scope.getAllCategories();
276
	$scope.getAllCostCenters();
277
    $scope.getAllEnergyItems();
278
279
	$scope.$on('handleBroadcastMeterChanged', function(event) {
280
		$scope.refreshMeterTree();
281
	});
282
283
});
284
285
app.controller('ModalAddMeterCtrl', function($scope, $uibModalInstance, params) {
286
287
	$scope.operation = "SETTING.ADD_METER";
288
	$scope.categories = params.categories;
289
	$scope.costcenters = params.costcenters;
290
	$scope.energyitems = [];
291
	$scope.parentmeters = params.parentmeters;
292
	$scope.meter = {
293
		is_counted: false
294
	};
295
	$scope.ok = function() {
296
		$uibModalInstance.close($scope.meter);
297
	};
298
299
	$scope.cancel = function() {
300
		$uibModalInstance.dismiss('cancel');
301
	};
302
303
	$scope.last_energy_category_select_id = null;
304
	$scope.change_energyitems = function(selected_energy_category_id){
305
		var i = 0;
306
		var j = 0;
307
		$scope.energyitems = [];
308
		for (; i < params.energyitems.length; i++){
309
			if (params.energyitems[i]['energy_category']['id'] == selected_energy_category_id){
310
				$scope.energyitems[j] = params.energyitems[i];
311
				j = j + 1;
312
			}
313
		}
314
315
		if ($scope.last_energy_category_select_id == null){
316
			$scope.last_energy_category_select_id = selected_energy_category_id;
317
		}
318
		else{
319
			if($scope.last_energy_category_select_id != selected_energy_category_id){
320
				$scope.last_energy_category_select_id = selected_energy_category_id;
321
				delete $scope.meter.energy_item;
322
			}
323
		}
324
	}
325
326
});
327
328
app.controller('ModalEditMeterCtrl', function($scope, $uibModalInstance, params) {
329
	$scope.operation = "SETTING.EDIT_METER";
330
	$scope.meter = params.meter;
331
	$scope.meters = params.meters;
332
	$scope.parentmeters = params.parentmeters;
333
	$scope.categories = params.categories;
334
	$scope.costcenters = params.costcenters;
335
	$scope.energyitems = params.energyitems;
336
	$scope.ok = function() {
337
		$uibModalInstance.close($scope.meter);
338
	};
339
340
	$scope.cancel = function() {
341
		$uibModalInstance.dismiss('cancel');
342
	};
343
});
344