Class: Manage::DashboardController

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

Instance Method Summary collapse

Methods inherited from ApplicationController

#json_request?, #limit_write_access_to_admins, #logged_in, #require_admin_or_limited_admin, #require_admin_or_limited_admin_or_event_tracking, #response_view_or_errors

Instance Method Details

#application_activity_dataObject



45
46
47
# File 'app/controllers/manage/dashboard_controller.rb', line 45

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



59
60
61
62
63
# File 'app/controllers/manage/dashboard_controller.rb', line 59

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

#checkin_activity_dataObject



33
34
35
# File 'app/controllers/manage/dashboard_controller.rb', line 33

def checkin_activity_data
  render json: activity_chart_data(["Checked In", "Boarded Bus"], "hour", 3.days.ago..Time.zone.now)
end

#confirmation_activity_dataObject



37
38
39
40
41
42
43
# File 'app/controllers/manage/dashboard_controller.rb', line 37

def confirmation_activity_data
  where_filter = nil
  if params[:school_id]
    where_filter = { school_id: params[:school_id] }
  end
  render json: activity_chart_data(["Confirmations", "Denials"], "day", 3.week.ago..Time.zone.now, where_filter)
end

#indexObject



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

def index
end

#map_dataObject



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

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

#schools_applied_dataObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'app/controllers/manage/dashboard_controller.rb', line 80

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
  query = Questionnaire.joins(:school).group(:acc_status, "schools.name", "schools.questionnaire_count").order("schools.questionnaire_count DESC")
  if School.where("questionnaire_count >= 5").count > 0
    query = query.where("schools.questionnaire_count >= 5")
  end
  result = query.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



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/controllers/manage/dashboard_controller.rb', line 65

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



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

def todays_activity_data
  where_filter = nil
  types = ["Applications", "Confirmations", "Denials"]
  if params[:school_id]
    where_filter = { school_id: params[:school_id] }
  else
    types << "Non-Applied Users"
  end
  render json: activity_chart_data(types, "hour", Time.zone.today.beginning_of_day..Time.zone.today.end_of_day, where_filter)
end

#todays_stats_dataObject



23
24
25
26
27
28
29
30
31
# File 'app/controllers/manage/dashboard_controller.rb', line 23

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



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

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.without_questionnaire.count
  total_stats_data["Non-RIT Applications"] = total_count - rit_count
  total_stats_data["RIT Applications"] = rit_count
  render json: total_stats_data
end