one-off submission

This commit is contained in:
Pete Matsyburka
2025-05-31 15:15:25 +03:00
committed by Pete Matsyburka
parent c59d948d41
commit f03166b4ea
47 changed files with 218 additions and 145 deletions
+7 -4
View File
@@ -7,7 +7,7 @@ module Submissions
module_function
# rubocop:disable Metrics
def call(template:, user:, submissions_attrs:, source:, submitters_order:, params: {})
def call(template:, user:, submissions_attrs:, source:, submitters_order:, params: {}, with_template: true)
preferences = Submitters.normalize_preferences(user.account, user, params)
submissions = Array.wrap(submissions_attrs).filter_map do |attrs|
@@ -21,6 +21,7 @@ module Submissions
submission = template.submissions.new(created_by_user: user, source:,
account_id: user.account_id,
preferences: set_submission_preferences,
name: with_template ? attrs[:name] : (attrs[:name] || template.name),
expire_at:,
template_submitters: [], submitters_order:)
@@ -60,7 +61,7 @@ module Submissions
preferences: preferences.merge(submission_preferences))
end
maybe_set_template_fields(submission, attrs[:submitters])
maybe_set_template_fields(submission, attrs[:submitters], with_template:)
if submission.submitters.size > template.submitters.size
raise BaseError, 'Defined more signing parties than in template'
@@ -76,6 +77,8 @@ module Submissions
maybe_add_invite_submitters(submission, template)
submission.template = nil unless with_template
submission.tap(&:save!)
end
@@ -118,7 +121,7 @@ module Submissions
}.compact_blank
end
def maybe_set_template_fields(submission, submitters_attrs, default_submitter_uuid: nil)
def maybe_set_template_fields(submission, submitters_attrs, default_submitter_uuid: nil, with_template: true)
template_fields = (submission.template_fields || submission.template.fields).deep_dup
submitters = submission.template_submitters || submission.template.submitters
@@ -133,7 +136,7 @@ module Submissions
end
if template_fields != (submission.template_fields || submission.template.fields) ||
submitters_attrs.any? { |e| e[:completed].present? }
submitters_attrs.any? { |e| e[:completed].present? } || !with_template
submission.template_fields = template_fields
submission.template_schema = submission.template.schema if submission.template_schema.blank?
end
+3 -2
View File
@@ -58,7 +58,8 @@ module Submissions
ActiveStorage::Attachment.create!(
blob: ActiveStorage::Blob.create_and_upload!(
io: io.tap(&:rewind), filename: "#{I18n.t('audit_log')} - #{submission.template.name}.pdf"
io: io.tap(&:rewind), filename: "#{I18n.t('audit_log')} - " \
"#{submission.name || submission.template.name}.pdf"
),
name: 'audit_trail',
record: submission
@@ -186,7 +187,7 @@ module Submissions
last_submitter = submission.submitters.select(&:completed_at).max_by(&:completed_at)
documents_data = Submitters.select_attachments_for_download(last_submitter).map do |document|
original_documents = submission.template.documents.select do |e|
original_documents = submission.schema_documents.select do |e|
e.uuid == (document.metadata['original_uuid'] || document.uuid)
end.presence
@@ -32,7 +32,7 @@ module Submissions
ActiveStorage::Attachment.create!(
blob: ActiveStorage::Blob.create_and_upload!(
io: io.tap(&:rewind), filename: "#{submission.template.name}.pdf"
io: io.tap(&:rewind), filename: "#{submission.name || submission.template.name}.pdf"
),
name: 'combined_document',
record: submission
@@ -70,7 +70,7 @@ module Submissions
submitter:,
uuid: GenerateResultAttachments.images_pdf_uuid(original_documents.select(&:image?)),
values_hash:,
name: template.name
name: submission.name || template.name
)
ApplicationRecord.no_touching do
@@ -72,17 +72,17 @@ module Submissions
pdfs_index = generate_pdfs(submitter)
template = submitter.submission.template
account = submitter.account
submission = submitter.submission
pkcs = Accounts.load_signing_pkcs(account)
tsa_url = Accounts.load_timeserver_url(account)
image_pdfs = []
original_documents = template.documents.preload(:blob)
original_documents = submission.schema_documents.preload(:blob)
result_attachments =
submitter.submission.template_schema.filter_map do |item|
submission.template_schema.filter_map do |item|
pdf = pdfs_index[item['attachment_uuid']]
next if pdf.nil?
@@ -114,7 +114,7 @@ module Submissions
tsa_url:,
pkcs:,
uuid: images_pdf_uuid(original_documents.select(&:image?)),
name: template.name
name: submission.name || template.name
)
ApplicationRecord.no_touching do
@@ -656,14 +656,14 @@ module Submissions
Submissions::EnsureResultGenerated.call(latest_submitter) if latest_submitter
documents = latest_submitter&.documents&.preload(:blob).to_a.presence
documents ||= submission.template_schema_documents.preload(:blob)
documents ||= submission.schema_documents.preload(:blob)
attachment_uuids = Submissions.filtered_conditions_schema(submission).pluck('attachment_uuid')
attachments_index = documents.index_by { |a| a.metadata['original_uuid'] || a.uuid }
attachment_uuids.each_with_object({}) do |uuid, acc|
attachment = attachments_index[uuid]
attachment ||= submission.template_schema_documents.preload(:blob).find { |a| a.uuid == uuid }
attachment ||= submission.schema_documents.preload(:blob).find { |a| a.uuid == uuid }
next unless attachment
+1 -1
View File
@@ -3,7 +3,7 @@
module Submissions
module SerializeForApi
SERIALIZE_PARAMS = {
only: %i[id slug source submitters_order expire_at created_at updated_at archived_at],
only: %i[id name slug source submitters_order expire_at created_at updated_at archived_at],
methods: %i[audit_log_url combined_document_url],
include: {
submitters: { only: %i[id] },