fix: los lotes de ciclos mezclaban fincas

Los catalogos de los campos select y multi_select pedian la lista mandando solo
lo recolectado en el formulario, nunca el metadata de la conversacion: la finca
elegida no viajaba, {finca_id} quedaba sin resolver en la URL y el ERP lo leia
como 0 —todas las fincas—. Elegir REPOSO y ver lotes de otras fincas, tal cual
lo reporto el usuario.

Ahora el metadata acompana lo recolectado en ambos puntos. Los fixtures delatan
la fuga —sin finca_id valido cuelan un lote ajeno— y dos casos nuevos verifican
que a los catalogos de ciclos y labores solo lleguen lotes de la finca elegida.

De paso el select simple gana resolverPorCampos en su clave, que el multi ya
tenia: un catalogo por campo puede depender de lo elegido antes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-19 22:50:48 -05:00
co-authored by Claude Sonnet 4.6
parent 6c524a39ed
commit 5ee2cfe2e6
3 changed files with 28 additions and 6 deletions
+5
View File
@@ -102,6 +102,8 @@ capturas();
echo "\nCiclos — apertura de varios lotes\n";
$ctx = contexto('57300CICLOS');
$id = ConversationContext::getOrCreate(1, '57300CICLOS')['id'];
ConversationContext::updateMetadata($id, ['finca' => ['finca_id' => '4', 'finca_label' => 'REPOSO']]);
$r = NormalBot::processInteractive($co, $ctx, 'registrar_ciclo');
check('pregunta el tipo de ciclo', str_contains(textoDe($r), 'Qué ciclo'));
@@ -113,6 +115,8 @@ $r = NormalBot::processInteractive($co, $ctx, $hoy);
$filas = filasDe($r);
check('lista de lotes con "Otro lote" y "Listo"',
isset($filas['__todos']) && isset($filas['__listo']));
check('solo lotes de la finca elegida, ninguno ajeno',
!isset($filas['99']) && !str_contains(implode(' ', $filas), 'ROSA BLANCA'));
$r = NormalBot::processInteractive($co, $ctx, '1');
check('marcar redibuja con el check', str_contains(filasDe($r)['1'] ?? '', '✅'));
@@ -181,6 +185,7 @@ check('el catálogo viene filtrado por fase', filasDe($r), ['42' => 'TRACTORISTA
$r = NormalBot::processInteractive($co, $ctx, '42');
check('los lotes son los de su finca', isset(filasDe($r)['4']) && isset(filasDe($r)['9']));
check('sin lotes de otras fincas', !isset(filasDe($r)['99']));
$r = NormalBot::processInteractive($co, $ctx, '4');
$r = NormalBot::processInteractive($co, $ctx, '412');