Browse Source

Merge branch 'main' into CLDC-4043-redo-org-merge-marked-as-incomplete-if-validation-fail

pull/3098/head
Samuel Young 5 days ago committed by GitHub
parent
commit
6cb60f6482
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      .github/workflows/review_pipeline.yml
  2. 120
      Gemfile.lock
  3. 3
      app/controllers/form_controller.rb
  4. 1
      app/models/form/lettings/questions/brent_4_weekly.rb
  5. 1
      app/models/form/lettings/questions/brent_bi_weekly.rb
  6. 1
      app/models/form/lettings/questions/brent_monthly.rb
  7. 1
      app/models/form/lettings/questions/brent_weekly.rb
  8. 1
      app/models/form/lettings/questions/chcharge_4_weekly.rb
  9. 1
      app/models/form/lettings/questions/chcharge_bi_weekly.rb
  10. 1
      app/models/form/lettings/questions/chcharge_monthly.rb
  11. 1
      app/models/form/lettings/questions/chcharge_weekly.rb
  12. 1
      app/models/form/lettings/questions/earnings.rb
  13. 1
      app/models/form/lettings/questions/pscharge_4_weekly.rb
  14. 1
      app/models/form/lettings/questions/pscharge_bi_weekly.rb
  15. 1
      app/models/form/lettings/questions/pscharge_monthly.rb
  16. 1
      app/models/form/lettings/questions/pscharge_weekly.rb
  17. 1
      app/models/form/lettings/questions/scharge_4_weekly.rb
  18. 1
      app/models/form/lettings/questions/scharge_bi_weekly.rb
  19. 1
      app/models/form/lettings/questions/scharge_monthly.rb
  20. 1
      app/models/form/lettings/questions/scharge_weekly.rb
  21. 1
      app/models/form/lettings/questions/supcharg_4_weekly.rb
  22. 1
      app/models/form/lettings/questions/supcharg_bi_weekly.rb
  23. 1
      app/models/form/lettings/questions/supcharg_monthly.rb
  24. 1
      app/models/form/lettings/questions/supcharg_weekly.rb
  25. 1
      app/models/form/lettings/questions/tcharge_4_weekly.rb
  26. 1
      app/models/form/lettings/questions/tcharge_bi_weekly.rb
  27. 1
      app/models/form/lettings/questions/tcharge_monthly.rb
  28. 1
      app/models/form/lettings/questions/tcharge_weekly.rb
  29. 1
      app/models/form/lettings/questions/tshortfall.rb
  30. 3
      app/models/form/question.rb
  31. 1
      app/models/form/sales/questions/buyer1_income.rb
  32. 1
      app/models/form/sales/questions/buyer2_income.rb
  33. 1
      app/models/form/sales/questions/deposit_amount.rb
  34. 1
      app/models/form/sales/questions/deposit_discount.rb
  35. 1
      app/models/form/sales/questions/grant.rb
  36. 1
      app/models/form/sales/questions/leasehold_charges.rb
  37. 1
      app/models/form/sales/questions/management_fee.rb
  38. 1
      app/models/form/sales/questions/monthly_rent.rb
  39. 1
      app/models/form/sales/questions/monthly_rent_after_staircasing.rb
  40. 1
      app/models/form/sales/questions/monthly_rent_before_staircasing.rb
  41. 1
      app/models/form/sales/questions/mortgage_amount.rb
  42. 1
      app/models/form/sales/questions/purchase_price.rb
  43. 1
      app/models/form/sales/questions/savings.rb
  44. 1
      app/models/form/sales/questions/service_charge.rb
  45. 1
      app/models/form/sales/questions/value.rb
  46. 2
      app/models/validations/soft_validations.rb
  47. 6
      docs/Gemfile.lock
  48. 13
      docs/infrastructure.md
  49. 2
      spec/models/lettings_log_derived_fields_spec.rb
  50. 2
      spec/models/validations/financial_validations_spec.rb

2
.github/workflows/review_pipeline.yml

