Skip to content

Commit 9cb7452

Browse files
authored
Merge pull request #4803 from nhsuk/fix-timeline-compare-options
Fix comparing timeline of patient to another patient from import
2 parents 2998d29 + 6df4224 commit 9cb7452

3 files changed

Lines changed: 23 additions & 20 deletions

File tree

app/controllers/inspect/timeline/patients_controller.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,17 @@ def sample_patient(compare_option)
9696

9797
case compare_option
9898
when "class_import"
99-
class_import = params[:compare_option_class_import]
100-
class_import.patients.where.not(id: @patient.id).sample
99+
class_import = ClassImport.find(params[:compare_option_class_import])
100+
id = class_import.patients.where.not(id: @patient.id).pluck(:id).sample
101+
Patient.find(id)
101102
when "cohort_import"
102-
cohort_import = params[:compare_option_cohort_import]
103-
cohort_import.patients.where.not(id: @patient.id).sample
103+
cohort_import = CohortImport.find(params[:compare_option_cohort_import])
104+
id = cohort_import.patients.where.not(id: @patient.id).pluck(:id).sample
105+
Patient.find(id)
104106
when "session"
105107
session = Session.find(params[:compare_option_session])
106-
session.patients.where.not(id: @patient.id).sample
108+
id = session.patients.where.not(id: @patient.id).pluck(:id).sample
109+
Patient.find(id)
107110
when "manual_entry"
108111
begin
109112
Patient.find(params[:manual_patient_id])

app/lib/timeline_records.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ def render_timeline(*event_names, truncate_columns: false)
157157
end
158158

159159
def additional_events(patient)
160-
patient_imports = patient_events(patient)[:class_imports]
161-
patient_sessions = patient_events(patient)[:sessions]
160+
patient_imports = @patient_events[:class_imports]
161+
patient_sessions = @patient_events[:sessions]
162162
patient_locations =
163163
Location.joins(:sessions).where(sessions: { id: patient_sessions })
164164
class_imports = ClassImport.where(location_id: patient_locations)
@@ -168,22 +168,22 @@ def additional_events(patient)
168168
{
169169
class_imports:
170170
class_imports
171-
.group_by(&:location_id)
172-
.transform_values { |imports| imports.map(&:id) },
171+
.pluck(:location_id, :id)
172+
.group_by(&:first)
173+
.transform_values { |ids| ids.map(&:last) },
173174
cohort_imports:
174-
patient
175-
.teams
176-
.flat_map(&:cohort_imports)
177-
.map(&:id)
178-
.reject { |id| patient_events(patient)[:cohort_imports].include?(id) }
175+
CohortImport
176+
.where(team_id: patient.teams.select(:id))
177+
.where.not(id: @patient_events[:cohort_imports])
178+
.pluck(:id)
179179
}
180180
end
181181

182182
def patient_events(patient)
183183
{
184-
class_imports: patient.class_imports.map(&:id),
185-
cohort_imports: patient.cohort_imports.map(&:id),
186-
sessions: patient.sessions.map(&:id)
184+
class_imports: patient.class_imports.pluck(:id),
185+
cohort_imports: patient.cohort_imports.pluck(:id),
186+
sessions: patient.sessions.pluck(:id)
187187
}
188188
end
189189

spec/lib/timeline_records_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@
517517
it "returns cohort imports that the patient is not in, for teams that the patient is in" do
518518
result = timeline.additional_events(patient)
519519
expect(result[:cohort_imports]).to eq(
520-
cohort_imports_without_patient.map(&:id)
520+
cohort_imports_without_patient.pluck(:id)
521521
)
522522
end
523523
end
@@ -547,14 +547,14 @@
547547

548548
it "returns an array of class import IDs" do
549549
result = timeline.patient_events(patient)
550-
expect(result[:class_imports]).to eq(class_imports.map(&:id))
550+
expect(result[:class_imports]).to eq(class_imports.pluck(:id))
551551
end
552552
end
553553

554554
context "with cohort imports" do
555555
it "returns an array of cohort import IDs" do
556556
result = timeline.patient_events(patient)
557-
expect(result[:cohort_imports]).to eq(cohort_imports.map(&:id))
557+
expect(result[:cohort_imports]).to eq(cohort_imports.pluck(:id))
558558
end
559559
end
560560
end

0 commit comments

Comments
 (0)