diff --git a/.erb-lint.yml b/.erb_lint.yml similarity index 100% rename from .erb-lint.yml rename to .erb_lint.yml diff --git a/.rubocop.yml b/.rubocop.yml index 7bc65bbd8..4a54015a2 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,7 @@ require: - rubocop-performance + +plugins: - rubocop-rails - rubocop-rspec @@ -28,3 +30,6 @@ Rails/UnknownEnv: - development - test - review + +RSpec/IndexedLet: + Enabled: false diff --git a/.ruby-version b/.ruby-version index 9cec7165a..f9892605c 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.1.6 +3.4.4 diff --git a/Dockerfile b/Dockerfile index 281fd6ca2..88a7e6a79 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.1.6-alpine3.20 as base +FROM ruby:3.4.4-alpine3.20 as base WORKDIR /app @@ -10,7 +10,7 @@ RUN apk add --update --no-cache tzdata && \ # build-base: compilation tools for bundle # yarn: node package manager # postgresql-dev: postgres driver and libraries -RUN apk add --no-cache build-base=0.5-r3 busybox=1.36.1-r29 nodejs=20.15.1-r0 yarn=1.22.22-r0 bash=5.2.26-r0 libpq-dev +RUN apk add --no-cache build-base=0.5-r3 busybox=1.36.1-r29 nodejs=20.15.1-r0 yarn=1.22.22-r0 bash=5.2.26-r0 libpq-dev yaml-dev linux-headers # Bundler version should be the same version as what the Gemfile.lock was bundled with RUN gem install bundler:2.6.4 --no-document diff --git a/Gemfile b/Gemfile index f6e7fdac5..91ed6c8a8 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby "3.1.6" +ruby "3.4.4" # Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main' gem "rails", "~> 7.2.2" @@ -51,7 +51,7 @@ gem "paper_trail-globalid" gem "pundit" # Request rate limiting -gem "rack", ">= 2.2.6.3" +gem "rack", "~> 3.1.20" gem "rack-attack" gem "redis", "~> 4.8" # Receive exceptions and configure alerts @@ -72,9 +72,12 @@ gem "sidekiq-cron" gem "unread" # Pinning versions to address vulnerabilities -gem "nokogiri", "~> 1.18.9" +gem "nokogiri", "~> 1.19.1" gem "thor", "~> 1.4.0" +# Pinning until activesupport is updated to v8.1.2 +gem "connection_pool", "~> 2.5" + group :development, :test do # Check gems for known vulnerabilities gem "bundler-audit" @@ -95,7 +98,7 @@ group :development do # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md gem "erb_lint", require: false gem "rack-mini-profiler", "~> 3.3.0" - gem "rubocop-govuk", "4.3.0", require: false + gem "rubocop-govuk", "5.2.0", require: false gem "rubocop-performance", require: false gem "rubocop-rails", require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 34bfd3067..4277b9499 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -78,7 +78,7 @@ GEM tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) + ast (2.4.3) auto_strip_attributes (2.6.0) activerecord (>= 4.0) aws-eventstream (1.4.0) @@ -113,15 +113,15 @@ GEM thread_safe (~> 0.3, >= 0.3.1) base64 (0.3.0) bcrypt (3.1.20) - benchmark (0.4.1) - better_html (2.0.2) - actionview (>= 6.0) - activesupport (>= 6.0) + benchmark (0.5.0) + better_html (2.2.0) + actionview (>= 7.0) + activesupport (>= 7.0) ast (~> 2.0) erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.2.2) + bigdecimal (4.0.1) bindex (0.8.1) bootsnap (1.18.3) msgpack (~> 1.2) @@ -151,7 +151,7 @@ GEM coderay (1.1.3) coercible (1.0.0) descendants_tracker (~> 0.0.1) - concurrent-ruby (1.3.5) + concurrent-ruby (1.3.6) connection_pool (2.5.3) crack (1.0.0) bigdecimal @@ -184,12 +184,12 @@ GEM drb (2.2.3) dumb_delegator (1.0.0) encryptor (3.0.0) - erb_lint (0.5.0) + erb_lint (0.9.0) activesupport better_html (>= 2.0.1) parser (>= 2.7.1.4) rainbow - rubocop + rubocop (>= 1) smart_properties erubi (1.13.1) et-orbi (1.2.11) @@ -232,7 +232,7 @@ GEM hashdiff (1.1.0) html-attributes-utils (1.0.2) activesupport (>= 6.1.4.4) - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) ice_nine (0.11.2) iniparse (1.5.0) @@ -261,13 +261,15 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) + language_server-protocol (3.17.0.5) launchy (2.5.2) addressable (~> 2.8) + lint_roller (1.1.0) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) - loofah (2.24.0) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -279,7 +281,9 @@ GEM matrix (0.4.2) method_source (1.1.0) mini_mime (1.1.5) - minitest (5.25.5) + minitest (6.0.2) + drb (~> 2.0) + prism (~> 1.5) msgpack (1.7.2) multipart-post (2.4.1) nested_form (0.3.2) @@ -295,13 +299,13 @@ GEM net-smtp (0.5.1) net-protocol nio4r (2.7.4) - nokogiri (1.18.9-arm64-darwin) + nokogiri (1.19.1-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.9-x86_64-darwin) + nokogiri (1.19.1-x86_64-darwin) racc (~> 1.4) - nokogiri (1.18.9-x86_64-linux-gnu) + nokogiri (1.19.1-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.9-x86_64-linux-musl) + nokogiri (1.19.1-x86_64-linux-musl) racc (~> 1.4) notifications-ruby-client (6.0.0) jwt (>= 1.5, < 3) @@ -317,10 +321,10 @@ GEM paper_trail-globalid (0.2.0) globalid paper_trail (>= 3.0.0) - parallel (1.24.0) + parallel (1.27.0) parallel_tests (4.5.1) parallel - parser (3.3.0.5) + parser (3.3.10.2) ast (~> 2.4.1) racc pg (1.5.5) @@ -328,6 +332,7 @@ GEM pp (0.6.2) prettyprint prettyprint (0.2.0) + prism (1.9.0) propshaft (0.8.0) actionpack (>= 7.0.0) activesupport (>= 7.0.0) @@ -349,7 +354,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (3.1.18) + rack (3.1.20) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-mini-profiler (3.3.1) @@ -375,7 +380,7 @@ GEM activesupport (= 7.2.2.2) bundler (>= 1.15.0) railties (= 7.2.2.2) - rails-dom-testing (2.2.0) + rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) @@ -409,7 +414,7 @@ GEM redis (4.8.1) redis-client (0.22.1) connection_pool - regexp_parser (2.9.0) + regexp_parser (2.11.3) reline (0.6.0) io-console (~> 0.5) request_store (1.7.0) @@ -439,34 +444,45 @@ GEM rspec-mocks (~> 3.12) rspec-support (~> 3.12) rspec-support (3.13.1) - rubocop (1.25.0) + rubocop (1.82.1) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.15.1, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.48.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.15.1) - parser (>= 3.0.1.1) - rubocop-govuk (4.3.0) - rubocop (= 1.25.0) - rubocop-ast (= 1.15.1) - rubocop-rails (= 2.13.2) - rubocop-rake (= 0.6.0) - rubocop-rspec (= 2.7.0) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.49.0) + parser (>= 3.3.7.2) + prism (~> 1.7) + rubocop-capybara (2.22.1) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-govuk (5.2.0) + rubocop (= 1.82.1) + rubocop-ast (= 1.49.0) + rubocop-capybara (= 2.22.1) + rubocop-rails (= 2.34.3) + rubocop-rake (= 0.7.1) + rubocop-rspec (= 3.9.0) rubocop-performance (1.19.1) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) - rubocop-rails (2.13.2) + rubocop-rails (2.34.3) activesupport (>= 4.2.0) + lint_roller (~> 1.1) rack (>= 1.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-rake (0.6.0) - rubocop (~> 1.0) - rubocop-rspec (2.7.0) - rubocop (~> 1.19) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.44.0, < 2.0) + rubocop-rake (0.7.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1) + rubocop-rspec (3.9.0) + lint_roller (~> 1.1) + rubocop (~> 1.81) ruby-openai (7.0.1) event_stream_parser (>= 0.3.0, < 2.0.0) faraday (>= 1) @@ -514,7 +530,9 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uk_postcode (2.1.8) - unicode-display_width (2.5.0) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.2.0) unread (0.14.0) activerecord (>= 6.1) uri (1.0.4) @@ -563,6 +581,7 @@ DEPENDENCIES capybara capybara-lockstep capybara-screenshot + connection_pool (~> 2.5) cssbundling-rails devise devise_two_factor_authentication @@ -579,7 +598,7 @@ DEPENDENCIES json-schema listen (~> 3.3) method_source (~> 1.1) - nokogiri (~> 1.18.9) + nokogiri (~> 1.19.1) notifications-ruby-client overcommit (>= 0.37.0) paper_trail (~> 15.2) @@ -591,7 +610,7 @@ DEPENDENCIES pry-byebug puma (~> 6.4) pundit - rack (>= 2.2.6.3) + rack (~> 3.1.20) rack-attack rack-mini-profiler (~> 3.3.0) rails (~> 7.2.2) @@ -600,7 +619,7 @@ DEPENDENCIES redis (~> 4.8) roo rspec-rails - rubocop-govuk (= 4.3.0) + rubocop-govuk (= 5.2.0) rubocop-performance rubocop-rails ruby-openai @@ -621,7 +640,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.1.6p260 + ruby 3.4.4p0 BUNDLED WITH 2.6.4 diff --git a/app/components/create_log_actions_component.html.erb b/app/components/create_log_actions_component.html.erb index 3eab0f871..130072ec0 100644 --- a/app/components/create_log_actions_component.html.erb +++ b/app/components/create_log_actions_component.html.erb @@ -14,17 +14,33 @@ These tools can only be seen and used in testing environments.
<%= govuk_button_link_to create_test_log_href, class: "govuk-button" do %> - New test log + New <%= current_collection_year_label %> test log <% end %> + <% if FeatureToggle.allow_future_form_use? %> + <%= govuk_button_link_to create_next_year_test_log_href, class: "govuk-button" do %> + New <%= next_collection_year_label %> test log + + <% end %> + <% end %> <%= govuk_button_link_to create_setup_test_log_href, class: "govuk-button" do %> - New test log (setup only) + New <%= current_collection_year_label %> test log (setup only) <% end %> + <% if FeatureToggle.allow_future_form_use? %> + <%= govuk_button_link_to create_next_year_setup_test_log_href, class: "govuk-button" do %> + New <%= next_collection_year_label %> test log (setup only) + + <% end %> + <% end %> <%= govuk_button_link_to create_test_bulk_upload_href(2025), class: "govuk-button govuk-button--secondary" do %> 25/26 BU test file diff --git a/app/components/create_log_actions_component.rb b/app/components/create_log_actions_component.rb index ae240bc91..c618c01fc 100644 --- a/app/components/create_log_actions_component.rb +++ b/app/components/create_log_actions_component.rb @@ -1,5 +1,6 @@ class CreateLogActionsComponent < ViewComponent::Base include Rails.application.routes.url_helpers + include CollectionTimeHelper attr_reader :bulk_upload, :user, :log_type @@ -38,10 +39,26 @@ class CreateLogActionsComponent < ViewComponent::Base send("create_test_#{log_type}_log_path") end + def create_next_year_test_log_href + send("create_next_year_test_#{log_type}_log_path") + end + def create_setup_test_log_href send("create_setup_test_#{log_type}_log_path") end + def create_next_year_setup_test_log_href + send("create_next_year_setup_test_#{log_type}_log_path") + end + + def current_collection_year_label + "#{current_collection_start_year - 2000}/#{current_collection_end_year - 2000}" + end + + def next_collection_year_label + "#{next_collection_start_year - 2000}/#{next_collection_end_year - 2000}" + end + def create_test_bulk_upload_href(year) send("create_#{year}_test_#{log_type}_bulk_upload_path") end diff --git a/app/controllers/csv_downloads_controller.rb b/app/controllers/csv_downloads_controller.rb index 25f70026f..e2a7fb4f1 100644 --- a/app/controllers/csv_downloads_controller.rb +++ b/app/controllers/csv_downloads_controller.rb @@ -5,7 +5,7 @@ class CsvDownloadsController < ApplicationController @csv_download = CsvDownload.find(params[:id]) authorize @csv_download - return render "errors/download_link_expired" if @csv_download.expired? + render "errors/download_link_expired" if @csv_download.expired? end def download diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index 38a89b682..cd2a6ca5a 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -190,7 +190,7 @@ private end def resolve_logs! - if @log&.unresolved && @log.location.present? && @log.scheme.present? && @log&.resolve! + if @log&.unresolved && @log.location.present? && @log.scheme.present? && @log.resolve! unresolved_logs_count_for_user = current_user.lettings_logs.unresolved.assigned_to(current_user).count flash.now[:notice] = helpers.flash_notice_for_resolved_logs(unresolved_logs_count_for_user) end diff --git a/app/controllers/lettings_logs_filters_controller.rb b/app/controllers/lettings_logs_filters_controller.rb index 9180737d3..c6ea0ba70 100644 --- a/app/controllers/lettings_logs_filters_controller.rb +++ b/app/controllers/lettings_logs_filters_controller.rb @@ -52,8 +52,6 @@ class LettingsLogsFiltersController < ApplicationController end end -private - def lettings_session_filters params["years"] = [params["years"]] if params["years"].present? lettings_filter_manager.session_filters diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 32f7b2d0c..f1878e9ab 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -105,7 +105,7 @@ private answer_options = { "" => "Select an option" } if current_user.support? - Organisation.all.each do |organisation| + Organisation.all.find_each do |organisation| date = @merge_request.merge_date || Time.zone.today answer_options[organisation.id] = organisation.name(date:) end diff --git a/app/controllers/sales_logs_filters_controller.rb b/app/controllers/sales_logs_filters_controller.rb index ffa4f4bc4..70a4c2b49 100644 --- a/app/controllers/sales_logs_filters_controller.rb +++ b/app/controllers/sales_logs_filters_controller.rb @@ -53,8 +53,6 @@ class SalesLogsFiltersController < ApplicationController end end -private - def sales_session_filters params["years"] = [params["years"]] if params["years"].present? sales_filter_manager.session_filters diff --git a/app/controllers/test_data_controller.rb b/app/controllers/test_data_controller.rb index d9315d68c..5298a4fc7 100644 --- a/app/controllers/test_data_controller.rb +++ b/app/controllers/test_data_controller.rb @@ -10,6 +10,13 @@ class TestDataController < ApplicationController redirect_to lettings_log_path(log) end + def create_next_year_test_lettings_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:lettings_log, :completed, assigned_to: current_user, ppostcode_full: "SW1A 1AA", manual_address_entry_selected: false, startdate: generate_different_date_within_collection_year(Time.zone.local(next_collection_start_year, 4, 1))) + redirect_to lettings_log_path(log) + end + def create_setup_test_lettings_log return render_not_found unless FeatureToggle.create_test_logs_enabled? @@ -17,6 +24,13 @@ class TestDataController < ApplicationController redirect_to lettings_log_path(log) end + def create_next_year_setup_test_lettings_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:lettings_log, :setup_completed, assigned_to: current_user, manual_address_entry_selected: false, startdate: generate_different_date_within_collection_year(Time.zone.local(next_collection_start_year, 4, 1))) + redirect_to lettings_log_path(log) + end + %w[2025 2026].each do |year| define_method("create_#{year}_test_lettings_bulk_upload") do return render_not_found unless FeatureToggle.create_test_logs_enabled? @@ -47,6 +61,13 @@ class TestDataController < ApplicationController redirect_to sales_log_path(log) end + def create_next_year_test_sales_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:sales_log, :completed, assigned_to: current_user, manual_address_entry_selected: false, saledate: generate_different_date_within_collection_year(Time.zone.local(next_collection_start_year, 4, 1))) + redirect_to sales_log_path(log) + end + def create_setup_test_sales_log return render_not_found unless FeatureToggle.create_test_logs_enabled? @@ -54,6 +75,13 @@ class TestDataController < ApplicationController redirect_to sales_log_path(log) end + def create_next_year_setup_test_sales_log + return render_not_found unless FeatureToggle.create_test_logs_enabled? + + log = FactoryBot.create(:sales_log, :shared_ownership_setup_complete, assigned_to: current_user, manual_address_entry_selected: false, saledate: generate_different_date_within_collection_year(Time.zone.local(next_collection_start_year, 4, 1))) + redirect_to sales_log_path(log) + end + %w[2025 2026].each do |year| define_method("create_#{year}_test_sales_bulk_upload") do return render_not_found unless FeatureToggle.create_test_logs_enabled? diff --git a/app/helpers/bulk_upload/lettings_log_to_csv.rb b/app/helpers/bulk_upload/lettings_log_to_csv.rb index c483f4754..18a524b0d 100644 --- a/app/helpers/bulk_upload/lettings_log_to_csv.rb +++ b/app/helpers/bulk_upload/lettings_log_to_csv.rb @@ -2,12 +2,10 @@ class BulkUpload::LettingsLogToCsv attr_reader :log, :line_ending, :col_offset, :overrides def initialize(log:, line_ending: "\n", col_offset: 1, overrides: {}) - # rubocop:disable Rails/HelperInstanceVariable @log = log @line_ending = line_ending @col_offset = col_offset @overrides = overrides - # rubocop:enable Rails/HelperInstanceVariable end def row_prefix @@ -144,40 +142,40 @@ class BulkUpload::LettingsLogToCsv log.tenancylength, log.age1 || overrides[:age1], - log.sex1, + log.sexrab1, log.ethnic, log.nationality_all_group, log.ecstat1, relat_number(log.relat2), log.age2 || overrides[:age2], - log.sex2, + log.sexrab2, log.ecstat2, # 50 relat_number(log.relat3), log.age3 || overrides[:age3], - log.sex3, + log.sexrab3, log.ecstat3, relat_number(log.relat4), log.age4 || overrides[:age4], - log.sex4, + log.sexrab4, log.ecstat4, relat_number(log.relat5), log.age5 || overrides[:age5], # 60 - log.sex5, + log.sexrab5, log.ecstat5, relat_number(log.relat6), log.age6 || overrides[:age6], - log.sex6, + log.sexrab6, log.ecstat6, relat_number(log.relat7), log.age7 || overrides[:age7], - log.sex7, + log.sexrab7, log.ecstat7, # 70 relat_number(log.relat8), log.age8 || overrides[:age8], - log.sex8, + log.sexrab8, log.ecstat8, log.armedforces, log.leftreg, @@ -224,7 +222,7 @@ class BulkUpload::LettingsLogToCsv chr, cap, accessible_register, - log.referral, + log.owning_organisation.la? ? log.referral_register : nil, net_income_known, log.incfreq, log.earnings, @@ -239,18 +237,10 @@ class BulkUpload::LettingsLogToCsv log.supcharg, log.hbrentshortfall, log.tshortfall, + log.gender_same_as_sex1, # 130 - log.sexrab1, # 130 - log.sexrab2, - log.sexrab3, - log.sexrab4, - log.sexrab5, - log.sexrab6, - log.sexrab7, - log.sexrab8, - log.gender_same_as_sex1, log.gender_description1, - log.gender_same_as_sex2, # 140 + log.gender_same_as_sex2, log.gender_description2, log.gender_same_as_sex3, log.gender_description3, @@ -258,12 +248,16 @@ class BulkUpload::LettingsLogToCsv log.gender_description4, log.gender_same_as_sex5, log.gender_description5, - log.gender_same_as_sex6, + log.gender_same_as_sex6, # 140 + log.gender_description6, - log.gender_same_as_sex7, # 150 + log.gender_same_as_sex7, log.gender_description7, log.gender_same_as_sex8, - log.gender_description8, # 153 + log.gender_description8, + log.owning_organisation.prp? ? log.referral_register : nil, + log.referral_noms, + log.referral_org, # 148 ] end diff --git a/app/helpers/bulk_upload/sales_log_to_csv.rb b/app/helpers/bulk_upload/sales_log_to_csv.rb index 1171f481f..30833c1c7 100644 --- a/app/helpers/bulk_upload/sales_log_to_csv.rb +++ b/app/helpers/bulk_upload/sales_log_to_csv.rb @@ -2,12 +2,10 @@ class BulkUpload::SalesLogToCsv attr_reader :log, :line_ending, :col_offset, :overrides def initialize(log:, line_ending: "\n", col_offset: 1, overrides: {}) - # rubocop:disable Rails/HelperInstanceVariable @log = log @line_ending = line_ending @col_offset = col_offset @overrides = overrides - # rubocop:enable Rails/HelperInstanceVariable end def row_prefix diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index ad7dac6a9..1e8c0eef4 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -16,10 +16,13 @@ module CollectionTimeHelper Time.zone.local(collection_start_year_for_date(date), 4, 1) end - def date_mid_collection_year_formatted(date) + def date_mid_collection_year(date) relevant_year = date.nil? ? current_collection_start_year : collection_start_year_for_date(date) - example_date = Date.new(relevant_year, 9, 13) - example_date.to_formatted_s(:govuk_date_number_month) + Date.new(relevant_year, 9, 13) + end + + def date_mid_collection_year_formatted(date) + date_mid_collection_year(date).to_formatted_s(:govuk_date_number_month) end def current_collection_start_date diff --git a/app/helpers/data_sharing_agreement_helper.rb b/app/helpers/data_sharing_agreement_helper.rb index 79296e6dc..5ab5e3272 100644 --- a/app/helpers/data_sharing_agreement_helper.rb +++ b/app/helpers/data_sharing_agreement_helper.rb @@ -67,7 +67,7 @@ module DataSharingAgreementHelper "12.2. For #{@org_name}: Name: #{@dpo_name}, Postal Address: #{@org_address}, E-mail address: #{@dpo_email}, Telephone number: #{@org_phone}" end end -# rubocop:enable Rails/HelperInstanceVariable + # rubocop:enable Rails/HelperInstanceVariable private diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb index ded09d54c..c2ce87310 100644 --- a/app/helpers/form_page_error_helper.rb +++ b/app/helpers/form_page_error_helper.rb @@ -5,7 +5,7 @@ module FormPageErrorHelper end def remove_duplicate_page_errors(lettings_log) - lettings_log.errors.group_by(&:message).each do |_, errors| + lettings_log.errors.group_by(&:message).each_value do |errors| next if errors.size == 1 errors.shift diff --git a/app/helpers/form_page_helper.rb b/app/helpers/form_page_helper.rb index 74e75e572..98b9bb8d5 100644 --- a/app/helpers/form_page_helper.rb +++ b/app/helpers/form_page_helper.rb @@ -1,4 +1,6 @@ module FormPageHelper + include CollectionTimeHelper + def action_href(log, page_id, referrer = "check_answers") send("#{log.log_type}_#{page_id}_path", log, referrer:) end @@ -46,4 +48,11 @@ module FormPageHelper page.skip_href(log) || send(log.form.next_page_redirect_path(page, log, current_user, ignore_answered: true), log) end end + + def date_hint(question, log) + [ + question.hint_text.presence, + question.date_example_override(log) || "For example, #{date_mid_collection_year_formatted(log.startdate).tr(' ', '/')}", + ].compact.join("

