store multiple submitter results
This commit is contained in:
@@ -5,14 +5,14 @@ module Api
|
||||
skip_before_action :authenticate_user!
|
||||
|
||||
def create
|
||||
submission = Submission.find_by!(slug: params[:submission_slug]) unless current_account
|
||||
submitter = Submitter.find_by!(slug: params[:submitter_slug]) unless current_account
|
||||
|
||||
blob = ActiveStorage::Blob.find_signed(params[:blob_signed_id])
|
||||
|
||||
attachment = ActiveStorage::Attachment.create!(
|
||||
blob:,
|
||||
name: params[:name],
|
||||
record: submission || current_account
|
||||
record: submitter || current_account
|
||||
)
|
||||
|
||||
render json: attachment.as_json(only: %i[uuid], methods: %i[url filename content_type])
|
||||
|
||||
@@ -9,14 +9,15 @@ class SendSubmissionEmailController < ApplicationController
|
||||
def success; end
|
||||
|
||||
def create
|
||||
@submission =
|
||||
@submitter =
|
||||
if params[:template_slug]
|
||||
Submission.joins(:template).find_by!(email: params[:email], template: { slug: params[:template_slug] })
|
||||
Submitter.joins(submission: :template).find_by!(email: params[:email],
|
||||
template: { slug: params[:template_slug] })
|
||||
else
|
||||
Submission.find_by!(slug: params[:submission_slug])
|
||||
Submitter.find_by!(slug: params[:submitter_slug])
|
||||
end
|
||||
|
||||
SubmissionMailer.copy_to_submitter(@submission).deliver_later!
|
||||
SubmitterMailer.copy_to_submitter(@submitter).deliver_later!
|
||||
|
||||
respond_to do |f|
|
||||
f.html { redirect_to success_send_submission_email_index_path }
|
||||
|
||||
@@ -8,25 +8,27 @@ class StartFormController < ApplicationController
|
||||
before_action :load_template
|
||||
|
||||
def show
|
||||
@submission = @template.submissions.new
|
||||
@submitter = @template.submissions.new.submitters.new(uuid: @template.submitters.first['uuid'])
|
||||
end
|
||||
|
||||
def update
|
||||
@submission = @template.submissions.find_or_initialize_by(
|
||||
deleted_at: nil, **submission_params
|
||||
)
|
||||
@submitter = Submitter.where(submission: @template.submissions.where(submission: { deleted_at: nil }))
|
||||
.find_or_initialize_by(**submitter_params)
|
||||
|
||||
if @submission.completed_at?
|
||||
if @submitter.completed_at?
|
||||
redirect_to start_form_completed_path(@template.slug, email: submission_params[:email])
|
||||
else
|
||||
@submission.assign_attributes(
|
||||
@submitter.assign_attributes(
|
||||
uuid: @template.submitters.first['uuid'],
|
||||
opened_at: Time.current,
|
||||
ip: request.remote_ip,
|
||||
ua: request.user_agent
|
||||
)
|
||||
|
||||
if @submission.save
|
||||
redirect_to submit_form_path(@submission.slug)
|
||||
@submitter.build_submission(template: @template)
|
||||
|
||||
if @submitter.save
|
||||
redirect_to submit_form_path(@submitter.slug)
|
||||
else
|
||||
render :show
|
||||
end
|
||||
@@ -34,13 +36,13 @@ class StartFormController < ApplicationController
|
||||
end
|
||||
|
||||
def completed
|
||||
@submission = @template.submissions.find_by(email: params[:email])
|
||||
@submitter = Submitter.where(submission: @template.submitters).find_by(email: params[:email])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def submission_params
|
||||
params.require(:submission).permit(:email)
|
||||
def submitter_params
|
||||
params.require(:submitter).permit(:email)
|
||||
end
|
||||
|
||||
def load_template
|
||||
|
||||
@@ -17,19 +17,19 @@ class SubmissionsController < ApplicationController
|
||||
def new; end
|
||||
|
||||
def create
|
||||
emails = params[:emails].to_s.scan(User::EMAIL_REGEXP)
|
||||
|
||||
submissions =
|
||||
emails.map do |email|
|
||||
submission = @template.submissions.create!(email:, sent_at: params[:send_email] == '1' ? Time.current : nil)
|
||||
|
||||
if params[:send_email] == '1'
|
||||
SubmissionMailer.invitation_email(submission, message: params[:message]).deliver_later!
|
||||
end
|
||||
|
||||
submission
|
||||
if params[:emails].present?
|
||||
create_submissions_from_emails
|
||||
else
|
||||
create_submissions_from_submitters
|
||||
end
|
||||
|
||||
if params[:send_email] == '1'
|
||||
submissions.flat_map(&:submitters).each do |submitter|
|
||||
SubmitterMailer.invitation_email(submitter, message: params[:message]).deliver_later!
|
||||
end
|
||||
end
|
||||
|
||||
redirect_to template_submissions_path(@template), notice: "#{submissions.size} recepients added"
|
||||
end
|
||||
|
||||
@@ -44,6 +44,34 @@ class SubmissionsController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def create_submissions_from_emails
|
||||
emails = params[:emails].to_s.scan(User::EMAIL_REGEXP)
|
||||
|
||||
emails.map do |email|
|
||||
submission = @template.submissions.new
|
||||
submission.submitters.new(email:, uuid: @template.submitters.first['uuid'],
|
||||
sent_at: params[:send_email] == '1' ? Time.current : nil)
|
||||
|
||||
submission.tap(&:save!)
|
||||
end
|
||||
end
|
||||
|
||||
def create_submissions_from_submitters
|
||||
submissions_params.map do |attrs|
|
||||
submission = @template.submissions.new
|
||||
|
||||
attrs[:submitters].each do |submitter_attrs|
|
||||
submission.submitters.new(**submitter_attrs, sent_at: params[:send_email] == '1' ? Time.current : nil)
|
||||
end
|
||||
|
||||
submission.tap(&:save!)
|
||||
end
|
||||
end
|
||||
|
||||
def submissions_params
|
||||
params.require(:submission).map { |param| param.permit(submitters: [%i[uuid email]]) }
|
||||
end
|
||||
|
||||
def load_template
|
||||
@template = current_account.templates.find(params[:template_id])
|
||||
end
|
||||
|
||||
@@ -6,16 +6,16 @@ class SubmissionsDebugController < ApplicationController
|
||||
skip_before_action :authenticate_user!
|
||||
|
||||
def index
|
||||
@submission = Submission.preload({ attachments_attachments: :blob },
|
||||
template: { documents_attachments: :blob })
|
||||
.find_by(slug: params[:submission_slug])
|
||||
@submitter = Submitter.preload({ attachments_attachments: :blob },
|
||||
submission: { template: { documents_attachments: :blob } })
|
||||
.find_by(slug: params[:submitter_slug])
|
||||
|
||||
respond_to do |f|
|
||||
f.html do
|
||||
render 'submit_template/show'
|
||||
end
|
||||
f.pdf do
|
||||
Submissions::GenerateResultAttachments.call(@submission)
|
||||
Submissions::GenerateResultAttachments.call(@submitter.submission)
|
||||
|
||||
send_data ActiveStorage::Attachment.where(name: :documents).last.download,
|
||||
filename: 'debug.pdf',
|
||||
|
||||
@@ -4,10 +4,10 @@ class SubmissionsDownloadController < ApplicationController
|
||||
skip_before_action :authenticate_user!
|
||||
|
||||
def index
|
||||
submission = Submission.find_by(slug: params[:submission_slug])
|
||||
submitter = Submitter.find_by(slug: params[:submitter_slug])
|
||||
|
||||
Submissions::GenerateResultAttachments.call(submission)
|
||||
Submissions::GenerateResultAttachments.call(submitter)
|
||||
|
||||
redirect_to submission.archive.url, allow_other_host: true
|
||||
redirect_to submitter.archive.url, allow_other_host: true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,24 +6,25 @@ class SubmitFormController < ApplicationController
|
||||
skip_before_action :authenticate_user!
|
||||
|
||||
def show
|
||||
@submission = Submission.preload(template: { documents_attachments: { preview_images_attachments: :blob } })
|
||||
.find_by!(slug: params[:slug])
|
||||
@submitter =
|
||||
Submitter.preload(submission: { template: { documents_attachments: { preview_images_attachments: :blob } } })
|
||||
.find_by!(slug: params[:slug])
|
||||
|
||||
return redirect_to submit_form_completed_path(@submission.slug) if @submission.completed_at?
|
||||
return redirect_to submit_form_completed_path(@submitter.slug) if @submitter.completed_at?
|
||||
end
|
||||
|
||||
def update
|
||||
submission = Submission.find_by!(slug: params[:slug])
|
||||
submission.values.merge!(normalized_values)
|
||||
submission.completed_at = Time.current if params[:completed] == 'true'
|
||||
submitter = Submitter.find_by!(slug: params[:slug])
|
||||
submitter.values.merge!(normalized_values)
|
||||
submitter.completed_at = Time.current if params[:completed] == 'true'
|
||||
|
||||
submission.save
|
||||
submitter.save
|
||||
|
||||
head :ok
|
||||
end
|
||||
|
||||
def completed
|
||||
@submission = Submission.find_by!(slug: params[:submit_form_slug])
|
||||
@submitter = Submitter.find_by!(slug: params[:submit_form_slug])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
Reference in New Issue
Block a user