class Admin::GestionnairesController < AdminController include SmartListing::Helper::ControllerExtensions helper SmartListing::Helper def index @gestionnaires = smart_listing_create :gestionnaires, current_administrateur.gestionnaires, partial: "admin/gestionnaires/list", array: true @gestionnaire ||= Gestionnaire.new end def create email = params[:gestionnaire][:email].downcase @gestionnaire = Gestionnaire.find_by(email: email) procedure_id = params[:procedure_id] if @gestionnaire.nil? invite_gestionnaire(params[:gestionnaire][:email]) else assign_gestionnaire! end if procedure_id.present? redirect_to admin_procedure_accompagnateurs_path(procedure_id: procedure_id) else redirect_to admin_gestionnaires_path end end def destroy Gestionnaire.find(params[:id]).administrateurs.delete current_administrateur redirect_to admin_gestionnaires_path end private def invite_gestionnaire(email) password = SecureRandom.hex @gestionnaire = Gestionnaire.create( email: email, password: password, password_confirmation: password, administrateurs: [current_administrateur] ) if @gestionnaire.errors.messages.empty? @gestionnaire.invite! if User.exists?(email: @gestionnaire.email) GestionnaireMailer.user_to_gestionnaire(@gestionnaire.email).deliver_later else User.create(email: email, password: password, confirmed_at: DateTime.now) end flash.notice = 'Accompagnateur ajouté' else flash.alert = @gestionnaire.errors.full_messages end end def assign_gestionnaire! if current_administrateur.gestionnaires.include? @gestionnaire flash.alert = 'Accompagnateur déjà ajouté' else @gestionnaire.administrateurs.push current_administrateur flash.notice = 'Accompagnateur ajouté' # TODO Mailer no assign_to end end end