preserve default values on resubmit

pull/217/head
Pete Matsyburka 2 years ago
parent bdf40640d0
commit b94dbc75b7

@ -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

@ -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)

@ -26,7 +26,7 @@
<% end %>
<% if @template.submitters.to_a.size == 1 %>
<div>
<%= 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' %>
</div>
<% end %>
</div>

@ -39,7 +39,7 @@
<% if @submitter.submission.template.submitters.size == 1 %>
<div class="divider">OR</div>
<div>
<%= 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' %>
</div>
<% end %>
</div>

@ -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

Loading…
Cancel
Save