Skip to content

Commit 2f1f18c

Browse files
committed
Refactor ready_for_vaccinator?
This removes the usage of `ready_for_vaccinator?` with a database query on the registration status to avoid unnecessary queries to the database.
1 parent f4534ca commit 2f1f18c

File tree

5 files changed

+33
-77
lines changed

5 files changed

+33
-77
lines changed

app/components/app_session_actions_component.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,19 @@ def ready_for_vaccinator_row
124124

125125
counts_by_programme =
126126
session.programmes.index_with do |programme|
127-
patient_sessions.count do
128-
it.ready_for_vaccinator?(session_date:, programme:)
129-
end
127+
patient_sessions
128+
.where(
129+
PatientSession::RegistrationStatus
130+
.for_patient_session
131+
.where(status: %w[attending completed], session_date:)
132+
.arel
133+
.exists
134+
)
135+
.count do |patient_session|
136+
patient_session.patient.consent_given_and_safe_to_vaccinate?(
137+
programme:
138+
)
139+
end
130140
end
131141

132142
return nil if counts_by_programme.values.all?(&:zero?)

app/controllers/sessions/record_controller.rb

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,30 @@ def show
1818
@session_date = @session.todays_session_date
1919

2020
scope =
21-
@session.patient_sessions.preload_for_status.in_programmes(
22-
@session.programmes
23-
)
21+
@session
22+
.patient_sessions
23+
.preload_for_status
24+
.in_programmes(@session.programmes)
25+
.where(
26+
PatientSession::RegistrationStatus
27+
.for_patient_session
28+
.where(status: %w[attending completed], session_date: @session_date)
29+
.arel
30+
.exists
31+
)
32+
33+
scope = @form.apply(scope)
2434

2535
patient_sessions =
26-
@form.apply(scope) do |filtered_scope|
27-
filtered_scope.select do
28-
it.ready_for_vaccinator?(session_date: @session_date)
36+
scope.select do |patient_session|
37+
patient_session.programmes.any? do |programme|
38+
patient_session.patient.consent_given_and_safe_to_vaccinate?(
39+
programme:
40+
)
2941
end
3042
end
3143

32-
if patient_sessions.is_a?(Array)
33-
@pagy, @patient_sessions = pagy_array(patient_sessions)
34-
else
35-
@pagy, @patient_sessions = pagy(patient_sessions)
36-
end
44+
@pagy, @patient_sessions = pagy_array(patient_sessions)
3745

3846
render layout: "full"
3947
end

app/forms/search_form.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ def apply(scope, session_date: nil, programme: nil)
4040

4141
scope = scope.search_by_nhs_number(nil) if missing_nhs_number.present?
4242

43-
scope = scope.order_by_name
44-
45-
scope = yield(scope) if block_given?
46-
4743
if (status = consent_status).present?
4844
scope =
4945
scope.where(
@@ -91,6 +87,6 @@ def apply(scope, session_date: nil, programme: nil)
9187
)
9288
end
9389

94-
scope
90+
scope.order_by_name
9591
end
9692
end

app/models/patient_session.rb

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -154,19 +154,6 @@ def todays_attendance
154154
end
155155
end
156156

157-
def ready_for_vaccinator?(session_date:, programme: nil)
158-
if register_status(session_date:).unknown? ||
159-
register_status(session_date:).not_attending?
160-
return false
161-
end
162-
163-
programmes_to_check = programme ? [programme] : programmes
164-
165-
programmes_to_check.any? do
166-
patient.consent_given_and_safe_to_vaccinate?(programme: it)
167-
end
168-
end
169-
170157
def next_activity(programme:)
171158
return :report if patient.vaccination_status(programme:).vaccinated?
172159

spec/models/patient_session_spec.rb

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -69,51 +69,6 @@
6969
end
7070
end
7171

72-
describe "#ready_for_vaccinator?" do
73-
subject(:ready_for_vaccinator?) do
74-
patient_session.ready_for_vaccinator?(session_date:)
75-
end
76-
77-
let(:session_date) { session.session_dates.first }
78-
79-
it { should be(false) }
80-
81-
context "when attending the session" do
82-
let(:patient_session) do
83-
create(:patient_session, :in_attendance, session:)
84-
end
85-
86-
it { should be(false) }
87-
end
88-
89-
context "when attending the session and consent given and triaged as safe to vaccinate" do
90-
let(:patient_session) do
91-
create(
92-
:patient_session,
93-
:in_attendance,
94-
:consent_given_triage_not_needed,
95-
session:
96-
)
97-
end
98-
99-
it { should be(true) }
100-
101-
context "when already vaccinated" do
102-
let(:patient_session) do
103-
create(
104-
:patient_session,
105-
:in_attendance,
106-
:consent_given_triage_not_needed,
107-
:vaccinated,
108-
session:
109-
)
110-
end
111-
112-
it { should be(false) }
113-
end
114-
end
115-
end
116-
11772
describe "#next_activity" do
11873
subject { patient_session.next_activity(programme:) }
11974

0 commit comments

Comments
 (0)