File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/Cultura/Credenciamento/MusicoService.php
Back
<?php namespace App\Http\Services\Cultura\Credenciamento; use App\Models\Cultura\Credenciamento\Musico; use App\Models\User; use App\Models\Permissao; use App\Models\Endereco; use App\Models\Pessoa; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Mail; use App\Mail\Cultura\Credenciamento\CadastroMusicoMail; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Auth; use App\Http\Requests\Cultura\Credenciamento\MusicoRequest; use App\Models\Cultura\Credenciamento\DocumentoCredenciamento; use App\Models\Cultura\Credenciamento\EstiloMusical; use App\Enums\Cultura\Credenciamento\TipoDocumentoCredenciamento; class MusicoService extends Controller { protected $Musico = Musico::class; protected $User = User::class; protected $Permissao = Permissao::class; protected $Endereco = Endereco::class; protected $Pessoa = Pessoa::class; public function getUserWithId($cpf): User|bool { $user = User::where('cpf', $this->clearCpfCnpj($cpf))->first(); if ($user instanceof User) { return $user; } return false; } public function index(Request $request): LengthAwarePaginator { $paginate = 20; $request->validate([ 'q' => 'nullable|string|max:255', 'tipo_pessoa' => 'nullable|in:PF,PJ', 'estilo_id' => 'nullable|uuid|exists:estilos_musicais,id', 'categoria' => 'nullable|string|max:255', 'municipio_atuacao' => 'nullable|string|max:255', 'status_cadastro' => 'nullable|string|max:255', 'convocado' => 'nullable|boolean', 'ordenar' => 'nullable|in:created_at,nome,id', 'ordem' => 'nullable|in:asc,desc', ]); $query = $this->Musico::select('musicos.*')->join('users', 'users.id', '=', 'musicos.user_id'); if ($request->filled('q')) { $q = trim($request->q); $query->where(function ($qry) use ($q) { $qry->where('users.firstName', 'like', "%{$q}%") ->orWhere('users.lastName', 'like', "%{$q}%") ->orWhere('users.cpf', 'like', "%{$this->clearCPF($q)}%") ->orWhere('users.phoneNumber', 'like', "%{$q}%") ->orWhere('musicos.statusCadastro', 'like', "%{$q}%") ->orWhere('musicos.carteirinha', 'like', "%{$q}%") ->orWhere('musicos.grupo_nome', 'like', "%{$q}%") ->orWhere('users.email', 'like', "%{$q}%"); }); } if ($request->filled('tipo_pessoa')) { $query->where('musicos.tipo_pessoa', $request->tipo_pessoa); } if ($request->filled('estilo_id')) { $query->whereExists(function ($q) use ($request) { $q->select(DB::raw(1))->from('musico_estilos') ->whereColumn('musico_estilos.musico_id', 'musicos.id') ->where('musico_estilos.estilo_id', $request->estilo_id); }); } if ($request->filled('categoria')) { $query->whereExists(function ($q) use ($request) { $q->select(DB::raw(1))->from('musico_grupos') ->whereColumn('musico_grupos.musico_id', 'musicos.id') ->where('musico_grupos.categoria_integrantes', 'like', '%' . $request->categoria . '%'); }); } if ($request->filled('municipio_atuacao')) { $query->whereExists(function ($q) use ($request) { $q->select(DB::raw(1))->from('musico_avaliacao') ->whereColumn('musico_avaliacao.musico_id', 'musicos.id') ->where('musico_avaliacao.municipio_atuacao', 'like', '%' . $request->municipio_atuacao . '%'); }); } if ($request->filled('status_cadastro')) { $query->where('musicos.statusCadastro', $request->status_cadastro); } if ($request->boolean('convocado')) { $query->whereExists(function ($q) { $q->select(DB::raw(1))->from('credenciamento_convocacoes') ->whereColumn('credenciamento_convocacoes.musico_id', 'musicos.id') ->where('credenciamento_convocacoes.status', 'CONFIRMADA'); }); } $ordenar = $request->input('ordenar', 'created_at'); $ordem = $request->input('ordem', 'desc'); if ($ordenar === 'nome') { $query->orderByRaw("COALESCE(musicos.grupo_nome, users.firstName, users.lastName) {$ordem}"); } else { $query->orderBy('musicos.' . ($ordenar === 'id' ? 'id' : 'created_at'), $ordem); } return $query->paginate($paginate)->withQueryString(); } public function create(Array $array_musico): Musico|bool { try { DB::beginTransaction(); $musico = $this->Musico::create($array_musico); DB::commit(); return $musico; } catch (\Exception $e) { DB::rollBack(); return false; } } /** * Garante que existam registros em documentos_credenciamento para todos os tipos obrigatórios do musico (PF/PJ). */ public function ensureDocumentosHabilitacao(Musico $musico): void { $tipoPessoa = $musico->tipo_pessoa ?? 'PF'; $tipos = TipoDocumentoCredenciamento::tiposParaPessoa($tipoPessoa); $existentes = $musico->documentosCredenciamento()->pluck('tipo_documento')->toArray(); foreach (array_keys($tipos) as $tipo) { if (!in_array($tipo, $existentes, true)) { DocumentoCredenciamento::create([ 'musico_id' => $musico->id, 'tipo_documento' => $tipo, 'status' => 'PENDENTE', ]); } } } /** * Cria um novo credenciamento (Musico) para um usuário existente. Vigência 12 meses. */ public function createForUser(string $userId, string $tipoPessoa = 'PF'): Musico|bool { $now = now(); return $this->create([ 'user_id' => $userId, 'tipo_pessoa' => $tipoPessoa, 'status' => 'ATIVADO', 'statusCadastro' => 'Documentação Pendente (Licitação)', 'carteirinha' => 'Pendente de validação', 'data_credenciamento' => $now->toDateString(), 'data_expiracao' => $now->copy()->addMonths(12)->toDateString(), ]); } public function store(Array $array_user): RedirectResponse { try { DB::beginTransaction(); $user = $this->User::create($array_user); foreach(['GERENCIADOR_DE_CONTA_ANGRA', 'GUEST'] as $papel){ $this->Permissao::create([ 'user_id' => $user->id, 'permissao' => (string) $papel, 'visualizar' => 1, 'adicionar' => 1, 'editar' => 1, 'excluir' => 1, 'status' => "ATIVADO", ]); } $this->Pessoa::create(['user_id' => $user->id]); $musico = $this->Musico::create(['user_id' => $user->id]); Mail::to($user->email)->send(new CadastroMusicoMail($user)); DB::commit(); return redirect()->route('admin.cultura.credenciamentoMusicos.dadosPessoais', $musico->id) ->with('success', '* Usuário criado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.cultura.credenciamentoMusicos.create') ->withInput() ->with('error', 'Erro tentar criar esta conta. ' . $e->getMessage()); } } public function update(MusicoRequest $request, User $user, $array_user): RedirectResponse { try { DB::beginTransaction(); $user->update($array_user); DB::commit(); return redirect()->route('admin.cultura.credenciamentoMusicos.dadosPessoais', $user->musico->id) ->with('success', '* Dados do usuário atualizado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.cultura.credenciamentoMusicos.edit', $user->musico->id) ->withInput() ->with('error', 'Erro tentar atualizar este músico. ' . $e->getMessage()); } } public function destroyArquivo(Musico $musico, string $label): RedirectResponse { try { DB::beginTransaction(); $musico->update([ "$label" => "pmar/assets/img/icons/neuto.png" ]); DB::commit(); return redirect()->route('admin.cultura.credenciamentoMusicos.arquivos', $musico->id)->with('success', 'Arquivo excluído com sucesso! Esta ação não pode ser desfeita.'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.cultura.credenciamentoMusicos.arquivos', $musico->id) ->withInput() ->with('error', 'Erro ao excluir o arquivo. ' . $e->getMessage()); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings