synchronize documents generation
This commit is contained in:
@@ -17,8 +17,6 @@ class SendSubmissionEmailController < ApplicationController
|
||||
Submitter.find_by!(slug: params[:submitter_slug])
|
||||
end
|
||||
|
||||
Submissions::GenerateResultAttachments.call(@submitter) if @submitter.documents.blank?
|
||||
|
||||
SubmitterMailer.documents_copy_email(@submitter).deliver_later!
|
||||
|
||||
respond_to do |f|
|
||||
|
||||
@@ -13,7 +13,7 @@ class StartFormController < ApplicationController
|
||||
|
||||
def update
|
||||
@submitter = Submitter.where(submission: @template.submissions.where(deleted_at: nil))
|
||||
.find_or_initialize_by(**submitter_params)
|
||||
.find_or_initialize_by(email: submitter_params[:email])
|
||||
|
||||
if @submitter.completed_at?
|
||||
redirect_to start_form_completed_path(@template.slug, email: submitter_params[:email])
|
||||
@@ -25,7 +25,7 @@ class StartFormController < ApplicationController
|
||||
ua: request.user_agent
|
||||
)
|
||||
|
||||
@submitter.build_submission(template: @template)
|
||||
@submitter.submission ||= Submission.new(template: @template)
|
||||
|
||||
if @submitter.save
|
||||
redirect_to submit_form_path(@submitter.slug)
|
||||
|
||||
@@ -6,7 +6,7 @@ class SubmissionsDownloadController < ApplicationController
|
||||
def index
|
||||
submitter = Submitter.find_by(slug: params[:submitter_slug])
|
||||
|
||||
Submissions::GenerateResultAttachments.call(submitter) if submitter.documents.blank?
|
||||
Submissions::EnsureResultGenerated.call(submitter)
|
||||
|
||||
urls =
|
||||
Submitters.select_attachments_for_download(submitter).map do |attachment|
|
||||
|
||||
@@ -24,6 +24,8 @@ class SubmitFormController < ApplicationController
|
||||
submitter.save!
|
||||
|
||||
if submitter.completed_at?
|
||||
GenerateSubmitterResultAttachmentsJob.perform_later(submitter)
|
||||
|
||||
submitter.submission.template.account.users.active.each do |user|
|
||||
SubmitterMailer.completed_email(submitter, user).deliver_later!
|
||||
end
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationJob < ActiveJob::Base
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class GenerateSubmitterResultAttachmentsJob < ApplicationJob
|
||||
def perform(submitter)
|
||||
Submissions::EnsureResultGenerated.call(submitter)
|
||||
end
|
||||
end
|
||||
@@ -21,6 +21,9 @@ class SubmitterMailer < ApplicationMailer
|
||||
|
||||
def documents_copy_email(submitter)
|
||||
@submitter = submitter
|
||||
|
||||
Submissions::EnsureResultGenerated.call(@submitter)
|
||||
|
||||
@documents = Submitters.select_attachments_for_download(submitter)
|
||||
|
||||
@documents.each do |attachment|
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: document_generation_events
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# event_name :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# submitter_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_document_generation_events_on_submitter_id (submitter_id)
|
||||
# index_document_generation_events_on_submitter_id_and_event_name (submitter_id,event_name) UNIQUE WHERE ((event_name)::text = ANY ((ARRAY['start'::character varying, 'complete'::character varying])::text[]))
|
||||
#
|
||||
# Foreign Keys
|
||||
#
|
||||
# fk_rails_... (submitter_id => submitters.id)
|
||||
#
|
||||
class DocumentGenerationEvent < ApplicationRecord
|
||||
belongs_to :submitter
|
||||
|
||||
enum :event_name, {
|
||||
complete: 'complete',
|
||||
fail: 'fail',
|
||||
start: 'start',
|
||||
retry: 'retry'
|
||||
}, scope: false
|
||||
end
|
||||
@@ -39,6 +39,8 @@ class Submitter < ApplicationRecord
|
||||
has_many_attached :documents
|
||||
has_many_attached :attachments
|
||||
|
||||
has_many :document_generation_events, dependent: :destroy
|
||||
|
||||
def status
|
||||
if completed_at?
|
||||
'completed'
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<%= f.email_field :email, required: true, class: 'base-input', placeholder: 'Provide your email to start' %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.button button_title(title: 'Start'), class: 'base-button' %>
|
||||
<%= f.button button_title(title: 'Start', disabled_with: 'Starting'), class: 'base-button' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user