feat: olvidar firma, editar tiempos tomas, obs en header, fix dispositivos

- feat(turnero): Botón "Olvidar" en lugar.php y recepcion.php para descartar firma de consentimiento completo (nuevo endpoint resetear_consentimiento.php)
- feat(turnero): Botón "Olvidar" por toma individual en prolongadas para borrar firma+hora de una toma específica (nuevo endpoint resetear_toma.php)
- feat(turnero): Editar tiempos en tomas en_progreso: hora_campo signed muestra readonly con botón olvidar, permite re-editar tras olvidar
- feat(turnero): Guardar tiempos (draft save) también en estado en_progreso
- feat(turnero): Observaciones de tomas prolongadas se muestran en header de tarjeta firmada (campo obs_campo en _mpMap)
- fix(turnero): Token del equipo se sobreescribía en tabla — ip permitía solo un registro con ip='' (UNIQUE); ahora ip es nullable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-28 07:37:09 -05:00
co-authored by Claude Sonnet 4.6
parent 8e9d7750a7
commit ff52fa5ba7
6 changed files with 278 additions and 9 deletions
+21 -1
View File
@@ -2016,6 +2016,12 @@ function renderConsentimientos(lista) {
<i class="fab fa-whatsapp"></i> WhatsApp
</button>`;
const btnOlvidar = (ya && c.token && c.estado !== 'rechazado')
? `<button class="btn btn-outline-warning btn-sm" title="Olvidar firma — permite re-firmar"
onclick="_olvidarConsentimientoRec('${token}', '${escHtml(c.formulario_nombre || '')}')">
<i class="fas fa-undo"></i>
</button>` : '';
// Fila de firma del profesional (solo si el formulario la requiere y el paciente ya firmó)
let profRow = '';
if (c.estado === 'firmado' && c.requiere_firma_profesional) {
@@ -2047,7 +2053,7 @@ function renderConsentimientos(lista) {
<i class="fas ${m.ico}"></i>
<span class="c-nom">${nom}</span>
<span class="c-badge">${m.lbl}</span>
<div class="consent-acciones">${btnFirmar}${btnWa}</div>
<div class="consent-acciones">${btnFirmar}${btnWa}${btnOlvidar}</div>
</div>
${profRow}
${motivoRec}
@@ -2206,6 +2212,20 @@ async function enviarConsentimientoUno(turnoId) {
// ── Enviar consentimientos (legacy — usado por btn-enviar-consent) ──
async function enviarConsentimientos() { return enviarConsentimientosTodos(); }
// ── Olvidar (resetear) consentimiento ────────────────────────
async function _olvidarConsentimientoRec(token, nombre) {
if (!confirm(`¿Seguro que deseas descartar la firma de "${nombre}"?\nEl paciente podrá volver a firmarlo.`)) return;
try {
const r = await fetch('modules/turnero/api/resetear_consentimiento.php', {
method: 'POST', headers: {'Content-Type':'application/json'},
body: JSON.stringify({ token })
});
const j = await r.json();
if (!j.ok) { alert(j.error || 'Error al resetear'); return; }
await cargarConsentimientos();
} catch(e) { alert(e.message); }
}
// ── Pasar a lugar ─────────────────────────────────────────────
async function pasarALugar() {
if (!turnoActivo || !solicitudActiva) return;