96 lines
3.2 KiB
PHP
96 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* POST/GET /modules/turnero/api/comentarios.php
|
|
*
|
|
* GET: obtener comentarios de un turno
|
|
* ?turno_id=X&incluir_examenes=1&incluir_consentimientos=1
|
|
*
|
|
* POST: guardar comentario
|
|
* { turno_id, comentario, tipo: 'recepcion|muestras|general' }
|
|
*/
|
|
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireTurnero();
|
|
|
|
$pdo = db();
|
|
$userId = (int)adminId();
|
|
$userName = $_SESSION['admin_user']['full_name']
|
|
?? $_SESSION['admin_user']['username']
|
|
?? 'Usuario';
|
|
|
|
// ── GET: Obtener comentarios y datos relacionados ──
|
|
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
|
$turnoId = (int)($_GET['turno_id'] ?? 0);
|
|
if ($turnoId <= 0) jsonError('turno_id requerido.');
|
|
|
|
$datos = [];
|
|
|
|
// Comentarios del turno
|
|
$stmtCom = $pdo->prepare(
|
|
"SELECT id, usuario_nombre, comentario, tipo, creado_at
|
|
FROM turnero_comentarios
|
|
WHERE turno_id = ?
|
|
ORDER BY creado_at DESC"
|
|
);
|
|
$stmtCom->execute([$turnoId]);
|
|
$datos['comentarios'] = $stmtCom->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// Exámenes solicitados (si lo pide)
|
|
if (!empty($_GET['incluir_examenes'])) {
|
|
$stmtExam = $pdo->prepare(
|
|
"SELECT DISTINCT et.nombre, et.codigo
|
|
FROM turnero_examen_items tei
|
|
JOIN exam_tipos et ON et.id = tei.exam_tipo_id
|
|
WHERE tei.solicitud_id = (
|
|
SELECT id FROM turnero_solicitudes
|
|
WHERE turno_id = ? LIMIT 1
|
|
)
|
|
ORDER BY et.nombre ASC"
|
|
);
|
|
$stmtExam->execute([$turnoId]);
|
|
$datos['examenes'] = $stmtExam->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
// Consentimientos (si lo pide)
|
|
if (!empty($_GET['incluir_consentimientos'])) {
|
|
$stmtCons = $pdo->prepare(
|
|
"SELECT tc.id, f.nombre, tc.estado, tc.firmado_at, tc.firma_profesional_svg
|
|
FROM turnero_consentimientos tc
|
|
LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
|
|
WHERE tc.turno_id = ?
|
|
ORDER BY tc.estado DESC, tc.firmado_at DESC"
|
|
);
|
|
$stmtCons->execute([$turnoId]);
|
|
$datos['consentimientos'] = $stmtCons->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
jsonOk($datos);
|
|
}
|
|
|
|
// ── POST: Guardar comentario ──
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$datos = inputJson();
|
|
$turnoId = (int)($datos['turno_id'] ?? 0);
|
|
$comentario = trim($datos['comentario'] ?? '');
|
|
$tipo = $datos['tipo'] ?? 'general';
|
|
|
|
if ($turnoId <= 0) jsonError('turno_id requerido.');
|
|
if (!$comentario) jsonError('Comentario vacío.');
|
|
if (!in_array($tipo, ['recepcion','muestras','general'], true)) $tipo = 'general';
|
|
|
|
// Validar que el turno existe
|
|
$stmtTurno = $pdo->prepare("SELECT id FROM turnero_turnos WHERE id = ?");
|
|
$stmtTurno->execute([$turnoId]);
|
|
if (!$stmtTurno->fetch()) jsonError('Turno no encontrado.', 404);
|
|
|
|
// Guardar comentario
|
|
$stmtIns = $pdo->prepare(
|
|
"INSERT INTO turnero_comentarios (turno_id, usuario_id, usuario_nombre, comentario, tipo)
|
|
VALUES (?, ?, ?, ?, ?)"
|
|
);
|
|
$stmtIns->execute([$turnoId, $userId, $userName, $comentario, $tipo]);
|
|
$comId = (int)$pdo->lastInsertId();
|
|
|
|
jsonOk(['id' => $comId, 'creado_at' => date('c')]);
|
|
}
|