Class: Manage::DashboardController

Inherits:
ApplicationController show all
Defined in:
app/controllers/manage/dashboard_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#limit_admin_access, #logged_in

Instance Method Details

#application_activity_dataObject



27
28
29
# File 'app/controllers/manage/dashboard_controller.rb', line 27

def application_activity_data
  render json: activity_chart_data(["Non-RIT Applications", "RIT Applications", "Non-Applied Users"], "day", 3.week.ago..Time.zone.now)
end

#application_distribution_dataObject



41
42
43
44
45
# File 'app/controllers/manage/dashboard_controller.rb', line 41

def application_distribution_data
  counts = Questionnaire.group(:acc_status).count
  results = Questionnaire::POSSIBLE_ACC_STATUS.map { |acc_status, status_title| [status_title, counts[acc_status] || 0] }
  render json: results
end

#confirmation_activity_dataObject



23
24
25
# File 'app/controllers/manage/dashboard_controller.rb', line 23

def confirmation_activity_data
  render json: activity_chart_data(["Confirmations", "Denials"], "day", 3.week.ago..Time.zone.now)
end

#indexObject



2
3
# File 'app/controllers/manage/dashboard_controller.rb', line 2

def index
end

#map_dataObject



5
6
7
# File 'app/controllers/manage/dashboard_controller.rb', line 5

def map_data
  @schools = School.where("questionnaire_count", 1..Float::INFINITY).select([:city, :state, :questionnaire_count])
end

#schools_applied_dataObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'app/controllers/manage/dashboard_controller.rb', line 62

def schools_applied_data
  counted_schools = {
    "pending" => {},
    "denied" => {},
    "rsvp_denied" => {},
    "late_waitlist" => {},
    "waitlist" => {},
    "accepted" => {},
    "rsvp_confirmed" => {}
  }
  # Temporary fix
  # result = Questionnaire.joins(:school).group(:acc_status, "schools.name").where("schools.questionnaire_count >= 5").order("schools.questionnaire_count DESC").order("schools.name ASC").count
  result = Questionnaire.joins(:school).group(:acc_status, "schools.name", "schools.questionnaire_count").order("schools.questionnaire_count DESC").where("schools.questionnaire_count >= 5").count
  result.each do |group, count|
    counted_schools[group[0]][group[1]] = count
  end
  render json: [
    { name: "RSVP Confirmed", data: counted_schools["rsvp_confirmed"] },
    { name: "Accepted", data: counted_schools["accepted"] },
    { name: "Waitlisted", data: counted_schools["waitlist"] },
    { name: "Late Waitlisted", data: counted_schools["late_waitlist"] },
    { name: "RSVP Denied", data: counted_schools["rsvp_denied"] },
    { name: "Denied", data: counted_schools["denied"] },
    { name: "Pending", data: counted_schools["pending"] }
  ]
end

#schools_confirmed_dataObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/controllers/manage/dashboard_controller.rb', line 47

def schools_confirmed_data
  schools = Questionnaire.joins(:school).group('schools.name').where("acc_status = 'rsvp_confirmed'").order("schools.name ASC").count
  schools_riding = Questionnaire.joins(:school).group('schools.name').where("acc_status = 'rsvp_confirmed' AND riding_bus AND schools.bus_list_id").count
  schools = schools.map do |name, count|
    bus_count_row = schools_riding.select { |school_bus_name, _| school_bus_name == name }
    bus_count = bus_count_row ? bus_count_row[name] || 0 : 0
    count_without_bus = count - bus_count
    [name, count_without_bus, bus_count]
  end
  render json: [
    { name: "Not riding bus", data: schools.sort_by { |_, no_bus, bus| [bus, no_bus] }.reverse },
    { name: "Riding bus", data: schools_riding }
  ]
end

#todays_activity_dataObject



9
10
11
# File 'app/controllers/manage/dashboard_controller.rb', line 9

def todays_activity_data
  render json: activity_chart_data(["Applications", "Confirmations", "Denials", "Non-Applied Users"], "hour", Time.zone.today.beginning_of_day..Time.zone.today.end_of_day)
end

#todays_stats_dataObject



13
14
15
16
17
18
19
20
21
# File 'app/controllers/manage/dashboard_controller.rb', line 13

def todays_stats_data
  date_min = Time.zone.today.beginning_of_day
  render json: {
    "Applications" => Questionnaire.where("created_at >= :date_min", date_min: date_min).count,
    "Confirmations" => Questionnaire.where("acc_status = \"rsvp_confirmed\" AND acc_status_date >= :date_min", date_min: date_min).count,
    "Denials" => Questionnaire.where("acc_status = \"rsvp_denied\" AND acc_status_date >= :date_min", date_min: date_min).count,
    "Non-Applied Users" => User.without_questionnaire.where("users.created_at >= :date_min", date_min: date_min).count
  }
end

#user_distribution_dataObject



31
32
33
34
35
36
37
38
39
# File 'app/controllers/manage/dashboard_controller.rb', line 31

def user_distribution_data
  total_stats_data = {}
  total_count = Questionnaire.count
  rit_count = Questionnaire.where("school_id = \"2304\"").count
  total_stats_data["Non-Applied Users"] = User.where(admin: false).count - total_count
  total_stats_data["Non-RIT Applications"] = total_count - rit_count
  total_stats_data["RIT Applications"] = rit_count
  render json: total_stats_data
end