Handle processed dossiers in deletion mailers

This commit is contained in:
Paul Chavard 2020-04-02 15:05:16 +02:00
parent bdbee38ff1
commit f1b531911b
7 changed files with 77 additions and 3 deletions

View file

@ -134,7 +134,8 @@ class DossierMailer < ApplicationMailer
def default_i18n_subject(interpolations = {}) def default_i18n_subject(interpolations = {})
if interpolations[:state] if interpolations[:state]
mailer_scope = self.class.mailer_name.tr('/', '.') mailer_scope = self.class.mailer_name.tr('/', '.')
I18n.t("subject_#{interpolations[:state]}", interpolations.merge(scope: [mailer_scope, action_name])) state = interpolations[:state].in?(Dossier::TERMINE) ? 'termine' : interpolations[:state]
I18n.t("subject_#{state}", interpolations.merge(scope: [mailer_scope, action_name]))
else else
super super
end end

View file

@ -4,7 +4,10 @@
Bonjour, Bonjour,
%p %p
= t('.header_en_construction', count: @dossiers.count) - if @state == Dossier.states.fetch(:en_construction)
= t('.header_en_construction', count: @dossiers.count)
- else
= t('.header_termine', count: @dossiers.count)
%ul %ul
- @dossiers.each do |d| - @dossiers.each do |d|
%li %li
@ -13,5 +16,7 @@
%p %p
- if @state == Dossier.states.fetch(:en_construction) - if @state == Dossier.states.fetch(:en_construction)
= sanitize(t('.footer_en_construction', count: @dossiers.count)) = sanitize(t('.footer_en_construction', count: @dossiers.count))
- else
= sanitize(t('.footer_termine', count: @dossiers.count))
= render partial: "layouts/mailers/signature" = render partial: "layouts/mailers/signature"

View file

@ -4,7 +4,10 @@
Bonjour, Bonjour,
%p %p
= t('.header_en_construction', count: @dossiers.count) - if @state == Dossier.states.fetch(:en_construction)
= t('.header_en_construction', count: @dossiers.count)
- else
= t('.header_termine', count: @dossiers.count)
%ul %ul
- @dossiers.each do |d| - @dossiers.each do |d|
%li %li

View file

@ -4,9 +4,18 @@ fr:
subject_en_construction: subject_en_construction:
one: Un dossier en construction va bientôt être supprimé one: Un dossier en construction va bientôt être supprimé
other: Des dossiers en construction vont bientôt être supprimés other: Des dossiers en construction vont bientôt être supprimés
subject_termine:
one: Un dossier dont le traitement est terminé va bientôt être supprimé
other: Des dossiers dont le traitement est terminé vont bientôt être supprimés
header_en_construction: header_en_construction:
one: "Le dossier en construction suivant sera bientôt automatiquement supprimé :" one: "Le dossier en construction suivant sera bientôt automatiquement supprimé :"
other: "Les dossiers en construction suivant seront bientôt automatiquement supprimés :" other: "Les dossiers en construction suivant seront bientôt automatiquement supprimés :"
header_termine:
one: "Le dossier suivant dont le traitement est terminé sera bientôt automatiquement supprimé :"
other: "Les dossiers suivant dont le traitement est terminé seront bientôt automatiquement supprimés :"
footer_en_construction: footer_en_construction:
one: "Vous avez <b>un mois</b> pour commencer linstruction du dossier." one: "Vous avez <b>un mois</b> pour commencer linstruction du dossier."
other: "Vous avez <b>un mois</b> pour commencer linstruction des dossiers." other: "Vous avez <b>un mois</b> pour commencer linstruction des dossiers."
footer_termine:
one: "Vous avez <b>un mois</b> pour archiver le dossier."
other: "Vous avez <b>un mois</b> pour archiver les dossiers."

View file

@ -4,9 +4,15 @@ fr:
subject_en_construction: subject_en_construction:
one: Un dossier en construction va bientôt être supprimé one: Un dossier en construction va bientôt être supprimé
other: Des dossiers en construction vont bientôt être supprimés other: Des dossiers en construction vont bientôt être supprimés
subject_termine:
one: Un dossier dont le traitement est terminé va bientôt être supprimé
other: Des dossiers dont le traitement est terminé vont bientôt être supprimés
header_en_construction: header_en_construction:
one: "Afin de limiter la conservation de vos données personnelles, le dossier en construction suivant sera bientôt automatiquement supprimé :" one: "Afin de limiter la conservation de vos données personnelles, le dossier en construction suivant sera bientôt automatiquement supprimé :"
other: "Afin de limiter la conservation de vos données personnelles, les dossiers en construction suivant seront bientôt automatiquement supprimés :" other: "Afin de limiter la conservation de vos données personnelles, les dossiers en construction suivant seront bientôt automatiquement supprimés :"
header_termine:
one: "Afin de limiter la conservation de vos données personnelles, le dossier suivant dont le traitement est terminé sera bientôt automatiquement supprimé :"
other: "Afin de limiter la conservation de vos données personnelles, les dossiers suivant dont le traitement est terminé seront bientôt automatiquement supprimés :"
footer: footer:
one: "Vous pouvez retrouver votre dossier pendant encore <b>un mois</b>. Vous navez rien à faire." one: "Vous pouvez retrouver votre dossier pendant encore <b>un mois</b>. Vous navez rien à faire."
other: "Vous pouvez retrouver vos dossiers pendant encore <b>un mois</b>. Vous navez rien à faire." other: "Vous pouvez retrouver vos dossiers pendant encore <b>un mois</b>. Vous navez rien à faire."

