adjust submissions response
This commit is contained in:
@@ -23,7 +23,10 @@ module Api
|
|||||||
audit_trail_attachment: :blob))
|
audit_trail_attachment: :blob))
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
data: submissions.as_json(Submissions::SerializeForApi::SERIALIZE_PARAMS),
|
data: submissions.map do |s|
|
||||||
|
Submissions::SerializeForApi.call(s, s.submitters, params,
|
||||||
|
with_events: false, with_documents: false, with_values: false)
|
||||||
|
end,
|
||||||
pagination: {
|
pagination: {
|
||||||
count: submissions.size,
|
count: submissions.size,
|
||||||
next: submissions.last&.id,
|
next: submissions.last&.id,
|
||||||
|
|||||||
@@ -6,10 +6,7 @@ module Submissions
|
|||||||
only: %i[id slug source submitters_order expire_at created_at updated_at archived_at],
|
only: %i[id slug source submitters_order expire_at created_at updated_at archived_at],
|
||||||
methods: %i[audit_log_url combined_document_url],
|
methods: %i[audit_log_url combined_document_url],
|
||||||
include: {
|
include: {
|
||||||
submitters: { only: %i[id slug uuid name email phone
|
submitters: { only: %i[id] },
|
||||||
completed_at opened_at sent_at declined_at
|
|
||||||
created_at updated_at external_id metadata],
|
|
||||||
methods: %i[status application_key] },
|
|
||||||
template: { only: %i[id name external_id created_at updated_at],
|
template: { only: %i[id name external_id created_at updated_at],
|
||||||
methods: %i[folder_name] },
|
methods: %i[folder_name] },
|
||||||
created_by_user: { only: %i[id email first_name last_name] }
|
created_by_user: { only: %i[id email first_name last_name] }
|
||||||
@@ -18,29 +15,35 @@ module Submissions
|
|||||||
|
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
def call(submission, submitters = nil, params = {})
|
def call(submission, submitters = nil, params = {}, with_events: true, with_documents: true, with_values: true)
|
||||||
submitters ||= submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob)
|
submitters ||= submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob)
|
||||||
|
|
||||||
serialized_submitters = submitters.map { |submitter| Submitters::SerializeForApi.call(submitter, params:) }
|
serialized_submitters = submitters.map do |submitter|
|
||||||
|
Submitters::SerializeForApi.call(submitter, with_documents:, with_events: false, with_values:, params:)
|
||||||
|
end
|
||||||
|
|
||||||
json = submission.as_json(SERIALIZE_PARAMS)
|
json = submission.as_json(SERIALIZE_PARAMS)
|
||||||
|
|
||||||
json['submission_events'] = Submitters::SerializeForApi.serialize_events(submission.submission_events)
|
json['created_by_user'] ||= nil
|
||||||
|
|
||||||
|
if with_events
|
||||||
|
json['submission_events'] = Submitters::SerializeForApi.serialize_events(submission.submission_events)
|
||||||
|
end
|
||||||
|
|
||||||
json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params)
|
json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params)
|
||||||
|
|
||||||
if submitters.all?(&:completed_at?)
|
if submitters.all?(&:completed_at?)
|
||||||
last_submitter = submitters.max_by(&:completed_at)
|
last_submitter = submitters.max_by(&:completed_at)
|
||||||
|
|
||||||
json[:documents] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents']
|
if with_documents
|
||||||
|
json[:documents] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents']
|
||||||
|
end
|
||||||
|
|
||||||
json[:status] = 'completed'
|
json[:status] = 'completed'
|
||||||
json[:completed_at] = last_submitter.completed_at
|
json[:completed_at] = last_submitter.completed_at
|
||||||
else
|
else
|
||||||
json[:documents] = []
|
json[:documents] = [] if with_documents
|
||||||
json[:status] = if submitters.any?(&:declined_at?)
|
json[:status] = build_status(submission, submitters)
|
||||||
'declined'
|
|
||||||
else
|
|
||||||
submission.expired? ? 'expired' : 'pending'
|
|
||||||
end
|
|
||||||
json[:completed_at] = nil
|
json[:completed_at] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -49,6 +52,14 @@ module Submissions
|
|||||||
json
|
json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_status(submission, submitters)
|
||||||
|
if submitters.any?(&:declined_at?)
|
||||||
|
'declined'
|
||||||
|
else
|
||||||
|
submission.expired? ? 'expired' : 'pending'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def maybe_build_combined_url(submitters, submission, params)
|
def maybe_build_combined_url(submitters, submission, params)
|
||||||
return unless submitters.all?(&:completed_at?)
|
return unless submitters.all?(&:completed_at?)
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,13 @@ module Submitters
|
|||||||
|
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
def call(submitter, with_template: false, with_events: false, with_documents: true, with_urls: false, params: {})
|
def call(submitter, with_template: false, with_events: false, with_documents: true, with_urls: false,
|
||||||
|
with_values: true, params: {})
|
||||||
ActiveRecord::Associations::Preloader.new(
|
ActiveRecord::Associations::Preloader.new(
|
||||||
records: [submitter],
|
records: [submitter],
|
||||||
associations: if with_documents
|
associations: if with_documents
|
||||||
[documents_attachments: :blob, attachments_attachments: :blob]
|
[documents_attachments: :blob, attachments_attachments: :blob]
|
||||||
else
|
elsif with_values
|
||||||
[attachments_attachments: :blob]
|
[attachments_attachments: :blob]
|
||||||
end
|
end
|
||||||
).call
|
).call
|
||||||
@@ -26,7 +27,7 @@ module Submitters
|
|||||||
additional_attrs['fields'] = SerializeForWebhook.build_fields_array(submitter)
|
additional_attrs['fields'] = SerializeForWebhook.build_fields_array(submitter)
|
||||||
end
|
end
|
||||||
|
|
||||||
additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter)
|
additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter) if with_values
|
||||||
additional_attrs['documents'] = SerializeForWebhook.build_documents_array(submitter) if with_documents
|
additional_attrs['documents'] = SerializeForWebhook.build_documents_array(submitter) if with_documents
|
||||||
additional_attrs['preferences'] = submitter.preferences.except('default_values')
|
additional_attrs['preferences'] = submitter.preferences.except('default_values')
|
||||||
additional_attrs['submission_events'] = serialize_events(submitter.submission_events) if with_events
|
additional_attrs['submission_events'] = serialize_events(submitter.submission_events) if with_events
|
||||||
|
|||||||
Reference in New Issue
Block a user