Class: Manage::DashboardController

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

Instance Method Summary collapse

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
88
89
90
91
# 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
  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



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