Agrego archivos iniciales
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Evento;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EventoController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$fechaStr = $request->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';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user