lib/time_cop/runner.rb in time_cop-0.5.0 vs lib/time_cop/runner.rb in time_cop-0.6.0
- old
+ new
@@ -11,31 +11,76 @@
if (options[:interactive])
cli = HighLine.new
username = cli.ask('Harvest Username: ')
password = cli.ask('Harvest Password: ') { |q| q.echo = false }
- interactive_hash[:hours_per_week] = cli.ask('Hours per week? ') { |q| q.default = 32 }.to_i
+ interactive_hash[:hours_per_week] = cli.ask('Hours per week? (Full Time 34)') { |q| q.default = 34 }.to_f
+ accountability_options = {
+ username: (username.nil? ? options[:username] : username),
+ password: (password.nil? ? options[:password] : password),
+ email: options[:email]
+ }
+ q_dates = [
+ Date.new(Date.today.year, 1, 1),
+ Date.new(Date.today.year, 4, 1),
+ Date.new(Date.today.year, 7, 1),
+ Date.new(Date.today.year, 10, 1)
+ ]
+
cli.choose do |menu|
menu.prompt = 'Which Quarter? '
- menu.choice(:Q1) { interactive_hash[:date] = Date.new(Date.today.year, 1, 1)}
- menu.choice(:Q2) { interactive_hash[:date] = Date.new(Date.today.year, 4, 1)}
- menu.choice(:Q3) { interactive_hash[:date] = Date.new(Date.today.year, 7, 1)}
- menu.choice(:Q4) { interactive_hash[:date] = Date.new(Date.today.year, 10, 1)}
+ menu.choice(:Q1) do
+ interactive_hash[:date] = q_dates[0]
+ Accountability.new(interactive_hash.merge(accountability_options)).print_report
+ end
+ menu.choice(:Q2) do
+ interactive_hash[:date] = q_dates[1]
+ Accountability.new(interactive_hash.merge(accountability_options)).print_report
+ end
+ menu.choice(:Q3) do
+ interactive_hash[:date] = q_dates[2]
+ Accountability.new(interactive_hash.merge(accountability_options)).print_report
+ end
+ menu.choice(:Q4) do
+ interactive_hash[:date] = q_dates[3]
+ Accountability.new(interactive_hash.merge(accountability_options)).print_report
+ end
+ menu.choice(:Year) do
+ summary = q_dates.map do |d|
+ interactive_hash[:date] = d
+ Accountability.new(interactive_hash.merge(accountability_options)).summary_hash
+ end
+ logged = summary.inject(0){|sum, s| sum + s[:hours][:charged]}
+ needed = summary.inject(0){|sum, s| sum + s[:hours][:needed]}.round(2 )
+ diff = (logged - needed).round(2)
+ weekdays = (Date.today..Date.new(Date.today.year, 12, 31)).select{|d| (1..5).include?(d.wday)}.size
+ weekdays_so_far = (Date.new(Date.today.year, 1, 1)..Date.today).select{|d| (1..5).include?(d.wday)}.size
+ average_needed = (-1 * diff / weekdays).round(2)
+ average_clocked = (logged / weekdays_so_far).round(2)
+ projected_diff = ((logged + (weekdays * average_clocked)) - needed).round(2)
+
+ puts "Business Days Left In Year: #{weekdays}"
+ puts "Current Year End Surplus(+)/Deficit(-): #{diff}"
+ puts "Projected Year End Surplus(+)/Deficit(-): #{projected_diff}"
+ puts ""
+ puts "Total Harvest Hours This Year: #{logged}"
+ puts "Average Harvest Hours Per Business Day: #{average_clocked}"
+ puts ""
+ puts "Total Hours Needed By End Of Year: #{needed}"
+ puts "Average Hours Per Business Day Needed To Reach Goal: #{average_needed}"
+ end
end
+ else
+ accountability_options = {
+ username: (options[:username]),
+ password: (options[:password]),
+ email: options[:email]
+ }
+ accountability = Accountability.new(
+ accountability_options
+ )
+ accountability.print_report
end
-
- accountability_options = {
- username: (username.nil? ? options[:username] : username),
- password: (password.nil? ? options[:password] : password),
- email: options[:email]
- }
-
- accountability_options = interactive_hash.merge(accountability_options)
-
- accountability = Accountability.new(
- accountability_options
- )
- accountability.print_report
rescue Harvest::AuthenticationFailed
puts 'Unable to authenticate to Harvest. Check username/password.'
rescue Harvest::HTTPError => e
puts 'Harvest API Error'
puts e.to_s