Leid Posted June 28, 2014 Share Posted June 28, 2014 (edited) 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 June 29, 2014 by Leid (see edit history) Link to comment Share on other sites More sharing options...
Leid Posted June 29, 2014 Author Share Posted June 29, 2014 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 More sharing options...
Leid Posted June 29, 2014 Author Share Posted June 29, 2014 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 More sharing options...
Leid Posted June 29, 2014 Author Share Posted June 29, 2014 Solucionado en el foro ingles! Link to comment Share on other sites More sharing options...
nuevoenesto Posted June 29, 2014 Share Posted June 29, 2014 Hola ¿puedes indicarme la solución? por favor Link to comment Share on other sites More sharing options...
Leid Posted June 29, 2014 Author Share Posted June 29, 2014 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 Link to comment Share on other sites More sharing options...
nuevoenesto Posted June 30, 2014 Share Posted June 30, 2014 Leid, Muchas gracias! SAludos j- Link to comment Share on other sites More sharing options...
Recommended Posts