diff --git a/app/mailers/submitter_mailer.rb b/app/mailers/submitter_mailer.rb index 7faeb454..5c6af4f8 100644 --- a/app/mailers/submitter_mailer.rb +++ b/app/mailers/submitter_mailer.rb @@ -18,6 +18,7 @@ class SubmitterMailer < ApplicationMailer end mail(to: @submitter.email, + from: from_address_for_submitter(submitter), subject:, reply_to: submitter.submission.created_by_user&.friendly_name) end @@ -27,8 +28,18 @@ class SubmitterMailer < ApplicationMailer @submitter = submitter @user = user - mail(to: user.email, - subject: %(#{submitter.email} has completed the "#{submitter.submission.template.name}" form)) + @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY) + + subject = + if @email_config + ReplaceEmailVariables.call(@email_config.value['subject'], submitter:) + else + %(#{submitter.email} has completed the "#{submitter.submission.template.name}" form) + end + + mail(from: from_address_for_submitter(submitter), + to: user.email, + subject:) end def documents_copy_email(submitter) @@ -43,6 +54,23 @@ class SubmitterMailer < ApplicationMailer attachments[attachment.filename.to_s] = attachment.download end - mail(to: submitter.email, subject: 'Your copy of documents') + @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 copy of documents' + end + + mail(from: from_address_for_submitter(submitter), + to: submitter.email, + subject:) + end + + private + + def from_address_for_submitter(submitter) + submitter.submission.created_by_user&.friendly_name || submitter.submission.template.author.friendly_name end end diff --git a/app/models/account_config.rb b/app/models/account_config.rb index 44e5fa32..39752a09 100644 --- a/app/models/account_config.rb +++ b/app/models/account_config.rb @@ -22,6 +22,8 @@ # class AccountConfig < ApplicationRecord SUBMITTER_INVITATION_EMAIL_KEY = 'submitter_invitation_email' + SUBMITTER_COMPLETED_EMAIL_KEY = 'submitter_completed_email' + SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY = 'submitter_documents_copy_email' DEFAULT_VALUES = { SUBMITTER_INVITATION_EMAIL_KEY => { @@ -32,6 +34,23 @@ class AccountConfig < ApplicationRecord "Please contact us by replying to this email if you didn't request this.\n\n" \ "Thanks,\n" \ '{{account.name}}' + }, + SUBMITTER_COMPLETED_EMAIL_KEY => { + 'subject' => '{{submitter.email}} has completed the "{{template.name}}" form', + 'body' => "Hi,\n\n" \ + "{{submitter.email}} has completed the \"{{template.name}}\" form:\n\n" \ + "{{submission.link}}\n\n" \ + "Thanks,\n" \ + '{{account.name}}' + }, + SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY => { + 'subject' => 'Your copy of documents', + 'body' => "Hi there,\n\n" \ + "Please check the copy of your \"{{template.name}}\" submission in the email attachments.\n" \ + "Alternatively, you can download the copy using:\n\n" \ + "{{documents.links}}\n\n" \ + "Thanks,\n" \ + '{{account.name}}' } }.freeze diff --git a/app/views/personalization_settings/show.html.erb b/app/views/personalization_settings/show.html.erb index 4af1a826..73cb2140 100644 --- a/app/views/personalization_settings/show.html.erb +++ b/app/views/personalization_settings/show.html.erb @@ -1,25 +1,91 @@
<%= render 'shared/settings_nav' %>
-

Signature Request Email

- <%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %> - <%= f.hidden_field :key %> - <%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %> -
- <%= ff.label :subject, class: 'label' %> - <%= ff.text_field :subject, required: true, class: 'base-input' %> +

Email Templates

+
+ +
+
+ Signature Request Email
-
- <%= ff.label :body, class: 'label' %> - - <%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %> - +
+
+ <%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %> + <%= f.hidden_field :key %> + <%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %> +
+ <%= ff.label :subject, class: 'label' %> + <%= ff.text_field :subject, required: true, class: 'base-input' %> +
+
+ <%= ff.label :body, class: 'label' %> + + <%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %> + +
+ <% end %> +
+ <%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %> +
+ <% end %> +
+
+
+ +
+
+ Form Completed Email +
+
+
+ <%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %> + <%= f.hidden_field :key %> + <%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %> +
+ <%= ff.label :subject, class: 'label' %> + <%= ff.text_field :subject, required: true, class: 'base-input' %> +
+
+ <%= ff.label :body, class: 'label' %> + + <%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %> + +
+ <% end %> +
+ <%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %> +
+ <% end %> +
+
+
+ +
+
+ Documents Copy Email
- <% end %> -
- <%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %>
- <% end %> +
+ <%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %> + <%= f.hidden_field :key %> + <%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %> +
+ <%= ff.label :subject, class: 'label' %> + <%= ff.text_field :subject, required: true, class: 'base-input' %> +
+
+ <%= ff.label :body, class: 'label' %> + + <%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %> + +
+ <% end %> +
+ <%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %> +
+ <% end %> +
+

Company Logo

<%= render 'logo_form' %>
diff --git a/app/views/submitter_mailer/completed_email.html.erb b/app/views/submitter_mailer/completed_email.html.erb index 71d7ade3..b916b8b1 100644 --- a/app/views/submitter_mailer/completed_email.html.erb +++ b/app/views/submitter_mailer/completed_email.html.erb @@ -1,3 +1,7 @@ -

Hi <%= @user.first_name %>,

-

<%= @submitter.email %> has completed the "<%= @submitter.submission.template.name %>" form.

-

<%= link_to 'View Submission', submission_url(@submitter.submission) %>

+<% if @email_config %> + <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@email_config.value['body'], submitter: @submitter)))) %> +<% else %> +

