up
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* GET /modules/turnero/api/get_display_recepcion.php?desk_id=X
|
||||
* Devuelve el turno activo en_recepcion para un escritorio específico.
|
||||
* Acceso público (pantalla TV).
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('GET');
|
||||
|
||||
$deskId = (int)($_GET['desk_id'] ?? 0);
|
||||
if (!$deskId) jsonError('desk_id requerido.', 400);
|
||||
|
||||
$pdo = db();
|
||||
|
||||
// Verificar que el escritorio existe y es de tipo recepcion
|
||||
$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);
|
||||
|
||||
if (!$desk) jsonError('Escritorio no encontrado.', 404);
|
||||
|
||||
$sesionId = obtenerOCrearSesionHoy();
|
||||
|
||||
// Turno activo en este escritorio (el más reciente llamado_recepcion_at)
|
||||
$stmtT = $pdo->prepare(
|
||||
"SELECT t.id,
|
||||
t.codigo,
|
||||
t.numero,
|
||||
t.estado,
|
||||
t.paciente_nombre,
|
||||
t.llamado_recepcion_at AS llamado_at,
|
||||
p.codigo AS prioridad_codigo,
|
||||
p.nombre AS prioridad_nombre,
|
||||
p.color AS prioridad_color
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
WHERE t.sesion_id = ?
|
||||
AND t.estado = 'en_recepcion'
|
||||
AND t.recepcion_desk_id = ?
|
||||
ORDER BY t.llamado_recepcion_at DESC
|
||||
LIMIT 1"
|
||||
);
|
||||
$stmtT->execute([$sesionId, $deskId]);
|
||||
$turno = $stmtT->fetch(PDO::FETCH_ASSOC) ?: null;
|
||||
|
||||
// Stats básicos para el footer
|
||||
$stmtStats = $pdo->prepare(
|
||||
"SELECT SUM(estado = 'espera') AS en_espera,
|
||||
SUM(estado IN ('en_recepcion','en_espera_lugar','en_servicio')) AS en_atencion,
|
||||
SUM(estado = 'finalizado') AS finalizados
|
||||
FROM turnero_turnos WHERE sesion_id = ?"
|
||||
);
|
||||
$stmtStats->execute([$sesionId]);
|
||||
$stats = $stmtStats->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
jsonOk([
|
||||
'desk_id' => (int)$desk['id'],
|
||||
'desk_nombre'=> $desk['nombre'],
|
||||
'turno' => $turno,
|
||||
'stats' => $stats,
|
||||
'timestamp' => date('c'),
|
||||
]);
|
||||
@@ -16,6 +16,7 @@ requireTurnero();
|
||||
$datos = inputJson();
|
||||
$area = $datos['area'] ?? '';
|
||||
$lugarId = isset($datos['lugar_id']) ? (int) $datos['lugar_id'] : null;
|
||||
$deskId = isset($datos['desk_id']) ? (int) $datos['desk_id'] : null;
|
||||
|
||||
// ── Validación ────────────────────────────────────────────────
|
||||
if (!in_array($area, ['recepcion', 'lugar'], true)) {
|
||||
@@ -42,12 +43,13 @@ try {
|
||||
$stmt = $pdo->prepare(
|
||||
'UPDATE turnero_turnos
|
||||
SET estado = "en_recepcion",
|
||||
llamado_recepcion_at = NOW(),
|
||||
inicio_recepcion_at = NOW(),
|
||||
atendido_recepcion_por = ?
|
||||
llamado_recepcion_at = NOW(),
|
||||
inicio_recepcion_at = NOW(),
|
||||
atendido_recepcion_por = ?,
|
||||
recepcion_desk_id = COALESCE(?, recepcion_desk_id)
|
||||
WHERE id = ? AND estado = "espera"'
|
||||
);
|
||||
$stmt->execute([adminId(), $turno['id']]);
|
||||
$stmt->execute([adminId(), $deskId, $turno['id']]);
|
||||
|
||||
if ($stmt->rowCount() === 0) {
|
||||
// Otro proceso lo tomó primero (race condition)
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* POST /modules/turnero/api/rellamar.php
|
||||
* Re-llama un turno que ya está en_recepcion: actualiza llamado_recepcion_at = NOW()
|
||||
* para que la pantalla TV detecte el cambio y vuelva a anunciar/animar.
|
||||
*
|
||||
* Body JSON:
|
||||
* turno_id int requerido
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('POST');
|
||||
requireTurnero();
|
||||
|
||||
$datos = inputJson();
|
||||
$turnoId = (int)($datos['turno_id'] ?? 0);
|
||||
$deskId = isset($datos['desk_id']) ? (int)$datos['desk_id'] : null;
|
||||
|
||||
if (!$turnoId) jsonError('turno_id es obligatorio.', 400);
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare(
|
||||
"UPDATE turnero_turnos
|
||||
SET llamado_recepcion_at = NOW(),
|
||||
recepcion_desk_id = COALESCE(?, recepcion_desk_id)
|
||||
WHERE id = ? AND estado = 'en_recepcion'"
|
||||
);
|
||||
$stmt->execute([$deskId, $turnoId]);
|
||||
|
||||
if ($stmt->rowCount() === 0) {
|
||||
jsonError('El turno no está en estado en_recepcion o no existe.', 404);
|
||||
}
|
||||
|
||||
// Devolver el turno actualizado para que recepcion.php abra la ficha
|
||||
$stmtT = $pdo->prepare(
|
||||
"SELECT t.*,
|
||||
p.codigo AS prioridad_codigo,
|
||||
p.nombre AS prioridad_nombre,
|
||||
p.color AS prioridad_color
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
WHERE t.id = ?"
|
||||
);
|
||||
$stmtT->execute([$turnoId]);
|
||||
$turno = $stmtT->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
jsonOk(['turno' => $turno]);
|
||||
Reference in New Issue
Block a user