self::getFormData(), 'model' => self::getModelData(), ]; } public static function store($request) { self::validate($request); $gestor = null; DB::transaction(function () use ($request, &$gestor) { $gestor = Gestor::create($request->all())->fresh(); $gestor->papeis()->sync($request['papeis']); $gestor->permissoes()->sync($request['permissoes']); }); return $gestor; } public static function show($id) { return Gestor::find($id); } public static function edit($id) { return [ 'form' => self::getFormData(), 'model' => self::getModelData($id), ]; } public static function update($request, $id) { self::validate($request); DB::transaction(function () use ($request, $id) { $gestor = self::show($id); $gestor->update($request->all()); $gestor->papeis()->sync($request['papeis']); $gestor->permissoes()->sync($request['permissoes']); }); return true; } public static function destroy($id) { return self::show($id)->delete(); } public static function datatable() { return DB::table('administracao_gestor') ->select([ 'administracao_gestor.id', 'cadastro_cidadao.nome', ]) ->join('cadastro_usuario', 'cadastro_usuario.id', 'administracao_gestor.usuario_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id'); } private static function validate($request) { return $request->validate([ 'usuario_id' => [ 'required', 'integer', Rule::unique('administracao_gestor')->ignore($request->gestor), ], ]); } private function getFormData() { return [ 'papeis' => DB::table('administracao_papel') ->select(['id', 'nome']) ->orderBy('nome') ->whereNull('deleted_at') ->get(), 'modulos' => DB::table('administracao_modulo') ->select([ 'id', 'nome', ]) ->orderBy('nome') ->get() ->map(function ($modulo) { return [ 'id' => $modulo->id, 'nome' => $modulo->nome, 'funcionalidades' => DB::table('administracao_funcionalidade') ->select([ 'id', 'nome', ]) ->where('modulo_id', $modulo->id) ->orderBy('nome') ->get() ->map(function ($funcionalidade) { return [ 'id' => $funcionalidade->id, 'nome' => $funcionalidade->nome, 'permissoes' => DB::table('administracao_permissao') ->select([ 'administracao_permissao.id', 'administracao_crud_acao.nome', ]) ->join('administracao_crud_acao', 'administracao_crud_acao.id', 'administracao_permissao.crud_acao_id') ->where('funcionalidade_id', $funcionalidade->id) ->get() ->map(fn ($permissao) => [ 'id' => $permissao->id, 'nome' => $permissao->nome, ]), ]; }), ]; }), ]; } private static function getModelData($id = null) { $gestor = self::show($id); if (is_null($gestor)) { return [ 'usuario' => null, 'papeis' => [], 'permissoes' => [], ]; } else { return [ 'usuario' => [ 'id' => $gestor->usuario->id, 'cidadao_nome' => $gestor->usuario->cidadao->nome, ], 'papeis' => $gestor->papeis->pluck('id') ?? [], 'permissoes' => $gestor->permissoes->pluck('id') ?? [], ]; } } }