getEventos(); $promociones = Promocion::whereNotNull('descripcion') ->where('descripcion', '!=', '') ->orderBy('id', 'desc') ->get(); $carouselItems = CarouselItem::where('activo', true) ->orderBy('orden', 'asc') ->get(); $noticias = Noticia::orderBy('id', 'desc') ->take(3) ->get(); $torneos = Torneo::orderBy('id', 'desc') ->get(); $tournamentService = new TournamentService(); $standingsData = []; foreach ($torneos as $t) { $standingsData[$t->id] = $tournamentService->getStandings($t->id); } return view('welcome', compact('eventos', 'promociones', 'carouselItems', 'noticias', 'torneos', 'standingsData')); } private function getEventos() { $eventos = Evento::with(['equipoLocal.club', 'equipoVisitante.club']) ->orderBy('fecha_evento', 'asc') ->orderBy('hora_inicio', 'asc') ->get() ->map(function ($e) { $estado = $this->calcularEstado($e->fecha_evento, $e->hora_inicio, $e->hora_fin); if (in_array($estado, ['Activo', 'Próximo'])) { $e->estado = $estado; return $e; } return null; }) ->filter() ->values(); return $eventos; } 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'; } }