Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions app/lib/batch_submissions_selector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ class BatchSubmissionsSelector
Batch = Data.define(:form_id, :mode, :submissions)

DAILY_BATCH_FORM_DOCUMENT_CONDITION = <<~SQL.squish
form_document->'delivery_configurations' @> '[{"delivery_schedule":"daily"}]'::jsonb
delivery_configurations @> '[{"delivery_schedule":"daily"}]'::jsonb
SQL
WEEKLY_BATCH_FORM_DOCUMENT_CONDITION = <<~SQL.squish
form_document->'delivery_configurations' @> '[{"delivery_schedule":"weekly"}]'::jsonb
delivery_configurations @> '[{"delivery_schedule":"weekly"}]'::jsonb
SQL

class << self
Expand All @@ -16,7 +16,7 @@ def daily_batches(date)

# If the most recent submission is configured for daily batching, include all submissions on that day in the
# batch. If it is not, do not return a batch for any of the submissions on that day.
next unless submissions.any? && daily_delivery_configuration?(submissions.first.form_document)
next unless submissions.any? && daily_delivery_configuration?(submissions.first)

yielder << Batch.new(form_id, mode, submissions)
end
Expand All @@ -30,7 +30,7 @@ def weekly_batches(time_in_week)

# If the most recent submission is configured for weekly batching, include all submissions in that week in
# the batch. If it is not, do not return a batch for any of the submissions in that week.
next unless submissions.any? && weekly_delivery_configuration?(submissions.first.form_document)
next unless submissions.any? && weekly_delivery_configuration?(submissions.first)

yielder << Batch.new(form_id, mode, submissions)
end
Expand All @@ -55,12 +55,12 @@ def form_ids_and_modes_with_send_weekly_submission_batch(begin_at)
.pluck(:form_id, :mode)
end

def daily_delivery_configuration?(form_document)
form_document["delivery_configurations"]&.any? { |configuration| configuration["delivery_schedule"] == "daily" }
def daily_delivery_configuration?(submission)
submission.delivery_configurations&.any? { |configuration| configuration["delivery_schedule"] == "daily" }
end

def weekly_delivery_configuration?(form_document)
form_document["delivery_configurations"]&.any? { |configuration| configuration["delivery_schedule"] == "weekly" }
def weekly_delivery_configuration?(submission)
submission.delivery_configurations&.any? { |configuration| configuration["delivery_schedule"] == "weekly" }
end
end
end
6 changes: 5 additions & 1 deletion app/services/form_submission_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,14 @@ def validate_submission

def enqueue_deliveries(submission)
begin
delivery_configurations = Api::DeliveryConfigurationResource.from_form(form.id, draft: mode.preview_draft?).filter { |c| c.delivery_schedule == "immediate" }
delivery_configurations = submission.delivery_configurations.map { Api::DeliveryConfigurationResource.new(it) }.filter { |c| c.delivery_schedule == "immediate" }

raise StandardError, "Form id(#{form.id}) has no immediate delivery configurations" if delivery_configurations.blank? && mode.live?
rescue StandardError => e
submission.destroy!
raise e
end

delivery_configurations.each { |c| enqueue_delivery(c, submission) }
end

Expand All @@ -105,6 +106,8 @@ def resolve_submission_job_class(delivery_configuration)
end

def create_submission_record
delivery_configurations = Api::DeliveryConfigurationResource.from_form(form.id, draft: mode.preview_draft?)

Submission.create!(
reference: submission_reference,
form_id: form.id,
Expand All @@ -114,6 +117,7 @@ def create_submission_record
form_document: form.document_json,
welsh_form_document: welsh_form_document,
submission_locale: current_context.submission_locale,
delivery_configurations: delivery_configurations,
created_at: timestamp,
)
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddDeliveryConfigurationToSubmissions < ActiveRecord::Migration[8.1]
def change
add_column :submissions, :delivery_configurations, :jsonb
end
end
3 changes: 2 additions & 1 deletion db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading