From b4e18dcf661e5d45b80f45b61469f82ac0be1ed8 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Thu, 29 Jan 2026 16:57:58 +0000 Subject: [PATCH] CLDC-4189: Add PRP flow --- .../{referral_noms.rb => referral_noms_hr.rb} | 8 +- .../lettings/pages/referral_noms_la_hr.rb | 15 ++++ .../form/lettings/pages/referral_org.rb | 15 ---- .../pages/referral_org_directly_referred.rb | 15 ++++ .../lettings/pages/referral_org_nominated.rb | 15 ++++ .../lettings/pages/referral_register_prp.rb | 2 +- .../form/lettings/questions/referral_noms.rb | 45 ++++++++--- .../form/lettings/questions/referral_org.rb | 81 ++++++++++++++++--- .../lettings/questions/referral_register.rb | 17 +++- .../subsections/household_situation.rb | 6 +- app/models/lettings_log.rb | 16 ++++ 11 files changed, 189 insertions(+), 46 deletions(-) rename app/models/form/lettings/pages/{referral_noms.rb => referral_noms_hr.rb} (50%) create mode 100644 app/models/form/lettings/pages/referral_noms_la_hr.rb delete mode 100644 app/models/form/lettings/pages/referral_org.rb create mode 100644 app/models/form/lettings/pages/referral_org_directly_referred.rb create mode 100644 app/models/form/lettings/pages/referral_org_nominated.rb diff --git a/app/models/form/lettings/pages/referral_noms.rb b/app/models/form/lettings/pages/referral_noms_hr.rb similarity index 50% rename from app/models/form/lettings/pages/referral_noms.rb rename to app/models/form/lettings/pages/referral_noms_hr.rb index fa811e961..d1120bffd 100644 --- a/app/models/form/lettings/pages/referral_noms.rb +++ b/app/models/form/lettings/pages/referral_noms_hr.rb @@ -1,15 +1,15 @@ # added in 2026 -class Form::Lettings::Pages::ReferralNoms < ::Form::Page +class Form::Lettings::Pages::ReferralNomsHr < ::Form::Page def initialize(id, hsh, subsection) super - @id = "referral_noms" + @id = "referral_noms_hr" end def questions - @questions ||= [Form::Lettings::Questions::ReferralNoms.new(nil, nil, self)] + @questions ||= [Form::Lettings::Questions::ReferralNoms.new(nil, nil, self, 7)] end def routed_to?(log, _current_user) - log.owning_organisation&.prp? + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_from_housing_register? end end diff --git a/app/models/form/lettings/pages/referral_noms_la_hr.rb b/app/models/form/lettings/pages/referral_noms_la_hr.rb new file mode 100644 index 000000000..cc0e27371 --- /dev/null +++ b/app/models/form/lettings/pages/referral_noms_la_hr.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralNomsLaHr < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_noms_la_hr" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralNoms.new(nil, nil, self, 6)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_from_local_authority_housing_register? + end +end diff --git a/app/models/form/lettings/pages/referral_org.rb b/app/models/form/lettings/pages/referral_org.rb deleted file mode 100644 index fe23140d8..000000000 --- a/app/models/form/lettings/pages/referral_org.rb +++ /dev/null @@ -1,15 +0,0 @@ -# added in 2026 -class Form::Lettings::Pages::ReferralOrg < ::Form::Page - def initialize(id, hsh, subsection) - super - @id = "referral_org" - end - - def questions - @questions ||= [Form::Lettings::Questions::ReferralOrg.new(nil, nil, self)] - end - - def routed_to?(log, _current_user) - log.owning_organisation&.prp? - end -end diff --git a/app/models/form/lettings/pages/referral_org_directly_referred.rb b/app/models/form/lettings/pages/referral_org_directly_referred.rb new file mode 100644 index 000000000..baf4c2747 --- /dev/null +++ b/app/models/form/lettings/pages/referral_org_directly_referred.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralOrgDirectlyReferred < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_org_directly_referred" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralOrg.new(nil, nil, self, 7)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_directly_referred? + end +end diff --git a/app/models/form/lettings/pages/referral_org_nominated.rb b/app/models/form/lettings/pages/referral_org_nominated.rb new file mode 100644 index 000000000..8be5f8edc --- /dev/null +++ b/app/models/form/lettings/pages/referral_org_nominated.rb @@ -0,0 +1,15 @@ +# added in 2026 +class Form::Lettings::Pages::ReferralOrgNominated < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_org_nominated" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralOrg.new(nil, nil, self, 1)] + end + + def routed_to?(log, _current_user) + log.owning_organisation&.prp? && !log.is_renewal? && log.referral_is_nominated_by_local_authority? + end +end diff --git a/app/models/form/lettings/pages/referral_register_prp.rb b/app/models/form/lettings/pages/referral_register_prp.rb index 7191937c8..d0c5cdaf1 100644 --- a/app/models/form/lettings/pages/referral_register_prp.rb +++ b/app/models/form/lettings/pages/referral_register_prp.rb @@ -10,6 +10,6 @@ class Form::Lettings::Pages::ReferralRegisterPrp < ::Form::Page end def routed_to?(log, _current_user) - log.owning_organisation&.prp? + log.owning_organisation&.prp? && !log.is_renewal? end end diff --git a/app/models/form/lettings/questions/referral_noms.rb b/app/models/form/lettings/questions/referral_noms.rb index 8c1ea88db..87083c148 100644 --- a/app/models/form/lettings/questions/referral_noms.rb +++ b/app/models/form/lettings/questions/referral_noms.rb @@ -1,23 +1,48 @@ # added in 2026 class Form::Lettings::Questions::ReferralNoms < ::Form::Question - def initialize(id, hsh, page) - super + def initialize(id, hsh, page, referral_register) + super(id, hsh, page) @id = "referral_noms" @copy_key = "lettings.household_situation.referral.noms" @type = "radio" @check_answers_card_number = 0 @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @referral_register = referral_register end def answer_options - { - "1" => { - "value" => "Answer A", - }, - "2" => { - "value" => "Answer B", - }, - }.freeze + case @referral_register + when 6 + { + "1" => { + "value" => "Nominated by a local authority to a PRP", + }, + "2" => { + "value" => "Supported housing only - referred by a local authority to a PRP", + }, + "3" => { + "value" => "Internal transfer from another property owned by the same PRP landlord - for existing social tenants only", + }, + "4" => { + "value" => "Other", + }, + }.freeze + when 7 + { + "5" => { + "value" => "Internal transfer from another property owned by the same PRP landlord - for existing social tenants only", + }, + "6" => { + "value" => " A different PRP landlord - for existing socail tenants only", + }, + "7" => { + "value" => "Directly referred by a third party", + }, + "8" => { + "value" => "Other", + }, + }.freeze + end end QUESTION_NUMBER_FROM_YEAR = { 2026 => 84 }.freeze diff --git a/app/models/form/lettings/questions/referral_org.rb b/app/models/form/lettings/questions/referral_org.rb index 2a8614970..e8bc730d8 100644 --- a/app/models/form/lettings/questions/referral_org.rb +++ b/app/models/form/lettings/questions/referral_org.rb @@ -1,23 +1,84 @@ # added in 2026 class Form::Lettings::Questions::ReferralOrg < ::Form::Question - def initialize(id, hsh, page) - super + def initialize(id, hsh, page, referral_noms) + super(id, hsh, page) @id = "referral_org" @copy_key = "lettings.household_situation.referral.org" @type = "radio" @check_answers_card_number = 0 @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + @referral_noms = referral_noms end def answer_options - { - "1" => { - "value" => "Answer A", - }, - "2" => { - "value" => "Answer B", - }, - }.freeze + case @referral_noms + when 1 + { + "1" => { + "value" => "Referred to LA by health service", + }, + "2" => { + "value" => "Referred to LA by community learning disability team", + }, + "3" => { + "value" => "Referred to LA by community mental health team", + }, + "4" => { + "value" => "Referred to LA by adult social services", + }, + "5" => { + "value" => "Referred to LA by children's social care", + }, + "6" => { + "value" => "Referred to LA by police, probation, prison or youth offending team following a custodial sentence", + }, + "7" => { + "value" => "Referred to LA by police, probation, prison or youth offending team without a custodial sentence", + }, + "8" => { + "value" => "Referred to LA by a voluntary agency", + }, + "9" => { + "value" => "Other referral", + }, + "10" => { + "value" => "Don't know", + }, + }.freeze + when 7 + { + "11" => { + "value" => "Health service", + }, + "12" => { + "value" => "Community learning disability team", + }, + "13" => { + "value" => "Community mental health team", + }, + "14" => { + "value" => "Adult social services", + }, + "15" => { + "value" => "Children's social care", + }, + "16" => { + "value" => "Police, probation, prison or youth offending team following a custodial sentence", + }, + "17" => { + "value" => "Police, probation, prison or youth offending team without a custodial sentence", + }, + "18" => { + "value" => "Voluntary agency", + }, + "19" => { + "value" => "Other third party", + }, + "20" => { + "value" => "Don't know", + }, + }.freeze + end end QUESTION_NUMBER_FROM_YEAR = { 2026 => 84 }.freeze diff --git a/app/models/form/lettings/questions/referral_register.rb b/app/models/form/lettings/questions/referral_register.rb index d6e184758..1e0964be0 100644 --- a/app/models/form/lettings/questions/referral_register.rb +++ b/app/models/form/lettings/questions/referral_register.rb @@ -28,11 +28,20 @@ class Form::Lettings::Questions::ReferralRegister < ::Form::Question }.freeze else { - "1" => { - "value" => "Answer A", + "5" => { + "value" => "Renewal to the same tenant in the same property", }, - "2" => { - "value" => "Answer B", + "6" => { + "value" => "From a local authority housing register (waiting list) or a register with local authority involvement", + }, + "7" => { + "value" => "From a housing register (waiting list) with no local authority involvement", + }, + "8" => { + "value" => "Tenant applied directly (not via a nomination or waiting list)", + }, + "9" => { + "value" => "Don't know", }, }.freeze end diff --git a/app/models/form/lettings/subsections/household_situation.rb b/app/models/form/lettings/subsections/household_situation.rb index be99907a0..cc6ec59de 100644 --- a/app/models/form/lettings/subsections/household_situation.rb +++ b/app/models/form/lettings/subsections/household_situation.rb @@ -30,8 +30,10 @@ class Form::Lettings::Subsections::HouseholdSituation < ::Form::Subsection [ Form::Lettings::Pages::ReferralRegisterLa.new(nil, nil, self), Form::Lettings::Pages::ReferralRegisterPrp.new(nil, nil, self), - Form::Lettings::Pages::ReferralNoms.new(nil, nil, self), - Form::Lettings::Pages::ReferralOrg.new(nil, nil, self), + Form::Lettings::Pages::ReferralNomsLaHr.new(nil, nil, self), + Form::Lettings::Pages::ReferralNomsHr.new(nil, nil, self), + Form::Lettings::Pages::ReferralOrgNominated.new(nil, nil, self), + Form::Lettings::Pages::ReferralOrgDirectlyReferred.new(nil, nil, self), ] elsif form.start_year_2025_or_later? [ diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 5b7d4966b..d3cacb956 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -778,6 +778,22 @@ class LettingsLog < Log rsnvac != 15 && rsnvac_was == 15 end + def referral_is_from_local_authority_housing_register? + referral_register == 6 + end + + def referral_is_from_housing_register? + referral_register == 7 + end + + def referral_is_nominated_by_local_authority? + referral_is_from_local_authority_housing_register? && referral_noms == 1 + end + + def referral_is_directly_referred? + referral_is_from_housing_register? && referral_noms == 7 + end + private def reset_invalid_unresolved_log_fields!