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