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 /* DASHBOARD initialization */
43 $scope.dashboardInit = function(){
44 if(localStorage.getItem('owt_token')){// adding token to the headers
45 $http.defaults.headers.post['X-Access-Token'] = localStorage.getItem('owt_token');
46 $http.defaults.headers.post['Content-Type'] = 'application/json';
47 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('owt_token');
48 }
49 if(localStorage.getItem("owt_user")){
50 $scope.user=JSON.parse(localStorage.getItem("owt_user"));
51 }else{
52
53 $scope.serverNotResponding();
54 }
55
56 $scope.getLoggedUser();
57
58 //getting users
59 $http.get(urlapi + 'users')
60 .success(function(data, status, headers,config){
61 if(data.success==false){
62 localStorage.removeItem("owt_token");
63 localStorage.removeItem("owt_user");
64 $scope.currentInclude="login.html";
65 console.log("token ended");
66 }else{
67 console.log(data);
68 $scope.users=data;
69 }
70 })
71 .error(function(data, status, headers,config){
72 console.log("server not responding, data error");
73 toastr.error("server not responding");
74 $scope.$broadcast('scroll.refreshComplete');//refresher stop
75 })
76 .then(function(result){
77 users = result.data;
78 });
79
80 //getting projects
81 $http.get(urlapi + 'projects')
82 .success(function(data, status, headers,config){
83 if(data.success==false){
84 localStorage.removeItem("owt_token");
85 localStorage.removeItem("owt_user");
86 $scope.currentInclude="login.html";
87 console.log("token ended");
88 }else{
89 for(var i=0; i<data.length; i++)
90 {
91 data[i].chart=translateWorkStrikes2Chart(data[i].workStrikes);
92 }
93 console.log(data);
94 $scope.projects=data;
95 }
96 })
97 .error(function(data, status, headers,config){
98 console.log("server not responding, data error");
99 toastr.error("server not responding");
100 $scope.$broadcast('scroll.refreshComplete');//refresher stop
101 })
102 .then(function(result){
103 users = result.data;
104 });
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 console.log(index);
259 $scope.currentprojectIndex=index;
260 $scope.currentproject=$scope.projects[index];
261 };
262
263 $scope.joinProject = function(){
264 console.log($scope.user);
265 $http({
266 url: urlapi + 'projects/'+$scope.currentproject._id+'/adduser',
267 method: "PUT",
268 data: $scope.user
269 }).then(function(response) {
270 console.log("project joined");
271 $scope.projects=response.data;
272 //re select currentproject
273 $scope.currentproject=$scope.projects[$scope.currentprojectIndex];
274 toastr.success("project joined");
275 },
276 function(response) {// failed
277 });
278 };
279 var interval;
280 $scope.currentStrike=0;
281 $scope.btnWork = function(){
282 //$scope.editingProject=false;
283 $scope.user.working=true;
284 $http({
285 url: urlapi + 'projects/' + $scope.currentproject._id + '/startworking',
286 method: "PUT",
287 data: $scope.user
288 }).then(function(response) {
289 console.log(response);
290 $scope.projects=response.data;
291 $scope.getLoggedUser();
292 },
293 function(response) {// failed
294 });
295 };
296 $scope.btnStop = function(){
297 if($scope.user.working==true)
298 {
299 //$scope.user.working=false;
300 $http({
301 url: urlapi + 'projects/' + $scope.currentproject._id + '/stopworking',
302 method: "PUT",
303 data: $scope.user
304 }).then(function(response) {
305 console.log(response);
306
307 for(var i=0; i<response.data.length; i++)
308 {
309 response.data[i].chart=translateWorkStrikes2Chart(response.data[i].workStrikes);
310 }
311 $scope.projects=response.data;
312 $scope.getLoggedUser();
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}