diff --git a/modules/turnero/api/cambiar_estado.php b/modules/turnero/api/cambiar_estado.php index 656fdc6..ef92f56 100644 --- a/modules/turnero/api/cambiar_estado.php +++ b/modules/turnero/api/cambiar_estado.php @@ -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': diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php index 9295378..6fcedfb 100644 --- a/modules/turnero/views/lugar.php +++ b/modules/turnero/views/lugar.php @@ -794,6 +794,9 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php'; + @@ -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'); } }