Permette di mettere in pausa un invio e riprenderlo senza perdere la coda.
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / scan_ruby (push) Has been cancelled

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-07 12:35:42 +02:00
co-authored by Cursor
parent 4cf34b2033
commit 3c8bfe053f
10 changed files with 108 additions and 17 deletions
+33 -6
View File
@@ -1,6 +1,6 @@
class MailingsController < ApplicationController
before_action :require_current_project!
before_action :set_mailing, only: %i[show edit update destroy queue cancel test_send test_preview refresh_recipients update_recipients preview audience update_audience]
before_action :set_mailing, only: %i[show edit update destroy queue pause resume cancel test_send test_preview refresh_recipients update_recipients preview audience update_audience]
before_action :load_form_collections, only: %i[new create edit update]
def index
@@ -11,8 +11,9 @@ class MailingsController < ApplicationController
@page_title = "Invii email"
@mailings = Mailing.for_project(current_project).includes(:mail_identity).recent
@mail_identities_count = MailIdentity.active.count
@active_mailings = @mailings.select(&:sending?)
@paused_mailings = @active_mailings.select { |mailing| mailing.next_send_at.present? && mailing.next_send_at > Time.current }
@active_mailings = @mailings.select { |mailing| mailing.sending? || mailing.paused? }
@window_paused_mailings = @mailings.select(&:sending?).select { |mailing| mailing.next_send_at.present? && mailing.next_send_at > Time.current }
@paused_mailings = @window_paused_mailings
@completed_today = @mailings.count { |mailing| mailing.sent? && mailing.completed_at&.to_date == Time.zone.today }
@failed_open = @mailings.sum(&:failed_count)
end
@@ -180,16 +181,42 @@ class MailingsController < ApplicationController
redirect_to @mailing, alert: e.message
end
def cancel
def pause
unless @mailing.sending?
redirect_to @mailing, alert: "Solo un invio in corso può essere fermato."
redirect_to @mailing, alert: "Solo un invio in corso può essere messo in pausa."
return
end
remaining = @mailing.pending_count + @mailing.queued_count
@mailing.pause_send!
redirect_to dashboard_mailings_path,
notice: "Invio in pausa. #{@mailing.sent_count} già inviate, #{remaining} pronte per quando riprendi."
rescue StandardError => e
redirect_to @mailing, alert: e.message
end
def resume
unless @mailing.paused?
redirect_to @mailing, alert: "Solo un invio in pausa può essere ripreso."
return
end
@mailing.resume_send!
redirect_to dashboard_mailings_path, notice: "Invio ripreso da dove era rimasto."
rescue StandardError => e
redirect_to @mailing, alert: e.message
end
def cancel
unless @mailing.sending? || @mailing.paused?
redirect_to @mailing, alert: "Solo un invio in corso o in pausa può essere annullato."
return
end
pending = @mailing.pending_count + @mailing.queued_count
@mailing.cancel_send!
redirect_to dashboard_mailings_path,
notice: "Invio fermato. #{@mailing.sent_count} già inviate, #{pending} annullate in coda."
notice: "Invio annullato. #{@mailing.sent_count} già inviate, #{pending} in coda saltate."
rescue StandardError => e
redirect_to @mailing, alert: e.message
end