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                console.log(data);
 52                $scope.projects=data;
 53            })
 54            .error(function(data, status, headers,config){
 55                console.log("server not responding, data error");
 56                toastr.error("server not responding");
 57                $scope.$broadcast('scroll.refreshComplete');//refresher stop
 58            })
 59            .then(function(result){
 60                users = result.data;
 61            });
 62
 63        };
 64        /* </DASHBOARD initialization */
 65
 66
 67        $scope.user={};
 68        if(localStorage.getItem("owt_user")){
 69            $scope.user=JSON.parse(localStorage.getItem("owt_user"));
 70            $scope.currentInclude="dashboard.html";
 71            $scope.dashboardInit();
 72            intervalGetData = $interval(function(){
 73                $scope.dashboardInit();
 74            }, refreshTime);
 75        }else{
 76            $scope.currentInclude="login.html";
 77        }
 78
 79        /* LOGIN SIGNUP */
 80        $scope.showSignup = function(){
 81            $scope.currentInclude="signup.html";
 82        };
 83        $scope.hideSignup = function(){
 84            $scope.currentInclude="login.html";
 85        };
 86        $scope.onBtnSignup = function(){
 87            $scope.user.projects=[];
 88            $http({
 89                url: urlapi + 'users',
 90                method: "POST",
 91                data: $scope.user
 92            }).then(function(response) {
 93                $scope.currentInclude="login.html";
 94            },
 95            function(response) {// failed
 96            });
 97
 98        };
 99        var intervalGetData;//out of internal scope
100        $scope.onBtnLogin = function(){
101            $http({
102                url: urlapi + 'auth',
103                method: "POST",
104                data: $scope.user
105            }).then(function(response) {
106                    if(response.data.success)
107                    {
108                        localStorage.setItem("owt_token", response.data.token);
109                        localStorage.setItem("owt_user", angular.toJson(response.data.user));
110                        $scope.user=JSON.parse(localStorage.getItem("owt_user"));
111
112                        $scope.currentInclude="dashboard.html";
113                        $scope.dashboardInit();
114
115                        intervalGetData = $interval(function(){
116                            $scope.dashboardInit();
117                        }, refreshTime);
118                    }else{
119                        toastr.error(response.data.message);
120                    }
121            },
122            function(response) {// failed
123            });
124        };
125        $scope.onBtnLogout = function(){
126            $http({
127                url: urlapi + 'logout',
128                method: "POST",
129                data: $scope.user
130            }).then(function(response) {
131                    localStorage.removeItem("owt_token");
132                    localStorage.removeItem("owt_user");
133                    $interval.cancel(intervalGetData);
134                    $scope.currentInclude="login.html";
135            },
136            function(response) {// failed
137            });
138        };
139        /* </ LOGIN SIGNUP */
140
141
142
143
144        //localStorage.clear();
145        $scope.working=false;
146    $scope.currentproject={};
147
148    $scope.newproject={};
149    //$scope.newproject.id=$scope.projects[$scope.projects.length-1].id+1;
150    $scope.addNewProject = function(){
151        /*$scope.newproject.totaltime="0";
152        $scope.projects.push($scope.newproject);
153        localStorage.setItem("w_l_projects", angular.toJson($scope.projects));
154        $scope.newproject={
155            id: $scope.projects[$scope.projects.length-1].id+1,
156            chart: {
157                labels: [],
158                series: ['Working time'],
159                data: []
160            }
161        };*/
162        $http({
163            url: urlapi + 'projects',
164            method: "POST",
165            data: $scope.newproject
166        }).then(function(response) {
167            console.log("project posted");
168            console.log(response);
169            $scope.projects=response.data;
170            toastr.success("project created at server");
171            $scope.newproject={};
172        },
173        function(response) {// failed
174        });
175    };
176    $scope.editingIndex="";
177    $scope.editProject = function(index){
178        $scope.editingIndex=index;
179        $scope.editingProject=angular.copy($scope.projects[index]);
180    };
181    $scope.cancelEditProject = function(){
182        $scope.editingProject=false;
183    };
184    $scope.updateProject = function(){
185        $scope.projects[$scope.editingIndex]=angular.copy($scope.editingProject);
186        $scope.currentproject=angular.copy($scope.editingProject);
187        $scope.editingProject=false;
188    };
189    $scope.removeProject = function(index){
190        /*$scope.projects.splice(index, 1);
191        localStorage.setItem("w_l_projects", angular.toJson($scope.projects));*/
192        $http({
193            url: urlapi + 'projects/' + $scope.projects[index]._id,
194            method: "DELETE",
195            data: $scope.user._id
196        }).then(function(response) {
197            console.log(response);
198            $scope.projects=response.data;
199            $scope.projectSelect(null);
200        },
201        function(response) {// failed
202        });
203    };
204    $scope.currentprojectIndex;
205    $scope.projectSelect = function(index){
206        $scope.btnStop();
207        $scope.currentprojectIndex=index;
208        $scope.currentproject=$scope.projects[index];
209    };
210
211    $scope.joinProject = function(){
212        console.log($scope.user);
213        $http({
214            url: urlapi + 'projects/'+$scope.currentproject._id+'/adduser',
215            method: "PUT",
216            data: $scope.user
217        }).then(function(response) {
218            console.log("project joined");
219            $scope.projects=response.data;
220            //re select currentproject
221            $scope.currentproject=$scope.projects[$scope.currentprojectIndex];
222            toastr.success("project joined");
223        },
224        function(response) {// failed
225        });
226    };
227    var interval;
228    $scope.currentStrike=0;
229    $scope.btnWork = function(){
230        $scope.editingProject=false;
231        $scope.working=true;
232        $scope.currentStrike=0;
233        interval = $interval(function(){
234            $scope.currentStrike++;
235            $scope.currentproject.totaltime++;
236        }, 1000);
237        $http({
238            url: urlapi + 'users',
239            method: "POST",
240            data: $scope.user
241        }).then(function(response) {
242            $scope.currentInclude="login.html";
243        },
244        function(response) {// failed
245        });
246    };
247    $scope.btnStop = function(){
248        $interval.cancel(interval);
249        if($scope.working==true)
250        {
251            $scope.working=false;
252            $scope.currentproject.chart.labels.push("work strike " + $scope.currentproject.chart.labels.length);
253            $scope.currentproject.chart.data.push($scope.currentStrike);
254
255            localStorage.setItem("w_l_projects", angular.toJson($scope.projects));
256        }
257
258
259    }
260
261    $scope.openCode = function(){
262        toastr.info("Visiting code");
263        var urlCode="https://github.com/idoctnef/openworktime";
264        if(typeof process !== 'undefined'){
265            console.log(process.versions['electron']);
266            const {shell} = require('electron');
267
268            shell.openExternal(urlCode);
269        }else{
270            window.open(urlCode);
271        }
272    };
273
274    //chart
275    /*$scope.chart={
276        labels: ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
277        series: ['Working time', 'Series B'],
278        data: [
279            [65, 59, 80, 81, 56, 55, 40],
280            [28, 48, 40, 19, 86, 27, 90]
281        ]
282    };*/
283
284  })
285
286
287  .filter('secondsToDateTime', [function() {
288    return function(seconds) {
289        return new Date(2016, 0, 1).setSeconds(seconds);
290    };
291}]);