diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 277365c4c..298cc862a 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -231,8 +231,7 @@ module Instructeurs end def update_email_notifications - assign_to.update!(email_notifications_enabled: params[:assign_to][:email_notifications_enabled]) - + assign_to.update!(assign_to_params) flash.notice = 'Vos notifications sont enregistrées.' redirect_to instructeur_procedure_path(procedure) end @@ -246,6 +245,10 @@ module Instructeurs private + def assign_to_params + params.require(:assign_to).permit(:email_notifications_enabled, :weekly_email_notifications_enabled) + end + def assign_exports groupe_instructeurs_for_procedure = current_instructeur.groupe_instructeurs.where(procedure: procedure) @xlsx_export = Export.find_for_format_and_groupe_instructeurs(:xlsx, groupe_instructeurs_for_procedure) diff --git a/app/models/instructeur.rb b/app/models/instructeur.rb index 97b2b0a49..6c2400a87 100644 --- a/app/models/instructeur.rb +++ b/app/models/instructeur.rb @@ -75,11 +75,12 @@ class Instructeur < ApplicationRecord start_date = Time.zone.now.beginning_of_week active_procedure_overviews = procedures + .where(assign_tos: { weekly_email_notifications_enabled: true }) .publiees .map { |procedure| procedure.procedure_overview(start_date, groupe_instructeurs) } .filter(&:had_some_activities?) - if active_procedure_overviews.count == 0 + if active_procedure_overviews.empty? nil else { diff --git a/app/views/instructeurs/procedures/email_notifications.html.haml b/app/views/instructeurs/procedures/email_notifications.html.haml index 4f5af7b5f..7ec771b45 100644 --- a/app/views/instructeurs/procedures/email_notifications.html.haml +++ b/app/views/instructeurs/procedures/email_notifications.html.haml @@ -27,18 +27,18 @@ = form.radio_button :email_notifications_enabled, false Non - = form.label nil, "Recevoir un récapitulatif hebdomadaire" + = form.label :email_notification, "Recevoir un récapitulatif hebdomadaire" %p.notice Cet email récapitule l’activité de la semaine sur l’ensemble de vos démarches. %p.notice - Il est envoyé chaque semaine le lundi matin, et n’est pas désactivable. + Il est envoyé chaque semaine le lundi matin. .radios %label - = radio_button_tag "not_implemented", "Oui", true, disabled: true + = form.radio_button :weekly_email_notifications_enabled, true Oui %label - = radio_button_tag "not_implemented", "Non", false, disabled: true + = form.radio_button :weekly_email_notifications_enabled, false Non .send-wrapper diff --git a/db/migrate/20200210100938_add_weekly_email_notifications_to_assign_tos.rb b/db/migrate/20200210100938_add_weekly_email_notifications_to_assign_tos.rb new file mode 100644 index 000000000..f66dd5243 --- /dev/null +++ b/db/migrate/20200210100938_add_weekly_email_notifications_to_assign_tos.rb @@ -0,0 +1,5 @@ +class AddWeeklyEmailNotificationsToAssignTos < ActiveRecord::Migration[5.2] + def change + add_column :assign_tos, :weekly_email_notifications_enabled, :boolean, default: true, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 8bf635fc8..0315b4db3 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_01_30_165328) do +ActiveRecord::Schema.define(version: 2020_02_10_100938) 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_01_30_165328) do t.datetime "updated_at" t.boolean "email_notifications_enabled", default: false, null: false t.bigint "groupe_instructeur_id" + t.boolean "weekly_email_notifications_enabled", default: true, 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/models/instructeur_spec.rb b/spec/models/instructeur_spec.rb index 78737bf89..2b79e1500 100644 --- a/spec/models/instructeur_spec.rb +++ b/spec/models/instructeur_spec.rb @@ -147,6 +147,21 @@ describe Instructeur, type: :model do it { expect(instructeur2.last_week_overview[:procedure_overviews]).to match([procedure_overview]) } end + context 'when a procedure published was active and weekly notifications is disable' do + let!(:procedure) { create(:procedure, :published, libelle: 'procedure') } + let(:procedure_overview) { double('procedure_overview', 'had_some_activities?'.to_sym => true) } + + before :each do + instructeur2.assign_to_procedure(procedure) + AssignTo + .where(instructeur: instructeur2, groupe_instructeur: procedure.groupe_instructeurs.first) + .update(weekly_email_notifications_enabled: false) + allow_any_instance_of(Procedure).to receive(:procedure_overview).and_return(procedure_overview) + end + + it { expect(instructeur2.last_week_overview).to be_nil } + end + context 'when a procedure not published was active with no notifications' do let!(:procedure) { create(:procedure, libelle: 'procedure') } let(:procedure_overview) { double('procedure_overview', 'had_some_activities?'.to_sym => true) }