requireAdmin(); $userModel = new User(); $horariosModel = new DiasHorarios(); $asignacionModel = new Asignacion(); $message = ''; $messageType = ''; if (isset($_GET['success']) && $_GET['success'] === 'orden_actualizado') { $message = 'Orden actualizado correctamente. Se recalcularon las asignaciones futuras.'; $messageType = 'success'; } if (isset($_GET['success']) && $_GET['success'] === 'automatica') { $message = 'Turnos generados automáticamente correctamente.'; $messageType = 'success'; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!CSRF::isValidRequest()) { $message = 'Error de validación del formulario'; $messageType = 'danger'; } else { $action = $_POST['action'] ?? ''; if ($action === 'asignar_actual') { $userId = $_POST['user_id'] ?? 0; // Encontrar el domingo actual $hoy = new DateTime(); $diaSemana = (int)$hoy->format('w'); $domingoActual = clone $hoy; $domingoActual->modify('-' . $diaSemana . ' days'); $currentWeekStart = $domingoActual->format('Y-m-d'); if ($userId) { $asignacionModel->asignar($userId, $currentWeekStart); $message = 'Turno actual asignado correctamente'; $messageType = 'success'; header("Location: " . $_SERVER['PHP_SELF'] . "?success=actual"); exit; } } elseif ($action === 'rotar_automatica') { $resultado = $asignacionModel->asignarSemanasFuturasAutomaticas(12); if ($resultado['success'] > 0) { header("Location: " . $_SERVER['PHP_SELF'] . "?success=automatica"); exit; } else { $message = 'No se pudieron generar turnos: ' . implode(', ', $resultado['errors']); $messageType = 'danger'; } } } } // Obtener datos principales $hoy = new DateTime(); $diaSemana = (int)$hoy->format('w'); $domingoActual = clone $hoy; $domingoActual->modify('-' . $diaSemana . ' days'); $currentWeekStart = $domingoActual->format('Y-m-d'); $asignacionActual = $asignacionModel->getAsignacionPorSemana($currentWeekStart); $ayudantes = $userModel->getAyudantesActivos(); // Obtener próximos turnos (siguientes 3 semanas) $proximosTurnos = []; for ($i = 1; $i <= 3; $i++) { $semanaDomingo = clone $domingoActual; $semanaDomingo->modify("+{$i} weeks"); $semanaInicio = $semanaDomingo->format('Y-m-d'); $asignacion = $asignacionModel->getAsignacionPorSemana($semanaInicio); $proximosTurnos[] = [ 'semana' => $semanaInicio, 'fin' => date('Y-m-d', strtotime('+5 days', strtotime($semanaInicio))), 'asignacion' => $asignacion ]; } $currentPage = 'asignaciones'; $pageTitle = 'Gestión de Turnos'; ?>
📆 Semana: = date('d/m/Y', strtotime($currentWeekStart)) ?> al = date('d/m/Y', strtotime('+5 days', strtotime($currentWeekStart))) ?>
Crea automáticamente las próximas 12 semanas siguiendo el orden actual