up
This commit is contained in:
@@ -171,6 +171,25 @@ function siguienteNumero(int $sesionId): int
|
||||
return (int) $stmt->fetchColumn();
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera el siguiente número correlativo de turno POR PRIORIDAD para una sesión.
|
||||
* Cada prioridad (A, B, C, D, E, F) tiene su propia secuencia independiente.
|
||||
* Usa bloqueo a nivel de fila para evitar duplicados en concurrencia.
|
||||
*/
|
||||
function siguienteNumeroPorPrioridad(int $sesionId, int $prioridadId): int
|
||||
{
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare(
|
||||
'SELECT COALESCE(MAX(numero), 0) + 1 AS siguiente
|
||||
FROM turnero_turnos
|
||||
WHERE sesion_id = ?
|
||||
AND prioridad_id = ?
|
||||
FOR UPDATE'
|
||||
);
|
||||
$stmt->execute([$sesionId, $prioridadId]);
|
||||
return (int) $stmt->fetchColumn();
|
||||
}
|
||||
|
||||
/**
|
||||
* Selecciona el siguiente turno a llamar según el motor de prioridades.
|
||||
*
|
||||
|
||||
@@ -34,7 +34,6 @@ $pdo->beginTransaction();
|
||||
|
||||
try {
|
||||
$sesionId = obtenerOCrearSesionHoy();
|
||||
$numero = siguienteNumero($sesionId);
|
||||
|
||||
// Buscar prioridad_id
|
||||
$stmt = $pdo->prepare(
|
||||
@@ -50,7 +49,10 @@ try {
|
||||
|
||||
$prioridadId = (int) $prioridad['id'];
|
||||
|
||||
// Código visual: "A001", "E042", etc.
|
||||
// Correlativo independiente por prioridad (A-001, A-002... B-001, B-002... etc.)
|
||||
$numero = siguienteNumeroPorPrioridad($sesionId, $prioridadId);
|
||||
|
||||
// Código visual: "A001", "B001", "E001", etc.
|
||||
$codigo = $prioCodigo . str_pad($numero, 3, '0', STR_PAD_LEFT);
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
|
||||
@@ -30,12 +30,20 @@ $sesion = $stmtSesion->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!$sesion) {
|
||||
jsonOk([
|
||||
'fecha' => $fecha,
|
||||
'sesion' => null,
|
||||
'resumen' => ['total' => 0, 'atendidos' => 0, 'en_espera' => 0,
|
||||
'ausentes' => 0, 'cancelados' => 0, 'tiempo_promedio_min' => null],
|
||||
'fecha' => $fecha,
|
||||
'sesion' => null,
|
||||
'resumen' => [
|
||||
'total' => 0,
|
||||
'atendidos' => 0,
|
||||
'en_espera' => 0,
|
||||
'ausentes' => 0,
|
||||
'cancelados' => 0,
|
||||
'tiempo_espera_promedio_min' => null,
|
||||
'tiempo_servicio_promedio_min' => null,
|
||||
],
|
||||
'por_prioridad' => [],
|
||||
'por_lugar' => [],
|
||||
'consent_stats' => [],
|
||||
'turnos' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user