twstats 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|