Capturar firmante de cada toma en el servidor; igualar render del modal en historial
guardar_toma.php (única ruta de firma de F-LAB-28 Tomas Prolongadas) nunca registró quién firmaba: solo guardaba el SVG por campo. De los 111 registros del formulario, 0 tienen identidad del firmante y no hay traza en ninguna tabla de auditoría, así que no es recuperable retroactivamente. Ahora el nombre/cédula se resuelven desde la sesión en el servidor (adminId()) y se guardan por toma — cada toma puede firmarla un profesional distinto, y esta es la única fuente confiable. El intento anterior dependía de que el navegador enviara window._profNombre. historial.php abría el modal sin compact=1&zoom=1.1, que sí usa bandeja; por eso el mismo documento se veía en lista larga en vez de la grilla con tarjetas de toma. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e480e14974
commit
f6d4ee9bdd
@@ -56,6 +56,34 @@ if ($tc['datos_respuestas']) {
|
|||||||
}
|
}
|
||||||
// Guardar svg en el campo firmado
|
// Guardar svg en el campo firmado
|
||||||
$datosInput[$campoId] = $svg;
|
$datosInput[$campoId] = $svg;
|
||||||
|
|
||||||
|
// Identidad del firmante — resuelta en el servidor desde la sesión, no desde el
|
||||||
|
// cliente: cada toma puede firmarla un profesional distinto y esta es la única
|
||||||
|
// fuente confiable de quién la hizo.
|
||||||
|
$__uid = adminId();
|
||||||
|
if ($__uid) {
|
||||||
|
$stmtPro = $pdo->prepare(
|
||||||
|
"SELECT au.full_name, au.cedula AS au_cedula,
|
||||||
|
le.nombre_completo AS pro_nombre, le.numero_documento AS pro_documento
|
||||||
|
FROM admin_users au
|
||||||
|
LEFT JOIN lab_enfermeras le ON le.id = au.enfermera_id
|
||||||
|
WHERE au.id = ? LIMIT 1"
|
||||||
|
);
|
||||||
|
$stmtPro->execute([$__uid]);
|
||||||
|
$pro = $stmtPro->fetch(PDO::FETCH_ASSOC) ?: [];
|
||||||
|
$proNombre = ($pro['pro_nombre'] ?? null) ?: ($pro['full_name'] ?? null);
|
||||||
|
$proCedula = ($pro['au_cedula'] ?? null) ?: ($pro['pro_documento'] ?? null);
|
||||||
|
if ($proNombre) {
|
||||||
|
$datosInput[$campoId . '_pro_nombre'] = $proNombre;
|
||||||
|
$datosInput['_pro_nombre'] = $proNombre; // respaldo global
|
||||||
|
}
|
||||||
|
if ($proCedula) {
|
||||||
|
$datosInput[$campoId . '_pro_cedula'] = $proCedula;
|
||||||
|
$datosInput['_pro_cedula'] = $proCedula;
|
||||||
|
}
|
||||||
|
$datosInput[$campoId . '_pro_id'] = $__uid;
|
||||||
|
}
|
||||||
|
|
||||||
$datosMerge = array_merge($datosActuales, $datosInput);
|
$datosMerge = array_merge($datosActuales, $datosInput);
|
||||||
|
|
||||||
// ── Analizar esquema: campos firma_profesional en orden ──────
|
// ── Analizar esquema: campos firma_profesional en orden ──────
|
||||||
|
|||||||
@@ -631,7 +631,9 @@ async function cargarDocumentosTurno(turnoId, container) {
|
|||||||
? ` <span class="badge bg-danger-subtle text-danger ms-1" style="font-size:.62rem">${c.tomas_firmadas||0}/${c.tomas_total||0} tomas</span>`
|
? ` <span class="badge bg-danger-subtle text-danger ms-1" style="font-size:.62rem">${c.tomas_firmadas||0}/${c.tomas_total||0} tomas</span>`
|
||||||
: '';
|
: '';
|
||||||
if (est === 'firmado' && c.token) {
|
if (est === 'firmado' && c.token) {
|
||||||
const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token) + '&embed=1';
|
// Mismos parámetros que bandeja: compact activa la grilla de campos
|
||||||
|
// y las tarjetas de toma; sin ellos el documento se ve en lista larga.
|
||||||
|
const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token) + '&embed=1&compact=1&zoom=1.1';
|
||||||
return `<a class="doc-pill firmado" href="${url}" onclick="return abrirDocModal(event,'${url}','${nombre.replace(/'/g,"\\'")}')">
|
return `<a class="doc-pill firmado" href="${url}" onclick="return abrirDocModal(event,'${url}','${nombre.replace(/'/g,"\\'")}')">
|
||||||
<i class="fas fa-check-circle"></i>${nombre}${tomas}
|
<i class="fas fa-check-circle"></i>${nombre}${tomas}
|
||||||
</a>`;
|
</a>`;
|
||||||
|
|||||||
Reference in New Issue
Block a user