diff --git a/app/controllers/admin/stats_controller.rb b/app/controllers/admin/stats_controller.rb index 81d6a0350..c2902d1c7 100644 --- a/app/controllers/admin/stats_controller.rb +++ b/app/controllers/admin/stats_controller.rb @@ -2,18 +2,13 @@ module Admin class StatsController < Admin::AdminController def index @years = %w[2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024] + if params[:nopandemic] + @years = %w[2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2021 2022 2023 2024] + end @racer_days_by_discipline = Stats.racer_days_by_discipline(@years) @racers_by_discipline = Stats.racers_by_discipline(@years) - @total_racer_days = Stats.total_racer_days(@years) + @racer_days_by_gender = Stats.racer_days_by_gender(@years) @racers_by_gender = Stats.racers_by_gender(@years) - @total_juniors = Stats.total_juniors(@years) - @memberships = Stats.memberships(@years) - end - - def nopandemic - @years = %w[2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2021 2022 2023 2024] - @racer_days_by_discipline = Stats.racer_days_by_discipline(@years) - @racers_by_discipline = Stats.racers_by_discipline(@years) @total_racer_days = Stats.total_racer_days(@years) @total_juniors = Stats.total_juniors(@years) @memberships = Stats.memberships(@years) diff --git a/app/services/stats.rb b/app/services/stats.rb index 99f15f702..ee81866e6 100644 --- a/app/services/stats.rb +++ b/app/services/stats.rb @@ -48,8 +48,7 @@ def self.racers_by_discipline_query(years) years.each do |year| res = Result.joins(:event).where(events: { year: year, type: "SingleDayEvent" }) .where(competition_result: false, team_competition_result: false) - .where.not(person_id: nil).group(:discipline).distinct - .count(:person_id) + .where.not(person_id: nil).group(:discipline).distinct.count(:person_id) chart_data.each do |data| if res[data[:name]].nil? data[:data].push(0) @@ -107,6 +106,28 @@ def self.total_racers(years) chart_data end + def self.racer_days_by_gender(years) + return Rails.cache.read("racer_days_by_gender") if Rails.cache.read("racer_days_by_gender").present? + + chart_data = [ + { name: "Not Specified", data: [] }, + { name: "Female", data: [] }, + { name: "Male", data: [] }, + { name: "NB", data: [] } + ] + years.each do |year| + res = Result.joins(:event, :person).where(events: { year: year, type: "SingleDayEvent" }) + .where(competition_result: false, team_competition_result: false) + .where.not(person_id: nil).group("people.gender").count + chart_data[0][:data].push(res[nil] || 0) + chart_data[1][:data].push(res["F"] || 0) + chart_data[2][:data].push(res["M"] || 0) + chart_data[3][:data].push(res["NB"] || 0) + end + Rails.cache.write("racer_days_by_gender", chart_data, expires_in: 12.hours) + chart_data + end + def self.racers_by_gender(years) return Rails.cache.read("racers_by_gender") if Rails.cache.read("racers_by_gender").present? @@ -119,7 +140,7 @@ def self.racers_by_gender(years) years.each do |year| res = Result.joins(:event, :person).where(events: { year: year, type: "SingleDayEvent" }) .where(competition_result: false, team_competition_result: false) - .where.not(person_id: nil).group("people.gender").count + .where.not(person_id: nil).group("people.gender").distinct.count(:person_id) chart_data[0][:data].push(res[nil] || 0) chart_data[1][:data].push(res["F"] || 0) chart_data[2][:data].push(res["M"] || 0) diff --git a/app/views/admin/stats/index.html.erb b/app/views/admin/stats/index.html.erb index cc2970d3f..d27b45764 100644 --- a/app/views/admin/stats/index.html.erb +++ b/app/views/admin/stats/index.html.erb @@ -3,12 +3,13 @@
+