diff --git a/app/controllers/manager/procedures_controller.rb b/app/controllers/manager/procedures_controller.rb index 836bfb522..62ce0a75b 100644 --- a/app/controllers/manager/procedures_controller.rb +++ b/app/controllers/manager/procedures_controller.rb @@ -46,23 +46,39 @@ module Manager send_data(emails.join("\n"), :filename => "brouillons-#{procedure.id}-au-#{date}.csv") end - def add_administrateur - add_self = params[:email].blank? - administrateur_email = add_self ? current_super_admin.email : params[:email] - administrateur = Administrateur.by_email(administrateur_email) - if administrateur - AdministrateursProcedure.create(procedure: procedure, administrateur: administrateur, manager: add_self) - if add_self - flash[:notice] = "L’administrateur \"#{administrateur_email}\" est ajouté à la démarche pour la journée." - else - flash[:notice] = "L’administrateur \"#{administrateur_email}\" est ajouté à la démarche." + def add_administrateur_and_instructeur + administrateur = Administrateur.by_email(current_super_admin.email) + instructeur = Instructeur.by_email(current_super_admin.email) + if administrateur && instructeur + ActiveRecord::Base.transaction do + AdministrateursProcedure.create!(procedure: procedure, administrateur: administrateur, manager: true) + procedure.groupe_instructeurs.map do |groupe_instructeur| + instructeur.assign_to.create(groupe_instructeur: groupe_instructeur, manager: true) + end end + + flash[:notice] = "L’administrateur \"#{administrateur.email}\" a été ajoutés à la démarche. instructeur \"#{instructeur.email}\" a été ajouté aux #{procedure.groupe_instructeurs.count} groupe(s) d'instructeur" else - if add_self - flash[:alert] = "Vous n’êtes pas connecté en tant qu’administrateur." - else - flash[:alert] = "L’administrateur \"#{administrateur_email}\" est introuvable." - end + flash[:alert] = "L’administrateur \"#{administrateur.email}\" est introuvable." + end + redirect_to manager_procedure_path(procedure) + end + + def add_administrateur_with_confirmation + confirmation_url = confirm_add_administrateur_manager_procedure_url(id: procedure.id, email: current_super_admin.email) + + flash[:notice] = "Veuillez partager ce lien : #{confirmation_url} avec un autre super admin pour que l'operation soit effectuée" + redirect_to manager_procedure_path(procedure) + end + + def confirm_add_administrateur + administrateur_email = params[:email] + if administrateur_email != current_super_admin.email + administrateur = Administrateur.by_email(params[:email]) + AdministrateursProcedure.create!(procedure: procedure, administrateur: administrateur) + flash[:notice] = "L’administrateur \"#{administrateur.email}\" a été ajoutés à la démarche." + else + flash[:alert] = "Veuillez partager ce lien avec un autre super administrateur pour qu'il confirme votre action" end redirect_to manager_procedure_path(procedure) end diff --git a/app/models/administrateur.rb b/app/models/administrateur.rb index d6bbbe258..20e816449 100644 --- a/app/models/administrateur.rb +++ b/app/models/administrateur.rb @@ -15,7 +15,8 @@ class Administrateur < ApplicationRecord UNUSED_ADMIN_THRESHOLD = 6.months has_and_belongs_to_many :instructeurs - has_and_belongs_to_many :procedures + has_many :administrateurs_procedures, dependent: :destroy + has_many :procedures, through: :administrateurs_procedures has_many :services belongs_to :user diff --git a/app/views/manager/procedures/show.html.erb b/app/views/manager/procedures/show.html.erb index 06c550bdb..4ff2a19bf 100644 --- a/app/views/manager/procedures/show.html.erb +++ b/app/views/manager/procedures/show.html.erb @@ -64,17 +64,19 @@ as well as a link to its edit page.
<%= render_field attribute, page: page %> <% if attribute.name == 'administrateurs' %> - <%= form_tag(add_administrateur_manager_procedure_path(procedure), style: 'margin-top: 1rem;') do %> + <%= form_tag(add_administrateur_with_confirmation_manager_procedure_path(procedure), style: 'margin-top: 1rem;') do %> <%= email_field_tag(:email, '', placeholder: 'Email', autocapitalize: 'off', autocorrect: 'off', spellcheck: 'false', style: 'margin-bottom: 1rem;width:24rem;') %> - + +

J'utilise cette option ETQ support quand un usager a besoin de devenir administrateur sur une démarche

<% end %> <% if procedure.administrateurs.find { |admin| admin.email == current_super_admin.email } %>

Vous êtes déjà administrateur sur cette démarche

<%= link_to 'Me retirer de cette démarche', delete_administrateur_manager_procedure_path(procedure), method: :put, class: 'button' %> - <% else %> - <%= form_tag(add_administrateur_manager_procedure_path(procedure), style: 'margin-top: 1rem;') do %> - + <%= form_tag(add_administrateur_and_instructeur_manager_procedure_path(procedure), style: 'margin-top: 1rem;') do %> + +

J'utilise cette option ETQ support/dev afin d'aller sur investiguer quelque chose sur démarche

+ <% end %> <% end %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 6184da693..5a8d95ee4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,8 +15,10 @@ Rails.application.routes.draw do post 'draft', on: :member post 'discard', on: :member post 'restore', on: :member - post 'add_administrateur', on: :member put 'delete_administrateur', on: :member + post 'add_administrateur_and_instructeur', on: :member + post 'add_administrateur_with_confirmation', on: :member + get 'confirm_add_administrateur', on: :member post 'change_piece_justificative_template', on: :member get 'export_mail_brouillons', on: :member end