Skip to content

Commit 59fd87e

Browse files
authored
Merge pull request #3999 from nhsuk/academic-year-model
Add convenience methods for working with academic years
2 parents 85f8206 + 6a82104 commit 59fd87e

13 files changed

Lines changed: 130 additions & 26 deletions

app/jobs/send_vaccination_confirmations_job.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def perform
1212
.kept
1313
.where.not(confirmation_sent_at: nil)
1414
.maximum(:created_at) || 24.hours.ago
15-
academic_year = Date.current.academic_year
15+
academic_year = AcademicYear.current
1616

1717
VaccinationRecord
1818
.includes(patient: { consents: :parent })

app/lib/academic_year.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module AcademicYear
4+
class << self
5+
def all = (first..last).to_a
6+
7+
def current = Date.current.academic_year
8+
9+
# 2024 is the year we ran Mavis. We support earlier years only in the case
10+
# where the service is running in an environment prior to 2024 (only used
11+
# when changing the date in tests).
12+
def first = [2024, current].min
13+
14+
def last = current
15+
end
16+
end

app/lib/unscheduled_sessions_factory.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class UnscheduledSessionsFactory
44
def initialize(academic_year: nil)
5-
@academic_year = academic_year || Date.current.academic_year
5+
@academic_year = academic_year || AcademicYear.current
66
end
77

88
def call

app/models/immunisation_import_row.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,8 +573,7 @@ def validate_date_of_vaccination
573573
end
574574

575575
if programme&.flu? &&
576-
date_of_vaccination.to_date.academic_year !=
577-
Date.current.academic_year
576+
date_of_vaccination.to_date.academic_year != AcademicYear.current
578577
errors.add(
579578
date_of_vaccination.header,
580579
"must be in the current academic year"

app/models/organisation.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def generic_clinic
9191
end
9292

9393
def generic_clinic_session
94-
academic_year = Date.current.academic_year
94+
academic_year = AcademicYear.current
9595
location = generic_clinic
9696

9797
sessions

app/models/session.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class Session < ApplicationRecord
6060
scope :today, -> { has_date(Date.current) }
6161

6262
scope :for_current_academic_year,
63-
-> { where(academic_year: Date.current.academic_year) }
63+
-> { where(academic_year: AcademicYear.current) }
6464

6565
scope :unscheduled,
6666
-> do

app/models/vaccination_record.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ def academic_year
182182
end
183183

184184
def performed_this_academic_year?
185-
academic_year == Date.current.academic_year
185+
academic_year == AcademicYear.current
186186
end
187187

188188
def show_this_academic_year?
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: true
2+
3+
class Integer
4+
def to_academic_year_date_range
5+
start_date = Date.new(self, 9, 1)
6+
end_date = Date.new(self + 1, 8, 31)
7+
start_date..end_date
8+
end
9+
end

lib/generate/cohort_imports.rb

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,13 @@ def build_patient
180180
end
181181
end
182182

183-
def date_of_birth_for_year(
184-
year_group,
185-
academic_year: Date.current.academic_year
186-
)
187-
academic_year = academic_year.to_s
188-
year_group = year_group.to_i
189-
183+
def date_of_birth_for_year(year_group, academic_year: AcademicYear.current)
190184
if year_group < 12
191-
start_date = Date.new(academic_year.to_i - (year_group.to_i + 5), 9, 1)
192-
end_date = Date.new(academic_year.to_i - (year_group.to_i + 4), 8, 31)
193-
rand(start_date..end_date)
185+
rand(
186+
year_group.to_birth_academic_year(
187+
academic_year:
188+
).to_academic_year_date_range
189+
)
194190
else
195191
raise "Unknown year group: #{year_group}"
196192
end

spec/factories/patients.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090

9191
date_of_birth do
9292
if year_group
93-
academic_year_start = Date.new(Date.current.academic_year, 9, 1)
93+
academic_year_start = Date.new(AcademicYear.current, 9, 1)
9494
start_date = academic_year_start - (5 + year_group).years
9595
end_date = start_date + 1.year - 1.day
9696
Faker::Date.between(from: end_date, to: start_date)

0 commit comments

Comments
 (0)