PrestaShop y su descuidada relación número de factura - fecha de factura

21182 lecturas
2020-05-20 (actualizada el 2022-05-07)
Algo que PrestaShop lleva haciendo mal desde el inicio de los tiempos es el descuadre entre número de factura y fecha de factura. Esto es porque la fecha de factura la puede guardar días antes de que se genere el número de factura. Afortunadamente, es muy fácil de solucionar.

Una regla básica en la facturación de nuestro negocio, es que debe existir una correlación entre los números y las fechas de factura.

Es una exigencia legal: no puede haber una factura con número posterior a otra pero con fecha anterior. Puede haber saltos en los números de factura, por ejemplo si hemos cancelado y eliminado una, pero no puede ser que una factura con un número posterior a otra tenga una fecha anterior a la de la misma.

Esto está absolutamente descuidado en PrestaShop. Parece mentira que después de tanto tiempo, y teniendo una solución realmente sencilla, aún siga igual de mal (al menos a fecha de hoy).

Hay que decir que, afortunadamente, muchas tiendas no advierten este problema. Por ejemplo, si en tu tienda sólo existe el método de pago con tarjeta (mediante pasarela bancaria), es muy raro que se produzca algún caso de descuadre.

El problema es que PrestaShop registra los datos para la factura, en la tabla order_invoice, antes de que sea necesario generar la factura, esto es, antes de que el pedido pase a un estado de pedido que tenga marcada la opción factura. Y, cuando por fin pasa un estado que provoca la generación de la factura, realmente la generación del número de factura, no guarda la fecha de este momento como fecha de factura, sino que sigue utilizando la fecha en que registró los datos para la factura (osea, la fecha date_add de la tabla order_invoice). Y es que en la tabla order_invoice no existe un dato fecha de factura, sólo ese date_add, que se usa en general en todas las tablas para guardar el momento de inserción del registro, pero que aquí PrestaShop también lo usa como fecha de factura, algo que resulta erróneo.

En la tabla orders sí encontramos un dato fecha de factura (invoice_date), así como uno número de factura (invoice_number), pero estos datos parece que no se usan (los filtros para imprimir facturas no los miran para nada), y en particular invoice_date es tan erróneo como date_add en invoice_date.

La mejor solución sería tener un dato claro y específico para la fecha de factura, pero si queremos solucionar YA nuestra tienda PrestaShop, lo más sencillo es hacerlo con un override de la clase Order, donde se haga que, en el momento en que se pone número a una factura, se actualice la fecha date_add con la actual.

Eso deja preparado nuestro PrestaShop para que no se vuelva a producir el error de descuadre entre número y fecha de factura, pero ¿qué pasa si ya tengo facturas descuadradas? Están mal, no las puedo presentar ¿cómo lo soluciono? Pues lo suyo es intentar corregir las facturas poniéndoles la fecha correcta, esto es, la fecha en que realmente se generó el número de factura. Pero ¿se puede hacer? ¿existe esa fecha en algún sitio de donde la podamos recuperar?

La respuesta es , esa fecha la tenemos en la tabla order_history, tenemos que buscar ahí, para el pedido correspondiente a la factura que queramos arreglar, el registro más antiguo de paso a un estado de pedido con la opción factura. La fecha de ese registro es la fecha en que se generó el número de factura y, por tanto, la fecha correcta de factura.

Por supuesto, hacer esa tarea a mano puede ser difícil y engorroso, más aún si no es una factura sino varias las que tenemos que arreglar. Por eso, he desarrollado un script que revisa las facturas por nosotros y corrige aquellas que tienen mal el número de factura.

Si necesitas mi ayuda sobre este tema de fechas de factura mal en PrestaShop, no dudes en contactar conmigo. Estaré encantado de ayudarte.