File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/AtaService.php
Back
<?php namespace App\Http\Services; use App\Http\Requests\AtaIndexRequest; use App\Models\Ata; use App\Models\Comunicacao\Boletim; use App\Models\Structure; use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\Storage; class AtaService { /** * Retorna lista paginada de atas aplicando os filtros da request. */ public function filtrar(AtaIndexRequest $request): LengthAwarePaginator { $validated = $request->validated(); $query = Ata::query() ->with(['secretaria', 'secretariasAtas', 'bo', 'licitacao']) ->orderByDesc('dt_data_ata') ->orderByDesc('created_at'); if (!empty($validated['q'])) { $q = trim((string) $validated['q']); $query->where(function ($inner) use ($q) { $inner->where('nr_ata', 'like', "%{$q}%") ->orWhere('ds_objeto', 'like', "%{$q}%") ->orWhere('nr_processo', 'like', "%{$q}%"); }); } if (!empty($validated['nr_ata'])) { $query->where('nr_ata', 'like', '%' . trim((string) $validated['nr_ata']) . '%'); } if (!empty($validated['nr_processo'])) { $query->where('nr_processo', 'like', '%' . trim((string) $validated['nr_processo']) . '%'); } if (!empty($validated['id_secretaria_ata'])) { $secretariaId = (string) $validated['id_secretaria_ata']; $query->where(function ($inner) use ($secretariaId) { $inner->where('id_secretaria_ata', $secretariaId) ->orWhereHas('secretariasAtas', function ($secretariasQuery) use ($secretariaId) { $secretariasQuery->where('structures.id', $secretariaId); }); }); } if (!empty($validated['dt_data_ata'])) { $query->whereDate('dt_data_ata', '=', (string) $validated['dt_data_ata']); } return $query->paginate(15)->withQueryString(); } /** * Persiste uma nova Ata com suas secretarias. * * @param array<string, mixed> $payload * @param string[] $secretariaIds */ public function persistFromPayload(array $payload, array $secretariaIds): Ata { $ata = Ata::create($payload); $this->syncSecretarias($ata, $secretariaIds); return $ata; } /** * Atualiza uma Ata existente com suas secretarias. * * @param array<string, mixed> $payload * @param string[] $secretariaIds */ public function updateFromPayload(Ata $ata, array $payload, array $secretariaIds): Ata { $ata->update($payload); $this->syncSecretarias($ata, $secretariaIds); return $ata; } /** * Exclui uma Ata e seu arquivo PDF do storage de forma atômica. */ public function delete(Ata $ata): void { if (!empty($ata->nm_arquivo_ata)) { $this->deleteStoredFile($ata->nm_arquivo_ata); } $ata->delete(); } /** * Remove arquivo da ata do disco public quando aplicável. */ public function deleteStoredFile(string $relativePath): void { $relativePath = trim($relativePath); if ($relativePath === '' || str_starts_with($relativePath, 'http')) { return; } Storage::disk('public')->delete(ltrim($relativePath, '/')); } /** * Retorna os Boletins disponíveis para seleção no formulário. */ public function getBoletins(): Collection { return Boletim::query() ->select(['id', 'number', 'url', 'publicationDate']) ->whereNotNull('number') ->orderByDesc('publicationDate') ->get(); } /** * Retorna as Secretarias ativas ordenadas por nome. */ public function getSecretarias(): Collection { return Structure::query() ->select(['id', 'name', 'abbreviation']) ->where('status', 'ATIVADO') ->orderBy('name') ->get(); } /** * Sincroniza as secretarias vinculadas à Ata via tabela pivot. * * @param string[] $secretariaIds */ private function syncSecretarias(Ata $ata, array $secretariaIds): void { $ids = collect($secretariaIds) ->filter(fn ($v) => !empty($v)) ->map(fn ($v) => (string) $v) ->unique() ->values() ->all(); $ata->secretariasAtas()->sync($ids); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings