module SalesReporter module Reports class SalesByShop def render(sales) sales_by_shop = {} sales.each do |s| shop = s.shop if sales_by_shop[shop] sales_by_shop[shop][:count] += s.quantity sales_by_shop[shop][:total] += s.amount else sales_by_shop[shop] = {:count => s.quantity, :total => s.amount} end end sorted = sales_by_shop.sort { |a,b| b[1][:count] <=> a[1][:count] } puts "Shop: Streams: Revenue:" puts "------------------------------------------" total_rev = 0 total_streams = 0 sorted.each do |key, row| puts "#{key.slice(0, 19).ljust(20)}: #{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