invite party via field
This commit is contained in:
@@ -56,7 +56,9 @@ module Submissions
|
||||
template_submitter = template_submitters.find { |e| e['uuid'] == uuid }
|
||||
end
|
||||
|
||||
template_submitter = template_submitter.except('optional_invite_by_uuid', 'invite_by_uuid')
|
||||
template_submitter = template_submitter.except('optional_invite_by_uuid', 'invite_by_uuid',
|
||||
'invite_via_field_uuid')
|
||||
|
||||
template_submitter['order'] = submitter_attrs['order'] if submitter_attrs['order'].present?
|
||||
|
||||
submission.template_submitters << template_submitter
|
||||
@@ -113,7 +115,10 @@ module Submissions
|
||||
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 item['invite_by_uuid'].blank? &&
|
||||
item['optional_invite_by_uuid'].blank? &&
|
||||
item['invite_via_field_uuid'].blank?
|
||||
|
||||
next if submission.template_submitters.any? { |e| e['uuid'] == item['uuid'] }
|
||||
|
||||
item = item.merge('order' => submitter_attr['order']) if submitter_attr && submitter_attr['order'].present?
|
||||
|
||||
@@ -6,6 +6,7 @@ module Submitters
|
||||
RequiredFieldError = Class.new(StandardError)
|
||||
|
||||
VARIABLE_REGEXP = /\{\{?(\w+)\}\}?/
|
||||
PHONE_REGEXP = /[+\d()\s-]+/
|
||||
NONEDITABLE_FIELD_TYPES = %w[stamp heading strikethrough].freeze
|
||||
|
||||
STRFTIME_MAP = {
|
||||
@@ -52,7 +53,11 @@ module Submitters
|
||||
ActiveStorage::Attachment.where(uuid: touch_attachment_uuid, record: submitter).touch_all(:created_at)
|
||||
end
|
||||
|
||||
SubmissionEvents.create_with_tracking_data(submitter, 'complete_form', request) if params[:completed] == 'true'
|
||||
if params[:completed] == 'true'
|
||||
maybe_invite_via_field(submitter, request)
|
||||
|
||||
SubmissionEvents.create_with_tracking_data(submitter, 'complete_form', request)
|
||||
end
|
||||
|
||||
submitter.save!
|
||||
end
|
||||
@@ -405,6 +410,47 @@ module Submitters
|
||||
end
|
||||
end
|
||||
|
||||
def maybe_invite_via_field(submitter, request)
|
||||
submission = submitter.submission
|
||||
|
||||
is_invited = false
|
||||
|
||||
submission.template_submitters.each do |s|
|
||||
field_uuid = s['invite_via_field_uuid']
|
||||
|
||||
next if field_uuid.blank?
|
||||
|
||||
field = submission.template_fields.find { |e| e['uuid'] == field_uuid }
|
||||
|
||||
next unless field
|
||||
next unless field['submitter_uuid'] == submitter.uuid
|
||||
|
||||
next if submission.submitters.exists?(uuid: s['uuid'])
|
||||
|
||||
value = submitter.values[field_uuid]
|
||||
|
||||
next if value.blank?
|
||||
|
||||
if value.include?('@')
|
||||
email = Submissions.normalize_email(value)
|
||||
elsif value.match?(PHONE_REGEXP)
|
||||
phone = value.gsub(/[^+\d]/, '')
|
||||
end
|
||||
|
||||
next if email.blank? && phone.blank?
|
||||
|
||||
submission.submitters.create!(uuid: s['uuid'], email:, phone:, account_id: submitter.account_id)
|
||||
|
||||
SubmissionEvents.create_with_tracking_data(submitter, 'invite_party', request, { uuid: submitter.uuid })
|
||||
|
||||
is_invited = true
|
||||
end
|
||||
|
||||
submission.update!(submitters_order: :preserved) if is_invited
|
||||
|
||||
submitter
|
||||
end
|
||||
|
||||
def validate_value!(_value, field, _params, submitter, _request)
|
||||
if field['readonly'] == true
|
||||
Rollbar.warning("Readonly field #{submitter.id}: #{field['uuid']}") if defined?(Rollbar)
|
||||
|
||||
@@ -72,6 +72,7 @@ module Templates
|
||||
def filter_undefined_submitters(template_submitters)
|
||||
template_submitters.to_a.select do |item|
|
||||
item['invite_by_uuid'].blank? && item['optional_invite_by_uuid'].blank? &&
|
||||
item['invite_via_field_uuid'].blank? &&
|
||||
item['linked_to_uuid'].blank? && item['is_requester'].blank? && item['email'].blank?
|
||||
end
|
||||
end
|
||||
|
||||
+20
-16
@@ -4,7 +4,7 @@ module Templates
|
||||
module Clone
|
||||
module_function
|
||||
|
||||
# rubocop:disable Metrics, Style/CombinableLoops
|
||||
# rubocop:disable Metrics
|
||||
def call(original_template, author:, external_id: nil, name: nil, folder_name: nil)
|
||||
template = original_template.account.templates.new
|
||||
|
||||
@@ -49,20 +49,6 @@ module Templates
|
||||
submitter['uuid'] = new_submitter_uuid
|
||||
end
|
||||
|
||||
cloned_submitters.each do |submitter|
|
||||
if submitter['optional_invite_by_uuid'].present?
|
||||
submitter['optional_invite_by_uuid'] = submitter_uuids_replacements[submitter['optional_invite_by_uuid']]
|
||||
end
|
||||
|
||||
if submitter['invite_by_uuid'].present?
|
||||
submitter['invite_by_uuid'] = submitter_uuids_replacements[submitter['invite_by_uuid']]
|
||||
end
|
||||
|
||||
if submitter['linked_to_uuid'].present?
|
||||
submitter['linked_to_uuid'] = submitter_uuids_replacements[submitter['linked_to_uuid']]
|
||||
end
|
||||
end
|
||||
|
||||
cloned_preferences['submitters'].to_a.each do |submitter|
|
||||
submitter['uuid'] = submitter_uuids_replacements[submitter['uuid']]
|
||||
end
|
||||
@@ -97,8 +83,26 @@ module Templates
|
||||
end
|
||||
end
|
||||
|
||||
cloned_submitters.each do |submitter|
|
||||
if submitter['optional_invite_by_uuid'].present?
|
||||
submitter['optional_invite_by_uuid'] = submitter_uuids_replacements[submitter['optional_invite_by_uuid']]
|
||||
end
|
||||
|
||||
if submitter['invite_by_uuid'].present?
|
||||
submitter['invite_by_uuid'] = submitter_uuids_replacements[submitter['invite_by_uuid']]
|
||||
end
|
||||
|
||||
if submitter['linked_to_uuid'].present?
|
||||
submitter['linked_to_uuid'] = submitter_uuids_replacements[submitter['linked_to_uuid']]
|
||||
end
|
||||
|
||||
if submitter['invite_via_field_uuid'].present?
|
||||
submitter['invite_via_field_uuid'] = field_uuids_replacements[submitter['invite_via_field_uuid']]
|
||||
end
|
||||
end
|
||||
|
||||
[cloned_submitters, cloned_fields, cloned_schema, cloned_preferences]
|
||||
end
|
||||
# rubocop:enable Metrics, Style/CombinableLoops
|
||||
# rubocop:enable Metrics
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user