Se ha implementado una mejora importante en el manejo de DataTables con procesamiento server-side para el módulo de Bitácora en el proyecto jcposUltimate, resolviendo problemas de ordenamiento, paginación y búsqueda que impedían un funcionamiento correcto con MariaDB / MySQL.

🔗 Commit

https://github.com/julio101290/jcposUltimate/commit/7400ede1b2a826d7e9918c7475623ca0b2d5dc48

📂 Archivos modificados

❌ Problema detectado

El DataTable de la bitácora presentaba varios inconvenientes:

  • El ordenamiento por columnas no funcionaba, aunque visualmente aparecían las flechas.
  • El ORDER BY no se aplicaba dinámicamente desde los parámetros enviados por DataTables.
  • El mapeo de columnas para el ordenamiento era incorrecto.
  • La paginación y la búsqueda global no seguían buenas prácticas de seguridad.
  • La lógica del modelo no estaba alineada con el flujo real de DataTables server-side.

✅ Solución implementada

Se realizó una refactorización enfocada en robustez, compatibilidad y seguridad, logrando:

✔ Ordenamiento dinámico real

  • Implementación de un whitelist de columnas permitidas.
  • Construcción dinámica del ORDER BY usando los parámetros enviados por DataTables.

✔ Búsqueda global correcta

  • Uso exclusivo de LIKE, compatible con MariaDB / MySQL.
  • Eliminación de ILIKE, que es exclusivo de PostgreSQL.
  • Uso de bind parameters para prevenir SQL Injection.

✔ Paginación adecuada

  • Uso correcto de: LIMIT :start, :length
  • Totalmente compatible con el flujo estándar de DataTables.

✔ Separación clara de responsabilidades

  • El archivo AJAX se encarga únicamente de generar el JSON.
  • El controlador actúa como intermediario.
  • El modelo concentra toda la lógica SQL.

🧠 Beneficios obtenidos