tempest_time 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/tempest_time/api/tempo_api/requests/submit_timesheet.rb +6 -8
- data/lib/tempest_time/commands/report.rb +19 -6
- data/lib/tempest_time/commands/submit.rb +20 -3
- data/lib/tempest_time/helpers/time_helper.rb +21 -12
- data/lib/tempest_time/services/generate_report.rb +2 -7
- data/lib/tempest_time/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b26cfdc661706032cc5149b28b05fbf1f322324f0f845c00af8d3e5135546c8
|
4
|
+
data.tar.gz: 1cb5c84cf724531917ec9c759dc83cd47a7fba89a8dc9c74401c65f89b6ea207
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ac9e54ec617bae5c87fd405b1b1f6c5df82d47d668caa0a26deedfe52dc59352d5ce3e37b7e0cacb376562fbed3fcb670c1d6f92c737a81b911db2ff0658466
|
7
|
+
data.tar.gz: 502bf3a2a0d11b21167d4fa68305d4993477914462f6110d5dc930e44ceb7a8cf7528e98e135c68cee312d166ef75f571a3f2891a7fc9418b9fbcc7ddad5cf0f
|
data/Gemfile.lock
CHANGED
@@ -7,11 +7,12 @@ module TempoAPI
|
|
7
7
|
class SubmitTimesheet < TempoAPI::Request
|
8
8
|
include TempestTime::Helpers::TimeHelper
|
9
9
|
|
10
|
-
attr_reader :reviewer
|
10
|
+
attr_reader :reviewer, :week_number
|
11
11
|
|
12
|
-
def initialize(reviewer)
|
12
|
+
def initialize(reviewer, week_number)
|
13
13
|
super
|
14
14
|
@reviewer = reviewer
|
15
|
+
@week_number = week_number
|
15
16
|
end
|
16
17
|
|
17
18
|
private
|
@@ -29,9 +30,10 @@ module TempoAPI
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def query_params
|
33
|
+
dates = week_dates(week_number)
|
32
34
|
{
|
33
|
-
from:
|
34
|
-
to:
|
35
|
+
from: dates.first.strftime(DATE_FORMAT),
|
36
|
+
to: dates.last.strftime(DATE_FORMAT)
|
35
37
|
}
|
36
38
|
end
|
37
39
|
|
@@ -40,10 +42,6 @@ module TempoAPI
|
|
40
42
|
reviewerUsername: reviewer
|
41
43
|
}
|
42
44
|
end
|
43
|
-
|
44
|
-
def week_dates
|
45
|
-
parsed_date_input('week')
|
46
|
-
end
|
47
45
|
end
|
48
46
|
end
|
49
47
|
end
|
@@ -12,14 +12,17 @@ module TempestTime
|
|
12
12
|
|
13
13
|
def initialize(users, options)
|
14
14
|
@users = users || []
|
15
|
-
@
|
15
|
+
@team = options[:team]
|
16
|
+
@week = options[:week]
|
16
17
|
end
|
17
18
|
|
18
19
|
def execute(input: $stdin, output: $stdout)
|
19
|
-
|
20
|
-
@users
|
21
|
-
@users.push(TempestTime::Settings::Teams.members(team)) if team
|
20
|
+
@users = user_prompt if @users.empty? && @team.nil?
|
21
|
+
@users.push(TempestTime::Settings::Teams.members(@team)) if @team
|
22
22
|
abort('No users specified.') unless @users.any?
|
23
|
+
|
24
|
+
@week ||= week_prompt
|
25
|
+
|
23
26
|
with_spinner('Generating report...') do |spinner|
|
24
27
|
table = render_table
|
25
28
|
spinner.stop(pastel.green('Your report is ready!'))
|
@@ -35,11 +38,11 @@ module TempestTime
|
|
35
38
|
|
36
39
|
def report
|
37
40
|
@report ||= TempestTime::Services::GenerateReport.new(
|
38
|
-
@users.flatten, @
|
41
|
+
@users.flatten, @week
|
39
42
|
)
|
40
43
|
end
|
41
44
|
|
42
|
-
def
|
45
|
+
def user_prompt
|
43
46
|
type = prompt.select(
|
44
47
|
"Generate a report for a #{pastel.green('user')} or #{pastel.green('team')}?",
|
45
48
|
['User', 'Team']
|
@@ -54,6 +57,16 @@ module TempestTime
|
|
54
57
|
teams.members(team)
|
55
58
|
end
|
56
59
|
|
60
|
+
def week_prompt
|
61
|
+
week = TTY::Prompt.new.select(
|
62
|
+
'Please select the week to report.',
|
63
|
+
week_ranges,
|
64
|
+
default: current_week,
|
65
|
+
per_page: 5
|
66
|
+
)
|
67
|
+
week_ranges.find_index(week) + 1
|
68
|
+
end
|
69
|
+
|
57
70
|
def table_headings
|
58
71
|
%w[User COMP% UTIL%] + report.projects
|
59
72
|
end
|
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
require_relative '../command'
|
4
4
|
require_relative '../api/tempo_api/requests/submit_timesheet'
|
5
|
+
require_relative '../helpers/time_helper'
|
5
6
|
|
6
7
|
module TempestTime
|
7
8
|
module Commands
|
8
9
|
class Submit < TempestTime::Command
|
10
|
+
include TempestTime::Helpers::TimeHelper
|
11
|
+
|
9
12
|
def initialize(options)
|
10
13
|
@options = options
|
11
14
|
end
|
@@ -13,14 +16,28 @@ module TempestTime
|
|
13
16
|
def execute(input: $stdin, output: $stdout)
|
14
17
|
# Command logic goes here ...
|
15
18
|
reviewer = prompt.ask('Who should review this timesheet? (username)')
|
16
|
-
|
19
|
+
week_number = week_prompt
|
20
|
+
|
21
|
+
message = 'Submit the selected timesheet to ' + pastel.green(reviewer) + '?'
|
17
22
|
abort unless prompt.yes?(message)
|
18
23
|
abort unless prompt.yes?('Are you sure? No edits can be made once submitted!')
|
19
24
|
|
20
|
-
with_success_fail_spinner("Submitting
|
21
|
-
TempoAPI::Requests::SubmitTimesheet.new(reviewer).send_request
|
25
|
+
with_success_fail_spinner("Submitting your timesheet...") do
|
26
|
+
TempoAPI::Requests::SubmitTimesheet.new(reviewer, week_number).send_request
|
22
27
|
end
|
23
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def week_prompt
|
33
|
+
week = TTY::Prompt.new.select(
|
34
|
+
'Please select the week to submit.',
|
35
|
+
week_ranges,
|
36
|
+
default: current_week,
|
37
|
+
per_page: 5
|
38
|
+
)
|
39
|
+
week_ranges.find_index(week) + 1
|
40
|
+
end
|
24
41
|
end
|
25
42
|
end
|
26
43
|
end
|
@@ -21,7 +21,7 @@ module TempestTime
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def formatted_date_range(start_date, end_date)
|
24
|
-
return formatted_date(start_date) if end_date.nil?
|
24
|
+
return formatted_date(start_date) if end_date.nil?
|
25
25
|
"#{formatted_date(start_date)} - #{formatted_date(end_date)}"
|
26
26
|
end
|
27
27
|
|
@@ -35,29 +35,38 @@ module TempestTime
|
|
35
35
|
[Date.today]
|
36
36
|
when 'yesterday'
|
37
37
|
[Date.today.prev_day]
|
38
|
-
when 'week'
|
39
|
-
|
38
|
+
when 'week', 'thisweek'
|
39
|
+
week_dates(current_week)
|
40
|
+
when 'lastweek'
|
41
|
+
week_dates(current_week - 1)
|
40
42
|
else
|
41
43
|
[Date.parse(date_input)]
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
|
-
def
|
46
|
-
|
47
|
+
def current_week
|
48
|
+
# Helper method to make weeks start on Sunday instead of Monday.
|
49
|
+
@current_week ||= (Date.today + 1).cweek
|
47
50
|
end
|
48
51
|
|
49
52
|
def beginning_of_week(week_number)
|
50
|
-
|
51
|
-
|
52
|
-
days_in_the_past = (this_week_number - week_number) * 7
|
53
|
-
beginning_of_this_week - days_in_the_past
|
53
|
+
return unless week_number.positive? && week_number < 53
|
54
|
+
(Date.today - Date.today.wday) - ((current_week - week_number) * 7)
|
54
55
|
end
|
55
56
|
|
56
|
-
def
|
57
|
-
(
|
58
|
-
|
57
|
+
def week_beginnings
|
58
|
+
@week_beginnings ||= (1..52).map { |week_number| beginning_of_week(week_number) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def week_ranges
|
62
|
+
@week_ranges ||= week_beginnings.map do |start_date|
|
63
|
+
formatted_date_range(start_date, start_date + 6)
|
59
64
|
end
|
60
65
|
end
|
66
|
+
|
67
|
+
def week_dates(week_number)
|
68
|
+
(0..6).map { |days| beginning_of_week(week_number) + days }
|
69
|
+
end
|
61
70
|
end
|
62
71
|
end
|
63
72
|
end
|
@@ -12,7 +12,7 @@ module TempestTime
|
|
12
12
|
def initialize(users, week_number)
|
13
13
|
@users = users
|
14
14
|
@week_number = week_number || Date.today.cweek
|
15
|
-
@reports = build_reports
|
15
|
+
@reports = build_reports
|
16
16
|
end
|
17
17
|
|
18
18
|
def projects
|
@@ -37,17 +37,12 @@ module TempestTime
|
|
37
37
|
|
38
38
|
private
|
39
39
|
|
40
|
-
def valid?
|
41
|
-
return false unless week_number <= Date.today.cweek
|
42
|
-
true
|
43
|
-
end
|
44
|
-
|
45
40
|
def build_reports
|
46
41
|
users.map do |user|
|
47
42
|
request = TempoAPI::Requests::ListWorklogs.new(start_date, end_date, user)
|
48
43
|
request.send_request
|
49
44
|
TempestTime::Models::Report.new(user, request.response.worklogs)
|
50
|
-
end
|
45
|
+
end || []
|
51
46
|
end
|
52
47
|
end
|
53
48
|
end
|
data/lib/tempest_time/version.rb
CHANGED