Sin turno activo
Pulse "Llamar siguiente" o seleccione un turno de la colagetConnection(); $_dispRow = null; // 1. Chequeo por token de navegador (cookie) $_devToken = trim($_COOKIE['turnero_token'] ?? ''); if ($_devToken) { $_s = $_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.token = ? AND td.activo = 1 LIMIT 1" ); $_s->execute([$_devToken]); $_dispRow = $_s->fetch(PDO::FETCH_ASSOC) ?: null; } // 2. Fallback por IP if (!$_dispRow) { $_clientIp = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'] ?? '')[0]); $_s = $_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.token IS NULL AND td.activo = 1 LIMIT 1" ); $_s->execute([$_clientIp]); $_dispRow = $_s->fetch(PDO::FETCH_ASSOC) ?: null; } 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; } 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(); $lugares = $pdo->query( "SELECT id, nombre, descripcion, formulario_modo, tipo FROM turnero_lugares WHERE activo = 1 ORDER BY sort_order ASC" )->fetchAll(PDO::FETCH_ASSOC); } catch (\Throwable) { $lugares = []; } $lugarIdParam = isset($_GET['lugar_id']) ? (int)$_GET['lugar_id'] : 0; $lugarNombre = 'Estación de Servicio'; $lugarFormModo = 'link'; $lugarTipo = 'muestras'; foreach ($lugares as $l) { if ((int)$l['id'] === $lugarIdParam) { $lugarNombre = $l['nombre']; $lugarFormModo = $l['formulario_modo'] ?? 'link'; $lugarTipo = $l['tipo'] ?? 'muestras'; break; } } $adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Operador'; $adminFirmaSvg = null; try { $stmt = Database::getInstance()->getConnection() ->prepare("SELECT firma_svg FROM admin_users WHERE id = ? LIMIT 1"); $stmt->execute([(int)($_SESSION['admin_user']['id'] ?? 0)]); $adminFirmaSvg = $stmt->fetchColumn() ?: null; } catch (\Throwable $_) {} ?>
Sin turno activo
Pulse "Llamar siguiente" o seleccione un turno de la cola