File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/Accounts/AccountService.php
Back
<?php namespace App\Http\Services\Accounts; use App\Models\User; use App\Models\Permissao; use App\Models\Pessoa; use App\Models\Saude\Fibromialgia\Fibromialgia; use App\Models\CadastroDeAmbulantes\Ambulante; use App\Models\Saude\Fibromialgia\FibromialgiaChamado; use App\Models\Saude\Fibromialgia\FibromialgiaMensagem; use App\Models\Structure; use App\Models\UnidadeOrganizacional; use App\Models\Empresa; use App\Models\TurisAngra\Guias\Guia; use App\Http\Controllers\Controller; use App\Http\Requests\Accounts\AccountRequest; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; class AccountService extends Controller { protected $User = User::class; protected $Structure = Structure::class; protected $Permissao = Permissao::class; protected $Guia = Guia::class; public function index(Request $request): LengthAwarePaginator { $paginate = 20; $request->validate([ 'q' => 'nullable|string|max:255', 'structure_id' => 'nullable|string|exists:structures,id', 'status' => 'nullable|string|in:ATIVADO,DESATIVADO', 'sort_by' => 'nullable|string|in:created_at', 'sort_dir' => 'nullable|string|in:asc,desc', ]); $query = $this->User::with('pertence'); // Filtro de busca por texto if ($request->filled('q')) { $search = preg_replace('/\s+/u', ' ', trim($request->q)); $cpfDigits = $this->clearCpfCnpj($search); $tokens = $search !== '' ? explode(' ', $search) : []; $nameSql = "TRIM(CONCAT(COALESCE(firstName, ''), ' ', COALESCE(lastName, '')))"; $query->where(function ($query) use ($search, $cpfDigits, $tokens, $nameSql) { $query->where('firstName', 'like', '%' . $search . '%') ->orWhere('lastName', 'like', '%' . $search . '%') ->orWhere('matriculation', 'like', '%' . $search . '%') ->orWhere('email', 'like', '%' . $search . '%') ->orWhere('cpf', 'like', '%' . $cpfDigits . '%'); // Nome completo (firstName + lastName) e ordem invertida das palavras if (count($tokens) >= 2) { $query->orWhere(function ($sub) use ($tokens, $nameSql) { foreach ($tokens as $token) { $sub->whereRaw("{$nameSql} LIKE ?", ['%' . $token . '%']); } }); } else { $query->orWhereRaw("{$nameSql} LIKE ?", ['%' . $search . '%']); } }); } // Filtro por Secretaria/Órgão if ($request->filled('structure_id')) { $query->where('structure_id', $request->structure_id); } // Filtro por Status if ($request->filled('status')) { $query->where('status', $request->status); } // Ordenação $sortBy = $request->input('sort_by', 'created_at'); $sortDir = $request->input('sort_dir', 'desc'); $query->orderBy($sortBy, $sortDir); return $query->paginate($paginate)->withQueryString(); } public function getSecretarias(): Collection { return Structure::select("id", "name", "abbreviation")->where([ ["status", "=", "ATIVADO"] ])->whereNull("structure_id") ->orderBy('name', 'asc') ->get(); } /** * Retorna todas as unidades organizacionais ativas para seleção múltipla no cadastro de usuários. */ public function getUnidades(): Collection { return UnidadeOrganizacional::select('id', 'name', 'abbreviation', 'structure_id') ->where('status', 'ATIVADO') ->with('secretaria:id,name,abbreviation') ->orderBy('abbreviation', 'asc') ->get(); } /** * Retorna empresas ativas para seleção múltipla no cadastro de usuários. */ public function getEmpresas(): Collection { return Empresa::select('id', 'nomeFantasia', 'razaoSocial', 'cnpj') ->where('status', 'ATIVADO') ->orderBy('nomeFantasia', 'asc') ->orderBy('razaoSocial', 'asc') ->get(); } public function getPermissoes($userId): Collection { return Permissao::select("*") ->where("user_id", $userId) ->orderBy('permissao', 'asc')->get(); } public function store(AccountRequest $request, $array_user): RedirectResponse { try { DB::beginTransaction(); $user = User::create($array_user); if ($request->has('permission') && is_array($request->permission)) { foreach ($request->permission as $permName => $permValue) { if ((int) $permValue === 1) { Permissao::create([ 'user_id' => $user->id, 'permissao' => $permName, 'visualizar' => (int) ($request->input("visualizar.{$permName}", 0)), 'adicionar' => (int) ($request->input("adicionar.{$permName}", 0)), 'editar' => (int) ($request->input("editar.{$permName}", 0)), 'excluir' => (int) ($request->input("excluir.{$permName}", 0)), 'status' => $request->status, ]); } } } $user->unidades()->sync($request->input('unidades', [])); $user->empresas()->sync($request->input('empresas', [])); DB::commit(); return redirect($this->buildRedirectUrl($request))->with("success", __("* O usuário {$request->firstName} {$request->firstName} foi criado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', 'Erro tentar criar esta conta. ' . $e->getMessage()); } } public function update(AccountRequest $request, User $user, $array_user): RedirectResponse { try { DB::beginTransaction(); $user->update($array_user); Permissao::where('user_id', $user->id)->delete(); if ($request->has('permission')) { foreach ($request->permission as $permName) { $array_permission = [ "user_id" => $user->id, "permissao" => $permName, "visualizar" => $request->input("visualizar.{$permName}", 0), "adicionar" => $request->input("adicionar.{$permName}", 0), "editar" => $request->input("editar.{$permName}", 0), "excluir" => $request->input("excluir.{$permName}", 0), "status" => $request->status, ]; Permissao::create($array_permission); } } $user->unidades()->sync($request->input('unidades', [])); $user->empresas()->sync($request->input('empresas', [])); DB::commit(); return redirect($this->buildRedirectUrl($request))->with("success", "* O usuário {$user->firstName} foi atualizado com sucesso!"); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', 'Erro tentar atualizar esta conta. ' . $e->getMessage()); } } public function destroy(Request $request, User $user): RedirectResponse { try { DB::beginTransaction(); $guia = Guia::where("owner_id", $user->id)->first(); if (isset($guia->id)) { Guia::destroy($guia->id); } $ambulante = Ambulante::where("user_id", $user->id)->first(); if (isset($ambulante->id)) { Ambulante::destroy($ambulante->id); } $pessoa = Pessoa::where("user_id", $user->id)->first(); if (isset($pessoa->id)) { Pessoa::destroy($pessoa->id); } $fibromialgia = Fibromialgia::where("user_id", $user->id)->first(); if (isset($fibromialgia->id)) { Fibromialgia::destroy($fibromialgia->id); } $fibromialgiaChamado = FibromialgiaChamado::where("user_id", $user->id)->first(); if (isset($fibromialgiaChamado->id)) { FibromialgiaChamado::destroy($fibromialgiaChamado->id); } $fibromialgiaMensagem = FibromialgiaMensagem::where("user_id", $user->id)->first(); if (isset($fibromialgiaMensagem->id)) { FibromialgiaMensagem::destroy($fibromialgiaMensagem->id); } Permissao::where('user_id', $user->id)->delete(); User::destroy($user->id); DB::commit(); return redirect($this->buildRedirectUrl($request))->with("success", __("* O usuário {$user->firstName} foi excluído com sucesso! Esta ação não pode ser desfeita!")); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', 'Erro tentar excluir esta conta. ' . $e->getMessage()); } } public function status(Request $request, User $user): RedirectResponse { try { DB::beginTransaction(); $user->fill([ 'status' => $request->checkStatus ]); $user->save(); DB::commit(); return redirect($this->buildRedirectUrl($request))->with("success", __("* O status do usuário {$user->firstName} foi alterado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', 'Erro ao tentar alterar o status desta conta. ' . $e->getMessage()); } } /** * Constrói a URL de redirecionamento preservando todos os filtros e parâmetros de paginação */ private function buildRedirectUrl(Request $request): string { $params = []; // Preserva filtros 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; } if ($request->filled('sort_by')) { $params['sort_by'] = $request->sort_by; } if ($request->filled('sort_dir')) { $params['sort_dir'] = $request->sort_dir; } // Preserva página $page = $request->input('page', 1); if ($page > 1) { $params['page'] = $page; } $queryString = !empty($params) ? '?' . http_build_query($params) : ''; return "/admin/users{$queryString}"; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings