Jump to content

¿Algún modo de condicionar vale descuento a forma de pago?


Recommended Posts

Quisiera que ciertos vales descuento sólo sean aplicables si se seleccionan determinadas formas de pago.

No veo esta opción configurable dentro de las condiciones del vale descuento, pero no sé si a alguien se le habrá ocurrido algún truco para poder hacerlo.

 

¡Gracias!

Link to comment
Share on other sites

El problema es que la forma de pago se elige después de que el cliente pueda ingresar su vale de descuento y supongo que tu idea sería indicarle al cliente cuando ingresa el código si se puede aplicar o no dependiendo de el método de pago.

Link to comment
Share on other sites

Sí, pero también podría ser al revés: que una vez metido ese cupón, le desactive las formas de pago no compatibles.

 

O tal vez con algún tipo de regla de compra... no sé, mi duda es esa, si existe alguna solución aunque sea "dando un rodeo"

Link to comment
Share on other sites

Gracias, Ventura.

 

¿Y sería muy complicado ese código? No me da ningún reparo toquetear los archivos que sean necesarios, pero necesitaría una guía paso a paso, ya que estoy verde en temas de php y demás. No sé si es viable explicarlo aquí en un par de líneas o se trata de un desarrollo complejo...

Link to comment
Share on other sites

Tendrias que editar el archivo .php del modulo que quieres que desaparezca cuando se introduzca el codigo del vale de descuento

añadiendo en el

public function hookPayment($params)

Esta parte

$cart_rules = $this->context->cart->getCartRules();
$this->context->smarty->assign(array(
'cart_rules' => $cart_rules,
));
if ($cart_rules) return false;
Edited by ventura (see edit history)
Link to comment
Share on other sites

Parece fácil, lo probaré esta tarde a ver qué tal  ;)

 

Entiendo que esto desactivaría el módulo en cuestión cualquiera que sea el vale descuento empleado, ¿no? Es decir, que no discrimina entre un vale u otro.

 

 

Se podría hacer lo condicionar el vale según el nombre o el id, asi en principio excluiria el metodo de pago para todos los vales

Link to comment
Share on other sites

Realmente creo que en este momento me vale así (aunque aún no he podido probarlo), pero si supone mucha molestia, te agradecería que me indicaras cómo hacerlo condicionándolo a unos códigos o IDs de vales determinados. Nunca se sabe si más adelante podría serme útil a mi o a algún otro que lea este hilo...  :mellow:

Link to comment
Share on other sites

Podrias hacerlo evalueando todos los codigos añadidos al carrito, de la siguiente manera:

$cart_rules = $this->context->cart->getCartRules();
foreach ($cart_rules as $cart_rule) {
	switch ($cart_rule['id_cart_rule']) {
		case  1: return false; break;
		case 18: return false; break;
		case 22: return false; break;
	}
}

Donde 1, 18 y 22 sons los ids de los vouchers.

 

 

Si quicieras hacerlo por el nombre del voucher, seria similar:

$cart_rules = $this->context->cart->getCartRules();
foreach ($cart_rules as $cart_rule) {
	switch ($cart_rule['code']) {
		case '9L69DSQW': return false; break;
		case 'S74FGS63': return false; break;
		case '2SNE734H': return false; break;
	}
}
Link to comment
Share on other sites

Muchas gracias a ambos, Cotoko y Ventura, por tan buena información.  ;)
 
No obstante, acabo de probarlo (de momento la primera versión, la general para cualquier descuento) y no funciona... Sigue apareciendo el módulo correspondiente a Paypal (que es lo que quiero anular, como imaginaréis) y si lo clicas, vas a Paypal...
 
He probado a recompilar, pero nada...
 
El archivo que he editado, de los muchos .php que hay dentro del módulo Paypal, es el paypal.php
 
He añadido las líneas correspondientes al principio del bloque "public function hookPayment($params)". 
Ha quedado así:
 
 

public function hookPayment($params)
{
$cart_rules = $this->context->cart->getCartRules();
$this->context->smarty->assign(array(
'cart_rules' => $cart_rules,
));
if ($cart_rules) return false;
 
if (!$this->active)
return;
 
$use_mobile = $this->useMobile();
.....
Edited by JotaCe (see edit history)
Link to comment
Share on other sites

No es necesario tanto codigo, el ejemplo que indicas solo revisa si hay codigos agregados al carrito, pero como lo estas haciendo desde php no necesitas agregar la variable a smarty, por ejemplo para el modulo paypal puedes agregar el siguiente codigo a la funcion public function hookPayment($params):

public function hookPayment($params)
{
    if ($this->context->cart->getCartRules())
        return;
    
    // Continuar con el dodigo //

OJO: Si no tienes añadido ningun voucher al carrito, entonces aparecera.

Link to comment
Share on other sites

  • 5 months later...

Aunque hace ya tiempo de esta consulta, la "resucito" para refinar el método, a ver si me podéis ayudar. En su día toqué el php (paypal.php) para evitar que el módulo se active cuando se han elegido ciertos vales descuento. Para eso, después de:

 

public function hookPayment($params)
{
 
añadí el siguiente código:
 
$cart_rules = $this->context->cart->getCartRules();
foreach ($cart_rules as $cart_rule) {
switch ($cart_rule['code']) {
case 'NOMBREVALE': return false; break;
}
}

 

Esto funciona, el caso es que cada vez que se actualiza el módulo de paypal, tengo que volver a editar el php. Para evitarlo, quiero poner un override, pero desconozco cómo hacerlo. ¿Alguien sería tan amable de indicarme cuál sería el contenido exacto del archivo que tendría que meter en override? Porque entiendo que meter el paypal.php entero sería matar moscas a cañonazos, y que bastaría con meter la parte de código que quiero añadir, pero no sé qué poner de "encabezamiento" y "final" a ese código en el archivo del override...

Link to comment
Share on other sites

¿Ah, no? Vaya... ¿Tampoco usando la ruta \themes\mi tema\modules\paypal ? ¿No hay otra salida que retocar el php cada vez que haya una actualización de modulo?

 

Aparte de ser incómodo, es arriesgado, si alguna vez te despistas y se te olvida, pierdes los cambios...

Link to comment
Share on other sites

¿Ah, no? Vaya... ¿Tampoco usando la ruta \themes\mi tema\modules\paypal ? ¿No hay otra salida que retocar el php cada vez que haya una actualización de modulo?

 

Aparte de ser incómodo, es arriesgado, si alguna vez te despistas y se te olvida, pierdes los cambios...

 de esa manera solo puedes sobreescribir archivos .tpl, css o js de los modulos, php no se puede

Link to comment
Share on other sites

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