- <% submitters = submission.template.submitters.filter_map { |item| submission.submitters.find { |e| e.uuid == item['uuid'] } } %>
+ <% submitters = (submission.template_submitters || submission.template.submitters).filter_map { |item| submission.submitters.find { |e| e.uuid == item['uuid'] } } %>
<% is_submission_complated = submitters.all?(&:completed_at?) %>
<% if submitters.size == 1 %>
diff --git a/db/migrate/20230726062428_add_template_fields_to_submission.rb b/db/migrate/20230726062428_add_template_fields_to_submission.rb
new file mode 100644
index 00000000..456c5e16
--- /dev/null
+++ b/db/migrate/20230726062428_add_template_fields_to_submission.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+class AddTemplateFieldsToSubmission < ActiveRecord::Migration[7.0]
+ class MigrationTemplate < ApplicationRecord
+ self.table_name = 'templates'
+ end
+
+ class MigrationSubmission < ApplicationRecord
+ self.table_name = 'submissions'
+ end
+
+ def up
+ add_column :submissions, :template_fields, :text
+ add_column :submissions, :template_schema, :text
+ add_column :submissions, :template_submitters, :text
+
+ MigrationTemplate.all.each do |template|
+ MigrationSubmission.where(template_id: template.id).each do |submission|
+ submission.update_columns(template_fields: template.fields,
+ template_schema: template.schema,
+ template_submitters: template.submitters)
+ end
+ end
+ end
+
+ def down
+ remove_column :submissions, :template_fields
+ remove_column :submissions, :template_schema
+ remove_column :submissions, :template_submitters
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 0a440b75..a053d26d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.0].define(version: 2023_07_01_075115) do
+ActiveRecord::Schema[7.0].define(version: 2023_07_26_062428) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -77,6 +77,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_07_01_075115) do
t.datetime "deleted_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.text "template_fields"
+ t.text "template_schema"
+ t.text "template_submitters"
t.index ["created_by_user_id"], name: "index_submissions_on_created_by_user_id"
t.index ["template_id"], name: "index_submissions_on_template_id"
end
diff --git a/lib/submissions.rb b/lib/submissions.rb
index e3e7cf1f..040aa355 100644
--- a/lib/submissions.rb
+++ b/lib/submissions.rb
@@ -1,4 +1,13 @@
# frozen_string_literal: true
module Submissions
+ module_function
+
+ def update_template_fields!(submission)
+ submission.template_fields = submission.template.fields
+ submission.template_schema = submission.template.schema
+ submission.template_submitters = submission.template.submitters
+
+ submission.save!
+ end
end
diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb
index f02d516a..3f53af2c 100644
--- a/lib/submissions/generate_result_attachments.rb
+++ b/lib/submissions/generate_result_attachments.rb
@@ -27,7 +27,7 @@ module Submissions
pdfs_index = build_pdfs_index(submitter)
- template.fields.each do |field|
+ submitter.submission.template_fields.each do |field|
next if field['submitter_uuid'] != submitter.uuid
field.fetch('areas', []).each do |area|
@@ -159,7 +159,7 @@ module Submissions
original_documents = template.documents.preload(:blob)
results =
- template.schema.map do |item|
+ submitter.submission.template_schema.map do |item|
pdf = pdfs_index[item['attachment_uuid']]
attachment = save_signed_pdf(pdf:, submitter:, certs:, uuid: item['attachment_uuid'], name: item['name'])
diff --git a/lib/templates.rb b/lib/templates.rb
index 1684f17e..e1503f5c 100644
--- a/lib/templates.rb
+++ b/lib/templates.rb
@@ -3,10 +3,10 @@
module Templates
module_function
- def build_field_areas_index(template)
+ def build_field_areas_index(fields)
hash = {}
- template.fields.each do |field|
+ fields.each do |field|
(field['areas'] || []).each do |area|
hash[area['attachment_uuid']] ||= {}
acc = (hash[area['attachment_uuid']][area['page']] ||= [])