fix: Incluir coordinadores en todas las listas de gestión
- Crear método getUsuariosGestion() que incluye ayudantes y coordinadores - Actualizar asignaciones_completo.php para mostrar coordinadores - Actualizar todas las páginas de gestión para usar nuevo método - Corregir que coordinadores aparezcan en asignaciones masivas - Mantener consistencia en todos los módulos de administración
This commit is contained in:
@@ -10,7 +10,7 @@ require_once BASE_PATH . '/src/Asignacion.php';
|
||||
require_once BASE_PATH . '/src/CSRF.php';
|
||||
|
||||
$auth = new Auth();
|
||||
$auth->requireAdmin();
|
||||
$auth->requireCoordinador();
|
||||
|
||||
$userModel = new User();
|
||||
$horariosModel = new DiasHorarios();
|
||||
@@ -75,7 +75,8 @@ $domingoActual->modify('-' . $diaSemana . ' days');
|
||||
$currentWeekStart = $domingoActual->format('Y-m-d');
|
||||
|
||||
$asignacionActual = $asignacionModel->getAsignacionPorSemana($currentWeekStart);
|
||||
$ayudantes = $userModel->getAyudantesActivos();
|
||||
// Para gestión de turnos, incluir ayudantes y coordinadores
|
||||
$ayudantes = $userModel->getUsuariosGestion();
|
||||
|
||||
// Obtener próximos turnos (siguientes 3 semanas)
|
||||
$proximosTurnos = [];
|
||||
|
||||
@@ -10,7 +10,7 @@ require_once BASE_PATH . '/src/Asignacion.php';
|
||||
require_once BASE_PATH . '/src/CSRF.php';
|
||||
|
||||
$auth = new Auth();
|
||||
$auth->requireAdmin();
|
||||
$auth->requireCoordinador();
|
||||
|
||||
$userModel = new User();
|
||||
$horariosModel = new DiasHorarios();
|
||||
@@ -95,7 +95,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
}
|
||||
}
|
||||
|
||||
$ayudantes = $userModel->getAyudantesActivos();
|
||||
// Para asignaciones masiva, mostrar todos los ayudantes y coordinadores
|
||||
$ayudantes = $userModel->getUsuariosGestion();
|
||||
$horarios = $horariosModel->getActivos();
|
||||
|
||||
// Encontrar el domingo actual
|
||||
|
||||
203
public/admin/coordinador.php
Normal file
203
public/admin/coordinador.php
Normal file
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
if (!defined('BASE_PATH')) {
|
||||
define('BASE_PATH', dirname(__DIR__, 2));
|
||||
}
|
||||
require_once BASE_PATH . '/config/config.php';
|
||||
require_once BASE_PATH . '/src/Auth.php';
|
||||
require_once BASE_PATH . '/src/User.php';
|
||||
require_once BASE_PATH . '/src/DiasHorarios.php';
|
||||
require_once BASE_PATH . '/src/Asignacion.php';
|
||||
|
||||
$auth = new Auth();
|
||||
$auth->requireCoordinador();
|
||||
|
||||
$userModel = new User();
|
||||
$horariosModel = new DiasHorarios();
|
||||
$asignacionModel = new Asignacion();
|
||||
|
||||
// Estadísticas básicas
|
||||
$totalUsuarios = count($userModel->getUsuariosGestion());
|
||||
$totalHorarios = count($horariosModel->getActivos());
|
||||
$asignacionActual = $asignacionModel->getAsignacionActual();
|
||||
|
||||
// Obtener orden actual de rotación
|
||||
$ayudantesOrdenados = $asignacionModel->getAyudantesPorOrden();
|
||||
|
||||
$currentPage = 'dashboard';
|
||||
$pageTitle = 'Panel Coordinador';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Panel Coordinador - Contenedor Ibiza</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
.stat-card {
|
||||
transition: transform 0.2s;
|
||||
}
|
||||
.stat-card:hover {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
.rol-badge {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php include BASE_PATH . '/public/partials/navbar.php'; ?>
|
||||
|
||||
<div class="container mt-4">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<div>
|
||||
<h2 class="mb-1">🎯 Panel Coordinador</h2>
|
||||
<p class="text-muted mb-0">Gestión de turnos y ayudantes</p>
|
||||
</div>
|
||||
<span class="badge bg-info rol-badge">Coordinador</span>
|
||||
</div>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="card stat-card shadow-sm border-primary">
|
||||
<div class="card-body text-center">
|
||||
<h3 class="text-primary"><?= $totalUsuarios ?></h3>
|
||||
<p class="mb-0">Ayudantes Activos</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="card stat-card shadow-sm border-success">
|
||||
<div class="card-body text-center">
|
||||
<h3 class="text-success"><?= $totalHorarios ?></h3>
|
||||
<p class="mb-0">Días Configurados</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="card stat-card shadow-sm border-warning">
|
||||
<div class="card-body text-center">
|
||||
<h3 class="text-warning"><?= count($ayudantesOrdenados) ?></h3>
|
||||
<p class="mb-0">Orden Rotación</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h5 class="mb-0">📋 Turno Actual</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<?php if ($asignacionActual): ?>
|
||||
<div class="alert alert-success mb-3">
|
||||
<h6 class="mb-1">✅ Esta semana:</h6>
|
||||
<strong><?= htmlspecialchars($asignacionActual['nombre']) ?></strong>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="alert alert-warning mb-3">
|
||||
<h6 class="mb-1">⚠️ Sin asignar</h6>
|
||||
<span>No hay ayudante asignado esta semana</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<a href="/admin/asignaciones.php" class="btn btn-primary">
|
||||
🔄 Gestionar Turnos
|
||||
</a>
|
||||
<a href="/ayudante.php" class="btn btn-outline-primary">
|
||||
👥 Vista Ayudante
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-success text-white">
|
||||
<h5 class="mb-0">👥 Ayudantes</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h6 class="mb-3">Orden de Rotación:</h6>
|
||||
<div class="d-flex flex-wrap gap-2 mb-3">
|
||||
<?php foreach ($ayudantesOrdenados as $index => $ayudante): ?>
|
||||
<span class="badge bg-secondary">
|
||||
<?= ($index + 1) ?>. <?= htmlspecialchars($ayudante['nombre']) ?>
|
||||
</span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<a href="/admin/usuarios.php" class="btn btn-success">
|
||||
➕ Agregar Ayudante
|
||||
</a>
|
||||
<a href="/admin/asignaciones_completo.php#reordenar" class="btn btn-outline-success">
|
||||
🔄 Modificar Orden
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-info text-white">
|
||||
<h5 class="mb-0">🎯 Acciones Rápidas</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-center p-3">
|
||||
<div class="mb-3">🔄</div>
|
||||
<h6>Generar Turnos</h6>
|
||||
<p class="text-muted small">Crear próximas semanas automáticamente</p>
|
||||
<a href="/admin/asignaciones_completo.php" class="btn btn-sm btn-primary">
|
||||
Generar
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-center p-3">
|
||||
<div class="mb-3">📄</div>
|
||||
<h6>Exportar PDF</h6>
|
||||
<p class="text-muted small">Descargar turnos en formato PDF</p>
|
||||
<a href="/export-pdf.php" target="_blank" class="btn btn-sm btn-danger">
|
||||
Exportar
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-center p-3">
|
||||
<div class="mb-3">👥</div>
|
||||
<h6>Ver Turnos</h6>
|
||||
<p class="text-muted small">Ver asignaciones actuales</p>
|
||||
<a href="/ayudante.php" class="btn btn-sm btn-info">
|
||||
Ver Turnos
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="text-center p-3">
|
||||
<div class="mb-3">🔧</div>
|
||||
<h6>Gestionar</h6>
|
||||
<p class="text-muted small">Administrar todo</p>
|
||||
<a href="/admin/asignaciones_completo.php" class="btn btn-sm btn-secondary">
|
||||
Gestionar
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -18,7 +18,7 @@ $asignacionModel = new Asignacion();
|
||||
$db = \Database::getInstance()->getConnection();
|
||||
|
||||
$totalUsuarios = count($userModel->getAll());
|
||||
$totalAyudantes = count($userModel->getAyudantesActivos());
|
||||
$totalAyudantes = count($userModel->getUsuariosGestion());
|
||||
$totalHorarios = count($horariosModel->getAll());
|
||||
$asignacionActual = $asignacionModel->getAsignacionActual();
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ $horariosModel = new DiasHorarios();
|
||||
$asignacionModel = new Asignacion();
|
||||
|
||||
$totalUsuarios = count($userModel->getAll());
|
||||
$totalAyudantes = count($userModel->getAyudantesActivos());
|
||||
$totalAyudantes = count($userModel->getUsuariosGestion());
|
||||
$totalHorarios = count($horariosModel->getAll());
|
||||
$asignacionActual = $asignacionModel->getAsignacionActual();
|
||||
|
||||
|
||||
@@ -132,8 +132,14 @@ class User {
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function getUsuariosGestion() {
|
||||
// Incluye ayudantes y coordinadores para gestión de turnos
|
||||
$stmt = $this->db->query("SELECT * FROM users WHERE (rol = 'ayudante' OR rol = 'coordinador') AND activo = 1 ORDER BY nombre");
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function isValidRole($role) {
|
||||
return in_array($role, ['admin', 'ayudante']);
|
||||
return in_array($role, ['admin', 'ayudante', 'coordinador']);
|
||||
}
|
||||
|
||||
public function hasRole($userId, $role) {
|
||||
|
||||
Reference in New Issue
Block a user