adjust condition fields

pull/475/head
Pete Matsyburka 6 months ago
parent 1876b3efba
commit cbff242a5d

@ -154,7 +154,7 @@ export default {
computed: { computed: {
fields () { fields () {
return this.template.fields.reduce((acc, f) => { 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) acc.push(f)
} }

@ -90,6 +90,10 @@ class Submission < ApplicationRecord
expire_at && expire_at <= Time.current expire_at && expire_at <= Time.current
end end
def fields_uuid_index
@fields_uuid_index ||= (template_fields || template.fields).index_by { |f| f['uuid'] }
end
def audit_trail_url def audit_trail_url
return if audit_trail.blank? return if audit_trail.blank?

@ -134,16 +134,11 @@ module Submissions
end end
def filtered_conditions_schema(submission, values: nil, include_submitter_uuid: nil) 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| (submission.template_schema || submission.template.schema).filter_map do |item|
if item['conditions'].present? 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) } 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 end
item item
@ -151,21 +146,21 @@ module Submissions
end end
def filtered_conditions_fields(submitter, only_submitter_fields: true) 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 values = nil
fields.filter_map do |field| fields.filter_map do |field|
next if field['submitter_uuid'] != submitter.uuid && only_submitter_fields next if field['submitter_uuid'] != submitter.uuid && only_submitter_fields
if field['conditions'].present? if field['conditions'].present?
fields_uuid_index ||= fields.index_by { |f| f['uuid'] } values ||= submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) }
values ||= submitter.submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) }
submitter_conditions = [] 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, include_submitter_uuid: submitter.uuid,
submitter_conditions_acc: submitter_conditions) submitter_conditions_acc: submitter_conditions)

@ -171,6 +171,8 @@ module Submitters
end end
def build_formula_values(submitter) def build_formula_values(submitter)
submission_values = nil
computed_values = submitter.submission.template_fields.each_with_object({}) do |field, acc| computed_values = submitter.submission.template_fields.each_with_object({}) do |field, acc|
next if field['submitter_uuid'] != submitter.uuid next if field['submitter_uuid'] != submitter.uuid
next if field['type'] == 'payment' next if field['type'] == 'payment'
@ -179,7 +181,14 @@ module Submitters
next if formula.blank? 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 end
computed_values.compact_blank computed_values.compact_blank
@ -204,8 +213,6 @@ module Submitters
def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil) def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil)
submission = submitter.submission submission = submitter.submission
fields_uuid_index = submission.template_fields.index_by { |e| e['uuid'] }
submitters_values = nil submitters_values = nil
has_other_submitters = submission.template_submitters.size > 1 has_other_submitters = submission.template_submitters.size > 1
@ -228,11 +235,11 @@ module Submitters
end end
if has_other_submitters && !submitters_values && 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) submitters_values = merge_submitters_values(submitter)
end 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']) submitter.values.delete(field['uuid'])
required_field_uuids_acc.delete(field['uuid']) required_field_uuids_acc.delete(field['uuid'])
end end

Loading…
Cancel
Save