From b836169f3d6bc5883ce9242aac16eaec2249f30c Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Thu, 19 Sep 2024 14:00:45 +0100 Subject: [PATCH] Show all bulk uploads --- .../bulk_upload_summary_component.html.erb | 35 +++++++++++++ .../bulk_upload_summary_component.rb | 29 +++++++++++ .../create_log_actions_component.html.erb | 5 +- .../create_log_actions_component.rb | 18 +++++++ app/components/search_component.rb | 4 ++ app/controllers/lettings_logs_controller.rb | 11 +++++ app/controllers/sales_logs_controller.rb | 11 +++++ app/helpers/bulk_upload_helper.rb | 49 +++++++++++++++++++ .../_upload_filters.html.erb | 0 .../bulk_upload_shared/_upload_list.html.erb | 15 ++++++ app/views/bulk_upload_shared/uploads.html.erb | 28 +++++++++++ config/routes.rb | 2 + 12 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 app/components/bulk_upload_summary_component.html.erb create mode 100644 app/components/bulk_upload_summary_component.rb create mode 100644 app/helpers/bulk_upload_helper.rb create mode 100644 app/views/bulk_upload_shared/_upload_filters.html.erb create mode 100644 app/views/bulk_upload_shared/_upload_list.html.erb create mode 100644 app/views/bulk_upload_shared/uploads.html.erb diff --git a/app/components/bulk_upload_summary_component.html.erb b/app/components/bulk_upload_summary_component.html.erb new file mode 100644 index 000000000..f89c3d9a7 --- /dev/null +++ b/app/components/bulk_upload_summary_component.html.erb @@ -0,0 +1,35 @@ +
+
+
+
+

+ <%= bulk_upload.filename %> + +

+
+
+

Uploaded by: <%= bulk_upload.user.name %> (<%= bulk_upload.user.email %>)

+

Uploading organisation: <%= bulk_upload.user.organisation.name %>

+

Time of upload: <%= bulk_upload.created_at.to_formatted_s(:govuk_date_and_time) %>

+
+

+ <%= download_file_link %> + <%= view_error_report_link %> + <%= view_logs_link %> +

+
+ +
+
diff --git a/app/components/bulk_upload_summary_component.rb b/app/components/bulk_upload_summary_component.rb new file mode 100644 index 000000000..c1168d3fc --- /dev/null +++ b/app/components/bulk_upload_summary_component.rb @@ -0,0 +1,29 @@ +class BulkUploadSummaryComponent < ViewComponent::Base + include BulkUploadHelper + + attr_reader :bulk_upload + + def initialize(bulk_upload:) + @bulk_upload = bulk_upload + @bulk_upload_errors = bulk_upload.bulk_upload_errors + super + end + + def upload_status + helpers.status_tag("in_progress") + end + + def setup_errors_count + @bulk_upload_errors.where(category: "setup").count + end + + def critical_errors_count + @bulk_upload_errors.where(category: [nil, ""]).count + end + + def potential_errors_count + @bulk_upload_errors.where(category: "soft_validations").count + end + + +end diff --git a/app/components/create_log_actions_component.html.erb b/app/components/create_log_actions_component.html.erb index 1b6bd8aca..f956ecb54 100644 --- a/app/components/create_log_actions_component.html.erb +++ b/app/components/create_log_actions_component.html.erb @@ -3,8 +3,11 @@ <% if create_button_href.present? %> <%= govuk_button_to create_button_copy, create_button_href, class: "govuk-!-margin-right-6" %> <% end %> - <% if upload_button_href.present? %> + <% if upload_button_href.present? && !user.support? %> <%= govuk_button_link_to upload_button_copy, upload_button_href, secondary: true %> <% end %> + <% if view_uploads_button_href.present? && user.support? %> + <%= govuk_button_link_to view_uploads_button_copy, view_uploads_button_href, secondary: true %> + <% end %> <% end %> diff --git a/app/components/create_log_actions_component.rb b/app/components/create_log_actions_component.rb index 4b451c2cc..59a91b96a 100644 --- a/app/components/create_log_actions_component.rb +++ b/app/components/create_log_actions_component.rb @@ -53,4 +53,22 @@ class CreateLogActionsComponent < ViewComponent::Base bulk_upload_sales_log_path(id: "start") end end + + def view_uploads_button_copy + case log_type + when "lettings" + "View lettings logs in bulk" + when "sales" + "View sales logs in bulk" + end + end + + def view_uploads_button_href + case log_type + when "lettings" + bulk_uploads_lettings_logs_path + when "sales" + bulk_uploads_sales_logs_path + end + end end diff --git a/app/components/search_component.rb b/app/components/search_component.rb index 36d621240..2d10781d3 100644 --- a/app/components/search_component.rb +++ b/app/components/search_component.rb @@ -19,6 +19,10 @@ class SearchComponent < ViewComponent::Base request.path elsif request.path.include?("organisations") && request.path.include?("managing-agents") request.path + elsif request.path.include?("bulk-uploads") && request.path.include?("sales-logs") + request.path + elsif request.path.include?("bulk-uploads") && request.path.include?("lettings-logs") + request.path elsif request.path.include?("users") user_path(current_user) elsif request.path.include?("organisations") diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index 491d92372..630e2c9c9 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -115,6 +115,17 @@ class LettingsLogsController < LogsController end end + def bulk_uploads + uploads = BulkUpload.lettings.where("created_at >= ?", 30.days.ago) + # unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, session_filters) + + @pagy, @bulk_uploads = pagy(uploads) + @search_term = search_term + @searched = search_term.presence + @filter_type = "lettings_bulk_uploads" + render "bulk_upload_shared/uploads" + end + private def session_filters diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 7c4d8aa60..288ab8477 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -85,6 +85,17 @@ class SalesLogsController < LogsController params.require(:sales_log).permit(SalesLog.editable_fields) end + def bulk_uploads + uploads = BulkUpload.sales.where("created_at >= ?", 30.days.ago) + # unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, session_filters) + + @pagy, @bulk_uploads = pagy(uploads) + @search_term = search_term + @searched = search_term.presence + @filter_type = "sales_bulk_uploads" + render "bulk_upload_shared/uploads" + end + private def session_filters diff --git a/app/helpers/bulk_upload_helper.rb b/app/helpers/bulk_upload_helper.rb new file mode 100644 index 000000000..4ea3e185e --- /dev/null +++ b/app/helpers/bulk_upload_helper.rb @@ -0,0 +1,49 @@ +module BulkUploadHelper + def bulk_upload_title(controller) + case controller.controller_name + when "lettings_logs" + "Lettings Bulk Uploads" + when "sales_logs" + "Sales Bulk Uploads" + else + "Bulk Uploads" + end + end + + def bulk_upload_details(bulk_upload) + content_tag(:span) do + concat("Uploaded by: #{bulk_upload.user.name} (#{bulk_upload.user.email})
".html_safe) + concat("Uploading organisation: #{bulk_upload.user.organisation.name}
".html_safe) + concat("Time of upload: #{bulk_upload.created_at.to_formatted_s(:govuk_date)}".html_safe) + end + end + + def formatted_count_text(count, singular_text, plural_text = nil) + return if count.nil? || count <= 0 + + text = count > 1 ? (plural_text || singular_text.pluralize(count)) : singular_text + content_tag(:p, class: "govuk-hint govuk-!-font-size-16 govuk-!-margin-bottom-1") do + concat(content_tag(:strong, count)) + concat(" #{text}") + end + end + + def counts(*counts_with_texts) + counts_with_texts.map { |count, singular_text, plural_text| + formatted_count_text(count, singular_text, plural_text) if count.present? + }.compact.join("").html_safe + end + + def download_file_link + link_to "Download file", "#", class: "govuk-link govuk-!-margin-right-2" + end + + def view_error_report_link + link_to "View error report", "#", class: "govuk-link" + end + + def view_logs_link + link_to "View logs", "#", class: "govuk-link" + end + +end diff --git a/app/views/bulk_upload_shared/_upload_filters.html.erb b/app/views/bulk_upload_shared/_upload_filters.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/bulk_upload_shared/_upload_list.html.erb b/app/views/bulk_upload_shared/_upload_list.html.erb new file mode 100644 index 000000000..7b6057228 --- /dev/null +++ b/app/views/bulk_upload_shared/_upload_list.html.erb @@ -0,0 +1,15 @@ +

