diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb
index 179a1aac..df8857e9 100644
--- a/app/controllers/api/submitters_controller.rb
+++ b/app/controllers/api/submitters_controller.rb
@@ -80,7 +80,7 @@ module Api
def assign_submitter_attrs(submitter, attrs)
submitter.email = Submissions.normalize_email(attrs[:email]) if attrs.key?(:email)
submitter.phone = attrs[:phone].to_s.gsub(/[^0-9+]/, '') if attrs.key?(:phone)
- submitter.values = submitter.values.merge(attrs[:values].to_unsafe_h) if attrs[:values]
+ submitter.values = submitter.values.merge(attrs[:values].to_unsafe_h) if attrs[:values].present?
submitter.completed_at = attrs[:completed] ? Time.current : submitter.completed_at
submitter.application_key = attrs[:application_key] if attrs.key?(:application_key)
@@ -98,6 +98,8 @@ module Api
def assign_preferences(submitter, attrs)
submitter_preferences = Submitters.normalize_preferences(submitter.account, current_user, attrs)
+ submitter.preferences['default_values'] = attrs[:values].to_unsafe_h if attrs[:values].present?
+
if submitter_preferences.key?('send_email')
submitter.preferences['send_email'] = submitter_preferences['send_email']
end
diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb
index 938ca2ab..0586d7da 100644
--- a/app/controllers/start_form_controller.rb
+++ b/app/controllers/start_form_controller.rb
@@ -46,13 +46,25 @@ class StartFormController < ApplicationController
private
def assign_submission_attributes(submitter, template)
+ resubmit_submitter =
+ if params[:resubmit].present?
+ Submitter.where(submission: @template.submissions).find_by(slug: params[:resubmit])
+ end
+
submitter.assign_attributes(
uuid: template.submitters.first['uuid'],
ip: request.remote_ip,
ua: request.user_agent,
- preferences: { 'send_email' => true }
+ values: resubmit_submitter&.preferences&.fetch('default_values', nil) || {},
+ preferences: resubmit_submitter&.preferences.presence || { 'send_email' => true }
)
+ if submitter.values.present?
+ resubmit_submitter.attachments.each do |attachment|
+ submitter.attachments << attachment.dup if submitter.values.value?(attachment.uuid)
+ end
+ end
+
submitter.submission ||= Submission.new(template:,
template_submitters: template.submitters,
source: :link)
diff --git a/app/views/start_form/completed.html.erb b/app/views/start_form/completed.html.erb
index 7259521c..145f2ba1 100644
--- a/app/views/start_form/completed.html.erb
+++ b/app/views/start_form/completed.html.erb
@@ -26,7 +26,7 @@
<% end %>
<% if @template.submitters.to_a.size == 1 %>
- <%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@template.slug), params: { submitter: { email: params[:email] }, resubmit: true }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
+ <%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@template.slug), params: { submitter: { email: params[:email] }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
<% end %>
diff --git a/app/views/submit_form/completed.html.erb b/app/views/submit_form/completed.html.erb
index 229ffcb9..3dc8ce2c 100644
--- a/app/views/submit_form/completed.html.erb
+++ b/app/views/submit_form/completed.html.erb
@@ -39,7 +39,7 @@
<% if @submitter.submission.template.submitters.size == 1 %>
OR
- <%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@submitter.submission.template.slug), params: { submitter: { email: @submitter.email, phone: @submitter.phone, name: @submitter.name }, resubmit: true }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
+ <%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@submitter.submission.template.slug), params: { submitter: { email: @submitter.email, phone: @submitter.phone, name: @submitter.name }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
<% end %>
diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb
index 6863f35d..5e166f65 100644
--- a/lib/submissions/create_from_submitters.rb
+++ b/lib/submissions/create_from_submitters.rb
@@ -46,6 +46,7 @@ module Submissions
submitter_uuid ||= find_submitter_uuid(submission.template, submitter_attrs, index)
process_readonly_fields_param(submitter_attrs[:readonly_fields], template_fields, submitter_uuid)
+ process_field_values_param(submitter_attrs[:values], template_fields, submitter_uuid)
process_fields_param(submitter_attrs[:fields], template_fields, submitter_uuid)
end
@@ -70,6 +71,21 @@ module Submissions
end
end
+ def process_field_values_param(values, template_fields, submitter_uuid)
+ return if values.blank?
+
+ template_fields.each do |f|
+ next if f['type'].in?(%w[signature image initials file])
+ next if f['submitter_uuid'] != submitter_uuid
+
+ value = values[f['uuid']]
+
+ next if value.blank?
+
+ f['default_value'] = value
+ end
+ end
+
def process_fields_param(fields, template_fields, submitter_uuid)
return if fields.blank?
@@ -83,6 +99,8 @@ module Submissions
next if field_configs.blank?
f['readonly'] = field_configs['readonly'] if field_configs['readonly'].present?
+ f['default_value'] = field_configs['default_value'] if field_configs['default_value'].present? &&
+ !f['type'].in?(%w[signature image initials file])
next if field_configs['validation_pattern'].blank?
@@ -111,7 +129,8 @@ module Submissions
completed_at: attrs[:completed] ? Time.current : nil,
sent_at: mark_as_sent && email.present? && is_order_sent ? Time.current : nil,
values: attrs[:values] || {},
- preferences: preferences.merge(submitter_preferences),
+ preferences: preferences.merge(submitter_preferences)
+ .merge({ default_values: attrs[:values] }.compact_blank),
uuid:
)
end