diff --git a/app/controllers/bulk_upload_lettings_resume_controller.rb b/app/controllers/bulk_upload_lettings_resume_controller.rb new file mode 100644 index 000000000..9ddffa27f --- /dev/null +++ b/app/controllers/bulk_upload_lettings_resume_controller.rb @@ -0,0 +1,35 @@ +class BulkUploadLettingsResumeController < ApplicationController + before_action :authenticate_user! + + def start + @bulk_upload = current_user.bulk_uploads.find(params[:id]) + + redirect_to fix_choice_bulk_upload_lettings_resume_path(@bulk_upload) + end + + def show + @bulk_upload = current_user.bulk_uploads.find(params[:id]) + + render form.view_path + end + + def update + @bulk_upload = current_user.bulk_uploads.find(params[:id]) + + if form.valid? # && form.save! + redirect_to form.next_path + else + render form.view_path + end + end + +private + + def form + @form ||= Forms::BulkUploadLettingsResume::FixChoice.new(form_params) + end + + def form_params + params.fetch(:form, {}).permit(:choice) + end +end diff --git a/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb b/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb new file mode 100644 index 000000000..4362327d9 --- /dev/null +++ b/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb @@ -0,0 +1,25 @@ +module Forms + module BulkUploadLettingsResume + class FixChoice + include ActiveModel::Model + include ActiveModel::Attributes + include Rails.application.routes.url_helpers + + attribute :choice, :string + + validates :choice, presence: true, + inclusion: { in: %w[create-fix-inline upload-again] } + + def options + [ + OpenStruct.new(id: "create-fix-inline", name: "Upload these logs and fix errors on CORE site"), + OpenStruct.new(id: "upload-again", name: "Fix errors in the CSV and re-upload"), + ] + end + + def view_path + "bulk_upload_lettings_resume/fix_choice" + end + end + end +end diff --git a/app/views/bulk_upload_lettings_resume/fix_choice.html.erb b/app/views/bulk_upload_lettings_resume/fix_choice.html.erb new file mode 100644 index 000000000..70030318c --- /dev/null +++ b/app/views/bulk_upload_lettings_resume/fix_choice.html.erb @@ -0,0 +1,36 @@ +
+
+ <%= form_with model: @form, scope: :form, url: fix_choice_bulk_upload_lettings_resume_path(@bulk_upload), method: :patch do |f| %> + <%= f.govuk_error_summary %> + + Bulk upload for lettings (<%= @bulk_upload.year_combo %>) +

How would you like to fix <%= pluralize(@bulk_upload.bulk_upload_errors.count, "error") %>?

+ +
+ <%= @bulk_upload.filename %> +
+ +
+ For this many errors we recommend to fix errors in the CSV and re-upload as you may be able to edit many fields at once in a CSV. +
+ + <%= govuk_details(summary_text: "How to choose between fixing errors on the CORE site or in the CSV") do %> +

When it comes to fixing errors, there are pros and cons to doing it on a CSV versus doing it on a website.

+ +

Fixing errors on a CSV file can be beneficial because it allows you to easily make changes to multiple records at once, and you can use tools like Excel to quickly identify and correct errors. However, if the CSV file is not properly formatted, it can be difficult to identify which records contain errors.

+ +

Fixing errors on a website can be convenient because you can see the data in context and make changes in real-time. However, this approach can be time-consuming if you need to make changes to multiple records, and it may be more difficult to identify errors in a large dataset.

+ +

Ultimately, the best approach will depend on the specific situation and the nature of the errors that need to be fixed.

+ <% end %> + + <%= f.govuk_collection_radio_buttons :choice, + @form.options, + :id, + :name, + legend: { hidden: true } %> + + <%= f.govuk_submit %> + <% end %> +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 45cbde94a..e5be8dadb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -68,6 +68,11 @@ en: attributes: needstype: blank: You must answer needs type + forms/bulk_upload_lettings_resume/fix_choice: + attributes: + choice: + blank: You must select how would you like to fix errors + inclusion: You must select one of the following options for how would like to fix errors activerecord: errors: diff --git a/config/routes.rb b/config/routes.rb index eeadffa03..1877ba86f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -144,6 +144,14 @@ Rails.application.routes.draw do end end + resources :bulk_upload_lettings_resume, path: "bulk-upload-resume", only: %i[show update] do + member do + get :start + get "fix-choice", to: "bulk_upload_lettings_resume#show" + patch "fix-choice", to: "bulk_upload_lettings_resume#update" + end + end + get "update-logs", to: "lettings_logs#update_logs" end diff --git a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb new file mode 100644 index 000000000..d5109dccf --- /dev/null +++ b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb @@ -0,0 +1,44 @@ +require "rails_helper" + +RSpec.describe BulkUploadLettingsResumeController, type: :request do + let(:user) { create(:user) } + let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:) } + let(:bulk_upload_errors) { create_list(:bulk_upload_error, 2) } + + before do + sign_in user + end + + describe "GET /lettings-logs/bulk-upload-resume/:ID/start" do + it "redirects to choice page" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/start" + + expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") + end + end + + describe "GET /lettings-logs/bulk-upload-resume/:ID/fix-choice" do + it "renders the page correctly" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" + + expect(response).to be_successful + + expect(response.body).to include("Bulk upload for lettings") + expect(response.body).to include("2022/23") + expect(response.body).to include("How would you like to fix 2 errors?") + expect(response.body).to include(bulk_upload.filename) + end + end + + describe "PATCH /lettings-logs/bulk-upload-resume/:ID/fix-choice" do + context "when no option selected" do + it "renders error message" do + patch "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" + + expect(response).to be_successful + + expect(response.body).to include("You must select") + end + end + end +end