+
+
+ <%= render(SearchResultCaptionComponent.new(searched:, count: pagy.count, item_label:, total_count:, item: "files uploaded in the last 30 days", filters_count: applied_filters_count(@filter_type))) %> +
+
+ <% if searched || applied_filters_count(@filter_type).positive? %> +
+ <% end %> +
+
+

+<% bulk_uploads.map do |bulk_upload| %> + <%= render BulkUploadSummaryComponent.new(bulk_upload:) %> +<% end %> diff --git a/app/views/bulk_upload_shared/uploads.html.erb b/app/views/bulk_upload_shared/uploads.html.erb new file mode 100644 index 000000000..34053e125 --- /dev/null +++ b/app/views/bulk_upload_shared/uploads.html.erb @@ -0,0 +1,28 @@ +<% item_label = format_label(@pagy.count, "uploads") %> +<% title = format_title(@searched, "Lettings bulk uploads", current_user, item_label, @pagy.count, nil) %> + +<% content_for :title, title %> + +

+ <%= "#{log_type_for_controller(controller).capitalize} bulk uploads" %> +

+ +
+ <%= render partial: "bulk_upload_shared/upload_filters" %> + +
+ <%= render SearchComponent.new(current_user:, search_label: "Search by file name, user's name or email, or organisation", value: @searched) %> + <%= govuk_section_break(visible: true, size: "m") %> + <%= render partial: "bulk_upload_shared/upload_list", + locals: { + bulk_uploads: @bulk_uploads, + title: "Bulk uploads", + pagy: @pagy, + searched: @searched, + item_label:, + total_count: @total_count, + filter_type: @filter_type, + } %> + <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "bulk uploads" } %> +
+
diff --git a/config/routes.rb b/config/routes.rb index f2c86e37c..bbb32d58e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -236,6 +236,7 @@ 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" + get "bulk-uploads", to: "lettings_logs#bulk_uploads" get "delete-logs", to: "delete_logs#delete_lettings_logs" post "delete-logs", to: "delete_logs#delete_lettings_logs_with_selected_ids" @@ -308,6 +309,7 @@ Rails.application.routes.draw do get "csv-download", to: "sales_logs#download_csv" post "email-csv", to: "sales_logs#email_csv" get "csv-confirmation", to: "sales_logs#csv_confirmation" + get "bulk-uploads", to: "sales_logs#bulk_uploads" get "delete-logs", to: "delete_logs#delete_sales_logs" post "delete-logs", to: "delete_logs#delete_sales_logs_with_selected_ids"