@@ -5,34 +5,17 @@ class SubmissionDocumentsController < ApiBaseController
55 load_and_authorize_resource :submission
66
77 def index
8+ is_merge = params [ :merge ] == 'true' &&
9+ ( @submission . schema_documents || @submission . template . schema_documents ) . size > 1
10+
811 documents =
912 if @submission . submitters . all? ( &:completed_at? )
10- last_submitter = @submission . submitters . max_by ( &:completed_at )
11-
12- if last_submitter . documents_attachments . blank?
13- last_submitter . documents_attachments = Submissions ::EnsureResultGenerated . call ( last_submitter )
14- end
15-
16- last_submitter . documents_attachments
13+ build_completed_documents ( @submission , merge : is_merge )
1714 else
18- values_hash = Submissions ::GeneratePreviewAttachments . build_values_hash ( @submission )
19-
20- if @submission . preview_documents . present? &&
21- @submission . preview_documents . all? { |s | s . metadata [ 'values_hash' ] == values_hash }
22- @submission . preview_documents
23- else
24- ApplicationRecord . no_touching do
25- @submission . preview_documents . each ( &:destroy )
26- end
27-
28- Submissions ::GeneratePreviewAttachments . call ( @submission , values_hash :)
29- end
15+ build_preview_documents ( @submission , merge : is_merge )
3016 end
3117
32- ActiveRecord ::Associations ::Preloader . new (
33- records : documents ,
34- associations : [ :blob ]
35- ) . call
18+ ActiveRecord ::Associations ::Preloader . new ( records : documents , associations : [ :blob ] ) . call
3619
3720 expires_at = Accounts . link_expires_at ( current_account )
3821
@@ -43,5 +26,50 @@ def index
4326 end
4427 }
4528 end
29+
30+ private
31+
32+ def build_completed_documents ( submission , merge : false )
33+ last_submitter = submission . submitters . max_by ( &:completed_at )
34+
35+ if merge
36+ if submission . merged_document_attachment . blank?
37+ submission . merged_document_attachment =
38+ Submissions ::GenerateCombinedAttachment . call ( last_submitter , with_audit : false )
39+ end
40+
41+ [ submission . merged_document_attachment ]
42+ else
43+ if last_submitter . documents_attachments . blank?
44+ last_submitter . documents_attachments = Submissions ::EnsureResultGenerated . call ( last_submitter )
45+ end
46+
47+ last_submitter . documents_attachments
48+ end
49+ end
50+
51+ def build_preview_documents ( submission , merge : false )
52+ values_hash = Submissions ::GeneratePreviewAttachments . build_values_hash ( submission )
53+
54+ if merge
55+ if submission . preview_merged_document_attachment . present? &&
56+ submission . preview_merged_document_attachment . metadata [ 'values_hash' ] == values_hash
57+ [ submission . preview_merged_document_attachment ]
58+ else
59+ ApplicationRecord . no_touching { submission . preview_merged_document_attachment &.destroy }
60+
61+ Submissions ::GeneratePreviewAttachments . call ( submission , values_hash :, merge : true )
62+ end
63+ elsif submission . preview_documents . present? &&
64+ submission . preview_documents . all? { |s | s . metadata [ 'values_hash' ] == values_hash }
65+ submission . preview_documents
66+ else
67+ ApplicationRecord . no_touching do
68+ submission . preview_documents . each ( &:destroy )
69+ end
70+
71+ Submissions ::GeneratePreviewAttachments . call ( submission , values_hash :)
72+ end
73+ end
4674 end
4775end
0 commit comments