document conditions
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user