This commit is contained in:
Lizandro Guarnizo
2026-06-16 14:51:46 -05:00
parent 56489a1557
commit eaa8a23af6
3 changed files with 141 additions and 101 deletions
+29 -24
View File
@@ -566,7 +566,7 @@ function showAnnouncement({ codigo, destino, paciente, color }) {
}
/* ── State ── */
let lastTurnoKey = null;
let lastSeenKeys = new Set(); // clave por turno+destino+llamado_at
let llamados = [];
function renderSnapshot(snap) {
@@ -576,48 +576,53 @@ function renderSnapshot(snap) {
const lblEl = document.getElementById('lugar-label');
const ringEl = document.getElementById('pulse-ring');
const turnos = [];
// Recopilar TODOS los turnos activos: recepción + lugares
const allTurnos = [];
(snap.activos_recepcion || []).forEach(d => {
if (d.turno) turnos.push({ ...d.turno, destino: d.desk_nombre, tipo: 'rec' });
if (d.turno) allTurnos.push({ ...d.turno, destino: d.desk_nombre });
});
(snap.lugares || []).forEach(l => {
if (l.turno) turnos.push({ ...l.turno, destino: l.lugar_nombre, tipo: 'mue' });
if (l.turno) allTurnos.push({ ...l.turno, destino: l.lugar_nombre });
});
if (turnos.length > 0) {
const t = turnos[0];
// Detectar turno nuevo en CUALQUIER estación y anunciar
const currentKeys = new Set();
let anuncioNuevo = false;
allTurnos.forEach(t => {
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
currentKeys.add(key);
if (!lastSeenKeys.has(key)) {
const c = t.prioridad_color || '<?= $_labColor ?>';
queueAnnouncement({ _key: key, codigo: t.codigo, destino: t.destino, paciente: t.paciente_nombre, color: c });
llamados.unshift({ codigo: t.codigo, destino: t.destino, paciente: t.paciente_nombre, color: c });
if (llamados.length > 30) llamados.pop();
anuncioNuevo = true;
}
});
lastSeenKeys = currentKeys;
if (anuncioNuevo) renderLlamados();
// zona-activo: mostrar el turno llamado más recientemente
const sorted = allTurnos.slice().sort((a, b) => {
return new Date(b.llamado_at || 0) - new Date(a.llamado_at || 0);
});
if (sorted.length > 0) {
const t = sorted[0];
codEl.textContent = t.codigo;
lugEl.textContent = t.destino;
pacEl.textContent = t.paciente_nombre || '';
lblEl.textContent = 'Llamado a';
ringEl.classList.add('active');
const c = t.prioridad_color || '<?= $_labColor ?>';
codEl.style.color = c;
document.getElementById('zona-activo').style.setProperty('--brand', c);
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
if (key !== lastTurnoKey) {
queueAnnouncement({
_key: key,
codigo: t.codigo,
destino: t.destino,
paciente: t.paciente_nombre,
color: c
});
lastTurnoKey = key;
llamados.unshift({ codigo: t.codigo, destino: t.destino, paciente: t.paciente_nombre, color: c });
if (llamados.length > 30) llamados.pop();
renderLlamados();
}
} else {
codEl.textContent = '—';
lugEl.textContent = '—';
pacEl.textContent = '';
lblEl.textContent = 'Llamado a';
codEl.style.color = '<?= $_labColor ?>';
lastTurnoKey = null;
ringEl.classList.remove('active');
}