Files
docuseal/app/mailers/submitter_mailer.rb
T

114 lines
3.5 KiB
Ruby
Raw Normal View History

2023-06-13 00:29:07 +03:00
# frozen_string_literal: true
class SubmitterMailer < ApplicationMailer
2023-10-22 01:54:20 +03:00
MAX_ATTACHMENTS_SIZE = 10.megabytes
2023-11-23 20:03:52 +02:00
DEFAULT_INVITATION_SUBJECT = 'You are invited to submit a form'
def invitation_email(submitter)
2023-08-16 22:57:59 +03:00
@current_account = submitter.submission.template.account
2023-06-13 00:29:07 +03:00
@submitter = submitter
2023-11-23 20:03:52 +02:00
if submitter.preferences['email_message_uuid']
@email_message = submitter.account.email_messages.find_by(uuid: submitter.preferences['email_message_uuid'])
end
@body = @email_message&.body.presence
@subject = @email_message&.subject.presence
2023-06-13 00:29:07 +03:00
2023-11-17 18:47:04 +02:00
@email_config = AccountConfigs.find_for_account(@current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY)
2023-08-16 22:57:59 +03:00
subject =
2023-11-23 20:03:52 +02:00
if @email_config || @subject
ReplaceEmailVariables.call(@subject || @email_config.value['subject'], submitter:)
2023-08-16 22:57:59 +03:00
else
2023-11-23 20:03:52 +02:00
DEFAULT_INVITATION_SUBJECT
2023-08-16 22:57:59 +03:00
end
mail(to: @submitter.friendly_name,
2023-08-20 00:10:54 +03:00
from: from_address_for_submitter(submitter),
2023-08-16 22:57:59 +03:00
subject:,
reply_to: (submitter.submission.created_by_user || submitter.template.author)&.friendly_name)
2023-06-13 00:29:07 +03:00
end
def completed_email(submitter, user, bcc: nil)
2023-08-16 22:57:59 +03:00
@current_account = submitter.submission.template.account
2023-06-13 00:29:07 +03:00
@submitter = submitter
@submission = submitter.submission
2023-06-26 00:46:01 +03:00
@user = user
2023-06-13 00:29:07 +03:00
Submissions::EnsureResultGenerated.call(submitter)
2023-11-17 18:47:04 +02:00
@email_config = AccountConfigs.find_for_account(@current_account, AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY)
2023-08-20 00:10:54 +03:00
2023-09-10 19:25:57 +03:00
add_completed_email_attachments!(submitter)
2023-08-20 00:10:54 +03:00
subject =
if @email_config
ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
else
2023-09-09 23:14:15 +03:00
submitters = submitter.submission.submitters.order(:completed_at)
.map { |e| e.name || e.email || e.phone }.join(', ')
%(#{submitter.submission.template.name} has been completed by #{submitters})
2023-08-20 00:10:54 +03:00
end
mail(from: from_address_for_submitter(submitter),
to: user.friendly_name,
bcc:,
2023-08-20 00:10:54 +03:00
subject:)
2023-06-26 00:46:01 +03:00
end
def documents_copy_email(submitter, to: nil)
2023-08-16 22:57:59 +03:00
@current_account = submitter.submission.template.account
2023-06-26 00:46:01 +03:00
@submitter = submitter
2023-07-01 13:16:07 +03:00
Submissions::EnsureResultGenerated.call(@submitter)
2023-09-10 19:25:57 +03:00
@documents = add_completed_email_attachments!(submitter)
2023-06-26 00:46:01 +03:00
2023-11-17 18:47:04 +02:00
@email_config = AccountConfigs.find_for_account(@current_account, AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY)
2023-08-20 00:10:54 +03:00
subject =
if @email_config
ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
else
2023-10-12 22:42:14 +03:00
'Your document copy'
2023-08-20 00:10:54 +03:00
end
mail(from: from_address_for_submitter(submitter),
to: to || @submitter.friendly_name,
2023-08-20 00:10:54 +03:00
subject:)
end
private
2023-09-10 19:25:57 +03:00
def add_completed_email_attachments!(submitter)
documents = Submitters.select_attachments_for_download(submitter)
2023-10-22 01:54:20 +03:00
total_size = 0
audit_trail_data = nil
2023-09-10 19:25:57 +03:00
if submitter.submission.audit_trail.present?
2023-10-22 01:54:20 +03:00
audit_trail_data = submitter.submission.audit_trail.download
total_size = audit_trail_data.size
end
documents.each do |attachment|
2023-10-23 22:45:34 +03:00
total_size += attachment.byte_size
2023-10-22 01:54:20 +03:00
break if total_size >= MAX_ATTACHMENTS_SIZE
2023-10-23 22:45:34 +03:00
attachments[attachment.filename.to_s] = attachment.download
2023-09-10 19:25:57 +03:00
end
2023-10-22 01:54:20 +03:00
attachments[submitter.submission.audit_trail.filename.to_s] = audit_trail_data if audit_trail_data
2023-09-10 19:25:57 +03:00
documents
end
2023-08-20 00:10:54 +03:00
def from_address_for_submitter(submitter)
submitter.submission.created_by_user&.friendly_name || submitter.submission.template.author.friendly_name
2023-06-13 00:29:07 +03:00
end
end