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



30
31
32
# File 'app/controllers/manage/dashboard_controller.rb', line 30

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



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

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



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

def confirmation_activity_data
  render json: activity_chart_data(["Confirmations", "Denials"], "day", 3.week.ago..Time.zone.now)
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



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/controllers/manage/dashboard_controller.rb', line 65

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



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/controllers/manage/dashboard_controller.rb', line 50

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
# File 'app/controllers/manage/dashboard_controller.rb', line 12

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



16
17
18
19
20
21
22
23
24
# File 'app/controllers/manage/dashboard_controller.rb', line 16

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



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

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