Envoie une notif aux followers_instructeurs le souhaitant

après chaque message déposé par l'usager
This commit is contained in:
Christophe Robillard 2020-04-02 10:18:23 +02:00
parent 415d5c765e
commit 969478b706
7 changed files with 46 additions and 13 deletions

View file

@ -254,7 +254,7 @@ module Instructeurs
private private
def assign_to_params 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 end
def assign_exports def assign_exports

View file

@ -197,7 +197,9 @@ module Users
@commentaire = CommentaireService.build(current_user, dossier, commentaire_params) @commentaire = CommentaireService.build(current_user, dossier, commentaire_params)
if @commentaire.save 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 DossierMailer.notify_new_commentaire_to_instructeur(dossier, instructeur.email).deliver_later
end end
flash.notice = "Votre message a bien été envoyé à linstructeur en charge de votre dossier." flash.notice = "Votre message a bien été envoyé à linstructeur en charge de votre dossier."

View file

@ -19,6 +19,10 @@ class Instructeur < ApplicationRecord
has_one :user, dependent: :nullify 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) } default_scope { eager_load(:user) }
def self.by_email(email) def self.by_email(email)

View file

@ -11,21 +11,37 @@
.explication .explication
Configurez sur cette page les notifications que vous souhaitez recevoir par email pour cette démarche. 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 %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 %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 .radios
%label %label
= form.radio_button :daily_email_notifications_enabled, true = form.radio_button :daily_email_notifications_enabled, true
Oui oui
%label %label
= form.radio_button :daily_email_notifications_enabled, false = form.radio_button :daily_email_notifications_enabled, false
Non non
= form.label :email_notification, "Recevoir un récapitulatif hebdomadaire" = form.label :email_notification, "Recevoir un récapitulatif hebdomadaire"
%p.notice %p.notice

View file

@ -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

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -103,6 +103,7 @@ ActiveRecord::Schema.define(version: 2020_03_19_103836) do
t.bigint "groupe_instructeur_id" t.bigint "groupe_instructeur_id"
t.boolean "weekly_email_notifications_enabled", default: true, null: false t.boolean "weekly_email_notifications_enabled", default: true, null: false
t.boolean "daily_email_notifications_enabled", default: false, 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", "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 ["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 t.index ["instructeur_id", "procedure_id"], name: "index_assign_tos_on_instructeur_id_and_procedure_id", unique: true

View file

@ -783,8 +783,9 @@ describe Users::DossiersController, type: :controller do
end end
describe "#create_commentaire" do describe "#create_commentaire" do
let(:instructeur) { create(:instructeur) } let(:instructeur_with_instant_message) { create(:instructeur) }
let(:procedure) { create(:procedure, :published, instructeurs: [instructeur]) } let(:instructeur_without_instant_message) { create(:instructeur) }
let(:procedure) { create(:procedure, :published) }
let(:dossier) { create(:dossier, :en_construction, procedure: procedure, user: user) } let(:dossier) { create(:dossier, :en_construction, procedure: procedure, user: user) }
let(:saved_commentaire) { dossier.commentaires.first } let(:saved_commentaire) { dossier.commentaires.first }
let(:body) { "avant\napres" } let(:body) { "avant\napres" }
@ -804,15 +805,19 @@ describe Users::DossiersController, type: :controller do
before do before do
sign_in(user) sign_in(user)
allow(ClamavService).to receive(:safe_file?).and_return(scan_result) 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)) allow(DossierMailer).to receive(:notify_new_commentaire_to_instructeur).and_return(double(deliver_later: nil))
instructeur.follow(dossier) 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 end
it "creates a commentaire" do it "creates a commentaire" do
expect { subject }.to change(Commentaire, :count).by(1) expect { subject }.to change(Commentaire, :count).by(1)
expect(response).to redirect_to(messagerie_dossier_path(dossier)) 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 expect(flash.notice).to be_present
end end
end end