feat(turnero): recepcionista con restricción de desk por IP

- module.php: si la IP está registrada en turnero_dispositivos para un
  lugar de tipo recepción, el sidebar muestra solo ese desk; resto de
  vistas (chat, verificar, TV) siempre visibles
- App.php: guard que redirige al recepcionista a su desk si intenta
  acceder manualmente a otro desk_id; IP libre no tiene restricción

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-08 08:03:48 -05:00
co-authored by Claude Sonnet 4.6
parent b2e7130762
commit b6179574c3
2 changed files with 61 additions and 2 deletions
+28 -2
View File
@@ -27,12 +27,38 @@ try {
$_trLinks = [];
// ── Recepcionista: solo sus escritorios + pantalla TV ─────────
// ── Recepcionista: pantallas comunes + desks según IP ─────────
if ($_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'];
if (!empty($_trDesks)) {
// Detectar si la IP está asignada a un desk de recepción
$_trRecepIpDesk = null;
try {
$_trRecepIpRow = $_trPdo->prepare(
"SELECT d.lugar_id FROM turnero_dispositivos d
JOIN turnero_lugares l ON l.id = d.lugar_id
WHERE d.ip = ? AND d.activo = 1 AND l.tipo = 'recepcion' LIMIT 1"
);
$_trRecepIpRow->execute([$_SERVER['REMOTE_ADDR'] ?? '']);
$_trRecepIpDesk = $_trRecepIpRow->fetchColumn() ?: null;
} catch (\Throwable $_) {}
if ($_trRecepIpDesk) {
// IP registrada: solo su desk
foreach ($_trDesks as $_d) {
if ((int)$_d['id'] === (int)$_trRecepIpDesk) {
$_trLinks[] = [
'name' => $_d['nombre'],
'icon' => 'fas fa-concierge-bell',
'route' => '/erp.php?m=turnero&v=recepcion&desk_id=' . (int)$_d['id'],
];
break;
}
}
} elseif (!empty($_trDesks)) {
// IP libre: todos los desks
foreach ($_trDesks as $_d) {
$_trLinks[] = [
'name' => $_d['nombre'],