From 393c226b7c8dfec8df8b8efc45cc00a0624f04ef Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Fri, 10 Jul 2026 11:41:46 -0500 Subject: [PATCH] Fix: ocultar todas las secciones de tomas excepto las del examen seleccionado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lógica anterior usaba sepToExam (vacío cuando labels son genéricos "Toma · X"). Nueva lógica: reúne TODOS los sep_ids de _mpAllGroups como allTomaSeps, luego muestra solo los del grupo que coincide con el examen seleccionado (vía _mpGetGroupsForExam). Si el examen no tiene grupos o no hay selección, todas las secciones de toma quedan ocultas. Co-Authored-By: Claude Sonnet 4.6 --- ver_formulario_enviado.php | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php index 604b441..0c048a6 100644 --- a/ver_formulario_enviado.php +++ b/ver_formulario_enviado.php @@ -1288,36 +1288,38 @@ function _mpGetGroupsForExam(examName) { return result; } -// Visibilidad de secciones de tomas según examen seleccionado -// (funciona aunque la BD no tenga condiciones, usando sep_id de _mpAllGroups) +// Visibilidad de secciones de tomas según examen seleccionado. +// Oculta TODOS los sep_ids de _mpAllGroups por defecto; +// muestra solo los del grupo cuya clave coincide con el examen. function _mpApplyExamVisibility(selectedExam) { - // Construir mapa sep_id → exam_name - var sepToExam = {}; + // 1. Todos los sep_ids que son secciones de toma + var allTomaSeps = {}; for (var gk in _mpAllGroups) { - var parts = gk.split('|').filter(Boolean); - var isExamGrp = parts.some(function(p) { return _mpExamOptions.indexOf(p) !== -1; }); - if (isExamGrp) { - _mpAllGroups[gk].forEach(function(sec) { - if (sec.sep_id) sepToExam[sec.sep_id] = parts[0]; - }); + _mpAllGroups[gk].forEach(function(s) { if (s.sep_id) allTomaSeps[s.sep_id] = gk; }); + } + if (!Object.keys(allTomaSeps).length) return; + + // 2. Sep_ids del examen seleccionado + var examSeps = {}; + if (selectedExam) { + var groups = _mpGetGroupsForExam(selectedExam); + for (var gk2 in groups) { + groups[gk2].forEach(function(s) { if (s.sep_id) examSeps[s.sep_id] = true; }); } } - if (!Object.keys(sepToExam).length) return; - // Recorrer todos los elementos con data-campo-id dentro del doc-body + // 3. Recorrer DOM y aplicar visibilidad var docBody = document.querySelector('.doc-body'); if (!docBody) return; var inHidden = false; docBody.querySelectorAll('[data-campo-id]').forEach(function(el) { var cid = el.getAttribute('data-campo-id'); if (el.classList.contains('esquema-sep')) { - if (sepToExam[cid] !== undefined) { - // Separador de toma: ocultar si no hay examen o si no coincide - inHidden = (!selectedExam || sepToExam[cid] !== selectedExam); + if (allTomaSeps[cid] !== undefined) { + inHidden = !examSeps[cid]; // ocultar si no es del examen el.style.display = inHidden ? 'none' : ''; } else { - // Separador genérico (ej: Datos del paciente) — siempre visible - inHidden = false; + inHidden = false; // separador genérico — siempre visible el.style.display = ''; } } else {