diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index f584b6238e..901a97180f 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -141,6 +141,10 @@ def set_derived_fields! self.is_la_inferred = false end + if referral_type == 7 || referral_type == 16 + self.referral = referral_type + end + reset_address_fields! if is_supported_housing? set_checkbox_values! @@ -208,6 +212,9 @@ def clear_inapplicable_derived_values! if form.start_year_2024_or_later? && (unittype_gn_changed? && unittype_gn_was == 2) self.beds = nil end + if referral_type_changed? && (referral_type_was == 7 || referral_type_was == 16) + self.referral = nil + end end def get_totelder diff --git a/app/models/form/lettings/pages/referral_direct.rb b/app/models/form/lettings/pages/referral_direct.rb new file mode 100644 index 0000000000..176842aa87 --- /dev/null +++ b/app/models/form/lettings/pages/referral_direct.rb @@ -0,0 +1,11 @@ +class Form::Lettings::Pages::ReferralDirect < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_direct" + @depends_on = [{ "referral_type" => 101 }] + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralDirect.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/pages/referral_general_needs.rb b/app/models/form/lettings/pages/referral_general_needs.rb new file mode 100644 index 0000000000..2778fbdbe1 --- /dev/null +++ b/app/models/form/lettings/pages/referral_general_needs.rb @@ -0,0 +1,12 @@ +class Form::Lettings::Pages::ReferralGeneralNeeds < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_prp" + @copy_key = "lettings.household_situation.referral.general_needs.prp" + @depends_on = [{ "owning_organisation_provider_type" => "PRP", "needstype" => 1, "renewal" => 0 }] + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralGeneralNeeds.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/pages/referral_hsc.rb b/app/models/form/lettings/pages/referral_hsc.rb new file mode 100644 index 0000000000..a50ae4def9 --- /dev/null +++ b/app/models/form/lettings/pages/referral_hsc.rb @@ -0,0 +1,11 @@ +class Form::Lettings::Pages::ReferralHsc < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_hsc" + @depends_on = [{ "referral_type" => 104 }] + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralHsc.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/pages/referral_justice.rb b/app/models/form/lettings/pages/referral_justice.rb new file mode 100644 index 0000000000..1217424384 --- /dev/null +++ b/app/models/form/lettings/pages/referral_justice.rb @@ -0,0 +1,11 @@ +class Form::Lettings::Pages::ReferralJustice < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_justice" + @depends_on = [{ "referral_type" => 105 }] + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralJustice.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/pages/referral_la.rb b/app/models/form/lettings/pages/referral_la.rb new file mode 100644 index 0000000000..b7ad89905d --- /dev/null +++ b/app/models/form/lettings/pages/referral_la.rb @@ -0,0 +1,11 @@ +class Form::Lettings::Pages::ReferralLa < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral_la" + @depends_on = [{ "referral_type" => 102 }] + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralLa.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/pages/referral_prp.rb b/app/models/form/lettings/pages/referral_prp.rb index baeb017843..b962f2bf63 100644 --- a/app/models/form/lettings/pages/referral_prp.rb +++ b/app/models/form/lettings/pages/referral_prp.rb @@ -2,8 +2,7 @@ class Form::Lettings::Pages::ReferralPrp < ::Form::Page def initialize(id, hsh, subsection) super @id = "referral_prp" - @copy_key = "lettings.household_situation.referral.general_needs.prp" - @depends_on = [{ "owning_organisation_provider_type" => "PRP", "needstype" => 1, "renewal" => 0 }] + @depends_on = [{ "referral_type" => 103 }] end def questions diff --git a/app/models/form/lettings/pages/referral_type.rb b/app/models/form/lettings/pages/referral_type.rb new file mode 100644 index 0000000000..0836d0fb7e --- /dev/null +++ b/app/models/form/lettings/pages/referral_type.rb @@ -0,0 +1,10 @@ +class Form::Lettings::Pages::ReferralType < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "referral" + end + + def questions + @questions ||= [Form::Lettings::Questions::ReferralType.new(nil, nil, self)] + end +end diff --git a/app/models/form/lettings/questions/referral_direct.rb b/app/models/form/lettings/questions/referral_direct.rb new file mode 100644 index 0000000000..ddadcc8b79 --- /dev/null +++ b/app/models/form/lettings/questions/referral_direct.rb @@ -0,0 +1,26 @@ +class Form::Lettings::Questions::ReferralDirect < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral" + @copy_key = "lettings.household_situation.referral.direct" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + { + "20" => { + "value" => "Homeless households owed a duty and not on a housing register or waiting list", + }, + "2" => { + "value" => "Tenant applied directly for an available property", + }, + "8" => { + "value" => "Relocated through official housing mobility scheme", + }, + }.freeze + end + + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_general_needs.rb b/app/models/form/lettings/questions/referral_general_needs.rb new file mode 100644 index 0000000000..b73a9438de --- /dev/null +++ b/app/models/form/lettings/questions/referral_general_needs.rb @@ -0,0 +1,105 @@ +class Form::Lettings::Questions::ReferralGeneralNeeds < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral" + @copy_key = "lettings.household_situation.referral.general_needs.prp" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + if form.start_year_2024_or_later? + { + "1" => { + "value" => "Internal transfer", + "hint" => "Where the tenant has moved to another social property owned by the same landlord.", + }, + "2" => { + "value" => "Tenant applied directly (no referral or nomination)", + }, + "3" => { + "value" => "Nominated by a local housing authority", + }, + "8" => { + "value" => "Re-located through official housing mobility scheme", + }, + "10" => { + "value" => "Other social landlord", + }, + "9" => { + "value" => "Community learning disability team", + }, + "14" => { + "value" => "Community mental health team", + }, + "15" => { + "value" => "Health service", + }, + "18" => { + "value" => "Police, probation, prison or youth offending team – tenant had custodial sentence", + }, + "19" => { + "value" => "Police, probation, prison or youth offending team – no custodial sentence", + }, + "7" => { + "value" => "Voluntary agency", + }, + "17" => { + "value" => "Children’s Social Care", + }, + "16" => { + "value" => "Other", + }, + }.freeze + else + { + "1" => { + "value" => "Internal transfer", + "hint" => "Where the tenant has moved to another social property owned by the same landlord.", + }, + "2" => { + "value" => "Tenant applied directly (no referral or nomination)", + }, + "3" => { + "value" => "Nominated by a local housing authority", + }, + "4" => { + "value" => "Referred by local authority housing department", + }, + "8" => { + "value" => "Re-located through official housing mobility scheme", + }, + "10" => { + "value" => "Other social landlord", + }, + "9" => { + "value" => "Community learning disability team", + }, + "14" => { + "value" => "Community mental health team", + }, + "15" => { + "value" => "Health service", + }, + "12" => { + "value" => "Police, probation or prison", + }, + "7" => { + "value" => "Voluntary agency", + }, + "13" => { + "value" => "Youth offending team", + }, + "17" => { + "value" => "Children’s Social Care", + }, + "16" => { + "value" => "Other", + }, + }.freeze + end + end + + QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_hsc.rb b/app/models/form/lettings/questions/referral_hsc.rb new file mode 100644 index 0000000000..a5b9c32f05 --- /dev/null +++ b/app/models/form/lettings/questions/referral_hsc.rb @@ -0,0 +1,32 @@ +class Form::Lettings::Questions::ReferralHsc < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral" + @copy_key = "lettings.household_situation.referral.hsc" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + { + "15" => { + "value" => "Health service", + }, + "9" => { + "value" => "Community learning disability team", + }, + "14" => { + "value" => "Community mental health team", + }, + "24" => { + "value" => "Adult social services", + }, + "17" => { + "value" => "Children's social care", + }, + }.freeze + end + + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_justice.rb b/app/models/form/lettings/questions/referral_justice.rb new file mode 100644 index 0000000000..0e02e0c427 --- /dev/null +++ b/app/models/form/lettings/questions/referral_justice.rb @@ -0,0 +1,23 @@ +class Form::Lettings::Questions::ReferralJustice < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral" + @copy_key = "lettings.household_situation.referral.justice" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + { + "18" => { + "value" => "With a custodial sentence", + }, + "19" => { + "value" => "No custodial sentence", + }, + }.freeze + end + + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_la.rb b/app/models/form/lettings/questions/referral_la.rb new file mode 100644 index 0000000000..7a654df888 --- /dev/null +++ b/app/models/form/lettings/questions/referral_la.rb @@ -0,0 +1,29 @@ +class Form::Lettings::Questions::ReferralLa < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral" + @copy_key = "lettings.household_situation.referral.la" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + { + "21" => { + "value" => "Local authority lettings", + }, + "3" => { + "value" => "PRP lettings nominated by a local authority", + }, + "4" => { + "value" => "PRP support lettings referred by a local authority", + }, + "22" => { + "value" => "Other", + }, + }.freeze + end + + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze +end diff --git a/app/models/form/lettings/questions/referral_prp.rb b/app/models/form/lettings/questions/referral_prp.rb index 96da2cba38..44799bb8c0 100644 --- a/app/models/form/lettings/questions/referral_prp.rb +++ b/app/models/form/lettings/questions/referral_prp.rb @@ -2,104 +2,25 @@ class Form::Lettings::Questions::ReferralPrp < ::Form::Question def initialize(id, hsh, page) super @id = "referral" - @copy_key = "lettings.household_situation.referral.general_needs.prp" + @copy_key = "lettings.household_situation.referral.prp" @type = "radio" @check_answers_card_number = 0 @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end def answer_options - if form.start_year_2024_or_later? - { - "1" => { - "value" => "Internal transfer", - "hint" => "Where the tenant has moved to another social property owned by the same landlord.", - }, - "2" => { - "value" => "Tenant applied directly (no referral or nomination)", - }, - "3" => { - "value" => "Nominated by a local housing authority", - }, - "8" => { - "value" => "Re-located through official housing mobility scheme", - }, - "10" => { - "value" => "Other social landlord", - }, - "9" => { - "value" => "Community learning disability team", - }, - "14" => { - "value" => "Community mental health team", - }, - "15" => { - "value" => "Health service", - }, - "18" => { - "value" => "Police, probation, prison or youth offending team – tenant had custodial sentence", - }, - "19" => { - "value" => "Police, probation, prison or youth offending team – no custodial sentence", - }, - "7" => { - "value" => "Voluntary agency", - }, - "17" => { - "value" => "Children’s Social Care", - }, - "16" => { - "value" => "Other", - }, - }.freeze - else - { - "1" => { - "value" => "Internal transfer", - "hint" => "Where the tenant has moved to another social property owned by the same landlord.", - }, - "2" => { - "value" => "Tenant applied directly (no referral or nomination)", - }, - "3" => { - "value" => "Nominated by a local housing authority", - }, - "4" => { - "value" => "Referred by local authority housing department", - }, - "8" => { - "value" => "Re-located through official housing mobility scheme", - }, - "10" => { - "value" => "Other social landlord", - }, - "9" => { - "value" => "Community learning disability team", - }, - "14" => { - "value" => "Community mental health team", - }, - "15" => { - "value" => "Health service", - }, - "12" => { - "value" => "Police, probation or prison", - }, - "7" => { - "value" => "Voluntary agency", - }, - "13" => { - "value" => "Youth offending team", - }, - "17" => { - "value" => "Children’s Social Care", - }, - "16" => { - "value" => "Other", - }, - }.freeze - end + { + "1" => { + "value" => "Internal transfer from another property with the same landlord", + }, + "10" => { + "value" => "A different PRP landlord", + }, + "23" => { + "value" => "Other", + }, + }.freeze end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 85, 2024 => 84 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze end diff --git a/app/models/form/lettings/questions/referral_type.rb b/app/models/form/lettings/questions/referral_type.rb new file mode 100644 index 0000000000..fdedc88ebf --- /dev/null +++ b/app/models/form/lettings/questions/referral_type.rb @@ -0,0 +1,38 @@ +class Form::Lettings::Questions::ReferralType < ::Form::Question + def initialize(id, hsh, page) + super + @id = "referral_type" + @copy_key = "lettings.household_situation.referral.type" + @type = "radio" + @check_answers_card_number = 0 + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + def answer_options + { + "101" => { + "value" => "Direct", + }, + "102" => { + "value" => "From a local authority housing register or waiting list", + }, + "103" => { + "value" => "From a PRP-only housing register or waiting list (no local authority involvement)", + }, + "104" => { + "value" => "Health and social care services", + }, + "105" => { + "value" => "Police, probation, prison or youth offending team", + }, + "7" => { + "value" => "Voluntary agency", + }, + "16" => { + "value" => "Other", + }, + }.freeze + end + + QUESTION_NUMBER_FROM_YEAR = { 2025 => 84 }.freeze +end diff --git a/app/models/form/lettings/subsections/household_situation.rb b/app/models/form/lettings/subsections/household_situation.rb index dc3fd608be..bb49c876b9 100644 --- a/app/models/form/lettings/subsections/household_situation.rb +++ b/app/models/form/lettings/subsections/household_situation.rb @@ -21,11 +21,28 @@ def pages Form::Lettings::Pages::ReasonablePreference.new("reasonable_preference", nil, self), Form::Lettings::Pages::ReasonablePreferenceReason.new(nil, nil, self), Form::Lettings::Pages::AllocationSystem.new("allocation_system", nil, self), - Form::Lettings::Pages::Referral.new(nil, nil, self), - Form::Lettings::Pages::ReferralPrp.new(nil, nil, self), - Form::Lettings::Pages::ReferralSupportedHousing.new(nil, nil, self), - Form::Lettings::Pages::ReferralSupportedHousingPrp.new(nil, nil, self), + referral_questions, Form::Lettings::Pages::ReferralValueCheck.new(nil, nil, self), - ].compact + ].flatten.compact + end + + def referral_questions + if form.start_year_2025_or_later? + [ + Form::Lettings::Pages::ReferralType.new(nil, nil, self), + Form::Lettings::Pages::ReferralDirect.new(nil, nil, self), + Form::Lettings::Pages::ReferralLa.new(nil, nil, self), + Form::Lettings::Pages::ReferralPrp.new(nil, nil, self), + Form::Lettings::Pages::ReferralHsc.new(nil, nil, self), + Form::Lettings::Pages::ReferralJustice.new(nil, nil, self), + ] + else + [ + Form::Lettings::Pages::Referral.new(nil, nil, self), + Form::Lettings::Pages::ReferralGeneralNeeds.new(nil, nil, self), + Form::Lettings::Pages::ReferralSupportedHousing.new(nil, nil, self), + Form::Lettings::Pages::ReferralSupportedHousingPrp.new(nil, nil, self), + ] + end end end diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index 63da6d6288..723ab30b64 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -32,6 +32,7 @@ def validate_reason_for_leaving_last_settled_home(record) if record.is_reason_permanently_decanted? && record.referral.present? && !record.is_internal_transfer? record.errors.add :referral, I18n.t("validations.lettings.household.referral.leaving_last_settled_home.reason_permanently_decanted") + record.errors.add :referral_type, I18n.t("validations.lettings.household.referral.leaving_last_settled_home.reason_permanently_decanted") record.errors.add :reason, I18n.t("validations.lettings.household.reason.leaving_last_settled_home.not_internal_transfer") end @@ -171,6 +172,7 @@ def validate_previous_housing_situation(record) label = record.form.get_question("prevten", record).present? ? record.form.get_question("prevten", record).label_from_value(record.prevten) : "" record.errors.add :prevten, :internal_transfer_non_social_housing, message: I18n.t("validations.lettings.household.prevten.internal_transfer", prevten: label) record.errors.add :referral, :internal_transfer_non_social_housing, message: I18n.t("validations.lettings.household.referral.prevten_invalid", prevten: label) + record.errors.add :referral_type, :internal_transfer_non_social_housing, message: I18n.t("validations.lettings.household.referral.prevten_invalid", prevten: label) end end @@ -180,6 +182,7 @@ def validate_referral(record) if record.is_internal_transfer? && record.owning_organisation.provider_type == "PRP" && record.is_prevten_la_general_needs? record.errors.add :prevten, :internal_transfer_fixed_or_lifetime, message: I18n.t("validations.lettings.household.prevten.la_general_needs.internal_transfer") record.errors.add :referral, :internal_transfer_fixed_or_lifetime, message: I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer") + record.errors.add :referral_type, :internal_transfer_fixed_or_lifetime, message: I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer") end end diff --git a/app/models/validations/property_validations.rb b/app/models/validations/property_validations.rb index 1cf710857d..364cfe7327 100644 --- a/app/models/validations/property_validations.rb +++ b/app/models/validations/property_validations.rb @@ -11,6 +11,7 @@ def validate_rsnvac(record) if record.is_relet_to_temp_tenant? && REFERRAL_INVALID_TMP.include?(record.referral) record.errors.add :rsnvac, I18n.t("validations.lettings.property.rsnvac.referral_invalid") record.errors.add :referral, :referral_invalid, message: I18n.t("validations.lettings.property.referral.rsnvac_non_temp") + record.errors.add :referral_type, :referral_invalid, message: I18n.t("validations.lettings.property.referral.rsnvac_non_temp") end if record.renewal.present? && record.renewal.zero? && record.rsnvac == 14 diff --git a/config/locales/forms/2025/lettings/household_situation.en.yml b/config/locales/forms/2025/lettings/household_situation.en.yml index fbbdcf6573..22c7052eb9 100644 --- a/config/locales/forms/2025/lettings/household_situation.en.yml +++ b/config/locales/forms/2025/lettings/household_situation.en.yml @@ -112,29 +112,39 @@ en: question_text: "How was this letting allocated?" referral: - supported_housing: - prp: - page_header: "" - check_answer_label: "Source of referral for letting" - check_answer_prompt: "" - hint_text: "" - question_text: "What was the source of referral for this letting?" - la: - page_header: "" - check_answer_label: "Source of referral for letting" - check_answer_prompt: "" - hint_text: "You told us that you are a local authority. We have removed some options because of this." - question_text: "What was the source of referral for this letting?" - general_needs: - prp: - page_header: "" - check_answer_label: "Source of referral for letting" - check_answer_prompt: "" - hint_text: "You told us that the needs type is general needs. We have removed some options because of this." - question_text: "What was the source of referral for this letting?" - la: - page_header: "" - check_answer_label: "Source of referral for letting" - check_answer_prompt: "" - hint_text: "You told us that you are a local authority and that the needs type is general needs. We have removed some options because of this." - question_text: "What was the source of referral for this letting?" + type: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" + direct: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" + la: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" + prp: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" + hsc: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" + justice: + page_header: "" + check_answer_label: "Source of referral for letting" + check_answer_prompt: "Select source of referral" + hint_text: "" + question_text: "What was the source of referral for this letting?" diff --git a/db/migrate/20250225180643_add_referral_type_to_lettings_logs.rb b/db/migrate/20250225180643_add_referral_type_to_lettings_logs.rb new file mode 100644 index 0000000000..4df8fe9dc2 --- /dev/null +++ b/db/migrate/20250225180643_add_referral_type_to_lettings_logs.rb @@ -0,0 +1,5 @@ +class AddReferralTypeToLettingsLogs < ActiveRecord::Migration[7.2] + def change + add_column :lettings_logs, :referral_type, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 894bb16389..dfacf3d982 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do +ActiveRecord::Schema[7.2].define(version: 2025_02_25_180643) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -373,6 +373,7 @@ t.integer "partner_under_16_value_check" t.integer "multiple_partners_value_check" t.bigint "created_by_id" + t.integer "referral_type" t.index ["assigned_to_id"], name: "index_lettings_logs_on_assigned_to_id" t.index ["bulk_upload_id"], name: "index_lettings_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id" diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index c8c51ecf37..2a9abdb255 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -159,6 +159,7 @@ is_carehome { 0 } declaration { 1 } first_time_property_let_as_social_housing { 0 } + referral_type { 101 } referral { 2 } uprn_known { 0 } joint { 3 } diff --git a/spec/models/form/lettings/questions/referral_prp_spec.rb b/spec/models/form/lettings/questions/referral_general_needs_spec.rb similarity index 97% rename from spec/models/form/lettings/questions/referral_prp_spec.rb rename to spec/models/form/lettings/questions/referral_general_needs_spec.rb index a10b6d3830..7b36b5c4ae 100644 --- a/spec/models/form/lettings/questions/referral_prp_spec.rb +++ b/spec/models/form/lettings/questions/referral_general_needs_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe Form::Lettings::Questions::ReferralPrp, type: :model do +RSpec.describe Form::Lettings::Questions::ReferralGeneralNeeds, type: :model do subject(:question) { described_class.new(question_id, question_definition, page) } let(:question_id) { nil } diff --git a/spec/models/form/lettings/subsections/household_situation_spec.rb b/spec/models/form/lettings/subsections/household_situation_spec.rb index d672b3ccc8..f4171c7919 100644 --- a/spec/models/form/lettings/subsections/household_situation_spec.rb +++ b/spec/models/form/lettings/subsections/household_situation_spec.rb @@ -19,6 +19,7 @@ context "with form year before 2024" do before do allow(form).to receive(:start_year_2024_or_later?).and_return(false) + allow(form).to receive(:start_year_2025_or_later?).and_return(false) end it "has correct pages" do @@ -46,9 +47,10 @@ end end - context "with form year >= 2024" do + context "with form year is 2024" do before do allow(form).to receive(:start_year_2024_or_later?).and_return(true) + allow(form).to receive(:start_year_2025_or_later?).and_return(false) end it "has correct pages" do @@ -77,6 +79,40 @@ end end + context "with form year is 2025" do + before do + allow(form).to receive(:start_year_2024_or_later?).and_return(true) + allow(form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct pages" do + expect(household_situation.pages.map(&:id)).to eq( + %w[ + time_lived_in_local_authority + time_on_waiting_list + reason_for_leaving_last_settled_home + reason_for_leaving_last_settled_home_renewal + reasonother_value_check + previous_housing_situation + previous_housing_situation_renewal + homelessness + previous_postcode + previous_local_authority + reasonable_preference + reasonable_preference_reason + allocation_system + referral + referral_direct + referral_la + referral_prp + referral_hsc + referral_justice + referral_value_check + ], + ) + end + end + it "has the correct id" do expect(household_situation.id).to eq("household_situation") end diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index b6af037362..2788fc7ea9 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -129,33 +129,42 @@ context "when referral is not internal transfer" do it "cannot be permanently decanted from another property owned by this landlord" do record.reason = 1 + record.referral_type = 101 record.referral = 2 household_validator.validate_reason_for_leaving_last_settled_home(record) expect(record.errors["reason"]) .to include(match(I18n.t("validations.lettings.household.reason.leaving_last_settled_home.not_internal_transfer"))) expect(record.errors["referral"]) .to include(match(I18n.t("validations.lettings.household.referral.leaving_last_settled_home.reason_permanently_decanted"))) + expect(record.errors["referral_type"]) + .to include(match(I18n.t("validations.lettings.household.referral.leaving_last_settled_home.reason_permanently_decanted"))) end end context "when referral is internal transfer" do it "can be permanently decanted from another property owned by this landlord" do record.reason = 1 + record.referral_type = 103 record.referral = 1 household_validator.validate_reason_for_leaving_last_settled_home(record) expect(record.errors["reason"]) .to be_empty expect(record.errors["referral"]) .to be_empty + expect(record.errors["referral_type"]) + .to be_empty end it "cannot have a PRP as landlord and Housing situation before this letting cannot be LA general needs" do record.owning_organisation.provider_type = "PRP" record.prevten = 30 + record.referral_type = 103 record.referral = 1 household_validator.validate_referral(record) expect(record.errors["referral"]) .to include(match(I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer"))) + expect(record.errors["referral_type"]) + .to include(match(I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer"))) expect(record.errors["prevten"]) .to include(match(I18n.t("validations.lettings.household.prevten.la_general_needs.internal_transfer"))) @@ -163,6 +172,8 @@ household_validator.validate_referral(record) expect(record.errors["referral"]) .to include(match(I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer"))) + expect(record.errors["referral_type"]) + .to include(match(I18n.t("validations.lettings.household.referral.la_general_needs.internal_transfer"))) expect(record.errors["prevten"]) .to include(match(I18n.t("validations.lettings.household.prevten.la_general_needs.internal_transfer"))) end @@ -603,37 +614,45 @@ context "when homelessness is assessed" do it "can be internal transfer" do record.homeless = 11 + record.referral_type = 103 record.referral = 1 household_validator.validate_referral(record) expect(record.errors["referral"]).to be_empty + expect(record.errors["referral_type"]).to be_empty expect(record.errors["homeless"]).to be_empty end it "can be non internal transfer" do record.owning_organisation.provider_type = "PRP" record.homeless = 0 + record.referral_type = 102 record.referral = 3 household_validator.validate_referral(record) expect(record.errors["referral"]).to be_empty + expect(record.errors["referral_type"]).to be_empty expect(record.errors["homeless"]).to be_empty end end context "when homelessness is other" do it "cannot be internal transfer" do + record.referral_type = 103 record.referral = 1 record.homeless = 7 household_validator.validate_referral(record) expect(record.errors["referral"]).to be_empty + expect(record.errors["referral_type"]).to be_empty expect(record.errors["homeless"]).to be_empty end it "can be non internal transfer" do record.owning_organisation.provider_type = "PRP" + record.referral_type = 102 record.referral = 3 record.homeless = 1 household_validator.validate_referral(record) expect(record.errors["referral"]).to be_empty + expect(record.errors["referral_type"]).to be_empty expect(record.errors["homeless"]).to be_empty end end @@ -715,6 +734,7 @@ context "when the referral is internal transfer" do it "prevten can be 9" do + record.referral_type = 103 record.referral = 1 record.prevten = 9 household_validator.validate_previous_housing_situation(record) @@ -722,6 +742,8 @@ .to be_empty expect(record.errors["referral"]) .to be_empty + expect(record.errors["referral_type"]) + .to be_empty end [ @@ -740,6 +762,7 @@ { code: 29, label: "Prison or approved probation hostel" }, ].each do |prevten| it "prevten cannot be #{prevten[:code]}" do + record.referral_type = 103 record.referral = 1 record.prevten = prevten[:code] household_validator.validate_previous_housing_situation(record) @@ -748,6 +771,8 @@ .to include(match I18n.t("validations.lettings.household.prevten.internal_transfer", prevten: label)) expect(record.errors["referral"]) .to include(match I18n.t("validations.lettings.household.referral.prevten_invalid", prevten: "")) + expect(record.errors["referral_type"]) + .to include(match I18n.t("validations.lettings.household.referral.prevten_invalid", prevten: "")) end end end diff --git a/spec/models/validations/property_validations_spec.rb b/spec/models/validations/property_validations_spec.rb index 142cb24910..3b6123055b 100644 --- a/spec/models/validations/property_validations_spec.rb +++ b/spec/models/validations/property_validations_spec.rb @@ -168,6 +168,7 @@ it "expects that the letting source can be a referral" do log.prevten = 0 + log.referral_type = 101 log.referral = 2 property_validator.validate_rsnvac(log) expect(log.errors["rsnvac"]).to be_empty