Mejorar la experiencia de desarrollo para FacturaScripts 2023

carlos carlos Noticias Fecha de creación: 07-07-2022 20:01:51 Última actualización: 12-07-2022 Equipo: DEVELOPMENT Contador de visitas: 2054

Hemos comenzado el desarrollo de FacturaScripts 2023 en la rama new-engine del repositorio en github.

Al contrario que con FacturaScripts 2018, este no será un rediseño desde cero, sino simplemente una actualización un poco más grande de lo habitual, pero sin romper demasiado. Y digo demasiado porque obviamente romperemos compatibilidad con algunas clases. El diseño del core no es lo suficientemente robusto o flexible para poder añadir nuevas funciones sin tener que romper compatibilidad en algunas ocasiones. En la ayuda tienes precisamente una sección sobre migración de plugins antiguos, para puedas ver qué hay que modificar de una versión a otra.

Mejoras para la nueva versión

Antes de pasar a detallar los cambios que traerá la nueva versión, nos gustaría que te tomases unos minutos para meditar qué echas en falta en el core actual, a nivel de desarrollo, o qué cambiarías lo antes posible. En la nueva versión queremos facilitar el trabajo de todos los programadores, por lo que el feedback es importante.

Proponer cambios

Si tienes una propuesta concreta, puedes enviarla por cualquiera de estos medios:

Propuesta de ejemplo

Me gustaría que se añadiese la función trans() a twig, para no tener que estar llamando continuamente a i18n.trans() en las plantillas twig, y no tener que pasarlo como parámetro a las macros. Ejemplo de código:

{{ trans('save') }}

Rediseño de Core/App

Se ha sustituido toda la parte de Core/App por un nuevo kernel, más limpio, rápido y con manejador de errores integrado, lo que nos permite poder lanzar excepciones en cualquier clase y que el kernel reaccione con un controlador concreto, que podemos personalizar desde los plugins.

Este nuevo kernel nos permite, por ejemplo, no conectar a la base de datos a menos que sea necesario (porque algún modelo quiera leer datos). Si en ese momento no puede conectar con la base de datos, la propia clase Database lanza una excepción concreta, que recibe el kernel y carga el controlador específico, en este caso el DatabaseError, que muestra la plantilla html con el error en pantalla.

Este pequeño cambio nos abre muchas puertas, además de aumentar el rendmiento. Ya no tenemos que hacer comprobaciones en cada petición, ahora podemos cortar la ejecución en cualquier momento lanzando una excepción, que nosotros mismos podemos controlar. El código también queda mucho más limpio, solo hay que ver el nuevo index.php

Adiós a las constantes FS_XXX, hola Setup::get()

Tenemos el código plagado de llamadas a constantes como FS_FOLDER, FS_NF0, etc. Unas se definen en el config.php, otras las carga AppSettings, un lío. Además las herramientas de análisis de código muchas veces no encuentran dónde se definen y muestran errores. En esta nueva versión se ha añadido la clase Setup, que permite consultar estas constantes y también cargarlas desde el archivo config.php o bien desde variables de entorno, lo que abre la puerta a poder desplegar FacturaScripts en docker saltando el paso de la instalación y pasando los datos de configuración de la base de datos como variables de entorno.

Antes:

echo FS_TIMEZONE;

En 2023:

echo Setup::get('timezone');

Cambios en el manejo de la base de datos

A parte de no conectar a la base de datos a menos que sea necesario, solamente se comprobará y actualizará la base de datos cuando se instale o actualice. Hasta ahora cada vez que se inicializaba un modelo, se comprobaba la tabla correspondiente y se guardaba en una lista en caché, para no comprobar de nuevo cada vez. Pero la caché se refresca cada hora y de nuevo se volvía a comprobar la tabla. Para entornos pequeños nunca ha supuesto un problema, pero en entornos como megacity es un problema de rendimiento.

A partir de ahora la case DatabaseUpdater se encargará de comprobar y actualizar las tablas de la base de datos cuando se instala o actualiza (o cuando se pulsa reconstruir en el listado de plugins).