").html_safe + end end diff --git a/app/helpers/locations_helper.rb b/app/helpers/locations_helper.rb index 9ef74ca51..b8a111b0c 100644 --- a/app/helpers/locations_helper.rb +++ b/app/helpers/locations_helper.rb @@ -91,7 +91,8 @@ module LocationsHelper def toggle_location_link(location) return govuk_button_link_to "Deactivate this location", scheme_location_new_deactivation_path(location.scheme, location), warning: true if location.active? || location.deactivates_in_a_long_time? - return govuk_button_link_to "Reactivate this location", scheme_location_new_reactivation_path(location.scheme, location) if location.deactivated? && !location.deactivated_by_scheme? + + govuk_button_link_to "Reactivate this location", scheme_location_new_reactivation_path(location.scheme, location) if location.deactivated? && !location.deactivated_by_scheme? end def delete_location_link(location) diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 3d9577ce9..6755b4646 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -101,13 +101,13 @@ module MergeRequestsHelper attribute = page if attribute.nil? return nil unless value_exists?(merge_request, attribute) - unless merge_request.status == "request_merged" || merge_request.status == "processing" + unless %w[request_merged processing].include?(merge_request.status) { text: merge_request_action_text(merge_request, attribute), href: send("#{page}_merge_request_path", merge_request, referrer: "check_answers"), visually_hidden_text: page.humanize } end end def merge_outcome_action(merge_request, page) - unless merge_request.status == "request_merged" || merge_request.status == "processing" + unless %w[request_merged processing].include?(merge_request.status) { text: "View", href: send("#{page}_merge_request_path", merge_request), visually_hidden_text: page.humanize } end end diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 318918134..d3a369b45 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -57,7 +57,7 @@ class NotificationRenderer < Redcarpet::Render::HTML def initialize(options = {}) link_class = "govuk-link" link_class += " govuk-link--inverse" if options[:invert_link_colour] - @bold = options[:bold_all_text] # rubocop:disable Rails/HelperInstanceVariable + @bold = options[:bold_all_text] base_options = { escape_html: true, safe_links_only: true, link_attributes: { class: link_class } } super base_options end @@ -78,7 +78,7 @@ class NotificationRenderer < Redcarpet::Render::HTML end def paragraph(text) - return %(

#{text}

) if @bold # rubocop:disable Rails/HelperInstanceVariable + return %(

