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