fix: firma del paciente aparece en su posición del esquema en turnero
El campo tipo=firma se saltaba cuando no había firma existente, dejando el canvas al fondo de la página fuera de lugar. Ahora en modoTurnero pendiente el canvas aparece donde el esquema lo define. El widget del fondo es solo fallback cuando el esquema no tiene campo firma propio. Los campos siguen siendo editables como corresponde. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
75ead05b14
commit
092dfd3074
@@ -455,6 +455,7 @@ function esc2(mixed $v): string {
|
||||
// Rastrear si ya se renderizó la firma inline (para no duplicarla al pie)
|
||||
$_renderedFirmaProfesional = false;
|
||||
$_renderedFirmaPaciente = false;
|
||||
$_esquemaTieneFirmaPaciente = false; // el esquema tiene campo tipo=firma
|
||||
|
||||
foreach ($esquema as $campo):
|
||||
$tipo = $campo['tipo'] ?? '';
|
||||
@@ -478,8 +479,15 @@ function esc2(mixed $v): string {
|
||||
$fColor = $isPro ? '#198754' : '#1565c0';
|
||||
$fLabel = htmlspecialchars($campo['label'] ?? ($isPro ? 'Firma profesional' : 'Firma paciente'));
|
||||
|
||||
// Campo paciente sin firma: omitir (no hay nada que mostrar)
|
||||
if (!$fSvg && !$fFoto && !$isPro) continue;
|
||||
// Campo paciente sin firma: omitir en vista normal.
|
||||
// En turnero pendiente se muestra el canvas en su posición del esquema.
|
||||
if (!$fSvg && !$fFoto && !$isPro) {
|
||||
if ($modoTurnero && $modoEditar) {
|
||||
$_esquemaTieneFirmaPaciente = true;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$yaHayCanvasPro = $isPro && $_renderedFirmaProfesional;
|
||||
if ($isPro) $_renderedFirmaProfesional = true;
|
||||
@@ -496,6 +504,21 @@ function esc2(mixed $v): string {
|
||||
<div class="firma-box mt-2" style="border-color:<?= $fColor ?>">
|
||||
<img src="<?= htmlspecialchars($fFoto) ?>" alt="Foto - <?= $fLabel ?>">
|
||||
</div>
|
||||
<?php elseif (!$isPro && $modoTurnero && $modoEditar): ?>
|
||||
<!-- Canvas firma paciente en la posición del esquema -->
|
||||
<p class="text-muted small mb-2"><i class="fas fa-pen me-1"></i>He leído el documento. Dibuje su firma:</p>
|
||||
<canvas id="turneroCv" width="500" height="160"
|
||||
style="border:2px solid #1565c0;border-radius:8px;background:#f0f4ff;
|
||||
cursor:crosshair;display:block;max-width:100%;touch-action:none"></canvas>
|
||||
<div class="mt-2 d-flex gap-2 flex-wrap">
|
||||
<button id="turneroLimpiar" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="fas fa-eraser me-1"></i>Limpiar
|
||||
</button>
|
||||
<button id="turneroFirmar" class="btn btn-success fw-semibold">
|
||||
<i class="fas fa-check-circle me-1"></i>Confirmar y firmar consentimiento
|
||||
</button>
|
||||
</div>
|
||||
<div id="turneroMsg" class="mt-2 small"></div>
|
||||
<?php elseif ($isPro): ?>
|
||||
<?php if (($modoTurnero && isUserLoggedIn()) || (!$modoPublico && !$yaHayCanvasPro)): ?>
|
||||
<!-- Canvas del profesional: solo aparece una vez -->
|
||||
@@ -545,9 +568,8 @@ function esc2(mixed $v): string {
|
||||
$cid = $campo['id'] ?? null;
|
||||
if (!$cid) continue;
|
||||
|
||||
// ── Modo editar: campos interactivos solo para envíos normales.
|
||||
// En turnero el documento es de solo lectura; solo la firma es interactiva.
|
||||
if ($modoEditar && !$modoTurnero):
|
||||
// ── Modo editar (turnero o envío normal): campos interactivos ──
|
||||
if ($modoEditar):
|
||||
$prefill = $todos[$cid] ?? '';
|
||||
$label = esc2($campo['label'] ?? $cid);
|
||||
$req = !empty($campo['required']) ? ' required' : '';
|
||||
@@ -706,8 +728,8 @@ function esc2(mixed $v): string {
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- ── Widget firma turnero (solo modo consentimiento) ───────── -->
|
||||
<?php if ($modoTurnero && $envio['estado'] !== 'firmado'): ?>
|
||||
<!-- ── Widget firma turnero (fallback si el esquema no tiene campo firma) ── -->
|
||||
<?php if ($modoTurnero && $envio['estado'] !== 'firmado' && !$_esquemaTieneFirmaPaciente): ?>
|
||||
<div class="mt-4 no-print" id="turneroFirmaWidget">
|
||||
<div class="section-title" style="color:#1565c0">
|
||||
<i class="fas fa-pen me-1"></i>Firma del paciente / responsable
|
||||
|
||||
Reference in New Issue
Block a user