48 changed files with 655 additions and 91 deletions
@ -1,15 +1,22 @@
|
||||
module CollectionResourcesHelper |
||||
HUMAN_READABLE_CONTENT_TYPE = { "application/pdf": "PDF", |
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "Microsoft Excel", |
||||
"application/vnd.ms-excel": "Microsoft Excel (Old Format)", |
||||
"application/msword": "Microsoft Word", |
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": "Microsoft Word (DOCX)", |
||||
"image/jpeg": "JPEG Image", |
||||
"image/png": "PNG Image", |
||||
"text/plain": "Text Document", |
||||
"text/html": "HTML Document" }.freeze |
||||
|
||||
def file_type_size_and_pages(file, number_of_pages: nil) |
||||
extension_mapping = { |
||||
"xlsx" => "Microsoft Excel", |
||||
"pdf" => "PDF", |
||||
} |
||||
extension = File.extname(file)[1..] |
||||
file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil |
||||
metadata = CollectionResourcesService.new.get_file_metadata(file) |
||||
|
||||
file_type = extension_mapping.fetch(extension, extension) |
||||
return [file_pages].compact.join(", ") unless metadata |
||||
|
||||
file_size = number_to_human_size(File.size("public/files/#{file}"), precision: 0, significant: false) |
||||
file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil |
||||
file_size = number_to_human_size(metadata["content_length"].to_i) |
||||
file_type = HUMAN_READABLE_CONTENT_TYPE[metadata["content_type"].to_sym] || "Unknown File Type" |
||||
[file_type, file_size, file_pages].compact.join(", ") |
||||
end |
||||
end |
||||
|
@ -0,0 +1,21 @@
|
||||
class CollectionResourcesService |
||||
def initialize |
||||
@storage_service = if FeatureToggle.local_storage? |
||||
Storage::LocalDiskService.new |
||||
else |
||||
Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"]) |
||||
end |
||||
end |
||||
|
||||
def get_file(file) |
||||
@storage_service.get_file_io(file) |
||||
rescue StandardError |
||||
nil |
||||
end |
||||
|
||||
def get_file_metadata(file) |
||||
@storage_service.get_file_metadata(file) |
||||
rescue StandardError |
||||
nil |
||||
end |
||||
end |
@ -0,0 +1,138 @@
|
||||
<% content_for :before_content do %> |
||||
<%= govuk_back_link href: schemes_organisation_path(@organisation) %> |
||||
<% end %> |
||||
<%= form_with model: @organisation, url: schemes_duplicates_organisation_path(@organisation), method: "post" do |f| %> |
||||
<%= f.govuk_error_summary %> |
||||
|
||||
<% if @duplicate_schemes.any? %> |
||||
<% if @duplicate_locations.any? %> |
||||
<% title = "Review these sets of schemes and locations" %> |
||||
<% else %> |
||||
<% title = "Review these sets of schemes" %> |
||||
<% end %> |
||||
<% else %> |
||||
<% title = "Review these sets of locations" %> |
||||
<% end %> |
||||
|
||||
<% content_for :title, title %> |
||||
|
||||
<% if current_user.support? %> |
||||
<%= render SubNavigationComponent.new( |
||||
items: secondary_items(request.path, @organisation.id), |
||||
) %> |
||||
<% end %> |
||||
|
||||
<div class="govuk-grid-row"> |
||||
<div class="govuk-grid-column-two-thirds-from-desktop"> |
||||
<h1 class="govuk-heading-xl"><%= title %></h1> |
||||
|
||||
<p class="govuk-body">Since your organisation recently merged, we’ve reviewed your schemes for possible duplicates.</p> |
||||
<p class="govuk-body">These sets of schemes and locations might be duplicates because they have the same answers for certain fields.</p> |
||||
<h2 class="govuk-heading-m">What you need to do</h2> |
||||
<ul class="govuk-list govuk-list--bullet"> |
||||
<li>Review each set of schemes or locations and decide if they are duplicates.</li> |
||||
<li>If they are, choose one to keep and deactivate the others on the date your organisation merged.</li> |
||||
<li>When you have resolved all duplicates, confirm below.</li> |
||||
</ul> |
||||
<p class="govuk-body">If you need help with this, <%= govuk_link_to "contact the helpdesk (opens in a new tab)", GlobalConstants::HELPDESK_URL, target: "#" %>.</p> |
||||
|
||||
<% if @duplicate_schemes.any? %> |
||||
<h2 class="govuk-heading-m"><%= @duplicate_schemes.count == 1 ? "This set" : "These #{@duplicate_schemes.count} sets" %> of schemes might have duplicates</h2> |
||||
|
||||
<%= govuk_details(summary_text: "Why are these schemes identified as duplicates?") do %> |
||||
<p class="govuk-body"> |
||||
These schemes have the same answers for the following fields: |
||||
</p> |
||||
<ul class="govuk-list govuk-list--bullet"> |
||||
<li>Type of scheme</li> |
||||
<li>Registered under Care Standards Act 2000</li> |
||||
<li>Housing stock owned by</li> |
||||
<li>Support services provided by</li> |
||||
<li>Primary client group</li> |
||||
<li>Has another client group</li> |
||||
<li>Secondary client group</li> |
||||
<li>Level of support given</li> |
||||
<li>Intended length of stay</li> |
||||
</ul> |
||||
<% end %> |
||||
|
||||
<%= govuk_table do |table| %> |
||||
<%= table.with_head do |head| %> |
||||
<% head.with_row do |row| %> |
||||
<% row.with_cell(header: true, text: "Schemes") %> |
||||
<% end %> |
||||
|
||||
<%= table.with_body do |body| %> |
||||
<% @duplicate_schemes.each do |duplicate_set| %> |
||||
<% body.with_row do |row| %> |
||||
<% row.with_cell do %> |
||||
<ol class="govuk-list govuk-list--number"> |
||||
<% duplicate_set.each do |scheme| %> |
||||
<li> |
||||
<%= govuk_link_to scheme.service_name, scheme %> |
||||
</li> |
||||
<% end %> |
||||
</ol> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
|
||||
<% if @duplicate_locations.any? %> |
||||
<h2 class="govuk-heading-m"><%= @duplicate_locations.count == 1 ? "This set" : "These #{@duplicate_locations.count} sets" %> of locations might have duplicates</h2> |
||||
<%= govuk_details(summary_text: "Why are these locations identified as duplicates?") do %> |
||||
<p class="govuk-body"> |
||||
These locations belong to the same scheme and have the same answers for the following fields: |
||||
</p> |
||||
<ul class="govuk-list govuk-list--bullet"> |
||||
<li>Postcode</li> |
||||
<li>Mobility standards</li> |
||||
</ul> |
||||
<% end %> |
||||
|
||||
<%= govuk_table do |table| %> |
||||
<%= table.with_head do |head| %> |
||||
<% head.with_row do |row| %> |
||||
<% row.with_cell(header: true, text: "Locations") %> |
||||
<% row.with_cell(header: true, text: "Scheme") %> |
||||
<% end %> |
||||
|
||||
<%= table.with_body do |body| %> |
||||
<% @duplicate_locations.each do |duplicate_set| %> |
||||
<% body.with_row do |row| %> |
||||
<% row.with_cell do %> |
||||
<ol class="govuk-list govuk-list--number"> |
||||
<% duplicate_set[:locations].each do |location| %> |
||||
<li> |
||||
<%= govuk_link_to location.name, scheme_location_path(location) %> |
||||
</li> |
||||
<% end %> |
||||
</ol> |
||||
<% end %> |
||||
<% row.with_cell do %> |
||||
<%= govuk_link_to duplicate_set[:scheme].service_name, duplicate_set[:scheme] %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
<% end %> |
||||
|
||||
<%= f.govuk_check_boxes_fieldset :scheme_duplicates_checked, |
||||
legend: { text: "Have you resolved all duplicates?" } do %> |
||||
<%= f.govuk_check_box :scheme_duplicates_checked, |
||||
true, |
||||
false, |
||||
multiple: false, |
||||
checked: false, |
||||
label: { text: "Yes, none of the schemes and locations above are duplicates" } %> |
||||
<% end %> |
||||
|
||||
<%= f.govuk_submit "Confirm" %> |
||||
</div> |
||||
</div> |
||||
<% end %> |
@ -0,0 +1,5 @@
|
||||
class AddSchemesDeduplicatedAt < ActiveRecord::Migration[7.0] |
||||
def change |
||||
add_column :organisations, :schemes_deduplicated_at, :datetime |
||||
end |
||||
end |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue