12 changed files with 206 additions and 1 deletions
@ -0,0 +1,35 @@ |
|||||||
|
<article class="app-log-summary"> |
||||||
|
<div class="govuk-grid-row"> |
||||||
|
<div class="govuk-grid-column-two-thirds"> |
||||||
|
<header class="app-log-summary__header"> |
||||||
|
<h2 class="app-log-summary__title govuk-heading-m govuk-!-font-weight-regular" style="white-space: normal; word-break: break-all"> |
||||||
|
<span class="govuk-!-margin-right-1"><%= bulk_upload.filename %></span> |
||||||
|
<span class="app-metadata app-log-summary__details" style="white-space: nowrap;"><%= bulk_upload.year %>/<%= bulk_upload.year + 1 %></span> |
||||||
|
</h2> |
||||||
|
</header> |
||||||
|
<div class="govuk-!-margin-bottom-2"> |
||||||
|
<p class="govuk-hint govuk-!-font-size-16 govuk-!-margin-bottom-1">Uploaded by: <%= bulk_upload.user.name %> (<%= bulk_upload.user.email %>)</p> |
||||||
|
<p class="govuk-hint govuk-!-font-size-16 govuk-!-margin-bottom-1">Uploading organisation: <%= bulk_upload.user.organisation.name %></p> |
||||||
|
<p class="govuk-hint govuk-!-font-size-16 govuk-!-margin-bottom-1">Time of upload: <%= bulk_upload.created_at.to_formatted_s(:govuk_date_and_time) %></p> |
||||||
|
</div> |
||||||
|
<p class="govuk-body govuk-!-margin-bottom-3"> |
||||||
|
<%= download_file_link %> |
||||||
|
<%= view_error_report_link %> |
||||||
|
<%= view_logs_link %> |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
<footer class="govuk-grid-column-one-third app-log-summary__footer"> |
||||||
|
<p class="govuk-body govuk-!-margin-bottom-3"> |
||||||
|
<%= upload_status %> |
||||||
|
</p> |
||||||
|
<div> |
||||||
|
<%= counts( |
||||||
|
[bulk_upload.total_logs_count, "total log"], |
||||||
|
[setup_errors_count, "error on important questions", "errors on important questions"], |
||||||
|
[critical_errors_count, "critical error"], |
||||||
|
[potential_errors_count, "potential error"] |
||||||
|
) %> |
||||||
|
</div> |
||||||
|
</footer> |
||||||
|
</div> |
||||||
|
</article> |
||||||
@ -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 |
||||||
@ -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})<br>".html_safe) |
||||||
|
concat("Uploading organisation: #{bulk_upload.user.organisation.name}<br>".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 |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<h2 class="govuk-body"> |
||||||
|
<div class="govuk-grid-row app-search__caption"> |
||||||
|
<div class="govuk-grid-column-three-quarters"> |
||||||
|
<%= 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))) %> |
||||||
|
</div> |
||||||
|
<div class="govuk-grid-column-one-quarter govuk-!-text-align-right"> |
||||||
|
<% if searched || applied_filters_count(@filter_type).positive? %> |
||||||
|
<br> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</h2> |
||||||
|
<% bulk_uploads.map do |bulk_upload| %> |
||||||
|
<%= render BulkUploadSummaryComponent.new(bulk_upload:) %> |
||||||
|
<% end %> |
||||||
@ -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 %> |
||||||
|
|
||||||
|
<h1 class="govuk-heading-l govuk-!-margin-bottom-8"> |
||||||
|
<%= "#{log_type_for_controller(controller).capitalize} bulk uploads" %> |
||||||
|
</h1> |
||||||
|
|
||||||
|
<div class="app-filter-layout" data-controller="filter-layout"> |
||||||
|
<%= render partial: "bulk_upload_shared/upload_filters" %> |
||||||
|
|
||||||
|
<div class="app-filter-layout__content"> |
||||||
|
<%= 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" } %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
Loading…
Reference in new issue