fix: pluviometria se quedaba muda tras elegir la fecha

El selector de fecha que agregue a collect_for_each responde por lista, pero el
bloque __foreach de processInteractive solo contemplaba confirmar y cancelar:
la fecha caia en la resolucion de menus estaticos, no coincidia con ninguno y
el flujo moria sin mensaje.

Hasta ahora collect_for_each solo recibia numeros escritos, por eso nunca hizo
falta ese ruteo. Solo se desvia mientras se espera la fecha, para no secuestrar
la navegacion por menus durante el resto del bucle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-04 20:38:40 -05:00
co-authored by Claude Sonnet 4.6
parent c0fb2dc089
commit f06a400d16
2 changed files with 28 additions and 0 deletions
+6
View File
@@ -1826,6 +1826,12 @@ class NormalBot
ConversationContext::reset($ctxId);
return self::sendText("❌ Registro cancelado.\n\nEscribe *menu* para volver.", $context['from'], $company);
}
// La fecha previa al bucle se elige de una lista, así que llega por acá
// y no como texto. Sin esto el flujo se quedaba mudo tras elegirla.
$fe = $meta['__foreach'];
if (!empty($fe['ask_date']) && ($fe['fecha'] ?? null) === null) {
return self::handleForeachInput($meta, $input, $context, $company, $ctxId, $flows);
}
}
// Standard button/row resolution against static menus
+22
View File
@@ -349,6 +349,28 @@ check('los ids son los de finca', array_column($body['fincas'], 'id'), ['4', '7
check('sin fecha usa hoy',
$armarBody(['collected' => []], 'x', 'y')['fecha'], date('Y-m-d'));
echo "\nRuteo de respuestas interactivas en collect_for_each\n";
/** Espejo del bloque __foreach de processInteractive() */
$rutaFe = function (array $fe, string $input): string {
if ($input === '__foreach_confirm') return 'enviar';
if ($input === '__foreach_cancel') return 'cancelar';
if (!empty($fe['ask_date']) && ($fe['fecha'] ?? null) === null) return 'foreach-input';
return 'menus';
};
$esperandoFecha = ['ask_date' => true, 'fecha' => null];
$conFecha = ['ask_date' => true, 'fecha' => '2026-08-04'];
// El bug: elegir la fecha caía en la resolución de menús y moría en silencio
check('elegir la fecha llega al flujo', $rutaFe($esperandoFecha, '2026-08-04'), 'foreach-input');
check('"otra fecha" también', $rutaFe($esperandoFecha, '__fe_other'), 'foreach-input');
check('confirmar sigue enviando', $rutaFe($esperandoFecha, '__foreach_confirm'), 'enviar');
check('cancelar sigue cancelando', $rutaFe($esperandoFecha, '__foreach_cancel'), 'cancelar');
// Con la fecha resuelta no debe secuestrar la navegación por menús
check('con fecha ya elegida no interfiere', $rutaFe($conFecha, 'submenu_ciclos'), 'menus');
check('un foreach sin fecha tampoco', $rutaFe(['ask_date' => false], 'submenu_ciclos'), 'menus');
echo "\nask_finca\n";
$af = $flows['ask_finca'];
check('no repregunta si ya hay finca', $af['skip_if_set'] ?? false, true);