Esta web usa cookies propias y de terceros para mejorar tu experiencia de navegación y realizar tareas de análisis. Al continuar con tu navegación entendemos que das tu consentimiento a nuestra política de cookies.

MY NEW STATIC BLOG. WHY? BECAUSE FUCK YOU, THAT'S WHY!




FacturaScripts es un software del que hablo poco porque no estoy muy orgulloso. Hace unos años implanté el software de gestión de empresas Facturalux en un pequeño minorista de recambios de automóviles. El personal de administración lo acogió bien, pero el personal de almacén y de mostrador ... nunca habían usado un ordenador, y Facturalux (ahora Abanq) no es un software que destaque por su sencilla interfaz. Además esta empresa usa un catálogo enorme de artículos y las búsquedas se eternizan.

Por estos motivos pensé que lo más sencillo era "copiar" el software más sencillo y más usado: Google. FacturaScripts nació como una simple interfaz web para hacer búsquedas en la base de datos de Abanq, añadir artículos al carrito y generar albaranes con ellos. Este camino fue un tanto complicado, pero no a nivel técnico. El problema era cómo diseñar la interfaz para que el personal la usase y dejasen de hacer albaranes en papel de una puta vez. Y el problema era gordo, porque todo el mundo decía que era sencillo, pero en cuanto me daba la vuelta dejaban de usarlo ...

Más tarde fui añadiendo funcionalidades o módulos para suplir más y más características de Abanq, pero siempre con la frustración de ver que apenas se usan, porque la lucha contra el papel la tengo perdida de antemano ... ya sé que suena raro que en una empresa en el años 2012 se sigan haciendo albaranes en papel, no se haya hecho nunca un inventario, se apunten los pedidos en una agenda y no se permitan pagos con tarjeta, pero ... es lo que hay :(

El caso es que hace unos días tuve que hacer unas modificaciones y ... me dio mucho asco mi propio código. No hablo mucho de este proyecto porque he cometido muchos errores de diseño:

  • No sigue el patrón Modelo Vista Controlador.
  • No tiene apenas separación entre la capa de datos y la de presentación.
  • Casi no reutilizo código, es más, replico mucho código de forma estúpida.
  • Uso demasiados arrays cuando deberían ser objetos, y por culpa de eso tengo tanto código.
  • Hago una separación de las funcionalidades en módulos, pero luego tengo los mismos scripts en muchos módulos. Esto es por culpa de un requerimiento de otra empresa, no querían que el personal de almacén conociese los precios de los productos, etc ... esta empresa ni siquiera me pagó tras terminar el trabajo, siempre pedían más, pero nunca pagaban.
  • El tamaño del proyecto (en lineas de código) supera con creces su utilidad.
  • Añadir nuevas funcionalidades es cada vez mas tedioso.

Así que hace unos días tomé la decisión de reescribirlo desde cero, y ya de paso replicar todas las funcionalidades de Abanq, porque si no lo sabías, desde la versión 2.4 solamente admite módulos firmados digitalmente por ellos (49€ cada vez que haya que firmar). Eso sin mencionar que para usar FacturaScripts solamente necesitas un navegador, desde cualquier ordenador, teléfono o tablet.

Reescribiendo:
Paso 1: siguiendo el patrón Modelo Vista Controldador nos creamos tres carpetas: model, view y controller. El motivo es simplemente obligarnos a separar el código por cojones. Creamos una carpeta más llamada base para meter ahí la clase para el manejo de la base de datos, la clase de la que heredarán todos los modelos (fs_model) y la clase de la que heredarán todos los controladores(fs_controller).

Paso 2: aprovechar lo poco bueno de la versión anterior de FacturaScripts. Aunque parezca extraño, una de las cosas buenas que tengo en el código anterior es un algoritmo que traduce la estructura de una tabla a un xml y otro que permite crear/adaptar una tabla conforme a un fichero xml. Si estas dos partes las acoplamos a la clase fs_model conseguimos que la estructura de la base de datos se construya al vuelo. Y si añadimos una función para meter valores por defecto en la tabla cuando esta se crea, lo que conseguimos es eliminar la necesidad de un instalador.

Paso 3: homogeneizar los modelos. En la clase fs_model añadimos un par de funciones virtuales: exists(), save() y delete(). Con esto obligamos a que todos los modelos cumplan esta "micro API", y así podemos trabajar con todos de la misma forma. Ya sé que es algo muy básico, pero hasta ahora no lo cumplía :(

Paso 4: usar un motor de plantillas para las vistas. Ya sé que php es casi un motor de plantillas, pero me admitiréis que el código no es tan legible como con django/jinja. Y sobre todo que es demasiado cómodo saltarnos la separación entre modelo, vista y controlador. Entre los muchos motores de plantillas de php he elegido RainTPL por ser rápido y limitado ... de hecho es tan limitado que he tenido que modificar su función loop para poder usarla sobre el resultado de una función.

Paso 5: adiós módulos, hola controladores. Se acabó lo de instalar módulos que luego aportan poco, la nueva versión se centra en los controladores, pudiendo activarlos o desactivarlos desde administración y permitiendo o denegando el acceso a cada uno de los usuarios.

Actualización: podéis acceder al código desde la rama 0.9 de subversion:
svn checkout http://facturascripts.googlecode.com/svn/branches/0.9 facturascripts-0.9

Continuara ...


29-02-2012
CHIP Prodigioso

Me parece un fantástico enfoque. Ahora lo más practico es usar una interfaz de navegador. Puedes moverte fácilmente por la empresa y acceder desde cualquier equipo conectado a la intranet.
Espero poder probar pronto tu script.
Gracias.

29-02-2012
Anonymous

+1

29-02-2012
Anonymous

Donde podríamos conseguir las nuevas funcionalidades? Podríamos colaborar de alguna manera?

29-02-2012
Carlos Garcia Gomez

Por ahora puedes acceder al código desde la rama 0.9 de subversion:
svn checkout http://facturascripts.googlecode.com/svn/branches/0.9 facturascripts-0.9

21-09-2012
Anonymous

Ojo con los XSS que existen en la selección del CSS.
Por ejemplo
http://www.facturascripts.com/index.php?page=admin_agentes&css_file=%22%3EHola%3C!--

21-09-2012
Carlos Garcia Gomez

Cierto, me pongo a trabajar en ello.
Muchas gracias ;-)

03-11-2012
INFONITX - Sa tenda d'informàtica

Hola, hace unos 8-9 años, programamos junto con mi ex-socio, un programa de facturación y control de existencias en PHP. Hasta conseguimos generar facturas en PDF! Pero luego tuvimos mucho trabajo, lo abandonamos y lo sustituimos por FacturaLUX (actualmente abanq). Resulta que ya hacía tiempo que quería volver a ponerme manoas a la obra con el proyecto inicial, y resulta que ahora me encuentro este trebajo ya empezado. Puedo aprovecharlo? Puedo colaborar? Muchas gracias.

04-11-2012
Carlos Garcia Gomez

Claro que puedes ;-)

Descarga el código con subversion y trastea todo lo que quieras. Si tienes alguna duda pregúntame. Cuando tengas algún cambio que quieras enviarme, avísame y te diré como continuar.

Mi email es: neorazorx(arroba)gmail(punto)com

comments powered by Disqus

Powered by PussyPress.