diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index f85e2f60..1fd06d74 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -146,9 +146,15 @@ module Api if attrs[:completed] submitter.values = Submitters::SubmitValues.merge_default_values(submitter) - submitter.values = Submitters::SubmitValues.merge_formula_values(submitter) submitter.values = Submitters::SubmitValues.maybe_remove_condition_values(submitter) + formula_values = Submitters::SubmitValues.build_formula_values(submitter) + + if formula_values.present? + submitter.values = submitter.values.merge(formula_values) + submitter.values = Submitters::SubmitValues.maybe_remove_condition_values(submitter) + end + submitter.values = submitter.values.transform_values do |v| v == '{{date}}' ? Time.current.in_time_zone(submitter.account.timezone).to_date.to_s : v end diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue index b7d17e27..addf7570 100644 --- a/app/javascript/submission_form/form.vue +++ b/app/javascript/submission_form/form.vue @@ -1037,7 +1037,7 @@ export default { }, []) }, formulaFields () { - return this.fields.filter((f) => f.preferences?.formula && f.type !== 'payment') + return this.fields.filter((f) => f.preferences?.formula && f.type !== 'payment' && this.checkFieldConditions(f) && this.checkFieldDocumentsConditions(f)) }, attachmentsIndex () { return this.attachments.reduce((acc, a) => { diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index c2144ad8..083c3573 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -225,9 +225,15 @@ module Submissions def assign_completed_attributes(submitter) submitter.values = Submitters::SubmitValues.merge_default_values(submitter) - submitter.values = Submitters::SubmitValues.merge_formula_values(submitter) submitter.values = Submitters::SubmitValues.maybe_remove_condition_values(submitter) + formula_values = Submitters::SubmitValues.build_formula_values(submitter) + + if formula_values.present? + submitter.values = submitter.values.merge(formula_values) + submitter.values = Submitters::SubmitValues.maybe_remove_condition_values(submitter) + end + submitter.values = submitter.values.transform_values do |v| v == '{{date}}' ? Time.current.in_time_zone(submitter.submission.account.timezone).to_date.to_s : v end diff --git a/lib/submitters/submit_values.rb b/lib/submitters/submit_values.rb index b23e7005..15f2da02 100644 --- a/lib/submitters/submit_values.rb +++ b/lib/submitters/submit_values.rb @@ -53,9 +53,17 @@ module Submitters submitter.completed_at = Time.current submitter.ip = request.remote_ip submitter.ua = request.user_agent + submitter.values = merge_default_values(submitter) submitter.values = maybe_remove_condition_values(submitter) - submitter.values = merge_formula_values(submitter) + + formula_values = build_formula_values(submitter) + + if formula_values.present? + submitter.values = submitter.values.merge(formula_values) + submitter.values = maybe_remove_condition_values(submitter) + end + submitter.values = submitter.values.transform_values do |v| v == '{{date}}' ? Time.current.in_time_zone(submitter.account.timezone).to_date.to_s : v end @@ -149,7 +157,7 @@ module Submitters default_values.compact_blank.merge(submitter.values) end - def merge_formula_values(submitter) + def build_formula_values(submitter) computed_values = submitter.submission.template_fields.each_with_object({}) do |field, acc| next if field['submitter_uuid'] != submitter.uuid next if field['type'] == 'payment' @@ -161,7 +169,7 @@ module Submitters acc[field['uuid']] = calculate_formula_value(formula, submitter.values.merge(acc.compact_blank)) end - submitter.values.merge(computed_values.compact_blank) + computed_values.compact_blank end def calculate_formula_value(_formula, _values)