Permette di mettere in pausa un invio e riprenderlo senza perdere la coda.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -68,6 +68,7 @@ module Catalog
|
||||
MAILING_STATUSES = {
|
||||
"draft" => "Bozza",
|
||||
"sending" => "Invio in corso",
|
||||
"paused" => "In pausa",
|
||||
"sent" => "Inviata",
|
||||
"cancelled" => "Annullata"
|
||||
}.freeze
|
||||
|
||||
+20
-1
@@ -77,6 +77,10 @@ class Mailing < ApplicationRecord
|
||||
status == "sending"
|
||||
end
|
||||
|
||||
def paused?
|
||||
status == "paused"
|
||||
end
|
||||
|
||||
def sent?
|
||||
status == "sent"
|
||||
end
|
||||
@@ -215,8 +219,23 @@ class Mailing < ApplicationRecord
|
||||
update!(status: "sent", completed_at: Time.current, next_send_at: nil)
|
||||
end
|
||||
|
||||
def pause_send!
|
||||
raise "Solo un invio in corso può essere messo in pausa" unless sending?
|
||||
|
||||
update!(status: "paused", next_send_at: nil)
|
||||
end
|
||||
|
||||
def resume_send!
|
||||
raise "Solo un invio in pausa può essere ripreso" unless paused?
|
||||
raise "Nessun destinatario da inviare" if pending_count.zero? && queued_count.zero?
|
||||
|
||||
update!(status: "sending")
|
||||
enqueue_next_recipient!(mailing_recipients.pending.order(:id).first, from: Time.current) if pending_count.positive?
|
||||
DrainOutboundJob.perform_later if mailing_recipients.queued.exists?
|
||||
end
|
||||
|
||||
def cancel_send!
|
||||
raise "Solo un invio in corso può essere fermato" unless sending?
|
||||
raise "Solo un invio in corso o in pausa può essere annullato" unless sending? || paused?
|
||||
|
||||
transaction do
|
||||
mailing_recipients.where(status: %w[pending queued]).find_each do |recipient|
|
||||
|
||||
Reference in New Issue
Block a user