mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
# frozen_string_literal: true
|
|
|
|
module Submissions
|
|
module NormalizeParamUtils
|
|
module_function
|
|
|
|
def normalize_submissions_params!(submissions_params, template)
|
|
attachments = []
|
|
|
|
Array.wrap(submissions_params).each do |submission|
|
|
submission[:submitters].each_with_index do |submitter, index|
|
|
_, new_attachments = normalize_submitter_params!(submitter, template, index)
|
|
|
|
attachments.push(*new_attachments)
|
|
end
|
|
end
|
|
|
|
[submissions_params, attachments]
|
|
end
|
|
|
|
def normalize_submitter_params!(submitter_params, template, index = nil, for_submitter: nil)
|
|
default_values = submitter_params[:values] || {}
|
|
|
|
submitter_params[:fields]&.each do |f|
|
|
default_values[f[:name]] = f[:default_value] if f.key?(:default_value)
|
|
end
|
|
|
|
return submitter_params if default_values.blank?
|
|
|
|
values, new_attachments =
|
|
Submitters::NormalizeValues.call(template,
|
|
default_values,
|
|
submitter_name: submitter_params[:role] ||
|
|
template.submitters.dig(index, 'name'),
|
|
for_submitter:,
|
|
throw_errors: true)
|
|
|
|
submitter_params[:values] = values
|
|
|
|
[submitter_params, new_attachments]
|
|
end
|
|
|
|
def save_default_value_attachments!(attachments, submitters)
|
|
return if attachments.blank?
|
|
|
|
attachments_index = attachments.index_by(&:uuid)
|
|
|
|
submitters.each do |submitter|
|
|
submitter.values.each_value do |value|
|
|
attachment = attachments_index[value]
|
|
|
|
next unless attachment
|
|
|
|
attachment.record = submitter
|
|
|
|
attachment.save!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|