diff --git a/app/controllers/collection_resources_controller.rb b/app/controllers/collection_resources_controller.rb
index 5203ceea1..06988c88c 100644
--- a/app/controllers/collection_resources_controller.rb
+++ b/app/controllers/collection_resources_controller.rb
@@ -8,8 +8,8 @@ class CollectionResourcesController < ApplicationController
@mandatory_lettings_collection_resources_per_year = MandatoryCollectionResourcesService.generate_resources("lettings", editable_collection_resource_years)
@mandatory_sales_collection_resources_per_year = MandatoryCollectionResourcesService.generate_resources("sales", editable_collection_resource_years)
- @additional_lettings_collection_resources_per_year = CollectionResource.where(log_type: "lettings", mandatory: false).group_by(&:year)
- @additional_sales_collection_resources_per_year = CollectionResource.where(log_type: "sales", mandatory: false).group_by(&:year)
+ @additional_lettings_collection_resources_per_year = CollectionResource.visible.where(log_type: "lettings", mandatory: false).group_by(&:year)
+ @additional_sales_collection_resources_per_year = CollectionResource.visible.where(log_type: "sales", mandatory: false).group_by(&:year)
end
def download_mandatory_collection_resource
@@ -35,7 +35,7 @@ class CollectionResourcesController < ApplicationController
end
def edit_mandatory_collection_resource
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
year = params[:year].to_i
resource_type = params[:resource_type]
@@ -51,7 +51,7 @@ class CollectionResourcesController < ApplicationController
end
def edit_additional_collection_resource
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
@collection_resource = CollectionResource.find_by(id: params[:collection_resource_id])
@@ -62,7 +62,7 @@ class CollectionResourcesController < ApplicationController
end
def update_mandatory_collection_resource
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
year = resource_params[:year].to_i
resource_type = resource_params[:resource_type]
@@ -92,7 +92,7 @@ class CollectionResourcesController < ApplicationController
end
def update_additional_collection_resource
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
@collection_resource = CollectionResource.find_by(id: params[:collection_resource_id])
@@ -122,7 +122,7 @@ class CollectionResourcesController < ApplicationController
end
def confirm_mandatory_collection_resources_release
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
@year = params[:year].to_i
@@ -132,7 +132,7 @@ class CollectionResourcesController < ApplicationController
end
def release_mandatory_collection_resources
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
year = params[:year].to_i
@@ -145,7 +145,7 @@ class CollectionResourcesController < ApplicationController
end
def new
- return render_not_found unless current_user.support?
+ return render_not_authorized unless current_user.support?
year = params[:year].to_i
log_type = params[:log_type]
@@ -156,7 +156,7 @@ class CollectionResourcesController < ApplicationController
end
def create
- return render_not_found unless current_user.support? && editable_collection_resource_years.include?(resource_params[:year].to_i)
+ return render_not_authorized unless current_user.support? && editable_collection_resource_years.include?(resource_params[:year].to_i)
@collection_resource = CollectionResource.new(resource_params)
@collection_resource.download_filename ||= @collection_resource.file&.original_filename
@@ -184,6 +184,29 @@ class CollectionResourcesController < ApplicationController
end
end
+ def delete_confirmation
+ return render_not_authorized unless current_user.support?
+
+ @collection_resource = CollectionResource.find_by(id: params[:collection_resource_id])
+
+ return render_not_found unless @collection_resource
+
+ render "collection_resources/delete_confirmation"
+ end
+
+ def delete
+ return render_not_authorized unless current_user.support?
+
+ @collection_resource = CollectionResource.find_by(id: params[:collection_resource_id])
+
+ return render_not_found unless @collection_resource
+
+ @collection_resource.discard!
+
+ flash[:notice] = "The #{@collection_resource.log_type} #{text_year_range_format(@collection_resource.year)} #{@collection_resource.short_display_name.downcase} has been deleted."
+ redirect_to collection_resources_path
+ end
+
private
def resource_params
diff --git a/app/controllers/start_controller.rb b/app/controllers/start_controller.rb
index b65da4d44..d6df81c39 100644
--- a/app/controllers/start_controller.rb
+++ b/app/controllers/start_controller.rb
@@ -4,8 +4,8 @@ class StartController < ApplicationController
def index
@mandatory_lettings_collection_resources_per_year = MandatoryCollectionResourcesService.generate_resources("lettings", displayed_collection_resource_years)
@mandatory_sales_collection_resources_per_year = MandatoryCollectionResourcesService.generate_resources("sales", displayed_collection_resource_years)
- @additional_lettings_collection_resources_per_year = CollectionResource.where(log_type: "lettings", mandatory: false, year: displayed_collection_resource_years).group_by(&:year)
- @additional_sales_collection_resources_per_year = CollectionResource.where(log_type: "sales", mandatory: false, year: displayed_collection_resource_years).group_by(&:year)
+ @additional_lettings_collection_resources_per_year = CollectionResource.visible.where(log_type: "lettings", mandatory: false, year: displayed_collection_resource_years).group_by(&:year)
+ @additional_sales_collection_resources_per_year = CollectionResource.visible.where(log_type: "sales", mandatory: false, year: displayed_collection_resource_years).group_by(&:year)
if current_user
@homepage_presenter = HomepagePresenter.new(current_user)
render "home/index"
diff --git a/app/frontend/styles/_document-list.scss b/app/frontend/styles/_document-list.scss
index e8cef0625..a1f812551 100644
--- a/app/frontend/styles/_document-list.scss
+++ b/app/frontend/styles/_document-list.scss
@@ -1,5 +1,4 @@
.app-document-list {
- margin-top: govuk-spacing(3);
margin-bottom: govuk-spacing(6);
}
diff --git a/app/models/collection_resource.rb b/app/models/collection_resource.rb
index cc217b8cd..fc5808cec 100644
--- a/app/models/collection_resource.rb
+++ b/app/models/collection_resource.rb
@@ -1,8 +1,10 @@
class CollectionResource < ApplicationRecord
include Rails.application.routes.url_helpers
+ has_paper_trail
attr_accessor :file
+ scope :visible, -> { where(discarded_at: nil) }
validates :short_display_name, presence: true
def download_path
@@ -35,4 +37,9 @@ class CollectionResource < ApplicationRecord
def validate_short_display_name
errors.add(:short_display_name, :blank) if short_display_name.blank?
end
+
+ def discard!
+ CollectionResourcesService.new.delete_collection_resource(download_filename)
+ update!(discarded_at: Time.zone.now)
+ end
end
diff --git a/app/services/collection_resources_service.rb b/app/services/collection_resources_service.rb
index 82247f7a0..f6762116a 100644
--- a/app/services/collection_resources_service.rb
+++ b/app/services/collection_resources_service.rb
@@ -27,4 +27,8 @@ class CollectionResourcesService
content_type = MiniMime.lookup_by_filename(filename)&.content_type
@storage_service.write_file(filename, file, content_type:)
end
+
+ def delete_collection_resource(filename)
+ @storage_service.delete_file(filename)
+ end
end
diff --git a/app/services/storage/local_disk_service.rb b/app/services/storage/local_disk_service.rb
index ad3cc9608..228f0339e 100644
--- a/app/services/storage/local_disk_service.rb
+++ b/app/services/storage/local_disk_service.rb
@@ -43,5 +43,11 @@ module Storage
File.exist?(path)
end
+
+ def delete_file(filename)
+ path = Rails.root.join("tmp/storage", filename)
+
+ File.delete(path)
+ end
end
end
diff --git a/app/services/storage/s3_service.rb b/app/services/storage/s3_service.rb
index 2e8daa719..a6eef7d49 100644
--- a/app/services/storage/s3_service.rb
+++ b/app/services/storage/s3_service.rb
@@ -64,6 +64,10 @@ module Storage
false
end
+ def delete_file(file_name)
+ @client.delete_object(bucket: @configuration.bucket_name, key: file_name)
+ end
+
private
def create_configuration
diff --git a/app/services/storage/storage_service.rb b/app/services/storage/storage_service.rb
index afb3d4a58..37d4cc0fd 100644
--- a/app/services/storage/storage_service.rb
+++ b/app/services/storage/storage_service.rb
@@ -15,5 +15,13 @@ module Storage
def write_file(_file_name, _data)
raise NotImplementedError
end
+
+ def get_file(_file_name, _data)
+ raise NotImplementedError
+ end
+
+ def delete_file(_file_name, _data)
+ raise NotImplementedError
+ end
end
end
diff --git a/app/views/collection_resources/_collection_resource_summary_list.erb b/app/views/collection_resources/_collection_resource_summary_list.erb
index 0e630f0aa..581bb6303 100644
--- a/app/views/collection_resources/_collection_resource_summary_list.erb
+++ b/app/views/collection_resources/_collection_resource_summary_list.erb
@@ -35,15 +35,15 @@
) %>
<% row.with_action(
text: "Delete",
- href: "/",
+ href: collection_resource_delete_confirmation_path(resource),
classes: "app-!-colour-red"
) %>
<% end %>
<% end %>
<% end %>
-
+
<%= govuk_link_to "Add new #{mandatory_resources.first.log_type} #{text_year_range_format(mandatory_resources.first.year)} resource", href: new_collection_resource_path(year: mandatory_resources.first.year, log_type: mandatory_resources.first.log_type) %>
-
+
diff --git a/app/views/collection_resources/delete_confirmation.html.erb b/app/views/collection_resources/delete_confirmation.html.erb
new file mode 100644
index 000000000..9f861bc19
--- /dev/null
+++ b/app/views/collection_resources/delete_confirmation.html.erb
@@ -0,0 +1,31 @@
+<% content_for :before_content do %>
+ <% content_for :title, "Are you sure you want to delete the #{@collection_resource.short_display_name.downcase}?" %>
+ <%= govuk_back_link href: collection_resources_path %>
+<% end %>
+
+