We're also moving the tests, but we're keeping one system test in order to test the controller and the navigation to get to this page. Note we're slightly changing the order of the methods in the component; the order of the instance variables was `user_`, `vote_`, `vote_`, `user_`, which was hard to follow.
98 lines
2.9 KiB
Ruby
98 lines
2.9 KiB
Ruby
class Admin::StatsController < Admin::BaseController
|
|
def show
|
|
@event_types = Ahoy::Event.distinct.order(:name).pluck(:name)
|
|
|
|
@visits = Visit.count
|
|
@debates = Debate.with_hidden.count
|
|
@proposals = Proposal.with_hidden.count
|
|
@comments = Comment.not_valuations.with_hidden.count
|
|
|
|
@debate_votes = Vote.where(votable_type: "Debate").count
|
|
@proposal_votes = Vote.where(votable_type: "Proposal").count
|
|
@comment_votes = Vote.where(votable_type: "Comment").count
|
|
|
|
@votes = Vote.count
|
|
|
|
@user_level_two = User.active.level_two_verified.count
|
|
@user_level_three = User.active.level_three_verified.count
|
|
@verified_users = User.active.level_two_or_three_verified.count
|
|
@unverified_users = User.active.unverified.count
|
|
@users = User.active.count
|
|
|
|
@user_ids_who_voted_proposals = ActsAsVotable::Vote.where(votable_type: "Proposal")
|
|
.distinct
|
|
.count(:voter_id)
|
|
|
|
@user_ids_who_didnt_vote_proposals = @verified_users - @user_ids_who_voted_proposals
|
|
budgets_ids = Budget.where.not(phase: "finished").ids
|
|
@budgets = budgets_ids.size
|
|
@investments = Budget::Investment.where(budget_id: budgets_ids).count
|
|
end
|
|
|
|
def graph
|
|
@name = params[:id]
|
|
@event = params[:event]
|
|
|
|
if params[:event]
|
|
@count = Ahoy::Event.where(name: params[:event]).count
|
|
else
|
|
@count = params[:count]
|
|
end
|
|
end
|
|
|
|
def proposal_notifications
|
|
@proposal_notifications = ProposalNotification.all
|
|
@proposals_with_notifications = @proposal_notifications.select(:proposal_id).distinct.count
|
|
end
|
|
|
|
def direct_messages
|
|
@direct_messages = DirectMessage.count
|
|
@users_who_have_sent_message = DirectMessage.select(:sender_id).distinct.count
|
|
end
|
|
|
|
def budgets
|
|
@budgets = Budget.all
|
|
end
|
|
|
|
def budget_supporting
|
|
@budget = Budget.find(params[:budget_id])
|
|
heading_ids = @budget.heading_ids
|
|
|
|
votes = Vote.where(votable_type: "Budget::Investment").
|
|
includes(:budget_investment).
|
|
where(budget_investments: { heading_id: heading_ids })
|
|
|
|
@vote_count = votes.count
|
|
@user_count = votes.select(:voter_id).distinct.count
|
|
|
|
@voters_in_heading = {}
|
|
@budget.headings.each do |heading|
|
|
@voters_in_heading[heading] = voters_in_heading(heading)
|
|
end
|
|
end
|
|
|
|
def budget_balloting
|
|
@budget = Budget.find(params[:budget_id])
|
|
|
|
authorize! :read_admin_stats, @budget, message: t("admin.stats.budgets.no_data_before_balloting_phase")
|
|
end
|
|
|
|
def polls
|
|
@polls = ::Poll.current
|
|
@participants = ::Poll::Voter.where(poll: @polls)
|
|
end
|
|
|
|
def sdg
|
|
@goals = SDG::Goal.order(:code)
|
|
end
|
|
|
|
private
|
|
|
|
def voters_in_heading(heading)
|
|
Vote.where(votable_type: "Budget::Investment").
|
|
includes(:budget_investment).
|
|
where(budget_investments: { heading_id: heading.id }).
|
|
select("votes.voter_id").distinct.count
|
|
end
|
|
end
|