demarches-normaliennes/app/mailers/notification_mailer.rb
Benoit Queyron ee35dba37e
linter check
2024-06-14 18:04:16 +02:00

117 lines
4 KiB
Ruby

# Preview all emails at http://localhost:3000/rails/mailers/notification_mailer
# A Notification is attached as a Comment to the relevant discussion,
# then sent by email to the user.
#
# The subject and body of a Notification can be customized by each demarche.
#
class NotificationMailer < ApplicationMailer
before_action :set_dossier, except: [:send_notification_for_tiers, :send_accuse_lecture_notification]
before_action :set_services_publics_plus, only: :send_notification
before_action :set_jdma, only: :send_notification
helper ServiceHelper
helper MailerHelper
layout 'mailers/notifications_layout'
default from: NO_REPLY_EMAIL
def send_notification
@service = @dossier.procedure.service
@logo_url = procedure_logo_url(@dossier.procedure)
attachments[@attachment[:filename]] = @attachment[:content] if @attachment.present?
I18n.with_locale(@dossier.user_locale) do
mail(subject: @subject, to: @email, template_name: 'send_notification')
end
end
def send_notification_for_tiers(dossier, repasser_en_instruction: false)
@dossier = dossier
@repasser_en_instruction = repasser_en_instruction
if @dossier.individual.no_notification?
mail.perform_deliveries = false
return
end
configure_defaults_for_user(@dossier.user)
@subject = "Votre dossier rempli par le mandataire #{@dossier.mandataire_first_name} #{@dossier.mandataire_last_name} a été mis à jour"
@email = @dossier.individual.email
@logo_url = procedure_logo_url(@dossier.procedure)
mail(subject: @subject, to: @email, template_name: 'send_notification_for_tiers')
end
def send_accuse_lecture_notification(dossier)
@dossier = dossier
@subject = "La décision a été rendue pour votre démarche #{@dossier.procedure.libelle.truncate_words(50)}"
@email = @dossier.user_email_for(:notification)
@logo_url = procedure_logo_url(@dossier.procedure)
mail(subject: @subject, to: @email, template_name: 'send_accuse_lecture_notification')
end
def self.send_en_construction_notification(dossier)
with(dossier: dossier, state: Dossier.states.fetch(:en_construction)).send_notification
end
def self.send_en_instruction_notification(dossier)
with(dossier: dossier, state: Dossier.states.fetch(:en_instruction)).send_notification
end
def self.send_accepte_notification(dossier)
with(dossier: dossier, state: Dossier.states.fetch(:accepte)).send_notification
end
def self.send_refuse_notification(dossier)
with(dossier: dossier, state: Dossier.states.fetch(:refuse)).send_notification
end
def self.send_sans_suite_notification(dossier)
with(dossier: dossier, state: Dossier.states.fetch(:sans_suite)).send_notification
end
def self.send_repasser_en_instruction_notification(dossier)
with(dossier: dossier, state: DossierOperationLog.operations.fetch(:repasser_en_instruction)).send_notification
end
def self.critical_email?(action_name)
false
end
private
def set_services_publics_plus
return unless Dossier::TERMINE.include?(params[:state])
@services_publics_plus_url = ENV['SERVICES_PUBLICS_PLUS_URL'].presence
end
def set_jdma
if params[:state] == Dossier.states.fetch(:en_construction) && @dossier.procedure.monavis_embed
@jdma_html = @dossier.procedure.monavis_embed_html_source("email")
end
end
def set_dossier
@dossier = params[:dossier]
configure_defaults_for_user(@dossier.user)
if @dossier.skip_user_notification_email?
mail.perform_deliveries = false
else
I18n.with_locale(@dossier.user_locale) do
email_template = @dossier.email_template_for(params[:state])
email_template_presenter = MailTemplatePresenterService.new(@dossier, params[:state])
@email = @dossier.user_email_for(:notification)
@rendered_template = email_template_presenter.safe_body
@subject = email_template_presenter.safe_subject
@actions = email_template.actions_for_dossier(@dossier)
@attachment = email_template.attachment_for_dossier(@dossier)
end
end
end
end