Estábamos esperando a ver si Prestashop corrigía el error en la nueva versión de Prestashop 1.5.6 ,pero no ha sido así… La versión 1.5.5 y 1.5.6 de Prestashop tienen un bug en el carrito de la compra en donde los usuarios solo pueden agregar un único cupón de descuento (VOUCHER) por pedido, por lo que nuestros clientes no podrán combinarlos entre sí y no podrán hacer varias reglas de descuento.
Para solucionar este problema habrá que modificar unas línea de código en el archivo cart.php de la carpeta classes, es recomendable sobre escribir la función con Override, por si en algún momento actualizamos la versión de Prestashop podamos actualizarla.
La línea que pone getValue se encarga de comprobar si hay algún cupón aplicado y en el caso que exista se sale de la función.
- public function addCartRule($id_cart_rule){
// You can’t add a cart rule that does not exist
$cartRule = new CartRule($id_cart_rule, Context::getContext()->language->id);
if (!Validate::isLoadedObject($cartRule))
return false;if (Db::getInstance()->getValue(‘SELECT id_cart_rule FROM ‘._DB_PREFIX_.’cart_cart_rule WHERE id_cart = ‘.(int)$this->id))
return false;// Add the cart rule to the cartif (!Db::getInstance()->insert(‘cart_cart_rule’, array(
‘id_cart_rule’ => (int)$id_cart_rule,
‘id_cart’ => (int)$this->id
)))
return false;Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_ALL);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_SHIPPING);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_REDUCTION);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_GIFT);if ((int)$cartRule->gift_product)
$this->updateQty(1, $cartRule->gift_product, $cartRule->gift_product_attribute, false, ‘up’, 0, null, false);
return true;}
Habría que sustituirlo por el siguiente código:
- public function addCartRule($id_cart_rule)
{
// You can’t add a cart rule that does not exist
$cartRule = new CartRule($id_cart_rule, Context::getContext()->language->id);
if (!Validate::isLoadedObject($cartRule))
return false;// Add the cart rule to the cart
if (!Db::getInstance()->insert(‘cart_cart_rule’, array(
‘id_cart_rule’ => (int)$id_cart_rule,
‘id_cart’ => (int)$this->id
)))
return false;Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_ALL);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_SHIPPING);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_REDUCTION);
Cache::clean(‘Cart::getCartRules’.$this->id.’-‘.CartRule::FILTER_ACTION_GIFT);if ((int)$cartRule->gift_product)
$this->updateQty(1, $cartRule->gift_product, $cartRule->gift_product_attribute, false, ‘up’, 0, null, false);return true;
}
Como podéis ver lo que hemos hecho ha sido eliminar la línea de getValue para que compruebe todas las reglas que existen en el carrito, mientras las condiciones de los cupones se mantengan seguirá buscando nuevo cupones o combinándolos.
El mismo fallo se encuentra en prestashop 1.4.9.0
¿Se puede aplicar este mismo cambio?
Gracias
No lo hemos mirado pero el cambio es bastante grande de Prestashop 1.4 a 1.5…
Seria mas correcto dejar la linea de esta forma, para comprobar que no se vuelva a usar el mismo cupon:
if (Db::getInstance()->getValue(‘SELECT id_cart_rule FROM ‘._DB_PREFIX_.’cart_cart_rule WHERE id_cart_rule = ‘.(int)$id_cart_rule.’ AND id_cart = ‘.(int)$this->id))
return false;
Saludos,
😉
Gracias Javier, recuerda que Prestashop ya se pueden gestionar el número de veces que se usa el cupón….
Hola!! Estoy intentando solucionar este error, he modificado el archivo que indicais pero no consigo que se me acumulen dos vales de descuento en el mismo carrito…
alguien puede echarme una mano porfavor..
Muchas gracias a todos.