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=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}