From 26cd7686696b14e7f60564ea94c869d33a0296d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Meny?= Date: Wed, 20 Apr 2022 15:05:24 +0100 Subject: [PATCH] Removes the landlord field --- app/models/bulk_upload.rb | 1 - app/models/case_log.rb | 15 ------ .../validations/financial_validations.rb | 19 +++---- .../validations/household_validations.rb | 4 +- config/locales/en.yml | 40 +++++++------- .../20220411092231_update_case_logs_fields.rb | 2 +- db/schema.rb | 1 - spec/factories/case_log.rb | 4 -- spec/fixtures/exports/case_logs.xml | 1 - spec/models/case_log_spec.rb | 54 +++++++------------ .../validations/financial_validations_spec.rb | 36 +++++-------- .../validations/household_validations_spec.rb | 16 +++--- 12 files changed, 76 insertions(+), 117 deletions(-) diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index 007438f71..9b8c8a9ba 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -57,7 +57,6 @@ class BulkUpload def map_row(row) { lettype: row[1], - landlord: row[2], # reg_num_la_core_code: row[3], # managementgroup: row[4], # schemecode: row[5], diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 1dbcc54a6..83fd49ba2 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -334,16 +334,6 @@ class CaseLog < ApplicationRecord hb == 3 end - def this_landlord? - # 1: This landlord - landlord == 1 - end - - def other_landlord? - # 2: Another RP (HA/LA) - landlord == 2 - end - def local_housing_referral? # 3: PRP lettings only - Nominated by local housing authority referral == 3 @@ -485,11 +475,6 @@ private self["ecstat#{idx}"] = nil end end - if owning_organisation == managing_organisation - self.landlord = 1 - else - self.landlord = 2 - end end def process_postcode_changes! diff --git a/app/models/validations/financial_validations.rb b/app/models/validations/financial_validations.rb index 49dfe5357..a95cf25c1 100644 --- a/app/models/validations/financial_validations.rb +++ b/app/models/validations/financial_validations.rb @@ -84,46 +84,47 @@ private CHARGE_MAXIMUMS = { scharge: { - this_landlord: { + private_registered_provider: { general_needs: 55, supported_housing: 280, }, - other_landlord: { + local_authority: { general_needs: 45, supported_housing: 165, }, }, pscharge: { - this_landlord: { + private_registered_provider: { general_needs: 30, supported_housing: 200, }, - other_landlord: { + local_authority: { general_needs: 35, supported_housing: 75, }, }, supcharg: { - this_landlord: { + private_registered_provider: { general_needs: 40, supported_housing: 465, }, - other_landlord: { + local_authority: { general_needs: 60, supported_housing: 120, }, }, }.freeze - LANDLORD_VALUES = { 1 => :this_landlord, 2 => :other_landlord }.freeze + PROVIDER_TYPE = { 1 => :local_authority, 2 => :private_registered_provider }.freeze NEEDSTYPE_VALUES = { 2 => :supported_housing, 1 => :general_needs }.freeze def validate_charges(record) + provider_type = record.owning_organisation.provider_type_before_type_cast %i[scharge pscharge supcharg].each do |charge| - maximum = CHARGE_MAXIMUMS.dig(charge, LANDLORD_VALUES[record.landlord], NEEDSTYPE_VALUES[record.needstype]) + maximum = CHARGE_MAXIMUMS.dig(charge, PROVIDER_TYPE[provider_type], NEEDSTYPE_VALUES[record.needstype]) if maximum.present? && record[:period].present? && record[charge].present? && !weekly_value_in_range(record, charge, 0.0, maximum) - record.errors.add charge, I18n.t("validations.financial.rent.#{charge}.#{LANDLORD_VALUES[record.landlord]}.#{NEEDSTYPE_VALUES[record.needstype]}") + record.errors.add charge, I18n.t("validations.financial.rent.#{charge}.#{PROVIDER_TYPE[provider_type]}.#{NEEDSTYPE_VALUES[record.needstype]}") end end end diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index bcdbe01ba..d1ae4a7af 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -105,12 +105,12 @@ module Validations::HouseholdValidations record.errors.add :homeless, I18n.t("validations.household.homeless.other.internal_transfer") end - if record.is_internal_transfer? && record.this_landlord? && record.is_prevten_general_needs_tenancy? + if record.is_internal_transfer? && record.owning_organisation.provider_type == "PRP" && record.is_prevten_general_needs_tenancy? record.errors.add :referral, I18n.t("validations.household.referral.la_general_needs.internal_transfer") record.errors.add :prevten, I18n.t("validations.household.prevten.la_general_needs.internal_transfer") end - if record.other_landlord? && record.local_housing_referral? + if record.owning_organisation.provider_type == "LA" && record.local_housing_referral? record.errors.add :referral, I18n.t("validations.household.referral.prp.local_housing_referral") end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 530d1117f..5c619916c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -100,26 +100,26 @@ en: rent: less_than_double_shortfall: "Answer must be more than double the shortfall in basic rent" scharge: - this_landlord: - general_needs: "Service charge must be between £0 and £55 per week if the landlord is the same and it is a general needs letting" - supported_housing: "Service charge must be between £0 and £280 per week if the landlord is the same and it is a supported housing letting" - other_landlord: - general_needs: "Service charge must be between £0 and £45 per week if the landlord is another registered provider and it is a general needs letting" - supported_housing: "Service charge must be between £0 and £165 per week if the landlord is another registered provider and it is a supported housing letting" + private_registered_provider: + general_needs: "Service charge must be between £0 and £55 per week if the landlord is a private registered provider and it is a general needs letting" + supported_housing: "Service charge must be between £0 and £280 per week if the landlord is a private registered provider and it is a supported housing letting" + local_authority: + general_needs: "Service charge must be between £0 and £45 per week if the landlord is a local authority and it is a general needs letting" + supported_housing: "Service charge must be between £0 and £165 per week if the landlord is a local authority and it is a supported housing letting" pscharge: - this_landlord: - general_needs: "Personal service charge must be between £0 and £30 per week if the landlord is the same and it is a general needs letting" - supported_housing: "Personal service charge must be between £0 and £200 per week if the landlord is the same and it is a supported housing letting" - other_landlord: - general_needs: "Personal service charge must be between £0 and £35 per week if the landlord is another registered provider and it is a general needs letting" - supported_housing: "Personal service charge must be between £0 and £75 per week if the landlord is another registered provider and it is a supported housing letting" + private_registered_provider: + general_needs: "Personal service charge must be between £0 and £30 per week if the landlord is a private registered provider and it is a general needs letting" + supported_housing: "Personal service charge must be between £0 and £200 per week if the landlord is a private registered provider and it is a supported housing letting" + local_authority: + general_needs: "Personal service charge must be between £0 and £35 per week if the landlord is a local authority and it is a general needs letting" + supported_housing: "Personal service charge must be between £0 and £75 per week if the landlord is a local authority and it is a supported housing letting" supcharg: - this_landlord: - general_needs: "Support charge must be between £0 and £40 per week if the landlord is the same and it is a general needs letting" - supported_housing: "Support charge must be between £0 and £465 per week if the landlord is the same and it is a supported housing letting" - other_landlord: - general_needs: "Support charge must be between £0 and £60 per week if the landlord is another registered provider and it is a general needs letting" - supported_housing: "Support charge must be between £0 and £120 per week if the landlord is another registered provider and it is a supported housing letting" + private_registered_provider: + general_needs: "Support charge must be between £0 and £40 per week if the landlord is a private registered provider and it is a general needs letting" + supported_housing: "Support charge must be between £0 and £465 per week if the landlord is a private registered provider and it is a supported housing letting" + local_authority: + general_needs: "Support charge must be between £0 and £60 per week if the landlord is a local authority and it is a general needs letting" + supported_housing: "Support charge must be between £0 and £120 per week if the landlord is a local authority and it is a supported housing letting" brent: not_in_range: "Basic rent is outside of the expected range based on the lettings type, local authority and number of bedrooms" la: @@ -182,7 +182,7 @@ en: male_refuge: "Answer cannot be refuge as the lead tenant identifies as male" internal_transfer: "Answer cannot be %{prevten} as you already told us this tenancy is an internal transfer" la_general_needs: - internal_transfer: "Answer cannot be a fixed-term or lifetime local authority general needs tenancy as you already told us it's the same landlord on the tenancy agreement and it is an internal transfer" + internal_transfer: "Answer cannot be a fixed-term or lifetime local authority general needs tenancy as you already told us it's a private registered provider on the tenancy agreement and it is an internal transfer" referral: secure_tenancy: "Answer must be internal transfer as you already told us this is a secure tenancy" rsnvac_non_temp: "Answer cannot be this source of referral as you already told us this is a re-let to tenant who occupied the same property as temporary accommodation" @@ -194,7 +194,7 @@ en: la_general_needs: internal_transfer: "Answer cannot be internal transfer as you already told us it's the same landlord on the tenancy agreement and the household had either a fixed-term or lifetime local authority general needs tenancy immediately before this letting" prp: - local_housing_referral: "Answer cannot be 'nominated by a local housing authority' as you already told us it's another landlord on the tenancy agreement" + local_housing_referral: "Answer cannot be 'nominated by a local housing authority' as you already told us it is a local authority on the tenancy agreement" homeless: assessed: internal_transfer: "Answer cannot be assessed as homeless as you already told us this tenancy is an internal transfer" diff --git a/db/migrate/20220411092231_update_case_logs_fields.rb b/db/migrate/20220411092231_update_case_logs_fields.rb index 939c8110b..09b83e633 100644 --- a/db/migrate/20220411092231_update_case_logs_fields.rb +++ b/db/migrate/20220411092231_update_case_logs_fields.rb @@ -2,7 +2,7 @@ class UpdateCaseLogsFields < ActiveRecord::Migration[7.0] def change change_table :case_logs, bulk: true do |t| t.integer :old_form_id, :lar, :irproduct - t.remove :day, :month, :year, :vday, :vmonth, :vyear, :mrcday, :mrcmonth, :mrcyear, :other_hhmemb, :accessibility_requirements_prefer_not_to_say, type: :integer + t.remove :day, :month, :year, :vday, :vmonth, :vyear, :mrcday, :mrcmonth, :mrcyear, :other_hhmemb, :accessibility_requirements_prefer_not_to_say, :landlord, type: :integer t.remove :ppostc1, :ppostc2, :postcode, :postcod2, type: :string t.rename :intermediate_rent_product_name, :irproduct_other t.rename :lawaitlist, :waityear diff --git a/db/schema.rb b/db/schema.rb index 61ea39e55..c06c0e7e4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -86,7 +86,6 @@ ActiveRecord::Schema[7.0].define(version: 2022_04_11_092231) do t.integer "startertenancy" t.integer "tenancylength" t.integer "tenancy" - t.integer "landlord" t.string "ppostcode_full" t.integer "rsnvac" t.integer "unittype_gn" diff --git a/spec/factories/case_log.rb b/spec/factories/case_log.rb index 4ea55dd40..a97c13488 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/case_log.rb @@ -2,9 +2,6 @@ FactoryBot.define do factory :case_log do owning_organisation { FactoryBot.create(:organisation) } managing_organisation { FactoryBot.create(:organisation) } - trait :same_landlord do - managing_organisation { owning_organisation } - end trait :about_completed do renewal { 0 } needstype { 1 } @@ -58,7 +55,6 @@ FactoryBot.define do startertenancy { 0 } tenancylength { 5 } tenancy { 1 } - landlord { 1 } ppostcode_full { "SE2 6RT" } rsnvac { 6 } unittype_gn { 7 } diff --git a/spec/fixtures/exports/case_logs.xml b/spec/fixtures/exports/case_logs.xml index 560d362d6..df072b6cb 100644 --- a/spec/fixtures/exports/case_logs.xml +++ b/spec/fixtures/exports/case_logs.xml @@ -44,7 +44,6 @@ 0 5 1 - 2 SE26RT 6 7 diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 210b476b4..9cbd7b8b7 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -234,25 +234,10 @@ RSpec.describe CaseLog do expect(record_from_db["renttype"]).to eq(3) end - context "when the owning and managing organisations are different" do - it "correctly derives and saves landlord" do - record_from_db = ActiveRecord::Base.connection.execute("select landlord from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.landlord).to eq(2) - expect(record_from_db["landlord"]).to eq(2) - end - end - - context "when the owning and managing organisations are the same" do - it "correctly derives and saves landlord based on owning_organisation provider_type" do - record_from_db = ActiveRecord::Base.connection.execute("select landlord from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.landlord).to eq(1) - expect(record_from_db["landlord"]).to eq(1) - end - end - context "when deriving lettype" do context "when the owning organisation is a PRP" do before { case_log.owning_organisation.update!(provider_type: 2) } + context "when the rent type is intermediate rent and supported housing" do it "correctly derives and saves lettype" do case_log.update!(rent_type: 4, needstype: 2) @@ -332,17 +317,17 @@ RSpec.describe CaseLog do end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 70, period: 2) + case_log.update!(pscharge: 60, period: 2) record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(35.0) - expect(record_from_db["wpschrge"]).to eq(35.0) + expect(case_log.wpschrge).to eq(30.0) + expect(record_from_db["wpschrge"]).to eq(30.0) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 100, period: 2) + case_log.update!(supcharg: 80, period: 2) record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(50.0) - expect(record_from_db["wsupchrg"]).to eq(50.0) + expect(case_log.wsupchrg).to eq(40.0) + expect(record_from_db["wsupchrg"]).to eq(40.0) end it "correctly derives and saves weekly total charge" do @@ -382,18 +367,18 @@ RSpec.describe CaseLog do end it "correctly derives floats" do - case_log.update!(supcharg: 60.12, pscharge: 60.13, scharge: 60.98, brent: 60.97, period: 2) + case_log.update!(supcharg: 60.12, pscharge: 50.13, scharge: 60.98, brent: 60.97, period: 2) record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] expect(case_log.wsupchrg).to eq(30.06) - expect(case_log.wpschrge).to eq(30.06) + expect(case_log.wpschrge).to eq(25.06) expect(case_log.wscharge).to eq(30.49) expect(case_log.wrent).to eq(30.49) - expect(case_log.wtcharge).to eq(121.1) + expect(case_log.wtcharge).to eq(116.1) expect(record_from_db["wsupchrg"]).to eq(30.06) - expect(record_from_db["wpschrge"]).to eq(30.06) + expect(record_from_db["wpschrge"]).to eq(25.06) expect(record_from_db["wscharge"]).to eq(30.49) expect(record_from_db["wrent"]).to eq(30.49) - expect(record_from_db["wtcharge"]).to eq(121.1) + expect(record_from_db["wtcharge"]).to eq(116.1) end end @@ -1030,24 +1015,24 @@ RSpec.describe CaseLog do end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 1) + case_log.update!(supcharg: 30.12, pscharge: 25.13, scharge: 30.98, brent: 100.97, period: 1) record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] expect(case_log.wsupchrg).to eq(30.12) - expect(case_log.wpschrge).to eq(30.13) + expect(case_log.wpschrge).to eq(25.13) expect(case_log.wscharge).to eq(30.98) expect(case_log.wrent).to eq(100.97) - expect(case_log.wtcharge).to eq(192.2) + expect(case_log.wtcharge).to eq(187.2) expect(record_from_db["wsupchrg"]).to eq(30.12) - expect(record_from_db["wpschrge"]).to eq(30.13) + expect(record_from_db["wpschrge"]).to eq(25.13) expect(record_from_db["wscharge"]).to eq(30.98) expect(record_from_db["wrent"]).to eq(100.97) - expect(record_from_db["wtcharge"]).to eq(192.2) + expect(record_from_db["wtcharge"]).to eq(187.2) end end end - context "when the owning organisation is an LA" do - let(:organisation) { FactoryBot.create(:organisation, provider_type: "LA") } + context "when the owning organisation is a LA" do + before { case_log.owning_organisation.update!(provider_type: "LA") } context "when the rent type is intermediate rent and supported housing" do it "correctly derives and saves lettype" do @@ -1405,6 +1390,7 @@ RSpec.describe CaseLog do end it "correctly derives and saves prevten" do + case_log.managing_organisation.update!({ provider_type: "PRP" }) case_log.update!({ needstype: 1 }) record_from_db = ActiveRecord::Base.connection.execute("select prevten from case_logs where id=#{case_log.id}").to_a[0] diff --git a/spec/models/validations/financial_validations_spec.rb b/spec/models/validations/financial_validations_spec.rb index 56ba77479..68b5f4629 100644 --- a/spec/models/validations/financial_validations_spec.rb +++ b/spec/models/validations/financial_validations_spec.rb @@ -201,12 +201,11 @@ RSpec.describe Validations::FinancialValidations do end end - context "when the landlord is this landlord" do + context "when the owning organisation is a private registered provider" do + before { record.owning_organisation.provider_type = 2 } + context "when needstype is general needs" do - before do - record.needstype = 1 - record.landlord = 1 - end + before { record.needstype = 1 } [{ period: { label: "weekly", value: 1 }, @@ -249,7 +248,7 @@ RSpec.describe Validations::FinancialValidations do record[test_case[:charge][:field]] = test_case[:charge][:value] financial_validator.validate_rent_amount(record) expect(record.errors[test_case[:charge][:field]]) - .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.this_landlord.general_needs")) + .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.private_registered_provider.general_needs")) end end @@ -300,10 +299,7 @@ RSpec.describe Validations::FinancialValidations do end context "when needstype is supported housing" do - before do - record.needstype = 2 - record.landlord = 1 - end + before { record.needstype = 2 } [{ period: { label: "weekly", value: 1 }, @@ -346,7 +342,7 @@ RSpec.describe Validations::FinancialValidations do record[test_case[:charge][:field]] = test_case[:charge][:value] financial_validator.validate_rent_amount(record) expect(record.errors[test_case[:charge][:field]]) - .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.this_landlord.supported_housing")) + .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.private_registered_provider.supported_housing")) end end @@ -397,12 +393,11 @@ RSpec.describe Validations::FinancialValidations do end end - context "when the landlord is another RP" do + context "when the owning organisation is a local authority" do + before { record.owning_organisation.provider_type = 1 } + context "when needstype is general needs" do - before do - record.needstype = 1 - record.landlord = 2 - end + before { record.needstype = 1 } [{ period: { label: "weekly", value: 1 }, @@ -445,7 +440,7 @@ RSpec.describe Validations::FinancialValidations do record[test_case[:charge][:field]] = test_case[:charge][:value] financial_validator.validate_rent_amount(record) expect(record.errors[test_case[:charge][:field]]) - .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.other_landlord.general_needs")) + .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.local_authority.general_needs")) end end @@ -496,10 +491,7 @@ RSpec.describe Validations::FinancialValidations do end context "when needstype is supported housing" do - before do - record.needstype = 2 - record.landlord = 2 - end + before { record.needstype = 2 } [{ period: { label: "weekly", value: 1 }, @@ -542,7 +534,7 @@ RSpec.describe Validations::FinancialValidations do record[test_case[:charge][:field]] = test_case[:charge][:value] financial_validator.validate_rent_amount(record) expect(record.errors[test_case[:charge][:field]]) - .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.other_landlord.supported_housing")) + .to include(match I18n.t("validations.financial.rent.#{test_case[:charge][:field]}.local_authority.supported_housing")) end end diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 992ccf59f..cc3b697f0 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::HouseholdValidations do subject(:household_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::HouseholdValidations } } - let(:record) { FactoryBot.create(:case_log, :same_landlord) } + let(:record) { FactoryBot.create(:case_log) } describe "reasonable preference validations" do context "when reasonable preference is homeless" do @@ -197,8 +197,8 @@ RSpec.describe Validations::HouseholdValidations do .to be_empty end - it "cannot have `this landlord` as landlord and Housing situation before this letting cannot be LA general needs" do - record.landlord = 1 + 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 = 1 household_validator.validate_referral(record) @@ -217,17 +217,17 @@ RSpec.describe Validations::HouseholdValidations do end context "when referral is nominated by a local housing authority" do - it "cannot have `other landlord`" do - record.landlord = 2 + it "cannot have a local authority" do + record.owning_organisation.provider_type = "LA" record.referral = 3 household_validator.validate_referral(record) expect(record.errors["referral"]) .to include(match(I18n.t("validations.household.referral.prp.local_housing_referral"))) end - it "can have `this landlord`" do + it "can have a private registered provider" do + record.owning_organisation.provider_type = "PRP" record.referral = 3 - record.landlord = 1 household_validator.validate_referral(record) expect(record.errors["referral"]) .to be_empty @@ -654,6 +654,7 @@ RSpec.describe Validations::HouseholdValidations do end it "can be non internal transfer" do + record.owning_organisation.provider_type = "PRP" record.homeless = 0 record.referral = 3 household_validator.validate_referral(record) @@ -674,6 +675,7 @@ RSpec.describe Validations::HouseholdValidations do end it "can be non internal transfer" do + record.owning_organisation.provider_type = "PRP" record.referral = 3 record.homeless = 1 household_validator.validate_referral(record)