File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/TurisAngra/EmpresasDeTurismo/EmpresaTurismoService.php
Back
<?php namespace App\Http\Services\TurisAngra\EmpresasDeTurismo; use App\Helpers\EmpresaTurismoFileHelper; use App\Http\Requests\TurisAngra\EmpresasDeTurismo\EmbarcacaoRequest; use App\Http\Requests\TurisAngra\EmpresasDeTurismo\EmpresaTurismoEnderecoRequest; use App\Http\Requests\TurisAngra\EmpresasDeTurismo\EmpresaTurismoPrepostoRequest; use App\Http\Requests\TurisAngra\EmpresasDeTurismo\EmpresaTurismoProprietarioRequest; use App\Http\Requests\TurisAngra\EmpresasDeTurismo\EmpresasTurismoClipBoardRequest; use App\Http\Resources\TurisAngra\EmpresasDeTurismo\EmpresaTurismoResource; use App\Models\Empresa; use App\Models\Endereco; use App\Models\Permissao; use App\Models\Pessoa; use App\Models\TurisAngra\EmpresasDeTurismo\Embarcacao; use App\Models\TurisAngra\EmpresasDeTurismo\EmpresaTurismo; use App\Models\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; /** * Service de persistência e CRUD do módulo Empresas de Turismo. */ class EmpresaTurismoService { public function index(Request $request): LengthAwarePaginator { $paginate = 20; return $this->buildIndexQuery($request) ->orderByDesc('created_at') ->paginate($paginate) ->withQueryString(); } /** * Monta a query da listagem aplicando busca e filtros combinados. */ private function buildIndexQuery(Request $request): Builder { $eagerLoad = ['companhia', 'companhia.responsavel', 'companhia.endereco']; $query = EmpresaTurismo::query()->with($eagerLoad); if ($request->filled('status')) { $status = $request->input('status'); if (in_array($status, ['ATIVADO', 'DESATIVADO'], true)) { $query->where('status', $status); } } if ($request->filled('cadastur')) { $cadastur = trim((string) $request->input('cadastur')); if ($cadastur !== '') { $query->where('cadastur', 'like', '%' . $cadastur . '%'); } } if ($request->filled('cadastur_situacao')) { $this->applyCadasturSituacaoFilter($query, (string) $request->input('cadastur_situacao')); } $empresaIds = $this->resolveEmpresaIdsForFilters($request); if ($empresaIds !== null) { if ($empresaIds === []) { $query->whereRaw('1 = 0'); } else { $query->whereIn('empresa_id', $empresaIds); } } return $query; } /** * Restringe empresa_id conforme filtros de Empresa e busca geral. * * @return array<string>|null null quando nenhum filtro de empresa/busca está ativo */ private function resolveEmpresaIdsForFilters(Request $request): ?array { $empresaIds = null; if ($request->filled('possui_whatsapp')) { $whatsapp = filter_var($request->input('possui_whatsapp'), FILTER_VALIDATE_BOOLEAN); $empresaIds = $this->intersectEmpresaIds( $empresaIds, Empresa::where('possui_whatsapp', $whatsapp)->pluck('id')->all() ); } if ($request->filled('cnpj')) { $cnpjLimpo = preg_replace('/\D/', '', (string) $request->input('cnpj')); if ($cnpjLimpo !== '') { $empresaIds = $this->intersectEmpresaIds( $empresaIds, Empresa::where('cnpj', 'like', '%' . $cnpjLimpo . '%')->pluck('id')->all() ); } } if ($request->filled('q')) { $empresaIds = $this->intersectEmpresaIds( $empresaIds, $this->resolveSearchEmpresaIds(trim((string) $request->input('q'))) ); } return $empresaIds; } /** * @param array<string>|null $current * @param array<string> $next * @return array<string> */ private function intersectEmpresaIds(?array $current, array $next): array { if ($current === null) { return $next; } return array_values(array_intersect($current, $next)); } /** * IDs de empresa compatíveis com a busca geral (q). * * @return array<string> */ private function resolveSearchEmpresaIds(string $q): array { if ($q === '') { return []; } $cnpjLimpo = preg_replace('/\D/', '', $q); $empresasTurismoPorCadastur = EmpresaTurismo::where('cadastur', 'like', "%{$q}%") ->pluck('empresa_id') ->toArray(); $empresasTurismoPorEmbarcacao = Embarcacao::where(function ($subQuery) use ($q) { $subQuery->where('nome', 'like', "%{$q}%") ->orWhere('inscricao', 'like', "%{$q}%") ->orWhere('rci', 'like', "%{$q}%") ->orWhere('tipo', 'like', "%{$q}%"); }) ->pluck('empresas_turismo_id') ->unique() ->values() ->toArray(); $empresasPorEmbarcacao = EmpresaTurismo::whereIn('id', $empresasTurismoPorEmbarcacao) ->pluck('empresa_id') ->toArray(); $empresasTurismoIds = EmpresaTurismo::pluck('empresa_id')->toArray(); if (empty($empresasTurismoIds)) { return []; } $empresasEncontradas = Empresa::whereIn('id', $empresasTurismoIds) ->where(function ($query) use ($q, $cnpjLimpo) { $query->where('razaoSocial', 'like', "%{$q}%") ->orWhere('nomeFantasia', 'like', "%{$q}%") ->orWhere('numeroInscricaoMunicipal', 'like', "%{$q}%") ->orWhere('email', 'like', "%{$q}%") ->orWhere('celular', 'like', "%{$q}%") ->orWhere('telefone', 'like', "%{$q}%"); if ($cnpjLimpo !== '') { $query->orWhere('cnpj', 'like', "%{$cnpjLimpo}%"); } }) ->pluck('id') ->toArray(); return array_values(array_unique(array_merge( $empresasEncontradas, $empresasTurismoPorCadastur, $empresasPorEmbarcacao ))); } private function applyCadasturSituacaoFilter(Builder $query, string $situacao): void { $allowed = ['sem_vencimento', 'vencido', 'vence_30', 'vigente']; if (!in_array($situacao, $allowed, true)) { return; } $today = now()->startOfDay(); match ($situacao) { 'sem_vencimento' => $query->whereNull('cadastur_vencimento'), 'vencido' => $query->whereNotNull('cadastur_vencimento') ->whereDate('cadastur_vencimento', '<', $today), 'vence_30' => $query->whereNotNull('cadastur_vencimento') ->whereDate('cadastur_vencimento', '>=', $today) ->whereDate('cadastur_vencimento', '<=', $today->copy()->addDays(30)), 'vigente' => $query->where(function (Builder $sub) use ($today) { $sub->whereNull('cadastur_vencimento') ->orWhereDate('cadastur_vencimento', '>=', $today); }), default => null, }; } public function embarcacoesIndex(Request $request, EmpresaTurismo $empresaTurismo): LengthAwarePaginator { return Embarcacao::where('empresas_turismo_id', $empresaTurismo->id) ->when($request->filled('q'), function ($query) use ($request) { $q = trim((string) $request->input('q')); $query->where(function ($subQuery) use ($q) { $subQuery->where('nome', 'like', "%{$q}%") ->orWhere('inscricao', 'like', "%{$q}%") ->orWhere('rci', 'like', "%{$q}%") ->orWhere('tipo', 'like', "%{$q}%") ->orWhere('atividade', 'like', "%{$q}%") ->orWhere('areaNavegacao', 'like', "%{$q}%") ->orWhere('selo', 'like', "%{$q}%"); if (is_numeric($q)) { $subQuery->orWhere('capacidade', $q) ->orWhere('anoConstrucao', $q); } }); }) ->orderBy('categoria') ->orderBy('nome') ->orderBy('created_at') ->paginate(20) ->withQueryString(); } public function createUser(Request $request, array $arrayUser, string $photoField): User { return DB::transaction(function () use ($request, $arrayUser, $photoField) { $arrayUser['photo'] = EmpresaTurismoFileHelper::uploadUserPhoto($request, $photoField, null); $user = User::create($arrayUser); Pessoa::create(['user_id' => $user->id]); Endereco::create([ 'user_id' => Auth::id(), 'owner_id' => $user->id, 'domicilio' => 'OUTROS', 'cep' => '', 'logradouro' => '', 'cidade' => '', 'bairro' => '', 'uf' => '', ]); Permissao::create([ 'user_id' => $user->id, 'permissao' => 'GUEST', 'visualizar' => 1, 'adicionar' => 1, 'editar' => 1, 'excluir' => 1, ]); return $user; }); } public function updateUser(Request $request, array $arrayUser, string $photoField, string $cpf): User { return DB::transaction(function () use ($request, $arrayUser, $photoField, $cpf) { $user = User::where('cpf', preg_replace('/[^0-9]/', '', $cpf))->firstOrFail(); $arrayUser['photo'] = EmpresaTurismoFileHelper::uploadUserPhoto($request, $photoField, $user); $user->fill($arrayUser); $user->save(); return $user; }); } public function createEndereco(array $arrayEndereco): Endereco { return DB::transaction(fn () => Endereco::create($arrayEndereco)); } public function updateEndereco(array $arrayEndereco, Endereco $endereco): Endereco { return DB::transaction(function () use ($arrayEndereco, $endereco) { $endereco->fill($arrayEndereco); $endereco->save(); return $endereco; }); } public function createEmpresa(array $arrayEmpresa): Empresa { return DB::transaction(fn () => Empresa::create($arrayEmpresa)); } public function updateEmpresa(array $arrayEmpresa, Empresa $empresa): Empresa { return DB::transaction(function () use ($arrayEmpresa, $empresa) { $empresa->fill($arrayEmpresa); $empresa->save(); return $empresa; }); } public function createEmpresaTurismo(array $arrayEmpresaTurismo): EmpresaTurismo { return DB::connection('mysql_turismo_nautico')->transaction( fn () => EmpresaTurismo::create($arrayEmpresaTurismo) ); } public function updateEmpresaTurismo(array $arrayEmpresaTurismo, EmpresaTurismo $empresaTurismo): EmpresaTurismo { return DB::connection('mysql_turismo_nautico')->transaction(function () use ($arrayEmpresaTurismo, $empresaTurismo) { $empresaTurismo->fill($arrayEmpresaTurismo); $empresaTurismo->save(); return $empresaTurismo; }); } /** * Remove registros parciais quando o cadastro de turismo falha após persistência em mysql. */ public function rollbackFailedStore( ?Empresa $empresa, bool $empresaWasNewlyCreated, ?Endereco $endereco, bool $enderecoWasNewlyCreated, ?EmpresaTurismo $empresaTurismo = null, ): void { try { if ($empresaTurismo !== null) { EmpresaTurismo::where('id', $empresaTurismo->id)->delete(); } if ($empresaWasNewlyCreated && $empresa !== null) { if ($endereco !== null && $endereco->owner_id === $empresa->id) { $endereco->owner_id = null; $endereco->save(); } $empresa->delete(); } if ($enderecoWasNewlyCreated && $endereco !== null) { $endereco->delete(); } } catch (\Throwable $e) { Log::error('Rollback parcial do cadastro de empresa de turismo falhou.', [ 'empresa_id' => $empresa?->id, 'module' => 'empresas_de_turismo', ]); } } /** * Verifica se a empresa de turismo aparece na listagem com o termo de busca informado. */ public function empresaTurismoMatchesSearch(EmpresaTurismo $empresaTurismo, string $q): bool { return $this->empresaTurismoMatchesFilters($empresaTurismo, new Request(['q' => $q])); } /** * Verifica se o registro aparece na listagem com os filtros atuais. */ public function empresaTurismoMatchesFilters(EmpresaTurismo $empresaTurismo, Request $request): bool { return $this->buildIndexQuery($this->requestFromListFilters($request)) ->where('id', $empresaTurismo->id) ->exists(); } /** * Indica se o POST usa filtros prefixados (formulário de edição), sem misturar campos do cadastro. */ private function usesPrefixedListFilters(Request $request): bool { return $request->has('list_filter_sent'); } /** * Extrai parâmetros de filtro da listagem a partir do request (GET ou POST). * * @return array<string, mixed> */ private function listFilterParamsFromRequest(Request $request): array { if ($this->usesPrefixedListFilters($request)) { $params = []; $listFilter = $request->input('list_filter', []); if (!is_array($listFilter)) { $listFilter = []; } foreach (EmpresaTurismoResource::ADMIN_FILTER_KEYS as $key) { $value = $listFilter[$key] ?? null; if ($value !== null && $value !== '') { $params[$key] = $value; } } return $params; } $params = []; foreach (EmpresaTurismoResource::ADMIN_FILTER_KEYS as $key) { if ($request->filled($key)) { $params[$key] = $request->input($key); } } return $params; } /** * Request contendo apenas filtros de listagem (ignora campos do formulário de cadastro). */ private function requestFromListFilters(Request $request): Request { return new Request($this->listFilterParamsFromRequest($request)); } /** * Mescla filtros de listagem enviados via POST (list_filter) no request. */ private function requestWithListFilters(Request $request): Request { if (!$this->usesPrefixedListFilters($request)) { return $request; } return $this->requestFromListFilters($request); } /** * Indica se há filtros de listagem ativos (exceto paginação). */ public function hasActiveListFilters(Request $request): bool { foreach ($this->listFilterParamsFromRequest($request) as $key => $value) { if ($key === 'page') { continue; } if ($value !== null && $value !== '') { return true; } } return false; } /** * Redireciona à listagem após salvar, limpando filtro incompatível ou após cadastro novo. */ public function redirectToIndexAfterSave( Request $request, string $successMessage, bool $clearSearchFilter = false, ?EmpresaTurismo $empresaTurismo = null, ): RedirectResponse { if ($clearSearchFilter) { return redirect() ->route('admin.empresasDeTurismo.index') ->with('success', $successMessage); } if ($this->hasActiveListFilters($request)) { if ($empresaTurismo !== null && !$this->empresaTurismoMatchesFilters($empresaTurismo, $request)) { return redirect() ->route('admin.empresasDeTurismo.index', $this->filterQueryParamsWithoutQ($request)) ->with('success', $successMessage) ->with( 'info', __('Os filtros de listagem foram ajustados porque a empresa não corresponde ao resultado filtrado. Ela está visível na listagem completa.') ); } return redirect() ->route('admin.empresasDeTurismo.index', $this->filterQueryParams($request)) ->with('success', $successMessage); } return redirect() ->route('admin.empresasDeTurismo.index', $this->filterQueryParamsWithoutQ($request)) ->with('success', $successMessage); } public function destroy(Request $request, EmpresaTurismo $empresaTurismo): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($empresaTurismo) { EmpresaTurismo::destroy($empresaTurismo->id); }); return $this->redirectIndex($request, __('* A empresa foi excluída da lista de empresas de turismo com sucesso! Esta ação não pode ser desfeita!')); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir esta empresa da lista de empresas de turismo.') . ' ' . $e->getMessage()); } } public function status(Request $request, EmpresaTurismo $empresaTurismo): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($request, $empresaTurismo) { $empresaTurismo->fill(['status' => $request->input('checkStatus')]); $empresaTurismo->save(); }); return $this->redirectIndex($request, __('* O status da empresa foi atualizado com sucesso!')); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar alterar o status desta empresa.') . ' ' . $e->getMessage()); } } public function updateClipboard(EmpresasTurismoClipBoardRequest $request, EmpresaTurismo $empresaTurismo): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($request, $empresaTurismo) { $empresa = $empresaTurismo->companhia; if (!$empresa) { throw new \RuntimeException(__('Empresa associada não encontrada para atualizar documentos.')); } $empresa->fill(EmpresaTurismoFileHelper::buildEmpresaDocumentPayload($request, $empresa)); $empresa->save(); }); $empresaNome = $empresaTurismo->companhia->razaoSocial ?? '-'; return $this->redirectIndex($request, __('* Os documentos da empresa :empresa foram atualizados com sucesso!', ['empresa' => $empresaNome])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar a documentação desta empresa.') . ' ' . $e->getMessage()); } } public function updateEnderecoEmpresa( EmpresaTurismoEnderecoRequest $request, EmpresaTurismo $empresaTurismo, Endereco $endereco, array $arrayEndereco ): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($arrayEndereco, $endereco) { $endereco->fill($arrayEndereco); $endereco->save(); }); $empresaNome = $empresaTurismo->companhia->razaoSocial ?? '-'; return $this->redirectIndex($request, __('* O endereço da empresa :empresa foi atualizado com sucesso!', ['empresa' => $empresaNome])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o endereço desta empresa.') . ' ' . $e->getMessage()); } } public function storeProprietario( EmpresaTurismoProprietarioRequest $request, EmpresaTurismo $empresaTurismo, User $user, array $arrayUser ): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($empresaTurismo, $user, $arrayUser) { $user->fill($arrayUser); $user->save(); if ($empresaTurismo->companhia) { $empresaTurismo->companhia->fill(['responsavel_id' => $user->id]); $empresaTurismo->companhia->save(); } }); return $this->redirectIndex($request, __('* O proprietário da empresa :empresa foi atualizado com sucesso!', [ 'empresa' => $empresaTurismo->companhia->razaoSocial ?? '-', ])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o proprietário desta empresa.') . ' ' . $e->getMessage()); } } public function createProprietario( EmpresaTurismoProprietarioRequest $request, EmpresaTurismo $empresaTurismo, array $arrayUser ): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($empresaTurismo, $arrayUser) { $usuario = User::create($arrayUser); Permissao::create([ 'user_id' => $usuario->id, 'permissao' => 'GUEST', 'visualizar' => 1, 'adicionar' => 1, 'editar' => 1, 'excluir' => 1, 'status' => 'ATIVADO', ]); if ($empresaTurismo->companhia) { $empresaTurismo->companhia->fill(['responsavel_id' => $usuario->id]); $empresaTurismo->companhia->save(); } }); return $this->redirectIndex($request, __('* O proprietário da empresa :empresa foi atualizado com sucesso!', [ 'empresa' => $empresaTurismo->companhia->razaoSocial ?? '-', ])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o proprietário desta empresa.') . ' ' . $e->getMessage()); } } public function storePreposto(EmpresaTurismoPrepostoRequest $request, EmpresaTurismo $empresaTurismo, array $arrayUser): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($empresaTurismo, $arrayUser) { $usuario = User::create($arrayUser); Permissao::create([ 'user_id' => $usuario->id, 'permissao' => 'GUEST', 'visualizar' => 1, 'adicionar' => 1, 'editar' => 1, 'excluir' => 1, 'status' => 'ATIVADO', ]); if ($empresaTurismo->companhia) { $empresaTurismo->companhia->fill(['preposto_id' => $usuario->id]); $empresaTurismo->companhia->save(); } }); return $this->redirectIndex($request, __('* O preposto da empresa :empresa foi atualizado com sucesso!', [ 'empresa' => $empresaTurismo->companhia->razaoSocial ?? '-', ])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o preposto desta empresa.') . ' ' . $e->getMessage()); } } public function updatePreposto( EmpresaTurismoPrepostoRequest $request, EmpresaTurismo $empresaTurismo, User $user, array $arrayUser ): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($empresaTurismo, $user, $arrayUser) { $user->fill($arrayUser); $user->save(); if ($empresaTurismo->companhia) { $empresaTurismo->companhia->fill(['preposto_id' => $user->id]); $empresaTurismo->companhia->save(); } }); return $this->redirectIndex($request, __('* O preposto da empresa :empresa foi atualizado com sucesso!', [ 'empresa' => $empresaTurismo->companhia->razaoSocial ?? '-', ])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o preposto desta empresa.') . ' ' . $e->getMessage()); } } public function removePreposto(EmpresaTurismoPrepostoRequest $request, EmpresaTurismo $empresaTurismo): RedirectResponse { try { DB::connection('mysql')->transaction(function () use ($empresaTurismo) { if ($empresaTurismo->companhia) { $empresaTurismo->companhia->fill(['preposto_id' => null]); $empresaTurismo->companhia->save(); } }); return $this->redirectIndex($request, __('* O preposto da empresa :empresa foi removido com sucesso!', [ 'empresa' => $empresaTurismo->companhia->razaoSocial ?? '-', ])); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar remover o preposto desta empresa.') . ' ' . $e->getMessage()); } } public function storeEmbarcacao(EmbarcacaoRequest $request, EmpresaTurismo $empresaTurismo): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($request, $empresaTurismo) { Embarcacao::create([ 'empresas_turismo_id' => $empresaTurismo->id, 'categoria' => $request->categoria, 'nome' => $request->nome, 'inscricao' => $request->inscricao, 'rci' => $request->rci, 'tie' => $request->tie, 'validadeTie' => $request->validadeTie, 'nomeMarinheiro' => $request->nomeMarinheiro, 'documentoMarinheiro' => $request->documentoMarinheiro, 'validadeDocumentoMarinheiro' => $request->validadeDocumentoMarinheiro, 'capacidade' => $request->capacidade, 'tipo' => $request->tipo, 'atividade' => $request->atividade, 'areaNavegacao' => $request->areaNavegacao, 'owner_id' => Auth::id(), 'anoConstrucao' => $request->anoConstrucao, 'selo' => $request->selo, 'status' => $request->status, ]); }); return $this->redirectEmbarcacoesIndex( $empresaTurismo, $request, __('* A embarcação :nome foi criada com sucesso!', ['nome' => $request->nome]) ); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar criar esta embarcação.') . ' ' . $e->getMessage()); } } public function updateEmbarcacao( EmbarcacaoRequest $request, EmpresaTurismo $empresaTurismo, Embarcacao $embarcacao ): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($request, $embarcacao) { $embarcacao->fill([ 'categoria' => $request->categoria, 'nome' => $request->nome, 'inscricao' => $request->inscricao, 'rci' => $request->rci, 'tie' => $request->tie, 'validadeTie' => $request->validadeTie, 'nomeMarinheiro' => $request->nomeMarinheiro, 'documentoMarinheiro' => $request->documentoMarinheiro, 'validadeDocumentoMarinheiro' => $request->validadeDocumentoMarinheiro, 'capacidade' => $request->capacidade, 'tipo' => $request->tipo, 'atividade' => $request->atividade, 'areaNavegacao' => $request->areaNavegacao, 'owner_id' => Auth::id(), 'anoConstrucao' => $request->anoConstrucao, 'selo' => $request->selo, 'status' => $request->status, ]); $embarcacao->save(); }); return $this->redirectEmbarcacoesIndex( $empresaTurismo, $request, __('* A embarcação :nome foi atualizada com sucesso!', ['nome' => $request->nome]) ); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar esta embarcação.') . ' ' . $e->getMessage()); } } public function destroyEmbarcacao(Request $request, EmpresaTurismo $empresaTurismo, Embarcacao $embarcacao): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($embarcacao) { Embarcacao::destroy($embarcacao->id); }); return $this->redirectEmbarcacoesIndex( $empresaTurismo, $request, __('* A embarcação :nome foi excluída com sucesso! Esta ação não pode ser desfeita!', ['nome' => $embarcacao->nome]) ); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir esta embarcação.') . ' ' . $e->getMessage()); } } public function statusEmbarcacao( Request $request, EmpresaTurismo $empresaTurismo, Embarcacao $embarcacao ): RedirectResponse { try { DB::connection('mysql_turismo_nautico')->transaction(function () use ($request, $embarcacao) { $embarcacao->fill(['status' => $request->input('checkStatus')]); $embarcacao->save(); }); return $this->redirectEmbarcacoesIndex( $empresaTurismo, $request, __('* O status da embarcação :nome foi alterado com sucesso!', ['nome' => $embarcacao->nome]) ); } catch (\Exception $e) { return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar alterar o status desta embarcação.') . ' ' . $e->getMessage()); } } /** * Parâmetros de listagem sem o termo de busca (mantém paginação quando aplicável). */ public function filterQueryParamsWithoutQ(Request $request): array { $params = $this->listFilterParamsFromRequest($request); unset($params['q']); return $params; } /** * Lê o termo de busca persistido (POST com list_filter ou query direta). */ private function persistedSearchTerm(Request $request): ?string { $q = $this->listFilterParamsFromRequest($request)['q'] ?? null; return filled($q) ? (string) $q : null; } /** * Monta parâmetros de filtro persistidos para redirecionamentos. */ public function filterQueryParams(Request $request): array { return $this->listFilterParamsFromRequest($request); } private function redirectIndex(Request $request, string $message): RedirectResponse { return redirect() ->route('admin.empresasDeTurismo.index', $this->filterQueryParams($request)) ->with('success', $message); } private function redirectEmbarcacoesIndex(EmpresaTurismo $empresaTurismo, Request $request, string $message): RedirectResponse { return redirect() ->route('admin.embarcacoes.index', array_merge( ['empresaTurismo' => $empresaTurismo->id], $this->filterQueryParams($request) )) ->with('success', $message); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings