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 {
|
try {
|
||||||
$stmtM = $pdo->prepare(
|
$stmtM = $pdo->prepare(
|
||||||
"SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at,
|
"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
|
FROM turnero_muestras tm
|
||||||
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
|
LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra
|
||||||
WHERE tm.solicitud_id = ?
|
WHERE tm.solicitud_id = ?
|
||||||
@@ -289,6 +290,26 @@ if ($incluirSolicitud) {
|
|||||||
);
|
);
|
||||||
$stmtM->execute([$solicitud['id']]);
|
$stmtM->execute([$solicitud['id']]);
|
||||||
$muestras = $stmtM->fetchAll(PDO::FETCH_ASSOC);
|
$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 $_) {
|
} catch (\Throwable $_) {
|
||||||
// Tabla aún no existe
|
// Tabla aún no existe
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1758,7 +1758,14 @@ function renderMuestras(lista) {
|
|||||||
|
|
||||||
cont.innerHTML = lista.map(m => {
|
cont.innerHTML = lista.map(m => {
|
||||||
const esPend = m.estado === 'pendiente';
|
const esPend = m.estado === 'pendiente';
|
||||||
|
const esPrevio = !!m.es_pendiente_anterior;
|
||||||
const label = escHtml(m.label || m.tipo_muestra || 'MUESTRA');
|
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
|
const tsHtml = m.recibida_at
|
||||||
? `<span class="muestra-ts">${formatHora(m.recibida_at)}</span>`
|
? `<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}">
|
return `<div class="muestra-row ${m.estado}" data-muestra-id="${m.id}">
|
||||||
${ico}
|
${ico}
|
||||||
<div class="muestra-info">
|
<div class="muestra-info">
|
||||||
<span class="muestra-label">${label}</span>
|
<span class="muestra-label">${label}</span>${origenTag}
|
||||||
${motivoHtml}
|
${motivoHtml}
|
||||||
</div>
|
</div>
|
||||||
${acciones}
|
${acciones}
|
||||||
|
|||||||
Reference in New Issue
Block a user