diff --git a/migrations/20260811_rol_calidad.sql b/migrations/20260811_rol_calidad.sql new file mode 100644 index 0000000..8a69754 --- /dev/null +++ b/migrations/20260811_rol_calidad.sql @@ -0,0 +1,18 @@ +-- Rol de Calidad: consulta de turnos y tiempos de atención. +-- Solo lectura, y dentro del turnero solo dashboard e historial. +-- Idempotente: puede correrse más de una vez. + +INSERT INTO roles (name, slug, description, color, home_page, is_system) +SELECT 'Calidad', 'calidad', + 'Consulta de turnos y tiempos de atención. Solo lectura: dashboard e historial.', + '#7c3aed', '/erp.php?m=turnero&v=dashboard', 0 + WHERE NOT EXISTS (SELECT 1 FROM roles WHERE slug = 'calidad'); + +INSERT INTO role_modules (role_id, module_slug, permission, can_view, can_create, can_edit, can_delete, can_export) +SELECT r.id, m.slug, 'read', 1, 0, 0, 0, IF(m.slug = 'turnero', 1, 0) + FROM roles r + JOIN (SELECT 'turnero' AS slug UNION ALL SELECT 'soporte') m + WHERE r.slug = 'calidad' + AND NOT EXISTS ( + SELECT 1 FROM role_modules rm WHERE rm.role_id = r.id AND rm.module_slug = m.slug + ); diff --git a/modules/turnero/_acceso.php b/modules/turnero/_acceso.php new file mode 100644 index 0000000..5fcc6cb --- /dev/null +++ b/modules/turnero/_acceso.php @@ -0,0 +1,32 @@ + 'Dashboard', 'icon' => 'fas fa-tachometer-alt', 'route' => '/erp.php?m=turnero&v=dashboard']; + $_trLinks[] = ['name' => 'Historial', 'icon' => 'fas fa-history', 'route' => '/erp.php?m=turnero&v=historial']; + // ── Recepcionista: pantallas comunes + desks según IP ───────── -if ($_trIsRecep) { +} elseif ($_trIsRecep) { $_trLinks[] = ['name' => 'Chat Turnero', 'icon' => 'fab fa-whatsapp', 'route' => '/erp.php?m=turnero&v=chat']; $_trLinks[] = ['name' => 'Verificar Paciente', 'icon' => 'fas fa-id-card', 'route' => '/erp.php?m=turnero&v=verificar_paciente']; $_trLinks[] = ['name' => 'Pantalla TV', 'icon' => 'fas fa-tv', 'route' => '/erp.php?m=turnero&v=display_global']; diff --git a/modules/turnero/views/configuracion.php b/modules/turnero/views/configuracion.php index c12b01c..95e7b3d 100644 --- a/modules/turnero/views/configuracion.php +++ b/modules/turnero/views/configuracion.php @@ -12,6 +12,9 @@ require_once __DIR__ . '/../../../config/config.php'; if (!isUserLoggedIn()) { header('Location: ' . BASE_URL . 'login.php'); exit; } +require_once __DIR__ . '/../_acceso.php'; +turneroExigirRol(['supervisor']); + $db = Database::getInstance(); $pdo = $db->getConnection(); diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 57d822b..b65e7b7 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -9,6 +9,9 @@ if (!isUserLoggedIn()) { exit; } +require_once __DIR__ . '/../_acceso.php'; +turneroExigirRol(['bacteriologo', 'supervisor']); + // Tablet asignada → forzar su lugar por token de navegador (o IP como fallback) $lugarForzado = 0; try { diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php index 6e07880..de911c3 100644 --- a/modules/turnero/views/recepcion.php +++ b/modules/turnero/views/recepcion.php @@ -9,6 +9,9 @@ if (!isUserLoggedIn()) { exit; } +require_once __DIR__ . '/../_acceso.php'; +turneroExigirRol(['recepcionista', 'lab_recepcion', 'supervisor']); + // Tablet asignada → forzar su escritorio por token de navegador (o IP como fallback) $_recepForzado = 0; try {