Browse Source

Merge branch 'main' into CLDC-4174-clone-q88-service-charges

pull/3182/head
Nat Dean-Lewis 4 months ago
parent
commit
feab44797a
  1. 0
      .erb_lint.yml
  2. 5
      .rubocop.yml
  3. 2
      .ruby-version
  4. 4
      Dockerfile
  5. 11
      Gemfile
  6. 111
      Gemfile.lock
  7. 20
      app/components/create_log_actions_component.html.erb
  8. 17
      app/components/create_log_actions_component.rb
  9. 2
      app/controllers/csv_downloads_controller.rb
  10. 2
      app/controllers/lettings_logs_controller.rb
  11. 2
      app/controllers/lettings_logs_filters_controller.rb
  12. 2
      app/controllers/merge_requests_controller.rb
  13. 2
      app/controllers/sales_logs_filters_controller.rb
  14. 28
      app/controllers/test_data_controller.rb
  15. 42
      app/helpers/bulk_upload/lettings_log_to_csv.rb
  16. 2
      app/helpers/bulk_upload/sales_log_to_csv.rb
  17. 9
      app/helpers/collection_time_helper.rb
  18. 2
      app/helpers/data_sharing_agreement_helper.rb
  19. 2
      app/helpers/form_page_error_helper.rb
  20. 9
      app/helpers/form_page_helper.rb
  21. 3
      app/helpers/locations_helper.rb
  22. 4
      app/helpers/merge_requests_helper.rb
  23. 4
      app/helpers/notifications_helper.rb
  24. 3
      app/helpers/question_view_helper.rb
  25. 3
      app/helpers/schemes_helper.rb
  26. 3
      app/mailers/devise_notify_mailer.rb
  27. 72
      app/models/derived_variables/lettings_log_variables.rb
  28. 2
      app/models/derived_variables/shared_logic.rb
  29. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb
  30. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb
  31. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb
  32. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb
  33. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb
  34. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb
  35. 24
      app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb
  36. 2
      app/models/form/lettings/pages/referral_direct.rb
  37. 1
      app/models/form/lettings/pages/referral_general_needs.rb
  38. 1
      app/models/form/lettings/pages/referral_general_needs_prp.rb
  39. 2
      app/models/form/lettings/pages/referral_hsc.rb
  40. 2
      app/models/form/lettings/pages/referral_justice.rb
  41. 2
      app/models/form/lettings/pages/referral_la.rb
  42. 15
      app/models/form/lettings/pages/referral_noms_hr.rb
  43. 15
      app/models/form/lettings/pages/referral_noms_la_hr.rb
  44. 15
      app/models/form/lettings/pages/referral_org_directly_referred.rb
  45. 15
      app/models/form/lettings/pages/referral_org_nominated.rb
  46. 2
      app/models/form/lettings/pages/referral_prp.rb
  47. 15
      app/models/form/lettings/pages/referral_register_la.rb
  48. 15
      app/models/form/lettings/pages/referral_register_prp.rb
  49. 1
      app/models/form/lettings/pages/referral_supported_housing.rb
  50. 1
      app/models/form/lettings/pages/referral_supported_housing_prp.rb
  51. 2
      app/models/form/lettings/pages/referral_type.rb
  52. 1
      app/models/form/lettings/pages/referral_value_check.rb
  53. 24
      app/models/form/lettings/pages/tenancyother_value_check.rb
  54. 4
      app/models/form/lettings/questions/address_line1.rb
  55. 4
      app/models/form/lettings/questions/address_search.rb
  56. 10
      app/models/form/lettings/questions/age.rb
  57. 4
      app/models/form/lettings/questions/age1.rb
  58. 4
      app/models/form/lettings/questions/age1_known.rb
  59. 10
      app/models/form/lettings/questions/age_known.rb
  60. 4
      app/models/form/lettings/questions/armedforces.rb
  61. 4
      app/models/form/lettings/questions/beds.rb
  62. 4
      app/models/form/lettings/questions/benefits.rb
  63. 4
      app/models/form/lettings/questions/brent_4_weekly.rb
  64. 4
      app/models/form/lettings/questions/brent_bi_weekly.rb
  65. 4
      app/models/form/lettings/questions/brent_monthly.rb
  66. 4
      app/models/form/lettings/questions/brent_weekly.rb
  67. 4
      app/models/form/lettings/questions/builtype.rb
  68. 4
      app/models/form/lettings/questions/chcharge_4_weekly.rb
  69. 4
      app/models/form/lettings/questions/chcharge_bi_weekly.rb
  70. 4
      app/models/form/lettings/questions/chcharge_monthly.rb
  71. 4
      app/models/form/lettings/questions/chcharge_weekly.rb
  72. 4
      app/models/form/lettings/questions/condition_effects.rb
  73. 4
      app/models/form/lettings/questions/county.rb
  74. 4
      app/models/form/lettings/questions/declaration.rb
  75. 4
      app/models/form/lettings/questions/earnings.rb
  76. 4
      app/models/form/lettings/questions/ethnic_arab.rb
  77. 4
      app/models/form/lettings/questions/ethnic_asian.rb
  78. 4
      app/models/form/lettings/questions/ethnic_black.rb
  79. 4
      app/models/form/lettings/questions/ethnic_group.rb
  80. 4
      app/models/form/lettings/questions/ethnic_mixed.rb
  81. 4
      app/models/form/lettings/questions/ethnic_white.rb
  82. 4
      app/models/form/lettings/questions/first_time_property_let_as_social_housing.rb
  83. 4
      app/models/form/lettings/questions/gender_identity1.rb
  84. 1
      app/models/form/lettings/questions/gender_same_as_sex.rb
  85. 4
      app/models/form/lettings/questions/hb.rb
  86. 4
      app/models/form/lettings/questions/hbrentshortfall.rb
  87. 4
      app/models/form/lettings/questions/hhmemb.rb
  88. 4
      app/models/form/lettings/questions/homeless.rb
  89. 4
      app/models/form/lettings/questions/household_charge.rb
  90. 4
      app/models/form/lettings/questions/housingneeds.rb
  91. 4
      app/models/form/lettings/questions/housingneeds_other.rb
  92. 4
      app/models/form/lettings/questions/housingneeds_type.rb
  93. 4
      app/models/form/lettings/questions/illness.rb
  94. 4
      app/models/form/lettings/questions/incfreq.rb
  95. 4
      app/models/form/lettings/questions/irproduct_other.rb
  96. 4
      app/models/form/lettings/questions/is_carehome.rb
  97. 4
      app/models/form/lettings/questions/joint.rb
  98. 4
      app/models/form/lettings/questions/la.rb
  99. 4
      app/models/form/lettings/questions/layear.rb
  100. 4
      app/models/form/lettings/questions/leftreg.rb
  101. Some files were not shown because too many files have changed in this diff Show More

