twstats 0.2.3 → 0.2.4
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/twstats.rb +2 -1
- data/lib/twstats/runner.rb +14 -4
- data/lib/twstats/timesheet_export.rb +51 -0
- data/lib/twstats/tw_log.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f34d4ba10054132e2b0cddb54033e418979735a7ea7c5e3d487f40eb2c5472e7
|
4
|
+
data.tar.gz: 1017e1b74d4cf8da667b634ea71285952f9f9c44a7b297cb2c8c31c21f884406
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21bff3055a10fd3fafb6d92647a2537afb908024e053e7bfca171532e4e7ad55e3eb7758656e8a35895411b520184d526f07b631e1ad9989d1f53855ed257182
|
7
|
+
data.tar.gz: 128b0efb50ae73c9b7b598b841ebdfeb66fb38b4ce510d2fe2a8e1b1f290cd23bfccddabb37dc4bd8fa8bee495b7fda6b0f8cd5e377b142a395aaf644170763a
|
data/Gemfile.lock
CHANGED
data/lib/twstats.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative 'twstats/extensions'
|
|
2
2
|
require_relative 'twstats/version'
|
3
3
|
require_relative 'twstats/tw_log'
|
4
4
|
require_relative 'twstats/csv_reader'
|
5
|
+
require_relative 'twstats/timesheet_export'
|
5
6
|
require_relative 'twstats/runner'
|
6
7
|
|
7
8
|
module Twstats
|
@@ -19,7 +20,7 @@ module Twstats
|
|
19
20
|
]
|
20
21
|
MENU_CHOICES = [
|
21
22
|
{name: 'Stats', value: :stats},
|
22
|
-
{name: '
|
23
|
+
{name: 'Billing', value: :billing},
|
23
24
|
{name: 'Quit', value: :quit}
|
24
25
|
]
|
25
26
|
end
|
data/lib/twstats/runner.rb
CHANGED
@@ -20,8 +20,8 @@ module Twstats
|
|
20
20
|
case option
|
21
21
|
when :stats
|
22
22
|
show_stats_menu
|
23
|
-
when :
|
24
|
-
|
23
|
+
when :billing
|
24
|
+
billing
|
25
25
|
when :quit
|
26
26
|
break
|
27
27
|
else
|
@@ -30,6 +30,12 @@ module Twstats
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def billing
|
34
|
+
## Takes care of using the current CSV file to be imported into timesheets.
|
35
|
+
# Makes it easier to do it than manually going through all of them
|
36
|
+
TimeSheetExport.new(@csv, @prompt).execute
|
37
|
+
end
|
38
|
+
|
33
39
|
def show_stats_menu
|
34
40
|
loop do
|
35
41
|
option = @prompt.select("Select what time logging stats you want to see", Twstats::STATS_MENU_CHOICES, cycle: true)
|
@@ -59,8 +65,12 @@ module Twstats
|
|
59
65
|
end
|
60
66
|
toshow.sort_by{ |k,v| v}.reverse.to_h.each do |k,v|
|
61
67
|
if filter_billable
|
62
|
-
|
63
|
-
|
68
|
+
if v[0].zero?
|
69
|
+
puts " - #{k.ljust(max,' ').bright.blue} | #{"Non-billable:".bright} #{v[1].round(2)}"# unless v[1].zero?
|
70
|
+
else
|
71
|
+
puts " - #{k.ljust(max,' ').bright.blue} | #{"Billable:".ljust(13," ").bright} #{v[0].round(2)} (#{((v[0]/(v[0]+v[1]))*100).round(2)} %)"
|
72
|
+
puts " #{"".ljust(max,' ').bright.blue} | #{"Non-billable:".bright} #{v[1].round(2)}" unless v[1].zero?
|
73
|
+
end
|
64
74
|
else
|
65
75
|
puts " - #{k.ljust(max,' ').bright.blue} | #{v.round(2)}" unless v.zero?
|
66
76
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rainbow/refinement'
|
2
|
+
using Rainbow
|
3
|
+
|
4
|
+
module Twstats
|
5
|
+
class TimeSheetExport
|
6
|
+
def initialize(csv, prompt)
|
7
|
+
@prompt = prompt
|
8
|
+
@rows = []
|
9
|
+
# Filter by billable and not billed
|
10
|
+
csv.logs.select{|x| x.billable && !x.invoiced}.sort_by{|x| x.date}.each do |log|
|
11
|
+
@rows << {
|
12
|
+
date: log.date.strftime('%m/%d/%Y'),
|
13
|
+
who: public_name(log.who),
|
14
|
+
description: log.description,
|
15
|
+
time: log.decimal_time,
|
16
|
+
proj: log.project
|
17
|
+
}
|
18
|
+
end
|
19
|
+
@proj = csv.projects
|
20
|
+
|
21
|
+
# Ask the user how to configure the export
|
22
|
+
if csv.projects.size > 1
|
23
|
+
@proj = @prompt.multi_select 'I have found more than one project in the CSV file, which ones do you want to export for timesheet?' do |menu|
|
24
|
+
menu.choices csv.projects
|
25
|
+
menu.default *[*1..csv.projects.size] # Generates an array from 1 to the maximum index of the projects array
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def execute
|
31
|
+
puts "Copy each column below into the proper column of the spreadsheet"
|
32
|
+
columns = [:date, :who, :description, :time]
|
33
|
+
columns.each do |column|
|
34
|
+
puts "***********".bright.blue
|
35
|
+
puts column.to_s.capitalize.bright.blue
|
36
|
+
puts "***********".bright.blue
|
37
|
+
@rows.each do |row|
|
38
|
+
next unless @proj.include? row[:proj]
|
39
|
+
puts "#{row[column]}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
puts "******* Total amount of time billed *******".bright.blue
|
43
|
+
puts "This amounts to #{@rows.inject(0) { |sum, x| sum += x[:time].to_f }} hours.".bright
|
44
|
+
puts "Check with the amount of hours to be billed to see they match".bright
|
45
|
+
end
|
46
|
+
|
47
|
+
def public_name(name)
|
48
|
+
name.split[0]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/twstats/tw_log.rb
CHANGED
@@ -10,7 +10,7 @@ module Twstats
|
|
10
10
|
attr_reader :project
|
11
11
|
attr_reader :task
|
12
12
|
attr_reader :billable
|
13
|
-
|
13
|
+
attr_reader :invoiced
|
14
14
|
|
15
15
|
# Class use to store the information needed form a given log
|
16
16
|
def initialize(row)
|
@@ -23,6 +23,7 @@ module Twstats
|
|
23
23
|
@project = row["Project"]
|
24
24
|
@task = row["Task"]
|
25
25
|
@billable = !row["Is it Billable?"].to_i.zero?
|
26
|
+
@invoiced = !row['Invoice Number']
|
26
27
|
@date = DateTime.parse(row['Date'])
|
27
28
|
end
|
28
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twstats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J.P. Araque
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/twstats/csv_reader.rb
|
107
107
|
- lib/twstats/extensions.rb
|
108
108
|
- lib/twstats/runner.rb
|
109
|
+
- lib/twstats/timesheet_export.rb
|
109
110
|
- lib/twstats/tw_log.rb
|
110
111
|
- lib/twstats/version.rb
|
111
112
|
- twstats.gemspec
|