fix: secciones de toma se renderizan en orden cronológico

El render iteraba $esquema en orden original del JSON — Otro siempre
quedaba de último. Ahora se re-ordena $esquema agrupando las secciones
de toma por su minuto (usando $_mpSepOrder construido del usort ya
existente) antes de entrar al foreach de render.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-21 09:11:21 -05:00
co-authored by Claude Sonnet 4.6
parent 2d125f9533
commit 815f136dca
+23
View File
@@ -302,6 +302,9 @@ if ($modoTurnero && $embebido && $_soloFirmaPro) {
}
// Ordenar por tiempo antes de agrupar para garantizar orden cronológico
usort($_mpSecs, fn($a, $b) => $a['min'] <=> $b['min']);
// Mapa sep_id → minuto para re-ordenar secciones en el render
$_mpSepOrder = [];
foreach ($_mpSecs as $_s) { $_mpSepOrder[$_s['sep_id']] = $_s['min']; }
$_mpGroups = [];
foreach ($_mpSecs as $_s) { $_mpGroups[$_s['tipo']][] = $_s; }
$_mpGroupsFull = $_mpGroups;
@@ -892,6 +895,26 @@ function _addExamWizardHtml(string $cid): string {
$_firmaGlobalPacienteUsada = false; // la firma global solo va al primer campo firma
if ($compact): ?><div class="campos-grid"><?php endif;
// Re-ordenar $esquema para que las secciones de toma aparezcan en orden cronológico
if (!empty($_mpSepOrder)) {
$__secs = []; $__cur = ['is_toma' => false, 'min' => null, 'campos' => []];
foreach ($esquema as $__c) {
if (($__c['tipo'] ?? '') === 'separador') {
if (!empty($__cur['campos'])) $__secs[] = $__cur;
$__it = isset($_mpSepOrder[$__c['id'] ?? '']);
$__cur = ['is_toma' => $__it, 'min' => $__it ? $_mpSepOrder[$__c['id']] : null, 'campos' => [$__c]];
} else {
$__cur['campos'][] = $__c;
}
}
if (!empty($__cur['campos'])) $__secs[] = $__cur;
$__tomaIdxs = []; $__tomaList = [];
foreach ($__secs as $i => $s) { if ($s['is_toma']) { $__tomaIdxs[] = $i; $__tomaList[] = $s; } }
usort($__tomaList, fn($a, $b) => $a['min'] <=> $b['min']);
foreach ($__tomaIdxs as $j => $i) { $__secs[$i] = $__tomaList[$j]; }
$esquema = array_merge(...array_column($__secs, 'campos'));
}
$_saltarSeccion = false;
$_mpSkipSec = false; // toma excluida por _tomas_config; siempre ocultar sin importar modoEditar
foreach ($esquema as $campo):