feat: US5.1 US5.2 administrateur in admin
This commit is contained in:
parent
91602ee1c1
commit
c253e7dd65
24 changed files with 218 additions and 42 deletions
|
@ -1,5 +1,6 @@
|
|||
class GroupeGestionnaire::Card::AdministrateursComponent < ApplicationComponent
|
||||
def initialize(groupe_gestionnaire:)
|
||||
def initialize(groupe_gestionnaire:, path:)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@path = path
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.fr-col-6.fr-col-md-4.fr-col-lg-3
|
||||
= link_to gestionnaire_groupe_gestionnaire_administrateurs_path(@groupe_gestionnaire), id: 'administrateurs', class: 'fr-tile fr-enlarge-link' do
|
||||
= link_to @path, id: 'administrateurs', class: 'fr-tile fr-enlarge-link' do
|
||||
.fr-tile__body.flex.column.align-center.justify-between
|
||||
%p.fr-badge.fr-badge--success Validé
|
||||
%div
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class GroupeGestionnaire::Card::ChildrenComponent < ApplicationComponent
|
||||
def initialize(groupe_gestionnaire:)
|
||||
def initialize(groupe_gestionnaire:, path:)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@path = path
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.fr-col-6.fr-col-md-4.fr-col-lg-3
|
||||
= link_to gestionnaire_groupe_gestionnaire_children_path(@groupe_gestionnaire), id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
|
||||
= link_to @path, id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
|
||||
.fr-tile__body.flex.column.align-center.justify-between
|
||||
%p.fr-badge.fr-badge--success Validé
|
||||
%div
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
class GroupeGestionnaire::Card::GestionnairesComponent < ApplicationComponent
|
||||
def initialize(groupe_gestionnaire:)
|
||||
def initialize(groupe_gestionnaire:, path:)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@path = path
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.fr-col-6.fr-col-md-4.fr-col-lg-3
|
||||
= link_to gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire), id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
|
||||
= link_to @path, id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
|
||||
.fr-tile__body.flex.column.align-center.justify-between
|
||||
%p.fr-badge.fr-badge--success Validé
|
||||
%div
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
class GroupeGestionnaire::GroupeGestionnaireAdministrateurs::AdministrateurComponent < ApplicationComponent
|
||||
include ApplicationHelper
|
||||
|
||||
def initialize(groupe_gestionnaire:, administrateur:)
|
||||
def initialize(groupe_gestionnaire:, administrateur:, is_gestionnaire: true)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@administrateur = administrateur
|
||||
@is_gestionnaire = is_gestionnaire
|
||||
end
|
||||
|
||||
def email
|
||||
|
@ -23,7 +24,7 @@ class GroupeGestionnaire::GroupeGestionnaireAdministrateurs::AdministrateurCompo
|
|||
end
|
||||
|
||||
def remove_button
|
||||
if is_there_at_least_another_active_admin?
|
||||
if is_there_at_least_another_active_admin? && @is_gestionnaire
|
||||
button_to 'Retirer',
|
||||
remove_gestionnaire_groupe_gestionnaire_administrateur_path(@groupe_gestionnaire, @administrateur),
|
||||
method: :delete,
|
||||
|
|
|
@ -2,5 +2,6 @@
|
|||
%td= email
|
||||
%td= created_at
|
||||
%td= registration_state
|
||||
- if @is_gestionnaire
|
||||
%td= remove_button
|
||||
%td= destroy_button
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
class GroupeGestionnaire::GroupeGestionnaireGestionnaires::GestionnaireComponent < ApplicationComponent
|
||||
include ApplicationHelper
|
||||
|
||||
def initialize(groupe_gestionnaire:, gestionnaire:)
|
||||
def initialize(groupe_gestionnaire:, gestionnaire:, is_gestionnaire: true)
|
||||
@groupe_gestionnaire = groupe_gestionnaire
|
||||
@gestionnaire = gestionnaire
|
||||
@is_gestionnaire = is_gestionnaire
|
||||
end
|
||||
|
||||
def email
|
||||
|
@ -23,7 +24,7 @@ class GroupeGestionnaire::GroupeGestionnaireGestionnaires::GestionnaireComponent
|
|||
end
|
||||
|
||||
def remove_button
|
||||
if is_there_at_least_another_active_admin?
|
||||
if is_there_at_least_another_active_admin? && @is_gestionnaire
|
||||
button_to 'Retirer',
|
||||
gestionnaire_groupe_gestionnaire_gestionnaire_path(@groupe_gestionnaire, @gestionnaire),
|
||||
method: :delete,
|
||||
|
|
|
@ -2,4 +2,5 @@
|
|||
%td= email
|
||||
%td= created_at
|
||||
%td= registration_state
|
||||
- if @is_gestionnaire
|
||||
%td= remove_button
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
module Administrateurs
|
||||
class GroupeGestionnaireController < AdministrateurController
|
||||
before_action :retrieve_groupe_gestionnaire, only: [:show, :administrateurs, :gestionnaires]
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def administrateurs
|
||||
end
|
||||
|
||||
def gestionnaires
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def retrieve_groupe_gestionnaire
|
||||
id = current_administrateur.groupe_gestionnaire_id
|
||||
@groupe_gestionnaire = GroupeGestionnaire.find(id)
|
||||
|
||||
Sentry.configure_scope do |scope|
|
||||
scope.set_tags(groupe_gestionnaire: @groupe_gestionnaire.id)
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
flash.alert = 'Groupe inexistant'
|
||||
redirect_to admin_procedures_path, status: 404
|
||||
end
|
||||
end
|
||||
end
|
|
@ -13,7 +13,8 @@ class GroupeGestionnaireDashboard < Administrate::BaseDashboard
|
|||
created_at: Field::DateTime,
|
||||
updated_at: Field::DateTime,
|
||||
gestionnaires: Field::HasMany,
|
||||
administrateurs: Field::HasMany
|
||||
administrateurs: Field::HasMany,
|
||||
parent_name: Field::String
|
||||
}.freeze
|
||||
|
||||
# COLLECTION_ATTRIBUTES
|
||||
|
@ -26,7 +27,8 @@ class GroupeGestionnaireDashboard < Administrate::BaseDashboard
|
|||
:created_at,
|
||||
:name,
|
||||
:gestionnaires,
|
||||
:administrateurs
|
||||
:administrateurs,
|
||||
:parent_name
|
||||
].freeze
|
||||
|
||||
# SHOW_PAGE_ATTRIBUTES
|
||||
|
@ -35,7 +37,8 @@ class GroupeGestionnaireDashboard < Administrate::BaseDashboard
|
|||
:gestionnaires,
|
||||
:administrateurs,
|
||||
:id,
|
||||
:created_at
|
||||
:created_at,
|
||||
:parent_name
|
||||
].freeze
|
||||
|
||||
# FORM_ATTRIBUTES
|
||||
|
|
|
@ -21,4 +21,8 @@ class GroupeGestionnaire < ApplicationRecord
|
|||
def can_be_deleted?(current_user)
|
||||
(gestionnaires.empty? || (gestionnaires == [current_user])) && administrateurs.empty? && children.empty?
|
||||
end
|
||||
|
||||
def parent_name
|
||||
parent&.name
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
= render partial: 'gestionnaires/breadcrumbs',
|
||||
locals: { steps: [['Mon groupe gestionnaire', admin_groupe_gestionnaire_path],
|
||||
['Administrateurs']], preview: false }
|
||||
|
||||
.container
|
||||
%h1 Administrateurs de « #{@groupe_gestionnaire.name} »
|
||||
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= 'Adresse email'
|
||||
%th= 'Enregistré le'
|
||||
%th= 'État'
|
||||
%tbody#administrateurs
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireAdministrateurs::AdministrateurComponent.with_collection(@groupe_gestionnaire.administrateurs.order('users.email'), groupe_gestionnaire: @groupe_gestionnaire, is_gestionnaire: false))
|
|
@ -0,0 +1,18 @@
|
|||
= render partial: 'gestionnaires/breadcrumbs',
|
||||
locals: { steps: [['Mon groupe gestionnaire', admin_groupe_gestionnaire_path],
|
||||
['Gestionnaires']], preview: false }
|
||||
|
||||
.container
|
||||
%h1 Gestionnaires de « #{@groupe_gestionnaire.name} »
|
||||
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= 'Adresse email'
|
||||
%th= 'Enregistré le'
|
||||
%th= 'État'
|
||||
%tbody#gestionnaires
|
||||
= render(GroupeGestionnaire::GroupeGestionnaireGestionnaires::GestionnaireComponent.with_collection(@groupe_gestionnaire.gestionnaires.order('users.email'), groupe_gestionnaire: @groupe_gestionnaire, is_gestionnaire: false))
|
||||
|
||||
.fr-mt-4w
|
||||
= #render 'add_admin_form', groupe_gestionnaire: @groupe_gestionnaire
|
|
@ -0,0 +1,9 @@
|
|||
= render partial: 'gestionnaires/breadcrumbs',
|
||||
locals: { steps: [["Mon groupe gestionnaire"]],
|
||||
metadatas: true }
|
||||
|
||||
.fr-container
|
||||
%h2= "Gestion du groupe gestionnaire № #{@groupe_gestionnaire.id}"
|
||||
.fr-grid-row.fr-grid-row--gutters.fr-mb-5w
|
||||
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: admin_groupe_gestionnaire_gestionnaires_path)
|
||||
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire, path: admin_groupe_gestionnaire_administrateurs_path)
|
|
@ -0,0 +1,8 @@
|
|||
.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
|
|
@ -19,6 +19,6 @@
|
|||
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
|
||||
= render GroupeGestionnaire::Card::GestionnairesComponent.new(groupe_gestionnaire: @groupe_gestionnaire)
|
||||
= render GroupeGestionnaire::Card::AdministrateursComponent.new(groupe_gestionnaire: @groupe_gestionnaire)
|
||||
= render GroupeGestionnaire::Card::ChildrenComponent.new(groupe_gestionnaire: @groupe_gestionnaire)
|
||||
= 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))
|
||||
|
|
|
@ -650,6 +650,10 @@ Rails.application.routes.draw do
|
|||
resource :sva_svr, only: [:show, :edit, :update], controller: 'sva_svr'
|
||||
end
|
||||
|
||||
get 'mon-groupe' => 'groupe_gestionnaire#show', as: :groupe_gestionnaire
|
||||
get 'mon-groupe/administrateurs' => 'groupe_gestionnaire#administrateurs', as: :groupe_gestionnaire_administrateurs
|
||||
get 'mon-groupe/gestionnaires' => 'groupe_gestionnaire#gestionnaires', as: :groupe_gestionnaire_gestionnaires
|
||||
|
||||
resources :services, except: [:show] do
|
||||
collection do
|
||||
patch 'add_to_procedure'
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
describe Administrateurs::GroupeGestionnaireController, type: :controller do
|
||||
let(:admin) { create(:administrateur) }
|
||||
|
||||
describe "#show" do
|
||||
subject { get :show }
|
||||
|
||||
context "when not logged" do
|
||||
before { subject }
|
||||
it { expect(response).to redirect_to(new_user_session_path) }
|
||||
end
|
||||
|
||||
context "when logged in" do
|
||||
let(:gestionnaire) { create(:gestionnaire) }
|
||||
let!(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [admin]) }
|
||||
before do
|
||||
sign_in(admin.user)
|
||||
subject
|
||||
end
|
||||
|
||||
it { expect(response).to have_http_status(:ok) }
|
||||
it { expect(assigns(:groupe_gestionnaire)).to eq(groupe_gestionnaire) }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#gestionnaires" do
|
||||
subject { get :gestionnaires }
|
||||
let(:gestionnaire) { create(:gestionnaire) }
|
||||
let!(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [admin]) }
|
||||
|
||||
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(admin.user)
|
||||
subject
|
||||
end
|
||||
|
||||
it { expect(response).to have_http_status(:ok) }
|
||||
it { expect(assigns(:groupe_gestionnaire)).to eq(groupe_gestionnaire) }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#administrateurs" do
|
||||
subject { get :administrateurs }
|
||||
let(:gestionnaire) { create(:gestionnaire) }
|
||||
let!(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire], administrateurs: [admin]) }
|
||||
|
||||
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(admin.user)
|
||||
subject
|
||||
end
|
||||
|
||||
it { expect(response).to have_http_status(:ok) }
|
||||
it { expect(assigns(:groupe_gestionnaire)).to eq(groupe_gestionnaire) }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -18,9 +18,11 @@ describe Gestionnaires::GroupeGestionnaireChildrenController, type: :controller
|
|||
subject
|
||||
end
|
||||
|
||||
it { expect(response).to have_http_status(:ok) }
|
||||
it { expect(assigns(:groupe_gestionnaire).children).to include(child_groupe_gestionnaire) }
|
||||
it { expect(response.body).to include(child_groupe_gestionnaire.name) }
|
||||
it do
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(assigns(:groupe_gestionnaire).children).to include(child_groupe_gestionnaire)
|
||||
expect(response.body).to include(child_groupe_gestionnaire.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -42,9 +42,11 @@ describe Gestionnaires::GroupeGestionnaireGestionnairesController, type: :contro
|
|||
context 'when there are many gestionnaires' do
|
||||
before { remove_gestionnaire(new_gestionnaire) }
|
||||
|
||||
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
|
||||
it { expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1) }
|
||||
it { expect(flash.notice).to eq("Le gestionnaire « #{new_gestionnaire.email} » a été retiré du groupe gestionnaire.") }
|
||||
it do
|
||||
expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire)
|
||||
expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1)
|
||||
expect(flash.notice).to eq("Le gestionnaire « #{new_gestionnaire.email} » a été retiré du groupe gestionnaire.")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there is only one gestionnaire' do
|
||||
|
@ -53,9 +55,11 @@ describe Gestionnaires::GroupeGestionnaireGestionnairesController, type: :contro
|
|||
remove_gestionnaire(gestionnaire)
|
||||
end
|
||||
|
||||
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
|
||||
it { expect(groupe_gestionnaire.gestionnaires.count).to eq(1) }
|
||||
it { expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine') }
|
||||
it do
|
||||
expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire)
|
||||
expect(groupe_gestionnaire.gestionnaires.count).to eq(1)
|
||||
expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,10 +18,12 @@ describe Gestionnaires::GroupeGestionnairesController, type: :controller do
|
|||
subject
|
||||
end
|
||||
|
||||
it { expect(response).to have_http_status(:ok) }
|
||||
it { expect(assigns(:groupe_gestionnaires)).to include(groupe_gestionnaire) }
|
||||
it { expect(assigns(:groupe_gestionnaires)).to include(other_groupe_gestionnaire) }
|
||||
it { expect(assigns(:groupe_gestionnaires)).not_to include(not_my_groupe_gestionnaire) }
|
||||
it do
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(assigns(:groupe_gestionnaires)).to include(groupe_gestionnaire)
|
||||
expect(assigns(:groupe_gestionnaires)).to include(other_groupe_gestionnaire)
|
||||
expect(assigns(:groupe_gestionnaires)).not_to include(not_my_groupe_gestionnaire)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -37,9 +37,11 @@ describe Manager::GroupeGestionnairesController, type: :controller do
|
|||
context 'of a new gestionnaire' do
|
||||
let(:new_gestionnaire_email) { 'new_gestionnaire@mail.com' }
|
||||
|
||||
it { expect(groupe_gestionnaire.gestionnaires.map(&:email)).to include(new_gestionnaire_email) }
|
||||
it { expect(flash.notice).to be_present }
|
||||
it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
|
||||
it do
|
||||
expect(groupe_gestionnaire.gestionnaires.map(&:email)).to include(new_gestionnaire_email)
|
||||
expect(flash.notice).to be_present
|
||||
expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -62,9 +64,11 @@ describe Manager::GroupeGestionnairesController, type: :controller do
|
|||
context 'when there are many gestionnaires' do
|
||||
before { remove_gestionnaire(new_gestionnaire) }
|
||||
|
||||
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
|
||||
it { expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1) }
|
||||
it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
|
||||
it do
|
||||
expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire)
|
||||
expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1)
|
||||
expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there is only one gestionnaire' do
|
||||
|
@ -73,10 +77,12 @@ describe Manager::GroupeGestionnairesController, type: :controller do
|
|||
remove_gestionnaire(gestionnaire)
|
||||
end
|
||||
|
||||
it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
|
||||
it { expect(groupe_gestionnaire.gestionnaires.count).to eq(1) }
|
||||
it { expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine') }
|
||||
it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
|
||||
it do
|
||||
expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire)
|
||||
expect(groupe_gestionnaire.gestionnaires.count).to eq(1)
|
||||
expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine')
|
||||
expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue