JotaCe Posted November 12, 2014 Share Posted November 12, 2014 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 More sharing options...
Rolige Posted November 12, 2014 Share Posted November 12, 2014 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 More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 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 More sharing options...
ventura Posted November 12, 2014 Share Posted November 12, 2014 Con reglas de compra no se pueden limitar estas a formas de pago como indicas lo mejor sería condicionar la visualizacion del modulo a la existencia de la regla de compra, esto ya sería mediante codigo Link to comment Share on other sites More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 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 More sharing options...
ventura Posted November 12, 2014 Share Posted November 12, 2014 (edited) 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 November 12, 2014 by ventura (see edit history) Link to comment Share on other sites More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 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. Link to comment Share on other sites More sharing options...
ventura Posted November 12, 2014 Share Posted November 12, 2014 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 More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 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... Link to comment Share on other sites More sharing options...
Rolige Posted November 12, 2014 Share Posted November 12, 2014 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 More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 (edited) 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 November 12, 2014 by JotaCe (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted November 12, 2014 Share Posted November 12, 2014 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 More sharing options...
ventura Posted November 12, 2014 Share Posted November 12, 2014 Como dice COTOKO tienes que introducir el codigo en el campo para que el modulo no aparezca, aunque este creado el vale sino se ingresa en el campo de resumen de compra el modulo seguirá apareciendo Link to comment Share on other sites More sharing options...
JotaCe Posted November 12, 2014 Author Share Posted November 12, 2014 ¡Funciona, muchas gracias! (Seguramente antes también habría funcionado, si hubiera metido el archivo editado en el sitio correcto... ¡lo había subido a otra cuenta! ) Gracias de nuevo Link to comment Share on other sites More sharing options...
JotaCe Posted April 15, 2015 Author Share Posted April 15, 2015 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 More sharing options...
ventura Posted April 16, 2015 Share Posted April 16, 2015 No se pueden realizar overrides de archivos .php de modulos, no es posible Link to comment Share on other sites More sharing options...
JotaCe Posted April 16, 2015 Author Share Posted April 16, 2015 ¿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 More sharing options...
ventura Posted April 16, 2015 Share Posted April 16, 2015 ¿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 More sharing options...
fjcasadop Posted April 16, 2015 Share Posted April 16, 2015 Muchas gracias por la información, Ventura. Link to comment Share on other sites More sharing options...
Recommended Posts