diff --git a/admin/app/admin/cohorts_monthly.rb b/admin/app/admin/cohorts_monthly.rb index dc6351704..4ef74f4d8 100644 --- a/admin/app/admin/cohorts_monthly.rb +++ b/admin/app/admin/cohorts_monthly.rb @@ -13,58 +13,63 @@ ActiveAdmin.register Cohort, :as => 'Cohorts Monthly' do controller do def scoped_collection objs = super - alltime = true args = params[:q] || {} - if args[:monthly_start_eq].nil? || args[:monthly_end_eq].nil? - Cohort.alltime_cohorts! if 0 == Cohort.where(all_time: true).count - else + if !(args[:monthly_start_eq].nil? || args[:monthly_end_eq].nil?) mstart, mend = Time.parse(args[:monthly_start_eq]), Time.parse(args[:monthly_end_eq]) - # populate monthlys - Cohort.monthly_cohorts(mstart, mend) - objs = objs.where(monthly_start: mstart, monthly_end: mend) - alltime = false + if mstart < mend + Cohort.monthly_cohorts(mstart, mend) # populate monthlys + objs = objs.where(monthly_start: mstart, monthly_end: mend) + end end - objs = objs.where(all_time: alltime).order('group_start DESC') - logger.debug("*** scoped_collection: #{objs.to_sql}") - objs + objs.where(all_time: false).order('group_start DESC') end end index :title => "Monthly Cohorts" do column 'Cohort' do |cc| cc.group_start_str end - column Cohort::TOTAL_LABELS[:registered_users] do |cc| cc.data_val(:registered_users) end + column Cohort::MONTHLY_LABELS[:registered_users] do |cc| cc.data_val(:registered_users) end - column Cohort::TOTAL_LABELS[:first_downloaded_client_at] do |cc| + column Cohort::MONTHLY_LABELS[:first_downloaded_client_at] do |cc| cc.data_val(:first_downloaded_client_at) end column '%' do |cc| cc.data_val(:first_downloaded_client_at, true) end - column Cohort::TOTAL_LABELS[:first_certified_gear_at] do |cc| + column Cohort::MONTHLY_LABELS[:first_certified_gear_at] do |cc| cc.data_val(:first_certified_gear_at) end column '%' do |cc| cc.data_val(:first_certified_gear_at, true) end - column Cohort::TOTAL_LABELS[:music_sessions_user_history] do |cc| - cc.data_val(:music_sessions_user_history) + column Cohort::MONTHLY_LABELS[:music_sessions_user_history_1] do |cc| + cc.data_val(:music_sessions_user_history_1) end - column '%' do |cc| cc.data_val(:music_sessions_user_history, true) end + column '%' do |cc| cc.data_val(:music_sessions_user_history_1, true) end - column Cohort::TOTAL_LABELS[:jam_track_rights] do |cc| + column Cohort::MONTHLY_LABELS[:music_sessions_user_history_2_5] do |cc| + cc.data_val(:music_sessions_user_history_2_5) + end + column '%' do |cc| cc.data_val(:music_sessions_user_history_2_5, true) end + + column Cohort::MONTHLY_LABELS[:music_sessions_user_history_6_] do |cc| + cc.data_val(:music_sessions_user_history_6_) + end + column '%' do |cc| cc.data_val(:music_sessions_user_history_6_, true) end + + column Cohort::MONTHLY_LABELS[:jam_track_rights] do |cc| cc.data_val(:jam_track_rights) end column '%' do |cc| cc.data_val(:jam_track_rights, true) end - column Cohort::TOTAL_LABELS[:recorded_tracks] do |cc| + column Cohort::MONTHLY_LABELS[:recorded_tracks] do |cc| cc.data_val(:recorded_tracks) end column '%' do |cc| cc.data_val(:recorded_tracks, true) end - column Cohort::TOTAL_LABELS[:friendships] do |cc| + column Cohort::MONTHLY_LABELS[:friendships] do |cc| cc.data_val(:friendships) end column '%' do |cc| cc.data_val(:friendships, true) end - column Cohort::TOTAL_LABELS[:invited_users] do |cc| + column Cohort::MONTHLY_LABELS[:invited_users] do |cc| cc.data_val(:invited_users) end column '%' do |cc| cc.data_val(:invited_users, true) end diff --git a/admin/app/models/cohort.rb b/admin/app/models/cohort.rb index fd4e831cf..62b565f68 100644 --- a/admin/app/models/cohort.rb +++ b/admin/app/models/cohort.rb @@ -54,8 +54,13 @@ class Cohort < ActiveRecord::Base .map { |d| [d.year,d.mon,d.day].first(prec) } end + def self.earliest_cohort + starting = User.where(admin: false).order(:created_at).first.created_at + starting = EARLIEST_DATE if starting < EARLIEST_DATE + end + def self.cohort_group_ranges(starting=nil, ending=nil) - starting ||= User.where(admin: false).order(:created_at).first.created_at + starting ||= self.earliest_cohort ending ||= Time.now dates = self.date_tuples([starting.year, starting.month], [ending.year, ending.month]) ranges = [] @@ -70,7 +75,7 @@ class Cohort < ActiveRecord::Base def self.generate_monthly_cohorts(monthly_start, monthly_end) Cohort.delete_all(['all_time = ?',false]) self.cohort_group_ranges.collect do |range| - next if range.first > monthly_start + next if range.first > monthly_end cc = Cohort.new cc.group_start = range.first cc.group_end = range.last @@ -240,6 +245,12 @@ SQL self.all_time ? _all_time! : _monthly! end + def self.alltime_cohorts! + Cohort.generate_all_time_cohorts.each do |cc| + cc._all_time! + end + end + def self.monthly_cohorts(monthly_start, monthly_end) self.generate_monthly_cohorts(monthly_start, monthly_end).compact.each do |cc| cc._monthly! @@ -263,5 +274,17 @@ SQL end end + def self.monthly_starts + self.cohort_group_ranges.collect do |rr| + rr.first.to_s + end + end + + def self.monthly_ends + self.cohort_group_ranges.collect do |rr| + rr.last.to_s + end + end + end