@ -52,6 +52,6 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
msg: "Created review app at https://review.submit-social-housing-data.communities.gov.uk/${{ github.event.pull_request.number }}" msg: "Created review app at https://review.submit-social-housing-data.communities.gov.uk/${{ github.event.pull_request.number }}. Note that the review app will be automatically deprovisioned after 30 days and will need the review app pipeline running again."
check_for_duplicate_msg: true check_for_duplicate_msg: true
duplicate_msg_pattern: Created review app at* duplicate_msg_pattern: Created review app at*

120
Gemfile.lock

@ -1,29 +1,29 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (7.2.2.1) actioncable (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
actionmailbox (7.2.2.1) actionmailbox (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
activejob (= 7.2.2.1) activejob (= 7.2.2.2)
activerecord (= 7.2.2.1) activerecord (= 7.2.2.2)
activestorage (= 7.2.2.1) activestorage (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
mail (>= 2.8.0) mail (>= 2.8.0)
actionmailer (7.2.2.1) actionmailer (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
actionview (= 7.2.2.1) actionview (= 7.2.2.2)
activejob (= 7.2.2.1) activejob (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
mail (>= 2.8.0) mail (>= 2.8.0)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
actionpack (7.2.2.1) actionpack (7.2.2.2)
actionview (= 7.2.2.1) actionview (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
racc racc
rack (>= 2.2.4, < 3.2) rack (>= 2.2.4, < 3.2)
@ -32,39 +32,39 @@ GEM
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
useragent (~> 0.16) useragent (~> 0.16)
actiontext (7.2.2.1) actiontext (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
activerecord (= 7.2.2.1) activerecord (= 7.2.2.2)
activestorage (= 7.2.2.1) activestorage (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
globalid (>= 0.6.0) globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.2.2.1) actionview (7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.11) erubi (~> 1.11)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
activejob (7.2.2.1) activejob (7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.2.2.1) activemodel (7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
activemodel-serializers-xml (1.0.3) activemodel-serializers-xml (1.0.3)
activemodel (>= 5.0.0.a) activemodel (>= 5.0.0.a)
activesupport (>= 5.0.0.a) activesupport (>= 5.0.0.a)
builder (~> 3.1) builder (~> 3.1)
activerecord (7.2.2.1) activerecord (7.2.2.2)
activemodel (= 7.2.2.1) activemodel (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
timeout (>= 0.4.0) timeout (>= 0.4.0)
activestorage (7.2.2.1) activestorage (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
activejob (= 7.2.2.1) activejob (= 7.2.2.2)
activerecord (= 7.2.2.1) activerecord (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
marcel (~> 1.0) marcel (~> 1.0)
activesupport (7.2.2.1) activesupport (7.2.2.2)
base64 base64
benchmark (>= 0.3) benchmark (>= 0.3)
bigdecimal bigdecimal
@ -108,9 +108,9 @@ GEM
descendants_tracker (~> 0.0.4) descendants_tracker (~> 0.0.4)
ice_nine (~> 0.11.0) ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
base64 (0.2.0) base64 (0.3.0)
bcrypt (3.1.20) bcrypt (3.1.20)
benchmark (0.4.0) benchmark (0.4.1)
better_html (2.0.2) better_html (2.0.2)
actionview (>= 6.0) actionview (>= 6.0)
activesupport (>= 6.0) activesupport (>= 6.0)
@ -118,7 +118,7 @@ GEM
erubi (~> 1.4) erubi (~> 1.4)
parser (>= 2.4) parser (>= 2.4)
smart_properties smart_properties
bigdecimal (3.1.9) bigdecimal (3.2.2)
bindex (0.8.1) bindex (0.8.1)
bootsnap (1.18.3) bootsnap (1.18.3)
msgpack (~> 1.2) msgpack (~> 1.2)
@ -149,7 +149,7 @@ GEM
coercible (1.0.0) coercible (1.0.0)
descendants_tracker (~> 0.0.1) descendants_tracker (~> 0.0.1)
concurrent-ruby (1.3.5) concurrent-ruby (1.3.5)
connection_pool (2.5.0) connection_pool (2.5.3)
crack (1.0.0) crack (1.0.0)
bigdecimal bigdecimal
rexml rexml
@ -178,7 +178,7 @@ GEM
dotenv-rails (3.0.2) dotenv-rails (3.0.2)
dotenv (= 3.0.2) dotenv (= 3.0.2)
railties (>= 6.1) railties (>= 6.1)
drb (2.2.1) drb (2.2.3)
dumb_delegator (1.0.0) dumb_delegator (1.0.0)
encryptor (3.0.0) encryptor (3.0.0)
erb_lint (0.5.0) erb_lint (0.5.0)
@ -260,7 +260,7 @@ GEM
listen (3.9.0) listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
logger (1.6.6) logger (1.7.0)
loofah (2.24.0) loofah (2.24.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.12.0) nokogiri (>= 1.12.0)
@ -273,7 +273,7 @@ GEM
matrix (0.4.2) matrix (0.4.2)
method_source (1.1.0) method_source (1.1.0)
mini_mime (1.1.5) mini_mime (1.1.5)
minitest (5.25.4) minitest (5.25.5)
msgpack (1.7.2) msgpack (1.7.2)
multipart-post (2.4.1) multipart-post (2.4.1)
nested_form (0.3.2) nested_form (0.3.2)
@ -355,20 +355,20 @@ GEM
rack (>= 1.3) rack (>= 1.3)
rackup (2.2.1) rackup (2.2.1)
rack (>= 3) rack (>= 3)
rails (7.2.2.1) rails (7.2.2.2)
actioncable (= 7.2.2.1) actioncable (= 7.2.2.2)
actionmailbox (= 7.2.2.1) actionmailbox (= 7.2.2.2)
actionmailer (= 7.2.2.1) actionmailer (= 7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
actiontext (= 7.2.2.1) actiontext (= 7.2.2.2)
actionview (= 7.2.2.1) actionview (= 7.2.2.2)
activejob (= 7.2.2.1) activejob (= 7.2.2.2)
activemodel (= 7.2.2.1) activemodel (= 7.2.2.2)
activerecord (= 7.2.2.1) activerecord (= 7.2.2.2)
activestorage (= 7.2.2.1) activestorage (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.2.2.1) railties (= 7.2.2.2)
rails-dom-testing (2.2.0) rails-dom-testing (2.2.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
minitest minitest
@ -383,9 +383,9 @@ GEM
nested_form (~> 0.3) nested_form (~> 0.3)
rails (>= 6.0, < 9) rails (>= 6.0, < 9)
turbo-rails (>= 1.0, < 3) turbo-rails (>= 1.0, < 3)
railties (7.2.2.1) railties (7.2.2.2)
actionpack (= 7.2.2.1) actionpack (= 7.2.2.2)
activesupport (= 7.2.2.1) activesupport (= 7.2.2.2)
irb (~> 1.13) irb (~> 1.13)
rackup (>= 1.0.0) rackup (>= 1.0.0)
rake (>= 12.2) rake (>= 12.2)

3
app/controllers/form_controller.rb

@ -160,6 +160,9 @@ private
result[option] = 1 if question_params.include?(option) result[option] = 1 if question_params.include?(option)
end end
elsif question.type != "date" elsif question.type != "date"
if question.strip_commas
question_params = question_params.delete(",")
end
result[question.id] = question_params result[question.id] = question_params
end end

1
app/models/form/lettings/questions/brent_4_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::Brent4Weekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 4 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze

1
app/models/form/lettings/questions/brent_bi_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::BrentBiWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 2 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze

1
app/models/form/lettings/questions/brent_monthly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::BrentMonthly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every month" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze

1
app/models/form/lettings/questions/brent_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::BrentWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every week" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 95, 2024 => 94, 2025 => 92 }.freeze

1
app/models/form/lettings/questions/chcharge_4_weekly.rb

@ -10,6 +10,7 @@ class Form::Lettings::Questions::Chcharge4Weekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 4 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze

1
app/models/form/lettings/questions/chcharge_bi_weekly.rb

@ -10,6 +10,7 @@ class Form::Lettings::Questions::ChchargeBiWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 2 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze

1
app/models/form/lettings/questions/chcharge_monthly.rb

@ -10,6 +10,7 @@ class Form::Lettings::Questions::ChchargeMonthly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every month" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze

1
app/models/form/lettings/questions/chcharge_weekly.rb

@ -10,6 +10,7 @@ class Form::Lettings::Questions::ChchargeWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every week" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 94, 2024 => 93 }.freeze

1
app/models/form/lettings/questions/earnings.rb

@ -16,6 +16,7 @@ class Form::Lettings::Questions::Earnings < ::Form::Question
{ "label" => " every year", "depends_on" => { "incfreq" => 3 } }, { "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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 88, 2024 => 87 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 88, 2024 => 87 }.freeze

1
app/models/form/lettings/questions/pscharge_4_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::Pscharge4Weekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 4 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze

1
app/models/form/lettings/questions/pscharge_bi_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::PschargeBiWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 2 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze

1
app/models/form/lettings/questions/pscharge_monthly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::PschargeMonthly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every month" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze

1
app/models/form/lettings/questions/pscharge_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::PschargeWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every week" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 96, 2025 => 94 }.freeze

1
app/models/form/lettings/questions/scharge_4_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::Scharge4Weekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 4 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze

1
app/models/form/lettings/questions/scharge_bi_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SchargeBiWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 2 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze

1
app/models/form/lettings/questions/scharge_monthly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SchargeMonthly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every month" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze

1
app/models/form/lettings/questions/scharge_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SchargeWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every week" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 95, 2025 => 93 }.freeze

1
app/models/form/lettings/questions/supcharg_4_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::Supcharg4Weekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 4 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze

1
app/models/form/lettings/questions/supcharg_bi_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SupchargBiWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every 2 weeks" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze

1
app/models/form/lettings/questions/supcharg_monthly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SupchargMonthly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every month" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze

1
app/models/form/lettings/questions/supcharg_weekly.rb

@ -13,6 +13,7 @@ class Form::Lettings::Questions::SupchargWeekly < ::Form::Question
@prefix = "£" @prefix = "£"
@suffix = " every week" @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 98, 2024 => 97, 2025 => 95 }.freeze

1
app/models/form/lettings/questions/tcharge_4_weekly.rb

@ -14,5 +14,6 @@ class Form::Lettings::Questions::Tcharge4Weekly < ::Form::Question
@requires_js = true @requires_js = true
@fields_added = %w[brent scharge pscharge supcharg] @fields_added = %w[brent scharge pscharge supcharg]
@hidden_in_check_answers = true @hidden_in_check_answers = true
@strip_commas = true
end end
end end

1
app/models/form/lettings/questions/tcharge_bi_weekly.rb

@ -14,5 +14,6 @@ class Form::Lettings::Questions::TchargeBiWeekly < ::Form::Question
@requires_js = true @requires_js = true
@fields_added = %w[brent scharge pscharge supcharg] @fields_added = %w[brent scharge pscharge supcharg]
@hidden_in_check_answers = true @hidden_in_check_answers = true
@strip_commas = true
end end
end end

1
app/models/form/lettings/questions/tcharge_monthly.rb

@ -14,5 +14,6 @@ class Form::Lettings::Questions::TchargeMonthly < ::Form::Question
@requires_js = true @requires_js = true
@fields_added = %w[brent scharge pscharge supcharg] @fields_added = %w[brent scharge pscharge supcharg]
@hidden_in_check_answers = true @hidden_in_check_answers = true
@strip_commas = true
end end
end end

1
app/models/form/lettings/questions/tcharge_weekly.rb

@ -14,5 +14,6 @@ class Form::Lettings::Questions::TchargeWeekly < ::Form::Question
@requires_js = true @requires_js = true
@fields_added = %w[brent scharge pscharge supcharg] @fields_added = %w[brent scharge pscharge supcharg]
@hidden_in_check_answers = true @hidden_in_check_answers = true
@strip_commas = true
end end
end end

1
app/models/form/lettings/questions/tshortfall.rb

@ -22,6 +22,7 @@ class Form::Lettings::Questions::Tshortfall < ::Form::Question
{ "label" => " every week for 53 weeks", "depends_on" => { "period" => 10 } }, { "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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 100, 2024 => 99, 2025 => 97 }.freeze

3
app/models/form/question.rb

@ -8,7 +8,7 @@ class Form::Question
:top_guidance_partial, :bottom_guidance_partial, :prefix, :suffix, :top_guidance_partial, :bottom_guidance_partial, :prefix, :suffix,
:requires_js, :fields_added, :derived, :check_answers_card_number, :requires_js, :fields_added, :derived, :check_answers_card_number,
:unresolved_hint_text, :question_number, :hide_question_number_on_page, :unresolved_hint_text, :question_number, :hide_question_number_on_page,
:plain_label, :error_label :plain_label, :error_label, :strip_commas
def initialize(id, hsh, page) def initialize(id, hsh, page)
@id = id @id = id
@ -45,6 +45,7 @@ class Form::Question
@plain_label = hsh["plain_label"] @plain_label = hsh["plain_label"]
@error_label = hsh["error_label"] @error_label = hsh["error_label"]
@disable_clearing_if_not_routed_or_dynamic_answer_options = hsh["disable_clearing_if_not_routed_or_dynamic_answer_options"] @disable_clearing_if_not_routed_or_dynamic_answer_options = hsh["disable_clearing_if_not_routed_or_dynamic_answer_options"]
@strip_commas = hsh["strip_commas"] || false
end end
end end

1
app/models/form/sales/questions/buyer1_income.rb

@ -11,6 +11,7 @@ class Form::Sales::Questions::Buyer1Income < ::Form::Question
@prefix = "£" @prefix = "£"
@check_answers_card_number = 1 @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 = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 67, 2024 => 69, 2025 => 66 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 67, 2024 => 69, 2025 => 66 }.freeze

1
app/models/form/sales/questions/buyer2_income.rb

@ -11,6 +11,7 @@ class Form::Sales::Questions::Buyer2Income < ::Form::Question
@prefix = "£" @prefix = "£"
@check_answers_card_number = 2 @check_answers_card_number = 2
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 69, 2024 => 71, 2025 => 68 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 69, 2024 => 71, 2025 => 68 }.freeze

1
app/models/form/sales/questions/deposit_amount.rb

@ -13,6 +13,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question
@optional = optional @optional = optional
@top_guidance_partial = top_guidance_partial @top_guidance_partial = top_guidance_partial
@copy_key = copy_key @copy_key = copy_key
@strip_commas = true
end end
def derived?(log) def derived?(log)

1
app/models/form/sales/questions/deposit_discount.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::DepositDiscount < ::Form::Question
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@top_guidance_partial = "financial_calculations_shared_ownership" @top_guidance_partial = "financial_calculations_shared_ownership"
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 97, 2025 => 86 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 96, 2024 => 97, 2025 => 86 }.freeze

1
app/models/form/sales/questions/grant.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::Grant < ::Form::Question
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@top_guidance_partial = "financial_calculations_discounted_ownership" @top_guidance_partial = "financial_calculations_discounted_ownership"
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 101, 2024 => 102, 2025 => 104 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 101, 2024 => 102, 2025 => 104 }.freeze

1
app/models/form/sales/questions/leasehold_charges.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::LeaseholdCharges < ::Form::Question
@copy_key = "sales.sale_information.leaseholdcharges.mscharge" @copy_key = "sales.sale_information.leaseholdcharges.mscharge"
@ownershipsch = ownershipsch @ownershipsch = ownershipsch
@question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch] @question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = { QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {

1
app/models/form/sales/questions/management_fee.rb

@ -9,6 +9,7 @@ class Form::Sales::Questions::ManagementFee < ::Form::Question
@width = 5 @width = 5
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2025 => 89 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2025 => 89 }.freeze

1
app/models/form/sales/questions/monthly_rent.rb

@ -8,6 +8,7 @@ class Form::Sales::Questions::MonthlyRent < ::Form::Question
@width = 5 @width = 5
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 98, 2025 => 87 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 97, 2024 => 98, 2025 => 87 }.freeze

1
app/models/form/sales/questions/monthly_rent_after_staircasing.rb

@ -9,6 +9,7 @@ class Form::Sales::Questions::MonthlyRentAfterStaircasing < ::Form::Question
@width = 5 @width = 5
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2025 => 101 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2025 => 101 }.freeze

1
app/models/form/sales/questions/monthly_rent_before_staircasing.rb

@ -9,6 +9,7 @@ class Form::Sales::Questions::MonthlyRentBeforeStaircasing < ::Form::Question
@width = 5 @width = 5
@prefix = "£" @prefix = "£"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2025 => 100 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2025 => 100 }.freeze

1
app/models/form/sales/questions/mortgage_amount.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::MortgageAmount < ::Form::Question
@ownershipsch = ownershipsch @ownershipsch = ownershipsch
@question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch] @question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch]
@top_guidance_partial = top_guidance_partial @top_guidance_partial = top_guidance_partial
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = { QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {

1
app/models/form/sales/questions/purchase_price.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::PurchasePrice < ::Form::Question
@ownership_sch = ownershipsch @ownership_sch = ownershipsch
@question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch] @question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch]
@top_guidance_partial = top_guidance_partial @top_guidance_partial = top_guidance_partial
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = { QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {

1
app/models/form/sales/questions/savings.rb

@ -9,6 +9,7 @@ class Form::Sales::Questions::Savings < ::Form::Question
@step = 10 @step = 10
@min = 0 @min = 0
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 72, 2024 => 74, 2025 => 71 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2023 => 72, 2024 => 74, 2025 => 71 }.freeze

1
app/models/form/sales/questions/service_charge.rb

@ -9,6 +9,7 @@ class Form::Sales::Questions::ServiceCharge < ::Form::Question
@prefix = "£" @prefix = "£"
@copy_key = "sales.sale_information.servicecharges.servicecharge" @copy_key = "sales.sale_information.servicecharges.servicecharge"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@strip_commas = true
end end
QUESTION_NUMBER_FROM_YEAR = { 2025 => 88 }.freeze QUESTION_NUMBER_FROM_YEAR = { 2025 => 88 }.freeze

1
app/models/form/sales/questions/value.rb

@ -10,6 +10,7 @@ class Form::Sales::Questions::Value < ::Form::Question
@prefix = "£" @prefix = "£"
@question_number = question_number_from_year[form.start_date.year] || question_number_from_year[question_number_from_year.keys.max] @question_number = question_number_from_year[form.start_date.year] || question_number_from_year[question_number_from_year.keys.max]
@top_guidance_partial = "financial_calculations_shared_ownership" @top_guidance_partial = "financial_calculations_shared_ownership"
@strip_commas = true
end end
def question_number_from_year def question_number_from_year

2
app/models/validations/soft_validations.rb

@ -6,7 +6,7 @@ module Validations::SoftValidations
2 => OpenStruct.new(soft_min: 67, soft_max: 620, hard_min: 50, hard_max: 950), 2 => OpenStruct.new(soft_min: 67, soft_max: 620, hard_min: 50, hard_max: 950),
3 => OpenStruct.new(soft_min: 80, soft_max: 480, hard_min: 40, hard_max: 990), 3 => OpenStruct.new(soft_min: 80, soft_max: 480, hard_min: 40, hard_max: 990),
4 => OpenStruct.new(soft_min: 50, soft_max: 370, hard_min: 10, hard_max: 450), 4 => OpenStruct.new(soft_min: 50, soft_max: 370, hard_min: 10, hard_max: 450),
5 => OpenStruct.new(soft_min: 50, soft_max: 380, hard_min: 10, hard_max: 690), 5 => OpenStruct.new(soft_min: 50, soft_max: 380, hard_min: 10, hard_max: 1000),
6 => OpenStruct.new(soft_min: 53, soft_max: 540, hard_min: 10, hard_max: 890), 6 => OpenStruct.new(soft_min: 53, soft_max: 540, hard_min: 10, hard_max: 890),
7 => OpenStruct.new(soft_min: 47, soft_max: 460, hard_min: 10, hard_max: 1300), 7 => OpenStruct.new(soft_min: 47, soft_max: 460, hard_min: 10, hard_max: 1300),
8 => OpenStruct.new(soft_min: 54, soft_max: 460, hard_min: 10, hard_max: 2000), 8 => OpenStruct.new(soft_min: 54, soft_max: 460, hard_min: 10, hard_max: 2000),

6
docs/Gemfile.lock

@ -210,11 +210,11 @@ GEM
jekyll-feed (~> 0.9) jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1) jekyll-seo-tag (~> 2.1)
minitest (5.19.0) minitest (5.19.0)
nokogiri (1.18.8-arm64-darwin) nokogiri (1.18.9-arm64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.18.8-x86_64-darwin) nokogiri (1.18.9-x86_64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.18.8-x86_64-linux-gnu) nokogiri (1.18.9-x86_64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
octokit (4.25.1) octokit (4.25.1)
faraday (>= 1, < 3) faraday (>= 1, < 3)

13
docs/infrastructure.md

@ -57,7 +57,7 @@ Where to find the Infrastructure?
The infrastructure is managed as code. The infrastructure is managed as code.
In the terraform folder of the codebase, there will be dedicated sub-folders for each of the aforementioned environments, where all the infrastructure for them is defined. In the terraform folder of the codebase, there will be dedicated sub-folders for each of the aforementioned environments, where all the infrastructure for them is defined.
## Deployment (Pipeline — Recommended) ## Production Deployment
The application is set up so that it can be deployed via GitHub actions. We use Git tags to mark releases. The only pre-requisite is that your GitHub account is added to our team. The application is set up so that it can be deployed via GitHub actions. We use Git tags to mark releases. The only pre-requisite is that your GitHub account is added to our team.
@ -66,12 +66,13 @@ To deploy you need to:
1. Determine [previous version](https://github.com/communitiesuk/submit-social-housing-lettings-and-sales-data/tags), such as `v0.1.1`. 1. Determine [previous version](https://github.com/communitiesuk/submit-social-housing-lettings-and-sales-data/tags), such as `v0.1.1`.
2. Create a [new release](https://github.com/communitiesuk/submit-social-housing-lettings-and-sales-data/releases/new) with subsequent version (e.g., `v0.1.2`). On this page, create a new tag with that version and generate release notes. Save as draft. 2. Create a [new release](https://github.com/communitiesuk/submit-social-housing-lettings-and-sales-data/releases/new) with subsequent version (e.g., `v0.1.2`). On this page, create a new tag with that version and generate release notes. Save as draft.
3. Post release notes on Slack. 3. Post release notes on Slack.
4. Publish release. 4. Ensure that there are no other pipelines running on the repo right now. If a staging deployment is running, it must complete before you can deploy to production.
5. Monitor alerting, logging and Sentry. 5. Publish release. This will trigger the deployment pipeline.
6. Post success message on Slack. 6. Monitor alerting, logging and Sentry.
7. Tag tickets as ‘Released’ and move tickets to done on JIRA. 7. Post success message on Slack.
8. Tag tickets as ‘Released’ and move tickets to done on JIRA.
## CI/CD ## Staging Deployment
When a commit is made to `main` the following GitHub action jobs are triggered: When a commit is made to `main` the following GitHub action jobs are triggered:

2
spec/models/lettings_log_derived_fields_spec.rb

@ -385,7 +385,7 @@ RSpec.describe LettingsLog, type: :model do
{ {
test_title: "correctly derives floats and weekly total charge", test_title: "correctly derives floats and weekly total charge",
fields_to_set: { supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97 }, fields_to_set: { supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97 },
expected_values: { wsupchrg: 25.03, wpschrge: 25.03, wscharge: 25.24, wrent: 25.24, wtcharge: 100.55 }, expected_values: { wsupchrg: 25.03, wpschrge: 25.03, wscharge: 25.25, wrent: 25.24, wtcharge: 100.55 },
}, },
{ {
test_title: "correctly derives weekly care home charge when the letting is supported housing", test_title: "correctly derives weekly care home charge when the letting is supported housing",

2
spec/models/validations/financial_validations_spec.rb

@ -877,7 +877,7 @@ RSpec.describe Validations::FinancialValidations do
context "when period is every 2 weeks" do context "when period is every 2 weeks" do
it "validates that total charge is at least 10 per week" do it "validates that total charge is at least 10 per week" do
record.period = 2 record.period = 2
record.tcharge = 19.99 record.tcharge = 19.98
financial_validator.validate_rent_amount(record) financial_validator.validate_rent_amount(record)
expect(record.errors["tcharge"]) expect(record.errors["tcharge"])
.to include(match I18n.t("validations.lettings.financial.tcharge.under_10")) .to include(match I18n.t("validations.lettings.financial.tcharge.under_10"))

Loading…
Cancel
Save