feat: editar desde el resumen sin rehacer el formulario
Cancelar obligaba a empezar de cero por una fecha mal puesta. El resumen suma un tercer boton —WhatsApp admite tres y usaba dos—: Editar lista los campos ya cargados con su valor, se elige uno, se corrige y se vuelve derecho al resumen. Los campos que alimentan a otros declaran 'invalida' en el seed: cambiar el tipo de ausentismo borra el motivo y lo vuelve a preguntar, acotado al tipo nuevo. Sin eso quedaba un motivo de Incapacidad dentro de un Permiso y el ERP recibia datos incoherentes sin que nadie lo notara. El motor engancha en un solo lugar, capAskNext: mientras queden campos sin valor los pregunta en cadena, y cuando no queda ninguno vuelve al resumen en vez de seguir el orden del formulario. Aplica a los cinco flujos de carga. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
6616b63683
commit
52dbd1e203
@@ -270,6 +270,56 @@ $r = NormalBot::process($co, $ctx, 'subir labores diarias');
|
||||
check('"subir labores diarias" arranca el flujo directo', str_contains(textoDe($r), 'De qué fecha es la labor'));
|
||||
capturas();
|
||||
|
||||
// ════ 9. Editar desde el resumen ══════════════════════════════════════════════
|
||||
echo "\nEditar — corregir sin rehacer el formulario\n";
|
||||
|
||||
$ctx = contexto('57300EDITAR');
|
||||
NormalBot::processInteractive($co, $ctx, 'registrar_ausentismo');
|
||||
NormalBot::process($co, $ctx, 'julio');
|
||||
NormalBot::processInteractive($co, $ctx, '412');
|
||||
NormalBot::processInteractive($co, $ctx, 'Incapacidad');
|
||||
NormalBot::processInteractive($co, $ctx, '46');
|
||||
NormalBot::processInteractive($co, $ctx, $hoy);
|
||||
$r = NormalBot::processInteractive($co, $ctx, $manana);
|
||||
check('el resumen ofrece editar', isset(filasDe($r)['__cap_edit']));
|
||||
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_edit');
|
||||
$campos = filasDe($r);
|
||||
check('lista los campos ya cargados',
|
||||
array_keys($campos),
|
||||
['__cap_ed:empleado_id', '__cap_ed:grupo_novedad', '__cap_ed:novedad_id',
|
||||
'__cap_ed:fecha_inicial', '__cap_ed:fecha_final', '__cap_ed_volver']);
|
||||
|
||||
// Un campo hoja: se corrige y vuelve derecho al resumen
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_ed:fecha_final');
|
||||
check('pregunta solo ese campo', str_contains(textoDe($r), 'Hasta qué fecha'));
|
||||
$pasado = date('Y-m-d', strtotime('+2 days'));
|
||||
$r = NormalBot::processInteractive($co, $ctx, $pasado);
|
||||
check('y vuelve al resumen, no al siguiente campo', isset(filasDe($r)['__cap_confirm']));
|
||||
check('con el valor corregido', str_contains(textoDe($r), $pasado));
|
||||
|
||||
// Un campo del que otro depende: se re-pregunta en cadena
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_edit');
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_ed:grupo_novedad');
|
||||
check('editar el tipo vuelve a preguntar el tipo', str_contains(textoDe($r), 'tipo de ausentismo'));
|
||||
$r = NormalBot::processInteractive($co, $ctx, 'Permiso');
|
||||
check('y encadena el motivo, que quedó inválido', str_contains(textoDe($r), 'Cuál es el motivo'));
|
||||
check('acotado al tipo nuevo', array_map('strval', array_keys(filasDe($r))), ['50']);
|
||||
$r = NormalBot::processInteractive($co, $ctx, '50');
|
||||
check('recién ahí vuelve al resumen', isset(filasDe($r)['__cap_confirm']));
|
||||
|
||||
// Salir sin tocar nada
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_edit');
|
||||
$r = NormalBot::processInteractive($co, $ctx, '__cap_ed_volver');
|
||||
check('"Volver" deja todo como estaba', isset(filasDe($r)['__cap_confirm']));
|
||||
|
||||
capturas();
|
||||
NormalBot::processInteractive($co, $ctx, '__cap_confirm');
|
||||
$post = array_values(array_filter(capturas(), fn($c) => ($c['peticion'] ?? '') === 'ausentismos_up'))[0] ?? null;
|
||||
check('el POST lleva lo editado, sin restos del valor viejo',
|
||||
[$post['body']['novedad_id'] ?? null, $post['body']['fecha_final'] ?? null],
|
||||
['50', $pasado]);
|
||||
|
||||
// ════ Resultado ═══════════════════════════════════════════════════════════════
|
||||
echo "\n" . ($GLOBALS['fallas'] ? "{$GLOBALS['fallas']} falla(s)\n" : "Todos los flujos ejecutan de punta a punta\n");
|
||||
exit($GLOBALS['fallas'] ? 1 : 0);
|
||||
|
||||
Reference in New Issue
Block a user