diff --git a/lib/submitters/submit_values.rb b/lib/submitters/submit_values.rb index 63b1d839..063f7fca 100644 --- a/lib/submitters/submit_values.rb +++ b/lib/submitters/submit_values.rb @@ -189,8 +189,6 @@ module Submitters next if formula.blank? - formula = normalize_formula(formula, submitter.submission) - submission_values ||= if submitter.submission.template_submitters.size > 1 merge_submitters_values(submitter) @@ -198,20 +196,26 @@ module Submitters submitter.values end + formula = normalize_formula(formula, submitter.submission, submission_values:) + acc[field['uuid']] = calculate_formula_value(formula, submission_values.merge(acc.compact_blank)) end computed_values.compact_blank end - def normalize_formula(formula, submission, depth = 0) + def normalize_formula(formula, submission, depth: 0, submission_values: nil) raise ValidationError, 'Formula infinite loop' if depth > 10 formula.gsub(/{{(.*?)}}/) do |match| uuid = Regexp.last_match(1) if (nested_formula = submission.fields_uuid_index.dig(uuid, 'preferences', 'formula').presence) - "(#{normalize_formula(nested_formula, submission, depth + 1)})" + if check_field_conditions(submission_values, submission.fields_uuid_index[uuid], submission.fields_uuid_index) + "(#{normalize_formula(nested_formula, submission, depth: depth + 1, submission_values:)})" + else + '0' + end else match end