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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user