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: 2099

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.

400 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 €

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
eduardo_12367
eduardo_12367
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
gestion_kw4
gestion_kw4
juan_pil
juan_pil
mariano_6807
mariano_6807
juancarlos_ptr
juancarlos_ptr
smartcuines_1378
smartcuines_1378
almondgroup1984_pjc
almondgroup1984_pjc
samleevoid_n58
samleevoid_n58
esteban
esteban
galonso_12031
galonso_12031
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
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
itacadigital_42c
itacadigital_42c
metalid.official_qeg
metalid.official_qeg
andreupear_qqk
andreupear_qqk
jesusgarcialopez1_qji
jesusgarcialopez1_qji
octaviodelineante_22415
octaviodelineante_22415
nimbi_journal3d_qr7
nimbi_journal3d_qr7
pablosateca_qr9
pablosateca_qr9
miestecodex_lvm
miestecodex_lvm
davids_qri
davids_qri
esvabavet_qrj
esvabavet_qrj
f1caroficina_qrm
f1caroficina_qrm
piensanet_21047
piensanet_21047
agujaycalma_qop
agujaycalma_qop
administracion_13337
administracion_13337
norteseo_ko2
norteseo_ko2
sitges_qmp
sitges_qmp
soporte_qrz
soporte_qrz
administracion_q4m
administracion_q4m
patitaslimpias2025_qs7
patitaslimpias2025_qs7
ancurte_1489
ancurte_1489
makeflow360_qrr
makeflow360_qrr
redsion_qs0
redsion_qs0
javi431_qsh
javi431_qsh
sosaarnaboldijuancarlos_ocx
sosaarnaboldijuancarlos_ocx
info.aeiinstitute_qsl
info.aeiinstitute_qsl
pivicdata_q89
pivicdata_q89
informaticaasgaya_qst
informaticaasgaya_qst
informestecnicosjardin_qtc
informestecnicosjardin_qtc
no-reply_qtd
no-reply_qtd
fastudo_r_qrh
fastudo_r_qrh
pintoleidy246_qts
pintoleidy246_qts
calderonpeedro_qtv
calderonpeedro_qtv
simon.isern_o5h
simon.isern_o5h
carlos_qt8
carlos_qt8
jordi.cabanes.costa_qu2
jordi.cabanes.costa_qu2
sebastiansobral_qu5
sebastiansobral_qu5
pastoracalero.m_qsg
pastoracalero.m_qsg
ramon1969_qu6
ramon1969_qu6
carteleramusicales_qub
carteleramusicales_qub
13gradosvigo_qan
13gradosvigo_qan
carlos.arturo.blandon.jaramillo_qud
carlos.arturo.blandon.jaramillo_qud
gruposatibiza_pse
gruposatibiza_pse
chiptuner_que
chiptuner_que
carlosmorenogil_16533
carlosmorenogil_16533
juan_nyw
juan_nyw
rigosalvadorez_qum
rigosalvadorez_qum
dvdhellin_ncv
dvdhellin_ncv
valdecrc_qtg
valdecrc_qtg
movilquickbenidorm_4112
movilquickbenidorm_4112
00ilauraa_quv
00ilauraa_quv
manitasourense_quy
manitasourense_quy
zaszeszis_qv5
zaszeszis_qv5
josejcarmonasr_qu8
josejcarmonasr_qu8
germandiazgarcia63_qvm
germandiazgarcia63_qvm

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