ensure unique recipients

pull/475/head
Pete Matsyburka 7 months ago
parent 6adcc87b2b
commit 858b2f33fd

@ -57,6 +57,11 @@ class SubmissionsController < ApplicationController
Submissions.send_signature_requests(submissions) Submissions.send_signature_requests(submissions)
redirect_to template_path(@template), notice: I18n.t('new_recipients_have_been_added') redirect_to template_path(@template), notice: I18n.t('new_recipients_have_been_added')
rescue Submissions::CreateFromSubmitters::BaseError => e
render turbo_stream: turbo_stream.replace(:submitters_error,
partial: 'submissions/error',
locals: { error: e.message }),
status: :unprocessable_entity
end end
def destroy def destroy

@ -24,7 +24,7 @@ class TemplatesPreferencesController < ApplicationController
documents_copy_email_enabled documents_copy_email_attach_audit documents_copy_email_enabled documents_copy_email_attach_audit
documents_copy_email_attach_documents documents_copy_email_reply_to documents_copy_email_attach_documents documents_copy_email_reply_to
completed_notification_email_attach_documents completed_notification_email_attach_documents
completed_redirect_url completed_redirect_url validate_unique_submitters
submitters_order require_phone_2fa submitters_order require_phone_2fa
completed_notification_email_subject completed_notification_email_body completed_notification_email_subject completed_notification_email_body
completed_notification_email_enabled completed_notification_email_attach_audit] + completed_notification_email_enabled completed_notification_email_attach_audit] +

@ -0,0 +1,7 @@
<div id="submitters_error">
<% if local_assigns[:error] %>
<div class="text-center text-red-500">
<%= local_assigns[:error] %>
</div>
<% end %>
</div>

@ -28,6 +28,7 @@
<div id="list" class="hidden"> <div id="list" class="hidden">
<%= render 'list_form', template: @template %> <%= render 'list_form', template: @template %>
</div> </div>
<%= render 'submissions/error' %>
</div> </div>
<%= content_for(:modal_extra) %> <%= content_for(:modal_extra) %>
<% end %> <% end %>

@ -335,6 +335,18 @@
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<% if can?(:manage, :personalization_advanced) %>
<%= form_for @template, url: template_preferences_path(@template), method: :post, html: { autocomplete: 'off', class: 'mt-2' }, data: { close_on_submit: false } do |f| %>
<div class="flex items-center mt-4 justify-between w-full">
<span>
<%= t('ensure_unique_recipients') %>
</span>
<%= f.fields_for :preferences, Struct.new(:validate_unique_submitters).new(@template.preferences['validate_unique_submitters']) do |ff| %>
<%= ff.check_box :validate_unique_submitters, { class: 'toggle', onchange: 'this.form.requestSubmit()' }, 'true', '' %>
<% end %>
</div>
<% end %>
<% end %>
<div class="form-control mt-5 pb-2"> <div class="form-control mt-5 pb-2">
<%= button_tag button_title(title: t('save'), disabled_with: t('updating')), class: 'base-button', form: :submitters_form %> <%= button_tag button_title(title: t('save'), disabled_with: t('updating')), class: 'base-button', form: :submitters_form %>
</div> </div>

