Skip to content

Edit navigation#2002

Open
Yopli2k wants to merge 2 commits into
NeoRazorX:masterfrom
Yopli2k:edit-navigation
Open

Edit navigation#2002
Yopli2k wants to merge 2 commits into
NeoRazorX:masterfrom
Yopli2k:edit-navigation

Conversation

@Yopli2k

@Yopli2k Yopli2k commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Descripción

Añade botones de navegación ‹ n/m › en las pantallas de edición para avanzar y retroceder por los registros tal y como se estaban viendo en el listado de origen (mismos filtros, búsqueda y ordenación), sin tener que volver atrás.

El sistema no reconstruye filtros ni consultas en el Edit. Al renderizar un listado, cada ListView guarda en caché una "foto" de los códigos visibles (claves primarias), identificada por un token aleatorio de un solo render. Los enlaces de fila añaden &navfrom={token}, y el Edit solo tiene que localizar su code dentro de esa foto para pintar los botones y el indicador de posición. Sin token, con la foto caducada (TTL 1h) o si el registro no está en ella, simplemente no se muestran botones.

Detalles del diseño:

  • Token por render + rotación: se conservan las últimas 10 fotos por vista y usuario (ListView::NAVIGATION_TOKENS), borrando las que caducan. Cada pestaña del navegador navega su propia secuencia sin interferir con otras.

  • Alcance de la foto: la pestaña activa de un ListController amplía la foto una página antes y otra después con una consulta ligera (solo la clave primaria, mismo where/order). El resto de pestañas y las vistas de listado dentro de paneles cosechan el cursor ya cargado, sin coste SQL adicional.

  • Solo registros propios: la foto se genera únicamente cuando el enlace de la fila abre el propio registro (rowCodeIsPrimaryKey()). Listados cuyas filas enlazan a otro modelo (líneas de documentos, joins de líneas) no generan navegación, evitando secuencias sin sentido o colisiones de identificadores.

  • Documentos incluidos: getNavigation() vive en PanelController, por lo que también funcionan facturas, albaranes, pedidos, presupuestos (ventas y compras) y asientos. El JavaScript de guardado de esos formularios propaga el token al recargar.

Cambios realizados

  • ListView: saveNavigation(), navigationCodes() y rowCodeIsPrimaryKey(); constante
    NAVIGATION_TOKENS y propiedad navToken. Setting de vista navigation (activado por
    defecto en BaseView) para poder desactivarlo por vista.

  • ListController y PanelController: generación de la foto tras cargar datos (todas las
    pestañas de listado, salvo acciones sin render como export/megasearch).

  • PanelController::getNavigation(): consumo de la foto en cualquier controlador de panel.

  • Master/ListView.html.twig: navfrom en los enlaces de fila.

  • Master/PanelController.html.twig y Master/PanelControllerTop.html.twig: botones de
    navegación (Bottom y LeftBottom los heredan).

  • Tab/SalesDocument.html.twig, Tab/PurchasesDocument.html.twig y
    Tab/AccountingEntry.html.twig: propagación del token al guardar.

Cómo probar

  1. Filtrar/ordenar/buscar en ListCliente, entrar en un cliente → aparecen ‹ n/m › y se
    navega siguiendo el orden del listado; al volver, el listado sigue igual.
  2. Repetir desde una pestaña secundaria (p. ej. grupos de clientes) y desde un listado
    dentro de un panel (pestaña de facturas de EditCliente): cada contexto navega su lista.
  3. En una factura de venta, navegar, modificar y guardar → la página recarga conservando
    la navegación.
  4. Abrir dos pestañas del navegador con el mismo listado y filtros distintos: cada una
    navega su propia secuencia.
  5. Entrar a un Edit por URL directa o desde una lista de líneas de documento → no hay
    botones (comportamiento esperado).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant