add filename format option
This commit is contained in:
@@ -17,7 +17,8 @@ class AccountConfigsController < ApplicationController
|
|||||||
AccountConfig::FLATTEN_RESULT_PDF_KEY,
|
AccountConfig::FLATTEN_RESULT_PDF_KEY,
|
||||||
AccountConfig::WITH_SIGNATURE_ID,
|
AccountConfig::WITH_SIGNATURE_ID,
|
||||||
AccountConfig::COMBINE_PDF_RESULT_KEY,
|
AccountConfig::COMBINE_PDF_RESULT_KEY,
|
||||||
AccountConfig::REQUIRE_SIGNING_REASON_KEY
|
AccountConfig::REQUIRE_SIGNING_REASON_KEY,
|
||||||
|
AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY
|
||||||
].freeze
|
].freeze
|
||||||
|
|
||||||
InvalidKey = Class.new(StandardError)
|
InvalidKey = Class.new(StandardError)
|
||||||
|
|||||||
@@ -53,8 +53,13 @@ class SubmissionsDownloadController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def build_urls(submitter)
|
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|
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -65,6 +70,26 @@ class SubmissionsDownloadController < ApplicationController
|
|||||||
attachment = submitter.submission.combined_document_attachment
|
attachment = submitter.submission.combined_document_attachment
|
||||||
attachment ||= Submissions::GenerateCombinedAttachment.call(submitter)
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class AccountConfig < ApplicationRecord
|
|||||||
REQUIRE_SIGNING_REASON_KEY = 'require_signing_reason'
|
REQUIRE_SIGNING_REASON_KEY = 'require_signing_reason'
|
||||||
REUSE_SIGNATURE_KEY = 'reuse_signature'
|
REUSE_SIGNATURE_KEY = 'reuse_signature'
|
||||||
COMBINE_PDF_RESULT_KEY = 'combine_pdf_result_key'
|
COMBINE_PDF_RESULT_KEY = 'combine_pdf_result_key'
|
||||||
|
DOCUMENT_FILENAME_FORMAT_KEY = 'document_filename_format'
|
||||||
|
|
||||||
DEFAULT_VALUES = {
|
DEFAULT_VALUES = {
|
||||||
SUBMITTER_INVITATION_EMAIL_KEY => lambda {
|
SUBMITTER_INVITATION_EMAIL_KEY => lambda {
|
||||||
|
|||||||
@@ -164,6 +164,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% 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 %>
|
||||||
|
<div class="py-2.5">
|
||||||
|
<span>
|
||||||
|
<%= t('document_download_filename_format') %>
|
||||||
|
</span>
|
||||||
|
<div class="mt-3">
|
||||||
|
<%= f.select :value, [["#{I18n.t('document_name')}.pdf", '{document.name}'], ["#{I18n.t('document_name')} - name@domain.com.pdf", '{document.name} - {submission.submitters}'], ["#{I18n.t('document_name')} - name@domain.com - #{I18n.l(Time.current.beginning_of_year.in_time_zone(current_account.timezone), format: :short)}.pdf", '{document.name} - {submission.submitters} - {submission.completed_at}']], {}, class: 'base-select', onchange: 'this.form.requestSubmit()' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ end
|
|||||||
ActiveSupport.on_load(:active_storage_blob) do
|
ActiveSupport.on_load(:active_storage_blob) do
|
||||||
attribute :uuid, :string, default: -> { SecureRandom.uuid }
|
attribute :uuid, :string, default: -> { SecureRandom.uuid }
|
||||||
|
|
||||||
def self.proxy_url(blob, expires_at: nil)
|
def self.proxy_url(blob, expires_at: nil, filename: nil)
|
||||||
Rails.application.routes.url_helpers.blobs_proxy_url(
|
Rails.application.routes.url_helpers.blobs_proxy_url(
|
||||||
signed_uuid: blob.signed_uuid(expires_at:), filename: blob.filename,
|
signed_uuid: blob.signed_uuid(expires_at:), filename: filename || blob.filename,
|
||||||
**Docuseal.default_url_options
|
**Docuseal.default_url_options
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ en: &en
|
|||||||
thanks: Thanks
|
thanks: Thanks
|
||||||
unarchive: Unarchive
|
unarchive: Unarchive
|
||||||
first_party: 'First Party'
|
first_party: 'First Party'
|
||||||
|
document_download_filename_format: Document download filename format
|
||||||
|
document_name: Document Name
|
||||||
docuseal_trusted_signature: DocuSeal Trusted Signature
|
docuseal_trusted_signature: DocuSeal Trusted Signature
|
||||||
hello_name: Hello %{name}
|
hello_name: Hello %{name}
|
||||||
you_are_invited_to_product_name: You are invited to %{product_name}
|
you_are_invited_to_product_name: You are invited to %{product_name}
|
||||||
@@ -667,6 +669,8 @@ en: &en
|
|||||||
read: Read your data
|
read: Read your data
|
||||||
|
|
||||||
es: &es
|
es: &es
|
||||||
|
document_download_filename_format: Formato del nombre del archivo de descarga del documento
|
||||||
|
document_name: Nombre del documento
|
||||||
unarchive: Desarchivar
|
unarchive: Desarchivar
|
||||||
awaiting_completion_by_the_other_party: "Esperando la finalización por la otra parte"
|
awaiting_completion_by_the_other_party: "Esperando la finalización por la otra parte"
|
||||||
enforce_recipients_order: 'Hacer cumplir el orden de los destinatarios'
|
enforce_recipients_order: 'Hacer cumplir el orden de los destinatarios'
|
||||||
@@ -1316,6 +1320,8 @@ es: &es
|
|||||||
read: Leer tus datos
|
read: Leer tus datos
|
||||||
|
|
||||||
it: &it
|
it: &it
|
||||||
|
document_download_filename_format: Formato del nome file scaricato
|
||||||
|
document_name: Nome del Documento
|
||||||
unarchive: Ripristina
|
unarchive: Ripristina
|
||||||
awaiting_completion_by_the_other_party: "In attesa di completamento da parte dell'altra parte"
|
awaiting_completion_by_the_other_party: "In attesa di completamento da parte dell'altra parte"
|
||||||
enforce_recipients_order: Aplicar el orden de los destinatarios
|
enforce_recipients_order: Aplicar el orden de los destinatarios
|
||||||
@@ -1965,6 +1971,8 @@ it: &it
|
|||||||
read: Leggi i tuoi dati
|
read: Leggi i tuoi dati
|
||||||
|
|
||||||
fr: &fr
|
fr: &fr
|
||||||
|
document_download_filename_format: Format du nom de fichier du téléchargement de document
|
||||||
|
document_name: Nom du document
|
||||||
unarchive: Désarchiver
|
unarchive: Désarchiver
|
||||||
awaiting_completion_by_the_other_party: "En attente de la complétion par l'autre partie"
|
awaiting_completion_by_the_other_party: "En attente de la complétion par l'autre partie"
|
||||||
enforce_recipients_order: "Respecter l'ordre des destinataires"
|
enforce_recipients_order: "Respecter l'ordre des destinataires"
|
||||||
@@ -2615,6 +2623,8 @@ fr: &fr
|
|||||||
read: Lire vos données
|
read: Lire vos données
|
||||||
|
|
||||||
pt: &pt
|
pt: &pt
|
||||||
|
document_download_filename_format: Formato do nome do arquivo de download do documento
|
||||||
|
document_name: Nome do documento
|
||||||
unarchive: Desarquivar
|
unarchive: Desarquivar
|
||||||
awaiting_completion_by_the_other_party: "Aguardando a conclusão pela outra parte"
|
awaiting_completion_by_the_other_party: "Aguardando a conclusão pela outra parte"
|
||||||
enforce_recipients_order: 'Forçar a ordem dos recipientes'
|
enforce_recipients_order: 'Forçar a ordem dos recipientes'
|
||||||
@@ -3264,6 +3274,8 @@ pt: &pt
|
|||||||
read: Ler seus dados
|
read: Ler seus dados
|
||||||
|
|
||||||
de: &de
|
de: &de
|
||||||
|
document_download_filename_format: Format des Dateinamens beim Herunterladen von Dokumenten
|
||||||
|
document_name: Dokumentname
|
||||||
unarchive: Wiederherstellen
|
unarchive: Wiederherstellen
|
||||||
awaiting_completion_by_the_other_party: "Warten auf die Fertigstellung durch die andere Partei"
|
awaiting_completion_by_the_other_party: "Warten auf die Fertigstellung durch die andere Partei"
|
||||||
enforce_recipients_order: 'Empfängerreihenfolge durchsetzen'
|
enforce_recipients_order: 'Empfängerreihenfolge durchsetzen'
|
||||||
|
|||||||
Reference in New Issue
Block a user