This commit is contained in:
Lizandro Guarnizo
2026-06-16 11:00:15 -05:00
parent 67d45b8910
commit 6a8a8e0826
2 changed files with 22 additions and 45 deletions
+14 -8
View File
@@ -107,19 +107,25 @@ try {
$stmtItem->execute([$solicitudId, $examId]);
}
// ── Consentimientos: todos los formularios activos del laboratorio ──
// (no solo los vinculados a exámenes — el recepcionista elige cuáles aplican)
// ── Consentimientos: solo los configurados para este lugar ──
$stmt = $pdo->prepare(
"SELECT id AS formulario_id, nombre AS formulario_nombre
FROM lab_formularios
WHERE is_active = 1
ORDER BY nombre ASC"
"SELECT f.id AS formulario_id, f.nombre AS formulario_nombre
FROM lab_formularios f
INNER JOIN turnero_lugar_consentimientos tlc ON tlc.formulario_id = f.id
WHERE tlc.lugar_id = ?
AND f.is_active = 1
ORDER BY f.nombre ASC"
);
$stmt->execute();
$stmt->execute([$lugarId]);
$consentimientosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Agregar estado actual de cada consentimiento (si ya fue enviado antes)
// Crear o recuperar estado de cada consentimiento requerido
$stmtCreateConsent = $pdo->prepare(
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, estado, creado_at)
VALUES (?, ?, 'pendiente', NOW())"
);
foreach ($consentimientosRequeridos as &$c) {
$stmtCreateConsent->execute([$turnoId, $c['formulario_id']]);
$stC = $pdo->prepare(
"SELECT estado FROM turnero_consentimientos WHERE turno_id = ? AND formulario_id = ?"
);
+8 -37
View File
@@ -77,48 +77,19 @@ if (empty($examIds)) {
jsonError('La solicitud no tiene exámenes registrados.', 422);
}
// ── 3. Obtener formularios de consentimiento (deduplicados) ───
// 3a. Consentimientos por tipo de examen
$in = implode(',', array_fill(0, count($examIds), '?'));
// ── 3. Obtener formularios configurados para este turno ───────
$stmt = $pdo->prepare(
"SELECT DISTINCT etc.formulario_id, f.nombre AS formulario_nombre
FROM exam_tipo_consentimientos etc
JOIN lab_formularios f ON f.id = etc.formulario_id
WHERE etc.exam_tipo_id IN ({$in})"
"SELECT tc.formulario_id, f.nombre AS formulario_nombre
FROM turnero_consentimientos tc
JOIN lab_formularios f ON f.id = tc.formulario_id
WHERE tc.turno_id = ?
ORDER BY f.nombre ASC"
);
$stmt->execute($examIds);
$stmt->execute([$turnoId]);
$formulariosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 3b. Consentimientos por lugar/servicio (de la solicitud)
$lugarIdSol = (int)($turno['lugar_id'] ?? 0);
if (!$lugarIdSol) {
// Intentar leer lugar_id directo de la solicitud si no vino en el join anterior
$stmtLugar = $pdo->prepare("SELECT lugar_id FROM turnero_solicitudes WHERE id = ?");
$stmtLugar->execute([$turno['solicitud_id']]);
$lugarIdSol = (int)($stmtLugar->fetchColumn() ?: 0);
}
if ($lugarIdSol > 0) {
$stmtLc = $pdo->prepare(
"SELECT tlc.formulario_id, f.nombre AS formulario_nombre
FROM turnero_lugar_consentimientos tlc
JOIN lab_formularios f ON f.id = tlc.formulario_id
WHERE tlc.lugar_id = ?"
);
$stmtLc->execute([$lugarIdSol]);
foreach ($stmtLc->fetchAll(PDO::FETCH_ASSOC) as $row) {
// Deduplicar: solo agregar si aún no está en la lista
$yaExiste = false;
foreach ($formulariosRequeridos as $fr) {
if ((int)$fr['formulario_id'] === (int)$row['formulario_id']) { $yaExiste = true; break; }
}
if (!$yaExiste) {
$formulariosRequeridos[] = $row;
}
}
}
if (empty($formulariosRequeridos)) {
jsonOk(['consentimientos' => [], 'mensaje' => 'Ningún examen ni servicio requiere consentimiento.']);
jsonOk(['consentimientos' => [], 'mensaje' => 'Este turno no tiene consentimientos requeridos.']);
}
// ── 4. Generar / recuperar tokens UUID ────────────────────────