openworktime/webapp/controllers.js
webapp/controllers.jsRaw
1var urlapi = "http://192.168.1.41:3000/api/";
2var urlapi = "http://localhost:3000/api/";
3
4angular.module('workApp', ['chart.js'])
5 .controller('workController', function(
6 $scope,
7 $interval,
8 $http
9 ) {
10 $scope.users={};
11 $scope.projects={};
12 $scope.currentInclude='login.html';
13 var refreshTime=10000;//every 10 seconds
14
15 var errorsGettingData=0;
16 $scope.serverNotResponding = function(){
17 console.log("server not responding, data error");
18 toastr.error("server not responding");
19 $scope.$broadcast('scroll.refreshComplete');//refresher stop
20 errorsGettingData++;
21 console.log("errorsGettingData: " + errorsGettingData);
22 if(errorsGettingData>3)
23 {
24 $interval.cancel(intervalGetData);
25 $scope.currentInclude="login.html";
26 }
27 };
28 $scope.getLoggedUser = function(){
29 //get logged user
30 $http.get(urlapi + 'users/loggeduser/' + $scope.user.username)
31 .success(function(data, status, headers,config){
32 console.log(data);
33 $scope.user=data;
34 })
35 .error(function(data, status, headers,config){
36 $scope.serverNotResponding();
37 })
38 .then(function(result){
39 users = result.data;
40 });
41 };
42 $scope.countingTime;
43 /* DASHBOARD initialization */
44 $scope.dashboardInit = function(){
45 if(localStorage.getItem('owt_token')){// adding token to the headers
46 $http.defaults.headers.post['X-Access-Token'] = localStorage.getItem('owt_token');
47 $http.defaults.headers.post['Content-Type'] = 'application/json';
48 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('owt_token');
49 }
50 if(localStorage.getItem("owt_user")){
51 $scope.user=JSON.parse(localStorage.getItem("owt_user"));
52 }else{
53
54 $scope.serverNotResponding();
55 }
56
57 $scope.getLoggedUser();
58
59 //getting users
60 $http.get(urlapi + 'users')
61 .success(function(data, status, headers,config){
62 if(data.success==false){
63 localStorage.removeItem("owt_token");
64 localStorage.removeItem("owt_user");
65 $scope.currentInclude="login.html";
66 console.log("token ended");
67 }else{
68 console.log(data);
69 $scope.users=data;
70 }
71 })
72 .error(function(data, status, headers,config){
73 console.log("server not responding, data error");
74 toastr.error("server not responding");
75 $scope.$broadcast('scroll.refreshComplete');//refresher stop
76 })
77 .then(function(result){
78 users = result.data;
79 });
80
81 //getting projects
82 $http.get(urlapi + 'projects')
83 .success(function(data, status, headers,config){
84 if(data.success==false){
85 localStorage.removeItem("owt_token");
86 localStorage.removeItem("owt_user");
87 $scope.currentInclude="login.html";
88 console.log("token ended");
89 }else{
90 for(var i=0; i<data.length; i++)
91 {
92 data[i].chart=translateWorkStrikes2Chart(data[i].workStrikes);
93 }
94 console.log(data);
95 $scope.projects=data;
96 }
97 })
98 .error(function(data, status, headers,config){
99 console.log("server not responding, data error");
100 toastr.error("server not responding");
101 $scope.$broadcast('scroll.refreshComplete');//refresher stop
102 })
103 .then(function(result){
104 users = result.data;
105 });
106 };
107 /* </DASHBOARD initialization */
108
109
110 $scope.user={};
111
112 $http.defaults.headers.post['Content-Type'] = 'application/json';
113 if(localStorage.getItem("owt_user")){
114 if(localStorage.getItem('owt_token')){// adding token to the headers
115 $http.defaults.headers.post['X-Access-Token'] = localStorage.getItem('owt_token');
116 $http.defaults.headers.post['Content-Type'] = 'application/json';
117 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('owt_token');
118 }
119 $scope.user=JSON.parse(localStorage.getItem("owt_user"));
120 $scope.currentInclude="dashboard.html";
121 $scope.getLoggedUser();
122 $scope.dashboardInit();
123 intervalGetData = $interval(function(){
124 $scope.dashboardInit();
125 }, refreshTime);
126 }else{
127 $scope.currentInclude="login.html";
128 }
129
130 /* LOGIN SIGNUP */
131 $scope.showSignup = function(){
132 $scope.currentInclude="signup.html";
133 };
134 $scope.hideSignup = function(){
135 $scope.currentInclude="login.html";
136 };
137 $scope.onBtnSignup = function(){
138 $scope.user.projects=[];
139 $http({
140 url: urlapi + 'users',
141 method: "POST",
142 data: $scope.user
143 }).then(function(response) {
144 $scope.currentInclude="login.html";
145 },
146 function(response) {// failed
147 });
148
149 };
150 var intervalGetData;//out of internal scope
151 $scope.onBtnLogin = function(){
152 $http({
153 url: urlapi + 'auth',
154 method: "POST",
155 data: $scope.user
156 }).then(function(response) {
157 if(response.data.success)
158 {
159 localStorage.setItem("owt_token", response.data.token);
160 localStorage.setItem("owt_user", angular.toJson(response.data.user));
161 $scope.user=JSON.parse(localStorage.getItem("owt_user"));
162
163 $scope.currentInclude="dashboard.html";
164 $scope.dashboardInit();
165
166 intervalGetData = $interval(function(){
167 $scope.dashboardInit();
168 }, refreshTime);
169 }else{
170 toastr.error(response.data.message);
171 }
172 },
173 function(response) {// failed
174 });
175 };
176 $scope.onBtnLogout = function(){
177 $http({
178 url: urlapi + 'logout',
179 method: "POST",
180 data: $scope.user
181 }).then(function(response) {
182 localStorage.removeItem("owt_token");
183 localStorage.removeItem("owt_user");
184 $interval.cancel(intervalGetData);
185 $scope.currentInclude="login.html";
186 },
187 function(response) {// failed
188 });
189 };
190 /* </ LOGIN SIGNUP */
191
192
193
194
195 //localStorage.clear();
196 //$scope.working=false;
197 $scope.currentproject={};
198
199 $scope.newproject={};
200 //$scope.newproject.id=$scope.projects[$scope.projects.length-1].id+1;
201 $scope.addNewProject = function(){
202 /*$scope.newproject.totaltime="0";
203 $scope.projects.push($scope.newproject);
204 localStorage.setItem("w_l_projects", angular.toJson($scope.projects));
205 $scope.newproject={
206 id: $scope.projects[$scope.projects.length-1].id+1,
207 chart: {
208 labels: [],
209 series: ['Working time'],
210 data: []
211 }
212 };*/
213 $http({
214 url: urlapi + 'projects',
215 method: "POST",
216 data: $scope.newproject
217 }).then(function(response) {
218 console.log("project posted");
219 console.log(response);
220 $scope.projects=response.data;
221 toastr.success("project created at server");
222 $scope.newproject={};
223 },
224 function(response) {// failed
225 });
226 };
227 $scope.editingIndex="";
228 $scope.editProject = function(index){
229 $scope.editingIndex=index;
230 $scope.editingProject=angular.copy($scope.projects[index]);
231 };
232 $scope.cancelEditProject = function(){
233 $scope.editingProject=false;
234 };
235 $scope.updateProject = function(){
236 $scope.projects[$scope.editingIndex]=angular.copy($scope.editingProject);
237 $scope.currentproject=angular.copy($scope.editingProject);
238 $scope.editingProject=false;
239 };
240 $scope.removeProject = function(index){
241 /*$scope.projects.splice(index, 1);
242 localStorage.setItem("w_l_projects", angular.toJson($scope.projects));*/
243 $http({
244 url: urlapi + 'projects/' + $scope.projects[index]._id,
245 method: "DELETE",
246 data: $scope.user._id
247 }).then(function(response) {
248 console.log(response);
249 $scope.projects=response.data;
250 $scope.projectSelect(null);
251 },
252 function(response) {// failed
253 });
254 };
255 $scope.currentprojectIndex;
256 $scope.projectSelect = function(index){
257 //$scope.btnStop();
258 $scope.currentprojectIndex=index;
259 $scope.currentproject=$scope.projects[index];
260 };
261
262 $scope.joinProject = function(){
263 console.log($scope.user);
264 $http({
265 url: urlapi + 'projects/'+$scope.currentproject._id+'/adduser',
266 method: "PUT",
267 data: $scope.user
268 }).then(function(response) {
269 console.log("project joined");
270 $scope.projects=response.data;
271 //re select currentproject
272 $scope.currentproject=$scope.projects[$scope.currentprojectIndex];
273 toastr.success("project joined");
274 },
275 function(response) {// failed
276 });
277 };
278 var interval;
279 $scope.currentStrike=0;
280 $scope.btnWork = function(){
281 //$scope.editingProject=false;
282 $scope.user.working=true;
283 $http({
284 url: urlapi + 'projects/' + $scope.currentproject._id + '/startworking',
285 method: "PUT",
286 data: $scope.user
287 }).then(function(response) {
288 console.log(response);
289 $scope.projects=response.data;
290 $scope.getLoggedUser();
291 },
292 function(response) {// failed
293 });
294 };
295 $scope.btnStop = function(){
296 if($scope.user.working==true)
297 {
298 //$scope.user.working=false;
299 $http({
300 url: urlapi + 'projects/' + $scope.currentproject._id + '/stopworking',
301 method: "PUT",
302 data: $scope.user
303 }).then(function(response) {
304 console.log(response);
305
306 for(var i=0; i<response.data.length; i++)
307 {
308 response.data[i].chart=translateWorkStrikes2Chart(response.data[i].workStrikes);
309 }
310 $scope.projects=response.data;
311 $scope.getLoggedUser();
312 $scope.currentproject=$scope.projects[$scope.currentprojectIndex];
313 },
314 function(response) {// failed
315 });
316 }
317
318
319 }
320
321 $scope.openCode = function(){
322 toastr.info("Visiting code");
323 var urlCode="https://github.com/idoctnef/openworktime";
324 if(typeof process !== 'undefined'){
325 console.log(process.versions['electron']);
326 const {shell} = require('electron');
327
328 shell.openExternal(urlCode);
329 }else{
330 window.open(urlCode);
331 }
332 };
333 $scope.arrayObjectIndexOf = function(myArray, searchTerm, property) {
334 if(myArray)
335 {
336 for(var i = 0, len = myArray.length; i < len; i++) {
337 if (myArray[i][property] === searchTerm){
338 //console.log("i: " + i);
339 return i;
340 }
341 }
342 }
343 //console.log("i: -1");
344 return -1;
345 }
346
347 //chart
348 /*$scope.chart={
349 labels: ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
350 series: ['Working time', 'Series B'],
351 data: [
352 [65, 59, 80, 81, 56, 55, 40],
353 [28, 48, 40, 19, 86, 27, 90]
354 ]
355 };*/
356
357 })
358
359
360 .filter('secondsToDateTime', [function() {
361 return function(seconds) {
362 return new Date(2016, 0, 1).setSeconds(seconds);
363 };
364}]);
365
366
367
368function translateWorkStrikes2Chart(workStrikes){
369 var auxChart={
370 labels: [],
371 series: ['working'],
372 data: []
373 };
374 if(workStrikes)
375 {
376 for(var i=0; i<workStrikes.length; i++)
377 {
378 auxChart.labels.push(workStrikes[i].username);
379 auxChart.data.push(workStrikes[i].time);
380 }
381 }
382 return(auxChart);
383}