Jump to content

[SOLUCIÓN] Reiniciar número de factura.


Recommended Posts

Buenas, escribo este post por si es de utilidad para alguien que se tope con este problema.

El caso:
La empresa con tienda en prestashop ha cambiado de nombre, por lo que se necesita reiniciar las facturas. Puede que otra persona necesite reiniciarlas por otro motivo.
Sabiendo que las facturas deben seguir un orden lógico y de más cosas que he leído por ahí, no encontraba ninguna solución definitiva a mi problema ya que no me valía el poner el año delante ni cosas así, mi ultima factura era la T00698 y quería que la siguiente fuera la T00001.

Porqué ocurre esto:
Prestashop calcula el último numero de factura haciendo un SELECT MAX('number') de la tabla de facturas por lo que por más que cambies el último registro, si no te cargas los anteriores te seguirá sacando un número que no quieres

La solución:
he creado el siguiente fichero que se debe ubicar en override/classes/order/Order.php, cambiando la consulta:
 

<?php


class Order extends OrderCore
{

    public static function getLastInvoiceNumber()
    {
       
        $sql = 'SELECT `number` FROM `' . _DB_PREFIX_ . 'order_invoice` ORDER BY `id_order_invoice` DESC';

        return Db::getInstance()->getValue($sql);
    }


    public static function setLastInvoiceNumber($order_invoice_id, $id_shop)
    { 
        if (!$order_invoice_id) {
            return false;
        }

        $number = Configuration::get('PS_INVOICE_START_NUMBER', null, null, $id_shop);
        // If invoice start number has been set, you clean the value of this configuration
        if ($number) {
            Configuration::updateValue('PS_INVOICE_START_NUMBER', false, false, null, $id_shop);
        }

        $sql = 'UPDATE `' . _DB_PREFIX_ . 'order_invoice` SET number =';

        if (!$number) {

            $getNumberSql = 'SELECT `number` FROM `' . _DB_PREFIX_ . 'order_invoice` 
            WHERE `id_order_invoice` = (SELECT `id_order_invoice` FROM `' . _DB_PREFIX_ . 'order_invoice` ORDER BY `id_order_invoice` DESC LIMIT 1, 1)';
            $lastNumber = Db::getInstance()->getValue($getNumberSql);
            $number = $lastNumber +1;
        } 

        $sql .= (int) $number;

        $sql .= ' WHERE `id_order_invoice` = ' . (int) $order_invoice_id;

        return Db::getInstance()->execute($sql);
    }

}

Ahora cogerá el último 'number' de la tabla, por lo que podrás modificar el número por el que quieres que sigan las facturas simplemente modificando el último valor 'number' de tu tabla ps_order_invoice.

Espero que sirva, si hay algo que ven que pueda generar un problema comentarlo sin problemas, un saludo.


 

Edited by PepeFernandez
fix error on code (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...