From d5abb4611262f3b224f8dadc0a64c880e31f7dcf Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Sun, 28 Apr 2024 21:43:51 +0300 Subject: [PATCH] fix phone value assignment --- app/controllers/api/submitters_controller.rb | 31 ++++++++++++++++---- lib/submissions/create_from_submitters.rb | 10 +++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index 08b9e209..99d9f3a8 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -104,20 +104,41 @@ module Api end def assign_submitter_attrs(submitter, attrs) + values = attrs[:values]&.to_unsafe_h || {} + + assign_submission_fields(submitter.submission) + + phone_field_uuid = submitter.submission.template_fields.find do |f| + values[f['uuid']].present? && f['type'] == 'phone' + end&.dig('uuid') + submitter.email = Submissions.normalize_email(attrs[:email]) if attrs.key?(:email) - submitter.phone = attrs[:phone].to_s.gsub(/[^0-9+]/, '') if attrs.key?(:phone) - submitter.values = submitter.values.merge(attrs[:values].to_unsafe_h) if attrs[:values].present? + + if attrs.key?(:phone) + submitter.phone = attrs[:phone].to_s.gsub(/[^0-9+]/, '') + elsif values[phone_field_uuid].present? + submitter.phone = values[phone_field_uuid].to_s.gsub(/[^0-9+]/, '') + end + + values = values.except(phone_field_uuid) + + submitter.values = submitter.values.merge(values) if values.present? submitter.completed_at = attrs[:completed] ? Time.current : submitter.completed_at - submitter.external_id = attrs[:application_key] if attrs.key?(:application_key) - submitter.external_id = attrs[:external_id] if attrs.key?(:external_id) submitter.metadata = attrs[:metadata] if attrs.key?(:metadata) - assign_submission_fields(submitter.submission) + assign_external_id(submitter, attrs) assign_preferences(submitter, attrs) submitter end + def assign_external_id(submitter, attrs) + submitter.external_id = attrs[:application_key] if attrs.key?(:application_key) + submitter.external_id = attrs[:external_id] if attrs.key?(:external_id) + + submitter + end + def assign_submission_fields(submission) submission.template_fields ||= submission.template.fields submission.template_schema ||= submission.template.schema diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index bbadada6..6635ba70 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -150,15 +150,21 @@ module Submissions def build_submitter(submission:, attrs:, uuid:, is_order_sent:, mark_as_sent:, user:, preferences:) email = Submissions.normalize_email(attrs[:email]) submitter_preferences = Submitters.normalize_preferences(submission.account, user, attrs) + values = attrs[:values] || {} + + phone_field_uuid = + (submission.template_fields || submission.template.fields).find do |f| + values[f['uuid']].present? && f['type'] == 'phone' + end&.dig('uuid') submission.submitters.new( email:, - phone: attrs[:phone].to_s.gsub(/[^0-9+]/, ''), + phone: (attrs[:phone] || values[phone_field_uuid]).to_s.gsub(/[^0-9+]/, ''), name: attrs[:name], external_id: attrs[:external_id].presence || attrs[:application_key], completed_at: attrs[:completed].present? ? Time.current : nil, sent_at: mark_as_sent && email.present? && is_order_sent ? Time.current : nil, - values: attrs[:values] || {}, + values: values.except(phone_field_uuid), metadata: attrs[:metadata] || {}, preferences: preferences.merge(submitter_preferences) .merge({ default_values: attrs[:values] }.compact_blank)