diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index eaec5a604..9f2c07e9a 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -83,6 +83,18 @@ class LettingsLogsController < LogsController def csv_confirmation; end + def update_logs + respond_to do |format| + format.html do + impacted_logs = current_user.lettings_logs.where(impacted_by_deactivation: true, created_by: current_user) + + @pagy, @logs = pagy(impacted_logs) + @total_count = impacted_logs.size + render "logs/update_logs" + end + end + end + private def permitted_log_params diff --git a/app/views/logs/update_logs.html.erb b/app/views/logs/update_logs.html.erb new file mode 100644 index 000000000..bd7f13c72 --- /dev/null +++ b/app/views/logs/update_logs.html.erb @@ -0,0 +1,36 @@ +<% item_label = format_label(@pagy.count, "logs") %> +<% title = format_title(@searched, "Logs", current_user, item_label, @pagy.count, nil) %> + +<% content_for :title, title %> + +<%= render partial: "organisations/headings", locals: { main: "You need to update #{@total_count} logs", sub: "" } %> + +<%= govuk_table do |table| %> + <% table.head do |head| %> + <% head.row do |row| %> + <% row.cell(header: true, text: "Log ID") %> + <% row.cell(header: true, text: "Tenancy code") %> + <% row.cell(header: true, text: "Property reference") %> + <% row.cell(header: true, text: "Status") %> + <% row.cell(header: true, text: "") %> + <% end %> + <% end %> + <% @logs.each do |log| %> + <% table.body do |body| %> + <% body.row do |row| %> + <% row.cell(text: log.id) %> + <% row.cell(text: log.tenancycode) %> + <% row.cell(text: log.propcode) %> + <% row.cell(text: status_tag(log.status)) %> + <% row.cell(html_attributes: { + scope: "row", + class: "govuk-!-text-align-right", + }) do %> + <%= govuk_link_to("Update now", lettings_log_tenancy_start_date_path(log)) %> + <% end %> + <% end %> + <% end %> + <% end %> +<% end %> + +<%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "logs" } %> diff --git a/config/routes.rb b/config/routes.rb index aebc664ab..99c2f239e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -111,12 +111,13 @@ Rails.application.routes.draw do get "csv-download", to: "lettings_logs#download_csv" post "email-csv", to: "lettings_logs#email_csv" get "csv-confirmation", to: "lettings_logs#csv_confirmation" - + resources :bulk_upload_lettings_logs, path: "bulk-upload-logs" do collection do get :start end end + get "update-logs", to: "lettings_logs#update_logs" end member do diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index db4226152..382e68a20 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -789,6 +789,46 @@ RSpec.describe LettingsLogsController, type: :request do end end end + + context "when viewing a collection of logs affected by deactivated location" do + let!(:affected_lettings_logs) { FactoryBot.create_list(:lettings_log, 3, impacted_by_deactivation: true, created_by: user) } + let!(:non_affected_lettings_logs) { FactoryBot.create_list(:lettings_log, 4, created_by: user) } + let(:other_user) { FactoryBot.create(:user, organisation: user.organisation) } + let(:headers) { { "Accept" => "text/html" } } + + before do + allow(user).to receive(:need_two_factor_authentication?).and_return(false) + sign_in user + end + + it "displays logs in a table" do + get "/lettings-logs/update-logs", headers:, params: {} + expect(page).to have_content("Log ID") + expect(page).to have_content("Tenancy code") + expect(page).to have_content("Property reference") + expect(page).to have_content("Status") + + expect(page).to have_content(affected_lettings_logs.first.id) + expect(page).to have_content(affected_lettings_logs.first.tenancycode) + expect(page).to have_content(affected_lettings_logs.first.propcode) + expect(page).to have_link("Update now", href: "/lettings-logs/#{affected_lettings_logs.first.id}/tenancy-start-date") + end + + it "only displays affected logs" do + get "/lettings-logs/update-logs", headers:, params: {} + expect(page).to have_content("You need to update 3 logs") + expect(page).to have_content(affected_lettings_logs.first.id) + expect(page).not_to have_content(non_affected_lettings_logs.first.id) + end + + it "only displays the logs creted by the user" do + affected_lettings_logs.first.update!(created_by: other_user) + get "/lettings-logs/update-logs", headers:, params: {} + expect(page).to have_content(affected_lettings_logs.second.id) + expect(page).not_to have_content(affected_lettings_logs.first.id) + expect(page).to have_content("You need to update 2 logs") + end + end end describe "PATCH" do