Skip to content

Commit

Permalink
feat: answer message to administrateur as gestionnaire
Browse files Browse the repository at this point in the history
  • Loading branch information
seb-by-ouidou authored and seb-by-ouidou committed Jan 17, 2024
1 parent 6a00110 commit 2368143
Show file tree
Hide file tree
Showing 25 changed files with 321 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,12 @@ def initialize(groupe_gestionnaire:, administrateur:, path:)
@administrateur = administrateur
@path = path
end

def number_commentaires
if @administrateur
@administrateur.commentaire_groupe_gestionnaires.size
else
@groupe_gestionnaire.commentaire_groupe_gestionnaires.select(:sender_id, :sender_type).distinct.size
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
%p.fr-badge.fr-badge--success Validé
%div
.line-count.fr-my-1w
%p.fr-tag= @administrateur.commentaire_groupe_gestionnaires.size
%p.fr-tag= number_commentaires
%h3.fr-h6
= t('.title', count: @administrateur.commentaire_groupe_gestionnaires.size)
= t('.title', count: number_commentaires)
%p.fr-btn.fr-btn--tertiary= t('views.shared.actions.see')
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ def initialize(commentaire:, connected_user:, is_gestionnaire: true)
@commentaire = commentaire
@connected_user = connected_user
@is_gestionnaire = is_gestionnaire
@groupe_gestionnaire = commentaire.groupe_gestionnaire
end

private
Expand All @@ -13,7 +14,7 @@ def commentaire_issuer
if @commentaire.sent_by?(@connected_user)
t('.you')
else
(@commentaire.gestionnaire || @commentaire.sender).email
@commentaire.gestionnaire_id ? @commentaire.gestionnaire_email : @commentaire.sender_email
end
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@
%p= t('.deleted_body')
- else
= render SimpleFormatComponent.new(@commentaire.body, allow_a: false)
.message-extras.flex.justify-start
- if @commentaire.soft_deletable?(@connected_user)
= button_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire), method: :delete, class: 'button danger', form: { data: { turbo: true, turbo_confirm: t('.confirm') } } do
%span.icon.delete
= t('.delete_button')
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class GroupeGestionnaire::GroupeGestionnaireListCommentaires::CommentaireComponent < ApplicationComponent
include ApplicationHelper

def initialize(groupe_gestionnaire:, commentaire:)
@groupe_gestionnaire = groupe_gestionnaire
@commentaire = commentaire
end

def email
if @commentaire.sender == current_gestionnaire
"#{current_gestionnaire.email} (C’est vous !)"
else
@commentaire.sender_email
end
end

def created_at
try_format_datetime(@commentaire.created_at)
end

def see_button
link_to 'Voir',
gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire),
class: 'button'
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
%tr{ id: dom_id(@commentaire) }
%td= email
%td= created_at
%td= see_button
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def gestionnaires
end

def commentaires
@commentaire = Commentaire.new
@commentaire = CommentaireGroupeGestionnaire.new
end

def create_commentaire
Expand Down Expand Up @@ -42,7 +42,7 @@ def retrieve_groupe_gestionnaire
end

def commentaire_params
params.require(:commentaire).permit(:body)
params.require(:commentaire_groupe_gestionnaire).permit(:body)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
module Gestionnaires
class GroupeGestionnaireCommentairesController < GestionnaireController
before_action :retrieve_groupe_gestionnaire
before_action :retrieve_last_commentaire, only: [:show, :create, :destroy]

def index
end

def show
@commentaire = CommentaireGroupeGestionnaire.new
end

def create
@commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender: @last_commentaire.sender, gestionnaire: current_gestionnaire))

if @commentaire.errors.empty?
flash.notice = "Message envoyé"
redirect_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @commentaire)
else
flash.alert = @commentaire.errors.full_messages
render :show
end
end

def destroy
if @last_commentaire.soft_deletable?(current_gestionnaire)
@last_commentaire.soft_delete!

flash.notice = t('.notice')
else
flash.alert = t('.alert_acl')
end
# redirect_to gestionnaire_groupe_gestionnaire_commentaire_path(@groupe_gestionnaire, @last_commentaire)
rescue Discard::RecordNotDiscarded
flash.alert = t('.alert_already_discarded')
end

private

def retrieve_last_commentaire
@last_commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.find(params[:id])
end

def commentaire_params
params.require(:commentaire_groupe_gestionnaire).permit(:body)
end
end
end
9 changes: 9 additions & 0 deletions app/models/commentaire_groupe_gestionnaire.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ class CommentaireGroupeGestionnaire < ApplicationRecord

validates :body, presence: { message: "ne peut être vide" }

before_create :set_emails

def soft_deletable?(connected_user)
sent_by?(connected_user) && sent_by_gestionnaire? && !discarded?
end
Expand All @@ -25,4 +27,11 @@ def sent_by?(someone)
someone == sender
end
end

private

def set_emails
self.sender_email = sender.email
self.gestionnaire_email = gestionnaire&.email
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- if @last_commentaire.discarded?
= turbo_stream.update @last_commentaire do
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: @last_commentaire, connected_user: current_gestionnaire))
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
= render partial: 'gestionnaires/breadcrumbs',
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
["Messagerie"]], preview: false }

.container
%h1 Messagerie de « #{@groupe_gestionnaire.name} »

%table.table
%thead
%tr
%th= 'Adresse email'
%th= 'Dernier message'
%th
%tbody#commentaires
= render(GroupeGestionnaire::GroupeGestionnaireListCommentaires::CommentaireComponent.with_collection(@groupe_gestionnaire.commentaire_groupe_gestionnaires.select("sender_id, sender_type, sender_email, MAX(id) as id, MAX(created_at) as created_at").group(:sender_id, :sender_type, :sender_email).order("MAX(id) DESC"), groupe_gestionnaire: @groupe_gestionnaire))
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
= render partial: 'gestionnaires/breadcrumbs',
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
["Messagerie", gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire)],
[@last_commentaire.sender_email]], preview: false }

