use filename format in email attachments
This commit is contained in:
@@ -57,9 +57,11 @@ class SubmissionsDownloadController < ApplicationController
|
|||||||
key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value
|
key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value
|
||||||
|
|
||||||
Submitters.select_attachments_for_download(submitter).map do |attachment|
|
Submitters.select_attachments_for_download(submitter).map do |attachment|
|
||||||
ActiveStorage::Blob.proxy_url(attachment.blob,
|
ActiveStorage::Blob.proxy_url(
|
||||||
expires_at: FILES_TTL.from_now.to_i,
|
attachment.blob,
|
||||||
filename: build_filename(submitter, attachment.blob, filename_format))
|
expires_at: FILES_TTL.from_now.to_i,
|
||||||
|
filename: Submitters.build_document_filename(submitter, attachment.blob, filename_format)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -73,23 +75,10 @@ class SubmissionsDownloadController < ApplicationController
|
|||||||
filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id,
|
filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id,
|
||||||
key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value
|
key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value
|
||||||
|
|
||||||
ActiveStorage::Blob.proxy_url(attachment.blob,
|
ActiveStorage::Blob.proxy_url(
|
||||||
expires_at: FILES_TTL.from_now.to_i,
|
attachment.blob,
|
||||||
filename: build_filename(submitter, attachment.blob, filename_format))
|
expires_at: FILES_TTL.from_now.to_i,
|
||||||
end
|
filename: Submitters.build_document_filename(submitter, attachment.blob, filename_format)
|
||||||
|
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ class SubmitterMailer < ApplicationMailer
|
|||||||
def add_completed_email_attachments!(submitter, with_audit_log: true, with_documents: true)
|
def add_completed_email_attachments!(submitter, with_audit_log: true, with_documents: true)
|
||||||
documents = with_documents ? Submitters.select_attachments_for_download(submitter) : []
|
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
|
total_size = 0
|
||||||
audit_trail_data = nil
|
audit_trail_data = nil
|
||||||
|
|
||||||
@@ -161,9 +164,14 @@ class SubmitterMailer < ApplicationMailer
|
|||||||
total_size = audit_trail_data.size
|
total_size = audit_trail_data.size
|
||||||
end
|
end
|
||||||
|
|
||||||
total_size = add_attachments_with_size_limit(documents, total_size)
|
total_size = add_attachments_with_size_limit(submitter, documents, total_size, filename_format)
|
||||||
|
|
||||||
attachments[submitter.submission.audit_trail.filename.to_s.tr('"', "'")] = audit_trail_data if audit_trail_data
|
if audit_trail_data
|
||||||
|
audit_trail_filename =
|
||||||
|
Submitters.build_document_filename(submitter, submitter.submission.audit_trail.blob, filename_format)
|
||||||
|
|
||||||
|
attachments[audit_trail_filename.tr('"', "'")] = audit_trail_data
|
||||||
|
end
|
||||||
|
|
||||||
if with_documents
|
if with_documents
|
||||||
file_fields = submitter.submission.template_fields.select { |e| e['type'].in?(%w[file payment]) }
|
file_fields = submitter.submission.template_fields.select { |e| e['type'].in?(%w[file payment]) }
|
||||||
@@ -172,7 +180,7 @@ class SubmitterMailer < ApplicationMailer
|
|||||||
storage_attachments =
|
storage_attachments =
|
||||||
submitter.attachments.where(uuid: submitter.values.values_at(*file_fields.pluck('uuid')).flatten)
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -183,7 +191,7 @@ class SubmitterMailer < ApplicationMailer
|
|||||||
user.role == 'integration' ? user.friendly_name.sub(/\+\w+@/, '@') : user.friendly_name
|
user.role == 'integration' ? user.friendly_name.sub(/\+\w+@/, '@') : user.friendly_name
|
||||||
end
|
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
|
total_size = current_size
|
||||||
|
|
||||||
storage_attachments.each do |attachment|
|
storage_attachments.each do |attachment|
|
||||||
@@ -191,7 +199,8 @@ class SubmitterMailer < ApplicationMailer
|
|||||||
|
|
||||||
break if total_size >= MAX_ATTACHMENTS_SIZE
|
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
|
end
|
||||||
|
|
||||||
total_size
|
total_size
|
||||||
|
|||||||
@@ -116,4 +116,19 @@ module Submitters
|
|||||||
acc && submitter.submission.submitters.find { |e| e.uuid == item['uuid'] }&.completed_at?
|
acc && submitter.submission.submitters.find { |e| e.uuid == item['uuid'] }&.completed_at?
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user