Eliminar pago contrareembolso en productos virtuales

Comunidad PrestaShop orgullosamente patrocinada por el hosting PrestaShop de FactoriaDigital con soporte y servidores en España.

lastapril

Experto en Prestashop
Miembro del equipo
Hola a todos, estoy intentando que en los productos virtuales no se pueda utilizar el pago contrareembolso, pero no encunetro como hacerlo,Alguien lo ha hecho?
Version de prestashop 1.6
Un saludo
Carlos
 

Josraso

Lo cortes no quita lo valiente.
Miembro del equipo
Podrias usar este modulo http://www.alabazweb.com/es/modulos-para-el-pago-prestashop/24-modulo-pago-contrareembolso-con-recargo-y-limitacion-a-productos-y-categorias.html o bien puedes jugar con el transporte los rangos y asignar la forma de pago segun el transportista usando este modulo http://addonspresta.com/en/free-modules/48-ship-to-pay.html
 

ventura

Aprendiz de Prestashop
Miembro del equipo
Se puede hacer mediante codigo editando el archivo

Insertar CODE, HTML o PHP:
cashondelivery.php
Busca esta parte

Insertar CODE, HTML o PHP:
public function hookPayment($params)
Y añade mas abajo esto

Insertar CODE, HTML o PHP:
foreach ($params['cart']->getProducts() AS $product)

        if ($product['is_virtual'] == 1)
          
                return false;

De esta manera el modulo no se visualizará cuando en el carrito haya un producto virtual
 

lastapril

Experto en Prestashop
Miembro del equipo
Hola a los dos, Jose, lo de los modulos lo habia pensado pero al ser un producto virtual no tiene transportista, voy a probar la solucion de Ventura y os cuento
 

lastapril

Experto en Prestashop
Miembro del equipo
Lo he dejado asi pero sigue apareciendo

Insertar CODE, HTML o PHP:
public function hookPaymentReturn($params)

	{

		if (!$this->active)

			return ;



		return $this->display(__FILE__, 'confirmation.tpl');

              foreach ($params['cart']->getProducts() AS $product)

        if ($product['is_virtual'] == 1)
          
                return false;

	}
 

Josraso

Lo cortes no quita lo valiente.
Miembro del equipo
lastapril dijo:
Hola a los dos, Jose, lo de los modulos lo habia pensado pero al ser un producto virtual no tiene transportista, voy a probar la solucion de Ventura y os cuento
Ostras siiii no me habia fijado en ese detalle....
 

ventura

Aprendiz de Prestashop
Miembro del equipo
Pon el codigo que te he puesto en

Insertar CODE, HTML o PHP:
hookPayment
 

lastapril

Experto en Prestashop
Miembro del equipo
Ahora a quedado asi, pero tampoco funciona
Insertar CODE, HTML o PHP:
function hookPayment($params)

{

		global $smarty;

		$currency = $this->getCurrency();

 		$smarty->assign(array(

            'this_path' => $this->_path,

			'fee' => number_format($this->getCost($params), 2, '.', ''),

            'this_path_ssl' => (Configuration::get('PS_SSL_ENABLED') ? 'https://' : 'http://').htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'modules/'.$this->name.'/'

           ));

		return $this->display(__FILE__, 'payment.tpl');

foreach ($params['cart']->getProducts() AS $product)

        if ($product['is_virtual'] == 1)
          
                return false;

}
 

ventura

Aprendiz de Prestashop
Miembro del equipo
Lo he probado en 1.6 y funciona perfectamente

Esta es la funcion del hook completa
Insertar CODE, HTML o PHP:
		public function hookPayment($params)
	{
		if (!$this->active)
			return ;
	
	foreach ($params['cart']->getProducts() AS $product)

        if ($product['is_virtual'] == 1)
          
                return ;	

		global $smarty;

		// Check if cart has product download
		$i = 0;
		$products = $params['cart']->getProducts();
		$total = count($products);
		foreach ($products as $key => $product)
		{
			$pd = ProductDownload::getIdFromIdProduct((int)($product['id_product']));
			if ($pd AND Validate::isUnsignedInt($pd))
				$i++;
		}

		if ($i && $total == $i)
			return false;		

		$smarty->assign(array(
			'this_path' => $this->_path, //keep for retro compat
			'this_path_cod' => $this->_path,
			'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
		));
		return $this->display(__FILE__, 'payment.tpl');
	}
 

roquerr

Aprendiz de Prestashop
Hola a todos. Soy roquer. Perdonad que reabra el tema. Preo considero que es muy necesitado y de seguro util. Es la primera vez que paso por aqui. Y de antemano os doy las gracias por el trabajo de ayuda que prestais. Yo tengo una tienda on-line y he tenido ese mismo problema pero con los productos de una categoria en concreto ( He enviado el producto contra reembolso por valor de 235€ y no lo han recojido). La rezon es que ese producto si se envia y no es recepcionado por el cliente, aunque me sea devuelto tengo que tirarlo a causa de su periocidad. Y al ver la sulucion que le dais al compañero Lastapril, he pensado si esa misma solucion se podria aplicar a una categoria/as de la tienda.
Logicamente para mi seria impensable realizar o modificar ese codigo que aparece mas arriba, no tengo conocimientos de programacion, fuera de 4 cosillas de css y con ayuda de terceros.
¿Si es posible la solucion, seriais tan amables de añadir o modificar ese codigo para este proposito?
De seguro que aparte de mi habra muchisima gente que lo agradeceria, ya que buscado sobre el tema he visto muchisimos post que requieren esta funcion. he encontrado algun modulo pero siempre es de pago, y, tal y como esta la cosa hoy la tienda no da como para ir comprando modulos, aunque sea bajo el precio.
Muchisimas gracias.
 
Última edición:
Arriba