File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/Cultura/ArteSacra/ArteSacraService.php
Back
<?php namespace App\Http\Services\Cultura\ArteSacra; use App\Models\Cultura\ArteSacra\{ Acervo, ClasseArte, Designacao, Material, ModoAquisicao, Proprietario, Tecnica, TipoAcervo, Tombamento, }; use App\Http\Requests\Cultura\ArteSacra\AcervoRequest; use App\Http\Controllers\Controller; use Illuminate\Database\Eloquent\Builder; use Illuminate\Pagination\LengthAwarePaginator; use App\Http\Resources\Cultura\ArteSacra\ArteSacraResource; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; class ArteSacraService extends Controller { protected $Acervo = Acervo::class; protected $ClasseArte = ClasseArte::class; protected $Designacao = Designacao::class; protected $Material = Material::class; protected $ModoAquisicao = ModoAquisicao::class; protected $Proprietario = Proprietario::class; protected $Tecnica = Tecnica::class; protected $TipoAcervo = TipoAcervo::class; protected $Tombamento = Tombamento::class; public function listar(Request $request, $statusPeca = 0): LengthAwarePaginator { $paginate = 50; $busca = $request->input('busca'); $query = Acervo::query() ->where('status_peca', $statusPeca); $this->aplicarBusca($query, $busca); return $query->with([ 'tipo', 'modoAquisicao', 'material', 'tecnica', 'proprietario', 'designacao', 'classe', 'tombamento' ]) ->orderBy('created_at', 'desc') ->paginate($paginate) ->appends(['busca' => $busca]); } private function aplicarBusca(Builder $query, ?string $busca): void { if (!$busca) { return; } $query->where(function ($q) use ($busca) { $q->where('codigo_acervo', 'like', "%{$busca}%") ->orWhere('nome_peca', 'like', "%{$busca}%") ->orWhere('ano_arte', 'like', "%{$busca}%") ->orWhere('roca', 'like', "%{$busca}%") ->orWhere('periodo_peca', 'like', "%{$busca}%") ->orWhere('descricao', 'like', "%{$busca}%") ->orWhere('localizacao_id', 'like', "%{$busca}%") ->orWhere('autoria', 'like', "%{$busca}%") ->orWhere('dimensao', 'like', "%{$busca}%") ->orWhere('altura', 'like', "%{$busca}%") ->orWhere('comprimento', 'like', "%{$busca}%") ->orWhere('largura', 'like', "%{$busca}%") ->orWhere('diametro', 'like', "%{$busca}%") ->orWhere('profundidade', 'like', "%{$busca}%") ->orWhere('peso', 'like', "%{$busca}%") ->orWhere('imagem', 'like', "%{$busca}%") ->orWhere('data_recebimento', 'like', "%{$busca}%") ->orWhere('entregue_por', 'like', "%{$busca}%"); $q->orWhereHas('tipo', fn($sub) => $sub->where('tipo', 'like', "%{$busca}%") ); $q->orWhereHas('modoAquisicao', fn($sub) => $sub->where('modo_aquisicao', 'like', "%{$busca}%") ); $q->orWhereHas('material', fn($sub) => $sub->where('material', 'like', "%{$busca}%") ); $q->orWhereHas('tecnica', fn($sub) => $sub->where('tecnica', 'like', "%{$busca}%") ); $q->orWhereHas('proprietario', fn($sub) => $sub->where('proprietario', 'like', "%{$busca}%") ); $q->orWhereHas('designacao', fn($sub) => $sub->where('designacao', 'like', "%{$busca}%") ); $q->orWhereHas('classe', fn($sub) => $sub->where('classe', 'like', "%{$busca}%") ); $q->orWhereHas('tombamento', fn($sub) => $sub->where('tombamento', 'like', "%{$busca}%") ); }); } public function store(AcervoRequest $request, Array $array_acervo): RedirectResponse { try { DB::beginTransaction(); $acervo = $this->Acervo::create($array_acervo); DB::commit(); ArteSacraResource::logAcervo('criado', $acervo); return redirect()->route('admin.cultura.arteSacra.index') ->with('success', 'Acervo cadastrado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); if ($array_acervo["imagem"] !== 'pmar/assets/img/icons/default.png' && Storage::exists('public/arte_sacra/' . $array_acervo["imagem"])) { Storage::delete('public/arte_sacra/' . $array_acervo["imagem"]); } return redirect()->route('admin.cultura.arteSacra.create') ->with('error', 'Ocorreu um erro inesperado. Tente novamente mais tarde. ' . $e->getMessage()) ->withInput(); } } public function update(AcervoRequest $request, Acervo $acervo, Array $array_acervo): RedirectResponse { try { DB::beginTransaction(); $acervo->fill($array_acervo); $acervo->save(); DB::commit(); ArteSacraResource::logAcervo('atualizado', $acervo, [ 'campos_alterados' => array_keys($array_acervo) ]); session()->forget('arte_id'); return redirect()->route('admin.cultura.arteSacra.index') ->with('success', 'Registro atualizado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.edit', $acervo->id) ->withInput() ->with('error', 'Erro ao tentar atualizar este item do acervo. ' . $e->getMessage()); } } public function destroy(Acervo $acervo): RedirectResponse { try { DB::beginTransaction(); Acervo::destroy($acervo->id); DB::commit(); if ($acervo->imagem !== 'pmar/assets/img/icons/default.png' && Storage::exists('public/arte_sacra/' . $acervo->imagem)) { Storage::delete('public/arte_sacra/' . $acervo->imagem); } ArteSacraResource::logAcervo('excluído', $acervo); return redirect() ->route('admin.cultura.arteSacra.index') ->with('success', 'Arte sacra excluída com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.index') ->withInput() ->with('error', 'Erro ao tentar atualizar este item do acervo. ' . $e->getMessage()); } } public function inativarOuAtivar($id): RedirectResponse { try { DB::beginTransaction(); $acervo = Acervo::findOrFail($id); if ($acervo->status_peca == 0) { $acervo->status_peca = 1; $mensagem = 'inativada'; } else { $acervo->status_peca = 0; $mensagem = 'ativada'; } $acervo->save(); DB::commit(); ArteSacraResource::logAcervo('status atualizado', $acervo); $route = ($mensagem === 'ativada') ? 'admin.cultura.arteSacra.trash' : 'admin.cultura.arteSacra.index'; return redirect() ->route($route) ->with('success', "Peça {$mensagem} com sucesso."); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.index') ->withInput() ->with('error', 'Erro ao tentar atualizar o status deste item do acervo. ' . $e->getMessage()); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings