diff --git a/app/controllers/account_configs_controller.rb b/app/controllers/account_configs_controller.rb index 1130feef..02aee521 100644 --- a/app/controllers/account_configs_controller.rb +++ b/app/controllers/account_configs_controller.rb @@ -17,7 +17,8 @@ class AccountConfigsController < ApplicationController AccountConfig::FLATTEN_RESULT_PDF_KEY, AccountConfig::WITH_SIGNATURE_ID, AccountConfig::COMBINE_PDF_RESULT_KEY, - AccountConfig::REQUIRE_SIGNING_REASON_KEY + AccountConfig::REQUIRE_SIGNING_REASON_KEY, + AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY ].freeze InvalidKey = Class.new(StandardError) diff --git a/app/controllers/submissions_download_controller.rb b/app/controllers/submissions_download_controller.rb index 2a6517a9..47c5fa47 100644 --- a/app/controllers/submissions_download_controller.rb +++ b/app/controllers/submissions_download_controller.rb @@ -53,8 +53,13 @@ class SubmissionsDownloadController < ApplicationController end def build_urls(submitter) + filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id, + key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value + Submitters.select_attachments_for_download(submitter).map do |attachment| - ActiveStorage::Blob.proxy_url(attachment.blob, expires_at: FILES_TTL.from_now.to_i) + ActiveStorage::Blob.proxy_url(attachment.blob, + expires_at: FILES_TTL.from_now.to_i, + filename: build_filename(submitter, attachment.blob, filename_format)) end end @@ -65,6 +70,26 @@ class SubmissionsDownloadController < ApplicationController attachment = submitter.submission.combined_document_attachment attachment ||= Submissions::GenerateCombinedAttachment.call(submitter) - ActiveStorage::Blob.proxy_url(attachment.blob, expires_at: FILES_TTL.from_now.to_i) + filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id, + key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value + + ActiveStorage::Blob.proxy_url(attachment.blob, + expires_at: FILES_TTL.from_now.to_i, + filename: build_filename(submitter, attachment.blob, filename_format)) + end + + def build_filename(submitter, blob, filename_format) + return blob.filename if filename_format.blank? + + filename = ReplaceEmailVariables.call(filename_format, submitter:) + + filename = filename.gsub('{document.name}', blob.filename.base) + + filename = filename.gsub( + '{submission.completed_at}', + I18n.l(submitter.completed_at.beginning_of_year.in_time_zone(submitter.account.timezone), format: :short) + ) + + "#{filename}.#{blob.filename.extension}" end end diff --git a/app/models/account_config.rb b/app/models/account_config.rb index 112ca466..6ce4ef46 100644 --- a/app/models/account_config.rb +++ b/app/models/account_config.rb @@ -43,6 +43,7 @@ class AccountConfig < ApplicationRecord REQUIRE_SIGNING_REASON_KEY = 'require_signing_reason' REUSE_SIGNATURE_KEY = 'reuse_signature' COMBINE_PDF_RESULT_KEY = 'combine_pdf_result_key' + DOCUMENT_FILENAME_FORMAT_KEY = 'document_filename_format' DEFAULT_VALUES = { SUBMITTER_INVITATION_EMAIL_KEY => lambda { diff --git a/app/views/esign_settings/show.html.erb b/app/views/esign_settings/show.html.erb index 8d2d3b72..848dd740 100644 --- a/app/views/esign_settings/show.html.erb +++ b/app/views/esign_settings/show.html.erb @@ -164,6 +164,20 @@ <% end %> <% end %> + <% account_config = AccountConfig.find_or_initialize_by(account: current_account, key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY) %> + <% if can?(:manage, account_config) %> + <%= form_for account_config, url: account_configs_path, method: :post do |f| %> + <%= f.hidden_field :key %> +