field conditions

This commit is contained in:
Pete Matsyburka
2025-02-02 21:36:38 +02:00
parent fa74ee1755
commit 54426556d9
4 changed files with 58 additions and 17 deletions
+19 -4
View File
@@ -186,10 +186,21 @@ module Submitters
attachments_index =
Submissions.filtered_conditions_schema(submitter.submission).index_by { |i| i['attachment_uuid'] }
submitter_values = nil
is_other_submitter_conditions = submitter.submission.template_submitters.size > 1
submitter.submission.template_fields.each do |field|
next if field['submitter_uuid'] != submitter.uuid
submitter.values.delete(field['uuid']) unless check_field_conditions(submitter, field, fields_uuid_index)
submitter_values ||= submitter.values
is_other_submitter_conditions &&= field_conditions_other_submitter?(submitter, field, fields_uuid_index)
if is_other_submitter_conditions
submitter_values = submitter.submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) }
end
submitter.values.delete(field['uuid']) unless check_field_conditions(submitter_values, field, fields_uuid_index)
if field['areas'].present? && field['areas'].none? { |area| attachments_index[area['attachment_uuid']] }
submitter.values.delete(field['uuid'])
@@ -199,10 +210,14 @@ module Submitters
submitter.values
end
def check_field_conditions(submitter, field, fields_uuid_index)
return true if field['conditions'].blank?
def field_conditions_other_submitter?(submitter, field, fields_uuid_index)
field['conditions'].to_a.any? do |c|
fields_uuid_index.dig(c['field_uuid'], 'submitter_uuid') != submitter.uuid
end
end
submitter_values = submitter.values
def check_field_conditions(submitter_values, field, fields_uuid_index)
return true if field['conditions'].blank?
field['conditions'].each_with_object([]) do |c, acc|
if c['operation'] == 'or'