diff --git a/app/helpers/filters_helper.rb b/app/helpers/filters_helper.rb
index f60946c74..38c15b82b 100644
--- a/app/helpers/filters_helper.rb
+++ b/app/helpers/filters_helper.rb
@@ -95,11 +95,16 @@ module FiltersHelper
end
def collection_year_options
- {
+ years = {
current_collection_start_year.to_s => year_combo(current_collection_start_year),
previous_collection_start_year.to_s => year_combo(previous_collection_start_year),
- archived_collection_start_year.to_s => year_combo(archived_collection_start_year),
}
+
+ if FormHandler.instance.in_crossover_period?
+ return years.merge({ archived_collection_start_year.to_s => year_combo(archived_collection_start_year) })
+ end
+
+ years
end
def collection_year_radio_options
diff --git a/app/helpers/question_view_helper.rb b/app/helpers/question_view_helper.rb
index 66600a25a..acb4fa959 100644
--- a/app/helpers/question_view_helper.rb
+++ b/app/helpers/question_view_helper.rb
@@ -35,7 +35,7 @@ module QuestionViewHelper
return unless resource.instance_of?(Scheme) || resource.instance_of?(Location)
if resource.instance_of?(Scheme)
- [resource.primary_client_group, resource.secondary_client_group].compact.join(", ")
+ "(S#{resource.id}) " + [resource.primary_client_group, resource.secondary_client_group].compact.join(", ")
elsif resource.instance_of?(Location)
resource.name
end
diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb
index 91e645c47..e50161188 100644
--- a/app/models/derived_variables/lettings_log_variables.rb
+++ b/app/models/derived_variables/lettings_log_variables.rb
@@ -28,13 +28,6 @@ module DerivedVariables::LettingsLogVariables
5 => 6,
}.freeze
- def scheme_has_multiple_locations?
- return false unless scheme
-
- scheme_locations_count = scheme.locations.active_in_2_weeks.size
- scheme_locations_count > 1
- end
-
def set_derived_fields!
clear_inapplicable_derived_values!
set_encoded_derived_values!(DEPENDENCIES)
diff --git a/app/models/form.rb b/app/models/form.rb
index 755121473..4336376e6 100644
--- a/app/models/form.rb
+++ b/app/models/form.rb
@@ -11,6 +11,8 @@ class Form
},
2023 => {
submission_deadline: Time.zone.local(2024, 6, 7),
+ new_logs_end_date: Time.zone.local(2024, 7, 22),
+ edit_end_date: Time.zone.local(2024, 7, 22),
},
2024 => {
submission_deadline: Time.zone.local(2025, 6, 6),
diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb
index 82f04512d..eab05c997 100644
--- a/app/models/lettings_log.rb
+++ b/app/models/lettings_log.rb
@@ -709,15 +709,15 @@ class LettingsLog < Log
def scheme_has_multiple_locations?
return false unless scheme
- @scheme_locations_count ||= scheme.locations.active_in_2_weeks.size
- @scheme_locations_count > 1
+ scheme_locations_count ||= scheme.locations.active_in_2_weeks.size
+ scheme_locations_count > 1
end
def scheme_has_large_number_of_locations?
return false unless scheme
- @scheme_locations_count ||= scheme.locations.active_in_2_weeks.size
- @scheme_locations_count > 19
+ scheme_locations_count ||= scheme.locations.active_in_2_weeks.size
+ scheme_locations_count > 19
end
private
diff --git a/app/models/user.rb b/app/models/user.rb
index 27187529a..d25faaa53 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -264,7 +264,8 @@ class User < ApplicationRecord
end
def discard!
- update!(discarded_at: Time.zone.now)
+ self.discarded_at = Time.zone.now
+ save!(validate: false)
end
protected
diff --git a/app/views/bulk_upload_lettings_logs/forms/prepare_your_file_2024.html.erb b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file_2024.html.erb
index 6413d70cb..45ce4b385 100644
--- a/app/views/bulk_upload_lettings_logs/forms/prepare_your_file_2024.html.erb
+++ b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file_2024.html.erb
@@ -26,7 +26,7 @@
If you have reordered the headers, keep the headers in the file.
- <%= govuk_inset_text(text: "You can upload both general needs and supported housing logs in the same file for 2023/24 data.") %>
+ <%= govuk_inset_text(text: "You can upload both general needs and supported housing logs in the same file for 2024/25 data.") %>
Save your file
diff --git a/app/views/layouts/_collection_resources.html.erb b/app/views/layouts/_collection_resources.html.erb
index acdc5cb88..48976088a 100644
--- a/app/views/layouts/_collection_resources.html.erb
+++ b/app/views/layouts/_collection_resources.html.erb
@@ -6,7 +6,9 @@
Collection resources
<% end %>
Use the 2024 to 2025 forms for lettings that start and sales that complete between 1 April 2024 and 31 March 2025.
-Use the 2023 to 2024 forms for lettings that start and sales that complete between 1 April 2023 and 31 March 2024.
+<% if FormHandler.instance.lettings_form_for_start_year(2023) && FormHandler.instance.lettings_form_for_start_year(2023).edit_end_date > Time.zone.today %>
+ Use the 2023 to 2024 forms for lettings that start and sales that complete between 1 April 2023 and 31 March 2024.
+<% end %>
<%= govuk_tabs(title: "Collection resources", classes: %w[app-tab__small-headers]) do |c| %>
<% if FormHandler.instance.lettings_form_for_start_year(2024) && FormHandler.instance.lettings_form_for_start_year(2024).edit_end_date > Time.zone.today %>
diff --git a/package.json b/package.json
index 40fd90036..af927c0f1 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
"html5shiv": "^3.7.3",
"intersection-observer": "^0.12.0",
"mini-css-extract-plugin": "^2.6.0",
- "rails_admin": "3.1.2",
+ "rails_admin": "3.1.3",
"regenerator-runtime": "^0.13.9",
"sass": "^1.49.9",
"sass-loader": "^12.6.0",
diff --git a/spec/features/form/accessible_autocomplete_spec.rb b/spec/features/form/accessible_autocomplete_spec.rb
index cd9780df1..0eb32c4a5 100644
--- a/spec/features/form/accessible_autocomplete_spec.rb
+++ b/spec/features/form/accessible_autocomplete_spec.rb
@@ -55,6 +55,36 @@ RSpec.describe "Accessible Autocomplete" do
it "displays the placeholder text", js: true do
expect(find("#lettings-log-prevloc-field")["placeholder"]).to eq("Start typing to search")
end
+
+ context "and multiple schemes with same names", js: true do
+ let(:lettings_log) { FactoryBot.create(:lettings_log, :sh, assigned_to: user) }
+ let!(:schemes) { FactoryBot.create_list(:scheme, 2, owning_organisation_id: user.organisation_id, service_name: "Scheme", primary_client_group: "O", secondary_client_group: "O") }
+
+ before do
+ schemes.each do |scheme|
+ FactoryBot.create(:location, scheme:)
+ end
+
+ visit("/lettings-logs/#{lettings_log.id}/scheme")
+ end
+
+ it "allows selecting any scheme" do
+ find("#lettings-log-scheme-id-field").click.native.send_keys("s", "c", "h", :enter)
+ expect(find("#lettings-log-scheme-id-field").value).to match(/Scheme/)
+ click_button("Save and continue")
+ first_selected_scheme_id = lettings_log.reload.scheme_id
+ expect(schemes.map(&:id)).to include(first_selected_scheme_id)
+
+ visit("/lettings-logs/#{lettings_log.id}/scheme")
+ find("#lettings-log-scheme-id-field").click.native.send_keys("s", "c", "h", :down, :enter)
+ expect(find("#lettings-log-scheme-id-field").value).to match(/Scheme/)
+ click_button("Save and continue")
+
+ second_selected_scheme_id = lettings_log.reload.scheme_id
+ expect(schemes.map(&:id)).to include(lettings_log.reload.scheme_id)
+ expect(first_selected_scheme_id).not_to eq(second_selected_scheme_id)
+ end
+ end
end
context "when searching schemes" do
diff --git a/spec/features/organisation_spec.rb b/spec/features/organisation_spec.rb
index fde7e7b6d..65f787c2a 100644
--- a/spec/features/organisation_spec.rb
+++ b/spec/features/organisation_spec.rb
@@ -131,6 +131,7 @@ RSpec.describe "User Features" do
let(:number_of_lettings_logs) { LettingsLog.count }
before do
+ allow(FormHandler.instance).to receive(:in_crossover_period?).and_return(true)
visit("/organisations/#{org_id}/lettings-logs")
end
@@ -220,6 +221,7 @@ RSpec.describe "User Features" do
let(:number_of_sales_logs) { SalesLog.count }
before do
+ allow(FormHandler.instance).to receive(:in_crossover_period?).and_return(true)
FactoryBot.create_list(:sales_log, 4, owning_organisation_id: organisation.id)
visit("/organisations/#{org_id}/sales-logs")
end
diff --git a/spec/helpers/filters_helper_spec.rb b/spec/helpers/filters_helper_spec.rb
index fb7bda18e..f04157521 100644
--- a/spec/helpers/filters_helper_spec.rb
+++ b/spec/helpers/filters_helper_spec.rb
@@ -245,12 +245,32 @@ RSpec.describe FiltersHelper do
allow(Time).to receive(:now).and_return(Time.zone.local(2023, 5, 1))
end
- it "has the correct options" do
- expect(collection_year_options).to eq(
- {
- "2023" => "2023/24", "2022" => "2022/23", "2021" => "2021/22"
- },
- )
+ context "and in crossover period" do
+ before do
+ allow(FormHandler.instance).to receive(:in_crossover_period?).and_return(true)
+ end
+
+ it "has the correct options" do
+ expect(collection_year_options).to eq(
+ {
+ "2023" => "2023/24", "2022" => "2022/23", "2021" => "2021/22"
+ },
+ )
+ end
+ end
+
+ context "and not in crossover period" do
+ before do
+ allow(FormHandler.instance).to receive(:in_crossover_period?).and_return(false)
+ end
+
+ it "has the correct options" do
+ expect(collection_year_options).to eq(
+ {
+ "2023" => "2023/24", "2022" => "2022/23"
+ },
+ )
+ end
end
end
diff --git a/spec/helpers/question_view_helper_spec.rb b/spec/helpers/question_view_helper_spec.rb
index cf45a94be..af7282cb3 100644
--- a/spec/helpers/question_view_helper_spec.rb
+++ b/spec/helpers/question_view_helper_spec.rb
@@ -151,10 +151,10 @@ RSpec.describe QuestionViewHelper do
end
context "when resource is a scheme" do
- let(:resource) { build(:scheme, primary_client_group: "O", secondary_client_group: "E") }
+ let(:resource) { build(:scheme, primary_client_group: "O", secondary_client_group: "E", id: 2_736_276) }
it "returns the primary and secondary client groups" do
- expect(answer_option_hint(resource)).to eq("Homeless families with support needs, People with mental health problems")
+ expect(answer_option_hint(resource)).to eq("(S2736276) Homeless families with support needs, People with mental health problems")
end
end
diff --git a/spec/models/organisation_spec.rb b/spec/models/organisation_spec.rb
index d00f79039..3964923f0 100644
--- a/spec/models/organisation_spec.rb
+++ b/spec/models/organisation_spec.rb
@@ -298,4 +298,25 @@ RSpec.describe Organisation, type: :model do
expect(organisation.status).to be(:active)
end
end
+
+ describe "discard" do
+ let(:organisation) { create(:organisation) }
+ let!(:user) { create(:user, organisation:) }
+ let!(:scheme) { create(:scheme, owning_organisation: organisation) }
+
+ context "when merged organisation is discarded" do
+ before do
+ organisation.merge_date = Time.zone.yesterday
+ organisation.absorbing_organisation_id = create(:organisation).id
+ organisation.save!
+ end
+
+ it "discards all of the organisation resources" do
+ organisation.discard!
+ expect(organisation.status).to eq(:deleted)
+ expect(user.reload.status).to eq(:deleted)
+ expect(scheme.reload.status).to eq(:deleted)
+ end
+ end
+ end
end
diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb
index 989a8e334..f0440f530 100644
--- a/spec/models/sales_log_spec.rb
+++ b/spec/models/sales_log_spec.rb
@@ -173,7 +173,7 @@ RSpec.describe SalesLog, type: :model do
end
describe "#search_by" do
- let!(:sales_log_to_search) { create(:sales_log, :completed) }
+ let!(:sales_log_to_search) { create(:sales_log, :completed, id: 193_285) }
it "allows searching using ID" do
result = described_class.search_by(sales_log_to_search.id.to_s)
diff --git a/yarn.lock b/yarn.lock
index 0cb18e71c..e59022be7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4703,10 +4703,10 @@ quick-lru@^5.1.1:
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-rails_admin@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rails_admin/-/rails_admin-3.1.2.tgz#00d6d85b7a00c89c69b5dbf5f1f4620702626504"
- integrity sha512-uIQHN27lBvlav6s5ppmOtVxKN8GIxyhHuDFc9ZbvWgFknR4zgG4/xEUGzKzQ9R34AEsfZ/t8cZbvtvgj+aXp4A==
+rails_admin@3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/rails_admin/-/rails_admin-3.1.3.tgz#1da3f2214876f4ffd3a1db01452c28a8f7d4d989"
+ integrity sha512-79CBB2BMB3fSGPz1P8eNxCboHVlkBWBaxKxfo4QwCAFxsA3WAjfM0MeWUtGHI8Mn8XEZxCdEDz9oYlvlBpMtng==
dependencies:
"@babel/runtime" "^7.16.7"
"@fortawesome/fontawesome-free" ">=5.15.0 <7.0.0"