VRFS-2916 monthly tweaking

This commit is contained in:
Jonathan Kolyer 2015-03-17 05:31:04 +00:00
parent 4a0aa25785
commit a577a6e43e
2 changed files with 51 additions and 23 deletions

View File

@ -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

View File

@ -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