lib/timetrap/formatters/text.rb in samg-timetrap-0.1.2 vs lib/timetrap/formatters/text.rb in samg-timetrap-1.0.0

- old
+ new

@@ -1,49 +1,103 @@ +module Timetrap + module Formatters + class Text + attr_accessor :output + include Timetrap::Helpers + def initialize entries + self.output = '' + sheets = entries.inject({}) do |h, e| + h[e.sheet] ||= [] + h[e.sheet] << e + h + end + (sheet_names = sheets.keys.sort).each do |sheet| + self.output << "Timesheet: #{sheet}\n" + id_heading = Timetrap::CLI.args['-v'] ? 'Id' : ' ' + self.output << "#{id_heading} Day Start End Duration Notes\n" + last_start = nil + from_current_day = [] + sheets[sheet].each_with_index do |e, i| + from_current_day << e + e_end = e.end || Time.now + self.output << "%-4s%16s%11s -%9s%10s %s\n" % [ + (Timetrap::CLI.args['-v'] ? e.id : ''), + format_date_if_new(e.start, last_start), + format_time(e.start), + format_time(e.end), + format_duration(e.start, e_end), + e.note + ] + + nxt = sheets[sheet].map[i+1] + if nxt == nil or !same_day?(e.start, nxt.start) + self.output << "%52s\n" % format_total(from_current_day) + from_current_day = [] + else + end + last_start = e.start + end + self.output << <<-OUT + --------------------------------------------------------- + OUT + self.output << " Total%43s\n" % format_total(sheets[sheet]) + self.output << "\n" unless sheet == sheet_names.last + end + if sheets.size > 1 + self.output << <<-OUT +------------------------------------------------------------- + OUT + self.output << "Grand Total%41s\n" % format_total(sheets.values.flatten) + end + end + end + end +end