Jump to content

[SOLUCIONADO] Orden de los productos en la factura


Javier Campos

Recommended Posts

Muy buenas,

 

Necesitaría poder controlar el orden en el que los productos salen en la factura generada por Prestashop.

 

He encontrado en el foro este tema: https://www.prestashop.com/forums/topic/186155-solucionadoordenar-productos-de-la-factura/ pero es antiguo y parece que las nuevas versiones de prestashop no hacen una única consulta, sino varias.

 

¿Alguien sabe como modificar el orden de las productos en la factura?

Edited by Javier Campos (see edit history)
Link to comment
Share on other sites

Realizando un override de la funcion getProductsDetail()

classes\order\OrderInvoice.php

en el que se aplique un orden especifico en la query, por defecto se aplica el nombre del producto. Para establecerlo por el id solo haria falta cambiarlo por

ORDER BY od.`product_id`
Link to comment
Share on other sites

public function getProductsDetail()
{
    return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
    SELECT *
    FROM `'._DB_PREFIX_.'order_detail` od
    LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)
    LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
    WHERE od.`id_order` = '.(int)$this->id);
}

Puede cambiar esa parte después de WHERE para ordenar artículos de orden de una manera diferente.

You can change that part after WHERE to sort order items in a different way.

Link to comment
Share on other sites

public function getProductsDetail()
    {
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
		SELECT *
		FROM `'._DB_PREFIX_.'order_detail` od
		LEFT JOIN `'._DB_PREFIX_.'product` p
		ON p.id_product = od.product_id
		LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
		WHERE od.`id_order` = '.(int)$this->id_order.'
		'.($this->id && $this->number ? ' AND od.`id_order_invoice` = '.(int)$this->id : '').' ORDER BY od.`product_name`');
    } 

tuk66Esta es la forma en la que yo tengo declarada dicha funcion. Voy a probar a ponerlo tal y como tu me propones y ver que pasa.

Link to comment
Share on other sites

Finalmente he conseguido que los productos aparezcan en la factura en el mismo orden en el que se agregan al carrito.

public function getProductsDetail()
    {
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
		SELECT *
		FROM `'._DB_PREFIX_.'order_detail` od
		LEFT JOIN `'._DB_PREFIX_.'product` p ON p.id_product = od.product_id
		LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
		WHERE od.`id_order` = '.(int)$this->id_order.'
		'.($this->id && $this->number ? ' AND od.`id_order_invoice` = '.(int)$this->id : ''));
    }
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...