From 69376c0faf61bc385d4bc164688c3412f91b556f Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Mon, 31 Mar 2025 21:50:04 +0300 Subject: [PATCH 01/10] fix acro form fields --- lib/templates/find_acro_fields.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/templates/find_acro_fields.rb b/lib/templates/find_acro_fields.rb index 97088390..b9fcc3d8 100644 --- a/lib/templates/find_acro_fields.rb +++ b/lib/templates/find_acro_fields.rb @@ -190,7 +190,7 @@ module Templates } elsif field.field_type == :Tx if field[:AA] && ((field[:AA][:F] && field[:AA][:F][:JS].include?('AFDate_')) || - (field[:AA][:K] && field[:AA][:F][:JS].include?('AFDate_'))) + (field[:AA][:K] && field[:AA][:K][:JS].include?('AFDate_'))) if (format = field[:AA][:F][:JS][DATE_FORMAT_REGEXP]) attrs[:preferences] ||= {} attrs[:preferences][:format] = format.upcase From e5db61e3583d2d4b2115cca53aadb703891d97d0 Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Mon, 31 Mar 2025 16:59:33 +0300 Subject: [PATCH 02/10] add API specs for completed submitter --- spec/requests/submissions_spec.rb | 17 ++++++++++++++++- spec/requests/submitters_spec.rb | 21 +++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/spec/requests/submissions_spec.rb b/spec/requests/submissions_spec.rb index 502f6520..020bd908 100644 --- a/spec/requests/submissions_spec.rb +++ b/spec/requests/submissions_spec.rb @@ -104,6 +104,21 @@ describe 'Submission API', type: :request do expect(response.parsed_body).to eq(JSON.parse(create_submission_body(submission).to_json)) end + it 'creates a submission when the submitter is marked as completed' do + post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: { + template_id: templates[0].id, + submitters: [{ role: 'First Party', email: 'john.doe@example.com', completed: true }] + }.to_json + + expect(response).to have_http_status(:ok) + + submission = Submission.last + submitter = submission.submitters.first + + expect(submitter.status).to eq('completed') + expect(submitter.completed_at).not_to be_nil + end + it 'creates a submission when some submitter roles are not provided' do post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: { template_id: multiple_submitters_template.id, @@ -395,7 +410,7 @@ describe 'Submission API', type: :request do preferences: { send_email: true, send_sms: false }, role: submitter.template.submitters.find { |s| s['uuid'] == submitter.uuid }['name'], embed_src: "#{Docuseal::DEFAULT_APP_URL}/s/#{submitter.slug}", - values: [] + values: Submitters::SerializeForWebhook.build_values_array(submitter) } end end diff --git a/spec/requests/submitters_spec.rb b/spec/requests/submitters_spec.rb index ffe35cd9..023de7ee 100644 --- a/spec/requests/submitters_spec.rb +++ b/spec/requests/submitters_spec.rb @@ -95,6 +95,23 @@ describe 'Submitter API', type: :request do expect(submitter.email).to eq('john.doe+updated@example.com') expect(response.parsed_body).to eq(JSON.parse(update_submitter_body(submitter).to_json)) end + + it 'marks a submitter as completed' do + submitter = create(:submission, :with_submitters, :with_events, + template: templates[0], + created_by_user: author).submitters.first + + put "/api/submitters/#{submitter.id}", headers: { 'x-auth-token': author.access_token.token }, params: { + completed: true + }.to_json + + expect(response).to have_http_status(:ok) + + submitter.reload + + expect(submitter.status).to eq('completed') + expect(submitter.completed_at).not_to be_nil + end end private @@ -134,8 +151,8 @@ describe 'Submitter API', type: :request do data: event.data.slice(:reason) } end, - values: [], - documents: [], + values: Submitters::SerializeForWebhook.build_values_array(submitter), + documents: Submitters::SerializeForWebhook.build_documents_array(submitter), role: submitter.template.submitters.find { |s| s['uuid'] == submitter.uuid }['name'] } end From dd559e90f16c248e3deea20707689402903f0094 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 1 Apr 2025 10:12:54 +0300 Subject: [PATCH 03/10] add archived filter --- app/controllers/api/submissions_controller.rb | 4 ++++ app/models/submission.rb | 1 + 2 files changed, 5 insertions(+) diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 51a8e43e..89d361ec 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -17,6 +17,10 @@ module Api submissions = submissions.joins(template: :folder).where(folder: { name: params[:template_folder] }) end + if params.key?(:archived) + submissions = params[:archived].in?(['true', true]) ? submissions.archived : submissions.active + end + submissions = Submissions::Filter.call(submissions, current_user, params) submissions = paginate(submissions.preload(:created_by_user, :submitters, diff --git a/app/models/submission.rb b/app/models/submission.rb index c0f1c92c..f42749b2 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -64,6 +64,7 @@ class Submission < ApplicationRecord through: :template, source: :documents_attachments scope :active, -> { where(archived_at: nil) } + scope :archived, -> { where.not(archived_at: nil) } scope :pending, -> { joins(:submitters).where(submitters: { completed_at: nil }).group(:id) } scope :completed, lambda { where.not(Submitter.where(Submitter.arel_table[:submission_id].eq(Submission.arel_table[:id]) From 2573d8cb1975a5cb10ec364c65c32218d887f68e Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 1 Apr 2025 10:13:50 +0300 Subject: [PATCH 04/10] fix n+1 --- lib/submissions/generate_export_files.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/submissions/generate_export_files.rb b/lib/submissions/generate_export_files.rb index 506ee1ba..a42878d8 100644 --- a/lib/submissions/generate_export_files.rb +++ b/lib/submissions/generate_export_files.rb @@ -58,7 +58,8 @@ module Submissions end def build_table_rows(submissions) - submissions.map do |submission| + submissions.preload(submitters: [attachments_attachments: :blob, documents_attachments: :blob]) + .find_each.map do |submission| submission_data = [] submitters_count = submission.submitters.size From 7a4629bf79b77e975cf7619ac3d32c8f773b691b Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Mon, 17 Feb 2025 19:47:46 +0200 Subject: [PATCH 05/10] improve drag'n'drop in the builder --- app/javascript/template_builder/builder.vue | 126 ++++++++++++------ app/javascript/template_builder/document.vue | 6 + .../template_builder/drag_placeholder.vue | 115 ++++++++++++++++ app/javascript/template_builder/field.vue | 9 +- app/javascript/template_builder/fields.vue | 67 +++++++--- app/javascript/template_builder/page.vue | 30 ++++- 6 files changed, 290 insertions(+), 63 deletions(-) create mode 100644 app/javascript/template_builder/drag_placeholder.vue diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index 1cc9dbf1..cf3fe21a 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -1,9 +1,18 @@