-
Notifications
You must be signed in to change notification settings - Fork 6
/
reports_controller.rb
85 lines (72 loc) · 2.3 KB
/
reports_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# frozen_string_literal: true
class ReportsController < ApplicationController
include SendCsv
before_action :ensure_authorized
layout 'print_reports', only: %w[events_by_time per_event per_user per_room single_user_printable volunteer_events]
def index; end
def events_by_time
@runs =
convention
.runs
.where(
event_id:
convention
.events
.joins(:event_category)
.where.not(event_categories: { name: 'Filler event' })
.active
.select(:id)
)
.order(:starts_at)
.includes(:event, :rooms)
end
def per_event
@events =
convention
.events
.regular
.active
.where.not(event_category_id: volunteer_event_category_ids)
.includes(:event_category, team_members: :user_con_profile, runs: [:rooms, { signups: :user_con_profile }])
.order_by_title
end
def per_user
@user_con_profiles =
convention
.user_con_profiles
.joins(:ticket)
.includes(signups: [:event, { run: :rooms }])
.sort_by { |ucp| ucp.name_inverted.downcase }
end
def per_room
@rooms = convention.rooms.includes(runs: %i[event rooms]).sort_by { |room| room.name.downcase }
end
def single_user_printable
@subject_profile =
convention.user_con_profiles.includes(signups: [:event, { run: :rooms }]).find(params[:user_con_profile_id])
team_member_events_scope = TeamMember.where(user_con_profile_id: @subject_profile.id)
@events =
Event
.where(id: team_member_events_scope.select(:event_id))
.where.not(event_category_id: volunteer_event_category_ids)
.active
.includes(:event_category, team_members: :user_con_profile, runs: [:rooms, { signups: :user_con_profile }])
.order_by_title
end
def volunteer_events
@events =
convention
.events
.where(event_category_id: volunteer_event_category_ids)
.active
.includes(runs: [signups: :user_con_profile])
.order_by_title
end
private
def ensure_authorized
authorize convention, :view_reports?
end
def volunteer_event_category_ids
@volunteer_event_category_ids ||= convention.event_categories.where("name ilike '%volunteer%'").pluck(:id)
end
end