feat: add 'Correct signature' button to reset a signer and re-request signature

Adds an admin-only 'Correct signature' button on completed submitters in the
submission view. It clears the submitter's existing signature (documents,
attachments and field values), reopens their form, and re-sends the invitation
email so they can sign again — useful when a signature was made incorrectly.

- New SubmittersResetSignatureController#update (authorized via :update)
- New route: resources :submitters_reset_signature, only: [:update]
- Button in submissions/show.html.erb for completed submitters (with confirm)
- EN/ES i18n strings

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pull/716/head
Victor - Dev 1 month ago
parent 004a22c1c8
commit 2e0f3da247

@ -0,0 +1,30 @@
# frozen_string_literal: true
class SubmittersResetSignatureController < ApplicationController
load_and_authorize_resource :submitter, parent: false
def update
authorize!(:update, @submitter)
if @submitter.completed_at.blank?
return redirect_back(fallback_location: submission_path(@submitter.submission),
alert: I18n.t('signature_has_not_been_completed_yet'))
end
# Remove the previously generated signature artifacts.
@submitter.documents.purge
@submitter.attachments.purge
@submitter.preview_documents.purge
# Re-open the submitter's form so they can sign again from scratch.
@submitter.update!(completed_at: nil, opened_at: nil, declined_at: nil, values: {})
# Email the signer a fresh invitation to correct their signature.
SendSubmitterInvitationEmailJob.perform_async('submitter_id' => @submitter.id)
@submitter.update!(sent_at: Time.current)
redirect_back(fallback_location: submission_path(@submitter.submission),
notice: I18n.t('correction_request_has_been_sent'))
end
end

@ -283,6 +283,11 @@
<%= button_to t('resubmit'), submitters_resubmit_path(submitter), method: :put, class: 'btn btn-sm btn-primary w-full', form: { target: '_blank' }, data: { turbo: false } %> <%= button_to t('resubmit'), submitters_resubmit_path(submitter), method: :put, class: 'btn btn-sm btn-primary w-full', form: { target: '_blank' }, data: { turbo: false } %>
</div> </div>
<% end %> <% end %>
<% if signed_in? && submitter && submitter.completed_at? && !@submission.archived_at? && !@submission.template&.archived_at? && can?(:update, @submission) && (Docuseal.multitenant? || Accounts.can_send_emails?(current_account)) && !@submission.expired? %>
<div class="mt-2 mb-1">
<%= button_to t('correct_signature'), submitters_reset_signature_path(submitter), method: :put, class: 'btn btn-sm btn-outline w-full', data: { turbo_confirm: t('are_you_sure_you_want_to_reset_this_signature') } %>
</div>
<% end %>
</div> </div>
</div> </div>
<div class="px-1.5 mb-4"> <div class="px-1.5 mb-4">

@ -195,6 +195,10 @@ en: &en
send_copy_to_email: Send copy to Email send_copy_to_email: Send copy to Email
sending: Sending sending: Sending
resubmit: Resubmit resubmit: Resubmit
correct_signature: Correct Signature
correction_request_has_been_sent: A request to correct the signature has been emailed to the signer.
signature_has_not_been_completed_yet: This signature has not been completed yet.
are_you_sure_you_want_to_reset_this_signature: This will delete the signer's current signature and email them to sign again. Continue?
form_has_been_deleted_by_html: 'Form has been deleted by <span class="font-semibold">%{name}</span>.' form_has_been_deleted_by_html: 'Form has been deleted by <span class="font-semibold">%{name}</span>.'
or: or or: or
download_documents: Download documents download_documents: Download documents
@ -1512,6 +1516,10 @@ es: &es
microsoft_account_has_been_connected: La cuenta de Microsoft ha sido conectada. microsoft_account_has_been_connected: La cuenta de Microsoft ha sido conectada.
but_not_activated: pero no activado but_not_activated: pero no activado
email_has_been_sent: El correo ha sido enviado. email_has_been_sent: El correo ha sido enviado.
correct_signature: Corregir firma
correction_request_has_been_sent: Se envió al firmante un correo para corregir su firma.
signature_has_not_been_completed_yet: Esta firma aún no ha sido completada.
are_you_sure_you_want_to_reset_this_signature: Esto eliminará la firma actual del firmante y le enviará un correo para firmar de nuevo. ¿Continuar?
email_has_been_sent_already: El correo ya ha sido enviado. email_has_been_sent_already: El correo ya ha sido enviado.
initial_setup: Configuración inicial initial_setup: Configuración inicial
demo_environment: Entorno de demostración demo_environment: Entorno de demostración

@ -82,6 +82,7 @@ Rails.application.routes.draw do
resources :testing_api_settings, only: %i[index] resources :testing_api_settings, only: %i[index]
resources :submitters_autocomplete, only: %i[index] resources :submitters_autocomplete, only: %i[index]
resources :submitters_resubmit, only: %i[update] resources :submitters_resubmit, only: %i[update]
resources :submitters_reset_signature, only: %i[update]
resources :template_folders_autocomplete, only: %i[index] resources :template_folders_autocomplete, only: %i[index]
resources :webhook_secret, only: %i[show update] resources :webhook_secret, only: %i[show update]
resources :webhook_hmac, only: %i[show] resources :webhook_hmac, only: %i[show]

Loading…
Cancel
Save