From da33b7e5fd6e927f6350c56229b421256474cb26 Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Thu, 5 Jan 2023 17:25:55 +0000
Subject: [PATCH] Cldc 1773 needstype bulk upload (#1105)
* Add needstype to lettings bulk upload model
* Add needstype question for 2022/23 bulk uploads
* New line
* Add more info to prepare your file
---
.../bulk_upload_lettings_logs_controller.rb | 6 ++-
.../forms/bulk_upload_lettings/needstype.rb | 38 +++++++++++++++++++
.../bulk_upload_lettings/prepare_your_file.rb | 4 +-
.../bulk_upload_lettings/upload_your_file.rb | 5 ++-
.../forms/needstype.erb | 21 ++++++++++
.../forms/prepare_your_file.html.erb | 1 +
.../forms/upload_your_file.html.erb | 1 +
config/locales/en.yml | 6 +++
...1219112421_add_needstype_to_bulk_upload.rb | 7 ++++
db/schema.rb | 1 +
.../bulk_upload_lettings_logs_spec.rb | 38 ++++++++++++++++++-
.../upload_your_file_spec.rb | 4 +-
...lk_upload_lettings_logs_controller_spec.rb | 2 +-
13 files changed, 127 insertions(+), 7 deletions(-)
create mode 100644 app/models/forms/bulk_upload_lettings/needstype.rb
create mode 100644 app/views/bulk_upload_lettings_logs/forms/needstype.erb
create mode 100644 db/migrate/20221219112421_add_needstype_to_bulk_upload.rb
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