Jump to content

(Solucionado) Metodo de pago segun transportista


andres33

Recommended Posts

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 by andres33 (see edit history)
Link to comment
Share on other sites

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

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

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

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

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 by andres33 (see edit history)
  • Like 1
Link to comment
Share on other sites

 

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

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

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

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

  • 5 months later...

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

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