feat(turnero): devolver paciente a recepción desde toma de muestras
- cambiar_estado: permite en_espera_lugar→en_recepcion y en_servicio→en_recepcion - Al volver de un lugar limpia lugar_destino_id, llamado_lugar_at, inicio_lugar_at, fin_recepcion_at y atendido_lugar_por para que quede reasignable - lugar.php: botón "A recepción" visible en en_espera_lugar y en_servicio - resetFicha oculta el botón nuevo al limpiar la ficha Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
728d78f606
commit
a15dceae2a
@@ -39,8 +39,8 @@ if ($nuevoEstado === '') jsonError('nuevo_estado es requerido.');
|
||||
const TRANSICIONES = [
|
||||
'espera' => ['en_recepcion', 'ausente', 'cancelado'],
|
||||
'en_recepcion' => ['en_espera_lugar', 'espera', 'ausente', 'cancelado'],
|
||||
'en_espera_lugar' => ['en_servicio', 'ausente', 'cancelado'],
|
||||
'en_servicio' => ['finalizado', 'ausente', 'cancelado', 'en_espera_lugar'],
|
||||
'en_espera_lugar' => ['en_servicio', 'en_recepcion', 'ausente', 'cancelado'],
|
||||
'en_servicio' => ['finalizado', 'ausente', 'cancelado', 'en_espera_lugar', 'en_recepcion'],
|
||||
];
|
||||
|
||||
$pdo = db();
|
||||
@@ -116,6 +116,14 @@ try {
|
||||
$sets[] = 'recepcion_desk_id = ?';
|
||||
$binds[] = $deskId;
|
||||
}
|
||||
// Viene de un lugar: limpiar campos del lugar para que quede reasignable
|
||||
if (in_array($estadoActual, ['en_espera_lugar', 'en_servicio'], true)) {
|
||||
$sets[] = 'lugar_destino_id = NULL';
|
||||
$sets[] = 'llamado_lugar_at = NULL';
|
||||
$sets[] = 'inicio_lugar_at = NULL';
|
||||
$sets[] = 'fin_recepcion_at = NULL';
|
||||
$sets[] = 'atendido_lugar_por = NULL';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'en_espera_lugar':
|
||||
|
||||
@@ -794,6 +794,9 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php';
|
||||
<button class="btn-accion-sec warning d-none" id="btn-regresar" onclick="regresarCola()">
|
||||
<i class="fas fa-undo"></i>Regresar cola
|
||||
</button>
|
||||
<button class="btn-accion-sec warning d-none" id="btn-devolver" onclick="devolverRecepcion()">
|
||||
<i class="fas fa-reply"></i>A recepción
|
||||
</button>
|
||||
<button class="btn-accion-sec danger" id="btn-ausente" onclick="marcarAusente()">
|
||||
<i class="fas fa-user-slash"></i>Ausente
|
||||
</button>
|
||||
@@ -1733,6 +1736,25 @@ async function regresarCola() {
|
||||
}
|
||||
}
|
||||
|
||||
async function devolverRecepcion() {
|
||||
if (!turnoActivo) return;
|
||||
if (!confirm(`¿Devolver turno ${turnoActivo.codigo} a recepción?`)) return;
|
||||
try {
|
||||
const res = await fetch(API + 'cambiar_estado.php', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ turno_id: turnoActivo.id, nuevo_estado: 'en_recepcion' }),
|
||||
});
|
||||
const json = await res.json();
|
||||
if (!json.ok) { mostrarError(json.error); return; }
|
||||
mostrarToast('Turno devuelto a recepción', 'info', 3000);
|
||||
resetFicha();
|
||||
cargarCola();
|
||||
} catch (err) {
|
||||
mostrarError(err.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function cambiarEstadoTurno(nuevoEstado) {
|
||||
try {
|
||||
const res = await fetch(API + 'cambiar_estado.php', {
|
||||
@@ -1800,6 +1822,7 @@ function resetFicha() {
|
||||
document.getElementById('btn-finalizar').classList.add('d-none');
|
||||
document.getElementById('btn-regresar').classList.add('d-none');
|
||||
document.getElementById('btn-rellamar').classList.add('d-none');
|
||||
document.getElementById('btn-devolver').classList.add('d-none');
|
||||
|
||||
volverACola();
|
||||
}
|
||||
@@ -1835,17 +1858,20 @@ function actualizarEstadoBadge(estado) {
|
||||
const btnFin = document.getElementById('btn-finalizar');
|
||||
const btnReg = document.getElementById('btn-regresar');
|
||||
const btnRellamar = document.getElementById('btn-rellamar');
|
||||
const btnDev = document.getElementById('btn-devolver');
|
||||
|
||||
if (estado === 'en_espera_lugar') {
|
||||
btnIni.classList.remove('d-none'); btnIni.disabled = false;
|
||||
btnFin.classList.add('d-none');
|
||||
btnReg.classList.add('d-none');
|
||||
btnRellamar.classList.add('d-none');
|
||||
btnDev.classList.remove('d-none');
|
||||
} else if (estado === 'en_servicio') {
|
||||
btnIni.classList.add('d-none');
|
||||
btnFin.classList.remove('d-none');
|
||||
btnReg.classList.remove('d-none');
|
||||
btnRellamar.classList.remove('d-none');
|
||||
btnDev.classList.remove('d-none');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user