uo
This commit is contained in:
@@ -142,6 +142,18 @@ function obtenerOCrearSesionHoy(): int
|
||||
return (int) $pdo->lastInsertId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve ['id', 'fin_at'] de la sesión de hoy si existe, o null.
|
||||
* Para uso en pantallas: NO crea sesión nueva.
|
||||
*/
|
||||
function sesionHoy(): ?array
|
||||
{
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare('SELECT id, fin_at FROM turnero_sesiones WHERE fecha = CURDATE() LIMIT 1');
|
||||
$stmt->execute();
|
||||
return $stmt->fetch(PDO::FETCH_ASSOC) ?: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera el siguiente número correlativo de turno para una sesión.
|
||||
* Usa bloqueo a nivel de fila para evitar duplicados en concurrencia.
|
||||
|
||||
@@ -25,7 +25,27 @@ if ($area === 'lugar' && !$lugarId) {
|
||||
$pdo = db();
|
||||
|
||||
// ── Sesión de hoy ─────────────────────────────────────────────
|
||||
$sesionId = obtenerOCrearSesionHoy();
|
||||
// Si no existe sesión hoy o está cerrada (fin_at set), pantalla limpia.
|
||||
$_ses = sesionHoy();
|
||||
$sesionCerrada = (!$_ses || $_ses['fin_at'] !== null);
|
||||
// Usar sesion_id real solo si está abierta; 0 hace que las queries devuelvan vacío.
|
||||
$sesionId = ($sesionCerrada) ? 0 : (int)$_ses['id'];
|
||||
|
||||
if ($sesionCerrada) {
|
||||
jsonOk([
|
||||
'sesion_cerrada' => true,
|
||||
'activo' => null,
|
||||
'cola' => [],
|
||||
'stats' => [
|
||||
'total' => 0, 'en_espera' => 0, 'en_recepcion' => 0,
|
||||
'en_espera_lugar' => 0, 'en_servicio' => 0,
|
||||
'finalizados' => 0, 'no_atendidos' => 0,
|
||||
'tiempo_promedio_atencion' => null,
|
||||
],
|
||||
'timestamp' => date('c'),
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ── Cola según área ───────────────────────────────────────────
|
||||
if ($area === 'recepcion') {
|
||||
|
||||
@@ -9,8 +9,12 @@
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('GET');
|
||||
|
||||
$pdo = db();
|
||||
$sesionId = obtenerOCrearSesionHoy();
|
||||
$pdo = db();
|
||||
|
||||
// Si no hay sesión hoy o está cerrada → $sesionId = 0 (queries devuelven vacío).
|
||||
$_ses = sesionHoy();
|
||||
$sesionCerrada = (!$_ses || $_ses['fin_at'] !== null);
|
||||
$sesionId = ($sesionCerrada) ? 0 : (int)$_ses['id'];
|
||||
|
||||
// ── 1. Escritorios de Recepción activos + su turno en_recepcion ─
|
||||
// Cada escritorio puede tener un turno distinto (varios recepcionistas).
|
||||
@@ -175,6 +179,7 @@ $stats = $stmtStats->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
jsonOk([
|
||||
'sesion_id' => $sesionId,
|
||||
'sesion_cerrada' => $sesionCerrada,
|
||||
'activos_recepcion'=> $activosRecepcion, // array de desks con su turno
|
||||
'lugares' => $lugaresActivos, // array de estaciones de muestras
|
||||
'cola' => $cola,
|
||||
|
||||
@@ -22,7 +22,20 @@ $desk = $stmtDesk->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!$desk) jsonError('Escritorio no encontrado.', 404);
|
||||
|
||||
$sesionId = obtenerOCrearSesionHoy();
|
||||
$_ses = sesionHoy();
|
||||
$sesionCerrada = (!$_ses || $_ses['fin_at'] !== null);
|
||||
if ($sesionCerrada) {
|
||||
jsonOk([
|
||||
'sesion_cerrada' => true,
|
||||
'desk_id' => (int)$desk['id'],
|
||||
'desk_nombre'=> $desk['nombre'],
|
||||
'turno' => null,
|
||||
'stats' => ['en_espera' => 0, 'en_atencion' => 0, 'finalizados' => 0],
|
||||
'timestamp' => date('c'),
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
$sesionId = (int)$_ses['id'];
|
||||
|
||||
// Turno activo en este escritorio (el más reciente llamado_recepcion_at)
|
||||
$stmtT = $pdo->prepare(
|
||||
|
||||
Reference in New Issue
Block a user