2019-10-17 15:13:50 +02:00
|
|
|
|
module NewAdministrateur
|
|
|
|
|
class GroupeInstructeursController < AdministrateurController
|
|
|
|
|
ITEMS_PER_PAGE = 25
|
|
|
|
|
|
|
|
|
|
def index
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
|
2019-10-23 20:51:25 +02:00
|
|
|
|
@groupes_instructeurs = paginated_groupe_instructeurs
|
2019-10-17 15:13:50 +02:00
|
|
|
|
end
|
|
|
|
|
|
2019-10-23 20:22:56 +02:00
|
|
|
|
def show
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
@groupe_instructeur = groupe_instructeur
|
2019-10-23 20:54:59 +02:00
|
|
|
|
@instructeurs = paginated_instructeurs
|
2019-10-23 20:22:56 +02:00
|
|
|
|
end
|
|
|
|
|
|
2019-10-23 20:51:25 +02:00
|
|
|
|
def create
|
|
|
|
|
@groupe_instructeur = procedure
|
|
|
|
|
.groupe_instructeurs
|
|
|
|
|
.new(label: label, instructeurs: [current_administrateur.instructeur])
|
|
|
|
|
|
|
|
|
|
if @groupe_instructeur.save
|
|
|
|
|
redirect_to procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
|
|
|
|
notice: "Le groupe d’instructeurs « #{label} » a été créé."
|
|
|
|
|
else
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
@groupes_instructeurs = paginated_groupe_instructeurs
|
|
|
|
|
|
|
|
|
|
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
|
|
|
|
|
render :index
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-23 20:54:59 +02:00
|
|
|
|
def update
|
|
|
|
|
@groupe_instructeur = groupe_instructeur
|
|
|
|
|
|
|
|
|
|
if @groupe_instructeur.update(label: label)
|
|
|
|
|
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur),
|
|
|
|
|
notice: "Le nom est à présent « #{label} »."
|
|
|
|
|
else
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
@instructeurs = paginated_instructeurs
|
|
|
|
|
|
|
|
|
|
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
|
|
|
|
|
render :show
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-10 19:36:56 +02:00
|
|
|
|
def add_instructeur
|
2019-11-13 15:38:44 +01:00
|
|
|
|
@instructeur = Instructeur.by_email(instructeur_email) ||
|
2019-10-10 19:36:56 +02:00
|
|
|
|
create_instructeur(instructeur_email)
|
|
|
|
|
|
|
|
|
|
if groupe_instructeur.instructeurs.include?(@instructeur)
|
|
|
|
|
flash[:alert] = "L’instructeur « #{instructeur_email} » est déjà dans le groupe."
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
groupe_instructeur.instructeurs << @instructeur
|
|
|
|
|
flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe."
|
|
|
|
|
GroupeInstructeurMailer
|
|
|
|
|
.add_instructeur(groupe_instructeur, @instructeur, current_user.email)
|
|
|
|
|
.deliver_later
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-09 18:23:29 +02:00
|
|
|
|
def remove_instructeur
|
|
|
|
|
if groupe_instructeur.instructeurs.one?
|
|
|
|
|
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
@instructeur = Instructeur.find(instructeur_id)
|
|
|
|
|
groupe_instructeur.instructeurs.destroy(@instructeur)
|
|
|
|
|
flash[:notice] = "L’instructeur « #{@instructeur.email} » a été retiré du groupe."
|
|
|
|
|
GroupeInstructeurMailer
|
|
|
|
|
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email)
|
|
|
|
|
.deliver_later
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-17 10:57:58 +02:00
|
|
|
|
def update_routing_criteria_name
|
|
|
|
|
procedure.update!(routing_criteria_name: routing_criteria_name)
|
|
|
|
|
|
|
|
|
|
redirect_to procedure_groupe_instructeurs_path(procedure),
|
|
|
|
|
notice: "Le libellé est maintenant « #{procedure.routing_criteria_name} »."
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-17 15:13:50 +02:00
|
|
|
|
private
|
|
|
|
|
|
2019-10-10 19:36:56 +02:00
|
|
|
|
def create_instructeur(email)
|
|
|
|
|
user = User.create_or_promote_to_instructeur(
|
|
|
|
|
email,
|
|
|
|
|
SecureRandom.hex,
|
|
|
|
|
administrateurs: [current_administrateur]
|
|
|
|
|
)
|
|
|
|
|
user.invite!
|
|
|
|
|
user.instructeur
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-17 15:13:50 +02:00
|
|
|
|
def procedure
|
|
|
|
|
current_administrateur
|
|
|
|
|
.procedures
|
|
|
|
|
.includes(:groupe_instructeurs)
|
|
|
|
|
.find(params[:procedure_id])
|
|
|
|
|
end
|
2019-10-23 20:22:56 +02:00
|
|
|
|
|
|
|
|
|
def groupe_instructeur
|
|
|
|
|
procedure.groupe_instructeurs.find(params[:id])
|
|
|
|
|
end
|
2019-10-23 20:51:25 +02:00
|
|
|
|
|
2019-10-10 19:36:56 +02:00
|
|
|
|
def instructeur_email
|
|
|
|
|
params[:instructeur][:email].strip.downcase
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-09 18:23:29 +02:00
|
|
|
|
def instructeur_id
|
|
|
|
|
params[:instructeur][:id]
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-23 20:51:25 +02:00
|
|
|
|
def label
|
|
|
|
|
params[:groupe_instructeur][:label]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def paginated_groupe_instructeurs
|
|
|
|
|
procedure
|
|
|
|
|
.groupe_instructeurs
|
|
|
|
|
.page(params[:page])
|
|
|
|
|
.per(ITEMS_PER_PAGE)
|
|
|
|
|
.order(:label)
|
|
|
|
|
end
|
2019-10-23 20:54:59 +02:00
|
|
|
|
|
|
|
|
|
def paginated_instructeurs
|
|
|
|
|
groupe_instructeur
|
|
|
|
|
.instructeurs
|
|
|
|
|
.page(params[:page])
|
|
|
|
|
.per(ITEMS_PER_PAGE)
|
|
|
|
|
.order(:email)
|
|
|
|
|
end
|
2019-10-17 10:57:58 +02:00
|
|
|
|
|
|
|
|
|
def routing_criteria_name
|
|
|
|
|
params[:procedure][:routing_criteria_name]
|
|
|
|
|
end
|
2019-10-17 15:13:50 +02:00
|
|
|
|
end
|
|
|
|
|
end
|