mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							2.5 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
module Submissions
 | 
						|
  DEFAULT_SUBMITTERS_ORDER = 'random'
 | 
						|
 | 
						|
  module_function
 | 
						|
 | 
						|
  def update_template_fields!(submission)
 | 
						|
    submission.template_fields = submission.template.fields
 | 
						|
    submission.template_schema = submission.template.schema
 | 
						|
    submission.template_submitters = submission.template.submitters if submission.template_submitters.blank?
 | 
						|
 | 
						|
    submission.save!
 | 
						|
  end
 | 
						|
 | 
						|
  def create_from_emails(template:, user:, emails:, source:, mark_as_sent: false)
 | 
						|
    emails = emails.to_s.scan(User::EMAIL_REGEXP) unless emails.is_a?(Array)
 | 
						|
 | 
						|
    emails.map do |email|
 | 
						|
      submission = template.submissions.new(created_by_user: user, source:, template_submitters: template.submitters)
 | 
						|
      submission.submitters.new(email:,
 | 
						|
                                uuid: template.submitters.first['uuid'],
 | 
						|
                                sent_at: mark_as_sent ? Time.current : nil)
 | 
						|
 | 
						|
      submission.tap(&:save!)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def create_from_submitters(template:, user:, submissions_attrs:, source:, mark_as_sent: false,
 | 
						|
                             submitters_order: DEFAULT_SUBMITTERS_ORDER)
 | 
						|
    submissions_attrs.map do |attrs|
 | 
						|
      submission = template.submissions.new(created_by_user: user, source:,
 | 
						|
                                            template_submitters: template.submitters, submitters_order:)
 | 
						|
 | 
						|
      attrs[:submitters].each_with_index do |submitter_attrs, index|
 | 
						|
        uuid =
 | 
						|
          submitter_attrs[:uuid].presence ||
 | 
						|
          template.submitters.find { |e| e['name'] == submitter_attrs[:role] }&.dig('uuid') ||
 | 
						|
          template.submitters[index]&.dig('uuid')
 | 
						|
 | 
						|
        next if uuid.blank?
 | 
						|
 | 
						|
        is_order_sent = submitters_order == 'random' || index.zero?
 | 
						|
 | 
						|
        submission.submitters.new(
 | 
						|
          email: submitter_attrs[:email],
 | 
						|
          phone: submitter_attrs[:phone].to_s.gsub(/[^0-9+]/, ''),
 | 
						|
          name: submitter_attrs[:name],
 | 
						|
          sent_at: mark_as_sent && submitter_attrs[:email].present? && is_order_sent ? Time.current : nil,
 | 
						|
          values: submitter_attrs[:values] || {},
 | 
						|
          uuid:
 | 
						|
        )
 | 
						|
      end
 | 
						|
 | 
						|
      submission.tap(&:save!)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def send_signature_requests(submissions, params)
 | 
						|
    submissions.each do |submission|
 | 
						|
      if submission.submitters_order_preserved?
 | 
						|
        first_submitter = submission.submitters.find { |e| e.uuid == submission.template_submitters.first['uuid'] }
 | 
						|
 | 
						|
        Submitters.send_signature_requests([first_submitter], params)
 | 
						|
      else
 | 
						|
        Submitters.send_signature_requests(submission.submitters, params)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |