Passed
Push — master ( dd2743...85b88c )
by Guangyu
09:27 queued 11s
created

myems-admin/app/controllers/settings/meter/offlinemeter.controller.js   B

Complexity

Total Complexity 48
Complexity/F 1.6

Size

Lines of Code 282
Function Count 30

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 48
eloc 196
mnd 18
bc 18
fnc 30
dl 0
loc 282
rs 8.5599
bpm 0.6
cpm 1.6
noi 0
c 0
b 0
f 0

How to fix   Complexity   

Complexity

Complex classes like myems-admin/app/controllers/settings/meter/offlinemeter.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('OfflineMeterController', function(
4
	$scope,
5
	$window,
6
	$translate,
7
	$uibModal,
8
	OfflineMeterService,
9
	CategoryService,
10
	EnergyItemService,
11
	CostCenterService,
12
	toaster,
13
	SweetAlert) {
14
15
	$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
16
	$scope.getAllCostCenters = function() {
17
		CostCenterService.getAllCostCenters(function (response) {
18
			if (angular.isDefined(response.status) && response.status === 200) {
19
				$scope.costcenters = response.data;
20
			} else {
21
				$scope.costcenters = [];
22
			}
23
		});
24
	};
25
26
	$scope.getAllCategories = function() {
27
		CategoryService.getAllCategories(function (response) {
28
			if (angular.isDefined(response.status) && response.status === 200) {
29
				$scope.categories = response.data;
30
			} else {
31
				$scope.categories = [];
32
			}
33
		});
34
	};
35
36
	$scope.getAllEnergyItems = function() {
37
		EnergyItemService.getAllEnergyItems(function (response) {
38
			if (angular.isDefined(response.status) && response.status === 200) {
39
				$scope.energyitems = response.data;
40
			} else {
41
				$scope.energyitems = [];
42
			}
43
		});
44
	};
45
46
	$scope.getAllOfflineMeters = function() {
47
		OfflineMeterService.getAllOfflineMeters(function (response) {
48
			if (angular.isDefined(response.status) && response.status === 200) {
49
				$scope.offlinemeters = response.data;
50
			} else {
51
				$scope.offlinemeters = [];
52
			}
53
		});
54
55
	};
56
57
	$scope.addOfflineMeter = function() {
58
		var modalInstance = $uibModal.open({
59
			templateUrl: 'views/settings/meter/offlinemeter.model.html',
60
			controller: 'ModalAddOfflineMeterCtrl',
61
			windowClass: "animated fadeIn",
62
			resolve: {
63
				params: function() {
64
					return {
65
						offlinemeters: angular.copy($scope.offlinemeters),
66
						categories: angular.copy($scope.categories),
67
						energyitems: angular.copy($scope.energyitems),
68
						costcenters: angular.copy($scope.costcenters)
69
					};
70
				}
71
			}
72
		});
73
		modalInstance.result.then(function(offlinemeter) {
74
			offlinemeter.energy_category_id = offlinemeter.energy_category.id;
75
			if(angular.isDefined(offlinemeter.energy_item)) {
76
				offlinemeter.energy_item_id = offlinemeter.energy_item.id;
77
			} else {
78
				offlinemeter.energy_item_id = undefined;
79
			}
80
			offlinemeter.cost_center_id = offlinemeter.cost_center.id;
81
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
82
			OfflineMeterService.addOfflineMeter(offlinemeter, headers, function(response) {
83
				if (angular.isDefined(response.status) && response.status === 201) {
84
					toaster.pop({
85
						type: "success",
86
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
87
						body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
88
						showCloseButton: true,
89
					});
90
					$scope.getAllOfflineMeters();
91
					$scope.$emit('handleEmitOfflineMeterChanged');
92
				} else {
93
					toaster.pop({
94
						type: "error",
95
						title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
96
						body: $translate.instant(response.data.description),
97
						showCloseButton: true,
98
					});
99
				}
100
			});
101
		}, function() {
102
103
		});
104
	};
105
106
	$scope.editOfflineMeter = function(offlinemeter) {
107
		var modalInstance = $uibModal.open({
108
			windowClass: "animated fadeIn",
109
			templateUrl: 'views/settings/meter/offlinemeter.model.html',
110
			controller: 'ModalEditOfflineMeterCtrl',
111
			resolve: {
112
				params: function() {
113
					return {
114
						offlinemeter: angular.copy(offlinemeter),
115
						offlinemeters: angular.copy($scope.offlinemeters),
116
						categories: angular.copy($scope.categories),
117
						energyitems: angular.copy($scope.energyitems),
118
						costcenters: angular.copy($scope.costcenters)
119
					};
120
				}
121
			}
122
		});
123
124
		modalInstance.result.then(function(modifiedOfflineMeter) {
125
			modifiedOfflineMeter.energy_category_id = modifiedOfflineMeter.energy_category.id;
126
			if (modifiedOfflineMeter.energy_item != null && modifiedOfflineMeter.energy_item.id != null ) {
127
				modifiedOfflineMeter.energy_item_id = modifiedOfflineMeter.energy_item.id;
128
			} else {
129
				modifiedOfflineMeter.energy_item_id = undefined;
130
			}
131
			modifiedOfflineMeter.cost_center_id = modifiedOfflineMeter.cost_center.id;
132
			let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
133
			OfflineMeterService.editOfflineMeter(modifiedOfflineMeter, headers, function (response) {
134
				if (angular.isDefined(response.status) && response.status === 200) {
135
					toaster.pop({
136
						type: "success",
137
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
138
						body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
139
						showCloseButton: true,
140
					});
141
					$scope.getAllOfflineMeters();
142
					$scope.$emit('handleEmitOfflineMeterChanged');
143
				} else {
144
					toaster.pop({
145
						type: "error",
146
						title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
147
						body: $translate.instant(response.data.description),
148
						showCloseButton: true,
149
					});
150
				}
151
			});
152
		}, function() {
153
			//do nothing;
154
		});
155
	};
156
157
	$scope.deleteOfflineMeter = function(offlinemeter) {
158
		SweetAlert.swal({
159
				title: $translate.instant("SWEET.TITLE"),
160
				text: $translate.instant("SWEET.TEXT"),
161
				type: "warning",
162
				showCancelButton: true,
163
				confirmButtonColor: "#DD6B55",
164
				confirmButtonText: $translate.instant("SWEET.CONFIRM_BUTTON_TEXT"),
165
				cancelButtonText: $translate.instant("SWEET.CANCEL_BUTTON_TEXT"),
166
				closeOnConfirm: true,
167
				closeOnCancel: true
168
			},
169
			function(isConfirm) {
170
				if (isConfirm) {
171
					let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
172
					OfflineMeterService.deleteOfflineMeter(offlinemeter, headers, function (response) {
173
						if (angular.isDefined(response.status) && response.status === 204) {
174
							toaster.pop({
175
								type: "success",
176
								title: $translate.instant("TOASTER.SUCCESS_TITLE"),
177
								body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
178
								showCloseButton: true,
179
							});
180
							$scope.getAllOfflineMeters();
181
							$scope.$emit('handleEmitOfflineMeterChanged');
182
						} else {
183
							toaster.pop({
184
								type: "error",
185
								title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
186
								body: $translate.instant(response.data.description),
187
								showCloseButton: true,
188
							});
189
						}
190
					});
191
				}
192
			});
193
	};
194
195
	$scope.getAllOfflineMeters();
196
	$scope.getAllCategories();
197
	$scope.getAllEnergyItems();
198
	$scope.getAllCostCenters();
199
});
200
201
app.controller('ModalAddOfflineMeterCtrl', function($scope, $uibModalInstance, params) {
202
203
	$scope.operation = "SETTING.ADD_OFFLINE_METER";
204
	$scope.categories = params.categories;
205
	$scope.energyitems = [];
206
	$scope.costcenters = params.costcenters;
207
	$scope.offlinemeter = {
208
		is_counted: false
209
	};
210
	$scope.ok = function() {
211
		$uibModalInstance.close($scope.offlinemeter);
212
	};
213
214
	$scope.cancel = function() {
215
		$uibModalInstance.dismiss('cancel');
216
	};
217
218
	$scope.last_energy_category_select_id = null;
219
	$scope.change_energyitems = function(selected_energy_category_id){
220
		var i = 0;
221
		var j = 0;
222
		$scope.energyitems = [];
223
		for (; i < params.energyitems.length; i++){
224
			if (params.energyitems[i]['energy_category']['id'] == selected_energy_category_id){
225
				$scope.energyitems[j] = params.energyitems[i];
226
				j = j + 1;
227
			}
228
		}
229
230
		if ($scope.last_energy_category_select_id == null){
231
			$scope.last_energy_category_select_id = selected_energy_category_id;
232
		}
233
		else{
234
			if($scope.last_energy_category_select_id != selected_energy_category_id){
235
				$scope.last_energy_category_select_id = selected_energy_category_id;
236
				delete $scope.offlinemeter.energy_item;
237
			}
238
		}
239
	}
240
241
});
242
243
app.controller('ModalEditOfflineMeterCtrl', function($scope, $uibModalInstance, params) {
244
	$scope.operation = "SETTING.EDIT_OFFLINE_METER";
245
	$scope.offlinemeter = params.offlinemeter;
246
	$scope.offlinemeters = params.offlinemeters;
247
	$scope.categories = params.categories;
248
	$scope.energyitems = [];
249
	$scope.costcenters = params.costcenters;
250
251
	$scope.ok = function() {
252
		$uibModalInstance.close($scope.offlinemeter);
253
	};
254
255
	$scope.cancel = function() {
256
		$uibModalInstance.dismiss('cancel');
257
	};
258
259
	$scope.last_energy_category_select_id = null;
260
	$scope.change_energyitems = function(selected_energy_category_id){
261
		var i = 0;
262
		var j = 0;
263
		$scope.energyitems = [];
264
		for (; i < params.energyitems.length; i++){
265
			if (params.energyitems[i]['energy_category']['id'] == selected_energy_category_id){
266
				$scope.energyitems[j] = params.energyitems[i];
267
				j = j + 1;
268
			}
269
		}
270
271
		if ($scope.last_energy_category_select_id == null){
272
			$scope.last_energy_category_select_id = selected_energy_category_id;
273
		}
274
		else{
275
			if($scope.last_energy_category_select_id != selected_energy_category_id){
276
				$scope.last_energy_category_select_id = selected_energy_category_id;
277
				delete $scope.offlinemeter.energy_item;
278
			}
279
		}
280
	}
281
	$scope.change_energyitems($scope.offlinemeter.energy_category.id);
282
});
283