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}