class Admin::GestionnairesController < AdminController include SmartListing::Helper::ControllerExtensions helper SmartListing::Helper def index # FIXME: remove when # https://github.com/Sology/smart_listing/issues/134 # is fixed permit_smart_listing_params # END OF FIXME @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? new_gestionnaire! 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 new_gestionnaire! attributes = params.require(:gestionnaire).permit(:email) .merge(password: SecureRandom.hex(5)) @gestionnaire = Gestionnaire.create( attributes.merge( administrateurs: [current_administrateur] ) ) if @gestionnaire.errors.messages.empty? if User.exists?(email: @gestionnaire.email) GestionnaireMailer.user_to_gestionnaire(@gestionnaire.email).deliver_now! else User.create(attributes) GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_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