andres33 Posted June 20, 2016 Share Posted June 20, 2016 (edited) Hola buenos dias. Tengo prestashop 1.6.1.6 Quiero poner metodos de pago segun el transportista que el cliente elija. Tengo 2 transportistas. 1- Recogida en tienda. 2- Envio a domicilio. Quiero que si se elije el transportista RECOGIDA EN TIENDA solo aparezca el metodo de pago PAGO EN TIENDA y si se elije el transportista ENVIO A DOMICILIO aparezaca los otros metodos de pago. He visto este comentario del usuario VENTURA pero no se como hacerlo. https://www.prestashop.com/forums/topic/445666-solucionado-no-me-funciona-ship2pay-ni-payments-2-carriers/?p=2067296 Gracias. Edited June 25, 2016 by andres33 (see edit history) Link to comment Share on other sites More sharing options...
jesa Posted June 20, 2016 Share Posted June 20, 2016 Mira este post Si tienes una tienda en la 1.4 o 1.5 puede valerte. Sino puedes hacer lo que dice Ventura, si no tienes conocimientos de programación será complicado que lo consigas. La idea es que en el payment de cada método de pago hagas una comprobación del transportista seleccionado para que lo muestre o no. Link to comment Share on other sites More sharing options...
andres33 Posted June 20, 2016 Author Share Posted June 20, 2016 Mira este post Si tienes una tienda en la 1.4 o 1.5 puede valerte. Sino puedes hacer lo que dice Ventura, si no tienes conocimientos de programación será complicado que lo consigas. La idea es que en el payment de cada método de pago hagas una comprobación del transportista seleccionado para que lo muestre o no. Gracias por responder. Aclarar que el modulo de pago en tienda es una modificacion del modulo pago con cheque. ¿Es esta la ruta donde hay que editar el codico? dominio.com/themes/mitheme/modules/cheque/views/templates/hook/payment.tpl En payment.tpl tengo este codigo. <div class="row"> <div class="col-xs-12"> <p class="payment_module"> <a class="cheque" href="{$link->getModuleLink('cheque', 'payment', [], true)|escape:'html':'UTF-8'}" title="{l s='Pay by check.' mod='cheque'}"> {l s='Pay by check' mod='cheque'} <span>{l s='(order processing will be longer)' mod='cheque'}</span> </a> </p> </div> </div> ¿Alguien puede ayudarme para que el metodo de pago en tienda solo aparezca si se elije recogida en tienda? Gracias. Link to comment Share on other sites More sharing options...
andres33 Posted June 21, 2016 Author Share Posted June 21, 2016 Por lo que he podido saber tengo que editar esta ruta. Aclarar que el modulo de pago en tienda es una modificacion del modulo pago con cheque. /modules/cheque/cheque.php En cheque.php tengo esto. public function hookPayment($params) { if (!$this->active) return; if (!$this->checkCurrency($params['cart'])) return; $this->smarty->assign(array( 'this_path' => $this->_path, 'this_path_cheque' => $this->_path, 'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/' )); return $this->display(__FILE__, 'payment.tpl'); ¿Alguien puede ayudarme para que el metodo de pago en tienda solo aparezca si se elije recogida en tienda? Link to comment Share on other sites More sharing options...
Rolige Posted June 22, 2016 Share Posted June 22, 2016 Efectivamente podrias añadirlo donde comentas, solo hay que agregar la condicion con un codigo similar a este: public function hookPayment($params) { if (!$this->active) return ; // Condicion para asociarlo al transportista if (isset($params['cart']->id_carrier) && $params['cart']->id_carrier != 5) return; // Resto del codigo.... Lo que debes hacer es cambiar el id_carrier != 5 por el id del transportista que deseas relacionarlo. OJO, el id de transportista cambia cada vez que hacer un cambio/ajuste en el, debes tener cuidado con eso. Lo ideal seria compararlo con el id_reference, pero ese creo que no se incluye en el context. Link to comment Share on other sites More sharing options...
ventura Posted June 22, 2016 Share Posted June 22, 2016 Hay o había algún modulo para asociar transportistas con metodos de pago https://www.prestashop.com/forums/topic/197517-module-payments2carriers-based-on-ship2pay-for-15x/ Link to comment Share on other sites More sharing options...
andres33 Posted June 25, 2016 Author Share Posted June 25, 2016 (edited) Efectivamente podrias añadirlo donde comentas, solo hay que agregar la condicion con un codigo similar a este: public function hookPayment($params) { if (!$this->active) return ; // Condicion para asociarlo al transportista if (isset($params['cart']->id_carrier) && $params['cart']->id_carrier != 5) return; // Resto del codigo.... Lo que debes hacer es cambiar el id_carrier != 5 por el id del transportista que deseas relacionarlo. OJO, el id de transportista cambia cada vez que hacer un cambio/ajuste en el, debes tener cuidado con eso. Lo ideal seria compararlo con el id_reference, pero ese creo que no se incluye en el context. Muchas gracias por responder, funciona perfectamente, una pena que no funcione con el id_reference, cada vez que se edite el transportista habrá que cambiar el id_carrier del cogido que hemos puesto. Con este codigo, el metodo de pago pago en tienda solo aparecera al ejegir el transportista con ID 5 (en mi caso recogida en tienda), no aparecera en otros transportistas el metodo de pago pago en tienda. if (isset($params['cart']->id_carrier) && $params['cart']->id_carrier != 5) return; Haciendo un pequeño cambio a ese codigo podemos hacer que un metodo de pago NO aparezca en un transportista. En mi caso por ejemplo, NO quiero que aparezca el metodo de pago pago por transferencia bancaria al elegir el transportista Recogida en tienda, para hacer esto, hay que editar el archivo bankwire.php de esta manera. public function hookPayment($params) { if (!$this->active) return ; // Condicion para asociarlo al transportista if (isset($params['cart']->id_carrier) && $params['cart']->id_carrier == 5) return; En este ultimo caso solo hemos cambiado una caso respecto al primer codigo, donde ponia, id_carrier != 5 hemos cambiado por, id_carrier == 5 Edited June 25, 2016 by andres33 (see edit history) 1 Link to comment Share on other sites More sharing options...
ventura Posted June 26, 2016 Share Posted June 26, 2016 una pena que no funcione con el id_reference, cada vez que se edite el transportista habrá que cambiar el id_carrier del cogido que hemos puesto. $carrier = new Carrier($params['cart']->id_carrier); if ($carrier->id_reference == '2') return; Link to comment Share on other sites More sharing options...
andres33 Posted June 26, 2016 Author Share Posted June 26, 2016 ventura, ese nuevo codigo no me funciona, si pongo ese codigo, el metodo de pago pago en tienda me aparece en los 2 transportistas que tengo y quiero que solo aparezca al elegir el transportista Recogida en tienda. Link to comment Share on other sites More sharing options...
ventura Posted June 26, 2016 Share Posted June 26, 2016 ventura, ese nuevo codigo no me funciona, si pongo ese codigo, el metodo de pago pago en tienda me aparece en los 2 transportistas que tengo y quiero que solo aparezca al elegir el transportista Recogida en tienda. El codigo era a modo de ejemplo. Tendrás que asignar en el condicional el id_reference que corresponda al transportista que quieres excluir, por defecto el id_reference del transportista Recogida en tienda es el 1. Puedes revisar como estan asociados revisando la tabla ps_carrier Link to comment Share on other sites More sharing options...
andres33 Posted June 26, 2016 Author Share Posted June 26, 2016 Ventura, ahora si, el numero del id_reference lo tenia mal puesto. En el Cpanel en phpMy Admin en la base de datos he revisado la tabla ps_carrier y he visto el numero del id_reference, en tu codigo he puesto ese numero y ahora funciona perfectamente. Muchas gracias a ti y a todos los que me habeis ayudado. Link to comment Share on other sites More sharing options...
ventura Posted June 26, 2016 Share Posted June 26, 2016 De nada. Me alegro de que te haya servido de ayuda. Link to comment Share on other sites More sharing options...
lullaby11 Posted November 30, 2016 Share Posted November 30, 2016 Para utilizar el id_reference te puede servir esto: if (isset($params['cart']->id_carrier)){ $id_carrier = $params['cart']->id_carrier; $carrier = new Carrier($id_carrier); if(isset($carrier->id_reference)&&$carrier->id_reference==21){ return; } } Link to comment Share on other sites More sharing options...
Recommended Posts