0
.erb-lint.yml → .erb_lint.yml

5
.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

2
.ruby-version

@ -1 +1 @@
3.1.6
3.4.4

4
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

11
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

111
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

20
app/components/create_log_actions_component.html.erb

@ -14,17 +14,33 @@
<span class="govuk-body govuk-body-s">These tools can only be seen and used in testing environments.</span>
<div>
<%= govuk_button_link_to create_test_log_href, class: "govuk-button" do %>
New test log
New <%= current_collection_year_label %> test log
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
<path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path>
</svg>
<% 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
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
<path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path>
</svg>
<% 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)
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
<path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path>
</svg>
<% 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)
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" aria-hidden="true" focusable="false">
<path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path>
</svg>
<% end %>
<% end %>
<%= govuk_button_link_to create_test_bulk_upload_href(2025), class: "govuk-button govuk-button--secondary" do %>
25/26 BU test file
<svg class="govuk-button__start-icon bi bi-download" xmlns="http://www.w3.org/2000/svg" width="18" height="19" fill="currentColor" viewBox="0 0 16 16" stroke="currentColor" stroke-width="1.4">

17
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

2
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

2
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

2
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

2
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

2
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

28
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?

42
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

2
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

9
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

2
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

2
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

9
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("<br><br>").html_safe
end
end

3
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)

4
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

4
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 %(<p class="govuk-!-font-weight-bold">#{text}</p>) if @bold # rubocop:disable Rails/HelperInstanceVariable
return %(<p class="govuk-!-font-weight-bold">#{text}</p>) if @bold
%(<p class="govuk-body-m">#{text}</p>)
end

3
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

3
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)

3
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?

72
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!

2
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

2
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" => [],

2
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" => [],

2
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" => [],

2
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,
},
]

2
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,
},
]

2
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" => [],

24
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

2
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

1
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

1
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

2
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

2
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

2
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

15
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

15
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

15
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

15
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

2
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

15
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

15
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

1
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

1
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

2
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

1
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

24
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

4
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

4
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

10
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

4
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

4
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

10
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

1
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

4
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

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save