diff --git a/app/Actions/DestroySalaAction.php b/app/Actions/DestroySalaAction.php new file mode 100644 index 0000000..6a69a0d --- /dev/null +++ b/app/Actions/DestroySalaAction.php @@ -0,0 +1,20 @@ +reservas as $reserva): + foreach ($reserva->arquivos as $arquivo): + Storage::delete($arquivo->caminho); + endforeach; + endforeach; + $sala->reservas()->delete(); + $sala->delete(); + } +} diff --git a/app/Http/Controllers/SalaController.php b/app/Http/Controllers/SalaController.php index fa3fc5b..ab71a56 100644 --- a/app/Http/Controllers/SalaController.php +++ b/app/Http/Controllers/SalaController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers; +use App\Actions\DestroySalaAction; use App\Http\Requests\SalaRequest; use App\Models\Categoria; use App\Models\Finalidade; use App\Models\Recurso; -use App\Models\Reserva; use App\Models\Sala; use App\Models\Restricao; use App\Models\PeriodoLetivo; @@ -60,8 +60,7 @@ public function store(SalaRequest $request) $validated = $request->validated(); // Conferindo se nesta categoria já há uma sala de mesmo nome. - if(Sala::where('nome', $validated['nome'])->where('categoria_id', $validated['categoria_id'])->get()->isNotEmpty()) - { + if (Sala::where('nome', $validated['nome'])->where('categoria_id', $validated['categoria_id'])->get()->isNotEmpty()) { \UspTheme::activeUrl('salas/create'); session()->put('alert-danger', 'Já existe sala com este nome nesta categoria.'); return redirect()->route('salas.create')->withInput(); @@ -69,7 +68,7 @@ public function store(SalaRequest $request) $sala = Sala::create($validated); - if(array_key_exists('recursos', $validated)) { + if (array_key_exists('recursos', $validated)) { $sala->recursos()->attach($validated['recursos']); } @@ -98,10 +97,9 @@ public function show(Sala $sala) 'color' => $reserva->status == 'pendente' ? config('salas.cores.pendente') : ($reserva->finalidade->cor ?? config('salas.cores.semFinalidade')), 'textColor' => 'black', 'extendedProps' => [ - 'responsaveis'=> $reserva->responsaveis->pluck('nome') + 'responsaveis' => $reserva->responsaveis->pluck('nome') ] ]; - } $finalidades = Finalidade::all(); @@ -112,7 +110,7 @@ public function show(Sala $sala) 'recursos' => Recurso::all(), 'finalidades' => $finalidades, 'eventos' => $eventos - ]); + ]); } /** @@ -125,7 +123,7 @@ public function edit(Sala $sala) $this->authorize('admin'); $sala->load('recursos'); - $recursos = Recurso::get()->map(function($recurso) use ($sala) { + $recursos = Recurso::get()->map(function ($recurso) use ($sala) { $recurso->checked = data_get($sala->recursos->firstWhere('id', $recurso->id), 'pivot.recurso_id') ?? null; return $recurso; }); @@ -144,7 +142,7 @@ public function edit(Sala $sala) 'responsaveis' => $sala->responsaveis, 'periodos' => PeriodoLetivo::all(), 'origem' => session('origem') - ]); + ]); } /** @@ -161,7 +159,7 @@ public function update(SalaRequest $request, Sala $sala) $validated = $request->validated(); - if($validated['aprovacao'] && count($sala->responsaveis) < 1) { + if ($validated['aprovacao'] && count($sala->responsaveis) < 1) { \UspTheme::activeUrl('salas/listar'); session()->put('alert-danger', 'A sala deve ter ao menos um responsável se necessitar de aprovação para reserva.'); return redirect()->route('salas.edit', ['sala' => $sala->id]); @@ -171,18 +169,17 @@ public function update(SalaRequest $request, Sala $sala) if (!$validated['aprovacao'] && count($sala->responsaveis) > 0) { $responsavel_ids = []; - foreach($sala->responsaveis as $responsavel) { + foreach ($sala->responsaveis as $responsavel) { $responsavel_ids[] = $responsavel->id; } $sala->responsaveis()->detach($responsavel_ids); } - if(array_key_exists('recursos', $validated)) { + if (array_key_exists('recursos', $validated)) { $sala->recursos()->sync($validated['recursos']); - } - else { + } else { $recurso_ids = []; - foreach($sala->recursos as $recurso) { + foreach ($sala->recursos as $recurso) { $recurso_ids[] = $recurso->id; } $sala->recursos()->detach($recurso_ids); @@ -206,7 +203,7 @@ public function update(SalaRequest $request, Sala $sala) 'prazo_aprovacao' => $validated['prazo_aprovacao'], 'exige_justificativa_recusa' => $validated['exige_justificativa_recusa'], ] - ); + ); \UspTheme::activeUrl(session('origem') === 'filtro_de_recursos' ? '/filtro_de_recursos' : '/salas'); @@ -223,42 +220,57 @@ public function destroy(Sala $sala) { $this->authorize('admin'); - if($sala->reservas->isNotEmpty()) { - $sala->load('recursos'); - $recursos = Recurso::get()->map(function($recurso) use ($sala) { - $recurso->checked = data_get($sala->recursos->firstWhere('id', $recurso->id), 'pivot.recurso_id') ?? null; - return $recurso; - }); - $sala->restricao = Restricao::firstOrCreate([ - 'sala_id' => $sala->id - ]); - - \UspTheme::activeUrl((session('origem') === 'filtro_de_recursos') ? '/filtro_de_recursos' : 'salas/listar'); - session()->put('alert-danger', 'Não é possível deletar essa sala pois ela contém reservas'); - return redirect("/" . (session('origem') === 'filtro_de_recursos' ? 'filtro_de_recursos' : 'salas') . "/{$sala->id}"); + + if ($sala->reservas->isEmpty()) { + $sala->delete(); + + \UspTheme::activeUrl('/'); + session()->put('alert-success', 'Sala excluída com sucesso'); + return redirect("/"); } - $sala->delete(); + $sala->load('recursos'); + $recursos = Recurso::get()->map(function ($recurso) use ($sala) { + $recurso->checked = data_get($sala->recursos->firstWhere('id', $recurso->id), 'pivot.recurso_id') ?? null; + return $recurso; + }); + $sala->restricao = Restricao::firstOrCreate([ + 'sala_id' => $sala->id + ]); + + \UspTheme::activeUrl((session('origem') === 'filtro_de_recursos') ? '/filtro_de_recursos' : 'salas/listar'); + session()->put('alert-danger', 'Não é possível deletar essa sala pois ela contém reservas'); + return redirect("/" . (session('origem') === 'filtro_de_recursos' ? 'filtro_de_recursos' : 'salas') . "/{$sala->id}"); + } - \UspTheme::activeUrl('/'); - session()->put('alert-success', 'Sala excluída com sucesso'); - return redirect("/"); + public function delete(Sala $sala) + { + DestroySalaAction::execute($sala); + return redirect("/salas/listar"); + } + + public function confirm_delete(Sala $sala) + { + return view('sala.confirm_delete', [ + 'sala' => $sala, + 'reservas' => $sala->reservas + ]); } public function listar(Request $request) { $salas = Sala::make() - ->when($request->categorias_filter, function($query) use ($request){ - $query->whereIn('categoria_id', $request->categorias_filter); - }) - ->when($request->recursos_filter, function($query) use ($request){ - $query->whereHas('recursos', function($query) use ($request){ - $query->whereIn('recursos.id', $request->recursos_filter); - }); - }) - ->when($request->capacidade_filter, function($query) use ($request){ - $query->where('capacidade', '>=', $request->capacidade_filter); - });; + ->when($request->categorias_filter, function ($query) use ($request) { + $query->whereIn('categoria_id', $request->categorias_filter); + }) + ->when($request->recursos_filter, function ($query) use ($request) { + $query->whereHas('recursos', function ($query) use ($request) { + $query->whereIn('recursos.id', $request->recursos_filter); + }); + }) + ->when($request->capacidade_filter, function ($query) use ($request) { + $query->where('capacidade', '>=', $request->capacidade_filter); + });; \UspTheme::activeUrl(session('origem') === 'filtro_de_recursos' ? '/filtro_de_recursos' : 'salas/listar'); diff --git a/resources/views/sala/confirm_delete.blade.php b/resources/views/sala/confirm_delete.blade.php new file mode 100644 index 0000000..a9e4c77 --- /dev/null +++ b/resources/views/sala/confirm_delete.blade.php @@ -0,0 +1,77 @@ +@extends('main') + +@section('content') + + + @can('admin') + Cadastrar Sala + @endcan + +
+
Salas
+
+

