# Copyright (C) 2014 Harald Eilertsen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . module SalesReporter module Reports class SalesByShop def initialize @shops = Hash.new { |h,k| h[k] = { :count => 0, :total => 0, :sales => [] } } end def add_sale(sale, row) shop = row['Shop'] @shops[shop][:sales] << sale @shops[shop][:count] += sale.quantity @shops[shop][:total] += sale.amount end def render sorted = @shops.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" puts "===================================================" end end end end