arnaucube
arnaucube/openworktimePublic Self-hosted repository
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}