From 415d5c765eafe03f01a821d67fe6316844a29df4 Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Wed, 1 Apr 2020 16:23:03 +0200 Subject: [PATCH 1/3] =?UTF-8?q?envoie=20une=20notification=20=C3=A0=20chaq?= =?UTF-8?q?ue=20follower=5Finstructeur=20apr=C3=A8s=20un=20commentaire=20d?= =?UTF-8?q?=C3=A9pos=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/dossiers_controller.rb | 3 +++ app/mailers/dossier_mailer.rb | 6 ++++++ .../notify_new_commentaire_to_instructeur.html.haml | 10 ++++++++++ .../notify_new_commentaire_to_instructeur/fr.yml | 5 +++++ spec/controllers/users/dossiers_controller_spec.rb | 7 ++++++- 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 app/views/dossier_mailer/notify_new_commentaire_to_instructeur.html.haml create mode 100644 config/locales/views/dossier_mailer/notify_new_commentaire_to_instructeur/fr.yml diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index a39802571..ce515f113 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -197,6 +197,9 @@ module Users @commentaire = CommentaireService.build(current_user, dossier, commentaire_params) if @commentaire.save + dossier.followers_instructeurs.each do |instructeur| + DossierMailer.notify_new_commentaire_to_instructeur(dossier, instructeur.email).deliver_later + end flash.notice = "Votre message a bien été envoyé à l’instructeur en charge de votre dossier." redirect_to messagerie_dossier_path(dossier) else diff --git a/app/mailers/dossier_mailer.rb b/app/mailers/dossier_mailer.rb index 5c7dde111..e0f0e254a 100644 --- a/app/mailers/dossier_mailer.rb +++ b/app/mailers/dossier_mailer.rb @@ -29,6 +29,12 @@ class DossierMailer < ApplicationMailer end end + def notify_new_commentaire_to_instructeur(dossier, instructeur_email) + @dossier = dossier + @subject = default_i18n_subject(dossier_id: dossier.id, libelle_demarche: dossier.procedure.libelle) + mail(from: NO_REPLY_EMAIL, to: instructeur_email, subject: @subject) + end + def notify_revert_to_instruction(dossier) @dossier = dossier @service = dossier.procedure.service diff --git a/app/views/dossier_mailer/notify_new_commentaire_to_instructeur.html.haml b/app/views/dossier_mailer/notify_new_commentaire_to_instructeur.html.haml new file mode 100644 index 000000000..cfb294aa6 --- /dev/null +++ b/app/views/dossier_mailer/notify_new_commentaire_to_instructeur.html.haml @@ -0,0 +1,10 @@ +- content_for(:title, "#{@subject}") + +%p + Bonjour, + +%p + = t('.body', dossier_id: @dossier.id, libelle_demarche: @dossier.procedure.libelle) +%p= link_to("Messagerie du dossier n°#{@dossier.id}", messagerie_instructeur_dossier_url(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id)) + += render partial: "layouts/mailers/signature" diff --git a/config/locales/views/dossier_mailer/notify_new_commentaire_to_instructeur/fr.yml b/config/locales/views/dossier_mailer/notify_new_commentaire_to_instructeur/fr.yml new file mode 100644 index 000000000..8eb7bd7f6 --- /dev/null +++ b/config/locales/views/dossier_mailer/notify_new_commentaire_to_instructeur/fr.yml @@ -0,0 +1,5 @@ +fr: + dossier_mailer: + notify_new_commentaire_to_instructeur: + subject: Nouveau commentaire déposé sur le dossier n°%{dossier_id} + body: Un nouveau commentaire a été déposé par l'usager sur le dossier n° %{dossier_id} de la démarche %{libelle_demarche} diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb index 9802b7c36..55e5bd147 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -783,7 +783,9 @@ describe Users::DossiersController, type: :controller do end describe "#create_commentaire" do - let(:dossier) { create(:dossier, :en_construction, user: user) } + let(:instructeur) { create(:instructeur) } + let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) } + let(:dossier) { create(:dossier, :en_construction, procedure: procedure, user: user) } let(:saved_commentaire) { dossier.commentaires.first } let(:body) { "avant\napres" } let(:file) { Rack::Test::UploadedFile.new("./spec/fixtures/files/piece_justificative_0.pdf", 'application/pdf') } @@ -802,12 +804,15 @@ describe Users::DossiersController, type: :controller do before do sign_in(user) allow(ClamavService).to receive(:safe_file?).and_return(scan_result) + allow(DossierMailer).to receive(:notify_new_commentaire_to_instructeur).with(dossier, instructeur.email).and_return(double(deliver_later: nil)) + instructeur.follow(dossier) end it "creates a commentaire" do expect { subject }.to change(Commentaire, :count).by(1) expect(response).to redirect_to(messagerie_dossier_path(dossier)) + expect(DossierMailer).to have_received(:notify_new_commentaire_to_instructeur).with(dossier, instructeur.email) expect(flash.notice).to be_present end end From 969478b7063a5d2016a63624c326efbb50146d16 Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Thu, 2 Apr 2020 10:18:23 +0200 Subject: [PATCH 2/3] Envoie une notif aux followers_instructeurs le souhaitant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit après chaque message déposé par l'usager --- .../instructeurs/procedures_controller.rb | 2 +- app/controllers/users/dossiers_controller.rb | 4 ++- app/models/instructeur.rb | 4 +++ .../procedures/email_notifications.html.haml | 26 +++++++++++++++---- ...ail_message_notifications_to_assign_tos.rb | 5 ++++ db/schema.rb | 3 ++- .../users/dossiers_controller_spec.rb | 15 +++++++---- 7 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20200401161821_add_instant_email_message_notifications_to_assign_tos.rb diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 70386ed68..4210f1497 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -254,7 +254,7 @@ module Instructeurs private def assign_to_params - params.require(:assign_to).permit(:daily_email_notifications_enabled, :weekly_email_notifications_enabled) + params.require(:assign_to).permit(:instant_email_message_notifications_enabled, :daily_email_notifications_enabled, :weekly_email_notifications_enabled) end def assign_exports diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index ce515f113..c0dba8b9b 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -197,7 +197,9 @@ module Users @commentaire = CommentaireService.build(current_user, dossier, commentaire_params) if @commentaire.save - dossier.followers_instructeurs.each do |instructeur| + dossier.followers_instructeurs + .with_instant_email_message_notifications + .each do |instructeur| DossierMailer.notify_new_commentaire_to_instructeur(dossier, instructeur.email).deliver_later end flash.notice = "Votre message a bien été envoyé à l’instructeur en charge de votre dossier." diff --git a/app/models/instructeur.rb b/app/models/instructeur.rb index f3cc6dff7..7ea2d737b 100644 --- a/app/models/instructeur.rb +++ b/app/models/instructeur.rb @@ -19,6 +19,10 @@ class Instructeur < ApplicationRecord has_one :user, dependent: :nullify + scope :with_instant_email_message_notifications, -> { + includes(:assign_to).where(assign_tos: { instant_email_message_notifications_enabled: true }) + } + default_scope { eager_load(:user) } def self.by_email(email) diff --git a/app/views/instructeurs/procedures/email_notifications.html.haml b/app/views/instructeurs/procedures/email_notifications.html.haml index 950b7db08..5a9587eff 100644 --- a/app/views/instructeurs/procedures/email_notifications.html.haml +++ b/app/views/instructeurs/procedures/email_notifications.html.haml @@ -11,21 +11,37 @@ .explication Configurez sur cette page les notifications que vous souhaitez recevoir par email pour cette démarche. - = form.label :email_notification, "Recevoir une notification quotidienne" + = form.label :email_notification, "Recevoir une notification à chaque message déposé" %p.notice - Cet email vous signale le dépôt de nouveaux dossiers sur cette démarche, ou des changements sur vos dossiers suivis. + Cet email vous signale le dépôt d'un nouveau message sur vos dossiers suivis. %p.notice - Il est envoyé une fois par jour, du lundi au samedi, vers 10 h du matin. + il est envoyé à chaque fois qu'un usager dépose un message. + + .radios + %label + = form.radio_button :instant_email_message_notifications_enabled, true + Oui + + %label + = form.radio_button :instant_email_message_notifications_enabled, false + Non + + = form.label :email_notification, "recevoir une notification quotidienne" + + %p.notice + cet email vous signale le dépôt de nouveaux dossiers sur cette démarche, ou des changements sur vos dossiers suivis. + %p.notice + il est envoyé une fois par jour, du lundi au samedi, vers 10 h du matin. .radios %label = form.radio_button :daily_email_notifications_enabled, true - Oui + oui %label = form.radio_button :daily_email_notifications_enabled, false - Non + non = form.label :email_notification, "Recevoir un récapitulatif hebdomadaire" %p.notice diff --git a/db/migrate/20200401161821_add_instant_email_message_notifications_to_assign_tos.rb b/db/migrate/20200401161821_add_instant_email_message_notifications_to_assign_tos.rb new file mode 100644 index 000000000..051e3de95 --- /dev/null +++ b/db/migrate/20200401161821_add_instant_email_message_notifications_to_assign_tos.rb @@ -0,0 +1,5 @@ +class AddInstantEmailMessageNotificationsToAssignTos < ActiveRecord::Migration[5.2] + def change + add_column :assign_tos, :instant_email_message_notifications_enabled, :boolean, default: false, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 02f9e1b83..93bdc8f5a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_03_19_103836) do +ActiveRecord::Schema.define(version: 2020_04_07_135256) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -103,6 +103,7 @@ ActiveRecord::Schema.define(version: 2020_03_19_103836) do t.bigint "groupe_instructeur_id" t.boolean "weekly_email_notifications_enabled", default: true, null: false t.boolean "daily_email_notifications_enabled", default: false, null: false + t.boolean "instant_email_message_notifications_enabled", default: false, null: false t.index ["groupe_instructeur_id", "instructeur_id"], name: "unique_couple_groupe_instructeur_instructeur", unique: true t.index ["groupe_instructeur_id"], name: "index_assign_tos_on_groupe_instructeur_id" t.index ["instructeur_id", "procedure_id"], name: "index_assign_tos_on_instructeur_id_and_procedure_id", unique: true diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb index 55e5bd147..9f7c3f092 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -783,8 +783,9 @@ describe Users::DossiersController, type: :controller do end describe "#create_commentaire" do - let(:instructeur) { create(:instructeur) } - let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) } + let(:instructeur_with_instant_message) { create(:instructeur) } + let(:instructeur_without_instant_message) { create(:instructeur) } + let(:procedure) { create(:procedure, :published) } let(:dossier) { create(:dossier, :en_construction, procedure: procedure, user: user) } let(:saved_commentaire) { dossier.commentaires.first } let(:body) { "avant\napres" } @@ -804,15 +805,19 @@ describe Users::DossiersController, type: :controller do before do sign_in(user) allow(ClamavService).to receive(:safe_file?).and_return(scan_result) - allow(DossierMailer).to receive(:notify_new_commentaire_to_instructeur).with(dossier, instructeur.email).and_return(double(deliver_later: nil)) - instructeur.follow(dossier) + allow(DossierMailer).to receive(:notify_new_commentaire_to_instructeur).and_return(double(deliver_later: nil)) + instructeur_with_instant_message.follow(dossier) + instructeur_without_instant_message.follow(dossier) + create(:assign_to, instructeur: instructeur_with_instant_message, procedure: procedure, instant_email_message_notifications_enabled: true, groupe_instructeur: procedure.defaut_groupe_instructeur) + create(:assign_to, instructeur: instructeur_without_instant_message, procedure: procedure, instant_email_message_notifications_enabled: false, groupe_instructeur: procedure.defaut_groupe_instructeur) end it "creates a commentaire" do expect { subject }.to change(Commentaire, :count).by(1) expect(response).to redirect_to(messagerie_dossier_path(dossier)) - expect(DossierMailer).to have_received(:notify_new_commentaire_to_instructeur).with(dossier, instructeur.email) + expect(DossierMailer).to have_received(:notify_new_commentaire_to_instructeur).with(dossier, instructeur_with_instant_message.email) + expect(DossierMailer).not_to have_received(:notify_new_commentaire_to_instructeur).with(dossier, instructeur_without_instant_message.email) expect(flash.notice).to be_present end end From 3ece41a614e41e78fdff8848bcd820f1c5fdecbb Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Thu, 2 Apr 2020 10:21:23 +0200 Subject: [PATCH 3/3] =?UTF-8?q?homog=C3=A9n=C3=A9ise=20les=20majuscules=20?= =?UTF-8?q?en=20d=C3=A9but=20de=20phrase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../procedures/email_notifications.html.haml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/instructeurs/procedures/email_notifications.html.haml b/app/views/instructeurs/procedures/email_notifications.html.haml index 5a9587eff..6cc0544d4 100644 --- a/app/views/instructeurs/procedures/email_notifications.html.haml +++ b/app/views/instructeurs/procedures/email_notifications.html.haml @@ -16,7 +16,7 @@ %p.notice Cet email vous signale le dépôt d'un nouveau message sur vos dossiers suivis. %p.notice - il est envoyé à chaque fois qu'un usager dépose un message. + Il est envoyé à chaque fois qu'un usager dépose un message. .radios %label @@ -27,21 +27,21 @@ = form.radio_button :instant_email_message_notifications_enabled, false Non - = form.label :email_notification, "recevoir une notification quotidienne" + = form.label :email_notification, "Recevoir une notification quotidienne" %p.notice - cet email vous signale le dépôt de nouveaux dossiers sur cette démarche, ou des changements sur vos dossiers suivis. + Cet email vous signale le dépôt de nouveaux dossiers sur cette démarche, ou des changements sur vos dossiers suivis. %p.notice - il est envoyé une fois par jour, du lundi au samedi, vers 10 h du matin. + Il est envoyé une fois par jour, du lundi au samedi, vers 10 h du matin. .radios %label = form.radio_button :daily_email_notifications_enabled, true - oui + Oui %label = form.radio_button :daily_email_notifications_enabled, false - non + Non = form.label :email_notification, "Recevoir un récapitulatif hebdomadaire" %p.notice