diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 97781fe..f8ee086 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -87,9 +87,12 @@ foreach ($consentimientos as &$c) { if ($esTomaProg) { // Mapear cada firma_profesional a los valores de examen de su sección condicional + // (y a su etiqueta + campo hora, para poder mostrar el detalle por toma) $firmaCondMap = []; $curCondCampo = null; $curCondVals = []; + $curLabel = null; + $curHoraId = null; foreach ($campos as $campo) { $ft = $campo['tipo'] ?? ''; if ($ft === 'separador') { @@ -98,8 +101,15 @@ foreach ($consentimientos as &$c) { $curCondVals = $cond ? ($cond['valores'] ?? ($cond['valor'] ? [$cond['valor']] : [])) : []; + $curLabel = $campo['label'] ?? ''; + $curHoraId = null; + } elseif ($ft === 'hora') { + $curHoraId = $campo['id'] ?? null; } elseif ($ft === 'firma_profesional' && !empty($campo['id'])) { - $firmaCondMap[$campo['id']] = ['campo' => $curCondCampo, 'valores' => $curCondVals]; + $firmaCondMap[$campo['id']] = [ + 'campo' => $curCondCampo, 'valores' => $curCondVals, + 'label' => $curLabel, 'hora_id' => $curHoraId, + ]; } } @@ -133,9 +143,19 @@ foreach ($consentimientos as &$c) { } $tomasTotal = count($relevantIds); + $tomasDetalle = []; foreach ($relevantIds as $fid) { - if ((!empty($dr[$fid]) && strlen($dr[$fid]) > 10) - || (!empty($dr[$fid.'_svg']) && strlen($dr[$fid.'_svg']) > 10)) $tomasFirm++; + $firmado = (!empty($dr[$fid]) && strlen($dr[$fid]) > 10) + || (!empty($dr[$fid.'_svg']) && strlen($dr[$fid.'_svg']) > 10); + if ($firmado) $tomasFirm++; + $info = $firmaCondMap[$fid] ?? []; + $horaId = $info['hora_id'] ?? null; + $tomasDetalle[] = [ + 'label' => $info['label'] ?? '', + 'hora' => $horaId ? ($dr[$horaId] ?? null) : null, + 'firmado' => $firmado, + 'firmante' => $firmado ? ($dr[$fid . '_pro_nombre'] ?? $dr['_pro_nombre'] ?? null) : null, + ]; } } @@ -147,6 +167,7 @@ foreach ($consentimientos as &$c) { $c['es_toma_progresiva'] = $esTomaProg; $c['tomas_total'] = $tomasTotal; $c['tomas_firmadas'] = $tomasFirm; + $c['tomas_detalle'] = $tomasDetalle ?? []; $c['cierre_anticipado'] = $dr['_cierre_anticipado'] ?? null; // Exponer campos firma_profesional (ids) para el frontend $c['campos_firma_pro'] = array_column($camposFirmaPro, 'id'); diff --git a/modules/turnero/views/historial.php b/modules/turnero/views/historial.php index 0e1c51a..eb47695 100644 --- a/modules/turnero/views/historial.php +++ b/modules/turnero/views/historial.php @@ -631,7 +631,7 @@ async function cargarDocumentosTurno(turnoId, container) { ? ` ${c.tomas_firmadas||0}/${c.tomas_total||0} tomas` : ''; if (est === 'firmado' && c.token) { - const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token); + const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token) + '&embed=1'; return ` ${nombre}${tomas} `; @@ -640,7 +640,19 @@ async function cargarDocumentosTurno(turnoId, container) { const ico = est === 'enviado' ? 'fa-paper-plane' : (est === 'visto' ? 'fa-eye' : 'fa-clock'); return `${nombre}${tomas}`; }).join(''); - container.innerHTML = '
Documentos
' + pills; + + // Detalle por toma (quién atendió cada una) para formularios de tomas progresivas + const detalles = list.filter(c => c.es_toma_progresiva && c.tomas_detalle && c.tomas_detalle.length) + .map(c => ` + + ${c.tomas_detalle.map(t => ` + + + + `).join('')} +
${esc(c.formulario_nombre||'')}HoraAtendió
${esc((t.label||'').replace(/^Toma\s*·\s*/,''))}${esc(t.hora || '—')}${t.firmado ? esc(t.firmante || '—') : ' pendiente'}
`).join(''); + + container.innerHTML = '
Documentos
' + pills + detalles; } catch(_) { const sp = container.querySelector('span'); if (sp) sp.textContent = 'Error de conexión'; diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php index 6f3d339..51a4a5c 100644 --- a/ver_formulario_enviado.php +++ b/ver_formulario_enviado.php @@ -1111,8 +1111,8 @@ function _addExamWizardHtml(string $cid): string { <?= $fLabel ?>

@@ -2354,6 +2354,9 @@ function _guardarFirmaMP(widget, svg, msgEl, entry, campoId) { Object.assign(dr, window._mpSavedFirmas || {}); // Guardar con campoId directo (sin _svg) para que get_consentimientos lo cuente dr[campoId] = svg; + // Identidad del firmante por toma (puede cambiar de profesional entre tomas) + if (window._profNombre) { dr[campoId + '_pro_nombre'] = window._profNombre; dr['_pro_nombre'] = window._profNombre; } + if (window._profDocumento) { dr[campoId + '_pro_cedula'] = window._profDocumento; dr['_pro_cedula'] = window._profDocumento; } (window._mpSavedFirmas = window._mpSavedFirmas||{})[campoId] = svg; // Fix 5: cachear hora en el momento de guardar para el resumen final (window._mpTomaData = window._mpTomaData||{})[campoId] = {