fix(turnero): login detecta dispositivo por token antes de buscar por IP

La detección de tablet fija solo buscaba por IP; tablets con token
configurado no hacían match y caían al redirect de rol (recepcion).
Ahora busca primero por cookie turnero_token y como fallback por IP.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-28 08:16:37 -05:00
co-authored by Claude Sonnet 4.6
parent e41663cff0
commit 88fd0e4151
+24 -9
View File
@@ -41,16 +41,31 @@ if ($_POST && !$loginBlocked) {
$_SESSION['login_ip'] = $clientIp;
$_SESSION['login_time'] = time();
// Tablet fija: redirigir al lugar asignado por IP y bloquear el resto
// Tablet fija: redirigir al lugar asignado por token o IP
try {
$_dispStmt = Database::getInstance()->getConnection()->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]);
$_disp = $_dispStmt->fetch(PDO::FETCH_ASSOC);
$_pdo2 = Database::getInstance()->getConnection();
$_disp = null;
$_devToken = trim($_COOKIE['turnero_token'] ?? '');
if ($_devToken) {
$_s = $_pdo2->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.token = ? AND td.activo = 1 LIMIT 1"
);
$_s->execute([$_devToken]);
$_disp = $_s->fetch(PDO::FETCH_ASSOC) ?: null;
}
if (!$_disp) {
$_s = $_pdo2->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"
);
$_s->execute([$clientIp]);
$_disp = $_s->fetch(PDO::FETCH_ASSOC) ?: null;
}
if ($_disp) {
$_SESSION['turnero_dispositivo'] = $_disp;
$url = $_disp['tipo'] === 'recepcion'