Toma progresiva: auto-scroll, cierre automático, countdown en cola y fix filtro por examen
- guardar_toma.php: filtrar firmas por condición del examen seleccionado; corrige countdown espurio y detección de 'completado' cuando hay múltiples tipos de examen. También descarta siguiente_toma_at si ya es pasado (minuto 0). - ver_formulario_enviado.php: auto-scroll a primera firma pendiente al cargar el modal; si el examen se selecciona y la firma no está en DOM, guarda y recarga el iframe. Al completar tomas, cierra el modal directamente sin botón "Finalizar". - get_cola.php: incluye siguiente_toma_at y en_toma_progresiva por turno desde turnero_consentimientos para mostrar cuenta regresiva en tarjetas. - lugar.php: muestra chip de cuenta regresiva en tarjetas de cola para pacientes en toma progresiva; color cambia a warn (<2 min) y crit (¡Ahora!). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c2605fb274
commit
848dd8e4d0
@@ -59,28 +59,40 @@ $datosInput[$campoId] = $svg;
|
||||
$datosMerge = array_merge($datosActuales, $datosInput);
|
||||
|
||||
// ── Analizar esquema: campos firma_profesional en orden ──────
|
||||
// Construir mapa: campo_id → minuto (o hora fija) leyendo el separador previo
|
||||
$firmasCampos = []; // [ [id, minutos|null, hora_fija|null], ... ] en orden
|
||||
// Solo incluye firmas cuya sección condicional coincide con el examen seleccionado.
|
||||
$firmasCampos = [];
|
||||
$separadorLabel = null;
|
||||
$curCondField = null;
|
||||
$curCondVals = [];
|
||||
|
||||
foreach ($esquema as $campo) {
|
||||
$tipo = $campo['tipo'] ?? '';
|
||||
if ($tipo === 'separador') {
|
||||
$separadorLabel = $campo['label'] ?? '';
|
||||
$cond = $campo['condicion'] ?? null;
|
||||
if ($cond) {
|
||||
$curCondField = $cond['campo_id'] ?? null;
|
||||
$curCondVals = $cond['valores'] ?? ($cond['valor'] ? [$cond['valor']] : []);
|
||||
} else {
|
||||
$curCondField = null;
|
||||
$curCondVals = [];
|
||||
}
|
||||
}
|
||||
if ($tipo === 'firma_profesional') {
|
||||
$minutos = null;
|
||||
$horaFija = null;
|
||||
// Filtrar por condición del separador padre
|
||||
if ($curCondField !== null && !empty($curCondVals)) {
|
||||
$ctrlVal = $datosMerge[$curCondField] ?? null;
|
||||
$ctrlArr = is_array($ctrlVal) ? $ctrlVal : ($ctrlVal !== null ? [$ctrlVal] : []);
|
||||
if (empty(array_intersect($curCondVals, $ctrlArr))) continue;
|
||||
}
|
||||
$minutos = null;
|
||||
$horaFija = null;
|
||||
if ($separadorLabel !== null) {
|
||||
// "Taukit · Minuto 10" → 10; "Toma · Minuto 60" → 60
|
||||
if (preg_match('/Minuto\s+(\d+)/i', $separadorLabel, $m)) {
|
||||
$minutos = (int)$m[1];
|
||||
}
|
||||
// "3:00 p.m." / "4:00 p.m." → hora fija
|
||||
elseif (preg_match('/(\d+):(\d+)\s*(a\.?m\.?|p\.?m\.?)/i', $separadorLabel, $m)) {
|
||||
$h = (int)$m[1];
|
||||
$min = (int)$m[2];
|
||||
$pm = strtolower(preg_replace('/[^apm]/i', '', $m[3])) === 'pm';
|
||||
} elseif (preg_match('/(\d+):(\d+)\s*(a\.?m\.?|p\.?m\.?)/i', $separadorLabel, $m)) {
|
||||
$h = (int)$m[1]; $min = (int)$m[2];
|
||||
$pm = strtolower(preg_replace('/[^apm]/i', '', $m[3])) === 'pm';
|
||||
if ($pm && $h < 12) $h += 12;
|
||||
$horaFija = sprintf('%02d:%02d:00', $h, $min);
|
||||
}
|
||||
@@ -106,15 +118,16 @@ if (empty($tc['toma_inicio_at'])) {
|
||||
if ($todasFirmadas) {
|
||||
$nuevoEstado = 'firmado';
|
||||
} else {
|
||||
// Calcular cuándo es la siguiente toma
|
||||
$next = $pendientes[0];
|
||||
if ($next['hora_fija'] !== null) {
|
||||
// Hora fija en el día actual
|
||||
$siguienteToma = date('Y-m-d') . ' ' . $next['hora_fija'];
|
||||
} elseif ($next['minutos'] !== null && $tomaInicioAt) {
|
||||
// Minuto relativo desde el inicio de la toma
|
||||
$siguienteToma = date('Y-m-d H:i:s', strtotime($tomaInicioAt) + $next['minutos'] * 60);
|
||||
}
|
||||
// Si la siguiente toma ya pasó o es ahora (minuto 0), no enviar countdown
|
||||
if ($siguienteToma !== null && $siguienteToma <= date('Y-m-d H:i:s')) {
|
||||
$siguienteToma = null;
|
||||
}
|
||||
}
|
||||
|
||||
// ── Persistir ────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user