From 6b54072cb5e493ba680b233347e511562b81ae8c Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 25 Sep 2025 14:00:51 +0300 Subject: [PATCH] check formula field condition --- lib/submitters/submit_values.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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