From 711b3b3190a9b20a5a47def3e88b1029ceae3a47 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 20 Nov 2024 21:48:12 +0200 Subject: [PATCH] use filename format in email attachments --- .../submissions_download_controller.rb | 29 ++++++------------- app/mailers/submitter_mailer.rb | 19 ++++++++---- lib/submitters.rb | 15 ++++++++++ 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/app/controllers/submissions_download_controller.rb b/app/controllers/submissions_download_controller.rb index 47c5fa47..9ba81b91 100644 --- a/app/controllers/submissions_download_controller.rb +++ b/app/controllers/submissions_download_controller.rb @@ -57,9 +57,11 @@ class SubmissionsDownloadController < ApplicationController 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, - filename: build_filename(submitter, attachment.blob, filename_format)) + ActiveStorage::Blob.proxy_url( + attachment.blob, + expires_at: FILES_TTL.from_now.to_i, + filename: Submitters.build_document_filename(submitter, attachment.blob, filename_format) + ) end end @@ -73,23 +75,10 @@ class SubmissionsDownloadController < ApplicationController 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) + ActiveStorage::Blob.proxy_url( + attachment.blob, + expires_at: FILES_TTL.from_now.to_i, + filename: Submitters.build_document_filename(submitter, attachment.blob, filename_format) ) - - "#{filename}.#{blob.filename.extension}" end end diff --git a/app/mailers/submitter_mailer.rb b/app/mailers/submitter_mailer.rb index ad41ee5d..2c5caa2c 100644 --- a/app/mailers/submitter_mailer.rb +++ b/app/mailers/submitter_mailer.rb @@ -152,6 +152,9 @@ class SubmitterMailer < ApplicationMailer def add_completed_email_attachments!(submitter, with_audit_log: true, with_documents: true) documents = with_documents ? Submitters.select_attachments_for_download(submitter) : [] + filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id, + key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value + total_size = 0 audit_trail_data = nil @@ -161,9 +164,14 @@ class SubmitterMailer < ApplicationMailer total_size = audit_trail_data.size end - total_size = add_attachments_with_size_limit(documents, total_size) + total_size = add_attachments_with_size_limit(submitter, documents, total_size, filename_format) + + if audit_trail_data + audit_trail_filename = + Submitters.build_document_filename(submitter, submitter.submission.audit_trail.blob, filename_format) - attachments[submitter.submission.audit_trail.filename.to_s.tr('"', "'")] = audit_trail_data if audit_trail_data + attachments[audit_trail_filename.tr('"', "'")] = audit_trail_data + end if with_documents file_fields = submitter.submission.template_fields.select { |e| e['type'].in?(%w[file payment]) } @@ -172,7 +180,7 @@ class SubmitterMailer < ApplicationMailer storage_attachments = submitter.attachments.where(uuid: submitter.values.values_at(*file_fields.pluck('uuid')).flatten) - add_attachments_with_size_limit(storage_attachments, total_size) + add_attachments_with_size_limit(submitter, storage_attachments, total_size) end end @@ -183,7 +191,7 @@ class SubmitterMailer < ApplicationMailer user.role == 'integration' ? user.friendly_name.sub(/\+\w+@/, '@') : user.friendly_name end - def add_attachments_with_size_limit(storage_attachments, current_size) + def add_attachments_with_size_limit(submitter, storage_attachments, current_size, filename_format = nil) total_size = current_size storage_attachments.each do |attachment| @@ -191,7 +199,8 @@ class SubmitterMailer < ApplicationMailer break if total_size >= MAX_ATTACHMENTS_SIZE - attachments[attachment.filename.to_s.tr('"', "'")] = attachment.download + filename = Submitters.build_document_filename(submitter, attachment.blob, filename_format) + attachments[filename.to_s.tr('"', "'")] = attachment.download end total_size diff --git a/lib/submitters.rb b/lib/submitters.rb index 19a44d4c..171a2439 100644 --- a/lib/submitters.rb +++ b/lib/submitters.rb @@ -116,4 +116,19 @@ module Submitters acc && submitter.submission.submitters.find { |e| e.uuid == item['uuid'] }&.completed_at? end end + + def build_document_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