commit
85540901c4
12 changed files with 70 additions and 8 deletions
|
@ -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
|
||||||
|
|
|
@ -197,6 +197,11 @@ 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
|
||||||
|
.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é à l’instructeur en charge de votre dossier."
|
flash.notice = "Votre message a bien été envoyé à l’instructeur en charge de votre dossier."
|
||||||
redirect_to messagerie_dossier_path(dossier)
|
redirect_to messagerie_dossier_path(dossier)
|
||||||
else
|
else
|
||||||
|
|
|
@ -15,10 +15,10 @@ export default class Uploader {
|
||||||
this.progressBar.start();
|
this.progressBar.start();
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.directUpload.create((error, attributes) => {
|
this.directUpload.create((errorMsg, attributes) => {
|
||||||
if (error) {
|
if (errorMsg) {
|
||||||
this.progressBar.error(error);
|
this.progressBar.error(errorMsg);
|
||||||
reject(error);
|
reject(new Error(errorMsg));
|
||||||
} else {
|
} else {
|
||||||
resolve(attributes.signed_id);
|
resolve(attributes.signed_id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,12 @@ class DossierMailer < ApplicationMailer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def notify_new_commentaire_to_instructeur(dossier, instructeur_email)
|
||||||
|
@dossier = dossier
|
||||||
|
@subject = default_i18n_subject(dossier_id: dossier.id, libelle_demarche: dossier.procedure.libelle)
|
||||||
|
mail(from: NO_REPLY_EMAIL, to: instructeur_email, subject: @subject)
|
||||||
|
end
|
||||||
|
|
||||||
def notify_revert_to_instruction(dossier)
|
def notify_revert_to_instruction(dossier)
|
||||||
@dossier = dossier
|
@dossier = dossier
|
||||||
@service = dossier.procedure.service
|
@service = dossier.procedure.service
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
%td= link_to(try_format_datetime(procedure.created_at), admin_procedure_href)
|
%td= link_to(try_format_datetime(procedure.created_at), admin_procedure_href)
|
||||||
%td
|
%td
|
||||||
= link_to('Cloner', admin_procedure_clone_path(procedure.id), data: { method: :put }, class: 'btn-sm btn-primary clone-btn')
|
= link_to('Cloner', admin_procedure_clone_path(procedure.id), data: { method: :put }, class: 'btn-sm btn-primary clone-btn')
|
||||||
- if !procedure.can_be_deleted_by_administrateur?
|
- if procedure.can_be_deleted_by_administrateur?
|
||||||
= link_to('X', url_for(controller: 'admin/procedures', action: :destroy, id: procedure.id), data: { method: :delete, confirm: "Confirmez-vous la suppression de la démarche ? \n\n Attention : toute suppression est définitive et s’appliquera aux éventuels autres administrateurs de cette démarche !" }, class: 'btn-sm btn-danger')
|
= link_to('X', url_for(controller: 'admin/procedures', action: :destroy, id: procedure.id), data: { method: :delete, confirm: "Confirmez-vous la suppression de la démarche ? \n\n Attention : toute suppression est définitive et s’appliquera aux éventuels autres administrateurs de cette démarche !" }, class: 'btn-sm btn-danger')
|
||||||
|
|
||||||
= smart_listing.paginate
|
= smart_listing.paginate
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
- content_for(:title, "#{@subject}")
|
||||||
|
|
||||||
|
%p
|
||||||
|
Bonjour,
|
||||||
|
|
||||||
|
%p
|
||||||
|
= t('.body', dossier_id: @dossier.id, libelle_demarche: @dossier.procedure.libelle)
|
||||||
|
%p= link_to("Messagerie du dossier n°#{@dossier.id}", messagerie_instructeur_dossier_url(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id))
|
||||||
|
|
||||||
|
= render partial: "layouts/mailers/signature"
|
|
@ -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 message déposé"
|
||||||
|
|
||||||
|
%p.notice
|
||||||
|
Cet email vous signale le dépôt d'un nouveau message sur vos dossiers suivis.
|
||||||
|
%p.notice
|
||||||
|
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"
|
= form.label :email_notification, "Recevoir une notification quotidienne"
|
||||||
|
|
||||||
%p.notice
|
%p.notice
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
fr:
|
||||||
|
dossier_mailer:
|
||||||
|
notify_new_commentaire_to_instructeur:
|
||||||
|
subject: Nouveau commentaire déposé sur le dossier n°%{dossier_id}
|
||||||
|
body: Un nouveau commentaire a été déposé par l'usager sur le dossier n° %{dossier_id} de la démarche %{libelle_demarche}
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -783,7 +783,10 @@ describe Users::DossiersController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#create_commentaire" do
|
describe "#create_commentaire" do
|
||||||
let(:dossier) { create(:dossier, :en_construction, user: user) }
|
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(:saved_commentaire) { dossier.commentaires.first }
|
||||||
let(:body) { "avant\napres" }
|
let(:body) { "avant\napres" }
|
||||||
let(:file) { Rack::Test::UploadedFile.new("./spec/fixtures/files/piece_justificative_0.pdf", 'application/pdf') }
|
let(:file) { Rack::Test::UploadedFile.new("./spec/fixtures/files/piece_justificative_0.pdf", 'application/pdf') }
|
||||||
|
@ -802,12 +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).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
|
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_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
|
||||||
|
|
Loading…
Reference in a new issue