feat: notify administrateur and gestionnaire by email when new commentaire + for administrateur highlight card and commentaires if any unread
This commit is contained in:
parent
86fb28bda0
commit
46c19014f9
20 changed files with 159 additions and 34 deletions
|
@ -25,7 +25,7 @@ class GroupeGestionnaire::GroupeGestionnaireListCommentaires::CommentaireCompone
|
|||
end
|
||||
|
||||
def highlight?
|
||||
commentaire_seen_at = current_gestionnaire.commentaire_seen_at(@groupe_gestionnaire, @commentaire.sender)
|
||||
commentaire_seen_at = current_gestionnaire.commentaire_seen_at(@groupe_gestionnaire, @commentaire.sender_id, @commentaire.sender_type)
|
||||
commentaire_seen_at.nil? || commentaire_seen_at < @commentaire.created_at
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,6 +3,7 @@ module Administrateurs
|
|||
before_action :retrieve_groupe_gestionnaire, only: [:show, :administrateurs, :gestionnaires, :commentaires, :create_commentaire]
|
||||
|
||||
def show
|
||||
@unread_commentaires = current_administrateur.unread_commentaires?
|
||||
end
|
||||
|
||||
def administrateurs
|
||||
|
@ -12,13 +13,20 @@ module Administrateurs
|
|||
end
|
||||
|
||||
def commentaires
|
||||
@commentaire_seen_at = current_administrateur.commentaire_seen_at
|
||||
@commentaire = CommentaireGroupeGestionnaire.new
|
||||
current_administrateur.mark_commentaire_as_seen
|
||||
end
|
||||
|
||||
def create_commentaire
|
||||
@commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender: current_administrateur))
|
||||
|
||||
if @commentaire.errors.empty?
|
||||
commentaire_url = gestionnaire_groupe_gestionnaire_commentaire_url(@groupe_gestionnaire, @commentaire)
|
||||
@groupe_gestionnaire.gestionnaires.each do |gestionnaire|
|
||||
GroupeGestionnaireMailer.notify_new_commentaire_groupe_gestionnaire(@groupe_gestionnaire, @commentaire, @commentaire.sender_email, gestionnaire.email, commentaire_url).deliver_later
|
||||
end
|
||||
current_administrateur.mark_commentaire_as_seen
|
||||
flash.notice = "Message envoyé"
|
||||
redirect_to admin_groupe_gestionnaire_commentaires_path
|
||||
else
|
||||
|
|
|
@ -7,16 +7,18 @@ module Gestionnaires
|
|||
end
|
||||
|
||||
def show
|
||||
@commentaire_seen_at = current_gestionnaire.commentaire_seen_at(@groupe_gestionnaire, @last_commentaire.sender)
|
||||
@commentaire_seen_at = current_gestionnaire.commentaire_seen_at(@groupe_gestionnaire, @last_commentaire.sender_id, @last_commentaire.sender_type)
|
||||
@commentaire = CommentaireGroupeGestionnaire.new
|
||||
current_gestionnaire.mark_commentaire_as_seen(@groupe_gestionnaire, @last_commentaire.sender)
|
||||
current_gestionnaire.mark_commentaire_as_seen(@groupe_gestionnaire, @last_commentaire.sender_id, @last_commentaire.sender_type)
|
||||
end
|
||||
|
||||
def create
|
||||
@commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender: @last_commentaire.sender, gestionnaire: current_gestionnaire))
|
||||
@commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender_id: @last_commentaire.sender_id, sender_type: @last_commentaire.sender_type, gestionnaire: current_gestionnaire))
|
||||
|
||||
if @commentaire.errors.empty?
|
||||
GroupeGestionnaireMailer.notify_new_commentaire_groupe_gestionnaire(@groupe_gestionnaire, @commentaire, current_gestionnaire.email, @commentaire.sender_email, admin_groupe_gestionnaire_commentaires_path).deliver_later
|
||||
flash.notice = "Message envoyé"
|
||||
current_gestionnaire.mark_commentaire_as_seen(@groupe_gestionnaire, @commentaire.sender_id, @commentaire.sender_type)
|
||||
redirect_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire)
|
||||
else
|
||||
flash.alert = @commentaire.errors.full_messages
|
||||
|
@ -27,6 +29,7 @@ module Gestionnaires
|
|||
def destroy
|
||||
if @last_commentaire.soft_deletable?(current_gestionnaire)
|
||||
@last_commentaire.soft_delete!
|
||||
@commentaire_seen_at = current_gestionnaire.commentaire_seen_at(@groupe_gestionnaire, @last_commentaire.sender_id, @last_commentaire.sender_type)
|
||||
|
||||
flash.notice = t('.notice')
|
||||
else
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class GroupeGestionnaireMailer < ApplicationMailer
|
||||
helper MailerHelper
|
||||
layout 'mailers/layout'
|
||||
|
||||
def notify_removed_gestionnaire(groupe_gestionnaire, removed_gestionnaire_email, current_super_admin_email)
|
||||
|
@ -37,6 +38,16 @@ class GroupeGestionnaireMailer < ApplicationMailer
|
|||
mail(bcc: added_administrateur_emails, subject: subject)
|
||||
end
|
||||
|
||||
def notify_new_commentaire_groupe_gestionnaire(groupe_gestionnaire, commentaire, sender_email, recipient_email, commentaire_url)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@commentaire = commentaire
|
||||
@sender_email = sender_email
|
||||
@commentaire_url = commentaire_url
|
||||
@subject = "Vous avez un nouveau message dans le groupe gestionnaire \"#{groupe_gestionnaire.name}\""
|
||||
|
||||
mail(to: recipient_email, subject: @subject)
|
||||
end
|
||||
|
||||
def self.critical_email?(action_name)
|
||||
false
|
||||
end
|
||||
|
|
|
@ -145,4 +145,12 @@ class Administrateur < ApplicationRecord
|
|||
# required to display feature flags field in manager
|
||||
def features
|
||||
end
|
||||
|
||||
def unread_commentaires?
|
||||
commentaire_seen_at.nil? || commentaire_seen_at < commentaire_groupe_gestionnaires.last.created_at
|
||||
end
|
||||
|
||||
def mark_commentaire_as_seen
|
||||
update(commentaire_seen_at: Time.zone.now)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -44,17 +44,17 @@ class Gestionnaire < ApplicationRecord
|
|||
.exists?
|
||||
end
|
||||
|
||||
def commentaire_seen_at(groupe_gestionnaire, sender)
|
||||
def commentaire_seen_at(groupe_gestionnaire, sender_id, sender_type)
|
||||
FollowCommentaireGroupeGestionnaire
|
||||
.where(gestionnaire: self, groupe_gestionnaire:, sender:)
|
||||
.where(gestionnaire: self, groupe_gestionnaire:, sender_id:, sender_type:)
|
||||
.order(id: :desc)
|
||||
.last
|
||||
&.commentaire_seen_at
|
||||
end
|
||||
|
||||
def mark_commentaire_as_seen(groupe_gestionnaire, sender)
|
||||
def mark_commentaire_as_seen(groupe_gestionnaire, sender_id, sender_type)
|
||||
FollowCommentaireGroupeGestionnaire
|
||||
.where(gestionnaire: self, groupe_gestionnaire: groupe_gestionnaire, sender: sender, unfollowed_at: nil)
|
||||
.where(gestionnaire: self, groupe_gestionnaire:, sender_id:, sender_type:, unfollowed_at: nil)
|
||||
.first_or_initialize.update(commentaire_seen_at: Time.zone.now)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,5 +9,5 @@
|
|||
%ul.messages-list{ data: { controller: 'scroll-to' } }
|
||||
- current_administrateur.commentaire_groupe_gestionnaires.where(groupe_gestionnaire: @groupe_gestionnaire).each do |commentaire|
|
||||
%li.message{ class: commentaire_is_from_me_class(commentaire, current_administrateur), id: dom_id(commentaire) }
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: commentaire, connected_user: current_administrateur, is_gestionnaire: false))
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: commentaire, connected_user: current_administrateur, is_gestionnaire: false, commentaire_seen_at: @commentaire_seen_at))
|
||||
= render partial: "shared/groupe_gestionnaires/commentaires/form", locals: { commentaire: @commentaire, form_url: admin_groupe_gestionnaire_create_commentaire_path }
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
.fr-container
|
||||
%h2= "Gestion du groupe gestionnaire \"#{@groupe_gestionnaire.name}\""
|
||||
.fr-grid-row.fr-grid-row--gutters.fr-mb-5w
|
||||
.fr-grid-row.fr-grid-row--gutters.fr-mb-5w.fr-groupe_gestionnaire_cards
|
||||
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: admin_groupe_gestionnaire_gestionnaires_path, is_gestionnaire: false)
|
||||
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: admin_groupe_gestionnaire_administrateurs_path, is_gestionnaire: false)
|
||||
= render GroupeGestionnaire::Card::CommentairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, administrateur: current_administrateur, path: admin_groupe_gestionnaire_commentaires_path)
|
||||
= render GroupeGestionnaire::Card::CommentairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, administrateur: current_administrateur, path: admin_groupe_gestionnaire_commentaires_path, unread_commentaires: @unread_commentaires)
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
.fr-container
|
||||
%nav#header-navigation.fr-nav{ role: 'navigation', 'aria-label': 'Menu principal administrateur' }
|
||||
%ul.fr-nav__list
|
||||
%li.fr-nav__item= link_to 'Mes démarches', admin_procedures_path, class:'fr-nav__link', 'aria-current': current_page?(controller: 'procedures', action: :index) ? 'true' : nil
|
||||
- if Rails.application.config.ds_zonage_enabled
|
||||
%li.fr-nav__item= link_to 'Toutes les démarches', all_admin_procedures_path(zone_ids: current_administrateur.zones), class:'fr-nav__link', 'aria-current': current_page?(all_admin_procedures_path) ? 'page' : nil
|
||||
- if current_administrateur.groupe_gestionnaire_id
|
||||
%li.fr-nav__item= link_to 'Mon groupe gestionnaire', admin_groupe_gestionnaire_path, class:'fr-nav__link', 'aria-current': current_page?(admin_groupe_gestionnaire_path) ? 'page' : nil
|
|
@ -1,3 +1,3 @@
|
|||
- if @last_commentaire.discarded?
|
||||
= turbo_stream.update @last_commentaire do
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: @last_commentaire, connected_user: current_gestionnaire))
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: @last_commentaire, connected_user: current_gestionnaire, commentaire_seen_at: @commentaire_seen_at))
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
- content_for(:title, "#{@subject}")
|
||||
|
||||
%p= t(:hello, scope: [:views, :shared, :greetings])
|
||||
|
||||
%p
|
||||
= t('.body', groupe_gestionnaire_name: @groupe_gestionnaire.name, sender_email: @sender_email)
|
||||
%p= round_button("consulter le message", @commentaire_url, :primary)
|
||||
|
||||
= render partial: "layouts/mailers/signature"
|
||||
|
||||
- content_for :footer do
|
||||
= render 'layouts/mailers/commentaire_groupe_gestionnaire_footer'
|
|
@ -0,0 +1,2 @@
|
|||
%strong
|
||||
= t('.do_not_reply_html', application_name: APPLICATION_NAME, sender_email: @sender_email)
|
Loading…
Add table
Add a link
Reference in a new issue