class Admin::InstructeursController < AdminController include SmartListing::Helper::ControllerExtensions helper SmartListing::Helper def index @instructeurs = smart_listing_create :instructeurs, current_administrateur.instructeurs, partial: "admin/instructeurs/list", array: true @instructeur ||= Instructeur.new end def create email = params[:instructeur][:email].downcase @instructeur = Instructeur.find_by(email: email) procedure_id = params[:procedure_id] if @instructeur.nil? invite_instructeur(params[:instructeur][:email]) else assign_instructeur! end if procedure_id.present? redirect_to admin_procedure_assigns_path(procedure_id: procedure_id) else redirect_to admin_instructeurs_path end end def destroy Instructeur.find(params[:id]).administrateurs.delete current_administrateur redirect_to admin_instructeurs_path end private def invite_instructeur(email) user = User.find_by(email: email) if user.nil? user = User.create( email: email, password: SecureRandom.hex, confirmed_at: Time.zone.now ) end if user.errors.empty? @instructeur = Instructeur.create(email: email, administrateurs: [current_administrateur]) user.update!(instructeur: @instructeur) user.invite! flash.notice = 'Instructeur ajouté' else flash.alert = user.errors.full_messages end end def assign_instructeur! if current_administrateur.instructeurs.include?(@instructeur) flash.alert = 'Instructeur déjà ajouté' else @instructeur.administrateurs.push current_administrateur flash.notice = 'Instructeur ajouté' # TODO Mailer no assign_to end end end