UP
This commit is contained in:
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user