diff --git a/app/controllers/delete_logs_controller.rb b/app/controllers/delete_logs_controller.rb index e2776825b..2ad1fa294 100644 --- a/app/controllers/delete_logs_controller.rb +++ b/app/controllers/delete_logs_controller.rb @@ -6,13 +6,13 @@ class DeleteLogsController < ApplicationController before_action :session_filters, if: :current_user, except: [:delete_logs] def delete_lettings_logs - @delete_logs_form = delete_logs_form + @delete_logs_form = delete_logs_form(log_type: :lettings) render "logs/delete_lettings_logs" end def delete_lettings_logs_with_selected_ids selected_ids = params.require(:selected_ids).split.map(&:to_i) - @delete_logs_form = delete_logs_form(selected_ids:) + @delete_logs_form = delete_logs_form(selected_ids:, log_type: :lettings) render "logs/delete_lettings_logs" end @@ -44,10 +44,49 @@ class DeleteLogsController < ApplicationController redirect_to lettings_logs_path, notice: I18n.t("notification.logs_deleted", count: logs.count) end + def delete_sales_logs + @delete_logs_form = delete_logs_form(log_type: :sales) + render "logs/delete_sales_logs" + end + + def delete_sales_logs_with_selected_ids + selected_ids = params.require(:selected_ids).split.map(&:to_i) + @delete_logs_form = delete_logs_form(selected_ids:, log_type: :sales) + render "logs/delete_sales_logs" + end + + def delete_sales_logs_confirmation + default_attributes = { + current_user:, + log_filters: @session_filters, + log_type: :sales, + } + form_attributes = params.require(:forms_delete_logs_form).permit(:search_term, selected_ids: []) + attributes = form_attributes.merge(default_attributes) + attributes[:selected_ids] = [] unless attributes.key? :selected_ids + @delete_path = delete_logs_sales_logs_path + @delete_logs_form = Forms::DeleteLogsForm.new(attributes) + if @delete_logs_form.valid? + render "logs/delete_logs_confirmation" + else + render "logs/delete_sales_logs" + end + end + + def discard_sales_logs + logs = SalesLog.find(params.require(:ids)) + logs.each do |log| + authorize log, :destroy? + log.discard! + end + + redirect_to sales_logs_path, notice: I18n.t("notification.logs_deleted", count: logs.count) + end + private - def delete_logs_form(selected_ids: nil) - Forms::DeleteLogsForm.new(current_user:, search_term:, log_filters: @session_filters, log_type: :lettings, selected_ids:) + def delete_logs_form(selected_ids: nil, log_type:) + Forms::DeleteLogsForm.new(current_user:, search_term:, log_filters: @session_filters, log_type:, selected_ids:) end def search_term diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 27f3d4f05..4a06fa6c4 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -18,6 +18,7 @@ class SalesLogsController < LogsController all_logs = current_user.sales_logs.visible unpaginated_filtered_logs = filter_manager.filtered_logs(all_logs, search_term, session_filters) + @delete_logs_path = delete_logs_sales_logs_path(search: search_term) @search_term = search_term @pagy, @logs = pagy(unpaginated_filtered_logs) @searched = search_term.presence diff --git a/app/views/logs/delete_sales_logs.html.erb b/app/views/logs/delete_sales_logs.html.erb new file mode 100644 index 000000000..abbde84d9 --- /dev/null +++ b/app/views/logs/delete_sales_logs.html.erb @@ -0,0 +1,48 @@ +<% title = "Delete logs" %> +<% content_for :title, title %> +<% content_for :before_content do %> + <%= govuk_back_link(href: :back) %> +<% end %> + +
You've selected <%= @delete_logs_form.log_count %> <%= "log".pluralize(@delete_logs_form.log_count) %> to delete
+ +<%= form_with model: @delete_logs_form, url: delete_logs_confirmation_sales_logs_path do |f| %> + <%= f.hidden_field :search_term, value: @delete_logs_form.search_term %> + <%= f.govuk_error_summary %> + <%= govuk_table do |table| %> + <% table.head do |head| %> + <% head.row do |row| %> + <% row.cell(header: true, text: "Log ID") %> + <% row.cell(header: true, text: "Owning Organisation") %> + <% row.cell(header: true, text: "Created") %> + <% row.cell(header: true, text: "Status") %> + <% row.cell(header: true, text: "Delete?") %> + <% end %> + <% end %> + <% table.body do |body| %> + <% f.govuk_check_boxes_fieldset :selected_ids, small: true do %> + <% @delete_logs_form.logs.each do |log| %> + <% body.row do |row| %> + <% row.cell(text: log.id) %> + <% row.cell(text: log.owning_organisation&.name) %> + <% row.cell(text: log.created_at&.to_formatted_s(:govuk_date)) %> + <% row.cell(text: status_tag(log.status)) %> + <% row.cell do %> + <% f.govuk_check_box :selected_ids, log.id, + label: { text: log.id, hidden: true }, + size: "s", + checked: @delete_logs_form.selected_ids.include?(log.id) %> + <% end %> + <% end %> + <% end %> + <% end %> + <% end %> + <% end %> + <%= f.govuk_submit "Continue" do %> + <%= govuk_button_link_to "Cancel", sales_logs_path(search: @delete_logs_form.search_term), secondary: true %> + <% end %> +<% end %> diff --git a/config/routes.rb b/config/routes.rb index 7b32c86c7..e4d3a1e57 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -232,9 +232,10 @@ Rails.application.routes.draw do post "email-csv", to: "sales_logs#email_csv" get "csv-confirmation", to: "sales_logs#csv_confirmation" - get "delete-logs", to: "sales_logs#delete_logs_list" - get "delete-logs-confirmation", to: "sales_logs#delete_logs_confirmation" - delete "delete-logs", to: "sales_logs#delete_logs" + get "delete-logs", to: "delete_logs#delete_sales_logs" + post "delete-logs", to: "delete_logs#delete_sales_logs_with_selected_ids" + post "delete-logs-confirmation", to: "delete_logs#delete_sales_logs_confirmation" + delete "delete-logs", to: "delete_logs#discard_sales_logs" resources :bulk_upload_sales_logs, path: "bulk-upload-logs" do collection do