Crear informes con phpSpreadsheet (actualización)

He actualizado este artículo y ejemplo, para adecuarlo a las últimas versiones de la biblioteca de PHP phpSpreadsheet. Esta versión requiere PHP 8.X y he añadido la extensión de «dompdf/dompdf», para poder crear PDF’s y la biblioteca «mitoteam/jpgraph», para los gráficos en PDF.

He hecho prueba de pasar los informes del ejemplo a PDF y el resultado, desde mi punto de vista, sigue siendo muy malo.

También, he generalizado el acceso a los datos para que no sea dependiente de MySQL. Ahora serviría para cualquier base de datos.

El informe de Municipios con ruptura y cabecera por Provincia lo he realizado siguiendo el método propuesto de insertar líneas para «arrastrar» los estilos de las filas, el que he llamado «lento» y el llamado «rápido» he utilizado el método de copiado de estilos, sin hacer inserciones de líneas.

Cuando inserta líneas, además de copiar los estilos revisa toda la hoja para recalcular las fórmulas y de ahí la tardanza que tiene una progresión exponencial del tiempo requerido según se va aumentando el número de registros.

Para 8.122 registros, la mejora es de al menos de 10 a 1.

DEMO: https://fhumanes.com/reports/

Si te interesa este tema, sigue leyendo el artículo de este enlace.

Guía 22 – Depuración código PHP, línea a línea (Actualización)

He actualizado la información de esta guía para adecuarla a las versiones actuales de NetBeans, de PHP y de Xdebug.

Llevo bastantes días utilizando este producto en versiones actualizadas,  para depurar código en vez de MS Visual Studio Code y estoy muy contento de los resultados, por ello vuelvo a animaros (a aquellos que todavía no lo habéis probado) para que lo instaléis y probéis. El tiempo invertido en la instalación (que no es mucho) lo recuperaréis en cuanto tengáis que depurar algún código que no se comporte cómo tú lo habías pensado.

Objetivo

Disponer de un entorno de desarrollo donde pueda depurar código PHP (el generado por PHPRunner)  y poder ir observando, línea a línea la evolución y contenido de las variables del aplicativo.

Si te interesa este tema sigue leyendo el resto del artículo en este enlace.

Guía 74 – Crear menús dinámicamente

En el foro de Xlinesoft, un desarrollador explica con buen criterio, es mi impresión, que ver la información de «Maestro» y «Detalle», en una página «LIST», más cuando son 3 o 4 niveles de «detalle» de información es muy complejo para el usuario del aplicativo y que si había alguna otra posibilidad de tener esa capacidad de detalles y fuese más claro para los usuarios.

Por mi experiencia, me he encontrado desarrollando sistemas en donde un ítem, cómo expediente o contrato, tiene múltiples informaciones dependientes de esta entidad principal y que en los sistemas en donde los usuarios  entienden bien estas relaciones es viendo esta información como un «árbol jerárquico» donde se van abriendo «hojas» por tipo de entidad y registros de ese tipo, dependientes de la información principal.

Objetivo

Representar información jerárquica relacionada a través de un «árbol», en este caso, vamos a utilizar un menú secundario para presentar la información jerárquica.

DEMOhttps://fhumanes.com/menu_dinamico/

Si te interesa este tema, sigue leyendo el artículo de este enlace.

Integrar con Drupal

Drupal es un CMS (Gestor de contenidos) de los más utilizado, sobre todo en empresas de la Administración Pública y sitios oficiales, porque en teoría tiene menos agujeros de seguridad que el resto (WordPress, Joomla, etc.).

En concreto, se utiliza masivamente en la organización donde yo trabajaba y en la empresa donde trabaja mi hijo.

En la versión 10, que es la que he utilizado en este ejemplo, es un producto que ha madurado mucho. La mejora de estos últimos años ha sido «enorme».

Desde mi punto de vista, es un excelente producto para mostrar contenido (biblioteca de libros, imágenes, actividades de colegios o club deportivo, etc.), con mejor calidad que los desarrollos de PHPRunner y, además, es gratuito.

Si necesitáis un manual de usuario para la instalación y gestión de Drupal 10, podéis ir a esta empresa https://www.forcontu.com/user/downloads, disponen de muy buenos manuales (español e Inglés) y el básico «Site Building Introducción» os lo facilitan por registraros ( PDF 433 páginas) .

Objetivo

Esta nueva versión de Drupal incorpora un API REST Full para acceder y modificar todo su contenido y el «reto» es utilizando este API, mover contenidos (datos y ficheros) desde Drupal a PHPRunner y desde PHPRunner a Drupal.

(1).- Botón para traer todos los Artículos de Drupal a PHPRunner.
(2).- Botón para cargar  los registros seleccionados de PHPRunner a Drupal.
(3) y (4).- Tanto de la información se ha traído de Drupal, como si se ha cargado desde PHPRunner, estos datos identifican la información en Drupal, para que si sincronizamos la información, el aplicativo elimina la versión anterior.

Si estas interesado en este tema, sigue leyendo el artículo en este enlace.

Guía 73 – Planificador de Tareas Batch

En cuanto tienes una aplicación con un mínimo de complejidad, enseguida identificas que necesitas ejecutar tareas en segundo plano o batch, para ejecutar procesos a determinadas horas, por ejemplo, migración de información, backup de tu sistema, etc.

Si dispones de la totalidad de acceso a tu sistema, enseguida te acuerdas de CRON o Crontab, que es el planificador de tareas del sistema operativo.

No siempre tienes total acceso para este tipo de configuración y además es complejo. Además, tienes el problema de que pasar tu aplicación de una máquina a otra, tienes que recordar que hay acciones fuera de tu aplicativo, por lo que es una posible fuente de problemas.

He diseñado un sistema que permite integrarse 100% con PHPrunner y que elimina el problema de migración de configuración, y facilita la definición y gestión de estas tareas Batch.

Objetivo

Disponer de un sistema, similar en funcionalidad al Crontab y totalmente integrado con PHPRunner.

Este sistema debe permitir:

  • Definir las tareas en formularios hechos en PHPRunner, en donde se especifique:
    • Fecha inicial de ejecución de la Tarea.
    • Fecha final de ejecución de la Tarea.
    • Intervalo de ejecución, definido en meses, días, horas y minutos.
    • Comando de ejecución con path variable dependiendo de la ubicación del aplicativo.
    • Registro por cada ejecución que indique: hora de inicio, hora de final y resultado de la ejecución.
    • Definición de tiempo máximo de ejecución y si se supera, cancelación del proceso.
  • Ejecución única en el sistema de una tarea Batch (para no sobrecargar el sistema).
  • En las tareas Batch, posibilidad de trazas, para depuración y control, integrada con la aplicación de PHPRunner.
  • Normalización de las tareas Batch, para utilizar la conexión de base de datos del aplicativo de PHPRunner (facilidad en la migración entre sistemas).

DEMO:  https://fhumanes.com/scheduler/
(Esta versión está limitada para impedir mal uso de los ejemplos)

Información que tratamos para cada tarea. No se ejecuta cuando está marcada el campo de «Status finished» o le campo «Date Next Execution» es inferior a la fecha actual.

También, en la definición del comando a ejecutar hay estas sustituciones:

{DIR} .- Se sustituye por el path donde se este ejecutando el aplicativo
{ID_TASK} .- Se sustituye por el ID del registro de log de ejecución.

Si te interesa este tema, sigue este enlace para ver el artículo completo.

Blog personal para facilitar soporte gratuito a usuarios de React y PHPRunner