Add multi-admin UI

refs #1626
This commit is contained in:
Nicolas Bouilleaud 2019-04-12 10:43:51 +02:00
parent 07d43d8c2e
commit 3ff0c83485
6 changed files with 98 additions and 0 deletions

View file

@ -0,0 +1,47 @@
module NewAdministrateur
class ProcedureAdministrateursController < AdministrateurController
before_action :retrieve_procedure
before_action :procedure_locked?
def index
end
def create
email = params.require(:administrateur)[:email]&.strip&.downcase
# Find the admin
administrateur = Administrateur.find_by(email: email)
if administrateur.nil?
flash.alert = "Ladministrateur « #{email} » nexiste pas. Invitez-le à demander un compte administrateur à laddresse <a href=#{new_demande_url}>#{new_demande_url}</a>."
return
end
# Prevent duplicates (also enforced in the database in administrateurs_procedures)
if @procedure.administrateurs.include?(administrateur)
flash.alert = "Ladministrateur « #{administrateur.email} » est déjà administrateur de « #{@procedure.libelle} »."
return
end
# Actually add the admin
@procedure.administrateurs << administrateur
@administrateur = administrateur
flash.notice = "Ladministrateur « #{administrateur.email} » a été ajouté à la démarche « #{@procedure.libelle} »."
end
def destroy
administrateur = @procedure.administrateurs.find(params[:id])
# Prevent self-removal (Also enforced in the UI)
if administrateur == current_administrateur
flash.error = "Vous ne pouvez pas vous retirez vous-même dune procédure."
end
# Actually remove the admin
@procedure.administrateurs.delete(administrateur)
@administrateur = administrateur
flash.notice = "Ladministrateur \« #{administrateur.email} » a été retiré de la démarche « #{@procedure.libelle} »."
rescue ActiveRecord::ActiveRecordError => e
flash.alert = e.message
end
end
end

View file

@ -0,0 +1,13 @@
%tr{ id: "procedure-#{@procedure.id}-administrateur-#{administrateur.id}" }
%td= administrateur.email
%td= administrateur.created_at.strftime('%d/%m/%Y %H:%M')
%td= administrateur.registration_state
%td
- if administrateur == current_administrateur
Cest vous !
- else
= link_to 'Retirer',
[@procedure, administrateur],
method: :delete,
'data-confirm': "Retirer « #{administrateur.email} » des administrateurs de « #{@procedure.libelle} » ?",
remote: true

View file

@ -0,0 +1,6 @@
= render_flash(sticky: true)
- if @administrateur
= append_to_element("#procedure-#{@procedure.id}-administrateurs",
partial: 'administrateur',
locals: { administrateur: @administrateur })
document.getElementById('procedure-#{@procedure.id}-new_administrateur').reset()

View file

@ -0,0 +1,4 @@
= render_flash(sticky: true)
- if @administrateur
= remove_element("#procedure-#{@procedure.id}-administrateur-#{@administrateur.id}")

View file

@ -0,0 +1,26 @@
= render partial: 'new_administrateur/breadcrumbs',
locals: { steps: [link_to('Démarches', admin_procedures_path),
link_to(@procedure.libelle, admin_procedure_path(@procedure)),
'Administrateurs'], preview: false }
.container
%h1 Administrateurs de « #{@procedure.libelle} »
%table.table
%thead
%th= 'Adresse email'
%th= 'Enregistré le'
%th= 'État'
%tbody{ id: "procedure-#{@procedure.id}-administrateurs" }
= render partial: 'administrateur', collection: @procedure.administrateurs.order(:email)
%tfoot
%tr
%th{ colspan: 4 }
= form_for @procedure.administrateurs.new,
url: { controller: 'procedure_administrateurs' },
html: { class: 'form', id: "procedure-#{@procedure.id}-new_administrateur" } ,
remote: true do |f|
= f.label :email do
Ajouter un administrateur
%span.notice= "Renseigner lemail dun administrateur déjà enregistré sur demarches-simplifiees.fr pour lui permettre de modifier « #{@procedure.libelle} »."
= f.email_field :email, placeholder: 'marie.dupont@exemple.fr', required: true
= f.submit 'Ajouter', class: 'button send'

View file

@ -374,6 +374,8 @@ Rails.application.routes.draw do
get 'annotations' get 'annotations'
end end
resources :administrateurs, controller: 'procedure_administrateurs', only: [:index, :create, :destroy]
resources :types_de_champ, only: [:create, :update, :destroy] do resources :types_de_champ, only: [:create, :update, :destroy] do
member do member do
patch :move patch :move