No hay puestos configurados.
- - +Sin turno activo
+ Haga clic en de un turno para llamarlo, o use "Llamar siguiente" +diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php index 3492979..0a2803d 100644 --- a/modules/turnero/views/recepcion.php +++ b/modules/turnero/views/recepcion.php @@ -1,45 +1,1603 @@ 0) { - header('Location: ' . BASE_URL . 'erp.php?m=turnero&v=recepcion&desk_id=' . $desk); +require_once __DIR__ . '/../../../config/config.php'; +if (!isUserLoggedIn()) { + header('Location: ' . BASE_URL . 'login.php'); exit; } -// Sin desk_id: selector de puestos disponibles -$pdo = Database::getInstance()->getConnection(); -$desks = $pdo->query("SELECT id, nombre FROM turnero_lugares WHERE activo = 1 ORDER BY sort_order ASC, nombre ASC") - ->fetchAll(PDO::FETCH_ASSOC); +// Cargar catálogos para la ficha +try { + $pdo = Database::getInstance()->getConnection(); -Layout::open('Seleccionar Puesto', 'fas fa-desktop'); + // Para destino solo nos interesa recepción y toma de muestras + $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); + $lugarMuestras = $pdo->query( + "SELECT id, nombre FROM turnero_lugares WHERE tipo='muestras' AND activo=1 ORDER BY sort_order LIMIT 1" + )->fetch(PDO::FETCH_ASSOC); + + $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 (opcional, vía ?desk_id=X) + $deskId = (int)($_GET['desk_id'] ?? 0); + $desk = null; + if ($deskId) { + $stmtDesk = $pdo->prepare( + "SELECT id, nombre FROM turnero_lugares WHERE id = ? AND tipo = 'recepcion' AND activo = 1" + ); + $stmtDesk->execute([$deskId]); + $desk = $stmtDesk->fetch(PDO::FETCH_ASSOC) ?: null; + if (!$desk) { $deskId = 0; } // ID inválido → sin desk + } +} 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'; ?> -
No hay puestos configurados.
- - +Sin turno activo
+ Haga clic en de un turno para llamarlo, o use "Llamar siguiente" +