implement report
This commit is contained in:
51
app/logical/reports/janitor_trials.rb
Normal file
51
app/logical/reports/janitor_trials.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
module Reports
|
||||
class JanitorTrials
|
||||
class Janitor
|
||||
attr_reader :trial
|
||||
|
||||
def initialize(trial)
|
||||
@trial = trial
|
||||
end
|
||||
|
||||
def user
|
||||
trial.user
|
||||
end
|
||||
|
||||
def since
|
||||
3.months.ago
|
||||
end
|
||||
|
||||
def approval_count
|
||||
@approval_count ||= Post.where("approver_id = ? and created_at >= ?", user.id, since).count
|
||||
end
|
||||
|
||||
def deleted_count
|
||||
Post.where("approver_id = ? and created_at >= ? and is_deleted = true", user.id, since).count
|
||||
end
|
||||
|
||||
def percentile_25_score
|
||||
ActiveRecord::Base.select_value_sql("select percentile_cont(0.25) within group (order by score) from posts where created_at >= ? and approver_id = ?", since, user.id).to_i
|
||||
end
|
||||
|
||||
def percentile_50_score
|
||||
ActiveRecord::Base.select_value_sql("select percentile_cont(0.50) within group (order by score) from posts where created_at >= ? and approver_id = ?", since, user.id).to_i
|
||||
end
|
||||
|
||||
def rating_e_percentage
|
||||
100 * Post.where("approver_id = ? and created_at >= ? and rating = 'e'", user.id, since).count.to_f / [approval_count, 1].max
|
||||
end
|
||||
|
||||
def rating_q_percentage
|
||||
100 * Post.where("approver_id = ? and created_at >= ? and rating = 'q'", user.id, since).count.to_f / [approval_count, 1].max
|
||||
end
|
||||
|
||||
def rating_s_percentage
|
||||
100 * Post.where("approver_id = ? and created_at >= ? and rating = 's'", user.id, since).count.to_f / [approval_count, 1].max
|
||||
end
|
||||
end
|
||||
|
||||
def janitors
|
||||
JanitorTrial.where(status: "active").to_a.map {|x| Janitor.new(x)}
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user