Notifie instructeurs le souhaitant lors depot dossier

Notifie par mail uniquement les instructeurs qui le souhaitent à chaque dépôt de dossier
This commit is contained in:
Christophe Robillard 2020-04-09 11:43:23 +02:00
parent ae18ff6627
commit f683b850c3
7 changed files with 37 additions and 8 deletions

View file

@ -254,7 +254,8 @@ module Instructeurs
private private
def assign_to_params def assign_to_params
params.require(:assign_to).permit(:instant_email_message_notifications_enabled, :daily_email_notifications_enabled, :weekly_email_notifications_enabled) params.require(:assign_to)
.permit(:instant_email_dossier_notifications_enabled, :instant_email_message_notifications_enabled, :daily_email_notifications_enabled, :weekly_email_notifications_enabled)
end end
def assign_exports def assign_exports

View file

@ -153,7 +153,7 @@ module Users
if passage_en_construction? && errors.blank? if passage_en_construction? && errors.blank?
@dossier.en_construction! @dossier.en_construction!
NotificationMailer.send_initiated_notification(@dossier).deliver_later NotificationMailer.send_initiated_notification(@dossier).deliver_later
@dossier.procedure.instructeurs.each do |instructeur| @dossier.procedure.instructeurs.with_instant_email_dossier_notifications.each do |instructeur|
DossierMailer.notify_new_dossier_depose_to_instructeur(@dossier, instructeur.email).deliver_later DossierMailer.notify_new_dossier_depose_to_instructeur(@dossier, instructeur.email).deliver_later
end end
return redirect_to(merci_dossier_path(@dossier)) return redirect_to(merci_dossier_path(@dossier))

View file

@ -23,6 +23,10 @@ class Instructeur < ApplicationRecord
includes(:assign_to).where(assign_tos: { instant_email_message_notifications_enabled: true }) includes(:assign_to).where(assign_tos: { instant_email_message_notifications_enabled: true })
} }
scope :with_instant_email_dossier_notifications, -> {
includes(:assign_to).where(assign_tos: { instant_email_dossier_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,6 +11,22 @@
.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 à chaque dossier déposé"
%p.notice
Cet email vous signale le dépôt d'un nouveau dossier.
%p.notice
Il est envoyé à chaque fois qu'un usager dépose un dossier.
.radios
%label
= form.radio_button :instant_email_dossier_notifications_enabled, true
Oui
%label
= form.radio_button :instant_email_dossier_notifications_enabled, false
Non
= form.label :email_notification, "Recevoir une notification à chaque message déposé" = form.label :email_notification, "Recevoir une notification à chaque message déposé"
%p.notice %p.notice

View file

@ -0,0 +1,5 @@
class AddInstantEmailDossierNotificationsToAssignTos < ActiveRecord::Migration[5.2]
def change
add_column :assign_tos, :instant_email_dossier_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_04_07_135256) do ActiveRecord::Schema.define(version: 2020_04_09_075320) 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"
@ -104,6 +104,7 @@ ActiveRecord::Schema.define(version: 2020_04_07_135256) do
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.boolean "instant_email_message_notifications_enabled", default: false, null: false
t.boolean "instant_email_dossier_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

@ -421,19 +421,21 @@ describe Users::DossiersController, type: :controller do
expect(dossier.reload.state).to eq(Dossier.states.fetch(:en_construction)) expect(dossier.reload.state).to eq(Dossier.states.fetch(:en_construction))
end end
context 'with instructeurs for the procedure' do context 'with instructeurs ok to be notified instantly' do
let!(:instructeur) { create(:instructeur, groupe_instructeurs: [dossier.procedure.defaut_groupe_instructeur]) } let!(:instructeur_with_instant_email_dossier) { create(:instructeur) }
let!(:instructeur2) { create(:instructeur, groupe_instructeurs: [dossier.procedure.defaut_groupe_instructeur]) } let!(:instructeur_without_instant_email_dossier) { create(:instructeur) }
before do before do
allow(DossierMailer).to receive(:notify_new_dossier_depose_to_instructeur).and_return(double(deliver_later: nil)) allow(DossierMailer).to receive(:notify_new_dossier_depose_to_instructeur).and_return(double(deliver_later: nil))
create(:assign_to, instructeur: instructeur_with_instant_email_dossier, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: true, groupe_instructeur: dossier.procedure.defaut_groupe_instructeur)
create(:assign_to, instructeur: instructeur_without_instant_email_dossier, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: false, groupe_instructeur: dossier.procedure.defaut_groupe_instructeur)
end end
it "sends notification mail to instructeurs" do it "sends notification mail to instructeurs" do
subject subject
expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur.email) expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).once.with(dossier, instructeur_with_instant_email_dossier.email)
expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur2.email) expect(DossierMailer).not_to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur_without_instant_email_dossier.email)
end end
end end