File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/Organizacao/UnidadeOrganizacionalService.php
Back
<?php namespace App\Http\Services\Organizacao; use App\Models\UnidadeOrganizacional; use App\Models\Structure; use App\Http\Controllers\Controller; use App\Http\Requests\Organizacao\UnidadeOrganizacionalRequest; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; class UnidadeOrganizacionalService extends Controller { protected $UnidadeOrganizacional = UnidadeOrganizacional::class; protected $Structure = Structure::class; /** * Lista paginada com filtros de busca, secretaria e status. */ public function index(Request $request): LengthAwarePaginator { $paginate = 20; $request->validate([ 'q' => 'nullable|string|max:255', 'structure_id' => 'nullable|exists:structures,id', 'status' => 'nullable|in:ATIVADO,DESATIVADO', ]); $query = $this->UnidadeOrganizacional::with('secretaria') ->orderBy('abbreviation', 'asc'); if ($request->filled('q')) { $search = trim($request->q); $query->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('abbreviation', 'like', "%{$search}%"); }); } if ($request->filled('structure_id')) { $query->where('structure_id', $request->structure_id); } if ($request->filled('status')) { $query->where('status', $request->status); } return $query->paginate($paginate)->withQueryString(); } /** * Retorna secretarias ativas (top-level) para o select de criação. */ public function getSecretarias(): Collection { return $this->Structure::select('id', 'name', 'abbreviation') ->where('status', 'ATIVADO') ->whereNull('structure_id') ->orderBy('name', 'asc') ->get(); } /** * Persiste uma nova unidade organizacional. */ public function store(UnidadeOrganizacionalRequest $request, array $data): RedirectResponse { try { DB::beginTransaction(); UnidadeOrganizacional::create($data); DB::commit(); return redirect($this->buildRedirectUrl($request)) ->with('success', __('* Unidade organizacional criada com sucesso!')); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->withInput() ->with('error', __('Erro ao criar a unidade organizacional. ') . $e->getMessage()); } } /** * Atualiza uma unidade organizacional existente. */ public function update(UnidadeOrganizacionalRequest $request, UnidadeOrganizacional $unidade, array $data): RedirectResponse { try { DB::beginTransaction(); $unidade->update($data); DB::commit(); return redirect($this->buildRedirectUrl($request)) ->with('success', __("* A unidade {$unidade->abbreviation} foi atualizada com sucesso!")); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->withInput() ->with('error', __('Erro ao atualizar a unidade organizacional. ') . $e->getMessage()); } } /** * Exclui uma unidade organizacional e desvincula todos os usuários (via cascade). */ public function destroy(Request $request, UnidadeOrganizacional $unidade): RedirectResponse { try { DB::beginTransaction(); UnidadeOrganizacional::destroy($unidade->id); DB::commit(); return redirect($this->buildRedirectUrl($request)) ->with('success', __("* A unidade {$unidade->abbreviation} foi excluída com sucesso! Esta ação não pode ser desfeita!")); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->withInput() ->with('error', __('Erro ao excluir a unidade organizacional. ') . $e->getMessage()); } } /** * Alterna o status (ATIVADO/DESATIVADO) da unidade. */ public function status(Request $request, UnidadeOrganizacional $unidade): RedirectResponse { try { DB::beginTransaction(); $unidade->fill(['status' => $request->checkStatus]); $unidade->save(); DB::commit(); return redirect($this->buildRedirectUrl($request)) ->with('success', __("* O status da unidade {$unidade->abbreviation} foi alterado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->withInput() ->with('error', __('Erro ao alterar o status. ') . $e->getMessage()); } } /** * Preserva filtros e página ao redirecionar após operações. */ private function buildRedirectUrl(Request $request): string { $params = []; if ($request->filled('q')) { $params['q'] = $request->q; } if ($request->filled('structure_id')) { $params['structure_id'] = $request->structure_id; } if ($request->filled('status')) { $params['status'] = $request->status; } $page = $request->input('page', 1); if ($page > 1) { $params['page'] = $page; } $qs = !empty($params) ? '?' . http_build_query($params) : ''; return "/admin/unidades-organizacionais{$qs}"; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings