add readonly fields via api
This commit is contained in:
@@ -106,7 +106,8 @@ module Api
|
|||||||
|
|
||||||
def submissions_params
|
def submissions_params
|
||||||
params.permit(submission: [{
|
params.permit(submission: [{
|
||||||
submitters: [[:uuid, :name, :email, :role, :completed, :phone, { values: {} }]]
|
submitters: [[:uuid, :name, :email, :role, :completed, :phone,
|
||||||
|
{ values: {}, readonly_fields: [] }]]
|
||||||
}])
|
}])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -484,7 +484,7 @@ export default {
|
|||||||
return this.currentStepFields[0]
|
return this.currentStepFields[0]
|
||||||
},
|
},
|
||||||
stepFields () {
|
stepFields () {
|
||||||
return this.fields.reduce((acc, f) => {
|
return this.fields.filter((f) => !f.readonly).reduce((acc, f) => {
|
||||||
const prevStep = acc[acc.length - 1]
|
const prevStep = acc[acc.length - 1]
|
||||||
|
|
||||||
if (f.type === 'checkbox' && Array.isArray(prevStep) && prevStep[0].type === 'checkbox') {
|
if (f.type === 'checkbox' && Array.isArray(prevStep) && prevStep[0].type === 'checkbox') {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<% fields_index = Templates.build_field_areas_index(@submitter.submission.template_fields || @submitter.submission.template.fields) %>
|
<% fields_index = Templates.build_field_areas_index(@submitter.submission.template_fields || @submitter.submission.template.fields) %>
|
||||||
<% values = @submitter.submission.submitters.where.not(id: @submitter.id).reduce({}) { |acc, sub| acc.merge(sub.values) } %>
|
<% values = @submitter.submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) } %>
|
||||||
<% attachments_index = ActiveStorage::Attachment.where(record: @submitter.submission.submitters, name: :attachments).preload(:blob).index_by(&:uuid) %>
|
<% attachments_index = ActiveStorage::Attachment.where(record: @submitter.submission.submitters, name: :attachments).preload(:blob).index_by(&:uuid) %>
|
||||||
<div style="max-height: -webkit-fill-available;">
|
<div style="max-height: -webkit-fill-available;">
|
||||||
<div id="scrollbox">
|
<div id="scrollbox">
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
<% fields_index.dig(document.uuid, index)&.each do |(area, field)| %>
|
<% fields_index.dig(document.uuid, index)&.each do |(area, field)| %>
|
||||||
<% value = values[field['uuid']] %>
|
<% value = values[field['uuid']] %>
|
||||||
<% next if value.blank? %>
|
<% next if value.blank? %>
|
||||||
|
<% next if !field['readonly'] && field['submitter_uuid'] == @submitter.uuid %>
|
||||||
<%= render 'submissions/value', area:, field:, attachments_index:, value:, locale: @submitter.submission.template.account.locale %>
|
<%= render 'submissions/value', area:, field:, attachments_index:, value:, locale: @submitter.submission.template.account.locale %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ module Submissions
|
|||||||
submission = template.submissions.new(created_by_user: user, source:,
|
submission = template.submissions.new(created_by_user: user, source:,
|
||||||
template_submitters: template.submitters, submitters_order:)
|
template_submitters: template.submitters, submitters_order:)
|
||||||
|
|
||||||
|
maybe_set_template_fields(submission, attrs[:submitters])
|
||||||
|
|
||||||
attrs[:submitters].each_with_index do |submitter_attrs, index|
|
attrs[:submitters].each_with_index do |submitter_attrs, index|
|
||||||
uuid =
|
uuid = find_submitter_uuid(template, submitter_attrs, index)
|
||||||
submitter_attrs[:uuid].presence ||
|
|
||||||
template.submitters.find { |e| e['name'] == submitter_attrs[:role] }&.dig('uuid') ||
|
|
||||||
template.submitters[index]&.dig('uuid')
|
|
||||||
|
|
||||||
next if uuid.blank?
|
next if uuid.blank?
|
||||||
|
|
||||||
@@ -26,6 +25,37 @@ module Submissions
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def maybe_set_template_fields(submission, submitters_attrs)
|
||||||
|
template_fields = submission.template.fields.deep_dup
|
||||||
|
|
||||||
|
submitters_attrs.each_with_index do |submitter_attrs, index|
|
||||||
|
next if submitter_attrs[:readonly_fields].blank?
|
||||||
|
|
||||||
|
uuid = find_submitter_uuid(submission.template, submitter_attrs, index)
|
||||||
|
|
||||||
|
template_fields.each do |f|
|
||||||
|
next if f['submitter_uuid'] != uuid ||
|
||||||
|
(!f['name'].in?(submitter_attrs[:readonly_fields]) &&
|
||||||
|
!f['name'].parameterize.underscore.in?(submitter_attrs[:readonly_fields]))
|
||||||
|
|
||||||
|
f['readonly'] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if template_fields != submission.template.fields
|
||||||
|
submission.template_fields = template_fields
|
||||||
|
submission.template_schema = submission.template.schema
|
||||||
|
end
|
||||||
|
|
||||||
|
submission
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_submitter_uuid(template, attrs, index)
|
||||||
|
attrs[:uuid].presence ||
|
||||||
|
template.submitters.find { |e| e['name'] == attrs[:role] }&.dig('uuid') ||
|
||||||
|
template.submitters[index]&.dig('uuid')
|
||||||
|
end
|
||||||
|
|
||||||
def build_submitter(submission:, attrs:, uuid:, is_order_sent:, mark_as_sent:)
|
def build_submitter(submission:, attrs:, uuid:, is_order_sent:, mark_as_sent:)
|
||||||
email = Submissions.normalize_email(attrs[:email])
|
email = Submissions.normalize_email(attrs[:email])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user