feat: US4.3 update and delete groupe gestionnaire
This commit is contained in:
parent
870efba29b
commit
3c5e76e705
8 changed files with 159 additions and 4 deletions
|
@ -1,6 +1,6 @@
|
||||||
module Gestionnaires
|
module Gestionnaires
|
||||||
class GroupeGestionnairesController < GestionnaireController
|
class GroupeGestionnairesController < GestionnaireController
|
||||||
before_action :retrieve_groupe_gestionnaire, only: [:show]
|
before_action :retrieve_groupe_gestionnaire, only: [:show, :edit, :update, :destroy]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@groupe_gestionnaires = groupe_gestionnaires
|
@groupe_gestionnaires = groupe_gestionnaires
|
||||||
|
@ -9,11 +9,41 @@ module Gestionnaires
|
||||||
def show
|
def show
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if @groupe_gestionnaire.update(groupe_gestionnaire_params)
|
||||||
|
flash.notice = "Le groupe a bien été modifié"
|
||||||
|
|
||||||
|
redirect_to gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)
|
||||||
|
else
|
||||||
|
flash.now.alert = "Le groupe contient des erreurs et n'a pas pu être enregistré. Veuiller les corriger"
|
||||||
|
|
||||||
|
render :edit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
if !@groupe_gestionnaire.can_be_deleted?(current_gestionnaire)
|
||||||
|
fail "Impossible de supprimer ce groupe.."
|
||||||
|
end
|
||||||
|
@groupe_gestionnaire.destroy
|
||||||
|
|
||||||
|
flash[:notice] = "Le groupe #{@groupe_gestionnaire.id} est supprimé"
|
||||||
|
|
||||||
|
redirect_to gestionnaire_groupe_gestionnaires_path
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def groupe_gestionnaires
|
def groupe_gestionnaires
|
||||||
groupe_gestionnaire_ids = current_gestionnaire.groupe_gestionnaire_ids
|
groupe_gestionnaire_ids = current_gestionnaire.groupe_gestionnaire_ids
|
||||||
GroupeGestionnaire.where(id: groupe_gestionnaire_ids.compact.uniq)
|
GroupeGestionnaire.where(id: groupe_gestionnaire_ids.compact.uniq)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def groupe_gestionnaire_params
|
||||||
|
params.require(:groupe_gestionnaire).permit(:name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,6 +24,9 @@ class GroupeGestionnaire < ApplicationRecord
|
||||||
if gestionnaire.nil? || !in?(gestionnaire.groupe_gestionnaires) || !gestionnaire.groupe_gestionnaires.destroy(self)
|
if gestionnaire.nil? || !in?(gestionnaire.groupe_gestionnaires) || !gestionnaire.groupe_gestionnaires.destroy(self)
|
||||||
alert = "Le gestionnaire « #{gestionnaire.email} » n’est pas dans le groupe."
|
alert = "Le gestionnaire « #{gestionnaire.email} » n’est pas dans le groupe."
|
||||||
else
|
else
|
||||||
|
if gestionnaire.groupe_gestionnaires.empty?
|
||||||
|
gestionnaire.destroy
|
||||||
|
end
|
||||||
notice = "Le gestionnaire « #{gestionnaire.email} » a été retiré du groupe."
|
notice = "Le gestionnaire « #{gestionnaire.email} » a été retiré du groupe."
|
||||||
GroupeGestionnaireMailer
|
GroupeGestionnaireMailer
|
||||||
.notify_removed_gestionnaire(self, gestionnaire, current_user.email)
|
.notify_removed_gestionnaire(self, gestionnaire, current_user.email)
|
||||||
|
@ -75,4 +78,8 @@ class GroupeGestionnaire < ApplicationRecord
|
||||||
|
|
||||||
[gestionnaires_to_add, alert, notice]
|
[gestionnaires_to_add, alert, notice]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def can_be_deleted?(current_user)
|
||||||
|
(gestionnaires.empty? || (gestionnaires == [current_user])) && administrateurs.empty? && children.empty?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
= render partial: 'gestionnaires/breadcrumbs',
|
= render partial: 'gestionnaires/breadcrumbs',
|
||||||
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
|
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
|
||||||
["#{@groupe_gestionnaire.name.truncate_words(10)}"],
|
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
|
||||||
['Gestionnaires']], preview: false }
|
['Gestionnaires']], preview: false }
|
||||||
|
|
||||||
.container
|
.container
|
||||||
|
|
24
app/views/gestionnaires/groupe_gestionnaires/edit.html.haml
Normal file
24
app/views/gestionnaires/groupe_gestionnaires/edit.html.haml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
- content_for(:root_class, 'scroll-margins-for-sticky-footer')
|
||||||
|
|
||||||
|
= render partial: 'gestionnaires/breadcrumbs',
|
||||||
|
locals: { steps: [['Groupes gestionnaire', gestionnaire_groupe_gestionnaires_path],
|
||||||
|
["#{@groupe_gestionnaire.name.truncate_words(10)}", gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire)],
|
||||||
|
['Edit']] }
|
||||||
|
|
||||||
|
= render NestedForms::FormOwnerComponent.new
|
||||||
|
= form_for @groupe_gestionnaire,
|
||||||
|
url: url_for({ controller: 'gestionnaires/groupe_gestionnaires', action: :update, id: @groupe_gestionnaire.id }),
|
||||||
|
html: { class: 'form', multipart: true } do |f|
|
||||||
|
.fr-container
|
||||||
|
.fr-grid-row
|
||||||
|
.fr-col-12.fr-col-offset-md-2.fr-col-md-8
|
||||||
|
%h1.fr-h2 Description
|
||||||
|
|
||||||
|
= render Dsfr::InputComponent.new(form: f, attribute: :name, input_type: :text_field, opts: {})
|
||||||
|
|
||||||
|
.sticky-action-footer
|
||||||
|
.fr-container
|
||||||
|
.fr-grid-row
|
||||||
|
.fr-col-12.fr-col-offset-md-2.fr-col-md-8
|
||||||
|
= f.button 'Enregistrer', class: 'fr-btn fr-mr-2w'
|
||||||
|
= link_to 'Annuler', gestionnaire_groupe_gestionnaire_path(id: @groupe_gestionnaire), class: 'fr-btn fr-btn--secondary', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
|
|
@ -6,8 +6,15 @@
|
||||||
.fr-container.procedure-admin-container
|
.fr-container.procedure-admin-container
|
||||||
%ul.fr-btns-group.fr-btns-group--inline-sm.fr-btns-group--icon-left
|
%ul.fr-btns-group.fr-btns-group--inline-sm.fr-btns-group--icon-left
|
||||||
= link_to 'Modifier', edit_gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire), class: 'fr-btn fr-btn--primary fr-btn--icon-left fr-icon-success-line'
|
= link_to 'Modifier', edit_gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire), class: 'fr-btn fr-btn--primary fr-btn--icon-left fr-icon-success-line'
|
||||||
|
- if @groupe_gestionnaire.can_be_deleted?(current_gestionnaire)
|
||||||
|
= link_to gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire), class: "fr-btn fr-btn--tertiary fr-btn--icon-left fr-icon-delete-line", method: :delete, data: { confirm: "Voulez-vous vraiment supprimer ce groupe !" } do
|
||||||
|
= t('views.gestionnaires.groupe_gestionnaires.delete')
|
||||||
|
|
||||||
.fr-container
|
.fr-container
|
||||||
%h2= "Gestion du groupe gestionnaire № #{@groupe_gestionnaire.id}"
|
%h2= "Gestion du groupe gestionnaire № #{@groupe_gestionnaire.id}"
|
||||||
|
- if @groupe_gestionnaire.groupe_gestionnaire_id.present?
|
||||||
|
%p
|
||||||
|
groupe parent :
|
||||||
|
%a{ href: gestionnaire_groupe_gestionnaire_path(@groupe_gestionnaire.groupe_gestionnaire) }= @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
|
||||||
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire)
|
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire)
|
||||||
|
|
|
@ -349,6 +349,9 @@ fr:
|
||||||
form: "Sections du formulaire"
|
form: "Sections du formulaire"
|
||||||
edit_siret: "Modifier le SIRET"
|
edit_siret: "Modifier le SIRET"
|
||||||
edit_identity: "Modifier l’identité"
|
edit_identity: "Modifier l’identité"
|
||||||
|
gestionnaires:
|
||||||
|
groupe_gestionnaires:
|
||||||
|
delete: Supprimer
|
||||||
instructeurs:
|
instructeurs:
|
||||||
dossiers:
|
dossiers:
|
||||||
tab_steps:
|
tab_steps:
|
||||||
|
|
|
@ -5,8 +5,8 @@ fr:
|
||||||
gestionnaires: Gestionnaires
|
gestionnaires: Gestionnaires
|
||||||
models:
|
models:
|
||||||
groupe_gestionnaire:
|
groupe_gestionnaire:
|
||||||
one: Groupe d'administrateurs
|
one: Groupe Gestionnaire
|
||||||
other: Groupes d'administrateurs
|
other: Groupes Gestionnaire
|
||||||
errors:
|
errors:
|
||||||
duplicate_email:
|
duplicate_email:
|
||||||
one: "%{emails} est déjà gestionnaire de ce groupe"
|
one: "%{emails} est déjà gestionnaire de ce groupe"
|
||||||
|
|
|
@ -24,4 +24,88 @@ describe Gestionnaires::GroupeGestionnairesController, type: :controller do
|
||||||
it { expect(assigns(:groupe_gestionnaires)).not_to include(not_my_groupe_gestionnaire) }
|
it { expect(assigns(:groupe_gestionnaires)).not_to include(not_my_groupe_gestionnaire) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#show" do
|
||||||
|
subject { get :show, params: { id: child_groupe_gestionnaire.id } }
|
||||||
|
let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
|
||||||
|
let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(response).to have_http_status(:ok) }
|
||||||
|
it { expect(assigns(:groupe_gestionnaire)).to eq(child_groupe_gestionnaire) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#edit" do
|
||||||
|
subject { get :edit, params: { id: child_groupe_gestionnaire.id } }
|
||||||
|
let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
|
||||||
|
let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(response).to have_http_status(:ok) }
|
||||||
|
it { expect(assigns(:groupe_gestionnaire)).to eq(child_groupe_gestionnaire) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#update" do
|
||||||
|
subject { post :update, params: { id: child_groupe_gestionnaire.id, groupe_gestionnaire: { name: 'new child name' } } }
|
||||||
|
let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
|
||||||
|
let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(child_groupe_gestionnaire.reload.name).to eq('new child name') }
|
||||||
|
it { expect(response).to redirect_to(gestionnaire_groupe_gestionnaire_path(child_groupe_gestionnaire)) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#destroy" do
|
||||||
|
subject { post :destroy, params: { id: child_groupe_gestionnaire.id } }
|
||||||
|
let!(:groupe_gestionnaire_root) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
|
||||||
|
let!(:child_groupe_gestionnaire) { create(:groupe_gestionnaire, groupe_gestionnaire: groupe_gestionnaire_root, gestionnaires: [gestionnaire]) }
|
||||||
|
|
||||||
|
context "when not logged" do
|
||||||
|
before { subject }
|
||||||
|
it { expect(response).to redirect_to(new_user_session_path) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when logged in" do
|
||||||
|
before do
|
||||||
|
sign_in(gestionnaire.user)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(GroupeGestionnaire.all.count).to eq(1) }
|
||||||
|
it { expect(response).to redirect_to(gestionnaire_groupe_gestionnaires_path) }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue