Jump to content

Ayuda con transporte de servicios online... [SOLUCIONADO]


Recommended Posts

Buenos dias.

 

Estoy montando una tienda online con productos virtuales y productos físicos para enviar. El tema es que quiero ofrecer un envío gratuito de productos a partir de 50 € pero que no se tengan en cuenta los productos online.

 

Actualmente los productos virtuales los deja comprar sin transporte,pero si se añade otros productos físicos,prestashop tiene en cuenta el total de ambos a la hora de elegir transportista.

 

Se le ocurre a alguien alguna solución? 

 

Gracias de antemano 

Edited by Leid (see edit history)
Link to comment
Share on other sites

Me oriento un poco mas y a ver si alguien me puede echar un cable,he llegado a la conclusión que para hacer esto debo modificar el método de calculo de los transportistas para que se haga: en función del precio total pero excluyendo los productos virtuales.

 

Indagando solito he llegado al archivo carrier.php de la carpeta classes que define la constante de SHIPPING_METHOD_PRICE 

asique es aqui donde he de modificar para que cuando sume el precio total del carrito saltandose los productos que tienen  en la tabla ps_producto el is_virtual = 1 (es decir es virtual).

 

Voy a seguir urgando,pero si alguien sabe de programación en php, agradecería que me echara un cable.

 

Un saludo

Link to comment
Share on other sites

Creo que tengo que editar esta función para que tenga en cuenta lo dicho

 

public function getDeliveryPriceByPrice($order_total, $id_zone, $id_currency = null)
	{
		$cache_key = $this->id.'_'.$order_total.'_'.$id_zone.'_'.$id_currency;
		if (!isset(self::$price_by_price[$cache_key]))
		{
			if (!empty($id_currency))
				$order_total = Tools::convertPrice($order_total, $id_currency, false);

			$sql = 'SELECT d.`price`
					FROM `'._DB_PREFIX_.'delivery` d
					LEFT JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price`
					WHERE d.`id_zone` = '.(int)$id_zone.'
						AND '.(float)$order_total.' >= r.`delimiter1`
						AND '.(float)$order_total.' < r.`delimiter2`
						AND d.`id_carrier` = '.(int)$this->id.'
						'.Carrier::sqlDeliveryRangeShop('range_price').'
					ORDER BY r.`delimiter1` ASC';
			$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
			if (!isset($result['price']))
				self::$price_by_price[$cache_key] = $this->getMaxDeliveryPriceByPrice($id_zone);
			else
				self::$price_by_price[$cache_key] = $result['price'];
		}
		return self::$price_by_price[$cache_key];
	}
Link to comment
Share on other sites

He hecho este cambio al archivo cart.php de la carpeta class

$orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false);
if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0)
{
Cache::store($cache_id, $shipping_cost);
return $shipping_cost;
}

he cambiado Cart::BOTH_WITHOUT_SHIPPING por ONLY_PHYSICAL_PRODUCTS_WITHOUT_SHIPPING y funciona  :D

Link to comment
Share on other sites

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