@ -22,6 +22,7 @@ en: &en
thanks: Thanks thanks: Thanks
bcc_recipients: BCC recipients bcc_recipients: BCC recipients
always_enforce_signing_order: Always enforce the signing order always_enforce_signing_order: Always enforce the signing order
ensure_unique_recipients: Ensure unique recipients
edit_per_party: Edit per party edit_per_party: Edit per party
reply_to: Reply to reply_to: Reply to
pending_by_me: Pending by me pending_by_me: Pending by me
@ -795,6 +796,7 @@ en: &en
read: Read your data read: Read your data
es: &es es: &es
ensure_unique_recipients: Asegurar destinatarios únicos
require_phone_2fa_to_open: Requiere 2FA por teléfono para abrir require_phone_2fa_to_open: Requiere 2FA por teléfono para abrir
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: El remitente ha solicitado una autenticación de dos factores mediante una contraseña de un solo uso enviada a su número de teléfono <b>%{phone}</b>. the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: El remitente ha solicitado una autenticación de dos factores mediante una contraseña de un solo uso enviada a su número de teléfono <b>%{phone}</b>.
send_verification_code: Enviar código de verificación send_verification_code: Enviar código de verificación
@ -1572,6 +1574,7 @@ es: &es
read: Leer tus datos read: Leer tus datos
it: &it it: &it
ensure_unique_recipients: Assicurarsi destinatari unici
require_phone_2fa_to_open: Richiedi l'autenticazione a due fattori tramite telefono per aprire require_phone_2fa_to_open: Richiedi l'autenticazione a due fattori tramite telefono per aprire
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: Il mittente ha richiesto un'autenticazione a due fattori tramite una password monouso inviata al tuo numero di telefono <b>%{phone}</b>. the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: Il mittente ha richiesto un'autenticazione a due fattori tramite una password monouso inviata al tuo numero di telefono <b>%{phone}</b>.
send_verification_code: Invia codice di verifica send_verification_code: Invia codice di verifica
@ -2348,6 +2351,7 @@ it: &it
read: Leggi i tuoi dati read: Leggi i tuoi dati
fr: &fr fr: &fr
ensure_unique_recipients: Assurer l'unicité des destinataires
require_phone_2fa_to_open: Requiert une 2FA par téléphone pour ouvrir require_phone_2fa_to_open: Requiert une 2FA par téléphone pour ouvrir
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: L'expéditeur a demandé une authentification à deux facteurs via un mot de passe à usage unique envoyé à votre numéro de téléphone <b>%{phone}</b>. the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: L'expéditeur a demandé une authentification à deux facteurs via un mot de passe à usage unique envoyé à votre numéro de téléphone <b>%{phone}</b>.
send_verification_code: Envoyer le code de vérification send_verification_code: Envoyer le code de vérification
@ -3126,6 +3130,7 @@ fr: &fr
read: Lire vos données read: Lire vos données
pt: &pt pt: &pt
ensure_unique_recipients: Garantir destinatários únicos
require_phone_2fa_to_open: Necessário autenticação de dois fatores via telefone para abrir require_phone_2fa_to_open: Necessário autenticação de dois fatores via telefone para abrir
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: O remetente solicitou uma autenticação de dois fatores via senha de uso único enviada para seu número <b>%{phone}</b>. the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: O remetente solicitou uma autenticação de dois fatores via senha de uso único enviada para seu número <b>%{phone}</b>.
send_verification_code: Enviar código de verificação send_verification_code: Enviar código de verificação
@ -3904,6 +3909,7 @@ pt: &pt
read: Ler seus dados read: Ler seus dados
de: &de de: &de
ensure_unique_recipients: Stellen Sie einzigartige Empfänger sicher
require_phone_2fa_to_open: Telefon-2FA zum Öffnen erforderlich require_phone_2fa_to_open: Telefon-2FA zum Öffnen erforderlich
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: Der Absender hat eine Zwei-Faktor-Authentifizierung per Einmalpasswort angefordert, das an Ihre <b>%{phone}</b>-Telefonnummer gesendet wurde. the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: Der Absender hat eine Zwei-Faktor-Authentifizierung per Einmalpasswort angefordert, das an Ihre <b>%{phone}</b>-Telefonnummer gesendet wurde.
send_verification_code: Bestätigungscode senden send_verification_code: Bestätigungscode senden

@ -65,6 +65,12 @@ module Submissions
raise BaseError, 'Defined more signing parties than in template' raise BaseError, 'Defined more signing parties than in template'
end end
if template.preferences['validate_unique_submitters'] == true
submission_emails = submission.submitters.filter_map(&:email)
raise BaseError, 'Recipient emails should differ' if submission_emails.uniq.size != submission_emails.size
end
next if submission.submitters.blank? next if submission.submitters.blank?
maybe_add_invite_submitters(submission, template) maybe_add_invite_submitters(submission, template)

Loading…
Cancel
Save