Sin turno activo
Haga clic en de un turno para llamarlo, o use "Llamar siguiente"getConnection(); $lugarRecepcion = $pdo->query( "SELECT id, nombre FROM turnero_lugares WHERE tipo='recepcion' AND activo=1 ORDER BY sort_order LIMIT 1" )->fetch(PDO::FETCH_ASSOC); // Destinos agrupados: un representante por grupo_id, individuales si grupo_id=NULL $lugaresDestino = $pdo->query( "SELECT MIN(id) AS id, CASE WHEN grupo_id IS NOT NULL THEN 'Toma de Muestras' ELSE nombre END AS nombre, grupo_id FROM turnero_lugares WHERE tipo='muestras' AND activo=1 GROUP BY COALESCE(grupo_id, id) ORDER BY MIN(sort_order)" )->fetchAll(PDO::FETCH_ASSOC); $lugarMuestras = $lugaresDestino[0] ?? null; $examenes = $pdo->query( "SELECT id, codigo, nombre, categoria FROM exam_tipos WHERE activo = 1 ORDER BY categoria, nombre" )->fetchAll(PDO::FETCH_ASSOC); // Agrupar exámenes por categoría $examenesAgrupados = []; foreach ($examenes as $ex) { $cat = $ex['categoria'] ?: 'General'; $examenesAgrupados[$cat][] = $ex; } // Escritorio de recepción (vía ?desk_id=X) $deskId = (int)($_GET['desk_id'] ?? 0); $desk = null; $desksRecepcion = $pdo->query( "SELECT id, nombre FROM turnero_lugares WHERE tipo='recepcion' AND activo=1 ORDER BY sort_order" )->fetchAll(PDO::FETCH_ASSOC); if ($deskId) { foreach ($desksRecepcion as $d) { if ($d['id'] === $deskId) { $desk = $d; break; } } if (!$desk) { $deskId = 0; } } // Si solo hay un escritorio, asignarlo automáticamente if (!$deskId && count($desksRecepcion) === 1) { $desk = $desksRecepcion[0]; $deskId = (int)$desk['id']; } } catch (\Throwable $e) { $lugares = []; $examenesAgrupados = []; $deskId = 0; $desk = null; $lugarRecepcion = null; $lugarMuestras = null; } $deskNombre = $desk['nombre'] ?? null; // null = vista genérica $adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Operador'; ?>
Sin turno activo
Haga clic en de un turno para llamarlo, o use "Llamar siguiente"