#{text}

) if @bold %(

#{text}

) end diff --git a/app/helpers/question_view_helper.rb b/app/helpers/question_view_helper.rb index acb4fa959..0c4b6337f 100644 --- a/app/helpers/question_view_helper.rb +++ b/app/helpers/question_view_helper.rb @@ -44,7 +44,8 @@ module QuestionViewHelper def select_option_name(value) return value.service_name if value.respond_to?(:service_name) return value["name"] if value.is_a?(Hash) && value["name"].present? - return value["postcode"] if value.is_a?(Location) + + value["postcode"] if value.is_a?(Location) end private diff --git a/app/helpers/schemes_helper.rb b/app/helpers/schemes_helper.rb index 753f33917..e72250c6e 100644 --- a/app/helpers/schemes_helper.rb +++ b/app/helpers/schemes_helper.rb @@ -12,7 +12,8 @@ module SchemesHelper def toggle_scheme_link(scheme) return govuk_button_link_to "Deactivate this scheme", scheme_new_deactivation_path(scheme), warning: true if scheme.active? || scheme.deactivates_in_a_long_time? - return govuk_button_link_to "Reactivate this scheme", scheme_new_reactivation_path(scheme) if scheme.deactivated? || scheme.deactivating_soon? + + govuk_button_link_to "Reactivate this scheme", scheme_new_reactivation_path(scheme) if scheme.deactivated? || scheme.deactivating_soon? end def delete_scheme_link(scheme) diff --git a/app/mailers/devise_notify_mailer.rb b/app/mailers/devise_notify_mailer.rb index 5ee3fd898..4065e3aa9 100644 --- a/app/mailers/devise_notify_mailer.rb +++ b/app/mailers/devise_notify_mailer.rb @@ -92,8 +92,7 @@ class DeviseNotifyMailer < Devise::Mailer def email_changed?(record) ( - record.confirmable_template == User::CONFIRMABLE_TEMPLATE_ID && ( - record.unconfirmed_email.present? && record.unconfirmed_email != record.email) + record.confirmable_template == User::CONFIRMABLE_TEMPLATE_ID && record.unconfirmed_email.present? && record.unconfirmed_email != record.email ) || ( record.versions.last.changeset.key?("unconfirmed_email") && record.confirmed? diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index eb01e459a..6c88c3221 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -33,7 +33,7 @@ module DerivedVariables::LettingsLogVariables def set_derived_fields! clear_inapplicable_derived_values! - set_encoded_derived_values!(DEPENDENCIES) + set_encoded_derived_values!(dependencies) if rsnvac.present? self.newprop = has_first_let_vacancy_reason? ? 1 : 2 @@ -184,20 +184,15 @@ module DerivedVariables::LettingsLogVariables private - DEPENDENCIES = [ - { - conditions: { - renewal: 1, - }, - derived_values: { - referral: 1, - referral_type: 3, - waityear: 2, - offered: 0, - rsnvac: 14, - first_time_property_let_as_social_housing: 0, - }, - }, + def dependencies + if form.start_year_2026_or_later? + DEPENDENCIES_2026 + else + DEPENDENCIES_2025_2024 + end + end + + COMMON_DEPENDENCIES = [ { conditions: { net_income_known: 2, @@ -224,9 +219,42 @@ private }, ].freeze + DEPENDENCIES_2026 = [ + { + conditions: { + renewal: 1, + }, + derived_values: { + referral_register: 1, + waityear: 2, + offered: 0, + rsnvac: 14, + first_time_property_let_as_social_housing: 0, + }, + }, + *COMMON_DEPENDENCIES, + ].freeze + + DEPENDENCIES_2025_2024 = [ + { + conditions: { + renewal: 1, + }, + derived_values: { + referral: 1, + referral_type: 3, + waityear: 2, + offered: 0, + rsnvac: 14, + first_time_property_let_as_social_housing: 0, + }, + }, + *COMMON_DEPENDENCIES, + ].freeze + def clear_inapplicable_derived_values! - reset_invalidated_derived_values!(DEPENDENCIES) - if (startdate_changed? || renewal_changed?) && (renewal_was == 1 && startdate_was&.between?(Time.zone.local(2021, 4, 1), Time.zone.local(2022, 3, 31))) + reset_invalidated_derived_values!(dependencies) + if (startdate_changed? || renewal_changed?) && renewal_was == 1 && startdate_was&.between?(Time.zone.local(2021, 4, 1), Time.zone.local(2022, 3, 31)) self.underoccupation_benefitcap = nil end if renewal_changed? && renewal_was == 1 @@ -242,7 +270,7 @@ private self.wchair = nil self.location_id = nil end - if form.start_year_2024_or_later? && (unittype_gn_changed? && unittype_gn_was == 2) + if form.start_year_2024_or_later? && unittype_gn_changed? && unittype_gn_was == 2 self.beds = nil end end @@ -272,7 +300,7 @@ private end def get_refused - return 1 if details_unknown? || age_refused? || sex_refused? || relat_refused? || ecstat_refused? + return 1 if details_unknown? || age_refused? || sex_refused? || sexrab_refused? || relat_refused? || ecstat_refused? 0 end @@ -411,13 +439,15 @@ private def get_lar return 1 if rent_type == 2 - return 2 if rent_type == 1 + + 2 if rent_type == 1 end def get_irproduct return 1 if rent_type == 3 return 2 if rent_type == 4 - return 3 if rent_type == 5 + + 3 if rent_type == 5 end def clear_gender_description_unless_gender_not_same_as_sex! diff --git a/app/models/derived_variables/shared_logic.rb b/app/models/derived_variables/shared_logic.rb index c326cb8c9..4b76d83d8 100644 --- a/app/models/derived_variables/shared_logic.rb +++ b/app/models/derived_variables/shared_logic.rb @@ -9,7 +9,7 @@ private previously_in_derived_state = dependency[:conditions].all? { |attribute, value| send("#{attribute}_was") == value } next unless previously_in_derived_state - dependency[:derived_values].each do |derived_attribute, _derived_value| + dependency[:derived_values].each_key do |derived_attribute| Rails.logger.debug("Cleared derived #{derived_attribute} value") send("#{derived_attribute}=", nil) end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb index 5b06d6a28..24f836d04 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValu super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_age_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb index 3e961b283..c786afe56 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembV super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb index af568b039..bb3670c74 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCh super @id = "females_in_soft_age_range_in_pregnant_household_lead_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb index ddc8789f9..cfd035ac3 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb @@ -5,7 +5,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeVa @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, "age#{person_index}_known" => 0, }, ] diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb index 099bea5d9..de1fb5fc9 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb @@ -6,7 +6,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValue @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, "details_known_#{person_index}" => 0, }, ] diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb index 3822ec940..66603753e 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck super @id = "females_in_soft_age_range_in_pregnant_household_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb new file mode 100644 index 000000000..cefb98ceb --- /dev/null +++ b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb @@ -0,0 +1,24 @@ +class Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck < ::Form::Page + def initialize(id, hsh, subsection, person_index: 0) + super(id, hsh, subsection) + @copy_key = "lettings.soft_validations.pregnancy_value_check.no_household_member_likely_to_be_pregnant_check" + @depends_on = [{ "no_household_member_likely_to_be_pregnant?" => true }] + @title_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", + "arguments" => [], + } + @informative_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.informative_text", + "arguments" => [], + } + @person_index = person_index + end + + def questions + @questions ||= [Form::Lettings::Questions::PregnancyValueCheck.new(nil, nil, self, person_index: @person_index)] + end + + def interruption_screen_question_ids + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + end +end diff --git a/app/models/form/lettings/pages/referral_direct.rb b/app/models/form/lettings/pages/referral_direct.rb index df05aa997..79a8d4044 100644 --- a/app/models/form/lettings/pages/referral_direct.rb +++ b/app/models/form/lettings/pages/referral_direct.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralDirect < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_general_needs.rb b/app/models/form/lettings/pages/referral_general_needs.rb index 5522d1f23..a55ed5553 100644 --- a/app/models/form/lettings/pages/referral_general_needs.rb +++ b/app/models/form/lettings/pages/referral_general_needs.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Pages::ReferralGeneralNeeds < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_general_needs_prp.rb b/app/models/form/lettings/pages/referral_general_needs_prp.rb index e3206ebdb..99e033ab6 100644 --- a/app/models/form/lettings/pages/referral_general_needs_prp.rb +++ b/app/models/form/lettings/pages/referral_general_needs_prp.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Pages::ReferralGeneralNeedsPrp < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_hsc.rb b/app/models/form/lettings/pages/referral_hsc.rb index 596852947..c7c16ba58 100644 --- a/app/models/form/lettings/pages/referral_hsc.rb +++ b/app/models/form/lettings/pages/referral_hsc.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralHsc < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_justice.rb b/app/models/form/lettings/pages/referral_justice.rb index fa10bb727..564f9f98c 100644 --- a/app/models/form/lettings/pages/referral_justice.rb +++ b/app/models/form/lettings/pages/referral_justice.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralJustice < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_la.rb b/app/models/form/lettings/pages/referral_la.rb index 3f04f3aaf..5e3adbf62 100644 --- a/app/models/form/lettings/pages/referral_la.rb +++ b/app/models/form/lettings/pages/referral_la.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralLa < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_noms_hr.rb b/app/models/form/lettings/pages/referral_noms_hr.rb new file mode 100644 index 000000000..d1120bffd --- /dev/null +++ b/app/models/form/lettings/pages/referral_noms_hr.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralNomsHr < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_noms_hr" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralNoms.new(nil, nil, self, 7)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_from_housing_register? + end +end diff --git a/app/models/form/lettings/pages/referral_noms_la_hr.rb b/app/models/form/lettings/pages/referral_noms_la_hr.rb new file mode 100644 index 000000000..cc0e27371 --- /dev/null +++ b/app/models/form/lettings/pages/referral_noms_la_hr.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralNomsLaHr < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_noms_la_hr" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralNoms.new(nil, nil, self, 6)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_from_local_authority_housing_register? + end +end diff --git a/app/models/form/lettings/pages/referral_org_directly_referred.rb b/app/models/form/lettings/pages/referral_org_directly_referred.rb new file mode 100644 index 000000000..baf4c2747 --- /dev/null +++ b/app/models/form/lettings/pages/referral_org_directly_referred.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralOrgDirectlyReferred < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_org_directly_referred" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralOrg.new(nil, nil, self, 7)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_directly_referred? + end +end diff --git a/app/models/form/lettings/pages/referral_org_nominated.rb b/app/models/form/lettings/pages/referral_org_nominated.rb new file mode 100644 index 000000000..8be5f8edc --- /dev/null +++ b/app/models/form/lettings/pages/referral_org_nominated.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralOrgNominated < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_org_nominated" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralOrg.new(nil, nil, self, 1)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_nominated_by_local_authority? + end +end diff --git a/app/models/form/lettings/pages/referral_prp.rb b/app/models/form/lettings/pages/referral_prp.rb index 8d25edc44..492941e52 100644 --- a/app/models/form/lettings/pages/referral_prp.rb +++ b/app/models/form/lettings/pages/referral_prp.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralPrp < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_register_la.rb b/app/models/form/lettings/pages/referral_register_la.rb new file mode 100644 index 000000000..ee570f1cb --- /dev/null +++ b/app/models/form/lettings/pages/referral_register_la.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralRegisterLa < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_register_la" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralRegister.new(nil, nil, self, :la)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.la? && !log.is_renewal? + end +end diff --git a/app/models/form/lettings/pages/referral_register_prp.rb b/app/models/form/lettings/pages/referral_register_prp.rb new file mode 100644 index 000000000..d0c5cdaf1 --- /dev/null +++ b/app/models/form/lettings/pages/referral_register_prp.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralRegisterPrp < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_register_prp" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralRegister.new(nil, nil, self, :prp)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? + end +end diff --git a/app/models/form/lettings/pages/referral_supported_housing.rb b/app/models/form/lettings/pages/referral_supported_housing.rb index a3e915e26..b20a0a825 100644 --- a/app/models/form/lettings/pages/referral_supported_housing.rb +++ b/app/models/form/lettings/pages/referral_supported_housing.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Pages::ReferralSupportedHousing < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_supported_housing_prp.rb b/app/models/form/lettings/pages/referral_supported_housing_prp.rb index 66b6f370e..0f546b400 100644 --- a/app/models/form/lettings/pages/referral_supported_housing_prp.rb +++ b/app/models/form/lettings/pages/referral_supported_housing_prp.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Pages::ReferralSupportedHousingPrp < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_type.rb b/app/models/form/lettings/pages/referral_type.rb index 3cca2ca2b..08b19d14c 100644 --- a/app/models/form/lettings/pages/referral_type.rb +++ b/app/models/form/lettings/pages/referral_type.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Pages::ReferralType < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/referral_value_check.rb b/app/models/form/lettings/pages/referral_value_check.rb index aa3a34200..265ba5312 100644 --- a/app/models/form/lettings/pages/referral_value_check.rb +++ b/app/models/form/lettings/pages/referral_value_check.rb @@ -1,3 +1,4 @@ +# removed in 2026 class Form::Lettings::Pages::ReferralValueCheck < ::Form::Page def initialize(id, hsh, subsection) super diff --git a/app/models/form/lettings/pages/tenancyother_value_check.rb b/app/models/form/lettings/pages/tenancyother_value_check.rb new file mode 100644 index 000000000..391b06eab --- /dev/null +++ b/app/models/form/lettings/pages/tenancyother_value_check.rb @@ -0,0 +1,24 @@ +class Form::Lettings::Pages::TenancyotherValueCheck < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "tenancyother_value_check" + @copy_key = "lettings.soft_validations.tenancyother_value_check" + @depends_on = [{ "tenancyother_might_be_introductory_or_starter_period?" => true }] + @title_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", + "arguments" => [{ "key" => "tenancyother", "i18n_template" => "tenancyother" }], + } + @informative_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.informative_text", + "arguments" => [], + } + end + + def questions + @questions ||= [Form::Lettings::Questions::TenancyotherValueCheck.new(nil, nil, self)] + end + + def interruption_screen_question_ids + %w[startertenancy tenancy tenancyother] + end +end diff --git a/app/models/form/lettings/questions/address_line1.rb b/app/models/form/lettings/questions/address_line1.rb index 4b1f67931..2f88b210e 100644 --- a/app/models/form/lettings/questions/address_line1.rb +++ b/app/models/form/lettings/questions/address_line1.rb @@ -7,7 +7,7 @@ class Form::Lettings::Questions::AddressLine1 < ::Form::Question @type = "text" @plain_label = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @hide_question_number_on_page = true end @@ -18,5 +18,5 @@ class Form::Lettings::Questions::AddressLine1 < ::Form::Question ].select(&:present?).join("\n") end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17, 2026 => 17 }.freeze end diff --git a/app/models/form/lettings/questions/address_search.rb b/app/models/form/lettings/questions/address_search.rb index c6abe9a6c..eb970a5e5 100644 --- a/app/models/form/lettings/questions/address_search.rb +++ b/app/models/form/lettings/questions/address_search.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::AddressSearch < ::Form::Question @copy_key = "lettings.property_information.address_search" @plain_label = true @bottom_guidance_partial = "address_search" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @hide_question_number_on_page = true end @@ -38,5 +38,5 @@ class Form::Lettings::Questions::AddressSearch < ::Form::Question answer_options(log, user).transform_values { |value| value["value"] } || {} end - QUESTION_NUMBER_FROM_YEAR = { 2024 => 12, 2025 => 16 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2024 => 12, 2025 => 16, 2026 => 16 }.freeze end diff --git a/app/models/form/lettings/questions/age.rb b/app/models/form/lettings/questions/age.rb index f35abe61e..61e70fe05 100644 --- a/app/models/form/lettings/questions/age.rb +++ b/app/models/form/lettings/questions/age.rb @@ -19,11 +19,17 @@ class Form::Lettings::Questions::Age < ::Form::Question base_question_number = case form.start_date.year when 2023 31 - else + when 2024 + 30 + when 2025 30 + when 2026 + 27 + else + 27 end - base_question_number + (4 * @person_index) + base_question_number + (form.person_question_count * @person_index) end def hint_text diff --git a/app/models/form/lettings/questions/age1.rb b/app/models/form/lettings/questions/age1.rb index 72d89096c..428fabd42 100644 --- a/app/models/form/lettings/questions/age1.rb +++ b/app/models/form/lettings/questions/age1.rb @@ -10,8 +10,8 @@ class Form::Lettings::Questions::Age1 < ::Form::Question @max = 120 @min = 16 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31, 2025 => 31, 2026 => 30 }.freeze end diff --git a/app/models/form/lettings/questions/age1_known.rb b/app/models/form/lettings/questions/age1_known.rb index e54d7993b..753fdd2cb 100644 --- a/app/models/form/lettings/questions/age1_known.rb +++ b/app/models/form/lettings/questions/age1_known.rb @@ -8,10 +8,10 @@ class Form::Lettings::Questions::Age1Known < ::Form::Question @answer_options = ANSWER_OPTIONS @conditional_for = { "age1" => [0] } @hidden_in_check_answers = { "depends_on" => [{ "age1_known" => 0 }, { "age1_known" => 1 }] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31, 2025 => 31, 2026 => 30 }.freeze end diff --git a/app/models/form/lettings/questions/age_known.rb b/app/models/form/lettings/questions/age_known.rb index 2f5d7ce0b..c4bb65c2e 100644 --- a/app/models/form/lettings/questions/age_known.rb +++ b/app/models/form/lettings/questions/age_known.rb @@ -23,10 +23,16 @@ class Form::Lettings::Questions::AgeKnown < ::Form::Question base_question_number = case form.start_date.year when 2023 31 - else + when 2024 + 30 + when 2025 30 + when 2026 + 27 + else + 27 end - base_question_number + (4 * @person_index) + base_question_number + (form.person_question_count * @person_index) end end diff --git a/app/models/form/lettings/questions/armedforces.rb b/app/models/form/lettings/questions/armedforces.rb index 9bfe4b643..32aac69ca 100644 --- a/app/models/form/lettings/questions/armedforces.rb +++ b/app/models/form/lettings/questions/armedforces.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Armedforces < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -18,5 +18,5 @@ class Form::Lettings::Questions::Armedforces < ::Form::Question "6" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 66, 2024 => 65 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 66, 2024 => 65, 2025 => 65, 2026 => 72 }.freeze end diff --git a/app/models/form/lettings/questions/beds.rb b/app/models/form/lettings/questions/beds.rb index 1bafa3ddf..1e59c367c 100644 --- a/app/models/form/lettings/questions/beds.rb +++ b/app/models/form/lettings/questions/beds.rb @@ -7,12 +7,12 @@ class Form::Lettings::Questions::Beds < ::Form::Question @max = 12 @min = 1 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def derived?(log) log.is_bedsit? end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 22 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 22, 2024 => 22, 2025 => 22, 2026 => 21 }.freeze end diff --git a/app/models/form/lettings/questions/benefits.rb b/app/models/form/lettings/questions/benefits.rb index f5f2a3ee1..4ab922215 100644 --- a/app/models/form/lettings/questions/benefits.rb +++ b/app/models/form/lettings/questions/benefits.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Benefits < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -16,5 +16,5 @@ class Form::Lettings::Questions::Benefits < ::Form::Question "4" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 90, 2024 => 89 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 90, 2024 => 89, 2025 => 89, 2026 => 97 }.freeze end diff --git a/app/models/form/lettings/questions/brent_4_weekly.rb b/app/models/form/lettings/questions/brent_4_weekly.rb index 7087571fd..319b495a5 100644 --- a/app/models/form/lettings/questions/brent_4_weekly.rb +++ b/app/models/form/lettings/questions/brent_4_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::Brent4Weekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 4 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92, 2026 => 100 }.freeze end diff --git a/app/models/form/lettings/questions/brent_bi_weekly.rb b/app/models/form/lettings/questions/brent_bi_weekly.rb index 1a20fd61c..d33863756 100644 --- a/app/models/form/lettings/questions/brent_bi_weekly.rb +++ b/app/models/form/lettings/questions/brent_bi_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::BrentBiWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 2 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92, 2026 => 100 }.freeze end diff --git a/app/models/form/lettings/questions/brent_monthly.rb b/app/models/form/lettings/questions/brent_monthly.rb index 245bde158..8e71bb8ec 100644 --- a/app/models/form/lettings/questions/brent_monthly.rb +++ b/app/models/form/lettings/questions/brent_monthly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::BrentMonthly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every month" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92, 2026 => 100 }.freeze end diff --git a/app/models/form/lettings/questions/brent_weekly.rb b/app/models/form/lettings/questions/brent_weekly.rb index c913816fc..706f94b3d 100644 --- a/app/models/form/lettings/questions/brent_weekly.rb +++ b/app/models/form/lettings/questions/brent_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::BrentWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every week" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92, 2026 => 100 }.freeze end diff --git a/app/models/form/lettings/questions/builtype.rb b/app/models/form/lettings/questions/builtype.rb index 8c34beca1..55f76536c 100644 --- a/app/models/form/lettings/questions/builtype.rb +++ b/app/models/form/lettings/questions/builtype.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::Builtype < ::Form::Question @id = "builtype" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -12,5 +12,5 @@ class Form::Lettings::Questions::Builtype < ::Form::Question "1" => { "value" => "Purpose built" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 20 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 20, 2024 => 20, 2025 => 20 }.freeze end diff --git a/app/models/form/lettings/questions/chcharge_4_weekly.rb b/app/models/form/lettings/questions/chcharge_4_weekly.rb index 341010eb0..403ab3e75 100644 --- a/app/models/form/lettings/questions/chcharge_4_weekly.rb +++ b/app/models/form/lettings/questions/chcharge_4_weekly.rb @@ -9,9 +9,9 @@ class Form::Lettings::Questions::Chcharge4Weekly < ::Form::Question @step = 0.01 @prefix = "£" @suffix = " every 4 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/chcharge_bi_weekly.rb b/app/models/form/lettings/questions/chcharge_bi_weekly.rb index 0343839ca..274b26d0d 100644 --- a/app/models/form/lettings/questions/chcharge_bi_weekly.rb +++ b/app/models/form/lettings/questions/chcharge_bi_weekly.rb @@ -9,9 +9,9 @@ class Form::Lettings::Questions::ChchargeBiWeekly < ::Form::Question @step = 0.01 @prefix = "£" @suffix = " every 2 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/chcharge_monthly.rb b/app/models/form/lettings/questions/chcharge_monthly.rb index 9e68eb18f..967295d45 100644 --- a/app/models/form/lettings/questions/chcharge_monthly.rb +++ b/app/models/form/lettings/questions/chcharge_monthly.rb @@ -9,9 +9,9 @@ class Form::Lettings::Questions::ChchargeMonthly < ::Form::Question @step = 0.01 @prefix = "£" @suffix = " every month" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/chcharge_weekly.rb b/app/models/form/lettings/questions/chcharge_weekly.rb index 3c8b995eb..d27d586b4 100644 --- a/app/models/form/lettings/questions/chcharge_weekly.rb +++ b/app/models/form/lettings/questions/chcharge_weekly.rb @@ -9,9 +9,9 @@ class Form::Lettings::Questions::ChchargeWeekly < ::Form::Question @step = 0.01 @prefix = "£" @suffix = " every week" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/condition_effects.rb b/app/models/form/lettings/questions/condition_effects.rb index 1821f6e98..af967d17e 100644 --- a/app/models/form/lettings/questions/condition_effects.rb +++ b/app/models/form/lettings/questions/condition_effects.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::ConditionEffects < ::Form::Question @type = "checkbox" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -27,5 +27,5 @@ class Form::Lettings::Questions::ConditionEffects < ::Form::Question "illness_type_10" => { "value" => "Other" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 74, 2024 => 73 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 74, 2024 => 73, 2025 => 73, 2026 => 80 }.freeze end diff --git a/app/models/form/lettings/questions/county.rb b/app/models/form/lettings/questions/county.rb index 12585fa8e..b634fd6dc 100644 --- a/app/models/form/lettings/questions/county.rb +++ b/app/models/form/lettings/questions/county.rb @@ -6,9 +6,9 @@ class Form::Lettings::Questions::County < ::Form::Question @type = "text" @plain_label = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @hide_question_number_on_page = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17, 2026 => 17 }.freeze end diff --git a/app/models/form/lettings/questions/declaration.rb b/app/models/form/lettings/questions/declaration.rb index 3261452cd..6a2572487 100644 --- a/app/models/form/lettings/questions/declaration.rb +++ b/app/models/form/lettings/questions/declaration.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Declaration < ::Form::Question @type = "checkbox" @check_answers_card_number = 0 unless form.start_year_2024_or_later? @top_guidance_partial = "privacy_notice_tenant" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -26,5 +26,5 @@ class Form::Lettings::Questions::Declaration < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 30, 2024 => 11 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 30, 2024 => 11, 2025 => 11, 2026 => 11 }.freeze end diff --git a/app/models/form/lettings/questions/earnings.rb b/app/models/form/lettings/questions/earnings.rb index 4d3437052..13482135e 100644 --- a/app/models/form/lettings/questions/earnings.rb +++ b/app/models/form/lettings/questions/earnings.rb @@ -15,9 +15,9 @@ class Form::Lettings::Questions::Earnings < ::Form::Question { "label" => " every month", "depends_on" => { "incfreq" => 2 } }, { "label" => " every year", "depends_on" => { "incfreq" => 3 } }, ] - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 88, 2024 => 87 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 88, 2024 => 87, 2025 => 87, 2026 => 95 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_arab.rb b/app/models/form/lettings/questions/ethnic_arab.rb index d642c1a1b..582d92704 100644 --- a/app/models/form/lettings/questions/ethnic_arab.rb +++ b/app/models/form/lettings/questions/ethnic_arab.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::EthnicArab < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -18,5 +18,5 @@ class Form::Lettings::Questions::EthnicArab < ::Form::Question }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34, 2025 => 34, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_asian.rb b/app/models/form/lettings/questions/ethnic_asian.rb index 7fb309bba..f488249a6 100644 --- a/app/models/form/lettings/questions/ethnic_asian.rb +++ b/app/models/form/lettings/questions/ethnic_asian.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::EthnicAsian < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -27,5 +27,5 @@ class Form::Lettings::Questions::EthnicAsian < ::Form::Question }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34, 2025 => 34, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_black.rb b/app/models/form/lettings/questions/ethnic_black.rb index e3a88259e..f6902eb35 100644 --- a/app/models/form/lettings/questions/ethnic_black.rb +++ b/app/models/form/lettings/questions/ethnic_black.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::EthnicBlack < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -21,5 +21,5 @@ class Form::Lettings::Questions::EthnicBlack < ::Form::Question }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34, 2025 => 34, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_group.rb b/app/models/form/lettings/questions/ethnic_group.rb index 16bdfc4ba..c1c0be096 100644 --- a/app/models/form/lettings/questions/ethnic_group.rb +++ b/app/models/form/lettings/questions/ethnic_group.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::EthnicGroup < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -18,5 +18,5 @@ class Form::Lettings::Questions::EthnicGroup < ::Form::Question "17" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 34, 2024 => 33 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 34, 2024 => 33, 2025 => 33, 2026 => 33 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_mixed.rb b/app/models/form/lettings/questions/ethnic_mixed.rb index 14d1f213b..f12f997b6 100644 --- a/app/models/form/lettings/questions/ethnic_mixed.rb +++ b/app/models/form/lettings/questions/ethnic_mixed.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::EthnicMixed < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -24,5 +24,5 @@ class Form::Lettings::Questions::EthnicMixed < ::Form::Question }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34, 2025 => 34, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/ethnic_white.rb b/app/models/form/lettings/questions/ethnic_white.rb index 74430d840..98ebe78f3 100644 --- a/app/models/form/lettings/questions/ethnic_white.rb +++ b/app/models/form/lettings/questions/ethnic_white.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::EthnicWhite < ::Form::Question @copy_key = "lettings.household_characteristics.ethnic.ethnic_background_white" @type = "radio" @check_answers_card_number = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -27,5 +27,5 @@ class Form::Lettings::Questions::EthnicWhite < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 35, 2024 => 34, 2025 => 34, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/first_time_property_let_as_social_housing.rb b/app/models/form/lettings/questions/first_time_property_let_as_social_housing.rb index 09e6ece30..c9fb77abf 100644 --- a/app/models/form/lettings/questions/first_time_property_let_as_social_housing.rb +++ b/app/models/form/lettings/questions/first_time_property_let_as_social_housing.rb @@ -3,7 +3,7 @@ class Form::Lettings::Questions::FirstTimePropertyLetAsSocialHousing < ::Form::Q super @id = "first_time_property_let_as_social_housing" @type = "radio" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -21,5 +21,5 @@ class Form::Lettings::Questions::FirstTimePropertyLetAsSocialHousing < ::Form::Q form.start_year_2024_or_later? ? "This is a re-let of existing social housing stock." : "This is a re-let of existing social housing." end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 14, 2024 => 15, 2025 => 12 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 14, 2024 => 15, 2025 => 12, 2026 => 12 }.freeze end diff --git a/app/models/form/lettings/questions/gender_identity1.rb b/app/models/form/lettings/questions/gender_identity1.rb index 411bcd3d0..f3d86fde0 100644 --- a/app/models/form/lettings/questions/gender_identity1.rb +++ b/app/models/form/lettings/questions/gender_identity1.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::GenderIdentity1 < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -16,5 +16,5 @@ class Form::Lettings::Questions::GenderIdentity1 < ::Form::Question "R" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 33, 2024 => 32 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 33, 2024 => 32, 2025 => 32 }.freeze end diff --git a/app/models/form/lettings/questions/gender_same_as_sex.rb b/app/models/form/lettings/questions/gender_same_as_sex.rb index 1fdfddda5..0b0fd55b5 100644 --- a/app/models/form/lettings/questions/gender_same_as_sex.rb +++ b/app/models/form/lettings/questions/gender_same_as_sex.rb @@ -7,6 +7,7 @@ class Form::Lettings::Questions::GenderSameAsSex < ::Form::Question @conditional_for = { "gender_description#{person_index}" => [2] } @person_index = person_index @question_number = question_number + @inferred_check_answers_value = [{ "condition" => { "gender_same_as_sex#{person_index}" => 2 }, "value" => "No" }] end def answer_options diff --git a/app/models/form/lettings/questions/hb.rb b/app/models/form/lettings/questions/hb.rb index 51da058b8..f9204e65a 100644 --- a/app/models/form/lettings/questions/hb.rb +++ b/app/models/form/lettings/questions/hb.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Hb < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -17,5 +17,5 @@ class Form::Lettings::Questions::Hb < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 89, 2024 => 88 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 89, 2024 => 88, 2025 => 88, 2026 => 96 }.freeze end diff --git a/app/models/form/lettings/questions/hbrentshortfall.rb b/app/models/form/lettings/questions/hbrentshortfall.rb index 294423815..dfc323c3a 100644 --- a/app/models/form/lettings/questions/hbrentshortfall.rb +++ b/app/models/form/lettings/questions/hbrentshortfall.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Hbrentshortfall < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Hbrentshortfall < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 99, 2024 => 98, 2025 => 96 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 99, 2024 => 98, 2025 => 96, 2026 => 104 }.freeze end diff --git a/app/models/form/lettings/questions/hhmemb.rb b/app/models/form/lettings/questions/hhmemb.rb index 88328a869..614b2b27e 100644 --- a/app/models/form/lettings/questions/hhmemb.rb +++ b/app/models/form/lettings/questions/hhmemb.rb @@ -8,9 +8,9 @@ class Form::Lettings::Questions::Hhmemb < ::Form::Question @max = 8 @min = 1 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @check_answers_card_title = "Household" if form.start_year_2026_or_later? end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 31, 2024 => 30 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 31, 2024 => 30, 2025 => 30, 2026 => 29 }.freeze end diff --git a/app/models/form/lettings/questions/homeless.rb b/app/models/form/lettings/questions/homeless.rb index 1194fa929..44e03f937 100644 --- a/app/models/form/lettings/questions/homeless.rb +++ b/app/models/form/lettings/questions/homeless.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Homeless < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -13,5 +13,5 @@ class Form::Lettings::Questions::Homeless < ::Form::Question "1" => { "value" => "No" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 79, 2024 => 78 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 79, 2024 => 78, 2025 => 78, 2026 => 85 }.freeze end diff --git a/app/models/form/lettings/questions/household_charge.rb b/app/models/form/lettings/questions/household_charge.rb index 60fee977d..32bdee4a6 100644 --- a/app/models/form/lettings/questions/household_charge.rb +++ b/app/models/form/lettings/questions/household_charge.rb @@ -5,10 +5,10 @@ class Form::Lettings::Questions::HouseholdCharge < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 91, 2024 => 90 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 91, 2024 => 90, 2025 => 90, 2026 => 98 }.freeze end diff --git a/app/models/form/lettings/questions/housingneeds.rb b/app/models/form/lettings/questions/housingneeds.rb index 03c80d5cb..29f0b5882 100644 --- a/app/models/form/lettings/questions/housingneeds.rb +++ b/app/models/form/lettings/questions/housingneeds.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Housingneeds < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Housingneeds < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 70, 2024 => 69 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 70, 2024 => 69, 2025 => 69, 2026 => 76 }.freeze end diff --git a/app/models/form/lettings/questions/housingneeds_other.rb b/app/models/form/lettings/questions/housingneeds_other.rb index d99812535..d8915e936 100644 --- a/app/models/form/lettings/questions/housingneeds_other.rb +++ b/app/models/form/lettings/questions/housingneeds_other.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::HousingneedsOther < ::Form::Question @copy_key = "lettings.household_needs.housingneeds_type.housingneeds_other" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -24,5 +24,5 @@ class Form::Lettings::Questions::HousingneedsOther < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 72, 2024 => 71 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 72, 2024 => 71, 2025 => 71, 2026 => 78 }.freeze end diff --git a/app/models/form/lettings/questions/housingneeds_type.rb b/app/models/form/lettings/questions/housingneeds_type.rb index 50b9c3742..15b5782d5 100644 --- a/app/models/form/lettings/questions/housingneeds_type.rb +++ b/app/models/form/lettings/questions/housingneeds_type.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::HousingneedsType < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -17,5 +17,5 @@ class Form::Lettings::Questions::HousingneedsType < ::Form::Question "3" => { "value" => "None of the listed options" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 71, 2024 => 70 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 71, 2024 => 70, 2025 => 70, 2026 => 77 }.freeze end diff --git a/app/models/form/lettings/questions/illness.rb b/app/models/form/lettings/questions/illness.rb index f92a7a04a..4bc3667fb 100644 --- a/app/models/form/lettings/questions/illness.rb +++ b/app/models/form/lettings/questions/illness.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Illness < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Illness < ::Form::Question "3" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 73, 2024 => 72 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 73, 2024 => 72, 2025 => 72, 2026 => 79 }.freeze end diff --git a/app/models/form/lettings/questions/incfreq.rb b/app/models/form/lettings/questions/incfreq.rb index d4384218e..74e24f439 100644 --- a/app/models/form/lettings/questions/incfreq.rb +++ b/app/models/form/lettings/questions/incfreq.rb @@ -7,7 +7,7 @@ class Form::Lettings::Questions::Incfreq < ::Form::Question @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS @hidden_in_check_answers = true - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -16,5 +16,5 @@ class Form::Lettings::Questions::Incfreq < ::Form::Question "3" => { "value" => "Yearly" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 87, 2024 => 86 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 87, 2024 => 86, 2025 => 86, 2026 => 94 }.freeze end diff --git a/app/models/form/lettings/questions/irproduct_other.rb b/app/models/form/lettings/questions/irproduct_other.rb index b004d5dc2..993fcbf54 100644 --- a/app/models/form/lettings/questions/irproduct_other.rb +++ b/app/models/form/lettings/questions/irproduct_other.rb @@ -4,8 +4,8 @@ class Form::Lettings::Questions::IrproductOther < ::Form::Question @id = "irproduct_other" @copy_key = "lettings.setup.rent_type.irproduct_other" @type = "text" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 6, 2024 => 8 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 6, 2024 => 8, 2025 => 8, 2026 => 8 }.freeze end diff --git a/app/models/form/lettings/questions/is_carehome.rb b/app/models/form/lettings/questions/is_carehome.rb index 25dae3fc6..ea2df6eac 100644 --- a/app/models/form/lettings/questions/is_carehome.rb +++ b/app/models/form/lettings/questions/is_carehome.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::IsCarehome < ::Form::Question @type = "radio" @check_answers_card_number = 0 @conditional_for = { "chcharge" => [1] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -23,5 +23,5 @@ class Form::Lettings::Questions::IsCarehome < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 93, 2024 => 92 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 93, 2024 => 92, 2025 => 92, 2026 => 100 }.freeze end diff --git a/app/models/form/lettings/questions/joint.rb b/app/models/form/lettings/questions/joint.rb index 2542cd1c7..11f6749a6 100644 --- a/app/models/form/lettings/questions/joint.rb +++ b/app/models/form/lettings/questions/joint.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Joint < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Joint < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 25, 2024 => 25, 2025 => 26 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 25, 2024 => 25, 2025 => 26, 2026 => 25 }.freeze end diff --git a/app/models/form/lettings/questions/la.rb b/app/models/form/lettings/questions/la.rb index c6d6f8240..d4d6954d2 100644 --- a/app/models/form/lettings/questions/la.rb +++ b/app/models/form/lettings/questions/la.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::La < ::Form::Question @type = "select" @check_answers_card_number = nil @hint_text = "" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @disable_clearing_if_not_routed_or_dynamic_answer_options = true end @@ -13,5 +13,5 @@ class Form::Lettings::Questions::La < ::Form::Question { "" => "Select an option" }.merge(LocalAuthority.active(form.start_date).england.map { |la| [la.code, la.name] }.to_h) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 13, 2024 => 14, 2025 => 18 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 13, 2024 => 14, 2025 => 18, 2026 => 18 }.freeze end diff --git a/app/models/form/lettings/questions/layear.rb b/app/models/form/lettings/questions/layear.rb index fdaad6c22..d8fa0a3a8 100644 --- a/app/models/form/lettings/questions/layear.rb +++ b/app/models/form/lettings/questions/layear.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::Layear < ::Form::Question @id = "layear" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -36,5 +36,5 @@ class Form::Lettings::Questions::Layear < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 75, 2024 => 74 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 75, 2024 => 74, 2025 => 74, 2026 => 81 }.freeze end diff --git a/app/models/form/lettings/questions/leftreg.rb b/app/models/form/lettings/questions/leftreg.rb index 9b90566cf..3e81b52c0 100644 --- a/app/models/form/lettings/questions/leftreg.rb +++ b/app/models/form/lettings/questions/leftreg.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Leftreg < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -16,5 +16,5 @@ class Form::Lettings::Questions::Leftreg < ::Form::Question "3" => { "value" => "Person prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 67, 2024 => 66 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 67, 2024 => 66, 2025 => 66, 2026 => 73 }.freeze end diff --git a/app/models/form/lettings/questions/letting_allocation.rb b/app/models/form/lettings/questions/letting_allocation.rb index 08310da13..2029335c4 100644 --- a/app/models/form/lettings/questions/letting_allocation.rb +++ b/app/models/form/lettings/questions/letting_allocation.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::LettingAllocation < ::Form::Question @id = "letting_allocation" @type = "checkbox" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -28,5 +28,5 @@ class Form::Lettings::Questions::LettingAllocation < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 84, 2024 => 83 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 84, 2024 => 83, 2025 => 83, 2026 => 90 }.freeze end diff --git a/app/models/form/lettings/questions/location_id.rb b/app/models/form/lettings/questions/location_id.rb index 5bc316476..80e34aac0 100644 --- a/app/models/form/lettings/questions/location_id.rb +++ b/app/models/form/lettings/questions/location_id.rb @@ -10,7 +10,7 @@ class Form::Lettings::Questions::LocationId < ::Form::Question "needstype": 2, }, } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? @disable_clearing_if_not_routed_or_dynamic_answer_options = true @top_guidance_partial = "finding_location" end @@ -55,5 +55,5 @@ private false end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 10, 2024 => 5 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 10, 2024 => 5, 2025 => 5, 2026 => 5 }.freeze end diff --git a/app/models/form/lettings/questions/location_id_search.rb b/app/models/form/lettings/questions/location_id_search.rb index 5e1734b51..e64125fda 100644 --- a/app/models/form/lettings/questions/location_id_search.rb +++ b/app/models/form/lettings/questions/location_id_search.rb @@ -10,7 +10,7 @@ class Form::Lettings::Questions::LocationIdSearch < ::Form::Question "needstype": 2, }, } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? @disable_clearing_if_not_routed_or_dynamic_answer_options = true @top_guidance_partial = "finding_location" end @@ -50,5 +50,5 @@ private false end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 10, 2024 => 5 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 10, 2024 => 5, 2025 => 5, 2026 => 5 }.freeze end diff --git a/app/models/form/lettings/questions/majorrepairs.rb b/app/models/form/lettings/questions/majorrepairs.rb index a0c8a3a5c..b9b740cb1 100644 --- a/app/models/form/lettings/questions/majorrepairs.rb +++ b/app/models/form/lettings/questions/majorrepairs.rb @@ -6,10 +6,10 @@ class Form::Lettings::Questions::Majorrepairs < ::Form::Question @type = "radio" @answer_options = ANSWER_OPTIONS @conditional_for = { "mrcdate" => [1] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { "1" => { "value" => "Yes" }, "0" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 24 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 24, 2024 => 24, 2025 => 24, 2026 => 23 }.freeze end diff --git a/app/models/form/lettings/questions/managing_organisation.rb b/app/models/form/lettings/questions/managing_organisation.rb index 9c766ebe0..bf1b23c54 100644 --- a/app/models/form/lettings/questions/managing_organisation.rb +++ b/app/models/form/lettings/questions/managing_organisation.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::ManagingOrganisation < ::Form::Question @id = "managing_organisation_id" @derived = true @type = "select" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end def answer_options(log = nil, user = nil) @@ -83,5 +83,5 @@ private true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 2 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 2, 2024 => 2, 2025 => 2, 2026 => 2 }.freeze end diff --git a/app/models/form/lettings/questions/mrcdate.rb b/app/models/form/lettings/questions/mrcdate.rb index 0c311d186..33c511887 100644 --- a/app/models/form/lettings/questions/mrcdate.rb +++ b/app/models/form/lettings/questions/mrcdate.rb @@ -4,8 +4,8 @@ class Form::Lettings::Questions::Mrcdate < ::Form::Question @id = "mrcdate" @copy_key = "lettings.property_information.property_major_repairs.mrcdate" @type = "date" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 24 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 24, 2024 => 24, 2025 => 24, 2026 => 23 }.freeze end diff --git a/app/models/form/lettings/questions/nationality.rb b/app/models/form/lettings/questions/nationality.rb index 8c4a700c1..a966f68f7 100644 --- a/app/models/form/lettings/questions/nationality.rb +++ b/app/models/form/lettings/questions/nationality.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Nationality < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -19,5 +19,5 @@ class Form::Lettings::Questions::Nationality < ::Form::Question "13" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35, 2025 => 35, 2026 => 34 }.freeze end diff --git a/app/models/form/lettings/questions/nationality_all.rb b/app/models/form/lettings/questions/nationality_all.rb index a4bb750a1..368c0ffb5 100644 --- a/app/models/form/lettings/questions/nationality_all.rb +++ b/app/models/form/lettings/questions/nationality_all.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::NationalityAll < ::Form::Question @type = "select" @check_answers_card_number = 1 @answer_options = GlobalConstants::COUNTRIES_ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_label(log, _current_user = nil) @@ -17,7 +17,7 @@ class Form::Lettings::Questions::NationalityAll < ::Form::Question @answer_options.reject { |key, _| key == "826" } end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35, 2025 => 35, 2026 => 35 }.freeze def label_from_value(value) return unless value diff --git a/app/models/form/lettings/questions/nationality_all_group.rb b/app/models/form/lettings/questions/nationality_all_group.rb index 559b1c9a0..0c4ed5d90 100644 --- a/app/models/form/lettings/questions/nationality_all_group.rb +++ b/app/models/form/lettings/questions/nationality_all_group.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::NationalityAllGroup < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @conditional_for = { "nationality_all" => [12] } @hidden_in_check_answers = { "depends_on" => [{ "nationality_all_group" => 12 }] } end @@ -17,5 +17,5 @@ class Form::Lettings::Questions::NationalityAllGroup < ::Form::Question "0" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 36, 2024 => 35, 2025 => 35, 2026 => 35 }.freeze end diff --git a/app/models/form/lettings/questions/needs_type.rb b/app/models/form/lettings/questions/needs_type.rb index 9c32e30f9..87f331c07 100644 --- a/app/models/form/lettings/questions/needs_type.rb +++ b/app/models/form/lettings/questions/needs_type.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::NeedsType < ::Form::Question @id = "needstype" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? @top_guidance_partial = "needs_type" if form.start_year_2026_or_later? end @@ -13,5 +13,5 @@ class Form::Lettings::Questions::NeedsType < ::Form::Question "2" => { "value" => "Supported housing" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 3 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 3, 2024 => 3, 2025 => 3, 2026 => 3 }.freeze end diff --git a/app/models/form/lettings/questions/net_income_known.rb b/app/models/form/lettings/questions/net_income_known.rb index 01c3bcaa3..4bcbe7fd1 100644 --- a/app/models/form/lettings/questions/net_income_known.rb +++ b/app/models/form/lettings/questions/net_income_known.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::NetIncomeKnown < ::Form::Question @check_answers_card_number = 0 @top_guidance_partial = "what_counts_as_income" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -16,5 +16,5 @@ class Form::Lettings::Questions::NetIncomeKnown < ::Form::Question "2" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 86, 2024 => 85 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 86, 2024 => 85, 2025 => 85, 2026 => 93 }.freeze end diff --git a/app/models/form/lettings/questions/offered.rb b/app/models/form/lettings/questions/offered.rb index c1aae8d32..38eccb40d 100644 --- a/app/models/form/lettings/questions/offered.rb +++ b/app/models/form/lettings/questions/offered.rb @@ -8,8 +8,8 @@ class Form::Lettings::Questions::Offered < ::Form::Question @max = 150 @min = 0 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 18 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 18, 2024 => 18, 2025 => 18, 2026 => 18 }.freeze end diff --git a/app/models/form/lettings/questions/period.rb b/app/models/form/lettings/questions/period.rb index 6f98bd2a8..a0fb51d9f 100644 --- a/app/models/form/lettings/questions/period.rb +++ b/app/models/form/lettings/questions/period.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Period < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -22,7 +22,7 @@ class Form::Lettings::Questions::Period < ::Form::Question "10" => { "value" => "Weekly for 53 weeks" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 92, 2024 => 91 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 92, 2024 => 91, 2025 => 91, 2026 => 99 }.freeze def displayed_answer_options(log, _user) return ANSWER_OPTIONS if log.managing_organisation.nil? diff --git a/app/models/form/lettings/questions/person_partner.rb b/app/models/form/lettings/questions/person_partner.rb index 98a22a448..c7b673131 100644 --- a/app/models/form/lettings/questions/person_partner.rb +++ b/app/models/form/lettings/questions/person_partner.rb @@ -21,11 +21,17 @@ class Form::Lettings::Questions::PersonPartner < ::Form::Question base_question_number = case form.start_date.year when 2023 30 - else + when 2024 + 29 + when 2025 29 + when 2026 + 28 + else + 28 end - base_question_number + (4 * @person_index) + base_question_number + (form.person_question_count * @person_index) end def derived?(log) diff --git a/app/models/form/lettings/questions/person_sex_registered_at_birth.rb b/app/models/form/lettings/questions/person_sex_registered_at_birth.rb index e5c54058f..819cc2df1 100644 --- a/app/models/form/lettings/questions/person_sex_registered_at_birth.rb +++ b/app/models/form/lettings/questions/person_sex_registered_at_birth.rb @@ -18,7 +18,7 @@ class Form::Lettings::Questions::PersonSexRegisteredAtBirth < ::Form::Question def question_number base_question_number = 29 - base_question_number + (5 * @person_index) + base_question_number + (form.person_question_count * @person_index) end def label_from_value(value, _log = nil, _user = nil) diff --git a/app/models/form/lettings/questions/person_working_situation.rb b/app/models/form/lettings/questions/person_working_situation.rb index 74e11d030..0089416fb 100644 --- a/app/models/form/lettings/questions/person_working_situation.rb +++ b/app/models/form/lettings/questions/person_working_situation.rb @@ -57,10 +57,16 @@ class Form::Lettings::Questions::PersonWorkingSituation < ::Form::Question base_question_number = case form.start_date.year when 2023 33 - else + when 2024 + 32 + when 2025 32 + when 2026 + 31 + else + 31 end - base_question_number + (4 * @person_index) + base_question_number + (form.person_question_count * @person_index) end end diff --git a/app/models/form/lettings/questions/postcode_for_full_address.rb b/app/models/form/lettings/questions/postcode_for_full_address.rb index 114cf0db5..84c93f7d7 100644 --- a/app/models/form/lettings/questions/postcode_for_full_address.rb +++ b/app/models/form/lettings/questions/postcode_for_full_address.rb @@ -18,10 +18,10 @@ class Form::Lettings::Questions::PostcodeForFullAddress < ::Form::Question } @plain_label = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @hide_question_number_on_page = true @bottom_guidance_partial = "address_fallback" end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17, 2026 => 17 }.freeze end diff --git a/app/models/form/lettings/questions/ppcodenk.rb b/app/models/form/lettings/questions/ppcodenk.rb index 5eec607eb..7cf7c63c2 100644 --- a/app/models/form/lettings/questions/ppcodenk.rb +++ b/app/models/form/lettings/questions/ppcodenk.rb @@ -8,7 +8,7 @@ class Form::Lettings::Questions::Ppcodenk < ::Form::Question @answer_options = ANSWER_OPTIONS @conditional_for = { "ppostcode_full" => [0] } @hidden_in_check_answers = { "depends_on" => [{ "ppcodenk" => 0 }, { "ppcodenk" => 1 }] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @disable_clearing_if_not_routed_or_dynamic_answer_options = true end @@ -17,5 +17,5 @@ class Form::Lettings::Questions::Ppcodenk < ::Form::Question "1" => { "value" => "No" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 80, 2024 => 79 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 80, 2024 => 79, 2025 => 79, 2026 => 86 }.freeze end diff --git a/app/models/form/lettings/questions/ppostcode_full.rb b/app/models/form/lettings/questions/ppostcode_full.rb index 804576ca1..41feded8f 100644 --- a/app/models/form/lettings/questions/ppostcode_full.rb +++ b/app/models/form/lettings/questions/ppostcode_full.rb @@ -13,9 +13,9 @@ class Form::Lettings::Questions::PpostcodeFull < ::Form::Question }] @check_answers_card_number = 0 @inferred_answers = { "prevloc" => { "is_previous_la_inferred" => true } } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @disable_clearing_if_not_routed_or_dynamic_answer_options = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 80, 2024 => 79 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 80, 2024 => 79, 2025 => 79, 2026 => 86 }.freeze end diff --git a/app/models/form/lettings/questions/preg_occ.rb b/app/models/form/lettings/questions/preg_occ.rb index 1ad1bd1f5..03bae1c04 100644 --- a/app/models/form/lettings/questions/preg_occ.rb +++ b/app/models/form/lettings/questions/preg_occ.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::PregOcc < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::PregOcc < ::Form::Question "3" => { "value" => "Tenant prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 69, 2024 => 68 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 69, 2024 => 68, 2025 => 68, 2026 => 75 }.freeze end diff --git a/app/models/form/lettings/questions/previous_la_known.rb b/app/models/form/lettings/questions/previous_la_known.rb index 2145e9d1f..b8721ff46 100644 --- a/app/models/form/lettings/questions/previous_la_known.rb +++ b/app/models/form/lettings/questions/previous_la_known.rb @@ -8,11 +8,11 @@ class Form::Lettings::Questions::PreviousLaKnown < ::Form::Question @answer_options = ANSWER_OPTIONS @conditional_for = { "prevloc" => [1] } @hidden_in_check_answers = { "depends_on" => [{ "previous_la_known" => 0 }, { "previous_la_known" => 1 }] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @disable_clearing_if_not_routed_or_dynamic_answer_options = true end ANSWER_OPTIONS = { "1" => { "value" => "Yes" }, "0" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 81, 2024 => 80 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 81, 2024 => 80, 2025 => 80, 2026 => 87 }.freeze end diff --git a/app/models/form/lettings/questions/previous_let_type.rb b/app/models/form/lettings/questions/previous_let_type.rb index 8c35df84c..660e42869 100644 --- a/app/models/form/lettings/questions/previous_let_type.rb +++ b/app/models/form/lettings/questions/previous_let_type.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::PreviousLetType < ::Form::Question @id = "unitletas" @type = "radio" @answer_options = answer_options - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -41,7 +41,7 @@ class Form::Lettings::Questions::PreviousLetType < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 16, 2024 => 17, 2025 => 14 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 16, 2024 => 17, 2025 => 14, 2026 => 14 }.freeze def answer_options return ANSWER_OPTIONS_AFTER_2025 if form.start_year_2025_or_later? diff --git a/app/models/form/lettings/questions/previous_tenure.rb b/app/models/form/lettings/questions/previous_tenure.rb index 47647b03c..65a3911b2 100644 --- a/app/models/form/lettings/questions/previous_tenure.rb +++ b/app/models/form/lettings/questions/previous_tenure.rb @@ -12,7 +12,7 @@ class Form::Lettings::Questions::PreviousTenure < ::Form::Question else ANSWER_OPTIONS end - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -103,5 +103,5 @@ class Form::Lettings::Questions::PreviousTenure < ::Form::Question "25" => { "value" => "Any other accommodation" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 78, 2024 => 77 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 78, 2024 => 77, 2025 => 77, 2026 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/previous_tenure_renewal.rb b/app/models/form/lettings/questions/previous_tenure_renewal.rb index e932fd218..20f0900bb 100644 --- a/app/models/form/lettings/questions/previous_tenure_renewal.rb +++ b/app/models/form/lettings/questions/previous_tenure_renewal.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::PreviousTenureRenewal < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = form.start_year_2025_or_later? ? ANSWER_OPTIONS_2025 : ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -22,5 +22,5 @@ class Form::Lettings::Questions::PreviousTenureRenewal < ::Form::Question "6" => { "value" => "Other supported housing" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 78, 2024 => 77 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 78, 2024 => 77, 2025 => 77, 2026 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/prevloc.rb b/app/models/form/lettings/questions/prevloc.rb index 4ad7dbf11..0bf445956 100644 --- a/app/models/form/lettings/questions/prevloc.rb +++ b/app/models/form/lettings/questions/prevloc.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::Prevloc < ::Form::Question @type = "select" @inferred_check_answers_value = [{ "condition" => { "previous_la_known" => 0 }, "value" => "Not known" }] @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @disable_clearing_if_not_routed_or_dynamic_answer_options = true end @@ -14,5 +14,5 @@ class Form::Lettings::Questions::Prevloc < ::Form::Question { "" => "Select an option" }.merge(LocalAuthority.active(form.start_date).map { |la| [la.code, la.name] }.to_h) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 81, 2024 => 80 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 81, 2024 => 80, 2025 => 80, 2026 => 87 }.freeze end diff --git a/app/models/form/lettings/questions/property_reference.rb b/app/models/form/lettings/questions/property_reference.rb index d4587ffe8..e81d4b6a2 100644 --- a/app/models/form/lettings/questions/property_reference.rb +++ b/app/models/form/lettings/questions/property_reference.rb @@ -4,8 +4,8 @@ class Form::Lettings::Questions::PropertyReference < ::Form::Question @id = "propcode" @type = "text" @width = 10 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 8, 2024 => 10 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 8, 2024 => 10, 2025 => 10, 2026 => 10 }.freeze end diff --git a/app/models/form/lettings/questions/pscharge_4_weekly.rb b/app/models/form/lettings/questions/pscharge_4_weekly.rb index 565be72c9..233e87854 100644 --- a/app/models/form/lettings/questions/pscharge_4_weekly.rb +++ b/app/models/form/lettings/questions/pscharge_4_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::Pscharge4Weekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 4 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94, 2026 => 102 }.freeze end diff --git a/app/models/form/lettings/questions/pscharge_bi_weekly.rb b/app/models/form/lettings/questions/pscharge_bi_weekly.rb index b8bb94f40..dcd1df89f 100644 --- a/app/models/form/lettings/questions/pscharge_bi_weekly.rb +++ b/app/models/form/lettings/questions/pscharge_bi_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::PschargeBiWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 2 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94, 2026 => 102 }.freeze end diff --git a/app/models/form/lettings/questions/pscharge_monthly.rb b/app/models/form/lettings/questions/pscharge_monthly.rb index ccbd2655b..b5c175ceb 100644 --- a/app/models/form/lettings/questions/pscharge_monthly.rb +++ b/app/models/form/lettings/questions/pscharge_monthly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::PschargeMonthly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every month" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94, 2026 => 102 }.freeze end diff --git a/app/models/form/lettings/questions/pscharge_weekly.rb b/app/models/form/lettings/questions/pscharge_weekly.rb index 9b0a0e320..4bf327c08 100644 --- a/app/models/form/lettings/questions/pscharge_weekly.rb +++ b/app/models/form/lettings/questions/pscharge_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::PschargeWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every week" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94, 2026 => 102 }.freeze end diff --git a/app/models/form/lettings/questions/reason.rb b/app/models/form/lettings/questions/reason.rb index 7f0cd86a0..a40d9d134 100644 --- a/app/models/form/lettings/questions/reason.rb +++ b/app/models/form/lettings/questions/reason.rb @@ -10,7 +10,7 @@ class Form::Lettings::Questions::Reason < ::Form::Question 20, ], } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -132,5 +132,5 @@ class Form::Lettings::Questions::Reason < ::Form::Question }.freeze, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2024 => 76 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2024 => 76, 2025 => 76, 2026 => 83 }.freeze end diff --git a/app/models/form/lettings/questions/reason_renewal.rb b/app/models/form/lettings/questions/reason_renewal.rb index c00bd2581..d5fccca67 100644 --- a/app/models/form/lettings/questions/reason_renewal.rb +++ b/app/models/form/lettings/questions/reason_renewal.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::ReasonRenewal < ::Form::Question @type = "radio" @copy_key = "lettings.household_situation.reason.#{page.id}.reason" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @conditional_for = { "reasonother" => [ 20, @@ -37,5 +37,5 @@ class Form::Lettings::Questions::ReasonRenewal < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 77, 2024 => 76 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 77, 2024 => 76, 2025 => 76, 2026 => 83 }.freeze end diff --git a/app/models/form/lettings/questions/reasonable_preference_reason.rb b/app/models/form/lettings/questions/reasonable_preference_reason.rb index 75b450b91..485ad830f 100644 --- a/app/models/form/lettings/questions/reasonable_preference_reason.rb +++ b/app/models/form/lettings/questions/reasonable_preference_reason.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::ReasonablePreferenceReason < ::Form::Question @type = "checkbox" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -17,5 +17,5 @@ class Form::Lettings::Questions::ReasonablePreferenceReason < ::Form::Question "rp_dontknow" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 83, 2024 => 82 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 83, 2024 => 82, 2025 => 82, 2026 => 89 }.freeze end diff --git a/app/models/form/lettings/questions/reasonother.rb b/app/models/form/lettings/questions/reasonother.rb index 7e600916b..b92a7b8f4 100644 --- a/app/models/form/lettings/questions/reasonother.rb +++ b/app/models/form/lettings/questions/reasonother.rb @@ -5,8 +5,8 @@ class Form::Lettings::Questions::Reasonother < ::Form::Question @copy_key = "lettings.household_situation.reason.#{@page.id}.reasonother" @type = "text" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 77, 2024 => 76 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 77, 2024 => 76, 2025 => 76, 2026 => 83 }.freeze end diff --git a/app/models/form/lettings/questions/reasonpref.rb b/app/models/form/lettings/questions/reasonpref.rb index e63f65584..f54e98c15 100644 --- a/app/models/form/lettings/questions/reasonpref.rb +++ b/app/models/form/lettings/questions/reasonpref.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Reasonpref < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Reasonpref < ::Form::Question "3" => { "value" => "Don’t know" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 82, 2024 => 81 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 82, 2024 => 81, 2025 => 81, 2026 => 88 }.freeze end diff --git a/app/models/form/lettings/questions/referral_direct.rb b/app/models/form/lettings/questions/referral_direct.rb index ddadcc8b7..5373f3f3f 100644 --- a/app/models/form/lettings/questions/referral_direct.rb +++ b/app/models/form/lettings/questions/referral_direct.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralDirect < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralDirect < ::Form::Question @copy_key = "lettings.household_situation.referral.direct" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/referral_general_needs.rb b/app/models/form/lettings/questions/referral_general_needs.rb index 6efdfc1f0..f2b2167a3 100644 --- a/app/models/form/lettings/questions/referral_general_needs.rb +++ b/app/models/form/lettings/questions/referral_general_needs.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Questions::ReferralGeneralNeeds < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +6,7 @@ class Form::Lettings::Questions::ReferralGeneralNeeds < ::Form::Question @copy_key = "lettings.household_situation.referral.general_needs.la" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -92,5 +93,5 @@ class Form::Lettings::Questions::ReferralGeneralNeeds < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84, 2025 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/referral_general_needs_prp.rb b/app/models/form/lettings/questions/referral_general_needs_prp.rb index afd26117b..37d222961 100644 --- a/app/models/form/lettings/questions/referral_general_needs_prp.rb +++ b/app/models/form/lettings/questions/referral_general_needs_prp.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Questions::ReferralGeneralNeedsPrp < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +6,7 @@ class Form::Lettings::Questions::ReferralGeneralNeedsPrp < ::Form::Question @copy_key = "lettings.household_situation.referral.general_needs.prp" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -101,5 +102,5 @@ class Form::Lettings::Questions::ReferralGeneralNeedsPrp < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84, 2025 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/referral_hsc.rb b/app/models/form/lettings/questions/referral_hsc.rb index a5b9c32f0..d589768a5 100644 --- a/app/models/form/lettings/questions/referral_hsc.rb +++ b/app/models/form/lettings/questions/referral_hsc.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralHsc < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralHsc < ::Form::Question @copy_key = "lettings.household_situation.referral.hsc" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/referral_justice.rb b/app/models/form/lettings/questions/referral_justice.rb index 0e02e0c42..ccd836a2f 100644 --- a/app/models/form/lettings/questions/referral_justice.rb +++ b/app/models/form/lettings/questions/referral_justice.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralJustice < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralJustice < ::Form::Question @copy_key = "lettings.household_situation.referral.justice" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/referral_la.rb b/app/models/form/lettings/questions/referral_la.rb index 7a654df88..ede72194c 100644 --- a/app/models/form/lettings/questions/referral_la.rb +++ b/app/models/form/lettings/questions/referral_la.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralLa < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralLa < ::Form::Question @copy_key = "lettings.household_situation.referral.la" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/referral_noms.rb b/app/models/form/lettings/questions/referral_noms.rb new file mode 100644 index 000000000..4d1390fdd --- /dev/null +++ b/app/models/form/lettings/questions/referral_noms.rb @@ -0,0 +1,49 @@ +# added in 2026 +class Form::Lettings::Questions::ReferralNoms < ::Form::Question + def initialize(id, hsh, page, referral_register) + super(id, hsh, page) + @id = "referral_noms" + @copy_key = "lettings.household_situation.referral.noms" + @type = "radio" + @check_answers_card_number = 0 + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) + @referral_register = referral_register + end + + def answer_options + case @referral_register + when 6 + { + "1" => { + "value" => "Nominated by a local authority to a PRP", + }, + "2" => { + "value" => "Supported housing only - referred by a local authority to a PRP", + }, + "3" => { + "value" => "Internal transfer from another property owned by the same PRP landlord - for existing social tenants only", + }, + "4" => { + "value" => "Other", + }, + }.freeze + when 7 + { + "5" => { + "value" => "Internal transfer from another property owned by the same PRP landlord - for existing social tenants only", + }, + "6" => { + "value" => " A different PRP landlord - for existing social tenants only", + }, + "7" => { + "value" => "Directly referred by a third party", + }, + "8" => { + "value" => "Other", + }, + }.freeze + end + end + + QUESTION_NUMBER_FROM_YEAR = { 2026 => 92 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_org.rb b/app/models/form/lettings/questions/referral_org.rb new file mode 100644 index 000000000..797e30074 --- /dev/null +++ b/app/models/form/lettings/questions/referral_org.rb @@ -0,0 +1,85 @@ +# added in 2026 +class Form::Lettings::Questions::ReferralOrg < ::Form::Question + def initialize(id, hsh, page, referral_noms) + super(id, hsh, page) + @id = "referral_org" + @copy_key = "lettings.household_situation.referral.org" + @type = "radio" + @check_answers_card_number = 0 + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) + @referral_noms = referral_noms + end + + def answer_options + case @referral_noms + when 1 + { + "1" => { + "value" => "Referred to LA by health service", + }, + "2" => { + "value" => "Referred to LA by community learning disability team", + }, + "3" => { + "value" => "Referred to LA by community mental health team", + }, + "4" => { + "value" => "Referred to LA by adult social services", + }, + "5" => { + "value" => "Referred to LA by children's social care", + }, + "6" => { + "value" => "Referred to LA by police, probation, prison or youth offending team following a custodial sentence", + }, + "7" => { + "value" => "Referred to LA by police, probation, prison or youth offending team without a custodial sentence", + }, + "8" => { + "value" => "Referred to LA by a voluntary agency", + }, + "9" => { + "value" => "Other referral", + }, + "10" => { + "value" => "Don't know", + }, + }.freeze + when 7 + { + "11" => { + "value" => "Health service", + }, + "12" => { + "value" => "Community learning disability team", + }, + "13" => { + "value" => "Community mental health team", + }, + "14" => { + "value" => "Adult social services", + }, + "15" => { + "value" => "Children's social care", + }, + "16" => { + "value" => "Police, probation, prison or youth offending team following a custodial sentence", + }, + "17" => { + "value" => "Police, probation, prison or youth offending team without a custodial sentence", + }, + "18" => { + "value" => "Voluntary agency", + }, + "19" => { + "value" => "Other third party", + }, + "20" => { + "value" => "Don't know", + }, + }.freeze + end + end + + QUESTION_NUMBER_FROM_YEAR = { 2026 => 92 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_prp.rb b/app/models/form/lettings/questions/referral_prp.rb index 44799bb8c..b0aed7b98 100644 --- a/app/models/form/lettings/questions/referral_prp.rb +++ b/app/models/form/lettings/questions/referral_prp.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralPrp < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralPrp < ::Form::Question @copy_key = "lettings.household_situation.referral.prp" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/referral_register.rb b/app/models/form/lettings/questions/referral_register.rb new file mode 100644 index 000000000..cc3c25e74 --- /dev/null +++ b/app/models/form/lettings/questions/referral_register.rb @@ -0,0 +1,56 @@ +# added in 2026 +class Form::Lettings::Questions::ReferralRegister < ::Form::Question + def initialize(id, hsh, page, provider_type) + super(id, hsh, page) + @id = "referral_register" + @copy_key = "lettings.household_situation.referral.register" + @type = "radio" + @check_answers_card_number = 0 + @provider_type = provider_type + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) + @question_number += 1 if @provider_type == :prp + end + + def answer_options + if @provider_type == :la + { + "1" => { + "value" => "Renewal to the same tenant in the same property", + }, + "2" => { + "value" => "Internal transfer from another property owned by the same local authority - for existing social tenants only", + }, + "3" => { + "value" => "From a housing register (waiting list)", + }, + "4" => { + "value" => "Tenant applied directly (not via a nomination or housing register)", + }, + }.freeze + else + { + "5" => { + "value" => "Renewal to the same tenant in the same property", + }, + "6" => { + "value" => "From a local authority housing register (waiting list) or a register with local authority involvement", + }, + "7" => { + "value" => "From a housing register (waiting list) with no local authority involvement", + }, + "8" => { + "value" => "Tenant applied directly (not via a nomination or waiting list)", + }, + "9" => { + "value" => "Don't know", + }, + }.freeze + end + end + + def derived?(log) + log.is_renewal? + end + + QUESTION_NUMBER_FROM_YEAR = { 2026 => 91 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_supported_housing.rb b/app/models/form/lettings/questions/referral_supported_housing.rb index d8d05fade..2caddc8e2 100644 --- a/app/models/form/lettings/questions/referral_supported_housing.rb +++ b/app/models/form/lettings/questions/referral_supported_housing.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Questions::ReferralSupportedHousing < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +6,7 @@ class Form::Lettings::Questions::ReferralSupportedHousing < ::Form::Question @copy_key = "lettings.household_situation.referral.supported_housing.la" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -92,5 +93,5 @@ class Form::Lettings::Questions::ReferralSupportedHousing < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84, 2025 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/referral_supported_housing_prp.rb b/app/models/form/lettings/questions/referral_supported_housing_prp.rb index 75cc218fe..89f02a723 100644 --- a/app/models/form/lettings/questions/referral_supported_housing_prp.rb +++ b/app/models/form/lettings/questions/referral_supported_housing_prp.rb @@ -1,3 +1,4 @@ +# removed in 2025 class Form::Lettings::Questions::ReferralSupportedHousingPrp < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +6,7 @@ class Form::Lettings::Questions::ReferralSupportedHousingPrp < ::Form::Question @copy_key = "lettings.household_situation.referral.supported_housing.prp" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -104,5 +105,5 @@ class Form::Lettings::Questions::ReferralSupportedHousingPrp < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84, 2025 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/referral_type.rb b/app/models/form/lettings/questions/referral_type.rb index 5ff0f411e..b84e85155 100644 --- a/app/models/form/lettings/questions/referral_type.rb +++ b/app/models/form/lettings/questions/referral_type.rb @@ -1,3 +1,5 @@ +# added in 2025 +# removed in 2026 class Form::Lettings::Questions::ReferralType < ::Form::Question def initialize(id, hsh, page) super @@ -5,7 +7,7 @@ class Form::Lettings::Questions::ReferralType < ::Form::Question @copy_key = "lettings.household_situation.referral.type" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options diff --git a/app/models/form/lettings/questions/renewal.rb b/app/models/form/lettings/questions/renewal.rb index e78d98247..71007166b 100644 --- a/app/models/form/lettings/questions/renewal.rb +++ b/app/models/form/lettings/questions/renewal.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::Renewal < ::Form::Question @id = "renewal" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end ANSWER_OPTIONS = { @@ -13,5 +13,5 @@ class Form::Lettings::Questions::Renewal < ::Form::Question } .freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 4, 2024 => 6 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 4, 2024 => 6, 2025 => 6, 2026 => 6 }.freeze end diff --git a/app/models/form/lettings/questions/rent_type.rb b/app/models/form/lettings/questions/rent_type.rb index 7700c5284..5940c18dc 100644 --- a/app/models/form/lettings/questions/rent_type.rb +++ b/app/models/form/lettings/questions/rent_type.rb @@ -7,7 +7,7 @@ class Form::Lettings::Questions::RentType < ::Form::Question @top_guidance_partial = "rent_type_definitions" @answer_options = answer_options @conditional_for = { "irproduct_other" => [5] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end ANSWER_OPTIONS = { @@ -29,7 +29,7 @@ class Form::Lettings::Questions::RentType < ::Form::Question "6" => { "value" => "Specified accommodation - exempt accommodation, managed properties, refuges and local authority hostels" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 6, 2024 => 8 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 6, 2024 => 8, 2025 => 8, 2026 => 8 }.freeze def answer_options form.start_year_2025_or_later? ? ANSWER_OPTIONS_2025 : ANSWER_OPTIONS diff --git a/app/models/form/lettings/questions/reservist.rb b/app/models/form/lettings/questions/reservist.rb index 023f1655d..f6e97c3d8 100644 --- a/app/models/form/lettings/questions/reservist.rb +++ b/app/models/form/lettings/questions/reservist.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Reservist < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -15,5 +15,5 @@ class Form::Lettings::Questions::Reservist < ::Form::Question "3" => { "value" => "Person prefers not to say" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 68, 2024 => 67 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 68, 2024 => 67, 2025 => 67, 2026 => 74 }.freeze end diff --git a/app/models/form/lettings/questions/rsnvac.rb b/app/models/form/lettings/questions/rsnvac.rb index 42c8d9f92..48523b284 100644 --- a/app/models/form/lettings/questions/rsnvac.rb +++ b/app/models/form/lettings/questions/rsnvac.rb @@ -3,7 +3,7 @@ class Form::Lettings::Questions::Rsnvac < ::Form::Question super @id = "rsnvac" @type = "radio" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -98,5 +98,5 @@ class Form::Lettings::Questions::Rsnvac < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 17, 2024 => 18, 2025 => 15 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 17, 2024 => 18, 2025 => 15, 2026 => 15 }.freeze end diff --git a/app/models/form/lettings/questions/rsnvac_first_let.rb b/app/models/form/lettings/questions/rsnvac_first_let.rb index 01389871c..16d6219b6 100644 --- a/app/models/form/lettings/questions/rsnvac_first_let.rb +++ b/app/models/form/lettings/questions/rsnvac_first_let.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::RsnvacFirstLet < ::Form::Question @id = "rsnvac" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -13,5 +13,5 @@ class Form::Lettings::Questions::RsnvacFirstLet < ::Form::Question "15" => { "value" => "First let of new-build property" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 15, 2024 => 16, 2025 => 13 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 15, 2024 => 16, 2025 => 13, 2026 => 13 }.freeze end diff --git a/app/models/form/lettings/questions/scharge_4_weekly.rb b/app/models/form/lettings/questions/scharge_4_weekly.rb index 8c4156774..e95f5b1d2 100644 --- a/app/models/form/lettings/questions/scharge_4_weekly.rb +++ b/app/models/form/lettings/questions/scharge_4_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::Scharge4Weekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 4 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/scharge_bi_weekly.rb b/app/models/form/lettings/questions/scharge_bi_weekly.rb index 7803f8b37..24904797e 100644 --- a/app/models/form/lettings/questions/scharge_bi_weekly.rb +++ b/app/models/form/lettings/questions/scharge_bi_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SchargeBiWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 2 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/scharge_monthly.rb b/app/models/form/lettings/questions/scharge_monthly.rb index 073d4a772..631192bd4 100644 --- a/app/models/form/lettings/questions/scharge_monthly.rb +++ b/app/models/form/lettings/questions/scharge_monthly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SchargeMonthly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every month" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/scharge_weekly.rb b/app/models/form/lettings/questions/scharge_weekly.rb index b6befbad3..5f8aa9843 100644 --- a/app/models/form/lettings/questions/scharge_weekly.rb +++ b/app/models/form/lettings/questions/scharge_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SchargeWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every week" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93, 2026 => 101 }.freeze end diff --git a/app/models/form/lettings/questions/scheme_id.rb b/app/models/form/lettings/questions/scheme_id.rb index 862ef3130..c9b371f40 100644 --- a/app/models/form/lettings/questions/scheme_id.rb +++ b/app/models/form/lettings/questions/scheme_id.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::SchemeId < ::Form::Question @answer_options = answer_options @top_guidance_partial = "finding_scheme" @bottom_guidance_partial = "scheme_selection" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? @inferred_answers = { "location.name": { "scheme_has_multiple_locations?": false, @@ -56,5 +56,5 @@ private false end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 9, 2024 => 4 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 9, 2024 => 4, 2025 => 4, 2026 => 4 }.freeze end diff --git a/app/models/form/lettings/questions/sheltered.rb b/app/models/form/lettings/questions/sheltered.rb index 35a16ae05..ca684c7af 100644 --- a/app/models/form/lettings/questions/sheltered.rb +++ b/app/models/form/lettings/questions/sheltered.rb @@ -3,7 +3,7 @@ class Form::Lettings::Questions::Sheltered < ::Form::Question super @id = "sheltered" @type = "radio" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -27,5 +27,5 @@ class Form::Lettings::Questions::Sheltered < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 29, 2024 => 29, 2025 => 25 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 29, 2024 => 29, 2025 => 25, 2026 => 24 }.freeze end diff --git a/app/models/form/lettings/questions/starter_tenancy_type.rb b/app/models/form/lettings/questions/starter_tenancy_type.rb index dfda74bc0..4224781bd 100644 --- a/app/models/form/lettings/questions/starter_tenancy_type.rb +++ b/app/models/form/lettings/questions/starter_tenancy_type.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::StarterTenancyType < ::Form::Question @type = "radio" @check_answers_card_number = 0 @conditional_for = { "tenancyother" => [3] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -65,5 +65,5 @@ class Form::Lettings::Questions::StarterTenancyType < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28, 2026 => 27 }.freeze end diff --git a/app/models/form/lettings/questions/startertenancy.rb b/app/models/form/lettings/questions/startertenancy.rb index 6bec6a360..464e5d3a6 100644 --- a/app/models/form/lettings/questions/startertenancy.rb +++ b/app/models/form/lettings/questions/startertenancy.rb @@ -5,10 +5,10 @@ class Form::Lettings::Questions::Startertenancy < ::Form::Question @type = "radio" @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { "1" => { "value" => "Yes" }, "2" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 26, 2024 => 26, 2025 => 27 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 26, 2024 => 26, 2025 => 27, 2026 => 26 }.freeze end diff --git a/app/models/form/lettings/questions/stock_owner.rb b/app/models/form/lettings/questions/stock_owner.rb index 466b08e3f..6d2ee1d64 100644 --- a/app/models/form/lettings/questions/stock_owner.rb +++ b/app/models/form/lettings/questions/stock_owner.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::StockOwner < ::Form::Question @id = "owning_organisation_id" @derived = true @type = "select" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end def answer_options(log = nil, user = nil) @@ -86,5 +86,5 @@ private "#{name} (inactive as of #{merge_date.to_fs(:govuk_date)})" end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 1 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 1, 2024 => 1, 2025 => 1, 2026 => 1 }.freeze end diff --git a/app/models/form/lettings/questions/supcharg_4_weekly.rb b/app/models/form/lettings/questions/supcharg_4_weekly.rb index 227aead7a..1e3c502b2 100644 --- a/app/models/form/lettings/questions/supcharg_4_weekly.rb +++ b/app/models/form/lettings/questions/supcharg_4_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::Supcharg4Weekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 4 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95, 2026 => 103 }.freeze end diff --git a/app/models/form/lettings/questions/supcharg_bi_weekly.rb b/app/models/form/lettings/questions/supcharg_bi_weekly.rb index e01783122..4ad8048b8 100644 --- a/app/models/form/lettings/questions/supcharg_bi_weekly.rb +++ b/app/models/form/lettings/questions/supcharg_bi_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SupchargBiWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every 2 weeks" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95, 2026 => 103 }.freeze end diff --git a/app/models/form/lettings/questions/supcharg_monthly.rb b/app/models/form/lettings/questions/supcharg_monthly.rb index 25da179d2..85060eda9 100644 --- a/app/models/form/lettings/questions/supcharg_monthly.rb +++ b/app/models/form/lettings/questions/supcharg_monthly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SupchargMonthly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every month" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95, 2026 => 103 }.freeze end diff --git a/app/models/form/lettings/questions/supcharg_weekly.rb b/app/models/form/lettings/questions/supcharg_weekly.rb index c6f7a666d..e34473e17 100644 --- a/app/models/form/lettings/questions/supcharg_weekly.rb +++ b/app/models/form/lettings/questions/supcharg_weekly.rb @@ -12,9 +12,9 @@ class Form::Lettings::Questions::SupchargWeekly < ::Form::Question @result_field = "tcharge" @prefix = "£" @suffix = " every week" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95, 2026 => 103 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_length.rb b/app/models/form/lettings/questions/tenancy_length.rb index a3155f8c0..27ac9dbdc 100644 --- a/app/models/form/lettings/questions/tenancy_length.rb +++ b/app/models/form/lettings/questions/tenancy_length.rb @@ -9,8 +9,8 @@ class Form::Lettings::Questions::TenancyLength < ::Form::Question @max = 150 @min = 0 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29, 2026 => 28 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_length_affordable_rent.rb b/app/models/form/lettings/questions/tenancy_length_affordable_rent.rb index 58b83fe90..f26adbe6f 100644 --- a/app/models/form/lettings/questions/tenancy_length_affordable_rent.rb +++ b/app/models/form/lettings/questions/tenancy_length_affordable_rent.rb @@ -9,8 +9,8 @@ class Form::Lettings::Questions::TenancyLengthAffordableRent < ::Form::Question @max = 150 @min = 0 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29, 2026 => 28 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb b/app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb index c85583d95..ed3a13b0c 100644 --- a/app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb +++ b/app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb @@ -9,8 +9,8 @@ class Form::Lettings::Questions::TenancyLengthIntermediateRent < ::Form::Questio @max = 150 @min = 0 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29, 2026 => 28 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_length_periodic.rb b/app/models/form/lettings/questions/tenancy_length_periodic.rb index e7f9336ec..85041680e 100644 --- a/app/models/form/lettings/questions/tenancy_length_periodic.rb +++ b/app/models/form/lettings/questions/tenancy_length_periodic.rb @@ -9,8 +9,8 @@ class Form::Lettings::Questions::TenancyLengthPeriodic < ::Form::Question @max = 150 @min = 0 @step = 1 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 28, 2024 => 28, 2025 => 29, 2026 => 28 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_other.rb b/app/models/form/lettings/questions/tenancy_other.rb index 8a8a94108..6f455fead 100644 --- a/app/models/form/lettings/questions/tenancy_other.rb +++ b/app/models/form/lettings/questions/tenancy_other.rb @@ -5,8 +5,8 @@ class Form::Lettings::Questions::TenancyOther < ::Form::Question @copy_key = "lettings.tenancy_information.tenancy.#{page.id}.tenancyother" @type = "text" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28, 2026 => 27 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_start_date.rb b/app/models/form/lettings/questions/tenancy_start_date.rb index cf1b556e7..fc5137626 100644 --- a/app/models/form/lettings/questions/tenancy_start_date.rb +++ b/app/models/form/lettings/questions/tenancy_start_date.rb @@ -1,11 +1,24 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question + include CollectionTimeHelper + def initialize(id, hsh, page) super @id = "startdate" @type = "date" @unresolved_hint_text = "Some scheme details have changed, and now this log needs updating. Check that the tenancy start date is correct." - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? + end + + def date_example_override(log) + return unless form.start_year_2026_or_later? + + example_date = + [date_mid_collection_year(log.startdate), Time.zone.today + 7] + .min + .to_formatted_s(:govuk_date_number_month) + .tr(" ", "/") + I18n.t("forms.#{form.start_date.year}.#{copy_key}.example", default: "", example_date:) end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 5, 2024 => 7 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 5, 2024 => 7, 2025 => 7, 2026 => 7 }.freeze end diff --git a/app/models/form/lettings/questions/tenancy_type.rb b/app/models/form/lettings/questions/tenancy_type.rb index 96fda2687..d2b9a5925 100644 --- a/app/models/form/lettings/questions/tenancy_type.rb +++ b/app/models/form/lettings/questions/tenancy_type.rb @@ -6,7 +6,7 @@ class Form::Lettings::Questions::TenancyType < ::Form::Question @type = "radio" @check_answers_card_number = 0 @conditional_for = { "tenancyother" => [3] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -65,5 +65,5 @@ class Form::Lettings::Questions::TenancyType < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 27, 2024 => 27, 2025 => 28, 2026 => 27 }.freeze end diff --git a/app/models/form/lettings/questions/tenancyother_value_check.rb b/app/models/form/lettings/questions/tenancyother_value_check.rb new file mode 100644 index 000000000..309de7169 --- /dev/null +++ b/app/models/form/lettings/questions/tenancyother_value_check.rb @@ -0,0 +1,13 @@ +class Form::Lettings::Questions::TenancyotherValueCheck < ::Form::Question + def initialize(id, hsh, page) + super + @id = "tenancyother_value_check" + @copy_key = "lettings.soft_validations.tenancyother_value_check" + @type = "interruption_screen" + @check_answers_card_number = 0 + @answer_options = ANSWER_OPTIONS + @hidden_in_check_answers = { "depends_on" => [{ "tenancyother_value_check" => 0 }, { "tenancyother_value_check" => 1 }] } + end + + ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze +end diff --git a/app/models/form/lettings/questions/tenant_code.rb b/app/models/form/lettings/questions/tenant_code.rb index 7b7be3cac..36b3d0aee 100644 --- a/app/models/form/lettings/questions/tenant_code.rb +++ b/app/models/form/lettings/questions/tenant_code.rb @@ -4,8 +4,8 @@ class Form::Lettings::Questions::TenantCode < ::Form::Question @id = "tenancycode" @type = "text" @width = 10 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) if form.start_date.present? end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 7, 2024 => 9 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 7, 2024 => 9, 2025 => 9, 2026 => 9 }.freeze end diff --git a/app/models/form/lettings/questions/town_or_city.rb b/app/models/form/lettings/questions/town_or_city.rb index 5673b7f01..6db52c92d 100644 --- a/app/models/form/lettings/questions/town_or_city.rb +++ b/app/models/form/lettings/questions/town_or_city.rb @@ -6,9 +6,9 @@ class Form::Lettings::Questions::TownOrCity < ::Form::Question @type = "text" @plain_label = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @hide_question_number_on_page = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 12, 2024 => 13, 2025 => 17, 2026 => 17 }.freeze end diff --git a/app/models/form/lettings/questions/tshortfall.rb b/app/models/form/lettings/questions/tshortfall.rb index ced2a426a..a271f9e06 100644 --- a/app/models/form/lettings/questions/tshortfall.rb +++ b/app/models/form/lettings/questions/tshortfall.rb @@ -21,9 +21,9 @@ class Form::Lettings::Questions::Tshortfall < ::Form::Question { "label" => " every week for 52 weeks", "depends_on" => { "period" => 1 } }, { "label" => " every week for 53 weeks", "depends_on" => { "period" => 10 } }, ] - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @strip_commas = true end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97, 2026 => 105 }.freeze end diff --git a/app/models/form/lettings/questions/tshortfall_known.rb b/app/models/form/lettings/questions/tshortfall_known.rb index 8ba0b038c..97b41a09b 100644 --- a/app/models/form/lettings/questions/tshortfall_known.rb +++ b/app/models/form/lettings/questions/tshortfall_known.rb @@ -7,10 +7,10 @@ class Form::Lettings::Questions::TshortfallKnown < ::Form::Question @check_answers_card_number = 0 @answer_options = ANSWER_OPTIONS @conditional_for = { "tshortfall" => [0] } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97, 2026 => 105 }.freeze end diff --git a/app/models/form/lettings/questions/unittype_gn.rb b/app/models/form/lettings/questions/unittype_gn.rb index ad8298929..34391bf83 100644 --- a/app/models/form/lettings/questions/unittype_gn.rb +++ b/app/models/form/lettings/questions/unittype_gn.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::UnittypeGn < ::Form::Question @id = "unittype_gn" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -18,5 +18,5 @@ class Form::Lettings::Questions::UnittypeGn < ::Form::Question "6" => { "value" => "Other" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 19 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 19, 2024 => 19, 2025 => 19, 2026 => 19 }.freeze end diff --git a/app/models/form/lettings/questions/uprn.rb b/app/models/form/lettings/questions/uprn.rb index 7f1f240f9..98ffb75c2 100644 --- a/app/models/form/lettings/questions/uprn.rb +++ b/app/models/form/lettings/questions/uprn.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::Uprn < ::Form::Question @copy_key = "lettings.property_information.uprn.uprn" @type = "text" @width = 10 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @inferred_check_answers_value = [ { "condition" => { "uprn_known" => 0 }, @@ -35,5 +35,5 @@ class Form::Lettings::Questions::Uprn < ::Form::Question "\n\n#{value.join("\n")}" end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 11, 2024 => 12, 2025 => 16 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 11, 2024 => 12, 2025 => 16, 2026 => 16 }.freeze end diff --git a/app/models/form/lettings/questions/uprn_known.rb b/app/models/form/lettings/questions/uprn_known.rb index 6ac70e415..5dab0f35a 100644 --- a/app/models/form/lettings/questions/uprn_known.rb +++ b/app/models/form/lettings/questions/uprn_known.rb @@ -18,7 +18,7 @@ class Form::Lettings::Questions::UprnKnown < ::Form::Question { "uprn_known" => 1 }, ], } - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -30,5 +30,5 @@ class Form::Lettings::Questions::UprnKnown < ::Form::Question I18n.t("validations.property.uprn_known.invalid") end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 11, 2024 => 12, 2025 => 16 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 11, 2024 => 12, 2025 => 16, 2026 => 16 }.freeze end diff --git a/app/models/form/lettings/questions/voiddate.rb b/app/models/form/lettings/questions/voiddate.rb index 3bce8a7b8..afdbb01ae 100644 --- a/app/models/form/lettings/questions/voiddate.rb +++ b/app/models/form/lettings/questions/voiddate.rb @@ -3,9 +3,9 @@ class Form::Lettings::Questions::Voiddate < ::Form::Question super @id = "voiddate" @type = "date" - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) @top_guidance_partial = "void_date" end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 23 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 23, 2024 => 23, 2025 => 23, 2026 => 22 }.freeze end diff --git a/app/models/form/lettings/questions/waityear.rb b/app/models/form/lettings/questions/waityear.rb index 5c81fdedc..7e0f2b77e 100644 --- a/app/models/form/lettings/questions/waityear.rb +++ b/app/models/form/lettings/questions/waityear.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::Waityear < ::Form::Question @id = "waityear" @type = "radio" @check_answers_card_number = 0 - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -49,5 +49,5 @@ class Form::Lettings::Questions::Waityear < ::Form::Question }.freeze end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 76, 2024 => 75 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 76, 2024 => 75, 2025 => 75, 2026 => 82 }.freeze end diff --git a/app/models/form/lettings/questions/wheelchair.rb b/app/models/form/lettings/questions/wheelchair.rb index 9da5399e6..289e298f5 100644 --- a/app/models/form/lettings/questions/wheelchair.rb +++ b/app/models/form/lettings/questions/wheelchair.rb @@ -4,7 +4,7 @@ class Form::Lettings::Questions::Wheelchair < ::Form::Question @id = "wchair" @type = "radio" @answer_options = ANSWER_OPTIONS - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end ANSWER_OPTIONS = { @@ -12,5 +12,5 @@ class Form::Lettings::Questions::Wheelchair < ::Form::Question "2" => { "value" => "No" }, }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 21 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 21, 2024 => 21, 2025 => 21, 2026 => 20 }.freeze end diff --git a/app/models/form/lettings/questions/working_situation1.rb b/app/models/form/lettings/questions/working_situation1.rb index 6098eb136..0a0221579 100644 --- a/app/models/form/lettings/questions/working_situation1.rb +++ b/app/models/form/lettings/questions/working_situation1.rb @@ -5,7 +5,7 @@ class Form::Lettings::Questions::WorkingSituation1 < ::Form::Question @type = "radio" @check_answers_card_number = 1 @answer_options = answer_options - @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @question_number = get_question_number_from_hash(QUESTION_NUMBER_FROM_YEAR) end def answer_options @@ -40,5 +40,5 @@ class Form::Lettings::Questions::WorkingSituation1 < ::Form::Question end end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 37, 2024 => 36 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2023 => 37, 2024 => 36, 2025 => 36, 2026 => 36 }.freeze end diff --git a/app/models/form/lettings/subsections/household_characteristics.rb b/app/models/form/lettings/subsections/household_characteristics.rb index d528e3772..e50a2c788 100644 --- a/app/models/form/lettings/subsections/household_characteristics.rb +++ b/app/models/form/lettings/subsections/household_characteristics.rb @@ -10,18 +10,21 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection @pages ||= [ (Form::Lettings::Pages::Declaration.new(nil, nil, self) unless form.start_year_2024_or_later?), Form::Lettings::Pages::HouseholdMembers.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_hhmemb_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantAge.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_age_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantUnderRetirementValueCheck.new("age_lead_tenant_under_retirement_value_check", nil, self), Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("age_lead_tenant_over_retirement_value_check", nil, self), (Form::Lettings::Pages::LeadTenantSexRegisteredAtBirth.new(nil, nil, self) if form.start_year_2026_or_later?), (Form::Lettings::Pages::LeadTenantGenderSameAsSex.new(nil, nil, self) if form.start_year_2026_or_later?), - Form::Lettings::Pages::LeadTenantGenderIdentity.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::LeadTenantGenderIdentity.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_check", nil, self, person_index: 1) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("gender_lead_tenant_over_retirement_value_check", nil, self), Form::Lettings::Pages::LeadTenantEthnicGroup.new(nil, nil, self), Form::Lettings::Pages::LeadTenantEthnicBackgroundArab.new(nil, nil, self), @@ -52,16 +55,18 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection (Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?), (Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_#{person_index}_multiple_partners_value_check", nil, self, person_index:) if form.start_year_2024_or_later?), (Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), - Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_age_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?), Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_#{person_index}_under_retirement_value_check", nil, self, person_index:), Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_#{person_index}_over_retirement_value_check", nil, self, person_index:), (Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?), (Form::Lettings::Pages::PersonSexRegisteredAtBirth.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?), (Form::Lettings::Pages::PersonGenderSameAsSex.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?), - Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index:), - Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:), + (Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?), Form::Lettings::Pages::PersonOverRetirementValueCheck.new("gender_#{person_index}_over_retirement_value_check", nil, self, person_index:), Form::Lettings::Pages::PersonWorkingSituation.new(nil, nil, self, person_index:), Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("working_situation_#{person_index}_under_retirement_value_check", nil, self, person_index:), diff --git a/app/models/form/lettings/subsections/household_needs.rb b/app/models/form/lettings/subsections/household_needs.rb index e0502386b..4f6414d18 100644 --- a/app/models/form/lettings/subsections/household_needs.rb +++ b/app/models/form/lettings/subsections/household_needs.rb @@ -12,8 +12,9 @@ class Form::Lettings::Subsections::HouseholdNeeds < ::Form::Subsection Form::Lettings::Pages::ArmedForcesServing.new(nil, nil, self), Form::Lettings::Pages::ArmedForcesInjured.new(nil, nil, self), Form::Lettings::Pages::Pregnant.new("pregnant", nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::AccessNeedsExist.new("access_needs_exist", nil, self), Form::Lettings::Pages::TypeOfAccessNeeds.new(nil, nil, self), Form::Lettings::Pages::HealthConditions.new("health_conditions", nil, self), diff --git a/app/models/form/lettings/subsections/household_situation.rb b/app/models/form/lettings/subsections/household_situation.rb index 8bf747f01..cc6ec59de 100644 --- a/app/models/form/lettings/subsections/household_situation.rb +++ b/app/models/form/lettings/subsections/household_situation.rb @@ -22,12 +22,20 @@ class Form::Lettings::Subsections::HouseholdSituation < ::Form::Subsection Form::Lettings::Pages::ReasonablePreferenceReason.new(nil, nil, self), Form::Lettings::Pages::AllocationSystem.new("allocation_system", nil, self), referral_questions, - Form::Lettings::Pages::ReferralValueCheck.new(nil, nil, self), ].flatten.compact end def referral_questions - if form.start_year_2025_or_later? + if form.start_year_2026_or_later? + [ + Form::Lettings::Pages::ReferralRegisterLa.new(nil, nil, self), + Form::Lettings::Pages::ReferralRegisterPrp.new(nil, nil, self), + Form::Lettings::Pages::ReferralNomsLaHr.new(nil, nil, self), + Form::Lettings::Pages::ReferralNomsHr.new(nil, nil, self), + Form::Lettings::Pages::ReferralOrgNominated.new(nil, nil, self), + Form::Lettings::Pages::ReferralOrgDirectlyReferred.new(nil, nil, self), + ] + elsif form.start_year_2025_or_later? [ Form::Lettings::Pages::ReferralType.new(nil, nil, self), Form::Lettings::Pages::ReferralDirect.new(nil, nil, self), @@ -35,6 +43,7 @@ class Form::Lettings::Subsections::HouseholdSituation < ::Form::Subsection Form::Lettings::Pages::ReferralPrp.new(nil, nil, self), Form::Lettings::Pages::ReferralHsc.new(nil, nil, self), Form::Lettings::Pages::ReferralJustice.new(nil, nil, self), + Form::Lettings::Pages::ReferralValueCheck.new(nil, nil, self), ] else [ @@ -42,6 +51,7 @@ class Form::Lettings::Subsections::HouseholdSituation < ::Form::Subsection Form::Lettings::Pages::ReferralGeneralNeedsPrp.new(nil, nil, self), Form::Lettings::Pages::ReferralSupportedHousing.new(nil, nil, self), Form::Lettings::Pages::ReferralSupportedHousingPrp.new(nil, nil, self), + Form::Lettings::Pages::ReferralValueCheck.new(nil, nil, self), ] end end diff --git a/app/models/form/lettings/subsections/tenancy_information.rb b/app/models/form/lettings/subsections/tenancy_information.rb index b65039b8d..e6ff48457 100644 --- a/app/models/form/lettings/subsections/tenancy_information.rb +++ b/app/models/form/lettings/subsections/tenancy_information.rb @@ -12,6 +12,7 @@ class Form::Lettings::Subsections::TenancyInformation < ::Form::Subsection Form::Lettings::Pages::StarterTenancy.new("starter_tenancy", nil, self), Form::Lettings::Pages::TenancyType.new(nil, nil, self), Form::Lettings::Pages::StarterTenancyType.new(nil, nil, self), + (Form::Lettings::Pages::TenancyotherValueCheck.new(nil, nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::TenancyLength.new(nil, nil, self), Form::Lettings::Pages::TenancyLengthAffordableRent.new(nil, nil, self), Form::Lettings::Pages::TenancyLengthIntermediateRent.new(nil, nil, self), diff --git a/app/models/form/question.rb b/app/models/form/question.rb index b6f3b8b2f..be90899f9 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -299,6 +299,11 @@ class Form::Question answer_options.keys.reject { |x| x.match(/divider/) } end + # used by date questions that need bespoke formatting for the example date + def date_example_override(_log) + nil + end + private def selected_answer_option_is_derived?(log) @@ -362,6 +367,13 @@ private inferred_answer["value"] if inferred_answer.present? end + # every year currently visible should have an explicit question number specified. + # however, form_handler.rb will still initialise the next form even if its not visible. + # so we have a fallback to the latest year for these future years so all question have a question number. + def get_question_number_from_hash(hash) + hash[form.start_date.year] || hash[hash.keys.max] + end + RADIO_YES_VALUE = { renewal: [1], postcode_known: [1], @@ -434,6 +446,14 @@ private sex6: %w[R], sex7: %w[R], sex8: %w[R], + sexrab1: %w[R], + sexrab2: %w[R], + sexrab3: %w[R], + sexrab4: %w[R], + sexrab5: %w[R], + sexrab6: %w[R], + sexrab7: %w[R], + sexrab8: %w[R], relat2: [3], relat3: [3], relat4: [3], diff --git a/app/models/form/sales/pages/deposit.rb b/app/models/form/sales/pages/deposit.rb index 4fc5e1b83..411cfb270 100644 --- a/app/models/form/sales/pages/deposit.rb +++ b/app/models/form/sales/pages/deposit.rb @@ -23,6 +23,7 @@ class Form::Sales::Pages::Deposit < ::Form::Page def copy_key return "sales.sale_information.deposit.shared_ownership" if @ownershipsch == 1 return "sales.sale_information.deposit.discounted_ownership" if @ownershipsch == 2 - return "sales.sale_information.deposit.outright_sale" if @ownershipsch == 3 + + "sales.sale_information.deposit.outright_sale" if @ownershipsch == 3 end end diff --git a/app/models/form/sales/questions/deposit_amount.rb b/app/models/form/sales/questions/deposit_amount.rb index 9fe7a7ce1..ede6335e1 100644 --- a/app/models/form/sales/questions/deposit_amount.rb +++ b/app/models/form/sales/questions/deposit_amount.rb @@ -29,12 +29,14 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question def top_guidance_partial return "financial_calculations_shared_ownership" if @ownershipsch == 1 return "financial_calculations_discounted_ownership" if @ownershipsch == 2 - return "financial_calculations_outright_sale" if @ownershipsch == 3 + + "financial_calculations_outright_sale" if @ownershipsch == 3 end def copy_key return "sales.sale_information.deposit.shared_ownership" if @ownershipsch == 1 return "sales.sale_information.deposit.discounted_ownership" if @ownershipsch == 2 - return "sales.sale_information.deposit.outright_sale" if @ownershipsch == 3 + + "sales.sale_information.deposit.outright_sale" if @ownershipsch == 3 end end diff --git a/app/models/form/sales/questions/mortgage_amount.rb b/app/models/form/sales/questions/mortgage_amount.rb index 0d2bda4fd..a61dce8f3 100644 --- a/app/models/form/sales/questions/mortgage_amount.rb +++ b/app/models/form/sales/questions/mortgage_amount.rb @@ -26,6 +26,7 @@ class Form::Sales::Questions::MortgageAmount < ::Form::Question def top_guidance_partial return "financial_calculations_shared_ownership" if @ownershipsch == 1 return "financial_calculations_discounted_ownership" if @ownershipsch == 2 - return "financial_calculations_outright_sale" if @ownershipsch == 3 + + "financial_calculations_outright_sale" if @ownershipsch == 3 end end diff --git a/app/models/form/sales/questions/mortgageused.rb b/app/models/form/sales/questions/mortgageused.rb index a0079b1b4..fc5818886 100644 --- a/app/models/form/sales/questions/mortgageused.rb +++ b/app/models/form/sales/questions/mortgageused.rb @@ -41,6 +41,7 @@ class Form::Sales::Questions::Mortgageused < ::Form::Question def top_guidance_partial return "financial_calculations_shared_ownership" if @ownershipsch == 1 return "financial_calculations_discounted_ownership" if @ownershipsch == 2 - return "financial_calculations_outright_sale" if @ownershipsch == 3 + + "financial_calculations_outright_sale" if @ownershipsch == 3 end end diff --git a/app/models/form/sales/questions/purchase_price.rb b/app/models/form/sales/questions/purchase_price.rb index 56810eae4..d37d549ce 100644 --- a/app/models/form/sales/questions/purchase_price.rb +++ b/app/models/form/sales/questions/purchase_price.rb @@ -30,6 +30,7 @@ class Form::Sales::Questions::PurchasePrice < ::Form::Question def top_guidance_partial return "financial_calculations_discounted_ownership" if @ownership_sch == 2 - return "financial_calculations_outright_sale" if @ownership_sch == 3 + + "financial_calculations_outright_sale" if @ownership_sch == 3 end end diff --git a/app/models/form/subsection.rb b/app/models/form/subsection.rb index 3b74e29a5..41431b06f 100644 --- a/app/models/form/subsection.rb +++ b/app/models/form/subsection.rb @@ -1,5 +1,5 @@ class Form::Subsection - attr_accessor :id, :label, :section, :pages, :depends_on, :form + attr_accessor :id, :label, :section, :pages, :depends_on def initialize(id, hsh, section) @id = id diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index f2230c4e5..d70d0e012 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -35,6 +35,7 @@ class LettingsLog < Log before_validation :set_derived_fields! before_validation :process_uprn_change!, if: :should_process_uprn_change? before_validation :process_address_change!, if: :should_process_address_change? + before_validation :reset_referral_register!, if: :should_reset_referral_register? belongs_to :scheme, optional: true belongs_to :location, optional: true @@ -376,8 +377,12 @@ class LettingsLog < Log end def is_internal_transfer? - # 1: Internal Transfer - referral == 1 + if form.start_year_2026_or_later? + referral_register == 2 || (referral_register == 6 && referral_noms == 3) || (referral_register == 7 && referral_noms == 5) + else + # 1: Internal Transfer + referral == 1 + end end def is_from_prp_only_housing_register_or_waiting_list? @@ -477,7 +482,7 @@ class LettingsLog < Log def is_london_rent? # 2: London Affordable Rent # 4: London Living Rent - rent_type == 2 || rent_type == 4 + [2, 4].include?(rent_type) end def previous_tenancy_was_foster_care? @@ -544,6 +549,12 @@ class LettingsLog < Log [30, 31].any?(prevten) end + def is_prevten_general_needs? + return false unless prevten + + ![30, 31, 32, 33, 35, 38, 40, 6].include?(prevten) + end + def owning_organisation_name owning_organisation&.name end @@ -676,7 +687,7 @@ class LettingsLog < Log end def has_any_person_details?(person_index) - ["sex#{person_index}", "relat#{person_index}", "ecstat#{person_index}"].any? { |field| public_send(field).present? } || public_send("age#{person_index}_known") == 1 + ["sex#{person_index}", "sexrab#{person_index}", "relat#{person_index}", "ecstat#{person_index}"].any? { |field| public_send(field).present? } || public_send("age#{person_index}_known") == 1 end def details_not_known_for_person?(person_index) @@ -703,7 +714,7 @@ class LettingsLog < Log end def affordable_or_social_rent? - renttype == 1 || renttype == 2 + [1, 2].include?(renttype) end def no_or_unknown_other_housing_needs? @@ -776,6 +787,22 @@ class LettingsLog < Log form.start_year_2026_or_later? || !is_supported_housing? end + def referral_is_from_local_authority_housing_register? + referral_register == 6 + end + + def referral_is_from_housing_register? + referral_register == 7 + end + + def referral_is_nominated_by_local_authority? + referral_is_from_local_authority_housing_register? && referral_noms == 1 + end + + def referral_is_directly_referred? + referral_is_from_housing_register? && referral_noms == 7 + end + private def reset_invalid_unresolved_log_fields! @@ -884,6 +911,10 @@ private [sex1, sex2, sex3, sex4, sex5, sex6, sex7, sex8].any?("R") end + def sexrab_refused? + [sexrab1, sexrab2, sexrab3, sexrab4, sexrab5, sexrab6, sexrab7, sexrab8].any?("R") + end + def relat_refused? [relat2, relat3, relat4, relat5, relat6, relat7, relat8].any?("R") end @@ -900,7 +931,7 @@ private num_of_weeks = NUM_OF_WEEKS_FROM_PERIOD[period] return "" unless value && num_of_weeks - format_as_currency((value * 52 / num_of_weeks)) + format_as_currency(value * 52 / num_of_weeks) end def fully_wheelchair_accessible? @@ -947,4 +978,16 @@ private uprn_selection_changed? || startdate_changed? end end + + def reset_referral_register! + self.referral_register = nil + end + + def should_reset_referral_register? + return unless owning_organisation_id_changed? && owning_organisation_id && owning_organisation_id_was + + old_owning_organisation = Organisation.find(owning_organisation_id_was) + + old_owning_organisation.provider_type != owning_organisation.provider_type + end end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 94390c3f9..b33d896c4 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -74,6 +74,7 @@ class Organisation < ApplicationRecord before_save :clear_group_member_fields_if_not_group_member alias_method :la?, :LA? + alias_method :prp?, :PRP? validates :name, presence: { message: I18n.t("validations.organisation.name_missing") } validates :name, uniqueness: { case_sensitive: false, message: I18n.t("validations.organisation.name_not_unique") } diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index d4d23f44d..cf9e0dd44 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -533,7 +533,7 @@ class SalesLog < Log end def is_not_staircasing? - staircase == 2 || staircase == 3 + [2, 3].include?(staircase) end def stairowned_100? diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index 8ba58ba2b..cf1962be0 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -162,7 +162,7 @@ module Validations::HouseholdValidations # 27 Owner occupation (low-cost home ownership) # 28 Living with Friends or Family # 29 Prison / Approved Probation Hostel - if record.is_internal_transfer? && [3, 4, 7, 10, 13, 14, 19, 23, 24, 25, 26, 27, 28, 29].include?(record.prevten) + if record.is_internal_transfer? && [3, 4, 7, 10, 13, 14, 19, 23, 24, 25, 26, 27, 28, 29].include?(record.prevten) && !record.form.start_year_2026_or_later? label = record.form.get_question("prevten", record).present? ? record.form.get_question("prevten", record).label_from_value(record.prevten) : "" record.errors.add :prevten, :internal_transfer_non_social_housing, message: I18n.t("validations.lettings.household.prevten.internal_transfer", prevten: label) record.errors.add :referral, :internal_transfer_non_social_housing, message: I18n.t("validations.lettings.household.referral.prevten_invalid", prevten: label) @@ -172,7 +172,14 @@ module Validations::HouseholdValidations def validate_referral(record) return unless record.owning_organisation - if record.is_internal_transfer? && record.owning_organisation.provider_type == "PRP" && record.is_prevten_la_general_needs? + if record.form.start_year_2026_or_later? + if record.is_internal_transfer? && record.is_prevten_general_needs? + label = record.form.get_question("prevten", record).present? ? record.form.get_question("prevten", record).label_from_value(record.prevten) : "" + record.errors.add :prevten, message: I18n.t("validations.lettings.household.prevten.general_needs.internal_transfer", prevten: label) + record.errors.add :referral_register, message: I18n.t("validations.lettings.household.referral.general_needs.internal_transfer", prevten: label) + record.errors.add :referral_noms, message: I18n.t("validations.lettings.household.referral.general_needs.internal_transfer", prevten: label) + end + elsif record.is_internal_transfer? && record.owning_organisation.prp? && record.is_prevten_la_general_needs? record.errors.add :prevten, :internal_transfer_fixed_or_lifetime, message: I18n.t("validations.lettings.household.prevten.la_general_needs.internal_transfer") record.errors.add :referral, :internal_transfer_fixed_or_lifetime, message: I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer") end diff --git a/app/models/validations/sales/sale_information_validations.rb b/app/models/validations/sales/sale_information_validations.rb index f34eec790..063c16599 100644 --- a/app/models/validations/sales/sale_information_validations.rb +++ b/app/models/validations/sales/sale_information_validations.rb @@ -136,7 +136,7 @@ module Validations::Sales::SaleInformationValidations def validate_grant_amount(record) return unless record.saledate && record.form.start_year_2024_or_later? - return unless record.grant && (record.type == 8 || record.type == 21) + return unless record.grant && [8, 21].include?(record.type) unless record.grant.between?(9_000, 16_000) record.errors.add :grant, I18n.t("validations.sales.sale_information.grant.out_of_range") diff --git a/app/models/validations/sales/soft_validations.rb b/app/models/validations/sales/soft_validations.rb index 2bc574774..3569c379f 100644 --- a/app/models/validations/sales/soft_validations.rb +++ b/app/models/validations/sales/soft_validations.rb @@ -144,7 +144,7 @@ module Validations::Sales::SoftValidations def grant_outside_common_range? return unless grant && type && saledate - return if form.start_year_2024_or_later? && (type == 21 || type == 8) + return if form.start_year_2024_or_later? && [21, 8].include?(type) !grant.between?(9_000, 16_000) end diff --git a/app/models/validations/shared_validations.rb b/app/models/validations/shared_validations.rb index 530735213..4558a5a36 100644 --- a/app/models/validations/shared_validations.rb +++ b/app/models/validations/shared_validations.rb @@ -56,11 +56,11 @@ module Validations::SharedValidations next unless incorrect_accuracy - case question.step - when 0.01 then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_hundredth", field:) - when 0.1 then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_tenth", field:) - when 1 then record.errors.add question.id.to_sym, :not_integer, message: I18n.t("validations.shared.numeric.whole_number", field:) - when 10 then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_ten", field:) + case question.step.to_d + when BigDecimal("0.01") then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_hundredth", field:) + when BigDecimal("0.1") then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_tenth", field:) + when BigDecimal("1") then record.errors.add question.id.to_sym, :not_integer, message: I18n.t("validations.shared.numeric.whole_number", field:) + when BigDecimal("10") then record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_ten", field:) else record.errors.add question.id.to_sym, I18n.t("validations.shared.numeric.nearest_step", field:, step: question.step) end diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 35436dc32..ea17d0601 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -75,30 +75,16 @@ module Validations::SoftValidations end end - def all_male_tenants_in_a_pregnant_household? - all_male_tenants_in_the_household? && all_tenants_gender_information_completed? && preg_occ == 1 + def no_household_member_likely_to_be_pregnant? + all_male_tenants_in_a_pregnant_household? || non_males_in_pregnant_household_not_in_pregnancy_range? end - def female_in_pregnant_household_in_soft_validation_range? - all_tenants_age_and_gender_information_completed? && females_in_the_household? && !females_in_age_range(16, 50) && preg_occ == 1 + def all_male_tenants_in_a_pregnant_household? + all_tenants_gender_information_completed? && all_male_tenants_in_the_household? && preg_occ == 1 end - def all_tenants_age_and_gender_information_completed? - return false if hhmemb.present? && hhmemb > 8 - - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? - end - end - - def all_tenants_gender_information_completed? - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && details_known_or_lead_tenant?(n) - end + def non_males_in_pregnant_household_not_in_pregnancy_range? + all_tenants_age_and_gender_information_completed? && non_males_in_the_household? && !any_non_male_in_expected_pregnancy_age_range(16, 50) && preg_occ == 1 end TWO_YEARS_IN_DAYS = 730 @@ -208,6 +194,16 @@ module Validations::SoftValidations PHRASES_LIKELY_TO_INDICATE_EXISTING_REASON_CATEGORY_REGEX.match?(reasonother) end + PHRASES_LIKELY_TO_INDICATE_INTRODUCTORY_OR_STARTER_PERIOD = %w[introductory intro starter].freeze + + PHRASES_LIKELY_TO_INDICATE_INTRODUCTORY_OR_STARTER_PERIOD_REGEX = Regexp.union( + PHRASES_LIKELY_TO_INDICATE_INTRODUCTORY_OR_STARTER_PERIOD.map { |phrase| Regexp.new("\\b[^[:alpha]]*#{phrase}[^[:alpha:]]*\\b", Regexp::IGNORECASE) }, + ) + + def tenancyother_might_be_introductory_or_starter_period? + PHRASES_LIKELY_TO_INDICATE_INTRODUCTORY_OR_STARTER_PERIOD_REGEX.match?(tenancyother) + end + def multiple_partners? return unless hhmemb @@ -221,25 +217,54 @@ module Validations::SoftValidations private + def all_tenants_age_and_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + return false unless all_tenants_gender_information_completed? + + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + public_send("age#{n}").present? && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? + end + end + + def all_tenants_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + tenant_gender_information_completed?(n) + end + end + + def tenant_gender_information_completed?(tenant_number) + if form.start_year_2026_or_later? + public_send("sexrab#{tenant_number}").present? && public_send("gender_same_as_sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + else + public_send("sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + end + end + def details_known_or_lead_tenant?(tenant_number) return true if tenant_number == 1 public_send("details_known_#{tenant_number}").zero? end - def females_in_age_range(min, max) + def any_non_male_in_expected_pregnancy_age_range(min, max) person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" && public_send("age#{n}").present? && public_send("age#{n}").between?(min, max) + person_in_expected_pregnancy_age_range(n, min, max) && person_is_non_male(n) end end - def females_in_the_household? + def non_males_in_the_household? person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" || public_send("sex#{n}").nil? + person_is_non_male(n) end end @@ -249,10 +274,36 @@ private person_count = hhmemb || 8 (1..person_count).all? do |n| - public_send("sex#{n}") == "M" + person_is_male(n) end end + def person_is_male(person_number) + if form.start_year_2026_or_later? + sexrab = public_send("sexrab#{person_number}") + gender_same_as_sex = public_send("gender_same_as_sex#{person_number}") + + sexrab == "M" && gender_same_as_sex == 1 + else + public_send("sex#{person_number}") == "M" + end + end + + def person_is_non_male(person_number) + if form.start_year_2026_or_later? + !person_is_male(person_number) + else + # the "non-male" wording was introduced in the 26/27 collection year, before that this behavior was limited to female gender only + public_send("sex#{person_number}") == "F" + end + end + + def person_in_expected_pregnancy_age_range(person_number, min, max) + age = public_send("age#{person_number}") + + age.between?(min, max) + end + def tenant_is_retired?(economic_status) economic_status == 5 end @@ -288,6 +339,8 @@ private end def at_least_one_person_working_situation_is_illness? + return if hhmemb.present? && hhmemb > 8 + person_count = hhmemb || 8 (1..person_count).any? { |n| public_send("ecstat#{n}") == 8 } diff --git a/app/policies/location_policy.rb b/app/policies/location_policy.rb index 3b4a22131..966cfe35c 100644 --- a/app/policies/location_policy.rb +++ b/app/policies/location_policy.rb @@ -32,7 +32,7 @@ class LocationPolicy def delete? return false unless user.support? - return false unless location.status == :incomplete || location.status == :deactivated + return false unless %i[incomplete deactivated].include?(location.status) !has_any_logs_in_editable_collection_period end diff --git a/app/policies/organisation_policy.rb b/app/policies/organisation_policy.rb index 9c5fc4449..4db37b5ea 100644 --- a/app/policies/organisation_policy.rb +++ b/app/policies/organisation_policy.rb @@ -20,7 +20,7 @@ class OrganisationPolicy def delete? return false unless user.support? - return false unless organisation.status == :deactivated || organisation.status == :merged + return false unless %i[deactivated merged].include?(organisation.status) !has_any_logs_in_editable_collection_period end diff --git a/app/policies/scheme_policy.rb b/app/policies/scheme_policy.rb index 54a2b9e89..6fa9ac95a 100644 --- a/app/policies/scheme_policy.rb +++ b/app/policies/scheme_policy.rb @@ -71,7 +71,7 @@ class SchemePolicy def delete? return false unless user.support? - return false unless scheme.status == :incomplete || scheme.status == :deactivated + return false unless %i[incomplete deactivated].include?(scheme.status) !has_any_logs_in_editable_collection_period end diff --git a/app/services/bulk_upload/lettings/year2023/row_parser.rb b/app/services/bulk_upload/lettings/year2023/row_parser.rb index 70aa4951e..1e8b9db56 100644 --- a/app/services/bulk_upload/lettings/year2023/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/row_parser.rb @@ -536,7 +536,7 @@ private end def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next unless question&.type == "radio" @@ -1321,22 +1321,26 @@ private def scheme_field return :field_16 if log_uses_new_scheme_id? - return :field_15 if log_uses_old_scheme_id? + + :field_15 if log_uses_old_scheme_id? end def scheme_id return field_16.strip if log_uses_new_scheme_id? - return field_15 if log_uses_old_scheme_id? + + field_15 if log_uses_old_scheme_id? end def location_field return :field_17 if log_uses_new_scheme_id? - return :field_16 if log_uses_old_scheme_id? + + :field_16 if log_uses_old_scheme_id? end def location_id return field_17 if log_uses_new_scheme_id? - return field_16 if log_uses_old_scheme_id? + + field_16 if log_uses_old_scheme_id? end def scheme_or_management_group @@ -1424,7 +1428,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1488,7 +1493,8 @@ private def housingneeds_other return 1 if field_86 == 1 - return 0 if [field_83, field_84, field_85].include?(1) + + 0 if [field_83, field_84, field_85].include?(1) end def prevloc @@ -1555,7 +1561,7 @@ private end def earnings - field_122.round if field_122.present? + field_122.presence&.round end def tshortfall_known diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index 66d46ead5..1ba683f66 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -562,7 +562,7 @@ class BulkUpload::Lettings::Year2024::RowParser private def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next unless question&.type == "radio" @@ -1455,7 +1455,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1519,7 +1520,8 @@ private def housingneeds_other return 1 if field_82 == 1 - return 0 if [field_79, field_80, field_81].include?(1) + + 0 if [field_79, field_80, field_81].include?(1) end def prevloc @@ -1595,7 +1597,7 @@ private end def earnings - field_119.round if field_119.present? + field_119.presence&.round end def tshortfall_known diff --git a/app/services/bulk_upload/lettings/year2025/row_parser.rb b/app/services/bulk_upload/lettings/year2025/row_parser.rb index 0745056d2..9887c42be 100644 --- a/app/services/bulk_upload/lettings/year2025/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2025/row_parser.rb @@ -561,7 +561,7 @@ class BulkUpload::Lettings::Year2025::RowParser private def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next unless question&.type == "radio" @@ -1452,7 +1452,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1516,7 +1517,8 @@ private def housingneeds_other return 1 if field_82 == 1 - return 0 if [field_79, field_80, field_81].include?(1) + + 0 if [field_79, field_80, field_81].include?(1) end def prevloc @@ -1592,7 +1594,7 @@ private end def earnings - field_119.round if field_119.present? + field_119.presence&.round end def tshortfall_known diff --git a/app/services/bulk_upload/lettings/year2026/csv_parser.rb b/app/services/bulk_upload/lettings/year2026/csv_parser.rb index 3e5933219..643990c8b 100644 --- a/app/services/bulk_upload/lettings/year2026/csv_parser.rb +++ b/app/services/bulk_upload/lettings/year2026/csv_parser.rb @@ -4,7 +4,7 @@ class BulkUpload::Lettings::Year2026::CsvParser include CollectionTimeHelper # TODO: CLDC-4162: Update when 2026 format is known - FIELDS = 153 + FIELDS = 148 FORM_YEAR = 2026 attr_reader :path @@ -27,7 +27,7 @@ class BulkUpload::Lettings::Year2026::CsvParser def cols # TODO: CLDC-4162: Update when 2026 format is known - @cols ||= ("A".."EX").to_a + @cols ||= ("A".."FA").to_a end def row_parsers diff --git a/app/services/bulk_upload/lettings/year2026/row_parser.rb b/app/services/bulk_upload/lettings/year2026/row_parser.rb index 02484aafd..c8fc4c891 100644 --- a/app/services/bulk_upload/lettings/year2026/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2026/row_parser.rb @@ -47,37 +47,37 @@ class BulkUpload::Lettings::Year2026::RowParser field_40: "If 'Other', what is the type of tenancy?", field_41: "What is the length of the fixed-term tenancy to the nearest year?", field_42: "What is the lead tenant’s age?", - field_43: "Which of these best describes the lead tenant’s gender identity?", + field_43: "Lead tenant's sex, as registered at birth", field_44: "Which of these best describes the lead tenant’s ethnic background?", field_45: "What is the lead tenant’s nationality?", field_46: "Which of these best describes the lead tenant’s working situation?", field_47: "Is person 2 the partner of the lead tenant?", field_48: "What is person 2’s age?", - field_49: "Which of these best describes person 2’s gender identity?", + field_49: "Person 2's sex, as registered at birth", field_50: "Which of these best describes person 2’s working situation?", field_51: "Is person 3 the partner of the lead tenant?", field_52: "What is person 3’s age?", - field_53: "Which of these best describes person 3’s gender identity?", + field_53: "Person 3's sex, as registered at birth", field_54: "Which of these best describes person 3’s working situation?", field_55: "Is person 4 the partner of the lead tenant?", field_56: "What is person 4’s age?", - field_57: "Which of these best describes person 4’s gender identity?", + field_57: "Person 4's sex, as registered at birth", field_58: "Which of these best describes person 4’s working situation?", field_59: "Is person 5 the partner of the lead tenant?", field_60: "What is person 5’s age?", - field_61: "Which of these best describes person 5’s gender identity?", + field_61: "Person 5's sex, as registered at birth", field_62: "Which of these best describes person 5’s working situation?", field_63: "Is person 6 the partner of the lead tenant?", field_64: "What is person 6’s age?", - field_65: "Which of these best describes person 6’s gender identity?", + field_65: "Person 6's sex, as registered at birth", field_66: "Which of these best describes person 6’s working situation?", field_67: "Is person 7 the partner of the lead tenant?", field_68: "What is person 7’s age?", - field_69: "Which of these best describes person 7’s gender identity?", + field_69: "Person 7's sex, as registered at birth", field_70: "Which of these best describes person 7’s working situation?", field_71: "Is person 8 the partner of the lead tenant?", field_72: "What is person 8’s age?", - field_73: "Which of these best describes person 8’s gender identity?", + field_73: "Person 8's sex, as registered at birth", field_74: "Which of these best describes person 8’s working situation?", field_75: "Does anybody in the household have links to the UK armed forces?", field_76: "Is this person still serving in the UK armed forces?", @@ -120,7 +120,7 @@ class BulkUpload::Lettings::Year2026::RowParser field_113: "Was the letting made under the Common Allocation Policy (CAP)?", field_114: "Was the letting made under the Common Housing Register (CHR)?", field_115: "Was the letting made under the Accessible Register?", - field_116: "What was the source of referral for this letting?", + field_116: "What was the source of referral for this letting? - LA properties", field_117: "Do you know the household’s combined total income after tax?", field_118: "How often does the household receive income?", field_119: "How much income does the household have in total?", @@ -135,30 +135,26 @@ class BulkUpload::Lettings::Year2026::RowParser field_128: "After the household has received any housing-related benefits, will they still need to pay for rent and charges?", field_129: "What do you expect the outstanding amount to be?", - field_130: "Lead tenant's sex, as registered at birth", - field_131: "Person 2's sex, as registered at birth", - field_132: "Person 3's sex, as registered at birth", - field_133: "Person 4's sex, as registered at birth", - field_134: "Person 5's sex, as registered at birth", - field_135: "Person 6's sex, as registered at birth", - field_136: "Person 7's sex, as registered at birth", - field_137: "Person 8's sex, as registered at birth", - field_138: "Is the gender the lead tenant identifies with the same as their sex registered at birth?", - field_139: "If 'No', enter the lead tenant's gender identity", - field_140: "Is the gender person 2 identifies with the same as their sex registered at birth?", - field_141: "If 'No', enter person 2's gender identity", - field_142: "Is the gender person 3 identifies with the same as their sex registered at birth?", - field_143: "If 'No', enter person 3's gender identity", - field_144: "Is the gender person 4 identifies with the same as their sex registered at birth?", - field_145: "If 'No', enter person 4's gender identity", - field_146: "Is the gender person 5 identifies with the same as their sex registered at birth?", - field_147: "If 'No', enter person 5's gender identity", - field_148: "Is the gender person 6 identifies with the same as their sex registered at birth?", - field_149: "If 'No', enter person 6's gender identity", - field_150: "Is the gender person 7 identifies with the same as their sex registered at birth?", - field_151: "If 'No', enter person 7's gender identity", - field_152: "Is the gender person 8 identifies with the same as their sex registered at birth?", - field_153: "If 'No', enter person 8's gender identity", + field_130: "Is the gender the lead tenant identifies with the same as their sex registered at birth?", + field_131: "If 'No', enter the lead tenant's gender identity", + field_132: "Is the gender person 2 identifies with the same as their sex registered at birth?", + field_133: "If 'No', enter person 2's gender identity", + field_134: "Is the gender person 3 identifies with the same as their sex registered at birth?", + field_135: "If 'No', enter person 3's gender identity", + field_136: "Is the gender person 4 identifies with the same as their sex registered at birth?", + field_137: "If 'No', enter person 4's gender identity", + field_138: "Is the gender person 5 identifies with the same as their sex registered at birth?", + field_139: "If 'No', enter person 5's gender identity", + field_140: "Is the gender person 6 identifies with the same as their sex registered at birth?", + field_141: "If 'No', enter person 6's gender identity", + field_142: "Is the gender person 7 identifies with the same as their sex registered at birth?", + field_143: "If 'No', enter person 7's gender identity", + field_144: "Is the gender person 8 identifies with the same as their sex registered at birth?", + field_145: "If 'No', enter person 8's gender identity", + + field_146: "What was the source of referral for this letting? - PRP properties part 1", + field_147: "What was the source of referral for this letting? - PRP properties part 2", + field_148: "What was the source of referral for this letting? - PRP properties part 3", }.freeze RENT_TYPE_BU_MAPPING = { @@ -308,13 +304,13 @@ class BulkUpload::Lettings::Year2026::RowParser attribute :field_128, :integer attribute :field_129, :decimal - attribute :field_130, :string + attribute :field_130, :integer attribute :field_131, :string - attribute :field_132, :string + attribute :field_132, :integer attribute :field_133, :string - attribute :field_134, :string + attribute :field_134, :integer attribute :field_135, :string - attribute :field_136, :string + attribute :field_136, :integer attribute :field_137, :string attribute :field_138, :integer attribute :field_139, :string @@ -324,14 +320,10 @@ class BulkUpload::Lettings::Year2026::RowParser attribute :field_143, :string attribute :field_144, :integer attribute :field_145, :string + attribute :field_146, :integer - attribute :field_147, :string + attribute :field_147, :integer attribute :field_148, :integer - attribute :field_149, :string - attribute :field_150, :integer - attribute :field_151, :string - attribute :field_152, :integer - attribute :field_153, :string validate :validate_valid_radio_option, on: :before_log @@ -458,8 +450,6 @@ class BulkUpload::Lettings::Year2026::RowParser validate :validate_needs_type_present, on: :after_log validate :validate_data_types, on: :after_log validate :validate_relevant_collection_window, on: :after_log - validate :validate_la_with_local_housing_referral, on: :after_log - validate :validate_cannot_be_la_referral_if_general_needs_and_la, on: :after_log validate :validate_leaving_reason_for_renewal, on: :after_log validate :validate_only_one_housing_needs_type, on: :after_log validate :validate_no_disabled_needs_conjunction, on: :after_log @@ -470,6 +460,7 @@ class BulkUpload::Lettings::Year2026::RowParser validate :validate_reasonable_preference_dont_know, on: :after_log validate :validate_condition_effects, on: :after_log validate :validate_if_log_already_exists, on: :after_log, if: -> { FeatureToggle.bulk_upload_duplicate_log_check_enabled? } + validate :validate_referral_fields, on: :after_log validate :validate_owning_org_data_given, on: :after_log validate :validate_owning_org_exists, on: :after_log @@ -590,8 +581,7 @@ class BulkUpload::Lettings::Year2026::RowParser !supported_housing? ? "field_23" : nil, # postcode # TODO: CLDC-4119: add postcode to hash for supported housing !supported_housing? ? "field_24" : nil, # postcode # TODO: CLDC-4119: add postcode to hash for supported housing "field_42", # age1 - "field_43", # sex1 - "field_130", # sexrab1 + "field_43", # sexrab1 "field_46", # ecstat1 ) if [field_124, field_125, field_126, field_127].all?(&:present?) @@ -616,7 +606,7 @@ class BulkUpload::Lettings::Year2026::RowParser private def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next unless question&.type == "radio" @@ -730,7 +720,7 @@ private end def validate_prevten_value_when_renewal - return unless field_7 == 1 + return unless renewal? return if field_100.blank? || [6, 30, 31, 32, 33, 34, 35, 38].include?(field_100) errors.add(:field_100, I18n.t("#{ERROR_BASE_KEY}.prevten.invalid")) @@ -741,7 +731,6 @@ private "startdate", "age1", "sexrab1", - "sex1", "ecstat1", "owning_organisation", "tcharge", @@ -837,7 +826,7 @@ private end def validate_leaving_reason_for_renewal - if field_7 == 1 && ![50, 51, 52, 53].include?(field_98) + if renewal? && ![50, 51, 52, 53].include?(field_98) errors.add(:field_98, I18n.t("#{ERROR_BASE_KEY}.reason.renewal_reason_needed")) end end @@ -850,16 +839,8 @@ private field_4 == 2 end - def validate_cannot_be_la_referral_if_general_needs_and_la - if field_116 == 4 && general_needs? && owning_organisation && owning_organisation.la? - errors.add :field_116, I18n.t("#{ERROR_BASE_KEY}.referral.general_needs_prp_referred_by_la") - end - end - - def validate_la_with_local_housing_referral - if field_116 == 3 && owning_organisation && owning_organisation.la? - errors.add(:field_116, I18n.t("#{ERROR_BASE_KEY}.referral.nominated_by_local_ha_but_la")) - end + def renewal? + field_7 == 1 end def validate_relevant_collection_window @@ -1031,8 +1012,7 @@ private errors.add(:field_24, error_message) unless supported_housing? # postcode_full # TODO: CLDC-4119: add postcode to error fields for supported housing errors.add(:field_25, error_message) unless supported_housing? # la # TODO: CLDC-4119: add LA to error fields for supported housing errors.add(:field_42, error_message) # age1 - errors.add(:field_130, error_message) # sexrab1 - errors.add(:field_43, error_message) # sex1 + errors.add(:field_43, error_message) # sexrab1 errors.add(:field_46, error_message) # ecstat1 errors.add(:field_122, error_message) unless general_needs? # household_charge errors.add(:field_124, error_message) # brent @@ -1042,6 +1022,57 @@ private end end + def field_referral_register_la_valid? + if owning_organisation&.la? + [1, 2, 3, 4].include?(field_116) + else + field_116.blank? + end + end + + def field_referral_register_prp_valid? + if owning_organisation&.prp? + [5, 6, 7, 8, 9].include?(field_146) + else + field_146.blank? + end + end + + def field_referral_noms_valid? + case field_146 + when 6 + [1, 2, 3, 4].include?(field_147) + when 7 + [5, 6, 7, 8].include?(field_147) + else + field_147.blank? + end + end + + def field_referral_org_valid? + case field_147 + when 1 + [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].include?(field_148) + when 7 + [11, 12, 13, 14, 15, 16, 17, 18, 19, 20].include?(field_148) + else + field_148.blank? + end + end + + def referral_fields_valid? + field_referral_register_la_valid? && field_referral_register_prp_valid? && field_referral_noms_valid? && field_referral_org_valid? + end + + def validate_referral_fields + return if renewal? + return if referral_fields_valid? + + %i[field_116 field_146 field_147 field_148].each do |field| + errors.add(field, I18n.t("#{ERROR_BASE_KEY}.referral.invalid_option")) + end + end + def field_mapping_for_errors { lettype: [:field_11], @@ -1090,14 +1121,14 @@ private age8_known: %i[field_72], age8: %i[field_72], - sex1: %i[field_43], - sex2: %i[field_49], - sex3: %i[field_53], - sex4: %i[field_57], - sex5: %i[field_61], - sex6: %i[field_65], - sex7: %i[field_69], - sex8: %i[field_73], + sexrab1: %i[field_43], + sexrab2: %i[field_49], + sexrab3: %i[field_53], + sexrab4: %i[field_57], + sexrab5: %i[field_61], + sexrab6: %i[field_65], + sexrab7: %i[field_69], + sexrab8: %i[field_73], ethnic_group: %i[field_44], ethnic: %i[field_44], @@ -1154,8 +1185,9 @@ private accessible_register: %i[field_115], letting_allocation: %i[field_112 field_113 field_114 field_115], - referral_type: %i[field_116], - referral: %i[field_116], + referral_register: %i[field_116 field_146], + referral_noms: %i[field_147], + referral_org: %i[field_148], net_income_known: %i[field_117], incfreq: %i[field_118], @@ -1204,14 +1236,22 @@ private county: [:field_22], uprn_selection: [:field_19], - sexrab1: %i[field_130], - sexrab2: %i[field_131], - sexrab3: %i[field_132], - sexrab4: %i[field_133], - sexrab5: %i[field_134], - sexrab6: %i[field_135], - sexrab7: %i[field_136], - sexrab8: %i[field_137], + gender_same_as_sex1: %i[field_130], + gender_same_as_sex2: %i[field_132], + gender_same_as_sex3: %i[field_134], + gender_same_as_sex4: %i[field_136], + gender_same_as_sex5: %i[field_138], + gender_same_as_sex6: %i[field_140], + gender_same_as_sex7: %i[field_142], + gender_same_as_sex8: %i[field_144], + gender_description1: %i[field_131], + gender_description2: %i[field_133], + gender_description3: %i[field_135], + gender_description4: %i[field_137], + gender_description5: %i[field_139], + gender_description6: %i[field_141], + gender_description7: %i[field_143], + gender_description8: %i[field_145], }.compact end @@ -1273,14 +1313,14 @@ private attributes["age8_known"] = age8_known? attributes["age8"] = field_72 if attributes["age8_known"]&.zero? && field_72&.match(/\A\d{1,3}\z|\AR\z/) - attributes["sex1"] = field_43 - attributes["sex2"] = field_49 - attributes["sex3"] = field_53 - attributes["sex4"] = field_57 - attributes["sex5"] = field_61 - attributes["sex6"] = field_65 - attributes["sex7"] = field_69 - attributes["sex8"] = field_73 + attributes["sexrab1"] = field_43 + attributes["sexrab2"] = field_49 + attributes["sexrab3"] = field_53 + attributes["sexrab4"] = field_57 + attributes["sexrab5"] = field_61 + attributes["sexrab6"] = field_65 + attributes["sexrab7"] = field_69 + attributes["sexrab8"] = field_73 attributes["ethnic_group"] = ethnic_group_from_ethnic attributes["ethnic"] = field_44 @@ -1349,8 +1389,9 @@ private attributes["accessible_register"] = accessible_register attributes["letting_allocation_unknown"] = letting_allocation_unknown - attributes["referral_type"] = referral_type - attributes["referral"] = field_116 + attributes["referral_register"] = referral_register + attributes["referral_noms"] = referral_noms + attributes["referral_org"] = referral_org attributes["net_income_known"] = net_income_known attributes["earnings"] = earnings @@ -1418,30 +1459,22 @@ private attributes["postcode_full_input"] = postcode_full attributes["select_best_address_match"] = true if field_18.blank? - attributes["sexrab1"] = field_130 - attributes["sexrab2"] = field_131 - attributes["sexrab3"] = field_132 - attributes["sexrab4"] = field_133 - attributes["sexrab5"] = field_134 - attributes["sexrab6"] = field_135 - attributes["sexrab7"] = field_136 - attributes["sexrab8"] = field_137 - attributes["gender_same_as_sex1"] = field_138 - attributes["gender_description1"] = field_139 - attributes["gender_same_as_sex2"] = field_140 - attributes["gender_description2"] = field_141 - attributes["gender_same_as_sex3"] = field_142 - attributes["gender_description3"] = field_143 - attributes["gender_same_as_sex4"] = field_144 - attributes["gender_description4"] = field_145 - attributes["gender_same_as_sex5"] = field_146 - attributes["gender_description5"] = field_147 - attributes["gender_same_as_sex6"] = field_148 - attributes["gender_description6"] = field_149 - attributes["gender_same_as_sex7"] = field_150 - attributes["gender_description7"] = field_151 - attributes["gender_same_as_sex8"] = field_152 - attributes["gender_description8"] = field_153 + attributes["gender_same_as_sex1"] = field_130 + attributes["gender_description1"] = field_131 + attributes["gender_same_as_sex2"] = field_132 + attributes["gender_description2"] = field_133 + attributes["gender_same_as_sex3"] = field_134 + attributes["gender_description3"] = field_135 + attributes["gender_same_as_sex4"] = field_136 + attributes["gender_description4"] = field_137 + attributes["gender_same_as_sex5"] = field_138 + attributes["gender_description5"] = field_139 + attributes["gender_same_as_sex6"] = field_140 + attributes["gender_description6"] = field_141 + attributes["gender_same_as_sex7"] = field_142 + attributes["gender_description7"] = field_143 + attributes["gender_same_as_sex8"] = field_144 + attributes["gender_description8"] = field_145 attributes end @@ -1540,7 +1573,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1549,31 +1583,31 @@ private end def person_2_present? - field_47.present? || field_48.present? || field_49.present? || field_131.present? || field_140.present? || field_141.present? + field_47.present? || field_48.present? || field_49.present? || field_132.present? || field_133.present? end def person_3_present? - field_51.present? || field_52.present? || field_53.present? || field_132.present? || field_142.present? || field_143.present? + field_51.present? || field_52.present? || field_53.present? || field_134.present? || field_135.present? end def person_4_present? - field_55.present? || field_56.present? || field_57.present? || field_133.present? || field_144.present? || field_145.present? + field_55.present? || field_56.present? || field_57.present? || field_136.present? || field_137.present? end def person_5_present? - field_59.present? || field_60.present? || field_61.present? || field_134.present? || field_146.present? || field_147.present? + field_59.present? || field_60.present? || field_61.present? || field_138.present? || field_139.present? end def person_6_present? - field_63.present? || field_64.present? || field_65.present? || field_135.present? || field_148.present? || field_149.present? + field_63.present? || field_64.present? || field_65.present? || field_140.present? || field_141.present? end def person_7_present? - field_67.present? || field_68.present? || field_69.present? || field_136.present? || field_150.present? || field_151.present? + field_67.present? || field_68.present? || field_69.present? || field_142.present? || field_143.present? end def person_8_present? - field_71.present? || field_72.present? || field_73.present? || field_137.present? || field_152.present? || field_153.present? + field_71.present? || field_72.present? || field_73.present? || field_144.present? || field_145.present? end def leftreg @@ -1604,7 +1638,8 @@ private def housingneeds_other return 1 if field_82 == 1 - return 0 if [field_79, field_80, field_81].include?(1) + + 0 if [field_79, field_80, field_81].include?(1) end def prevloc @@ -1680,7 +1715,7 @@ private end def earnings - field_119.round if field_119.present? + field_119.presence&.round end def tshortfall_known @@ -1768,21 +1803,36 @@ private false end - def referral_type - mapping = { - 1 => [20, 2, 8], - 2 => [21, 3, 4, 22], - 3 => [1, 10, 23], - 4 => [15, 9, 14, 24, 17], - 5 => [18, 19], - 6 => [7], - 7 => [16], - } + def referral_register + return unless owning_organisation + # by default CORE will ingest all these fields and nil questions that aren't asked. + # here, we specifically want the log to be invalid if any of the referral fields are wrong. + # BU will only consider a log invalid if its incomplete. + # so, nil these fields if any are invalid. + return unless referral_fields_valid? + + if owning_organisation.la? + field_116 + else + field_146 + end + end + + def referral_noms + return unless owning_organisation + return unless referral_fields_valid? - mapping.each do |key, values| - return key if values.include?(field_116) + if owning_organisation.prp? + field_147 end + end - 0 + def referral_org + return unless owning_organisation + return unless referral_fields_valid? + + if owning_organisation.prp? + field_148 + end end end diff --git a/app/services/bulk_upload/sales/year2023/row_parser.rb b/app/services/bulk_upload/sales/year2023/row_parser.rb index ddcf18b6a..75f964e7c 100644 --- a/app/services/bulk_upload/sales/year2023/row_parser.rb +++ b/app/services/bulk_upload/sales/year2023/row_parser.rb @@ -915,7 +915,7 @@ private attributes["mortlen"] = mortlen attributes["proplen"] = proplen if proplen&.positive? - attributes["proplen_asked"] = attributes["proplen"]&.present? ? 0 : 1 + attributes["proplen_asked"] = attributes["proplen"].present? ? 0 : 1 attributes["jointmore"] = field_15 attributes["staircase"] = field_87 attributes["privacynotice"] = field_29 @@ -992,7 +992,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1050,72 +1051,84 @@ private def sale_type return field_8 if shared_ownership? return field_9 if discounted_ownership? - return field_10 if outright_sale? + + field_10 if outright_sale? end def value return field_103 if shared_ownership? return field_116 if discounted_ownership? - return field_127 if outright_sale? + + field_127 if outright_sale? end def mortgage return field_106 if shared_ownership? return field_120 if discounted_ownership? - return field_129 if outright_sale? + + field_129 if outright_sale? end def extrabor return field_110 if shared_ownership? return field_124 if discounted_ownership? - return field_133 if outright_sale? + + field_133 if outright_sale? end def deposit return field_111 if shared_ownership? return field_125 if discounted_ownership? - return field_134 if outright_sale? + + field_134 if outright_sale? end def mscharge return field_114 if shared_ownership? return field_126 if discounted_ownership? - return field_135 if outright_sale? + + field_135 if outright_sale? end def mortgagelender return field_107 if shared_ownership? return field_121 if discounted_ownership? - return field_130 if outright_sale? + + field_130 if outright_sale? end def mortgagelenderother return field_108 if shared_ownership? return field_122 if discounted_ownership? - return field_131 if outright_sale? + + field_131 if outright_sale? end def mortlen return field_109 if shared_ownership? return field_123 if discounted_ownership? - return field_132 if outright_sale? + + field_132 if outright_sale? end def proplen return field_86 if shared_ownership? - return field_115 if discounted_ownership? + + field_115 if discounted_ownership? end def mortgageused return field_105 if shared_ownership? return field_119 if discounted_ownership? - return field_128 if outright_sale? + + field_128 if outright_sale? end def mortgageused_field return :field_105 if shared_ownership? return :field_119 if discounted_ownership? - return :field_128 if outright_sale? + + :field_128 if outright_sale? end def owning_organisation @@ -1263,7 +1276,7 @@ private end def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next if question_id == "type" diff --git a/app/services/bulk_upload/sales/year2024/row_parser.rb b/app/services/bulk_upload/sales/year2024/row_parser.rb index a1b214182..879bdbb3f 100644 --- a/app/services/bulk_upload/sales/year2024/row_parser.rb +++ b/app/services/bulk_upload/sales/year2024/row_parser.rb @@ -938,7 +938,7 @@ private attributes["mortlen"] = mortlen attributes["proplen"] = proplen if proplen&.positive? - attributes["proplen_asked"] = attributes["proplen"]&.present? ? 0 : 1 + attributes["proplen_asked"] = attributes["proplen"].present? ? 0 : 1 attributes["jointmore"] = field_16 attributes["staircase"] = field_86 attributes["privacynotice"] = field_18 @@ -1026,7 +1026,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1084,64 +1085,75 @@ private def sale_type return field_9 if shared_ownership? return field_10 if discounted_ownership? - return field_11 if outright_sale? + + field_11 if outright_sale? end def value return field_101 if shared_ownership? return field_114 if discounted_ownership? - return field_125 if outright_sale? + + field_125 if outright_sale? end def mortgage return field_104 if shared_ownership? return field_118 if discounted_ownership? - return field_127 if outright_sale? + + field_127 if outright_sale? end def extrabor return field_108 if shared_ownership? return field_122 if discounted_ownership? - return field_129 if outright_sale? + + field_129 if outright_sale? end def deposit return field_109 if shared_ownership? return field_123 if discounted_ownership? - return field_130 if outright_sale? + + field_130 if outright_sale? end def mscharge return field_112 if shared_ownership? return field_124 if discounted_ownership? - return field_131 if outright_sale? + + field_131 if outright_sale? end def mortgagelender return field_105 if shared_ownership? - return field_119 if discounted_ownership? + + field_119 if discounted_ownership? end def mortgagelenderother return field_106 if shared_ownership? - return field_120 if discounted_ownership? + + field_120 if discounted_ownership? end def mortlen return field_107 if shared_ownership? return field_121 if discounted_ownership? - return field_128 if outright_sale? + + field_128 if outright_sale? end def proplen return field_85 if shared_ownership? - return field_113 if discounted_ownership? + + field_113 if discounted_ownership? end def mortgageused return field_103 if shared_ownership? return field_117 if discounted_ownership? - return field_126 if outright_sale? + + field_126 if outright_sale? end def value_fields @@ -1393,7 +1405,7 @@ private end def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next if question_id == "type" diff --git a/app/services/bulk_upload/sales/year2025/row_parser.rb b/app/services/bulk_upload/sales/year2025/row_parser.rb index a78b9fe5d..19094f6c6 100644 --- a/app/services/bulk_upload/sales/year2025/row_parser.rb +++ b/app/services/bulk_upload/sales/year2025/row_parser.rb @@ -906,7 +906,7 @@ private attributes["mortlen"] = mortlen attributes["proplen"] = proplen if proplen&.positive? - attributes["proplen_asked"] = attributes["proplen"]&.present? ? 0 : 1 + attributes["proplen_asked"] = attributes["proplen"].present? ? 0 : 1 attributes["jointmore"] = field_13 attributes["staircase"] = field_10 attributes["privacynotice"] = field_15 @@ -1008,7 +1008,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1076,58 +1077,68 @@ private def sale_type return field_9 if shared_ownership? - return field_11 if discounted_ownership? + + field_11 if discounted_ownership? end def value return field_86 if shared_ownership_initial_purchase? return field_113 if discounted_ownership? - return field_107 if staircasing? + + field_107 if staircasing? end def equity return field_87 if shared_ownership_initial_purchase? - return field_108 if staircasing? + + field_108 if staircasing? end def mortgage return field_89 if shared_ownership? - return field_117 if discounted_ownership? + + field_117 if discounted_ownership? end def extrabor - return field_119 if discounted_ownership? + field_119 if discounted_ownership? end def deposit return field_91 if shared_ownership? - return field_120 if discounted_ownership? + + field_120 if discounted_ownership? end def mrent return field_93 if shared_ownership_initial_purchase? - return field_111 if staircasing? + + field_111 if staircasing? end def mscharge return field_94 if shared_ownership? - return field_121 if discounted_ownership? + + field_121 if discounted_ownership? end def mortlen return field_90 if shared_ownership? - return field_118 if discounted_ownership? + + field_118 if discounted_ownership? end def proplen return field_79 if shared_ownership? - return field_112 if discounted_ownership? + + field_112 if discounted_ownership? end def mortgageused return field_88 if shared_ownership_initial_purchase? return field_116 if discounted_ownership? - return field_109 if staircasing? + + field_109 if staircasing? end def value_fields @@ -1369,7 +1380,7 @@ private end def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next if question_id == "type" diff --git a/app/services/bulk_upload/sales/year2026/row_parser.rb b/app/services/bulk_upload/sales/year2026/row_parser.rb index adb7cc6a2..08d56fe37 100644 --- a/app/services/bulk_upload/sales/year2026/row_parser.rb +++ b/app/services/bulk_upload/sales/year2026/row_parser.rb @@ -934,7 +934,7 @@ private attributes["mortlen"] = mortlen attributes["proplen"] = proplen if proplen&.positive? - attributes["proplen_asked"] = attributes["proplen"]&.present? ? 0 : 1 + attributes["proplen_asked"] = attributes["proplen"].present? ? 0 : 1 attributes["jointmore"] = field_13 attributes["staircase"] = field_10 attributes["privacynotice"] = field_15 @@ -1036,7 +1036,8 @@ private ].each do |hash| define_method("age#{hash[:person]}_known?") do return 1 if public_send(hash[:field]) == "R" - return 0 if send("person_#{hash[:person]}_present?") + + 0 if send("person_#{hash[:person]}_present?") end end @@ -1104,58 +1105,68 @@ private def sale_type return field_9 if shared_ownership? - return field_11 if discounted_ownership? + + field_11 if discounted_ownership? end def value return field_86 if shared_ownership_initial_purchase? return field_113 if discounted_ownership? - return field_107 if staircasing? + + field_107 if staircasing? end def equity return field_87 if shared_ownership_initial_purchase? - return field_108 if staircasing? + + field_108 if staircasing? end def mortgage return field_89 if shared_ownership? - return field_117 if discounted_ownership? + + field_117 if discounted_ownership? end def extrabor - return field_119 if discounted_ownership? + field_119 if discounted_ownership? end def deposit return field_91 if shared_ownership? - return field_120 if discounted_ownership? + + field_120 if discounted_ownership? end def mrent return field_93 if shared_ownership_initial_purchase? - return field_111 if staircasing? + + field_111 if staircasing? end def mscharge return field_94 if shared_ownership? - return field_121 if discounted_ownership? + + field_121 if discounted_ownership? end def mortlen return field_90 if shared_ownership? - return field_118 if discounted_ownership? + + field_118 if discounted_ownership? end def proplen return field_79 if shared_ownership? - return field_112 if discounted_ownership? + + field_112 if discounted_ownership? end def mortgageused return field_88 if shared_ownership_initial_purchase? return field_116 if discounted_ownership? - return field_109 if staircasing? + + field_109 if staircasing? end def value_fields @@ -1398,7 +1409,7 @@ private end def validate_valid_radio_option - log.attributes.each do |question_id, _v| + log.attributes.each_key do |question_id| question = log.form.get_question(question_id, log) next if question_id == "type" diff --git a/app/services/csv/lettings_log_csv_service.rb b/app/services/csv/lettings_log_csv_service.rb index 003515ac9..dd3be8595 100644 --- a/app/services/csv/lettings_log_csv_service.rb +++ b/app/services/csv/lettings_log_csv_service.rb @@ -398,12 +398,14 @@ module Csv def label_if_boolean_value(value) return "Yes" if value == true - return "No" if value == false + + "No" if value == false end def conventional_yes_no_label(value) return "Yes" if value == 1 - return "No" if value&.zero? + + "No" if value&.zero? end end end diff --git a/app/services/csv/sales_log_csv_service.rb b/app/services/csv/sales_log_csv_service.rb index ed16653f1..07ccad82c 100644 --- a/app/services/csv/sales_log_csv_service.rb +++ b/app/services/csv/sales_log_csv_service.rb @@ -408,7 +408,8 @@ module Csv def label_if_boolean_value(value) return "Yes" if value == true - return "No" if value == false + + "No" if value == false end end end diff --git a/app/services/documentation_generator.rb b/app/services/documentation_generator.rb index c2005f320..58c2031f7 100644 --- a/app/services/documentation_generator.rb +++ b/app/services/documentation_generator.rb @@ -93,7 +93,7 @@ class DocumentationGenerator interruption_screen_pages = form.pages.select { |page| page.questions.first.type == "interruption_screen" } interruption_screen_pages_grouped_by_question = interruption_screen_pages.group_by { |page| page.questions.first.id } - interruption_screen_pages_grouped_by_question.each do |_question_id, pages| + interruption_screen_pages_grouped_by_question.each_value do |pages| pages.map do |page| save_soft_validation(form, page, validation_descriptions, log_type) end diff --git a/app/services/exports/lettings_log_export_constants.rb b/app/services/exports/lettings_log_export_constants.rb index b954a5afd..f4d426a35 100644 --- a/app/services/exports/lettings_log_export_constants.rb +++ b/app/services/exports/lettings_log_export_constants.rb @@ -77,7 +77,6 @@ module Exports::LettingsLogExportConstants "reason", "reasonother", "reasonpref", - "referral", "refused", "reghome", "renttype", @@ -141,7 +140,6 @@ module Exports::LettingsLogExportConstants (1..8).each do |index| ALL_YEAR_EXPORT_FIELDS << "age#{index}" ALL_YEAR_EXPORT_FIELDS << "ecstat#{index}" - ALL_YEAR_EXPORT_FIELDS << "sex#{index}" end (2..8).each do |index| ALL_YEAR_EXPORT_FIELDS << "relat#{index}" @@ -158,21 +156,33 @@ module Exports::LettingsLogExportConstants "chcharge", "national", "offered", + "referral", ] + (1..8).each do |index| + YEAR_2021_EXPORT_FIELDS << "sex#{index}" + end YEAR_2022_EXPORT_FIELDS = Set[ "builtype", "chcharge", "national", "offered", + "referral", ] + (1..8).each do |index| + YEAR_2022_EXPORT_FIELDS << "sex#{index}" + end YEAR_2023_EXPORT_FIELDS = Set[ "builtype", "chcharge", "national", "offered", + "referral", ] + (1..8).each do |index| + YEAR_2023_EXPORT_FIELDS << "sex#{index}" + end YEAR_2024_EXPORT_FIELDS = Set[ "builtype", @@ -192,7 +202,11 @@ module Exports::LettingsLogExportConstants "pscharge_value_check", "supcharg_value_check", "carehome_charges_value_check", + "referral", ] + (1..8).each do |index| + YEAR_2024_EXPORT_FIELDS << "sex#{index}" + end YEAR_2025_EXPORT_FIELDS = Set[ "builtype", @@ -210,7 +224,11 @@ module Exports::LettingsLogExportConstants "scharge_value_check", "pscharge_value_check", "supcharg_value_check", + "referral", ] + (1..8).each do |index| + YEAR_2025_EXPORT_FIELDS << "sex#{index}" + end YEAR_2026_EXPORT_FIELDS = Set[ "accessible_register", @@ -227,8 +245,10 @@ module Exports::LettingsLogExportConstants "scharge_value_check", "pscharge_value_check", "supcharg_value_check", + "referral_register", + "referral_noms", + "referral_org", ] - (1..8).each do |index| YEAR_2026_EXPORT_FIELDS << "sexrab#{index}" YEAR_2026_EXPORT_FIELDS << "gender_same_as_sex#{index}" diff --git a/app/services/exports/organisation_export_constants.rb b/app/services/exports/organisation_export_constants.rb index 6c78a55db..7ffbfd223 100644 --- a/app/services/exports/organisation_export_constants.rb +++ b/app/services/exports/organisation_export_constants.rb @@ -23,6 +23,6 @@ module Exports::OrganisationExportConstants "dpo_email", "profit_status", "group", - "status" + "status", ] end diff --git a/app/services/feature_toggle.rb b/app/services/feature_toggle.rb index 4b2c440fc..e70528d3f 100644 --- a/app/services/feature_toggle.rb +++ b/app/services/feature_toggle.rb @@ -28,7 +28,7 @@ class FeatureToggle end def self.create_test_logs_enabled? - Rails.env.development? || Rails.env.review? + Rails.env.development? || Rails.env.review? || Rails.env.staging? end def self.sales_export_enabled? diff --git a/app/services/filter_manager.rb b/app/services/filter_manager.rb index 7757ad39e..69e895809 100644 --- a/app/services/filter_manager.rb +++ b/app/services/filter_manager.rb @@ -121,7 +121,7 @@ class FilterManager new_filters = new_filters.except("user") if params["assigned_to"] == "all" new_filters["user"] = current_user.id.to_s if params["assigned_to"] == "you" - new_filters = new_filters.except("user_text_search") if params["assigned_to"] == "all" || params["assigned_to"] == "you" + new_filters = new_filters.except("user_text_search") if %w[all you].include?(params["assigned_to"]) new_filters = new_filters.except("owning_organisation_text_search") if params["owning_organisation_select"] == "all" new_filters = new_filters.except("managing_organisation_text_search") if params["managing_organisation_select"] == "all" end diff --git a/app/views/form/_checkbox_question.html.erb b/app/views/form/_checkbox_question.html.erb index b4feb12bd..d3c52c270 100644 --- a/app/views/form/_checkbox_question.html.erb +++ b/app/views/form/_checkbox_question.html.erb @@ -16,7 +16,7 @@ hint: { text: option["hint"] }, checked: @log[key] == 1, exclusive: after_divider, - link_errors: index.zero? ? true : nil, + link_errors: index.zero? || nil, **stimulus_html_attributes(question) %> <% end %> <% end %> diff --git a/app/views/form/_date_question.html.erb b/app/views/form/_date_question.html.erb index a1df5f4d5..28437f3b9 100644 --- a/app/views/form/_date_question.html.erb +++ b/app/views/form/_date_question.html.erb @@ -6,7 +6,7 @@ question_id: question.id, legend: { text: legend[:text], size: legend[:size], caption: caption(caption_text, page_header, conditional) }, resource_type: @log.log_type, - hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{date_mid_collection_year_formatted(@log.startdate).tr(' ', '/')}", + hint: date_hint(question, @log), f:, } %> diff --git a/app/views/form/_interruption_screen_question.html.erb b/app/views/form/_interruption_screen_question.html.erb index c0063e477..9aa38ca5d 100644 --- a/app/views/form/_interruption_screen_question.html.erb +++ b/app/views/form/_interruption_screen_question.html.erb @@ -18,7 +18,7 @@
<%= f.govuk_submit "Confirm and continue" %> <%= govuk_link_to( - (@page.skip_text || "Skip for now"), - (@page.skip_href(@log) || send(@log.form.next_page_redirect_path(@page, @log, current_user, ignore_answered: true), @log)), + @page.skip_text || "Skip for now", + @page.skip_href(@log) || send(@log.form.next_page_redirect_path(@page, @log, current_user, ignore_answered: true), @log), ) %>
diff --git a/app/views/form/_radio_question.html.erb b/app/views/form/_radio_question.html.erb index bf6abb0d0..e810d7b7a 100644 --- a/app/views/form/_radio_question.html.erb +++ b/app/views/form/_radio_question.html.erb @@ -28,14 +28,14 @@ key, label: { text: options["value"] }, hint: { text: options["hint"] }, - link_errors: index.zero? ? true : nil, + link_errors: index.zero? || nil, **stimulus_html_attributes(question) %> <% else %> <%= f.govuk_radio_button question.id.to_sym, key, label: { text: options["value"] }, hint: { text: options["hint"] }, - link_errors: index.zero? ? true : nil, + link_errors: index.zero? || nil, **stimulus_html_attributes(question) do %> <%= render partial: "#{conditional_question.type}_question", locals: { question: conditional_question, diff --git a/app/views/rails_admin/main/_submit_buttons.html.erb b/app/views/rails_admin/main/_submit_buttons.html.erb index 241624c4e..1768ce2b3 100644 --- a/app/views/rails_admin/main/_submit_buttons.html.erb +++ b/app/views/rails_admin/main/_submit_buttons.html.erb @@ -1,6 +1,6 @@
- +