diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 4e78851..6c22b44 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -10,28 +10,31 @@ if (!isUserLoggedIn()) { } // Tablet asignada → forzar su lugar, bloquear cualquier otro +// Chequeo en vivo por IP (no solo sesión, para sesiones preexistentes) $lugarForzado = 0; -if (!empty($_SESSION['turnero_dispositivo'])) { - $_d = $_SESSION['turnero_dispositivo']; - $_forzado = (int)$_d['lugar_id']; - if ($_d['tipo'] === 'recepcion') { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=recepcion&desk_id=' . $_forzado); exit; - } - if ((int)($_GET['lugar_id'] ?? 0) !== $_forzado) { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=lugar&lugar_id=' . $_forzado); exit; - } - $lugarForzado = $_forzado; -} -// Restricción a nivel de usuario (turnero_lugar_id en admin_users) -if (!$lugarForzado) { - $_userLugar = (int)($_SESSION['admin_user']['turnero_lugar_id'] ?? 0); - if ($_userLugar) { - if ((int)($_GET['lugar_id'] ?? 0) !== $_userLugar) { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=lugar&lugar_id=' . $_userLugar); exit; +try { + $_clientIp = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'] ?? '')[0]); + $_dispPdo = Database::getInstance()->getConnection(); + $_dispStmt = $_dispPdo->prepare( + "SELECT td.lugar_id, td.nombre, tl.tipo + FROM turnero_dispositivos td + JOIN turnero_lugares tl ON tl.id = td.lugar_id + WHERE td.ip = ? AND td.activo = 1 LIMIT 1" + ); + $_dispStmt->execute([$_clientIp]); + $_dispRow = $_dispStmt->fetch(PDO::FETCH_ASSOC); + if ($_dispRow) { + $_SESSION['turnero_dispositivo'] = $_dispRow; + $_forzado = (int)$_dispRow['lugar_id']; + if ($_dispRow['tipo'] === 'recepcion') { + header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=recepcion&desk_id=' . $_forzado); exit; } - $lugarForzado = $_userLugar; + if ((int)($_GET['lugar_id'] ?? 0) !== $_forzado) { + header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=lugar&lugar_id=' . $_forzado); exit; + } + $lugarForzado = $_forzado; } -} +} catch (\Throwable $_) {} try { $pdo = Database::getInstance()->getConnection(); diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php index b44b292..7987cc3 100644 --- a/modules/turnero/views/recepcion.php +++ b/modules/turnero/views/recepcion.php @@ -10,18 +10,31 @@ if (!isUserLoggedIn()) { } // Tablet asignada → forzar su escritorio, bloquear cualquier otro +// Chequeo en vivo por IP (no solo sesión, para sesiones preexistentes) $_recepForzado = 0; -if (!empty($_SESSION['turnero_dispositivo'])) { - $_d = $_SESSION['turnero_dispositivo']; - $_forzado = (int)$_d['lugar_id']; - if ($_d['tipo'] !== 'recepcion') { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=lugar&lugar_id=' . $_forzado); exit; +try { + $_clientIp = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'] ?? '')[0]); + $_dispPdo = Database::getInstance()->getConnection(); + $_dispStmt = $_dispPdo->prepare( + "SELECT td.lugar_id, td.nombre, tl.tipo + FROM turnero_dispositivos td + JOIN turnero_lugares tl ON tl.id = td.lugar_id + WHERE td.ip = ? AND td.activo = 1 LIMIT 1" + ); + $_dispStmt->execute([$_clientIp]); + $_dispRow = $_dispStmt->fetch(PDO::FETCH_ASSOC); + if ($_dispRow) { + $_SESSION['turnero_dispositivo'] = $_dispRow; // mantener sesión actualizada + $_forzado = (int)$_dispRow['lugar_id']; + if ($_dispRow['tipo'] !== 'recepcion') { + header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=lugar&lugar_id=' . $_forzado); exit; + } + if ((int)($_GET['desk_id'] ?? 0) !== $_forzado) { + header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=recepcion&desk_id=' . $_forzado); exit; + } + $_recepForzado = $_forzado; } - if ((int)($_GET['desk_id'] ?? 0) !== $_forzado) { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=recepcion&desk_id=' . $_forzado); exit; - } - $_recepForzado = $_forzado; -} +} catch (\Throwable $_) {} // Restricción a nivel de usuario (turnero_lugar_id en admin_users) if (!$_recepForzado) { $_userDesk = (int)($_SESSION['admin_user']['turnero_lugar_id'] ?? 0);