Skip to content

Commit 939c515

Browse files
committed
Add patients to clinic when inviting
When inviting patients to a clinic, we can no longer assume that they will already be in the clinic due to the previous commits which doesn't add patients to the community clinic. Instead we can add patients to the clinic at the point of invitation. Jira-Issue: MAV-1430
1 parent 3ddc8fb commit 939c515

File tree

5 files changed

+58
-41
lines changed

5 files changed

+58
-41
lines changed

app/controllers/sessions/invite_to_clinic_controller.rb

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
class Sessions::InviteToClinicController < ApplicationController
44
before_action :set_session
55
before_action :set_generic_clinic_session
6+
before_action :set_patient_sessions_to_invite
67
before_action :set_invitations_to_send
78

89
skip_after_action :verify_policy_scoped
@@ -13,6 +14,11 @@ def edit
1314

1415
def update
1516
if @session.school?
17+
PatientSession.import!(
18+
@patient_sessions_to_invite,
19+
on_duplicate_key_ignore: true
20+
)
21+
1622
SendClinicInitialInvitationsJob.perform_later(
1723
@generic_clinic_session,
1824
school: @session.location,
@@ -44,36 +50,51 @@ def set_session
4450

4551
def set_generic_clinic_session
4652
@generic_clinic_session =
47-
(
48-
if @session.clinic?
49-
@session
50-
else
51-
@session.team.generic_clinic_session(
52-
academic_year: @session.academic_year
53-
)
54-
end
55-
)
53+
if @session.clinic?
54+
@session
55+
else
56+
@session.team.generic_clinic_session(
57+
academic_year: @session.academic_year
58+
)
59+
end
5660
end
5761

58-
def set_invitations_to_send
62+
def set_patient_sessions_to_invite
5963
session_date = @generic_clinic_session.next_date(include_today: true)
6064

61-
@invitations_to_send =
62-
if @session.school?
63-
SendClinicInitialInvitationsJob
64-
.new
65-
.patient_sessions(
66-
@generic_clinic_session,
67-
school: @session.location,
68-
programmes: @session.programmes.to_a,
69-
session_date:
65+
if @session.school?
66+
patient_sessions_in_school = @session.patient_sessions.includes(:patient)
67+
68+
patient_sessions_in_clinic =
69+
patient_sessions_in_school.map do |patient_session|
70+
PatientSession.find_or_initialize_by(
71+
patient: patient_session.patient,
72+
session: @generic_clinic_session
7073
)
71-
.length
72-
else
73-
SendClinicSubsequentInvitationsJob
74-
.new
75-
.patient_sessions(@session, session_date:)
76-
.length
77-
end
74+
end
75+
76+
programmes = @session.programmes.to_a
77+
78+
@patient_sessions_to_invite =
79+
patient_sessions_in_clinic
80+
.reject { it.session_notifications.any? }
81+
.select do |patient_session|
82+
SendClinicInitialInvitationsJob.new.should_send_notification?(
83+
patient_session:,
84+
programmes:,
85+
session_date:
86+
)
87+
end
88+
else
89+
@patient_sessions_to_invite =
90+
SendClinicSubsequentInvitationsJob.new.patient_sessions(
91+
@session,
92+
session_date:
93+
)
94+
end
95+
end
96+
97+
def set_invitations_to_send
98+
@invitations_to_send = @patient_sessions_to_invite.length
7899
end
79100
end

app/jobs/send_clinic_initial_invitations_job.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,8 @@ def patient_sessions(session, school:, programmes:, session_date:)
3535
)
3636
.where(patient: { school: })
3737
.reject { it.session_notifications.any? }
38-
.select do
39-
should_send_notification?(
40-
patient_session: it,
41-
programmes:,
42-
session_date:
43-
)
38+
.select do |patient_session|
39+
should_send_notification?(patient_session:, programmes:, session_date:)
4440
end
4541
end
4642
end

app/jobs/send_clinic_subsequent_invitations_job.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ def patient_sessions(session, session_date:)
2424

2525
session
2626
.patient_sessions
27-
.eager_load(:patient)
28-
.preload(
27+
.joins(:patient)
28+
.includes_programmes
29+
.includes(
2930
:session_notifications,
3031
patient: %i[consents parents vaccination_records]
3132
)

app/models/team.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,12 @@ def generic_clinic_session(academic_year:)
8282
location = locations.generic_clinic.first
8383

8484
sessions
85-
.includes(:location, :programmes, :session_dates)
85+
.includes(
86+
:location,
87+
:location_programme_year_groups,
88+
:programmes,
89+
:session_dates
90+
)
8691
.create_with(programmes:)
8792
.find_or_create_by!(academic_year:, location:)
8893
end

spec/features/manage_school_sessions_spec.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,6 @@ def given_my_team_is_running_an_hpv_vaccination_programme
100100
.generic_clinic_session(academic_year: AcademicYear.current)
101101
.session_dates
102102
.create!(value: 1.month.from_now.to_date)
103-
104-
create(
105-
:patient_session,
106-
patient: @patient,
107-
session: @team.generic_clinic_session(academic_year: AcademicYear.current)
108-
)
109103
end
110104

111105
def when_i_go_to_todays_sessions_as_a_nurse

0 commit comments

Comments
 (0)