View file

@ -102,6 +102,19 @@ RSpec.describe DossierMailer, type: :mailer do
it { expect(subject.body).to include(dossier.procedure.libelle) } it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("nous nous excusons de la gène occasionnée") } it { expect(subject.body).to include("nous nous excusons de la gène occasionnée") }
end end
describe 'termine' do
let(:dossier) { create(:dossier, :accepte) }
let(:deleted_dossier) { DeletedDossier.create_from_dossier(dossier, :expired) }
subject { described_class.notify_automatic_deletion_to_user([deleted_dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier a été supprimé automatiquement") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).not_to include("nous nous excusons de la gène occasionnée") }
end
end end
describe '.notify_automatic_deletion_to_administration' do describe '.notify_automatic_deletion_to_administration' do
@ -126,6 +139,18 @@ RSpec.describe DossierMailer, type: :mailer do
it { expect(subject.body).to include("PDF") } it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous avez <b>un mois</b> pour commencer linstruction du dossier.") } it { expect(subject.body).to include("Vous avez <b>un mois</b> pour commencer linstruction du dossier.") }
end end
describe 'termine' do
let(:dossier) { create(:dossier, :accepte) }
subject { described_class.notify_near_deletion_to_administration([dossier], dossier.user.email) }
it { expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous avez <b>un mois</b> pour archiver le dossier.") }
end
end end
describe '.notify_near_deletion_to_user' do describe '.notify_near_deletion_to_user' do
@ -141,6 +166,19 @@ RSpec.describe DossierMailer, type: :mailer do
it { expect(subject.body).to include("PDF") } it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous pouvez retrouver votre dossier pendant encore <b>un mois</b>. Vous navez rien à faire.") } it { expect(subject.body).to include("Vous pouvez retrouver votre dossier pendant encore <b>un mois</b>. Vous navez rien à faire.") }
end end
describe 'termine' do
let(:dossier) { create(:dossier, :accepte) }
subject { described_class.notify_near_deletion_to_user([dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous pouvez retrouver votre dossier pendant encore <b>un mois</b>. Vous navez rien à faire.") }
end
end end
describe '.notify_groupe_instructeur_changed_to_instructeur' do describe '.notify_groupe_instructeur_changed_to_instructeur' do

View file

@ -28,6 +28,14 @@ class DossierMailerPreview < ActionMailer::Preview
DossierMailer.notify_near_deletion_to_administration([dossier_en_construction, dossier_en_construction], administration_email) DossierMailer.notify_near_deletion_to_administration([dossier_en_construction, dossier_en_construction], administration_email)
end end
def notify_termine_near_deletion_to_user
DossierMailer.notify_near_deletion_to_user([dossier_accepte], usager_email)
end
def notify_termine_near_deletion_to_administration
DossierMailer.notify_near_deletion_to_administration([dossier_accepte, dossier_accepte], administration_email)
end
def notify_brouillon_deletion def notify_brouillon_deletion
DossierMailer.notify_brouillon_deletion([dossier.hash_for_deletion_mail], usager_email) DossierMailer.notify_brouillon_deletion([dossier.hash_for_deletion_mail], usager_email)
end end
@ -83,6 +91,10 @@ class DossierMailerPreview < ActionMailer::Preview
Dossier.new(id: 47882, state: :en_construction, procedure: procedure, user: User.new(email: "usager@example.com")) Dossier.new(id: 47882, state: :en_construction, procedure: procedure, user: User.new(email: "usager@example.com"))
end end
def dossier_accepte
Dossier.new(id: 47882, state: :accepte, procedure: procedure, user: User.new(email: "usager@example.com"))
end
def procedure def procedure
Procedure.new(id: 1234, libelle: 'Dotation dÉquipement des Territoires Ruraux - Exercice 2019', service: service, logo: Rack::Test::UploadedFile.new("./spec/fixtures/files/logo_test_procedure.png", 'image/png'), auto_archive_on: Time.zone.today + Dossier::REMAINING_DAYS_BEFORE_CLOSING.days) Procedure.new(id: 1234, libelle: 'Dotation dÉquipement des Territoires Ruraux - Exercice 2019', service: service, logo: Rack::Test::UploadedFile.new("./spec/fixtures/files/logo_test_procedure.png", 'image/png'), auto_archive_on: Time.zone.today + Dossier::REMAINING_DAYS_BEFORE_CLOSING.days)
end end