diff --git a/app/controllers/bulk_upload_lettings_logs_controller.rb b/app/controllers/bulk_upload_lettings_logs_controller.rb index 104c31c05..391651cde 100644 --- a/app/controllers/bulk_upload_lettings_logs_controller.rb +++ b/app/controllers/bulk_upload_lettings_logs_controller.rb @@ -24,7 +24,7 @@ class BulkUploadLettingsLogsController < ApplicationController private def current_year - FormHandler.instance.forms["current_lettings"].start_date.year + FormHandler.instance.current_collection_start_year end def in_crossover_period? @@ -37,6 +37,8 @@ private Forms::BulkUploadLettings::Year.new(form_params) when "prepare-your-file" Forms::BulkUploadLettings::PrepareYourFile.new(form_params) + when "needstype" + Forms::BulkUploadLettings::Needstype.new(form_params) when "upload-your-file" Forms::BulkUploadLettings::UploadYourFile.new(form_params.merge(current_user:)) when "checking-file" @@ -47,6 +49,6 @@ private end def form_params - params.fetch(:form, {}).permit(:year, :file) + params.fetch(:form, {}).permit(:year, :needstype, :file) end end diff --git a/app/models/forms/bulk_upload_lettings/needstype.rb b/app/models/forms/bulk_upload_lettings/needstype.rb new file mode 100644 index 000000000..0cadd647c --- /dev/null +++ b/app/models/forms/bulk_upload_lettings/needstype.rb @@ -0,0 +1,38 @@ +module Forms + module BulkUploadLettings + class Needstype + include ActiveModel::Model + include ActiveModel::Attributes + include Rails.application.routes.url_helpers + + attribute :needstype, :integer + attribute :year, :integer + + validates :needstype, presence: true + + def view_path + "bulk_upload_lettings_logs/forms/needstype" + end + + def options + [OpenStruct.new(id: 1, name: "General needs"), OpenStruct.new(id: 2, name: "Supported housing")] + end + + def back_path + bulk_upload_lettings_log_path(id: "prepare-your-file", form: { year:, needstype: }) + end + + def next_path + bulk_upload_lettings_log_path(id: "upload-your-file", form: { year:, needstype: }) + end + + def year_combo + "#{year}/#{year + 1 - 2000}" + end + + def save! + true + end + end + end +end diff --git a/app/models/forms/bulk_upload_lettings/prepare_your_file.rb b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb index 4e2c9b9a6..5bfc0a2aa 100644 --- a/app/models/forms/bulk_upload_lettings/prepare_your_file.rb +++ b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb @@ -6,6 +6,7 @@ module Forms include Rails.application.routes.url_helpers attribute :year, :integer + attribute :needstype, :integer def view_path "bulk_upload_lettings_logs/forms/prepare_your_file" @@ -20,7 +21,8 @@ module Forms end def next_path - bulk_upload_lettings_log_path(id: "upload-your-file", form: { year: }) + page_id = year == 2022 ? "needstype" : "upload-your-file" + bulk_upload_lettings_log_path(id: page_id, form: { year:, needstype: }) end def template_path diff --git a/app/models/forms/bulk_upload_lettings/upload_your_file.rb b/app/models/forms/bulk_upload_lettings/upload_your_file.rb index f49efafbf..da2947f53 100644 --- a/app/models/forms/bulk_upload_lettings/upload_your_file.rb +++ b/app/models/forms/bulk_upload_lettings/upload_your_file.rb @@ -8,6 +8,7 @@ module Forms include Rails.application.routes.url_helpers attribute :year, :integer + attribute :needstype, :integer attribute :file attribute :current_user @@ -19,7 +20,8 @@ module Forms end def back_path - bulk_upload_lettings_log_path(id: "prepare-your-file", form: { year: }) + page_id = year == 2022 ? "needstype" : "prepare-your-file" + bulk_upload_lettings_log_path(id: page_id, form: { year:, needstype: }) end def year_combo @@ -35,6 +37,7 @@ module Forms user: current_user, log_type: BulkUpload.log_types[:lettings], year:, + needstype:, filename: file.original_filename, ) diff --git a/app/views/bulk_upload_lettings_logs/forms/needstype.erb b/app/views/bulk_upload_lettings_logs/forms/needstype.erb new file mode 100644 index 000000000..a9bc28c4f --- /dev/null +++ b/app/views/bulk_upload_lettings_logs/forms/needstype.erb @@ -0,0 +1,21 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> +
+
+ <%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "needstype"), method: :patch do |f| %> + <%= f.govuk_error_summary %> + <%= f.hidden_field :year %> + + <%= f.govuk_collection_radio_buttons :needstype, + @form.options, + :id, + :name, + hint: { text: I18n.t("hints.bulk_upload.needstype") }, + legend: { text: "What is the needs type?", size: "l" }, + caption: { text: "Upload lettings logs in bulk (#{@form.year_combo})", size: "l" } %> + + <%= f.govuk_submit %> + <% end %> +
+
diff --git a/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb index d8cfedd08..199d87e5f 100644 --- a/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb +++ b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb @@ -15,6 +15,7 @@
  • Download the <%= govuk_link_to "bulk lettings template", @form.template_path %>
  • Export the data from your housing management system, matching the template
  • If you cannot export it in this format, you may have to input it manually
  • +
  • You can not have a file with both general needs logs and supported housing logs. These must be in separate files
  • Check your data

    diff --git a/app/views/bulk_upload_lettings_logs/forms/upload_your_file.html.erb b/app/views/bulk_upload_lettings_logs/forms/upload_your_file.html.erb index 8964438de..bbafc28b3 100644 --- a/app/views/bulk_upload_lettings_logs/forms/upload_your_file.html.erb +++ b/app/views/bulk_upload_lettings_logs/forms/upload_your_file.html.erb @@ -6,6 +6,7 @@
    <%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "upload-your-file"), method: :patch do |f| %> <%= f.hidden_field :year %> + <%= f.hidden_field :needstype %> <%= f.govuk_error_summary %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 611c64d23..2c1b64791 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -59,6 +59,10 @@ en: file: blank: Select which file to upload not_csv: Your file must be in CSV format + forms/bulk_upload_lettings/needstype: + attributes: + needstype: + blank: You must answer needs type activerecord: errors: @@ -458,6 +462,8 @@ en: startdate: "For example, 27 3 2021" scheme: toggle_active: "If the date is before %{date}, select ‘From the start of the current collection period’ because the previous period has now closed." + bulk_upload: + needstype: "General needs housing includes both self-contained and shared housing without support or specific adaptations. Supported housing can include direct access hostels, group homes, residential care and nursing homes." warnings: location: diff --git a/db/migrate/20221219112421_add_needstype_to_bulk_upload.rb b/db/migrate/20221219112421_add_needstype_to_bulk_upload.rb new file mode 100644 index 000000000..4a33f7f84 --- /dev/null +++ b/db/migrate/20221219112421_add_needstype_to_bulk_upload.rb @@ -0,0 +1,7 @@ +class AddNeedstypeToBulkUpload < ActiveRecord::Migration[7.0] + def change + change_table :bulk_uploads, bulk: true do |t| + t.column :needstype, :integer + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 0312d7cb8..f0351dba5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -22,6 +22,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_04_164318) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "filename" + t.integer "needstype" t.index ["identifier"], name: "index_bulk_uploads_on_identifier", unique: true t.index ["user_id"], name: "index_bulk_uploads_on_user_id" end diff --git a/spec/features/bulk_upload_lettings_logs_spec.rb b/spec/features/bulk_upload_lettings_logs_spec.rb index 3df49fe44..939518ac9 100644 --- a/spec/features/bulk_upload_lettings_logs_spec.rb +++ b/spec/features/bulk_upload_lettings_logs_spec.rb @@ -42,6 +42,19 @@ RSpec.describe "Bulk upload lettings log" do expect(page).to have_content("Upload lettings logs in bulk (2022/23)") click_button("Continue") + expect(page).to have_content("What is the needs type?") + click_button("Continue") + + expect(page).to have_content("You must answer needs type") + choose("General needs") + click_button("Continue") + + click_link("Back") + + expect(page.find_field("form-needstype-1-field")).to be_checked + click_button("Continue") + + expect(page).to have_content("Upload lettings logs in bulk (2022/23)") expect(page).to have_content("Upload your file") click_button("Upload") @@ -75,10 +88,33 @@ RSpec.describe "Bulk upload lettings log" do expect(page).to have_link("Upload lettings logs in bulk") click_link("Upload lettings logs in bulk") - expect(page).to have_content("Upload lettings logs in bulk (2022/23)") + expect(page).to have_content("Upload lettings logs in bulk (2023/24)") + click_button("Continue") + + expect(page).to have_content("Upload your file") + end + end + end + + context "when the collection year isn't 22/23" do + it "shows journey without the needstype" do + Timecop.freeze(2023, 10, 1) do + visit("/lettings-logs") + expect(page).to have_link("Upload lettings logs in bulk") + click_link("Upload lettings logs in bulk") + + expect(page).to have_content("Prepare your file") click_button("Continue") + click_link("Back") + + expect(page).to have_content("Prepare your file") + click_button("Continue") + + expect(page).to have_content("Upload lettings logs in bulk (2023/24)") + expect(page).to have_content("Upload your file") + click_button("Upload") end end end diff --git a/spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb b/spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb index 5101d10a9..49f7510ef 100644 --- a/spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb +++ b/spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb @@ -1,9 +1,10 @@ require "rails_helper" RSpec.describe Forms::BulkUploadLettings::UploadYourFile do - subject(:form) { described_class.new(year:, file:, current_user:) } + subject(:form) { described_class.new(year:, needstype:, file:, current_user:) } let(:year) { 2022 } + let(:needstype) { 2 } let(:actual_file) { File.open(file_fixture("blank_bulk_upload_sales.csv")) } let(:file) do ActionDispatch::Http::UploadedFile.new( @@ -37,6 +38,7 @@ RSpec.describe Forms::BulkUploadLettings::UploadYourFile do expect(bulk_upload.user).to eql(current_user) expect(bulk_upload.log_type).to eql("lettings") expect(bulk_upload.year).to eql(year) + expect(bulk_upload.needstype).to eql(needstype) expect(bulk_upload.filename).to eql("my-file.csv") expect(bulk_upload.identifier).to be_present end diff --git a/spec/requests/bulk_upload_lettings_logs_controller_spec.rb b/spec/requests/bulk_upload_lettings_logs_controller_spec.rb index 8b9d091ca..fc27ed0d1 100644 --- a/spec/requests/bulk_upload_lettings_logs_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_logs_controller_spec.rb @@ -10,7 +10,7 @@ RSpec.describe BulkUploadLettingsLogsController, type: :request do describe "GET /lettings-logs/bulk-upload-logs/start" do context "when not in crossover period" do - let(:expected_year) { FormHandler.instance.forms["current_lettings"].start_date.year } + let(:expected_year) { 2021 } it "redirects to /prepare-your-file" do Timecop.freeze(2022, 1, 1) do