module SalesReporter module Reports class SalesByDate def initialize @sales = [] end def add_sale(sale, row) @sales << sale end def render sales_by_date = {} @sales.each do |s| d = s.date if sales_by_date[d] sales_by_date[d][:count] += s.quantity sales_by_date[d][:total] += s.amount else sales_by_date[d] = {:count => s.quantity, :total => s.amount} end end puts "Date: Streams: Revenue:" puts "------------------------------------------" total_rev = 0 total_streams = 0 sales_by_date.each do |key, row| puts "#{key.iso8601}: #{row[:count].to_s.rjust(7)} #{row[:total].round(5).to_s.rjust(10)} EUR" total_rev += row[:total] total_streams += row[:count] end puts "------------------------------------------" puts "Total: #{total_streams.to_s.rjust(7)} #{total_rev.round(5).to_s.rjust(10)} EUR" end end end end