get('fecha', now()->toDateString()); $fechaSeleccionada = Carbon::parse($fechaStr); // Generar rango de fechas (Ayer, Hoy, Mañana + otros) $fechasNav = []; for ($i = -3; $i <= 3; $i++) { $d = now()->addDays($i); $fechasNav[] = [ 'label' => $this->getFechaLabel($d), 'fecha' => $d->toDateString(), 'active' => $d->isSameDay($fechaSeleccionada) ]; } $eventos = Evento::with(['equipoLocal.club', 'equipoVisitante.club']) ->whereDate('fecha_evento', $fechaSeleccionada->toDateString()) ->orderBy('hora_inicio', 'asc') ->get() ->map(function ($e) { $e->estado = $this->calcularEstado($e->fecha_evento, $e->hora_inicio, $e->hora_fin); return $e; }); return view('eventos.index', compact('eventos', 'fechasNav', 'fechaSeleccionada')); } private function getFechaLabel(Carbon $date) { $fecha = $date->format('d/m'); if ($date->isToday()) return "HOY $fecha"; if ($date->isYesterday()) return "AYER $fecha"; if ($date->isTomorrow()) return "MAÑANA $fecha"; return $date->translatedFormat('D d/m'); } public function show($id) { $evento = Evento::with(['equipoLocal.club', 'equipoVisitante.club', 'qrCodes']) ->findOrFail($id); $evento->estado = $this->calcularEstado($evento->fecha_evento, $evento->hora_inicio, $evento->hora_fin); $isAdmin = session()->has('admin_logged_in') && session('admin_logged_in'); $isUser = session()->has('user_logged_in') && session('user_logged_in'); return view('eventos.show', compact('evento', 'isAdmin', 'isUser')); } private function calcularEstado($fechaEvento, $horaInicio, $horaFin) { $tz = new \DateTimeZone(config('app.timezone', 'America/Argentina/Buenos_Aires')); // Asegurarnos de tener strings limpios (Y-m-d y H:i:s) $f = ($fechaEvento instanceof \Carbon\Carbon) ? $fechaEvento->format('Y-m-d') : substr($fechaEvento, 0, 10); $h1 = ($horaInicio instanceof \Carbon\Carbon) ? $horaInicio->format('H:i:s') : $horaInicio; $h2 = ($horaFin instanceof \Carbon\Carbon) ? $horaFin->format('H:i:s') : $horaFin; $inicio = new \DateTime("$f $h1", $tz); $fin = new \DateTime("$f $h2", $tz); if ($fin <= $inicio) { $fin->modify('+1 day'); } $ahora = new \DateTime('now', $tz); if ($ahora >= $inicio && $ahora <= $fin) return 'Activo'; if ($ahora < $inicio) return 'Próximo'; return 'Finalizado'; } }