From 9aa4a547cf09c8ec68b5e8a61dd6843fa09956fc Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 10 Jul 2025 20:47:52 +0300 Subject: [PATCH] with submitter timezone --- app/models/account_config.rb | 2 +- lib/submissions/generate_audit_trail.rb | 7 +++---- lib/submissions/generate_preview_attachments.rb | 7 +++++-- lib/submissions/generate_result_attachments.rb | 17 ++++++++++++----- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/models/account_config.rb b/app/models/account_config.rb index df46e547..60dcbf51 100644 --- a/app/models/account_config.rb +++ b/app/models/account_config.rb @@ -42,7 +42,7 @@ class AccountConfig < ApplicationRecord FLATTEN_RESULT_PDF_KEY = 'flatten_result_pdf' WITH_SIGNATURE_ID = 'with_signature_id' WITH_AUDIT_VALUES_KEY = 'with_audit_values' - WITH_AUDIT_SUBMITTER_TIMEZONE_KEY = 'with_audit_submitter_timezone' + WITH_SUBMITTER_TIMEZONE_KEY = 'with_submitter_timezone' REQUIRE_SIGNING_REASON_KEY = 'require_signing_reason' REUSE_SIGNATURE_KEY = 'reuse_signature' COMBINE_PDF_RESULT_KEY = 'combine_pdf_result_key' diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index 3b74244d..cce40fb9 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -113,17 +113,16 @@ module Submissions configs = submission.account.account_configs.where(key: [AccountConfig::WITH_AUDIT_VALUES_KEY, AccountConfig::WITH_SIGNATURE_ID, - AccountConfig::WITH_AUDIT_SUBMITTER_TIMEZONE_KEY]) + AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY]) last_submitter = submission.submitters.select(&:completed_at).max_by(&:completed_at) with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true with_audit_values = configs.find { |c| c.key == AccountConfig::WITH_AUDIT_VALUES_KEY }&.value != false - with_audit_submitter_timezone = - configs.find { |c| c.key == AccountConfig::WITH_AUDIT_SUBMITTER_TIMEZONE_KEY }&.value == true + with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true timezone = account.timezone - timezone = last_submitter.timezone || account.timezone if with_audit_submitter_timezone + timezone = last_submitter.timezone || account.timezone if with_submitter_timezone composer.page_style(:default, page_size:) do |canvas, style| box = canvas.context.box(:media) diff --git a/lib/submissions/generate_preview_attachments.rb b/lib/submissions/generate_preview_attachments.rb index 39fb2dd3..e55c14f6 100644 --- a/lib/submissions/generate_preview_attachments.rb +++ b/lib/submissions/generate_preview_attachments.rb @@ -13,10 +13,12 @@ module Submissions end configs = submission.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY, - AccountConfig::WITH_SIGNATURE_ID]) + AccountConfig::WITH_SIGNATURE_ID, + AccountConfig::WITH_SUBMITTER_TIMEZONE_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 pdfs_index = GenerateResultAttachments.build_pdfs_index(submission, flatten: is_flatten) @@ -28,7 +30,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_signature_id:, is_flatten:, with_headings: index.zero?, + with_submitter_timezone:) end template = submission.template diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 2bf879e9..999145f2 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -138,10 +138,12 @@ module Submissions def generate_pdfs(submitter) configs = submitter.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY, - AccountConfig::WITH_SIGNATURE_ID]) + AccountConfig::WITH_SIGNATURE_ID, + AccountConfig::WITH_SUBMITTER_TIMEZONE_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 pdfs_index = build_pdfs_index(submitter.submission, submitter:, flatten: is_flatten) @@ -185,10 +187,12 @@ module Submissions end end - fill_submitter_fields(submitter, submitter.account, pdfs_index, with_signature_id:, is_flatten:) + fill_submitter_fields(submitter, submitter.account, pdfs_index, with_signature_id:, is_flatten:, + with_submitter_timezone:) end - def fill_submitter_fields(submitter, account, pdfs_index, with_signature_id:, is_flatten:, with_headings: nil) + def fill_submitter_fields(submitter, account, pdfs_index, with_signature_id:, is_flatten:, with_headings: nil, + with_submitter_timezone: false) cell_layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, text_align: :center) attachments_data_cache = {} @@ -288,10 +292,13 @@ module Submissions reason_string = I18n.with_locale(locale) do + 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" \ - "#{I18n.l(attachment.created_at.in_time_zone(submitter.account.timezone), format: :long)} " \ - "#{TimeUtils.timezone_abbr(submitter.account.timezone, attachment.created_at)}" + "#{I18n.l(attachment.created_at.in_time_zone(timezone), format: :long)} " \ + "#{TimeUtils.timezone_abbr(timezone, attachment.created_at)}" end reason_text = HexaPDF::Layout::TextFragment.create(reason_string,