document conditions

This commit is contained in:
Pete Matsyburka
2024-12-07 01:35:59 +02:00
parent 38b5eccb65
commit 4429d742b3
17 changed files with 252 additions and 65 deletions
+38
View File
@@ -124,4 +124,42 @@ module Submissions
fixed_email
end
def filtered_conditions_schema(submission, values: nil, include_submitter_uuid: nil)
fields_uuid_index = nil
(submission.template_schema || submission.template.schema).filter_map do |item|
if item['conditions'].present?
fields_uuid_index ||=
(submission.template_fields || submission.template.fields).index_by { |f| f['uuid'] }
values ||= submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) }
next unless check_document_conditions(item, values, fields_uuid_index, include_submitter_uuid:)
end
item
end
end
def check_document_conditions(item, values, fields_index, include_submitter_uuid: nil)
return true if item['conditions'].blank?
item['conditions'].all? do |condition|
result =
if fields_index[condition['field_uuid']]['submitter_uuid'] == include_submitter_uuid
true
else
Submitters::SubmitValues.check_field_condition(condition, values, fields_index)
end
item['conditions'].each_with_object([]) do |c, acc|
if c['operation'] == 'or'
acc.push(acc.pop || result)
else
acc.push(result)
end
end.exclude?(false)
end
end
end