Ao excluir esta sala, todas as reservas listadas abaixo serão juntamente excluídas. Deseja continuar?

+
+ + + + + + + + + + + + + + + @foreach($reservas as $reserva) + + + + + + + + + + + @endforeach + +
DataHorárioSalaCategoriaFinalidadeTítuloCapacidadeDescrição
{{ $reserva->data }}{{ $reserva->horario_inicio }} - {{ $reserva->horario_fim }}{{ $reserva->sala->nome }}{{ $reserva->sala->categoria->nome }} +
+
+
{{ $reserva->nome }}{{ $reserva->sala->capacidade }} pessoas{{ $reserva->descricao }}
+
+ @can('admin') +
+ @csrf + @method('delete') + +
+ @endcan +
+
+@endsection + +@section('javascripts_bottom') + +@endsection diff --git a/resources/views/sala/listar.blade.php b/resources/views/sala/listar.blade.php index 8e324fb..e7f728a 100644 --- a/resources/views/sala/listar.blade.php +++ b/resources/views/sala/listar.blade.php @@ -1,8 +1,8 @@ @extends('main') @section('content') - @can ('admin') - Cadastrar Sala + @can('admin') + Cadastrar Sala @endcan
@@ -11,8 +11,10 @@
Categorias: @@ -21,13 +23,16 @@ Recursos:
Capacidade Mínima: - +
@@ -54,28 +59,40 @@ @forelse($salas as $sala) - {{ $sala->nome }} - {{$sala->categoria->nome}} - {{$sala->capacidade}} pessoas + {{ $sala->nome }} + + {{ $sala->categoria->nome }} + {{ $sala->capacidade }} pessoas @can('admin') - - + @csrf @method('delete') - + @if ($sala->reservas->isEmpty()) + + @else + + + + @endif @endcan - + - @if(Gate::allows('members', $sala->id) && !($sala->restricao->bloqueada ?? false)) - + @if (Gate::allows('members', $sala->id) && !($sala->restricao->bloqueada ?? false)) + @endif @@ -92,7 +109,7 @@ @section('javascripts_bottom')