use submission completed_at

This commit is contained in:
Pete Matsyburka
2026-07-01 21:50:12 +03:00
parent 9194879c43
commit ac7cc77017
24 changed files with 91 additions and 97 deletions
+9 -6
View File
@@ -37,19 +37,22 @@ module Submissions
arel_table = Submitter.arel_table
arel = arel_table[:email].lower.matches(term)
.or(arel_table[:phone].matches(term))
.or(arel_table[:name].lower.matches(term))
submitter_arel = arel_table[:email].lower.matches(term)
.or(arel_table[:phone].matches(term))
.or(arel_table[:name].lower.matches(term))
arel = arel.or(Arel::Table.new(:submitters)[:values].matches(term)) if search_values
submitter_arel = submitter_arel.or(arel_table[:values].matches(term)) if search_values
arel = Submitter.where(arel_table[:submission_id].eq(Submission.arel_table[:id]))
.where(submitter_arel).select(1).arel.exists
if search_template
submissions = submissions.left_joins(:template)
arel = arel.or(Template.arel_table[:name].lower.matches("%#{sanitized}%"))
arel = arel.or(Template.arel_table[:name].lower.matches(term))
end
submissions.joins(:submitters).where(arel).group(:id)
submissions.where(arel)
end
def fulltext_search(current_user, submissions, keyword, search_template: false)
+1 -1
View File
@@ -15,7 +15,7 @@ module Submissions
def call(submission)
return nil unless submission
raise NotCompletedYet unless submission.submitters.all?(&:completed_at?)
raise NotCompletedYet unless submission.completed_at?
total_wait_time ||= 0
key = [KEY_PREFIX, submission.id].join(':')
+3 -4
View File
@@ -104,16 +104,15 @@ module Submissions
def filter_by_completed_at(submissions, filters)
return submissions unless filters[:completed_at_from].present? || filters[:completed_at_to].present?
completed_arel = Submitter.arel_table[:completed_at].maximum
submissions = submissions.completed.joins(:submitters).group(:id)
submissions = submissions.completed
if filters[:completed_at_from].present?
submissions = submissions.having(completed_arel.gteq(filters[:completed_at_from]))
submissions = submissions.where(completed_at: filters[:completed_at_from]..)
end
return submissions if filters[:completed_at_to].blank?
submissions.having(completed_arel.lteq(filters[:completed_at_to].end_of_day))
submissions.where(completed_at: ..filters[:completed_at_to].end_of_day)
end
def normalize_filter_params(params, current_user)
+5 -5
View File
@@ -37,8 +37,8 @@ module Submissions
json['fields'] = submission.template_fields || submission.template&.fields
end
if submitters.all?(&:completed_at?)
last_submitter = submitters.max_by(&:completed_at)
if submission.completed_at?
last_submitter = submitters.select(&:completed_at?).max_by(&:completed_at)
if with_documents
json['documents'] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents']
@@ -49,7 +49,7 @@ module Submissions
json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params, expires_at:)
json['status'] = 'completed'
json['completed_at'] = last_submitter.completed_at.as_json
json['completed_at'] = submission.completed_at.as_json
else
json['documents'] = [] if with_documents
json['audit_log_url'] = nil
@@ -73,12 +73,12 @@ module Submissions
end
def maybe_build_combined_url(submitters, submission, params, expires_at: nil)
return unless submitters.all?(&:completed_at?)
return unless submission.completed_at?
attachment = submission.combined_document_attachment
if !attachment && params[:include].to_s.include?('combined_document_url')
submitter = submitters.max_by(&:completed_at)
submitter = submitters.select(&:completed_at?).max_by(&:completed_at)
attachment = Submissions::EnsureCombinedGenerated.call(submitter)
end
+3 -3
View File
@@ -108,7 +108,7 @@ module Submitters
if AccountConfig.exists?(account_id: submitter.submission.account_id,
key: AccountConfig::COMBINE_PDF_RESULT_KEY,
value: true) &&
submitter.submission.submitters.all?(&:completed_at?) &&
submitter.submission.completed_at? &&
submitter.submission.template_fields.none? { |f| f['type'] == 'verification' }
return [submitter.submission.combined_document_attachment || Submissions::EnsureCombinedGenerated.call(submitter)]
end
@@ -207,7 +207,7 @@ module Submitters
filename = filename.gsub('{document.name}', blob.filename.base)
filename = filename.gsub(' - {submission.status}') do
if submitter.submission.submitters.all?(&:completed_at?)
if submitter.submission.completed_at?
status =
if submitter.submission.template_fields.any? { |f| f['type'] == 'signature' }
I18n.t(:signed)
@@ -264,7 +264,7 @@ module Submitters
end
def build_combined_url(submitter, ttl: FILES_TTL)
return if submitter.submission.submitters.exists?(completed_at: nil)
return unless submitter.submission.completed_at?
return if submitter.submission.submitters.order(:completed_at).last != submitter
attachment = submitter.submission.combined_document_attachment
+2 -4
View File
@@ -93,11 +93,9 @@ module Submitters
end
def build_submission_status(submission)
submitters = submission.submitters
if submitters.all?(&:completed_at?)
if submission.completed_at?
'completed'
elsif submitters.any?(&:declined_at?)
elsif submission.submitters.any?(&:declined_at?)
'declined'
else
submission.expired? ? 'expired' : 'pending'