- cancelar_toma_pendiente: añade JOIN por paciente_id para prevenir IDOR - cancelar_toma_pendiente: requiere turno_id para validar propiedad - get_tomas_pendientes: porta filtros condicionales y _tomas_config de guardar_toma.php para mostrar conteo de firmas correcto - lugar.php: refresca sección tomas previas al completar via turneroFirmado - lugar.php: muestra error en catch de cargarTomasPrevias en vez de silenciar - lugar.php: limpia _tomaAlertados al cancelar toma previa - lugar.php: pasa turno_id en POST de cancelar para ownership check Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
34 lines
1.2 KiB
PHP
34 lines
1.2 KiB
PHP
<?php
|
|
/**
|
|
* POST /modules/turnero/api/cancelar_toma_pendiente.php
|
|
* Marca una toma progresiva en_progreso como rechazada (paciente no quiere continuar).
|
|
* Body: { consentimiento_id }
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('POST');
|
|
requireTurnero();
|
|
|
|
$body = inputJson();
|
|
$consentId = (int)($body['consentimiento_id'] ?? 0);
|
|
$turnoId = (int)($body['turno_id'] ?? 0);
|
|
if (!$consentId) jsonError('consentimiento_id requerido.');
|
|
if (!$turnoId) jsonError('turno_id requerido.');
|
|
|
|
$pdo = db();
|
|
|
|
// Verificar que el consentimiento pertenece al mismo paciente que el turno activo.
|
|
// Previene que un turnero cancele tomas de pacientes que no tiene abiertos (IDOR).
|
|
$stmt = $pdo->prepare(
|
|
"UPDATE turnero_consentimientos tc
|
|
JOIN turnero_turnos t_old ON t_old.id = tc.turno_id
|
|
JOIN turnero_turnos t_cur ON t_cur.id = ? AND t_cur.paciente_id IS NOT NULL
|
|
AND t_cur.paciente_id = t_old.paciente_id
|
|
SET tc.estado = 'rechazado'
|
|
WHERE tc.id = ? AND tc.estado = 'en_progreso'"
|
|
);
|
|
$stmt->execute([$turnoId, $consentId]);
|
|
|
|
if ($stmt->rowCount() === 0) jsonError('Toma no encontrada o el paciente no coincide.', 404);
|
|
|
|
jsonOk(['cancelado' => true]);
|