diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 15223276..9477b456 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -188,7 +188,7 @@ module Api message: %i[subject body], submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role, :completed, :phone, :application_key, :external_id, :reply_to, :go_to_last, - :require_phone_2fa, :order, + :require_phone_2fa, :order, :invite_by, { metadata: {}, values: {}, roles: [], readonly_fields: [], message: %i[subject body], fields: [:name, :uuid, :default_value, :value, :title, :description, :readonly, :required, :validation_pattern, :invalid_message, diff --git a/lib/params/submission_create_validator.rb b/lib/params/submission_create_validator.rb index 8ce3becf..39b4f3cd 100644 --- a/lib/params/submission_create_validator.rb +++ b/lib/params/submission_create_validator.rb @@ -71,7 +71,11 @@ module Params end def validate_submitter(submitter_params) - required(submitter_params, %i[email phone name]) + if submitter_params['invite_by'].present? + required(submitter_params, :role) + else + required(submitter_params, %i[email phone name]) + end type(submitter_params, :name, String) type(submitter_params, :reply_to, String) diff --git a/lib/submissions/create_from_submitters.rb b/lib/submissions/create_from_submitters.rb index 0ae3b09b..0a7e2705 100644 --- a/lib/submissions/create_from_submitters.rb +++ b/lib/submissions/create_from_submitters.rb @@ -81,7 +81,7 @@ module Submissions next if submission.submitters.blank? - maybe_add_invite_submitters(submission, template) + maybe_add_invite_submitters(submission, template, attrs[:submitters]) submission.template = nil unless with_template @@ -102,8 +102,16 @@ module Submissions end end - def maybe_add_invite_submitters(submission, template) + def maybe_add_invite_submitters(submission, template, submitter_attrs) template.submitters.each_with_index do |item, index| + submitter_attr = submitter_attrs.find { |e| e['role'].to_s.casecmp?(item['name'].to_s) } + + if submitter_attr && submitter_attr['invite_by'].present? + invite_by_uuid = template.submitters.find { |s| s['name'] == submitter_attr['invite_by'] }&.dig('uuid') + + item = item.merge('invite_by_uuid' => invite_by_uuid) if invite_by_uuid + end + next if item['invite_by_uuid'].blank? && item['optional_invite_by_uuid'].blank? next if submission.template_submitters.any? { |e| e['uuid'] == item['uuid'] }