.container
%h1 Messages de « #{ @last_commentaire.sender_email } »
.messagerie.container
%ul.messages-list{ data: { controller: 'scroll-to' } }
- @groupe_gestionnaire.commentaire_groupe_gestionnaires.where(sender_id: @last_commentaire.sender_id, sender_type: @last_commentaire.sender_type).each do |commentaire|
%li.message{ class: commentaire_is_from_me_class(commentaire, current_gestionnaire), id: dom_id(commentaire) }
= render(GroupeGestionnaire::GroupeGestionnaireCommentaires::CommentaireComponent.new(commentaire: commentaire, connected_user: current_gestionnaire))
- if @last_commentaire.sender
= render partial: "shared/groupe_gestionnaires/commentaires/form", locals: { commentaire: @commentaire, form_url: gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire) }
2 changes: 2 additions & 0 deletions app/views/gestionnaires/groupe_gestionnaires/show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire))
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_administrateurs_path(@groupe_gestionnaire))
= render GroupeGestionnaire::Card::ChildrenComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: gestionnaire_groupe_gestionnaire_children_path(@groupe_gestionnaire))
= render GroupeGestionnaire::Card::CommentairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, administrateur: nil, path: gestionnaire_groupe_gestionnaire_commentaires_path(@groupe_gestionnaire))

Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
= render NestedForms::FormOwnerComponent.new
= form_for(commentaire, url: form_url) do |f|
- dossier = commentaire.dossier
- placeholder = t('views.shared.dossiers.messages.form.write_message_to_administration_placeholder')
- if instructeur_signed_in? || administrateur_signed_in? || expert_signed_in?
- placeholder = t('views.shared.dossiers.messages.form.write_message_placeholder')
- if @last_commentaire
= f.hidden_field :last_commentaire, value: @last_commentaire.id, name: :id
%p.mandatory-explanation= t('asterisk_html', scope: [:utils])

= render Dsfr::InputComponent.new(form: f, attribute: :body, input_type: :text_area, opts: { rows: 5, placeholder: placeholder, title: placeholder, class: 'fr-input message-textarea'})
= render Dsfr::InputComponent.new(form: f, attribute: :body, input_type: :text_area, opts: { rows: 5, placeholder: t('views.gestionnaires.groupe_gestionnaires.messages.form.write_message_placeholder'), title: t('views.gestionnaires.groupe_gestionnaires.messages.form.write_message_placeholder'), class: 'fr-input message-textarea'})

.fr-mt-3w
= f.submit t('views.shared.dossiers.messages.form.send_message'), class: 'fr-btn', data: { disable: true }
= f.submit t('views.gestionnaires.groupe_gestionnaires.messages.form.send_message'), class: 'fr-btn', data: { disable: true }
7 changes: 7 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,13 @@ en:
form: "Form"
edit_siret: "Edit SIRET"
edit_identity: "Edit identity data"
gestionnaires:
groupe_gestionnaires:
delete: Delete
messages:
form:
send_message: "Send message"
write_message_placeholder: "Write your message here"
instructeurs:
dossiers:
tab_steps:
Expand Down
4 changes: 4 additions & 0 deletions config/locales/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,10 @@ fr:
gestionnaires:
groupe_gestionnaires:
delete: Supprimer
messages:
form:
send_message: "Envoyer le message"
write_message_placeholder: "Écrivez votre message ici"
instructeurs:
dossiers:
tab_steps:
Expand Down
5 changes: 5 additions & 0 deletions config/locales/models/commentaire_groupe_gestionnaire/fr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fr:
activerecord:
attributes:
commentaire_groupe_gestionnaire:
body: 'Votre message'
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
en:
gestionnaires:
groupe_gestionnaire_commentaires:
destroy:
notice: Your message had been deleted
alert_acl: "Can not destroy message: it does not belong to you"
alert_already_discarded: "Can not destroy message: it was already destroyed"
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
fr:
gestionnaires:
groupe_gestionnaire_commentaires:
destroy:
notice: Votre message a été supprimé
alert_acl: Impossible de supprimer le message, celui-ci ne vous appartient pas
alert_already_discarded: Ce message a déjà été supprimé
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,7 @@
delete :remove, on: :member
end
resources :children, controller: 'groupe_gestionnaire_children', only: [:index, :create, :destroy]
resources :commentaires, controller: 'groupe_gestionnaire_commentaires', only: [:index, :show, :create, :destroy]
end
end
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class AddEmailsToCommentaireGroupeGestionnaires < ActiveRecord::Migration[6.1]
def change
# in case sender or gestionnaire would have been deleted
add_column :commentaire_groupe_gestionnaires, :sender_email, :string
add_column :commentaire_groupe_gestionnaires, :gestionnaire_email, :string
end
end
2 changes: 2 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,10 @@
t.string "body"
t.datetime "created_at", precision: 6, null: false
t.datetime "discarded_at", precision: 6
t.string "gestionnaire_email"
t.bigint "gestionnaire_id"
t.bigint "groupe_gestionnaire_id"
t.string "sender_email"
t.bigint "sender_id", null: false
t.string "sender_type", null: false
t.datetime "updated_at", precision: 6, null: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@

subject {
post :create_commentaire, params: {
commentaire: {
commentaire_groupe_gestionnaire: {
body: body
}
}
Expand Down
Loading

0 comments on commit 2368143

Please sign in to comment.