feat(bandeja): vistos/por-revisar, filtro nombre+examen, marcar como visto
- Reemplaza activos/cerrados por pendientes (por revisar) / vistos - Columna bandeja_visto_at en turnero_turnos; API marcar_visto.php - Botón "Marcar como visto" → mueve paciente a sección inferior - Filtro en tiempo real por nombre y por código de examen (GROUP_CONCAT) - URL de consentimientos: relativa (consent.php?token=...) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
6c54674795
commit
368c4c8a5a
@@ -19,6 +19,7 @@ if (isset($_GET['turno_id'])) {
|
||||
|
||||
$turno = $pdo->prepare("
|
||||
SELECT t.id, t.codigo, t.estado, t.paciente_nombre, t.inicio_lugar_at, t.fin_lugar_at,
|
||||
t.bandeja_visto_at,
|
||||
ts.id AS sol_id, ts.numero_orden,
|
||||
p.tipo_documento, p.numero_documento, p.fecha_nacimiento, p.telefono,
|
||||
l.nombre AS lugar_nombre
|
||||
@@ -92,21 +93,24 @@ if (isset($_GET['turno_id'])) {
|
||||
// ── LISTA ─────────────────────────────────────────────────────
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT t.id, t.codigo, t.paciente_nombre, t.estado,
|
||||
t.inicio_lugar_at, t.fin_lugar_at,
|
||||
t.inicio_lugar_at, t.fin_lugar_at, t.bandeja_visto_at,
|
||||
ts.numero_orden,
|
||||
l.nombre AS lugar_nombre
|
||||
l.nombre AS lugar_nombre,
|
||||
GROUP_CONCAT(et.codigo ORDER BY et.codigo SEPARATOR ' ') AS examenes_txt
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_solicitudes ts ON ts.turno_id = t.id
|
||||
JOIN turnero_lugares l ON l.id = t.lugar_destino_id
|
||||
JOIN turnero_solicitudes ts ON ts.turno_id = t.id
|
||||
JOIN turnero_lugares l ON l.id = t.lugar_destino_id
|
||||
LEFT JOIN turnero_examen_items tei ON tei.solicitud_id = ts.id
|
||||
LEFT JOIN exam_tipos et ON et.id = tei.exam_tipo_id
|
||||
WHERE t.sesion_id = ? AND t.inicio_lugar_at IS NOT NULL
|
||||
GROUP BY t.id
|
||||
ORDER BY ts.numero_orden ASC
|
||||
");
|
||||
$stmt->execute([$sesionId]);
|
||||
$todos = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$cerradosEstados = ['finalizado', 'ausente', 'cancelado'];
|
||||
$activos = array_values(array_filter($todos, fn($t) => !in_array($t['estado'], $cerradosEstados)));
|
||||
$cerrados = array_values(array_filter($todos, fn($t) => in_array($t['estado'], $cerradosEstados)));
|
||||
$pendientes = array_values(array_filter($todos, fn($t) => $t['bandeja_visto_at'] === null));
|
||||
$vistos = array_values(array_filter($todos, fn($t) => $t['bandeja_visto_at'] !== null));
|
||||
|
||||
$stmtMp = $pdo->prepare("
|
||||
SELECT COUNT(*) FROM turnero_muestras tm
|
||||
@@ -118,12 +122,12 @@ $stmtMp->execute([$sesionId]);
|
||||
$muestrasPendientes = (int)$stmtMp->fetchColumn();
|
||||
|
||||
jsonOk([
|
||||
'activos' => $activos,
|
||||
'cerrados' => $cerrados,
|
||||
'stats' => [
|
||||
'pendientes' => $pendientes,
|
||||
'vistos' => $vistos,
|
||||
'stats' => [
|
||||
'total' => count($todos),
|
||||
'activos' => count($activos),
|
||||
'cerrados' => count($cerrados),
|
||||
'pendientes' => count($pendientes),
|
||||
'vistos' => count($vistos),
|
||||
'muestras_pendientes' => $muestrasPendientes,
|
||||
],
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* modules/turnero/api/marcar_visto.php
|
||||
* POST {turno_id} → marca el turno como visto en la bandeja
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireTurnero();
|
||||
requireMethod('POST');
|
||||
|
||||
$input = inputJson();
|
||||
$turnoId = (int)($input['turno_id'] ?? 0);
|
||||
if (!$turnoId) jsonError('turno_id requerido');
|
||||
|
||||
db()->prepare('UPDATE turnero_turnos SET bandeja_visto_at = NOW() WHERE id = ?')->execute([$turnoId]);
|
||||
|
||||
jsonOk([], 'Marcado como visto');
|
||||
Reference in New Issue
Block a user