From 32dbabbf8be42ec08ba2a728397a3afdfc93f9bb Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 9 Nov 2021 09:35:12 +0000 Subject: [PATCH] add majorrepairs,propcode and infer postcode --- Gemfile | 1 + Gemfile.lock | 2 ++ app/controllers/case_logs_controller.rb | 17 ++++++++++++++++- config/forms/2021_2022.json | 4 ++-- .../20211108134601_further_core_migrations.rb | 8 ++++++++ db/schema.rb | 7 ++++--- spec/controllers/case_logs_controller_spec.rb | 17 +++++++++++++++++ spec/factories/case_log.rb | 4 ++-- spec/features/case_log_spec.rb | 4 ++-- spec/fixtures/complete_case_log.json | 12 ++++++++---- spec/fixtures/forms/test_form.json | 4 ++-- 11 files changed, 64 insertions(+), 16 deletions(-) diff --git a/Gemfile b/Gemfile index fa743fa4a..8308b7274 100644 --- a/Gemfile +++ b/Gemfile @@ -29,6 +29,7 @@ gem "discard" gem "activeadmin" # Admin charts gem "chartkick" +gem "uk_postcode" group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console diff --git a/Gemfile.lock b/Gemfile.lock index fa3d1a27d..c7ce5acfe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -358,6 +358,7 @@ GEM rails (>= 6.0.0) tzinfo (2.0.4) concurrent-ruby (~> 1.0) + uk_postcode (2.1.6) unicode-display_width (2.1.0) view_component (2.39.0) activesupport (>= 5.0.0, < 8.0) @@ -417,6 +418,7 @@ DEPENDENCIES selenium-webdriver simplecov tzinfo-data + uk_postcode web-console (>= 4.1.0) webpacker (~> 5.0) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index cc2a4b484..3d865536a 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -58,7 +58,8 @@ class CaseLogsController < ApplicationController @case_log = CaseLog.find(params[:id]) @case_log.page = params[:case_log][:page] responses_for_page = responses_for_page(@case_log.page) - if @case_log.update(responses_for_page) && @case_log.has_no_unresolved_soft_errors? + inferred_answers = get_inferred_answers(responses_for_page) + if @case_log.update(responses_for_page.merge(inferred_answers)) && @case_log.has_no_unresolved_soft_errors? redirect_path = get_next_page_path(form, @case_log.page, @case_log) redirect_to(send(redirect_path, @case_log)) else @@ -116,6 +117,20 @@ private end end + def get_inferred_answers(responses_for_page) + result = {} + if responses_for_page["property_postcode"].present? + result["postcode"], result["postcod2"] = get_inferred_postcode(params["case_log"]["property_postcode"]) + end + result + end + + def get_inferred_postcode(postcode) + require "uk_postcode" + property_postcode = UKPostcode.parse(postcode) + [property_postcode.outcode, property_postcode.incode] + end + def json_api_request? API_ACTIONS.include?(request["action"]) && request.format.json? end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index fd87e2f0d..0000777e6 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -1515,7 +1515,7 @@ "header": "", "description": "", "questions": { - "property_reference": { + "propcode": { "check_answer_label": "What’s the property reference?", "header": "What's the property reference?", "hint_text": "", @@ -1564,7 +1564,7 @@ "header": "", "description": "", "questions": { - "property_major_repairs": { + "majorrepairs": { "check_answer_label": "Were major repairs carried out during the void period?", "header": "Were any major repairs completed during the void period?", "hint_text": "", diff --git a/db/migrate/20211108134601_further_core_migrations.rb b/db/migrate/20211108134601_further_core_migrations.rb index fc097c87b..85ab22e14 100644 --- a/db/migrate/20211108134601_further_core_migrations.rb +++ b/db/migrate/20211108134601_further_core_migrations.rb @@ -2,10 +2,18 @@ class FurtherCoreMigrations < ActiveRecord::Migration[6.1] def up remove_column :case_logs, :condition_effects_prefer_not_to_say rename_column :case_logs, :reason_for_leaving_last_settled_home, :reason + rename_column :case_logs, :property_reference, :propcode + rename_column :case_logs, :property_major_repairs, :majorrepairs + add_column :case_logs, :postcode, :string + add_column :case_logs, :postcod2, :string end def down add_column :case_logs, :condition_effects_prefer_not_to_say, :integer rename_column :case_logs, :reason, :reason_for_leaving_last_settled_home + rename_column :case_logs, :propcode, :property_reference + rename_column :case_logs, :majorrepairs, :property_major_repairs + remove_column :case_logs, :postcode + remove_column :case_logs, :postcod2 end end diff --git a/db/schema.rb b/db/schema.rb index d5ba545e7..3710ed4d4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -77,12 +77,12 @@ ActiveRecord::Schema.define(version: 2021_11_08_143649) do t.string "previous_postcode" t.string "property_relet" t.integer "rsnvac" - t.string "property_reference" + t.string "propcode" t.integer "unittype_gn" t.string "property_building_type" t.integer "beds" t.string "property_void_date" - t.string "property_major_repairs" + t.string "majorrepairs" t.string "property_major_repairs_date" t.integer "offered" t.integer "wchair" @@ -145,7 +145,8 @@ ActiveRecord::Schema.define(version: 2021_11_08_143649) do t.string "needs_type" t.string "sale_completion_date" t.string "purchaser_code" - t.integer "condition_effects_prefer_not_to_say" + t.string "postcode" + t.string "postcod2" t.index ["discarded_at"], name: "index_case_logs_on_discarded_at" end diff --git a/spec/controllers/case_logs_controller_spec.rb b/spec/controllers/case_logs_controller_spec.rb index 2eecfdfe2..bc0910251 100644 --- a/spec/controllers/case_logs_controller_spec.rb +++ b/spec/controllers/case_logs_controller_spec.rb @@ -150,6 +150,23 @@ RSpec.describe CaseLogsController, type: :controller do expect(response).to redirect_to("/case_logs/#{id}/conditional_question_no_page") end end + + context "partition postcode" do + let(:case_log_with_postcode) do + { + property_postcode: "M1 1AE", + page: "property_postcode", + } + end + it "saves full and partial postcodes" do + post :submit_form, params: { id: id, case_log: case_log_with_postcode } + case_log.reload + + expect(case_log.property_postcode).to eq("M1 1AE") + expect(case_log.postcode).to eq("M1") + expect(case_log.postcod2).to eq("1AE") + end + end end describe "get_next_page_path" do diff --git a/spec/factories/case_log.rb b/spec/factories/case_log.rb index 4528a7749..b46606279 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/case_log.rb @@ -4,8 +4,8 @@ FactoryBot.define do trait :in_progress do status { 1 } tenant_code { "TH356" } - property_postcode { "SW2 6HI" } - previous_postcode { "P0 5ST" } + property_postcode { "P0 5ST" } + previous_postcode { "SW2 6HI" } age1 { "17" } end trait :completed do diff --git a/spec/features/case_log_spec.rb b/spec/features/case_log_spec.rb index 160bb883b..5a8ebe211 100644 --- a/spec/features/case_log_spec.rb +++ b/spec/features/case_log_spec.rb @@ -175,8 +175,8 @@ RSpec.describe "Test Features" do end it "displays number answers in inputs if they are already saved" do - visit("/case_logs/#{id}/previous_postcode") - expect(page).to have_field("case-log-previous-postcode-field", with: "P0 5ST") + visit("/case_logs/#{id}/property_postcode") + expect(page).to have_field("case-log-property-postcode-field", with: "P0 5ST") end it "displays text answers in inputs if they are already saved" do diff --git a/spec/fixtures/complete_case_log.json b/spec/fixtures/complete_case_log.json index f7f95f86e..49a5f61e0 100644 --- a/spec/fixtures/complete_case_log.json +++ b/spec/fixtures/complete_case_log.json @@ -38,7 +38,7 @@ "sex8": "Prefer not to say", "ecstat8": "Child under 16", "homeless": "Yes - other homelessness", - "reason": "Other problems with neighbours", + "reason": 1, "underoccupation_benefitcap": "No", "leftreg": "No - they left up to 5 years ago", "reservist": "No", @@ -55,7 +55,7 @@ "lettype": "Affordable Rent - General Needs", "landlord": "This landlord", "property_location": "Barnet", - "previous_postcode": "NW1 5TY", + "property_postcode": "NW1 5TY", "property_relet": "No", "rsnvac": "Relet - tenant abandoned property", "property_reference": "P9876", @@ -82,7 +82,7 @@ "layear": "1 to 2 years", "lawaitlist": "Less than 1 year", "previous_la": "Ashford", - "property_postcode": "SE2 6RT", + "previous_postcode": "SE2 6RT", "reasonpref": "Yes", "reasonable_preference_reason": "dummy", "cbl": "Yes", @@ -125,6 +125,10 @@ "intermediate_rent_product_name": "", "needs_type": "", "sale_completion_date": "", - "purchaser_code": "" + "purchaser_code": "", + "propcode": "123", + "majorrepairs": "yes", + "postcode": "a1", + "postcod2": "w3" } } diff --git a/spec/fixtures/forms/test_form.json b/spec/fixtures/forms/test_form.json index a52768299..3f428fbf7 100644 --- a/spec/fixtures/forms/test_form.json +++ b/spec/fixtures/forms/test_form.json @@ -494,9 +494,9 @@ } } }, - "previous_postcode": { + "property_postcode": { "questions": { - "previous_postcode": { + "property_postcode": { "check_answer_label": "Postcode of previous accomodation if the household has moved from settled accommodation", "header": "Postcode for the previous accommodation", "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed",