mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							106 lines
						
					
					
						
							3.2 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
class SubmitterMailer < ApplicationMailer
 | 
						|
  MAX_ATTACHMENTS_SIZE = 10.megabytes
 | 
						|
 | 
						|
  def invitation_email(submitter, body: nil, subject: nil)
 | 
						|
    @current_account = submitter.submission.template.account
 | 
						|
    @submitter = submitter
 | 
						|
    @body = body.presence
 | 
						|
 | 
						|
    @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY)
 | 
						|
 | 
						|
    subject =
 | 
						|
      if @email_config || subject.present?
 | 
						|
        ReplaceEmailVariables.call(subject.presence || @email_config.value['subject'], submitter:)
 | 
						|
      else
 | 
						|
        'You are invited to submit a form'
 | 
						|
      end
 | 
						|
 | 
						|
    mail(to: @submitter.friendly_name,
 | 
						|
         from: from_address_for_submitter(submitter),
 | 
						|
         subject:,
 | 
						|
         reply_to: (submitter.submission.created_by_user || submitter.template.author)&.friendly_name)
 | 
						|
  end
 | 
						|
 | 
						|
  def completed_email(submitter, user, bcc: nil)
 | 
						|
    @current_account = submitter.submission.template.account
 | 
						|
    @submitter = submitter
 | 
						|
    @submission = submitter.submission
 | 
						|
    @user = user
 | 
						|
 | 
						|
    Submissions::EnsureResultGenerated.call(submitter)
 | 
						|
 | 
						|
    @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY)
 | 
						|
 | 
						|
    add_completed_email_attachments!(submitter)
 | 
						|
 | 
						|
    subject =
 | 
						|
      if @email_config
 | 
						|
        ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
 | 
						|
      else
 | 
						|
        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})
 | 
						|
      end
 | 
						|
 | 
						|
    mail(from: from_address_for_submitter(submitter),
 | 
						|
         to: user.friendly_name,
 | 
						|
         bcc:,
 | 
						|
         subject:)
 | 
						|
  end
 | 
						|
 | 
						|
  def documents_copy_email(submitter, to: nil)
 | 
						|
    @current_account = submitter.submission.template.account
 | 
						|
    @submitter = submitter
 | 
						|
 | 
						|
    Submissions::EnsureResultGenerated.call(@submitter)
 | 
						|
 | 
						|
    @documents = add_completed_email_attachments!(submitter)
 | 
						|
 | 
						|
    @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY)
 | 
						|
 | 
						|
    subject =
 | 
						|
      if @email_config
 | 
						|
        ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
 | 
						|
      else
 | 
						|
        'Your document copy'
 | 
						|
      end
 | 
						|
 | 
						|
    mail(from: from_address_for_submitter(submitter),
 | 
						|
         to: to || @submitter.friendly_name,
 | 
						|
         subject:)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def add_completed_email_attachments!(submitter)
 | 
						|
    documents = Submitters.select_attachments_for_download(submitter)
 | 
						|
 | 
						|
    total_size = 0
 | 
						|
    audit_trail_data = nil
 | 
						|
 | 
						|
    if submitter.submission.audit_trail.present?
 | 
						|
      audit_trail_data = submitter.submission.audit_trail.download
 | 
						|
 | 
						|
      total_size = audit_trail_data.size
 | 
						|
    end
 | 
						|
 | 
						|
    documents.each do |attachment|
 | 
						|
      total_size += attachment.byte_size
 | 
						|
 | 
						|
      break if total_size >= MAX_ATTACHMENTS_SIZE
 | 
						|
 | 
						|
      attachments[attachment.filename.to_s] = attachment.download
 | 
						|
    end
 | 
						|
 | 
						|
    attachments[submitter.submission.audit_trail.filename.to_s] = audit_trail_data if audit_trail_data
 | 
						|
 | 
						|
    documents
 | 
						|
  end
 | 
						|
 | 
						|
  def from_address_for_submitter(submitter)
 | 
						|
    submitter.submission.created_by_user&.friendly_name || submitter.submission.template.author.friendly_name
 | 
						|
  end
 | 
						|
end
 |