Hi <%= @user.first_name %>,

+

<%= @submitter.email %> has completed the "<%= @submitter.submission.template.name %>" form.

+

<%= link_to 'View Submission', submission_url(@submitter.submission) %>

+<% end %> diff --git a/app/views/submitter_mailer/documents_copy_email.html.erb b/app/views/submitter_mailer/documents_copy_email.html.erb index e669a3e3..adf633da 100644 --- a/app/views/submitter_mailer/documents_copy_email.html.erb +++ b/app/views/submitter_mailer/documents_copy_email.html.erb @@ -1,13 +1,17 @@ -

Hi there,

-

Please check the copy of your "<%= @submitter.submission.template.name %>" submission in the email attachments.

-

Alternatively, you can download the copy using:

-<% @documents.each do |document| %> -
    -
  • - <%= link_to document.filename.to_s, rails_blob_url(document) %> -
  • -
+<% if @email_config %> + <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@email_config.value['body'], submitter: @submitter)))) %> +<% else %> +

Hi there,

+

Please check the copy of your "<%= @submitter.submission.template.name %>" submission in the email attachments.

+

Alternatively, you can download the copy using:

+ <% @documents.each do |document| %> +
    +
  • + <%= link_to document.filename.to_s, rails_blob_url(document) %> +
  • +
+ <% end %> +

+ Thanks,
<%= @current_account.name %> +

<% end %> -

- Thanks,
<%= @current_account.name %> -

diff --git a/lib/replace_email_variables.rb b/lib/replace_email_variables.rb index 1d2d000b..eba1ac71 100644 --- a/lib/replace_email_variables.rb +++ b/lib/replace_email_variables.rb @@ -4,18 +4,40 @@ module ReplaceEmailVariables TEMAPLTE_NAME = '{{template.name}}' SUBMITTER_LINK = '{{submitter.link}}' ACCOUNT_NAME = '{{account.name}}' + SUBMITTER_EMAIL = '{{submitter.email}}' + SUBMISSION_LINK = '{{submission.link}}' + DOCUMENTS_LINKS = '{{documents.links}}' module_function def call(text, submitter:) - link = + submitter_link = Rails.application.routes.url_helpers.submit_form_url( slug: submitter.slug, **Docuseal.default_url_options ) + submission_link = + Rails.application.routes.url_helpers.submission_url( + submitter.submission, **Docuseal.default_url_options + ) + text = text.gsub(TEMAPLTE_NAME, submitter.template.name) - text = text.gsub(SUBMITTER_LINK, link) + text = text.gsub(SUBMITTER_EMAIL, submitter.email) + text = text.gsub(SUBMITTER_LINK, submitter_link) + text = text.gsub(SUBMISSION_LINK, submission_link) + text = text.gsub(DOCUMENTS_LINKS, build_documents_links_text(submitter)) text.gsub(ACCOUNT_NAME, submitter.template.account.name) end + + def build_documents_links_text(submitter) + submitter.documents.map do |document| + link = + Rails.application.routes.url_helpers.rails_blob_url( + document, **Docuseal.default_url_options + ) + + "#{link}\n" + end.join + end end