From 69d63ecffe87275baa57fc997e36a0030f7e5655 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Fri, 18 Jul 2025 10:30:37 +0300 Subject: [PATCH] with signature id reason --- app/models/account_config.rb | 1 + app/views/submissions/_value.html.erb | 19 ++++++++++------- app/views/submissions/show.html.erb | 13 ++++++++---- app/views/submit_form/show.html.erb | 2 +- .../generate_preview_attachments.rb | 8 +++++-- .../generate_result_attachments.rb | 21 +++++++++++++------ lib/submitters/form_configs.rb | 21 ++++++++----------- 7 files changed, 52 insertions(+), 33 deletions(-) diff --git a/app/models/account_config.rb b/app/models/account_config.rb index 60dcbf51..66b48577 100644 --- a/app/models/account_config.rb +++ b/app/models/account_config.rb @@ -41,6 +41,7 @@ class AccountConfig < ApplicationRecord FORCE_SSO_AUTH_KEY = 'force_sso_auth' FLATTEN_RESULT_PDF_KEY = 'flatten_result_pdf' WITH_SIGNATURE_ID = 'with_signature_id' + WITH_SIGNATURE_ID_REASON_KEY = 'with_signature_id_reason' WITH_AUDIT_VALUES_KEY = 'with_audit_values' WITH_SUBMITTER_TIMEZONE_KEY = 'with_submitter_timezone' REQUIRE_SIGNING_REASON_KEY = 'require_signing_reason' diff --git a/app/views/submissions/_value.html.erb b/app/views/submissions/_value.html.erb index 24c712b2..81158cdb 100644 --- a/app/views/submissions/_value.html.erb +++ b/app/views/submissions/_value.html.erb @@ -16,15 +16,18 @@
ID: <%= attachment.uuid %>
+ <% if local_assigns[:with_signature_id_reason] != false %> +
+ <% reason_value = submitter.values[field.dig('preferences', 'reason_field_uuid')].presence %> + <% if reason_value %><%= t('reason') %>: <% end %><%= reason_value || t('digitally_signed_by') %> <%= submitter.name %> + <% if submitter.email %> + <<%= submitter.email %>> + <% end %> +
+ <% end %>
- <% reason_value = submitter.values[field.dig('preferences', 'reason_field_uuid')].presence %> - <% if reason_value %><%= t('reason') %>: <% end %><%= reason_value || t('digitally_signed_by') %> <%= submitter.name %> - <% if submitter.email %> - <<%= submitter.email %>> - <% end %> -
-
- <%= l(attachment.created_at.in_time_zone(local_assigns[:timezone]), format: :long, locale: local_assigns[:locale]) %> <%= TimeUtils.timezone_abbr(local_assigns[:timezone], attachment.created_at) %> + <% timezone = local_assigns[:with_submitter_timezone] ? (submitter.timezone || local_assigns[:timezone]) : local_assigns[:timezone] %> + <%= l(attachment.created_at.in_time_zone(timezone), format: :long, locale: local_assigns[:locale]) %> <%= TimeUtils.timezone_abbr(timezone, attachment.created_at) %>
<% end %> diff --git a/app/views/submissions/show.html.erb b/app/views/submissions/show.html.erb index 53ab3dcc..0ab61c68 100644 --- a/app/views/submissions/show.html.erb +++ b/app/views/submissions/show.html.erb @@ -2,7 +2,11 @@ <%= render 'submissions/preview_tags' %> <% end %> <% font_scale = 1040.0 / PdfUtils::US_LETTER_W %> -<% with_signature_id, is_combined_enabled = AccountConfig.where(account_id: @submission.account_id, key: [AccountConfig::COMBINE_PDF_RESULT_KEY, AccountConfig::WITH_SIGNATURE_ID], value: true).then { |configs| [configs.any? { |e| e.key == AccountConfig::WITH_SIGNATURE_ID }, configs.any? { |e| e.key == AccountConfig::COMBINE_PDF_RESULT_KEY }] } %> +<% configs = AccountConfig.where(account_id: @submission.account_id, key: [AccountConfig::COMBINE_PDF_RESULT_KEY, AccountConfig::WITH_SIGNATURE_ID, AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY, AccountConfig::WITH_SIGNATURE_ID_REASON_KEY]) %> +<% with_signature_id = configs.find { |e| e.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true %> +<% is_combined_enabled = configs.find { |e| e.key == AccountConfig::COMBINE_PDF_RESULT_KEY }&.value == true %> +<% with_submitter_timezone = configs.find { |e| e.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true %> +<% with_signature_id_reason = configs.find { |e| e.key == AccountConfig::WITH_SIGNATURE_ID_REASON_KEY }&.value != false %>
@@ -108,17 +112,18 @@ <% value = values[field['uuid']] %> <% value ||= field['default_value'] if field['type'] == 'heading' %> <% next if value.blank? %> + <% submitter = submitters_index[field['submitter_uuid']] %> <% if (mask = field.dig('preferences', 'mask').presence) && signed_in? && can?(:read, @submission) %> - <%= render 'submissions/value', font_scale:, area:, field:, attachments_index:, value: Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', '), locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> + <%= render 'submissions/value', font_scale:, area:, field:, attachments_index:, value: Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', '), locale: @submission.account.locale, timezone: @submission.account.timezone, submitter:, with_signature_id: %> <% else %> - <%= render 'submissions/value', font_scale:, area:, field:, attachments_index:, value: mask.present? ? Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') : value, locale: @submission.account.locale, timezone: @submission.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: %> + <%= render 'submissions/value', font_scale:, area:, field:, attachments_index:, value: mask.present? ? Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') : value, locale: @submission.account.locale, timezone: @submission.account.timezone, submitter:, with_signature_id:, with_submitter_timezone:, with_signature_id_reason: %> <% end %> <% end %>
diff --git a/app/views/submit_form/show.html.erb b/app/views/submit_form/show.html.erb index 2ef9d197..d6dbc629 100644 --- a/app/views/submit_form/show.html.erb +++ b/app/views/submit_form/show.html.erb @@ -84,7 +84,7 @@ <% next if field['conditions'].present? && values[field['uuid']].blank? && field['submitter_uuid'] != @submitter.uuid %> <% next if field['conditions'].present? && field['submitter_uuid'] == @submitter.uuid %> <% next if field.dig('preferences', 'formula').present? && field['submitter_uuid'] == @submitter.uuid %> - <%= render 'submissions/value', font_scale:, area:, field:, attachments_index: @attachments_index, value: field.dig('preferences', 'mask').present? ? TextUtils.mask_value(value, field.dig('preferences', 'mask')) : value, locale: @submitter.account.locale, timezone: @submitter.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: @form_configs[:with_signature_id] %> + <%= render 'submissions/value', font_scale:, area:, field:, attachments_index: @attachments_index, value: field.dig('preferences', 'mask').present? ? TextUtils.mask_value(value, field.dig('preferences', 'mask')) : value, locale: @submitter.account.locale, timezone: @submitter.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: @form_configs[:with_signature_id], with_submitter_timezone: @form_configs[:with_submitter_timezone], with_signature_id_reason: @form_configs[:with_signature_id_reason] %> <% end %>
diff --git a/lib/submissions/generate_preview_attachments.rb b/lib/submissions/generate_preview_attachments.rb index e55c14f6..c1e201ca 100644 --- a/lib/submissions/generate_preview_attachments.rb +++ b/lib/submissions/generate_preview_attachments.rb @@ -14,11 +14,14 @@ module Submissions configs = submission.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY, AccountConfig::WITH_SIGNATURE_ID, - AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY]) + AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY, + AccountConfig::WITH_SIGNATURE_ID_REASON_KEY]) with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true is_flatten = configs.find { |c| c.key == AccountConfig::FLATTEN_RESULT_PDF_KEY }&.value != false with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true + with_signature_id_reason = + configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID_REASON_KEY }&.value != false pdfs_index = GenerateResultAttachments.build_pdfs_index(submission, flatten: is_flatten) @@ -31,7 +34,8 @@ module Submissions submitters.preload(attachments_attachments: :blob).each_with_index do |s, index| GenerateResultAttachments.fill_submitter_fields(s, submission.account, pdfs_index, with_signature_id:, is_flatten:, with_headings: index.zero?, - with_submitter_timezone:) + with_submitter_timezone:, + with_signature_id_reason:) end template = submission.template diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 0884b395..03b5e29b 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -139,11 +139,14 @@ module Submissions def generate_pdfs(submitter) configs = submitter.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY, AccountConfig::WITH_SIGNATURE_ID, - AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY]) + AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY, + AccountConfig::WITH_SIGNATURE_ID_REASON_KEY]) with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true is_flatten = configs.find { |c| c.key == AccountConfig::FLATTEN_RESULT_PDF_KEY }&.value != false with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true + with_signature_id_reason = + configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID_REASON_KEY }&.value != false pdfs_index = build_pdfs_index(submitter.submission, submitter:, flatten: is_flatten) @@ -188,11 +191,12 @@ module Submissions end fill_submitter_fields(submitter, submitter.account, pdfs_index, with_signature_id:, is_flatten:, - with_submitter_timezone:) + with_submitter_timezone:, + with_signature_id_reason:) end def fill_submitter_fields(submitter, account, pdfs_index, with_signature_id:, is_flatten:, with_headings: nil, - with_submitter_timezone: false) + with_submitter_timezone: false, with_signature_id_reason: true) cell_layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, text_align: :center) attachments_data_cache = {} @@ -299,10 +303,15 @@ module Submissions timezone = submitter.account.timezone timezone = submitter.timezone || submitter.account.timezone if with_submitter_timezone - "#{reason_value ? "#{I18n.t('reason')}: " : ''}#{reason_value || I18n.t('digitally_signed_by')} " \ - "#{submitter.name}#{submitter.email.present? ? " <#{submitter.email}>" : ''}\n" \ + if with_signature_id_reason + "#{reason_value ? "#{I18n.t('reason')}: " : ''}#{reason_value || I18n.t('digitally_signed_by')} " \ + "#{submitter.name}#{submitter.email.present? ? " <#{submitter.email}>" : ''}\n" \ + "#{I18n.l(attachment.created_at.in_time_zone(timezone), format: :long)} " \ + "#{TimeUtils.timezone_abbr(timezone, attachment.created_at)}" + else "#{I18n.l(attachment.created_at.in_time_zone(timezone), format: :long)} " \ - "#{TimeUtils.timezone_abbr(timezone, attachment.created_at)}" + "#{TimeUtils.timezone_abbr(timezone, attachment.created_at)}" + end end reason_text = HexaPDF::Layout::TextFragment.create(reason_string, diff --git a/lib/submitters/form_configs.rb b/lib/submitters/form_configs.rb index 9c1fa06f..84c5fc65 100644 --- a/lib/submitters/form_configs.rb +++ b/lib/submitters/form_configs.rb @@ -13,6 +13,8 @@ module Submitters AccountConfig::REUSE_SIGNATURE_KEY, AccountConfig::ALLOW_TO_PARTIAL_DOWNLOAD_KEY, AccountConfig::ALLOW_TYPED_SIGNATURE, + AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY, + AccountConfig::WITH_SIGNATURE_ID_REASON_KEY, *(Docuseal.multitenant? ? [] : [AccountConfig::POLICY_LINKS_KEY])].freeze module_function @@ -31,20 +33,15 @@ module Submitters with_signature_id = find_safe_value(configs, AccountConfig::WITH_SIGNATURE_ID) == true require_signing_reason = find_safe_value(configs, AccountConfig::REQUIRE_SIGNING_REASON_KEY) == true enforce_signing_order = find_safe_value(configs, AccountConfig::ENFORCE_SIGNING_ORDER_KEY) == true + with_submitter_timezone = find_safe_value(configs, AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY) == true + with_signature_id_reason = find_safe_value(configs, AccountConfig::WITH_SIGNATURE_ID_REASON_KEY) != false policy_links = find_safe_value(configs, AccountConfig::POLICY_LINKS_KEY) - attrs = { completed_button:, - with_typed_signature:, - with_confetti:, - reuse_signature:, - with_decline:, - with_partial_download:, - policy_links:, - enforce_signing_order:, - completed_message:, - require_signing_reason:, - prefill_signature:, - with_signature_id: } + attrs = { completed_button:, with_typed_signature:, with_confetti:, + reuse_signature:, with_decline:, with_partial_download:, + policy_links:, enforce_signing_order:, completed_message:, + require_signing_reason:, prefill_signature:, with_submitter_timezone:, + with_signature_id_reason:, with_signature_id: } keys.each do |key| attrs[key.to_sym] = configs.find { |e| e.key == key.to_s }&.value