feat(turnero): opción solo entrega de muestras con prioridad y badge naranja en cola
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
76dda4722a
commit
34004b4d98
@@ -31,6 +31,7 @@ $metodoPago = isset($datos['metodo_pago']) ? trim((string) $datos['metodo_p
|
||||
$obs = isset($datos['observaciones']) ? trim((string) $datos['observaciones']) : null;
|
||||
$numOrden = isset($datos['numero_orden']) ? trim((string) $datos['numero_orden']) : null;
|
||||
$embarazada = !empty($datos['embarazada']) ? 1 : 0;
|
||||
$soloMuestras = !empty($datos['solo_muestras']) ? 1 : 0;
|
||||
$pagosDetalle = null;
|
||||
if ($metodoPago === 'combinado' && isset($datos['pagos_detalle']) && is_array($datos['pagos_detalle'])) {
|
||||
$pd = $datos['pagos_detalle'];
|
||||
@@ -46,7 +47,7 @@ if ($numOrden === '') $numOrden = null;
|
||||
if ($turnoId <= 0) jsonError('turno_id inválido.');
|
||||
if ($pacienteId <= 0) jsonError('paciente_id inválido.');
|
||||
if ($lugarId <= 0) jsonError('lugar_id inválido.');
|
||||
if (empty($examIds)) jsonError('Debe seleccionar al menos un examen.');
|
||||
if (empty($examIds) && !$soloMuestras) jsonError('Debe seleccionar al menos un examen.');
|
||||
|
||||
$metodosValidos = ['efectivo', 'transferencia', 'tarjeta', 'eps', 'cortesia', 'combinado', ''];
|
||||
if ($metodoPago && !in_array($metodoPago, $metodosValidos, true)) {
|
||||
@@ -113,12 +114,12 @@ try {
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
"INSERT INTO turnero_solicitudes
|
||||
(turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, creado_por)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
(turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, solo_muestras, creado_por)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
$stmt->execute([
|
||||
$turnoId, $pacienteId, $lugarId, $numOrden,
|
||||
$total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, adminId(),
|
||||
$total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, $soloMuestras, adminId(),
|
||||
]);
|
||||
$solicitudId = (int) $pdo->lastInsertId();
|
||||
|
||||
|
||||
@@ -50,21 +50,20 @@ if ($sesionCerrada) {
|
||||
// ── Cola según área ───────────────────────────────────────────
|
||||
if ($area === 'recepcion') {
|
||||
// Recepción: todos los turnos en espera/en_recepcion
|
||||
$inEstados = "'espera', 'en_recepcion'";
|
||||
$filtroLugar = '';
|
||||
$bindsCola = [$sesionId];
|
||||
|
||||
$inEstados = "'espera', 'en_recepcion'";
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT t.id, t.codigo, t.numero, t.estado, t.paciente_nombre,
|
||||
t.recepcion_desk_id, t.creado_at, t.llamado_recepcion_at, t.llamado_lugar_at,
|
||||
p.codigo AS prioridad_codigo, p.nombre AS prioridad_nombre,
|
||||
p.color AS prioridad_color, p.orden_peso
|
||||
p.color AS prioridad_color, p.orden_peso,
|
||||
COALESCE(s.solo_muestras, 0) AS solo_muestras
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id
|
||||
WHERE t.sesion_id = ? AND t.estado IN ($inEstados)
|
||||
ORDER BY p.orden_peso ASC, t.creado_at ASC"
|
||||
);
|
||||
$stmt->execute($bindsCola);
|
||||
$stmt->execute([$sesionId]);
|
||||
} else {
|
||||
// Lugar: cola = en_espera_lugar del grupo + en_servicio en ESTA estación
|
||||
$grupoIds = lugarIdsDeGrupo($lugarId);
|
||||
@@ -73,13 +72,15 @@ if ($area === 'recepcion') {
|
||||
$cols = "t.id, t.codigo, t.numero, t.estado, t.paciente_nombre,
|
||||
t.recepcion_desk_id, t.creado_at, t.llamado_recepcion_at, t.llamado_lugar_at,
|
||||
p.codigo AS prioridad_codigo, p.nombre AS prioridad_nombre,
|
||||
p.color AS prioridad_color, p.orden_peso";
|
||||
p.color AS prioridad_color, p.orden_peso,
|
||||
COALESCE(s.solo_muestras, 0) AS solo_muestras";
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT * FROM (
|
||||
(SELECT $cols
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id
|
||||
WHERE t.sesion_id = ?
|
||||
AND t.estado = 'en_espera_lugar'
|
||||
AND t.lugar_destino_id IN ($inLugares))
|
||||
@@ -87,11 +88,12 @@ if ($area === 'recepcion') {
|
||||
(SELECT $cols
|
||||
FROM turnero_turnos t
|
||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||
LEFT JOIN turnero_solicitudes s ON s.turno_id = t.id
|
||||
WHERE t.sesion_id = ?
|
||||
AND t.estado = 'en_servicio'
|
||||
AND t.lugar_destino_id = ?)
|
||||
) AS cola_union
|
||||
ORDER BY orden_peso ASC, creado_at ASC"
|
||||
ORDER BY solo_muestras DESC, orden_peso ASC, creado_at ASC"
|
||||
);
|
||||
$stmt->execute([$sesionId, $sesionId, $lugarId]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user