File manager - Edit - /var/www/html/portal/app/Http/Controllers/ContratoController.php
Back
<?php namespace App\Http\Controllers; use App\Enums\StatusPermission; use App\Helpers\ContratosAccessHelper; use App\Http\Requests\ContratoArquivoRequest; use App\Http\Requests\ContratoRequest; use App\Http\Resources\ContratoResource; use App\Http\Services\ContratoService; use App\Models\Contratos\Contrato; use App\Models\Contratos\ContratoArquivo; use App\Models\LicitacoesProcedimentos\Processo; use App\Models\Structure; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\View\View; class ContratoController extends Controller { public function __construct( private readonly ContratoService $service, private readonly ContratoResource $resource ) { $this->middleware('contratos'); } public function index(Request $request): View|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } return view('admin.contratos.index', [ 'registros' => $this->service->listWithFilters($request), 'anosDisponiveis' => $this->service->getAvailableYears(), ]); } public function create(): View|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } return view('admin.contratos.create', [ 'secretarias' => $this->getSecretarias(null), 'secretariasGestoras' => $this->getSecretariasGestoras(null), 'licitacaoSelecionada' => $this->getLicitacaoSelecionada( old('licitacao_procedimento_id') ), ]); } public function store(ContratoRequest $request): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } return $this->resource->store($request); } public function show(Contrato $contrato): View|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para visualizar este contrato.')); } $contrato->load(['favorecido', 'secretaria', 'secretariaGestora', 'arquivos', 'licitacao']); return view('admin.contratos.show', compact('contrato')); } public function edit(Contrato $contrato): View|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para editar este contrato.')); } $contrato->load('favorecido'); return view('admin.contratos.edit', [ 'registro' => $contrato, 'secretarias' => $this->getSecretarias($contrato->con_secretaria), 'secretariasGestoras' => $this->getSecretariasGestoras($contrato->con_secretaria_gestora), 'licitacaoSelecionada' => $this->getLicitacaoSelecionada( old('licitacao_procedimento_id', $contrato->licitacao_procedimento_id) ), ]); } public function searchLicitacoes(Request $request): JsonResponse|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } $term = trim((string) $request->input('q')); if (mb_strlen($term) < 2) { return response()->json(['data' => []]); } $normalizedNumericTerm = preg_replace('/\D+/', '', $term); $termWords = preg_split('/\s+/', mb_strtolower($term), -1, PREG_SPLIT_NO_EMPTY); $licitacoes = Processo::query() ->select(['id', 'nr_licitacao', 'nr_processo', 'ds_objeto']) ->where('tipo_processo', 'licitacao') ->where(function ($query) use ($term, $termWords, $normalizedNumericTerm) { $query->where('nr_licitacao', 'like', "%{$term}%") ->orWhere('nr_processo', 'like', "%{$term}%") ->orWhere('ds_objeto', 'like', "%{$term}%"); if (!empty($normalizedNumericTerm) && mb_strlen($normalizedNumericTerm) >= 2) { $query->orWhereRaw( "REPLACE(REPLACE(REPLACE(REPLACE(nr_licitacao, '/', ''), '.', ''), '-', ''), ' ', '') LIKE ?", ["%{$normalizedNumericTerm}%"] )->orWhereRaw( "REPLACE(REPLACE(REPLACE(REPLACE(nr_processo, '/', ''), '.', ''), '-', ''), ' ', '') LIKE ?", ["%{$normalizedNumericTerm}%"] ); } foreach ($termWords as $word) { if (mb_strlen($word) < 2) { continue; } $query->orWhereRaw('LOWER(ds_objeto) LIKE ?', ["%{$word}%"]); } }) ->orderByDesc('dt_data') ->orderByDesc('id') ->limit(20) ->get() ->map(fn (Processo $licitacao) => [ 'id' => (string) $licitacao->id, 'text' => $this->formatLicitacaoLabel($licitacao), ]) ->values(); return response()->json(['data' => $licitacoes]); } public function update(ContratoRequest $request, Contrato $contrato): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para atualizar este contrato.')); } $this->service->update($contrato, $request->validated()); return redirect()->route('admin.contratos.index', $request->only(ContratoResource::ADMIN_FILTER_KEYS)) ->with('success', __('* Contrato atualizado com sucesso!')); } public function destroy(Request $request, Contrato $contrato): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'excluir'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para excluir este contrato.')); } return $this->resource->destroy($request, $contrato); } public function arquivos(Contrato $contrato): View|RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para acessar os arquivos deste contrato.')); } $contrato->load('arquivos'); return view('admin.contratos.arquivos', compact('contrato')); } public function storeArquivo(ContratoArquivoRequest $request, Contrato $contrato): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para adicionar arquivos neste contrato.')); } return $this->resource->storeArquivo($request, $contrato); } public function updateArquivo(ContratoArquivoRequest $request, Contrato $contrato, ContratoArquivo $contrato_arquivo): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para editar arquivos deste contrato.')); } return $this->resource->updateArquivo($request, $contrato, $contrato_arquivo); } public function destroyArquivo(Request $request, Contrato $contrato, ContratoArquivo $contrato_arquivo): RedirectResponse { $response = $this->checkPermissao(StatusPermission::GERENCIADOR_DE_CONTRATOS, 'editar'); if ($response instanceof RedirectResponse) { return $response; } if (!$this->canAccessContrato($contrato)) { return redirect()->route('admin.contratos.index') ->with('error', __('* Você não tem permissão para remover arquivos deste contrato.')); } return $this->resource->destroyArquivo($request, $contrato, $contrato_arquivo); } private function getSecretarias(?string $includeId = null) { return $this->getStructuresForSelect($includeId); } private function getSecretariasGestoras(?string $includeId = null) { return $this->getStructuresForSelect($includeId); } private function getStructuresForSelect(?string $includeId = null) { if (!ContratosAccessHelper::hasGlobalAccess()) { $structureId = auth()->user()?->structure_id; return Structure::query() ->select(['id', 'name']) ->where('id', $structureId) ->orderBy('name') ->get(); } return Structure::query() ->select(['id', 'name']) ->where(function ($query) use ($includeId) { $query->where('status', 'ATIVADO'); if (!empty($includeId)) { $query->orWhere('id', $includeId); } }) ->orderBy('name') ->get(); } private function canAccessContrato(Contrato $contrato): bool { if (ContratosAccessHelper::hasGlobalAccess()) { return true; } return (string) $contrato->con_secretaria === (string) auth()->user()?->structure_id; } private function getLicitacaoSelecionada($id): ?array { if (empty($id)) { return null; } $licitacao = Processo::query() ->select(['id', 'nr_licitacao', 'nr_processo', 'ds_objeto', 'tipo_processo']) ->where('tipo_processo', 'licitacao') ->find($id); if (!$licitacao) { return null; } return [ 'id' => (string) $licitacao->id, 'text' => $this->formatLicitacaoLabel($licitacao), ]; } private function formatLicitacaoLabel(Processo $licitacao): string { $label = $licitacao->nr_licitacao ?: ('ID #' . $licitacao->id); if (!empty($licitacao->nr_processo)) { $label .= ' - Processo: ' . $licitacao->nr_processo; } $objeto = trim((string) ($licitacao->ds_objeto ?? '')); if ($objeto !== '') { $label .= ' - ' . Str::limit($objeto, 90); } return $label; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.09 |
proxy
|
phpinfo
|
Settings