You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
9.2 KiB
232 lines
9.2 KiB
class CollectionResourcesController < ApplicationController |
|
include CollectionResourcesHelper |
|
|
|
before_action :authenticate_user!, except: %i[download_mandatory_collection_resource download_additional_collection_resource] |
|
|
|
def index |
|
render_not_found unless current_user.support? |
|
|
|
@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.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 |
|
log_type = params[:log_type] |
|
year = params[:year].to_i |
|
resource_type = params[:resource_type] |
|
|
|
return render_not_found unless resource_for_year_can_be_downloaded?(year) |
|
|
|
resource = MandatoryCollectionResourcesService.generate_resource(log_type, year, resource_type) |
|
return render_not_found unless resource |
|
|
|
download_resource(resource.download_filename) |
|
end |
|
|
|
def download_additional_collection_resource |
|
resource = CollectionResource.find_by(id: params[:collection_resource_id]) |
|
|
|
return render_not_found unless resource |
|
return render_not_found unless resource_for_year_can_be_downloaded?(resource.year) |
|
|
|
download_resource(resource.download_filename) |
|
end |
|
|
|
def edit_mandatory_collection_resource |
|
return render_not_authorized unless current_user.support? |
|
|
|
year = params[:year].to_i |
|
resource_type = params[:resource_type] |
|
log_type = params[:log_type] |
|
|
|
return render_not_found unless resource_for_year_can_be_updated?(year) |
|
|
|
@collection_resource = MandatoryCollectionResourcesService.generate_resource(log_type, year, resource_type) |
|
|
|
return render_not_found unless @collection_resource |
|
|
|
render "collection_resources/edit" |
|
end |
|
|
|
def edit_additional_collection_resource |
|
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 |
|
return render_not_found unless resource_for_year_can_be_updated?(@collection_resource.year) |
|
|
|
render "collection_resources/edit" |
|
end |
|
|
|
def update_mandatory_collection_resource |
|
return render_not_authorized unless current_user.support? |
|
|
|
year = resource_params[:year].to_i |
|
resource_type = resource_params[:resource_type] |
|
log_type = resource_params[:log_type] |
|
file = resource_params[:file] |
|
|
|
return render_not_found unless resource_for_year_can_be_updated?(year) |
|
|
|
@collection_resource = MandatoryCollectionResourcesService.generate_resource(log_type, year, resource_type) |
|
render_not_found unless @collection_resource |
|
|
|
@collection_resource.file = file |
|
@collection_resource.validate_attached_file |
|
|
|
return render "collection_resources/edit" if @collection_resource.errors.any? |
|
|
|
filename = @collection_resource.download_filename |
|
begin |
|
CollectionResourcesService.new.upload_collection_resource(filename, file) |
|
rescue StandardError |
|
@collection_resource.errors.add(:file, :error_uploading) |
|
return render "collection_resources/edit" |
|
end |
|
|
|
flash[:notice] = "The #{log_type} #{text_year_range_format(year)} #{@collection_resource.short_display_name.downcase} has been updated" |
|
redirect_to collection_resources_path |
|
end |
|
|
|
def update_additional_collection_resource |
|
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 |
|
return render_not_found unless resource_for_year_can_be_updated?(@collection_resource.year) |
|
|
|
@collection_resource.file = resource_params[:file] |
|
@collection_resource.validate_attached_file |
|
@collection_resource.validate_short_display_name |
|
return render "collection_resources/edit" if @collection_resource.errors.any? |
|
|
|
@collection_resource.short_display_name = resource_params[:short_display_name] |
|
@collection_resource.download_filename = @collection_resource.file&.original_filename |
|
@collection_resource.display_name = "#{@collection_resource.log_type} #{@collection_resource.short_display_name} (#{text_year_range_format(@collection_resource.year)})" |
|
if @collection_resource.save |
|
begin |
|
CollectionResourcesService.new.upload_collection_resource(@collection_resource.download_filename, @collection_resource.file) |
|
flash[:notice] = "The #{@collection_resource.log_type} #{text_year_range_format(@collection_resource.year)} #{@collection_resource.short_display_name.downcase} has been updated." |
|
redirect_to collection_resources_path |
|
rescue StandardError |
|
@collection_resource.errors.add(:file, :error_uploading) |
|
render "collection_resources/edit" |
|
end |
|
else |
|
render "collection_resources/edit" |
|
end |
|
end |
|
|
|
def confirm_mandatory_collection_resources_release |
|
return render_not_authorized unless current_user.support? |
|
|
|
@year = params[:year].to_i |
|
|
|
return render_not_found unless editable_collection_resource_years.include?(@year) |
|
|
|
render "collection_resources/confirm_mandatory_collection_resources_release" |
|
end |
|
|
|
def release_mandatory_collection_resources |
|
return render_not_authorized unless current_user.support? |
|
|
|
year = params[:year].to_i |
|
|
|
return render_not_found unless editable_collection_resource_years.include?(year) |
|
|
|
MandatoryCollectionResourcesService.release_resources(year) |
|
|
|
flash[:notice] = "The #{text_year_range_format(year)} collection resources are now available to users." |
|
redirect_to collection_resources_path |
|
end |
|
|
|
def new |
|
return render_not_authorized unless current_user.support? |
|
|
|
year = params[:year].to_i |
|
log_type = params[:log_type] |
|
|
|
return render_not_found unless editable_collection_resource_years.include?(year) |
|
|
|
@collection_resource = CollectionResource.new(year:, log_type:) |
|
end |
|
|
|
def create |
|
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 |
|
@collection_resource.display_name = "#{@collection_resource.log_type} #{@collection_resource.short_display_name} (#{text_year_range_format(@collection_resource.year)})" |
|
|
|
@collection_resource.validate_attached_file |
|
@collection_resource.validate_short_display_name |
|
return render "collection_resources/new" if @collection_resource.errors.any? |
|
|
|
if @collection_resource.save |
|
begin |
|
CollectionResourcesService.new.upload_collection_resource(@collection_resource.download_filename, @collection_resource.file) |
|
flash[:notice] = if displayed_collection_resource_years.include?(@collection_resource.year) |
|
"The #{@collection_resource.log_type} #{text_year_range_format(@collection_resource.year)} #{@collection_resource.short_display_name} is now available to users." |
|
else |
|
"The #{@collection_resource.log_type} #{text_year_range_format(@collection_resource.year)} #{@collection_resource.short_display_name} has been uploaded." |
|
end |
|
redirect_to collection_resources_path |
|
rescue StandardError |
|
@collection_resource.errors.add(:file, :error_uploading) |
|
render "collection_resources/new" |
|
end |
|
else |
|
render "collection_resources/new" |
|
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 |
|
params.require(:collection_resource).permit(:year, :log_type, :resource_type, :file, :mandatory, :short_display_name) |
|
end |
|
|
|
def download_resource(filename) |
|
file = CollectionResourcesService.new.get_file(filename) |
|
return render_not_found unless file |
|
|
|
send_data(file, disposition: "attachment", filename:) |
|
end |
|
|
|
def resource_for_year_can_be_downloaded?(year) |
|
return true if current_user&.support? && editable_collection_resource_years.include?(year) |
|
|
|
displayed_collection_resource_years.include?(year) |
|
end |
|
|
|
def resource_for_year_can_be_updated?(year) |
|
editable_collection_resource_years.include?(year) |
|
end |
|
end
|
|
|