add dynamic documents

This commit is contained in:
Pete Matsyburka
2026-02-12 09:22:08 +02:00
parent b50d982497
commit 37196ff89f
65 changed files with 4372 additions and 485 deletions
+41 -1
View File
@@ -71,6 +71,7 @@ module Submissions
preferences: preferences.merge(submission_preferences))
end
maybe_set_dynamic_documents(submission)
maybe_set_template_fields(submission, attrs[:submitters], with_template:, new_fields:)
if submission.submitters.size > template.submitters.size
@@ -97,6 +98,44 @@ module Submissions
submissions
end
def maybe_set_dynamic_documents(submission)
return submission unless submission.template_id?
template = submission.template
return submission if template.variables_schema.present? ||
submission.variables_schema.present?
areas_index = {}
submission.template_schema = []
template.schema.each do |item|
if item['dynamic']
dynamic_document = template.schema_dynamic_documents.find { |e| e.uuid == item['attachment_uuid'] }
dynamic_document_version = DynamicDocuments::EnsureVersionGenerated.call(dynamic_document)
dynamic_document_version.areas.each { |area| areas_index[area['uuid']] = area }
submission.template_schema << item.deep_dup.merge('dynamic_document_sha1' => dynamic_document.sha1)
else
submission.template_schema << item.deep_dup
end
end
submission.template_fields = template.fields.deep_dup
submission.template_fields.each do |field|
field['areas'].to_a.each do |area|
dynamic_area = areas_index[area['uuid']]
area.merge!(dynamic_area) if dynamic_area
end
end
submission
end
def maybe_enqueue_expire_at(submissions)
submissions.each do |submission|
next unless submission.expire_at?
@@ -159,7 +198,8 @@ module Submissions
end
if template_fields != (submission.template_fields || submission.template.fields) || new_fields.present? ||
submitters_attrs.any? { |e| e[:completed].present? } || !with_template || submission.variables.present?
submitters_attrs.any? { |e| e[:completed].present? } || !with_template || submission.variables.present? ||
submission.template&.variables_schema.present?
submission.template_fields = new_fields ? new_fields + template_fields : template_fields
submission.template_schema = submission.template.schema if submission.template_schema.blank?
submission.variables_schema = submission.template.variables_schema if submission.template &&