Files
OnAPB-Carrere_Demartin/app/Http/Controllers/Admin/PaseController.php
T
Laucha1312 90c5f85512 2
2026-06-04 15:15:23 -03:00

130 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Pase;
use App\Models\Jugador;
use App\Models\Club;
class PaseController extends Controller
{
private function checkGeneralAdmin(Request $request)
{
if (!session('admin_logged_in') || !in_array(session('admin_role'), [1, 2])) {
abort(403, 'Acceso denegado');
}
}
private function checkSuperAdmin(Request $request)
{
if (!session('admin_logged_in') || session('admin_role') != 1) {
abort(403, 'Acceso denegado. Solo Súper Administradores.');
}
}
public function index(Request $request)
{
$this->checkGeneralAdmin($request);
$query = Pase::with(['jugador', 'clubOrigen', 'clubDestino']);
if (session('admin_role') == 2) {
$idClub = session('admin_id_club');
$query->where(function ($q) use ($idClub) {
$q->where('id_club_origen', $idClub)
->orWhere('id_club_destino', $idClub);
});
}
$pases = $query->orderBy('created_at', 'desc')->paginate(20);
return view('admin.pases.index', compact('pases'));
}
public function create(Request $request)
{
$this->checkGeneralAdmin($request);
return view('admin.pases.create');
}
public function store(Request $request)
{
$this->checkGeneralAdmin($request);
$request->validate([
'documento' => 'required|string|exists:jugadores,documento'
], [
'documento.exists' => 'No se encontró un jugador con ese DNI.'
]);
$jugador = Jugador::where('documento', $request->documento)->first();
// Si el jugador ya pertenece al club destino, error
$idClubDestino = session('admin_role') == 2 ? session('admin_id_club') : $request->input('id_club_destino');
if (!$idClubDestino) {
return back()->withErrors(['id_club_destino' => 'Debe especificar el club destino.']);
}
if ($jugador->id_club_actual == $idClubDestino) {
return back()->withErrors(['documento' => 'Este jugador ya pertenece a tu club.']);
}
// Crear la petición de pase
Pase::create([
'id_jugador' => $jugador->id_jugador,
'id_club_origen' => $jugador->id_club_actual,
'id_club_destino' => $idClubDestino,
'estado' => 'Pendiente'
]);
return redirect()->route('admin.pases.index')->with('admin_msg', 'Solicitud de pase creada correctamente y está pendiente de aprobación.');
}
public function aprobar(Request $request, $id)
{
$this->checkSuperAdmin($request);
$pase = Pase::findOrFail($id);
if ($pase->estado !== 'Pendiente') {
return back()->withErrors(['pase' => 'Este pase ya fue procesado.']);
}
$pase->update(['estado' => 'Aprobado']);
// Actualizar jugador
if ($pase->jugador) {
// Desvincular de equipos del club de origen
$equiposOldClubIds = $pase->jugador->equipos()
->where('id_club', $pase->id_club_origen)
->pluck('equipos.id_equipo');
if ($equiposOldClubIds->count() > 0) {
$pase->jugador->equipos()->detach($equiposOldClubIds);
}
$pase->jugador->update([
'id_club_origen' => $pase->id_club_origen,
'id_club_actual' => $pase->id_club_destino
]);
}
return redirect()->route('admin.pases.index')->with('admin_msg', 'Pase aprobado correctamente y jugador desvinculado de equipos anteriores.');
}
public function rechazar(Request $request, $id)
{
$this->checkSuperAdmin($request);
$pase = Pase::findOrFail($id);
if ($pase->estado !== 'Pendiente') {
return back()->withErrors(['pase' => 'Este pase ya fue procesado.']);
}
$pase->update(['estado' => 'Rechazado']);
return redirect()->route('admin.pases.index')->with('admin_msg', 'Pase rechazado.');
}
}