From cbff242a5dec0d56a1c211f52ac14f76c68d17b8 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Fri, 25 Apr 2025 12:14:49 +0300 Subject: [PATCH] adjust condition fields --- .../template_builder/formula_modal.vue | 2 +- app/models/submission.rb | 4 ++++ lib/submissions.rb | 17 ++++++----------- lib/submitters/submit_values.rb | 17 ++++++++++++----- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/javascript/template_builder/formula_modal.vue b/app/javascript/template_builder/formula_modal.vue index 8286b67e..6ce34dbe 100644 --- a/app/javascript/template_builder/formula_modal.vue +++ b/app/javascript/template_builder/formula_modal.vue @@ -154,7 +154,7 @@ export default { computed: { fields () { return this.template.fields.reduce((acc, f) => { - if (f !== this.field && f.submitter_uuid === this.field.submitter_uuid && ['number'].includes(f.type) && !f.preferences?.formula) { + if (f !== this.field && ['number'].includes(f.type) && (!f.preferences?.formula || f.submitter_uuid !== this.field.submitter_uuid)) { acc.push(f) } diff --git a/app/models/submission.rb b/app/models/submission.rb index f42749b2..ef40ef68 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -90,6 +90,10 @@ class Submission < ApplicationRecord expire_at && expire_at <= Time.current end + def fields_uuid_index + @fields_uuid_index ||= (template_fields || template.fields).index_by { |f| f['uuid'] } + end + def audit_trail_url return if audit_trail.blank? diff --git a/lib/submissions.rb b/lib/submissions.rb index ab9d65ea..ddb4c3f8 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -134,16 +134,11 @@ module Submissions 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_item_conditions(item, values, fields_uuid_index, include_submitter_uuid:) + next unless check_item_conditions(item, values, submission.fields_uuid_index, include_submitter_uuid:) end item @@ -151,21 +146,21 @@ module Submissions end def filtered_conditions_fields(submitter, only_submitter_fields: true) - fields = submitter.submission.template_fields || submitter.submission.template.fields + submission = submitter.submission + + fields = submission.template_fields || submission.template.fields - fields_uuid_index = nil values = nil fields.filter_map do |field| next if field['submitter_uuid'] != submitter.uuid && only_submitter_fields if field['conditions'].present? - fields_uuid_index ||= fields.index_by { |f| f['uuid'] } - values ||= submitter.submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) } + values ||= submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) } submitter_conditions = [] - next unless check_item_conditions(field, values, fields_uuid_index, + next unless check_item_conditions(field, values, submission.fields_uuid_index, include_submitter_uuid: submitter.uuid, submitter_conditions_acc: submitter_conditions) diff --git a/lib/submitters/submit_values.rb b/lib/submitters/submit_values.rb index 0fd499f0..efff5b46 100644 --- a/lib/submitters/submit_values.rb +++ b/lib/submitters/submit_values.rb @@ -171,6 +171,8 @@ module Submitters end def build_formula_values(submitter) + submission_values = nil + computed_values = submitter.submission.template_fields.each_with_object({}) do |field, acc| next if field['submitter_uuid'] != submitter.uuid next if field['type'] == 'payment' @@ -179,7 +181,14 @@ module Submitters next if formula.blank? - acc[field['uuid']] = calculate_formula_value(formula, submitter.values.merge(acc.compact_blank)) + submission_values ||= + if submitter.submission.template_submitters.size > 1 + merge_submitters_values(submitter) + else + submitter.values + end + + acc[field['uuid']] = calculate_formula_value(formula, submission_values.merge(acc.compact_blank)) end computed_values.compact_blank @@ -204,8 +213,6 @@ module Submitters def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil) submission = submitter.submission - fields_uuid_index = submission.template_fields.index_by { |e| e['uuid'] } - submitters_values = nil has_other_submitters = submission.template_submitters.size > 1 @@ -228,11 +235,11 @@ module Submitters end if has_other_submitters && !submitters_values && - field_conditions_other_submitter?(submitter, field, fields_uuid_index) + field_conditions_other_submitter?(submitter, field, submission.fields_uuid_index) submitters_values = merge_submitters_values(submitter) end - unless check_field_conditions(submitters_values || submitter.values, field, fields_uuid_index) + unless check_field_conditions(submitters_values || submitter.values, field, submission.fields_uuid_index) submitter.values.delete(field['uuid']) required_field_uuids_acc.delete(field['uuid']) end