Browse Source

add majorrepairs,propcode and infer postcode

pull/83/head
Kat 4 years ago
parent
commit
32dbabbf8b
  1. 1
      Gemfile
  2. 2
      Gemfile.lock
  3. 17
      app/controllers/case_logs_controller.rb
  4. 4
      config/forms/2021_2022.json
  5. 8
      db/migrate/20211108134601_further_core_migrations.rb
  6. 7
      db/schema.rb
  7. 17
      spec/controllers/case_logs_controller_spec.rb
  8. 4
      spec/factories/case_log.rb
  9. 4
      spec/features/case_log_spec.rb
  10. 12
      spec/fixtures/complete_case_log.json
  11. 4
      spec/fixtures/forms/test_form.json

1
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

2
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)

17
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

4
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": "",

8
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

7
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

17
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

4
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

4
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

12
spec/fixtures/complete_case_log.json vendored

@ -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"
}
}

4
spec/fixtures/forms/test_form.json vendored

@ -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",

Loading…
Cancel
Save