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

View file

@ -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é à linstructeur en charge de votre dossier."

View file

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

View file

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

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

View file

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