Nueva clase Session

Hasta ahora solamente el controlador tenía cargado el usuario que ha iniciado sesión. Si desde otra clase queríamos consultar algo del usuario, debíamos pasarlo como parámetro desde el controlador. Este es un limitante en muchos escenarios y a menudo obliga a cambiar la lista de parámetros de algunas funciones, rompiendo la compatibilidad con otros plugins. Con la nueva clase Session podremos consultar desde cualquier otra clase datos relativos al usuario que ha iniciado sesión, así como la IP, obtener o validar tokens para formularios, etc.

Trabajos en segundo plano

Existen muchas tareas que tenemos que ejecutar, pero que no son imprescindibles en ese momento. Por ejemplo, cuando hacemos un asiento, debemos recalcular los saldos de las subcuentas, pero no es imprescindible en ese momento, podríamos hacerlo después. Para este tipo de situaciones necesitamos una forma de poder ejecutar tareas "en segundo plano". Esta función todavía no está implementada.

Otros cambios

Aún faltan cosas por concretar, y recibir feedback de los programadores. No se espera romper demasiado la compatibilidad con esta nueva versión, pero si facilitar mucho el desarrollo. Quedamos atentos a vuestros comentarios y sugerencias ;-)

Índice


Amplía tus conocimientos con los cursos oficiales

Curso de usuario

Con este curso aprenderás a gestionar el día a día de tu negocio con FacturaScripts: hacer facturas, albaranes, pedidos, presupuestos, gestionar clientes, proveedores, tarifas, usuarios, además de usar el informe de impuestos. ¿A quién va dirigido? A cualquier usuario que quiera aprender rápidamente el manejo diario del programa.

356 0,00 €
Curso básico de PHP

¡Aprende a programar en PHP de manera fácil y divertida con nuestro curso básico! En este curso, te enseñaremos los conceptos fundamentales de la programación en PHP, incluyendo la sintaxis básica, el manejo de variables, estructuras de control de flujo y mucho más. Al terminar estarás listo para comenzar con el curso de creación de plugins para FacturaScripts.

63 5,99 €
Curso básico de programación

Con este curso aprenderá cómo crear un plugin sencillo para FacturaScripts: añadir nuevas páginas, tablas y columnas. Para entender este curso no se necesita mucha experiencia en programación, le enseñaremos los básico para modelar problemas sencillos. ¿A quién va dirigido? A cualquier persona con unos conocimientos muy básicos de programación o que ya han completado el curso de PHP. ¿Qué incluye? 18 lecciones con 14 vídeos explicativos.

395 5,99 €

Patrocinadores

Estas empresas y profesionales apoyan económicamente FacturaScripts y nos ayudan a dedicar más tiempo al desarrollo, las pruebas y la documentación.

