diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index c38539c..694269f 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -2,7 +2,7 @@ class ReportsController < ApplicationController before_action :authenticate_user! def bikes_sold_per_year - @bikes_sold_per_year = Report.bikes_sold_per_year + @yearly_data = Report.yearly_data end end diff --git a/app/models/report.rb b/app/models/report.rb new file mode 100644 index 0000000..251f050 --- /dev/null +++ b/app/models/report.rb @@ -0,0 +1,35 @@ +class Report + + @@years = Bike.all.each.map{|bike| Time.parse(bike.date_sold).year if bike.date_sold} + + def self.bikes_sold_per_year + counts = Hash.new(0) + @@years.each { |year| counts[year] += 1 } + counts + end + + def self.average_price_per_year + prices = Bike.all.each.map{|bike| bike.price} + years_prices = @@years.each_with_index.map{|year, index| {prices[index].to_s.to_sym => year}} + merged_years_prices = years_prices.reduce({}, :merge) + years_prices_grouped = merged_years_prices.group_by{|k, v| v} + + average_price_array = years_prices_grouped.each.map{ |k, year_values| + year_prices = year_values.each.map{|pair| pair[0]} + float_prices = year_prices.map{|price| price.to_s.to_f} + average_price = float_prices.inject{ |sum, el| el + sum } / float_prices.size + {k => average_price} + } + average_prices = average_price_array.reduce({}, :merge) + end + + def self.yearly_data + unique_years = @@years.uniq + bikes_sold_per_year = Report.bikes_sold_per_year() + average_price_per_year = Report.average_price_per_year() + yearly_data_array = unique_years.map{|year| {year => {number: bikes_sold_per_year[year], average_price: average_price_per_year[year]}}} + yearly_data = yearly_data_array.reduce({}, :merge) + Hash[yearly_data.sort] + end + +end diff --git a/app/models/reports.rb b/app/models/reports.rb deleted file mode 100644 index 167e8c1..0000000 --- a/app/models/reports.rb +++ /dev/null @@ -1,5 +0,0 @@ -class Report - def self.bikes_sold_per_year - "KITTIES" - end -end diff --git a/app/views/reports/bikes_sold_per_year.html.haml b/app/views/reports/bikes_sold_per_year.html.haml index fbda96f..a3b02dd 100644 --- a/app/views/reports/bikes_sold_per_year.html.haml +++ b/app/views/reports/bikes_sold_per_year.html.haml @@ -1 +1,14 @@ -= @bikes_sold_per_year +.container + %h1 Bikes Sold Per Year + %table.table + %thead + %tr + %th Year + %th Number of Bikes + %th Average Price + %tbody + - @yearly_data.each do |year, data| + %tr + %td= year + %td= data[:number] + %td= sprintf( "%0.02f", data[:average_price]) diff --git a/db/schema.rb b/db/schema.rb index bb77e35..6a8232a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -33,7 +33,6 @@ ActiveRecord::Schema.define(version: 20140923000417) do t.string "model" t.string "bike_type" t.string "color" - t.string "frame_size" t.string "serial_number" t.text "notes" t.text "tag_info"