module Instructeurs class GroupeInstructeursController < InstructeurController ITEMS_PER_PAGE = 25 def index @procedure = procedure @groupes_instructeurs = paginated_groupe_instructeurs end def show @procedure = procedure @groupe_instructeur = groupe_instructeur @instructeurs = paginated_instructeurs end def add_instructeur instructeur = Instructeur.by_email(instructeur_email) || 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.add(instructeur) flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe." GroupeInstructeurMailer .notify_added_instructeurs(groupe_instructeur, [instructeur], current_user.email) .deliver_later end redirect_to instructeur_groupe_path(procedure, groupe_instructeur) end 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) if groupe_instructeur.remove(instructeur) flash[:notice] = "L’instructeur « #{instructeur.email} » a été retiré du groupe." GroupeInstructeurMailer .notify_removed_instructeur(groupe_instructeur, instructeur, current_user.email) .deliver_later GroupeInstructeurMailer .notify_group_when_instructeurs_removed(groupe_instructeur, [instructeur], current_user.email) .deliver_later else flash[:alert] = "L’instructeur « #{instructeur.email} » n’est pas dans le groupe." end end redirect_to instructeur_groupe_path(procedure, groupe_instructeur) end private def create_instructeur(email) user = User.create_or_promote_to_instructeur( email, SecureRandom.hex, administrateurs: [procedure.administrateurs.first] ) user.invite! user.instructeur end def procedure current_instructeur .procedures .includes(:groupe_instructeurs) .find(params[:procedure_id]) end def groupe_instructeur current_instructeur.groupe_instructeurs.find(params[:id]) end def paginated_groupe_instructeurs current_instructeur .groupe_instructeurs .where(procedure: procedure) .page(params[:page]) .per(ITEMS_PER_PAGE) end def paginated_instructeurs groupe_instructeur .instructeurs .page(params[:page]) .per(ITEMS_PER_PAGE) .order(:email) end def instructeur_email params[:instructeur][:email].strip.downcase end def instructeur_id params[:instructeur][:id] end end end