ORO
PLATA
BRONCE
PRO
mililitrosdeperfume_lao
mililitrosdeperfume_lao
miguel.garcia_l25
miguel.garcia_l25
carlos
carlos
daniel89fg
daniel89fg
yopli2000_5
yopli2000_5
adelantia_8n
adelantia_8n
davidpujantelopez_mrf
davidpujantelopez_mrf
luis_12743
luis_12743
info-con_12812
info-con_12812
juan_pil
juan_pil
mariano_6807
mariano_6807
jventuragarcia_13040
jventuragarcia_13040
juancarlos_ptr
juancarlos_ptr
eduardo_12367
eduardo_12367
smartcuines_1378
smartcuines_1378
almondgroup1984_pjc
almondgroup1984_pjc
samleevoid_n58
samleevoid_n58
esteban
esteban
gestion_kw4
gestion_kw4
galonso_12031
galonso_12031
aadministracion_q7r
aadministracion_q7r
weareunoth_qjg
weareunoth_qjg
pdrconde_qj7
pdrconde_qj7
sgturbexia_qk6
sgturbexia_qk6
jmlouzao_1624
jmlouzao_1624
silver135_7281
silver135_7281
carmen_qkb
carmen_qkb
comercial_2hg
comercial_2hg
comecial_22269
comecial_22269
enrique_3ir
enrique_3ir
agudoteleco_ql2
agudoteleco_ql2
businesscentreageo_ql6
businesscentreageo_ql6
gescia_qls
gescia_qls
diegosilvagalan_qlu
diegosilvagalan_qlu
andres_ndr
andres_ndr
rlugaresi_7553
rlugaresi_7553
limacomputertechsatguadalajara_qlq
limacomputertechsatguadalajara_qlq
guillermo.codina_qke
guillermo.codina_qke
comercial_22961
comercial_22961
fcojosepgarcia_q2b
fcojosepgarcia_q2b
creativoz_21943
creativoz_21943
jacsangines_qm7
jacsangines_qm7
rodsolmi_qg6
rodsolmi_qg6
adan.perivalta_qm0
adan.perivalta_qm0
sobradosl_pny
sobradosl_pny
software_18387
software_18387
maintrackstudio_15596
maintrackstudio_15596
trmmante_qmr
trmmante_qmr
webigame_2714
webigame_2714
gabrielparrado12_22507
gabrielparrado12_22507
aaronelserd.ig_qn2
aaronelserd.ig_qn2
andromeda6248_qn3
andromeda6248_qn3
instalaciones.julius_qnb
instalaciones.julius_qnb
carlosmorenogil_16533
carlosmorenogil_16533
juanca_ong
juanca_ong
adrianmaes_17283
adrianmaes_17283
team_qnp
team_qnp
elgallineroelpalmar_qnq
elgallineroelpalmar_qnq
integraciondigital_pt7
integraciondigital_pt7
serranokevin22_14028
serranokevin22_14028
jmoreno_2610
jmoreno_2610
curtipiel_qnt
curtipiel_qnt
sevsatv_qo5
sevsatv_qo5
rubenmartimaza_qo4
rubenmartimaza_qo4
mariopablobarron_psq
mariopablobarron_psq
javietglez86_qoa
javietglez86_qoa
drus_9012
drus_9012
zasahora_qof
zasahora_qof
xecron_2176
xecron_2176
mistbookapp_qoh
mistbookapp_qoh
gaston.pechieu_6301
gaston.pechieu_6301
lfrimansegura_pxj
lfrimansegura_pxj
angelroldancordoba_qoq
angelroldancordoba_qoq
mcreparacionesymantenimientos_qow
mcreparacionesymantenimientos_qow
enya_qoz
enya_qoz
cruzmorenob_qp6
cruzmorenob_qp6
kateto2002_obv
kateto2002_obv
ricard.teba_qpe
ricard.teba_qpe
robertorama.gal_qi2
robertorama.gal_qi2
rubente14_qpa
rubente14_qpa
marcosclapes_qpr
marcosclapes_qpr
monthersan_20181
monthersan_20181
david.luque_pw1
david.luque_pw1
stefan.yoshovski_qpz
stefan.yoshovski_qpz
luis.saport_qpx
luis.saport_qpx
alihopeyourlove_pif
alihopeyourlove_pif
anandalor_qq6
anandalor_qq6
pielnaturacosmetica_mgo
pielnaturacosmetica_mgo
lluis_qiv
lluis_qiv
kevin._alex_ikc
kevin._alex_ikc
ahs.toscali_k1j
ahs.toscali_k1j
andres_k12
andres_k12
eneug2017elpozo_qqd
eneug2017elpozo_qqd
domingofernandez.dff_qqe
domingofernandez.dff_qqe
claudiosanz_42c
claudiosanz_42c
metalid.official_qeg
metalid.official_qeg
andreupear_qqk
andreupear_qqk
jesusgarcialopez1_qji
jesusgarcialopez1_qji

Si quieres impulsar nuevas mejoras y ayudar a que el proyecto siga creciendo, conviértete en patrocinador y forma parte de quienes lo hacen posible.

Patrocinar

Cookies
Usamos cookies necesarias para el funcionamiento del sitio y cookies opcionales para recordar tus preferencias y mejorar tu experiencia. Puedes aceptarlas todas, rechazarlas o configurar tus preferencias

Soporte