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