-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.rb
More file actions
146 lines (113 loc) · 3.74 KB
/
app.rb
File metadata and controls
146 lines (113 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
require 'sinatra'
require 'net/http'
require 'uri'
require 'pry'
require 'json'
require 'sinatra/assetpack'
require 'date'
require 'time'
require_relative 'lib/toggl/toggl_login.rb'
require_relative 'lib/toggl/toggl_data.rb'
require_relative 'lib/toggl/toggl_organize_data.rb'
require_relative 'lib/toggl/toggl_date.rb'
require_relative 'lib/toggl/toggl_project.rb'
class Reports4freetoggl < Sinatra::Base
configure do
set :root, File.dirname(__FILE__)
set :bind, '0.0.0.0'
enable :sessions
set :sessions, true
set :static_cache_control, [:public, max_age: 60 * 60 * 24 * 365]
set :public_folder, Proc.new { File.join(root, "assets") }
register Sinatra::AssetPack
assets do
serve '/js', :from => 'assets/js'
serve '/css', :from => 'assets/css'
js :application, [
'/js/jquery.js',
'/js/easyredmine.js',
'/js/pickadate/lib/compressed/picker.js',
'/js/pickadate/lib/compressed/picker.date.js',
'/js/pickadate/lib/compressed/legacy.js'
]
css :application, [
'/css/easyredmine.css',
'/css/pickadate/lib/compressed/themes/default.css',
'/css/pickadate/lib/compressed/themes/default.date.css'
]
end
end
def require_logged_in
redirect('login') unless is_authenticated?
end
def is_authenticated?
return !!session[:fullname]
end
def default_time (start_time = nil, end_time = nil)
default_time = Hash.new
time = Time.new
default_time['start'] = (start_time == nil ) ? time.strftime("%Y-%m-%d") : start_time
default_time['end'] = (end_time == nil) ? time.strftime("%Y-%m-%d") : end_time
return default_time
end
get '/' do
redirect '/login'
end
get '/login' do
@is_loged = is_authenticated?
erb :loginform
end
post '/loginvalidate' do
@is_loged = is_authenticated?
user = TogglLogin.new.get_toggl_user_data(params[:mail],params[:password])
#puts user['data']['workspaces']
#binding.pry
if user.nil?
redirect '/login'
else
session[:id] = user['data']['id']
session[:api_token] = user['data']['api_token']
session[:fullname] = user['data']['fullname']
session[:projects] = TogglProject.new.create_toggl_projects_structure ( user['data']['projects'])
session[:workspace_id] = user['data']['workspaces'][0]['id']
session[:user_agent] = user['data']['email']
redirect '/report/date'
end
end
get '/report/date' do
require_logged_in
@is_loged = is_authenticated?
@time_entries = nil
@projects = session[:projects]
@default_time = default_time
erb :report
end
post '/report/date' do
require_logged_in
@is_loged = is_authenticated?
if params
kind = 'description'
params[:end_date] = TogglDate.new.get_end_date_submit(params[:end_date])
query_string = {
#Project_id
"project_ids" => params[:project],
"user_agent" => session[:user_agent],#"oscar.calvo@thecocktail.com",
"workspace_id" => session[:workspace_id],
"since" => params[:start_date] + 'T00:00:00+00:00',
"until" => params[:end_date] + 'T00:00:00+00:00'
#"grouping" => "projects",
#"subgrouping" => "tasks"
}
data_times = TogglData.new.get_toggl_data session[:api_token],query_string
@default_time = default_time params[:start_date] , params[:end_date]
@time_entries = TogglOrganizeData.new.build_data kind , data_times
end
@projects = session[:projects]
#puts @projects
erb :report
end
get '/explain' do
@is_loged = is_authenticated?
erb :howto
end
end