Aplicar un sólo cupón de descuento en Prestashop automáticamente

Descuentos-1

Una funcionalidad muy potente de Prestashop son las denominadas Reglas de Descuento (Cart Rules en inglés).
Estas nos permiten definir descuentos o cupones y configurar el número de veces que se puede utilizar, las fechas de validez e incluso si solamente son aplicables a un cliente en concreto.

Los códigos de cupón se pueden emplear en el proceso de pago del carrito. Habitualmente tenemos un apartado en el mismo que nos permite introducir el código de cupón para incorporar el descuento a nuestra compra.

CarritoCupon

El comportamiento por defecto de Prestashop consiste en permitir añadir más de un código de descuento a la compra. Si bien no es un mal sistema si no tenemos cuidado podemos llegar a perder dinero ofreciendo descuentos que reduzcan el preció de los artículos que vendamos por debajo de nuestro margen de beneficio.

Desde la configuración de las condiciones para aplicar el descuento podemos controlar este comportamiento marcando la opción Compatibilidad con otras reglas de compra pero no es muy intuitivo.

Descuentos-Compatibilidad

Al marcar la opción aparecen dos listas para seleccionar cuales de los otros descuentos son compatibles y combinables con el descuento que estamos creando.

Como vemos por defecto todas las reglas son combinables. Si quisiéramos crear un cupón que no se pudiera combinar con ningún otro deberíamos marcar todos los descuentos de Reglas de compra combinables y pulsar en Borrar.

Dejando de lado el arduo trabajo que debemos hacer cada vez que creamos un cupón de este tipo queda el problema que cada vez que generamos un cupón nuevo debemos editar todos los otros que no queremos que sean compatibles para añadirlo.

En nuestro caso, el cliente no quería que ningún cupón fuese nunca compatible con ningún otro.

Como ya aprendimos en el post para evitar crear pedidos múltiples para una sola compra nos tocará modificar las clases de Prestashop mediante los overrides e implementar la funcionalidad que deseamos.

Esta vez el objetivo pasa por modificar la función checkValidity() de la clase CartRule.php

[php]
public function checkValidity(Context $context, $alreadyInCart = false, $display_error = true)
{
$value = parent::checkValidity($context, $alreadyInCart, $display_error );

$error = false;
if ( $display_error && !is_null($value) ) { $error = true; }
if ( !$display_error && $value === false ) { $error = true; }

if ( !$error )
{
$otherCartRules = $context->cart->getCartRules();
if (count($otherCartRules))
foreach ($otherCartRules as $otherCartRule)
{
if ($otherCartRule[‘id_cart_rule’] == $this->id && !$alreadyInCart)
return (!$display_error) ? false : Tools::displayError(‘This voucher is already in your cart’);

if ($otherCartRule[‘id_cart_rule’] != $this->id)
{
$cart_rule = new CartRule((int)$otherCartRule[‘id_cart_rule’], $context->cart->id_lang);
return (!$display_error) ? false : Tools::displayError(‘This voucher is not combinable with an other voucher already in your cart:’);
}
}
}

return $value;
}
[/php]

Primero de todo llamamos a la función original de Prestashop para que haga todas las comprobaciones actuales y si no da error entonces ejecutamos nuestra propia regla. En caso de encontrar cupones de descuento simplemente mostramos el mensaje de que el cupón no es combinable con ninguno más.

Si necesitáramos tener cupones combinables y cupones sin combinar deberíamos ampliar esta comprobación para adaptarla a esa necesidad concreta, pero esto ya formará parte de otra entrada en el futuro.


Publicado

en

por

  • Los diez negritos

    “Los Diez Negritos“, una cautivante novela de misterio escrita por Agatha Christie, es un tour de force en el género del suspense. Publicada en 1939 bajo el título original “And Then There Were None”, esta obra maestra sumerge a los lectores en una trama inquietante, donde cada página está tejida con intriga y giros sorprendentes.…

  • Sherlock Holmes – El sabueso de los Baskerville

    “El Sabueso de los Baskerville” es una obra maestra del misterio escrita por Sir Arthur Conan Doyle, y es parte de la serie de Sherlock Holmes. La novela nos transporta a los páramos sombríos y misteriosos de Dartmoor, donde la leyenda de la familia Baskerville se entrelaza con un enigma de asesinato y oscuridad. En…

  • El juego de Ender

    “El Juego de Ender” es una novela de ciencia ficción escrita por Orson Scott Card que se ha convertido en un referente del género. La historia nos sumerge en un futuro distópico, donde la humanidad se encuentra en una constante lucha contra una raza alienígena conocida como los Insectores. La trama sigue a Andrew “Ender”…

  • Wonder – La lección de August

    Su cara lo hace distinto y él solo quiere ser uno más. Camina siempre mirando al suelo, la cabeza gacha y el flequillo tratando en vano de esconder su rostro, pero, aun así, es objeto de miradas furtivas, susurros ahogados y codazos de asombro. August sale poco, su vida transcurre entre las acogedoras paredes de…

  • 20.000 leguas de viaje submarino

    “Veinte Mil Leguas de Viaje Submarino” fue originalmente publicada en Francia en 1869 por el autor Jules Verne, cuyo nombre solemos castellanizar como Julio Verne. Esta obra se clasifica principalmente como una novela de aventuras, aunque contiene matices de ciencia ficción y toques de fantasía. Con el paso del tiempo, la dimensión de ciencia ficción…

  • Obsidiana, sangre y oro

    En el año 2011, Érik de Diego se encuentra sumido en una profunda crisis existencial que lo impulsa a tomar una drástica decisión: huir y tomarse un tiempo para reflexionar sobre su vida. Su primer destino es Guatemala, un país que poco a poco lo cautiva y lo envuelve en su rica historia, conflictos, desigualdades…

Comments

2 responses to “Aplicar un sólo cupón de descuento en Prestashop automáticamente”

  1. gioldany Avatar
    gioldany

    Saludos,

    Funciona para ps 1.6 ? porque lo he intentado, y me sale patalla en blanco.

    1. David Garcia Avatar

      Hola, la pantalla en blanco normalmente significa que se ha producido un error 500. Deberias mirar en el error.log de tu servidor web. Ahi aparecera mas informacion.

Leave a Reply

Your email address will not be published. Required fields are marked *