Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions app/components/app_activity_log_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ def initialize(team:, patient: nil, patient_session: nil)
@patient_sessions =
patient_session ? [patient_session] : patient.patient_sessions

@attendance_records =
(patient || patient_session).attendance_records.includes(:location)

@consents =
@patient.consents.includes(
:consent_form,
Expand Down Expand Up @@ -52,9 +55,6 @@ def initialize(team:, patient: nil, patient_session: nil)
@pre_screenings =
(patient || patient_session).pre_screenings.includes(:performed_by)

@session_attendances =
(patient || patient_session).session_attendances.includes(:location)

@triages = @patient.triages.includes(:performed_by)

@vaccination_records =
Expand All @@ -78,7 +78,7 @@ def initialize(team:, patient: nil, patient_session: nil)
:patient_sessions,
:patient_specific_directions,
:pre_screenings,
:session_attendances,
:attendance_records,
:triages,
:vaccination_records

Expand Down Expand Up @@ -382,19 +382,19 @@ def vaccination_events
end

def attendance_events
session_attendances.map do |session_attendance|
attendance_records.map do |attendance_record|
title =
(
if session_attendance.attending?
if attendance_record.attending?
"Attended session"
else
"Absent from session"
end
)

title += " at #{session_attendance.location.name}"
title += " at #{attendance_record.location.name}"

{ title:, at: session_attendance.created_at }
{ title:, at: attendance_record.created_at }
end
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,16 @@ def initialize(patient_session, context:, programmes: [])
delegate :academic_year, to: :session

def can_register_attendance?
session_attendance =
SessionAttendance.new(
attendance_record =
AttendanceRecord.new(
patient:,
session_date: SessionDate.new(session:, value: Date.current)
location: session.location,
date: Date.current
)

policy(session_attendance).new?
attendance_record.session = session

policy(attendance_record).new?
end

def patient_path
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/testing/teams_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def destroy

log_destroy(AccessLogEntry.where(patient_id: patient_ids))
log_destroy(ArchiveReason.where(patient_id: patient_ids))
log_destroy(AttendanceRecord.where(patient_id: patient_ids))
log_destroy(ConsentNotification.where(patient_id: patient_ids))
log_destroy(GillickAssessment.where(patient_id: patient_ids))
log_destroy(Note.where(patient_id: patient_ids))
Expand All @@ -45,7 +46,6 @@ def destroy
log_destroy(SchoolMove.where(patient_id: patient_ids))
log_destroy(SchoolMove.where(team:))
log_destroy(SchoolMoveLogEntry.where(patient_id: patient_ids))
log_destroy(SessionAttendance.where(patient_id: patient_ids))
log_destroy(VaccinationRecord.where(patient_id: patient_ids))

log_destroy(SessionDate.where(session: sessions))
Expand Down
61 changes: 61 additions & 0 deletions app/controllers/patient_sessions/attendances_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# frozen_string_literal: true

class PatientSessions::AttendancesController < PatientSessions::BaseController
before_action :set_session_date
before_action :set_attendance_record

def edit
end

def update
@attendance_record.assign_attributes(attendance_record_params)

if @attendance_record.attending.nil?
@attendance_record.destroy!
else
@attendance_record.save!
end => success

StatusUpdater.call(patient: @patient)

if success
name = @patient.full_name

flash[:info] = if @attendance_record.attending?
t("attendance_flash.present", name:)
elsif @attendance_record.attending.nil?
t("attendance_flash.not_registered", name:)
else
t("attendance_flash.absent", name:)
end

redirect_to session_patient_programme_path(
@session,
@patient,
@patient_session.programmes.first
)
else
render :edit, status: :unprocessable_content
end
end

private

def set_attendance_record
attendance_record =
@patient.attendance_records.find_or_initialize_by(
location: @session.location,
date: @session_date.value
)

attendance_record.session = @session

@attendance_record = authorize attendance_record
end

def attendance_record_params
params
.expect(attendance_record: :attending)
.tap { it[:attending] = nil if it[:attending] == "not_registered" }
end
end

This file was deleted.

2 changes: 1 addition & 1 deletion app/controllers/patients_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def set_patient
:school,
consents: %i[parent patient],
parent_relationships: :parent,
patient_sessions: %i[location session_attendances],
patient_sessions: %i[location attendance_records],
vaccination_records: :programme
).find(params[:id])
end
Expand Down
36 changes: 21 additions & 15 deletions app/controllers/sessions/register_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class Sessions::RegisterController < ApplicationController

before_action :set_session
before_action :set_patient_search_form, only: :show
before_action :set_session_date, only: :create
before_action :set_patient, only: :create
before_action :set_patient_session, only: :create

layout "full"

Expand All @@ -25,17 +25,24 @@ def show
end

def create
session_attendance =
ActiveRecord::Base.transaction do
record = authorize @patient_session.todays_attendance
record.update!(attending: params[:status] == "present")
StatusUpdater.call(patient: @patient_session.patient)
record
end
attendance_record =
@patient.attendance_records.find_or_initialize_by(
location: @session.location,
date: @session_date.value
)

attendance_record.session = @session

authorize attendance_record

ActiveRecord::Base.transaction do
attendance_record.update!(attending: params[:status] == "present")
StatusUpdater.call(patient: @patient)
end

name = @patient_session.patient.full_name
name = @patient.full_name

flash[:info] = if session_attendance.attending?
flash[:info] = if attendance_record.attending?
t("attendance_flash.present", name:)
else
t("attendance_flash.absent", name:)
Expand All @@ -50,12 +57,11 @@ def set_session
@session = policy_scope(Session).find_by!(slug: params[:session_slug])
end

def set_patient
@patient = policy_scope(Patient).find(params[:patient_id])
def set_session_date
@session_date = @session.session_dates.find_by!(value: Date.current)
end

def set_patient_session
@patient_session =
PatientSession.find_by!(patient: @patient, session: @session)
def set_patient
@patient = policy_scope(Patient).find(params[:patient_id])
end
end
15 changes: 5 additions & 10 deletions app/lib/generate/vaccination_records.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,16 @@ def self.call(...) = new(...).call
attr_reader :config, :team, :programme, :session, :administered

def create_vaccinations
session_attendances = []
attendance_records = []
vaccination_records = []

random_patient_sessions.each do |patient_session|
patient = patient_session.patient
session = patient_session.session

unless SessionAttendance.joins(:session_date).exists?(
patient:,
session_date: {
session:
}
)
session_attendances << FactoryBot.build(
:session_attendance,
unless AttendanceRecord.exists?(patient:, location: session.location)
attendance_records << FactoryBot.build(
:attendance_record,
:present,
patient:,
session:
Expand All @@ -57,7 +52,7 @@ def create_vaccinations
)
end

SessionAttendance.import!(session_attendances)
AttendanceRecord.import!(attendance_records)
VaccinationRecord.import!(vaccination_records)

StatusUpdater.call(patient: vaccination_records.map(&:patient))
Expand Down
8 changes: 4 additions & 4 deletions app/lib/patient_merger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ def call

patient_to_destroy.archive_reasons.destroy_all

patient_to_destroy.attendance_records.update_all(
patient_id: patient_to_keep.id
)

patient_to_destroy.consent_notifications.update_all(
patient_id: patient_to_keep.id
)
Expand Down Expand Up @@ -63,10 +67,6 @@ def call
patient_id: patient_to_keep.id
)

patient_to_destroy.session_attendances.update_all(
patient_id: patient_to_keep.id
)

patient_to_destroy.session_notifications.update_all(
patient_id: patient_to_keep.id
)
Expand Down
10 changes: 5 additions & 5 deletions app/lib/status_generator/registration.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# frozen_string_literal: true

class StatusGenerator::Registration
def initialize(patient:, session:, session_attendance:, vaccination_records:)
def initialize(patient:, session:, attendance_record:, vaccination_records:)
@patient = patient
@session = session
@session_attendance = session_attendance
@attendance_record = attendance_record
@vaccination_records = vaccination_records
end

Expand All @@ -22,7 +22,7 @@ def status

private

attr_reader :patient, :session, :session_attendance, :vaccination_records
attr_reader :patient, :session, :attendance_record, :vaccination_records

delegate :academic_year, to: :session

Expand All @@ -37,10 +37,10 @@ def status_should_be_completed?
end

def status_should_be_attending?
session_attendance&.attending
attendance_record&.attending
end

def status_should_be_not_attending?
session_attendance&.attending == false
attendance_record&.attending == false
end
end
Loading