File manager - Edit - /var/www/html/portal/app/Http/Controllers/ServicosController.php
Back
<?php namespace App\Http\Controllers; use App\Http\Services\Escolas\EscolaService; use App\Models\{ Centro, Unidade, Conselho, Parque, }; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Throwable; class ServicosController extends Controller { public function index(Request $request) { $categorias = $this->getCategorias(); $categoriaPorId = $categorias->keyBy('id_tipo'); $tipoId = $request->integer('t'); $pesquisa = trim((string) $request->query('pq', '')); $servicos = null; if ($tipoId > 0 || $pesquisa !== '') { $servicos = $this->getServicos($tipoId > 0 ? $tipoId : null, $pesquisa); $servicos->getCollection()->transform(function ($servico) use ($categoriaPorId) { $servico->tipo_ids = $this->parseTipoIds((string) ($servico->cds_tipo ?? '')); $servico->categorias = collect($servico->tipo_ids) ->map(fn ($tipo) => $categoriaPorId->get($tipo)) ->filter() ->values(); $servico->tem_solicitacao_online = ! empty($servico->cds_solicitacao); return $servico; }); } return view("servicos.index", [ "categorias" => $categorias, "servicos" => $servicos, "filtroTipo" => $tipoId > 0 ? $tipoId : null, "filtroPesquisa" => $pesquisa, ]); } public function show(int $id) { $servico = null; foreach ($this->getTabelaCartasCandidatas() as $tabela) { try { $servico = DB::table($tabela) ->where('id_cds', $id) ->where('cds_status', '3') ->first(); if ($servico) { break; } } catch (Throwable $throwable) { continue; } } abort_if(! $servico, 404); $categorias = $this->getCategorias(); $categoriaPorId = $categorias->keyBy('id_tipo'); $tipoIds = $this->parseTipoIds((string) ($servico->cds_tipo ?? '')); $servico->categorias = collect($tipoIds) ->map(fn ($tipo) => $categoriaPorId->get($tipo)) ->filter() ->values(); $servico->orgao_responsavel = $this->resolveOrgaoResponsavel($servico->cds_secretaria ?? null); $servico->tem_mapa = filter_var((string) $servico->cds_mapa, FILTER_VALIDATE_URL) !== false; return view('servicos.show', [ 'servico' => $servico, 'categorias' => $categorias, 'tipoIdsAtivos' => $tipoIds, ]); } public function escolasMunicipais() { $service = new EscolaService(); return view("servicos.escolasMunicipais", [ "escolas" => $service->getEscolasAtivasPorTipo('escola'), ]); } public function escolasClimatizadas() { $service = new EscolaService(); return view("servicos.escolasClimatizadas", [ "escolas" => $service->getEscolasAtivasPorTipo('escola'), ]); } public function escolasClimatizadasDados(): JsonResponse { $service = new EscolaService(); $escolas = $service->getEscolasAtivasPorTipo('escola') ->map(function ($escola) { $lat = optional($escola->endereco)->latitude; $lng = optional($escola->endereco)->longitude; $latNum = ($lat !== null && $lat !== '') ? (float) $lat : null; $lngNum = ($lng !== null && $lng !== '') ? (float) $lng : null; $rawStatus = $escola->climatizacao ?? 'PENDENTE'; $status = in_array($rawStatus, ['CLIMATIZADA', 'EM_ANDAMENTO', 'PENDENTE'], true) ? $rawStatus : 'PENDENTE'; return [ 'id' => $escola->id, 'nome' => $escola->nome, 'bairro' => optional($escola->endereco)->bairro ?? '', 'tipo' => $escola->tipoUnidadeEscolar ?? '', 'latitude' => $latNum, 'longitude' => $lngNum, 'status' => $status, 'observacoes_climatizacao' => $escola->observacoes_climatizacao, ]; }) ->values(); return response()->json(['data' => $escolas]) ->withHeaders([ 'Cache-Control' => 'no-store, no-cache, must-revalidate', 'Pragma' => 'no-cache', 'Expires' => '0', ]); } public function crechesMunicipais() { $service = new EscolaService(); return view("servicos.crechesMunicipais", [ "escolas" => $service->getEscolasAtivasPorTipo('creche'), ]); } public function centrosDeReferencia() { $centros = Centro::join('enderecos', 'enderecos.owner_id', '=', 'centros.id') ->orderBy('enderecos.bairro', 'asc') ->select('centros.*') ->where([ ["centros.status", "like", "%ATIVADO%"] ])->get(); return view("servicos.centrosDeReferencia", ["centros" => $centros]); } public function unidadesSaude() { $unidadesSaude = Unidade::join('enderecos', 'enderecos.owner_id', '=', 'unidades_saude.id') ->orderBy('enderecos.bairro', 'asc') ->select('unidades_saude.*') ->where([ ["unidades_saude.status", "like", "%ATIVADO%"] ])->get(); return view("servicos.unidadesSaude", ["unidadesSaude" => $unidadesSaude]); } public function conselhosSDSP() { $conselhos = Conselho::join('enderecos', 'enderecos.owner_id', '=', 'conselhos.id') ->orderBy('enderecos.bairro', 'asc') ->select('conselhos.*') ->where([ ["conselhos.status", "like", "%ATIVADO%"], ["conselhos.structure_id", "=", env("CONST_COD_SEC_SDSP")] ])->get(); return view("servicos.conselhos.sdsp", ["conselhos" => $conselhos]); } public function conselhoDetalhes($slug) { $conselho = Conselho::join('enderecos', 'enderecos.owner_id', '=', 'conselhos.id') ->orderBy('enderecos.bairro', 'asc') ->select('conselhos.*') ->where([ ["conselhos.status", "like", "%ATIVADO%"], ["conselhos.slug", "=", $slug] ])->first(); $tipos = [ "Ata de sessão extraordinária", "Ata de sessão ordinária", "Carta Aberta", "Comunicado", "Convocação", "Deliberação", "Edital", "Memorando", "Moção", "Ofício", "Parecer", "Plano de Ação", "Portaria", "Recomendação", "Regimento Interno", "Relatório", "Resolução", ]; sort($tipos); $arquivosPorTipo = []; foreach ($tipos as $tipo) { $arquivosPorTipo[$tipo] = $conselho->arquivos() ->where([ ['tipo', "=", $tipo], ['status', "=", "ATIVADO"], ]) ->orderBy('tipo', 'asc') ->orderBy('evento_at', 'desc') ->get(); } return view("servicos.conselhos.conselhoDetalhes", [ "conselho" => $conselho, "tipos" => $arquivosPorTipo, ]); } public function parquesJardinsSUPJ() { $parques = Parque::join('enderecos', 'enderecos.owner_id', '=', 'parques.id') ->orderBy('enderecos.bairro', 'asc') ->select('parques.*') ->where([ ["parques.status", "like", "%ATIVADO%"], ["parques.structure_id", "=", env("CONST_COD_SEC_SUPJ")] ])->get(); return view("servicos.parquesJardins.supj", ["parques" => $parques]); } public function parquesJardinsDetalhes($slug) { $parque = Parque::join('enderecos', 'enderecos.owner_id', '=', 'parques.id') ->orderBy('enderecos.bairro', 'asc') ->select('parques.*') ->where([ ["parques.status", "like", "%ATIVADO%"], ["parques.slug", "=", $slug] ])->first(); $arquivos = $parque->arquivos()->where([ ["status", "=", "ATIVADO"], ])->get(); return view("servicos.parquesJardins.parquesJardinsDetalhes", [ "parque" => $parque, "atributos" => $parque->atributos == null ? [] : explode(',', trim($parque->atributos, ', ')), "arquivos" => $arquivos, ]); } public function cardapioDeAlimentacaoEscolar() { return redirect()->away('https://portal.angra.rj.gov.br/sejin-cardapio.asp?indexsigla=sejin'); } public function dadosAbertos() { return view("servicos.dadosAbertos.index"); } private function getCategorias(): Collection { foreach ($this->getTabelaTiposCandidatas() as $tabela) { try { return DB::table($tabela) ->where('tip_status', 'A') ->orderBy('tip_descricao') ->get(); } catch (Throwable $throwable) { continue; } } return collect(); } private function getServicos(?int $tipoId, string $pesquisa): LengthAwarePaginator { foreach ($this->getTabelaCartasCandidatas() as $tabela) { try { $query = DB::table($tabela) ->where('cds_status', '3') ->orderBy('cds_titulo'); if (! empty($tipoId)) { $query->where('cds_tipo', 'like', "%{$tipoId};%"); } if ($pesquisa !== '') { $query->where(function ($subQuery) use ($pesquisa) { $subQuery->where('cds_titulo', 'like', "%{$pesquisa}%") ->orWhere('cds_descricao', 'like', "%{$pesquisa}%"); }); } return $query ->paginate(10) ->appends(request()->query()); } catch (Throwable $throwable) { continue; } } return new LengthAwarePaginator([], 0, 10, 1, [ 'path' => request()->url(), 'query' => request()->query(), ]); } private function parseTipoIds(string $rawTipo): array { return collect(explode(';', $rawTipo)) ->map(fn ($tipo) => (int) trim($tipo)) ->filter(fn ($tipo) => $tipo > 0) ->values() ->all(); } private function getTabelaTiposCandidatas(): array { return [ 'carta_servicos_tipos', 'TB_SOPA_CDS_TIPOS', 'sadssi.TB_SOPA_CDS_TIPOS', ]; } private function getTabelaCartasCandidatas(): array { return [ 'carta_servicos', 'TB_SOPA_CDS_CARTAS', 'sadssi.TB_SOPA_CDS_CARTAS', ]; } private function getTabelaOrgaosCandidatas(): array { return [ 'TB_SOPA_CDS_ORGAOS', 'sadssi.TB_SOPA_CDS_ORGAOS', ]; } private function resolveOrgaoResponsavel(?string $secretariaId): ?string { if (empty($secretariaId)) { return null; } try { $nome = DB::table('structures') ->where('id', $secretariaId) ->value('name'); if (! empty($nome)) { return $nome; } } catch (Throwable $throwable) { // fallback para tabela legada } foreach ($this->getTabelaOrgaosCandidatas() as $tabela) { try { $nome = DB::table($tabela) ->where('id_org', $secretariaId) ->value('org_nome'); if (! empty($nome)) { return $nome; } } catch (Throwable $throwable) { continue; } } return null; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.13 |
proxy
|
phpinfo
|
Settings