Passed
Push — master ( a22cd3...a7d888 )
by Guangyu
09:44 queued 18s
created

admin/app/controllers/settings/meter/meter.controller.js   B

Complexity

Total Complexity 52
Complexity/F 1.53

Size

Lines of Code 307
Function Count 34

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 52
eloc 214
mnd 18
bc 18
fnc 34
dl 0
loc 307
rs 7.44
bpm 0.5294
cpm 1.5294
noi 0
c 0
b 0
f 0

How to fix   Complexity   

Complexity

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