feat(turnero): mostrar muestras pendientes de visitas anteriores en entrega
Cuando la solicitud tiene solo_muestras=1, get_consentimientos.php busca turnero_muestras pendientes de otras solicitudes del mismo paciente y las antepone en el array muestras con es_pendiente_anterior=1. lugar.php renderiza un tag 'visita anterior' en cada muestra previa para que el bacteriólogo identifique el origen. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
6f1e2adafe
commit
8a44cb8bae
@@ -281,7 +281,8 @@ if ($incluirSolicitud) {
|
||||
try {
|
||||
$stmtM = $pdo->prepare(
|
||||
"SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at,
|
||||
COALESCE(lt.nombre, tm.tipo_muestra) AS label
|
||||
COALESCE(lt.nombre, tm.tipo_muestra) AS label,
|
||||
0 AS es_pendiente_anterior, NULL AS solicitud_orden_anterior
|
||||
FROM turnero_muestras tm
|
||||
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
|
||||
WHERE tm.solicitud_id = ?
|
||||
@@ -289,6 +290,26 @@ if ($incluirSolicitud) {
|
||||
);
|
||||
$stmtM->execute([$solicitud['id']]);
|
||||
$muestras = $stmtM->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Si es visita de entrega de muestras, agregar pendientes de solicitudes anteriores
|
||||
if (!empty($solicitud['solo_muestras']) && !empty($solicitud['paciente_id'])) {
|
||||
$stmtPrev = $pdo->prepare(
|
||||
"SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at,
|
||||
COALESCE(lt.nombre, tm.tipo_muestra) AS label,
|
||||
1 AS es_pendiente_anterior,
|
||||
ts.numero_orden AS solicitud_orden_anterior
|
||||
FROM turnero_muestras tm
|
||||
JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id
|
||||
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
|
||||
WHERE ts.paciente_id = ?
|
||||
AND tm.solicitud_id != ?
|
||||
AND tm.estado = 'pendiente'
|
||||
ORDER BY tm.id ASC"
|
||||
);
|
||||
$stmtPrev->execute([$solicitud['paciente_id'], $solicitud['id']]);
|
||||
$previas = $stmtPrev->fetchAll(PDO::FETCH_ASSOC);
|
||||
$muestras = array_merge($previas, $muestras);
|
||||
}
|
||||
} catch (\Throwable $_) {
|
||||
// Tabla aún no existe
|
||||
}
|
||||
|
||||
@@ -1757,8 +1757,15 @@ function renderMuestras(lista) {
|
||||
summary.innerHTML = chips;
|
||||
|
||||
cont.innerHTML = lista.map(m => {
|
||||
const esPend = m.estado === 'pendiente';
|
||||
const label = escHtml(m.label || m.tipo_muestra || 'MUESTRA');
|
||||
const esPend = m.estado === 'pendiente';
|
||||
const esPrevio = !!m.es_pendiente_anterior;
|
||||
const label = escHtml(m.label || m.tipo_muestra || 'MUESTRA');
|
||||
const origenTag = esPrevio
|
||||
? `<span style="font-size:.68rem;background:#fef3c7;color:#92400e;border:1px solid #fde68a;
|
||||
border-radius:10px;padding:1px 7px;margin-left:5px;white-space:nowrap">
|
||||
<i class="fas fa-history me-1"></i>visita anterior${m.solicitud_orden_anterior ? ' · ' + escHtml(m.solicitud_orden_anterior) : ''}
|
||||
</span>`
|
||||
: '';
|
||||
const tsHtml = m.recibida_at
|
||||
? `<span class="muestra-ts">${formatHora(m.recibida_at)}</span>`
|
||||
: '';
|
||||
@@ -1792,7 +1799,7 @@ function renderMuestras(lista) {
|
||||
return `<div class="muestra-row ${m.estado}" data-muestra-id="${m.id}">
|
||||
${ico}
|
||||
<div class="muestra-info">
|
||||
<span class="muestra-label">${label}</span>
|
||||
<span class="muestra-label">${label}</span>${origenTag}
|
||||
${motivoHtml}
|
||||
</div>
|
||||
${acciones}
|
||||
|
||||
Reference in New Issue
Block a user