Skip to content

Commit 57d0a43

Browse files
committed
Refactor Reports::OfflineSessionExporter
This refactors the class to work on a per-patient basis rather than patient sessions. Jira-Issue: MAV-1822
1 parent fe1ba4e commit 57d0a43

File tree

1 file changed

+25
-46
lines changed

1 file changed

+25
-46
lines changed

app/lib/reports/offline_session_exporter.rb

Lines changed: 25 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def add_vaccinations_sheet(package)
4848
workbook.add_worksheet(name: "Vaccinations") do |sheet|
4949
sheet.add_row(columns.map { it.to_s.upcase })
5050

51-
patient_sessions.find_each do |patient_session|
52-
rows(patient_session:).each { |row| row.add_to(sheet:, cached_styles:) }
51+
patients.find_each do |patient|
52+
rows(patient:).each { |row| row.add_to(sheet:, cached_styles:) }
5353
end
5454

5555
sheet.sheet_view.pane do |pane|
@@ -128,34 +128,29 @@ def columns
128128
]
129129
end
130130

131-
def patient_sessions
132-
@patient_sessions ||=
131+
def patients
132+
@patients ||=
133133
session
134-
.patient_sessions
134+
.patients
135135
.includes(
136-
patient: [
137-
:consent_statuses,
138-
:school,
139-
{ parent_relationships: :parent },
140-
{
141-
vaccination_records: %i[
142-
batch
143-
performed_by_user
144-
vaccine
145-
programme
146-
session
147-
]
148-
}
149-
],
150-
session: [{ programmes: :vaccines }, :location]
136+
:consent_statuses,
137+
:school,
138+
parent_relationships: :parent,
139+
vaccination_records: %i[
140+
batch
141+
performed_by_user
142+
vaccine
143+
programme
144+
session
145+
]
151146
)
152147
.order_by_name
153148
end
154149

155150
def consents
156151
@consents ||=
157152
Consent
158-
.where(academic_year:, patient_id: patient_sessions.select(:patient_id))
153+
.where(academic_year:, patient_id: patients.select(:id))
159154
.not_invalidated
160155
.includes(:parent, patient: { parent_relationships: :parent })
161156
.group_by(&:patient_id)
@@ -177,12 +172,7 @@ def gillick_assessments
177172
GillickAssessment
178173
.select("DISTINCT ON (patient_id, programme_id) gillick_assessments.*")
179174
.joins(:session)
180-
.where(
181-
session_dates: {
182-
session:
183-
},
184-
patient_id: patient_sessions.select(:patient_id)
185-
)
175+
.where(session_dates: { session: }, patient_id: patients.select(:id))
186176
.order(:patient_id, :programme_id, created_at: :desc)
187177
.includes(:performed_by)
188178
.group_by(&:patient_id)
@@ -197,7 +187,7 @@ def patient_specific_directions
197187
.select(
198188
"DISTINCT ON (patient_id, programme_id) patient_specific_directions.*"
199189
)
200-
.where(academic_year:, patient_id: patient_sessions.select(:patient_id))
190+
.where(academic_year:, patient_id: patients.select(:id))
201191
.not_invalidated
202192
.order(:patient_id, :programme_id, created_at: :desc)
203193
.includes(:created_by)
@@ -211,7 +201,7 @@ def triages
211201
@triages ||=
212202
Triage
213203
.select("DISTINCT ON (patient_id, programme_id) triages.*")
214-
.where(academic_year:, patient_id: patient_sessions.select(:patient_id))
204+
.where(academic_year:, patient_id: patients.select(:id))
215205
.not_invalidated
216206
.order(:patient_id, :programme_id, created_at: :desc)
217207
.includes(:performed_by)
@@ -221,11 +211,7 @@ def triages
221211
end
222212
end
223213

224-
def rows(patient_session:)
225-
patient = patient_session.patient
226-
session = patient_session.session
227-
academic_year = patient_session.academic_year
228-
214+
def rows(patient:)
229215
session
230216
.programmes_for(patient:)
231217
.flat_map do |programme|
@@ -255,31 +241,27 @@ def rows(patient_session:)
255241
if vaccination_records.any?
256242
vaccination_records.map do |vaccination_record|
257243
Row.new(columns, style: row_style) do |row|
258-
add_patient_cells(row, patient_session:, programme:)
244+
add_patient_cells(row, patient:, programme:)
259245
add_existing_row_cells(row, vaccination_record:)
260246
end
261247
end
262248
else
263249
[
264250
Row.new(columns, style: row_style) do |row|
265-
add_patient_cells(row, patient_session:, programme:)
266-
add_new_row_cells(row, patient_session:, programme:)
251+
add_patient_cells(row, patient:, programme:)
252+
add_new_row_cells(row, patient:, programme:)
267253
end
268254
]
269255
end
270256
end
271257
end
272258

273-
def add_patient_cells(row, patient_session:, programme:)
274-
patient = patient_session.patient
275-
session = patient_session.session
276-
259+
def add_patient_cells(row, patient:, programme:)
277260
gillick_assessment = gillick_assessments.dig(patient.id, programme.id)
278261
grouped_consents = consents.dig(patient.id, programme.id) || []
279262
patient_specific_direction =
280263
patient_specific_directions.dig(patient.id, programme.id)
281264
triage = triages.dig(patient.id, programme.id)
282-
academic_year = session.academic_year
283265

284266
row[:organisation_code] = organisation.ods_code
285267
row[:person_forename] = patient.given_name
@@ -388,10 +370,7 @@ def add_existing_row_cells(row, vaccination_record:)
388370
end
389371
end
390372

391-
def add_new_row_cells(row, patient_session:, programme:)
392-
patient = patient_session.patient
393-
location = patient_session.session.location
394-
373+
def add_new_row_cells(row, patient:, programme:)
395374
row[:vaccinated] = Cell.new(allowed_values: %w[Y N])
396375
row[:date_of_vaccination] = Cell.new(type: :date)
397376
row[:school_name] = school_name(location:, patient:)

0 commit comments

Comments
 (0)