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"