From cfae9f7ba2b52eb7a3e4e0a03b625c047d940bef Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 5 Sep 2022 16:49:58 +0100 Subject: [PATCH] feat: add la manual edit page --- app/controllers/locations_controller.rb | 4 +- app/helpers/check_answers_helper.rb | 6 +- app/helpers/tab_nav_helper.rb | 6 +- app/views/locations/index.html.erb | 4 +- app/views/locations/la_fallback.html.erb | 349 +++++++++++++++++++++++ app/views/schemes/check_answers.html.erb | 4 +- config/routes.rb | 1 + spec/helpers/tab_nav_helper_spec.rb | 2 +- 8 files changed, 368 insertions(+), 8 deletions(-) create mode 100644 app/views/locations/la_fallback.html.erb diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index b88b895fb..d6968c4ef 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -57,6 +57,8 @@ class LocationsController < ApplicationController location_params[:add_another_location] == "Yes" ? redirect_to(new_location_path(@location.scheme)) : redirect_to(scheme_check_answers_path(@scheme, anchor: "locations")) when "edit-name" redirect_to(scheme_check_answers_path(@scheme, anchor: "locations")) + when "la-fallback" + redirect_to(scheme_check_answers_path(@scheme, anchor: "locations")) end else render :edit, status: :unprocessable_entity @@ -95,7 +97,7 @@ private end def authenticate_action! - if %w[new edit update create index edit_name].include?(action_name) && !((current_user.organisation == @scheme&.owning_organisation) || current_user.support?) + if %w[new edit update create index edit_name la_fallback].include?(action_name) && !((current_user.organisation == @scheme&.owning_organisation) || current_user.support?) render_not_found and return end end diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index ebb4bb034..be791effd 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -16,7 +16,7 @@ module CheckAnswersHelper !scheme.confirmed? || editable_attributes.include?(attribute_name) end - def get_location_change_link_href(scheme, location) + def get_location_change_link_href_postcode(scheme, location) if location.confirmed? location_edit_name_path(id: scheme.id, location_id: location.id) else @@ -24,6 +24,10 @@ module CheckAnswersHelper end end + def get_location_change_link_href_location_admin_district(scheme, location) + location_la_fallback_path(id: scheme.id, location_id: location.id) + end + def any_questions_have_summary_card_number?(subsection, lettings_log) subsection.applicable_questions(lettings_log).map(&:check_answers_card_number).compact.length.positive? end diff --git a/app/helpers/tab_nav_helper.rb b/app/helpers/tab_nav_helper.rb index 6e482b7ff..1f6c25889 100644 --- a/app/helpers/tab_nav_helper.rb +++ b/app/helpers/tab_nav_helper.rb @@ -6,11 +6,15 @@ module TabNavHelper [govuk_link_to(link_text, user), "User #{user.email}"].join("\n") end - def location_cell(location, link) + def location_cell_postcode(location, link) link_text = location.postcode [govuk_link_to(link_text, link, method: :patch), "Location #{location.name}"].join("\n") end + def location_cell_location_admin_district(location, link) + govuk_link_to(location.location_admin_district, link, method: :patch) + end + def scheme_cell(scheme) link_text = scheme.service_name link = scheme.confirmed? ? scheme : scheme_check_answers_path(scheme) diff --git a/app/views/locations/index.html.erb b/app/views/locations/index.html.erb index 9a3585cf8..59e9238b7 100644 --- a/app/views/locations/index.html.erb +++ b/app/views/locations/index.html.erb @@ -52,11 +52,11 @@ <%= table.body do |body| %> <%= body.row do |row| %> <% row.cell(text: location.id) %> - <% row.cell(text: simple_format(location_cell(location, "/schemes/#{@scheme.id}/locations/#{location.id}/edit-name"), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> + <% row.cell(text: simple_format(location_cell_postcode(location, "/schemes/#{@scheme.id}/locations/#{location.id}/edit-name"), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> <% row.cell(text: location.units) %> <% row.cell(text: simple_format("#{location.type_of_unit}")) %> <% row.cell(text: location.mobility_type) %> - <% row.cell(text: location.location_admin_district) %> + <% row.cell(text: simple_format(location_cell_location_admin_district(location, "/schemes/#{@scheme.id}/locations/#{location.id}/la-fallback"), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> <% row.cell(text: location.startdate&.to_formatted_s(:govuk_date)) %> <% end %> <% end %> diff --git a/app/views/locations/la_fallback.html.erb b/app/views/locations/la_fallback.html.erb new file mode 100644 index 000000000..4030cc761 --- /dev/null +++ b/app/views/locations/la_fallback.html.erb @@ -0,0 +1,349 @@ +<% content_for :before_content do %> + <%= govuk_back_link( + text: "Back", + href: "/schemes/#{@scheme.id}/locations", + ) %> +<% end %> + +<%= form_for(@location, method: :patch, url: location_path(location_id: @location.id)) do |f| %> +
+
+ <%= f.govuk_error_summary %> + + <%= render partial: "organisations/headings", locals: { main: "What is the the local authority of this location?", sub: @scheme.service_name } %> + + <% la_hash = { + "E07000223": "Adur", + "E07000026": "Allerdale", + "E07000032": "Amber Valley", + "E07000224": "Arun", + "E07000170": "Ashfield", + "E07000105": "Ashford", + "E07000200": "Babergh", + "E09000002": "Barking and Dagenham", + "E09000003": "Barnet", + "E08000016": "Barnsley", + "E07000027": "Barrow-in-Furness", + "E07000066": "Basildon", + "E07000084": "Basingstoke and Deane", + "E07000171": "Bassetlaw", + "E06000022": "Bath and North East Somerset", + "E06000055": "Bedford", + "E09000004": "Bexley", + "E08000025": "Birmingham", + "E07000129": "Blaby", + "E06000008": "Blackburn with Darwen", + "E06000009": "Blackpool", + "E07000033": "Bolsover", + "E08000001": "Bolton", + "E07000136": "Boston", + "E06000058": "Bournemouth, Christchurch and Poole", + "E06000036": "Bracknell Forest", + "E08000032": "Bradford", + "E07000067": "Braintree", + "E07000143": "Breckland", + "E09000005": "Brent", + "E07000068": "Brentwood", + "E06000043": "Brighton and Hove", + "E06000023": "Bristol, City of", + "E07000144": "Broadland", + "E09000006": "Bromley", + "E07000234": "Bromsgrove", + "E07000095": "Broxbourne", + "E07000172": "Broxtowe", + "E06000060": "Buckinghamshire", + "E07000117": "Burnley", + "E08000002": "Bury", + "E08000033": "Calderdale", + "E07000008": "Cambridge", + "E09000007": "Camden", + "E07000192": "Cannock Chase", + "E07000106": "Canterbury", + "E07000028": "Carlisle", + "E07000069": "Castle Point", + "E06000056": "Central Bedfordshire", + "E07000130": "Charnwood", + "E07000070": "Chelmsford", + "E07000078": "Cheltenham", + "E07000177": "Cherwell", + "E06000049": "Cheshire East", + "E06000050": "Cheshire West and Chester", + "E07000034": "Chesterfield", + "E07000225": "Chichester", + "E07000118": "Chorley", + "E09000001": "City of London", + "E07000071": "Colchester", + "E07000029": "Copeland", + "E07000150": "Corby", + "E06000052": "Cornwall", + "E07000079": "Cotswold", + "E06000047": "County Durham", + "E08000026": "Coventry", + "E07000163": "Craven", + "E07000226": "Crawley", + "E09000008": "Croydon", + "E07000096": "Dacorum", + "E06000005": "Darlington", + "E07000107": "Dartford", + "E07000151": "Daventry", + "E06000015": "Derby", + "E07000035": "Derbyshire Dales", + "E08000017": "Doncaster", + "E06000059": "Dorset", + "E07000108": "Dover", + "E08000027": "Dudley", + "E09000009": "Ealing", + "E07000009": "East Cambridgeshire", + "E07000040": "East Devon", + "E07000085": "East Hampshire", + "E07000242": "East Hertfordshire", + "E07000137": "East Lindsey", + "E07000152": "East Northamptonshire", + "E06000011": "East Riding of Yorkshire", + "E07000193": "East Staffordshire", + "E07000244": "East Suffolk", + "E07000061": "Eastbourne", + "E07000086": "Eastleigh", + "E07000030": "Eden", + "E07000207": "Elmbridge", + "E09000010": "Enfield", + "E07000072": "Epping Forest", + "E07000208": "Epsom and Ewell", + "E07000036": "Erewash", + "E07000041": "Exeter", + "E07000087": "Fareham", + "E07000010": "Fenland", + "E07000112": "Folkestone and Hythe", + "E07000080": "Forest of Dean", + "E07000119": "Fylde", + "E08000037": "Gateshead", + "E07000173": "Gedling", + "E07000081": "Gloucester", + "E07000088": "Gosport", + "E07000109": "Gravesham", + "E07000145": "Great Yarmouth", + "E09000011": "Greenwich", + "E07000209": "Guildford", + "W06000002": "Gwynedd", + "E09000012": "Hackney", + "E06000006": "Halton", + "E07000164": "Hambleton", + "E09000013": "Hammersmith and Fulham", + "E07000131": "Harborough", + "E09000014": "Haringey", + "E07000073": "Harlow", + "E07000165": "Harrogate", + "E09000015": "Harrow", + "E07000089": "Hart", + "E06000001": "Hartlepool", + "E07000062": "Hastings", + "E07000090": "Havant", + "E09000016": "Havering", + "E06000019": "Herefordshire, County of", + "E07000098": "Hertsmere", + "E07000037": "High Peak", + "S12000017": "Highland", + "E09000017": "Hillingdon", + "E07000132": "Hinckley and Bosworth", + "E07000227": "Horsham", + "E09000018": "Hounslow", + "E07000011": "Huntingdonshire", + "E07000120": "Hyndburn", + "E07000202": "Ipswich", + "E06000046": "Isle of Wight", + "E06000053": "Isles of Scilly", + "E09000019": "Islington", + "E09000020": "Kensington and Chelsea", + "E07000153": "Kettering", + "E07000146": "King’s Lynn and West Norfolk", + "E06000010": "Kingston upon Hull, City of", + "E09000021": "Kingston upon Thames", + "E08000034": "Kirklees", + "E08000011": "Knowsley", + "E09000022": "Lambeth", + "E07000121": "Lancaster", + "E08000035": "Leeds", + "E06000016": "Leicester", + "E07000063": "Lewes", + "E09000023": "Lewisham", + "E07000194": "Lichfield", + "E07000138": "Lincoln", + "E08000012": "Liverpool", + "E06000032": "Luton", + "E07000110": "Maidstone", + "E07000074": "Maldon", + "E07000235": "Malvern Hills", + "E08000003": "Manchester", + "E07000174": "Mansfield", + "E06000035": "Medway", + "E07000133": "Melton", + "E07000187": "Mendip", + "E09000024": "Merton", + "E07000042": "Mid Devon", + "E07000203": "Mid Suffolk", + "E07000228": "Mid Sussex", + "E06000002": "Middlesbrough", + "E06000042": "Milton Keynes", + "E07000210": "Mole Valley", + "E07000091": "New Forest", + "E07000175": "Newark and Sherwood", + "E08000021": "Newcastle upon Tyne", + "E07000195": "Newcastle-under-Lyme", + "E09000025": "Newham", + "E07000043": "North Devon", + "E07000038": "North East Derbyshire", + "E06000012": "North East Lincolnshire", + "E07000099": "North Hertfordshire", + "E07000139": "North Kesteven", + "E06000013": "North Lincolnshire", + "E07000147": "North Norfolk", + "E06000024": "North Somerset", + "E08000022": "North Tyneside", + "E07000218": "North Warwickshire", + "E07000134": "North West Leicestershire", + "E07000154": "Northampton", + "E06000057": "Northumberland", + "E07000148": "Norwich", + "E06000018": "Nottingham", + "E07000219": "Nuneaton and Bedworth", + "E07000135": "Oadby and Wigston", + "E08000004": "Oldham", + "E07000178": "Oxford", + "E07000122": "Pendle", + "E06000031": "Peterborough", + "E06000026": "Plymouth", + "E06000044": "Portsmouth", + "E07000123": "Preston", + "E06000038": "Reading", + "E09000026": "Redbridge", + "E06000003": "Redcar and Cleveland", + "E07000236": "Redditch", + "E07000211": "Reigate and Banstead", + "E07000124": "Ribble Valley", + "E09000027": "Richmond upon Thames", + "E07000166": "Richmondshire", + "E08000005": "Rochdale", + "E07000075": "Rochford", + "E07000125": "Rossendale", + "E07000064": "Rother", + "E08000018": "Rotherham", + "E07000220": "Rugby", + "E07000212": "Runnymede", + "E07000176": "Rushcliffe", + "E07000092": "Rushmoor", + "E06000017": "Rutland", + "E07000167": "Ryedale", + "E08000006": "Salford", + "E08000028": "Sandwell", + "E07000168": "Scarborough", + "E07000188": "Sedgemoor", + "E08000014": "Sefton", + "E07000169": "Selby", + "E07000111": "Sevenoaks", + "E08000019": "Sheffield", + "E06000051": "Shropshire", + "E06000039": "Slough", + "E08000029": "Solihull", + "E07000246": "Somerset West and Taunton", + "E07000012": "South Cambridgeshire", + "E07000039": "South Derbyshire", + "E06000025": "South Gloucestershire", + "E07000044": "South Hams", + "E07000140": "South Holland", + "E07000141": "South Kesteven", + "E07000031": "South Lakeland", + "E07000149": "South Norfolk", + "E07000155": "South Northamptonshire", + "E07000179": "South Oxfordshire", + "E07000126": "South Ribble", + "E07000189": "South Somerset", + "E07000196": "South Staffordshire", + "E08000023": "South Tyneside", + "E06000045": "Southampton", + "E06000033": "Southend-on-Sea", + "E09000028": "Southwark", + "E07000213": "Spelthorne", + "E07000240": "St Albans", + "E08000013": "St. Helens", + "E07000197": "Stafford", + "E07000198": "Staffordshire Moorlands", + "E07000243": "Stevenage", + "E08000007": "Stockport", + "E06000004": "Stockton-on-Tees", + "E06000021": "Stoke-on-Trent", + "E07000221": "Stratford-on-Avon", + "E07000082": "Stroud", + "E08000024": "Sunderland", + "E07000214": "Surrey Heath", + "E09000029": "Sutton", + "E07000113": "Swale", + "E06000030": "Swindon", + "E08000008": "Tameside", + "E07000199": "Tamworth", + "E07000215": "Tandridge", + "E07000045": "Teignbridge", + "E06000020": "Telford and Wrekin", + "E07000076": "Tendring", + "E07000093": "Test Valley", + "E07000083": "Tewkesbury", + "E07000114": "Thanet", + "E07000102": "Three Rivers", + "E06000034": "Thurrock", + "E07000115": "Tonbridge and Malling", + "E06000027": "Torbay", + "E07000046": "Torridge", + "E09000030": "Tower Hamlets", + "E08000009": "Trafford", + "E07000116": "Tunbridge Wells", + "E07000077": "Uttlesford", + "E07000180": "Vale of White Horse", + "E08000036": "Wakefield", + "E08000030": "Walsall", + "E09000031": "Waltham Forest", + "E09000032": "Wandsworth", + "E06000007": "Warrington", + "E07000222": "Warwick", + "E07000103": "Watford", + "E07000216": "Waverley", + "E07000065": "Wealden", + "E07000156": "Wellingborough", + "E07000241": "Welwyn Hatfield", + "E06000037": "West Berkshire", + "E07000047": "West Devon", + "E07000127": "West Lancashire", + "E07000142": "West Lindsey", + "E07000181": "West Oxfordshire", + "E07000245": "West Suffolk", + "E09000033": "Westminster", + "E08000010": "Wigan", + "E06000054": "Wiltshire", + "E07000094": "Winchester", + "E06000040": "Windsor and Maidenhead", + "E08000015": "Wirral", + "E07000217": "Woking", + "E06000041": "Wokingham", + "E08000031": "Wolverhampton", + "E07000237": "Worcester", + "E07000229": "Worthing", + "E07000238": "Wychavon", + "E07000128": "Wyre", + "E07000239": "Wyre Forest", + "E06000014": "York" + } + %> + + <% las = la_hash.map { |key, value| OpenStruct.new(id: key, name: value) } %> + + <%= f.govuk_collection_select :location_admin_district, + las, + :id, + :name, + label: { hidden: true }, + "data-controller": %w[accessible-autocomplete conditional-filter] %> + + <%= f.hidden_field :page, value: "la-fallback" %> + + <%= f.govuk_submit "Save and continue" %> +
+
+<% end %> diff --git a/app/views/schemes/check_answers.html.erb b/app/views/schemes/check_answers.html.erb index f2f13c7e1..349473573 100644 --- a/app/views/schemes/check_answers.html.erb +++ b/app/views/schemes/check_answers.html.erb @@ -68,11 +68,11 @@ <%= table.body do |body| %> <%= body.row do |row| %> <% row.cell(text: location.id) %> - <% row.cell(text: simple_format(location_cell(location, get_location_change_link_href(@scheme, location)), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> + <% row.cell(text: simple_format(location_cell_postcode(location, get_location_change_link_href_postcode(@scheme, location)), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> <% row.cell(text: location.units) %> <% row.cell(text: simple_format("#{location.type_of_unit}")) %> <% row.cell(text: location.mobility_type) %> - <% row.cell(text: location.location_admin_district) %> + <% row.cell(text: simple_format(location_cell_location_admin_district(location, get_location_change_link_href_location_admin_district(@scheme, location)), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> <% row.cell(text: location.startdate&.to_formatted_s(:govuk_date)) %> <% end %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 5a2fda475..889cce4eb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -49,6 +49,7 @@ Rails.application.routes.draw do resources :locations do get "edit-name", to: "locations#edit_name" get "edit", to: "locations#edit" + get "la-fallback", to: "locations#la_fallback" end end end diff --git a/spec/helpers/tab_nav_helper_spec.rb b/spec/helpers/tab_nav_helper_spec.rb index aa93b839d..b73200c4a 100644 --- a/spec/helpers/tab_nav_helper_spec.rb +++ b/spec/helpers/tab_nav_helper_spec.rb @@ -24,7 +24,7 @@ RSpec.describe TabNavHelper do it "returns the location link to the postcode with optional name" do link = "/schemes/#{location.scheme.id}/locations/#{location.id}/edit" expected_html = "#{location.postcode}\nLocation #{location.name}" - expect(location_cell(location, link)).to match(expected_html) + expect(location_cell_postcode(location, link)).to match(expected_html) end end