diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 4210f1497..7a255186e 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -254,7 +254,8 @@ module Instructeurs private 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 def assign_exports diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 57b7f77e0..f94983007 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -153,7 +153,7 @@ module Users if passage_en_construction? && errors.blank? @dossier.en_construction! 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 end return redirect_to(merci_dossier_path(@dossier)) diff --git a/app/models/instructeur.rb b/app/models/instructeur.rb index 7ea2d737b..27fc5223e 100644 --- a/app/models/instructeur.rb +++ b/app/models/instructeur.rb @@ -23,6 +23,10 @@ class Instructeur < ApplicationRecord 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) } 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 6cc0544d4..2f23b5fc1 100644 --- a/app/views/instructeurs/procedures/email_notifications.html.haml +++ b/app/views/instructeurs/procedures/email_notifications.html.haml @@ -11,6 +11,22 @@ .explication 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é" %p.notice diff --git a/db/migrate/20200409075320_add_instant_email_dossier_notifications_to_assign_tos.rb b/db/migrate/20200409075320_add_instant_email_dossier_notifications_to_assign_tos.rb new file mode 100644 index 000000000..4d4ed8d93 --- /dev/null +++ b/db/migrate/20200409075320_add_instant_email_dossier_notifications_to_assign_tos.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 93bdc8f5a..4ea488b03 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_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 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 "daily_email_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"], 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 fc9a9d916..dfe54c93b 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -421,19 +421,21 @@ describe Users::DossiersController, type: :controller do expect(dossier.reload.state).to eq(Dossier.states.fetch(:en_construction)) end - context 'with instructeurs for the procedure' do - let!(:instructeur) { create(:instructeur, groupe_instructeurs: [dossier.procedure.defaut_groupe_instructeur]) } - let!(:instructeur2) { create(:instructeur, groupe_instructeurs: [dossier.procedure.defaut_groupe_instructeur]) } + context 'with instructeurs ok to be notified instantly' do + let!(:instructeur_with_instant_email_dossier) { create(:instructeur) } + let!(:instructeur_without_instant_email_dossier) { create(:instructeur) } before do 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 it "sends notification mail to instructeurs" do 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).with(dossier, instructeur2.email) + expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).once.with(dossier, instructeur_with_instant_email_dossier.email) + expect(DossierMailer).not_to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur_without_instant_email_dossier.email) end end