Musicmind Posted October 20, 2016 Share Posted October 20, 2016 Buenas a todos. Es un tema que seguro se ha comentado anteriormente y he buscado y remirado antes de preguntar por aquí, pero no doy con la solución, además veo que hay algún que otro post con este tema sin solución. Necesito restringir las formas de pago por zonas y tampoco encuentro ningún módulo al respecto. Esto es para que por ejemplo clientes de la zona Canarias, Ceuta y Melilla o Baleares no puedan elegir contrareembolso, o para que los clientes de Europa solo puedan pagar por tarjeta o Paypal y no transferencia. Le he dado mil vueltas a la configuración y lo que no quiero es tener que crear paises como España Canarias, España Ceuta, etc, etc... Muchas gracias por vuestro tiempo y un saludo a la comunidad. 2 Link to comment Share on other sites More sharing options...
Xavi K Posted November 11, 2016 Share Posted November 11, 2016 Me apunto ... llevo varios días buscando y no encuentro, ayer abrí post sobre ello ... no me gusta la solución de rebautizar paises. Avisa si encuentras algo! Link to comment Share on other sites More sharing options...
ventura Posted November 11, 2016 Share Posted November 11, 2016 Se puede hacer mediante modificación de código en el archivo .php de cada modulo de método de pago que se quiera restringir, haría falta incluir en el hook public function hookPayment($params) este código que excluirá la aparición del modulo por ejemplo en la zona con id 9 $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); if ($id_zone == 9) return; 1 Link to comment Share on other sites More sharing options...
w3bsolutions Posted November 13, 2016 Share Posted November 13, 2016 Si puedes configurar un transportista para cada zona, podrías limitar las formas de pago disponibles para cada transportista con este módulo: http://addons.prestashop.com/en/16851-payment-restriction-by-carrier.html Link to comment Share on other sites More sharing options...
Xavi K Posted November 14, 2016 Share Posted November 14, 2016 Se puede hacer mediante modificación de código en el archivo .php de cada modulo de método de pago que se quiera restringir, haría falta incluir en el hook public function hookPayment($params) este código que excluirá la aparición del modulo por ejemplo en la zona con id 9 $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); if ($id_zone == 9) return; Con esto bastaría?? Link to comment Share on other sites More sharing options...
ventura Posted November 14, 2016 Share Posted November 14, 2016 Con esto bastaría?? Si, en cada modulo que se quiera excluir 1 Link to comment Share on other sites More sharing options...
Xavi K Posted November 14, 2016 Share Posted November 14, 2016 Si, en cada modulo que se quiera excluir Buah, a ver si lo pruebo y te digo ... parece muy fàcil ....te pido mucho si te pido que desgranes esta línea un poquito más? $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); Muchas gracias por el aporte e interés! Link to comment Share on other sites More sharing options...
Xavi K Posted November 14, 2016 Share Posted November 14, 2016 Buah, a ver si lo pruebo y te digo ... parece muy fàcil ....te pido mucho si te pido que desgranes esta línea un poquito más? $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); Muchas gracias por el aporte e interés! Dándole vueltas me falta un punto para sólo saber si esa zona está activa .... Quizás la solución sería dejar una Zona con las provincias a las que quieres mostrar ese módulo de pago en concreto (en mi caso pagPorTelefono), ¿cómo puedo preguntar si la zona que tengo en $id_zone mediante tu código, está activa? porque si no está activa entonces puedo lanzar la forma de pago pagoPorTelefono. Muchas gracias! Link to comment Share on other sites More sharing options...
ventura Posted November 14, 2016 Share Posted November 14, 2016 Buah, a ver si lo pruebo y te digo ... parece muy fàcil ....te pido mucho si te pido que desgranes esta línea un poquito más? $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); Muchas gracias por el aporte e interés! Con este codigo accedemos a la función de la clase AddressgetZoneById , que detecta la id de la zona a la que corresponde una direccion en funcion del parametro $id_address, parámetro que en este caso se le asigna el corresponde a la id de la dirección de entrega, incluida en la clase Cart, en el carrito de compra 1 Link to comment Share on other sites More sharing options...
Xavi K Posted November 14, 2016 Share Posted November 14, 2016 Con este codigo accedemos a la función de la clase AddressgetZoneById , que detecta la id de la zona a la que corresponde una direccion en funcion del parametro $id_address, parámetro que en este caso se le asigna el corresponde a la id de la dirección de entrega, incluida en la clase Cart, en el carrito de compra Y como puedo saber si ESA zona está activa o no? Link to comment Share on other sites More sharing options...
ventura Posted November 14, 2016 Share Posted November 14, 2016 Al codigo anterior le añades: $zone = new Zone($id_zone); Y utilizas $zone->active es un bolean que te dara 1 o 0 1 Link to comment Share on other sites More sharing options...
Xavi K Posted November 15, 2016 Share Posted November 15, 2016 Al codigo anterior le añades: $zone = new Zone($id_zone); Y utilizas $zone->active es un bolean que te dara 1 o 0 Muchísimas gracias ... pruebo y comento resultados! Link to comment Share on other sites More sharing options...
Xavi K Posted November 15, 2016 Share Posted November 15, 2016 Muchísimas gracias ... pruebo y comento resultados! Bueno ... pues me hace efectos raros con lo que no puedo ir por ahí ... además si no activo la zona no me sale transportista y no llego a los métodos de pago ... Podría tener siempre un transportista siempre activado "recogida en almacén" y luego tener zonas con algún nombre especial "Francia OUT" o "España OUT" y si el NOMBRE de la zona a enviar contine la palabra "OUT" activar o no la forma de pago ... luego la pregunta es ¿Cómo podría saber desde el módulo de pago si el nombre de la zona a la que pertence la dirección de envio contiene una subcadena tipo OUT? Buah! vaya tela Gracias 1000! Link to comment Share on other sites More sharing options...
ventura Posted November 15, 2016 Share Posted November 15, 2016 Algo asi if (strpos($zone->name , 'ESTE_NOMBRE_DE_ZONA') !== false) ...... 1 Link to comment Share on other sites More sharing options...
Xavi K Posted November 15, 2016 Share Posted November 15, 2016 Algo asi if (strpos($zone->name , 'ESTE_NOMBRE_DE_ZONA') !== false) ...... Gracias una vez más ... pruebo y comento ! Link to comment Share on other sites More sharing options...
Xavi K Posted November 15, 2016 Share Posted November 15, 2016 Pues si, la has clavado ... ahora si ... Me faltaría añadir el código para cada forma de pago de las que tengo ... GRACIAS DE NUEVO!!! Link to comment Share on other sites More sharing options...
Xavi K Posted November 28, 2016 Share Posted November 28, 2016 Gracias una vez más ... pruebo y comento ! Algo asi if (strpos($zone->name , 'ESTE_NOMBRE_DE_ZONA') !== false) ...... Buenas !! por el momento la solución de activar las formas de pago con tu ayuda ha sido ideal ... encajando con esto tengo una consulta que quizás debería abrir en otro hilo, si es así pido disculpas de antemano .... ¿Cómo de saber si la tienda, por lo que sea (geoiplocalizacion) está para ese cliente en modo catálogo? (con precios y botón compra deshabilitados) Muchísimas gracias Saludos Link to comment Share on other sites More sharing options...
ventura Posted November 28, 2016 Share Posted November 28, 2016 Si, lo mejor es que abras un hilo nuevo, ya que la consulta que planteas ahora poco tiene que ver con la duda planteada originalmente en este hilo. Así sera mas facil de encontrar y tambien facilitara la organizacion del foro. Gracias. Un saludo Link to comment Share on other sites More sharing options...
rdngrafico Posted February 15, 2017 Share Posted February 15, 2017 Se puede hacer mediante modificación de código en el archivo .php de cada modulo de método de pago que se quiera restringir, haría falta incluir en el hook public function hookPayment($params) este código que excluirá la aparición del modulo por ejemplo en la zona con id 9 $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); if ($id_zone == 9) return; Respecto a este código ¿como se haría para indicar varias zonas? Link to comment Share on other sites More sharing options...
ventura Posted February 15, 2017 Share Posted February 15, 2017 Respecto a este código ¿como se haría para indicar varias zonas? Se puede hacer asi $id_zone = Address::getZoneById((int)$this->context->cart->id_address_delivery); if (in_array($id_zone, array('9', '10', '11'))) return; Link to comment Share on other sites More sharing options...
rdngrafico Posted February 20, 2017 Share Posted February 20, 2017 Perfecto. Gracias Ventura Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now