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.
		
		
		
		
		
			
		
			
				
					
					
						
							66 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							66 lines
						
					
					
						
							2.1 KiB
						
					
					
				| # frozen_string_literal: true
 | |
| 
 | |
| module Templates
 | |
|   module ReplaceAttachments
 | |
|     module_function
 | |
| 
 | |
|     # rubocop:disable Metrics
 | |
|     def call(template, params = {}, extract_fields: false)
 | |
|       documents = Templates::CreateAttachments.call(template, params, extract_fields:)
 | |
|       submitter = template.submitters.first
 | |
| 
 | |
|       documents.each_with_index do |document, index|
 | |
|         replaced_document_schema = template.schema[index]
 | |
| 
 | |
|         template.schema[index] = { attachment_uuid: document.uuid, name: document.filename.base }
 | |
| 
 | |
|         if replaced_document_schema
 | |
|           template.fields.each do |field|
 | |
|             next if field['areas'].blank?
 | |
| 
 | |
|             field['areas'].each do |area|
 | |
|               if area['attachment_uuid'] == replaced_document_schema['attachment_uuid']
 | |
|                 area['attachment_uuid'] = document.uuid
 | |
|               end
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         next if template.fields.any? { |f| f['areas']&.any? { |a| a['attachment_uuid'] == document.uuid } }
 | |
|         next if submitter.blank? || document.metadata.dig('pdf', 'fields').blank?
 | |
| 
 | |
|         pdf_fields = document.metadata['pdf'].delete('fields').to_a
 | |
|         pdf_fields.each { |f| f['submitter_uuid'] = submitter['uuid'] }
 | |
| 
 | |
|         if index.positive? && pdf_fields.present?
 | |
|           preview_document = template.schema[index - 1]
 | |
|           preview_document_last_field = template.fields.reverse.find do |f|
 | |
|             f['areas']&.any? do |a|
 | |
|               a['attachment_uuid'] == preview_document[:attachment_uuid]
 | |
|             end
 | |
|           end
 | |
| 
 | |
|           if preview_document_last_field
 | |
|             last_preview_document_field_index = template.fields.find_index do |f|
 | |
|               f['uuid'] == preview_document_last_field['uuid']
 | |
|             end
 | |
|           end
 | |
| 
 | |
|           if last_preview_document_field_index
 | |
|             template.fields.insert(index, *pdf_fields)
 | |
|           else
 | |
|             template.fields += pdf_fields
 | |
|           end
 | |
|         elsif pdf_fields.present?
 | |
|           template.fields += pdf_fields
 | |
| 
 | |
|           template.schema[index]['pending_fields'] = true
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       documents
 | |
|     end
 | |
|     # rubocop:enable Metrics
 | |
|   end
 | |
| end
 |